How did the cassette interface work?

Post Reply
Scott Larson
Posts: 33
Joined: Fri Nov 14, 2008 8:32 pm

How did the cassette interface work?

Post by Scott Larson »

I've been following some discussions about how old home computer cassette interfaces worked and I realized I never learned how OSI did it.

So it must have been simple frequency shift keying (right?) so something had to be generating and detecting the two frequencies in the audio. I can't find where on the boards that would be happening. This should be easy to figure out.
BillO
Posts: 216
Joined: Tue Jul 08, 2014 4:03 pm
Location: Canada
Contact:

Re: How did the cassette interface work?

Post by BillO »

Yes, the OSI used simple FSK following the rather loose Kansas City Standard.

https://en.wikipedia.org/wiki/Kansas_City_standard
Box stock Superboard II Rev. B
KLyball replica 600D, replica 610 & KLyball Data Separator
OMS SBME and SBME+ memory cards
OMS Digi-Mule expansion bus
KLyball memory card
Mark
Posts: 297
Joined: Tue Sep 16, 2008 6:04 am
Location: Madison, WI
Contact:

Re: How did the cassette interface work?

Post by Mark »

With Kansas City Standard audio encoding, a "0" bit is represented as four cycles of a 1200 Hz sine wave, and a "1" bit as eight cycles of 2400 Hz at 300bps.

OSI used the circuit seen in the OSI 502 schematics:

They used a 555 timer running at ~4800hz as the clock to the ACIA. The ACIA internally is set to divide the clock by 16, giving you a 300bps data rate.
Clock Generation
Clock Generation
clock.jpg (86.17 KiB) Viewed 11510 times
Interface
Interface
interface.jpg (97.83 KiB) Viewed 11510 times
I'm not an EE, but from what I understand:
For transmit, the 4800hz clock is sent to a pair of 7476 J-K flip flops to divide the 4800hz clock by 2 or 4 depending on the state of the TxD bit giving you the 2400hz or 1200hz tones.

For receive, after reducing, ac coupling, and clamping input, a CA3130 op-amp is used to boost the signal. 2 inverters are used to filter the input, a 74123 is set up as a frequency detector along with a flip flop which decodes the incoming signal as 1 for 2400hz, 0 for 1200hz sent to RxD, which is asynchronously looking for the start bit at 300bps

All-in-all a pretty elegant interface...
Scott Larson
Posts: 33
Joined: Fri Nov 14, 2008 8:32 pm

Re: How did the cassette interface work?

Post by Scott Larson »

I never even noticed that there was a 555 in my C1P. So it looks like the 7476 created a square wave and there's a simple low pass filter to get it something close to a sine wave. I don't quite understand how the 74123 and does the decoding for the flip flop to flip flop. Did you have to tune R75 to the right frequency (range)? Is the CA3130 doing any filtering of the audio?

I had fun with the cassette interface because in BASIC it was, face it, just like the paper tape device on a terminal. All it did was save what was printed or typed in what was on the tape. I had a database of my albums which were just DATA statements in the program starting at line 10,000 which I read into an array when the program started. To save the database, I wrote a routine that PRINTed the array as a series of DATA statements to the cassette. Then to "load" the database I just had to load the DATA statements from the cassette. A BASIC program producing BASIC statements was quite mind blowing for me as a kid.
bbarnt1
Posts: 3
Joined: Fri Sep 15, 2023 1:47 am

Re: How did the cassette interface work?

Post by bbarnt1 »

Scott-
Short Answer: R75 has to be adjusted for the correct pulse width output of U22.

Long Winded Answer:
Bear with me, it's been a long time since I experimented with this in college.

As Mark said, D1 & D2 clip the AC sine wave to the CA3130.

The rising and falling edges of this pulse are not "clean". It is a sine wave clipped off at approx. 0.7 volts, so the rise and fall times are sloped.

Since there is no feedback on the CA3130, it goes from ground to +5v and back, and has that same slope as the input signal.

The 7404s clean up the rise and fall times of the 5v signal.

Now the 74123 comes into play. It is one-shot monostable multi-vibrator. It generates a output pulse on the rising edge at the B input. The width of that pulse is determined by R75, R26 and C9.

That output pulse is low-pass filtered by R27 and C10, and fed to the flip-flop (U23). Since the flip-flop is clocked by the same trigger as U22, the RxData line will turn on whenever there is an edge at pin B. The width of this pulse is effectively determined by R75.

Brian
Post Reply