IBM 1401#Hardware implementation

{{Short description|1960s decimal computer}}

{{Use mdy dates|date=January 2015}}

{{Infobox CPU architecture

| image = CHM Demo Room.jpg

| caption = IBM 1401 at Computer History Museum

| name = IBM 1401

| designer = IBM

| bits = 6-bits plus word mark and parity

| introduced = 1959

| version =

| design = CISC

| type = Memory-Memory

| encoding = Variable

| branching = Branch instruction with modifier character

| endianness = Big-endian

| page size =

| extensions =

| open =

| registers = 3: Instruction Address Register (IAR), Instruction Register (IR), B Register

| gpr =

| fpr =

}}

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.{{cite book

|title=IBM's Early Computers

|last1=Boshe |first1=Charles J.|last2=Johnson|first2=Lyle R.|last3=Palmer|first3=John H.|last4=Pugh|first4=Emerson W.

|publisher=MIT Press |year=1986

|page=473

|quote=... configured for stand-alone use as well as peripheral service for larger computers ... A small configuration, without tapes and with the minimum memory capacity, was available for just under $2500 per month, a much lower rental for much higher performance than three 407 accounting machines plus a 604 calculator.}} The 1401 is considered by IBM to be the Ford Model-T of the computer industry due to its mass appeal.{{Cite web |title=The IBM 1401 |url=https://www.ibm.com/history/1401 |access-date=2024-01-05 |website=www.ibm.com |language=en-us}} 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

File:IBM1401 729Tape 1405Disk 1407Console COLOR.jpg Card Read-Punch, 1406 Storage Unit, 1405 RAMAC Disk Unit, 1407 Console Inquiry Station, 1401 Processing Unit, two 729 Magnetic Tape Units, 1403 Printer. (courtesy of IBM Archives)]]

The 1401 project evolved from an IBM project named "World Wide Accounting Machine" (WWAM), which in turn was a reaction to the success of the Bull Gamma 3.{{Cite web |title=Origins of Architecture and Design of the 1401 |url=https://ibm-1401.info/1401Origins.html |access-date=2023-07-28 |website=ibm-1401.info}}

The 1401 was used as an independent system in conjunction with IBM punched card equipment. It was also operated as auxiliary equipment to IBM 700 or 7000 series systems.{{cite web |title= 1401 Data Processing System |date= October 5, 1959 |work= IBM Archives |url= http://www.IBM.com/ibm/history/exhibits/mainframe/mainframe_PP1401.html |access-date= June 2, 2010 }}

Monthly rental for 1401 configurations started at US$2,500 (worth about ${{formatnum:{{Inflation|US|2500|1959|r=-2}}}} today).{{Cite web|url=http://www.columbia.edu/cu/computinghistory/1401.html|title=The IBM 1401|website=www.columbia.edu|accessdate=March 28, 2024}} Demand exceeded expectations.

"IBM was pleasantly surprised (perhaps shocked) to receive 5,200 orders in just the first five weeks – more than predicted for the entire life of the machine!"{{cite web |url=http://www.computerhistory.org/core/pdf/ibm_1401.pdf |title=Back to Life: The story behind CHM's IBM 1401 Restoration |author=Spicer, Dag |publisher=Computer History Museum |access-date=May 27, 2011 |url-status=dead |archive-url=https://web.archive.org/web/20101105110749/http://www.computerhistory.org/core/pdf/ibm_1401.pdf |archive-date=November 5, 2010 |df=mdy-all }} By late 1961, the 2000 units 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.{{cite web |title= FAQ's for Products and Services |work= IBM Archives |url= http://www.IBM.com/ibm/history/reference/faq_0000000011.html |access-date= June 2, 2010 }}

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 (such as the IBM 1402 Card Read-Punch) 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.

(For more information, see spooling.) Some later installations (e.g., at NASA) included the 1401 as a front-end peripherals controller to an IBM 7094 in a Direct Coupled System (DCS).

Elements within IBM, notably John Haanstra, an executive in charge of 1401 deployment, supported its continuation in larger models for evolving needs (e.g., the IBM 1410) 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 200among other things, Honeywell used the name Easycoder, resembling IBM's Autocoder.there was also a semi-automated converter of 1401 object code, named Liberator: {{cite web

|url=http://ibm-1401.info/1401-Competition.html#UsingLib

|title=Using Liberator}} 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.{{cite book

|title=Building IBM: Shaping an Industry and Its Technology

|author=Emerson W. Pugh |year=1995 |publisher=MIT

|isbn=0-262-16147-8 |page=273}}File:IBM 1401 signal tracing at CHM.jpg]]

Due to its popularity and mass-production, the IBM 1401 was often considered to be the first electronic mainframe computer to be introduced in various countries, such as Singapore (1963; for the Central Provident Fund Board){{cite web | url=https://www.smartnation.gov.sg/about-smart-nation/our-journey/milestones/ | title=Milestones }} and South Korea (1967; for the Economic Planning Board).[https://www.ibm.com/ibm/history/ibm100/us/en/icons/mainframe/transform/ Mainframe transform]ibm.com {{Webarchive|url=https://web.archive.org/web/20230815083313/https://www.ibm.com/ibm/history/ibm100/us/en/icons/mainframe/transform/ |date=August 15, 2023 }}서현진. (1997). 처음쓰는 한국컴퓨터사 (서울: 전자신문사). 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.{{cite web | title = 1401 Restoration Project | url = http://IBM-1401.info/index.html }}{{cite web | title = 1401 "Rebuilding the IBM," by Philip E. Ross, IEEE Spectrum, November 2009 | url = https://spectrum.ieee.org/computing/hardware/rebuilding-the-ibm-1401| archive-url = https://web.archive.org/web/20091103110802/http://spectrum.ieee.org/computing/hardware/rebuilding-the-ibm-1401| url-status = dead| archive-date = November 3, 2009}}

Architecture

File:IBM 1401 Control Panel.jpg

Each alphanumeric character in the 1401 is encoded by six bits, called B,A,8,4,2,1. The B,A bits are called zone bits and the 8,4,2,1 bits are called numeric bits, terms taken from the IBM 80 column punched card.

  • For digits 1 through 9, the bits B,A are zero, the digit BCD encoded in bits 8,4,2,1. Digit 0 is encoded 8,2.
  • For alphabetic characters the setting of bits is derived from the zone and digit punches of the IBM 80 column punched card character code: B,A from 12, B from 11, and A from 0; the setting of bits 8,4,2,1 from BCD encoding of the 1 through 9 punches. Thus the letter A, 12,1 in the punched card character code, is encoded B,A,1.
  • Encodings of punched card characters with two or more digit punches can be found in the character and op codes table.

IBM called the 1401's character code BCD ("binary-coded decimal"), even though that term describes only the decimal digit encoding.IBM and BCD The 1401's alphanumeric collating sequence is compatible with the punched card collating sequence.

Associated with each memory location are two other bits, called C for odd parity check and M for word mark. M is present in memory but not on punched cards, and has to be set using special machine instructions; when printing memory it is typically displayed by underlining the character. C is calculated automatically and is also not present on punched cards.

Each memory location then, has the following bits:

C B A 8 4 2 1 M

The 1401 was available in six memory configurations: 1,400, 2,000, 4,000, 8,000, 12,000, or 16,000 characters.{{efn|The 1401 is a decimal computer, so e.g. "8000" characters is not 8,192 characters.}} Each character is addressable, addresses ranging from 0 through 15999. A very small number of 1401s were expanded to 32,000 characters by special request.{{Cite book|last=Fedorkow|first=Guy|url=http://ibm-1401.info/IBM-1401-Theory-of-Operation-GF.pdf |archive-url=https://ghostarchive.org/archive/20221010/http://ibm-1401.info/IBM-1401-Theory-of-Operation-GF.pdf |archive-date=2022-10-10 |url-status=live|title=IBM 1401AModernTheory of Operation|year=2015|pages=143}}

Some operations use specific memory locations (those locations are not reserved and can be used for other purposes). Read a card stores the 80 columns of data from a card into memory locations 001–080. Index registers 1, 2 and 3 are in memory locations 087–089, 092-094 and 097-099 respectively. Punch a card punches the contents of memory locations 101-180 into a card. Write a line prints the contents of memory locations 201–332.

The 1401's instruction format is

Opcode

with [A-or-I-or-unit-address [B-address]] [modifier]

word mark

Opcodes are one character. Memory addresses ("I" a branch target, "A" and "B" data) and unit address are three characters. The opcode modifier is one character. Instruction length is then 1, 2, 4, 5, 7, or 8 characters. Most instructions have to be followed by a word mark (a requirement commonly met by the word mark with the opcode of the next instruction).

See Character and op codes for a list of operations.

A three-character memory address in an instruction is an encoding of a five-digit memory address. The three low-order digits of the five-digit address, 000 to 999, are specified by the numeric bits of the three characters. The zone bits of the high-order character specify 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 specify increments of 4000, 8000, or 12000, to address 16,000 memory locations (with an IBM 1406 Storage Unit).{{efn|More simply stated: the four zone bits encoded the decimal values 0 to 15 as the binary numbers 0000 to 1111. The encoded value is used as the thousands part of a 1401 address. Thus making the 1401 a curious machine with memory addresses stored as a combination of 3 decimal digits and 4 binary digits. IBM did not use the word "binary" in describing the 1401's addressing (see the 1401 Reference Manual).}} For example, the three-character address "I99" is a reference to memory location 3000 + 999, or 3999.

The zone bits of the middle character of a three-character memory address can specify one of three index registers, one of many optional features.

Operands referenced by the A-address and B-address can be: a single memory location, a variable-length field, or a variable-length record. Variable-length fields are addressed at their low-order (highest-addressed) position, their length defined by a word mark set at their high-order (lowest-addressed) position. When an operation such as addition is performed, the processor begins at the low-order position of the two fields and works 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 is the available memory. Instructions applicable to variable-length fields include: Add, Subtract, Multiply, Divide, Compare, Move Characters to A or B Word Mark, Move Characters and Edit. One or more adjacent variable-length fields can make up a variable-length record. A variable-length record is 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 can be used to assemble a block of records. A variable-length record, or block of records, to be written to magnetic tape is 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 can 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 can be coded as A 700,850, A, A - omitting data address from the second and third instructions.{{cite book |author =IBM |title =IBM 1401 Data Processing System: Reference Manual |date =April 1962 |id =A24-1403-5 |page =20 |url =http://bitsavers.org/pdf/ibm/140x/A24-1403-5_1401_Reference_Apr62.pdf |url-status =dead |archive-url =https://web.archive.org/web/20100809033646/http://www.bitsavers.org/pdf/ibm/140x/A24-1403-5_1401_Reference_Apr62.pdf |archive-date =August 9, 2010 |df =mdy-all }}

=IBM 1401G=

The IBM 1401G was sold in six models: (G1 and G11: 1,400 storage positions; G2 and G12 for 2,000; G3 and G13 for 4,000).

IBM 1401G, booklet 520-1061-0 One difference between the 1401 and 1401G is how the reader-punch is controlled.{{cite web

|url=http://www.textfiles.com/bitsavers/pdf/ibm/140x/A24-3067-2_1401_1460_System_Operation_Reference_Manual_Sep66.pdf |archive-url=https://web.archive.org/web/20150403205906/http://www.textfiles.com/bitsavers/pdf/ibm/140x/A24-3067-2_1401_1460_System_Operation_Reference_Manual_Sep66.pdf |archive-date=2015-04-03 |url-status=live

|title=System Operation Reference Manual. IBM 1401. IBM 1460}}

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 to indicate that it is an executable instruction, the word marks in locations 002-080 (if any) are cleared, and execution starts with the instruction at location 001. That is always the {{wt|en|dyadic}} Set Word Mark, to set word marks on the two following words (instructions). A single Set Word Mark instruction can set two word marks but requires one word mark to have been on itself, so a sequence of these instructions are needed, which incrementally set word marks in the program's code or data, and set word marks for subsequent Set Word Mark 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 (opcode 1) must be executed as the last instruction on every card to get the new card's contents into locations 001–080. Note that the word marks are not erased when the Read command is executed, but are kept as-is for the next card read in. This is convenient, because much of what the first few cards do is set word marks in the proper locations; having the first half dozen or so word marks set means the programmer does not need to set those word marks again.

One-card programs can 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.{{cite web | title = Tom Van Vleck: 1401s I have known | url = http://www.multicians.org/thvv/1401s.html }} Here is a one-card program which will print "HELLO, WORLD!". Pressing LOAD (above) reads one card, and begins execution at 001 (the first ,). The program will automatically set its own wordmarks, assuming that the first , has a wordmark already.

:,036008,040015,044022,051029,052053/299/332L0652132.HELLO, WORLD!

Following conventional IBM notation, the underscores{{clarify|date=September 2021}} show where word marks are set in memory once the program has run; on punched cards they would not be indicated visually or present in the punched data.

The program is:

  • Set Word Mark (opcode , operands 036 008). This must always be the first instruction, and one of its operands must always be 008 or else the next instruction would not have a word mark to indicate that it is an executable instruction.
  • Additional Set Word Marks. The underscores show where the word marks are after completing all , opcodes. Only word marks from 036 and further are needed for the "guts" of the program; word marks up through 029 are only needed for Set Word Mark instructions. Since the core of the program needs six word marks, five Set Word Mark instructions are needed in total. The reason one fewer is needed is because the final Set Word Mark does not need to waste an operand on other Set Word Marks
  • Clear Storage - the rest of the print area 299-200 (opcode / operand 299)
  • Clear Storage - part of the print area 332-300 (opcode / operand 332)
  • Move HELLO, WORLD! to the print area (opcode L, operands 065 and 213. Move stops due to the word mark in location 052 (which, doing double-duty, also defines the end of the Halt and branch instruction))
  • Write a Line on the printer (opcode 2; "HELLO, WORLD!" will be printed in the 13 leftmost printer positions)
  • Halt (opcode .)

Hardware implementation

{{main | transistor computer}}

File:IBM 1401 card cage.jpg]]

Most of the logic circuitry of the 1401 is a type of diode–transistor logic (DTL), that IBM referred to as CTDL (Complemented Transistor Diode Logic). Other IBM circuit types were referred to as: Alloy (some logic, but mostly various non-logic functions, named for the germanium-alloy transistors used), CTRL (Complemented Transistor Resistor Logic, a type of resistor–transistor logic (RTL)). Later upgrades (e.g., the TAU-9 tape interface) use a faster type of DTL using "drift" transistors (a type of transistor invented by Herbert Kroemer in 1953) for their speed, that IBM referred to as SDTDL (Saturated Drift Transistor Diode Logic). Typical logic levels of these circuits were (S & U Level) high: 0 V to -0.5V, low: -6 V to -12 V; (T Level) high: 6 V to 1 V, low: -5.5 V to -6 V.

These circuits are constructed of discrete components (resistors, capacitors, transistors) mounted on single-sided paper-epoxy printed circuit boards either {{convert|2.5|by|4.5|in|mm}} with a 16-pin gold-plated edge connector (single wide) or {{convert|5.375|by|4.5|in|mm}} with two 16-pin gold-plated edge connectors (double wide), that IBM referred to as SMS cards (Standard Modular System). The amount of logic on one card is similar to that in one 7400 series SSI or simpler MSI package (e.g., three to five logic gates or a couple of flip-flops on a single-wide card up to about twenty logic gates or four flip-flops on a double-wide card).

File:SMScard.jpg

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 uses magnetic-core memory. The cores are about 1 mm in diameter and use a four-wire arrangement (x, y, sense, and inhibit).

The memory is arranged in planes of {{not a typo|4000}}

cores each, each core storing one bit. A stack of eight such planes store 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.{{cite web

|url=http://members.optushome.com.au/intaretro/1401Core.htm

|title=Core memory frame from a 1401

|author=Rob Storey

|access-date=July 15, 2012

|archive-date=July 16, 2012

|archive-url=https://web.archive.org/web/20120716203935/http://members.optushome.com.au/intaretro/1401Core.htm

|url-status=dead

}} One such module is housed within the 1401's primary enclosure. Systems were commonly available with two, three, or four such modules. The additional modules are contained in an add-on box, the 1406 Core Memory Unit, which is about two feet square and three feet high.

File:IBM 1403 opened up2.jpg

Operands in memory are accessed serially, one memory location at a time, and the 1401 can read or write one memory location within its basic cycle time of 11.5 microseconds.{{cite web

|url=http://www.ibm-1401.info/1401GuidePosterV9.html

|title=The IBM 1401

|work=IBM 1401 Restoration Project |publisher=Computer History Museum

|access-date=July 15, 2012

|quote=The 1401’s clock frequency is 86,957 cycles per second, or about 87 kiloHertz! This corresponds to an 11.5 micro-second system clock cycle time. ... The 1401 CPU does everything in a character-serial manner. In order to add say two N-digit numbers, the CPU takes several cycles to fetch the instruction itself and then one cycle for every character of the instruction’s two operands or arguments, or 2N cycles total.}}

All instruction timings are cited in multiples of this cycle time.{{cite web

|url=http://ibm-1401.info/IBM-PrinProg-07.pdf |archive-url=https://ghostarchive.org/archive/20221010/http://ibm-1401.info/IBM-PrinProg-07.pdf |archive-date=2022-10-10 |url-status=live

|title=IBM 1401 Principles of Programming, Section 7

|year=1961 |work=IBM Personal Study Program |publisher=IBM Corporation

|page=19 |access-date=July 15, 2012

|quote=The timing of the IBM 1401 is described in terms of the time required for one complete core storage cycle, which is 11.5 microseconds ... The time required for any internal processing instruction is always a multiple of this interval of time.}}

IBM 1403 printer

File:IBM 729 restored.jpg being loaded onto an IBM 729 tape drive. An IBM 1403 line printer is in the foreground.]]

{{Main|IBM 1403}}

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:

  • 1401 Symbolic Programming System assembler.
  • Autocoder on Tape, a more advanced assembler, required at least 4000-character memory and four tape drives.
  • Autocoder on Disk, similar to, but not compatible with, Autocoder on Tape, required at least one 1311 disk drive.
  • COBOL required at least 4000-character memory and four tape drives.
  • FARGO (Fourteen-o-one Automatic Report Generation Operation), a predecessor of RPG, required at least 4000-character memory.
  • FORTRAN II required at least 8000-character memory; the 1401 Fortran compiler is described in Haines, L.H. (1965), below. The Fortran compiler, to generate code for small memories, used a pioneering form of interpreted "p-code" although its programmers had no name for what it was that they did.
  • FORTRAN IV required at least 12000-character memory and either four tape drives or at least one IBM 1311 disk drive.
  • RPG (Report Program Generator); Basic RPG required at least 4000-character memory.

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

Character and op codes

{{SpecialChars}}

The 1401's operation codes are single characters. In many cases, particularly for the more common instructions, the character chosen is mnemonic for the operation: A for add, B for branch, S for subtract, etc.

{{hidden begin

|title = Table of character and op codes

|titlestyle = background:#ccccff;

}}

The table is in Character Collating Sequence.

: Note: If Word mark bit is set, then the C bit will be opposite of shown. The C bit is determined and checked automatically by the machine - normally it is of no concern to the programmers. The only way the C bit can be entered is by manually using the switches on the Auxiliary Console. A programmer might use these switches to make quick patches while debugging.

class="wikitable"
BCD Character

! Print-A

! Print-H

!  Card 

! BCD

w/o M

! Operation

! Definition & Notes

align="center" | Blank

| align="center" |  

| align="center" |  

|  

| C      

|  

|  

align="center" | .

| align="center" | .

| align="center" | .

| 12-3-8

|  BA8 21

| Halt

|  

align="center" | ⌑

| align="center" | ⌑

| align="center" | )

| 12-4-8

| CBA84  

| Clear Word Mark

| Lozenge

align="center" | [

| align="center" |  

| align="center" |  

| 12-5-8

|  BA84 1

|  

|  

align="center" | <

| align="center" |  

| align="center" |  

| 12-6-8

|  BA842 

|  

| Less Than

align="center" | File:IBM 1401 Group Mark.GIF

| align="center" |  

| align="center" |  

| 12-7-8

| CBA8421

|  

| Group Mark

align="center" | &

| align="center" | &

| align="center" | +

| 12

| CBA    

|  

|  

align="center" | $

| align="center" | $

| align="center" | $

| 11-3-8

| CB 8 21

|  

|  

align="center" | *

| align="center" | *

| align="center" | *

| 11-4-8

|  B 84  

|  

|  

align="center" | ]

| align="center" |  

| align="center" |  

| 11-5-8

| CB 84 1

|  

|  

align="center" | ;

| align="center" |  

| align="center" |  

| 11-6-8

| CB 842 

|  

|  

align="center" | Δ

| align="center" |  

| align="center" |  

| 11-7-8

|  B 8421

|  

| Delta (Mode Change)

align="center" | -

| align="center" | -

| align="center" | -

| 11

|  B     

|  

|  

align="center" | /

| align="center" | /

| align="center" | /

| 0-1

| C A   1

| Clear Storage

|  

align="center" |,

| align="center" |,

| align="center" |,

| 0-3-8

| C A8 21

| Set Word Mark

|  

align="center" | %

| align="center" | %

| align="center" | (

| 0-4-8

|   A84  

| Divide

| Optional special feature.

align="center" | ˠ

| align="center" |  

| align="center" |  

| 0-5-8

| C A84 1

|  

| Word Separator

align="center" | \

| align="center" |  

| align="center" |  

| 0-6-8

| C A842 

|  

| Left Oblique

align="center" | ⧻

| align="center" |  

| align="center" |  

| 0-7-8

|   A8421

|  

| Tape Segment Mark

align="center" | ƀ

| align="center" | ‡

| align="center" | ‡

| bgcolor="C0C0C0" | N/A

0

 

|   A    

|  

| Cannot be read from card without a no-cost RPQ, in which case it is read as 8–2.{{efn|The RPQ "Reader/Punch Card Code 8-2 and A-Bit Compatibility" (898148) causes the 1401 to read/punch the A bit as 8-2 for compatibility with the IBM 1410.{{cite web|title=Custom Features for IBM 1401, 1440, and 1460 Data Processing Systems |url=http://bitsavers.org/pdf/ibm/140x/A24-3315-0_1401customFeatur.pdf |access-date=September 23, 2015 |url-status=dead |archive-url=https://web.archive.org/web/20120829025513/http://www.bitsavers.org/pdf/ibm/140x/A24-3315-0_1401customFeatur.pdf |archive-date=August 29, 2012 |df=mdy-all }}}}

Punches as zero (or 8–2 with the RPQ).

Blank with "even-parity" on tape.

align="center" | #

| align="center" | #

| align="center" | =

| 3-8

|    8 21

| Modify Address

| Optional (requires more than

4000 characters of memory)

align="center" | @

| align="center" | @

| align="center" | '

| 4-8

| C  84  

| Multiply

| Optional special feature.

align="center" | :

| align="center" |  

| align="center" |  

| 5-8

|    84 1

|  

|  

align="center" | >

| align="center" |  

| align="center" |  

| 6-8

|    842 

|  

| Greater Than

align="center" | √

| align="center" |  

| align="center" |  

| 7-8

| C  8421

|  

| Tape Mark

align="center" | ?

| align="center" | &

| align="center" | &

| 12-0

| CBA8 2 

| Zero and Add

| Plus Zero

align="center" | A

| align="center" | A

| align="center" | A

| 12-1

|  BA   1

| Add

|  

align="center" | B

| align="center" | B

| align="center" | B

| 12-2

|  BA  2 

| Branch or Branch on Indicator

| See "Modifiers for five-character Branch on Indicator (B) instruction" section

align="center" | C

| align="center" | C

| align="center" | C

| 12-3

| CBA  21

| Compare

|  

align="center" | D

| align="center" | D

| align="center" | D

| 12-4

|  BA 4  

| Move Numerical

| (Bits)

align="center" | E

| align="center" | E

| align="center" | E

| 12-5

| CBA 4 1

| Move Characters and Edit

|  

align="center" | F

| align="center" | F

| align="center" | F

| 12-6

| CBA 42 

| Control Carriage

| (Printer)

align="center" | G

| align="center" | G

| align="center" | G

| 12-7

|  BA 421

|  

|  

align="center" | H

| align="center" | H

| align="center" | H

| 12-8

|  BA8   

| Store B-Address Register

| Optional special feature.

align="center" | I

| align="center" | I

| align="center" | I

| 12-9

| CBA8  1

|  

|  

align="center" | !

| align="center" | -

| align="center" | -

| 11-0

|  B 8 2 

| Zero and Subtract

| Minus Zero

align="center" | J

| align="center" | J

| align="center" | J

| 11-1

| CB    1

|  

|  

align="center" | K

| align="center" | K

| align="center" | K

| 11-2

| CB   2 

| Select Stacker and other device controls

| See "Modifiers for Select Stacker (K) instruction" section

align="center" | L

| align="center" | L

| align="center" | L

| 11-3

|  B   21

| Load Characters to Word Mark

|  

align="center" | M

| align="center" | M

| align="center" | M

| 11-4

| CB  4  

| Move Characters to Word Mark

|  

align="center" | N

| align="center" | N

| align="center" | N

| 11-5

|  B  4 1

| No Operation

|  

align="center" | O

| align="center" | O

| align="center" | O

| 11-6

|  B  42 

|  

|  

align="center" | P

| align="center" | P

| align="center" | P

| 11-7

| CB  421

| Move Characters to

Record or Group Mark

| Optional special feature.

align="center" | Q

| align="center" | Q

| align="center" | Q

| 11-8

| CB 8   

| Store A-Address Register

| Optional special feature.

align="center" | R

| align="center" | R

| align="center" | R

| 11-9

|  B 8  1

|  

|  

align="center" | ‡

| align="center" | ‡

| align="center" | ‡

| 0-2-8

|   A8 2 

|  

| Record Mark

align="center" | S

| align="center" | S

| align="center" | S

| 0-2

| C A  2 

| Subtract

|  

align="center" | T

| align="center" | T

| align="center" | T

| 0-3

|   A  21

| Translate

| (1460 only)

align="center" | U

| align="center" | U

| align="center" | U

| 0-4

| C A 4  

| Control Unit

| (Tape)

align="center" | V

| align="center" | V

| align="center" | V

| 0-5

|   A 4 1

| Branch if Word Mark

and/or Zone

|  

align="center" | W

| align="center" | W

| align="center" | W

| 0-6

|   A 42 

| Branch if Bit Equal

| Optional special feature.

align="center" | X

| align="center" | X

| align="center" | X

| 0-7

| C A 421

| Move and Insert Zeros

| Optional special feature.

align="center" | Y

| align="center" | Y

| align="center" | Y

| 0-8

| C A8   

| Move Zone

| (Bits)

align="center" | Z

| align="center" | Z

| align="center" | Z

| 0-9

|   A8  1

| Move Characters and

Suppress Zeros

|  

align="center" | 0

| align="center" | 0

| align="center" | 0

| 0

| C  8 2 

|  

|  

align="center" | 1

| align="center" | 1

| align="center" | 1

| 1

|       1

| Read a Card

|  

align="center" | 2

| align="center" | 2

| align="center" | 2

| 2

|      2 

| Write a Line

|  

align="center" | 3

| align="center" | 3

| align="center" | 3

| 3

| C    21

| Write and Read

|  

align="center" | 4

| align="center" | 4

| align="center" | 4

| 4

|     4  

| Punch a Card

|  

align="center" | 5

| align="center" | 5

| align="center" | 5

| 5

| C   4 1

| Read and Punch

|  

align="center" | 6

| align="center" | 6

| align="center" | 6

| 6

| C   42 

| Write and Punch

|  

align="center" | 7

| align="center" | 7

| align="center" | 7

| 7

|     421

| Write, Read, and Punch

|  

align="center" | 8

| align="center" | 8

| align="center" | 8

| 8

|    8   

| Start Read Feed

| Optional special feature.

align="center" | 9

| align="center" | 9

| align="center" | 9

| 9

| C  8  1

| Start Punch Feed

| Optional special feature.

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

{{Col-begin}}

{{Col-break}}

=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 (making five characters total including the opcode), this made it a conditional branch. This "modifier" character specified the condition to be tested.

class="wikitable"
BCD Character

! Unit

! Meaning

align="center" | Blank

| 1401

| Unconditional—no word mark needed in next character

align="center" | 1

| 1009

| in run condition

 

| 1011

| punch in backspace operation

 

| 1011

| reader parity indicator on

 

| 1231

| auto select

 

| 1285

| error

 

| 1412

| control-check indicator on

 

| 1418

| late read

 

| 1419

| document to be read

 

| 1428

| late read or late reading mode change

 

| 1445

| printer error

 

| 7340

| hypertape unusual end

 

| 7740

| transmission complete with abnormal status

 

| DDC

| transmission error

align="center" | 2

| 1009

| buffer available

 

| 1011

| punch ready

 

| 1011

| reader ready

 

| 1231

| full buffer

 

| 1285

| end of line

 

| 1412

| reader-not-ready signal on

 

| 1418

| ready to engage

 

| 1419

| document under read head (PDS 4)

 

| 1428

| ready to engage

 

| 7340

| hypertape normal end

 

| 7740

| transmission complete successfully

 

| DDC

| transmission ended by GMWM

align="center" | 3

| 1009

| good transmission occurred

 

| 1011

| punch not ready to receive data

 

| 1231

| ready to read

 

| 1285

| reader transporting

 

| 1412

| read-check indicator on

 

| 1418

| document under selected read station

 

| 1419

| valid amount field

 

| 1428

| document under selected read station

 

| 7340

| hypertape control unit 7641 busy

 

| 7740

| receive request

 

| DDC

| read request

align="center" | 4

| 1009

| reply-bad indicator on

 

| 1011

| punch not ready to read

 

| 1231

| empty hopper

 

| 1285

| marked line

 

| 1412

| amount-field indicator on

 

| 1419

| valid process-control field

 

| 7340

| hypertape attention

 

| 7740

| 7740 attention

 

| DDC

| write request

align="center" | 5

| 1009

| error reply acknowledgement

 

| 1011

| punch overextended

 

| 1231

| read error or overrun

 

| 1285

| header information

 

| 1412

| process-control indicator on

 

| 1418

| document end

 

| 1419

| valid account-number field

 

| 1428

| document end

 

| 1445

| printer busy

align="center" | 6

| 1009

| program attention required

 

| 1011

| punch supply reel low or chad box full

 

| 1231

| timing mark check

 

| 1285

| ready to read a line

 

| 1412

| account-number indicator on

 

| 1418

| character on line

 

| 1419

| valid transit-number field

 

| 1428

| character on line

 

| 1445

| carriage busy

 

| DDC

| write in progress

align="center" | 7

| 1009

| end of message

 

| 1285

| reader ready

 

| 1412

| transit-number indicator on

 

| 1418

| empty hopper and transport (end of file)

 

| 1419

| valid serial-number field

 

| 1428

| empty hopper and transport (end of file)

 

| 1445

| carriage channel 9

 

| DDC

| read in progress

align="center" | 8

| 1009

| end of file

 

| 1285

| end of file

 

| 1412

| document-spacing-check indicator on

 

| 1418

| ready to read

 

| 1419

| auto-select

 

| 1428

| ready to read

 

| 1448

| carriage channel 12

 

| DDC

| system A stopped

align="center" | 9

| 1403

| carriage tape channel 9

align="center" | 0

| 1404

| validity error

align="center" | ' or @

| 1403

| carriage tape channel 12

align="center" | >

| 1448

| end of block

align="center" | /

| 1401

| unequal compare

align="center" | S

| 1401

| equal compare

align="center" | T

| 1401

| low compare

align="center" | U

| 1401

| high compare

align="center" | V

| 1301

| disk error

 

| 1311

| disk error

 

| 1405

| read or write parity check or read back check error

align="center" | W

| 1301

| wrong-length record

 

| 1311

| wrong-length record

 

| 1405

| wrong-length record

align="center" | X

| 1301

| unequal address compare

 

| 1311

| unequal address compare

 

| 1405

| unequal address compare

align="center" | Y

| 1301

| any disk-unit error condition

 

| 1311

| any disk-unit error condition

 

| 1405

| any disk-unit error condition

align="center" | Z

| 1401

| arithmetic overflow

align="center" | ‡

| 1403

| printer error (record mark)

align="center" | ( or %

| 1401

| process check with process check switch off

 

| 1440

| I/O check stop switch off

align="center" | \

| 1301

| access busy

 

| 1311

| access busy

align="center" | J

| 1419

| I/O channel-busy indicator

 

| TAU

| tape busy

 

| SIO

| serial input-output busy

align="center" | K

| TAU

| end of reel (writing) or tape mark (reading)

align="center" | L

| TAU

| tape error

align="center" | N

| 1301

| access inoperable

 

| 1311

| access inoperable

 

| 1405

| access inoperable

align="center" | P

| 1403

| printer busy

align="center" | Q

| 1407

| inquiry request

align="center" | R

| 1403

| carriage busy

align="center" | !

| 1402

| punch error

align="center" | *

| 1407

| inquiry clear

align="center" | + or &

| 1442

| last card (Reader unit 2)

align="center" | A

| 1402

| last card if SS A is on

align="center" | B

| 1401

| SS B

 

| 7340

| hypertape attention response

align="center" | C

| 1401

| SS C

align="center" | D

| 1401

| SS D

align="center" | E

| 1401

| SS E

 

| 7340

| hypertape end response

align="center" | F

| 1401

| SS F

align="center" | G

| 1401

| SS G

align="center" | H

| 1402

| reader busy

align="center" | I

| 1402

| punch busy

align="center" | ?

| 1402

| reader error

align="center" | <

| 1448

| early warning

{{Col-break}}

=Modifiers for Select Stacker (K) instruction=

The Select Stacker (K) instruction sent commands to various devices. It was named for its relevance to the 1402 reader/punch.

class="wikitable"
BCD Character

! Unit

! Meaning

align="center" | Blank

| 1401

| set program activity recording at BBB only if A is, dd

align="center" | 1

| 1402

| select last card read to stacker 1 if within 10 ms

align="center" | 2

| 1402

| select last card read to stacker 8/2 if within 10 ms

align="center" | 4

| 1402

| select previous card punched to stacker 4

align="center" | 8

| 1402

| select previous card punched to stacker 8/2

align="center" | = or #

| 1444

| select previous card punched to stacker 2

align="center" | L

| 1009

| operate in load mode

align="center" | $

| 1402

| overlap on

align="center" | A

| 1009

| suppress 3-second alarm

align="center" | C

| DDC

| read request

align="center" | D

| 1009

| set direction to receive

 

| DDC

| write request

align="center" | E

| 1009

| set direction to transmit

 

| DDC

| reset

align="center" | F

| 1009

| send EOF

align="center" | .

| 1402

| overlap off

align="center" | )

| 1402

| reset overlap

{{col-end}}

{{hidden end}}

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.{{cite web |url=http://www.ernaomarsdottir.com/index.php?/othershows/ibm-1401-a-users-manual/ |title=IBM 1401, A User's Manual-Live in Italy |access-date=January 29, 2015}} 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,{{cite web |url=http://www.ausersmanual.org/credits/ |title=Jóhann Jóhannsson: IBM 1401, A User's Manual |work=work's web site |access-date=January 29, 2015 |archive-url=https://web.archive.org/web/20150211064627/http://www.ausersmanual.org/credits/ |archive-date=February 11, 2015 |url-status=dead }} 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 are various demo programs to play music on transistor radios placed on the CPU{{cite web | title = 1401-music-Movie | website=YouTube | url = https://www.youtube.com/watch?v=myt6DApmiv0 }} and computer "art", mostly kitschy pictures printed using Xs and 0s on chain printers.{{Cite web |last= Gansing |first= Kristoffer |title= Working Paper version - Humans Thinking Like Machines - Incidental Media Art in the Swedish Welfare State |publisher= University of Malmö, School of Arts & Communication |year= 2007 |url= http://dspace.mah.se:8080/bitstream/handle/2043/7221/gansing_replace.pdf?sequence=1 |access-date= 29 November 2017 |archive-date= March 23, 2012 |archive-url= https://web.archive.org/web/20120323154737/http://dspace.mah.se:8080/bitstream/handle/2043/7221/gansing_replace.pdf?sequence=1 |url-status= dead }} A full version to be published in Place Studies in Art, Media, Science and Technology, VDG Weimar 2009

Other programs would generate music by having the printer print particular groups/sequences of characters using the impact of the printer hammers to generate tones.

An 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.

Truck-based portable version

A truck-based IBM 1401 configured in 1960 for military use was designated a portable computer, and nicknamed a DataMobile.[https://web.archive.org/web/20120403025431/http://www-03.ibm.com/ibm/history/ibm100/us/en/icons/mainframe/impacts/ IBM 1401: The Mainframe] --Cultural impacts[https://web.archive.org/web/20120403020416/http://www-03.ibm.com/ibm/history/ibm100/us/en/icons/mainframe/ IBM 1401: The Mainframe]-- Overview[http://www.columbia.edu/cu/computinghistory/1401.html Columbia University Computing History]--The IBM 1401

See also

Notes

{{Notelist}}

References

{{Reflist}}

Videos

  • [https://www.youtube.com/watch?v=FVsX7aHNENo IBM 1401 System - 50th Anniversary in the Computer History Museum] YouTube November 19, 2009
  • [https://www.youtube.com/watch?v=xUQnVt5qS-Y IBM 1401 French Presentation with English Subtitles] YouTube April 20, 2014
  • [https://www.youtube.com/watch?v=SOe6MHYtc3g&t=8s IBM 1401 for the Roper Corporation] YouTube May 14, 2015
  • [https://www.youtube.com/watch?v=uFQ3sajIdaM The IBM 1401 compiles and runs FORTRAN II] YouTube February 2, 2018

Further reading

  • {{cite book |title=IBM's Early Computers |last=Bashe |first=Charles J. |author2=Johnson, Lyle R |author3=Palmer, John H. |author4=Pugh, Emerson W. |year=1986 |publisher=MIT |isbn=0-262-02225-7 |pages=[https://archive.org/details/ibmsearlycompute00bash/page/717 717] |url-access=registration |url=https://archive.org/details/ibmsearlycompute00bash/page/717 }} Chapter 12 Broadening the Base pages 465–494, a history of IBM's 1401 and 1403 development
  • {{cite book |publisher=IBM

|title=IBM 1401 System Summary |id=A24-1401-1 |date=April 1966

|url=http://bitsavers.trailing-edge.com/pdf/ibm/1401/A24-1401-1_1401_System_Summary_Sep64.pdf |archive-url=https://ghostarchive.org/archive/20221010/http://bitsavers.trailing-edge.com/pdf/ibm/1401/A24-1401-1_1401_System_Summary_Sep64.pdf |archive-date=2022-10-10 |url-status=live

}} Brief descriptions of the machine features, components, configurations, and special features

  • {{cite book |publisher=IBM

|title=IBM 1401 Data Processing System: Reference Manual |id=A24-1403-5 |date=April 1962

|url=http://bitsavers.org/pdf/ibm/140x/A24-1403-5_1401_Reference_Apr62.pdf

|url-status=dead

|archive-url=https://web.archive.org/web/20100809033646/http://www.bitsavers.org/pdf/ibm/140x/A24-1403-5_1401_Reference_Apr62.pdf

|archive-date=August 9, 2010 |df=mdy-all}}