software: Added more and more
[pdp8.git] / sw / os8 / v3d / sources / system / dectapes / dectape7 / OS8.PA
diff --git a/sw/os8/v3d/sources/system/dectapes/dectape7/OS8.PA b/sw/os8/v3d/sources/system/dectapes/dectape7/OS8.PA
new file mode 100644 (file)
index 0000000..ac836d2
--- /dev/null
@@ -0,0 +1,3749 @@
+/12 OS8 MONITOR SYSTEM         OS8 VERS. 3D
+/
+/
+/
+/
+/
+/
+/
+/
+/
+/COPYRIGHT  (C)  1970,1971,1972,1973,1974,1975,1977 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/13-APRIL-1977                RL/EF/HJ/SR
+
+
+       /THIS VERSION OF OS/8 IS THE BATCH OPERATING SYSTEM
+       /AS WELL AS THE STANDARD KEYBOARD SYSTEM. THIS SYSTEM
+       /IS EXTERNALLY COMPATIBLE WITH ALL PREVIOUS OS/8-PS/8
+       /USER PROGRAMS. HOWEVER, INTERNALLY THE SYSTEMS ARE
+       /QUITE DIFFERENT. THE MARCH 1972 OS/8 WILL NOT RUN BATCH.
+       /THIS VERSION IS COMPATIBLE WITH CCL.
+
+/      SYMBOLIC REFERENCES TO VARIOUS OVERLAYS:
+
+       MEOVLY=26               /DIRECTORY OVERFLOW OVERLAY FOR "ENTER"
+       MCDREC=51               /COMMAND DECODER
+       MSOVLY=54               /"SAVE W. ARGS" OVERLAY
+       MSOVL2=55               /SECOND PART OF SAVE W. ARGS
+       MERRTN=56               /MONITOR ERROR ROUTINE
+       MRUNRC=57               /"CHAIN" OVERLAY
+       ODTREC=60               /SYSTEM ODT
+       MFREE=70                /BEGINNING OF FILE STORAGE
+       CCB=7400
+       CSOVLY=400
+       RSOVL1=1400
+       RSOVL2=2000
+
+       VERSNO=3
+       PATCHLEV="Q
+
+/V3 CHANGES:
+
+/1.    CCL SUPPORT
+/2.    FIXED KILLER CLOSE BUG
+/3.    ADDED VERSION NUMBER
+/4.    ^U, RO TO BOL, AND LF ALL PRINT '.' AGAIN
+/5.    CALL TO USR WITH CODE OF 0 GIVES ERROR
+/6.    MONITOR ERROR MESSAGES NOW GIVE EXPLANATION
+/7.    ENTER NOW MOVES 7 FILES TO MAKE ROOM INSTEAD OF HALF SEGMENT
+/8.    DIRECTORY VERIFICATION HAS IMPROVED
+
+/V3 FIXES TO ABSLDR:
+
+/1.    ALLOWED PARITY ^C
+/2.    PUT IN SELF-STARTING STUFF
+/3.    FIXED CCB BUG FOR 17600
+
+/FIXES TO FIELD RELEASE
+
+/1.    ABSLDR CHECKS PAGE 0 LITERALS
+/2.    FIXED BUG RE MONITOR ERROR MESSAGES
+/3.    ADDITIONAL INFO FIX
+/4.    BATCH FIX
+
+/FIXES FOR MAINTENANCE RELEASE:
+
+/1.    CHANGED VERSION NUMBER OF MONITOR TO V3M
+/2.    INCORPORATED PATCH RE LOC 13121 AFTER MONITOR ERROR
+/      [SEQ #1, DSN APRIL 1975]
+/3.    ALLOW CHAIN TO WORK ON FULL FIELD SAVES
+/      [SEQ #2, DSN  JUNE 1975]
+/4.    ALLOW ABSLDR/I TO WORK ON FULL FIELD CORE IMAGES
+/      [SEQ #1, DSN OCTOBER 1975]
+/5.    ADDED INTERNAL VERSION NUMBER TO ABSLDR AT LOCATION 2200
+/      MAINT. RELEASE VERSION # IS V4
+/6.    SET INITIAL ABSLDR DATE TO 1-NOVEMBER-1975
+
+/V3D AND OS/78 CHANGES:
+
+/1.    ACCEPT DEC STANDARD DATE FORMAT FOR INPUT (DD-MMM-YY)
+/2.    CHANGED VERSION NUMBER TO V3Q
+/3.    ADDED DATE/78 CHANGES
+/4.    FIXED BUG ABOUT WAITING FOR TTY FLAG & BATCH
+/5.    ADDED STUFF FOR LINKER [USES SOFSET]
+/6.    CHANGED ABSLDR DATE TO 1-JUNE-77
+/7.    DISALLOW RUN OF PROGRAM WITH BIT 4 OF JSW ON [OS/78 ONLY]
+/8.    ASSIGNED RESIDENT BITS FOR SCOPE AND OS/78
+/9.    ALLOW @ IN KBM COMMAND
+/10.   COULD RUN INIT.CM ON SYSTEM START-UP
+/11.   CHANGED BAD CORE IMAGE MSG TO CORE IMAGE ERR
+/12.   CHANGED ABSLDR/I SO THAT IT SETS UP JSW AND SA
+\f      /KEYBOARD MONITOR FOR OS/8 SYSTEM - UNCOMMENTED AT PRESENT
+
+       FIELD 0
+       MTHREE=CLA CLL CMA RTL
+       *200
+PRINT, JMP I PRNAME    /MUST BE AT 200 FOR BATCH
+       JMP .+3         /****GETS CIF CDF N FOR BATCH*****
+       TSF             /****GETS JMP I .+1******
+       JMP .-1         /*GETS BOSPRT*****
+       TLS
+       CLA
+       TAD [7000
+       DCA PRINT+1
+       JMP I PRINT
+GETNAM,        0
+       DCA NM1
+       DCA NM2
+       DCA NM3
+       DCA NM4
+       TAD [NM1
+       DCA PN
+       CLA CMA
+       DCA PRDSW
+GTNMX, DCA NMCT
+       TAD I LXR
+       TAD [-240
+       SNA
+       JMP .-3
+       TAD [240
+       SKP
+GTNMLP,        TAD I LXR
+       DCA TMP
+       TAD TMP
+       TAD [-256
+       SNA
+       JMP PERIOD
+       TAD [-2
+       CLL
+       TAD [-12
+       SNL CLA
+       JMP NINSRT
+       TAD [-301
+       TAD TMP
+       CLL CML
+       TAD [-32
+       SNL CLA
+       JMP EONAME
+NINSRT,        TAD NMCT
+       TAD [-6
+       SMA CLA
+       JMP GTNMLP
+       TAD NMCT
+       CLL RAR
+       TAD PN
+       DCA TEMP1
+       TAD TMP
+       AND [77
+       SZL
+       JMP .+4
+       RTL
+       RTL
+       RTL
+       TAD I TEMP1
+       DCA I TEMP1
+       ISZ NMCT
+       JMP GTNMLP
+PERIOD,        ISZ PRDSW
+       JMP EONAME
+       ISZ PN
+       TAD [4
+       JMP GTNMX
+EONAME,        TAD NMCT
+       SZA CLA
+       ISZ GETNAM
+       JMP I GETNAM
+\fPRNAME,       4000
+       TAD NM1
+       JMS PRWD
+       TAD NM2
+       JMS PRWD
+       TAD NM3
+       JMS PRWD
+       TAD NM4
+       SNA CLA
+       JMP I PRNAME
+       TAD [256
+       JMS PCHAR
+       TAD NM4
+       JMS PRWD
+       JMP I PRNAME
+PRINLP,        JMS PRWD
+       ISZ PRMESG
+       SKP
+       IFNZRO .-330 <CCLTRB,ERRR>
+PRMESG,        0
+       CLA
+       TAD I PRMESG
+       SZA
+       JMP PRINLP
+       TSF
+       JMP .-1
+       JMP I ERRET
+PRWD,  0
+       DCA TMP
+       TAD TMP
+       RTR
+       RTR
+       RTR
+       JMS PCHAR
+       TAD TMP
+       JMS PCHAR
+       JMP I PRWD
+PCHAR, 0
+       AND [77
+       SNA
+       JMP I PCHAR
+       TAD [240
+       AND [77
+       TAD [240
+       JMS I PCH
+       JMP I PCHAR
+\fPRINTQ,       JMS PRMESG
+       TEXT /?/
+       0
+
+       *367
+KSV2A, SAVE2A
+SAVE2, TAD I LXR
+       SNA             /ARE THERE ARGUMENTS?
+       JMP I KSV2A     /NO..USE CCB
+       JMS I [SHNDLR   /READ IN ARGUMENT OVERLAY
+       0201
+       CSOVLY
+       MSOVLY
+       JMP KMONER      /NORMAL RETURN IS TO 400
+\f      *400
+KMNTRY,        JMP I HANDAD    /V3
+       0               /FREE LOCATION !
+PCRLF, JMS I [CRLF
+       IFNZRO .-403 <BTCHER,XXXX>
+
+KEYMON,        JMS I GLINE
+       TAD [BEGLN-1    /ADDRESS REFERENCED BY INIT
+       DCA LXR
+       JMS I GNAME
+/V3D   JMP I [PRINTQ
+       XXX=[PRINTQ     /NEED LITERAL IN SAME PLACE
+       NOP             /V3D ALLOW @ IN NAME
+       JMS I [SRCH
+       -123;   ASSIGN
+       -2301;  SAVE
+       -2225;  RUN
+       -705;   GET
+       -2200;  R
+       -2324;  START
+       -1704;  ODT
+       -0405;  DEAS
+       IFNZRO .-431 <SEECCL,ZZZ>
+       -0401;  DATE
+       0
+       JMP I .+1
+CCLSW, PRQMRK          /MODIFIED FOR CCL TO 'GETCCL'
+       IFNZRO CCLSW-435 <SEECCL,ZZ>
+
+ASSIGN,        TAD [12
+       JMS GDEVNO
+       TAD [UDNAME-1
+       DCA TM1
+       JMS I GNAME
+       JMP ASGN2+1     /NO USER DEV. DO A DEASSIGN 
+       TAD NM2         /SEE IF WE HASH IT
+       SNA
+       JMP ASGN2       /DON'T HASH..ONLY 1 OR 2 CHARS
+       TAD NM1
+       RAL             /LINK BECOMES 4000 IF NECESSARY
+       CLA CML RAR
+       TAD NM2
+ASGN2, TAD NM1
+       JMP I [ASDONE
+\fR,    DCA I [GETSW
+       TAD P6203
+       JMS I [RESET
+       ISZ RUNSW
+       TAD [SHNDLR
+       DCA HANDAD
+       CLA IAC
+       JMP RGETPG
+GDEVNO,        0
+       DCA ASNM1-1
+       JMS I [MINCOR
+       JMS I GNAME
+       JMP I [KMER4
+       TAD NM1
+       DCA ASNM1
+       TAD NM2
+       DCA ASNM1+1
+       TAD HNDLAD
+       DCA HANDAD
+       CIF 10
+       JMS I SYSTEM
+       1
+ASNM1, 0;0
+HANDAD,        KMINIT          /V3
+       JMP I [KMER1
+       TAD ASNM1+1
+       JMP I GDEVNO
+\fGET,  TAD [SKP
+RUN,   DCA I [GETSW
+       TAD P6203
+       JMS I [RESET
+       DCA RUNSW
+       CLA IAC
+       JMS GDEVNO
+RGETPG,        JMS RSCOMN
+       JMS I [MINCOR
+       TAD SENTER
+       CIF 10
+       JMS I SYSTEM
+       2
+PGNAME,        NM1
+       MOVBUF          /USED AS POINTER TO FIELD 1 SR
+       JMP I [KMER2
+       JMP I [RLOADR
+RSCOMN,        0
+       DCA SENTER
+       TAD HANDAD
+       DCA DEVHND
+       JMS I GNAME
+       JMP I [KMER4
+       TAD NM4
+       SNA
+       TAD [2326
+       DCA NM4
+       JMP I RSCOMN
+SAVE,  TAD [SAVE12     /CHANGE ERROR RETURN ADDRESS AS WE WILL DESTROY CORE
+       DCA ERRET
+       TAD I [JSBITS
+       JMS I [RESET
+       CIF 10          /MOVE THE LINE BUFFER TO 1600 DURING
+       JMS I PGNAME+1  /A SAVE, AS HANDLER WIPES IT OUT
+       TAD LXR         /LET'S MOVE THE REGISTER AROUND
+       TAD [SVLNBF-BEGLN
+       DCA LXR
+       TAD [1001
+       DCA HNDLAD
+       CLA IAC
+       JMS GDEVNO
+       JMS RSCOMN
+       JMP I [SAVE2
+HNDLAD,                        /REPLACED WITH 1001 BY SAVE
+
+WRCTLB,        7001            /WRITE OVERLAY AND CCB
+       JMS I [SHNDLR
+       4600
+       6200
+       MTEMP+6
+       JMP KMONER
+       JMP I WRCTLB
+\f      *573            /LOADS SYSTEM ODT OVER THE MONITOR
+ODT,   JMS I PGTOUT
+       JMS I [SHNDLR
+       1001
+       0
+       ODTREC
+       /LOCATION 600 IN ODT IS A HLT (ERROR RETURN)
+\f      *600
+START, DCA TEMP1
+       DCA TEMP2
+       TAD I LXR       /V3
+       SZA             /V3
+       JMP I [STRTX    /V3
+       TAD I [JFIELD
+       DCA I [MSTCDF
+       TAD I [JSBITS
+       AND [1000
+       SZA CLA
+       JMP I [KMER3
+       TAD I [JSBITS
+       JMS I [RESET    /RESET ONLY IF NO START ADR SPECIFIED
+       TAD I [JSTART
+STCOMN,        DCA I [MSTADR
+       TSF
+       JMP .-1         /WAIT FOR PRINTER TO FINISH
+       JMS I PGTOUT
+       TAD I [JSBITS
+       SPA CLA
+       JMP I [MSTCDF
+       TAD [SHNDLR
+       DCA I [MREAD-1
+       TAD [1000
+       DCA I [MREAD+1
+       DCA I [MREAD+2
+       TAD [MTEMP+4
+       DCA I [MREAD+3
+       TAD FUDJMP
+       DCA I [MSWITC
+       JMP I [MREAD
+\fMINCOR,       0
+       CIF 10
+       JMS I SYSTEM
+       10
+       CDF 10
+       DCA I [OLDT9    /ZERO OUT "DIRECTORY IN CORE" KEY
+       CDF 0
+       TAD [200
+       DCA SYSTEM
+       JMP I MINCOR
+RLOADR,
+RUN1,  TAD I [PGNAME
+       DCA FILE
+       JMS I DEVHND
+       0101
+       CCB
+FILE,  0               /READ IN THE HEADER BLOCK
+       JMP KMONER      /ERROR WHILE READING HEADER BLOCK
+       TAD I [CCB
+       JMS I [CCBTST   /TEST FOR VALID CORE CONTROL
+       TAD I [CCB+3    /V3D
+       RAL             /V3D
+       JMS I KRCHK     /V3D CAN'T RUN SYSTEM CUSP UNDER OS78
+       TAD I [CCB+1
+       DCA I [MSTCDF
+       TAD I [CCB+2
+       DCA I [MSTADR   /MOVE THE STARTING ADDRESS INTO UPPER CORE
+       TAD I [CCB+1
+       DCA I [JFIELD
+       TAD I [CCB+2
+       DCA I [JSTART
+       TAD I [CCB+3    /SET UP THE JOB INFORMATION AREA
+       JMS I [RESET    /AND CLEAR INFORMATION ABOUT "RUN" HANDLER
+       TAD FUDJMP
+       DCA I [MSWITC           /SET MSWITC TO INHIBIT LOADING 7400
+GETSW, SKP                     /SKP FOR GET, NOP FOR RUN
+       JMP RUN2
+       TAD P6203
+       DCA I [MSTCDF
+       TAD [7600
+       DCA I [MSTADR           /IF A GET, SET STARTING ADDRESS TO RETURN
+                               /TO MONITOR
+\fRUN2, TAD I [CCB
+       CLL CMA RAL     /POINT TO LAST DOUBLEWORD IN CCB
+       TAD [CCB+4
+       DCA TM1         /TM1 POINTS TO SEG. ADDRESS
+       TAD I TM1       /STORE ADDRES TO READ POSSIBLE OVERLAY
+       DCA I [MREAD+2
+       ISZ TM1         /POINT TO SEGMENT CONTROL WORD
+       TAD DEVHND      /IF THE HANDLER IS IN 7600, OR
+       TAD [200        /IF THE SEGMENT DOES NOT LOAD OVER
+       CLA RAL         /7000, NO OVERLAY IS NEEDED. ALSO IF
+       TAD I TM1       /THE SEGMENT IS IN FIELDS 1-7.
+       AND [77
+RUN5A, SZA CLA
+       JMP I [RUN6     /NO PROBLEMS.. READ STUFF IN
+       TAD I [MREAD+2  /SEE IF WE OVERLAY 7000
+       CLL CML RAR
+       TAD I TM1       /ADD IN CONTROL WORD
+       TAD [300
+       SPA             /IF NEGATIVE, 7000 IS NOT OVERLAYED
+       JMP RUN5A
+       TAD [7600       /GETS 0, 100, 200, OR 300
+       SMA             /IF  POSITIVE READ 3 PAGE OVERLAY
+       ISZ I [PGNAME+1 /POINT TO NEXT TO LAST RECORD
+       TAD [300
+       DCA RDCNT
+       TAD I [PGNAME+1
+       CMA             /GET RECORD TO READ OVERLAY FROM
+       TAD FILE
+       DCA R7000
+       JMS I DEVHND    /READ OVERLAY FROM THE FILE INTO PAGES
+RDCNT, 0       /BEFORE CCB
+       6200            /THEN WRITE THE WHOLE MESS OUT
+R7000, 0
+       JMP I [RERR
+       JMS I [WRCTLB   /WRITE OUT THE OVERLAY+CCB
+       DCA .-1         /BUT ONLY ONCE!!
+       ISZ RUNSW
+       DCA I [MSWITC   /ENABLE READ OF OVERLAY
+       TAD RDCNT       /SEE IF THIS SEG IS EXHAUSTED
+       CIA
+       TAD I TM1
+       SPA SNA
+       ISZ I [CCB      /ARE WE DONE ALL SEGMENTS?
+       SKP             /NOT YET. LOOP UNTIL DONE
+       JMP I [MSWITC
+RUN5,  DCA I TM1       /SAVE ALTERED CONTROL WORD
+       JMP RUN2
+\f/ASDONE,      CDF 10
+/      DCA I TM1       /THIS COULD BE OPTIMIZED
+/      CDF 0
+/      JMP I [KEYMON
+
+KMER1, JMS I [PRNAME   /DEVICE NOT AVAILABLE
+       JMS I [PRMESG
+       TEXT    / NOT AVAILABLE/
+\f      *1000
+/MUST BE AT 1000 FOR BATCH
+BEGLN, 0       /LINE BUFFER    COULD BECOME "@
+       "I
+       "N
+       "I
+       "T
+KMINIT,        CDF 10          /INITIALIZATION - DESTROYED BY LINE BUFFER
+       ISZ I [7700     /LOC 17700=7777 IF I/O MONITOR IS KNOWN
+       JMP .+3         /TO BE IN CORE, SO SET UP
+       TAD [200        /THE INITIAL POINTER FOR CALLS TO THE MONITOR
+       DCA SYSTEM      /ACCORDINGLY
+       CDF 0
+       TAD I LXR
+       DCA I X1
+       ISZ TEMP2
+       JMP .-3
+       CDF 10
+       TAD MVFROM
+       DCA I PDBUF
+       ISZ .-2
+       ISZ PDBUF
+       ISZ MVCNT
+       JMP .-5
+       CDF 0
+       TAD I PDBUF+1   /SEE IF BATCH IS SET
+       RAL             /IF YES, GO TO PAGE 0 TO CONTINUE
+       SMA CLA         /IF IT ISN'T, CONTINUE NORMALLY
+       JMP INTGO       /NORMAL KEYBOARD SYSTEM
+       DCA I RTWTPT    /DON'T WAIT ON TTY FLAG IF BATCH IS RUNNING
+       TAD I [JSBITS   /IS BOS IN PLACE?
+       AND DCBF
+       SNA CLA
+       JMP BATCH       /NO. GO READ IT IN.
+       JMP BCHGO       /YES. START IT UP.
+INTGO, TAD [200
+       KRS
+       TAD M203
+       SNA CLA         /IS THERE A ^C IN THE READER BUFFER
+       KSF             /WITH THE FLAG ON?
+       JMP I ERRET     /NO - PRINT CRLF AND PERIOD
+       JMP CLR         /V3D
+/CCLADR,       GETCCL  /V3D DIDN'T SEEM TO BE USED
+RTWTPT,        RUNTWT
+DCBF,  400
+/START
+PMSRST,        SHNDLR&177+4200 /JMS SHNDLR
+       0300
+       7000
+       MTEMP+6
+       HLT             /CONTAINS SECOND COPY OF OS/78 BIT
+       CDF CIF 0
+       TCF
+/END
+MVCNT, MOVBUF-MVT3-1
+PDBUF, MOVBUF
+\fMVFROM,       NOPUNCH
+       *7626
+       ENPUNCH
+MOVBUF,        7777    /USED IN BATCH SETUP
+       TAD I MVT1      /MOVE THE LINE BUFFER FROM 1000
+       DCA I MVT2      /TO 1655
+       ISZ MVT1
+       ISZ MVT2
+       ISZ MVT3
+       JMP .-5
+       CIF CDF 0
+       JMP I MOVBUF
+
+MVT1,  BEGLN
+MVT2,  SVLNBF
+MVT3,  -112
+
+
+       *1077           /V3D
+INIT,  CDF 10          /V3D (INITIALIZATION)
+       TAD DCBF
+       DCA I ROT       /RESTORE LOC 7677 TO '400'
+       CDF 0
+       DCA KMINIT      /END LINE WITH 0
+       TLS
+       JMP I CRLF      /FAKE OUT KBM AS IF USER TYPED @INIT
+
+
+CLR,   KCC
+       JMP I .+1
+       CTRLC
+\f      *1112
+       ENPUNCH
+
+DIGTLP,        TAD I LXR
+STRTX, TAD (-270
+       CLL
+       TAD [10
+       DCA TMP1        /V3
+       SNL
+       JMP EONUM
+/V3    ISZ DIGFLG
+       JMS ROT
+       JMS ROT
+       JMS ROT
+       TAD TEMP2
+       TAD TMP1
+       DCA TEMP2
+       JMP DIGTLP
+EONUM, TAD TEMP1
+       AND [7
+       CLL RTL
+       RAL
+       TAD KM6203
+       DCA I [MSTCDF
+       TAD TEMP2
+       JMP I .+1
+       STCOMN
+
+ROT,   7677            /V3D NEEDED FOR INIT
+       TAD TEMP2
+       CLL RAL
+       DCA TEMP2
+       TAD TEMP1
+       RAL
+       DCA TEMP1
+       JMP I ROT
+\fDEAS, TAD [UDNAME-1
+       DCA X1
+       TAD [-17
+       DCA TM1
+       CDF 10
+       DCA I X1
+       ISZ TM1
+       JMP .-2
+KM6203,        CDF CIF 0
+       JMP I [KEYMON
+
+ASDONE,        CDF 10          /V3
+       DCA I TM1       /V3
+       JMP KM6203      /V3
+
+
+CRLF,  KEYMON+1        /V3D NEEDED FOR INIT
+       TAD [215
+       DCA NM1
+       JMS I (PRNT
+       TAD [212
+       JMS I PCH
+       JMP I CRLF
+
+M203,  -203
+       PAGE
+\f/NOTE: XR=AMFLAG !
+
+       *1200
+       /TELETYPE INPUT ROUTINE
+XGLINE,        KEYMON+1                /MUST BE AT 1200 FOR BATCH & CCL
+       TAD [".
+       JMS I PCH
+       DCA RBFLAG
+       TAD [BEGLN-1
+CHLM1, DCA LXR
+       DCA AMFLAG      /ZERO ALTMODE FLAG
+CHLOOP,        KSF
+       JMP CHLOOP
+       TAD [200
+       KRS
+       DCA NM1
+       KCC
+       JMS SRCH
+       -225;CTRLU
+       -215;CARRET
+       -377;RUBOUT
+       -375;ALTMOD     /THIS AREA GETS MODIFIED BY SET
+       -376;ALTMOD
+       -233;ALTMOD
+       -212;LFEED
+       -200;CHLOOP
+       -217;CHLOOP     /IGNORE ^O
+       -203;CTRLC      /MUST BE JUST BEFORE 0
+                       /MUST BE HERE FOR CCL
+       0
+       JMS PRNT
+CINSRT,        TAD NM1
+       DCA I LXR
+       TAD LXR
+       TAD [-BEGLN-110
+       SPA CLA
+       JMP CHLOOP
+CARRET,        JMS I [CRLF
+       TAD LXR
+       TAD [1-BEGLN
+       SNA CLA
+       JMP XGLINE+1
+       DCA I LXR
+       DCA I LXR
+       JMP I XGLINE
+\f/THIS PAGE GETS MODIFIED BY SET COMMANDS (FOR REAL SCOPE RUBOUTS)
+/**** BEWARE! ***
+
+PRNT,  0
+       ISZ RBFLAG
+       JMP .+3
+       TAD ["\
+       JMS I PCH
+       DCA RBFLAG
+       TAD NM1
+       JMS I PCH
+       JMP I PRNT
+CTRLC,
+CTRLU, TAD ["^
+       JMS I PCH
+       TAD NM1
+       TAD [100
+CLRLIN,        JMS I PCH
+RBSPCL,        JMS I [CRLF
+       JMP XGLINE+1
+
+ALTMOD,        TAD ["$
+       DCA NM1
+       JMS PRNT
+       ISZ AMFLAG      /NOTE ALTMODE
+       JMP CARRET+1
+RUBOUT,        TAD LXR
+       TAD [1-BEGLN
+       SNA CLA
+       JMP RBSPCL
+       TAD ["\         /MUST BE HERE
+       ISZ RBFLAG
+       JMS I PCH
+       CLA CMA
+       DCA RBFLAG
+       TAD LXR
+       DCA TEMP1
+       TAD I TEMP1
+       JMS I PCH
+LBCKUP,        CLA CMA
+       TAD LXR
+       JMP CHLM1
+\fSRCH, 0
+       TAD I SRCH
+       ISZ SRCH
+       SNA
+       JMP I SRCH
+       TAD NM1
+       SNA CLA
+       JMP SFND
+       ISZ SRCH
+       JMP SRCH+1
+SFND,  TAD I SRCH
+       DCA TEMP1
+       JMP I TEMP1
+LFEED, JMS I [CRLF
+       DCA I LXR
+       TAD [".
+       JMS I PCH
+       TAD [BEGLN-1
+       DCA XR
+       TAD I XR
+       SNA
+       JMP LBCKUP
+       JMS I PCH
+       JMP .-4
+
+PRQMRK,        JMS I [PRNAME
+       JMP I [PRINTQ
+       IFNZRO PRQMRK-1357 <SEECCL,ZZXX>
+       ZBLOCK 1        /A FREE LOCATION!
+
+       IFNZRO .-1362 <FIXCCL,ERRRR>
+
+GETCCL,        TAD [6003
+       JMS I [RESET
+       TAD [67         /CCL OVERLAY BLOCK IS BLOCK 67 ***
+       DCA OV
+       JMP DATE2
+DATE,  TAD TMP
+       SNA CLA
+       JMP I [CCLSW-1  /USED TO BE JMP GETCCL
+DATE2, JMS I [SHNDLR   /READ IN DATE OVERLAY
+       0201
+       0400
+OV,    MSOVL2
+       JMP KMONER
+       JMP I [600
+       PAGE
+\f      *1400
+SAVE2A,        JMS I [SHNDLR
+       0201
+       400
+       MTEMP+10
+       JMP KMONER
+SAVE3, TAD [603
+       DCA XR
+       TAD I [600
+       DCA TM1
+       TAD TM1
+       JMS I [CCBTST   /CHECK TM1 FOR VALID CCB
+SAVE3A,        ISZ XR
+       TAD I XR        /GET THE I/O CONTROL WORD OF THIS SEGMENT
+       JMS I PROTAT    /EXTRACT THE LENGTH FROM IT
+       TAD CLENGT
+       DCA CLENGT      /UPDATE THE LENGTH OF THE FILE
+       ISZ TM1
+       JMP SAVE3A              /LOOP FOR ALL SEGMENTS OF THE FILE
+       TAD CLENGT      /USE THIS LENGTH WHEN ENTERING THE FILE
+       CLL RTL
+       RTL
+       TAD SENTER
+       CIF 10
+       JMS I SYSTEM
+       3               /ENTER
+SFILE, NM1
+       0               /LENGHT UNIMPORTANT
+       JMP SAVERR
+       TAD SENTER
+       CIF 10
+       JMS I SYSTEM
+       4               /CLOSE
+       NM1             /NAME FOR "CLOSE"
+CLENGT,        1               /CLOSING LENGTH
+       JMP SAVERR
+       TAD [603
+       DCA XR
+       JMS I PGTOUT    /KICK THE I/O MONITOR OUT IF NECESSARY
+       TAD I [JSBITS
+       RAL
+       CMA             /IF JOB LOADS INTO LOCS 0-1777,
+       SNL SMA CLA     /BUT NOT INTO LOCS 10000-11777,
+       JMS LOADF0      /LOAD 0-1777 INTO 10000-11777 NOW
+       TAD SFILE
+       DCA SWFILE
+       JMS SWRITE      /WRITE OUT CONTROL BLOCK
+SAVE4, TAD I XR
+       DCA SADR
+       CLA CLL CML RAR
+       TAD I XR
+       DCA SCTL
+\fSAVE5,  TAD SADR
+        RAL
+        SZL SPA CLA     /DOES THIS SEGMENT START BELOW 2000?
+        JMP SAVE8       /NO - NOTHING TO WORRY ABOUT
+        TAD SCTL
+        AND [70
+        SZA CLA         /FIELD 0?
+        JMP SAVE8       /NO - SAVE AS IS
+SAVE6,  JMS LOADF0      /LOAD THE FIELD 0 SAVE AREA OVER THE I/O MONITOR
+SAVE7,  CLA CMA
+        TAD SCTL
+        CLL RAL
+        TAD SADR
+        RAL
+        SZL SPA CLA     /CHECK WHETHER UPPER LIMIT IS ABOVE 2000
+        JMP SAVE7A      /IT IS - MUST MAKE 2 WRITES
+        TAD SCTL        /TOTALLY CONTAINED IN 0-1777
+        TAD [10                /CHANGE FIELD 0 TO FIELD 1 AND CONTINUE
+        JMP SAVE8A
+SAVE7A, TAD SCTL        /WRITE IN 2 PARTS -
+        DCA TM1
+        TAD SADR
+        CIA         /FIRST PART FROM FIELD 1, EVERYTHING BELOW 2000
+        TAD [2020
+        CLL CML RAR
+        DCA SCTL
+        JMS SWRITE
+        CLA CLL CML RTR
+        DCA SADR
+        TAD SCTL        /SECOND PART FROM FIELD 0, EVERYTHING ABOVE 2000
+        AND [3700
+        CIA
+        TAD TM1
+       SMA             /FULL FIELD SAVE IN F0 MAKES THIS +
+       TAD [4000       /COMPENSATE FOR THAT CASE
+SAVE8A, DCA SCTL
+SAVE8,  JMS SWRITE
+        ISZ I [600
+        JMP SAVE4
+SAVE12, JMS I [SHNDLR
+        0610
+        0
+        MONTOR          /FORCE THE I/O MONITOR BACK INTO CORE
+        JMP KMONER      /(OY VEH!)
+        CLA CMA
+        CDF 10
+        DCA I [7700     /TELL THE KEYBOARD MONITOR THAT ITS IN CORE
+        JMP I [7605     /*** DEPENDS ON 7605 BEING A CDF CIF 10 ***
+
+\fLOADF0,       0
+       ISZ F0OVLY      /HAS THE FIELD 0 OVERLAY BEEN LOADED BEFORE?
+       JMP I LOADF0    /EVIDENTLY
+       JMS I [SHNDLR
+       1010
+F0OVLY,        -1              /WILL BE 0 IF WE EXECUTE THIS CODE, OF COURSE
+       MTEMP+4
+       JMP KMONER
+       JMP I LOADF0
+
+SWRITE,        0
+       JMS I DEVHND
+SCTL,  4101
+SADR,  600
+SWFILE,        0
+       JMP SAVERR
+       TAD SCTL
+       JMS I PROTAT
+       TAD SWFILE
+       DCA SWFILE      /BUMP RECORD NUMBER
+       JMP I SWRITE
+SAVERR,        JMS I [PRMESG
+       TEXT    /SAVE ERROR/
+PROTAT,        ROTAT
+\f      *1600
+KMER4, JMS I [PRMESG
+       TEXT    /TOO FEW ARGS/
+CCBTST,        0       /EXAMINE COUNT WORD OF CCB FOR VALIDITY
+                       /ASCII AND BINARY FILES USUALLY FAIL THIS TEST
+       CMA
+       AND [7740
+       SNA CLA
+       JMP I CCBTST    /IT WAS VALID
+CIERR, TAD [7605
+       DCA ERRET       /RELOAD MONITOR ON THIS ERROR
+       JMS I [PRMESG   /IT WASN'T - TELL THE USER
+       TEXT    /CORE IMAGE ERR/
+GETOUT,        0               /SUBROUTINE TO KICK MONITOR OUT IF NECESSARY
+       TAD I [JSBITS
+       RAR
+       CLA
+       TAD SYSTEM
+       SZL SPA CLA     /IS THE SYSTEM IN CORE AND SHOULD IT BE?
+       JMP I GETOUT
+       CIF 10          /YES AND NO - KICK IT OUT
+       JMS I SYSTEM
+       11              /BYE BYE
+       TAD [7700
+       DCA SYSTEM
+       JMP I GETOUT
+\fSVLNBF,
+KMER2, JMS I [PRNAME
+       JMS I [PRMESG
+       TEXT    / NOT FOUND/
+/
+/NEXT 112 LOCATIONS DESTROYED BY THE LINE BUFFER DURING A SAVE
+/
+
+RESET, 0
+       DCA I [JSBITS   /MARK AREAS FOR I/O OPTOMIZATION
+       JMS I [MINCOR
+       CIF 10
+       JMS I SYSTEM
+       13              /RESET DEVICE HANDLERS AND OUTPUT FILES
+/V3D   CDF 0           /THIS INSTRUCTION SEEMS UNNECESSARY
+       JMP I RESET
+
+RCHK,  0
+       AND I RADR      /V3D
+       AND [200        /CAN'T ALLOW BOTH OS78 BIT AND SYSTEM CUSP BIT
+       SNA CLA
+       JMP I RCHK
+       JMP CIERR       /V3D CAN'T FALL INTO KMER3
+                       /BECAUSE HAVE TO RELOAD KBM TO RESET 'PGNAME'
+KMER3, JMS I [PRMESG
+       TEXT    /NO!!/
+
+RUN6,  TAD I TM1       /STORE CONTROL WORD FOR LAST SEG.
+       DCA I [MREAD+1
+       TAD RUNSW       /IS THIS R OR RUN?
+       SNA CLA
+       JMS I [WRCTLB   /RUN
+       TAD I RFILE     /V3D FOR LINKER
+       DCA I RCTL      /V3D SAVE BLOCK NUMBER IN 'SOFSET'
+       TAD I RFILE
+RUN7,  IAC
+       DCA RUNFIL              /STORE STARTING BLOCK NUMBER
+       TAD DEVHND
+       DCA I [MREAD-1
+       TAD DEVHND
+       DCA RUNHND              /STORE DEVICE HANDLER ENTRY IN THIS PAGE
+       TAD I ADR1
+       DCA I ADR2
+       ISZ ADCNT
+       JMP .-3
+       JMP I .+1               /AND GO TO IT
+       RUN8&177+7400
+
+RFILE, FILE
+ADCNT, RUN8&177+7600
+\fRUN8, ISZ I R7400     /IS THIS THE LAST PARAMETER PAIR?
+       JMP RUN9        /NO - KEEP LOADING
+       TAD RUNFIL
+       DCA I RMRD3     /MOVE THE RECORD NUMBER INTO THE FINAL READ
+       TSF
+RUNTWT,        JMP .-1         /WAIT FOR THE TELETYPE TO DIE DOWN (RF08 IS FAST!)
+       JMP I .+1
+       MREAD           /READ THE LAST SEGMENT AND START UP
+RUN9,  TAD I RUNADR
+       DCA RADR        /SET UP THE LOADING ADDRESS OF THE CURRENT SEGMENT
+       ISZ RUNADR
+       TAD I RUNADR
+       DCA RCTL        /AND THE READ CONTROL WORD
+       JMS I RUNHND
+RCTL,  SOFSET          /V3D THESE ARE STORED INTO ONLY AFTER MOVING
+RADR,  OS78            /V3D
+RUNFIL,        0
+       JMP RERR                /INPUT ERROR READING THE PROGRAM
+       TAD RCTL
+       JMS ROTAT               /GET THE BLOCK LENGTH OF THIS SEGMENT
+       TAD RUNFIL
+       DCA RUNFIL              /UPDATE THE BLOCK NUMBER FROM IT
+       ISZ RUNADR
+       JMP RUN8                /BACK FOR ANOTHER ONE
+
+RERR,  CIF 10
+       JMS I RU7700
+       7
+       0       /TOTALLY MEANINGLESS
+RUNADR,        CCB+4
+R7400, 7400
+RMRD3, MREAD+3
+RU7700,        7700
+RUNHND,        0
+       IFNZRO ROTAT-SVLNBF-112&4000 <ERROR>
+       *1765   /MUST BE AT TOP OF PAGE
+ROTAT, 0
+       CLL RTR
+       RTR
+       RTR
+       AND RU37
+       SNA
+       TAD RU37
+       IAC
+       CLL RAR
+       JMP I ROTAT
+RU37,  37
+\f      /OVERLAY TO KEYBOARD MONITOR FOR "SAVE" WITH ARGUMENTS
+       *2000           /GOES INTO 400
+SAVE1A,        TAD (1603
+       DCA X1
+       DCA TM1
+       CDF 10
+       DCA I [OLDT9
+S6203, CIF CDF 0
+       TAD (SGETOUT-RSOVL2     /POINTER TO NEW GETOUT
+
+       DCA PGTOUT              /LIKEWISE "GETOUT"
+       JMS I [SHNDLR
+       0210
+       1400
+       MTEMP+10                /READ IN CONTROL BLOCK
+       JMP KMONER
+       JMS LXRBAK              /RESET LXR TO LOOK AT FIRST CHAR
+       JMS LXRBAK
+       DCA DASHFG
+SNUMLP,        JMS SGTNUM
+       JMP SDLOOK      /NO NUMBER - GET DELIMETER
+       TAD I LXR
+       TAD (-"-
+       SNA CLA
+       JMP SVDASH
+       JMS LXRBAK
+       TAD DASHFG
+       SNA CLA         /WAS THERE A LOWER LIMIT?
+       JMS DASHSB      /NO - SET LOWER LIMIT TO UPPER LIMIT
+       TAD TEMP1
+       CIA CLL CML
+       TAD OLD1
+       SZA CLA /ARE THE FIELDS THE SAME?
+       JMP KMER5       /NO - ERROR
+       TAD TEMP2
+       AND [7600
+       TAD [200
+       DCA TEMP2
+       TAD TEMP2
+       CIA
+       TAD OLD2
+       SZL CLA         /IS UPPER LIMIT > LOWER LIMIT?
+       JMP KMER5       /NO - ERROR
+       CDF 10
+       TAD OLD1
+       DCA I X1
+       TAD OLD2
+       DCA I X1
+       TAD TEMP2
+       DCA I X1        /CREATE A TRIPLET(FIELD, LOW LIMIT, HIGH LIMIT)
+                       /IN THE TABLE IN FIELD 1
+       ISZ TM1         /BUMP ENTRY COUNT
+\fSDLOOK,       CDF 0
+       TAD I LXR
+       SNA
+       JMP I (SVEND-RSOVL1
+       TAD (-",
+       SNA
+       JMP SNUMLP-1
+       TAD (",-";
+       SNA
+       JMP SSTADR
+       TAD (";-"=
+       SNA CLA
+       JMP I (SSBITS-RSOVL1
+KMER5, JMS I [PRMESG
+       TEXT    /BAD ARGS/
+LXRBAK,        0
+       CLA CMA
+       TAD LXR
+       DCA LXR
+       JMP I LXRBAK
+SVDASH,        TAD DASHFG
+       SZA CLA
+       JMP KMER5
+       ISZ DASHFG
+       JMS DASHSB
+       JMP SNUMLP
+SSTADR,        JMS SGTNUM
+       JMP KMER5       /NULL STARTING ADR - ERROR
+       TAD TEMP1
+       AND [7
+       CLL RTL
+       RAL
+       TAD S6203
+       CDF 10
+       DCA I (1601     /STORE AWAY STARTING FIELD
+       TAD TEMP2
+       DCA I (1602     /AND STARTING ADDRESS
+       JMP SDLOOK
+DASHSB,        0
+       TAD TEMP1
+       AND [7
+       DCA OLD1
+       TAD TEMP2
+       AND [7600
+       DCA OLD2
+       JMP I DASHSB
+DASHFG,        0
+OLD1,  0
+OLD2,  0
+
+\fSGTNUM,       0       /GET A NUMBER ROUTINE
+       DCA DIGFLG      /CLEAR DIGIT COLLECTED FLAG
+       DCA TEMP1
+       DCA TEMP2
+       JMS I (STARTX-RSOVL1
+       JMP .+4
+       TAD (20
+       SNA CLA
+       JMP .-4
+       JMS LXRBAK      /SHOVE INDEX BACK
+       TAD DIGFLG      /IS DIGIT PRESENT?
+       SZA CLA
+       ISZ SGTNUM
+       JMP I SGTNUM
+       PAGE
+\f      *2200   /LOADS INTO 600
+SSBITS,        JMS I (SGTNUM-RSOVL1
+       JMP I (KMER5-RSOVL1
+       TAD TEMP2
+       CDF 10
+       DCA I (1603
+       JMP I (SDLOOK-RSOVL1
+SVEND, JMS I [SHNDLR
+       0101
+       0400
+       MSOVL2          /READ IN SECOND PART OF OVERLAY
+       JMP KMONER
+       TAD TM1
+       SNA
+       JMP I (MOVECB-RSOVL2
+       CIA
+       CDF 10
+       DCA I (1600
+               /NOW SORT THE ENTRIES IN THE SEGMENT TABLE ON 
+               /DECREASING FIELD AND INCREASING ADDRESS
+               /WITHIN THE FIELD.
+       TAD (1603
+       DCA P1
+       CLA IAC
+       TAD I (1600
+       SNA
+       JMP I (SORTED-RSOVL2    /RIDICULOUS TO SORT ONE ITEM
+       DCA TEMP1
+OUTRLP,        TAD (3
+       TAD P1
+       DCA P2
+       TAD TEMP1
+       DCA TEMP2
+INERLP,        TAD P1
+       DCA LXR
+       TAD P2
+       DCA X1
+       TAD I LXR
+       CIA CLL
+       TAD I X1
+       SNA CLA
+       JMP TIE         /FIELDS ARE EQUAL - SORT ON ADDRESS IN FIELD
+       SZL
+       JMP SWITCH      /WRONG ORDER - SWITCH 'EM
+TIENTY,        TAD P2
+       TAD (3
+       DCA P2          /INDEX TO NEXT ENTRY
+SWNTRY,        ISZ TEMP2
+       JMP INERLP
+       TAD P1
+       TAD (3
+       DCA P1          /ELEMENT IS IN PLACE - GO TO NEXT POSITION
+       ISZ TEMP1
+       JMP OUTRLP
+       JMP I (SORTED-RSOVL2    /SORT COMPLETE - CHECK FOR CONSISTENCY
+\fTIE,  TAD I LXR
+       CIA CLL
+       TAD I X1
+       SZL CLA         /TEST FOR ADRESSES IN ASCENDING ORDER
+       JMP TIENTY      /YES - DONT HAVE TO SWAP
+SWITCH,        JMS SWSUBR
+       JMS SWSUBR
+       JMS SWSUBR
+       CLA CLL CMA RTL
+       TAD P1
+       DCA P1          /RESET FIRST POINTER
+       JMP SWNTRY      /AND DONT BUMP 2D POINTER, AS WE HAVE JUST BUMPED IT
+SWSUBR,        0
+       ISZ P1
+       ISZ P2
+       TAD I P1
+       DCA TM1
+       TAD I P2
+       DCA I P1
+       TAD TM1
+       DCA I P2
+       JMP I SWSUBR
+P1,    0
+P2,    0
+
+\fSTARTX,       0
+       TAD I LXR       /ANYTHING LEFT?
+       SNA
+       JMP I STARTX    /NO.. TAKE EMPTY RETURN
+       SKP
+ADGTLP,        TAD I LXR
+       TAD (-270
+       CLL             /SEE IF THIS IS A DIGIT
+       TAD [10
+       SNL
+       JMP AONUM       /NO.. GET OUT
+       DCA TMP1
+       ISZ DIGFLG
+       JMS ROT2
+       JMS ROT2
+       JMS ROT2
+       TAD TEMP2
+       TAD TMP1
+       DCA TEMP2
+       JMP ADGTLP      /KEEP LOOKING
+AONUM, ISZ STARTX
+       JMP I STARTX
+
+ROT2,  0
+       TAD TEMP2
+       CLL RAL         /WE NEED THIS BECAUSE THE HANDLER
+       DCA TEMP2       /WIPED THE FIRST COPY (MAYBE!!!)
+       TAD TEMP1
+       RAL
+       DCA TEMP1
+       JMP I ROT2
+       PAGE
+\f      *2400           /LOADS INTO 400 ON TOP OF SAVE1A
+SORTED,        TAD I (1600
+       IAC
+       SNA             /IS THERE ONLY ONE ITEM IN THE LIST?
+       JMP MERGED      /YES - DON'T COMPRESS FURTHER
+       DCA TEMP1
+       TAD (1603
+       DCA X1
+       TAD (1606
+       DCA LXR
+               /NOW CHECK THE SORTED FILE FOR CONSISTENCY
+               /OVERLAPPING SEGMENTS ARE ERRORS,
+               /ABUTTING SEGMENTS ARE TO BE CONDENSED IN
+               /THE INTERESTS OF SPEED
+MRGLP, TAD I LXR
+       CIA
+       TAD I X1
+       SZA CLA
+       JMP NOCMPR      /DIFFERENT FIELDS - INCOMPARABLE
+       ISZ X1
+       TAD I X1
+       CIA
+       CLL
+       TAD I LXR
+       SNA CLA
+       JMP BUTTNG      /UPPER LIMIT(2)=LOWER LIMIT(1) - ABUTTING SEGMENTS
+       SZL CLA
+       JMP NXTONE      /UPPER LIM(2)<LOWER LIM(1) - NORMAL CASE
+       CDF 0           /UPPER LIM(2) > LOWER LIM(1) - ERROR
+       JMS I [PRMESG
+       TEXT    /BAD ARGS/
+BUTTNG,        CLA CMA
+       TAD X1
+       DCA X1
+       TAD I LXR
+       DCA I X1        /SET UPPER LIM(2) = UPPER LIM(1)
+       TAD X1
+       TAD (-1777
+       SZA CLA
+       JMP .-5         /AND COMPRESS OUT THE LOWER ENTRY
+       ISZ I (1600     /DECREMENT THE ENTRY COUNT (CAN'T OVERFLOW)
+       JMP SORTED      /START OVER FROM BEGINNING
+
+NOCMPR,        ISZ X1
+       ISZ X1
+       ISZ LXR
+NXTONE,        ISZ LXR
+       ISZ TEMP1
+       JMP MRGLP       /NOW ALL THAT REMAINS IS TO TRANSFORM OUR TRIPLETS
+                       /INTO THE FORMAT WHICH THE RUN LOADER EXPECTS; I.E.
+               /DEVICE-HANDLER ARGUMENTS
+\fMERGED,       TAD (1603
+       DCA LXR
+       TAD (1603
+       DCA X1
+       TAD I (1603
+       AND (1777
+       TAD (6000
+       DCA I (1603     /INITIALIZE STATUS BITS TO NO OVERLOADS
+       TAD I (1600
+       DCA TEMP1
+MERGLP,        TAD I LXR
+       DCA TEMP2
+       TAD I LXR
+       AND (7400
+       DCA TMP1
+       TAD TMP1
+       DCA I X1        /STORE ADDRESS
+       TAD TMP1
+       CIA
+       TAD I LXR       /FORM UPPER LIM - LOWER LIM
+       CLL RTR
+       RTR
+       TAD TEMP2       /ADD IN FIELD
+       RAL
+       RTL             /ROTATE WHOLE MESS INTO PLACE
+       DCA I X1
+       TAD TMP1
+       CLL RAL
+       SZL SPA CLA     /IS THE LOWER LIMIT < 2000?
+       JMP NXTSEG      /NO
+       TAD TEMP2
+       RAR
+       SZA CLA         /YES- IS THE FIELD 0 OR 1?
+       JMP NXTSEG      /NO
+       SNL
+       IAC
+       CMA CML RTR
+       AND I (1603     /AND OUT THE PROPER OVERLOAD BIT
+       DCA I (1603
+NXTSEG,        ISZ TEMP1
+       JMP MERGLP
+MOVECB,        TAD (1577
+       DCA LXR
+       TAD (577
+       DCA X1
+       TAD [7600
+       DCA TEMP1
+CBMOVE,        CDF 10          /FINAL CODE TO MOVE NEW CONTROL BLOCK
+       TAD I LXR       /INTO PAGE 600 OF FIELD 0
+       CDF 0
+       DCA I X1
+       ISZ TEMP1
+       JMP CBMOVE
+       JMP I (SAVE3            /EXIT TO SAVE PROCESSOR 
+
+\fSGETOUT,0             /REPLACES "GETOUT" WHICH WE'VE STORED OVER
+       TAD I [JSBITS
+       RAL             /ONLY PERFORMS THOSE FUNCTIONS THAT "SAVE" NEEDS
+       SPA CLA
+       JMP I SGETOUT
+       CIF 10
+       JMS I SYSTEM
+       11
+DECIMB,        JMP I SGETOUT   /DECIMB ONLY CALLED BY NEXT PAGE
+                       /PART OF NEXT PAGE'S ROUTINE:
+       TAD NM2         /ALL NEW FOR V3D
+       TAD NM4         /ONLY ALLOW 2 CHARS FOR MM
+       SNA CLA
+       ISZ DECIMB
+       TAD NM1
+       RTR
+       RTR
+       JMP I DECIMB
+       PAGE
+\f      *2600           /DATE PROCESSOR - LOADS IN 400, RUNS IN 600
+DATEXX,        JMS DECIM
+NUM2,  DCA NUM2
+       TAD NUM2
+       TAD M40
+       SMA CLA
+       JMP BADNUM      /DAY > 31
+       JMS I GNAME
+L30,   30              /NOTHING FOUND WILL GIVE ERROR LATER
+/      DCA NUM1        /NUM1 IS INITIALLY 0
+NEWLUP,        ISZ MONPTR
+       ISZ NUM1
+       TAD I MONPTR
+       ISZ MONPTR
+       SMA
+       JMP BADNUM      /SYMBOLIC MONTH NOT FOUND
+       TAD NM1
+       SNA CLA         /SKIP IF FIRST 2 LETTERS DON'T MATCH
+       TAD NM2
+       TAD I MONPTR
+       SZA CLA
+       JMP NEWLUP      /SECOND 2 LETTERS DON'T MATCH
+/*** TEST DELIMETER HERE
+       TAD NUM1
+       CLL RTL
+       RTL
+       RAL
+       TAD NUM2
+       RTL
+       RAL
+       DCA NUM2
+       DCA DDELIM      /MAKE END-OF-LINE THE DELIMITER
+       JMS DECIM
+       TAD (-106       /SCALE DOWN TO RANGE 1970-1999
+       SPA
+       JMP BADNUM      /DIDN'T MAKE THE RANGE
+       DCA NUM1
+       TAD NUM1
+       AND L30         /ISOLATE EXTENSION DATE BITS
+       CLL RTL
+       RTL
+       DCA TM1
+       TAD I (BIPCCL
+       AND L7177       /STORE THEM INTO BITS RESERVED FOR THIS PURPOSE
+       TAD TM1
+TSLUP, DCA I (BIPCCL
+       TAD NUM1
+       AND [7
+       TAD NUM2        /COMBINE WITH MONTH AND DAY
+       CDF 10
+       DCA I (MDATE    /STORE IN SYSTEM DATE CELL
+       TSF             /7605 SETS THE DF
+       JMS L7177       /TIME OUT A BIT
+       JMP I [7605     /IN CASE RUNNING UNDER BATCH
+L7177, 7177            /JMS IS LONGER THAN JMP
+       ISZ DDELIM      /DDELIM IS 0 AT END
+       JMS TSLUP       /WAIT FOR TELETYPE TO DIE DOWN (RF08)
+       JMP I [7605     /RETURN TO MONITOR
+\fDDELIM,       -"-
+
+/WOULD LIKE TO BRANCH TO CCLSW-1 IF DATE ENDED WITH ALTMODE
+
+CNV,   0
+       AND [77
+       SNA
+       JMP NUL
+       TAD (-60
+       SPA
+       JMP BADNUM
+       JMP I CNV
+NUL,   TAD TM1
+       JMP GODE
+
+DECIM, 0
+       JMS I GNAME
+M40,   -40             /NOTHING THERE (LOGIC WILL CAUSE ERROR LATER)
+       TAD TMP
+       TAD DDELIM      /COMPARE AGAINST DESIRED DELIMETER
+       SNA CLA         /DASH OR NULL
+       JMS I (DECIMB-2400+400
+       JMP BADNUM      /DELIMETER BAD
+       RTR
+       JMS CNV
+       DCA TM1
+       TAD TM1
+       CLL RTL
+       TAD TM1
+       RAL
+       DCA TEMP2
+       TAD NM1
+       JMS CNV
+       TAD TEMP2
+GODE,  SZA
+       JMP I DECIM
+BADNUM,        CLA             /CRAP IN AC
+       TAD [7605
+       DCA ERRET
+       JMS I [PRMESG
+       TEXT    /BAD DATE/
+NUM1,  0               /MONTH NUMBER (MUST BE 0 INITIALLY)
+\fMONS, -1201   /JAN
+       -1600
+       -0605   /FEB
+       -0200
+       -1501   /MAR
+       -2200
+       -0120   /APR
+       -2200
+       -1501   /MAY
+       -3100
+       -1225   /JUN
+       -1600
+       -1225   /JUL
+       -1400
+       -0125   /AUG
+       -0700
+       -2305   /SEP
+       -2000
+       -1703   /OCT
+       -2400
+       -1617   /NOV
+       -2600
+       -0405   /DEC
+       -0300
+MONPTR,        MONS-2600+600-1 /RELOCATES TO PAGE 600
+                       /MUST BE POSITIVE
+
+       PAGE
+\f      *3000   /MONITOR ERROR PROCESSOR - LOADS INTO 11400
+DLYLPX,        AND I 0
+D7600, 7600
+       TAD MERRNO
+       CLL RAL
+       ISZ I (ZERO-1400
+       ISZ I (ZERO-1400        /V3C
+       ISZ I (ZERO-1400
+       JMP DLYLPX      /WAIT FOR TELEPRINTER (WITHOUT CDF'S)
+       SNA
+       JMP USRERR
+       CLL RAL
+       RTL
+       RTL
+       TAD (6040
+       DCA I (MERTYP-1400
+MERCMN,        TAD (MERRXR-1400
+       JMS EPRINT
+       TAD I (FPUTX
+       RTR
+       RAR
+       AND (7
+       TAD (60
+       JMS MERPCH
+       CLA CLL CMA RAL
+       TAD I (MONITO
+       RAL
+       DCA T1
+       TAD (-4
+       DCA T2
+MEROLP,        TAD T1
+       RTL
+       RAL
+       DCA T1
+       TAD T1
+       AND (7
+       TAD (60
+       JMS MERPCH
+       ISZ T2
+       JMP MEROLP
+       TAD MERRNO
+       CLL RAL
+       SNA
+       JMP NOEXPL      /NO EXPLANATION FOR USER ERRORS
+       CLL RAR
+       TAD (EXPLTBL-1401       /PRINT EXPLANATION
+       DCA T1          /GET ADDRESS INTO MESSAGE TABLE
+       TAD (240
+       JMS MERPCH
+       TAD ("(
+       JMS MERPCH
+       TAD I T1        /GET ADDRESS OF MESSAGE
+       JMS EPRINT
+       TAD (")
+       JMS MERPCH
+       TAD MERRNO
+NOEXPL,        TAD (3773
+       SPA CLA
+       CLA CMA
+       DCA I (7700
+       DCA OLDT9
+       CLA CLL CML RAR
+       DCA MERRNO
+       CDF 0
+       TAD I (JSBITS
+       AND (6777
+       TAD (1000
+       DCA I (JSBITS   /SET THE CURRENT JOB UNSTARTABLE
+       CDF CIF 0
+       JMP I D7600
+USRERR,        CLA CLL
+       JMS I (FGET
+       TAD (4060
+       DCA I (UERTYP-1400
+       TAD (UERRXR-MERRXR
+       JMP MERCMN
+MERPCH,        0
+       TLS
+       TSF
+       JMP .-1
+       CLA
+       JMP I MERPCH
+ZERO,  0
+\fEPRINT,       0
+       DCA T2
+EPRLUP,        TAD I T2
+       RTR
+       RTR
+       RTR
+       JMS EPR
+       TAD I T2
+       JMS EPR
+       ISZ T2
+       JMP EPRLUP
+
+EPR,   0
+       AND (77
+       SNA
+       JMP I EPRINT
+       TAD (240
+       AND (77
+       TAD (240
+       JMS MERPCH
+       JMP I EPR
+       PAGE
+\f      *3200           /LOADS INTO 1600
+
+MERRXR,        TEXT    \MONITOR ERROR 0 AT \
+       MERTYP=MERRXR+7
+
+UERRXR,        TEXT    \USER ERROR 0 AT \
+       UERTYP=UERRXR+5
+
+EXPLTBL,MON1-1400
+       MON2-1400
+       MON3-1400
+       MON4-1400
+       MON5-1400
+       MON6-1400
+       MON7-1400
+
+MON1,  TEXT    \CLOSE ERROR\
+MON2,  TEXT    \DIRECTORY I/O ERROR\
+\fMON3, TEXT    \DEVICE HANDLER NOT IN CORE\
+MON4,  TEXT    \ILLEGAL USR CALL\
+MON5,  TEXT    \I/O ERROR ON SYS:\
+MON6,  TEXT    \DIRECTORY OVERFLOW\
+MON7,  TEXT    \RESERVED\
+\f              /EXECUTION TIME LOADER FOR MONITOR "CHAIN" COMMAND
+       *3400   /EXECUTES IN FIELD 0 IN PAGE 7400
+MCHNX, DCA MCHREC              /STORE STARTING RECORD #
+       TAD MCHREC
+       DCA I (SOFSET   /V3D SAVE STARTING ADDRESS
+       CIF 10
+       JMS I (200
+       13              /RESET ALL DEVICE ASSIGNMENTS
+       0               /BUT DON'T CLEAR OUTPUT FILES
+       CIF 10
+       JMS I (200
+       11              /KICK MONITOR OUT AND RESTORE CORE IF NECESSARY
+       JMS MCHRD       /PARAMETERS PRESET TO READ CONTROL BLOCK INT0 7200
+       TAD I (7200     /TEST FOR SAVE FILE!
+       CMA             /TEST FOR VALID CCB
+       AND (7740
+       SZA CLA
+       JMP CHERR
+       TAD I (7201
+       DCA I (MSTCDF   /TRANSFER INFORMATION FROM CONTROL BLOCK
+       CLA IAC
+       TAD I (7202
+       DCA I (MSTADR   /TO PAGE 7600
+       TAD I (7203
+       TAD (1000
+       DCA I (JSBITS
+       TAD (7204
+       DCA MCHT1
+       TAD MCHFJM
+       DCA I (MSWITC
+       TAD (TCF
+       DCA I (MSTCDF+1
+MCHN1, ISZ I (7200
+       JMP MCHN2
+       TAD I MCHT1
+       DCA I (MREAD+2
+       ISZ MCHT1
+       TAD I MCHT1
+       DCA I (MREAD+1
+       TAD MCHREC
+       DCA I (MREAD+3
+       TAD (SHNDLR
+       DCA I (MREAD-1
+       JMP I (MREAD
+MCHN2, TAD I MCHT1
+       DCA MCHADR      /SET UP COMMAND TO READ NEXT SEGMENT
+       ISZ MCHT1
+       TAD I MCHT1
+       DCA MCHCTL
+       JMS MCHRD       /READ IT
+       ISZ MCHT1
+       JMP MCHN1       /LOOP ON NUMBER OF SEGMENTS
+\fMCHRD,        0
+       JMS I (SHNDLR
+MCHCTL,        0101            /1 RECORD INTO FIELD 0 STARTING FORWARDS
+MCHADR,        7200
+MCHREC,        0
+       JMP CHERR       /CHAIN ERROR
+       TAD MCHCTL
+MCHBMP,        CLL RTR
+       RTR
+       RTR
+       AND (37
+       SNA             /V3C
+       TAD (40         /0 MEANS FULL 4K READ
+       IAC
+       CLL RAR
+       TAD MCHREC
+       DCA MCHREC
+       JMP I MCHRD
+MCHT1, 0
+MCHFJM,        MSTCDF&177+5200 /"JMP MSTCDF"
+
+CHERR, ISZ CHERR1
+       JMP CHERR       /LET TTY DIE DOWN
+       ISZ CHERR2
+       JMP CHERR
+CHTADC,        TAD CHARS
+       SNA
+       JMP I (7600     /DONE..BACK TO MONITOR
+       TLS
+       TSF
+       JMP .-1
+       CLA
+       ISZ CHTADC      /NEXT LETTER
+       JMP CHTADC
+\fCHERR1,       0
+CHERR2,        -6
+CHARS, "C;"H;"A;"I;"N;" ;"E;"R;"R;215;212;0
+       PAGE
+\f      *4000   /SYSTEM GENERATOR - WRITES STUFF OUT USING SHNDLR
+       WRITE=JMS I SYSHND
+       JMS SYSSWP      /SWAP SYSTEM DEVICE HANDLER INTO 7600
+
+       WRITE;  4200;   7400;   0;      JMP BERR        /BOOTSTRAP
+       TAD RBFLAG
+       SZA CLA
+       JMP .+6
+       WRITE;  4210;   DCOUNT; 01;     JMP BERR        /DIRECTORY
+       WRITE;  5001;   0000;   07;     JMP BERR        /KEYBOARD MONITOR
+       WRITE;  4610;   0000;   MONTOR; JMP BERR        /USR
+       WRITE;  4111;   3400;   MEOVLY; JMP BERR        /"ENTER" OVERLAY
+       WRITE;  4701;   2000;   MSOVLY; JMP BERR        /SAVE OVERLAY,
+                                       /ERROR ROUTINE AND "CHAIN"
+       TAD RBFLAG
+       SZA CLA
+       JMP .+13
+       WRITE;  4101;   LDRCTL; MFREE;  JMP BERR        /ABSLDR CONTROL BLOCK
+       WRITE;  5010;   2000;MFREE+1;   JMP BERR        /ABSLDR
+       JMS I (4200     /OUTPUT THE DEVICE HANDLERS
+       JMP BERR
+       JMS SYSSWP      /SWAP BACK PAGE 7600
+       CLA CMA
+       HLT
+       CLA
+       JMP I .+1
+BERR,  7600
+       JMS SYSSWP
+       HLT
+       JMP .-1
+W6600, 6600
+W7600, 7600
+SYSSWP,        0
+       TAD W6600
+       DCA SYTM1
+       TAD W7600
+       DCA SYTM2
+SWAPLP,        TAD I SYTM1
+       DCA TMSY
+       TAD I SYTM2
+       DCA I SYTM1
+       TAD TMSY
+       DCA I SYTM2
+       ISZ SYTM1
+       ISZ SYTM2
+       JMP SWAPLP
+       JMP I SYSSWP
+
+       /CONTROL BLOCK FOR ABSOLUTE LOADER
+LDRCTL,        7777    /ONE CONTIGUOUS LOAD
+       6213    /STARTING ADDRESS IN FIELD 1
+       2000    /STARTING LOCATION=12000
+       6003    /DOES NOT LOAD OVER EITHER MONITOR AREA
+               /ALSO DOES NOT USE THESE AREAS AT COMMAND TIME - TRUE
+               /ONLY FOR FIRST CALL TO COMMAND DECODER
+       2000    /FIRST(AND ONLY) SEGMENT STARTS AT 2000
+       1010    /IN FIELD 1 AND IS 10 PAGES LONG
+
+       IFNZRO LDRCTL-4113 <BLDER,XQX>
+
+SYTM1, 0
+SYTM2, 0
+TMSY,  0
+SYSHND,        7607
+       PAGE
+\f      *7400
+       NOPUNCH
+       *7600
+       ENPUNCH
+       /UPPER PAGE OF FIELD 1 - CHOCK FULL OF GOODIES
+       /LIKE THOUSANDS OF TABLES AND THE MONITOR CALL LOCATION
+
+MOFILE,        ZBLOCK 17       /OUTPUT FILE TABLE - 7600-7616 (3 ENTRIES MAX)
+                       /5 WORDS PER ENTRY - DEVICE # AND FILE NAME
+MIFILE,        ZBLOCK 24       /INPUT FILE TABLE - 7617-7642 (10 ENTRIES MAX)
+                       /2 WORDS PER ENTRY - DEVICE # AND RECORD #
+
+                       /LAST WORD IN TABLE CONTAINS TERMINATION INDICATOR
+                       /(0 FOR CR, 1 FOR ALTMODE) AND HIGH ORDER
+                       /PART OF NUMERICAL ARGUMENT
+
+MPARAM,        ZBLOCK 4        /PARAMETER TABLE - 7643-7646
+                       /FIRST 3 WORDS - MASK OF SWITCHES(A-Z,0-9).
+                       /FOURTH WORD - CONTAINS THE LOW ORDER BITS OF
+                       /THE NUMERICAL ARGUMENT
+
+
+
+                       /TABLE OF DEVICE HANDLERS PRESENTLY IN CORE
+DVHNDL,        7607;7607;0;0;0;0;0
+       0;0;0;0;0;0;0;0
+MDATE, 0               /HOLDS THE CURRENT DATE- 4 BIT MONTH,
+                       /5 BIT DAY, 3 BIT YEAR FROM 1970
+MGET,  CIF 0
+       JMS SHNDLR      /INST FIELD IS 0
+       1000            /READ 4 RECORDS INTO FIELD 0
+       0               /LOCATIONS 0-1777
+       7               /KEYBOARD MONITOR FOLLOWS DIRECTORY
+PJSBTS,        JSBITS          /SERVES AS A HALT (WATCH IT!)
+SCDCIF,        CDF CIF 0
+       JMP I .+1
+       KMNTRY          /V3D GETS CHANGED TO INIT
+\fMCALL1,       0
+       DCA MARG1       /SAVE AC AS IT MAY CONTAIN AN ARGUMENT
+       RDF     /GET CALLING FIELD
+       TAD SCDCIF
+       DCA SMCIF
+       CDF 0
+       TAD I PJSBTS
+       RAR
+       CDF 10
+       SZL CLA         /DOES JOB USE LOCS 10000-11777?
+       JMP MONRD       /NO - DONT SAVE THEM
+       CIF 0
+       JMS SHNDLR
+       5010
+       0
+       MTEMP
+       HLT
+MONRD, CIF 0
+       JMS SHNDLR
+       610
+       0
+       MONTOR
+SCOPE, HLT             /BIT 4 IS A 1 IF CONSOLE IS A SCOPE
+       JMP MSTART      /START THE MONITOR UP IN PAGE 0
+MRETRN,        CIF 0
+       JMS SHNDLR
+       1010    /READ 10 RECS INTO FIELD 1
+       0
+       MTEMP   /TEMP REGION ON SYS
+       HLT     /SYS HAS PROBLEMS
+SMCIF, 0
+       JMP I MCALL1
+\fMARG1,        0
+                       /TABLE OF USER DEVICE NAMES
+                       /ALSO USED BY SYSTEM ODT
+
+UDNAME,        0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
+\fDCB,  ZBLOCK 17               /DEVICE CONTROL BLOCK - SET IN "CONFIG"
+
+
+
+
+
+
+
+
+
+       /********************************************************
+       /       MAP OF SYSTEM DEVICE AS OF 2/21/73
+       /********************************************************
+       /            *   256 WORD RECORDS   *
+       /********************************************************
+
+       /       RECORDS    CONTENTS
+       /       -------    --------
+
+       /        0      MONITOR BOOTSTRAP
+       /        1- 6   SYSTEM DIRECTORIES
+       /        7-12   KEYBOARD MONITOR
+       /       13-15   I/O MONITOR(CALLABLE MONITOR)
+       /       16-25   DEVICE HANDLER RECORDS
+       /       26      MONITOR "ENTER" OVERLAY
+       /       27-50   MONITOR SCRATCH AREA FOR SAVING CORE
+       /       51-53   COMMAND DECODER
+       /       54-55   "SAVE WITH ARGUMENTS" AND "DATE" OVERLAYS
+       /       56      MONITOR ERROR ROUTINE
+       /       57      "CHAIN" PROCESSOR
+       /       60-63   SYSTEM ODT
+       /       64      RESERVED FOR EXPANSION
+       /65     CCL REMINISCENSES
+       /       66      USED BY TWO-PAGE SYS HANDLER
+       /       67      USED BY CCL (CCL OVERLAY)
+       /       70-END  FILE STORAGE
+\f      SHNDLR=7607     /ENTRY POINT TO SYSTEMS HANDLER
+
+       *6600
+       NOPUNCH
+       *7600
+       ENPUNCH
+
+       /SYSTEM HANDLER AND FIELD 0 UPPER PAGE
+       /INCLUDES BOOTSTRAP AND PART OF MONITOR CALL ROUTINE
+       DVHORG=16       /DEVICE HANDLER RECORDS
+       MTEMP=27
+       MONTOR=13
+       JMS SHNDLR
+       5000            /SAVE MONITOR CORE - WRITE 5 RECORDS FROM FIELD 0
+       0               /(LOCATIONS 0-1777)
+       MTEMP+4
+       7602            /TROUBLE WITH SYSTEM DEVICE
+       CDF CIF 10
+       JMP MGET        /NOW GO READ IN THE KEYBOARD MONITOR
+\f      *6744   /INFORMATION ABOUT CURRENT JOB
+       NOPUNCH
+       *7744
+       ENPUNCH
+JFIELD,        6203    /A CDF CIF N INSTRUCTION TO START THE JOB
+JSTART,        7600    /THE STARTING ADDRESS
+JSBITS,        1000    /VARIOUS STATUS BITS - USED FOR OPTIMIZATION
+               /BIT 4000 - JOB DID NOT LOAD INTO 00000-01777
+               /BIT 2000 - JOB DID NOT LOAD INTO 10000-11777
+               /BIT 1000       - JOB IS NOT RESTARTABLE
+               /BIT 400 - DOESN'T DESTROY BATCH MONITOR
+               /BIT 2    - JOB DOES NOT USE LOCS 00000-01777
+               /BIT 1    - JOB DOES NOT USE LOCS 10000-11777
+SOFSET,        0       /FOR FUTURE(AND MAYBE PRESENT) USE
+
+       /DATA BREAK FILLERS FOR SYSTEM BOOTSTRAP
+       7750
+       7751
+       7752
+       7753
+       7754
+       7755
+               /MONITOR PATCH TO HELP BLEEP LOADER
+       0       /ADDRESS OF HANDLER FOR DEVICE USED
+MREAD, JMS I .-1
+       0
+       0
+       0
+       HLT
+MSWITC,        JMP .+6 /ZEROED IF PG 7000 (HANDLER) MUST BE READ OVER
+       JMS SHNDLR
+       0300
+       7000            /THIS AREA MODIFIED BY ODT
+       MTEMP+6
+OS78,  HLT             /BIT 4 IS A 1 IF OS/78 IS RUNNING
+MSTCDF,        CDF CIF 0
+       TCF             /EXIT WITH A CLEAR CONSCIENCE(ALSO A CLEAR FLAG)
+       JMP I .+1
+MSTADR,        0
+SBLOCK,        0
+BIPCCL,        0       /MORE STATUS BITS.
+               /BIT 1: 1=> BATCH IS IN PROGRESS
+               /BITS 6-8: FIELD OF BATCH MONITOR
+               /HIGHEST CORE FIELD USED BY OS/8
+               /OR 0 TO MEAN OS/8 MAY USE ALL OF CORE
+\f      *0
+       VERSNO          /OS/8 VERSION 3
+KMONER,        CLA
+       TAD [7605
+       DCA ERRET
+       JMS I [PRMESG
+       TEXT    /SYSTEM ERR/
+
+/THE FOLLOWING REGISTERS ARE SET TO VITAL INITIAL VALUES. TO ALTER
+/THESE VALUES IS TO BRING DISASTER DOWN UPON YOUR HEAD!
+
+LXR,   PMSRST-1
+X1,    MSWITC  /THESE TWO ARE USED AT INITIALIZATION.
+ADR1,  RUN8-1
+ADR2,  RUN8&177+7377   /USED DURING R, AND RUN COMMANDS
+XR,
+AMFLAG,        0               /1 MEANS SAW ALTMODE
+                       /MUST NOT MOVE FOR CCL AND BATCH
+
+       *20
+RBFLAG,        0               /MUST BE AT LOCATION 20
+TEMP2, -7
+SYSTEM,        7700
+PCH,   PRINT
+GLINE, XGLINE
+GNAME, GETNAM
+DEVHND,        7607
+FUDJMP,        MSTCDF&177+5200
+P6203, 6203
+TMP,   PATCHLEV        /MONITOR PATCH LEVEL MUST BE AT LOC 31 FOR CCL
+PGTOUT,        GETOUT
+ERRET, PCRLF           /MUST BE AT 33 FOR CCL
+
+/THE FOLLOWING LOCS. ARE TEMPORARIES. HOWEVER, THERE IS NOW
+/VITAL ONCE ONLY CODE TO HELP THE BATCH PROCESSOR. THIS CODE IS
+/READ IN EVERY TIME THE KEYBOARD MONITOR IS RE-READ.
+
+NM1,   203             /THIS MUST BE  A 203!
+BATCH,                 /ENTRY TO READ NEW BATCH MONITOR
+NM2,   JMS I [7607     /THE BATCH INITIALIZER ALTERS  SOME VALUES
+NM3,   610             /IN THIS LIST...THIS ONE**********
+NM4,   0               /THIS ONE*****GETS ADDRESS OF BOS.
+TEMP1, 13              /******GETS RECORD OF BOS*****
+TM1,   SKP CLA         /ERROR. DON'T RUN BATCH
+TMP1,  JMP BCHGO
+NMCT,  DCA I KM1       /CLEAR BATCH FLAG.
+PN,    JMP KMONER
+PRDSW,
+KM1,   7777
+BCHGO,
+RUNSW, CIF CDF 0
+DIGFLG,        JMP I .+1
+SENTER,        KMINIT  /GETS ENTRY POINT (BOS)
+KRCHK, RCHK
+\f      FIELD 1
+\f      /FIELD 1
+       /OS/8 MONITOR - MONITOR ROUTINES
+       /THIS MONITOR IS CALLED INTO CORE BY A JMS 7700 IN FIELD 1
+       /IT REPLACES CORE FROM 200-1777
+       /AND INTERPRETS THE WORDS AFTER THE JMS AS A MONITOR FUNCTION
+       /MONITOR FUNCTIONS ARE ASSIGN,LOOKUP,ENTER,ETC.
+       MAXCMD=13
+       *200
+MONITO,        0       /MONITOR SUBROUTINE
+       DCA MACARG      /STORE AC ARG
+       DCA USERFG      /SET FLAG TO INDICATE WE WERE CALLED DIRECTLY
+       RDF     /GET CALLING FIELD
+       TAD [CDF CIF 0
+       DCA FGETX
+MRENTR,        TAD FGETX
+       DCA FPUTX       /FOR LOADING AND STORING CALLING SEQUENCE
+       JMS FGET        /GET FIRST ARGUMENT[AND SET DATA FIELD 1)
+       ISZ MONITO
+       CLL
+       TAD [-MAXCMD-1
+       SZL
+       JMP MERROR
+       TAD JMPMAX
+       DCA .+1         /BRANCH TO APPROPRIATE ROUTINE WITH LINK ON
+FGET,  0               /MUST PRESERVE LINK
+       TAD MONITO
+       JMS FGETW
+       JMP I FGET
+/MONITOR COMMAND DISPATCH TABLE MUST BE JAMMED BEFORE 'FPUT'
+       MERROR
+       MASSIGN
+       MLOOKUP
+       MENTER
+       MCLOSE
+       MCD
+       MCHAIN
+       MERR
+       MESCAP
+       MESCPR
+       MASGN
+MRSETP,        MRESET
+FPUT,  0               /MUST FOLLOW LAST ADDRESS IN JUMP TABLE
+FPUTX, 0
+       DCA I MONITO
+       CDF CIF 10
+JMPMAX,        JMP I FPUT
+MEOERR,        ISZ MERRNO
+MIOERR,        ISZ MERRNO
+MERROR,        ISZ MERRNO
+       ISZ MERRNO
+       ISZ MERRNO
+       ISZ MERRNO
+MERR,  CLA
+       CIF 0
+       JMS I [SHNDLR
+       0210
+       1400
+       MERRTN
+       HLT
+       JMP I .-3
+\fMCD,  CLA CLL CML RAR
+       JMS CDSWAP      /SWAP OUT CORE IF NECESSARY
+       JMS FGET
+       DCA T1
+       CIF 0
+       JMS I [SHNDLR
+       0601
+       0
+       MCDREC
+       JMP  MIOERR
+       TAD FPUTX
+       CDF CIF 0
+       JMS I [200
+       DCA FPUTX
+       TAD FPUTX
+       DCA FGETX
+       JMS CDSWAP      /RESTORE THE SWAPPED CORE IF NECESSARY
+       STL             /LINK MUST BE ON AT MRESET
+       JMP I MRSETP    /AFTER CD, RESET DEVICE AREA
+MCHAIN,        JMS FGET
+       DCA T1          /BUFFER THE ARGUMENT
+       CIF 0
+       JMS I [SHNDLR
+       0101
+       7400
+       MRUNRC
+       JMP MIOERR
+       TAD T1          /LOAD THE BUFFERED ARGUMENT
+       CDF CIF 0
+       JMP I .-5
+MLNOTF,        CLA
+       ISZ MONITO
+MNEXT, TAD USERFG
+MESCAP,        CLL RAR
+       TAD MONITO
+       DCA I [7700
+       TAD FPUTX
+       DCA I [SMCIF
+       CLA IAC CML
+       CDF 0
+       AND I [JSBITS
+       CDF 10
+       RAR
+       SZL SPA CLA     /RESTORE CORE IF USERFG=1 AND JSW[11]=0
+       JMP I [SMCIF
+       JMP I [MRETRN
+MESCPR,        CLL CML
+       JMP MESCAP+1
+FGETW, 0
+       DCA FPUT
+FGETX, HLT
+       TAD I FPUT
+       CDF CIF 10
+       JMP I FGETW
+\fCDSWAP,       0
+       TAD ME1000      /FORM READ OR WRITE OPERATION
+       DCA MCDCTL
+       CDF 0
+       TAD I [JSBITS
+       CDF 10
+       RTR
+       SZL CLA /IS IT NECESSARY TO SAVE CORE?
+       JMP I CDSWAP    /NO
+       CIF 0
+       JMS I [SHNDLR
+MCDCTL,        0
+       0
+       MTEMP+4
+       JMP MIOERR
+       JMP I CDSWAP
+
+EOVFLO,        CIF 0
+       JMS I [SHNDLR
+       0111
+ME1000,        1000            /ENTER OVERLAY LOADS OVER ENTER (NATCH)
+       MEOVLY
+       JMP MIOERR
+       JMP I ME1000
+\f      *400
+       /ASSIGN PROCESSOR - TRANSLATE DEVICE NAME INTO DEVICE NUMBER
+       /(IF NECESSARY),GET DEVICE HANDLER INTO CORE(IF NECESSARY)
+       /AND ADJUST TABLES(IF NECESSARY).  IS THIS REALLY NECESSARY?
+MASGN, CLA IAC
+MASSIGN,       DCA ASFLAG
+       TAD MACARG
+       SZA             /IS DEVICE NUMERIC OR SYMBOLIC?
+       JMP DFOUND      /NUMERIC
+       JMS I [FGET     /GET HIGH ORDER 2 CHARS OF NAME
+       ISZ I [MONITO
+       SNA
+       JMP I [MRTRN+1          /FIRST WORD OF NAME MUST BE NON-ZERO
+       DCA NAME
+       JMS I [FGET
+       SNA             /IS NAME >2 CHARACTERS LONG?
+       JMP NOHASH      /NO - DON'T HASH
+       TAD NAME
+       RAL
+       CLL CML RAR     /FORCE SIGN BIT OF HASH NAME ON
+       DCA NAME
+NOHASH,        TAD [UDNAME-1   /SEARCH USER NAME TABLE FIRST
+DSRCH, DCA XR
+       TAD [-17
+       DCA T2
+DSRCLP,        TAD I XR
+       CIA
+       TAD NAME
+       SNA CLA
+       JMP DSFND
+       ISZ T2
+       JMP DSRCLP
+       TAD XR
+       SMA CLA         /WHICH TABLE DID WE JUST SEARCH?
+       JMP I [MRTRN+1  /SYSTEM TABLE - ERROR
+       TAD [SDNAME-1
+       JMP DSRCH       /GO SEARCH SYSTEM TABLE
+DSFND, TAD T2
+       TAD [20
+       JMS I [FPUT     /PUT NUMBER INTO CALLING SEQUENCE
+       JMS I [FGET     /GET IT BACK IN AC, BUMPING POINTER
+       ISZ I [MONITO
+DFOUND,        JMS I [MCKDEV   /DETERMINE ITS VALIDITY (NON-ZERONESS)
+                       /AND FORM POINTERS
+       SNA             /IS THE DEVICE HANDLER IN CORE?
+       TAD I T2
+       SNA             /DOES A HANDLER EXIST FOR THE DEVICE?
+       JMP I [MLNOTF   /NO - SAME AS THE DEVICE NOT EXISTING
+       CMA RAL         /GET THE COMPLEMENT OF THE HIGH ORDER BIT INTO THE LINK
+       SNL CLA         /TWO PAGE HANDLER?(IF HANDLER IS IN CORE,
+                       /THIS TEST IS RANDOM BUT WE DON'T CARE)
+       TAD [100        /YES - FORCE A TWO-PAGE READ
+       TAD [100
+       DCA DVHCTL
+       TAD T1
+       DCA T7          /SAVE T1 AS WE WILL DESTROY IT LATER
+       TAD I T1
+       TAD ASFLAG
+       SZA CLA         /DOES HE ACTUALLY WANT US TO LOAD THE SILLY THING?
+       JMP AFINIS      /NO - HE MUST HAVE TASTE.
+       JMS I [FGET             /FETCH PAGE IN WHICH HANDLER IS TO BE LOADED
+       RAR             /GET THE LINK, WHICH HAS BEEN UNTOUCHED SINCE WE
+                       /PUT THE "TWO PAGE HANDLER" FLAG INTO IT
+       SNL SMA         /IF THIS HANDLER IS TWO-PAGE, IS HE ALLOWING IT TO BE?
+       JMP I [MLNOTF   /NO - GIVE AN ERROR RETURN
+       RAL             /YES - ROTATE BACK
+       AND [7600               /MAKE IT LEGAL
+       DCA DVHLOC
+       JMS GETREC
+       DCA DVHREC
+       CIF 0
+       JMS I [SHNDLR
+DVHCTL,        0               /READ ONE OR TWO PAGES INTO FIELD 0
+DVHLOC,        0
+DVHREC,        0
+       JMP I [MIOERR   /SYSTEM DEVICE ERROR
+               /NOW GO THROUGH THE TABLE OF AVAILABE HANDLERS
+       TAD [-17        /AND MARK OFF THOSE WHICH ARE NOW IN CORE
+       DCA T4
+DVHCLP,        TAD T4
+       JMS I [MCKDEV   /LOW ORDER BITS OF T4 GO THROUGH 1-17
+       CMA
+       TAD DVHLOC
+       CLL CML RAR
+       TAD DVHCTL      /IF A HANDLER ENTRY POINT IS WITHIN 200 WORDS OF THE
+       SMA CLA         /LOADING ADDRESS (400 FOR A TWO-PAGE HANDLER)
+       DCA I T1        /MARK IT AS WIPED
+       JMS GETREC
+       CIA
+       TAD DVHREC
+       SZA CLA
+       JMP NOTINC
+       TAD I T2
+       AND [177
+       TAD DVHLOC
+       DCA I T1
+NOTINC,        ISZ T4
+       JMP DVHCLP
+AFINIS,        TAD I T7
+       JMP I [MRTRN    /STORE HANDLER ADDRESS AND EXIT
+\fGETREC,       0
+       TAD I T2        /GET RECORD OF DEVICE HANDLER
+       CLL RTL
+       RTL
+       RTL             /EXTRACT THE RECORD NUMBER
+       AND [17
+       TAD [DVHORG-1   /ADD THE BASE OF DEVICE HANDLER STORAGE
+       JMP I GETREC
+
+MCKDEV,        0               /MUST PRESERVE LINK
+       AND [17
+       SNA
+       JMP I [MERROR   /DEVICE 0 IS ILLEGAL
+       DCA NAME
+       TAD NAME
+       TAD [SDVHND-1   /FORM POINTER INTO HANDLER IMAGE TABLE
+       DCA T2
+       TAD NAME
+       TAD [DVHNDL-1
+       DCA T1
+       TAD NAME
+       TAD [DCB-1
+       DCA T8          /FORM POINTER TO DCB ENTRY FOR DEVICE
+       TAD I T1
+       JMP I MCKDEV
+
+       IFNZRO .-564    <REASSEMBLE CONFIG>
+SDNAME,        ZBLOCK 17               /SYSTEM DNAME TABLE - SET UP BY "CONFIG"
+\f      IFZERO .+200&1000       <*600>
+       /LOOKUP PROCESSOR - GETS THE STARTING BLOCK OF AN INPUT FILE
+       /ON A SPECIFIED DEVICE.SKIPS IF FILE WAS FOUND OR DEVICE
+       /IS NOT FILE ORIENTED
+MLOOKUP,CLL            /SET RDCAT MODE TO INPUT
+       JMS MRDCAT
+       JMP ERETRN      /NON-FILE STRUCTURED DEVICE
+       JMS MDSRCH      /SEARCH THE DIRECTORY FOR THE FILE
+       JMP MRTRN+1     /NOT FOUND - TAKE ERROR RETURN
+LRETRN,        TAD T5
+       CIA
+       TAD I [DORG     /CONVERT T5 TO A RECORD NUMBER
+ERETRN,        JMS I [FPUT
+       ISZ I [MONITO
+       TAD T6
+       CIA             /STORE FILE LENGTH AS A NEGATIVE NUMBER
+MRTRN, JMS I [FPUT     /THIS CODE IS JUMPED TO BY SEVERAL ROUTINES
+MRTRN2,        ISZ I [MONITO
+       JMP I [MLNOTF
+
+MRDCAT,        0
+       SZA
+       JMP MRDREN      /NOT THE FIRST SEGMENT - DON'T SET UP POINTERS
+       DCA T5          /ZERO STARTING BLOCK NUMBER
+       DCA T6          /ZERO FILE LENGTH
+       TAD MACARG      /GET DEVICE NUMBER FROM AC
+       JMS I [MCKDEV   /CHECK LEGALITY AND FORM POINTERS
+       SNA
+       JMP I [MERROR+1 /DEVICE HANDLER IS NOT IN CORE - ERROR
+       DCA T9          /ADDRESS OF DEVICE HANDLER
+       JMS I [FGET
+       DCA T4          /STORE THE POINTER TO THE FILE NAME IN T4
+       SNL
+       CML RAR
+       RTR             /FORM A MASK OF 2000 OR 1000 DEPENDING ON LINK
+       AND I T8
+       SZA CLA         /TEST FOR READ-ONLY(L=1) OR WRITE-ONLY(L=0)
+       JMP MRTRN+1     /FAILED THE TEST - ERROR RETURN
+       TAD I T8
+       SMA CLA
+       JMP I MRDCAT    /DEVICE IS NOT FILE-ORIENTED
+       ISZ MRDCAT
+       CLA IAC
+MRDREN,        DCA MCATRC      /STORE SEGMENT NUMBER
+       TAD T9          /USE LOW ORDER BITS
+       AND [177        /OF DEVICE HANDLER ENTRY POINT
+       CLL RTL         /AND THE REQUESTED SEGMENT NUMBER
+       RAL             /TO FORM A "UNIQUE" KEY
+       TAD MCATRC      /FOR THIS SEGMENT OF THIS DIRECTORY
+               /(THE UNIQUENESS DEPENDS ON EACH HANDLER HAVING A DIFFERENT
+               /STARTING OFFSET IN ITS PAGE)
+       CIA
+       TAD OLDT9       /COMPARE KEY AGAINST KEY OF CURRENT SEGMENT
+       SNA             /ARE THEY THE SAME?
+       JMP INLRDY      /YES - DON'T READ SEGMENT, ITS IN CORE
+       CIA
+       TAD OLDT9
+       DCA OLDT9       /STORE THE KEY OF THE NEW IN-CORE SEGMENT
+       CLA CLL CML RAR /CHANGE WRITE TO READ
+       JMS MWRCAT
+INLRDY,        TAD I [DCOUNT
+       CML CMA RAL
+       SZL SPA
+       JMP JMPME2
+       CMA CML RAR     /NEW V3 DIRECTORY VERIFYER
+       DCA NFILES      /FIRST WORD IN CATALOG = -# OF FILES IN CATALOG
+       TAD [DPROPR-1
+       DCA XR          /SET XR TO POINT TO FIRST FILE ENTRY
+       JMP I MRDCAT    /RETURN TO BUMPED ADDRESS
+MDSRCH,        0
+FSRCLP,        TAD I XR
+       SNA CLA /EMPTY SPACES HAVE A ONE WORD ZERO DIRECTORY ENTRY
+       JMP SKPMTF      /SO SKIP THE 4 WORD COMPARE ON THEM
+       CLA CMA
+       TAD XR
+       DCA XR
+       TAD [-4
+       DCA T6
+       TAD T4
+       DCA T7
+SRCWDL,        TAD T7
+       JMS I [FGETW
+       CIA
+       TAD I XR
+       SZA CLA /COMPARE ENTRY AGAINST ARGUMENT(8 CHARACTERS)
+       JMP NXTFIL
+       ISZ T7
+       ISZ T6
+       JMP SRCWDL
+       JMS BUMPXR      /SKIP GARBAGE WORDS
+       TAD I XR
+       SNA
+       JMP SKPMTF+1    /UNCLOSED OUTPUT FILES DONT COUNT
+       CIA
+       DCA T6  /STORE FILE LENGTH
+       ISZ MDSRCH
+       JMP I MDSRCH
+NXTFIL,        TAD T6
+       IAC
+       JMS BUMPXR      /SKIP REST OF NAME AND GARBAGE WORDS
+SKPMTF,        TAD I XR        /GET LENGTH OF THIS ENTRY
+       TAD T5
+       DCA T5  /ADD TO BLOCK STARTING ADDRESS
+       ISZ NFILES
+       JMP FSRCLP
+       DCA T5          /RE-INITIALIZE BLOCK NUMBER FOR NEXT SEGMENT
+       TAD I [DLINK    /DIRECTORY EXHAUSTED - ANY MORE?
+       SZA
+       JMP MRDREN
+       JMP I MDSRCH
+
+BUMPXR,        0               /ROUTINE TO SKIP (DWASTE+AC) WORDS
+
+       TAD I [DWASTE
+       CIA             /DWASTE IS NEGATIVE AND SO IS AC
+       TAD XR
+       DCA XR
+       JMP I BUMPXR
+
+MWRCAT,        0
+       TAD [4210
+       DCA CATCTL
+       CIF 0
+       JMS I T9
+CATCTL,        4210    /WRITE 2 RECORDS FROM FIELD 1
+       1400
+MCATRC,        1
+JMPME2,        JMP I [MERROR+2 /CANNOT REWRITE CATALOG
+       JMP I MWRCAT
+
+       IFNZRO .-772    <REASSEMBLE CONFIG>     /USED TO BE 766
+SDVHND,        ZBLOCK 17       /DEVICE HANDLER INFORMATION TABLE - SET BY CONFIG
+\f      IFZERO 1000&. <*1000>
+       /ENTER PROCESSOR FOR MONITOR
+       /FIND A HOLE IN THE DIRECTORY LARGE ENOUGH TO ACCOMODATE THE FILE
+       /AND STICK IT IN. MAKE A NOTE THAT WE DID SO FOR THE
+       /"CLOSE" PROCESSOR.
+MENTER,        DCA EPASS       /SET UP FOR PASS 1
+       JMS I [MRDCAT   /READ CATALOG AND SET UP NFILES AND XR
+       JMP I [ERETRN   /NON-FILE-STRUCTURED DEVICE
+       JMS I [CONSOL
+       DCA T2          /INTIIALIZE STARTING BLOCK NUMBER COUNTER
+       TAD [DPROPR-1
+       DCA XR          /RESTORE XR (CONSOLIDATOR DESTROYED IT)
+       TAD MACARG
+       CLL RTR
+       RTR
+       AND [377        /GET REQUESTED LENGTH FROM AC BITS 0-7
+       CIA
+       DCA T3  /T3=REQUESTED LENGTH.  IF T3=0, MEANS RETURN
+               /LARGEST EMPTY SPACE ON TAPE. IF T3<>0, MEANS RETURN
+               /SMALLEST BLOCK OF LENGTH =>T3.
+       TAD I T8        /GET FCB ENTRY
+       AND [7
+       SZA CLA         /ANY ACTIVE TENTATIVE FILES ON THIS DEVICE?
+       JMP I [MRTRN+1  /YES - TAKE ERROR RETURN
+MELOOP,        TAD I XR
+       SNA CLA
+       JMP MEMPTY      /EMPTY SPACE - LOOK AT LENGTH
+       MTHREE          /OCCUPIED - IGNORE
+       JMS I [BUMPXR
+       TAD I XR
+MELEND,        TAD T2
+       DCA T2  /UPDATE T2 TO STARTING BLOCK # OF NEXT ENTRY
+       ISZ NFILES
+       JMP MELOOP      /GO TO NEXT ENTRY
+
+       /DIRECTORY BLOCK EXHAUSTED
+       TAD EPASS
+       SZA CLA         /WHAT PASS ARE WE IN?
+       JMP EFINUP      /SECOND PASS - THIS IS FOR KEEPS
+       TAD I [DLINK    /FIRST PASS
+       SZA             /ANY MORE SEGMENTS?
+       JMP I [MRDREN   /YES - CONTINUE
+
+
+               /DONE - SEE IF OUR BEST IS GOOD ENOUGH.
+       TAD T4
+       JMS I [FGETW
+       SZA CLA         /CHECK THAT FIRST WORD OF NAME IS NON-ZERO
+       TAD T6
+       SNA CLA         /AND THAT WE FOUND WHAT WE WANTED
+       JMP I [MRTRN2   /OTHERWISE GIVE ERROR RETURN
+       TAD ASFLAG      /GET NUMBER OF BEST SEGMENT
+       ISZ EPASS       /AND RESTART THE ALGORITHM IN PASS 2
+       JMP I [MRDREN   /(TAKES LESS SPACE THAN SAVING XR AND NAME)
+
+       /EVERYTHING IS SET UP - PERFORM THE ACTUAL ENTRY OPERATION
+
+EFINUP,        TAD XR
+       DCA T1
+       TAD [-4
+       JMS I [BUMPXR
+       TAD I [DWASTE
+       CIA
+       TAD XR          /CATALOG MUST HAVE ROOM FOR ONE MORE FILE
+       TAD [-1772      /AFTER THIS FILE IS ENTERED
+       SMA CLA         /WILL NEW ADDITION OVERFLOW CATALOG?
+       JMP I [EOVFLO   /YUP - CALL OVERLAY TO EXTEND DIRECTORY
+MELP2, TAD I T1        /MOVE REST OF CATALOG UP
+       DCA I XR        /TO CREATE SPACE FOR NEW ENTRY
+       CLA CMA
+       TAD T1
+       DCA T1
+       CLA CMA CLL RAL
+       TAD XR
+       DCA XR
+       TAD T1
+       CIA CLL CML
+       TAD NAME
+       SZA CLA         /HAVE WE PUSHED UP EVERYTHING?
+       JMP MELP2       /NO, KEEP PUSHING
+       TAD [-4
+       DCA T1          /NOW MOVE THE USERS FILE NAME
+       TAD NAME
+       DCA XR
+       TAD T4
+       JMS I [FGETW    /[IN THE USERS FIELD, OF COURSE)
+       DCA I XR
+       ISZ T4
+       ISZ T1  /INTO THE EMPTY SPACE JUST CREATED
+       JMP .-5
+       TAD I [MDATE    /PUT DATE OF CREATION INTO FILE NAME
+       DCA I XR        /THIS WILL BE DESTROYED IF DWASTE=0
+       IAC             /ADJUST XR BUMP BECAUSE OF DATE STORE
+       JMS I [BUMPXR
+       DCA I XR        /GIVE THE NEWLY ENTERED FILE A LENGTH OF 0
+       TAD XR  /PUT A POINTER TO THE LENGTH WORD OF THE
+       DCA I [DFLAG    /NEW ENTRY INTO THE DIRECTORY HEADER
+       CLA CMA
+       TAD I [DCOUNT
+       DCA I [DCOUNT   /INCREASE THE FILE COUNT BY 1
+       TAD I T8
+       TAD ASFLAG
+       DCA I T8        /SIGNAL AN OPEN OUTPUT FILE ON THIS DEVICE
+       JMS I [MWRCAT   /WRITE THE ALTERED CATALOG BACK OUT
+       JMP I [LRETRN   /STORE ARGS BACK JUST LIKE "LOOKUP"
+\fMEMPTY,       TAD I XR
+       CIA CLL
+       DCA T1  /SAVE LENGTH OF CURRENT ENTRY
+       TAD T3
+       TAD T6
+       CLA             /LINK NOW EQUALS BEST LENGTH>=DESIRED LENGTH
+       TAD T3
+       SNA
+       CML             /IF DESIRED LENGTH=0 WE ALWAYS WANT MAXIMUM
+       TAD T1
+       CLA CML         /LINK IS NOW ON IF DESIRED LENGTH IS NOT IN BETWEEN
+                       /BEST LENGTH AND CURRENT LENGTH
+       TAD T1
+       CIA
+       TAD T6
+       SZL SNA CLA     /TAKE EITHER MIN OR MAX OF BEST AND CURRENT LENGTHS,
+                       /DEPENDING ON WHETHER LINK IS ON OR OFF
+       JMP MNOCHG      /MIN(MAX)=BEST - NOTHING TO DO
+       TAD T1
+       DCA T6          /MAKE CURRENT ENTRY NEW "BEST"
+       CLA CLL CMA RAL
+       TAD XR
+       DCA NAME        /REMEMBER CATALOG LOCATION
+       TAD I [MCATRC
+       DCA ASFLAG      /ALSO DIRECTORY SEGMENT NUMBER
+       TAD T2
+       DCA T5          /AND STARTING BLOCK NUMBER
+MNOCHG,        TAD T1
+       CIA
+       JMP MELEND      /GO UPDATE THE BLOCK NUMBER
+\f      /CLOSE PROCESSOR - CLOSES  AN OUTPUT FILE WHICH WAS OPENED
+       /BY THE "ENTER" CALL -- ARGUMENTS ARE THE DEVICE NUMBER AND THE
+       /CLOSING LENGTH OF THE FILE.  PERFORMS A DIRECTORY CLEANUP AFTER
+       /CLOSING THE FILE.  IF AN ENTRY ALREADY EXISTS WITH THE NEW FILE'S
+       /NAME IT IS DELETED. (CLOSE MAY BE USED AS A "DELETE" COMMAND
+       /ONLY IF NO OUTPUT FILE WAS ENTERED).  AN ERROR RETURN IS 
+       /GIVEN IF THE CLOSING LENGTH IS TOO BIG OR IF THERE WAS NEITHER
+       /AN ACTIVE TENTATIVE FILE OR AN OLD FILE TO DELETE.
+
+MCLOSE,        JMS I [MRDCAT   /GET THE CATALOG
+       JMP CRETRN      /NON-FILE STRUCTURED DEVICE - RETURN NORMALLY
+       CLA IAC         /GET THE NEXT WORD IN THE CALLING SEQUENCE
+       JMS I [FGET
+       DCA T1          /GET CLOSING LENGTH AND STORE IT AWAY
+       JMS I [MDSRCH   /SEARCH FOR THE OLD COPY
+       JMP NODLET              /NO OLD COPY
+       MTHREE
+       TAD I [DWASTE
+       JMS SQUISH      /SQUISH OUT 3+#WASTE WORDS OF THE OLD COPY
+       DCA I XR2       /AND MAKE THE OTHER TWO INTO AN EMPTY
+       TAD T6          /FILE ENTRY WITH THE SAME LENGTH
+       CIA
+       DCA I XR2       /AS THE OLD COPY
+       TAD I T8
+       AND [7
+       SNA             /IS THERE AN OPEN OUTPUT FILE ON THIS DEVICE
+       JMP EOCLOS      /NO - FINISH UP AND GET OUT
+       CIA             /GET THE SEGMENT NUMBER WE WANT
+       TAD I [MCATRC
+       SNA CLA
+       JMP .+3
+       JMS CONSOL
+       JMS I [MWRCAT   /NO - WRITE OUT THE ONE WE SQUISHED
+       TAD I [DFLAG    /GET LOCATION OF TENTATIVE FILE
+       CIA CLL
+       TAD XR2
+       SZL CLA         /IS THE ENTRY TO BE CLOSED ABOVE THE ONE 
+       JMP .+3         /WE JUST DELETED?
+       MTHREE          /YES - MOVE THE POINTER DOWN
+       TAD I [DWASTE   /TO COMPENSATE FOR THE SQUISHING
+       TAD I [DFLAG    /THE POINTER WILL NOW POINT
+       DCA I [DFLAG    /TO THE LENGTH WORD.
+               /(THIS WAS WASTED WORK UNLESS THE CORRECT SEGMENT IS IN CORE)
+
+NODLET,        TAD I T8
+       AND [7
+       SNA             /IS THERE AN OPEN OUTPUT FILE ON THIS DEVICE?
+       JMP I [MRTRN+1  /WHAT DID HE CALL US FOR? - ERROR
+       JMS I [MRDCAT   /YES - READ IN THE CORRECT SEGMENT
+       TAD I [DFLAG
+       DCA T4          /T4 POINTS TO THE LENGTH OF THE TENTATIVE ENTRY
+       TAD T1
+       CIA             /IF T1=0, NEW ENTRY WILL BE DELETED AUTOMATICALLY
+       DCA I T4        /DURING CONSOLIDATION
+       ISZ T4
+       ISZ T4
+       CLL CML
+       TAD T1
+       TAD I T4        /SUBTRACT CLOSING LENGTH FROM FREE BLOCK ADJACENT TO ENTRY
+       SNL SZA
+       JMP I [MERROR+3 /THIS CREEP HAS GONE AND DESTROYED HIS TAPE
+       DCA I T4
+EOCLOS,        JMS CONSOL      /CONSOLIDATE THE DIRECTORY
+       TAD [7770
+       AND I T8
+       DCA I T8
+       SKP
+CRETRN,        TAD [7600       /DO A WRITE OF 0 PAGES. (MAGTAPE)
+       JMS I [MWRCAT
+       ISZ I [MONITO
+       JMP I [MRTRN2
+\f      /CONSOLIDATOR - CHECKS FOR ENTRIES OF LENGTH 0 AND DELETES THEM.
+       /ALSO CHECKS FOR ADJACENT FREE AREAS AND COMBINES THEM.
+CONSOL,        0
+       TAD [DPROPR-1
+       DCA XR
+       TAD I [DCOUNT
+       DCA T7          /T7 = FILE COUNT
+CONLP, TAD I XR
+       SNA CLA         /EMPTY FILE?
+       JMP CONMTF      /YES - GO CHECK FOR NULL AND 2 IN A ROW
+       MTHREE
+       JMS I [BUMPXR   /GET PAST THE GARBAGE WORDS
+       TAD I XR        /GET COUNT
+       SZA CLA         /WOULD THIS HAPPEN TO BE A NULL FILE?
+       JMP CONLPT      /NAH, GO TO NEXT ONE
+       TAD [-5         /YEAH, REMOVE IT ENTIRELY
+       TAD I [DWASTE   /INCLUDING THE WASTE WORDS
+SQCOMN,        JMS SQUISH
+       ISZ I [DCOUNT   /BUMP DOWN FILE COUNT IN DIRECTORY
+       ISZ NFILES      /AS WELL AS THE TEMPORARY ONE IN PAGE 0
+       NOP             /V3 RL INSISTS
+       JMP CONSOL+1    /REPEAT ENTIRE CONSOLIDATION - THIS DELETION MAY
+                       /HAVE BROUGHT TWO FREE ENTRIES TOGEHER
+/      THE ABOVE NOP FIXES THE KILLER CLOSE BUG
+CONLPT,        ISZ T7
+       JMP CONLP       /MORE FILES - KEEP PLUGGING
+       JMP I CONSOL    /RETURN FROM CONSOLIDATOR
+CONMTF,        TAD I XR        /IS THIS FREE ENTRY NULL?
+       SNA
+       JMP SQTRIV      /YES - SQUASHITLIKEABUG
+       DCA T2          /NO - SAVE LENGTH
+       TAD XR
+       DCA SQUISH              /SAVE POSITION OF LENGTH WORD
+       ISZ T7          /WAS IT THE LAST FILE?
+       SKP             /NO, THEN THERE IS ONE AFTER IT(GOOD THINKING!)
+       JMP I CONSOL    /YES - RETURN FROM CONSOLIDATOR
+       TAD I XR
+       SZA CLA         /TWO EMPTIES IN A ROW?
+       JMP CONLP+3     /NO - SLIP BACK INTO LOOP
+       TAD I XR
+       TAD T2          /YES - COMBINE LENGTHS
+       DCA I SQUISH    /STORE BACK IN FIRST LENGTH WORD AND SQUISH SECOND ENTRY
+SQTRIV,        CLA CMA CLL RAL
+       JMP SQCOMN      /SQUISH OUT 2 WORDS
+\fMRESET,       TAD [-17
+       DCA T3
+MRSETL,        TAD T3
+       JMS I [MCKDEV
+/LINK MUST BE ON AT THIS POINT
+       TAD [200
+       SZL CLA         /ZERO ALL DEVICE HANDLER SLOTS THAT AREN'T RESIDENT
+       DCA I T1
+       JMS I [FGET
+       SZA CLA
+       TAD [7
+       CMA STL
+       AND I T8
+       DCA I T8        /DELETE THE "FILE CURRENTLY OPEN" FLAG IF ASKED
+       ISZ T3
+       JMP MRSETL
+       JMP I [MNEXT
+
+/SUBR TO COLLAPSE DIRECTORY AFTER A  POINT
+SQUISH,        0
+       TAD XR
+       DCA XR1
+       CLA CLL CMA RAL
+       TAD XR1
+       DCA XR2         /SET UP XR2 FOR CHANGING SQUISHED ENTRY
+SQLOOP,        TAD I XR
+       DCA I XR1       /MOVE DOWN ONE WORD
+       TAD XR
+       TAD [-1777
+       SZA CLA /AT END YET?
+       JMP SQLOOP      /NO, KEEP GOING
+       JMP I SQUISH
+\f      *1400
+       /INITIAL DIRECTORY FOR MONITOR
+       /DEFINES OS/8 ABSOLUTE LOADER (ABSLDR.SV)
+
+DCOUNT,        -2      /TWO ENTRIES
+DORG,  MFREE   /FILE STORAGE STARTS AT BLOCK "MFREE"
+DLINK, 0       /THIS IS THE ONLY DIRECTORY RECORD
+DFLAG, 0       /THERE ARE NO OPEN OUTPUT FILES ON THIS DEVICE
+DWASTE,        -1      /# OF WASTED WORDS PER ENTRY
+DPROPR,        0102    /AB
+       2314    /SL
+       0422    /DR
+       2326    /.SV
+       3017    /V3D ENCODING FOR 1-JUN-77
+       -5      /FIVE BLOCKS LONG( 1 BLOCK = 256 WORDS)
+       0       /EMPTY SPACE
+       -1      /OVERLAYED BY DEVICE DEPENDENT PART WITH LENGTH
+
+       IFNZRO .-1415 <CNFER,QQQ>
+\f      *3400   /"ENTER" OVERLAY TO USR - RUNS IN 11000
+       JMP .+3
+MSEGLM,        -7      /# DIRECT. SEGS
+NEWLEN,        -10
+MEOVLP,        TAD I [DLINK
+       SNA CLA
+       JMP MELAST      /LAST SEGMENT - MUST CREATE A NEW ONE
+       ISZ I [DCOUNT   /BUMP ENTRY COUNT DOWN
+       JMS I [MWRCAT   /WRITE OUT THIS SEGMENT
+       JMS MSKIPF      /FIND END OF SHORTENED DIRECTORY
+       DCA MEFCNT      /PREPARE TO TRANSFER LAST ENTRY
+       TAD (MEOVLS-1
+       DCA XR1         /INTO NEXT DIRECTORY SEGMENT
+       TAD I XR
+       DCA I XR1
+       ISZ MEFCNT      /THROUGH A BUFFER AT LOC 11200
+       TAD XR
+       CIA
+       TAD T1          /T1 WAS SET UP BY "ENTER"
+       SZA CLA
+       JMP .-7
+       TAD I T1        /GET LENGTH OF MOVED ENTRY
+       DCA MEOCNT
+       TAD I [DLINK
+       JMS I [MRDCAT   /READ NEXT SEGMENT
+       JMS I [CONSOL   /MAKE SURE IT IS AT ITS SMALLEST
+       TAD I [DORG
+       TAD MEOCNT
+       DCA I [DORG     /BUMP FILE ORIGIN DOWN
+       JMS MSKIPF      /FIND LAST LOC IN NEW SEGMENT
+MELP3, TAD XR
+       DCA METMP1
+       TAD XR
+       TAD MEFCNT
+       DCA METMP2      /PREPARE TO PUSH ALL ENTRIES UP
+       TAD I METMP1
+       DCA I METMP2    /DO THE PUSHING
+       STA
+       TAD XR
+       DCA XR
+       TAD XR
+       TAD (-DWASTE
+       SZA CLA         /ARE WE THROUGH?
+       JMP MELP3       /NO
+       TAD (MEOVLS-1
+       DCA XR          /PREPARE TO MOVE THE SAVED ENTRY INTO THE
+       CLA CMA         /NEW SEGMENT
+       TAD I [DCOUNT
+       DCA I [DCOUNT   /INCREASE ENTRY COUNT OF NEW SEGMENT
+       TAD MEFCNT
+       CIA
+MECOMN,        DCA MEFCNT      /STORE NUMBER OF WORDS TO MOVE
+       TAD [DWASTE
+       DCA XR1
+       TAD I XR
+       DCA I XR1
+       ISZ MEFCNT
+       JMP .-3         /MOVE THE ENTRY IN
+       JMS MSKIPF
+       TAD XR
+       DCA T1          /T1=LAST LOC IN SEGMENT
+       TAD I [DWASTE
+       CIA
+       TAD XR
+       TAD [-1772
+       SMA CLA         /HAVE WE MADE THIS SEGMENT TOO BIG?
+       JMP MEOVLP      /YES - LOOP UNTIL WE GET IT RIGHT
+       JMS I [MWRCAT   /WRITE OUT NEW SEGMENT
+       JMP MEOXIT      /READ IN ENTER AND CONTINUE
+\fMWRONG,       IAC
+MELAST,        TAD NEWLEN
+       DCA METMP1      /LENGTH OF NEW SEGMENT
+       TAD METMP1
+       CIA
+       TAD I [DCOUNT
+       SMA             /WERE THERE "NEWLEN+1"
+       JMP MWRONG      /NO - SET OUR SIGHTS LOWER
+       DCA I [DCOUNT   /ADJUST LENGTH OF OLD SEGMENT
+       JMS MSKIPF      /FIND BOUNDARY LOC BETWEEN SEGMENTS
+       TAD I [MCATRC
+       IAC
+       DCA I [DLINK    /LINK THE OLD LAST SEGMENT TO 
+       TAD I [DLINK    /THE NEWLY CREATED ONE
+       TAD MSEGLM
+       SMA CLA
+       JMP I (MEOERR   /PROVIDED THAT THERE IS ROOM FOR ANOTHER
+       JMS I [MWRCAT   /WRITE OUT THE NEXT-TO-LAST SEGMENT
+       ISZ I [MCATRC   /BUMP RECORD NUMBER FOR NEXT WRITE
+       ISZ OLDT9       /LIKEWISE BUMP DIRECTORY KEY
+       TAD METMP1
+       DCA I [DCOUNT
+       TAD MEOCNT
+       CIA
+       TAD I [DORG
+       DCA I [DORG     /SET UP PARAMETERS OF THE NEW SEGMENT
+       DCA I [DLINK    /MARK IT AS THE NEW LAST SEGMENT
+       TAD XR
+       TAD [-1777      /SET UP COUNT OF WORDS TO SLIDE DOWN
+       JMP MECOMN      /USE COMMON CODE TO SLIDE WORDS AND EXIT
+
+MSKIPF,        0               /SUBR TO FIND LAST LOC USED IN A SEGMENT
+                       /ALSO FINDS NUMBER OF BLOCKS USED BY SEGMENT
+       TAD I [DCOUNT
+       DCA MNOFIL
+       TAD [DWASTE
+       DCA XR
+       DCA MEOCNT      /INITIALIZE POINTER(XR) AND COUNT(MEOCNT)
+MSKPLP,        TAD I XR
+       SNA CLA
+       JMP MEOMTY
+       MTHREE
+       TAD I [DWASTE   /BUMP POINTER TO LENGTH WORD OF FILE ENTRY
+       CIA
+       TAD XR
+       DCA XR
+MEOMTY,        TAD I XR
+       TAD MEOCNT
+       DCA MEOCNT
+       ISZ MNOFIL
+       JMP MSKPLP
+       JMP I MSKIPF
+\fMEOCNT,       0
+MEFCNT,        0
+METMP1,        0
+METMP2,        0
+MNOFIL,        0
+       MEOVLS=1200     /DESTROYS PART OF "CLOSE" OP FOR BUFFER
+       PAGE
+\f      EJECT ABSLDR
+       /ABSOLUTE LOADER FOR OS/8 - VERSION 4A
+       *2000
+       CTLBLK=3400
+       BUFFER=CTLBLK
+       XFIELD=20
+       ORIGIN=21
+       B1=22
+       B2=23
+       B3=24
+       C1=25
+       C2=26
+       C3=27
+       WD=30
+       WD1=31
+       WD2=32
+       FILPTR=33
+       PG7400=34
+       LSTFLD=35
+       LOADXR=11
+ABSLDR,        JMS I (CTINIT
+       JMS I (CTINIT
+       JMP CALLCD
+       JMP NOCD
+NEXTCD,        JMS I (NEXFIL
+CALLCD,        JMS I [200
+       5       /COMMAND DECODE
+       0216    /ASSUMED EXTENSION IS .BN
+NOCD,  TAD [6001
+       CDF 0
+       DCA I [JSBITS   /SET JSBITS TO SAVE CD AREA NEXT TIME
+       CDF 10
+       TAD I [MPARAM+1
+       AND [100
+       SZA CLA         /IS /R SWITCH ON?
+       JMS I (CTINIT   /YES - RE-INITIALIZE LOADER TABLES
+LD7400,        7400
+       TAD (MIFILE
+       DCA FILPTR
+       JMS I (SETADR   /GET THE STARTING ADDRESS IF IT APPEARS ON THE LINE
+NEWFIL,        TAD (7001
+       DCA HANDLR
+       TAD I FILPTR
+       AND [7760
+       SZA             /LENGTH OF 256 BLOCKS IMPLIES AT LEAST 256
+       TAD [17
+       CLL CML RTR
+       RTR
+       DCA RCDCNT
+       TAD I FILPTR
+       ISZ FILPTR
+       SNA
+       JMP NEXTCD      /FILE POINTER = 0 MEANS NO MORE INPUT FILES
+       JMS I [200
+       1               /ASSIGN
+HANDLR,        7001            /LOAD INTO 7000 IF NOT ALREADY LOADED
+       JMP I (IOERR
+       TAD I FILPTR
+       DCA RECNO
+       ISZ FILPTR
+       CLA CMA
+       DCA CHCNT
+       DCA REOF
+       TAD I [MPARAM   /TEST FOR /I
+       AND (10
+       SNA CLA
+       JMP I (LOADER   /I IS NOT ON
+       ISZ OFLG        /IS /I ALLOWED?
+       JMP I (OERR     /NO!
+       JMP I (SLASHO
+\fGETCH,        0               /GET-NEXT-INPUT-CHARACTER ROUTINE
+       TAD [200
+       KRS
+       TAD (-203
+       SNA CLA
+       KSF
+       SKP
+       JMP I (MGET
+       ISZ JMPGET
+       ISZ CHCNT
+JMPX,  JMP JMPGET
+       TAD REOF
+       SZA CLA
+       JMP I GETCH     /EOF REACHED BEFORE LOGICAL END - ERROR
+       CIF 0
+       JMS I HANDLR
+       0210            /READ 2 RECORDS INTO FIELD 1
+PBUFFR,        BUFFER
+RECNO, 0
+       JMP RERROR
+       ISZ RECNO
+       ISZ RCDCNT
+       SKP
+       ISZ REOF
+       TAD (-601
+       DCA CHCNT
+       TAD PBUFFR
+       DCA CHPTR
+       TAD JMPX
+       DCA JMPGET
+       JMP GETCH+1
+\fJMPGET,       JMP .
+       JMP CHAR1
+       JMP CHAR2
+CHAR3, TAD JMPX
+       DCA JMPGET
+       TAD I CHPTR
+       AND LD7400
+       CLL RTR
+       RTR
+       TAD CHTMP
+       RTR
+       RTR
+       ISZ CHPTR
+       JMP GCHCOM
+CHAR2, TAD I CHPTR
+       AND LD7400
+       DCA CHTMP
+       ISZ CHPTR
+CHAR1, TAD I CHPTR
+GCHCOM,        AND (377
+       ISZ GETCH
+       JMP I GETCH
+RERROR,        SPA CLA
+       JMP I (IOERR    /AN ACTUAL READ ERROR - AMAZING!
+       ISZ REOF
+       JMP RECNO+2
+REOF,  0
+CHCNT, 0
+CHPTR, 0
+CHTMP, 0
+RCDCNT,        0
+OFLG,  -1              /SWITCH FOR /O OPTION
+       PAGE
+\f      *2200
+PUTWD, 6402            /ABSLDR VERSION NUMBER
+       CMA
+       AND I B2        /AND OUT THE PAGE SLOT IN THE PAGE TABLE
+       DCA I B2
+       TAD ORIGIN
+       DCA ORGX
+       TAD XFIELD
+       CLL RTR
+       RTR
+       SZA CLA         /TEST FOR FIELDS 0 OR 1
+       JMP PUTIT       /NEITHER - STORE AS IS
+       SNL
+       JMP FLD0
+       TAD ORIGIN
+       SPA CLA
+       JMP FLD1
+       CLA CLL CML RTR
+       TAD ORIGIN
+       SMA CLA
+       JMP .+3
+       ISZ I (OVLYFG   /SET FLAG THAT LOADER IS BEING OVERLAYED
+       TAD (2400       /LOADER OVERLAYS GO IN MTEMP+11 - MTEMP+14
+LCOMPR,        TAD ORIGIN
+       RTL
+       RTL
+       RAL
+       AND [17
+       TAD (MTEMP
+RLCOMN,        DCA PGTMP
+       TAD BUFREC
+       CIA
+       TAD PGTMP
+       SNA CLA
+       JMP DONTWR
+       JMS WRBUF
+WRIBUF,         CLA            /MODIFIED..IF NOT /O GETS SZA CLA
+       JMP DONTWR
+       CIF 0
+       JMS I [SHNDLR
+       0210
+       1400    /USE CATALOG SPACE
+PGTMP, 0
+       JMP I (LIOERR
+DONTWR,        DCA OLDT9       /MARK THE CATALOG DESTROYED
+       TAD PGTMP
+       DCA BUFREC
+       TAD ORIGIN
+       AND [377
+       TAD PTRBFR
+       DCA ORGX
+       JMP PUTIT2
+\fFLD1, CLL
+       TAD ORIGIN      /IGNORE LOCATIONS ABOVE 17600
+       TAD [200
+       SZL CLA
+       JMP I PUTWD
+PUTIT, TAD XFIELD
+       TAD [7770       /CONSTRUCT CDF N FOR PROPER FIELD
+PUTIT2,        TAD CDF10
+       DCA .+1
+M7,    -7
+       TAD C3
+       DCA I ORGX
+CDF10, CDF 10
+       JMP I PUTWD
+FLD0,  TAD ORIGIN      /CHECK FOR STUFF IN PAGE 7000
+       TAD (1000
+       SNL CLA         /IF NON ZERO,OVERLAY
+       JMP PUTIT
+       TAD [7400       /FORM RECORD NO. FOR OVERLAY
+       ISZ PG7400      /SET OVERLAY FLAG
+       JMP LCOMPR      /FORM RECORD NO.
+WRBUF, CALONC
+       TAD BUFREC
+       SNA
+       JMP I WRBUF
+       CIF 0
+       JMS I [SHNDLR
+       4210
+PTRBFR,        1400
+BUFREC,        0
+       JMP I (LIOERR
+       DCA BUFREC
+       /BAD I/O ON SYSTEM DEVICE
+       JMP I WRBUF
+\fORGX,
+NEXFIL,        ERTRN
+       JMS WRBUF       /WRITE WHATEVER
+       TAD I [MPARAM-1
+       SPA CLA
+       JMP I (BUILD
+       TAD I (MPARAM
+       AND (40
+       SZA CLA
+       JMP I (BUILD
+       JMP I NEXFIL
+
+CORTAB,        ZBLOCK 30       /ONCE-ONLY CODE INSERTED HERE KATER
+       ZBLOCK 2        /EXTRA NEEDED BY ONCE-ONLY CODE
+                       /NOT USED BY CORE TABLE
+       PAGE
+\f      *2400
+ITSOVR,        JMS ASSEMB
+       CIA
+       TAD LCKSUM
+SZAIN, SZA CLA
+       JMP I (BADCKS
+       TAD I [MPARAM+1
+       AND L40
+       SNA CLA
+       JMP I (NEWFIL
+LOADER,        DCA LCKSUM
+       DCA I (OFLG     /CANCEL FURTHER /I'S
+       TAD SZAIN
+       DCA I (WRIBUF
+       JMS GETFLD
+       DCA XFIELD
+       TAD [200
+       DCA ORIGIN
+       JMS I (GETCH
+       JMP I (NEWFIL
+       SNA
+       JMP .-3
+       TAD [-200
+       SZA CLA
+       JMP LOADER+1
+LEADER,        JMS I (GETCH
+       JMP I (NEWFIL
+       SNA
+       JMP LOADER+1
+       TAD [-200
+       SNA
+       JMP LEADER
+NEWWD, SMA
+       JMP FIELDW
+       TAD [200
+       DCA WD1
+       JMS I (GETCH
+       JMP I (BADINP
+       DCA WD2
+       JMS I (GETCH
+       JMP I (BADINP
+       TAD [-200
+       SNA
+       JMP ITSOVR
+       DCA WD
+       JMS ASSEMB
+       SNL
+       JMP DATAWD
+       DCA ORIGIN
+       DCA I (LOADWD   /ZERO 'DATA LOADED' FLAG V3
+       JMP GETNXT
+\fDATAWD,       JMS I (LOADWD
+       ISZ ORIGIN
+L40,   40
+GETNXT,        TAD WD1
+       TAD WD2
+       TAD LCKSUM
+       DCA LCKSUM
+       TAD WD
+       JMP NEWWD
+\fASSEMB,       0
+       TAD WD1
+       CLL RTL
+       RTL
+       RTL
+       TAD WD2
+       JMP I ASSEMB
+FIELDW,        TAD (-32
+       SNA
+       JMP CTLZ
+       TAD (-46
+       SPA
+       JMP NOTXP
+       DCA WD1
+       TAD WD1
+       AND [7          /V3C
+       SZA CLA
+       JMP NOTXP
+       TAD WD1
+       AND (70
+       DCA XFIELD
+       JMS I (GETCH
+       JMP I (BADINP
+       TAD [-200
+       SZA
+       JMP NEWWD
+NOTXP, CLA
+       TAD LCKSUM
+       SNA CLA
+       JMP LOADER
+       JMP I (BADINP
+LCKSUM,        0
+CTLZ,  TAD LCKSUM
+       SZA CLA
+       JMP I (BADINP
+       JMP I (NEWFIL
+\fGETFLD,       0
+       DCA C1
+       TAD I (MPARAM+2
+       AND (1774
+       SNA
+       JMP I GETFLD
+       RTL
+       RAL
+       ISZ C1
+       SNL
+       JMP .-3
+       CLA CMA
+       TAD C1
+       CLL RTL
+       RAL
+       JMP I GETFLD
+       PAGE
+\f      *2600
+BUILD, TAD (CORTAB+25
+       DCA B1
+       TAD I (CORTAB+3
+       CLL CMA
+       AND [7760
+       SNA CLA
+       CML
+       TAD I (CORTAB
+       CMA
+       AND [7760
+       SNA CLA
+       IAC
+       RTR
+       DCA I (CTLBLK+3
+       TAD (CTLBLK+3
+       DCA LOADXR
+       TAD [-10
+       DCA C1
+       TAD [70
+       DCA FIELDB
+       DCA I (CTLBLK
+FLDLP, TAD FIELDB
+       TAD [-20
+       SMA CLA         /IGNORE 07600 AND 17600 IN CCB  /V3
+       CMA             /IN THE CORE MAP
+       TAD [-37
+       DCA C2
+       DCA LOWERA
+MTLOOP,        JMS I (SHFT
+       SNL CLA
+       JMP INUSE
+       TAD LOWERA
+MTRSME,        TAD [200
+       DCA LOWERA
+       ISZ C2
+       JMP MTLOOP
+       JMP FLDOVR
+INUSE, TAD LOWERA
+       TAD [200
+       DCA UPPERA
+       ISZ C2
+       SKP
+       JMP ENDRGN-2
+       JMS I (SHFT
+       SZL CLA
+       JMP ENDRGN
+       TAD UPPERA
+       JMP INUSE+1
+       CLA CMA
+       DCA C2
+ENDRGN,        TAD LOWERA
+       AND [7400
+       DCA I LOADXR
+       ISZ I (CTLBLK
+       TAD LOWERA
+       AND [7400
+       CIA
+       TAD UPPERA
+       CLL RAR
+       TAD FIELDB
+       DCA I LOADXR
+       TAD UPPERA
+       JMP MTRSME
+\fFLDOVR,       TAD FIELDB
+       TAD [-10
+       DCA FIELDB
+       CLA CLL CMA RTL
+       TAD B1
+       DCA B1
+       ISZ C1
+       JMP FLDLP
+       TAD I (CTLBLK
+       SNA
+       JMP I (NULERR
+       CIA
+       DCA I (CTLBLK
+       TAD I [MPARAM+1 /CLOBBER BATCH?
+       AND [400
+       TAD I (MPARAM+2 /AH ED, BUG IF YOU SPEC /P/1 TO LOADER
+       AND (403
+       TAD I (CTLBLK+3
+       DCA I (CTLBLK+3
+       TAD LSTFLD
+       AND [7
+       CLL RTL
+       RAL
+       TAD [CDF CIF 0
+       DCA I (CTLBLK+1
+       SKP
+ORG200,        TAD [200
+       TAD LSTADR
+       SZA             /V3
+       JMP NOORG       /V3 ALLOW EXPLICIT START ADDR TO OVERRIDE DEFAULT
+       TAD I (LOADWD   /V3 NO EXPLICIT START ADDR
+       CLA             /REPLACE BY 'SZA CLA' TO ALLOW SELF-STARTING STUFF
+/*     SZA CLA         /V3 IS IT SELF STARTING BIN FORMAT?
+       JMP ORG200      /V3 NO
+       TAD XFIELD      /V3 YES
+       TAD [CIF CDF 0  /V3
+       DCA I (CTLBLK+1 /V3
+       TAD I (ORIGIN   /V3
+NOORG, DCA I (CTLBLK+2
+       JMP I (LGTOUT   /WRITE CONTROL BLOCK AND EXIT
+FIELDB,        0
+\fUPPERA,
+SETADR,        0
+       TAD I (MPARAM+3
+       SNA             /IS THERE A STARTING ADDRESS SPECIFIED?
+       JMP I SETADR    /NO
+       DCA LSTADR
+       TAD I [MPARAM-1
+       DCA LSTFLD
+       JMP I SETADR
+
+LOWERA,        0
+LSTADR,        0
+       PAGE
+\f      *3000
+ZOFILE,        MOFILE
+ZOUCNT,        -47
+LGTOUT,        TAD PG7400
+       SNA CLA
+       JMP .+7
+       CIF 0
+       JMS I [SHNDLR
+       0300
+       7000
+       MTEMP+15
+       JMP I (LIOERR
+       CIF 0
+       JMS I [SHNDLR
+       4210
+       CTLBLK-200
+       MTEMP+10
+       JMP I (LIOERR
+       TAD I (CTLBLK+2
+       DCA CTL2                /MOVE THINGS INTO THIS PAGE 
+       TAD I (CTLBLK+3
+       DCA CTL3        /SO WE CAN REFERENCE THEM WITH DF=0
+       TAD I [MPARAM
+       AND (40
+       SNA CLA
+       JMP LNOGO
+       TAD CTL3
+       RAL
+       SPA CLA         /ARE WE OVERLAYING THE I/O MONITOR?
+       JMP LKICKM              /NO
+       CDF 0
+       DCA I [JSBITS   /YES - SET JSBITS TO FORCE A READ
+       CDF 10
+       JMS I [200
+       13              /RESET I/O DEVICES AND FILES
+LKICKM,        JMS I [200
+       11              /KICK MONITOR OUT
+       /********************************************
+       /NO PAGE ZERO REFERENCES AFTER THIS POINT 
+       /PAGE ZERO MAY CONTAIN USER CODE
+       /********************************************
+       DCA I ZOFILE            /ZERO OUT COMMAND DECODER AREA
+       ISZ ZOFILE
+       ISZ ZOUCNT
+       JMP .-3
+       TAD I (CTLBLK+1
+       CDF 0
+       DCA I (MSTCDF
+       TAD CTL2
+       DCA I (MSTADR   /SET UP STARTING ADDRESS IN FIELD 0
+       JMP LMOVRD
+\fLNOGO,        TAD CTL3        /ABOVE COMMENT DOESN'T APPLY TO NEXT 9 LINES
+       SPA CLA         /ARE WE OVERLAYING THE KEYBOARD MONITOR?
+       TAD (5          /NO - RETURN TO NON-SAVING ENTRY
+       TAD [7600
+       CDF 0
+       DCA I (MSTADR
+       TAD ZCDIF0
+       DCA I (MSTCDF
+       CLA CMA
+LMOVRD,        CDF 10
+       DCA I (7700     /SET 7700 TO -1 IF NO GO
+       TAD I (CTLBLK+1
+       CDF 0
+       DCA I (JFIELD   /SET UP PARAMETERS IN FIELD 0
+       TAD CTL2
+       DCA I (JSTART
+       TAD CTL3
+       DCA I (JSBITS
+LMOVLP,        TAD COMBO
+       DCA I COMBPT
+       ISZ LMOVLP
+       ISZ COMBPT
+       ISZ COMBCT
+       JMP LMOVLP      /MOVE THE READ OF THE LOADER OVERLAY INTO FIELD 0
+ZCDIF0,        CDF CIF 0
+       TAD OVLYFG
+       SZA CLA
+       JMP I (MREAD    /LOADER OVERLAYED - GO READ OVERLAY
+       JMP I (MSTCDF   /LOADER NOT OVERLAYED - WHY READ?
+COMBPT,        MREAD-1
+COMBCT,        -7
+COMBO, 7607
+       MREAD-1&177+4600        /JMS I .-1
+       1010
+       2000
+       MTEMP+11        /LOCATION OF SCRATCH BLOCKS FOR LOADER OVERLAY
+       HLT
+       MSTCDF&177+5200 /JMP MSTCDF
+CTL2,  0
+CTL3,  0
+OVLYFG,        0
+\fLOADWD,       0
+       DCA C3
+       TAD XFIELD
+       CLL RAR
+       TAD XFIELD
+       RTR
+       TAD (CORTAB-1
+       DCA B2
+       TAD ORIGIN
+       AND [7600
+       CLL RTL
+       RTL
+       RTL
+       ISZ B2
+       TAD (-14
+       SMA
+       JMP .-3
+       DCA CTL2
+       CLL CML
+       RAL
+       ISZ CTL2
+       JMP .-2
+       JMS I (PUTWD
+       JMP I LOADWD
+       PAGE
+\f      *3200
+ERPCH, 0
+       AND (77 /GET LOW ORDER 6 BITS
+       SZA
+       JMP NZCHAR
+       JMS ERR
+FILMSG,        TEXT    /, FILE 0/
+NZCHAR,        TAD (240
+       AND (77
+       TAD (240        /CONVERT TO ASCII
+       JMS LDRPCH      /PRINT
+       JMP I ERPCH     /AND RETURN
+LDRPCH,        0
+       TLS
+       TSF
+       JMP .-1
+       CLA
+       JMP I LDRPCH
+SHFT,  0
+       CLA CLL CMA RTL
+       DCA C3
+       CLA CLL CML RTL
+       TAD B1
+SHFTLP,        DCA B3
+       TAD I B3
+       RAL
+       DCA I B3
+       CLA CMA CML
+       TAD B3
+       ISZ C3
+       JMP SHFTLP
+       JMP I SHFT              /NOTE: SHFT LEAVES AC NON-ZERO
+\fERR,  ONCE            /CAN'T USE PAGE 0 LITERALS
+       CLA
+       CDF 10
+       TAD I (FILPTR   /ZERO CHAR GETS REPLACED BY "FILE #"
+       TAD (322        /MAGIC NUMBER
+       CLL CML RAR     /AC NOW CONTAINS " #"
+       DCA FILMSG+3
+ERRLUP,        TAD I ERR
+       SNA
+       JMP EOMESG      /MESSAGE MUST BE EVEN NUMBER OF CHARS LONG
+       RTR
+       RTR
+       RTR
+       JMS ERPCH
+       TAD I ERR
+       JMS ERPCH
+       ISZ ERR
+       JMP ERRLUP
+EOMESG,        TAD (215        /TERMINATE MESSAGE WITH CR-LF
+       JMS LDRPCH
+       TAD (212
+       JMS LDRPCH
+ERTRN, JMP I (ABSLDR   /RETURN TO LOADER STARTING ADDRESS
+IOERR, JMS ERR
+       TEXT    %I/O ERROR%
+BADINP,        JMS ERR
+       TEXT    /BAD INPUT/
+BADCKS,        JMS ERR
+       TEXT    / BAD CHECKSUM/
+NULERR,        JMS CTINIT
+       NOP
+       JMS ERR
+       TEXT    /NO INPUT/
+\fLIOERR,       JMS ERR
+       TEXT    /SYSTEM I-O ERROR/
+OERR,  JMS ERR
+       TEXT %NO /I!%
+
+CTINIT,        0
+CALONC,        JMS I ERR       /CALL ONCE-ONLY CODE
+       TAD (-30
+       DCA C1
+       TAD (CORTAB-1
+       DCA LOADXR
+       CLA CMA
+       DCA I LOADXR
+       ISZ C1
+       JMP .-3
+       DCA LSTFLD
+       DCA I (LSTADR   /V3 SET INITIAL STARTING ADDRESS TO 0
+       DCA I (OVLYFG
+       DCA PG7400
+       ISZ CTINIT
+       JMP I CTINIT
+       PAGE
+\f
+*CTLBLK+200
+
+/CODE FOR OVERLAY OPTION IS HERE.IF /I IS NOT
+/USED IMMEDIATELY, THIS CODE WILL PROBABLY BE DESTROYED,
+/AS IT IS USED FOR A BUFFER
+
+SLASHO,        CLA CMA
+       DCA I (OFLG     /RE ENABLE /I
+       TAD I (HANDLR
+       DCA GLONK       /ENTRY POINT TO HANDLER
+       TAD I (RECNO
+       DCA CCBLOK
+       CIF 0
+       JMS I GLONK     /READ IN CORE CONTROL BLOCK
+       0110
+CCBPTR,        CTLBLK
+CCBLOK,        0
+       JMP I (OERR     /DATA FAILURE
+       TAD I CCBPTR    /NO. SEGMENTS
+       CMA             /TEST FOR BAD CORE IMAGE
+       AND L7740
+       SZA CLA
+       JMP I (BADINP   /NOT CORE IMAGE
+       TAD I CCBPTR
+       DCA SEGCNT
+       TAD I SGSTAD    /THIS CODE IS NEW FOR V3D
+/      AND [70         /GET FIELD
+       CLL RTR
+       RAR
+       DCA I (LSTFLD
+       ISZ SGSTAD
+       TAD I SGSTAD
+       DCA I (LSTADR
+       ISZ SGSTAD
+       TAD I SGSTAD    /GET JSW FROM SAVE FILE
+       AND [400
+       DCA TEMP        /PRESERVE /P
+       TAD I [MPARAM+1
+       AND (7377
+       TAD TEMP
+       DCA I [MPARAM+1
+       TAD I SGSTAD
+       AND (3          /PRESERVE LAST 2 BITS
+       DCA TEMP
+       TAD I (MPARAM+2
+       AND [7774
+       TAD TEMP
+       DCA I (MPARAM+2
+       ISZ SGSTAD
+NEWSEG,        TAD I SGSTAD    /SEGMENT START ADDRESS
+       DCA ORIGIN
+       TAD I SGFDLT    /FIELD AND LENGTH
+       AND L77
+       DCA XFIELD
+       TAD I SGFDLT
+       AND [7700
+       SNA             /V3C
+       STL CLA RAR     /AC4000
+       DCA SEGLTH
+       TAD SEGLTH
+TWOPG, TAD [7600
+       SMA CLA         /NO.. IS TWO PAGE SEGMENT LEFT?
+       TAD [7600       /YES..-400 TO WORD COUNT
+       TAD [7600       /NO.. -200 TO WORD COUNT
+       DCA WDCT
+       TAD SEGLTH
+       TAD [7600       /BUMP DOWN LENGTH LEFT
+       DCA SEGLTH
+
+       ISZ CCBLOK      /POINT TO NEXT DATA RECORD
+       TAD CCBLOK
+       DCA DATRC
+       DCA OLDT9       /MARK DIRECTORY DESTROYED
+       CIF 0
+       JMS I GLONK     /READ THE DATA RECORD IN
+       0210
+       1400    /INTO 11400
+TEMP,
+DATRC, 0
+       JMP I (IOERR    /DATA FAILURE
+       CLA CMA
+       TAD ORIGIN
+       AND [177
+       TAD (1200       /SET UP INPUT POINTER
+       CHARPT=10
+       DCA CHARPT
+LOOPI, TAD I CHARPT
+       JMS I (LOADWD   /MOST OF THE WORK
+       ISZ ORIGIN
+L7400, 7400            /NOP
+       ISZ WDCT        /FINISHED THIS BLOCK?
+       JMP LOOPI
+       JMS I (WRBUF    /YES.. WRITE THE STUFF OUT
+       DCA I (BUFREC   /SO THAT WRBUF DOESN'T SCREW US UP
+       TAD SEGLTH      /V3C (REARRANGED)
+       SMA SZA         /ALL PAGES DONE?
+       JMP TWOPG       /NO, NEXT! (IF DONE, FALL INTO 'GTSEG')
+       ISZ SEGCNT      /YES, ANY MORE SEGMENTS
+       SKP
+       JMP RENEW       /RESET CCB POINTER FOR NEXT /I
+       CLA CLL CML RTL
+       TAD SGSTAD
+       DCA SGSTAD
+       CLA CLL CML RTL
+       TAD SGFDLT
+       DCA SGFDLT      /POINT TO NEXT CCB ENTRIES
+       JMP NEWSEG
+
+GLONK, 0               /HANDLER ENTRY POINT HERE
+WDCT,  0
+SEGCNT,        0
+SEGLTH,        0
+CTLBLK=3400
+
+SGFDLT,        CTLBLK+5        /FIELD AND LENGTH WORD
+SGSTAD,        CTLBLK+1        /SEGMENT START ADDRESS
+
+L7740,
+RENEW, 7740            /USED TO CLEAR AC
+L77,   77              /MIGHT OR MIGHT NOT SKIP
+       TAD (CTLBLK+1
+       DCA SGSTAD
+       TAD (CTLBLK+5
+       DCA SGFDLT
+       JMP I (NEWFIL
+       PAGE
+\f      *CORTAB         /ONCE-ONLY CODE
+
+ONCE,  0               /ONCE-ONLY CODE TO CHECK FOR CORRECT MONITOR
+       DCA I WRBUF     /DON'T CALL AGAIN
+       TAD [400
+       TAD K7400
+       SZA CLA
+       JMP OLDMON
+       TAD [7
+       TAD M7
+       SNA CLA
+       JMP I ONCE      /THEY AGREE
+OLDMON,        TAD KERR
+       DCA I NEXFIL
+       JMS I PERR      /THEY DON'T
+       TEXT    /INCOMPATIBLE/  /MUST BE AN EVEN # OF CHARS LONG
+       CIF CDF 0
+       JMP I K7605
+K7400, 7400
+PERR,  ERR
+K7605, 7605
+KERR,  ERR&177+5600
+\f      /PAGE 0 - TEMPORARIES AND LITERALS.
+               /LOCATIONS 0-3 ARE RESERVED FOR POINTERS TO KEY LOCATIONS
+               /IN THE MONITOR (SO THE CUSPS CAN GET AT THESE LOCATIONS)
+
+               /LOCATIONS 4-6 ARE RESERVED FOR SYSTEM ODT FIELD 1 BREAKPOINTS
+
+       *7
+OLDT9, 0               /POINTER TO DEVICE HANDLER OF DIRECTORY IN CORE
+
+       *15
+XR1,   0
+XR2,   0
+XR,    0
+       *20             /ENTRY TO MONITOR FROM A CALL TO 17700 -
+                       /CAN BE DESTROYED AFTER IT IS EXECUTED
+MSTART,        TAD I T1
+       DCA MACARG
+       TAD I [7700
+       DCA I [MONITO
+       TAD I [SMCIF
+       DCA I T2        /FAKE A CALL TO "MONITO"
+       TAD I [MONITO
+       RAL
+       SNL SMA CLA
+       TAD I [SMCIF
+       TAD T3
+       SNA CLA         /CHECK FOR A CALL FROM 10000-11777
+       JMP I [MERROR   /YES - GIVE ERROR IMMEDIATELY
+       JMP I T4        /NO - SLIDE INTO MONITOR CODE
+
+       *36             /POINTERS TO INTERNAL MONITOR LOCATIONS FOR "BUILD"
+       SDNAME          /SYSTEM DEVICE NAME TABLE
+       SDVHND          /DEVICE HANDLER ENTRY TABLE
+\f      *40             /LOCATIONS 20-37 RESERVED FOR CUSP SCRATCH SPACE
+USERFG,        1       /MUST BE IN 40 - SEE CD LISTING
+T1,    MARG1   /MUST BE AT 41
+T2,    FGETX
+T3,    -6213
+T4,    MRENTR
+T5,    0
+T6,    0
+T7,    0
+T8,    0
+T9,    0
+NAME,  0
+NFILES,        0
+ASFLAG,        0
+MACARG,        0
+EPASS, 0
+MERRNO,        4000
+MEOXIT,        CIF 0           /RETURN FROM ENTER OVERLAY
+       JMS I [SHNDLR
+       0210
+       1000
+       MONTOR+2        /RESTORE LOCS 1000-1377 OF USR
+       HLT             /HELP!
+       JMP I .+1
+       MENTER          /RESTART ENTER OPERATION COMPLETELY
+\f      $
+\f