Est. 1965 Advanced

IBM 1130 Assembler

The symbolic assembly language of the IBM 1130, IBM's 16-bit desk-sized scientific computer announced in February 1965. It was the language its Disk Monitor System, compilers and APL\1130 were written in, and later gained a macro assembler

Created by IBM (1130 programming systems, San Jose)

Paradigm Assembly, Imperative, Low-level (with a macro assembler from about 1970)
Typing None (untyped); 16-bit words, with constants defined by DC, DEC (two-word), XFLC (three-word extended float) and EBC (EBCDIC text)
First Appeared 1965
Latest Version Macro Assembler of the 1130 Disk Monitor System, Version 2; the June 1974 DM2 guide (GC26-3717-10) applies to Version 2, Modification 12

IBM 1130 Assembler is the symbolic assembly language of the IBM 1130 Computing System. IBM announced the 1130 in February 1965 as a desk-sized scientific and engineering computer, and the first IBM machine to rent for under $1,000 a month. The assembler turned mnemonic instructions such as LD, STO, BSI and MDX into the 1130’s 16-bit binary machine code. It was punched onto cards or paper tape in fixed columns. It was the language in which IBM wrote the 1130’s operating system and compilers. Users wrote I/O drivers, interrupt handlers and speed-critical routines in it to call from Fortran. Over the following decade it grew from a two-pass card assembler into a disk-resident macro assembler.

The 1130 is remembered with unusual affection. An estimated 10,000 were built, and for many students, engineers and small firms it was their first hands-on computer. Its assembly language was often the next step after Fortran.

History & Origins

A small computer for engineers

IBM’s press release of 11 February 1965 introduced the 1130 as “designed for individual use by engineers, scientists and mathematicians”. The basic system rented for $695 a month or sold for $32,280; a typical configuration with a disk drive was $895 a month or $41,230. The 1130 used the Solid Logic Technology circuits of System/360 and 4,096 or 8,192 words of 16-bit core memory with a 3.6-microsecond cycle. IBM said it would deliver the first machines in the fourth quarter of 1965, from San Jose, with IBM World Trade building it in Greenock, Scotland, for customers outside the United States.

From the start, IBM supplied a basic programming package with the machine. Its 1965 Utility Routines manual (Form C26-5931-0) states that “the card and paper tape programming systems for the IBM 1130 System including the FORTRAN Compiler, Symbolic Assembler, Utility routines, and the Subroutine Library comprise the basic IBM-supplied programming systems for use by all 1130 System installations.”

The card and paper tape assembler

The first 1130 assembler worked without a disk. According to the IBM 1130 Assembler Language manual (C26-5927-2, 1966), it ran on an 1131 Model 1 processor with 4,096 words of core and either an IBM 1442 card read-punch or a paper tape reader and punch.

It was a two-pass program, and with cards the second pass was literal. The source deck went through the reader once to build the symbol table, then again. On the second pass the assembler punched the object code and any error flags into the first 20 columns of each source card, which is why source statements begin in column 21. The resulting “list deck” could be listed offline on an IBM 407 accounting machine or online with an IBM-supplied utility. It then had to go through a separate Compressor Program to produce a relocatable binary deck before it could be loaded and run.

The Disk Monitor and DM2

The disk-based 1130 Monitor came next. The 1966 manual already includes a section of “Monitor Assembler Statements”. These are DSA (Define Sector Address), which let a program refer to a disk file or core-image program by name; EXIT, which returns control to the Skeleton Supervisor; and LINK, which loads and runs another program.

In 1967 IBM introduced the Disk Monitor System, Version 2 (DM2), which is generally described as the most widely used 1130 operating system. Under DM2 an assembly was just another job step. A // ASM card invoked the assembler, and assembler control records chose its options: *LIST, *XREF (a cross-reference, on systems with 8K words or more), *PRINT SYMBOL TABLE, *LEVEL (required when assembling an interrupt service subroutine), and *TWO PASS MODE, which was required, for example, to punch a list deck on the 1442.

The Macro Assembler

The language’s last major addition was macros. IBM’s IBM 1130/1800 Macro Assembler Programming (GC26-3733-0, first edition June 1970) describes one Macro Assembler serving both the 1130 Disk Monitor System, Version 2, and the IBM 1800 Multiprogramming Executive. It added macro definition, conditional assembly (with ANOP, SET and PURG pseudo-operations), automatic name generation, concatenation and a disk-resident macro library maintained by a Macro Update Program. On the 1130 it was described as fully compatible with the existing DM2 assembler, but the macro capability needed 8K words of core.

Design Philosophy

The 1130 assembler was a classic one-for-one assembler. In its manual’s words, “the assembler produces one machine-language instruction for each symbolic-language instruction”. Its design followed from the machine and the medium:

  • Small, cheap memory. A minimum 1130 had 4,096 words of core, so the assembler and the programs it produced had to be compact. Short one-word instructions with an 8-bit displacement were preferred wherever a target was within reach.
  • Punched cards as the editor. Fixed columns, a 5-character label limit, and space reserved on the card for the object code all reflect a world where the source program was a physical deck.
  • Relocatable, linkable code. From the start the assembler could produce relocatable object programs. It also had statements for declaring entry points and calling library subroutines, so assembler routines and Fortran programs could be combined by the loader.

Key Features

Statement format

Each statement occupied one card (or one paper tape record), in fixed fields:

ColumnsField
1-20Left blank; object code is punched here during assembly
21-25Label (up to five alphameric characters); * in column 21 marks a comment
27-30Operation code (mnemonic)
32Format: blank or X for a short (one-word) instruction, L for a long (two-word) instruction, I for an indirectly addressed long instruction
33Tag: index register 1, 2 or 3 (blank or 0 for none)
35-71Operands and remarks
73-80Identification and sequence number

The machine it targets

The 1130 is a 16-bit, word-addressed machine with a 15-bit address space, so at most 32,768 words of core. Programs see an accumulator (ACC) and an extension register (EXT, called the Q register in early manuals) that together hold 32-bit values. They also see carry and overflow indicators, and three index registers, XR1-XR3. On the 1130 the index registers are not hardware registers but core locations 1, 2 and 3. The closely related IBM 1800 has real ones.

Instructions come in two formats:

  • Short (one word): an 8-bit signed displacement, relative to the instruction address or to an index register.
  • Long (two words): a full 16-bit address word, optionally indexed and optionally indirect.

The 1966 manual’s mnemonic table lists about thirty machine-instruction mnemonics, a few of which (such as BOSC and NOP) are variants of other instructions:

GroupMnemonics
Load and storeLD, LDD, LDX, LDS, STO, STD, STX, STS
Arithmetic and logicA, AD, S, SD, M, D, AND, OR, EOR
BranchBSI, BSC, BOSC, MDX
ShiftSLA, SLT, SLC, SLCA, SRA, SRT, RTE
Input/outputXIO
MiscellaneousNOP, WAIT

Floating point, both standard (two-word) and extended (three-word) precision, was not in hardware. It was done by library subroutines. The DM2-era assembler added extended mnemonics that made intent clearer, such as B, BP, BN, BZ and BNZ for the different forms of BSC, and XCH for exchanging the accumulator and extension.

Assembler instructions

PurposeStatements
Program controlABS, ORG, END, SPR / EPR (standard or extended precision)
Data definitionDC (one-word constant), DEC (two-word decimal), XFLC (extended floating constant), EBC (EBCDIC text)
Storage allocationBSS (Block Started by Symbol), BES (Block Ended by Symbol)
Symbol definitionEQU
Program linkingENT (entry point), ISS (interrupt service entry), ILS (interrupt level subroutine), CALL (two-word call), LIBF (one-word call through a transfer vector)
MonitorDSA, EXIT, LINK

Subroutine linkage without a stack

The 1130 has no hardware stack. A subroutine is entered with BSI (Branch and Store Instruction Counter), which stores the return address in the subroutine’s first word and continues at the next. The routine returns with an indirect branch through that word. Parameters were commonly placed in line after the call, with the subroutine adjusting its own return address to skip over them. This made recursion impossible without extra work. Self-modifying code was reportedly a normal technique on the 1130, with code patching instruction addresses at run time.

A short example

The following program adds ten numbers from a table, using index register 1 as a down-counter. The listing shows card columns 21 onward, as the source looks once the 20 object-code columns are dropped:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
*    SUM THE TEN WORDS AT TBL AND STORE THE RESULT IN TOTAL
START LDX   1 10      XR1 = 10, THE LOOP COUNT
      SLA     16      CLEAR THE ACCUMULATOR
LOOP  A    L1 TBL-1   ADD THE WORD AT TBL-1+XR1
      MDX   1 -1      XR1 = XR1-1, SKIP NEXT WHEN ZERO
      MDX     LOOP    SHORT BRANCH BACK TO LOOP
      STO  L  TOTAL   STORE THE SUM
      EXIT            RETURN TO THE MONITOR
TOTAL DC      0
TBL   DC      1
      DC      2
      DC      3
      DC      4
      DC      5
      DC      6
      DC      7
      DC      8
      DC      9
      DC      10
      END     START

Several 1130 habits show up here. L1 asks for a long, two-word instruction indexed by XR1. MDX 1 -1 decrements the index register and skips the next instruction when it reaches zero. A plain MDX with no tag serves as a one-word relative branch. EXIT hands control back to the DM2 Supervisor. This program assembles without errors with the ASM1130 cross-assembler (V1.22), which places EXIT as a branch to location /0038, the monitor’s fixed return point.

Evolution

PeriodAssemblerNotes
1965-66Card/Paper Tape AssemblerTwo passes; object code punched into source cards; Compressor Program step required
19661130 Monitor assemblerSame language plus DSA, EXIT and LINK for the disk-based monitor
1967 onwardDM2 assemblerDisk-resident; control records such as *LIST, *XREF, *TWO PASS MODE
1970 onwardDM2 Macro AssemblerMacros, conditional assembly, macro libraries; shared with the IBM 1800

IBM produced no compatible successor to the 1130. Its later small systems, such as the System/7 and Series/1, used different architectures, so 1130 assembly programs could not move to them.

Current Relevance

The 1130 assembler is a historical language, but it is easy to run. Brian Knittel’s IBM 1130 simulator, built on Bob Supnik’s SIMH and reportedly begun in 2001, simulates an 1131 processor with up to 32K words, the console, the 1132 printer, the 1442 card read-punch and disk drives. The download from ibm1130.org includes a disk image with DMS Release 2 Version 12, Fortran and the Macro Assembler, plus the complete DMS source. Knittel’s ASM1130 cross-assembler (version 1.00, February 2002; version 1.22, November 2012) assembles 1130 code on a modern computer and can rebuild DMS from that source. Both are part of the SIMH distribution.

Real hardware survives as well. As of 2025, complete or working 1130 systems were reported at ACONIT in Grenoble, The National Museum of Computing at Bletchley Park, the Computer History Museum, the University of Stuttgart and elsewhere. Restorer Carl Claunch has worked on several machines.

Why It Matters

The 1130 assembler is a clear, compact example of mid-1960s IBM assembly language design. It sits between the card-oriented assemblers of the 1401 era and the macro assemblers of System/360, and it went through both stages within a single machine’s lifetime. Much of the 1130’s character came from software written in it: the tightly packed DM2 operating system, APL\1130, and Guy Steele’s LISP 1.6, written as a high-school student.

It also left traces outside IBM. Chuck Moore, working on an 1130 at Mohasco Industries around 1968, ported his interpreter to Fortran there. He named it FORTH because, as he later wrote, the operating system “restricted file names to 5 characters”. The same 1130 environment is where he extended a cross-assembler into an 1130 compiler, adding words such as CODE and ;CODE. For a generation of programmers, the 1130 and its assembly language were their first close look at how a computer really works.

Timeline

1965
IBM announces the 1130 Computing System on 11 February, with rental from $695 a month and first deliveries scheduled for the fourth quarter. IBM's 1965 documentation lists a Symbolic Assembler, alongside a FORTRAN compiler, utility routines and a subroutine library, in the 1130's card and paper tape programming systems
1966
IBM reprints the IBM 1130 Assembler Language manual as C26-5927-2, incorporating a Technical Newsletter dated 10 March 1966. It covers the two-pass Card/Paper Tape Assembler and adds statements for the disk-based 1130 Monitor, such as DSA (Define Sector Address), EXIT and LINK
1967
IBM introduces the Disk Monitor System, Version 2 (DM2). It is generally described as the most widely used 1130 operating system, and its assembler is driven by control records such as *LIST, *XREF and *TWO PASS MODE
1970
IBM publishes IBM 1130/1800 Macro Assembler Programming (GC26-3733-0) in June. The Macro Assembler serves both the 1130 DM2 and the IBM 1800 Multiprogramming Executive. It is described as fully compatible with the DM2 assembler but needs 8K words of core for the macro capability
1972
Guy Steele, then at Boston Latin School, completes LISP 1.6 for the IBM 1130 by the end of February. The implementation was written in 1130 assembly language and uses the macro facility
1974
IBM issues the eleventh edition of the DM2 Programmer's and Operator's Guide (GC26-3717-10) in June. It applies to Version 2, Modification 12 of the Disk Monitor System
2002
Brian Knittel releases ASM1130, a cross-assembler for 1130 assembly language, as version 1.00 on 1 February. It is distributed with his SIMH-based IBM 1130 simulator, which he reportedly began in 2001
2008
Ray Comas reports in November that Guy Steele's 1130 LISP 1.6 is running again ("mostly", in his words) under the simulator, after Fausto Saporito and Comas each transcribed the assembly listing from photocopies of Steele's original

Notable Uses & Legacy

Disk Monitor System, Version 2 (DM2)

The 1130's disk operating system was written in assembly language. The source of DMS Release 2 Version 12 is distributed with the ibm1130.org simulator, with the job deck needed to build a clean disk image. ASM1130 has a DMS mode that handles the character substitutions used in that source.

IBM 1130 Lisp 1.6 (Guy Steele)

Steele wrote LISP 1.6 for the 1130 in 1971-72, while he was a student at Boston Latin School. The code is assembly language that uses the macro facility, and sample Lisp programs at its end include a pretty-printer, a trace utility and a symbolic differentiator. Steele later released it under a Creative Commons licence.

APL\1130

IBM's interactive APL for the 1130, which used the console keyboard and printer with a special APL character set. ibm1130.org holds both binary load decks and an APL\1130 source deck. ASM1130 gained a listing-offset option in 2004 specifically for viewing APL\1130 modules that are assembled to one address and loaded at another.

IBM subroutine library and Fortran support routines

The 1130's I/O drivers (such as CARD0, PRNT1 and DISKZ), its arithmetic and conversion routines, and support code for compiled Fortran were assembler subroutines, reached through the assembler's LIBF (one-word, via a transfer vector) and CALL (two-word) statements. Programmers used the same mechanism to give Fortran programs operations it lacked, such as a logical OR.

Running Today

Run examples using the official Docker image:

docker pull
Last updated: