1401 Autocoder
Dick Weaver lent me a
large collection of manuals. Within that collection is the Customer
Engineering (CE) manual for 1401 Autocoder (1401-AU-037) version 3. Within
that manual there is a listing of Autocoder version 3. The collection of
documents Dick lent me also includes eleven modification letters for
Autocoder.
I have keyed in the code from that listing, assembled it with an assembler
I wrote, and compared the output with a deck from a tape that Dick Weaver
lent me. There are links below for my assembler, the source code for
Autocoder, the output "decks" and "listings," and the Autocoder distribution
deck that was on the tape Dick Weaver lent me.
I have transcribed the modification letters, too. There's a link below.
All of the files except the distribution deck for Autocoder that I got from
Dick Weaver are available as gnuzip-compressed "tar" files or "zip" archives.
The distribution deck for Autocoder is gnuzip compressed and zip archived.
It's not a tarball because it's only one file. The .zip files were all
prepared with the MSDOS end-of-line sequences.
- My Autocoder assembler (.tgz, .zip) is written in Fortran
90. It comes with a Makefile that uses the Lahey/Fujitsu Linux compiler. It works with GNU Fortran 95, and should work with any compiler
that supports the full Fortran 90 standard (I don't think I used anything
that's in Fortran 95 but not in Fortran 90). It doesn't do macros, IOCS, or
Disk I/O instructions (yet).
- The source code for Autocoder, in Autocoder
(.tgz,
.zip), is equivalent to
modification zero of level 3 of 1401-AU-037, plus some modifications that
removed two CC instructions (thereby causing Autocoder to use less paper).
There are a few differences:
- Macros were expanded manually (because my assembler doesn't handle
them -- yet)
- There is a seven-character BCE at sequence number 1866 (line 1669) in
phase 3. My assembler doesn't allow this, so I used "machine code" form --
there is a B op code in column 19 instead of a BCE mnemonic in column 16.
- My assembler puts the suffix in the first blank character of a label;
1401-AU-037 puts it in the sixth character if it's blank. There are references
to "TDF6 X", at pg/lin 13/25 and 13/29 in pass 2; notice the blank in the fifth
character and the suffix in the sixth. My assembler doesn't allow blanks in the
labels, so I had to put SFX X before and SFX B after. This causes sequence
numbers to be too large by four starting at sequence number 1350 (pg/lin
13/30). I can't just put TDF6X, because this is in a SFX B region, so the
result would be TDF6XB.
- There are some questionable instructions
MA &13,LIMAD
appears at sequence number 340 (line 219) of
autocoder5.s
. This should be MA &013,LIMAD
. It's
repaired in modification letter #4.
- The
NUREC
routine at sequence number 1211 (line 1027) of
autocoder3.s
branches to PUT
, which is a
subroutine. When PUT
returns, the first instruction of
GET
stores the B-address register at GETXX
. At
this point, it will be the address of the first instruction after
PUTXT
. Branches to NUREC
end up at
CKCOM
, not by returning to the next instruction. This may be
what was intended, but it's bizarre.
- Sequence numbers 596 and 597 (lines 466 and 467) of
autocoder5.s
are missing from the listing in the CE manual. They were apparently comment
lines (because the object decks match).
Questionable lines have ??? on them.
- There may be typos in the comments -- I proofread the code by comparing
my assembler's output to the "deck" on the tape that Dick sent me.
- "Deck" output from my assembler (.tgz,
.zip).
There is a separate deck for each of phases 1, 2, 7 and 8. Phases 3 and 4 are
in a single deck, and phases 5 and 6 are in a single deck. There's a C-shell
script "makedeck" that combines them, together with control cards in the file
"control.cd" to produce a distribution deck, which is also here. If you run
this deck, it makes an operational tape. This deck has no macros in it.
- "Listing" output from my assembler
(.tgz,
.zip). This uses column 1 for
vertical format control: blank = single space, 0 = double space, 1 = new
page. This is the convention that was used by 1401 tape-to-print utilities,
and Fortran. Here's my "ansi" filter that turns these into C "new line" and
"new page" character sequences:
#include <stdio.h>
main ( int argc, char* argv[] )
{ char c, d; /* characters being copied */
int first; /* 1 = first character of a line, zero = not */
setvbuf ( stdout, (char*)NULL, _IONBF, 1 );
first = 1;
while ( 1 )
{ c = getchar();
while ( ( c == '\n' ) | ( c == '\r' ) )
{ d = getchar();
if ( (c == '\r' & d == '\n') |
(c == '\n' & d == '\r') ) d = getchar();
c = d;
first = 1;
}
if ( c == EOF ) break;
if ( first )
{ if ( c == '0' ) { putchar ( '\n' ); putchar ( '\n' ); }
else if ( c == '1' ) { putchar ( '\n' ); putchar ( '\f' ); }
else if ( c == '+' ) putchar ( '\r' );
else putchar ( '\n' );
first = 0;
}
else putchar(c);
}
putchar ( '\n' );
}
- Postscript rendering of the listings
(.tgz,
.zip). These were made from
the listings using "ansi", then "enscript" with "line printer," "landscape"
and "Courier8 font" options, and then piped through "psnup -2" to get two per
page. Here's my script for it:
ansi < autocoder$1.lst | enscript -l -r --font Courier8 -o - | psnup -2 > autocoder$1.2.ps
Hmmm, Courier9 works for all but the first page. Weird.
- Distribution "deck" for Autocoder version 3, probably modification 11, from
the tape from Dick Weaver
(.gz
.zip). There is also
a "custom" modification by A. B. Platt here, to print A- and B-addresses in
decimal as well as machine form. This is a gnuzip-compressed plain text
file. Some of the transliterations from BCD to ASCII are: group mark = ",
record mark = ', lozenge = ). I can send you the original EBCDIC if you don't
like my transliterations.
- Modification letters from IBM (.tgz,
.zip), transcribed by hand. Also
available in PostScript (.tgz, .zip), landscape and one-up in
enscript's default line printer font.
- Paul Pierce has an
operational tape for Autocoder, which does not appear to include the
update letters included in the one from Dick Weaver, but it does have the IOCS
macros. It also has a modification that sends it back to the 1410 operating
system when it finishes.
I don't have my e-mail address here, to avoid spam, but you might try
nospam AT jpl DOT nasa DOT gov, after changing "nospam" to "van.snyder".