Converting APPLE-1 audio cassettes to HEX data: Help needed!

7 posts / 0 new
Last post
landonsmith's picture
Offline
Last seen: 1 day 5 hours ago
Joined: Dec 17 2025 - 14:24
Posts: 12
Converting APPLE-1 audio cassettes to HEX data: Help needed!

Hi everyone.

Whilst working on my APPLE-1 emulator, HoneyCrisp, (discussed here recently by Bobby Nijssen) 

for version 1.3.0, I had a realization---my emulator doesn't yet have the ability to load audio recordings of APPLE-1 software. Originally, in September of 2025, HoneyCrisp v1.0 had the ACI ROM fully intact and working, but not cassette emulation system to load audio data into the emulated RAM. I've been putting it off for months now, focusing on my custom file formats (.hc, .hcstate) and conventional formats usually used for the loading of Integer BASIC programs (.bas, .txt) but now, with pratically everything fleshed out, it leaves me pondering how I could accurately implement a virtual cassette emulation system (and the ACI emulation) into this upcoming HoneyCrisp release. The idea is that a user would be able to take a WAV recording of an APPLE-1 program. (like the ones hosted on the Internet Archive here,  on this internet archive page) load it into an emulated cassette recorder/player, (or something of the like) and use the ACI accordingly to load the data into, say memory addresses E000-EFFF, as one would on a replica APPLE-1 or the original hardware.

 

All that to say, quite honestly, I'm not too experienced with audio to data conversion...especially in the capacity that I want to do it in. I really need some help if possible. Anything would be greatly appriciated. HoneyCrisp's source code is available on my github, linked below if you'd like to help. 

[Also made a blog post about this issue as well, if you'd like to comment there. :-)]

The HoneyCrisp Emulator | JS APPLE-1 Emulator

Thanks,

Landon

Offline
Last seen: 16 hours 11 min ago
Joined: Feb 27 2021 - 18:59
Posts: 836
FSK

The cassette modulation is very simple FSK (frequency shift keying) where a single cycle of either a low frequency or a high frequency is recorded, to signify a single bit of data. The ACI emits a square wave, but there is limited bandwidth so it is more like a sine wave on tape. The hardware decodes the signal using a comparator (basically to detect zero crossing). By rounding the time between zero crossings into either a fast bucket or a slow bucket, you can get the stream of bits back from the audio signal. Some problems with real tape are the speed being inconsistent, dropouts or pops in the audio, etc.

If you have trouble implementing this, look at the FSK decoders in GnuRadio.

Online
Last seen: 8 min 40 sec ago
Joined: Apr 9 2021 - 04:31
Posts: 206
Did you know, you can add a
landonsmith's picture
Offline
Last seen: 1 day 5 hours ago
Joined: Dec 17 2025 - 14:24
Posts: 12
Re: Did you know, you can add a

 I did not know this! I'll be sure to do this when I release v1.3.

 

Thanks!

 

Cheers,

Landon

Online
Last seen: 8 min 40 sec ago
Joined: Apr 9 2021 - 04:31
Posts: 206
1200 Baud Archeology: Reconstructing Apple I BASIC from a Tape

I don't know if this is of any help: https://www.pagetable.com/?p=32  

I think first thing to be done MP3 needs to be decoded to WAV.

Next step would be to identify the zero line and fix the file that it lies in the middle aka remove DC offset.

After that is do some normalisation would be good in other words amplify the values to a point the waveform does not clip but usues the whole range.

Save file and use something like the decode program what does the following:

Now the signal needs to be converted back into a square wave by converting all samples above a certain value into 1, and all samples below into 0. While the threshold in the op-amp was fixed, it could be effectively manipulated by changing the output volume of the cassette player but it should be fine through the preferious operations.

Last Step woul be to measure the times between the changes.

 

For further details see link above.The Github linking does not seem to support links to external pages.

Online
Last seen: 8 min 40 sec ago
Joined: Apr 9 2021 - 04:31
Posts: 206
Here is another video your

Here is another video your data reconstruction and recovery from cassette tapes: https://www.youtube.com/watch?v=Woko_i58w4c

Offline
Last seen: 3 weeks 21 hours ago
Joined: Jun 11 2025 - 11:24
Posts: 9
You may find the information

You may find the information you need there.

https://dabeaz.blogspot.com/2010/08/using-python-to-encode-cassette.html

https://dabeaz.blogspot.com/2010/08/decoding-superboard-ii-cassette-audio.html

 

 

Log in or register to post comments