Page 1 of 4
Modern Homebrew "Cassette" Data Communication
Posted: Sun Mar 13, 2022 2:25 am
by sburrow
Hey everyone! Just a general discussion here, no schematics or troubleshooting this time.
I was browsing the internet and came across this nifty thing:
http://www.scullcom.com/ZX80_Minstrel_schematic.pdf
In the top-right corner, they show the "ear" and "mic" connectors. Got me thinking: What if it is possible to use this "cassette" interface for data transfer today?
Searching the forum, I found these:
viewtopic.php?f=4&t=5297
viewtopic.php?f=4&t=82
But here is my neo-retro take on it: Instead of having real tape, use any computer or really any device that has a headphone/mic jack built in. Like an iPod or any modern smart phone or even a standard desktop computer. I once saw The 8-Bit Guy do this to send data into an old computer. He downloaded the audio file, connected the device to the ear and mic jacks, and hit play. Super easy!
I have done work in the past converting raw text data into audio form. In particular using 'sox' (what an amazing tool!). With a little C++, you can create your own music from a .txt file! The possibilities are there. Every modern device I know can play an .mp3 file without issue, and so what we have is a near-universal method to possibly transfer data between computers. Sound on for 1, sound off for 0, I don't know, just thinking "out loud" (har har).
Now, I know some of y'all will start talking about 'phase' or 'amplitude' or 'baud'. Yes, true, there are limitations to this type of data communication. But I'm just amazed as the simplicity and accessibility. I know y'all are pros, experts, and have seen it all. I'm just the new guy. But I'm also thinking about how to universally transfer this data between machines. UART's and RS-232 connectors are great and all, and many of you have been using them for years, but I have not. Just think of a homebrew 6502 solder-it-yourself kit sent to a true newbie, they wouldn't have any of the fancy setups and devices that you guys have. I don't even know if these fledglings would have access to a real computer [ minus their smartphone of course ]! They would *at least* have an internet connection to download .mp3 files and a device with a headphone jack, or a way to convert to a headphone jack. Seems like a good way to keep it simple for the noobs like me
Thoughts?
Again, just general discussion here. No specifics required.
Thanks everyone!
Chad
Re: Modern Homebrew "Cassette" Data Communication
Posted: Sun Mar 13, 2022 8:30 am
by BigEd
You certainly could do this. And if you started from absolute basics with a home-made scheme, you might eventually find yourself rediscovering some of the refinements that have been invented in the past.
What I think you will find is that the simplest possible system won't be very fast, and that's the motivation for some of the refinements.
But even the simplest possible system needs to distinguish at least two states - as you say, tone and silence is one way to do that. And then, as soon as you have two states, you get to the first challenge: how to make sense of a sequence of states, because you will surely want to turn bits into bytes.
You will probably find that you need to agree on a tempo or pacing of the bits, so the receiver can tell that a new bit is here. You need to know if a continuous tone is three ones or four ones, for example. Or if your scheme is to send short bursts of tones for the ones, you now need to know if a silence is a single zero or a pair of zeroes.
All this can be done: you need a design, then an implementation, and you'll find you'll be iterating.
Some of these low level problems are exactly what a UART solves. But a software UART is also a thing, and that's something which could indeed run on a newbie kit computer - whether it's toggled in or present in ROM.
Re: Modern Homebrew "Cassette" Data Communication
Posted: Sun Mar 13, 2022 11:15 am
by sburrow
What I think you will find is that the simplest possible system won't be very fast, and that's the motivation for some of the refinements.
Some of these low level problems are exactly what a UART solves. But a software UART is also a thing, and that's something which could indeed run on a newbie kit computer - whether it's toggled in or present in ROM.
Thanks BigEd, great points! As you say, there are particular schemes that they used in the past, and not all are the same. I do not know exactly how the Apple 1 does it, but I *think* I heard that the ZX80 had a sequence for a 1 and another sequence for a 0. Something like you are counting rising and falling edges rather than using interval times, or something. I could have read wrong of course
UART's are great, they simplify the software side of course. And there are many to choose from. I was just interested to see this "Minstrel" board not have any of that, just a ton of LS chips. I believe the ZX81 combined a lot of features into a programmable chip (ULA?) to replace those, but the functionality was basically the same.
When I say "newbie kit" I'm thinking of something very similar to Garth Wilson's "potpourri" design:
http://www.wilsonminesco.com/6502primer/potpourri.html, as I have seen through searching this forum that many folks (including myself) start with that design. Ben Eater uses a nearly identical design as well! And so I wonder, if the ZX80 didn't need UART, could we send .mp3 data files through a VIA instead? Wild ideas (and I'm sure some folks have tried).
Thanks again BigEd, good discussion!
Chad
Re: Modern Homebrew "Cassette" Data Communication
Posted: Sun Mar 13, 2022 1:58 pm
by BigEd
Indeed, the zx81 had a ula, but a relatively simple one I think - it's the consolidation of the TTL glue that the zx80 had. So, in this case we do see a software UART. See here for the disassembly, cued up to the input routine:
https://www.tablix.org/~avian/spectrum/ ... .htm#L0340
Certainly a VIA is handy for the purpose of reading a bit, and with some ingenuity the shift registers can be used to read a byte. It's not a UART, so the software needs to do some work to read bits at the right times. There's a recent pagetable article which is very much on topic, about fast serial routines for the C64:
https://www.pagetable.com/?p=1656
Re: Modern Homebrew "Cassette" Data Communication
Posted: Sun Mar 13, 2022 2:05 pm
by plasmo
An even simpler approach is use a photo transistor to scan in bar code. It is fun for newbies because it is software that they can see and able to create by drawing.
(Taking a short break from marathon debugging sessions)
Bill
Re: Modern Homebrew "Cassette" Data Communication
Posted: Sun Mar 13, 2022 5:57 pm
by sburrow
Certainly a VIA is handy for the purpose of reading a bit, and with some ingenuity the shift registers can be used to read a byte. It's not a UART, so the software needs to do some work to read bits at the right times. There's a recent pagetable article which is very much on topic, about fast serial routines for the C64:
https://www.pagetable.com/?p=1656
Thanks for that link, that is very in depth, and I like how they explain with pictures. I like pictures
So in a way, audio or just serial, it ends up being the same: UART or bit-bang. I'll be thinking about that.
Bill, I certainly do like the idea of using bar codes! A couple of years ago I set up a QR-Code game for Math Day that was quite fun. I don't have the time this year to re-implement it, but the idea is the same: Use a device everybody has already to help them engage in the fun. And, there is a LOT of data packed into those barcodes/QR-codes.
The magic would be to see how I could get a 6502 to interpret that! I would not know where to start. But it sounds great.
Thank you both for the input. Good discussion!
Chad
Re: Modern Homebrew "Cassette" Data Communication
Posted: Sun Mar 13, 2022 6:04 pm
by BigEd
If a photo transistor could read a barcode-like-image from a phone screen, that would be very handy for everyone with a smartphone - a web page could provide a series of images.
One thing to note about mp3 is that it's a lossy format, designed to sound about right but not care about waveforms. As such, the kinds of encodings which just use a couple of well-placed edges to encode a bit might well not work. The kinds of encodings which use very short tones might work. To use those, you might find you need some kind of tone-detecting circuit before you get to the VIA.
Edit: that said, it might be that a website can produce sampled sound which doesn't go through an mp3 kind of process, and therefore wouldn't be lossy.
Re: Modern Homebrew "Cassette" Data Communication
Posted: Sun Mar 13, 2022 7:47 pm
by GARTHWILSON
One place we talked about bar codes was starting at approximately viewtopic.php?p=42926#p42926 in the topic "Happy New Year and happy hacking in 2016!", in the context of dead-start computers, meaning you can get one gong with no (E)(E)PROM, flash, etc..
Re: Modern Homebrew "Cassette" Data Communication
Posted: Mon Mar 14, 2022 2:18 am
by BillG
There are three states in data communications: no signal, space (binary 0) and mark (binary 1) which is why modems tended to switch between frequencies.
A simple tone versus no tone scheme only conveys two states. One other way to do it is to interrupt the tone with short and long intervals of silence. This is similar to how Continuous Wave (CW) works, as is done with Morse Code.
At one time, the publisher of Byte Magazine sold books containing software in the form of barcodes. I have not been able to find information about how they recommended building a wand to read them.
A wand connected to an 8-bit machine and a program to print programs in barcode form would enable one way to transmit information "wirelessly." It might be able to scan the screen of the "transmitting" computer.
Re: Modern Homebrew "Cassette" Data Communication
Posted: Mon Mar 14, 2022 5:25 am
by leepivonka
Byte magazine's "PaperBytes" seems to start in the November 1976 issue:
https://worldradiohistory.com/Archive-B ... 976-11.pdf on page 12.
There are months of discussion in later months of the magazine, & think they eventually published some data in this format.
TwiBright Optar
http://ronja.twibright.com/optar/ https://lwn.net/Articles/242735/ is a 2d higher-density optical encoding.
QR codes.
GyroScatter
viewtopic.php?f=4&t=6404&p=80524&hilit= ... isk#p80524
More optical ideas:
viewtopic.php?f=4&t=3329&hilit=paper+disk&start=705
Re: Modern Homebrew "Cassette" Data Communication
Posted: Mon Mar 14, 2022 6:31 am
by AndersNielsen
I’m building something similar based on the 6522 datasheet T1 example and Don Lancaster’s “Bit Boffer” (Google it). The important thing here is that you need sine waves because they record better.
For a 6502 the TX can be done with a 74hc373 and some passives.(Cheap DAC) Rx needs an opamp and some passives for sine > TTL demodulation.
I think I’ll make a video on this… sometime in the next 6 months
Re: Modern Homebrew "Cassette" Data Communication
Posted: Mon Mar 14, 2022 7:26 am
by GARTHWILSON
I’m building something similar based on the 6522 datasheet T1 example and Don Lancaster’s “Bit Boffer” (Google it). The important thing here is that you need sine waves because they record better.
Triangle waves work just as well for cassettes at the frequencies and record levels used. But wow, the writeups I'm finding on Bit Boffer sure mess up the facts about cassettes and recording. (Take it from someone who worked at TEAC and repaired and aligned a thousand tape recorders in 1982-3, then later designed record/play electronics including a cheap modem for a machine at work.)
For a 6502 the TX can be done with a 74hc373 and some passives.(Cheap DAC) Rx needs an opamp and some passives for sine > TTL demodulation.
I think I’ll make a video on this… sometime in the next 6 months
For a simple 9-level DAC (digital-to-analog coverter), you can use a 65(c)22 VIA's shift register shifting out free-run under T2 control, more or less as a PWM. See my second diagram and accompanying code after the "Digital-to-analog converters" heading of my 6502 primer's "circuit potpourri" page at http://wilsonminesco.com/6502primer/potpourri.html#DAC . What I did on my modem design however was to use a relaxation oscillator and use an ACIA's TX output to turn a transistor on and off in series with a resistor so the capacitor would charge faster or slower. I was looking for my schematics yesterday but still have not found them.
Re: Modern Homebrew "Cassette" Data Communication
Posted: Mon Mar 14, 2022 10:20 am
by AndersNielsen
I’m building something similar based on the 6522 datasheet T1 example and Don Lancaster’s “Bit Boffer” (Google it). The important thing here is that you need sine waves because they record better.
Triangle waves work just as well for cassettes at the frequencies and record levels used. But wow, the writeups I'm finding on Bit Boffer sure mess up the facts about cassettes and recording. (Take it from someone who worked at TEAC and repaired and aligned a thousand tape recorders in 1982-3, then later designed record/play electronics including a cheap modem for a machine at work.)
I trust you on that but I'd love to hear specifics
I've been through your DAC-writeup more than a few times. I think I'll stick with a '273 or '373 due to price and physical size - that way I only need PB6+7 on the VIA and can leave the SR for other important things. A second 6522 takes up a lot of space.
I guess the relaxation osc. approach would also work with T1/PB7? I hope you find your schematics.
Re: Modern Homebrew "Cassette" Data Communication
Posted: Tue Mar 15, 2022 8:15 pm
by GARTHWILSON
and can leave the SR for other important things.
Would you need those other things at the same time you need the cassette data storage?
I guess the relaxation osc. approach would also work with T1/PB7?
Here's the relaxation oscillator idea, although there are lots of possible variations on this theme. The 4066 is an analog switch.

- modulatoridea.gif (10.3 KiB) Viewed 2083 times
The resistor and capacitor values will give somewhere around 1200Hz and 2400Hz, although you might have to adjust them for any given 74HC14 Schmitt-trigger inverter since the hysteresis points are only specified to be in a range, not an exact amount like you could get with an op amp and a few more parts. Regardless, you don't have to keep sending samples to produce a continuous wave of a given frequency like you would have to with any kind of D/A converter.
Re: Modern Homebrew "Cassette" Data Communication
Posted: Tue Mar 15, 2022 9:15 pm
by AndersNielsen
and can leave the SR for other important things.
Would you need those other things at the same time you need the cassette data storage?
I guess the relaxation osc. approach would also work with T1/PB7?
Here's the relaxation oscillator idea, although there are lots of possible variations on this theme. The 4066 is an analog switch.
modulatoridea.gif
The resistor and capacitor values will give somewhere around 1200Hz and 2400Hz, although you might have to adjust them for any given 74HC14 Schmitt-trigger inverter since the hysteresis points are only specified to be in a range, not an exact amount like you could get with an op amp and a few more parts. Regardless, you don't have to keep sending samples to produce a continuous wave of a given frequency like you would have to with any kind of D/A converter.
I can see that working! I’m sure I have a 4066 somewhere so I will try it out before I commit to the “sine wave DAC”. For the other approach I have to set PB7 to flip at 9600 or 19200hz to get 1200/2400hz and it works. Probably wouldn’t at 1mhz though.
This way I guess I can get by with a lower irq frequency.