I got a summer job operating and programming IBM 1401 and 7070 computers in 1962 and 63 at Universal Oil Products Company in Des Plaines, Illinois. Our 1401 had one 7330 tape drive, card reader/punch, and printer. It was used for card manipulation, but mostly as card-to-tape and tape-to-printer for the 7070. Our machine had a minimum configuration, 1400 (6-bit BCD) bytes of core. The machine's basic memory cycle time was 12 microseconds; each instruction took a variable length of time depending on the length of the instruction and the lengths of the operands. To add two five-digit numbers took 20 cycles, so the machine could do about 4000 such adds per second.
The 7070 and 1401 both had assemblers called Autocoder. Our teeny 1401, though, didn't have enough core to use Autocoder, so we programmed it in SPS, the Symbolic Programming System, a much less fancy assembler: fixed card fields, no macros. You loaded the reader with the assembler deck, your source, and pass 2 of the assembler, and hit LOAD. SPS read in, read your program and punched an intermediate file, and stopped. You took the intermediate file from the output hopper and put it behind pass 2, and hit START to complete assembly.
The next summer I got a job at Swift & Company, in downtown Chicago, in their Operations Research department. They had two big 1401s, 12K each. On these we could run Autocoder, and use a primitive debugger called Autotest, which let you patch programs, compare core to the object deck, and even set breakpoints. These machines did payroll, wrote dividend checks, stuff like that. Such applications were written in 1401 COBOL. I was an Autocoder jock though, had my own private library of tape error recovery code, merged in the center pocket, hot stuff.
A few years later at MIT Project MAC I was able to use my 1401 knowledge; MAC had a 4K 1401 used as reader/print for the IBM 7094, and we had a need to print our Multics EPL programs in mixed case. I wrote a program, ASCPT, which read 7094 Multics-format tapes containing ASCII files, and printed them on a special upper and lower case print train on the 1403 printer, using an IBM RPQ on the 1401 which used the word marks as a 7th bit in the print band. Squeezing the printer management and character translation into 4K was tough; I had constants in between the index registers.
While I was at Project MAC i found a program called PEST, Peripheral Equipment Symbolic Translator, on the Bell Labs BESYS tape. It was a 1401 cross-assembler that ran on the 7094. It accepted a subset of 1401 Autocoder. I wrote a minimal wrapper for it so that it could run as a CTSS command, and was able to write and compile 1401 programs online, without keypunching.
Many 1401 programmers learned the machine by going to IBM school. I didn't, but I have here an exam from the Basic 1401 Programming course. Part 1 is on general stuff, parts of the machine, etc; part 2 covers flow charting, bits in the word; part 3 asks what happens when specific instructions are executed. All multiple choice.
The main thing you had to remember when programming the 1401 was if the b-field is longer than the a-field, an unequal compare will result. (If you were lucky enough to have a 1401 with the arithmetic compare function.) This was my mantra for years.
Here is a self-loading one-card 1401 program which will print HELLO WORLD, eject the page in the printer, and halt.
Paul Pierce's collection includes a 1401. He has machine code on the web for a 1401 CPU diagnostic.
02/19/95 found my 1401 manual, fixed some code bugs, added timings
03/23/96 scanned the reference card
01/14/97 Improved program with suggestion from Simon Barratt
03/16/02 Van Snyder points out that the program can be shortened by 6 locations.
Copyright (c) 1995, 1996, 1997, 2002 by Tom Van Vleck