Hi,

There's another installment from Dave Beazley on his Superboard II.
This time he's decoding an audio recording from it into bytes.  (Some of
the Python may be a bit harder to follow than before.)

    Decoding Superboard II Cassette Audio Using Python 3, Two
    Generators, and a Deque
    
http://dabeaz.blogspot.com/2010/08/decoding-superboard-ii-cassette-audio.html

He uses a deque as a sliding window over the audio samples, maintaining
a count of the number of zero-crossings in the deque.  Given that the
`silence' before the data starts is the high frequency of a 1 and the
start-bit is a lower-frequency 0, when that ZC count drops low enough,
he knows the start bit sits squarely in the deque.  He can then chomp
through the following audio samples a bit's worth at a time until the
whole byte and two stop-bits are consumed before returning to the
sliding window search.

    http://en.wikipedia.org/wiki/Deque
    http://en.wikipedia.org/wiki/Zero-crossing

He provides code and WAV to download and run.  Here's the output with
cat(1) showing up the CR, NUL, ..., LF that the SII outputs as a delay
for when it has to read and process the data later.

    $ python3 kcs_decode.py osi_sample.wav | cat -A
    ^...@^@^...@^@^...@^@^...@^@^...@^@$
    ^...@^@^...@^@^...@^@^...@^@^...@^@$
     10 FOR I = 1 TO 1000...@^@^...@^@^...@^@^...@^@^...@^@$
     20 PRINT I;^...@^@^...@^@^...@^@^...@^@^...@^@$
     30 NEXT i...@^@^...@^@^...@^@^...@^@^...@^@$
     40 end...@^@^...@^@^...@^@^...@^@^...@^@$
    ok...@^@^...@^@^...@^@^...@^@^...@^@$
    $ 

I expect the next installment will be to translate a subset of Python
bytecode to 6502.  :-)

Cheers,
Ralph.


--
Next meeting:  Blandford Forum, Tuesday 2010-09-07 20:00
Meets, Mailing list, IRC, LinkedIn, ...  http://dorset.lug.org.uk/
How to Report Bugs Effectively:  http://bit.ly/4sACa

Reply via email to