The 8-bit microcomputers of the 1970s and 1980s frequently used audio cassette tapes for data and code storage and, with the recent resurgence of interest in vintage computing, there is a need to be able to read and write these tapes without needing vintage hardware that may be unavailable or unreliable. To address this, I'm designing a vintage cassette I/O board for the popular RC2014 computer bus.

Vintage cassette I/O boards were generally implemented with a combination of discrete components and TTL logic. Each format required a different circuit. It's impractical to support all of these circuits on a single board, so I'm going to design this board with a minimum of external circuitry and leave the heavy lifting of encoding and decoding the signals to DSP code running on a simple 8-bit micro controller, the Atmega 1284.

I've never designed a PCB all the way from schematic to finished product, so this project is a good opportunity to do so. In recent years, it has become very practical and economical to produce short runs of boards. I'm going to use a popular, open-source tool, KiCad, for the schematic design and PCB layout.


Kansas City Standard

The Kansas City (or Byte) Standard (KCS) is a way of storing digital data on standard Compact Audio Cassettes at data rates of 300 to 2400 bits per second (at 300–2400 baud) that was first defined in 1976. It originated in a symposium sponsored by Byte magazine in November 1975 in Kansas City, Missouri to develop a standard for storage of digital microcomputer data on inexpensive consumer quality cassettes. Although the KCS standard existed from the earliest days of the microcomputer revolution, it failed to prevent a proliferation of alternative encodings. Most home computers of the era used their own formats that were incompatible with KCS or each other.

See Kansas City Standard for more information.

MITS Altair Cassette Interface

The MITS Altair cassette interface was provided by a daughter card (the 88-ACR) attached to a serial I/O card (the 88-SIO). It operated at 300 baud and used a frequency-shift-keying (FSK) modulation scheme based on high/low frequencies of 2400/1850 Hz. It was also notoriously unreliable and required frequent calibration.

See MITS Altair 88-ACR Manual.

See Altair 8800 for more information.

Tarbell Cassette Interface

The Tarbell cassette interface was an expansion card, designed by Don Tarbell in 1976, for the Altair 8800 and other systems based on the S-100 bus. It supported the 1975 Kansas City Standard (300-2400 baud) but also introduced a much faster Tarbell standard which became a de facto standard.

See Tarbell Cassette Interface Manual.

See Tarbell Cassette Interface for more information.

Computer Users' Tape Standard (CUTS)

The CUTS Tape I/O interface was introduced in 1977 by Processor Technology for its SOL-20 computer. It supported the 1975 Kansas City Standard (300-2400 baud) but also introduced a new format, CUTS, which supports 300 and 1200 baud.

See Processor Technology CUTS Manual.

See CUTS Tape I/O for more information.



The micro controller I've chosen for this project is the Atmega1284. It's inexpensive, readily available, compatible with Arduino, and has sufficient pins, memory, peripherals, and horsepower. It's also available in a through-hole DIP package.

See Atmega1284 for more information.

Virtual I/O

The virtual I/O hardware uses a configurable address decoder to determine when data needs to be read or written from the cassette device. It triggers a micro controller interrupt to service the request and read or write a data stream that can be encoded into or decoded from WAV format by the audio I/O software. It can also be read from or written to a microSD card.

Audio I/O

The audio I/O hardware is divided into three subsystems:...

Read more »