IBM cassette tape
|This article relies on references to primary sources. (September 2012)|
||This article needs additional citations for verification. (September 2012)|
On early IBM Personal Computers, an interface was provided to allow use of a compact cassette tape recorder to load and save data and programs. This option was only included on the original 5150 (PC), the 4860 (PCjr) and some clones (sometimes only as an assembly option).
Few IBM PCs left the factory without a floppy disk drive installed. 5150s with just external cassette recorders for storage could only use the built-in ROM BASIC as their operating system, which supported cassette operations. IBM PC DOS did not support cassette tape—only disk drives. No market developed for commercial product distribution on cassette tape and the cassette interface was dropped on subsequent IBM models, except the PCjr.
BIOS interrupt call 15h routines were documented in the technical reference manual that would turn the cassette motor on and off, and read or write data. Data was written with a lead-in section, and formatted in 256-byte blocks with a 2-byte CRC. Programmers could also operate the cassette relay by writing to its I/O address. IBM Cassette BASIC, Disk BASIC and Advanced BASIC (BASICA) included statements for cassette operations, but these features only worked if the machine had a cassette port.
Data format 
The technical reference for the IBM PC 5150 specifies that the WRITE-BLOCK routine turns on the cassette drive motor and transforms each byte into bits. A (1) bit corresponds to a 1.0 ms timer period, (0) bit corresponds to 0.5 ms which results in a recording speed of 1000 - 2000 bit/s. First 256 bytes of "11111111" is written. One synchronization bit "0". A synchronization byte of 0x16. 256-byte blocks of data and a 2-byte CRC is written until all data is transferred.
Connector pinout 
The IBM PC used a female 5-pin DIN connector (the same as the keyboard connector) for the cassette port:
- Pin 1: MOTOR CONTROL COMMON
- Pin 2: GND
- Pin 3: MOTOR CONTROL (6 V/1 A) RELAY
- Pin 4: DATA-IN (500 nA with 13 V at 1000-2000 Baud)
- Pin 5: DATA-OUT (250 µA jumperable either at 0.68 V ("AUX") or 75 mV ("MIC"))
Motor control: 8255A port 0x61, bit 3: 0 = on, 1 = off.
See also 
- "IBM PC and PCjr Cassette Waveforms". 091207
- IBM (1983). IBM PC Technical Reference Handbook. Comment: Also includes a complete listing of the ROM BIOS source code and schematics of the original IBM PC.