Modern Homebrew "Cassette" Data Communication

For discussing the 65xx hardware itself or electronics projects.
sburrow
Posts: 833
Joined: 09 Oct 2021
Location: Texas

Modern Homebrew "Cassette" Data Communication

Post 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
User avatar
BigEd
Posts: 11464
Joined: 11 Dec 2008
Location: England
Contact:

Re: Modern Homebrew "Cassette" Data Communication

Post 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.
sburrow
Posts: 833
Joined: 09 Oct 2021
Location: Texas

Re: Modern Homebrew "Cassette" Data Communication

Post by sburrow »

BigEd wrote:
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
User avatar
BigEd
Posts: 11464
Joined: 11 Dec 2008
Location: England
Contact:

Re: Modern Homebrew "Cassette" Data Communication

Post 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
plasmo
Posts: 1273
Joined: 21 Dec 2018
Location: Albuquerque NM USA

Re: Modern Homebrew "Cassette" Data Communication

Post 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
sburrow
Posts: 833
Joined: 09 Oct 2021
Location: Texas

Re: Modern Homebrew "Cassette" Data Communication

Post by sburrow »

BigEd wrote:
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
User avatar
BigEd
Posts: 11464
Joined: 11 Dec 2008
Location: England
Contact:

Re: Modern Homebrew "Cassette" Data Communication

Post 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.
User avatar
GARTHWILSON
Forum Moderator
Posts: 8775
Joined: 30 Aug 2002
Location: Southern California
Contact:

Re: Modern Homebrew "Cassette" Data Communication

Post 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..
http://WilsonMinesCo.com/ lots of 6502 resources
The "second front page" is http://wilsonminesco.com/links.html .
What's an additional VIA among friends, anyhow?
BillG
Posts: 710
Joined: 12 Mar 2020
Location: North Tejas

Re: Modern Homebrew "Cassette" Data Communication

Post 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.
leepivonka
Posts: 168
Joined: 15 Apr 2016

Re: Modern Homebrew "Cassette" Data Communication

Post 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
User avatar
AndersNielsen
Posts: 185
Joined: 26 Dec 2021
Contact:

Re: Modern Homebrew "Cassette" Data Communication

Post 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
User avatar
GARTHWILSON
Forum Moderator
Posts: 8775
Joined: 30 Aug 2002
Location: Southern California
Contact:

Re: Modern Homebrew "Cassette" Data Communication

Post by GARTHWILSON »

AndersNielsen wrote:
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.)

Quote:
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.
http://WilsonMinesCo.com/ lots of 6502 resources
The "second front page" is http://wilsonminesco.com/links.html .
What's an additional VIA among friends, anyhow?
User avatar
AndersNielsen
Posts: 185
Joined: 26 Dec 2021
Contact:

Re: Modern Homebrew "Cassette" Data Communication

Post by AndersNielsen »

GARTHWILSON wrote:
AndersNielsen wrote:
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.
User avatar
GARTHWILSON
Forum Moderator
Posts: 8775
Joined: 30 Aug 2002
Location: Southern California
Contact:

Re: Modern Homebrew "Cassette" Data Communication

Post by GARTHWILSON »

AndersNielsen wrote:
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?

Quote:
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
modulatoridea.gif (10.3 KiB) Viewed 2101 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.
http://WilsonMinesCo.com/ lots of 6502 resources
The "second front page" is http://wilsonminesco.com/links.html .
What's an additional VIA among friends, anyhow?
User avatar
AndersNielsen
Posts: 185
Joined: 26 Dec 2021
Contact:

Re: Modern Homebrew "Cassette" Data Communication

Post by AndersNielsen »

GARTHWILSON wrote:
AndersNielsen wrote:
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?

Quote:
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.
Post Reply