software: Added more and more
[pdp8.git] / sw / os8 / v3d / sources / system / dectapes / dectape6 / PAL8.PA
diff --git a/sw/os8/v3d/sources/system/dectapes/dectape6/PAL8.PA b/sw/os8/v3d/sources/system/dectapes/dectape6/PAL8.PA
new file mode 100644 (file)
index 0000000..b2a49cd
--- /dev/null
@@ -0,0 +1,5373 @@
+/2 PAL8 ASSEMBLER FOR OS/8 MONITOR     VERSION 10
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/COPYRIGHT  (C) 1970,1971,1972,1973,1974,1975 BY DIGITAL EQUIPMENT CORPORATION
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
+/AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
+/CORPORATION.  DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
+/FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT.
+/
+/THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
+/UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
+/(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
+/SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
+/
+/DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
+/OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
+/DIGITAL.
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/
+\f/1-OCT-75                             MB/MB/SM/MB/RL/JR/SR
+
+DECIMAL
+
+VERSION=       10
+SUBVERSION=    "A
+
+OCTAL
+
+/PAL8 IS AN 8K THREE PASS ASSEMBLER DESIGNED 
+/TO BE COMPATIBLE WITH THE OS/8 SYSTEM.
+
+/PASS 1 READS THE INPUT (SOURCE) FILE AND CONSTRUCTS
+/THE SYMBOL TABLE.
+
+/PASS 2 GENERATES THE BINARY (OBJECT) FILE, WHICH
+/MAY BE LOADED WITH THE ABSOLUTE (BINARY) LOADER.
+
+/PASS 3 GENERATES THE OCTAL SYMBOLIC ASSEMBLY
+/LISTING.
+
+/PAL8 IS COMPATIBLE IN MOST RESPECTS WITH PAL III, MACRO-8
+/4K PAL-D, AND 8K PAL-D, AS WELL AS THE CROSS-ASSEMBLER PAL10.
+
+       IFNDEF HASH<HASH=1>     /DEFINE FOR HASH SYMBOL TABLE
+/SET HASH=0 TO GET OLD PAL8 WAY OF HANDLING SYMBOL TABLE
+
+/MAINTENANCE RELEASE CHANGES:
+
+/1.    INCLUDED JIM ROTH'S HASH TABLE MODIFICATIONS
+/2.    ALLOWED /B TO WORK PROPERLY [SEQ #2 PATCH FROM AUG '74 DSN]
+/3.    PUT CREFLS.TM ON SYS: NOT DSK: [PATCH SEQ #3, SEP '74 DSN]
+/4.    FIXED 7TH LEVEL CHECKSUM BIT [PATCH SEQ #7, MARCH '75 DSN]
+/5.    ALLOWED PAL8 TO RESTART BEFORE CD EXECUTED [DSN APR '75, SEQ #8]
+/6.    FIXED /F SO IT WORKS [PATCH SEQ #9, DSN APRIL 1975]
+/7.    FIXED /W SO IT DOESN'T REMEMBER TOP OF PAGE [DSN OCT '75]
+/8.    FIXED BUG RE MULTIPLE NON-RES INPUT HANDLERS
+/9.    CHANGED VERSION # TO V10, EDIT 1, 1975 COPYRIGHT
+/10.   ADDED DOCUMENTATION ON LOCATION OF HANDLERS AND BUFFERS
+/11.   CORE ALLOCATION:
+/      WITHOUT /K, ALL CORE BUT 10000-11777 USED FOR SYMBOLS
+/      WITH /K, USES ALL CORE (AND SWAPS USR BETWEEN PASSES)
+/      UNDER BATCH, N5000-N7777 IS RESERVED FOR BATCH RESIDENT AS WELL
+/12.   /7 WITH HASH FEATURES PRINTS 7 COLUMN SYMBOL TABLE
+/13.   14-DEC-75 JR: FIXED TYPO IN /W CODE IN LITERAL DUMP ROUTINE
+
+/JR    14-APR-77 ADDED STANDARD DATE FORMAT TO HEADING
+\f/COMMAND DECODER RULES:
+
+/*BINARY(.BN),LISTING(.LS),CREF(.LS)<SOURCE(.PA),.../OPTIONS
+
+/OPTIONS:
+/B     BYTE SHIFT      - ! IS 6 BIT SHIFT (!=^100+)
+/C     CREF AFTER      - "CREFLS.TM" CREATED IF NO CREF
+/D     DDT TYPE SYMBOL - ONLY IF LISTING
+/E     'LG' ERROR      - LINKS ARE ERRORS
+/F     NO TEXT FILL    - NO EXTRA 0 FILL IN 'TEXT'
+/G     LOAD+GO AFTER   - SAME AS /L, BUT /G PASSED TO ABSLDR
+/H     NO PAGING       - ONLY IF LISTING
+/J     JUST WHAT LOADS - INHIBITS LISTING OF UNASSEMBLED CODE
+/K     CHECK FOR MORE THAN 8K OF CORE (DEFAULT IS 8K)
+/L     LOAD AFTER      - "PAL8BN.TM" CREATED IF NO BINARY
+/N     NO LISTING      - ONLY IF LISTING
+/O     NO 200 ORG      - NO AUTOMATIC 200 ORIGIN AFTER 'FIELD'
+/S     NO SYMBOL TABLE - ONLY IF LISTING
+/T     CR-LF NOT FF    - ONLY IF LISTING
+/W     WIPE LITERALS   - INHIBITS REMEMBERING OF LITERAL BOUNDS
+
+/PERMANENT PATCH LOCATIONS FOR THE ABOVE SWITCHES ARE SYMBOLS
+/OF THE FORM Z(SW)(PATCH) - E.G. ZT7640 IS THE LOC TO PATCH TO 7640
+/TO REVERSE THE POLARITY OF THE "T" SWITCH.
+
+/PSEUDO-OPS:
+/DECIMAL       RADIX TO BASE 10
+/DEVICE                2 WORD DEVICE CODE
+/DTORG         TYPESETTING TAPE ORIGIN
+/EJECT         SKIPS TO A NEW PAGE, AND IF ANY TEXT FOLLOWS,
+/              THAT TEXT BECOMES THE NEW HEADER LINE
+/ENPUNCH       ENABLE PUNCHING
+/EXPUNGE       REMOVE ALL SYMBOLS
+/FIELD         SET FIELD
+/FILENAME      4 WORD FILE CODE
+/FIXMRI                DEFINE MEMORY REFERENCE INSTRUCTION
+/FIXTAB                MAKE ALL SYMBOLS PERMANENT
+/IFDEF         CONDITIONAL ON DEFINITION
+/IFNDEF                CONDITIONAL ON UNDEFINED
+/IFNZRO                CONDITIONAL ON NON-ZERO
+/IFZERO                CONDITIONAL ON ZERO
+/NOPUNCH       DISABLE PUNCHING
+/OCTAL         RADIX TO BASE 8
+/PAGE          RE-ORIGIN TO BEGINNING OF NEXT PAGE OR PAGE N
+/PAUSE         ALTERNATE END-OF-FILE
+/RELOC         ASSEMBLE FOLLOWING CODE AS IF LOC = ARG OF RELOC
+/TEXT          6 BIT TEXT
+/XLIST         LISTING INHIBIT UNLESS THE XLIST IS
+/              FOLLOWED BY AN EXPRESSION. THEN IF THE EXPRESSION
+/              IS 0 START LISTING, OR NON-0 THEN INHIBIT LISTING
+/ZBLOCK                RESERVE BLOCK OF ZEROS
+\f/SYMBOL LAYOUT:
+
+/      WORD 1  BIT 0=1 PERMANENT SYMBOL
+/              BIT 1=1 "I" OR "Z"
+/              BITS 3-11       CHARS 1 AND 2
+/
+/      WORD 2  BIT 0=1 MEMORY REFERENCE INSTRUCTION
+/              BITS 2-11       CHARS 3 AND 4
+/
+/      WORD 3  BIT 0=1 PSEUDO-OP
+/              BITS 2-11       CHARS 5 AND 6
+/
+/      WORD 4  BITS 0-11       OCTAL VALUE
+/CHARS ARE STORED AS:
+/      A TO Z ARE 01 TO 32
+/      0 TO 9 ARE 33 TO 44
+/
+/      CHAR1^45+CHAR2
+
+/OPERATORS:
+/+             TWO'S COMPLEMENT ADD
+/-             TWO'S COMPLEMENT SUBTRACT
+/&             BOOLEAN AND
+/!             BOOLEAN INCLUSIVE 'OR' OR BYTE SHIFT
+/  (SPACE)     DELIMITER OR INCLUSIVE OR
+/^             MULTIPLY (REPEATED ADDITION)
+/%             DIVIDE (REPEATED SUBTRACTION)
+\f/DEFINITIONS
+
+ASWAP= 40              /WATCH THIS SWAP AREA!!
+MDATE= 7666            /MONITOR DATE
+BIPCCL=        7777            /DATE EXTENSION AND BATCH IN PROG FLG IN FIELD 0
+MPARAM=        7643            /COMMAND DECODER OPTION LIST
+DCB=   7760            /DEVICE CONTROL BLOCK
+JSBITS=        7746            /JOB STATUS WORD
+BATOUT=        7400            /BATCH LOG OUTPUT ROUTINE IN BATCH RESIDENT
+LNPRPG=        70              /56 LINES PER PAGE
+HEDLEN=        50              /40 CHARACTERS IN PAGE TITLE
+                       /(MUST BE A MULTIPLE OF 8)
+
+AC7776=        STA CLL RAL
+AC7775=        STA CLL RTL
+AC4000=        STL CLA RAR
+AC3777=        STA CLL RAR
+AC2000=        STL CLA RTR
+AC0002=        STL CLA RTL
+
+
+/TABLE OF ERROR MESSAGE DEFINITIONS
+
+
+IZ= "I-240^100+"Z-240  /ILLEGAL PAGE ZERO REFERENCE
+CF= "C-240^100+"F-240  /CREF.SV NOT FOUND
+US= "U-240^100+"S-240  /UNDEFINED SYMBOL
+IP= "I-240^100+"P-240  /ILLEGAL PSEUDO-OP USAGE
+SE= "S-240^100+"E-240  /SYMBOL TABLE EXCEEDED
+ZE= "Z-240^100+"E-240  /PAGE ZERO EXCEEDED
+PE= "P-240^100+"E-240  /CURRENT PAGE EXCEEDED
+IC= "I-240^100+"C-240  /ILLEGAL CHARACTER
+ID= "I-240^100+"D-240  /ILLEGAL DEFINITION
+BE= "B-240^100+"E-240  /PUSH-DOWN OVERFLOW
+DE= "D-240^100+"E-240  /DEVICE ERROR
+DF= "D-240^100+"F-240  /DEVICE FULL
+LD= "L-240^100+"D-240  /ABSLDR.SV NOT FOUND
+IE= "I-240^100+"E-240  /ILLEGAL EQUATE
+PH= "P-240^100+"H-240  /PHASE ERROR
+II= "I-240^100+"I-240  /ILLEGAL INDIRECT
+RD= "R-240^100+"D-240  /REDEFINITION
+UO= "U-240^100+"O-240  /UNDEFINED ORIGIN
+LG= "L-240^100+"G-240  /LINK GENERATED
+
+
+
+/ABBREVIATIONS
+/CR/LF CARRIAGE RETURN/LINE FEED (215,212)
+/F/F   FORM FEED (214)
+\f/PAGE ZERO
+
+*0
+FORMF6,        0               /USED IN DECIMAL PRINT ROUTINE
+ERROR5,        0               /USED BY PACKED ASCII PRINT ROUTINE
+PTR,   0               /V3C USED BY
+KNTR,  0               /INPUT ROUTINE
+
+/AUTOINDEX REGISTERS
+/PRESET FOR ONCE ONLY CODE
+
+*10
+PDLXR, PDLST           /PUSH-DOWN AUTO INDEX REGISTER
+TAGXR, SWAP1-1         /TAG AUTO INDEX REGISTER
+XREG1, DSWIT1-1        /GENERAL AUTO INDEX REGISTER
+XREG2, DSWIT2-1        /GENERAL AUTO INDEX REGISTER
+
+/NOT USED AS AUTO INDEX REGISTERS
+/EXCEPT DURING ONCE ONLY CODE
+
+LAST1, DATE-1          /LAST DEFINED SYMBOL
+LAST2, SWAP2-1
+LAST3, IFZERO  HASH    <SYMPRT+4-1>
+       IFNZRO  HASH    <SYMNWP-1>
+LAST4, IFZERO  HASH    <SYMPR9-2-1>
+       IFNZRO  HASH    <SYMDDT-1>
+
+*20
+TAG1,  0               /TAG STORAGE
+TAG2,  0
+TAG3,  0
+
+LITPTR,        200             /LITERAL POINTER
+
+RADIX, 0               /7777 IF DECIMAL MODE
+PUNCHX,        0               /NON-ZERO IF NO PUNCHING
+XLISTX,        0               /NON-ZERO IF NO LISTING
+/*NOTE* PUNCHX AND XLISTX MUST BE TOGETHER
+/AND IN THIS ORDER
+
+LOC,   200             /CURRENT LOCATION
+OFFSET,        0               /LOCATION COUNTER OFFSET FROM "LOC"
+OFSBUF,        0               /LOCATION COUNTER OFFSET BUFFER
+STARSW,        0               /-1 IF NEXT ORIGIN SHOULD BE INHIBITED
+
+OP,    0               /LAST OPERATOR CODE (0-6)
+VALUE, 0               /EXPRESSION VALUE
+VALUE2,        0               /EXPRESSION OPERAND
+
+TXTSWT,        0               /SPACE SWITCH
+TXTPTR,        LINBUF+120      /TEXT POINTER
+CHAR,  0               /CURRENT CHARACTER
+
+THISPG,        0               /OVERFLOW PAGE
+EDITPG,        0               /EDITOR PAGE
+\fTEMP, 0               /TEMPORARY REGISTERS
+TEMP1, 0
+TEMP2, 0
+TEMP3, 0
+
+OCHAR, OUTPUT          /OUTPUT ROUTINE
+OERROR,        OTYPEO          /PASS 1=OTYPEO; 2=OTYPEO; 3=LISOUT
+PASS,  -2              /-1 IF PASS 1, 0 IF PASS 2, 1 IF PASS 3
+IOMON, 200             /USER SERVICE ROUTINES
+CONDSW,        0               /NUMBER OF NESTED CONDITIONALS
+EXPIND,        0               /0 IF MRI OK HERE
+                       /NOT 0 IF MRI NOT OK HERE
+CHKSUM,        0               /BINARY CHECK SUM
+IZIND, 0               /"I" AND "Z" INDICATOR
+                       /IF I, LEFT 6 BITS ARE NON-ZERO
+                       /IF Z, RIGHT 6 BITS ARE NON-ZERO
+THISTG,        0               /ASSIGNED NUMBER OF CURRENT TAG
+HIGHTG,        SYME-SYMS%4-1   /ASSIGNED NUMBER OF LAST TAG
+LINCNT,        0               /LINE COUNT
+ALPHAI,        0               /UNDEFINED TAG INDICATOR
+                       /-1 IF UNDEFINED
+GETCI, 0               /NOT=0 IF ONLY CARRIAGE RETURN ENDS LINE
+                       /OTHERWISE /,;, OR CARRIAGE RETURN ENDS
+LSTCNT,        0               /TAB COUNTER
+UNDFSW,        0               /UNDEFINED SWITCH
+INCTL, 601             /CONTROL WORD - FOR OS/8 I/O
+LINKSW,        0               /OFF-PAGE LINK SWITCH
+                       /0 IF NO LINK GENERATED, 0700 IF LINK
+LININD,        0               /BACK-UP FOR LINKSW
+PERROR,        PERRO1          /DUMMY ERROR ROUTINE TO SUPPRESS CERTAIN
+                       /MESSAGES DURING PASS 1
+FLDIND,        "0              /CURRENT FIELD IN ASCII DIGIT FORM
+BINSRT,        0               /BINARY OR LISTING STARTING
+ERCNT, 0               /ERROR COUNTER
+LINK,  0               /LINK COUNTER
+       IFNZRO HASH<
+TAGMAX,        0               /SET TO PRIME # EQ TO MAX # SYMS
+       >
+       PAGE
+\f/STARTING ADDRESS OF PAL8 (0200)
+/CHAINING ADDRESS (0201)
+
+NAME1, JMP I NAME3     /NAME1-NAME3 USED LATER
+NAME2, JMP I GETTA2    /TO STORE TAGS AS THEY ARE BUILT
+NAME3, BEGIN           /V3C
+GETTA2,        NOCD            /BUILDING SWITCH AND OVERFLOW PROTECT
+
+
+/HANDLERS FOR NOPUNCH AND ENPUNCH PSEUDO-OPS
+
+NOPUNX,        CLA IAC         /NON-ZERO FOR NO PUNCHING
+ENPUNX,        DCA PUNCHX      /ZERO FOR PUNCHING
+       JMP I [LOOKEX   /--EXIT TO MAIN--
+
+
+/HANDLERS FOR DECIMAL AND OCTAL PSEUDO-OPS
+
+DECIMX,        STA             /7777 FOR DECIMAL RADIX
+OCTALX,        DCA RADIX       /ZERO FOR OCTAL RADIX
+       JMP I [LOOKEX   /--EXIT TO MAIN--
+\f/GET A TAG ROUTINE
+/PICKS UP A TAG AND SEARCHES FOR IT
+/"THISTG" HAS NUMBER OF TAG
+/"VALUE2" HAS VALUE
+/AC=7777 ON RETURN IF TAG NOT FOUND, 0 IF FOUND
+
+GETTAG,        0
+       DCA NAME1       /CLEAR BUILD AREA
+       DCA NAME2
+       DCA NAME3
+       TAD [NAME1
+       DCA GETTA4      /SET POINTER FOR BUILDING
+       DCA GETTA2      /ZERO SWITCH
+GETTG1,        TAD CHAR        /GET THE CHARACTER
+       AND [77         /MAKE IT 01-32 OR 60-71
+       TAD (-32        /WAS IT A TO Z?
+       SMA SZA
+       TAD (-25        /NO - MAKE 60-71 INTO 33-44
+       TAD (32         /YES - IT IS NOW 01-32 OR 33-44
+       ISZ GETTA2      /LEFT SIDE?
+       JMP GETTA3      /YES
+       TAD I GETTA4    /NO - RIGHT SIDE
+       DCA I GETTA4    /BUILD THE WORD
+       ISZ GETTA4      /BUMP TO NEXT WORD
+GETTA1,        JMS I [GETC     /GET NEXT CHARACTER
+       JMS I [TSTALN   /IS IT ALPHANUMERIC?
+       JMP GETTG1      /YES - KEEP BUILDING
+       IFZERO HASH<
+       TAD HIGHTG      /NO - GET NUMBER OF HIGHEST TAG
+       CLL RAR         /DIVIDE BY 2
+       DCA TEMP2       /SAVE DIFFERENCE
+       DCA THISTG      /START AT TAG ZERO
+       CLL CML         /LINK MUST BE ON INITIALLY
+       DCA TEMP1
+
+
+/GETTA4 IS POINTER TO NAME1-NAME3
+/FOR DEPOSITING TAG AS IT IS BUILT
+
+/TEMP2 IS # OF TAGS TO SKIP BETWEEN CHECKS FOR MATCH
+/DURING BINARY SEARCHING
+\fGETTG2,       SZL             /IS THISTG HIGHER THAN TAG?
+       JMP GETTG3      /NO-LOWER
+GETTG4,        DCA TEMP1       /CLEAR LAST TIME SWITCH
+       SNL
+       ISZ TEMP1       /SET LAST TIME SWITCH TO 1
+       TAD TEMP2       /GET # OF TAGS TO SKIP
+       SNL
+       CIA
+       TAD THISTG      /INCREASE OR DECREASE TAG NUMBER
+       DCA THISTG
+       TAD TEMP2       /GET NUMBER
+       CLL RAR         /DIVIDE BY 2
+       SNA             /IS RESULT 0?
+       ISZ TEMP1       /YES-BUMP LAST TIME SWITCH
+       SNA
+       IAC             /IF RESULT WAS 1, MAKE IT 2
+       DCA TEMP2       /SAVE IT FOR NEXT TIME
+       JMS I [FINDTG   /GET THE TAG
+       TAD [1777       /MASK
+       AND TAG1        /GET WORD 1
+       CLL CIA
+       TAD NAME1       /DOES IT MATCH?
+       SZA CLA
+       JMP GETTG2      /NO - TRY NEXT TAG
+       AC3777
+       AND TAG2        /YES - GET WORD 2
+       CLL CIA
+       TAD NAME2       /DOES IT MATCH?
+       SZA CLA
+       JMP GETTG2      /NO - TRY NEXT TAG
+       AC3777
+       AND TAG3        /YES - DOES IT MATCH?
+       CLL CIA
+       TAD NAME3
+       SZA CLA
+       JMP GETTG2      /NO - TRY NEXT TAG
+       JMP I GETTAG    /YES--RETURN--
+\fGETTG3,       AC7776
+       TAD TEMP1       /LAST TIME SWITCH = 2?
+       SZA CLA
+       JMP GETTG4      /NO-KEEP TRYING
+       ISZ THISTG      /YES-QUIT SEARCHING
+       DCA VALUE2
+       DCA TAG1
+       DCA TAG2
+       DCA TAG3        /TAG NOT FOUND
+       STA             /AC=7777 MEANS NOT FOUND
+       JMP I GETTAG    /--RETURN--
+       >
+\f      IFNZRO HASH<
+       PRIME=TAGMAX
+
+GETTGH,/JMS I  [TLYREF /HACK ONLY
+       TAD NAME1       /HASH OUR NAME
+       CLL RTL
+       TAD     NAME2
+       RTL
+       TAD     NAME3
+       RTL
+       TAD     NAME1
+       JMS     PROBE   /NOW PROBE THE TABLE
+       TAD     NAME1   /RE HASH THE NAME FOR A STEPSIZE
+       CLL RAL
+       RTL
+       TAD     NAME2
+       CLL             /CALC MODULO PRIME INLINE
+       TAD     MPRIME
+       SZL
+       JMP     .-3
+       TAD     PRIME
+       SNA
+       IAC             /STEPSIZE MUST BE NON ZERO!
+       DCA     CRPDEL
+PRBLUP,        CLL
+       TAD     THISTG  /BUMP THE POINTER RANDOMLY
+       TAD     CRPDEL
+       SZL             /PROTECT AGAINST WRAP AROUND
+       TAD     MPRIME  /PROBABLY UNOPTIMAL SOLUTION
+       JMS     PROBE
+       JMP     PRBLUP
+
+PROBE, 0
+       CLL
+       TAD     MPRIME
+       SZL
+       JMP     .-3
+       TAD     PRIME
+       DCA     THISTG  /THISTG MODULO PRIME
+/      JMS I   [TLYPRB /HACK ONLY
+       JMS I   [FINDTG /GO GET IT
+       TAD     [1777   /MASK THE TYPE BITS OUT
+       AND     TAG1    /IS THERE ONE?
+       SNA
+       JMP     NOTFND  /NO EXIT POINTING AT IT
+       CIA             /YES, DO A COMPARE
+       TAD     NAME1
+       SZA CLA
+       JMP I   PROBE
+       AC3777
+       AND     TAG2
+       CIA
+       TAD     NAME2
+       SZA CLA
+       JMP I   PROBE
+       AC3777
+       AND     TAG3
+       CIA
+       TAD     NAME3
+       SZA CLA
+       JMP I   PROBE   /FOUND EXIT WITH AC CLEAR
+       JMP I   GETTAG
+NOTFND,        STA             /NOT FOUND EXIT WITH AC SET
+       JMP I   GETTAG
+
+CRPDEL,        0
+MPRIME,        0               /INITIALIZED BY ONCE ONLY CODE FOR MACHINE AT HAND
+       >
+
+
+GETTA3,        DCA GETTA2      /SAVE CHAR
+       TAD GETTA2
+       CLL RTL         /*4
+       RAL             /*10
+       TAD GETTA2      /*11
+       RTL             /*44
+       TAD GETTA2      /*45
+       DCA I GETTA4    /SET LEFT SIDE
+       TAD GETTA4
+       TAD (-GETTA2
+       SZA CLA         /IS THIS AN OVERFLOW (>6) CHAR?
+       STA             /NO - SET SWITCH TO RIGHT HALF
+       DCA GETTA2      /YES - LEAVE SWITCH AT LEFT HALF
+       JMP GETTA1
+
+GETTA4,        NAME1
+\f/IGNORE SPACES ROUTINE
+
+SPNOR, 0
+       TAD CHAR        /GET THE CHARACTER
+       TAD [-240       /IS IT A SPACE?
+       SZA CLA
+       JMP I SPNOR     /NO --RETURN--
+       JMS I [GETC     /YES - GET NEXT CHARACTER
+       JMP SPNOR+1     /LOOP
+
+
+/HANDLER FOR PAUSE PSEUDO-OP
+/END-OF-TAPE OR END-OF-FILE
+
+PAUSEX,        AC4000
+       DCA CHAR        /SET END-OF-LINE CHARACTER
+       TAD [LINBUF+120 /REINITIALIZE TEXT POINTER
+       DCA TXTPTR
+       CLA CMA
+       DCA I (INCHCT   /INDICATE EMPTY BUFFER
+       ISZ I (INEOF    /SET END-OF-FILE
+       JMP I [LOOKEX   /--EXIT TO MAIN--
+       PAGE
+\f/OUTPUT 2 CHARACTER ERROR CODE
+
+ERROR1,        0
+       DCA ERROR5
+       TAD ERROR5
+       JMS I [RTL6
+       RAL
+       AND [77
+       TAD [240        /CONVERT SIXBIT TO ASCII
+       JMS I OERROR    /OUTPUT FIRST CHAR
+       TAD ERROR5
+       AND [77
+       TAD [240
+       JMS I OERROR    /OUTPUT SECOND CHAR
+       JMP I ERROR1    /--RETURN--
+
+/HANDLER FOR FIELD PSEUDO-OP
+
+FIELDX,        JMS I [SPNOR    /IGNORE SPACES
+       JMS I [DUMPS    /DUMP CURRENT PAGE LITERALS
+       JMS I [DUMPZ    /DUMP PAGE ZERO LITERALS
+       JMS I [EXP      /GET EXPRESSION
+       TAD VALUE       /TRIM TO RIGHT 3 BITS
+       AND [7
+       DCA FLDIND      /STORE FOR LISTING
+       TAD PASS        /IS THIS PASS 2?
+       SZA CLA
+       JMP FIELDY      /NO - PREPARE TO EXIT
+       TAD FLDIND      /YES - GET FIELD NUMBER
+       CLL RTL
+       RAL             /AND CHANNELS 7 AND 8
+       TAD [7700
+       JMS I OCHAR     /OUTPUT FIELD SETTING
+FIELDY,        JMS I [CLEAN    /CLEAN UP THINGS
+       TAD [200        /RESET ORIGIN TO 200
+       JMP STAR1
+
+/CHANGE LAST 2 LOCATIONS TO:
+/      CLA
+/      JMP STAR1+1
+/FOR INDAC GROUP TO OMIT RE-ORIGIN
+\f/HANDLER FOR PAGE PSEUDO-OP
+
+PAGEX, JMS I [DUMPS    /DUMP SAME PAGE LITERALS
+       JMS I (XLISTZ   /ANY EXPRESSION?
+       JMP PAGEY       /NO
+       JMS I [EXP      /YES - GET EXPRESSION
+       TAD VALUE
+       JMS I [RTL6
+       RAL             /GET PAGE NUMBER
+       JMP STAR3-1
+
+PAGEY, TAD LOC         /NO ARGUMENT - FIND NEXT PAGE
+       TAD [177
+       AND [7600
+STAR3, DCA VALUE
+       TAD VALUE       /GET START OF PAGE
+STAR1, JMS I [PUNORG   /PUNCH ORIGIN
+       JMS I [FINDSP
+       TAD [LITBUF     /RESET POINTERS
+       DCA TEMP
+       TAD I TEMP
+       DCA LITPTR      /INITIALIZE LITERAL POINTER FOR NEW PAGE
+       DCA LAST1
+       JMP I [PUNVAL   /SEE ABOUT DUMPING SOURCE CODE
+
+/HANDLER FOR FIXMRI PSEUDO-OP
+
+FIXMRX,        JMS I [SPNOR    /IGNORE SPACES
+       JMS I [TSTALP   /IS CHARACTER ALPHABETIC?
+       JMP FIXMR1      /YES-CONTINUE
+       JMS I [ICMESG   /NO - GENERATE IC MESSAGE, GET NEXT CHAR
+       JMP FIXMRX+1    /KEEP LOOKING FOR ALPHABETIC CH. OR END OF LINE
+FIXMR1,        JMS I [GETTAG   /PICK UP TAG
+       DCA ALPHAI      /STORE UNDEFINED SWITCH
+       SKP
+FIXMR2,        JMS I [ICMESG
+       JMS I [SPNOR    /IGNORE SPACES
+       TAD CHAR        /WAS CHARACTER = ?
+       TAD (-"=
+       SZA CLA
+       JMP FIXMR2      /NO - PRINT IC MESSAGE AND KEEP LOOKING
+                       /FALL INTO EQUALS PROCESSOR
+\f/HANDLER FOR =
+
+       AC4000          /FALL INTO HERE FROM FIXMRI
+EQUAL, JMS I [PUSHA    /PUSH FIXMRI FLAG
+       JMS I [GETC     /GET NEXT CHARACTER
+       TAD I (NAME1    /STORE THE SYMBOL NAME
+       JMS I [PUSHA    /ON THE PUSH DOWN LIST
+       TAD I (NAME2
+       JMS I [PUSHA
+       TAD I (NAME3
+       JMS I [PUSHA
+       TAD THISTG      /AND ITS PRESENT (OR FUTURE)
+       JMS I [PUSHA    /POSITION IN THE SYMTAB
+       TAD ALPHAI
+       JMS I [PUSHA    /STORE UNDEFINED INDICATOR
+       JMS I [SPNOR    /IGNORE SPACES
+       JMS I [EXP      /GET EXPRESSION TO RIGHT OF =
+       TAD I PDLXR
+       DCA ALPHAI      /RESTORE UNDEFINED INDICATOR
+       TAD I PDLXR
+       DCA THISTG      /RESTORE SYMBOL TABLE POSITION
+       TAD I PDLXR     /RESTORE TAG NAME
+       DCA I (NAME3
+       TAD I PDLXR
+       DCA I (NAME2
+       TAD I PDLXR
+       DCA I (NAME1
+       ISZ UNDFSW      /WAS ANY PART OF DEFINITION UNDEFINED?
+       JMP EQUAL3      /NO
+       JMS I PERROR    /YES - GENERATE IE ERROR MESSAGE
+       IE
+       ISZ PDLXR       /CLEAR EXTRA WORD FROM PDL
+       JMP I [PUNVAL   /FORGET ABOUT DEFINING TAG
+\f/MORE = PROCESSING
+
+EQUAL3,        ISZ ALPHAI      /WAS TAG DEFINED BEFORE?
+       JMP .+3         /YES - CHECK FOR ILLEGAL REDEFINITION
+       JMS I [INSRTG   /NO - INSERT TAG INTO SYMBOL TABLE
+       JMP EQUAL2      /AND BYPASS ILLEGAL REDEF CHECK
+       JMS I [FINDTG   /PUT TAG IN TAG1-TAGE AND VALUE2
+       TAD VALUE
+       CIA
+       TAD VALUE2
+       SZA CLA         /WERE DEFINITIONS THE SAME?
+       TAD TAG1        /NO - IS IT A PERMANENT SYMBOL?
+       SMA CLA
+       JMP EQUAL2      /NO - OK TO REDEFINE
+       JMS I [ERROR    /YES - GENERATE RD ERROR MESSAGE FIRST
+       RD
+EQUAL2,        TAD VALUE       /DEFINE OR REDEFINE
+       DCA VALUE2
+       AC3777
+       AND TAG2        /CLEAR OLD FIXMRI BIT
+       TAD I PDLXR     /INSERT NEW ONE
+       DCA TAG2
+       JMS I [PUTTAG   /STORE TAG
+       JMP I [PUNVAL   /SEE ABOUT DUMPING SOURCE CODE
+       PAGE
+\f/ROTATE AC 6 LEFT
+
+RTL6,  0
+       CLL RTL
+       RTL
+       RTL
+       JMP I RTL6      /--RETURN--
+
+
+/GET NEXT CHARACTER ROUTINE
+/READS FROM THE INPUT FILES AND PASSES THE MODIFIED CHARACTERS
+/TO THE PROGRAM
+/IT ALSO PRINTS THE LATEST LINE IF IT HAS NOT BEEN PRINTED
+
+GETC,  0
+       ISZ TXTPTR      /POINT TO NEXT CHARACTER
+GETC7, TAD I TXTPTR    /GET NEXT CHARACTER
+       SZA             /IS IT 0?
+       JMP GETC8       /NO - MORE ARE IN THIS LINE
+       TAD PASS        /IS THIS PASS 3?
+       SPA SNA CLA
+       JMP GETC1       /NO
+       TAD [LINBUF     /YES
+       DCA TXTPTR      /RESET POINTER TO BEGINNING
+       TAD I TXTPTR    /GET 1ST CHARACTER
+       SNA             /IS IT 0?
+       JMP GETC1       /YES - LINE HAS BEEN PRINTED
+       TAD [-215       /IS IT 215?
+       SNA CLA
+       JMP GETC2       /YES - DO NOT PRINT THE SPACES
+       TAD [211        /NO-OUTPUT 2 TABS
+       JMS I OERROR
+       TAD [211
+       JMS I OERROR
+GETC2, JMS LINPRT      /NOW PRINT THE LINE
+GETC1, TAD (-121
+       DCA TXTSWT
+       TAD (LINBUF-1
+       DCA TXTPTR      /RESET POINTER
+       ISZ TXTPTR
+GETC6, JMS I (INPUT    /GET NEXT CHARACTER
+       JMP GETC4       /215
+       DCA I TXTPTR    /STORE THE CHARACTER
+       ISZ TXTSWT      /TOO MANY?
+       JMP GETC6-1     /NO
+       CLA CMA         /YES
+       DCA TXTSWT
+       JMP GETC6
+\fGETC4,        DCA I TXTPTR    /SET END
+       ISZ TXTPTR
+       DCA I TXTPTR    /SET END OF LINE
+       TAD [LINBUF
+       DCA TXTPTR      /RESET POINTER
+       CLA CMA
+       DCA TXTSWT      /RESET SWITCH
+       JMP GETC7       /GET THAT CHARACTER
+
+GETC8, TAD [-215       /IS IT A CARRIAGE RETURN?
+       SNA
+       JMP GETC12      /YES-END OF LINE
+       TAD GETCI       /NO-
+       TAD (215-"/     /IS IT A /?
+       SNA             /YES-
+       JMP GETC13      /"/" IS END
+       TAD ("/-";      /IS IT A ;?
+       SNA             /YES-
+       JMP GETC12      /";" IS END
+       TAD (";-211     /IS IT A TAB?
+       SZA
+       TAD (211-240    /OR A SPACE?
+       SZA CLA
+       JMP GETC9       /NO-NOT ANYTHING SPECIAL
+       ISZ TXTSWT      /YES-2ND OCCURANCE?
+       JMP GETC+1      /YES - IGNORE
+       TAD [240
+       DCA CHAR        /NO - GIVE A SPACE
+       JMP I GETC      /--RETURN--
+
+GETC16,        ISZ CONDSW      /DECREMENT CONDITIONAL COUNTER
+       JMP GETC15
+GETC17,        TAD [LINBUF+120
+       DCA TXTPTR
+GETC12,        AC4000
+GETC9, TAD I TXTPTR
+       DCA CHAR        /STORE CHARACTER
+       CLA CMA
+       DCA TXTSWT      /SET THE SWITCH
+       JMP I GETC      /--RETURN--
+\fGETC13,       TAD CONDSW      /CURRENTLY IN CONDITIONALS?
+       SNA
+       JMP GETC17      /NO
+       DCA CONDSW      /STORE UPDATED CONDITIONAL LEVEL
+GETC15,        ISZ TXTPTR      /YES-SCAN LINE FOR < AND >
+       TAD I TXTPTR
+       TAD [-215       /IS CHARACTER A CARRIAGE RETURN?
+       SNA
+       JMP GETC17      /YES
+       TAD (215-">     /NO IS IT A >?
+       SNA
+       JMP GETC16      /YES
+       TAD (">-"<      /NO-IS IT <?
+       SNA CLA
+       STA             /YES - INCREMENT CONDITIONAL COUNTER
+       JMP GETC13      /NO - KEEP LOOKING
+
+
+/CHAR IS NEGATIVE IF LOGICAL END OF LINE:
+/      CARRIAGE RETURN
+/      /
+/      ;
+
+/CHAR MAY BE ZERO IF PHYSICAL END OF LINE:
+/      CARRIAGE RETURN
+\f/PRINT A LINE OF SOURCE CODE
+
+LINPRT,        0
+       TAD (LINBUF-1
+       DCA XREG1       /SET POINTER TO LINE
+LINPR1,        TAD I XREG1     /GET CHARACTER
+       SNA             /IS IT END OF LINE?
+       JMP I LINPRT    /YES - END LINE
+       JMS I OERROR    /NO - OUTPUT CHARACTER
+       DCA I [LINBUF   /CLEAR OUT 1ST CHAR IN LINE AS "PRINTED" FLAG
+       JMP LINPR1
+
+/HANDLE PHASE ERROR
+/AND ALL ERROR EXITS TO MONITOR
+
+SYMOFL,        CLA
+       TAD (SE         /SYMBOL TABLE EXCEEDED MESSAGE
+MONERR,        DCA MONER1      /ERROR IS SERIOUS ENOUGH TO
+PHASE, TAD (OTYPEO     / CAUSE IMMEDIATE RETURN TO
+       DCA OERROR      / MONITOR
+       JMS I [ERROR
+MONER1,        PH              /STORE ERROR TYPE HERE
+       JMP I [7600     /***EXIT TO MONITOR***
+
+
+/FIND CURRENT PAGE NUMBER
+/EXIT WITH NUMBER IN AC
+
+FINDSP,        0
+       TAD LOC
+       AND [7600
+       JMS I [RTL6
+       JMP I FINDSP    /--RETURN--
+       PAGE
+\f/**********************************************************
+/THIS AREA IS SWAPPED OUT DURING PASS 1 AND 2
+/** NO LITERALS IN THIS PAGE, AS THERE IS A PAGE OVERLAYING IT **
+
+SWAP1=.
+
+/PASS 3 LISTING OUTPUT
+
+LISOUT,        0
+       DCA LISOU2
+       TAD XLISTX      /IS THIS COVERED BY XLIST?
+       SZA CLA
+       JMP I LISOUT    /YES--RETURN--
+       ISZ LISCNT      /NO-WAS PREVIOUS CHARACTER A 215?
+       JMP LISOU1      /NO
+       ISZ LINCNT      /WAS IT END OF PAGE?
+       JMP LISOU1      /NO
+       ISZ THISPG      /YES-START OVERFLOW PAGE
+BEGIAB,        JMS CRLF        /OUTPUT CARRIAGE RETURN/LINE FEED
+HSWIT1,        JMS I [FORMFD   /0 IF /H SWITCH OPTION TO SUPRESS PAGING
+       ISZ LINCNT
+LISOU1,        TAD LISOU2      /IS CHARACTER A CARRIAGE RETURN?
+       TAD [-215
+       SNA
+       JMP LISOU3      /YES - OUTPUT CR/LF
+       TAD [215        /NO - RESTORE CHARACTER
+       JMS I OCHAR     /OUTPUT CHARACTER
+       JMP I LISOUT    /--RETURN--
+
+LISOU3,        CLA CMA
+       DCA LISCNT      /REMEMBER THE 215 FOR NEXT TIME
+       JMS CRLF        /OUTPUT CARRIAGE RETURN/LINE FEED
+       JMP I LISOUT    /--RETURN--
+
+LISCNT,        -1
+LISOU2,        0
+\f/FORM FEED OUTPUT ROUTINES
+
+FORMFD,        0
+       TAD LINCNT      /GET LINE COUNTER
+       TAD FORMLN
+       SNA CLA         /ARE WE AT TOP OF PAGE?
+       JMP I FORMFD    /YES - NO NEED FOR FORM FEED
+       TAD XLISTX      /IS THIS COVERED BY XLIST?
+       SZA CLA
+       JMP I FORMFD    /YES--RETURN--
+HSWITC,        JMP FORMF1      /0 IF /T OR TTY:; JMP FORMF3 IF /H
+                       /OUTPUT IF TTY:OR /T OPTION
+       TAD LINCNT
+       TAD [-4
+       DCA LINCNT
+       JMS CRLF        /OUTPUT CARRIAGE RETURN/LINE FEED
+       ISZ LINCNT
+       JMP CRLF1       /OUTPUT LINE FEED
+                       /CRLF1 WILL RETURN TO
+                       /JMP-1 UNTIL LINCNT HAS
+                       /BEEN BUMPED SUFFICIENTLY
+       TAD FORMM6
+       DCA LINCNT
+       TAD MINUS       /OUTPUT ------
+       JMS I OCHAR
+       ISZ LINCNT      /* NEXT 3 LOCS CHANGED IF NO /T OR TTY:
+FORMF1,        JMP .-3         /* STA
+       TAD [-4         /* DCA LINCNT   /GENERATE ONE FORM FEED
+       DCA LINCNT      /* STA          /TURN CR INTO FF
+       JMS CRLF        /OUTPUT CR/LF OR FF/LF
+       ISZ LINCNT
+       JMP CRLF1       /OUTPUT LINE FEED
+       TAD FORMLN
+       CIA
+       DCA LINCNT
+FORM22,        TAD [HEADER-1   /OUTPUT HEADER
+       DCA XREG2
+       DCA LSTCNT
+FORM30,        TAD I XREG2     /GET NEXT CHARACTER OF HEADING
+       SNA             /IS IT LAST + 1
+       JMP FORM20      /YES
+       JMS I OCHAR     /NO-OUTPUT IT
+       TAD LSTCNT
+       TAD [-HEDLEN    /DONE "HEDLEN" CHARACTERS YET?
+       SZA CLA
+       JMP FORM30      /NO-CONTINUE
+       TAD FORMHD      /YES-START SYSTEM HEADER
+       JMP FORM22      /WHICH STARTS AT HEADER+HEDLEN
+
+FORMLN,        LNPRPG
+FORMHD,        HEDLEN
+MINUS, "-
+\f/TTY: OR /T OUTPUTS FORM FEED AS
+/CARRIAGE RETURN, MULTIPLE LINE FEEDS TO END OF PAGE
+/------
+/CARRIAGE RETURN, 5 LINE FEEDS
+/HEADER
+/NO OPTIONS TREATS F/F AS
+/F/F, LF, CR/LF
+/HEADER
+
+/ /H OPTION TREATS F/F AS 2 CR/LF
+
+/USER HEADER IS "HEDLEN" CHARACTERS WIDE
+/ASSEMBLER HEADER ENDS WITH 0
+
+
+/OUTPUT PAGE NUMBERS
+
+FORM20,        TAD EDITPG      /OUTPUT EDITOR PAGE NUMBER
+       JMS FORMF4
+       TAD THISPG      /IS THERE PAGE OVERFLOW?
+       SNA CLA
+FORM21,        JMP FORMF3      /NO
+       TAD MINUS       /YES
+       JMS I OCHAR     /OUTPUT -
+       TAD THISPG      /OUTPUT NUMBER OF OVERFLOW PAGE
+       JMS FORMF4
+                       /OUTPUT IF /H OPTION
+FORMF3,        JMS CRLF        /OUTPUT 2 CR/LF
+       JMS CRLF
+       JMP I FORMFD    /--RETURN--
+\f/DECIMAL PRINT ROUTINE
+
+FORMF4,        0
+       DCA FORMF6      /SAVE NUMBER
+       TAD FORM8F
+       DCA CRLF        /POINT TO DIVISION LIST
+FORM12,        DCA FORMF7      /START WITH 0
+       JMP .+3
+FORMF5,        DCA FORMF6
+       ISZ FORMF7      /ADD 1 TO DIGIT
+       TAD I CRLF      /SUBTRACT 1000, 100, OR 10
+       SNA
+       JMP FORM11      /0 IS END OF TABLE - NO MORE DIGITS
+       TAD FORMF6
+       SMA             /OVERFLOW
+       JMP FORMF5      /NO-KEEP SUBTRACTING
+       CLA             /YES-DIGIT DONE
+       ISZ CRLF        /BUMP LIST POINTER
+       TAD FORMF7      /WAS DIGIT A 0?
+       SNA
+       JMP FORM12      /YES
+       TAD ["0         /NO-MAKE IT ASCII
+       JMS I OCHAR     /OUTPUT DIGIT
+       AC4000
+       JMP FORM12      /4000 IN AC FORCES SIGNIFICANCE
+
+FORM11,        TAD FORMF6      /GET LAST DIGIT (UNITS PLACE)
+       TAD ["0
+       JMS I OCHAR     /OUTPUT DIGIT
+       JMP I FORMF4    /--RETURN--
+
+FORMM6,        -6
+FORM8F,        FORMF8
+\f/OUTPUT CARRIAGE RETURN/LINE FEED
+/ENTER WITH AC=-1 TO GENERATE F/F LF
+
+HEDCL2,
+CRLF,  0
+       TAD [215
+       JMS I OCHAR
+CRLF1, TAD [212        /RE-ENTRY FOR MULTIPLE LINE FEEDS
+       JMS I OCHAR
+       JMP I CRLF      /--RETURN--
+
+/CLEAR PAGE HEADING BUFFER
+
+FORMF7,
+HEDCLR,        0
+       TAD [-HEDLEN    /SET HEADING BUFFER
+       DCA HEDCL2      /TO TABS
+       TAD [HEADER-1
+       DCA XREG2
+       TAD [211
+       DCA I XREG2
+       ISZ HEDCL2
+       JMP .-3
+       JMP I HEDCLR    /--RETURN--
+       PAGE
+\f/SYMBOL TABLE OUTPUT (COLUMNAR)
+                       /*CODE TO GENERATE DDT COMPATIBLE*
+                       /**SYMBOL TABLE--SUBSTITUTED WITH*
+                       /**ONCE ONLY CODE IF NEEDED*******
+       IFZERO  HASH<
+
+SYMPRT,        0
+       ISZ EDITPG                      /NEW PAGE
+       DCA THISPG
+       JMS I [FORMFD
+       TAD SMIN67      /DCA I SYMPR6-1
+       DCA SYMPR7      /JMS SYMPR9+6
+SYMPR8,        DCA SYMPR2      /TAD [377       //RUBOUT
+       CLA CMA         /JMS I OERROR
+       DCA THISTG      /CLA CMA
+       TAD SYMPR2      /DCA THISTG
+       CMA             /TAD [215       //CARRIAGE RETURN
+       DCA SYMPR3      /JMS I OERROR
+SYMPR5,        ISZ SYMPR3      /JMS SYMPPP
+       JMP SYMPR4      /JMP SYMPR9-1
+       TAD [-4         /JMP SYMPR6+2
+       DCA SYMPR3      /HSWIT1
+SYMPR6,        JMS SYMPPP      /204            //EOT
+       JMP SYMPRB
+SYMPR1,        TAD [1777
+       AND TAG1                        /OUTPUT TAG
+       JMS I SDIV45
+       TAD TAG2
+       JMS I SDIV45
+       TAD TAG3
+       JMS I SDIV45
+       TAD [240
+       JMS I OERROR                    /OUTPUT SPACE
+       TAD VALUE2
+       JMS OCTPRT                      /OUTPUT OCTAL VALUE
+       ISZ SYMPR3      /JMP SYMPR5-2
+       JMP SYMPR0      /TAD SYMPR6
+SYMPR9,        TAD [215        /JMS I OERROR   /CARRIAGE RETURN
+       JMS I OERROR    /TAD [377       //RUBOUT
+SYMPRB,        ISZ SYMPR7      /JMS I OERROR
+       JMP SYMPRA      /JMS SYMPR9+6
+HSWIT2,        JMS I [FORMFD   /DCA LINCNT     /0 IF NOT /H
+       TAD SMIN67      /JMP I SYMPRT   //--RETURN--
+       DCA SYMPR7      /0
+       TAD SYMOFS      /TAD [-200
+SYMPRA,        IAC             /DCA SYMPR2
+       TAD SYMPR2      /TAD [200       //LEADER-TRAILER
+       JMP SYMPR8      /JMS I OERROR
+
+SYMPR4,        JMS SYMPPP      /ISZ SYMPR2
+       JMP I SYMPRT    /JMP SYMPR4-2   /--RETURN--
+       JMP SYMPR5      /JMP I SYMPR9+6
+
+SDIV45,        DIV45
+SMIN67,        1-LNPRPG
+\fSYMPR0,       TAD SMIN67
+       DCA SYMPPB
+       JMS SYMPPP      /SKIP 67(8) SYMBOLS
+       JMP SYMPR9
+       ISZ SYMPPB
+       JMP .-3
+       JMS I [ERROR1
+       JMS I [ERROR1
+       JMS I [ERROR1
+       JMP SYMPR1      /GO PRINT THE 67TH(8) SYMBOL
+
+SYMPR2=        LINKSW
+SYMPR3=        UNDFSW
+SYMPR7=        ALPHAI
+SYMPPB=        CHKSUM
+
+SYMPPP,        0
+       ISZ THISTG
+SYMOFS,        245
+       TAD THISTG
+       CLL CIA
+       TAD HIGHTG
+       SNL CLA
+       JMP I SYMPPP    /--RETURN--
+       JMS I [FINDTG
+       AC4000
+       AND TAG1
+       TAD TAG3
+       SPA SZL CLA
+       JMP SYMPPP+1
+       ISZ SYMPPP
+       JMP I SYMPPP    /--RETURN--
+/SYMNCL,       -4      /DEFAULT IN LIU OF =N OPTION
+/SYMOFS,       245     /OFFSET TO FIRST SYM ON NEXT PAGE
+
+       >
+\f      IFNZRO  HASH<
+
+SYMPRT,        0
+       ISZ     EDITPG
+       DCA     THISPG
+       JMS I   [FORMFD /OUTPUT A HEADING
+       JMS I   SYMHND  /NOW READ THE SYMBOL TABLE SORT OVERLAY
+       0200            /2 PAGES
+SYMSRT,        OUDEVH+400      /TO HERE
+       ASWAP+1         /FROM HERE
+       JMP I   SYMERR  /UGH
+       JMS I   SYMSRT  /SORT THEM AND SET LINK
+SYMNWP,        DCA     SYMTAG  /POINT TO SYMBOL
+       SZL             /LINK OFF IF ANY SYMBOLS TO LIST
+       JMP I   SYMPRT  /NONE --RETURN--
+       TAD     SMIN67  /SET LINE/PAGE COUNT
+       DCA     SYMLCT
+SYMPAG,        TAD     HIGHTG
+       CLL CIA
+       TAD     SYMTAG
+       SZL CLA
+       JMP I   SYMPRT  /NO MORE IF AT HIGHTAG NOW
+       TAD     SYMTAG
+       DCA     THISTG  /PREPARE TO PRINT LEFTMOST SYMBOL
+       TAD     SYMNCL  /4 PER LINE (DEFAULT)
+       DCA     SYMCCT  /TO COLLUMS/LINE CNTR
+       JMP     SYMGO
+SYMLIN,        JMS I   [ERROR1
+       JMS I   [ERROR1
+       JMS I   [ERROR1
+       TAD     HIGHTG
+       CLL CIA
+       TAD     THISTG
+       SZL CLA
+       JMP     SYMNXL  /SKIP TO NEXT LINE IF OFF TABLE
+\fSYMGO,        JMS I   [FINDTG /OK, GET IT
+       TAD     TAG1
+       JMS I   SDIV45
+       TAD     TAG2
+       JMS I   SDIV45
+       TAD     TAG3
+       JMS I   SDIV45
+       TAD     [240
+       JMS I   OERROR
+       TAD     VALUE2  /PRINT VALUE NOW
+       JMS     OCTPRT
+SYMDDT,        TAD     SMIN67
+       CLL CIA
+       TAD     THISTG
+       DCA     THISTG
+       SZL
+       JMP     SYMNXL  /SKIP IF WRAP AROUND
+       ISZ     SYMCCT  /ELSE DO NEXT COLUMN
+       JMP     SYMLIN
+SYMNXL,        TAD     [215
+       JMS I   OERROR  /CR/LF
+       ISZ     SYMTAG  /POINT TO NEXT SYMBOL
+       ISZ     SYMLCT
+       JMP     SYMPAG
+HSWIT2,        JMS I   [FORMFD
+       TAD     SYMTAG
+       CLL
+       TAD     SYMOFS  /OFFSET TO NEXT SYMBOL
+       JMP     SYMNWP  /DO THE NEXT PAGE
+
+SDIV45,        DIV45
+SMIN67,        -67
+SYMERR,        SYSERR
+SYMHND,        7607
+SYMOFS,        245             /DEFAULT
+SYMNCL,        -4
+       SYMTAG= LINKSW
+       SYMLCT= UNDFSW
+       SYMCCT= ALPHAI
+       ZBLOCK  4       /WASTE SOME SPACE
+       >
+
+
+/END OF AREA WHICH MAY BE SWAPPED OUT
+/DURING PASSES 1 AND 2
+/**********************************************************************
+
+       ENDOVL= .
+\f/OCTAL PRINT ROUTINE
+/ENTER WITH # TO BE OUTPUT IN AC
+/** DO NOT USE TEMPS BELOW THIS LOC!
+
+OCTPRT,        0
+       DCA OCTPR1
+       TAD [-4
+       DCA OCTPR3
+OCTPR2,        TAD OCTPR1      /GET EACH DIGIT SEPARATELY
+       CLL RTL
+       RAL
+       DCA OCTPR1
+       TAD OCTPR1
+       RAL
+       AND [7
+       TAD ["0         /MAKE IT INTO AN ASCII CHARACTER
+       JMS I OERROR    /OUTPUT IT
+       ISZ OCTPR3
+       JMP OCTPR2
+       JMP I OCTPRT    /--RETURN--
+
+OCTPR1,        0
+OCTPR3,        0
+\f/OUTPUT ONE REGISTER
+
+PUNONE,        0
+       TAD PASS        /WHICH PASS IS THIS?
+       SNA
+       JMP PUNON2      /PASS 2--OUTPUT BINARY
+       SPA CLA
+       JMP PUNON3      /PASS 1--EXIT
+       TAD FLDIND      /GET FIELD NUMBER
+       TAD ["0         /CONVERT TO ASCII
+       JMS I OERROR    /PRINT IT
+       TAD LOC         /GET LOW ORDER 4 DIGITS (LOC CTR)
+       JMS OCTPRT      /PRINT IT TOO
+       TAD OFFSET      /IF THIS CODE IS IN A RELOC SECTION,
+       SZA CLA         /
+       TAD (1200       /FLAG THE LOCATION COUNTER WITH A *
+DTORG1,        JMS I [ERROR1   /OUTPUT 2 SPACES
+       TAD VALUE
+       JMS OCTPRT      /OUTPUT CONTENTS
+       TAD I [LINBUF   /IS THERE SOURCE CODE TO DUMP?
+       SNA CLA
+       JMP PUNON1      /NO-OUTPUT CARRIAGE RETURN
+       TAD LINKSW      /YES-DUMP LINK SWITCH (' ) OR (  )
+       JMS I [ERROR1
+       JMS I [LINPRT   /DUMP SOURCE CODE
+       JMP PUNON3      /AND EXIT
+
+PUNON1,        TAD LINKSW      /NO LINE - OUTPUT LINK SWITCH ANYWAY
+       SZA             /IF THERE IS ONE
+       JMS I [ERROR1
+       TAD [215        /OUTPUT CARRIAGE RETURN
+       JMS I OERROR
+PUNON3,        DCA LINKSW      /CLEAR LINK SWITCH
+       JMP I PUNONE    /--RETURN--
+
+/PASS 2-OUTPUT ONE REGISTER
+
+PUNON2,        TAD VALUE       /GET CONTENTS
+       CLL
+       JMS I [PUNOUT   /OUTPUT AS 2 FRAMES
+       JMP PUNON3      /AND EXIT
+       PAGE
+\f/**CURRENT PAGE LITERALS ON THIS PAGE WILL BE LOST**
+/***WHEN OVERLAYED BY PUSHDOWN LIST**
+
+/ARRANGE TO OUTPUT ONE REGISTER
+
+PUNBIN,        0
+       DCA VALUE
+       JMS I [FINDSP   /FIND CURRENT PAGE NUMBER
+       TAD [LITBUF
+       DCA TEMP2       /POINT TO NUMBER OR LITERALS
+       TAD LOC
+       AND [177
+       DCA TEMP
+       TAD I TEMP2     /IS PAGE FULL?
+       CIA
+       TAD TEMP
+       ISZ TEMP
+       SPA CLA
+       JMP ONEOK       /NO-OK TO ADD ONE MORE REGISTER
+       TAD TEMP        /YES-
+       DCA I TEMP2
+       JMS I [FINDSP   /FIND CURRENT PAGE NUMBER
+       JMS I PPEZE     /GENERATE PE OR ZE ERROR
+ONEOK, JMS I [FINDSP   /FIND CURRENT PAGE NUMBER
+       TAD [TPINST
+       DCA TEMP2
+       TAD TEMP        /IS THIS ADDRESS HIGHER THAN PREVIOUS
+       CIA             /HIGH INSTRUCTION PAGE?
+       TAD I TEMP2
+       SMA CLA
+       JMP PUNMOD      /NO
+       TAD TEMP        /YES-THIS IS NEW HIGH INSTRUCTION
+       DCA I TEMP2
+
+PUNMOD,        JMS I [PUNONE   /OUTPUT THIS REGISTER
+       ISZ LOC         /GET NEXT LOCATION
+       TAD LOC         /IF THE "ISZ" SKIPS IT IS O.K. (A 0)
+       AND [177        /IS THIS FIRST INSTRUCTION ON NEXT PAGE?
+       SZA CLA
+       JMP I PUNBIN    /NO--RETURN--
+       JMS I [FINDSP   /YES-FIND CURRENT PAGE NUMBER
+       TAD [LITBUF     /RESET POINTERS
+       DCA TEMP2
+       TAD I TEMP2
+       DCA LITPTR
+       JMP I PUNBIN    /--RETURN--
+
+PPEZE, PEZE
+\fHEADER,       "S;"Y;"M;"B;"O;"L;"S
+       211;211;211;211;211     /FOR /N HEADER
+
+/************************************************************
+/CODE OVERLAYED ON PASS 3
+/BY USER HEADER BUFFER
+
+/CONTINUATION OF EXPUNGE HANDLER
+/ENTER ON PASS 1 ONLY
+
+EXPUNW,        IFZERO  HASH<
+       DCA TEMP1
+       DCA EXPUN2      /CLEAR NEW HIGH TAG COUNTER
+       TAD HIGHTG
+       CMA
+       DCA TEMP3       /SAVE NUMBER OF SYM TBL ENTRIES
+EXPUNY,        TAD TEMP1
+       DCA THISTG
+       JMS I [FINDTG   /GET A SYMBOL
+       TAD TAG1        /ONLY SAVE THE SYMBOL IF
+       RTL
+       CLA             /IT WAS A PSEUDO-OP, OR
+       TAD TAG3        /THE SYMBOLS I OR Z
+       SNL SMA CLA
+       JMP EXPUA4      /NO-FORGET TAG
+       TAD EXPUN2      /YES-RETURN TAG TO SYMBOL TABLE
+       DCA THISTG
+       JMS I [PUTTAG
+       ISZ EXPUN2
+EXPUA4,        ISZ TEMP1
+       ISZ TEMP3       /DONE YET?
+       JMP EXPUNY      /NO- TRY NEXT TAG
+       CLA CMA         /YES
+       TAD EXPUN2      /RESET HIGH TAG
+       DCA HIGHTG
+       JMP I [LOOKEX   /--EXIT TO MAIN--
+
+EXPUN2,        0
+       >
+\f      IFNZRO  HASH<
+       /HASH TABLE EXPUNGE - DEPENDS ON PSEUDO OPS
+       /BEING HASHED FIRST. SCANS WHOLE TABLE (SLOW AS HELL!)
+
+       DCA     THISTG  /POINT TO FIRST ENTRY
+       TAD     TAGMAX  /SET THE COUNT
+       CIA
+       DCA     TEMP1
+EXPUNL,        JMS I   [FINDTG /GO GET ONE
+       TAD     TAG1    
+       RTL
+       CLA
+       TAD     TAG3
+       SPA SZL CLA     /PSEUDO OP?
+       JMP     EXPUNS  /YES, SKIP DELETION
+       DCA     TAG1    /NO, WIPE IT
+       DCA     TAG2
+       DCA     TAG3
+       JMS I   [PUTTAG /AND PUT IT BACK
+       STA
+       TAD     HIGHTG
+       DCA     HIGHTG  /DECREMENT SYMBOL COUNT
+EXPUNS,        ISZ     THISTG  /POINT TO NEXT ENTRY
+       ISZ     TEMP1   /TALLY COUNT
+       JMP     EXPUNL  /GET ANOTHER
+       JMP I   [LOOKEX /DONE --RETURN--
+       >
+
+/***************************************************************
+\f/ASSEMBLER HEADER BUFFER
+
+       ZBLOCK  HEADER+HEDLEN-.
+
+       " ;" ;"P;"A;"L;"8;"-
+       "V;"1;VERSION-12+"0;SUBVERSION
+       " 
+DATE,  "N;"O;" ;"D;"A;"T;"E;"  /GETS SET TO DD-MMM-YY IF DATE PRESENT
+       " ;" ;"P;"A;"G;"E;" ;0
+\f/PUSHDOWN LIST
+/OCCUPIES NEXT 43(8) LOCATIONS
+PDLND=.
+
+
+
+/*********************************************************
+/ONCE ONLY CODE FOR /D OPTION
+/PUT INTO SYMLST FOR DDT COMPATIBLE SYMBOL TABLE
+/OVERLAYED DURING ASSEMBLY BY PUSHDOWN LIST
+
+DSWIT1,        IFZERO  HASH<
+       RELOC SYMPRT+4
+
+       DCA I SYMPRF
+       JMS SYMPRC
+       TAD [377
+       JMS I OERROR
+       CLA CMA
+       DCA THISTG
+SYMPRE,        TAD [215
+       JMS I OERROR
+       JMS SYMPPP
+       JMP SYMPRD
+       JMP SYMPR1
+SYMPRF,        HSWIT1
+SYM204,        204
+       RELOC
+
+       >
+       IFNZRO  HASH<
+       RELOC   SYMNWP
+       DCA     THISTG
+       DCA I   SYMHSW
+       JMS     DDTLDR
+       TAD     [377
+       JMS I   OERROR
+SYMLUP,        TAD     [215
+       JMS I   OERROR
+       TAD     HIGHTG  
+       CLL CIA
+       TAD     THISTG
+       SZL CLA
+       JMP     SYMXIT
+       JMP     SYMGO
+SYMHSW,        HSWIT1
+       RELOC
+       >
+DSWITA=        .
+
+/**********************************************************
+       PAGE
+\f/*************************************************************
+
+/PAL8 TABLES - LOAD OVER INITIALIZATION CODE
+
+PDLST= PDLND+42        /PUSHDOWN LIST 43(8) LOCS LONG
+
+
+LINBUF=        PDLST+1         /LINE BUFFER OCCUPIES 122(8) LOCATIONS
+
+LITBUF=        LINBUF+122      /LITERAL TABLE IS 40(8) LOCATIONS (ONE PER PAGE)
+                       /  SHOWING LOWEST PAGE ADDRESS USED FOR LITERALS
+
+TPINST=        LITBUF+40       /TOP INSTRUCTION TABLE IS 40(8) LOCTIONS
+                       /  SHOWING HIGHEST PAGE ADDRESS USED FOR INSTRUCTIONS
+
+LITBF2=        TPINST+40-17    /LITERAL BUFFER 2 CONTAINS UP TO 160(8)
+                       /PAGE 0 LITERALS, SUBSCRIPTS 20-177
+
+LITBF1=        LITBF2+200-100  /LITERAL BUFFER 1 CONTAINS UP TO 100(8)
+                       /CURRENT PAGE LITERALS, SUBSCRIPTS 100-177
+
+/*************************************************************
+\f/ONCE ONLY CODE FOR ASSEMBLER START UP
+/OVERLAYED BY BUFFERS
+
+/HANDLES SWITCH OPTIONS
+
+BEGIN, CIF 10
+       JMS I IOMON     /CALL USER SERVICE ROUTINES
+       5               /*COMMAND DECODER*
+       2001            /DEFAULT INPUT EXTENSION IS .PA
+NOCD,  CDF 10          /RETURN
+       TAD I (7604     /IS THERE A BINARY FILE EXTENSION?
+       SNA
+       TAD (216        /NO - DEFAULT EXTENSION IS .BN
+       DCA I (7604     /YES 
+       TAD I (7611     /IS THERE A LISTING FILE EXTENSION?
+       SNA
+       TAD (1423       /NO - DEFAULT EXTENSION IS .LS
+       DCA I (7611
+       TAD I (MPARAM+1 /WAS THE /T OPTION SELECTED?
+       CDF
+       AND (20
+ZT7640,        SNA CLA
+       JMP BEGINA      /NO
+BEGIAA,        DCA I (HSWITC   /YES - GENERATE CR/LF IN PLACE OF F/F
+       JMP BEGIN2
+
+BEGINA,        TAD [7605       /WAS TTY THE PASS 3 DEVICE?
+       JMS I (OTYPE
+       AND (770
+       SNA CLA
+       JMP BEGIAA      /YES - GENERATE CR/LF IN PLACE OF F/F
+       DCA I (BEGIAB   /NOT /T OR TTY:
+
+BEGIN2,        CDF 10
+       TAD I (MPARAM+1 /WAS THE /S OPTION SELECTED?
+       CDF
+       AND (40
+       SZA CLA
+       DCA I (SSWITC   /YES -OMIT SYMBOL TABLE
+       CDF 10
+       AC2000
+       AND I (MPARAM+1
+       CDF
+       SNA CLA         /WAS THE /N OPTION SELECTED?
+       JMP BEGIN4      /NO
+       TAD BEGSKP      /SET SWITCH
+       DCA I (NSWITC   /YES -SYMBOL TABLE BUT NO LISTING
+\fBEGIN4,       CDF 10
+       TAD I (MPARAM   /WAS THE /H OPTION SELECTED?
+       CDF
+       AND (20
+ZH7640,        SNA CLA
+       JMP BEGINB      /NO
+BEGHSW,        TAD I (FORM21   /YES -SUPPRESS LISTING PAGE FORMAT
+       DCA I (HSWITC
+       DCA I (HSWIT1
+BEGSKP,        CLA SKP
+BEGINB,        DCA I (HSWIT2
+       CDF 10
+       TAD I (MPARAM   /WAS THE /D OPTION SELECTED?
+       CDF
+       AND [400
+ZD7640,        SNA CLA
+       JMP BEGIN1      /NO
+       TAD I XREG1     /YES -DDT COMPATIBLE SYMBOL TABLE
+       DCA I LAST3     /SUBSTITUTE ALTERNATE CODE
+       ISZ DSWIT3      /INTO SYMBOL TABLE OUTPUT ROUTINE
+       JMP .-3
+       TAD I XREG2
+       DCA I LAST4
+       ISZ DSWIT4
+       JMP .-3
+
+BEGIN1,        TAD I (JSBITS   /RESET JOB STATUS WORD TO
+       AND (6777       /INDICATE PAL8 NOT RESTARTABLE
+       TAD (1000
+       DCA I (JSBITS
+       CIF CDF 10
+       JMS I   (FMTDAT /CALL ROUTINE IN FIELD 1 TO SETUP DATE
+       JMP I   (BEGINZ /CONTINUE ON
+\f
+DSWIT3,        DSWIT1-DSWITA
+DSWIT4,        DSWIT2-DSWITB
+       PAGE
+\f/ONCE ONLY CODE CONTINUED
+/ASSEMBLER INITIALIZATION PROCEDURES
+
+
+BEGINZ,        TAD [7600       /WHAT DEVICE FOR BINARY OUTPUT?
+       JMS I (OTYPE
+       SMA CLA
+       TAD (-70        /STAND-ALONE
+       TAD (-10        /DIRECTORY
+       DCA I (SWAPR2+LEADER    /SET AMOUNT OF LEADER TRAILER
+       DCA LAST1       /NO DEFINED TAG
+BEGIN5,        IFZERO  HASH<
+       CDF
+       TAD I BLK1      /MOVE SYMBOL TABLE TO FIELD 1
+       CDF 10
+       DCA I BLK2
+       ISZ BLK1
+       ISZ BLK2
+       ISZ BLK3
+       JMP BEGIN5
+       >
+       CDF
+       DCA I [LINBUF+120       /SET BUFFER POINTERS
+       DCA I (LINBUF+121
+       TAD [7600       /IS PTP BINARY OUTPUT DEVICE?
+       JMS I (OTYPE
+       DCA BLK1
+       TAD BLK1
+       AND (770
+       TAD (-20
+       SNA CLA
+       DCA I (PTPSW    /YES - SET PTP SWITCH
+       TAD BLK1        /NO - IS IT A DIRECTORY DEVICE?
+       SPA CLA
+       JMP .+3         /NO
+       TAD (TAD [77    /YES - SET DIRECTORY SWITCH
+       DCA I (DIRSW
+       TAD [7605       /IS PTP GETTING LISTING OUTPUT?
+       JMS I (OTYPE
+       AND (770
+       TAD (-20
+       SNA CLA
+       DCA I (SWAPR2+PTPSW1    /YES - SET PASS 3 PTP SWITCH
+       TAD [7605       /NO - IS DIRECTORY DEVICE GETTING
+       JMS I (OTYPE    /LISTING OUTPUT?
+       SPA CLA
+       JMP .+3         /NO
+       TAD (TAD [77    /YES - SET PASS 3 DIRECTORY SWITCH
+       DCA I (SWAPR2+DIRSW1
+       JMP I (BEGINF
+\fMONLST,       TEXT    /JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC/
+       *.-1
+
+/CONTINUED CHECK OF COMMAND DECODER OPTIONS
+
+BEGINH,        CDF 10
+       TAD I (MPARAM   /WAS THE /G OR /L OPTION CHOSEN?
+       CDF
+       AND (41
+       SNA CLA
+       JMP I (BEGISW   /NO
+       CDF 10          /YES
+       TAD I [7600
+       SZA CLA         /WAS THERE A BINARY OUTPUT FILE?
+       JMP YESBIN      /YES
+BINLOP,        TAD PALBIN      /NO - CREATE FILE PAL8BN.TM
+       DCA I PALBIX    /ON SYSTEM DEVICE
+       ISZ BINLOP
+       ISZ PALBIX
+       ISZ BINCNT
+       JMP BINLOP
+       CDF
+       TAD (-10        /SET AMOUNT OF LEADER TRAILER
+       DCA I (SWAPR2+LEADER
+\f/SET UP FOR LOAD OR LOAD AND GO
+
+YESBIN,        CDF
+       CIF 10
+       CLA IAC
+       JMS I IOMON     /CALL USER SERVICE ROUTINES
+       2               /* LOOKUP PERMANENT FILE *
+LOAD,  PLOAD           /FILENAME ABSLDR.SV
+BINCNT,        -5              /FILE LENGTH
+       JMP NOLOAD      /ABSLDR.SV NOT FOUND
+       TAD LOAD        /NORMAL RETURN
+       DCA I (CHAIN    /SET STARTING BLOCK NUMBER
+       DCA I (LSWITC   /FOR CHAIN CALL
+       JMP I (BEGISW
+
+NOLOAD,        JMS I [ERROR    /GENERATE LD ERROR MESSAGE
+       LD
+       JMP I (BEGISW   /ASSEMBLE BUT DO NOT CHAIN TO LOADER
+
+BLK1,  SYMS
+BLK2,  7600+SYMS-SYME
+BLK3,  SYMS-SYME
+
+PALBIX,        7600
+PALBIN,        1
+       FILENAME PAL8BN.TM
+       PAGE
+\fCCC,  TAD I CC231     /FINAL PIECE OF STARTUP ONCE-ONLY CODE
+       SNA
+       TAD CC23
+       DCA I CC231     /"HSWITC"=JMP FORMF1 IF WAS 0
+BEGISW,        CDF 10
+       TAD I CCJWD
+       CDF 0
+       AND CCJBIT
+ZJ7640,        SNA CLA         /WAS /J OPTION SPECIFIED?
+       DCA I CCJLOC    /NO - PRINT UNASSEMBLED CONDITIONAL CODE
+       CDF 10
+       TAD I CCWWD
+       CDF 0
+       AND CCWBIT
+ZW7640,        SNA CLA         /WAS /W OPTION SPECIFIED?
+       JMP D4          /V3C
+D5,    TAD I CC231
+       CIA
+       TAD CC23
+       SZA CLA         /ARE WE OUTPUTTING FF'S IN LISTING?
+       JMP BEGIS3      /NO
+       TAD CC24        /YES - SUBSTITUTE SOME CODE
+       DCA I CC25
+       TAD CC26
+       DCA I CC27
+       TAD CC24
+       DCA I CC28
+BEGIS3,        JMS I OVLL7     /CALL SYSTEM DEVICE
+       4200            /WRITE 2 PAGES
+       SWAP1           /FORM SWAP1
+       ASWAP           /INTO TEMP AREA
+       JMP I OVLL8     /ERROR?!
+       TAD I LAST2     /MOVE PASS 1&2 ONLY CODE
+       DCA I TAGXR     /OVER PASS3 SWAPPED OUT CODE
+       ISZ CC29
+       JMP     .-3
+       IFNZRO  HASH<
+       JMS I   CCHSH   /FINALLY HASH OUT THE TABLE
+       >
+
+       JMP I   .+1
+       START2-1        /OK - NOW GO DO SOME ASSEMBLING!
+D4,    DCA I CCWLOC    /NO - DON'T WIPE LITERALS AS YOU DUMP THEM
+       DCA I (D3
+       JMP D5          /V3C
+\fOVLL7,        7607
+OVLL8, SYSER3
+
+CC231, HSWITC
+CC23,  FORMF1&177+5200
+CC24,  STA
+CC25,  FORMF1
+CC26,  DCA LINCNT
+CC27,  FORMF1+1
+CC28,  FORMF1+2
+CC29,  SWAPB2-SWAPE2
+
+       IFNZRO  HASH<
+CCHSH, HSHSMS
+       >
+CCJWD, MPARAM
+CCJBIT,        4
+CCJLOC,        IFTST4
+CCWWD, MPARAM+1
+CCWBIT,        2
+CCWLOC,        LITHAK
+PLOAD, FILENAME ABSLDR.SV
+
+CKBAT, TAD I CC7777    /GET BATCH FLAG WORD
+       CLL RTL
+       SNL CLA         /BATCH RUNNING?
+       JMP I CCOPTM    /NO, GO WITH LINK OFF
+       TAD I CC7777
+       AND CC0070      /GET BATCH FIELD
+       TAD CCCIF0      /FORM CIF TO BATCH FIELD
+       DCA OTYPB1      /MODIFY TTY OUTPUT ROUTINE TO GO TO BATCH
+       TAD CCJMSB      /LOG INSTEAD
+       DCA OTYPB2
+       TAD OTYPTD
+       DCA OTYPB3
+       JMP I CCOPTM    /RETURN TO CORE DETERMINER, LINK SET
+
+CC7777,        7777
+CCOPTM,        OPTIM4
+CC0070,        70
+CCCIF0,        CIF 0
+CCJMSB,        JMS I [BATOUT
+\f/THIS CODE SITS AFTER THE END OF THE LITERAL TABLE
+
+       IFNZRO  .-LITBF1-200&4000 <*LITBF1+200>
+
+OTYPEO,        0               /TYPE A CHARACTER, CHECKING FOR ^O AND ^C
+       DCA OTYPEC      /SAVE CHAR
+       JMS CTCCHK      /CHECK FOR ^C - RETURN CHAR-203 IN AC
+       TAD (-14
+       SNA CLA         /^O?
+       JMP I OTYPEO    /YES
+OTYPTD,        TAD OTYPEC
+OTYPB1,        TLS
+OTYPB2,        TSF
+OTYPB3,        JMP     .-1     /WAIT FOR TTY
+       TAD     [-215
+OTYPCR,        SZA CLA         /SET TO CLA DURING "ERRORS DETECTED" STUFF
+       JMP I   OTYPEO
+       TAD [212        /IF CHAR WAS CR, TYPE LF
+       JMP OTYPEO+1
+OTYPEC,        0
+
+CTCCHK,        0               /CHECK FOR ^C
+       TAD [200
+       KRS             /OR IN KEYBOARD CHAR
+       TAD (-203
+       SNA
+       KSF             /3B BUT WAS CHAR REALLY THERE?
+       JMP I CTCCHK    /NO ^C - RETURN
+       JMP I [7600     /RETURN TO OS/8
+
+TTLMSG,        "E-240^100+"R-240       /ERRORS DETECTED:
+       "R-240^100+"O-240
+       "R-240^100+"S-240
+       "D-240
+       "E-240^100+"T-240
+       "E-240^100+"C-240
+       "T-240^100+"E-240
+       "D-240^100+":-240
+       0
+
+       "L-240^100+"I-240       /LINKS GENERATED:
+       "N-240^100+"K-240
+       "S-240^100
+       "G-240^100+"E-240
+       "N-240^100+"E-240
+       "R-240^100+"A-240
+       "T-240^100+"E-240
+       "D-240^100+":-240
+       0
+       PAGE
+\f/OUTPUT A CHARACTER TO OUTPUT DEVICE
+/CALLED BY JMS I OCHAR
+/WITH CHARACTER IN 8-BIT ASCII IN AC
+
+OUTPT1,        PUNCHX          /PASS 2=PUNCHX; 3=XLISTX
+
+OUTPUT,        0
+       AND [377        /MASK OUT LEFT 4 BITS
+       DCA OUTPT2      /STORE
+       TAD I OUTPT1    /IS THIS PASS 3 AND
+       SNA
+       TAD OUTINH      /IS THIS COVERED BY XLIST?
+       SZA CLA
+       JMP I OUTPUT    /YES--RETURN--
+       TAD OUTPT2      /NO - GET CHARACTER
+       AND [200
+       SNA CLA
+       TAD OUTPT2      /IF LESS THAN 200, THEN
+       TAD CHKSUM      /ADD IT TO CHECKSUM
+       DCA CHKSUM
+       TAD OUTPT2      /GET CHARACTER
+       TAD (-211       /IS IT A TAB?
+       SNA CLA
+       JMP OUTPT3      /YES - OUTPUT SPACES
+       JMS OUTPUX      /NO - OUTPUT CHARACTER
+       TAD OUTPT2      /IS IT LINE FEED?
+       TAD (-212
+       SZA CLA
+       JMP I OUTPUT    /NO--RETURN--
+       TAD [7773       /YES - RESET LSTCNT
+       DCA LSTCNT
+       JMP I OUTPUT    /--RETURN--
+
+\f/OUTPUT SPACES INSTEAD OF TAB
+
+OUTPT3,        TAD [240
+       DCA OUTPT2
+       JMS OUTPUX      /OUTPUT SPACE
+       TAD LSTCNT      /TAB STOPS ARE EVERY 8 SPACES
+       AND [7
+       SZA CLA
+       JMP .-4
+       JMP I OUTPUT    /--RETURN--
+
+/OUTPUT THE CHARACTER
+/PACKS CHARACTERS IN STANDARD OS/8 FORMAT
+
+OUTPUX,        0
+       ISZ OUJMP       /BUMP 3-WAY SWITCH
+OUJMP, HLT             /WILL BE CHANGED - SHOULD NEVER HALT
+       JMP OCHAR1      /CHARACTER #1
+       JMP OCHAR2      /CHARACTER #2
+OCHAR3,        TAD OUTPT2      /CHARACTER #3
+       CLL RTL
+       RTL
+       AND [7400
+       TAD I OUPOLD    /ADD 4 BITS TO WORD 1
+       DCA I OUPOLD
+       TAD OUTPT2
+       CLL RTR
+       RTR
+       RAR
+       AND [7400
+       TAD I OUPTR     /ADD 4 BITS TO WORD 2
+       DCA I OUPTR
+       TAD OUJMPE
+       DCA OUJMP       /RESET SWITCH
+       ISZ OUPTR
+       ISZ OUDWCT      /BUFFER FULL?
+       JMP OUCHLV      /NO
+       TAD [200        /YES
+       JMS I (OUTDMP   /DUMP BUFFER
+       JMS OUSETP      /RESET POINTERS
+       JMP OUCHLV
+
+\fOCHAR2,       TAD OUPTR       /SAVE POINTER
+       DCA OUPOLD
+       ISZ OUPTR
+OCHAR1,        TAD OUTPT2
+       DCA I OUPTR     /SET 8 BIT WORD
+OUCHLV,        TAD OUTPT2
+       TAD [40
+       AND [100        /CHECK FOR PRINTABLE CHAR
+       SZA CLA         /IF IT IS,
+       ISZ LSTCNT      /BUMP TAB COUNT
+OUTINH,        0               /ALWAYS 0 OR 1!
+       JMP I OUTPUX    /--RETURN--
+
+OUPOLD,        0
+OUPTR, 0
+OUJMPE,        JMP OUJMP
+OUDWCT,        0
+OUTPT2,        0
+
+OUSETP,        0
+       TAD [7600       /SET OUTPUT WORD COUNT
+       DCA OUDWCT      /TO 200
+       TAD (OUBUF
+       DCA OUPTR       /RESET POINTER
+       TAD OUJMPE
+       DCA OUJMP       /RESET SWITCH
+       CLL             /MUST CLEAR LINK!!
+       JMP I OUSETP    /--RETURN--
+\f/HANDLER FOR DEVICE PSEUDO-OP
+
+DEVICX,        JMS I [SPNOR    /IGNORE TRAILING SPACES
+       TAD [-5
+       JMP DEVIC1      /PACK 4 CHARACTERS
+
+
+/HANDLER FOR FILENAME PSEUDO-OP
+
+FILENX,        JMS I [SPNOR    /IGNORE TRAILING SPACES
+       TAD (-7
+       JMS FILE1       /PACK 6 CHARACTERS
+       TAD CHAR
+       TAD [-".        /WAS CHARACTER . ?
+       SNA CLA
+       JMS I [GETC     /YES-SKIP TO EXTENSION
+       AC7775
+DEVIC1,        JMS FILE1       /PACK 2 CHARACTERS
+       JMP I [LOOKEX   /--EXIT TO MAIN--
+
+/PACK CHARACTERS
+/NEGATIVE OF # OF CHARACTERS TO BE PACKED IN AC ON ENTRY
+
+FILE1, 0
+       DCA FILE6       /SAVE # OF CHARACTERS TO PACK
+       DCA I (TEXT6    /RESET PACK SWITCH
+FILE4, JMS I [TSTALN   /IS CHARACTER IN CHAR ALPHANUMERIC?
+       SKP
+       JMP FILE5       /NO-DONE PACKING
+       ISZ FILE6       /YES-TOO MANY CHARACTERS?
+       JMP FILE3       /NO-O.K.
+       CLA CMA /YES
+       DCA FILE6       /RESET # OF CHARACTERS AND IGNORE
+       JMP FILE2
+
+FILE3, TAD CHAR
+       JMS I (TEXT2    /PACK A CHARACTER
+FILE2, JMS I [GETC     /GET A CHARACTER
+       JMP FILE4       /TEST IT
+
+       JMS I (TEXT2    /PACK A ZERO CHAR
+FILE5, ISZ FILE6       /ARE WE DONE?
+       JMP .-2         /NO - PAD WITH ZEROES
+       JMP I FILE1     /YES--RETURN--
+FILE6, 0
+       PAGE
+\f/HANDLER FOR TEXT PSEUDO-OP
+/SPACES ARE IGNORED TO DELIMITER
+/DELIMITER IS FIRST PRINTING CHARACTER
+/OTHER THAN SPACE
+/NON-PRINTING CHARACTERS ARE ILLEGAL
+/A PRINTING CHARACTER HAS EITHER BIT 5
+/OR BIT 6 SET, BUT NOT BOTH
+
+TEXT8, JMS I [GETC     /GET NEXT CHARACTER
+TEXTX, CLL CLA CML RAR /AC=4000
+       DCA GETCI       /; AND / ARE NOT END OF LINE
+       JMS TEXT1A      /CHECK FOR PRINTING CHARACTER
+       JMP TEXT8       /NON PRINTING - IGNORE
+       TAD [-240       /IGNORE SPACES UNTIL DELIMITER
+       SNA             /HAS BEEN FOUND
+       JMP TEXT8
+       TAD [240        /RESTORE CHARACTER
+       CIA
+       DCA VALUE2      /STORE NEGATIVE DELIMITER
+       DCA TEXT6       /SET PACKING SWITCH
+TEXT3, JMS I [GETC     /GET NEXT CHARACTER
+       JMS TEXT1A      /IS IT A PRINTING CHARACTER?
+       JMP TEXT9       /NO - IC
+       TAD VALUE2      /YES - IS IT DELIMITER?
+       SNA CLA
+       JMP TEXT4       /YES - TERMINATE
+       TAD CHAR        /NO - PACK AND OUTPUT
+       JMS TEXT2       /PACK IT
+       JMP TEXT3
+
+TEXT4, DCA GETCI       /RESET GETCI TO CALL ; AND / END OF LINE
+       JMS I [GETC     /SKIP DELIMITER
+TEXT4X,        JMS TEXT2       /OUTPUT 0 TO FILE
+       JMS TEXT2
+/CHANGE TEXT4X TO:
+/      NOP
+/FOR NO EXTRA WORD OF ZEROS
+       DCA GETCI       /RESET GETCI IN CASE WE HIT CR
+       JMP I [LOOKEX   /--EXIT TO MAIN--
+\fTEXT9,        JMS I [ERROR    /GENERATE IC ERROR MESSAGE
+       IC
+       JMP TEXT3
+
+/SKIP ON PRINTING CHARACTER
+
+TEXT1A,        0
+       TAD CHAR
+       SPA SNA CLA     /IS CHARACTER -
+       JMP TEXT4X      /YES
+       TAD CHAR
+       TAD [40
+       AND [100
+       SZA CLA         /IS THE CHAR PRINTING?
+       ISZ TEXT1A      /YES - INCREMENT RETURN
+       TAD CHAR        /WITH CHARACTER IN AC
+       JMP I TEXT1A    /--RETURN--
+
+/OUTPUT 2 TEXT CHARACTERS (ONE REGISTER)
+/ENTER WITH CHARACTERS IN AC
+
+TEXT2, 0
+       AND [77         /GET RIGHT 6 BITS
+       ISZ TEXT6       /WHICH HALF OF WORD?
+       JMP TEXT5       /LEFT
+       TAD TEXT7       /RIGHT--ADD IN LEFT HALF
+       JMS I [PUNBIN   /OUTPUT IT
+       JMP I TEXT2     /--RETURN--
+
+TEXT5, JMS I [RTL6     /GET LEFT HALF OF WORD
+       DCA TEXT7       /SAVE IT
+       CLA CMA         /SET SWITCH FOR RIGHT HALF
+       DCA TEXT6
+       JMP I TEXT2     /--RETURN--
+
+TEXT6, 0
+TEXT7, 0
+\f/HANDLER FOR EXPUNGE PSEUDO-OP
+
+EXPUNX,        TAD PASS        /IS THIS PASS 1
+       SMA CLA
+       JMP I [LOOKEX   /NO--EXIT TO MAIN--
+       JMP I (EXPUNW   /YES-CONTINUE AT EXPUNW
+
+
+
+/CLOSE OUTPUT FILE
+
+OCLOSE,        0
+       TAD I (OUTINH   /OUTPUT INHIBITED?
+       SZA CLA
+       JMP I OCLOSE    /YES--RETURN--
+PTPSW, TAD [232        /NO-0 IF PTP: - OUTPUT ^Z
+       JMS I OCHAR
+       JMS I OCHAR     /AND ZEROS
+FILLLP,        JMS I OCHAR
+DIRSW, TAD [177        /TAD [77 IF NOT DIRECTORY
+       AND I (OUDWCT   /FILL OUT BUFFER OR HALF BUFFER
+       SZA CLA         /WITH ZEROS
+       JMP FILLLP
+       TAD I (OUDWCT   /IS THERE OUTPUT TO BE DUMPED?
+       TAD [200
+       SZA
+       JMS OUTDMP      /YES - DUMP IT
+       TAD OUFILE      /GET DEVICE NUMBER IN AC
+       CIF 10
+       JMS I IOMON     /CALL USER SERVICE ROUTINES
+       4               /*CLOSE OUTPUT FILE*
+OUCNAM,        0               /POINTER TO FILENAME TO BE DELETED
+OUCCNT,        0               /LENGTH OF NEW PERMANENT FILE
+       JMP SYSER3      /DE**FATAL ERROR**
+       JMP I OCLOSE    /--RETURN--
+
+OUFILE,        ZBLOCK 5
+\f/OUTPUT DUMP
+/AC CONTAINS CONTROL WORD FOR DUMP
+
+OUTDMP,        0
+       TAD [4000       /BE SURE CONTROL WORD IS
+       DCA OUCTLW      /A WRITE OPERATION
+       TAD OUBLK       /GET STARTING BLOCK NUMBER
+       TAD OUCCNT      /ADD IN COUNT
+       DCA OUREC       /SET THIS BLOCK NUMBER
+       TAD OUCTLW
+       TAD [100        /ROUND HALF-BLOCK, IF ANY
+       CLL RTL
+       RTL
+       RTL
+       AND [17         /GET THIS COUNT
+       TAD OUCCNT
+       DCA OUCCNT      /ADD TO TOTAL COUNT
+       TAD OUCCNT      /IS OUTPUT DEVICE FULL?
+       CLL CML
+       TAD OUELEN      /CHECK AGAINST MAXIMUM LENGTH
+       SNL SZA CLA
+       JMP SYSER2      /DF**FATAL ERROR**
+       JMS I OUHNDL    /CALL OUTPUT DEVICE HANDLER
+OUCTLW,        0               /CONTROL WORD
+       OUBUF           /BEGINNING OF OUTPUT BUFFER
+OUREC, 0               /STARTING BLOCK NUMBER
+SYSER3,        CLA SKP         /ERROR RETURN
+       JMP I OUTDMP    /--RETURN--
+SYSERR,        TAD (DE         /DE **FATAL ERROR**
+       JMP I [MONERR
+
+OUHNDL,        0
+OUBLK, 0
+OUELEN,        0
+
+SYSER2,        TAD (DF         /GENERATE DF ERROR MESSAGE
+       JMP I [MONERR   /**FATAL ERROR**
+       PAGE
+\f/MAINLINE CODE
+
+LOOKE2,        0               /WAS THIS END OF LINE
+       TAD CHAR        / OR END OF CONDITIONAL?
+       TAD [-">
+       SNA
+       JMP CONEND      /END OF CONDITIONAL
+       TAD (">
+       SMA CLA
+       JMP I LOOKE2    /NOT END OF LINE--RETURN--
+LOOKE1,        JMS I [GETC     /GET A CHARACTER
+MAIN,  JMS I (CTCCHK   /CHECK FOR ^C
+       CLA             /** CTCCHK RETURNS AC NON-ZERO!
+       JMS I [SPNOR    /IGNORE SPACES
+       TAD CHAR
+       TAD (-"$        /WAS IT $ ?
+       SNA             /YES--
+       JMP I (ENDPAS   /NO-END THIS PASS
+       TAD ("$-"*
+       SNA CLA         /WAS IT * ?
+       JMP STAR        /YES-HANDLE *
+       JMS I [TSTALP   /NO-WAS IT ALPHABETIC?
+       JMP ALPHA       /YES
+       JMS LOOKE2      /NO
+TOEXP, JMS I [EXP      /GET REST OF EXPRESSION
+       TAD LININD
+       DCA LINKSW      /STORE LINK SWITCH
+       TAD VALUE
+       JMS I [PUNBIN   /OUTPUT THE REGISTER
+LOOKEX,        JMS I [SPNOR    /IGNORE TRAILING SPACES
+       JMS LOOKE2      /IS LINE ENDED?
+ILCHAR,        JMS I [ERROR    /NO-GENERATE IC ERROR MESSAGE
+       IC
+       JMP CONEN1
+
+CONEND,        TAD CONDSW      /ARE WE INTO CONDITIONALS?
+       SNA
+       JMP ILCHAR      /NO - > IS ILLEGAL
+       IAC             /ONE LESS CONDITIONAL
+       DCA CONDSW
+CONEN1,        JMS I [GETC     /GET NEXT CHARACTER
+       JMP LOOKEX      /AND TRY FOR END AGAIN
+\f/HANDLER FOR *
+
+STAR,  JMS I [GETC     /GET NEXT CHARACTER AFTER *
+       JMS I [SPNOR    /IGNORE SPACES
+       JMS I [EXP      /GET REST OF EXPRESSION
+STAR0, DCA STARSW      /ENTER HERE FROM RELOC WITH AC = -1
+       ISZ UNDFSW      /WAS ANYTHING UNDEFINED?
+       JMP .+3         
+       JMS I [ERROR    /YES-GENERATE UO ERROR MESSAGE
+       UO
+       TAD VALUE       /NO
+       DCA OP
+       TAD LOC         /IS THIS THE SAME PAGE AS
+       AND [7600       /THE PREVIOUS CODE?
+       CIA
+       TAD OP
+       AND [7600
+       SNA CLA
+       JMP STAR2       /YES-PUNCH ORIGIN
+       JMS I [DUMPS    /NO-DUMP LITERALS
+       TAD OFSBUF      /SET OFFSET TO NEW VALUE
+       DCA OFFSET      /AFTER LITERALS ARE DUMPED.
+       TAD OP          /PUNCH NEW ORIGIN, SET "VALUE"
+       JMP I (STAR3    /FOR LISTING, AND SET UP IN NEW PAGE
+
+STAR2, TAD OFSBUF      /SET OFFSET TO NEW VALUE
+       DCA OFFSET      /
+       TAD OP
+       JMS I [PUNORG   /PUNCH ORIGIN
+       DCA LAST1       /CLEAR LAST DEFINED SYMBOL
+       JMP I [PUNVAL
+
+ALPHA, JMS I [GETTAG   /PICK UP TAG-IS IT IN TABLE?
+       DCA ALPHAI      /STORE UNDEFINED TAG SWITCH
+       TAD TAG3        /IS IT A PSEUDO-OP?
+       SPA CLA
+       JMP I VALUE2    /YES-GO TO ITS HANDLER
+       TAD CHAR        /NO
+       TAD (-",        /WAS IT TERMINATED BY , ?
+       SNA
+       JMP COMMA       /YES-DEFINE THE SYMBOL
+       TAD (",-"=      /NO-WAS IT TERMINATED BY = ?
+       SNA CLA
+       JMP I (EQUAL    /YES-EQUATE THE SYMBOL
+       AC4000          /NO
+       JMP TOEXP       /TREAT AS AN EXPRESSION
+\f/HANDLER FOR ,
+
+COMMA, JMS I [GETC     /GET NEXT CHARACTER
+       ISZ ALPHAI      /WAS TAG DEFINED PREVIOUSLY?
+       JMP COMMA2      /YES
+       TAD LOC         /NO-STORE CURRENT ADDRESS FOR DEFINITION
+       DCA VALUE2
+       JMS I [INSRTG   /PUT TAG IN SYMBOL TABLE
+COMMA1,        TAD TAG1        /STORE FOR ERROR MESSAGE OUTPUT
+       DCA LAST1
+       TAD TAG2
+       DCA LAST2
+       TAD TAG3
+       DCA LAST3
+       TAD VALUE2
+       DCA LAST4
+       JMP MAIN        /--EXIT TO MAIN--
+
+COMMA2,        TAD LOC         /DO NEW AND OLD DEFINITIONS AGREE?
+       CIA
+       TAD VALUE2
+       SNA CLA
+       JMP COMMA1      /YES-ALLOW REDEFINITION
+       JMS I [ERROR    /NO-GENERATE ID ERROR MESSAGE
+       ID
+       JMP MAIN        /--EXIT TO MAIN--
+\fOPTABL,       OP0             /+
+       OP1             /-
+       OP6             /%
+       OP2             /&
+       OP5             /(SPACE)
+OPEXPL,        OP5             /! - CHANGED TO OP3 IF /B ON
+       OP4             /^
+       PAGE
+\f/EXPRESSION PROCESSOR
+/POSSIBLE RECURSIVE ENTRY
+/ENTER WITH CHARACTER IN CHAR
+
+EXP,   0
+       DCA EXPIND      /SET INDICATOR (NOT 0 IF NO MRI FOUND)
+       DCA LININD      /CLEAR LINK GENERATED SWITCH (' )
+       DCA VALUE       /START WITH "VALUE" = 0
+       DCA UNDFSW      /CLEAR UNDIFINED SWITCH
+       TAD EXP
+       JMS I [PUSHA    /SAVE RETURN ADDRESS
+       DCA OP          /OP=0; ADD
+       TAD EXPIND
+       SPA CLA
+       JMP I (EXPINT
+       TAD CHAR        /IS CHARACTER A + ?
+       TAD [-"+
+       CLL RTR         /PUT THE 2 BIT IN THE LINK
+       SZA CLA         /WAS CHAR 53(+) OR 55(-)?
+       JMP EXP1A       /NO
+       RAL             /YES - OP IS 0 OR 1, DEPENDING
+EXP1,  DCA OP
+       JMS I [GETC     /GET NEXT CHARACTER
+       ISZ EXPIND      /MRI NO LONGER LEGAL ON THIS LINE
+EXP1A, TAD CHAR        /IS CHARACTER A . ?
+       TAD [-".
+       SNA
+       JMP PERIOD      /YES-GO TO . HANDLER
+       TAD (".-""      /NO-IS IT " ?
+       SNA
+       JMP QUOTE       /YES-GO TO " HANDLER
+       TAD (""-"[      /NO-IS IT [ ?
+       CLL
+       SZA
+       TAD ("[-"(      /OR (?
+       SNA CLA
+       JMP I (LIT      /YES - LITERAL - LINK HOLDS WHICH KIND
+       JMS I [TSTALP   /NO-IS IT ALPHABETIC?
+       JMP I (ALPHA1   /YES-HANDLE SYMBOL
+       JMS I [TSTNUM   /NO-IS IT NUMERIC?
+       JMP NUMBER      /YES-HANDLE NUMBER
+
+EXP2,  JMS ENDCHK      /NO-CHECK FOR END
+       JMP EXP1A       /NOGO - TRY AGAIN
+       TAD OP
+       TAD [-4         /IS OP SPACE (4)
+       SNA CLA
+       JMP I (EXPXIT   /YES-EXIT
+       JMS I [ERROR
+       IC              /GIVE IC MESSAGE ON ILLEGAL OPERATOR
+       JMP I (EXPINT   /EXIT ANYWAY
+\f/END OF EXPRESSION CHECK
+/SKIP IF OK
+
+ENDCHK,        0
+       TAD CHAR
+       TAD (-"]        /IS CHARACTER A ] ?
+       SZA             /YES-SKIP A EXIT
+       TAD ("]-")      /IS CHARACTER A ) ?
+       SZA             /YES-SKIP A EXIT
+       TAD (")-">      /IS CHARACTER A > ?
+       SZA             /YES-SKIP AND EXIT
+       TAD (">-"<      /IS CHARACTER A < ?
+       SNA
+       JMP ENDCH1      /YES-SKIP AND EXIT
+       TAD ("<
+       SPA CLA         /IS IT END-OF-LINE?
+       JMP ENDCH1      /YES-SKIP AND EXIT
+       JMS I [ICMESG   /NO - GENERATE IC MESSAGE AND GET NEXT CHAR
+       JMP I ENDCHK    /--RETURN--
+
+ENDCH1,        ISZ ENDCHK      /INCREMENT RETURN ADDRESS
+       JMP I ENDCHK    /--RETURN--
+
+NUMBER,        DCA TEMP
+NUMBE2,        TAD RADIX       /IS THE CURRENT RADIX OCTAL?
+       SNA CLA
+       TAD CHAR        /YES-IS THE DIGIT GREATER THAN 7?
+       TAD (-"8
+       SMA CLA
+       JMP NUMBE3      /YES-ILLEGAL CHARACTER
+       TAD TEMP        /NO-ADD IT TO THE PREVIOUS
+       CLL RAL         /ACCUMULATED VALUE
+       CLL RAL
+       DCA TEMP2
+       TAD RADIX       /IS RADIX OCTAL?
+       AND TEMP        /NO
+       TAD TEMP2       /YES
+       CLL RAL
+       TAD CHAR
+       TAD (-"0
+       DCA TEMP
+       JMS I [GETC     /GET NEXT CHARACTER
+NUMBE4,        JMS I [TSTNUM   /IS IT NUMERIC?
+       JMP NUMBE2      /YES-CONTINUE ACCUMULATING NUMBER
+       TAD TEMP        /NO-STORE NUMBER
+NUMBE1,        DCA VALUE2
+NUMBE5,        TAD OP          /GO COMBINE IT VIA LAST OPERATION
+       TAD (OPTABL
+       DCA TEMP        /FIND THE OPERATOR HANDLER
+       TAD I TEMP
+       DCA TEMP
+       JMP I TEMP      /GO TO THE HANDLER
+\f/8 OR 9 FOUND DURING OCTAL RADIX
+
+NUMBE3,        JMS I [ICMESG   /GENERATE IC ERROR MESSAGE AND
+       JMP NUMBE4      /IGNORE CHARACTER
+
+
+/HANDLER FOR .
+
+PERIOD,        JMS I [GETC     /GET NEXT CHARACTER
+       TAD LOC         /MAKE CURRENT LOCATION
+       JMP NUMBE1      /INTO VALUE OF NUMBER
+
+/HANDLER FOR "
+
+QUOTE, ISZ TXTPTR
+       TAD I TXTPTR    /GET CHARACTER FROM TEXT BUFFER
+       TAD [-215       /WAS IT CARRIAGE RETURN?
+       SNA CLA
+       JMP QUOTE1      /YES-IT IS IC-IGNORE "
+       TAD I TXTPTR    /NO-PUT ASCII CODE INTO
+       DCA VALUE2      /VALUE WORD
+       JMS I [GETC     /GET NEXT CHARACTER
+       JMP NUMBE5      /RETURN TO EXPRESSION PROCESSOR
+
+/CARRIAGE RETURN FOUND IN SINGLE CHARACTER TEXT
+
+QUOTE1,        JMS I [ERROR    /GENERATE IC ERROR MESSAGE
+       IC
+       CLA CMA
+       DCA CHAR
+       JMP I (EXPXIT
+       PAGE
+\f/COME HERE IF FIRST THING IN EXPRESSION IS ALPHA CHARACTER
+
+ALPHA1,        JMS I [GETTAG   /PICK UP TAG
+       DCA ALPHAI      /STORE UNDEFINED INDICATOR
+ALPHA3,        TAD TAG3        /IS IT A PSEUDO-OP?
+       SMA CLA
+       JMP .+3
+       JMS I [ERROR    /YES-GENERATE IP ERROR MESSAGE
+       IP
+       ISZ ALPHAI      /NO-WAS IT UNDEFINED?
+       JMP ALPHA0
+       ISZ UNDFSW      /YES-SET UNDEFINED SWITCH
+       TAD PASS        /IS THIS PASS 1?
+       SPA CLA
+       JMP ALPHA0      /YES-SUPPRESS ERROR MAESSAGE
+       JMS I [ERROR    /NO-GENERATE US ERROR MESSAGE
+       US
+ALPHA0,        TAD TAG2        /NO-WAS IT A MEMORY REFERENCE INSTRUCTION?
+       SPA CLA
+       TAD CHAR        /YES-GET TERMINATING CHARACTER
+       TAD [-240       /WAS IT SPACE?
+       SZA CLA
+       JMP I (NUMBE5   /NOT MEMREF FOLLOWED BY SPACE
+       JMS I [SPNOR    /YES-IGNORE SPACES
+       TAD CHAR
+       SPA CLA
+       JMP I (NUMBE5
+       TAD EXPIND      /IS MEMORY REFERENCE INSTRUCTION OK?
+       SZA CLA
+       JMP I (NUMBE5   /NO-
+       DCA IZIND       /YES-CLEAR I AND Z INDICATOR
+       TAD VALUE2      /STORE MRI ON PUSHDOWN LIST
+       JMS I [PUSHA
+\fALPHA6,       TAD IZIND
+       JMS I [PUSHA    /PUSH THE I AND Z INDICATOR
+       JMS I [TSTALP   /WAS TERMINATING CHARACTER ALPHABETIC?
+       SKP
+       JMP ALPHA4      /NO-
+       JMS I [GETTAG   /YES-PICK UP TAG
+       DCA ALPHAI      /STORE UNDEFINED INDICATOR
+       AC2000
+       AND TAG1        /WAS IT AN I OR Z?
+       SNA CLA
+       JMP ALPHA5      /NO
+       TAD VALUE2      /YES-WAS IT I?
+       SNA
+       IAC             /NO - SET LOW ORDER
+       TAD I   PDLXR   /GET OLD IZIND FROM PDL
+       DCA IZIND       /SET NEW IZIND
+       JMS I [SPNOR    /IGNORE SPACES
+       JMP ALPHA6
+
+EXPINT,        TAD EXPIND
+       TAD [4000
+       DCA EXPIND
+       JMP ALPHA3
+
+ALPHA5,        AC4000
+ALPHA4,        IAC
+       JMS I [EXP      /GET REST OF EXPRESSION
+       TAD I PDLXR     /RETRIEVE MRI
+       DCA IZIND
+       TAD I PDLXR
+       DCA VALUE2
+                       /FALL INTO NEXT PAGE
+\f/COMBINE ADDRESS WITH MEMORY REFERENCE INSTRUCTION
+
+       TAD VALUE       /GET ADDRESS
+       AND [7600
+       SNA             /IS IT PAGE 0?
+       JMP FIX4        /YES
+       CIA             /NO-IS IT ON CURRENT PAGE?
+       TAD LOC
+       AND [7600
+       SNA CLA
+       JMP FIX2        /YES
+       TAD VALUE       /NO-SET UP LINK
+       JMS I (FINDS
+       DCA VALUE
+       TAD FIXMD0      /SET ' IN LISTING
+       DCA LININD
+       ISZ LINK        /BUMP NUMBER OF LINKS GENERATED
+FIXMD0,        0700            /PROTECTION FOR ISZ
+LGERR, SKP             /JMS I PERROR IF /E SPECIFIED
+       LG
+       JMS ADDIND      /SET INDIRECT BIT IN INSTRUCTION
+FIX2,  TAD [200        /SET CURRENT PAGE BIT
+       TAD VALUE2
+       DCA VALUE2
+       TAD IZIND
+       AND [77         /WAS Z SPECIFIED?
+       SNA CLA
+       JMP FIX4        /NO
+       JMS I [ERROR    /YES - ILLEGAL REFERENCE
+       IZ              /TO PAGE 0
+FIX4,  TAD IZIND       /WAS THERE AN I?
+       AND [7700
+       SZA CLA
+       JMS ADDIND      /YES - ADD INDIRECT BIT TO INSTRUCTION
+       TAD VALUE       /GET ADDRESS
+       AND [177
+       TAD VALUE2      /GET OP CODE
+       DCA VALUE       /STORE
+POPJ,  TAD I PDLXR
+       DCA TEMP        /POP A WORD OFF THE STACK
+       JMP I TEMP      /JUMP THROUGH IT.
+\fADDIND,       0               /ROUTINE TO ADD INDIRECT BIT TO AN INSTR
+       TAD VALUE2
+       CMA
+       AND [400
+       SZA             /WAS THERE ONE ALREADY?
+       JMP .+3 /NO
+       JMS I [ERROR    /YES - ILLEGAL INDIRECT
+       II
+       TAD VALUE2
+       DCA VALUE2
+       JMP I ADDIND
+
+/      ALLOWS MULTIPLE NON-RESIDENT INPUT HANDLERS TO NOT BOMB
+
+PTCH,  0               /RUNS IN DF 10
+       TAD (7647       /POINT TO DEVICE
+       DCA PTR         /HANDLER RESIDENCY TABLE
+       TAD [-17        /IT HAS 15 ENTRIES
+       DCA KNTR        /V3C
+KLOOP, TAD I PTR       /GET HANDLER ENTRY POINT
+       AND [7600       /LOOK AT PAGE IT'S ON
+       TAD [-INDEVH    /IS IT ON THE PAGE WE PUT BUFFER OVER?
+       SNA CLA         /WELL?
+       DCA I PTR       /YES IT IS, WIPE IT FROM RESIDENCY
+       ISZ PTR         /LOOK AT NEXT ENTRY
+       ISZ KNTR        /ANY MORE ENTRIES?
+       JMP KLOOP       /YES, MIGHT HAVE TO WIPE SEVERAL GUYS
+       TAD [200        /INCREASE INPUT BUFFER SIZE
+       JMP I PTCH      /V3C
+       PAGE
+\f/COMBINE CURRENT VALUE WITH PREVIOUS VALUE
+/ACCORDING TO LAST OPERATOR
+
+OP0,   TAD VALUE2      /HANDLER FOR +
+       TAD VALUE       /** OP0+1 AND OP0+2 JUMPED TO **
+       DCA VALUE
+EXP3,  TAD CHAR        /GET LAST OPERATOR
+       TAD [-"+        /WAS IT A + OR - ?
+       CLL RTR
+       SNA
+       JMP PLSMIN      /YES - LINK=0 FOR +, 1 FOR -
+       RTL
+       TAD ("+-"%
+       CLL RAR
+       SNA             /IS THE CHAR % OR &?
+       JMP DIVAND      /YES - LINK=0 FOR %, 1 FOR &
+       RAL
+       TAD ("%-240
+       CLL RAR
+       SNA             /IS THE CHAR SPACE OR !?
+       JMP BLKEXP      /YES - LINK=0 FOR SPACE, 1 FOR !
+       RAL
+       TAD (240-"^
+       SNA CLA         /IS THE CHAR ^?
+       JMP MUL         /YES - LINK IRRELEVANT
+       JMS I (ENDCHK   /NO-SEE IF END OF LINE FOUND
+       JMP EXP3        /NO-TRY AGAIN
+EXPXIT,        TAD UNDFSW      /EXIT FROM EXP
+       SNA CLA         /RESTORE EXIT POINT
+       JMP I (POPJ     /--EXIT VIA POPJ--
+       CLA CMA
+       DCA UNDFSW      /SET UNDEFINED SWITCH
+       DCA VALUE       /RESULT IS 0
+       JMP I (POPJ     /--EXIT VIA POPJ--
+\fMUL,  CLL IAC         /LINK DOESN'T COUNT FOR ^
+BLKEXP,        IAC             /** BLANK ASSUMED TO BE 4 ELSEWHERE **
+DIVAND,        IAC
+PLSMIN,        RAL
+       JMP I (EXP1     /GET REST OF EXPRESSION
+
+/HANDLER FOR &
+
+OP2,   TAD VALUE
+       AND VALUE2
+       JMP OP0+2
+
+
+/HANDLER FOR ^
+/MULTIPLY BY REPEATED ADDITION
+
+OP4,   TAD VALUE
+       CIA
+       DCA TEMP
+       TAD VALUE2
+       ISZ TEMP
+       JMP .-2
+       JMP OP0+2
+
+OP1,   TAD VALUE2      /- OPERATOR
+       CIA
+       JMP I (OP0+1    /JUMP INTO ADD OPERATOR
+
+/OPTIONAL HANDLER FOR ! AS 6 BIT LEFT SHIFT AND THEN OR:
+
+OP3,   TAD VALUE
+       JMS I [RTL6
+       AND [7700       /ISOLATE 6 BITS AND FALL INTO "OR"
+       DCA VALUE       /V3C
+
+/HANDLER FOR ! AND SPACE AS INCLUSIVE OR
+
+OP5,   TAD VALUE
+       CMA
+       AND VALUE2
+       JMP I (OP0+1
+\f/CHARACTER INPUT CHECK
+/ENTER WITH CHARACTER IN AC
+
+LSTCH9,        SZA             /IGNORE NULL (0)
+       TAD (-177
+       SZA             /IGNORE RUBOUT (377)
+       TAD (177-13
+       SZA             /IGNORE VERTICAL TAB (213)
+       IAC
+       SNA
+       JMP I (INPUT+1  /IGNORE LINE FEED (212)
+       TAD [12-32      /WAS IT ^Z (END-OF-FILE=232)?
+       SNA
+       JMP I (ENDCHR   /YES - GET NEXT FILE
+       TAD (32-15      /NO - WAS IT CARRIAGE RETURN?
+       SNA
+       JMP LSTCHR      /YES - LAST CHARACTER OF LINE
+       IAC             /NO
+       SNA             /WAS IT FORM FEED (214)?
+       JMP FORCHR      /YES - HANDLER FORM FEED
+       ISZ I (INPUT
+       TAD (14+200
+       DCA LSTCH5      /STORE CHARACTER
+       TAD PASS        /IS THIS PASS 3?
+       SPA SNA CLA
+       JMP LSTCH4      /NO -
+       ISZ LSTCH6      /YES - FILLING HEADER AREA?
+       JMP LSTCH3      /YES
+       CLA CMA         /NO - RESET SWITCH
+       DCA LSTCH6
+LSTCH4,        TAD I (INPUT
+       DCA TEMP
+       TAD LSTCH5      /GET CHARACTER IN AC
+       JMP I TEMP      /-EXIT FROM INPUT-
+
+LSTCH3,        ISZ LSTCH7      /FILLING HEADER
+       TAD LSTCH5      /STORE CHARACTER IN HEADER AREA
+       DCA I LSTCH7
+       JMP LSTCH4
+
+LSTCH5,        0
+LSTCH6,        -HEDLEN
+LSTCH7,        HEADER-1
+\fLSTCHR,       TAD FORMSW      /CARRIAGE RETURN WAS FOUND
+       SNA CLA         /HAS THERE BEEN A FORM FEED?
+       JMP LSTCH1      /NO -
+       DCA FORMSW      /YES - CLEAR FORM FEED SWITCH
+       ISZ EDITPG      /GO TO NEXT EDITOR PAGE
+       DCA THISPG      /CLEAR OVERFLOW PAGE
+       TAD PASS        /IS THIS PASS 3?
+       SMA SZA CLA
+       JMS I [FORMFD   /YES - GENERATE FORM FEED
+LSTCH1,        TAD [215        /NO - CARRIAGE RETURN IS CHARACTER
+       DCA LSTCH5
+       JMP LSTCH4-2    /EXIT
+
+FORCHR,        ISZ FORMSW      /SET FORM FEED SWITCH
+       JMP I (INPUT+1  /GET ANOTHER CHARACTER
+
+FORMSW,        1
+       PAGE
+\f/ERROR MESSAGE OUTPUT
+
+DUMPS1,
+ERROR, 0
+       CLA
+       ISZ ERCNT       /COUNT THE ERRORS
+ERPLUS,        "+              /PROTECTION
+       TAD I ERROR     /GET ERROR MESSAGE
+       ISZ ERROR       /INCREMENT RETURN ADDRESS
+       JMS I [ERROR1   /OUTPUT 2 CHARACTER ERROR MESSAGE
+       TAD (JMP I [7600 /PUT EXIT TO MONITOR
+CSWIT1,        DCA I (LSWITC   /IN SWITCH - "CLA" IF /C
+       TAD PASS        /IS THIS PASS 3?
+       SMA SZA CLA
+       JMP ERROR4      /YES - CARRIAGE RETURN/LINE FEED
+       JMS I [ERROR1   /NO - OUTPUT 2 SPACES
+       TAD [1777       /IS THERE A TAG SAVED?
+       AND LAST1
+       SNA
+       JMP ERROR3      /NO
+       JMS I (DIV45    /YES - OUTPUT FIRST 2 CHARACTERS
+       TAD LAST2       /OUTPUT SECOND 2 CHARACTERS
+       JMS I (DIV45
+       TAD LAST3
+       JMS I (DIV45    /OUTPUT THIRD 2 CHARACTERS
+       TAD LAST4       /IS ERROR LOCATION SAME AS LAST TAG?
+       CIA
+       TAD LOC
+       SNA CLA
+       JMP ERROR4      /YES - CARRIAGE RETURN
+       TAD ERPLUS
+       JMS I OERROR
+       TAD LAST4
+       CIA
+ERROR3,        TAD LOC         /OUTPUT 4 DIGIT ADDRESS OR INCREMENT
+       JMS I (OCTPRT
+ERROR4,        TAD [215        /OUTPUT CARRIAGE RETURN/LINE FEED
+       JMS I OERROR
+       JMP I ERROR     /--RETURN--
+\f/RESET LITERAL TABLES AND POINTERS
+
+DUMPS5,
+CLEAN, 0
+       TAD (LITBUF-1
+       DCA XREG1       /SET LITERAL TABLE POINTER
+       TAD (TPINST-1
+       DCA XREG2       /SET TOP INST. TABLE POINTER
+       TAD (-40
+       DCA TEMP
+       TAD [200
+       DCA I XREG1     /SET LITERAL TABLE ENTRIES TO 200
+       DCA I XREG2     /SET TOP INST. TABLE ENTRIES TO 0
+       ISZ TEMP
+       JMP .-4
+       DCA LAST1       /CLEAR LAST DEFINED TAG
+       JMP I CLEAN     /--RETURN--
+
+/DUMP CURRENT PAGE LITERALS
+
+DUMPS, 0
+       JMS I [FINDSP
+       SNA             /IF THIS IS PAGE 0,
+       JMP I DUMPS     /--RETURN--
+       TAD [LITBUF
+       DCA DUMPS1
+       TAD LITPTR
+       CIA CLL
+       TAD I DUMPS1
+       DCA DUMPS2      /STORE NUMBER OF LITERALS ON THIS PAGE
+       SZL             /ARE THERE ANY?
+       JMP D2          /V3C
+       DCA STARSW      /FORCE ORIGIN PUNCH IF RELOC JUST INVOKED
+       TAD LOC
+       AND [7600
+       TAD I DUMPS1
+       JMS I [PUNORG   /OUTPUT ORIGIN
+       TAD I DUMPS1
+       TAD [LITBF1
+DUMPS3,        DCA DUMPS5
+       TAD I [LINBUF   /SAVE LINBUF
+       JMS I [PUSHA
+       DCA I [LINBUF
+DUMPS6,        TAD I DUMPS5
+       DCA VALUE
+JMSPUN,        JMS I [PUNONE   /OUTPUT ONE REGISTER
+       ISZ LOC
+       ISZ DUMPS5
+LITHAK,        ISZ I DUMPS1    /DESTROY RECORD OF CURRENT PAGE LITERALS -
+                       /ZEROED IF NO /W OPTION SPECIFIED
+       ISZ DUMPS2
+       JMP DUMPS6
+       TAD I PDLXR
+       DCA I [LINBUF   /RESTORE LINBUF
+D2,    TAD DUMPS1      /WIPE REMEMBRANCE OF TOP OF PAGE (JR)
+       TAD (40         /V3C
+       DCA DUMPS5
+D3,    DCA I DUMPS5
+       JMP I DUMPS     /--RETURN--
+\f/HANDLER FOR ZBLOCK PSEUDO-OP
+/RESERVES AS MANY WORDS OF ZERO
+/AS VALUE OF EXPRESSION
+
+ZBLOCX,        JMS I [SPNOR    /IGNORE SPACES
+       JMS I [EXP      /GET THE EXPRESSION
+       TAD VALUE
+       CMA             /PROTECT AGAINST ZERO CASE
+       DCA TEMP3       /STORE NEGATIVE AS COUNTER
+       JMP ZBLOCZ      /JUMP INTO LOOP
+ZBLOCY,        JMS I [PUNBIN   /OUTPUT ONE WORD OF ZERO
+       TAD PASS        /IS THIS PASS 3?
+       SMA SZA CLA
+       DCA I (PUNMOD   /YES - PREVENT OUTPUT
+ZBLOCZ,        ISZ TEMP3       /NO - DONE YET?
+       JMP ZBLOCY      /NO - CONTINUE
+       TAD JMSPUN      /YES - RESTORE PUNMOD
+       DCA I (PUNMOD
+       JMP I [LOOKEX   /--EXIT TO MAIN--
+
+/DUMP PAGE 0 LITERALS
+
+DUMPS2,
+DUMPZ, 0
+       TAD DUMPZ       /RESET EXIT FROM DUMPS
+       DCA DUMPS
+       TAD [200
+       CIA CLL
+       TAD I [LITBUF   /STORE THE NUMBER OF LITERALS ON PAGE 0
+       DCA DUMPS2
+       SZL             /ARE THERE ANY?
+       JMP I DUMPS     /NO - ** DUMPZ IS DESTROYED **
+       TAD I [LITBUF
+       JMS I [PUNORG   /OUTPUT ORIGIN
+       TAD I [LITBUF   /SET VALUES FOR DUMPS
+       TAD (LITBF2
+       JMP DUMPS3
+       PAGE
+\f/ENTER A TAG INTO SYMBOL TABLE
+
+       IFZERO  HASH<
+INSRTG,        0
+       TAD VALUE2      /SAVE VALUE 2
+       JMS I [PUSHA
+       ISZ HIGHTG      /COUNT IN THIS TAG
+       TAD TAGMAX
+       CLL CIA         /GET LIMIT OF SYMBOL STORAGE
+       TAD HIGHTG      /IS THERE ROOM FOR ONE MORE?
+       SZL
+       JMP I (SYMOFL   /NO - SE**FATAL ERROR**
+       TAD TAGMAX      /YES - IS USR IN CORE?
+       TAD (-1340
+       SZL CLA
+       JMP GETTG5      /YES
+       TAD [7700       /NO - RESET ADDRESS TO
+       DCA IOMON       /USR NON-RESIDENT
+       AC7776
+       AND I (JSBITS   /RESET JOB STATUS WORD TO
+       DCA I (JSBITS   /SAVE CORE WHEN USR CALLED
+GETTG5,        TAD THISTG      /SEARCH SYMBOL TABLE
+       DCA TEMP2
+       TAD HIGHTG
+       IAC
+       DCA THISTG
+GETTG8,        AC7776
+       TAD THISTG
+       DCA THISTG
+       JMS I [FINDTG   /GET NEXT TAG FROM SYMBOL TABLE
+       ISZ THISTG
+       TAD THISTG
+       CIA
+       TAD TEMP2       /DOES NEW TAG GO WHERE PREVIOUS TAG WAS?
+       SNA CLA
+       JMP GETTG9      /YES-PUT IT THERE AND EXIT
+       JMS I [PUTTAG   /NO-REPLACE RETRIEVED TAG WHERE PREVIOUS TAG WAS
+       JMP GETTG8
+
+/THE ABOVE CODE WILL BE OPTIMIZED AT INITIALIZATION
+/IF THE ASSEMBLER IS TO BE RESTRICTED TO 8K OF CORE
+
+GETTG9,        TAD I (NAME1    /GET CURRENT TAG
+       DCA TAG1        /PUT IT IN TAG1-TAG3
+       TAD I (NAME2
+       DCA TAG2
+       TAD I (NAME3
+       DCA TAG3
+       TAD I PDLXR     /RESTORE VALUE 2
+       DCA VALUE2
+       JMS I [PUTTAG   /PUT TAG1 - TAG3 INTO SYMBOL TABLE
+       JMP I INSRTG    /--RETURN--
+
+TAGMAX,        1740            /12K=3740, ...
+       >
+
+/      IFNZRO  HASH<   /***HACK ONLY***
+/TLYREF,       0               /TALLY REFS TO SYMBOL TABLE
+/      ISZ     NREFL
+/      JMP I   TLYREF
+/      ISZ     NREFH
+/      JMP I   TLYREF
+/      JMP I   TLYREF
+/TLYPRB,       0               /TALLY PROBES INTO TABLE
+/      JMS I   [FINDTG /FUDGE, OUT OF ROOM
+/      ISZ     NPROBL
+/      JMP I   TLYPRB
+/      ISZ     NPROBH
+/      JMP I   TLYPRB
+/      JMP I   TLYPRB
+/NREFH,        0
+/NREFL,        0
+/NPROBH,       0
+/NPROBL,       0
+/      >               /***HACK ONLY***
+\f      IFNZRO  HASH<
+
+       /INSERT A TAG INTO THE HASH TABLE
+
+INSRTG,        0
+       ISZ     HIGHTG  /BUMP SYM NUM (SKIPS ON 0)
+       TAD     HIGHTG
+       STL CMA
+       TAD     TAGMAX
+       SNA SZL CLA     /STILL ROOM FOR AT LEAST 2 MORE?
+       JMP I   (SYMOFL /NO SE** FATAL ERROR**
+       TAD I   (NAME1
+       DCA     TAG1
+       TAD I   (NAME2
+       DCA     TAG2
+       TAD I   (NAME3
+       DCA     TAG3
+       JMS I   [PUTTAG /NOW ACTUALLY INSERT IT
+       JMP I   INSRTG
+       >
+\f/OUTPUT 2 CHARACTER WORD
+/FROM SYMBOL TABLE FORMAT
+/DIVIDE BY 45(8)
+
+DIV45, 0
+       RAL
+       CLL RAR         /CLEAR SIGN BIT
+DIV45A,        ISZ DIV45C
+       TAD (-45
+       SMA
+       JMP DIV45A
+       TAD (45
+       JMS DIV45E
+       DCA DIV45B
+       STA
+       TAD DIV45C
+       JMS DIV45E
+       JMS I [RTL6
+       TAD DIV45B
+       JMS I [ERROR1   /OUTPUT 2 CHARACTERS
+       DCA DIV45C      /CLEAR DIV45C FOR NEXT GO-ROUND
+       JMP I DIV45     /--RETURN--
+
+DIV45B,        0
+DIV45C,        0               /** MUST BE 0 WHEN DIV45 IS ENTERED **
+
+DIV45E,        0
+       SNA
+       JMP I DIV45E
+       TAD (-33
+       SMA
+       TAD (20-40-33
+       TAD (33+40
+       JMP I DIV45E    /--RETURN--
+\f/HANDLER FOR FIXTAB PSEUDO-OP
+
+FIXTBX,        TAD PASS        /IS THIS PASS 1?
+       SMA CLA
+       JMP I [LOOKEX   /NO--EXIT TO MAIN--
+       JMP I (FIXTAY   /YES--DO FIXTAB
+
+/SET FIELD
+
+SETFLD,        0
+       CLA CLL         /SETFLD CALLED WITH AC RANDOM
+       DCA SETFL1      /INITIALIZE FIELD
+       IFNZRO  HASH<
+       TAD     USROFS  /FUDGE FOR KEEPING USR AROUND
+       >
+       TAD THISTG
+SETFLP,        ISZ SETFL1
+       CML
+       TAD (-1740      /PUT 1740 SYMBOLS IN EACH FIELD
+       SNL             /IS THE DIVIDE THROUGH?
+       JMP SETFLP      /NO - CONTINUE
+       IFZERO  HASH<
+       CLL CMA RTL     /AC CONTAINED REM-1740; THIS MAKES IT INTO
+       TAD (-1         /7573-4*REM WHICH IS THE ADDRESS WE WANT
+       >
+       IFNZRO  HASH<
+       CLL RTL         /AC GETS 0201 TO 7775
+       TAD     (-202   /AC GETS 7777 TO 7573 FOR TAGXR
+       >
+       DCA TAGXR       /TO STICK INTO AN AUTO-XR
+       TAD SETFL1
+       CLL RTL
+       RAL
+       TAD SETFL2
+       DCA SETFL1
+SETFL1,        HLT
+       JMP I SETFLD    /--RETURN--
+       IFNZRO  HASH<
+USROFS,        0               /GETS 400 IF KEEPING USR
+       >
+\f/FIND TAG
+/GET TAG FROM SYMBOL TABLE
+/PUT IT INTO TAG1-TAG3
+/WITH ITS VALUE IN VALUE2
+
+FINDTG,        0
+       TAD THISTG
+       JMS SETFLD
+       TAD I TAGXR
+       DCA TAG1
+       TAD I TAGXR
+       DCA TAG2
+       TAD I TAGXR
+       DCA TAG3
+       TAD I TAGXR
+       DCA VALUE2
+SETFL2,        CDF
+       JMP I FINDTG    /--RETURN--
+
+/OPTIMIZATION MAY CHANGE SETFLD TO
+/REMOVE CLA ON ENTRY
+       PAGE
+\f/BEGINNING OF PASS CODE
+
+       JMS I (IOPEN    /SET INPUT ROUTINE TO OPEN FILE
+START2,        ISZ PASS        /SET UP COUNTERS AND POINTERS
+       DCA XLISTX      /CLEAR XLIST SWITCH
+       DCA FLDIND      /SET FIELD TO 0
+       DCA CONDSW
+       DCA EDITPG
+       DCA LINK
+       DCA RADIX
+       DCA ERCNT
+       DCA GETCI
+       DCA PUNCHX
+       DCA I [LINBUF
+       TAD (PDLST
+       DCA PDLXR
+       JMS I [CLEAN
+       TAD [200
+       DCA LITPTR
+       TAD [200
+       JMS I [PUNORG
+       JMP I (LOOKE1   /--EXIT TO MAIN--
+
+/HANDLER FOR $
+
+ENDPAS,        JMS I [DUMPS    /DUMP CURRENT PAGE LITERALS
+       DCA OFSBUF      /CLEAR OFFSET FOR NEXT PASS
+       TAD PASS        /WHAT PASS IS ENDING?
+       SNA
+       JMP I (ENDPA2   /PASS 2
+       SPA CLA
+       JMP I (START1   /PASS 1
+       TAD I [LINBUF   /PASS 3
+       SNA CLA         /ANYTHING TO PRINT?
+       JMP ENDPA1-1    /NO
+       TAD [211        /YES - TAB OVER TWICE
+       JMS I OERROR
+       TAD [211
+       JMS I OERROR
+       JMS I [LINPRT   /PRINT LINE
+       JMS I [DUMPZ    /DUMP PAGE 0 LITERALS
+ENDPA1,        DCA XLISTX
+/OUTPUT SYMBOL TABLE
+SSWITC,        JMS I (SYMPRT   /(0 IF /S)
+       TAD I (FORM21
+       DCA I (FORM22
+       JMS I [FORMFD   /OUTPUT FORM FEED
+ERMSGS,        TAD ERCNT
+       JMS OUTTTL      /PRINT "ERRORS DETECTED: N"
+       TAD LINK
+       JMS OUTTTL      /PRINT "LINKS GENERATED: N"
+FINLFF,        JMS I [FORMFD   /PRINT FINAL FF (ZEROED IF NO PASS 3)
+       JMS I (OCLOSE   /AND CLOSE THE OUTPUT FILE
+\f/CREF AND LOAD-AND-GO OPTIONS
+/****FINAL EXIT TO MONITOR****
+LSWITC,        JMP I [7605     /0 IF /L OR /G OR /C
+       TAD (7616
+       DCA XREG1
+       CDF 10
+CSWITC,        TAD I [7600     /"TAD I [7605" IF /C
+       AND [17
+       DCA I XREG1     /SET BINARY DEVICE
+       TAD BINSRT
+
+/EXIT FROM PAL8 BY CHAINING
+/TO NEXT PROGRAM
+/SHOULD BE ABSLDR OR CREF
+
+       DCA I XREG1     /SET STARTING BLOCK
+       DCA I XREG1     /SET 0 TERMINATOR
+       CDF
+       TAD I (JSBITS   /SET BIT 11 OF JOB STATUS WORD
+       RAR             /SO 10000-11777 IS NOT SAVED
+       CLL CML RAL
+       DCA I (JSBITS
+       CIF 10
+       JMS I IOMON     /CALL USER SERVICE ROUTINES
+       6               /*CHAIN TO NEXT PROGRAM*
+CHAIN, 0               /STARTING BLOCK OF NEXT PROGRAM
+
+OUTTTL,        0
+       DCA LAST1       /SAVE NUMBER TO BE PRINTED
+OUTTLL,        TAD I TTLPTR    /GET A WORD OF MESSAGE
+       ISZ TTLPTR
+       SNA             /END?
+       JMP PRTTTL      /YES
+       JMS I [ERROR1   /NO - PRINT IT
+       JMP OUTTLL      /AND LOOP
+PRTTTL,        TAD [240        /PRINT A SPACE
+       JMS I OCHAR
+       TAD LAST1
+       JMS I (FORMF4   /PRINT NUMBER IN DECIMAL
+       JMS I (CRLF     /PRINT CR AND 2 LF'S (1 IF PASS 3)
+       JMP I OUTTTL    /AND RETURN
+
+TTLPTR,        TTLMSG
+\f/COME HERE TO LOAD THE PASS 3 OVERLAY AT THE END OF PASS 2
+
+LOADOV,        JMS I (7607     /CALL SYSTEM DEVICE HANDLER
+       0200            /SWAP IN CODE UNIQUE TO PASS 3
+       SWAP1           /BUFFER ADDRESS
+       ASWAP           /STARTING BLOCK NUMBER
+       JMP I (SYSER3   /DE**FATAL ERROR**
+NSWITC,        JMP START2      /(0 IF NO LIST FILE, SKP IF /N) START PASS3
+       JMP ERMSG1
+       JMP ENDPA1
+
+ERMSG1,        TAD (OTYPEO     /COME HERE IF NO PASS 3 OUTPUT FILE
+       DCA OCHAR
+       TAD (OTYPEO
+       DCA OERROR
+       TAD [7600
+       DCA I (OTYPCR   /INHIBIT AUTO-LF ON CARRIAGE RETURN
+       DCA FINLFF      /KILL LAST FORM FEED
+       JMP ERMSGS
+
+/ADD BITS TO PUNCH ORIGIN
+
+PUNORG,        0
+       DCA LOC
+       TAD PASS        /IS THIS PASS 2?
+       SZA CLA
+       JMP I PUNORG    /NO--RETURN--
+       TAD LOC         /YES - OUTPUT ORIGIN SETTING
+       TAD OFFSET      /"LOC" MAY BE FICTITIOUS - MAKE IT REAL
+       CLL CML
+       ISZ STARSW      /INHIBIT PUNCHING ORIGIN IF NECESSARY
+       JMS I [PUNOUT
+       CLA
+       DCA STARSW      /RESET SWITCH
+       JMP I PUNORG    /--RETURN--
+       PAGE
+\f\f/EVALUATE LITERAL
+
+LIT,   STA RAL         /-2 IF PAGE 0 LITERAL, -1 IF CUR PAGE
+       DCA FINDS1      /SAVE FLAG
+       JMS I [GETC     /GET NEXT CHARACTER
+       JMS I [SPNOR    /IGNORE SPACES
+       TAD EXPIND      /STORE IMPORTANT VALUES PRIOR TO
+       JMS I [PUSHA    /ENTRANCE INTO EXP
+       TAD OP
+       JMS I [PUSHA
+       TAD VALUE
+       JMS I [PUSHA
+       TAD FINDS1
+       JMS I [PUSHA
+       JMS I [EXP      /GET EXPRESSION
+       TAD VALUE       /FIND LITERAL IN TABLE
+       ISZ I PDLXR     /PAGE 0?
+       JMP .+3
+       JMS FINDS       /NO
+       SKP
+       JMS FIND0       /YES
+       DCA VALUE2      /STORE ADDRESS
+       TAD I PDLXR
+       DCA VALUE
+       TAD I PDLXR     /RESTORE SAVED VALUES
+       DCA OP
+       TAD I PDLXR
+       DCA EXPIND
+       TAD CHAR        /IGNORE ) OR ]
+       TAD (-")
+       SZA
+       TAD (")-"]
+       SNA CLA
+       JMS I [GETC     /GET NEXT CHARACTER
+       JMP I (NUMBE5   /RETURN TO EXPRESSION PROCESSOR
+
+
+PEZE,  0               /SUBR TO ISSUE PE OR ZE MESSAGE
+       SNA CLA         /WHICH ONE?
+       JMP .+4 /PAGE 0
+       JMS I PERROR
+       PE
+       JMP I PEZE
+       JMS I PERROR
+       ZE
+       JMP I PEZE
+\f/FIND LITERAL ON CURRENT PAGE
+
+FINDS, 0
+       DCA FINDS1
+       TAD LOC
+       AND [7600
+       SNA             /IS THIS PAGE 0?
+       JMP FIND01      /YES
+       DCA FINDS2      /NO - SAVE PAGE NUMBER
+       TAD [LITBF1
+       DCA FIND0
+       TAD [7700       /ALLOW 100(8) CURRENT PAGE LITERALS
+       DCA FORMF6
+       TAD LITPTR      /GET PG ADDR OF 1ST LITERAL IN BUFFER
+FIND02,        DCA FINDS3
+       TAD FINDS2
+       JMS I [RTL6
+       TAD [LITBUF
+       DCA TEMP
+       TAD FIND0       /COMPUTE ACTUAL CORE ADDRESS OF LITERAL
+       TAD I TEMP
+       DCA TEMP2
+       TAD FINDS3      /COMPUTE THE NUMBER OF ENTRIES
+       CIA
+       TAD I TEMP      /IN THE LITERAL BUFFER
+       SNA
+       JMP FINDS6      /NONE
+       DCA FINDS3
+FINDS4,        TAD I TEMP2     /GET LITERAL FROM TABLE
+       CIA
+       TAD FINDS1      /AND CURRENT LITERAL
+       SNA CLA         /DO THEY MATCH?
+       JMP FINDS5      /YES
+       ISZ TEMP2       /NO - BUMP COUNTERS
+       ISZ FINDS3
+       JMP FINDS4      /TRY AGAIN
+FINDS6,        TAD FINDS2
+       JMS I [RTL6
+       TAD [TPINST
+       DCA FINDS3
+       TAD I TEMP      /DOES THIS OVERFLOW PAGE?
+       CIA
+       TAD I FINDS3
+       SPA CLA
+       JMP FINDS7      /NO
+
+\fFIND03,       TAD FINDS2      /PAGE FULL - WHICH PAGE?
+       JMS PEZE        /GENERATE PE OR ZE MESSAGE
+       CLA CMA
+       JMP FINDS9
+FINDS7,        CLA CMA
+       TAD I TEMP      /IS PAGE FULL?
+       AND FORMF6
+       SNA CLA
+       JMP FIND03      /YES - OUTPUT ERROR MESSAGE
+       CLA CMA
+       TAD I TEMP      /NO
+       DCA I TEMP
+FINDS9,        TAD I TEMP
+       TAD FIND0
+       DCA TEMP2
+       TAD FINDS1
+       DCA I TEMP2
+FINDS5,        TAD FIND0       /GET ADDRESS OF LITERAL
+       CIA
+       TAD TEMP2
+       TAD FINDS2
+       JMP I FINDS     /--RETURN--
+
+
+/FIND LITERAL ON PAGE 0
+
+FIND0, 0
+       DCA FINDS1
+       TAD FIND0       /RESET EXIT FROM FINDS
+       DCA FINDS
+FIND01,        DCA FINDS2      /SET POINTERS
+       TAD (LITBF2
+       DCA FIND0
+       TAD [7760       /ALLOW 160(8) PAGE 0 LITERALS
+       DCA FORMF6
+       TAD [200
+       JMP FIND02
+
+FINDS1,        0
+FINDS2,        0
+FINDS3,        0
+       PAGE
+\f/HANDLER FOR IFZERO PSEUDO-OP
+
+IF0,   TAD (10         /IFTST1, SNA CLA
+
+/HANDLER FOR IFNZERO PSEUDO-OP
+
+IFN0,  TAD IFSZA       /IFTST1, SZA CLA
+       DCA IFTST1
+       JMS I [SPNOR    /IGNORE SPACES
+       JMS I [EXP      /GET EXPRESSION
+IFTST3,        TAD CHAR        /GET LAST CHARACTER
+       TAD (-"<
+       SNA CLA         /IS IT <?
+       JMP IFTST2      /YES
+       JMS ICMESG      /PRINT IC MESSAGE AND GET NEXT CHAR
+IFTST9,        JMS I [SPNOR    /IGNORE SPACES
+       JMP IFTST3      /TRY AGAIN
+
+IFTST2,        JMS I [GETC     /GET NEXT CHARACTER
+       TAD CONDSW
+       CIA
+       DCA CONDTM      /SET NUMBER OF NESTED CONDITIONALS
+       CLA CMA         /DECREMENT NUMBER OF NESTED CONDITIONALS
+       TAD CONDSW
+       DCA CONDSW
+       TAD VALUE
+IFTST1,        HLT             /SZA CLA OR SNA CLA
+       JMP I (MAIN     /--EXIT TO MAIN--
+IFTST5,        TAD CONDSW      /DONE WITH ALL CONDITIONALS IN NEST?
+       TAD CONDTM
+       SMA CLA
+       JMP I (MAIN     /YES --EXIT TO MAIN--
+       TAD CHAR
+       TAD (-"<        /NO - GET NEXT CHARACTER
+       SNA             /IS IT <?
+       JMP IFTST6      /YES - HANDLE NEXT CONDITIONAL
+       TAD ("<-">      /NO - IS IT >?
+IFSZA, SZA CLA
+       JMP IFTST4      /NO - FINISH THIS CONDITIONAL
+       AC7776
+IFTST6,        CMA
+       TAD CONDSW
+       DCA CONDSW
+IFTST4,        DCA I [LINBUF   /INHIBIT LISTING OF UNASSEMBLED CODE -
+                       /ZEROED IF /J OPTION NOT SPECIFIED
+       JMS I [GETC     /GET NEXT CHARACTER
+       JMP IFTST5
+\f/HANDLER FOR IFDEF PSEUDO-OP
+
+IFD,   TAD (10         /IFTST1, SNA CLA
+
+/HANDLER FOR IFNDEF PSEUDO-OP
+
+IFND,  TAD IFSZA       /IFTST1, SZA CLA
+       DCA IFTST1
+IFTST7,        JMS I [SPNOR    /IGNORE SPACES
+       JMS I [TSTALP   /IS NEXT CHARACTER ALPHABETIC
+       JMP IFTST8      /YES
+       JMS ICMESG      /PRINT IC MESSAGE AND GET NEXT CHAR
+       JMP IFTST7      /KEEP TRYING
+
+IFTST8,        JMS I [GETTAG   /PICK UP TAG
+       DCA VALUE       /STORE UNDEFINED INDICATOR
+       TAD TAG3        /WAS IT A PSEUDO-OP?
+       SMA CLA
+       JMP IFTST9      /NO
+       JMS I [ERROR    /YES - GENERATE IP ERROR MESSAGE
+       IP
+       JMP IFTST9
+
+ICMESG,        0
+       JMS I   [ERROR
+       IC              /IC COMES OUT ON ALL PASSES
+       TAD CHAR
+       SPA CLA
+       JMP I [LOOKEX   /END OF LINE - GO AWAY
+       JMS I [GETC     /GET NEXT CHAR
+       JMP I ICMESG
+\fCONDTM,
+
+/PUT TAG IN SYMBOL TABLE
+
+PUTTAG,        0
+       TAD THISTG
+       JMS I (SETFLD   /SET FIELD
+       TAD TAG1
+       DCA I TAGXR
+       TAD TAG2
+       DCA I TAGXR
+       TAD TAG3
+       DCA I TAGXR
+       TAD VALUE2
+       DCA I TAGXR
+       CDF
+       JMP I PUTTAG    /--RETURN--
+
+
+/PUSHDOWN ROUTINE
+/PUT NEW ENTRY ON PUSHDOWN STACK
+
+PUSHA, 0
+       DCA TEMP
+       CLA CMA
+       TAD PDLXR
+       DCA PDLXR
+       TAD PDLXR
+       TAD (-PDLND
+       SPA CLA         /IS LIST TOO FULL?
+       JMP PUSHA1      /BE**FATAL ERROR**
+       TAD TEMP        /NO - MAKE ENTRY
+       DCA I PDLXR
+       CLA CMA
+       TAD PDLXR
+       DCA PDLXR
+       JMP I PUSHA     /--RETURN--
+
+PUSHA1,        TAD (BE
+       JMP I [MONERR   /PUSHDOWN OVERFLOW IS FATAL ERROR
+\f/TEST NUMERIC ROUTINE
+/CALL WITH CHARACTER TO TEST IN "CHAR"
+/SKIPS IF THE CHARACTER IS NOT NUMERIC
+
+TSTNUM,        0
+       TAD CHAR        /GET THE CHARACTER
+       TAD (-"9-1
+       CLL
+       TAD ("9-"0+1
+       SNL CLA         /CHECK FOR RANGE 0-9
+       ISZ TSTNUM      /OUT OF RANGE
+       JMP I TSTNUM    /--RETURN--
+
+/TEST ALPHANUMERIC ROUTINE
+/CALL WITH CHARACTER IN "CHAR"
+/SKIPS IF CHARACTER IS NOT ALPHANUMERIC
+
+TSTALN,        0
+       JMS I [TSTNUM   /IS IT NUMERIC
+       JMP I TSTALN    /YES--RETURN--
+       JMS I [TSTALP   /IS IT ALPHABETIC
+       JMP I TSTALN    /YES--RETURN--
+       ISZ TSTALN      /NEITHER
+       JMP I TSTALN    /--RETURN--
+
+/TEST ALPHABETIC ROUTINE
+/CALL WITH CHARACTER IN "CHAR"
+/SKIPS IF NOT ALPHABETIC
+
+TSTALP,        0
+       TAD CHAR
+       TAD (-"Z-1
+       CLL
+       TAD ("Z-"A+1
+       SNL CLA         /CHECK FOR RANGE A-Z
+       ISZ TSTALP      /OUT OF RANGE
+       JMP I TSTALP    /--RETURN--
+       PAGE
+\f/INPUT ROUTINE
+/UNPACKS CHARACTERS FROM BUFFER
+
+INPUT, 0
+       ISZ INCHCT      /ARE THERE CHARACTERS LEFT IN BUFFER? 
+       JMP I CHARLV    /YES - FETCH ONE
+       TAD INEOF       /NO - WAS OLD FILE ENDED?
+       SZA CLA
+       JMP ENDCHR      /YES - START NEW FILE
+INGBUF,        TAD INCTLA      /NO
+       AND [7600
+       JMS I [RTL6
+       TAD INCTR
+       SNL
+       DCA INCTR
+       SZL
+       ISZ INEOF
+       CLL CML CMA RTR /SET CONTROL WORD
+       RTR
+       RTR
+       TAD INCTLA
+       DCA INCTLW
+       JMS I INHNDL    /CALL INPUT DEVICE HANDLER
+INCTLW,        0               /CONTROL WORD
+INBUFP,        INBUF           /INPUT BUFFER ADDRESS
+INREC, 0               /STARTING BLOCK NUMBER
+       JMP INERRX      /ERROR RETURN
+INBREC,        TAD INCTLA      /NORMAL RETURN
+       AND [7600
+       JMS I [RTL6
+       TAD INREC
+       DCA INREC       /RESET STARTING BLOCK NUMBER
+       TAD INCTLW
+       AND [7600
+       CLL RAL
+       TAD INCTLW
+       AND [7600
+       CIA
+       DCA INCHCT      /SET CHARACTER COUNT
+       TAD INBUFP
+       DCA INPTR       /SET BUFFER POINTER
+\f/CHARACTERS ARE FOUND IN BUFFER
+/IN STANDARD OS/8 PACKING
+/WORD 1: AAA A11 111 111
+/WORD 2: BBB B22 222 222
+/WHICH REPRESENTS 3 CHARACTERS
+/CHARACTER 1: 11 111 111
+/CHARACTER 2: 22 222 222
+/CHARACTER 3: AA AAB BBB
+
+
+ICHAR1,        TAD I INPTR     /PICK UP CHARACTER WORD 1
+       JMS CHARLV      /CHECK RIGHT 8 BITS
+ICHAR2,        TAD I INPTR     /PICK UP WORD 1
+       ISZ INPTR       /(INCREMENT POINTER TO WORD 2)
+       AND [7400       /WITH WORD 1 IN AC
+       DCA INCTLW      /RETRIEVE LEFT 4 BITS AND SAVE
+       TAD I INPTR     /PICK UP WORD 2
+       JMS CHARLV      /CHECK RIGHT 8 BITS
+ICHAR3,        TAD I INPTR     /PICK UP WORD 2
+       ISZ INPTR       /(POINT TO NEXT WORD 1)
+       AND [7400       /WITH WORD 2 IN AC
+       CLL RTR         /RETRIEVE LEFT 4 BITS
+       RTR
+       TAD INCTLW      /PUT BOTH SETS OF 4 BITS TOGETHER
+       RTR
+       RTR
+       JMS CHARLV      /CHECK CHARACTER
+       JMP ICHAR1      /TRY NEXT SET OF 2 WORDS
+
+INERRX,        ISZ INEOF
+       SMA CLA         /EOF OR FATAL ERROR?
+       JMP INBREC      /EOF - UNPACK THIS BUFFER
+       JMP I (SYSERR   /FATAL - GENERATE DE ERROR MESSAGE
+
+INCHCT,        -1
+INEOF, 1
+INPTR, 0
+INCTR, 0
+INCTLA,        0
+INFPTR,        7617
+\f/START NEW FILE
+
+ENDCHR,        ISZ I (FORMSW   /^Z OR EOF SIMULATES FORM FEED
+       TAD PASS        /IS THIS PASS 3?
+       SPA SNA CLA
+       JMP NXTFLE      /NO
+       JMS I (HEDCLR   /YES - CLEAR HEADING BUFFER
+       TAD [-HEDLEN
+       DCA I (LSTCH6
+       TAD [HEADER-1
+       DCA I (LSTCH7
+       DCA LSTCNT
+NXTFLE,        TAD (INDEVH+1   /SET ADDRESS OF DEVICE HANDLER
+       DCA INHNDL
+       CDF 10
+       TAD I INFPTR
+       CDF
+       SNA
+       JMP FAKDLR      /END OF FILE - FAKE A $
+       CIF 10
+       JMS I IOMON     /CALL USER SERVICE ROUTINES
+       1               /*FETCH HANDLER*
+INHNDL,        0               /LOADING ADDRESS OF HANDLER
+       HLT             /ERROR RETURN
+       CDF 10          /V3C
+       TAD INHNDL      /NORMAL RETURN - HANDLER IN CORE
+       AND [7600
+       TAD [-INDEVH    /SEE IF INPUT HANDLER IS IN 7200
+       SZA CLA
+       JMS I (PTCH     /IT IS - INCREASE SIZE OF BUFFER
+                       /AND REMOVE FROM RESIDENCY ANY HANDLERS THERE
+       TAD INCTL
+       DCA INCTLA      /DF=10
+       TAD I INFPTR
+       AND [7760
+       SZA
+       TAD [17
+       CLL CML RTR
+       RTR
+       DCA INCTR
+       ISZ INFPTR
+       TAD I INFPTR
+       DCA INREC       /RESET STARTING BLOCK NUMBER
+       ISZ INFPTR
+       DCA INEOF
+       CDF
+       JMP INGBUF
+\fFAKDLR,       TAD (244
+       JMS CHARLV      /CALL THE COROUTINE
+       TAD [215        /WITH $ AND CR
+       JMS CHARLV      /TO END THE ASSEMBLY.
+       JMP I (PHASE    /** DIDN'T WORK - MUST BE IN CONDITIONAL - FATAL
+
+CHARLV,        0               /CHARACTER IN AC
+       AND [177        /AND OFF LEFT 5 BITS
+       JMP I (LSTCH9   /RETURN TO LSTCH9
+       PAGE
+\f/HANDLER FOR DTORG PSEUDO-OP (TYPESETTING)
+/PUNCHES 4 DIGIT BLOCK NUMBER IN 2 FRAMES
+/FIRST FRAME HAS CHANNELS 7 AND 8 PUNCHED
+/ADDED TO CHECKSUM
+
+DTORGX,        JMS I [SPNOR    /IGNORE SPACES
+       JMS I [EXP      /GET EXPRESSION
+       TAD PASS        /IS THIS PASS 2?
+       SNA
+       JMP DTORG2      /YES
+PUNVA1,        SPA SNA CLA     /NO - IS THIS PASS 3?
+       JMP I [LOOKEX   /NO--EXIT TO MAIN--
+       TAD LININD      /GET LINK SWITCH FROM "EXP"
+       DCA LINKSW      /YES
+       TAD [LOOKEX     /FIX PUNONE TO EXIT TO MAIN
+       DCA I (PUNONE
+       TAD [211        /OUTPUT TAB
+       JMS I OERROR
+       JMP I (DTORG1
+
+DTORG2,        TAD VALUE       /PASS 2 - GET BLOCK NUMBER
+       JMS I [RTL6
+       RAL
+       AND [77
+       TAD (300        /PICK UP CHANNELS 7 AND 8
+       DCA TEMP
+       TAD TEMP
+       TAD CHKSUM      /ADD VALUE TO CHECKSUM
+       DCA CHKSUM
+       TAD TEMP
+       JMS I OCHAR     /OUTPUT BLOCK NUMBER - FIRST FRAME
+       TAD VALUE
+       AND [77
+       JMS I OCHAR     /OUTPUT SECOND FRAME
+       JMP I [LOOKEX   /--EXIT TO MAIN--
+
+/HANDLER FOR %
+/DIVIDE BY REPEATED SUBTRACTION
+
+OP6,   DCA TEMP
+       TAD VALUE2
+       CIA
+       DCA VALUE2
+       TAD VALUE
+OP6A,  CLL
+       TAD VALUE2      /SUBTRACT DIVISOR FROM DIVIDEND
+       SNL             /DONE YET?
+       JMP OP6B        /YES - EXIT
+       ISZ TEMP        /NO - COUNT ONE MORE SUBTRACTION
+       JMP OP6A        /SUBTRACT AGAIN
+OP6B,  CLA
+       TAD TEMP        /RESULT IS # OF SUBTRACTIONS
+       JMP I (OP0+2
+\f/HANDLER FOR XLIST PSEUDO-OP
+
+XLISTY,        JMS XLISTZ      /ANY EXPRESSION?
+       JMP XLIST1      /NO
+       JMS I [EXP      /GET EXPRESSION
+       TAD VALUE       /USE THE VALUE
+XLIST2,        DCA XLISTX      /SET SWITCH
+       DCA I [LINBUF   /XLIST NEVER LISTS!
+       JMP I [LOOKEX   /--EXIT TO MAIN--
+
+XLIST1,        TAD XLISTX
+       SNA CLA
+       IAC             /FLIP IT
+       JMP XLIST2
+
+RELOCY,        JMS XLISTZ      /RELOCATE PSEUDO-OP - EXPRESSION?
+       JMP RELOC1      /NO
+       JMS I [EXP      /GET IT
+       TAD VALUE
+       CIA             /COMPUTE OFFSET OF REL LOC CTR
+       TAD LOC         /FROM FAKE LOC CTR
+       TAD OFFSET      /OFFSET IS CUMULATIVE!
+RELOC2,        DCA OFSBUF      /SET NEW OFFSET - THIS TAKES EFFECT AFTER
+       STA             /THE LITERALS (IF ANY) ARE DUMPED.
+       JMP I (STAR0    /FAKE ORIGIN TO NEW LOC,
+                       /ACTUALLY A NO-OP BECAUSE OF OFFSET
+RELOC1,        TAD OFFSET      /SET OFSBUF=0, LOC=LOC+OFFSET -
+       TAD LOC         /THIS CANCELS ALL RELOCATION STUFF.
+       DCA VALUE
+       DCA UNDFSW      /JUST IN CASE - "STAR0" CHECKS THIS
+       JMP RELOC2      /STILL MUST OUTPUT *. TO GET IN SYNCH
+\f/HANDLER FOR EJECT PSEUDO-OP
+
+EJECTX,        ISZ THISPG
+       TAD PASS        /IS THIS PASS 3?
+       SMA SZA CLA
+       JMP EJECT2      /YES
+EJECT1,        TAD CHAR        /NO - LOOK FOR NEXT NEGATIVE CHARACTER
+       SPA CLA
+       JMP I [LOOKEX   /--EXIT TO MAIN--
+       JMS I [GETC     /GET NEXT CHARACTER
+       JMP EJECT1
+
+EJECT2,        JMS XLISTZ      /PASS 3 - IS THERE AN EXPRESSION?
+       JMP EJECT3      /NO - EXIT
+       JMS I (HEDCLR   /YES - CLEAR HEADING BUFFER
+       TAD [-HEDLEN
+       DCA EJECT7      /SET UP FOR 40 NEW CHARACTERS
+       TAD [HEADER-1
+       DCA XREG1       /SET HEADER BUFFER POINTER
+       JMP EJECT4
+
+EJECT6,        ISZ EJECT7      /FILLED 40 CHARACTERS YET?
+       JMP EJECT4      /NO - KEEP FILLING
+       CLA CMA         /YES - SKIP CHARACTERS TO
+       DCA EJECT7      /END OF LINE
+       JMP EJECT5
+
+EJECT4,        TAD CHAR        /FILL HEADING BUFFER
+       DCA I XREG1
+EJECT5,        CLA CMA
+       DCA TXTSWT
+       JMS I [GETC     /GET NEXT CHARACTER
+       TAD CHAR        /END OF LINE?
+       SMA CLA
+       JMP EJECT6      /NO - KEEP FILLING
+EJECT3,        JMS I [FORMFD   /GENERATE FORM FEED
+       JMP I [LOOKEX   /--EXIT TO MAIN--
+\fPUNVAL,       TAD PASS        /IS THIS PASS 3?
+       JMP PUNVA1      /IF SO, LIST STUFF
+
+
+/SEE IF EXPRESSION FOLLOWS XLIST
+/SKIP ON EXPRESSION
+
+EJECT7,
+XLISTZ,        0
+       JMS I [SPNOR    /IGNORE TRAILING SPACES
+       TAD CHAR
+       TAD [-">        /IS THERE AN EXPRESSION?
+       SNA CLA
+       JMP I XLISTZ    /NO--RETURN--
+       TAD CHAR
+       SMA CLA
+       ISZ XLISTZ      /YES - INCREMENT RETURN ADDRESS
+       JMP I XLISTZ    /--RETURN--
+
+
+/DUMMY ERROR ROUTINE
+/TO SUPPRESS CERTAIN ERROR MESSAGES
+/ON PASS 1
+
+PERRO1,        0
+       ISZ PERRO1      /SKIP ERROR MESSAGE POINTER
+       JMP I PERRO1    /--RETURN--
+
+
+/CONSTANTS FOR DECIMAL PRINT
+
+       DECIMAL
+FORMF8,        -1000
+       -100
+       -10
+       0
+       OCTAL
+       PAGE
+\f/*********************************************************************
+
+INBUF=.                        /INPUT BUFFER 
+
+OUBUF=.                        /OUTPUT BUFFER
+
+OUDEVH=.+400           /OUTPUT DEVICE HANDLER
+
+INDEVH=7200            /INPUT DEVICE HANDLER
+
+/**********************************************************************
+
+/      EXPLANATION OF PAL8'S BUFFER ALLOCATION ALGORITHM
+
+/PASS1:
+
+/      THE INPUT BUFFER STARTS AT 5600 AND ENDS AT 7200
+/      THE INPUT HANDLER GOES IN 7200-7600.
+/      THERE IS NO OUTPUT HANDLER.
+/      HOWEVER, IF THE CURRENT INPUT HANDLER DOES NOT
+/      LOAD INTO 7200, THEN THE BUFFER SIZE IS INCREASED
+/      SO THAT THE INPUT BUFFER IS 5600-7600
+
+/PASS2 AND PASS3:
+
+/      THE OUTPUT BUFFER IS ALWAYS 1 BLOCK LONG, LOCATED
+/      AT 5600-6200.
+/      THE OUTPUT HANDLER RESIDES IN 6200-6600.
+/      THE INPUT HANDLER RESIDES IN 7200-7600.
+/      THE INPUT BUFFER NORMALLY RESIDES IN 6600-7200
+/      BUT MAY GROW OVER EITHER THE INPUT HANDLER AREA OR
+/      THE OUTPUT HANDLER AREA, IF EITHER OR BOTH OF THESE
+/      DON'T EXIST.
+
+/WHENEVER A BUFFER GROWS OVER A HANDLER AREA, THE MONITOR
+/HANDLER RESIDENCY TABLE IS SEARCHED TO SEE IF THERE
+/WERE ANY HANDLERS THERE.  IF ANY HANDLERS WERE THERE IN THE PAST,
+/THEY ARE NOW MARKED AS BEING NON-RESIDENT.
+\f/MORE ONCE ONLY CODE
+
+OTYPE, 0
+       DCA TEMP
+       CDF 10
+       TAD I TEMP
+       AND [17         /GET DEVICE NUMBER
+       TAD (DCB-1
+       DCA TEMP
+       TAD I TEMP      /GET DCB ENTRY
+       CDF
+       JMP I OTYPE     /--RETURN--
+
+/CHECK TO SEE HOW MUCH CORE EXISTS
+/AND STORE SYMBOL TABLE ACCORDINGLY
+
+       IFZERO  HASH<
+BEGINF,        CDF 10          /WAS THE /K OPTION SELECTED TO
+       TAD I (MPARAM   /CHECK FOR MORE THAN 8K?
+       CDF 0
+       RTR
+ZK7630,        SNL CLA         /YES
+       JMP I (CKBAT    /NO - CHECK FOR BATCH, USE 8K ONLY
+       CDF 50
+       JMS FLD2        /WHAT IS HIGHEST FIELD?
+       JMP FLD1-1      /5
+       CDF 40
+       JMS FLD2
+       JMP FLD1        /4
+       CDF 30
+       JMS FLD2
+       JMP FLD1+1      /3
+       CDF 20
+       JMS FLD2
+       JMP FLD1+2      /2
+       JMP OPTIM4      /1
+\f      TAD [177        /IF FIELD 5, ALLOW 4095 SYMBOLS
+FLD1,  TAD (1740       /OTHERWISE ALLOW 1740*(NR OF FIELDS)
+       TAD (1740
+       TAD (1740
+OPTIM0,        TAD (1740
+       DCA I (TAGMAX   /SET HIGHEST ADDRESS FOR TAGS
+       JMP I (BEGING
+
+OPTIM4,        TAD I OPTIM1    /OPTIMIZE SEARCH PATTERN
+       ISZ OPTIM1      /BY SUBSTITUTING CODE IN SEARCH
+       DCA I OPTIM2    /ROUTINE
+       ISZ OPTIM2
+       ISZ OPTIM3
+       JMP OPTIM4
+OPTIM8,        TAD I OPTIM5
+       ISZ OPTIM5
+       DCA I OPTIM6
+       ISZ OPTIM6
+       ISZ OPTIM7
+       JMP OPTIM8
+       JMP OPTIM0
+       >
+
+       IFNZRO  HASH<
+       /SIZE CHECK OUR MACHINE
+
+BEGINF,        CDF     10
+       TAD I   (MPARAM
+       CDF
+       RTR             /K TO LINK
+ZK7630,        SNL CLA         /ALTER FOR COMPLEMENT OF K
+       TAD     [400    /TAD TO KEEP USR
+       DCA I   (USROFS
+       CDF     50
+       JMS     FLD2
+       ISZ     HIFLD
+       CDF     40
+       JMS     FLD2
+       ISZ     HIFLD
+       CDF     30
+       JMS     FLD2
+       ISZ     HIFLD
+       CDF     20
+       JMS     FLD2
+       ISZ     HIFLD
+       TAD I   (7777   /CHECK SOFT CORE SIZE
+       AND     (70
+       SNA
+       JMP     CKSEV   /NOT THERE
+       CLL RTR
+       RAR
+       DCA     HIFLD   /THERE, SET HIFLD WITH IT
+       TAD     HIFLD   /TAKE MIN(HIFLD,5)
+       TAD     (7772
+       SMA CLA         /SMA TO USE HIFLD
+       TAD     (5      /ELSE USE 5
+       SZA
+       DCA     HIFLD   /STORE 5 IF NECESSARY
+CKSEV, CDF     10
+       TAD I   (MPARAM+2       /LOOK AT /7
+       CDF
+       AND     (4
+       SNA CLA         /SNA IF THERE
+       JMP I   (CKBAT  /ELSE CHECK FOR BATCH
+       TAD     (-7     /SET TO PRINT 7 COLUMNS OF STAB
+       DCA I   (SYMNCL
+       TAD     (67^6   /SET OFFSET TO FIRST SYMBOL ON NEXT PAGE
+       DCA I   (SYMOFS
+       JMP I   (CKBAT  /OK, CHECK FOR BATCH NOW
+OPTIM4,        SNL             /SNL IF BATCH RUNNING
+       JMP I   (BEGING /ELSE TAKE DEFAULT TABLE SIZE
+       TAD     (BPRIME/SET ALTERNATE TABLE SIZE
+       DCA I   (PRIMES /INTO THE ONCE ONLY CODE
+       JMP I   (BEGING /NOW HIFLD=# OF HIGHEST USABLE FIELD
+HIFLD, 1               /8K MINIMUM
+       >
+
+/SKIP IF CURRENT DATA FIELD DOES NOT EXIST
+FLD2,  0
+       TAD (FLD3
+       DCA I (FLD4
+FLD3,  CLA
+       TAD I (FLD4
+       NOP
+       CDF
+       TAD (-FLD3
+       SZA CLA
+       JMP FLD5
+       TAD IOMON
+       TAD [-200
+       SNA CLA         /IS FIELD THERE?
+       JMP I FLD2      /YES--RETURN--
+       TAD [200
+       DCA IOMON
+FLD5,  ISZ FLD2        /NO-INCREMENT RETURN ADDRESS
+       JMP I FLD2      /--RETURN--
+
+FLD4,  IOMON
+\f/OVERLAY CODE FOR OPTIMAL SYMBOL TABLE SEARCH
+/IN 8K
+       IFZERO  HASH<
+
+OPTIM1,        OPTIMA
+OPTIM2,        SETFLD+1
+OPTIM3,        -7
+
+OPTIM5,        OPTIMB
+OPTIM6,        GETTG5
+OPTIM7,        -21
+
+OPTIMA,        RELOC SETFLD+1
+
+       CLL CMA RTL
+       TAD STM202
+       DCA TAGXR
+       CDF 10
+       JMP I SETFLD
+STM202,        -202
+SETFL4,        4
+       RELOC
+
+OPTIMB,        RELOC GETTG5
+
+       TAD HIGHTG
+       JMS SETFLD
+       TAD TAGXR
+       DCA XREG1
+       TAD XREG1
+       TAD SETFL4
+       DCA XREG2
+       TAD THISTG
+       JMS SETFLD
+OPTIML,        TAD I XREG2
+       DCA I XREG1
+       TAD XREG1
+       CIA
+       TAD TAGXR
+       SZA CLA
+       JMP OPTIML
+       CDF
+       RELOC
+       >
+\f/OVERLAY CODE FOR DDT SYMBOL TABLE PRINT
+
+DSWIT2,        IFZERO  HASH<
+       RELOC SYMPR9-2
+       JMP SYMPRE
+SYMPRD,        TAD SYM204
+       JMS I OERROR
+       TAD [377
+       JMS I OERROR
+       JMS SYMPRC
+       DCA LINCNT
+       JMP I SYMPRT
+SYMPRC,        0
+       TAD [-200
+       DCA SYMPR2
+       TAD [200
+       JMS I OERROR
+       ISZ SYMPR2
+       JMP .-3
+       JMP I SYMPRC
+       RELOC
+       >
+       IFNZRO  HASH<
+       RELOC   SYMDDT
+       ISZ     THISTG
+       JMP     SYMLUP
+SYMXIT,        TAD     SYM204
+       JMS I   OERROR
+       TAD     [377
+       JMS I   OERROR
+       JMS     DDTLDR
+       DCA     LINCNT
+       JMP I   SYMPRT
+DDTLDR,        0
+       TAD     [7600
+       DCA     SYMCCT
+       TAD     [200
+       JMS I   OERROR
+       ISZ     SYMCCT
+       JMP     .-3
+       JMP I   DDTLDR
+SYM204,        204
+       RELOC
+       >
+DSWITB=        .
+       PAGE
+\fBEGING,       CIF 10
+       JMS I IOMON     /CALL THE USR
+       12              /TO FIND OUT DSK:
+BEGINJ,        TEXT /DSK/
+       7201            /DUMMY
+       HLT             /NEVER!
+/V3C   TAD BEGINJ+1    /GET DEVICE NUMBER OF DSK:
+/V3C   DCA CC7         /AND SET IT
+       TAD BEGINJ+1
+       DCA I BEGINL    /AND SET IT INTO "PALBIN"
+       CDF 10
+       TAD I CC1       /GET PARAMETER WORD 1
+       CDF
+       CLL RTL         /OPTION /B INTO LINK
+       AND [400        /IS IT /F?
+ZF7650,        SZA CLA
+       DCA I CCX1      /YES: /F => NO 0 FILL
+ZB7430,        SNL             /IS IT /B?
+       JMP .+3
+       TAD CCX2
+       DCA I CCX3      /YES: /B => ! IS SHIFT
+       CDF 10
+       TAD I CC1       /GET WORD 1 AGAIN
+       CDF
+       AND [200        /IS IT /E?
+ZE7640,        SNA CLA
+       JMP .+3
+       TAD CCX8
+       DCA I CCX4      /YES: /E => SET 'LG' ERROR
+       CDF 10
+       TAD I CCX5      /GET WORD 2 THIS TIME
+       CDF
+       RTL
+ZO7710,        SMA CLA         /IS IT /O?
+       JMP .+3
+       DCA I CCX6      /YES: /O => NO 200 ORG
+       ISZ I CCX7
+       CDF 10
+       TAD I CC1       /GET WORD 1 AGAIN
+       AND CC2         /IS IT /C?
+       SNA CLA
+       JMP I CC3       /NO: TRY FOR /L OR /G
+       TAD I CC4       /CREF FILE SPECIFIED?
+       SZA CLA
+       JMP CC5         /YES
+CC6,   TAD CC7         /NO: GIVE "CREFLS.TM"
+       DCA I CC4
+       ISZ CC6
+       ISZ CC4
+       ISZ CC8
+       JMP CC6
+\fCC5,  CDF
+       CIF 10
+       CLA IAC
+       JMS I IOMON     /LOOKUP "CREF.SV"
+       2
+CC13,  CC9             /POINT TO NAME - BACK WITH START
+CC8,   -5              /LENGTH GOES HERE
+       JMP CC16        /NOT FOUND!
+       TAD CC30
+       JMS I CC31      /CHECK TYPE FILE
+       SMA CLA
+       JMP CC16        /NOT DIRECTORY IS ERROR
+       TAD CC12
+       DCA I CC121     /CSWITC=TAD I [7605
+       TAD CC11
+       DCA I CC111     /CSWIT1=CLA
+       TAD CC10
+       DCA I CC101     /CSWIT2=DCA BINSRT
+       DCA I CC171     /CMOVE=0
+       TAD CC13
+       DCA I CC131     /CHAIN="CREF.SV"
+       DCA I CC141     /LSWITC=0
+       TAD CC30
+       DCA I CC301     /NOPA22=7612
+       DCA I CC20      /"BEGIAB"=0
+       TAD CC21
+       DCA I CC211     /"DIRSW1"=TAD [177
+       TAD CC22
+       DCA I CC221     /"PTPSW1"=TAD [232
+       JMP I .+1
+       CCC             /KEEP GOING (SIGH)
+
+CC16,  JMS I [ERROR
+       CF              /OPTION /C ERROR
+       JMP I CC3       /TRY FOR /L OR /G
+\fCC171,        SWAPR2+CMOVE
+CC141, LSWITC
+CC131, CHAIN
+CC121, CSWITC
+CC12,  TAD I [7605
+CC111, CSWIT1
+CC11,  CLA
+CC101, SWAPR2+CSWIT2
+CC10,  DCA BINSRT
+CC301, SWAPR2+NOPA22
+CC30,  7612
+CC31,  OTYPE
+CC1,   MPARAM
+CC2,   1000
+CC3,   BEGINH
+CC4,   7612
+
+CCX1,  TEXT4X          /V3C
+CCX2,  OP3
+CCX3,  OPEXPL
+CCX4,  LGERR
+CCX5,  MPARAM+1
+CCX6,  FIELDY+1
+CCX7,  FIELDY+2
+CCX8,  JMS I PERROR
+
+CC7,   1
+       FILENAME CREFLS.TM
+CC9,   FILENAME CREF.SV
+
+CC20,  BEGIAB
+CC21,  TAD [177
+CC211, SWAPR2+DIRSW1
+CC22,  TAD [232
+CC221, SWAPR2+PTPSW1
+
+BEGINL,        PALBIN
+       PAGE
+\f/***********************************************************************
+/SYMBOL TABLE
+/MOVED BY ASSEMBLER TO FIELD 1
+/MUST REMAIN IN ALPHABETICAL ORDER
+/***********************************************************************
+
+SYMS,  5777                    /TERMINATOR
+       3777                    /IMPOSSIBLE (LIMITING) SYMBOL
+       5777
+       0000
+       IFNZRO  HASH<           /PSEUDO OPS MUST GO FIRST FOR EXPUNGE
+       "I-300^45+4000+2000     /I
+       0
+       0
+       0400
+
+       "P-300^45+"A-300+4000   /PAUSE
+       "U-300^45+"S-300
+       "E-300^45+4000
+       PAUSEX
+
+       "P-300^45+"A-300+4000   /PAGE
+       "G-300^45+"E-300
+       4000
+       PAGEX
+
+       "T-300^45+"E-300+4000   /TEXT
+       "X-300^45+"T-300
+       4000
+       TEXTX
+
+       "R-300^45+"E-300+4000   /RELOC
+       "L-300^45+"O-300
+       "C-300^45+4000
+       RELOCY
+
+       "O-300^45+"C-300+4000   /OCTAL
+       "T-300^45+"A-300
+       "L-300^45+4000
+       OCTALX
+
+       "N-300^45+"O-300+4000   /NOPUNCH
+       "P-300^45+"U-300
+       "N-300^45+"C-300+4000
+       NOPUNX
+
+
+       "I-300^45+"F-300+4000   /IFZERO
+       "Z-300^45+"E-300
+       "R-300^45+"O-300+4000
+       IF0
+\f      "I-300^45+"F-300+4000   /IFNZRO
+       "N-300^45+"Z-300
+       "R-300^45+"O-300+4000
+       IFN0
+
+       "I-300^45+"F-300+4000   /IFNDEF
+       "N-300^45+"D-300
+       "E-300^45+"F-300+4000
+       IFND
+
+       "I-300^45+"F-300+4000   /IFDEF
+       "D-300^45+"E-300
+       "F-300^45+4000
+       IFD
+
+       "F-300^45+"I-300+4000   /FIXTAB
+       "X-300^45+"T-300
+       "A-300^45+"B-300+4000
+       FIXTBX
+
+       "F-300^45+"I-300+4000   /FIXMRI
+       "X-300^45+"M-300
+       "R-300^45+"I-300+4000
+       FIXMRX
+
+       "F-300^45+"I-300+4000   /FILENAME
+       "L-300^45+"E-300
+       "N-300^45+"A-300+4000
+       FILENX
+
+       "F-300^45+"I-300+4000   /FIELD
+       "E-300^45+"L-300
+       "D-300^45+4000
+       FIELDX
+
+       "E-300^45+"X-300+4000   /EXPUNGE
+       "P-300^45+"U-300
+       "N-300^45+"G-300+4000
+       EXPUNX
+
+       "E-300^45+"N-300+4000   /ENPUNCH
+       "P-300^45+"U-300
+       "N-300^45+"C-300+4000
+       ENPUNX
+
+       "E-300^45+"J-300+4000   /EJECT
+       "E-300^45+"C-300
+       "T-300^45+4000
+       EJECTX
+\f      "D-300^45+"T-300+4000   /DTORG
+       "O-300^45+"R-300
+       "G-300^45+4000
+       DTORGX
+
+       "D-300^45+"E-300+4000   /DEVICE
+       "V-300^45+"I-300
+       "C-300^45+"E-300+4000
+       DEVICX
+
+       "D-300^45+"E-300+4000   /DECIMAL
+       "C-300^45+"I-300
+       "M-300^45+"A-300+4000
+       DECIMX
+       >
+       "Z-300^45+"B-300+4000   /ZBLOCK
+       "L-300^45+"O-300
+       "C-300^45+"K-300+4000
+       ZBLOCX
+
+       "Z-300^45+4000+2000     /Z
+       0
+       0
+       0000
+
+       "X-300^45+"L-300+4000   /XLIST
+       "I-300^45+"S-300
+       "T-300^45+4000
+       XLISTY
+
+       "T-300^45+"S-300+4000   /TSK
+       "K-300^45
+       0
+       6045
+
+       "T-300^45+"S-300+4000   /TSF
+       "F-300^45
+       0
+       TSF
+
+       "T-300^45+"P-300+4000   /TPC
+       "C-300^45
+       0
+       TPC
+
+       "T-300^45+"L-300+4000   /TLS
+       "S-300^45
+       0
+       TLS
+
+       "T-300^45+"F-300+4000   /TFL
+       "L-300^45
+       0
+       6040
+\f      IFZERO  HASH<
+       "T-300^45+"E-300+4000   /TEXT
+       "X-300^45+"T-300
+       4000
+       TEXTX
+       >
+       "T-300^45+"C-300+4000   /TCF
+       "F-300^45
+       0
+       TCF
+
+       "T-300^45+"A-300+4000   /TAD
+       "D-300^45+4000
+       0
+       TAD 0
+
+       "S-300^45+"Z-300+4000   /SZL
+       "L-300^45
+       0
+       SZL
+
+       "S-300^45+"Z-300+4000   /SZA
+       "A-300^45
+       0
+       SZA
+
+       "S-300^45+"W-300+4000   /SWP
+       "P-300^45
+       0
+       7521
+
+       "S-300^45+"T-300+4000   /STL
+       "L-300^45
+       0
+       STL
+
+       "S-300^45+"T-300+4000   /STA
+       "A-300^45
+       0
+       STA
+
+       "S-300^45+"R-300+4000   /SRQ
+       "Q-300^45
+       0
+       6003
+
+       "S-300^45+"P-300+4000   /SPA
+       "A-300^45
+       0
+       SPA
+\f      "S-300^45+"N-300+4000   /SNL
+       "L-300^45
+       0
+       SNL
+
+       "S-300^45+"N-300+4000   /SNA
+       "A-300^45
+       0
+       SNA
+
+       "S-300^45+"M-300+4000   /SMA
+       "A-300^45
+       0
+       SMA
+
+       "S-300^45+"K-300+4000   /SKP
+       "P-300^45
+       0
+       SKP
+
+       "S-300^45+"K-300+4000   /SKON
+       "O-300^45+"N-300
+       0
+       6000
+
+       "S-300^45+"G-300+4000   /SGT
+       "T-300^45
+       0
+       6006
+
+       "R-300^45+"T-300+4000   /RTR
+       "R-300^45
+       0
+       RTR
+
+       "R-300^45+"T-300+4000   /RTL
+       "L-300^45
+       0
+       RTL
+
+       "R-300^45+"T-300+4000   /RTF
+       "F-300^45
+       0
+       6005
+
+       "R-300^45+"S-300+4000   /RSF
+       "F-300^45
+       0
+       RSF
+\f      "R-300^45+"R-300+4000   /RRB
+       "B-300^45
+       0
+       RRB
+
+       "R-300^45+"P-300+4000   /RPE
+       "E-300^45
+       0
+       6010
+
+       "R-300^45+"M-300+4000   /RMF
+       "F-300^45
+       0
+       RMF
+
+       "R-300^45+"I-300+4000   /RIF
+       "F-300^45
+       0
+       RIF
+
+       "R-300^45+"I-300+4000   /RIB
+       "B-300^45
+       0
+       RIB
+
+       "R-300^45+"F-300+4000   /RFC
+       "C-300^45
+       0
+       RFC
+       IFZERO  HASH<
+       "R-300^45+"E-300+4000   /RELOC
+       "L-300^45+"O-300
+       "C-300^45+4000
+       RELOCY
+       >
+       "R-300^45+"D-300+4000   /RDF
+       "F-300^45
+       0
+       RDF
+
+       "R-300^45+"A-300+4000   /RAR
+       "R-300^45
+       0
+       RAR
+
+       "R-300^45+"A-300+4000   /RAL
+       "L-300^45
+       0
+       RAL
+\f      "P-300^45+"S-300+4000   /PSF
+       "F-300^45
+       0
+       PSF
+
+       "P-300^45+"P-300+4000   /PPC
+       "C-300^45
+       0
+       PPC
+
+       "P-300^45+"L-300+4000   /PLS
+       "S-300^45
+       0
+       PLS
+
+       "P-300^45+"C-300+4000   /PCF
+       "F-300^45
+       0
+       PCF
+
+       "P-300^45+"C-300+4000   /PCE
+       "E-300^45
+       0
+       6020
+       IFZERO  HASH<
+       "P-300^45+"A-300+4000   /PAUSE
+       "U-300^45+"S-300
+       "E-300^45+4000
+       PAUSEX
+
+       "P-300^45+"A-300+4000   /PAGE
+       "G-300^45+"E-300
+       4000
+       PAGEX
+       >
+       "O-300^45+"S-300+4000   /OSR
+       "R-300^45
+       0
+       OSR
+
+       "O-300^45+"P-300+4000   /OPR
+       "R-300^45
+       0
+       OPR
+       IFZERO  HASH<
+       "O-300^45+"C-300+4000   /OCTAL
+       "T-300^45+"A-300
+       "L-300^45+4000
+       OCTALX
+       >
+\f      IFZERO  HASH<
+       "N-300^45+"O-300+4000   /NOPUNCH
+       "P-300^45+"U-300
+       "N-300^45+"C-300+4000
+       NOPUNX
+       >
+       "N-300^45+"O-300+4000   /NOP
+       "P-300^45
+       0
+       NOP
+
+       "M-300^45+"Q-300+4000   /MQL
+       "L-300^45
+       0
+       7421
+
+       "M-300^45+"Q-300+4000   /MQA
+       "A-300^45
+       0
+       7501
+
+       "L-300^45+"A-300+4000   /LAS
+       "S-300^45
+       0
+       LAS
+
+       "K-300^45+"S-300+4000   /KSF
+       "F-300^45
+       0
+       KSF
+
+       "K-300^45+"R-300+4000   /KRS
+       "S-300^45
+       0
+       KRS
+
+       "K-300^45+"R-300+4000   /KRB
+       "B-300^45
+       0
+       KRB
+
+       "K-300^45+"I-300+4000   /KIE
+       "E-300^45
+       0
+       6035
+
+       "K-300^45+"C-300+4000   /KCF
+       "F-300^45
+       0
+       6030
+\f      "K-300^45+"C-300+4000   /KCC
+       "C-300^45
+       0
+       KCC
+
+       "J-300^45+"M-300+4000   /JMS
+       "S-300^45+4000
+       0
+       JMS 0
+
+       "J-300^45+"M-300+4000   /JMP
+       "P-300^45+4000
+       0
+       JMP 0
+
+       "I-300^45+"S-300+4000   /ISZ
+       "Z-300^45+4000
+       0
+       ISZ 0
+
+       "I-300^45+"O-300+4000   /IOT
+       "T-300^45
+       0
+       IOT
+
+       "I-300^45+"O-300+4000   /ION
+       "N-300^45
+       0
+       ION
+
+       "I-300^45+"O-300+4000   /IOF
+       "F-300^45
+       0
+       IOF
+       IFZERO  HASH<
+       "I-300^45+"F-300+4000   /IFZERO
+       "Z-300^45+"E-300
+       "R-300^45+"O-300+4000
+       IF0
+
+       "I-300^45+"F-300+4000   /IFNZRO
+       "N-300^45+"Z-300
+       "R-300^45+"O-300+4000
+       IFN0
+
+       "I-300^45+"F-300+4000   /IFNDEF
+       "N-300^45+"D-300
+       "E-300^45+"F-300+4000
+       IFND
+       >
+\f      IFZERO  HASH<
+       "I-300^45+"F-300+4000   /IFDEF
+       "D-300^45+"E-300
+       "F-300^45+4000
+       IFD
+       >
+       "I-300^45+"A-300+4000   /IAC
+       "C-300^45
+       0
+       IAC
+       IFZERO  HASH<
+       "I-300^45+4000+2000     /I
+       0
+       0
+       0400
+       >
+       "H-300^45+"L-300+4000   /HLT
+       "T-300^45
+       0
+       HLT
+
+       "G-300^45+"T-300+4000   /GTF
+       "F-300^45
+       0
+       6004
+
+       "G-300^45+"L-300+4000   /GLK
+       "K-300^45
+       0
+       GLK
+       IFZERO  HASH<
+       "F-300^45+"I-300+4000   /FIXTAB
+       "X-300^45+"T-300
+       "A-300^45+"B-300+4000
+       FIXTBX
+
+       "F-300^45+"I-300+4000   /FIXMRI
+       "X-300^45+"M-300
+       "R-300^45+"I-300+4000
+       FIXMRX
+
+       "F-300^45+"I-300+4000   /FILENAME
+       "L-300^45+"E-300
+       "N-300^45+"A-300+4000
+       FILENX
+
+       "F-300^45+"I-300+4000   /FIELD
+       "E-300^45+"L-300
+       "D-300^45+4000
+       FIELDX
+       >
+\f      IFZERO  HASH<
+       "E-300^45+"X-300+4000   /EXPUNGE
+       "P-300^45+"U-300
+       "N-300^45+"G-300+4000
+       EXPUNX
+
+       "E-300^45+"N-300+4000   /ENPUNCH
+       "P-300^45+"U-300
+       "N-300^45+"C-300+4000
+       ENPUNX
+
+       "E-300^45+"J-300+4000   /EJECT
+       "E-300^45+"C-300
+       "T-300^45+4000
+       EJECTX
+
+       "D-300^45+"T-300+4000   /DTORG
+       "O-300^45+"R-300
+       "G-300^45+4000
+       DTORGX
+
+       "D-300^45+"E-300+4000   /DEVICE
+       "V-300^45+"I-300
+       "C-300^45+"E-300+4000
+       DEVICX
+
+       "D-300^45+"E-300+4000   /DECIMAL
+       "C-300^45+"I-300
+       "M-300^45+"A-300+4000
+       DECIMX
+       >
+       "D-300^45+"C-300+4000   /DCA
+       "A-300^45+4000
+       0
+       DCA 0
+
+       "C-300^45+"M-300+4000   /CML
+       "L-300^45
+       0
+       CML
+
+       "C-300^45+"M-300+4000   /CMA
+       "A-300^45
+       0
+       CMA
+
+       "C-300^45+"L-300+4000   /CLL
+       "L-300^45
+       0
+       CLL
+\f      "C-300^45+"L-300+4000   /CLA
+       "A-300^45
+       0
+       CLA
+
+       "C-300^45+"I-300+4000   /CIF
+       "F-300^45
+       0
+       CIF
+
+       "C-300^45+"I-300+4000   /CIA
+       "A-300^45
+       0
+       CIA
+
+       "C-300^45+"D-300+4000   /CDF
+       "F-300^45
+       0
+       CDF
+
+       "C-300^45+"A-300+4000   /CAF
+       "F-300^45
+       0
+       6007
+
+       "B-300^45+"S-300+4000   /BSW
+       "W-300^45
+       0
+       7002
+
+       "A-300^45+"N-300+4000   /AND
+       "D-300^45+4000
+       0
+       AND 0
+
+       4001                    /TERMINATOR
+       0000                    /IMPOSSIBLE (LIMITING) SYMBOL
+       4000
+       0000
+
+SYME=.
+
+/**********************************************************************
+/TOP OF SYMBOL TABLE
+/**********************************************************************
+\fSWAP2=.
+
+/**********************************************************************
+/CODE UNIQUE TO PASSES 1 AND 2
+/SWAPPED IN FOR PASSES 1 AND 2
+/OVERLAYED DURING PASS 3       *** NO LITERALS ***
+
+       RELOC 1000              /ASSEMBLED INTO 1000-1247
+
+       SWAPB2= .
+       SWAPR2= SWAP2-SWAPB2    /RELOCATION FACTOR FOR THIS CODE
+
+OOPEN, 0
+       TAD OPEN01      /OPEN BINARY AND LISTING FILES
+       DCA XOUHND      /SET ADDRESS OF DEVICE HANDLER
+       TAD OPEN02
+       DCA XOUBLK
+       TAD [-5
+       DCA XOUELE      /SET NEW OUTPUT FILE LENGTH
+       CDF 10
+       TAD I OUFPTR
+       CDF
+       DCA I XOUBLK
+       ISZ XOUBLK
+       ISZ OUFPTR
+       ISZ XOUELE      /INCREMENT OUTPUT FILE LENGTH
+       JMP .-7
+       TAD OPEN02
+       IAC
+       DCA XOUBLK      /SET POINTER TO NEW FILENAME
+       TAD XOUBLK
+       DCA I OPEN04
+       CIF 10
+       JMS I IOMON     /CALL USER SERVICE ROUTINES
+       13              /*RESET SYSTEM TABLES*
+       DCA I OPEN05    /DELETE UNCLOSED FILES AND
+       TAD I OPEN02    /DELETE HANDLERS
+       AND [17         /GET NEW DEVICE HANDLER #
+       SNA             /OUTPUT INHIBIT?
+       JMP ONOFIL      /YES
+       CIF 10          /NO
+       JMS I IOMON     /CALL USER SERVICE ROUTINE
+       1               /*FETCH DEVICE HANDLER*
+XOUHND,        0               /LOADING ADDRESS
+       HLT             /HANDLER NOT AVAILABLE
+OUENTR,        TAD I OPEN02    /NORMAL RETURN - GET OUTPUT
+       CIF 10          /DEVICE NUMBER AND FILE LENGTH
+\f      JMS I IOMON     /CALL NEW SERVICE ROUTINES
+       3               /*ENTER OUTUT FILE
+XOUBLK,        0               /POINTER TO FILENAME
+XOUELE,        0               /FILE LENGTH
+       JMP OEFAIL      /ERROR RETURN
+       DCA I OPEN06    /NORMAL RETURN
+       JMS I OPEN07
+       TAD XOUHND
+       TAD [200        /LINK IS CLEAR!!
+       SNL CLA
+       TAD [400
+       TAD OUFDEV
+       DCA I OUFINP
+       TAD I OUFINP
+       CLL RAR
+       CIA
+       TAD OU3501
+       DCA INCTL
+       ISZ OOPEN
+       TAD XOUHND
+       DCA I OPEN09
+       TAD XOUBLK
+       DCA I OPEN10
+       TAD XOUELE
+       DCA I OPEN11
+       JMP I OOPEN     /--RETURN--
+
+OEFAIL,        TAD I OPEN02
+       AND [7760
+       SNA CLA
+       JMP I OPEN12    /DE**FATAL ERROR**
+       TAD I OPEN02
+       AND [17
+       DCA I OPEN02
+       JMP OUENTR
+
+ONOFIL,        ISZ I OPEN05    /SET OUTPUT INHIBIT SWITCH
+       JMP I OOPEN     /--RETURN--
+
+OUFPTR,        7600
+
+OPEN01,        OUDEVH+1
+OPEN02,        OUFILE
+OPEN04,        OUCNAM
+OPEN05,        OUTINH
+OPEN06,        OUCCNT
+OPEN07,        OUSETP
+OPEN09,        OUHNDL
+OPEN10,        OUBLK
+OPEN11,        OUELEN
+OPEN12,        SYSERR
+OU3501,        3501
+OUFDEV,        OUDEVH
+OUFINP,        INBUFP
+\f/CONTINUATION OF FIXTAB HANDLER
+
+FIXTAY,        IFZERO  HASH<
+       TAD HIGHTG      /SET POINTERS TO TABLE
+       CMA
+       >
+       IFNZRO  HASH<
+       TAD     TAGMAX
+       CIA
+       >
+       DCA TEMP3
+       DCA THISTG
+FIXTAX,        JMS I [FINDTG   /GET A TAG
+       AC3777
+       AND TAG1
+       IFNZRO  HASH<
+       SZA
+       >
+       TAD [4000       /SET BIT 0 OF FIRST WORD TO 1
+       DCA TAG1        /RETURN IT TO TABLE
+       JMS I [PUTTAG
+       ISZ THISTG
+       ISZ TEMP3       /DONE WITH TABLE YET?
+       JMP FIXTAX      /NO
+       JMP I [LOOKEX   /YES--EXIT TO MAIN--
+
+/OUTPUT ONE REGISTER - BINARY
+/ENTER WITH CONTENTS IN AC
+
+PUNOUT,        0
+       DCA PUNOU1
+       TAD PUNOU1
+       RTR
+       RTR
+       RTR
+       AND [177
+       JMS I OCHAR     /OUTPUT FIRST FRAME
+       TAD PUNOU1
+       AND [77
+       JMS I OCHAR     /OUTPUT SECOND FRAME
+       JMP I PUNOUT    /--RETURN--
+
+PUNOU1,
+IOPEN, 0               /SET UP INPUT ROUTINE
+       CLA CMA         /TO OPEN FILE
+       DCA I IOPEN1
+       ISZ I IOPEN2
+       TAD IOPEN3
+       DCA I IOPEN4
+       ISZ I IOPEN5
+       TAD [LINBUF+120
+       DCA TXTPTR
+       JMP I IOPEN     /--RETURN--
+
+IOPEN1,        INCHCT
+IOPEN2,        INEOF
+IOPEN3,        7617
+IOPEN4,        INFPTR
+IOPEN5,        FORMSW
+       PAGE
+\f/START PASS 2 *** NO LITERALS HERE EITHER ***
+
+START1,        TAD [ERROR
+       DCA PERROR      /RESET PREUDO-ERROR ROUTINE
+       JMS I ST1OPN    /OPEN PASS 2 OUTPUT FILE
+       JMP NOPA21      /NO PASS 2 IF PASS 3
+NOPA23,        TAD I ST1OBL
+       DCA BINSRT
+       DCA PUNCHX      /CLEAR PUNCH INHIBIT
+       JMS START3
+       JMP I .+1
+       START2-1
+
+NOPA21,        CDF 10
+       TAD I NOPA22    /IS THERE A PASS 3?
+       CDF
+       SNA CLA
+       JMP NOPA23      /NO - DO PASS 2
+       ISZ PASS        /SKIP PASS 2
+       NOP
+       JMP NOPAS2      /CONTINUE TO PASS 3
+
+NOPA22,        7605
+
+START3,        0               /GENERATE LEADER/TRAILER
+       TAD LEADER
+       DCA TXTPTR
+       TAD [200
+       JMS I OCHAR
+       ISZ TXTPTR
+       JMP .-3
+       JMP I START3    /--RETURN--
+
+LEADER,        -10
+\f/END PASS 2
+
+ENDPA2,        JMS I [DUMPZ    /DUMP PAGE 0 LITERALS
+       DCA PUNCHX
+       CLL             /V3C
+       TAD CHKSUM      /OUTPUT CHECKSUM
+       JMS I [PUNOUT   /PUNCH THE CHECKSUM
+       JMS START3      /GENERATE LEADER/TRAILER
+       JMS I EN2CLS    /CLOSE PASS 2 OUTPUT FILE
+NOPAS2,        TAD EN2LSO
+       DCA OERROR      /SET NEW OUTPUT TO BE LISTING
+       ISZ I EN2OU1
+CMOVE, JMP CMOVA       /ZEROED IF /C
+       CDF 10          /MOVE CODE FOR /C OPTION
+CMOVB, TAD I CMOV1
+       DCA I CMOV2     /MOVE OUTPUT FILE STORAGE
+       ISZ CMOV1
+       ISZ CMOV2
+       ISZ CMOV3
+       JMP CMOVB       /LOOP
+CMOVA, CDF
+       JMS I ST1OPN    /OPEN 3RD PASS FILE
+       DCA I CMOV4     /NO 3RD PASS
+       TAD I ST1OBL    /GET FILE START
+CSWIT2,        CLA             /"DCA BINSRT" IF /C
+       TAD PTPSW1
+       DCA I EN2PTP    /RESET PAPERTAPE SWITCH
+       TAD DIRSW1
+       DCA I EN2DIR    /RESET DIRECTORY SWITCH
+       JMS I PIOPEN
+       JMP I .+1
+       LOADOV          /OVERLAY THIS AREA WITH PASS3 CODE
+
+PIOPEN,        IOPEN
+DIRSW1,        TAD [177
+PTPSW1,        TAD [232
+
+CMOV1, 7605
+CMOV2, 7600
+CMOV3, -12
+CMOV4, NSWITC
+EN2CLS,        OCLOSE
+EN2LSO,        LISOUT
+EN2OU1,        OUTPT1
+EN2PTP,        PTPSW
+EN2DIR,        DIRSW
+ST1OPN,        OOPEN
+ST1OBL,        OUBLK
+SWAPE2,        RELOC
+       IFNZRO  ENDOVL-SWAPE2&4000 <OVLERR,__ERROR__>
+       PAGE
+\f      IFNZRO  HASH<
+
+       /ONCE ONLY CODE TO HASH OUT THE PERMANENT SYMBOLS
+
+HSHSMS,        0
+       JMS I   (7607   /WRITE THE SYMBOL TABLE SORT OVERLAY
+       4210            /2 PAGES FROM FIELD 1
+       OUDEVH+400      /FROM HERE
+       ASWAP+1         /TO HERE
+       JMP I   (SYSERR/WONDERFUL.
+       TAD I   (USROFS
+       SZA CLA         /SZA IF KICKING OUT USR
+       TAD     (12     /ELSE FUDGE POINTER
+       TAD I   (HIFLD  /FIRST SET HASH TABLE SIZE
+       TAD     PRIMES  /ACCORDING TO CORE SIZE
+       DCA     PRIME
+       TAD I   PRIME
+       DCA     PRIME
+       TAD     PRIME
+       CIA
+       DCA I   (MPRIME
+       TAD I   (USROFS
+       SZA CLA
+       JMP     KPUSR   /JMP IF KEEPING USR
+       CDF     10      /SERVE NOTICE WE'RE OCCUPYING FIELD 1
+       AC7776
+       AND I   (JSBITS
+       DCA I   (JSBITS
+       TAD     [7700
+       DCA     IOMON   /AND POINT AT PROPER MONITOR E.P.
+KPUSR, CDF
+       TAD I   (MPRIME /HOW MANY SLOTS TO WIPE
+       DCA     LAST3   /TO COUNTER
+       TAD I   (USROFS
+       CLL RTL
+       TAD     (7777   /FUDGE THE INITIAL AUTO XR
+       JMP     CLRGO   /INTO THE LOOP NOW
+CLRLUP,        TAD     LAST1
+       TAD     (-7577
+       SZA CLA         /SZA IF NEED TO DO NEXT FIELD
+       JMP     CLCDF0+1/ELSE CLEAR ANOTHER
+       TAD     (10
+       TAD     CLCDF0
+       DCA     CLCDF0  /CDF INSTR GETS BUMPED
+       STA
+CLRGO, DCA     LAST1   /XRGETS SET
+CLCDF0,        CDF     10      /INITIALLY CDF 10
+       DCA I   LAST1
+       DCA I   LAST1
+       DCA I   LAST1
+       DCA I   LAST1
+       ISZ     LAST3   /SKP IF NO MORE
+       JMP     CLRLUP  /ELSE DO ANOTHER
+       CDF             /THE TABLE IS CLEAN
+       TAD     (HSHRTN
+       DCA I   [GETTAG
+       STA
+       DCA     HIGHTG  /HIGHTG=CURRENT SYMBOL INDEX
+       TAD     (SYMS+3 /USE THESE AUTO XR'S NOW
+       DCA     LAST1
+       TAD     LAST1
+       DCA     LAST2
+HSHLP, TAD I   LAST1
+       AND     [1777   /FIRST, STRIP THE TYPE BITS
+       DCA I   (NAME1
+       AC3777
+       AND I   LAST1
+       DCA I   (NAME2
+       AC3777
+       AND I   LAST1
+       DCA I   (NAME3
+       ISZ     LAST1   /SKIP THE VALUE
+       JMP I   (GETTGH /GO FIND IT'S PLACE
+HSHRTN,        CLA CLL
+       TAD I   LAST2
+       DCA I   (NAME1
+       TAD I   LAST2
+       DCA I   (NAME2
+       TAD I   LAST2
+       DCA I   (NAME3
+       TAD I   LAST2
+       DCA     VALUE2
+       JMS I   (INSRTG /AND STORE IT
+       TAD     LAST1
+       TAD     (1-SYME+4
+       SZA CLA
+       JMP     HSHLP   /LOOP IF MORE TO GO
+       JMP I   HSHSMS  /--RETURN--
+
+PRIMES,        .
+       1737    /1 FIELD
+       3673    /2 FIELDS
+       5633    /3 FIELDS
+       7577    /4 FIELDS
+       7775    /5 FIELDS (THE LAST MOSTELY WASTE)
+       BPRIMES=.-1     /ALTERNATE TABLE SIZE FOR BATCH COMPATABILITY
+       1737    /1 FIELD (MEANS NO BATCH)
+       3133    /2 FIELDS
+       5075    /3 FIELDS
+       7035    /4 FIELDS
+       7775    /5 FIELDS (SOME OF WASTE FOR BATCH)
+
+       1335    /STILL ANOTHER ALTERNATE SET IF KEEPING USR
+       3273
+       5237
+       7175
+       7775
+
+       0
+       2535
+       4465
+       6437
+       7775
+
+       PAGE
+       >
+\f/**************************************************************
+/PAGE 0 LITERALS
+/**************************************************************
+       IFNZRO  HASH<
+
+       /SYMBOL TABLE SORT OVERLAY
+       /ONLY SWAPPED IF TABLE WILL BE LISTED
+
+       /FIRST, SOME EQUATES
+
+       PPUTTAG=        [PUTTAG
+       PFINDTG=        [FINDTG
+       O1777=          [1777
+       O7774=          [7774
+
+       SXR=    XREG1
+       TXR=    XREG2
+       SXR2=   LAST1
+       TXR2=   LAST2
+       UXR=    LAST3
+       DXR=    LAST4
+
+       BEG=    LOC
+       END=    OFFSET
+       LO=     OFSBUF
+       HI=     STARSW
+       MED=    OP
+
+       FIELD 1         /SET THE FIELD NOW
+\f      *OUDEVH+400     /IT GOES HERE
+
+SORTAB,        0               /FIRST LOC IN PAGE
+       TAD     TAGMAX
+       CIA
+       DCA     TEMP    /TEMP=#CELLS TO SCAN
+
+       /DEFLATE TABLE PRIOR TO SORTING AND LISTING IT
+       /OUT WITH EMPTIES AND PERMANENTS
+
+       DCA     HIGHTG  /TARGET POINTER
+       DCA     TEMP2   /SOURCE POINTER
+DEFLP, TAD     TEMP2
+       DCA     THISTG
+       JMS I   PFINDTG /GET THE NEXT STAB CELL
+       TAD     TAG1
+       CLL RAL
+       SNA SZL CLA     /AND THERE BUT NOT FIXED?
+       JMP     DEFNUL  /NO, DON'T STORE IT
+       TAD     O1777   /YES,DISCARD THE TYPE BITS NOW
+       AND     TAG1
+       DCA     TAG1
+       AC3777
+       AND     TAG2
+       DCA     TAG2
+       AC3777
+       AND     TAG3
+       DCA     TAG3
+       TAD     HIGHTG
+       DCA     THISTG
+       JMS I   PPUTTAG
+       ISZ     HIGHTG
+DEFNUL,        ISZ     TEMP2
+       ISZ     TEMP    /TRY AGAIN
+       JMP     DEFLP
+       JMS I   (SORT   /NOW SORT THEM
+       JMP I   SORTAB  /EXIT TO PRTSTAB
+\f      /MOVE A SYMBOL THRU THE TABLE
+
+SMOV,  0
+       TAD     SXR2    /GET SOURCE DF+XREG
+       JMS     GETFLD
+       DCA     SMVCD1
+       TAD     TXR
+       DCA     SXR
+       TAD     TXR2
+       JMS     GETFLD
+       DCA     SMVCD2
+       TAD     O7774
+       DCA     SSWT
+SMVCD1,        0
+       TAD I   SXR
+SMVCD2,        0
+       DCA I   TXR
+       ISZ     SSWT
+       JMP     SMVCD1
+SMVCD0,        CDF
+       JMP I   SMOV
+
+       /AUXILLIARY FIELD+XREG SETTER
+
+GETFLD,        0
+       CLL
+       TAD I   (USROFS /IF KEEPING USR
+       DCA     TXR     /AC=SYM NUM
+       DCA     SMVCD2
+       TAD     TXR
+       ISZ     SMVCD2
+       CML
+       TAD     (-1740
+       SNL
+       JMP     .-4
+       CLL RTL
+       TAD     (-202   /SETS AS IN SETFLD...
+       DCA     TXR     /TENTATIVELY SET TXR
+       TAD     SMVCD2
+       CLL RTL
+       RAL
+       TAD     SMVCD0
+       JMP I   GETFLD  /EXIT WITH AC SET TO CDF INSTR
+\f      /ROUTINE TO EXCHANGE SYMBOLS LO AND HI
+
+SSWT,  0
+       TAD     HI
+       JMS     GETFLD
+       DCA     SWCDF1
+       TAD     SWCDF1
+       DCA     SWCDF3
+       TAD     TXR
+       DCA     SXR
+       TAD     SXR
+       DCA     SXR2    /SXR'S FOR HIGH SYMBOL
+       TAD     LO
+       JMS     GETFLD
+       DCA     SWCDF2
+       TAD     TXR
+       DCA     TXR2    /TXR'S FOR LOW SYMBOL
+       TAD     O7774
+       DCA     SMOV    /COUNTER
+
+SWCDF1,        0
+       TAD I   SXR     /GET HI SYM WORD
+       DCA     GETFLD  /HOLD IT
+SWCDF2,        0
+       TAD I   TXR     /GET LO
+       DCA     SCOM    /HOLD IT
+       TAD     GETFLD
+       DCA I   TXR2    /STORE  HI IN LOW
+SWCDF3,        0
+       TAD     SCOM    /NOW STORE LO
+       DCA I   SXR2    /IN HI
+       ISZ     SMOV
+       JMP     SWCDF1+1
+       CDF
+       JMP I   SSWT
+\f      /COMPARE SYMBOLS + SET LINK THEREBY
+
+SCOM,  0
+       DCA     THISTG  /AC=TAG #
+       JMS I   (SETFLD
+       TAD I   TAGXR
+       CLL CIA
+       TAD     TAG1
+       SZA CLA
+       JMP     SCOMRT
+       TAD I   TAGXR
+       CLL CIA
+       TAD     TAG2
+       SZA CLA
+       JMP     SCOMRT
+       TAD I   TAGXR
+       CLL CIA
+       TAD     TAG3
+       SNA CLA
+       HLT     /NEVER
+SCOMRT,        CDF
+       JMP I   SCOM
+
+       PAGE
+
+
+
+
+
+
+
+
+\f      /SORT ROUTINE HERE
+
+SORT,  0
+       DCA     BEG     /INITIALIZE PARTITION BOUNDS
+       STA STL
+       TAD     HIGHTG
+       DCA     END     /ARE THERE ANY SYMBOLS?
+       SZL
+       JMP I   SORT    /NO EXIT WITH LINK SET
+       TAD     (LITBF1-1+26    /OK, SET STACK NOW
+       DCA     DXR
+       TAD     DXR
+       DCA     UXR
+
+SLOOP, STA
+       TAD     LEVEL
+       DCA     LEVEL
+SLOOP2,        TAD     BEG
+       STL CIA
+       TAD     END
+       SNA SZL
+       JMP     OKCOOL  /END.LOS.BEG
+       CLL RAR
+       TAD     BEG
+       DCA     MED     /MED=BEG+(END-BEG)/2
+       TAD     MED
+       DCA     THISTG
+       JMS I   PFINDTG /T=A(MED)
+       TAD     BEG
+       DCA     LO      /LO=BEG
+       TAD     END
+       DCA     HI      /HI=END
+       TAD     MED
+       CIA
+       TAD     BEG
+       SNA CLA
+       JMP     JUSTWO  /BEG.EQ.MED
+\f      TAD     LO
+       DCA     SXR2
+       TAD     MED
+       DCA     TXR2
+       JMS I   (SMOV   /A(MED)=A(LO)
+BEGLP, ISZ     LO
+       TAD     LO
+       CLL CIA
+       TAD     HI
+       SNL CLA
+       JMP     DONE    /HI.LOS.LO
+       TAD     LO
+       JMS I   (SCOM   /T.GT.A(LO) TO LINK
+       SZL CLA
+       JMP     BEGLP   /T.GT.A(LO)
+       JMP     ENDGO   /T.LT.A(LO)
+ENDLP, TAD     LO
+       CLL CIA
+       TAD     HI
+       SNL CLA
+       JMP     DONE    /IF HI.LO.LO
+ENDGO, TAD     HI
+       JMS I   (SCOM
+       SZL CLA
+       JMP     SWITCH
+       STA
+       TAD     HI
+       DCA     HI
+       JMP     ENDLP
+SWITCH,        JMS I   (SSWT
+       STA
+       TAD     HI
+       DCA     HI
+       JMP     BEGLP
+\fDONE, TAD     HI
+       DCA     SXR2
+       TAD     BEG
+       DCA     TXR2
+       JMS I   (SMOV   /A(BEG)=A(HI)
+       TAD     HI
+       DCA     THISTG
+       JMS I   PPUTTAG /A(HI)=T
+       AC7776
+       TAD     UXR
+       DCA     UXR
+       TAD     UXR
+       DCA     DXR
+       TAD     HI
+       CLL CIA
+       TAD     MED
+       SZL CLA
+       JMP     HIBIGR  /DEFER HIGH FOR LATER
+       TAD     BEG
+       DCA I   DXR     /DEFER LO FOR LATER
+       STA
+       TAD     HI
+       DCA I   DXR
+       TAD     HI
+       IAC
+       DCA     BEG
+       JMP     SLOOP
+HIBIGR,        TAD     HI
+       IAC
+       DCA I   DXR
+       TAD     END
+       DCA I   DXR
+       STA
+       TAD     LEVEL   /CLUMSY
+       DCA     LEVEL
+       CLL STA
+       TAD     HI
+       DCA     END
+       SNL             /PROTECT AGAINST WRAP AROUND
+       JMP     OKCOOL
+       JMP     SLOOP2
+
+JUSTWO,        TAD     HI
+       JMS I   (SCOM
+       SZL CLA
+       JMS I   (SSWT   /SWITCH IF T.GT.A(HI)
+OKCOOL,        CLA CLL         /NOW CONSIDER PREV PARTITIONS
+       TAD I   UXR
+       DCA     BEG
+       TAD I UXR
+       DCA     END
+       ISZ     LEVEL
+       JMP     SLOOP2  /REITERATE
+       JMP I   SORT    /DONE, RETURN WITH A CLEAR LINK
+LEVEL, 0
+       PAGE
+       >
+\f      /ROUTINE TO STORE THE DATE OF THE FORM DD-MMM-YY
+       /IN THE HEADING
+
+       IFZERO  HASH    <
+       FIELD   1
+       *OUDEVH+400
+       >
+
+FMTDAT,        0
+       TAD I   (MDATE  /PICK UP THE DATE WORD OF THE FORM MMM MDD DDD YYY
+       CDF             /RUN WITH DF = 0
+       SNA
+       JMP     NODATE  /EXIT IF NO DATE
+       DCA     DATWD   /ELSE STORE DATE WORD
+       TAD     ("0-1
+       DCA I   DATPTR  /SET FIRST DIGIT OF DAY
+       TAD     DATWD   /NOW GET DAY BITS
+       CLL RTR
+       RAR
+       AND     (37
+       JMS     DIV10   /DO DAY DIGITS NOW
+       TAD     ("-
+       DCA I   DATPTR  /STORE DASH
+       ISZ     DATPTR
+       TAD     DATWD   /NOW GET MONTH BITS
+       TAD     (7400   /REDUCE TO ORIGIN 0
+       AND     (7400
+       CLL RTL
+       RTL
+       RAL
+       DCA     DIV10
+       TAD     DIV10
+       CLL RAR         /GENERATE 1.5*MONTH INDEX
+       TAD     DIV10
+       TAD     (MONLST /INDEX MONTH LIST (SIXBIT)
+       DCA     MONPTR
+       TAD     (-3
+       DCA     DIV10   /SET 3 TIMES THRU LOOP
+       SZL
+       JMP     MONGO   /IF EVEN START AT RIGHT HALF
+MONLP, TAD I   MONPTR
+       CLL RTR
+       RTR
+       RTR
+       JMS     MONPUT  /PUT LEFT CHAR
+MONGO, TAD I   MONPTR
+       JMS     MONPUT  /PUT RIGHT CHAR
+       ISZ     MONPTR
+       JMP     MONLP   /LOOP FOR MORE
+MONPUT,        0
+       TAD     (40
+       AND     (77
+       TAD     (40     /CONVERT TO 7BIT
+       DCA I   DATPTR
+       ISZ     DATPTR
+       ISZ     DIV10
+       JMP I   MONPUT  /RETURN TO UNPACK LOOP
+       TAD     ("-
+       DCA I   DATPTR  /PUT ANOTHER DASH
+       ISZ     DATPTR
+       TAD     ("6
+       DCA I   DATPTR  /SETUP YEAR TENS DIGIT FOR DIVIDE
+       TAD I   (BIPCCL
+       AND     (600    /GET YEAR EXTENSION FROM 600 BITS
+       CLL RTR
+       RTR
+       DCA     DIV10
+       TAD     DATWD   /NOW GET YEAR
+       AND     (7      /ISOLATE IT
+       TAD     DIV10   /ADD EXTENSION
+       JMS     DIV10   /UNPACK IT
+NODATE,        CIF CDF         /NOW RETURN
+       JMP I   FMTDAT
+
+DIV10, 0
+       ISZ I   DATPTR
+       TAD     (-12
+       SMA
+       JMP     .-3     /REDUCE MON 10.
+       TAD     (12+"0
+       ISZ     DATPTR
+       DCA I   DATPTR  /STORE LOW DIGIT
+       ISZ     DATPTR
+       JMP I   DIV10   /--RETURN--
+
+DATPTR,        DATE
+DATWD, 0
+MONPTR,        0
+
+       PAGE
+
+       $$$$$