Utilities for paper tapes

Reading paper tapes

A platform independent way of reading paper tapes from readers with a parallel is to use a microprocessor that reads bytes in parallell from the paper tape reader reader and writes them in serial form to an RS-232 serial port. The program presented here runs on STK-501 development board for AVR microprocessors, augmented with the STK-501 add-on board for AVR ATMega-128. The paper-tape reader used is a Hewlett-Packard 2748B.

Splitting paper tapes on nulls

If there are more than one file on the tape, or of there are eye-ball headers on the tape, the tape dump needs to be split. The simplest, but somewhat naïve, method is to split on sequences, of some minimum length, of null bytes. The disadvantage is that a file may well contain long sequences of null bytes. This program saves the null-byte sequences in files of their own, so that incorrectly split files can be merged.

Splitting paper tapes on eye-ball headers

A more intelligent way of splitting dump files is to locate the eye-ball headers.

Reading eye-ball headers from paper tapes

On the Computer Automation tapes that I have, text is five points high, and printed on the wide side of the feed holes on the tape. This means that a byte that is part of a eye-ball character never has its low three bits set. Characters are delimited by null bytes. In C parlance, a byte b is part of an eye-ball header iff (b==0 || !(b &0x07)). Unfortunately, there are stray bogus characters in some headers so a small amount of them must be accepted but ignored.

Conceptually, the program works by splitting the dump by long sequences of nulls. The resulting sections are then inspected. If a sections contains more than, say, 95 per cent acceptable characters it is assumed to be an eye-ball header. The header is then split, on null bytes, into characters. The characters are then searched for in a table. If found, the corresponding ASCII character is printed. If not, a table entry is printed; this can be used to update the source code to recognize the unknown character. This can be used as a way of boot-strapping a new and different character set.

The implementation works in a single pass.