IBM 1401


The IBM 1401 is a variable-wordlength decimal computer that was announced by IBM on October 5, 1959. The first member of the highly successful IBM 1400 series, it was aimed at replacing unit record equipment for processing data stored on punched cards and at providing peripheral services for larger computers. The 1401 is considered to be the Model-T Ford of the computer industry, because it was mass-produced and because of its sales volume. Over 12,000 units were produced and many were leased or resold after they were replaced with newer technology. The 1401 was withdrawn on February 8, 1971.

History

The 1401 project evolved from an IBM project named World Wide Accounting Machine, which in turn was a reaction to the success of Bull Gamma 3.
The 1401 was operated as an independent system, in conjunction with IBM punched card equipment, or as auxiliary equipment to IBM 700 or 7000 series systems.
Monthly rental for 1401 configurations started at US$2,500.
"IBM was pleasantly surprised to receive 5,200 orders in just the first five weeks - more than predicted for the entire life of the machine!" By late 1961, the 2000 installed in the USA were about one quarter of all electronic stored-program computers by all manufacturers. The number of installed 1401s peaked above 10,000 in the mid-1960s. "In all, by the mid-1960s nearly half of all computer systems in the world were 1401-type systems." The system was marketed until February 1971.
Commonly used by small businesses as their primary data processing machines, the 1401 was also frequently used as an off-line peripheral controller for mainframe computers. In such installations, with an IBM 7090 for example, the mainframe computers used only magnetic tape for input-output. It was the 1401 that transferred input data from slow peripherals to tape, and transferred output data from tape to the card punch, the IBM 1403 Printer, or other peripherals. This allowed the mainframe's throughput to not be limited by the speed of a card reader or printer.
Elements within IBM, notably John Haanstra, an executive in charge of 1401 deployment, supported its continuation in larger models for evolving needs but the 1964 decision at the top to focus resources on the System/360 ended these efforts rather suddenly.
IBM was facing a competitive threat from the Honeywell 200 and the 360's incompatibility with the 1401 design. IBM pioneered the use of microcode emulation, in the form of ROM, so that some System/360 models could run 1401 programs.
During the 1970s, IBM installed many 1401s in India and Pakistan where they were in use well into the 1980s.
Two 1401 systems have been restored to operating order at the Computer History Museum in Mountain View, California, complete with a raised floor typical of the mainframe era, used to hide cabling and distribute cooled air.

Architecture

Each alphanumeric character in the 1401 was encoded by six bits, called B,A,8,4,2,1. The B,A bits were called zone bits and the 8,4,2,1 bits were called numeric bits, terms taken from the IBM 80 column punched card.
IBM called the 1401's character code BCD, even though that term describes only the decimal digit encoding. The 1401's alphanumeric collating sequence was compatible with the punched card collating sequence.
Associated with each memory location were two other bits, called C for odd parity check and M for word mark.
Each memory location then, had the following bits:
C B A 8 4 2 1 M
The 1401 was available in six memory configurations: 1400, 2000, 4000, 8000, 12000, or 16000 characters. Each character was addressable, addresses ranging from 0 through 15999. A very small number of 1401s were expanded to 32,000 characters by special request.
Some operations used specific memory locations. Read a card stored the 80 columns of data from a card into memory locations 001-080. Index registers 1, 2 and 3 were in memory locations 087-089, 092-094 and 097-099 respectively. Punch a card punched the contents of memory locations 101-180 into a card. Write a line printed the contents of memory locations 201-332.
The 1401's instruction format was
Opcode
with [A-or-I-or-unit-address [B-address]] [modifier]
word mark
Opcodes were one character. Memory addresses and unit address were three characters. The opcode modifier was one character. Instruction length was then 1, 2, 4, 5, 7, or 8 characters. Most instructions had to be followed by a word mark.
See Character and op codes for a list of operations.
A three-character memory address in an instruction was an encoding of a five-digit memory address. The three low-order digits of the five-digit address, 000 to 999, were specified by the numeric bits of the three characters. The zone bits of the high-order character specified an increment as follows: A 1000, B 2000, B and A together 3000, giving an addressability of 4,000 memory locations. The zone bits of the low-order character specified increments of 4000, 8000, or 12000, to address 16,000 memory locations. For example, the three-character address "I99" was a reference to memory location 3000 + 999, or 3999.
The zone bits of the middle character of a three-character memory address could specify one of three index registers, one of many optional features.
Operands referenced by the A-address and B-address were: a single memory location, a variable-length field, or a variable-length record. Variable-length fields were addressed at their low-order position, their length defined by a word mark set at their high-order position. When an operation such as addition was performed, the processor began at the low-order position of the two fields and worked its way to the high-order, just as a person would when adding with pencil and paper.
The only limit on the length of such fields was the available memory. Instructions applicable to variable-length fields included: Add, Subtract, Multiply, Divide, Compare, Move Characters to A or B Word Mark, Move Characters and Edit. One or more adjacent variable-length fields could make up a variable-length record. A variable-length record was addressed at its high-order position, its length defined by a group-mark character with a word mark or a record-mark character in its low-order position. The instruction Move Characters Record or Group Mark could be used to assemble a block of records. A variable-length record, or block of records, to be written to magnetic tape was addressed at its high-order position, its length defined by a group-mark character with a word mark immediately following its low-order position.
A sequence of operations on adjacent fields could be "chained", using the addresses left in the address registers by the previous operation. For example, addition of adjacent data fields might be coded as "A 700,850", "A 695,845", "A 690,840". With chaining, this could be coded as "A 700,850", "A", "A" - omitting data address from the second and third instructions.

Booting and sample program

When the LOAD button on the 1402 Card Read-Punch is pressed, a card is read into memory locations 001-080, a word mark is set in location 001, the word marks in locations 002-080 are cleared, and execution starts with the instruction at location 001. That is always the dyadic Set Word Mark to set word marks for the two following instructions. Execution of instructions in the card continues, setting word marks, loading the program into memory, and then branching to the program's start address. To read subsequent cards, an explicit READ command must be executed as the last instruction on every card to get the new card's contents into locations 001-080. Note that the wordmarks are not erased when the READ command is executed, but are kept as-is for the next card read in. This is convenient, because most of what the cards read in does is to set word marks in the proper locations; and having the first half dozen or so means you don't need to set those word marks again.
One-card programs could be written for various tasks. Commonly available were a one-card program to print the deck of cards following it, and another to duplicate a deck to the card punch. See Tom Van Vleck's web site. Here is a one-card program which will print "HELLO WORLD". Pressing LOAD reads one card, and begins execution at 001.
,008015,022029,036043,047051,052059,060062,066/332/M0762112F1.062HELLO WORLD
1 1 1 1 1 1 1 1 11 11 1 1
The program is:
Most of the logic circuitry of the 1401 was a type of diode–transistor logic, that IBM referred to as CTDL . Other IBM circuit types used were referred to as: Alloy, CTRL. Later upgrades used a faster type of DTL using "drift" transistors for their speed, that IBM referred to as SDTDL . Typical logic levels of these circuits were high: 0 V to -0.5V, low: -6 V to -12 V; high: 6 V to 1 V, low: -5.5 V to -6 V.
These circuits were constructed of discrete components mounted on single-sided paper-epoxy printed circuit boards either with a 16-pin gold-plated edge connector or with two 16-pin gold-plated edge connectors, that IBM referred to as SMS cards. The amount of logic on one card was similar to that in one 7400 series SSI or simpler MSI package.
The SMS cards were inserted in sockets on hinged swing-out racks, that IBM referred to as gates.
The modules used were fairly delicate, compared to previous unit-record equipment, so IBM shipped them enclosed in a newly invented packing material, bubble wrap. This was one of the first widespread uses of this packing; it greatly impressed recipients, and brought great publicity to the material.
Like most machines of the day, the 1401 used magnetic-core memory. The cores were about 1 mm in diameter and used a four-wire arrangement.
The memory was arranged in planes of
cores each, each core storing one bit. A stack of eight such planes stored the six data bits, word mark bit, and parity bit for 4000 memory locations. Together with eight additional planes with fewer cores on them for additional storage functions, this made up a 4000-character memory module. One such module could be housed within the 1401's primary enclosure. Systems were commonly available with two, three, or four such modules. The additional modules were contained in an add-on box, the 1406 Core Memory Unit, which was about two feet square and three feet high.
Operands in memory were accessed serially, one memory location at a time, and the 1401 could read or write one memory location within its basic cycle time of 11.5 microseconds.
All instruction timings were cited in multiples of this cycle time.

IBM 1403 printer

The IBM 1403 printer was introduced in October 1959 with the 1401 Data Processing System. The printer was a completely new development.

Software

IBM software for the 1401 included:
For the IBM Catalog of 1401 software, see IBM 1400 series.

Character and op codes

The 1401's operation codes were single characters. In many cases, particularly for the more common instructions, the character chosen was mnemonic for the operation: A for add, B for branch, S for subtract, etc.
The table is in Character Collating Sequence.
BCD CharacterPrint-APrint-H Card BCD
w/o M
OperationDefinition & Notes
Blank C
...12-3-8 BA8 21Halt
)12-4-8CBA84 Clear Word MarkLozenge
11-5-8CB 84 1
; 11-6-8CB 842
Δ 11-7-8 B 8421 Delta
---11 B
///0-1C A 1Clear Storage
,,,0-3-8C A8 21Set Word Mark
%%.
Blank with "even-parity" on tape.
##=3-8 8 21Modify AddressOptional
@@'4-8C 84 MultiplyOptional special feature.
: 5-8 84 1
> 6-8 842 Greater Than
7-8C 8421 Tape Mark
?&&12-0CBA8 2 Zero and AddPlus Zero
AAA12-1 BA 1Add
BBB12-2 BA 2 Branch or Branch on IndicatorSee "Modifiers for five-character Branch on Indicator instruction" section
CCC12-3CBA 21Compare
DDD12-4 BA 4 Move Numerical
EEE12-5CBA 4 1Move Characters and Edit
FFF12-6CBA 42 Control Carriage
GGG12-7 BA 421
HHH12-8 BA8 Store B-Address RegisterOptional special feature.
III12-9CBA8 1
!--11-0 B 8 2 Zero and SubtractMinus Zero
JJJ11-1CB 1
KKK11-2CB 2 Select Stacker and other device controlsSee "Modifiers for Select Stacker instruction" section
LLL11-3 B 21Load Characters to Word Mark
MMM11-4CB 4 Move Characters to Word Mark
NNN11-5 B 4 1No Operation
OOO11-6 B 42
PPP11-7CB 421Move Characters to
Record or Group Mark
Optional special feature.
QQQ11-8CB 8 Store A-Address RegisterOptional special feature.
RRR11-9 B 8 1
0-2-8 A8 2 Record Mark
SSS0-2C A 2 Subtract
TTT0-3 A 21Translate
UUU0-4C A 4 Control Unit
VVV0-5 A 4 1Branch if Word Mark
and/or Zone
WWW0-6 A 42 Branch if Bit EqualOptional special feature.
XXX0-7C A 421Move and Insert ZerosOptional special feature.
YYY0-8C A8 Move Zone
ZZZ0-9 A8 1Move Characters and
Suppress Zeros
0000C 8 2
1111 1Read a Card
2222 2 Write a Line
3333C 21Write and Read
4444 4 Punch a Card
5555C 4 1Read and Punch
6666C 42 Write and Punch
7777 421Write, Read, and Punch
8888 8 Start Read FeedOptional special feature.
9999C 8 1Start Punch FeedOptional special feature.

Two of the instructions, Branch on Indicator and Select Stacker, use a "modifier" operand.

Modifiers for five-character Branch on Indicator (B) instruction

The B opcode, if followed by a three-character operand, was a simple unconditional branch to the indicated address. If a fourth operand character was present, this made it a conditional branch. This "modifier" character specified the condition to be tested.
BCD CharacterUnitMeaning
Blank1401Unconditional—no word mark needed in next character
11009in run condition
1011punch in backspace operation
1011reader parity indicator on
1231auto select
1285error
1412control-check indicator on
1418late read
1419document to be read
1428late read or late reading mode change
1445printer error
7340hypertape unusual end
7740transmission complete with abnormal status
DDCtransmission error
21009buffer available
1011punch ready
1011reader ready
1231full buffer
1285end of line
1412reader-not-ready signal on
1418ready to engage
1419document under read head
1428ready to engage
7340hypertape normal end
7740transmission complete successfully
DDCtransmission ended by GMWM
31009good transmission occurred
1011punch not ready to receive data
1231ready to read
1285reader transporting
1412read-check indicator on
1418document under selected read station
1419valid amount field
1428document under selected read station
7340hypertape control unit 7641 busy
7740receive request
DDCread request
41009reply-bad indicator on
1011punch not ready to read
1231empty hopper
1285marked line
1412amount-field indicator on
1419valid process-control field
7340hypertape attention
77407740 attention
DDCwrite request
51009error reply acknowledgement
1011punch overextended
1231read error or overrun
1285header information
1412process-control indicator on
1418document end
1419valid account-number field
1428document end
1445printer busy
61009program attention required
1011punch supply reel low or chad box full
1231timing mark check
1285ready to read a line
1412account-number indicator on
1418character on line
1419valid transit-number field
1428character on line
1445carriage busy
DDCwrite in progress
71009end of message
1285reader ready
1412transit-number indicator on
1418empty hopper and transport
1419valid serial-number field
1428empty hopper and transport
1445carriage channel 9
DDCread in progress
81009end of file
1285end of file
1412document-spacing-check indicator on
1418ready to read
1419auto-select
1428ready to read
1448carriage channel 12
DDCsystem A stopped
91403carriage tape channel 9
01404validity error
' or @1403carriage tape channel 12
>1448end of block
/1401unequal compare
S1401equal compare
T1401low compare
U1401high compare
V1301disk error
1311disk error
1405read or write parity check or read back check error
W1301wrong-length record
1311wrong-length record
1405wrong-length record
X1301unequal address compare
1311unequal address compare
1405unequal address compare
Y1301any disk-unit error condition
1311any disk-unit error condition
1405any disk-unit error condition
Z1401arithmetic overflow
1403printer error
or tape mark
LTAUtape error
N1301access inoperable
1311access inoperable
1405access inoperable
P1403printer busy
Q1407inquiry request
R1403carriage busy
!1402punch error
*1407inquiry clear
+ or &1442last card
A1402last card if SS A is on
B1401SS B
7340hypertape attention response
C1401SS C
D1401SS D
E1401SS E
7340hypertape end response
F1401SS F
G1401SS G
H1402reader busy
I1402punch busy
?1402reader error
<1448early warning

Modifiers for Select Stacker (K) instruction

The Select Stacker instruction sent commands to various devices. It was named for its relevance to the 1402 reader/punch.
BCD CharacterUnitMeaning
Blank1401set program activity recording at BBB only if A is, dd
11402select last card read to stacker 1 if within 10 ms
21402select last card read to stacker 8/2 if within 10 ms
41402select previous card punched to stacker 4
81402select previous card punched to stacker 8/2
= or #1444select previous card punched to stacker 2
L1009operate in load mode
$1402overlap on
A1009suppress 3-second alarm
CDDCread request
D1009set direction to receive
DDCwrite request
E1009set direction to transmit
DDCreset
F1009send EOF
.1402overlap off
)1402reset overlap

1401 culture

In October 2006, Icelandic avant-garde musician Jóhann Jóhannsson released the album IBM 1401, A User's Manual through music publisher 4AD. The concept is based upon work done in 1964 by his father, Jóhann Gunnarsson, chief maintenance engineer of one of the country's first computers, and Elías Daviðsson, one of the first programmers in the country. The album was originally written for a string quartet, organ and electronics and to accompany a dance piece by long-standing collaborator friend, Erna Ómarsdóttir. For the album recording, Jóhann has rewritten it for a sixty-piece string orchestra, adding a new final movement and incorporating electronics and vintage reel-to-reel recordings of a singing 1401 found in his father's attic.
More well-known were various demo programs to play music on transistor radios placed on the CPU and computer "art", mostly kitschy pictures printed using Xs and 0s on chain printers.
IBM 1401 was the first computer introduced in Nepal for the census purpose in 1971. It took about one year to take the census of the country. At that time the population of Nepal was about 10,000,000.
A truck-based IBM 1401 configured in 1960 for military use was designated a portable computer, and nicknamed a DataMobile.

Videos