Paper Tape Software

A very minimal PDP-11/20 installation included a Teletype Model 33 ASR. The "ASR" signified "Automatic Send and Recieve": this model of teletype included a paper tape reader and a punch which ran at 10 bytes per second. With an extra $3900 (~$26k in 2020) burning a hole in your pocket, you could either buy two brand new Volkswagen Beetles, or you could also buy the PC05 High Speed Paper Tape Reader and Punch, which could read paper tapes at the blazing speed of 300 bytes per second, and punch them at 50 bytes per second.

DEC provided a suite of software on paper tape that could be used to create programs, also on paper tape: the Paper Tape Software System (PTS). This is the 1970 version of an integrated development environment. The first release included:

  • PAL-11A Assembler, which reads source code from paper tape, and writes a binary tape ready to be loaded and run.
  • ED11 Editor, a "line-oriented" editor that allowed a programmer to edit tapes with source code, instead of having to punch them without errors in a single session. This is the ancestor of the "ed" editor for Unix, which is itself the ancestor of the "vi" editor and modern day "vim".
  • ODT-11 Online Debugging Technique, an iteractive debugger.
  • IOX Input/Output Utility Peripheral Driver, a library that can make slow I/O operations run in the background, using buffers and interrupts. This is the equivalent of a very primitive operating system.
  • FPMP Floating Point Math Package, which provides routines to handle floating point atrithmetic operations, as well as integer multiply and divide.
  • Absolute Loader, used to load programs generated by PAL-11A

A typical PDP-11/20 had no ROM, no bootstrap code to tell it how to load programs from paper tape into memory. When the machine was powered up, the memory is in an unknown state; ferrite core memory of the time could hold previously stored values while powered down, which may or may not be desireable.

To load a program, the programmer would have to use the programmer's console, using the switches and lights to toggle in a small program known as the Bootstrap Loader. The Bootstrap Loader is designed to load in a more sophisticated bootstrap program from paper tape. DEC provided the instructions to enter the Bootstrap Loader into the programmer's console, and a programmer who was lucky enough to work on a machine maxed out with 28kw of memory and the high speed paper tape reader quickly memorized this sequence of numbers:


Often, a printed copy of these numbers was taped to the front of the programmer's console.

The programmer would turn the computer on, load the switches with value 157744, and press the "LOAD ADDR" switch. They would then enter the first word of the program and press the "DEP" switch to deposit it into memory. Then the next word, and the next, until all the words of the program have been deposited. A careful programmer would then verify that the program was entered properly by loading the switches with 157744 and pressing "LAOD ADDR" again. They would then check the lights on the panel, and use the "EXAM" switch to step through each word to verify that the program was entered properly. If they were satisfied that the program is correct, they'd make sure they've loaded their bootstrap tape in the reader, set the switches to 155774 again, "LOAD ADDR", and then press the "START" switch. The paper tape reader would then spring into life and read the bootstrap tape. It did not take long until DEC released a ROM module that contained this bootstrap code permanently in memory so a programmer wouldn't have to perform this ritual each time they started their work.

Absolute Loader tape label

Most of the time, that tape loaded by the Bootstrap Loader would be the Absolute Loader tape that came as part of the Paper Tape System. Once that tape was read, the computer would halt. The programmer would then load the tape of the program they wanted to run, like the ED11 editor, or the PAL-11A assembler, or a program that they wrote, then press the "START" button again to read and possibly automatically run the program.