FORTRAN II

Programmed by: John W. Backus, Robert J. Beeber, Sheldon Best, Richard Goldberg, Lois M. Haibt, Harlan L.  Herrick, Robert A. Hughes, Richard A. Nelson, Roy Nutt, David Sayre, Peter B. Sheridan, Harold Stern, David Sternlight, Irving Ziller.
Reconstructed by: Bob Abeles, Robert Cicconetti, Rich Cornwell, James Markevitch, Fausto Saporito.

This is a hypertext rendition of the source code of IBM's FORTRAN II compiler for the IBM 704/709/7090/7094. (See also LISP 1.5.)

The code was originally preserved in a printed listing (see Paul McJones's FORTRAN history page), from which an assembleable text was reconstructed. I wrote a small program to generate HTML from the code.

Unlike LISP 1.5, FORTRAN II is made up of many separate assemblies (over 200). Hence they are on separate pages, tabulated below. In addition to a listing, for each assembly cross-reference information for all symbols is available in the form of index pages. These list every symbol in alphabetical order. Click on a symbol's entry to reveal its definition and uses across the code. (In many cases, a symbol is documented by remarks given on the line defining it. But sometimes, especially for subroutines, there may be pertinent remarks-only lines preceding the point of definition. Thus any such remarks are included on the index pages. The lack of structure in comments means that it is difficult to tell where the relevant comments stop, so often spurious remarks are included.)

There are two kinds of line in the listings: comment lines (“remarks”) and code lines. Every line is numbered, and you can use that number to link to a particular line. (This is a deviation from the printed listing, which did not provide line numbers for assembler-generated lines, in order to make it easy to identify lines uniquely.) Code lines have several fields, many of which may be blank:

Flags, containing single-character markers that indicate problems with the line.

You can hover over the flags to see what they signify. In this listing they are mainly for absent fields in instructions.

Address, the location in memory.

Five octal digits, absent for pseudo-operations that did not result in any assembly.

Assembly, a representation of the machine word produced by the assembler.

One or more fields in several formats, related to the encoding of the instruction, absent for some pseudo-operations. The vast majority of instruction have a five-digit (octal) address part that you can look at to see the value of the expression in that field.

Line number, as explained above.
Location, usually containing a symbol to be defined as the address.

Today we would probably say “label”. The lone exception is with the HED psuedo-operation, which instead interpreted the first column as a character used to “head” symbols. Heading a symbol meant prefixing it with the head character and spaces to pad it to six characters (leaving it alone if it's already long enough). For example, if the head is “ L”, then LOAD is headed to L␣LOAD, but COMMON is unaffected by a head. Programmers can opt out per symbol by writing C$S, where C is the desired head character (or empty to indicate no head) and S is the name before heading. For example, C$MOV becomes C␣␣MOV, and $CPPI will always be ␣␣CPPI no matter what the head is. The point of this feature is to provide rudimentary namespace separation, so that symbols' “scope” could be limited to certain subprograms. Later assemblers supported multiple head simultaneously using the new HEAD pseudo-operation, which took an arbitrary number of heads in the variable field.

FORTRAN II does not use the heading feature very much.

When you click on a symbol in the location field, you'll be taken to its entry on the index page, described above.

Operation, containing the mnemonic for the operation.

Operations are either machine instructions (such as TRA or CLA or LDC, or commands for the assembler (such as BSS or TTL). When it's a machine instruction, * after the mnemonic indicates indirect addressing.

Variable field/remarks, containing operands and commentary.

This field usually consists of comma-separated expressions (the “variable field”) and then a comment after some whitespace. The variable field can sometimes contain spaces, when the operation is BCD or BCI or VFD.

Click on a symbol in the variable field to be taken to its point of definition. Occasionally a symbol is defined on a different page from the point of reference. If you hover over a symbol, you get a tooltip showing its meaning in octal and decimal (often you can also get this information from the assembled word on the left).

Enjoy!

1-CSAssemblySymbols
CARD TO TAPEAssemblySymbols
SECTION 6 CIT TO SAP CONVERSIONAssemblySymbols
SECTION 6 ON-LINE PRINTAssemblySymbols
TAPE 3,7 TO 2,6AssemblySymbols
SUCCESSFUL COMPILATIONAssemblySymbols
SOURCE PROGRAM ERRORAssemblySymbols
BATCH MONITORAssemblySymbols
MACHINE ERRORAssemblySymbols
SECTION 1 4K VERSIONAssemblySymbols
SECTION 1 DIAGNOSTICAssemblySymbols
SECTION 1 PRIMEAssemblySymbols
SECTION 1 DOUBLE PRIMEAssemblySymbols
SECTION 2 BLOCK 1AssemblySymbols
SECTION 2 BLOCK 2AssemblySymbols
SECTION 2 BLOCK 3AssemblySymbols
SECTION 2 BLOCK 4AssemblySymbols
SECTION 2 BLOCK 5AssemblySymbols
SECTION 2 BLOCK 6AssemblySymbols
OPEN SUBROUTINESAssemblySymbols
PART 1 OF MERGEAssemblySymbols
PART 2 OF MERGEAssemblySymbols
PART 3 OF MERGEAssemblySymbols
SECTION 4AssemblySymbols
SECTION 5AssemblySymbols
SECTION 5 PRIMEAssemblySymbols
SECTION 6 RECORD AAssemblySymbols
SECTION 6 RECORD BAssemblySymbols
SECTION 6 RECORD CAssemblySymbols
SECTION 6 RECORD DAssemblySymbols
SECTION 6 RECORD EAssemblySymbols
SECTION 6 RECORD FAssemblySymbols
SECTION 6 RECORD GAssemblySymbols
SECTION 6 RECORD HAssemblySymbols
SECTION 6 RECORD IAssemblySymbols
SECTION 6 RECORD JAssemblySymbols
SECTION 6 RECORD KAssemblySymbols
SECTION 6 RECORD LAssemblySymbols
SECTION 6 RECORD MAssemblySymbols
SECTION 6 RECORD NAssemblySymbols
SECTION 6 RECORD PAssemblySymbols
SECTION 1 8K VERSIONAssemblySymbols
SECTION 5 8K VERSIONAssemblySymbols
DBC (PERMANENT LIBRARY)AssemblySymbols
CSH (PERMANENT LIBRARY)AssemblySymbols
TSH (PERMANENT LIBRARY)AssemblySymbols
BDC (PERMANENT LIBRARY)AssemblySymbols
SCH (PERMANENT LIBRARY)AssemblySymbols
SPH (PERMANENT LIBRARY)AssemblySymbols
STH (PERMANENT LIBRARY)AssemblySymbols
LRT (PERMANENT LIBRARY)AssemblySymbols
EXP 1 (PERMANENT LIBRARY)AssemblySymbols
EXP 2 (PERMANENT LIBRARY)AssemblySymbols
EXP 3 (PERMANENT LIBRARY)AssemblySymbols
LOG (GENERAL LIBRARY)AssemblySymbols
SIN/COS (GENERAL LIBRARY)AssemblySymbols
EXP (GENERAL LIBRARY)AssemblySymbols
SQRT (GENERAL LIBRARY)AssemblySymbols
ATAN (GENERAL LIBRARY)AssemblySymbols
TANH (GENERAL LIBRARY)AssemblySymbols
EDT (EDITOR PROGRAM)AssemblySymbols
PLIB (PERMANENT LIBRARIAN)AssemblySymbols
GLIB (GENERAL LIBRARIAN)AssemblySymbols
TCVP (TAPE COPY AND VERIFY PROGRAM)AssemblySymbols
BSS LOADER (BINARY SYMBOLIC SUBROUTINE LOADER)AssemblySymbols
DIAGNOSTIC EDITORAssemblySymbols
DIAGNOSTIC CALL-IN EXAMPLEAssemblySymbols
DIAGNOSTIC READ-INAssemblySymbols
MAIN DIAGNOSTIC RECORDAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols
DIAGNOSTIC ERROR COMMENTAssemblySymbols