COSMAC VIP Cassette tape support

This document last edited MAR 20 2018


Microcomputers of the 1970's, often used audio cassettes to store and recall programs and data, before floppy diskette drives became available and affordable. Binary data was represented by a few cycles of audio tones, under various schemes or methods. See the linked document for discussion of audio tape cassette formats. This Web page discusses the data and encoding of data for the COSMAC VIP microcomputer from RCA, a microcomputer based on the COSMAC 1802. A Web page with similar information is is about the QUEST Super ELF.

If the 1802 interests you, Check my support of the 1802 Membership Card. - Herb Johnson

COSMAC VIP Tape Interface

From "ICAN-6934, Cassette Tape I/O for COSMAC Microprocessor Systems" by C. D. Smith. A copy of this document can be found in the files archives at the Yahoo group "cosmacelf" as of 2018. Here's the original document.

[vic tape image]

The output op-amp circuit is a low-pass filter, C3 = .0047uF R33 = 10Kohms R34 = 100K ohms. A gain of 10 at DC, low-pass is 1/(2*pi*R33*C3) = 3.4KHz. The Input op-amp circuit is a high-pass filter probably to remove DC. C4 = .047uf, R20 = 22K ohms, R35 = 1Mohm, R52 = 1Mohm. A gain of 50 at high freq, high-pass is 1/(2*pi*R20*C4) = 15 hz. Also the input has a simple high-cut RC filter with diodes, essentially to clamp off any large and fast signals. R is 100 ohms in series with C of.47uf. 1/(2*pi*R*C) is 3.4KHz.

The bootstrap loader code to load in, for instance, the VIP monitor program, is listed in the VIP document as follows:

0000 7100F801BAF802B990AAA9BFF83BAFF80ABDDF330F2D9D3A12DF3B19F809ADAB;
0020 9D76BD2BDF8B3A201D8DF633379D5A1A29893A19993A19C0B000DOF8103D3D3D;
0040 48FF013A3F1DF880FE3549303A

I disassembled this code, based on Lee Hart's disassembly of the VIP ROM. That VIP disassembly and other VIP information, is available at the Yahoo cosmacelf discussion group file archives under files..VIP.

Fig.5 - Object code for VIP cassette-tape-format boot loader.

"Boot Strapping After Power Off - To reload either the Microterminal or the data terminal cassette I/O routine after powere off, it is necessary to load only the cassette boot routine. After entering and verifying the boot routine in Fig. 5, position the tape just before the save cassette */O routine, and start execution by prepressing RESET-RUN P, after starting the tape in the play mode. The most signfigant byte of the first [load] address is in M(0003), and the number of pages to be input in in M*(0006). The contents of these addresses can be changed to suit the individual user's needs."

COSMAC VIP Tape Format

The content of this part of my Web page, is transscribed from "RCA COSMAC VIP Instruction Manual", "Appendix A - Test and Operating Data", pages 30-33. A copy of this document can be found in the files archives at the Yahoo group "cosmacelf" as of 2012. Here's the original document.

Cassette Attachment Diagram

[vic tape image]

Cassette Phase Test

For best results your cassette recorder should not reverse the phase of an input signal on playback. When playing hack a tape recorded on another recorder. it should not reverse the phase of the output signal. You may have to reverse the internal head connections on some cassette recorders to eliminate unwanted phase reversals. To check for phase reversals. load the machine language test program. given below, into memory.

Run this program to generate a phase test on the tape out line. Record one minute of this text signal, then play it back and observe the cassette recorder output on a scope. It should appear as shown in B or C below. Save this tape to test new recorders on which you want to play tapes you have recorded a previously tested machine. If the playback signal appears upside down from that shovm in B or C, you will have to reverse the internal head connection leads on the out-of-phase recorder.

Test Program

0000 F8 04 AA 7B F8 0C FF 01
0008 3A 06 7A F8 0C FF 01 3A
0010 0D 2A 8A 3A 03 F8 60 FF
0018 01 3A 17 30 00 00 00 00


[vic tape image]

Cassette Data Test

Load the following machine language program into memory:

0000 90 B6 B3 F8 33 A6 F8 0A
0008 A3 D3 F8 6F AC F8 40 B9
0010 93 F6 DC 29 99 3A 10 F8
0018 10 A7 F8 08 A9 06 B7 F8
0020 80 FE DC 97 F6 B7 DC 29
0028 89 3A 23 17 87 F6 DC 30
0030 17 30 31 35 00 00 00 00

Rewind a blank cassette and put recorder into record mode. Wait 10 seconds and flip RUN up to initiate the program. The byte at location 0033 will be continuously recorded on tape. Flip RUN down to stop recording after a minute or so. You can play this tape to check the signals shown below. You can also load the tape into memory for testing purposes. Load 7 pages starting at 0100. You can use this tape to determine the proper volume control setting for your recorder. You can change the recorded byte at 0033 if desired.

Bits on tape consist of one cycle at 2 kHz for `"0" or one cycle at 0.8 kHz for "1". Data format is 4 seconds of continuous "0ís" for sync followed by the specified number of data bytes. Bytes always begin with a "1" start bit {S) followed by 8 data bits (0-7}, and end with a parity bit (P). Odd byte parity is used in this code.

The waveforms below show how a 35 byte would appear on tape. The operating system translates memory bytes to bit serial output via the Q output line. Bit serial input from tape is received via input flag 2 and translated into parallel form for storage in memory by the operating system software.

[vic tape image]

Cassette Recording Guidelines

1. Use high quality tape (Maxell UD or equivalent}.
2. Use shortest tapes possible. You can shorten tapes to several minutes in length if you enjoy splicing.
3. Keep heads and pinch rollers clean.
4. Keep heads aligned for tape interchangability.
5. Avoid recording too close to beginning of tape.
6. Make sure cassette is properly seated in recorder.
7. If you have trouble with a cassette try others. You can have a had spot on tape or a warped cassette.
8. Highest setting of tone control is usually best.
9. Set recorder volume control so that TAPE light glows steadily on playback. This setting should be lower than highest-volume setting. Excessive TAPE light flickering indicates a bad tape or misaligned heads.
10. A dirty recorder volume control can cause tape dropouts.
11. Make sure cassette connection plugs make good contact.
12. Rewind cassettes before removing them from recorder.
13. Store cassettes in dust-proof containers.
14. Avoid exposing cassettes to heat or magnetic fields.
15. Before recording, wind cassette to one end and fully rewind.
16. Cassette recorders will give you problems once in a while (they don't like certain cassettes, etc.). If one gives you problems most of the time replace it.
17. Make sure that MIKE plug is connected before recording. You will hear a tone even if MIKE plug is out. On most recorders the TAPE light will glow while recording.
18. When recording give the page key a short tap to start.
19. Use the last byte of a tape block as a program identification and check code. It will appear on the display screen after the tape is loaded.
20. When loading a cassette into memory, the tape must contain as many pages as you specify to be loaded. If you try to load 8 pages from a 7-page tape the loading operation won`t terminate properly.
21., You may have to record with the EAR plug out for some tape recorders.
22. Always use AC adaptor with recorder for best results.

Memory Test Program

This machine language program should be loaded into 0000-007F. It checks RAM locations 0400-07FF (U18 and U19) for proper data storage. Flip RUN up to start test. Beeps sound during test. Entire 1024- byte section of RAM being tested is shown on screen. Program stops with tone on if a bad RAM bit is found. Error byte is at 007F. This byte should be 00 or FF for no error. For example, if byte is 01 or FE then bit 0 was bad. The error byte is also shown on the screen.

Set location 0020=00 and location 0023=80 to test RAM locations 0080-03FF (U16 and U17}.

0000 90 B1 B2 B3 F8 17 A3 D3
0008 42 70 22 78 22 52 C4 C4
0010 C4 94 B0 91 A0 30 08 F8
0018 0A A1 F8 7F A2 E2 69 F8
0020 04 B4 F8 00 A4 94 B7 84
0028 A7 7A E2 F8 00 A5 F8 FF
0030 A6 85 57 94 BA 84 AA 8A
0038 52 87 F3 3A 45 9A 52 97
0040 F3 3A 45 30 47 86 5A 1A
0048 9A 52 94 FC 04 F3 3A 37
0050 07 52 85 F3 3A 6C F8 FF
0058 A5 93 A6 31 60 7B 30 31
0060 17 97 52 94 FC 04 F3 3A
0068 29 7A 30 6A 7B 30 6D 00
0070 00 00 O0 00 00 00 00 00
0078 00 00 00 00 00 00 00 00

CUTS - KC standard for 1802?

Richard (cpd1861) posted in cosmacelf in early Dec 2012, that I might look at this Ipso Facto newsletter issue #3 of NOv 1977, on the site. It has notes on the CUTS format (from a march 1975 "computer bits" Popular Electronics article). It also has an original article on the Kansas City standard format, which Don Lancaster promoted in the era. There's also a construction article using SWTPC hardware for the KC standard. There's also articles with 1802 code and one proposing a standard file system.

In response to my request for anyone who used CUTS/KC on the 1802, David Williams wrote to me early in Dec 2012: "I made up a CUTS interface for my original wire wrapped ELF in 1977 or 1978. It was fairly reliable as I remember - 300 baud I think was the speed but with only 1k & 256 bytes it was plenty fast enough. It used a UART - not sure which one - to do the parallel/ serial conversion, & a monostable to detect the 2400 or 1200 Hz tone. I did have to toggle in a "boot strap" to load from a cassette but it sure beat toggling in a program every time. I did not have a hex keypad - just the toggle switches."

"Unfortunately this hardware is long gone, so I am not sure of the exact schematic - but I think it was fairly similar to the one mentioned in the Ipso Facto article." - Regards, David Williams

Herb Johnson
New Jersey, USA
follow this link to email @ me

Copyright © 2018 Herb Johnson except for content as per source described herein.