home *** CD-ROM | disk | FTP | other *** search
/ ftp.update.uu.se / ftp.update.uu.se.2014.03.zip / ftp.update.uu.se / pub / pdp8 / os278-src.tar.Z / os278-src.tar / os278.pa < prev    next >
Text File  |  1992-09-18  |  89KB  |  4,358 lines

  1. /OS278  SYSTEM MONITOR
  2.  
  3.  
  4. /ADAPTED FROM:
  5. /12 OS8 MONITOR SYSTEM        OS8 VERS. 3F
  6. /
  7. /
  8. /
  9. /
  10. /
  11. /
  12. /
  13. /
  14. /
  15. /COPYRIGHT  (C)  1970,1971,1972,1973,1974,1975,1977
  16. /         1982 BY DIGITAL EQUIP. CORP.
  17. /
  18. /
  19. /
  20. /
  21. /
  22. /
  23. /
  24. /
  25. /
  26. /
  27. /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
  28. /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
  29. /CORPORATION.  DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
  30. /FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT.
  31. /
  32. /THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
  33. /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
  34. /(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
  35. /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
  36. /
  37. /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
  38. /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
  39. /DIGITAL.
  40. /
  41. /
  42. /
  43. /
  44. /
  45. /
  46. /
  47. /
  48. /
  49. /
  50. /13-APRIL-1977        RL/EF/HJ/SR
  51.  
  52.  
  53.     /THIS VERSION OF OS/8 IS THE BATCH OPERATING SYSTEM
  54.     /AS WELL AS THE STANDARD KEYBOARD SYSTEM. THIS SYSTEM
  55.     /IS EXTERNALLY COMPATIBLE WITH ALL PREVIOUS OS/8-PS/8
  56.     /USER PROGRAMS. HOWEVER, INTERNALLY THE SYSTEMS ARE
  57.     /QUITE DIFFERENT. THE MARCH 1972 OS/8 WILL NOT RUN BATCH.
  58.     /THIS VERSION IS COMPATIBLE WITH CCL.
  59.  
  60. /    SYMBOLIC REFERENCES TO VARIOUS OVERLAYS:
  61.  
  62.     MEOVLY=26        /DIRECTORY OVERFLOW OVERLAY FOR "ENTER"
  63.     MCDREC=51        /COMMAND DECODER
  64.     MSOVLY=54        /"SAVE W. ARGS" OVERLAY
  65.     MSOVL2=55        /SECOND PART OF SAVE W. ARGS
  66.     MERRTN=56        /MONITOR ERROR ROUTINE
  67.     MRUNRC=57        /"CHAIN" OVERLAY
  68.     ODTREC=60        /SYSTEM ODT
  69.     MFREE=70        /BEGINNING OF FILE STORAGE
  70.     CCB=7400
  71.     CSOVLY=400
  72.     RSOVL1=1400
  73.     RSOVL2=2000
  74.  
  75.     EXOVLY=64    /EXTENDED MEMORY OVERLAY
  76.     LXM=6200    /EXTENDED MEMORY LOAD INSTRUCTION
  77.     VERSNO="B&77
  78.     PATCHLEV="3
  79.  
  80. VERDATE=5604    //FOR THE INITIAL DIRECTORY TRANSFERRED UNDER BUILD.
  81.         //DATE IS 16-NOV-82. SEE "DPROPR" IN ABSLDR.
  82.  
  83. /V3 CHANGES:
  84.  
  85. /1.    CCL SUPPORT
  86. /2.    FIXED KILLER CLOSE BUG
  87. /3.    ADDED VERSION NUMBER
  88. /4.    ^U, RO TO BOL, AND LF ALL PRINT '.' AGAIN
  89. /5.    CALL TO USR WITH CODE OF 0 GIVES ERROR
  90. /6.    MONITOR ERROR MESSAGES NOW GIVE EXPLANATION
  91. /7.    ENTER NOW MOVES 7 FILES TO MAKE ROOM INSTEAD OF HALF SEGMENT
  92. /8.    DIRECTORY VERIFICATION HAS IMPROVED
  93.  
  94. /V3 FIXES TO ABSLDR:
  95.  
  96. /1.    ALLOWED PARITY ^C
  97. /2.    PUT IN SELF-STARTING STUFF
  98. /3.    FIXED CCB BUG FOR 17600
  99.  
  100. /FIXES TO FIELD RELEASE
  101.  
  102. /1.    ABSLDR CHECKS PAGE 0 LITERALS
  103. /2.    FIXED BUG RE MONITOR ERROR MESSAGES
  104. /3.    ADDITIONAL INFO FIX
  105. /4.    BATCH FIX
  106.  
  107. /FIXES FOR MAINTENANCE RELEASE:
  108.  
  109. /1.    CHANGED VERSION NUMBER OF MONITOR TO V3M
  110. /2.    INCORPORATED PATCH RE LOC 13121 AFTER MONITOR ERROR
  111. /    [SEQ #1, DSN APRIL 1975]
  112. /3.    ALLOW CHAIN TO WORK ON FULL FIELD SAVES
  113. /    [SEQ #2, DSN  JUNE 1975]
  114. /4.    ALLOW ABSLDR/I TO WORK ON FULL FIELD CORE IMAGES
  115. /    [SEQ #1, DSN OCTOBER 1975]
  116. /5.    ADDED INTERNAL VERSION NUMBER TO ABSLDR AT LOCATION 2200
  117. /    MAINT. RELEASE VERSION # IS V4
  118. /6.    SET INITIAL ABSLDR DATE TO 1-NOVEMBER-1975
  119.  
  120. /V3D AND OS/78 CHANGES:
  121.  
  122. /1.    ACCEPT DEC STANDARD DATE FORMAT FOR INPUT (DD-MMM-YY)
  123. /2.    CHANGED VERSION NUMBER TO V3Q
  124. /3.    ADDED DATE/78 CHANGES
  125. /4.    FIXED BUG ABOUT WAITING FOR TTY FLAG & BATCH
  126. /5.    ADDED STUFF FOR LINKER [USES SOFSET]
  127. /6.    CHANGED ABSLDR DATE TO 1-JUNE-77
  128. /7.    DISALLOW RUN OF PROGRAM WITH BIT 4 OF JSW ON [OS/78 ONLY]
  129. /8.    ASSIGNED RESIDENT BITS FOR SCOPE AND OS/78
  130. /9.    ALLOW @ IN KBM COMMAND
  131. /10.    COULD RUN INIT.CM ON SYSTEM START-UP
  132. /11.    CHANGED BAD CORE IMAGE MSG TO CORE IMAGE ERR
  133. /12.    CHANGED ABSLDR/I SO THAT IT SETS UP JSW AND SA
  134. /V3F CHANGES:
  135.  
  136. /1.    ADDED MONITOR SUPPORT FOR KT8A
  137. /        A. R,RUN, GET COMMANDS NOW LOAD 128K
  138. /        B. SAVE COMMAND CAN SAVE UP TO 128K
  139. /2.    ADDED HIGROUND SUPPORT
  140. /3.    ABSLDR ALSO UPDATED TO SUPPORT 128K
  141.  
  142. /V4 CHANGES:
  143.  
  144. /1.    ADAPTED TO RUN ON A VT278. THE PRIMARY CHANGES ARE:
  145. /    A.  CHANGED THE SENSE OF THE TTY I/O FLAGS TO SUPPORT THE
  146. /        VT278. CAN NO LONGER WAIT ON A TSF JMP .-1 FOR A MECHANICAL
  147. /        TTY TO COME UP. KCC IS TREATED AS A LOGICAL "KEYBOARD
  148. /        ENABLE", NOT AS A CLEAR (ENABLE) RECVR FLAG.
  149. /    B.  THE CONVENTION IS ESTABLISHED THAT THE KEYBOARD SHOULD BE
  150. /        ENABLED UPON EXIT FROM A PROGRAM. ALL OS/8 (OS/78) UTILITIES
  151. /        AND MONITOR ROUTINES WILL ASSUME THE KEYBOARD MAY NOT HAVE
  152. /        BEEN ENABLED. THUS, A KCC OR KRB WILL BE ISSUED PRIOR TO EXPECTING
  153. /        ANY TTY INPUT.
  154. /    C.  ON A VT278, THE IOT 01 (6031,6041) ON THE TTY WILL CLEAR THE
  155. /        FLAG AFTER TESTING IT. THUS THE SEQUENCE KSF JMP .-1 KRS ...
  156. /        KSF JMP .-1 IS NOT PERMITTED UNLESS A KCC OR KRB INSTRUCTION
  157. /        HAS BEEN ISSUED BETWEEN THE KSF INSTRUCTIONS. THE SAME APPLIES
  158. /        TO TTY OUTPUT.
  159. /    D.  KT8A INSTRUCTIONS FOR MEMORY ABOVE 32K CONFLICT WITH CONTROL
  160. /        PANEL MEMORY INSTRUCTIONS FOR THE VT278. FOR STANDARD OS/78
  161. /        V4 PROGRAMS, ROUTINES USING LXM AND RXM INSTRUCTIONS ARE
  162. /        DISABLED WITH THE "SET SYS OS278" COMMAND. USER PROGRAMS
  163. /        CAN SENSE THE "OS278 BIT" (BIT 9 OF OS78 WORD IS SET) TO TREAT
  164. /        THE SITUATION AS THEY WISH.
  165. /    E.  DEFAULT IS SCOPEBIT SET
  166.  
  167.     SCOPBIT=7602
  168.  
  169. /2.    INCLUDED ALL PATCHES PUBLISHED IN DSN SERIES SINCE THE RELEASE OF V3:
  170. /
  171. /    A.  FIXED CCB BUG IN RUN COMMAND FOR KTA8 EXTENDED MEMORY (AT RUN2)
  172.  
  173. /    B.  ABSLDR /I BUG WITH KT8A MEMORY
  174.  
  175. /OS278
  176. /VB0    INITIAL VERSION
  177. /VB1    CHANGED PROMPT FROM . TO >
  178. /VB2    CHANGED PROMPT FROM > TO }
  179. /04-JAN-82    ADDED LOWER CASE INPUT
  180.  
  181. EJECT OS78 V4 KEYBOARD MONITOR
  182.  
  183. /KEYBOARD MONITOR.  LIVES IN BLOCK 7-12. AFTER A KYMON COMMAND HAS BEEN
  184. /DETECTED THE TOP PORTIONS OF KMON CAN BE USED FOR OVERLAY AREAS, SO
  185. /DON'T EXPECT MUCH TO BE PRESENT FROM 0-1777 ONCE THINGS GET ROLLING!
  186.  
  187.  
  188.     FIELD 0
  189.     MTHREE=CLA CLL CMA RTL
  190.     *200
  191. PRINT,    JMP I HNDL    /MUST BE AT 200 FOR BATCH
  192.     NOP        /****GETS CIF CDF N FOR BATCH*****
  193.     TLS        /****GETS JMP I .+1******
  194.     TSF        /*GETS BOSPRT*****
  195.     JMP .-1        //V4:  V3 USED TO WAIT FOR TTY FLAG.
  196.  
  197.     CLA        //V4:  NOP ABOVE NECESSARY TO KEEP THIS CLA HERE FOR
  198.             //     PIP, AND WHO KNOWS WHAT ELSE.
  199.  
  200.     TAD [7000    //V4: DUMB, BUT WON'T HURT ANYTHING.
  201.     DCA PRINT+1
  202.     JMP I PRINT
  203. GETNAM,    0        /ROUTINE TO ACCESS TTY INPUT
  204.     DCA NM1        /FIRST OFF,INITIALIZE 
  205.     DCA NM2        /SET UP SYMBOLS FOR STORING NAME
  206.     DCA NM3
  207.     DCA NM4
  208.     TAD TNM1
  209.     DCA PN
  210.     CLA CMA
  211.     DCA PRDSW
  212. GTNMX,    DCA NMCT
  213.     TAD I LXR    /LOCATE FIRST CHARACTER
  214.     TAD M240    /IS IT A SPACE?
  215.     SNA        /IF SO TEST NEXT CHARACTER
  216.     JMP .-3
  217.     TAD [240    /WE'VE GOT FIRST CHARACTER
  218.     SKP
  219. GTNMLP,    TAD I LXR    /GET ANOTHER CHARACTER
  220.     DCA TMP
  221.     TAD TMP
  222.     TAD M256    /IS IT A PERIOD?
  223.     SNA
  224.     JMP PERIOD    /IF SO, PROCESS IT
  225.     TAD [-2
  226.     CLL
  227.     TAD M12
  228.     SNL CLA        /IS IT GT  ASCII CHARACTER (#9)? 
  229.     JMP NINSRT    /IF NO, INSERT IN NAME
  230.     TAD M301
  231.     TAD TMP
  232.     CLL CML
  233.     TAD [-32
  234.     SNL CLA        /IS IT GT ASCII(Z),IF SO
  235.     JMP EONAME    /END OF NAME
  236. NINSRT,    TAD NMCT    /CHECK FOR MAXIMUM CHARS
  237.     TAD [-6
  238.     SMA CLA
  239.     JMP GTNMLP    /IF MAXIMUM SAVE NO MORE
  240.     TAD NMCT    /SET UP POINTER TO STORE CHARACTER
  241.     CLL RAR
  242.     TAD PN
  243.     DCA TEMP1    /HERE IS POINTER TO NM1,NM2,ETC.
  244.     TAD TMP
  245.     AND [77        /ISOLATE SIX BITS FOR STORAGE
  246.     SZL
  247.     JMP .+4        /NO MORE ROOM
  248.     RTL
  249.     RTL
  250.     RTL
  251.     TAD I TEMP1    /OR IT IN AND STORE
  252.     DCA I TEMP1
  253.     ISZ NMCT
  254.     JMP GTNMLP
  255. PERIOD,    ISZ PRDSW
  256.     JMP EONAME
  257.     ISZ PN
  258.     TAD N4
  259.     JMP GTNMX
  260. EONAME,    TAD NMCT
  261.     SZA CLA
  262.     ISZ GETNAM
  263.     JMP I GETNAM
  264.  
  265. HNDL,    4000        /ROUTINE TO RELOAD NON-SYS HANDLER FOR SAVE ROUTINE
  266.     JMS I [SHNDLR
  267.     0200        /READ TWO PAGES 
  268.     1000        /INTO 1000
  269. LDBLK,    0        /SET UP BY SAVE ROUTINE
  270.     JMP KMONER
  271.     JMP I HNDL
  272.  
  273. PRINTQ,    JMS PRMESG
  274.     TEXT /?/
  275.     0
  276. KMER3,    JMS I [PRMESG
  277.     TEXT /NO/
  278. TNM1,    NM1
  279. M240,    -240
  280.  
  281.     *325
  282. PRINLP,    JMS PRWD
  283.     ISZ PRMESG
  284.     SKP
  285.     IFNZRO .-330 <CCLTRB,ERRR>
  286. PRMESG,    0        /ERROR MESSAGE PRINTING ROUTINE
  287.     CLA
  288.     TAD I PRMESG
  289.     SZA
  290.     JMP PRINLP
  291.     NOP        //V4: NO NEED FOR V3 WAIT.    TSF
  292.     NOP        //                JMP .-1
  293.     JMP I ERRET    /RETURN TO MONITOR
  294. PRWD,    0
  295.     DCA TMP
  296.     TAD TMP
  297.     RTR
  298.     RTR
  299.     RTR
  300.     JMS PCHAR
  301.     TAD TMP
  302.     JMS PCHAR
  303.     JMP I PRWD
  304. PCHAR,    0
  305.     AND [77
  306.     SNA
  307.     JMP I PCHAR
  308.     TAD [240
  309.     AND [77
  310.     TAD [240
  311.     JMS I PCH
  312.     JMP I PCHAR
  313. M12,    -12
  314. M256,    -256
  315. M301,    -301
  316.  
  317. N4,    4
  318.  
  319.     *367
  320. SAVE12,    JMS I [SHNDLR    /RELOAD THE USR (I/O MONITOR) AND RETURN TO
  321.             /THE KEYBOARD MONITOR (KEYMON) WHEN EXITING
  322.             /FROM SAVE COMMAND.
  323.     0610
  324.     0
  325.     MONTOR
  326.     JMP KMONER
  327.     CLA CMA
  328.     CDF 10
  329.     DCA I [7700    /MCALL1. A -1 SAYS USR HAS BEEN LOADED.
  330.     JMP I [7605
  331.     *400        //THIS PAGE LIVES IN BLOCK 10 OF THE "HEAD". USEFUL
  332.             //INFORMATION WHEN FIGURING OUT WHAT SET DOES.
  333.  
  334. KMNTRY,    JMP I GDEVNO    /V3
  335.     0        /FREE LOCATION !
  336. PCRLF,    JMS I [CRLF
  337.     IFNZRO .-403 <BTCHER,XXXX>
  338.  
  339. KEYMON,    JMS I GLINE
  340.     TAD [BEGLN-1    /ADDRESS REFERENCED BY INIT
  341.     DCA LXR
  342.     JMS I GNAME
  343. /V3D    JMP I [PRINTQ
  344.     XXX=[PRINTQ    /NEED LITERAL IN SAME PLACE
  345.     NOP        /V3D ALLOW @ IN NAME
  346.     JMS I [SRCH
  347.     -123;    ASSIGN
  348.     -2301;    SAVE
  349.     -2225;    RUN
  350.     -705;    GET
  351.     -2200;    R
  352.     -2324;    START
  353.     -1704;    ODT
  354.     -0405;    DEAS
  355.     IFNZRO .-431 <SEECCL,ZZZ>
  356.     -0401;    DATE
  357.     0
  358.     JMP I .+1
  359. CCLSW,    PRQMRK        /MODIFIED FOR CCL TO 'GETCCL'
  360.     IFNZRO CCLSW-435 <SEECCL,ZZ>
  361.  
  362. ASSIGN,    TAD [12
  363.     JMS GDEVNO
  364.     TAD [UDNAME-1
  365.     DCA TM1
  366.     JMS I GNAME
  367.     JMP ASGN2+1    /NO USER DEV. DO A DEASSIGN 
  368.     TAD NM2        /SEE IF WE HASH IT
  369.     SNA
  370.     JMP ASGN2    /DON'T HASH..ONLY 1 OR 2 CHARS
  371.     TAD NM1
  372.     RAL        /LINK BECOMES 4000 IF NECESSARY
  373.     CLA CML RAR
  374.     TAD NM2
  375. ASGN2,    TAD NM1
  376.     JMP I [ASDONE
  377.  
  378. R,    DCA I [GETSW
  379.     TAD P6203
  380.     JMS I [RESET
  381.     ISZ RUNSW
  382.     TAD [SHNDLR
  383.     DCA HANDAD
  384.     CLA IAC
  385.     JMP RGETPG
  386.  
  387. GDEVNO,    KMINIT
  388.     DCA ASNM1-1
  389.     JMS I [MINCOR
  390.     JMS I GNAME
  391.     JMP I [KMER4
  392.     TAD NM1
  393.     DCA ASNM1
  394.     TAD NM2
  395.     DCA ASNM1+1
  396.     TAD HNDLAD
  397.     DCA  HANDAD
  398.     CIF 10
  399.     JMS I SYSTEM
  400.     1
  401. ASNM1,    0;0
  402. HANDAD,    KMINIT        /ENTRY FOR "INIT" DRIVEN SYSTEM
  403.     JMP I [KMER1
  404.     TAD ASNM1+1
  405.     JMP I GDEVNO
  406.  
  407. GET,    TAD [SKP
  408. RUN,    DCA I [GETSW
  409.     TAD P6203    /RESET JSW FOR OPTIMUM BATCH USE
  410.     JMS I [RESET    /RESET DEVICE HANDLER TABLE
  411.     DCA RUNSW
  412.     CLA IAC
  413.     JMS GDEVNO
  414. RGETPG,    JMS RSCOMN
  415.     JMS I [MINCOR
  416.     TAD SENTER
  417.     CIF 10
  418.     JMS I SYSTEM
  419.     2
  420. PGNAME,    NM1        /LOOKUP THE FILE NAME REQUESTED
  421.     MOVBUF        /USED AS POINTER TO FIELD 1 SR
  422.     JMP I [KMER2 
  423.     JMP I [RLOADR    /THEN GO TO IT.
  424. RSCOMN,    0
  425.     DCA SENTER
  426.     TAD HANDAD
  427.     DCA DEVHND
  428.     JMS I GNAME
  429.     JMP I [KMER4
  430.     TAD NM4
  431.     SNA
  432.     TAD [2326    /DEFAULT EXTENSION IS .SV
  433.     DCA NM4
  434.     JMP I RSCOMN
  435. SAVE,    TAD [SAVE12    /CHANGE ERROR RETURN ADDRESS AS WE WILL DESTROY 
  436.             /F0 AND F1 MONITOR.
  437.     DCA ERRET
  438.     TAD I [JSBITS
  439.     JMS I [RESET
  440.     CIF 10        /MOVE THE LINE BUFFER TO 1600 DURING
  441.     JMS I PGNAME+1    /A SAVE, AS HANDLER WIPES IT OUT
  442.     TAD LXR        /LET'S MOVE THE REGISTER AROUND
  443.     TAD [SVLNBF-BEGLN
  444.     DCA LXR
  445.     TAD [1001
  446.     DCA HNDLAD
  447.     CLA IAC
  448.     JMS GDEVNO
  449.     JMS RSCOMN
  450.     JMP I [SAVE2
  451. HNDLAD,            /REPLACED WITH 1001 BY SAVE
  452.  
  453. WRCTLB,    7001        /WRITE OVERLAY AND CCB
  454.     JMS I [SHNDLR
  455.     4600
  456.     6200
  457.     MTEMP+6
  458.     JMP KMONER
  459.     JMP I WRCTLB
  460.     
  461.             /LOADS SYSTEM ODT OVER THE MONITOR
  462. ODT,    JMS I PGTOUT
  463.     JMS I [SHNDLR
  464.     1001
  465.     0
  466.     ODTREC
  467.  
  468.     IFNZRO .-600 <ODTERROR> //ODT RESUMES AT 601 AFTER OVERLAYING.
  469.  
  470.  
  471.     *600
  472. START,    DCA TEMP1
  473.     DCA TEMP2
  474.     TAD I LXR    /V3
  475.     SZA        /V3
  476.     JMP I STRTX    /V3 (V4: USED TO BE ON PAGE 0)
  477.     TAD I [JFIELD
  478.     DCA I [MSTCDF
  479.     TAD I [JSBITS
  480.     AND [1000
  481.     SZA CLA
  482.     JMP I [KMER3
  483.     TAD I [JSBITS
  484.     JMS I [RESET    /RESET ONLY IF NO START ADR SPECIFIED
  485.     TAD I [JSTART
  486. STCOMN,    DCA I [MSTADR
  487.     NOP        //V4: V3 WAITED. V4 DOESN'T    TSF
  488.             //                JMP .-1
  489.             //NOP PLACE HOLDER ONLY BECAUSE LOCATION SHIFTS
  490.             //IN OS8 HAVE TOTALLY UNPREDICTABLE EFFECTS!
  491.     JMS I PGTOUT
  492.     TAD I [JSBITS
  493.     SPA CLA
  494.     JMP I [MSTCDF
  495.     TAD [SHNDLR
  496.     DCA I [MREAD-1
  497.     TAD [1000
  498.     DCA I [MREAD+1
  499.     DCA I [MREAD+2
  500.     TAD [MTEMP+4
  501.     DCA I [MREAD+3
  502.     TAD FUDJMP
  503.     DCA I [MSWITC
  504.     JMP I [MREAD
  505. MINCOR,    0
  506.     CIF 10
  507.     JMS I SYSTEM
  508.     10
  509.     CDF 10
  510.     DCA I [OLDT9    /ZERO OUT "DIRECTORY IN CORE" KEY
  511.     CDF 0
  512.     TAD [200
  513.     DCA SYSTEM
  514.     JMP I MINCOR
  515. RLOADR,
  516. RUN1,    TAD I [PGNAME
  517.     DCA FILE
  518.     JMS I DEVHND
  519.     0101
  520.     CCB
  521. FILE,    0        /READ IN THE HEADER BLOCK
  522.     JMP KMONER    /ERROR WHILE READING HEADER BLOCK
  523.     TAD I [CCB
  524.     JMS I [CCBTST    /TEST FOR VALID CORE CONTROL
  525.     TAD I [CCB+3    /V3D
  526.     RAL        /V3D
  527.     JMS I KRCHK    /V3D CAN'T RUN SYSTEM CUSP UNDER OS78
  528.     TAD I [CCB+1
  529.     DCA I [MSTCDF
  530.     TAD I [CCB+2
  531.     DCA I [MSTADR    /MOVE THE STARTING ADDRESS INTO UPPER CORE
  532.     TAD I [CCB+1
  533.     DCA I [JFIELD
  534.     TAD I [CCB+2
  535.     DCA I [JSTART
  536.     TAD I [CCB+3    /SET UP THE JOB INFORMATION AREA
  537.     JMS I [RESET    /AND CLEAR INFORMATION ABOUT "RUN" HANDLER
  538.     TAD FUDJMP
  539.     DCA I [MSWITC        /SET MSWITC TO INHIBIT LOADING 7400
  540. GETSW,    SKP            /SKP FOR GET, NOP FOR RUN
  541.     JMP RUN2
  542.     TAD P6203
  543.     DCA I [MSTCDF
  544.     TAD [7600
  545.     DCA I [MSTADR        /IF A GET, SET STARTING ADDRESS TO RETURN
  546.                 /TO MONITOR
  547.  
  548. RUN2,    TAD I R7400X    //V4: SYSGEN PATCH 1 OF 4 LINES  V3: EXTMP
  549.     CLL CMA RAL    /POINT TO LAST DOUBLEWORD IN CCB
  550.     TAD TCCB4    /CCB4=CCB+4
  551.     DCA TM1        /TM1 POINTS TO SEG. ADDRESS
  552.     TAD I TM1    /STORE ADDRES TO READ POSSIBLE OVERLAY
  553.     DCA I [MREAD+2
  554.     ISZ TM1        /POINT TO SEGMENT CONTROL WORD
  555.     TAD DEVHND    /IF THE HANDLER IS IN 7600, OR
  556.     TAD [200    /IF THE SEGMENT DOES NOT LOAD OVER
  557.     CLA RAL        /7000, NO OVERLAY IS NEEDED. ALSO IF
  558.     TAD I TM1    /THE SEGMENT IS IN FIELDS 1-7.
  559.     AND [77
  560. RUN5A,    SZA CLA
  561.     JMP I [RUN6    // 2/4  V3:  RUNVI  /NO PROBLEMS.. READ STUFF IN
  562.     TAD I [MREAD+2    /SEE IF WE OVERLAY 7000
  563.     CLL CML RAR
  564.     TAD I TM1    /ADD IN CONTROL WORD
  565.     TAD [300
  566.     SPA        /IF NEGATIVE, 7000 IS NOT OVERLAYED
  567.     JMP RUN5A
  568.     TAD [7600    /GETS 0, 100, 200, OR 300
  569.     SMA        /IF  POSITIVE READ 3 PAGE OVERLAY
  570.     ISZ I [PGNAME+1    /POINT TO NEXT TO LAST RECORD
  571.     TAD [300
  572.  
  573.     DCA RDCNT
  574.     TAD I [PGNAME+1
  575.     CMA        /GET RECORD TO READ OVERLAY FROM
  576.     TAD FILE
  577.     DCA R7000
  578.     JMS I DEVHND    /READ OVERLAY FROM THE FILE INTO PAGES
  579. RDCNT,    0    /BEFORE CCB
  580.     6200        /THEN WRITE THE WHOLE MESS OUT
  581. R7000,    0
  582.     JMP KMER1    /NOT AVAILABLE
  583.     JMS I [WRCTLB    /WRITE OUT THE OVERLAY+CCB
  584.     DCA .-1        /BUT ONLY ONCE!!
  585.     ISZ RUNSW
  586.     DCA I [MSWITC    /ENABLE READ OF OVERLAY
  587.     TAD RDCNT    /SEE IF THIS SEG IS EXHAUSTED
  588.     CIA
  589.     TAD I TM1
  590.     SPA SNA
  591.     ISZ I R7400X    // 3/4  V3:  EXTMP  /ARE WE DONE ALL SEGMENTS?
  592.     SKP        /NOT YET. LOOP UNTIL DONE
  593.     JMP I [MSWITC
  594. RUN5,    DCA I TM1    /SAVE ALTERED CONTROL WORD
  595.     JMP RUN2
  596.  
  597.  
  598. /ASDONE,    CDF 10
  599. /    DCA I TM1    /THIS COULD BE OPTIMIZED
  600. /    CDF 0
  601. /    JMP I [KEYMON
  602.  
  603.  
  604. KMER1,    JMS I [PRNAME    /DEVICE NOT AVAILABLE
  605.     JMS I [PRMESG
  606.     TEXT    / NOT AVAIL/
  607. TCCB4,    7404    /CCB+4
  608. R7400X,    R7400        // 4/4  V3:  RUNVI,    RUN6
  609. STRTX,    STRTEX        //PICK UP THE STARTING ADDRESS ON THE NEXT PAGE.
  610.  
  611.     //NO LITERALS HERE: WILL CONFLICT WITH RELOC MERGEX DURING ASSEMBLY.
  612. //V4 RELEASE FOR OS78 REWORKS THIS PAGE SOMEWHAT. ANYTHING IN RELATIVE
  613. //LOCATIONS 0-112 IS IN THE OS8 INPUT LINE BUFFER AND WILL BE CLOBBERED
  614. //AFTER INITIALIZATION. AT INTGO A KCF IS ISSUED. IF A VT278, KEYBOARD
  615. //FLAG WILL BE SET; IF NOT, IT WILL BE CLEARED. IF ANYTHING IS CHANGED
  616. //ON THIS PAGE, CHECK TO SEE IF <SETERROR: . . .> HAS BEEN TRIGGERED!
  617.  
  618.     AC0004=7307
  619.  
  620.     *1000
  621. /MUST BE AT 1000 FOR BATCH
  622. BEGLN,    "@        /KEYMON LINE BUFFER BEGINS HERE AFTER INIT CODE IS
  623.     "I
  624.     "N
  625.     "I
  626.     "T        /DONE. CCL EXPECTS KMINIT TO BE IN THE NEXT LOCATION!
  627. KMINIT,    CDF 10        /INITIALIZATION - DESTROYED BY LINE BUFFER
  628.     ISZ I [7700    /LOC 17700=7777 IF I/O MONITOR IS KNOWN
  629.     JMP .+3        /++TO BE IN CORE, SO SET UP
  630.     TAD [200    /THE INITIAL POINTER FOR CALLS TO THE MONITOR
  631.     DCA SYSTEM    /ACCORDINGLY
  632.     CDF 0
  633.     TAD I LXR
  634.     DCA I X1    /MOVE PMSRST TO MSWITC SO MONITOR KNOWS WHERE TO GO.
  635.     ISZ TEMP2
  636.     JMP .-3
  637.     CDF 10
  638.     TAD MVFROM    /PUT MOVBUF AFTER 1600 SO IT'S USEABLE.
  639.     DCA I PDBUF
  640.     ISZ .-2
  641.     ISZ PDBUF
  642.     ISZ MVCNT
  643.     JMP .-5
  644.     CDF 0
  645.     TAD I PDBUF+1    /SEE IF BATCH IS SET. BATCH CONTROL WORD IS IN 17777.
  646.             /IF 2000 BIT IS SET, BATCH IS RUNNING. IF 400 BIT IS
  647.             /SET, BATCH KNOWS IT CAN USE HIGHEST FIELD UNMOLESTED.
  648.     RAL        /IF YES, GO TO PAGE 0 TO CONTINUE
  649.     SMA CLA        /IF IT ISN'T, CONTINUE NORMALLY
  650.     JMP INTGO    /NORMAL KEYBOARD SYSTEM
  651.     //V4: DCA I RTWTPT    /DON'T WAIT ON TTY FLAG IF BATCH IS RUNNING
  652.     TAD I [JSBITS    /IS BOS IN PLACE?
  653.     AND [400
  654.     SNA CLA
  655.     JMP BATCH    /NO. GO READ IT IN.
  656.     JMP BCHGO    /YES. START IT UP.
  657.  
  658. //CHECK FOR 278 SYSTEM. RETURN TO MONITOR NO LONGER LOOKS FOR AN "UNPRINTED"
  659. //CONTROL C IN THE TTY KEYBOARD BUFFER.
  660.  
  661. INTGO,    KCF        //IF VT278, WILL SET FLAG; IF NOT, FLAG IS CLEARED.
  662.     KSF
  663.     JMP I ERRET    //TRADITIONALISTS WIN: WE'RE NOT ON A VT278.
  664.     KRB        //ENABLE THE KEYBOARD FOR SURE,
  665.     AC0004        //AND TOSS WHAT EVER WAS THERE.
  666.     AND I KOS78    //WHERE THE CURRENT COPY OF OS-WHATEVER LIVES.
  667.     SZA CLA
  668.     JMP I ERRET    //VT278 WITH THE BIT SET SAYS SYSTEM IS CONFIGURED.
  669.             //IF NOT PROPERLY CONFIGURED, SOME IOTS IN OS78
  670.             //WILL CONFLICT WITH THE 278, SO BITCH ABOUT IT
  671.     JMS I [PRMESG    //EVERY TIME MONITOR IS CALLED.
  672.     TEXT    "?SET SYS OS278"
  673.     ZBLOCK 2    //TWO FREE LOCATIONS--THREE IF YOU'RE
  674.             //CAREFUL:  OS8 MONITOR NEEDS A ZERO TO TERMINATE PRMESG!!!
  675.  
  676.     //ONLY GOING TO MOVE 6 LOCATIONS. COULD PROBABLY GET BY
  677.     //WITH LESS.
  678.  
  679. PMSRST,    SHNDLR&177+4200    /JMS SHNDLR
  680.     0300
  681.     7000
  682.     MTEMP+6
  683.  
  684.     IFNZRO .-1067 <SETERROR: SET SYS OSXXX HAS BEEN AFFECTED!>
  685.  
  686. MOD1,    HLT        /CONTAINS SECOND COPY OF OS/78 BIT AND OS278 BIT. (OS78
  687.             /IS THE 200 BIT, OS278 IS BIT 9 (THE 4 BIT).
  688.     CDF CIF 0
  689.     /TCF        //IN VERSION 3
  690. MVCNT,    MOVBUF-MVT3-1
  691. PDBUF,    MOVBUF
  692.  
  693.     MVRELOC=.
  694.  
  695. MVFROM,    NOPUNCH
  696.     *7626
  697.     ENPUNCH
  698. MOVBUF,    7777    /USED IN BATCH SETUP
  699.     TAD I MVT1    /MOVE THE LINE BUFFER FROM 1000
  700.     DCA I MVT2    /TO 1655
  701.     ISZ MVT1
  702.     ISZ MVT2
  703.     ISZ MVT3
  704.     JMP .-5
  705.     CIF CDF 0
  706.     JMP I MOVBUF
  707.  
  708. MVT1,    BEGLN
  709. MVT2,    SVLNBF
  710. MVT3,    -111
  711.  
  712.     *MVRELOC+14
  713.     IFNZRO .-1107 <SETERROR: SET SYS INIT IS AFFECTED!>
  714.  
  715.             //KEYMON ENDS HERE. IF THIS LOCATION CHANGES,
  716.             //MODIFY "INIT" IN SET.
  717.  
  718. INIT,    CDF 10        /V3D (INITIALIZATION)
  719.     TAD [400
  720.     DCA I ROT    /RESTORE LOC 7677 TO '400'
  721.     CDF 0
  722.     DCA KMINIT    /END LINE WITH 0
  723.     /TLS        //IN V3
  724.     JMP I CRLF    /FAKE OUT KBM AS IF USER TYPED @INIT
  725.  
  726.  
  727. //KEYBOARD INPUT BUFFER EXTENDS TO 1112. ANYTHING AFTER THAT IS OK.
  728.  
  729. DIGTLP,    TAD I LXR
  730. STRTEX,    TAD [-270
  731.     CLL
  732.     TAD [10
  733.     DCA TMP1    /V3
  734.     SNL
  735.     JMP EONUM
  736. /V3    ISZ DIGFLG
  737.     JMS ROT        //BUILD THE FIELD (TEMP1) AND THE LOCATION (TEMP2)
  738.     JMS ROT        //FOR THE START COMMAND.
  739.     JMS ROT
  740.     TAD TEMP2
  741.     TAD TMP1
  742.     DCA TEMP2
  743.     JMP DIGTLP
  744. EONUM,    TAD TEMP1
  745.     AND [7
  746.     CLL RTL
  747.     RAL
  748.     TAD KM6203
  749.     DCA I [MSTCDF
  750.     TAD TEMP2
  751.     JMP I .+1
  752.     STCOMN
  753.  
  754. ROT,    MBEGIN        //USED BY INIT TO RESET MONITOR ENTRY POINT.
  755.     TAD TEMP2
  756.     CLL RAL
  757.     DCA TEMP2
  758.     TAD TEMP1
  759.     RAL
  760.     DCA TEMP1
  761.     JMP I ROT
  762.  
  763. DEAS,    TAD [UDNAME-1
  764.     DCA X1
  765.     TAD [-17
  766.     DCA TM1
  767.     CDF 10
  768.     DCA I X1
  769.     ISZ TM1
  770.     JMP .-2
  771. KM6203,    CDF CIF 0
  772.     JMP I [KEYMON
  773.  
  774. ASDONE,    CDF 10        /V3
  775.     DCA I TM1    /V3
  776.     JMP KM6203    /V3
  777.  
  778.  
  779. CRLF,    KEYMON+1    /V3D NEEDED FOR INIT
  780.     DCA RBFLAG    //V4: CLEAR RUBOUT COUNTER ON RESTARTS.
  781.     TAD [215
  782.     JMS I PCH    //--JUST DO CRLF AND .
  783.     TAD [212
  784.     JMS I PCH
  785.     JMP I CRLF
  786.     PAGE
  787.  
  788. /NOTE: XR=AMFLAG !
  789.  
  790.     *1200
  791.     /TELETYPE INPUT ROUTINE
  792. XGLINE,    KEYMON+1    /MUST BE AT 1200 FOR BATCH & CCL
  793.     TAD PROMPT
  794.     JMS I PCH
  795.     DCA RBFLAG
  796.     TAD [BEGLN-1
  797. CHLM1,    DCA LXR
  798.     DCA AMFLAG    /ZERO ALTMODE FLAG
  799. CHLOOP,    KSF        //V4: STRANGELY ENOUGH, THIS LOOP IS OK FOR A VT278
  800.     JMP CHLOOP
  801.     TAD [200
  802.     KRS
  803.     DCA NM1
  804.     KCC
  805.     JMS SRCH
  806.     -225;CTRLU
  807.     -215;CARRET
  808.     -377;RUBOUT
  809.     -223;CHLOOP    /Ignore ^S
  810.     -221;CHLOOP    /Ignore ^Q
  811.     -233;ALTMOD
  812.     -212;CHLOOP    /Ignore LF
  813.     -200;CHLOOP
  814.     -217;CHLOOP    /IGNORE ^O
  815.     -203;CTRLC    /MUST BE JUST BEFORE 0
  816.             /MUST BE HERE FOR CCL
  817.     0
  818.     JMS PRNT
  819. CINSRT,    TAD NM1
  820.     DCA I LXR
  821.     TAD LXR
  822.     TAD [-BEGLN-110
  823.     SPA CLA
  824.     JMP CHLOOP
  825. CARRET,    JMS I [CRLF
  826.     TAD LXR
  827.     TAD [1-BEGLN
  828.     SNA CLA
  829.     JMP XGLINE+1
  830.     DCA I LXR
  831.     DCA I LXR
  832.     JMP I XGLINE
  833.  
  834.  
  835. /THIS AREA GETS MODIFIED BY SET COMMANDS (FOR REAL SCOPE RUBOUTS)
  836. /**** BEWARE! ***
  837.  
  838. PRNT,    0
  839.     TAD NM1        /ECHO CHARACTER
  840.     JMS I PCH
  841.     TAD NM1
  842.     TAD K7440    /CONVERT LC CHAR TO UP CASE CHAR
  843.     SMA
  844.     TAD [7740
  845.     TAD [340
  846.     DCA NM1        /SAVE IT IN UPPER CASE
  847.     JMP I PRNT
  848. K7440,    7440
  849. CTRLC,
  850. CTRLU,    TAD ["^
  851.     JMS I PCH
  852.     TAD NM1        /MAGIC LOCATION THAT CONTAINS A 203, SO THAT EARLIER
  853.     TAD [100    /VERSIONS OF OS/8 COULD OUTPUT A ^C IF NECESSRARY
  854. CLRLIN,    JMS I PCH    //SINCE V4 DOESN'T DO THIS ANYMORE, NM1 NEED NOT
  855. RBSPCL,    JMS I [CRLF    //BE INITIALIZED TO BE A 203.
  856.     JMP XGLINE+1
  857.  
  858. ALTMOD,    TAD ["$
  859.     DCA NM1
  860.     JMS PRNT
  861.     ISZ AMFLAG    /NOTE ALTMODE
  862.     JMP CARRET+1
  863. RUBOUT,    TAD LXR
  864.     TAD [1-BEGLN
  865.     SNA CLA
  866.     JMP RBSPCL
  867.     TAD ["\        /MUST BE HERE
  868.     ISZ RBFLAG
  869.     JMS I PCH
  870.     CLA CMA
  871.     DCA RBFLAG
  872.     TAD LXR
  873.     DCA TEMP1
  874.     TAD I TEMP1
  875.     JMS I PCH
  876. LBCKUP,    CLA CMA
  877.     TAD LXR
  878.     JMP CHLM1
  879.  
  880. SRCH,    0
  881.     TAD I SRCH
  882.     ISZ SRCH
  883.     SNA
  884.     JMP I SRCH
  885.     TAD NM1
  886.     SNA CLA
  887.     JMP SFND
  888.     ISZ SRCH
  889.     JMP SRCH+1
  890. SFND,    TAD I SRCH
  891.     DCA TEMP1
  892.     JMP I TEMP1
  893.  
  894.     *1357
  895. PRQMRK,    JMS I [PRNAME    /SOMETHING WRONG--UNPACK THE FIRST 8 CHARACTERS
  896.     JMP I [PRINTQ    /COLLECTED, PRINT THEM, AND A ?MARK.
  897.  
  898.     IFNZRO PRQMRK-1357 <SEECCL,ZZXX>
  899.     ZBLOCK 1    /A FREE LOCATION!
  900.  
  901.     IFNZRO .-1362 <FIXCCL,ERRRR>
  902.  
  903. GETCCL,    TAD [6003
  904.     JMS I [RESET
  905.     TAD [67        /CCL OVERLAY BLOCK IS BLOCK 67 ***
  906.     DCA OV
  907.     JMP DATE2
  908. DATE,    TAD TMP
  909.     SNA CLA
  910.     JMP I [CCLSW-1    /USED TO BE JMP GETCCL
  911. DATE2,    JMS I [SHNDLR    /READ IN DATE OVERLAY
  912.     0201
  913.     0400
  914. OV,    MSOVL2
  915.     JMP KMONER
  916.     JMP I [600
  917.     PAGE
  918.     *1400
  919. SAVE2,    TAD I LXR
  920.     SNA        /ARE THERE ANY ARGS?
  921.     JMP SAVE2A    /NO ... USE CCB
  922.     JMS I [SHNDLR    /READ IN ARG OVERLAY
  923.     0201
  924.     CSOVLY
  925.     MSOVLY
  926.     JMP KMONER
  927.     JMP I CCBTST    /GO TO IT    
  928. SAVE2A,    JMS I [SHNDLR
  929.     0201
  930.     400
  931.     MTEMP+10
  932.     JMP KMONER
  933. SAVE3,    TAD [603
  934.     DCA XR
  935.     DCA LXR        /INITIALIZE FOR GT32K I.D.
  936.     TAD I [600
  937.     JMS I [CCBTST
  938.     JMS I [SHNDLR
  939.     0101
  940.     400
  941.     MSOVL2
  942.     JMP KMONER
  943.     JMP I GETOUT
  944. SAV2X,    JMS I PGTOUT
  945.     TAD I [600    /UPDATE THE SEGMENT COUNT BY
  946.     CLL RAL        /FIRST,MAKING SURE 4000 BIT IS SET
  947.     STL RAR
  948.     CIA
  949.     TAD MERTST    /SUBTRACT # OF GT32K SEGS THIS ALLOW US TO BYPASS... 
  950.     DCA EXTMP    /SAVE COUNT FOR GT32K
  951.     TAD EXTMP    
  952.     CLL RAL        /WE WANT TO BUMP COUNTER TWICE FOR EVERY SEG
  953.     TAD [603    /ADD POINTER TO INITIAL SEGMENT
  954.     DCA XR
  955.     TAD EXTMP
  956.     CIA
  957.     DCA EXTMP
  958.     JMP I RCHK
  959. KMER4,    JMS I [PRMESG
  960.     TEXT    /TOO FEW ARGS/
  961.  
  962.  
  963. CCBTST,    SAVE1A&177+400    /EXAMINE COUNT WORD OF CCB FOR VALIDITY
  964.             /ASCII AND BINARY FILES USUALLY FAIL THIS TEST
  965.     CLL RAL        /INSURES 4000 BIT IS SET--128K INDICATOR
  966.     STL RAR
  967.     DCA EXTMP
  968. MOD2,    LXM        /INITIALIZE EXTENDED MEMORY. //V4: GETS NOP
  969.             //FROM SET SYS VT278.
  970.     TAD EXTMP
  971.     CMA
  972.     AND [7740
  973.     SNA CLA
  974.     JMP I CCBTST    /IT WAS VALID
  975. CIERR,    TAD [7605
  976.     DCA ERRET    /RELOAD MONITOR ON THIS ERROR
  977.     JMS I [PRMESG    /IT WASN'T - TELL THE USER
  978.     TEXT    /IMAGE ERR/
  979.     ZBLOCK 1504-.    //SERVES TO KEEP THINGS IN THEIR ORIGINAL PLACE
  980.             //ON THIS PAGE. ALSO TERMINATOR FOR THE IDIOT
  981.             //OS8 MESSAGE PRINTER.
  982.  
  983.             //"CORE IMAGE ERR" WAS SHORTEND TO GET 
  984. KLUGE2,    204        //MASK FOR BOTH OS78 & VT278 SYSTEMS IN.
  985.     IFNZRO 1505-. <BALANCE OF PAGE IS OUT OF POSITION!>
  986.  
  987. GETOUT,    SAVE3A&177+400        /SUBROUTINE TO KICK MONITOR OUT IF NECESSARY
  988.     TAD I [JSBITS
  989.     RAR
  990.     CLA
  991.     TAD SYSTEM
  992.     SZL SPA CLA    /IS THE SYSTEM IN CORE AND SHOULD IT BE?
  993.     JMP I GETOUT
  994.     CIF 10        /YES AND NO - KICK IT OUT
  995.     JMS I SYSTEM
  996.     11        /BYE BYE
  997.     TAD [7700
  998.     DCA SYSTEM
  999.     JMP I GETOUT
  1000. KMER2,    JMS PRNAME
  1001.     JMS I [PRMESG
  1002.     TEXT / NOT FOUND/
  1003. PRNAME,    4000
  1004.     TAD NM1
  1005.     JMS I [PRWD
  1006.     TAD NM2
  1007.     JMS I [PRWD
  1008.     TAD NM3
  1009.     JMS I [PRWD
  1010.     TAD NM4
  1011.     SNA CLA
  1012.     JMP I PRNAME
  1013.     TAD [256
  1014.     JMS I [PCHAR
  1015.     TAD NM4
  1016.     JMS I [PRWD
  1017.     JMP I PRNAME
  1018.  
  1019.  
  1020. RESET,    0
  1021.     DCA I [JSBITS    /MARK AREAS FOR I/O OPTOMIZATION
  1022.     JMS I [MINCOR
  1023.     CIF 10
  1024.     JMS I SYSTEM
  1025.     13        /RESET DEVICE HANDLERS AND OUTPUT FILES
  1026.     JMP I RESET
  1027.  
  1028. RCHK,    XLOD&177+400
  1029.     AND I XTADR    /V3D
  1030.     AND KLUGE2    /CAN'T ALLOW BOTH OS78 BIT AND SYSTEM CUSP BIT
  1031.             //V4: EXTEND TO INCLUDE VT278 SYSTEM FLAG
  1032.     SZA CLA
  1033.     JMP CIERR    /V3D CAN'T FALL INTO KMER3
  1034.             /BECAUSE HAVE TO RELOAD KBM TO RESET 'PGNAME'
  1035.     TAD EXTMP
  1036.     DCA I RR7400    /SET UP SEGMENT COUNT FOR RUN LOAD
  1037.     JMP I RCHK
  1038. RR7400,    R7400
  1039. SVXER,    JMS I [PRMESG
  1040.     TEXT    /SAVE ERR/
  1041. XTADR,    OS78
  1042.     PAGE
  1043.  
  1044.     *1600
  1045.  
  1046. RUN6,    TAD I TM1    /STORE CONTROL WORD FOR LAST SEG.
  1047.     DCA I [MREAD+1
  1048.     TAD RUNSW    /IS THIS R OR RUN?
  1049.     SNA CLA
  1050.     JMS I [WRCTLB    /RUN
  1051.     TAD I RFILE    /V3D FOR LINKER
  1052.     DCA I RCTL    /V3D SAVE BLOCK NUMBER IN 'SOFSET'
  1053.     TAD I RFILE
  1054. RUN7,    IAC
  1055.     DCA RUNFIL        /STORE STARTING BLOCK NUMBER
  1056. RUN7A,    TAD DEVHND
  1057.     DCA I [MREAD-1
  1058.     TAD DEVHND
  1059.     DCA RUNHND        /STORE DEVICE HANDLER ENTRY IN THIS PAGE
  1060.     TAD I ADR1
  1061.     DCA I ADR2
  1062.     ISZ ADCNT
  1063.     JMP .-3
  1064.     JMP I .+1
  1065.     RUN8&177+7400
  1066.  
  1067. ADCNT,    RUN8&177+7600
  1068. RFILE,    FILE
  1069. CHK32,    0    /PROTECTS MONITOR FROM GREATER THAN 32K FIELD 0 LOAD
  1070.     TAD I RCTL1
  1071.     AND T76A        /ISOLATE CDEB BITS FOR FUTURE USE
  1072.     DCA CDE
  1073.     TAD I RCTL1
  1074.     AND [7700        /LOAD EVERY FIELD INTO FIELD 1
  1075.     TAD [10        /WE'LL BUMP IT UP FROM THERE---LATER
  1076.     DCA I RCTL1
  1077.     JMP I CHK32
  1078. T76A,    76
  1079. RCTL1,    RCTL&177+7400
  1080. MOVUP,    0        /SUBROUTINE TO MOVE UP PROGRAM CODE
  1081.     AND T3700    /CALCULATE THE NUMBER OF LOCS
  1082.     RAL
  1083.     TAD T177
  1084.     CIA
  1085.     DCA COUNT    /STORE IT HERE
  1086.     TAD CDE        /PREPARE FOR CDF TO PROPER BANK & FIELD
  1087.     CLL RTR
  1088.     SZL
  1089.  
  1090. SVLNBF,
  1091.     /
  1092. /NEXT 111 LOCATIONS DESTROYED BY THE LINE BUFFER DURING A SAVE
  1093. /
  1094.     TAD TX20
  1095.     CLL RTL
  1096.     TAD T6201    /STORE IT IN EXTEND
  1097.     DCA EXTEND
  1098.     TAD I RADR1    /INITIALIZE THE INDEX REGS
  1099.     TAD SPTST
  1100.     DCA ADR1
  1101.     TAD ADR1
  1102.     DCA ADR2
  1103.     TAD [7000    /SET EXTENDED MEMORY0
  1104. MOD3,    LXM        //V4: GETS CLA FROM SET SYS VT278
  1105. BACK,    CDF 10        /MAKE THE MOVE
  1106.     TAD I ADR1
  1107. EXTEND,    0
  1108.     DCA I ADR2
  1109.     ISZ COUNT
  1110.     JMP BACK
  1111.     CDF 0
  1112.     TAD SPTST
  1113.     DCA I HF2
  1114.     TAD I RCTL1
  1115.     JMP I MOVUP
  1116. T177,    177
  1117. T3700,    3700
  1118. T6201,    6201
  1119. CDE,    0
  1120. TX20,    20
  1121. HF2,    HF3&177+7400
  1122.  
  1123. COUNT,    0
  1124. RADR1,    RADR&177+7400
  1125.     PAGE
  1126.  
  1127.     *1710
  1128. RUN8,    ISZ R7400    /IS THIS THE LAST PARAMETER PAIR?
  1129.     JMP RUN9    /NO - KEEP LOADING
  1130.     TAD RUNFIL
  1131.     DCA I RMRD3    /MOVE THE RECORD NUMBER INTO THE FINAL READ
  1132.     SKP        //V4. V3 USED TO BE: TSF
  1133. RUNTWT,    JMP .-1        /WAIT FOR THE TELETYPE TO DIE DOWN (RF08 IS FAST!)
  1134.             /RUNTWT GETS NOPED BY KMINIT WHEN BATCH IS RUNNING
  1135.     JMP I .+1
  1136.     MREAD        /READ THE LAST SEGMENT AND START UP
  1137. RUN9,    TAD I RUNADR
  1138.     DCA RADR    /SET UP THE LOADING ADDRESS OF THE CURRENT SEGMENT
  1139.     ISZ RUNADR
  1140.     TAD I RUNADR
  1141.     DCA RCTL    /AND THE READ CONTROL WORD
  1142.     TAD RCTL
  1143.     AND TS7        /TEST FOR GREATER THAN 32K
  1144.     SNA
  1145.     DCA HF3
  1146.     SZA CLA
  1147.     JMS I CH32
  1148.     JMS I RUNHND
  1149. RCTL,    SOFSET        /V3D THESE ARE STORED INTO ONLY AFTER MOVING
  1150. RADR,    OS78        /V3D
  1151. RUNFIL,    0
  1152.     JMP RERR        /INPUT ERROR READING THE PROGRAM
  1153.     TAD RCTL
  1154.     ISZ HF3        /IF GREATER THAN 32K
  1155.     JMP .+2
  1156.     JMS I MOVUPT    /LOAD HIGHER FIELDS
  1157.     JMS ROTAT        /GET THE BLOCK LENGTH OF THIS SEGMENT
  1158.     TAD RUNFIL
  1159.     DCA RUNFIL        /UPDATE THE BLOCK NUMBER FROM IT
  1160.     ISZ RUNADR
  1161.     JMP RUN8        /BACK FOR ANOTHER ONE
  1162. HF3,    -1
  1163. CH32,    CHK32
  1164. MOVUPT,    MOVUP
  1165.  
  1166. RERR,    CIF 10
  1167.     JMS I RU7700
  1168. TS7,    7
  1169.     0    /TOTALLY MEANINGLESS
  1170. RUNADR,    CCB+4
  1171. R7400,    7400
  1172. RMRD3,    MREAD+3
  1173. RU7700,    7700
  1174. RUNHND,    0
  1175.     IFNZRO ROTAT-SVLNBF-111&4000 <ERROR>
  1176.     *1765    /MUST BE AT TOP OF PAGE
  1177. ROTAT,    0
  1178.     CLL RTR
  1179.     RTR
  1180.     RTR
  1181.     AND RU37
  1182.     SNA
  1183.     TAD RU37
  1184.     IAC
  1185.     CLL RAR
  1186.     JMP I ROTAT
  1187. RU37,    37
  1188.     PAGE
  1189.  
  1190.     /2 PAGE OVERLAY TO KEYBOARD MONITOR FOR "SAVE" WITH ARGUMENTS.
  1191.     
  1192.  
  1193.     *2000        /ASSEMBLED AT 2000 SO THAT WE CAN LIVE IN BLOCK 54
  1194.             /OF THE SYSTEM HEAD, BUT RUNS AT 400 AS A SAVE OVERLAY.
  1195.  
  1196. SAVE1A,    TAD [1603
  1197.     DCA X1
  1198.     DCA TM1
  1199.     CDF 10
  1200.     DCA I [OLDT9
  1201. S6203,    CIF CDF 0
  1202.     TAD (SGETOUT-RSOVL2    /POINTER TO NEW GETOUT
  1203.  
  1204.     DCA PGTOUT        /LIKEWISE "GETOUT"
  1205.     JMS I [SHNDLR
  1206.     0210
  1207.     1400
  1208.     MTEMP+10        /READ IN CONTROL BLOCK
  1209.     JMP KMONER
  1210.     JMS I (LXRBAK-RSOVL1        /RESET LXR TO LOOK AT FIRST CHAR
  1211.     JMS I (LXRBAK-RSOVL1
  1212.     DCA DASHFG
  1213. SNUMLP,    JMS SGTNUM
  1214.     JMP SDLOOK    /NO NUMBER - GET DELIMETER
  1215.     TAD I LXR
  1216.     TAD (-"-
  1217.     SNA CLA
  1218.     JMP SVDASH
  1219.     JMS I (LXRBAK-RSOVL1
  1220.     TAD DASHFG
  1221.     SNA CLA        /WAS THERE A LOWER LIMIT?
  1222.     JMS DASHSB    /NO - SET LOWER LIMIT TO UPPER LIMIT
  1223.     TAD TEMP1
  1224.     CIA CLL CML
  1225.     TAD OLD1
  1226.     SZA CLA    /ARE THE FIELDS THE SAME?
  1227.     JMP KMER5    /NO - ERROR
  1228.     TAD TEMP2
  1229.     AND [7600
  1230.     TAD [200
  1231.     DCA TEMP2
  1232.     TAD TEMP2
  1233.     CIA
  1234.     TAD OLD2
  1235.     SZL CLA        /IS UPPER LIMIT > LOWER LIMIT?
  1236.     JMP KMER5    /NO - ERROR
  1237.     CDF 10
  1238.     TAD OLD1
  1239.     DCA I X1
  1240.     TAD OLD2
  1241.     DCA I X1
  1242.     TAD TEMP2
  1243.     DCA I X1    /CREATE A TRIPLET(FIELD, LOW LIMIT, HIGH LIMIT)
  1244.             /IN THE TABLE IN FIELD 1
  1245.     ISZ TM1        /BUMP ENTRY COUNT
  1246. SDLOOK,    CDF 0
  1247.     TAD I LXR
  1248.     SNA
  1249.     JMP I (SVEND-RSOVL1
  1250.     TAD (-",
  1251.     SNA
  1252.     JMP SNUMLP-1
  1253.     TAD [",-";
  1254.     SNA
  1255.     JMP SSTADR
  1256.     TAD [";-"=
  1257.     SNA CLA
  1258.     JMP I (SSBITS-RSOVL1
  1259. KMER5,    JMS I [PRMESG
  1260.     TEXT    /BAD ARGS/
  1261. SVDASH,    TAD DASHFG
  1262.     SZA CLA
  1263.     JMP KMER5
  1264.     ISZ DASHFG
  1265.     JMS DASHSB
  1266.     JMP SNUMLP
  1267. SSTADR,    JMS SGTNUM
  1268.     JMP KMER5    /NULL STARTING ADR - ERROR
  1269.     TAD TEMP1    /TRANSFORM FOR CDF --"37" TO "174"-128K 
  1270.     AND [7757    /ISOLATE '17' BITS
  1271.     TAD (-10
  1272.     SMA
  1273.     TAD [-17
  1274.     TAD (10
  1275.     TAD TEMP1
  1276.     CLL RTL
  1277.     TAD S6203
  1278.     CDF 10
  1279.     DCA I (1601    /STORE AWAY STARTING FIELD
  1280.     TAD TEMP2
  1281.     DCA I (1602    /AND STARTING ADDRESS
  1282.     JMP SDLOOK
  1283. DASHSB,    0
  1284.     TAD TEMP1
  1285.     AND (37        /ISOLATE FIELD( & BANK)
  1286.     DCA OLD1
  1287.     TAD TEMP2
  1288.     AND [7600
  1289.     DCA OLD2
  1290.     JMP I DASHSB
  1291. DASHFG,    0
  1292. OLD1,    0
  1293. OLD2,    0
  1294.  
  1295. SGTNUM,    0    /GET A NUMBER ROUTINE
  1296.     DCA DIGFLG    /CLEAR DIGIT COLLECTED FLAG
  1297.     DCA TEMP1
  1298.     DCA TEMP2
  1299.     JMS I (STARTX-RSOVL1
  1300.     JMP .+4
  1301.     TAD (20
  1302.     SNA CLA
  1303.     JMP .-4
  1304.     JMS I (LXRBAK-RSOVL1    /SHOVE INDEX BACK
  1305.     TAD DIGFLG    /IS DIGIT PRESENT?
  1306.     SZA CLA
  1307.     ISZ SGTNUM
  1308.     JMP I SGTNUM
  1309.     PAGE
  1310.     *2200    /LOADS INTO 600 BACK UP IN KYMON TERRITORY.
  1311.  
  1312. SSBITS,    JMS I (SGTNUM-RSOVL1
  1313.     JMP I (KMER5-RSOVL1
  1314.     TAD TEMP2
  1315.     CDF 10
  1316.     DCA I [1603
  1317.     JMP I (SDLOOK-RSOVL1
  1318. SVEND,    JMS I [SHNDLR
  1319.     0101
  1320.     0400
  1321.     MSOVL2        /READ IN SECOND PART OF OVERLAY
  1322.     JMP KMONER
  1323.     TAD TM1
  1324.     SNA
  1325.     JMP I (MOVECB-RSOVL2
  1326.     CIA
  1327.     CDF 10
  1328.     DCA I [1600
  1329.         /NOW SORT THE ENTRIES IN THE SEGMENT TABLE ON 
  1330.         /DECREASING FIELD AND INCREASING ADDRESS
  1331.         /WITHIN THE FIELD.
  1332.     TAD [1603
  1333.     DCA P1
  1334.     CLA IAC
  1335.     TAD I [1600
  1336.     SNA
  1337.     JMP SORTED    /RIDICULOUS TO SORT ONE ITEM
  1338.     DCA TEMP1
  1339. OUTRLP,    TAD (3
  1340.     TAD P1
  1341.     DCA P2
  1342.     TAD TEMP1
  1343.     DCA TEMP2
  1344. INERLP,    TAD P1
  1345.     DCA LXR
  1346.     TAD P2
  1347.     DCA X1
  1348.     TAD I LXR
  1349.     CIA CLL
  1350.     TAD I X1
  1351.     SNA CLA
  1352.     JMP TIE        /FIELDS ARE EQUAL - SORT ON ADDRESS IN FIELD
  1353.     SZL
  1354.     JMP SWITCH    /WRONG ORDER - SWITCH 'EM
  1355. TIENTY,    TAD P2
  1356.     TAD (3
  1357.     DCA P2        /INDEX TO NEXT ENTRY
  1358. SWNTRY,    ISZ TEMP2
  1359.     JMP INERLP
  1360.     TAD P1
  1361.     TAD (3
  1362.     DCA P1        /ELEMENT IS IN PLACE - GO TO NEXT POSITION
  1363.     ISZ TEMP1
  1364.     JMP OUTRLP
  1365.     JMP SORTED    /SORT COMPLETE - CHECK FOR CONSISTENCY
  1366. TIE,    TAD I LXR
  1367.     CIA CLL
  1368.     TAD I X1
  1369.     SZL CLA        /TEST FOR ADRESSES IN ASCENDING ORDER
  1370.     JMP TIENTY    /YES - DONT HAVE TO SWAP
  1371. SWITCH,    JMS SWSUBR
  1372.     JMS SWSUBR
  1373.     JMS SWSUBR
  1374.     CLA CLL CMA RTL
  1375.     TAD P1
  1376.     DCA P1        /RESET FIRST POINTER
  1377.     JMP SWNTRY    /AND DONT BUMP 2D POINTER, AS WE HAVE JUST BUMPED IT
  1378. SWSUBR,    0
  1379.     ISZ P1
  1380.     ISZ P2
  1381.     TAD I P1
  1382.     DCA TM1
  1383.     TAD I P2
  1384.     DCA I P1
  1385.     TAD TM1
  1386.     DCA I P2
  1387.     JMP I SWSUBR
  1388. P1,    0
  1389. P2,    0
  1390.  
  1391. STARTX,    0
  1392.     TAD I LXR    /ANYTHING LEFT?
  1393.     SNA
  1394.     JMP I STARTX    /NO.. TAKE EMPTY RETURN
  1395.     SKP
  1396. ADGTLP,    TAD I LXR
  1397.     TAD (-270
  1398.     CLL        /SEE IF THIS IS A DIGIT
  1399.     TAD [10
  1400.     SNL
  1401.     JMP AONUM    /NO.. GET OUT
  1402.     DCA TMP1
  1403.     ISZ DIGFLG
  1404.     JMS ROT2
  1405.     JMS ROT2
  1406.     JMS ROT2
  1407.     TAD TEMP2
  1408.     TAD TMP1
  1409.     DCA TEMP2
  1410.     JMP ADGTLP    /KEEP LOOKING
  1411. AONUM,    ISZ STARTX
  1412.     JMP I STARTX
  1413.  
  1414. ROT2,    0
  1415.     TAD TEMP2
  1416.     CLL RAL        /WE NEED THIS BECAUSE THE HANDLER
  1417.     DCA TEMP2    /WIPED THE FIRST COPY (MAYBE!!!)
  1418.     TAD TEMP1
  1419.     RAL
  1420.     DCA TEMP1
  1421.     JMP I ROT2
  1422. LXRBAK,    0
  1423.     CLA CMA
  1424.     TAD LXR
  1425.     DCA LXR
  1426.     JMP I LXRBAK
  1427. SORTED,    TAD I [1600
  1428.     IAC
  1429.     SNA
  1430.     JMP I (MERGED-RSOVL2
  1431.     DCA TEMP1
  1432.     TAD [1603
  1433.     DCA X1
  1434.     TAD (1606
  1435.     DCA LXR
  1436.     JMP I [MRGLP-RSOVL2
  1437.     PAGE
  1438.     *2400    /SO WE CAN LIVE IN BLOCK 55.
  1439.         /OVERLAYS 400 (SAVE1A) WHEN EXECUTING.
  1440.         /CHECKS THE SORTED FILE FOR CONSISTENCY.
  1441.         /OVERLAPPING SEGMENTS ARE ERRORS,
  1442.         /ABUTTING SEGMENTS ARE TO BE CONDENSED IN
  1443.         /THE INTERESTS OF SPEED
  1444.  
  1445. MRGLP,    TAD I LXR
  1446.     CIA
  1447.     TAD I X1
  1448.     SZA CLA
  1449.     JMP NOCMPR    /DIFFERENT FIELDS - INCOMPARABLE
  1450.     ISZ X1
  1451.     TAD I X1
  1452.     CIA
  1453.     CLL
  1454.     TAD I LXR
  1455.     SNA CLA
  1456.     JMP BUTTNG    /UPPER LIMIT(2)=LOWER LIMIT(1) - ABUTTING SEGMENTS
  1457.     SZL CLA
  1458.     JMP NXTONE    /UPPER LIM(2)<LOWER LIM(1) - NORMAL CASE
  1459.     CDF 0        /UPPER LIM(2) > LOWER LIM(1) - ERROR
  1460.     JMS I [PRMESG
  1461.     TEXT    /BAD ARGS/
  1462. BUTTNG,    CLA CMA
  1463.     TAD X1
  1464.     DCA X1
  1465.     TAD I LXR
  1466.     DCA I X1    /SET UPPER LIM(2) = UPPER LIM(1)
  1467.     TAD X1
  1468.     TAD (-1777
  1469.     SZA CLA
  1470.     JMP .-5        /AND COMPRESS OUT THE LOWER ENTRY
  1471.     ISZ I [1600    /DECREMENT THE ENTRY COUNT (CAN'T OVERFLOW)
  1472.     JMP I  (SORTED-RSOVL1    /START OVER FROM BEGINNING
  1473.  
  1474. NOCMPR,    ISZ X1
  1475.     ISZ X1
  1476.     ISZ LXR
  1477. NXTONE,    ISZ LXR
  1478.     ISZ TEMP1
  1479.     JMP MRGLP    /NOW ALL THAT REMAINS IS TO TRANSFORM OUR TRIPLETS
  1480.             /INTO THE FORMAT WHICH THE RUN LOADER EXPECTS; I.E.
  1481.             /DEVICE-HANDLER ARGUMENTS
  1482.  
  1483.  
  1484. MERGED,    CDF 0        /LOAD IN MERGED OVERLAY
  1485.     JMS I [SHNDLR
  1486.     0100
  1487.     0600
  1488.     64
  1489.     JMP KMONER
  1490.     JMP I (MERGEX
  1491. MOVECB,    TAD (-1777
  1492.     DCA MERTST
  1493.     JMP MERGED
  1494. CBMOVE,    CDF 10        /FINAL CODE TO MOVE NEW CONTROL BLOCK
  1495.     TAD I LXR    /INTO PAGE 600 OF FIELD 0
  1496.     CDF 0
  1497.     DCA I X1
  1498.     ISZ TEMP1
  1499.     JMP CBMOVE
  1500.     JMP I (SAVE3    /EXIT TO SAVE PROCESSOR 
  1501. SAVE3A,    ISZ XR
  1502.     TAD I XR    /GET THE I/O CONTROL WORD OF THIS SEGMENT
  1503.     DCA ADR2    /CAUTION AUTO-INDEX TEST FOR GREATER THAN 32K
  1504.     TAD ADR2
  1505.     AND [7        /ARE THERE ANY BANK BITS?
  1506.     SZA CLA
  1507.     JMP XTAT    /NO- PROCEED AS NORMAL
  1508.     TAD SPTST    /ONLY WANT TO ISOLATE FIRST FIELD
  1509.     SNA CLA        /BELOW 32K
  1510.     JMP XTAT
  1511.     TAD CLENGT    /SET UP FIRST FIELD I.D.
  1512.     DCA LXR        /CAUTION AUTO-INDEX-SAVE BLOCK OFFSET
  1513.     TAD EXTMP    /SAVE NUMBER OF SEGS LEFT
  1514.     DCA MERTST    /... NEGATIVE OF # LEFT
  1515.     DCA SPTST    /SET I.D. "SET" FLAG
  1516. XTAT,    TAD ADR2
  1517.     JMS I PROTAT    /EXTRACT THE LENGTH FROM IT
  1518.     TAD CLENGT
  1519.     DCA CLENGT    /UPDATE THE LENGTH OF THE FILE
  1520.     ISZ EXTMP
  1521.     JMP SAVE3A    /LOOP FOR ALL SEGMENTS OF THE FILE
  1522.     TAD CLENGT    /USE THIS LENGTH WHEN ENTERING THE FILE
  1523.     CLL RTL
  1524.     RTL
  1525.     TAD SENTER
  1526.     CIF 10
  1527.     JMS I SYSTEM
  1528.     3        /ENTER
  1529. SFILE,    NM1
  1530.     0        /LENGHT UNIMPORTANT
  1531.     JMP I (SVXER    /SAVERR CODE REPEATED
  1532.     CIF CDF 10
  1533.     TAD I [DVHREC
  1534.     CDF 0
  1535.     DCA I [LDBLK
  1536.     TAD SENTER
  1537.     JMS I SYSTEM
  1538.     4        /CLOSE
  1539.     NM1        /NAME FOR "CLOSE"
  1540. CLENGT,    1        /CLOSING LENGTH
  1541.     JMP I (SVXER
  1542.     JMP I (SAV2X
  1543. XLOD,    JMS I [SHNDLR
  1544.     0201
  1545.     1200
  1546.     64
  1547.     JMP KMONER
  1548.     JMP I (SAVXX    /JMP T0 1400
  1549.  
  1550. SGETOUT,0        /REPLACES "GETOUT" WHICH WE'VE STORED OVER
  1551.     TAD I [JSBITS
  1552.     RAL        /ONLY PERFORMS THOSE FUNCTIONS THAT "SAVE" NEEDS
  1553.     SPA CLA
  1554.     JMP I SGETOUT
  1555.     CIF 10
  1556.     JMS I SYSTEM
  1557.     11
  1558. DECIMB,    JMP I SGETOUT    /DECIMB ONLY CALLED BY NEXT PAGE
  1559.             /PART OF NEXT PAGE'S ROUTINE:
  1560.     TAD NM2        /ALL NEW FOR V3D
  1561.     TAD NM4        /ONLY ALLOW 2 CHARS FOR MM
  1562.     SNA CLA
  1563.     ISZ DECIMB
  1564.     TAD NM1
  1565.     RTR
  1566.     RTR
  1567.     JMP I DECIMB
  1568. PROTAT,    ROTAT
  1569.  
  1570.  
  1571.     *2600        /DATE PROCESSOR - LOADS IN 400, RUNS IN 600 AND
  1572.             /ASSEMBLES HERE SO WE CAN LAND IN BLOCK 55 OF THE
  1573.             /SYSTEM HEAD.
  1574.  
  1575. DATEXX,    JMS DECIM
  1576. NUM2,    DCA NUM2
  1577.     TAD NUM2
  1578.     TAD M40
  1579.     SMA CLA
  1580.     JMP BADNUM    /DAY > 31
  1581.     JMS I GNAME
  1582. L30,    30        /NOTHING FOUND WILL GIVE ERROR LATER
  1583. /    DCA NUM1    /NUM1 IS INITIALLY 0
  1584. NEWLUP,    ISZ MONPTR
  1585.     ISZ NUM1
  1586.     TAD I MONPTR
  1587.     ISZ MONPTR
  1588.     SMA
  1589.     JMP BADNUM    /SYMBOLIC MONTH NOT FOUND
  1590.     TAD NM1
  1591.     SNA CLA        /SKIP IF FIRST 2 LETTERS DON'T MATCH
  1592.     TAD NM2
  1593.     TAD I MONPTR
  1594.     SZA CLA
  1595.     JMP NEWLUP    /SECOND 2 LETTERS DON'T MATCH
  1596. /*** TEST DELIMETER HERE
  1597.     TAD NUM1
  1598.     CLL RTL
  1599.     RTL
  1600.     RAL
  1601.     TAD NUM2
  1602.     RTL
  1603.     RAL
  1604.     DCA NUM2
  1605.     DCA DDELIM    /MAKE END-OF-LINE THE DELIMITER
  1606.     JMS DECIM
  1607.     TAD (-106    /SCALE DOWN TO RANGE 1970-1999
  1608.     SPA
  1609.     JMP BADNUM    /DIDN'T MAKE THE RANGE
  1610.     DCA NUM1
  1611.     TAD NUM1
  1612.     AND L30        /ISOLATE EXTENSION DATE BITS
  1613.     CLL RTL
  1614.     RTL
  1615.     DCA TM1
  1616.     TAD I (BIPCCL
  1617.     AND L7177    /STORE THEM INTO BITS RESERVED FOR THIS PURPOSE
  1618.     TAD TM1
  1619. TSLUP,    DCA I (BIPCCL
  1620.     TAD NUM1
  1621.     AND [7
  1622.     TAD NUM2    /COMBINE WITH MONTH AND DAY
  1623.     CDF 10
  1624.     DCA I (MDATE    /STORE IN SYSTEM DATE CELL
  1625.     TSF        /7605 SETS THE DF
  1626.     JMS L7177    /TIME OUT A BIT
  1627.     JMP I [7605    /IN CASE RUNNING UNDER BATCH
  1628. L7177,    7177        /JMS IS LONGER THAN JMP
  1629.     ISZ DDELIM    /DDELIM IS 0 AT END
  1630.     JMS TSLUP    /WAIT FOR TELETYPE TO DIE DOWN (RF08)
  1631.     JMP I [7605    /RETURN TO MONITOR
  1632.  
  1633. DDELIM,    -"-
  1634.  
  1635. /WOULD LIKE TO BRANCH TO CCLSW-1 IF DATE ENDED WITH ALTMODE
  1636.  
  1637. CNV,    0
  1638.     AND [77
  1639.     SNA
  1640.     JMP NUL
  1641.     TAD (-60
  1642.     SPA
  1643.     JMP BADNUM
  1644.     JMP I CNV
  1645. NUL,    TAD TM1
  1646.     JMP GODE
  1647.  
  1648. DECIM,    0
  1649.     JMS I GNAME
  1650. M40,    -40        /NOTHING THERE (LOGIC WILL CAUSE ERROR LATER)
  1651.     TAD TMP
  1652.     TAD DDELIM    /COMPARE AGAINST DESIRED DELIMETER
  1653.     SNA CLA        /DASH OR NULL
  1654.     JMS I (DECIMB-2400+400
  1655.     JMP BADNUM    /DELIMETER BAD
  1656.     RTR
  1657.     JMS CNV
  1658.     DCA TM1
  1659.     TAD TM1
  1660.     CLL RTL
  1661.     TAD TM1
  1662.     RAL
  1663.     DCA TEMP2
  1664.     TAD NM1
  1665.     JMS CNV
  1666.     TAD TEMP2
  1667. GODE,    SZA
  1668.     JMP I DECIM
  1669. BADNUM,    CLA        /CRAP IN AC
  1670.     TAD [7605
  1671.     DCA ERRET
  1672.     JMS I [PRMESG
  1673.     TEXT    /BAD DATE/
  1674.  
  1675. NUM1,    0        /MONTH NUMBER (MUST BE 0 INITIALLY)
  1676. MONS,    -1201    /JAN
  1677.     -1600
  1678.     -0605    /FEB
  1679.     -0200
  1680.     -1501    /MAR
  1681.     -2200
  1682.     -0120    /APR
  1683.     -2200
  1684.     -1501    /MAY
  1685.     -3100
  1686.     -1225    /JUN
  1687.     -1600
  1688.     -1225    /JUL
  1689.     -1400
  1690.     -0125    /AUG
  1691.     -0700
  1692.     -2305    /SEP
  1693.     -2000
  1694.     -1703    /OCT
  1695.     -2400
  1696.     -1617    /NOV
  1697.     -2600
  1698.     -0405    /DEC
  1699.     -0300
  1700. MONPTR,    MONS-2600+600-1    /RELOCATES TO PAGE 600
  1701.             /MUST BE POSITIVE
  1702.  
  1703.     PAGE
  1704.     *3000    /MONITOR ERROR PROCESSOR. LIVES IN BLOCK 56,
  1705.         /LOADS INTO 11400.
  1706. /    ------------------------
  1707. DLYLPX,    AND I 0            //THIS AREA CAN BE REPLACED WITH:
  1708. D7600,    7600            //TAD MERRNO
  1709.     TAD MERRNO        //AND (7
  1710.     CLL RAL            //BSW
  1711.     ISZ I (ZERO-1400
  1712.     ISZ I (ZERO-1400    /V3C
  1713.     ISZ I (ZERO-1400    //SINCE 8E AND 8A SCOPE SYSTEMS DON'T HAVE TO
  1714.     JMP DLYLPX        /WAIT FOR TELEPRINTER (WITHOUT CDF'S)
  1715. /    -------------------------
  1716.     SNA
  1717.     JMP USRERR        //KEEP THIS;
  1718. /    -------------------------
  1719.     CLL RAL            //TOSS THIS: ALL IT DOES IS GET RID OF THE
  1720.     RTL
  1721.     RTL
  1722. /    -------------------------
  1723.     TAD (6040        //THE 4000 BIT AND WASTE TIME.
  1724.     DCA I (MERTYP-1400
  1725. MERCMN,    TAD (MERRXR-1400
  1726.     JMS EPRINT
  1727.     TAD I (FPUTX
  1728.     RTR
  1729.     RAR
  1730.     AND (7
  1731.     TAD (60
  1732.     JMS MERPCH
  1733.     CLA CLL CMA RAL
  1734.     TAD I (MONITO
  1735.     RAL
  1736.     DCA T1
  1737.     TAD (-4
  1738.     DCA T2
  1739. MEROLP,    TAD T1
  1740.     RTL
  1741.     RAL
  1742.     DCA T1
  1743.     TAD T1
  1744.     AND (7
  1745.     TAD (60
  1746.     JMS MERPCH
  1747.     ISZ T2
  1748.     JMP MEROLP
  1749.     TAD MERRNO
  1750.     CLL RAL
  1751.     SNA
  1752.     JMP NOEXPL    /NO EXPLANATION FOR USER ERRORS
  1753.     CLL RAR
  1754.     TAD (EXPLTBL-1401    /PRINT EXPLANATION
  1755.     DCA T1        /GET ADDRESS INTO MESSAGE TABLE
  1756.     TAD (240
  1757.     JMS MERPCH
  1758.     TAD ("(
  1759.     JMS MERPCH
  1760.     TAD I T1    /GET ADDRESS OF MESSAGE
  1761.     JMS EPRINT
  1762.     TAD (")
  1763.     JMS MERPCH
  1764.     TAD MERRNO
  1765. NOEXPL,    TAD (3773
  1766.     SPA CLA
  1767.     CLA CMA
  1768.     DCA I (7700
  1769.     DCA OLDT9
  1770.     CLA CLL CML RAR
  1771.     DCA MERRNO
  1772.     CDF 0
  1773.     TAD I (JSBITS
  1774.     AND (6777
  1775.     TAD (1000
  1776.     DCA I (JSBITS    /SET THE CURRENT JOB UNSTARTABLE
  1777.     CDF CIF 0
  1778.     JMP I D7600    /EXIT TO KEYMON.
  1779. USRERR,    CLA CLL
  1780.     JMS I (FGET
  1781.     TAD (4060
  1782.     DCA I (UERTYP-1400
  1783.     TAD (UERRXR-MERRXR
  1784.     JMP MERCMN
  1785. MERPCH,    0
  1786.     TLS
  1787.     TSF
  1788.     JMP .-1
  1789.     CLA
  1790.     JMP I MERPCH
  1791. ZERO,    0        //A WASTE TIME COUNTER. IF THE ABOVE IS TOSSED, DON'T
  1792.             //NEED THIS.
  1793.  
  1794. EPRINT,    0
  1795.     DCA T2
  1796. EPRLUP,    TAD I T2
  1797.     RTR
  1798.     RTR
  1799.     RTR
  1800.     JMS EPR
  1801.     TAD I T2
  1802.     JMS EPR
  1803.     ISZ T2
  1804.     JMP EPRLUP
  1805.  
  1806. EPR,    0
  1807.     AND (77
  1808.     SNA
  1809.     JMP I EPRINT
  1810.     TAD (240
  1811.     AND (77
  1812.     TAD (240
  1813.     JMS MERPCH
  1814.     JMP I EPR
  1815.     PAGE
  1816.     *3200        /LOADS INTO 1600
  1817.  
  1818. MERRXR,    TEXT    \MONITOR ERROR 0 AT \
  1819.     MERTYP=MERRXR+7
  1820.  
  1821. UERRXR,    TEXT    \USER ERROR 0 AT \
  1822.     UERTYP=UERRXR+5
  1823.  
  1824. EXPLTBL,MON1-1400
  1825.     MON2-1400
  1826.     MON3-1400
  1827.     MON4-1400
  1828.     MON5-1400
  1829.     MON6-1400
  1830.     MON7-1400
  1831.  
  1832. MON1,    TEXT    \CLOSE ERROR\
  1833. MON2,    TEXT    \DIRECTORY I/O ERROR\
  1834. MON3,    TEXT    \DEVICE HANDLER NOT IN CORE\
  1835. MON4,    TEXT    \ILLEGAL USR CALL\
  1836. MON5,    TEXT    \I/O ERROR ON SYS:\
  1837. MON6,    TEXT    \DIRECTORY OVERFLOW\
  1838. MON7,    TEXT    \RESERVED\
  1839.         /EXECUTION TIME LOADER FOR MONITOR "CHAIN" COMMAND
  1840.     *3400    /EXECUTES IN FIELD 0 IN PAGE 7400
  1841. MCHNX,    DCA MCHREC        /STORE STARTING RECORD #
  1842.     TAD MCHREC
  1843.     DCA I (SOFSET    /V3D SAVE STARTING ADDRESS
  1844.     CIF 10
  1845.     JMS I (200
  1846.     13        /RESET ALL DEVICE ASSIGNMENTS
  1847.     0        /BUT DON'T CLEAR OUTPUT FILES
  1848.     CIF 10
  1849.     JMS I (200
  1850.     11        /KICK MONITOR OUT AND RESTORE CORE IF NECESSARY
  1851.     JMS MCHRD    /PARAMETERS PRESET TO READ CONTROL BLOCK INT0 7200
  1852.     TAD I (7200    /TEST FOR SAVE FILE!
  1853.     CMA        /TEST FOR VALID CCB
  1854.     AND (7740
  1855.     SZA CLA
  1856.     JMP CHERR
  1857.     TAD I (7201
  1858.     DCA I (MSTCDF    /TRANSFER INFORMATION FROM CONTROL BLOCK
  1859.     CLA IAC
  1860.     TAD I (7202
  1861.     DCA I (MSTADR    /TO PAGE 7600
  1862.     TAD I (7203
  1863.     TAD (1000
  1864.     DCA I (JSBITS
  1865.     TAD (7204
  1866.     DCA MCHT1
  1867.     TAD MCHFJM
  1868.     DCA I (MSWITC
  1869.     TAD (TCF
  1870.     DCA I (MSTCDF+1
  1871. MCHN1,    ISZ I (7200
  1872.     JMP MCHN2
  1873.     TAD I MCHT1
  1874.     DCA I (MREAD+2
  1875.     ISZ MCHT1
  1876.     TAD I MCHT1
  1877.     DCA I (MREAD+1
  1878.     TAD MCHREC
  1879.     DCA I (MREAD+3
  1880.     TAD (SHNDLR
  1881.     DCA I (MREAD-1
  1882.     JMP I (MREAD
  1883. MCHN2,    TAD I MCHT1
  1884.     DCA MCHADR    /SET UP COMMAND TO READ NEXT SEGMENT
  1885.     ISZ MCHT1
  1886.     TAD I MCHT1
  1887.     DCA MCHCTL
  1888.     JMS MCHRD    /READ IT
  1889.     ISZ MCHT1
  1890.     JMP MCHN1    /LOOP ON NUMBER OF SEGMENTS
  1891.  
  1892. MCHRD,    0
  1893.     JMS I (SHNDLR
  1894. MCHCTL,    0101        /1 RECORD INTO FIELD 0 STARTING FORWARDS
  1895. MCHADR,    7200
  1896. MCHREC,    0
  1897.     JMP CHERR    /CHAIN ERROR
  1898.     TAD MCHCTL
  1899. MCHBMP,    CLL RTR
  1900.     RTR
  1901.     RTR
  1902.     AND (37
  1903.     SNA        /V3C
  1904.     TAD (40        /0 MEANS FULL 4K READ
  1905.     IAC
  1906.     CLL RAR
  1907.     TAD MCHREC
  1908.     DCA MCHREC
  1909.     JMP I MCHRD
  1910. MCHT1,    0
  1911. MCHFJM,    MSTCDF&177+5200    /"JMP MSTCDF"
  1912.  
  1913. CHERR,    ISZ CHERR1
  1914.     JMP CHERR    /LET TTY DIE DOWN
  1915.     ISZ CHERR2
  1916.     JMP CHERR
  1917. CHTADC,    TAD CHARS
  1918.     SNA
  1919.     JMP I (7600    /DONE..BACK TO MONITOR
  1920.     TLS
  1921.     TSF
  1922.     JMP .-1
  1923.     CLA
  1924.     ISZ CHTADC    /NEXT LETTER
  1925.     JMP CHTADC
  1926. CHERR1,    0
  1927. CHERR2,    -6
  1928. CHARS,    "C;"H;"A;"I;"N;" ;"E;"R;"R;215;212;0
  1929.     PAGE
  1930.     *3600
  1931.     RELOC 1400
  1932.  
  1933.     /OVERLAY FOR SAVE COMMAND. RESIDES IN LAST HALF OF BLOCK 64; RUNS
  1934.     /AT 1400.
  1935.  
  1936. SAVXX,    TAD I SXFLE    /STORES SFILE
  1937.     DCA SWFILE
  1938.     JMS I PHNDL    /LOAD IN NON SYS HANDLER
  1939.     JMS SWRITE    /WRITE OUT CCB
  1940.     TAD MERTST    /MINUS THE # OF SEGS OF LT32K CODE
  1941.     DCA I [600
  1942.     TAD LXR        /# OF BLOCKS OF GT 32K SEGS
  1943.     SNA        /LXR IS ZERO IF ALL SEGS ARE ABOVE 32K
  1944.     JMP OVR32
  1945.     TAD I SXFLE    /LXR--- COMPENSATES FOR CCB
  1946.     DCA SWFILE
  1947. SAVE4,    TAD I XR
  1948.     DCA SADR
  1949.     CLA CLL CML RAR
  1950.     TAD I XR
  1951.     DCA SCTL
  1952. SAVE5,  TAD SADR
  1953.         RAL
  1954.         SZL SPA CLA     /DOES THIS SEGMENT START BELOW 2000?
  1955.         JMP SAVE8       /NO - NOTHING TO WORRY ABOUT
  1956.         TAD SCTL
  1957.         AND T76
  1958.         SZA CLA         /FIELD 0?
  1959.         JMP SAVE8       /NO - SAVE AS IS
  1960. SAVE6,  JMS LOADF0      /LOAD THE FIELD 0 SAVE AREA OVER THE I/O MONITOR
  1961. SAVE7,  CLA CMA
  1962.         TAD SCTL
  1963.         CLL RAL
  1964.         TAD SADR
  1965.         RAL
  1966.         SZL SPA CLA     /CHECK WHETHER UPPER LIMIT IS ABOVE 2000
  1967.         JMP SAVE7A      /IT IS - MUST MAKE 2 WRITES
  1968.         TAD SCTL        /TOTALLY CONTAINED IN 0-1777
  1969.         TAD [10        /CHANGE FIELD 0 TO FIELD 1 AND CONTINUE
  1970.         JMP SAVE8A
  1971. SAVE7A, TAD SCTL        /WRITE IN 2 PARTS -
  1972.         DCA TM1
  1973.         TAD SADR
  1974.         CIA         /FIRST PART FROM FIELD 1, EVERYTHING BELOW 2000
  1975.         TAD [2020
  1976.         CLL CML RAR
  1977.         DCA SCTL
  1978.         JMS SWRITE
  1979.         CLA CLL CML RTR
  1980.         DCA SADR
  1981.         TAD SCTL        /SECOND PART FROM FIELD 0, EVERYTHING ABOVE 2000
  1982.         AND [3700
  1983.         CIA
  1984.         TAD TM1
  1985.     SMA        /FULL FIELD SAVE IN F0 MAKES THIS +
  1986.     TAD [4000    /COMPENSATE FOR THAT CASE
  1987. SAVE8A, DCA SCTL
  1988. SAVE8,  JMS SWRITE
  1989.     ISZ I [600
  1990.     JMP SAVE4
  1991.     STA        /LXR BECOMES ONE BECAUSE OF CCB
  1992.  
  1993.     TAD LXR        /NUMBER OF BLOCKS OF GT32K SEGS
  1994.     SNA CLA
  1995.     JMP I [SAVE12
  1996. OVR32,    TAD I SXFLE    /RESET FILE TO INITIAL BLOCK
  1997.     IAC        /COMPENSATE FOR CCB
  1998.     DCA SWFILE
  1999.     TAD [603    /RESET CCB POINTER
  2000.     DCA ADR1
  2001.     TAD [7000
  2002. MOD4,    LXM        //V4: GETS CLA FROM SET SYS VT278
  2003. SAVE4B,    TAD I ADR1    /IDENTICAL TO SAVE4 CODE
  2004.     DCA SADR
  2005.     CLA CLL CML RAR
  2006.     TAD I ADR1
  2007.     DCA SCTL
  2008.     DCA ADR2    /SET UP TO MOVE GREATER THAN 32K CODE DOWN
  2009.     DCA X1        /DITTO
  2010.     DCA SXFLE    /INTIALIZE FOR COUNTER
  2011.     TAD SCTL    /SET UP CDF FOR MOVE
  2012.     AND T76        /ISOLATE BANK AND FIELD
  2013.     CLL RTR        /ADJUST MENT
  2014.     SZL
  2015.     TAD T20
  2016.     CLL RTL
  2017.     TAD FDC0
  2018.     DCA .+1
  2019. XFSP,    0        /START OF MOVE LOOP
  2020.     TAD I ADR2
  2021.     CDF 70        /PUT THEM IN FIELD SEVEN
  2022.     DCA I X1    /IT SEEMS LIKE A GOOD FIELD 
  2023.     ISZ SXFLE
  2024.     JMP .-5
  2025. FDC0,    CDF 0        /LOOP IS OFFICIALLY OVER
  2026.     TAD SCTL    /ADJUST SWRITE CONTROL WORD
  2027.     AND [7700
  2028.     TAD [70        /TO FIELD SEVEN
  2029.     DCA SCTL
  2030.     JMS SWRITE
  2031.     ISZ EXTMP    /IS THAT ALL THE SEGMENTS??
  2032.     JMP SAVE4B    /NO ---CONTINUE
  2033.     JMP I [SAVE12    /TIME TO EXIT
  2034. LOADF0,    0
  2035.     /ISZ F0OVLY    /HAS THE FIELD 0 OVERLAY BEEN LOADED BEFORE?
  2036.     /JMP I LOADF0    /EVIDENTLY
  2037.     JMS I [SHNDLR
  2038.     1010
  2039. F0OVLY,    0        /WILL BE 0 IF WE EXECUTE THIS CODE, OF COURSE
  2040.     MTEMP+4
  2041.     JMP KMONER
  2042.     JMP I LOADF0
  2043.  
  2044. SWRITE,    0
  2045.     JMS I DEVHND
  2046. SCTL,    4101
  2047. SADR,    600
  2048. SWFILE,    0
  2049.     JMP KMONER
  2050.     TAD SCTL
  2051.     CLL RTR
  2052.     RTR
  2053.     RTR
  2054.     AND RO37
  2055.     SNA
  2056.     TAD RO37
  2057.     IAC
  2058.     CLL RAR
  2059.     TAD SWFILE
  2060.     DCA SWFILE    /BUMP RECORD NUMBER
  2061.     JMP I SWRITE
  2062. RO37,    37
  2063. T76,    76
  2064. T20,    20
  2065. PHNDL,    HNDL
  2066. SXFLE,    SFILE&177+400
  2067.     RELOC
  2068.     PAGE
  2069.  
  2070.     *4000    /SYSTEM GENERATOR - WRITES STUFF OUT USING SHNDLR
  2071.         /AT THE BEHEST OF BUILD.
  2072.  
  2073.     WRITE=JMS I SYSHND
  2074.     JMS SYSSWP    /SWAP SYSTEM DEVICE HANDLER INTO 7600
  2075.  
  2076.     WRITE;    4200;    7400;    0;    JMP BERR    /BOOTSTRAP
  2077.     TAD RBFLAG
  2078.     SZA CLA
  2079.     JMP .+6
  2080.     WRITE;    4210;    DCOUNT;    01;    JMP BERR    /DIRECTORY
  2081.     WRITE;    5001;    0000;    07;    JMP BERR    /KEYBOARD MONITOR
  2082.     WRITE;    4610;    0000;    MONTOR;    JMP BERR    /USR
  2083.     WRITE;    4111;    3400;    MEOVLY;    JMP BERR    /"ENTER" OVERLAY
  2084.     WRITE;    4701;    2000;    MSOVLY;    JMP BERR    /SAVE OVERLAY,
  2085.                     /ERROR ROUTINE AND "CHAIN"
  2086.     TAD RBFLAG
  2087.     SZA CLA
  2088.     JMP .+13
  2089.     WRITE;    4101;    LDRCTL;    MFREE;    JMP BERR    /ABSLDR CONTROL BLOCK
  2090.     WRITE;    5010;    2000;MFREE+1;    JMP BERR    /ABSLDR
  2091.     JMS I (4200    /OUTPUT THE DEVICE HANDLERS
  2092.     JMP BERR
  2093.     JMS SYSSWP    /SWAP BACK PAGE 7600
  2094.     CLA CMA
  2095.     HLT
  2096.     CLA
  2097.     JMP I .+1
  2098. BERR,    7600
  2099.     JMS SYSSWP
  2100.     HLT
  2101.     JMP .-1
  2102. W6600,    6600
  2103. W7600,    7600
  2104. SYSSWP,    0
  2105.     TAD W6600
  2106.     DCA SYTM1
  2107.     TAD W7600
  2108.     DCA SYTM2
  2109. SWAPLP,    TAD I SYTM1
  2110.     DCA TMSY
  2111.     TAD I SYTM2
  2112.     DCA I SYTM1
  2113.     TAD TMSY
  2114.     DCA I SYTM2
  2115.     ISZ SYTM1
  2116.     ISZ SYTM2
  2117.     JMP SWAPLP
  2118.     JMP I SYSSWP
  2119.  
  2120.     /CONTROL BLOCK FOR ABSOLUTE LOADER
  2121. LDRCTL,    7777    /ONE CONTIGUOUS LOAD
  2122.     6213    /STARTING ADDRESS IN FIELD 1
  2123.     2000    /STARTING LOCATION=12000
  2124.     6003    /DOES NOT LOAD OVER EITHER MONITOR AREA
  2125.         /ALSO DOES NOT USE THESE AREAS AT COMMAND TIME - TRUE
  2126.         /ONLY FOR FIRST CALL TO COMMAND DECODER
  2127.     2000    /FIRST(AND ONLY) SEGMENT STARTS AT 2000
  2128.     1210    /IN FIELD 1 AND IS 10 PAGES LONG
  2129.  
  2130.     IFNZRO LDRCTL-4113 <BLDER,XQX>
  2131.  
  2132. SYTM1,    0
  2133. SYTM2,    0
  2134. TMSY,    0
  2135. SYSHND,    7607
  2136.     PAGE
  2137.  
  2138.     *4264
  2139.     RELOC 664    /LIVES IN BLOCK 64. RUNS IN FIELD 0 AT 600
  2140.  
  2141. MERGEX,    CDF 10
  2142.     TAD MERTST
  2143.     SZA CLA
  2144.     JMP MOVEC
  2145.     TAD [1603    /LOADS INTO 600--MERGED--CODE
  2146.     DCA LXR
  2147.     TAD [1603
  2148.     DCA X1
  2149.     TAD I [1603
  2150.     AND T1777
  2151.     TAD T6000
  2152.     DCA I [1603    /INITIALIZE STATUS BITS TO NO OVERLOADS
  2153.     TAD I [1600
  2154.     DCA TEMP1
  2155. MERGLP,    TAD I LXR
  2156.     AND TX37
  2157.     CLL RTR        /TRANSFORM 'ABCDE' TO 'CDEBA0'
  2158.     RTR
  2159.     SZL        /TEST FOR 'B' BANK
  2160.     TAD [400
  2161.     CLL RAR
  2162.     SZL        /TEST FOR 'A' BANK
  2163.     TAD [100
  2164.     CLL RTR
  2165.     RTR
  2166.     RAR
  2167.     DCA TEMP2
  2168.     TAD I LXR
  2169.     AND [7400
  2170.     DCA TMP1
  2171.     TAD TMP1
  2172.     DCA I X1    /STORE ADDRESS
  2173.     TAD TMP1
  2174.     CIA
  2175.     TAD I LXR    /FORM UPPER LIM - LOWER LIM
  2176.     CLL RAR
  2177.     TAD TEMP2    /ADD IN FIELD
  2178.     DCA I X1
  2179.     TAD TMP1
  2180.     CLL RAL
  2181.     SZL SPA CLA    /IS THE LOWER LIMIT < 2000?
  2182.     JMP NXTSEG    /NO
  2183.     TAD TEMP2
  2184.     RAR
  2185.     SZA CLA        /YES- IS THE FIELD 0 OR 1?
  2186.     JMP NXTSEG    /NO
  2187.     SNL
  2188.     IAC
  2189.     CMA CML RTR
  2190.     AND I [1603    /AND OUT THE PROPER OVERLOAD BIT
  2191.     DCA I [1603
  2192. NXTSEG,    ISZ TEMP1
  2193.     JMP MERGLP
  2194.     TAD I T1605    /TEST FIRST SEGMENT FOR GREATER THAN 32K
  2195.     AND [7
  2196.     SNA CLA        /IF GREATER THAN 32K SET
  2197.     JMP MOVEC
  2198.     TAD I [1600    /THE 4000 BIT OF THE FIRST WORD OF THE CCB TO ZERO
  2199.     RAL
  2200.     CLL RAR
  2201.     DCA I [1600
  2202.     /REMOVED LXM PUT IT IN MOVE UP CODE
  2203. MOVEC,    TAD T1577
  2204.     DCA LXR
  2205.     TAD T577
  2206.     DCA X1
  2207.     TAD [7600
  2208.     DCA TEMP1
  2209.     DCA MERTST    /SET MOVE I.D. TO ZERO
  2210.     JMP I MVECB    /RETURN TIME
  2211. MVECB,    CBMOVE&177+400
  2212. T1605,    1605
  2213. T1777,    1777
  2214. T6000,    6000
  2215. T1577,    1577
  2216. T577,    577
  2217. TX37,    37
  2218.     RELOC
  2219.     PAGE
  2220.  
  2221.     *7400
  2222.     NOPUNCH
  2223.     *7600
  2224.     ENPUNCH
  2225.     /UPPER PAGE OF FIELD 1 - CHOCK FULL OF GOODIES
  2226.     /LIKE THOUSANDS OF TABLES AND THE MONITOR CALL LOCATION
  2227.  
  2228. MOFILE,    ZBLOCK 17    /OUTPUT FILE TABLE - 7600-7616 (3 ENTRIES MAX)
  2229.             /5 WORDS PER ENTRY - DEVICE # AND FILE NAME
  2230. MIFILE,    ZBLOCK 24    /INPUT FILE TABLE - 7617-7642 (10 ENTRIES MAX)
  2231.             /2 WORDS PER ENTRY - DEVICE # AND RECORD #
  2232.  
  2233.             /LAST WORD IN TABLE CONTAINS TERMINATION INDICATOR
  2234.             /(0 FOR CR, 1 FOR ALTMODE) AND HIGH ORDER
  2235.             /PART OF NUMERICAL ARGUMENT
  2236.  
  2237. MPARAM,    ZBLOCK 4    /PARAMETER TABLE - 7643-7646
  2238.             /FIRST 3 WORDS - MASK OF SWITCHES(A-Z,0-9).
  2239.             /FOURTH WORD - CONTAINS THE LOW ORDER BITS OF
  2240.             /THE NUMERICAL ARGUMENT
  2241.  
  2242.  
  2243.  
  2244.             /TABLE OF DEVICE HANDLERS PRESENTLY IN CORE
  2245. DVHNDL,    7607;7607;0;0;0;0;0
  2246.     0;0;0;0;0;0;0;0
  2247. MDATE,    0        /HOLDS THE CURRENT DATE- 4 BIT MONTH,
  2248.             /5 BIT DAY, 3 BIT YEAR FROM 1970
  2249. MGET,    CIF 0
  2250.     JMS SHNDLR    /INST FIELD IS 0
  2251.     1000        /READ 4 RECORDS INTO FIELD 0
  2252.     0        /LOCATIONS 0-1777
  2253.     7        /KEYBOARD MONITOR FOLLOWS DIRECTORY
  2254. PJSBTS,    JSBITS        /SERVES AS A HALT (WATCH IT!)
  2255. SCDCIF,    CDF CIF 0
  2256.     JMP I .+1
  2257. MBEGIN,    KMNTRY        //SET SYS INIT WILL PATCH THIS LOCATION IN THE
  2258.             //SYS HANDLER BOOTSTRAP TO 'INIT'.
  2259. MCALL1,    0
  2260.     DCA MARG1    /SAVE AC AS IT MAY CONTAIN AN ARGUMENT
  2261.     RDF        /GET CALLING FIELD
  2262.     TAD SCDCIF
  2263.     DCA SMCIF
  2264.     CDF 0
  2265.     TAD I PJSBTS
  2266.     RAR
  2267.     CDF 10
  2268.     SZL CLA        /DOES JOB USE LOCS 10000-11777?
  2269.     JMP MONRD    /NO - DONT SAVE THEM
  2270.     CIF 0
  2271.     JMS SHNDLR
  2272.     5010
  2273.     0
  2274.     MTEMP
  2275.     HLT
  2276. MONRD,    CIF 0
  2277.     JMS SHNDLR
  2278.     610
  2279.     0
  2280.     MONTOR
  2281. SCOPE,    SCOPBIT        /BIT 4 IS A 1 IF CONSOLE IS A SCOPE
  2282.     JMP MSTART    /START THE MONITOR UP IN PAGE 0
  2283. MRETRN,    CIF 0
  2284.     JMS SHNDLR
  2285.     1010        /READ 10 RECS INTO FIELD 1
  2286.     0
  2287.     MTEMP        /TEMP REGION ON SYS
  2288.     HLT        /SYS HAS PROBLEMS
  2289. SMCIF,    0
  2290.     JMP I MCALL1
  2291. MARG1,    0
  2292.             /TABLE OF USER DEVICE NAMES
  2293.             /ALSO USED BY SYSTEM ODT
  2294.  
  2295. UDNAME,    0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
  2296. DCB,    ZBLOCK 17        /DEVICE CONTROL BLOCK - SET IN "CONFIG"
  2297.  
  2298.  
  2299.  
  2300.  
  2301.  
  2302.  
  2303.  
  2304.  
  2305.     /********************************************************
  2306.     /    MAP OF SYSTEM DEVICE AS OF DEC 80
  2307.     /********************************************************
  2308.     /            *   256 WORD BLOCKS   *
  2309.     /********************************************************
  2310.  
  2311.     /    BLOCK #    CONTENTS
  2312.     /    -------    --------
  2313.  
  2314.     /     0    MONITOR BOOTSTRAP
  2315.     /     1- 6    DEVICE DIRECTORIES
  2316.     /     7-12    KEYBOARD MONITOR:
  2317.     /        0-377 PRINT, FETCH ROUTINES
  2318.     /        400-777 KMNTRY, DISPATCH FOR KMON COMMANDS
  2319.     /        1000-1377 KMINIT, INPUT LINE BUFFER
  2320.     /        1400-1777 KMON COMMAND PROCESSORS
  2321.     /    13-15    USR (ALSO KNOWN AS I/O MONITOR)
  2322.     /    16-25    DEVICE HANDLER RECORDS
  2323.     /    26    MONITOR "ENTER" OVERLAY
  2324.     /    27-50    MONITOR SCRATCH AREA FOR SAVING CORE:
  2325.     /        27-32 ARE FOR F1
  2326.     /        33-36 FOR FIELD 0; ALSO USED BY ODT FOR CODE THAT
  2327.     /              WOULD RUN IN 0-1777
  2328.     /        37    USED BY SAVE COMMAND
  2329.     /        40-43 IS A STASH AREA FOR CODE THAT WOULD OVERLAY
  2330.     /              ABSLDR (FIELD 1)
  2331.     /    51-53    COMMAND DECODER
  2332.     /    54-55    "SAVE WITH ARGUMENTS" AND "DATE" OVERLAYS
  2333.     /    56    MONITOR ERROR ROUTINE
  2334.     /    57    "CHAIN" PROCESSOR
  2335.     /    60-63    SYSTEM ODT
  2336.     /    64    HAS SAVE OVERLAYS TO SUPPORT KT8A MEMORY
  2337.     /    65    CCL REMINISCENSES
  2338.     /    66    TOP HALF HAS F1 7600 PAGE OF OS/8;
  2339.     /        BOTTOM HALF HAS F2 7600 PAGE OF 2 PAGE SYS: HANDLER
  2340.     /    67    LIST OF VALID CCL COMMANDS
  2341.     /    70-END    FILE STORAGE
  2342.  
  2343.     SHNDLR=7607    /ENTRY POINT TO SYSTEMS HANDLER
  2344.  
  2345.     *6600
  2346.     NOPUNCH
  2347.     *7600
  2348.     ENPUNCH
  2349.  
  2350.     /SYSTEM HANDLER AND FIELD 0 UPPER PAGE
  2351.     /INCLUDES BOOTSTRAP AND PART OF MONITOR CALL ROUTINE
  2352.     DVHORG=16    /DEVICE HANDLER RECORDS
  2353.     MTEMP=27
  2354.     MONTOR=13
  2355.     JMS SHNDLR
  2356.     5000        /SAVE MONITOR CORE - WRITE 5 BLOCKS FROM FIELD 0
  2357.     0        /(LOCATIONS 0-1777)
  2358.     MTEMP+4
  2359.     7602        /TROUBLE WITH SYSTEM DEVICE
  2360.     CDF CIF 10
  2361.     JMP MGET    /NOW GO READ IN THE KEYBOARD MONITOR
  2362.  
  2363.  
  2364.     *6744        /INFORMATION ABOUT CURRENT JOB
  2365.     NOPUNCH
  2366.     *7744
  2367.     ENPUNCH
  2368.  
  2369.  
  2370. JFIELD,    6203    /A CDF CIF N INSTRUCTION TO START THE JOB
  2371. JSTART,    7600    /THE STARTING ADDRESS
  2372. JSBITS,    1000    /VARIOUS STATUS BITS - USED FOR OPTIMIZATION
  2373.         /BIT 4000 - JOB DID NOT LOAD INTO 00000-01777
  2374.         /BIT 2000 - JOB DID NOT LOAD INTO 10000-11777
  2375.         /BIT 1000    - JOB IS NOT RESTARTABLE
  2376.         /BIT 400 - DOESN'T DESTROY BATCH MONITOR
  2377.         /BIT 2    - JOB DOES NOT USE LOCS 00000-01777
  2378.         /BIT 1    - JOB DOES NOT USE LOCS 10000-11777
  2379. SOFSET,    0    /FOR FUTURE (AND MAYBE PRESENT) USE
  2380.  
  2381.     /DATA BREAK FILLERS FOR SYSTEM BOOTSTRAP
  2382.     7750
  2383.     7751
  2384.     7752
  2385.     7753
  2386.     7754
  2387.     7755
  2388.         /MONITOR PATCH TO HELP BLEEP LOADER
  2389.     0    /ADDRESS OF HANDLER FOR DEVICE USED
  2390. MREAD,    HLT
  2391.     0
  2392.     0
  2393.     0
  2394.     HLT
  2395. MSWITC,    JMP .+6        /ZEROED IF PG 7000 (HANDLER) MUST BE READ OVER
  2396.     JMS SHNDLR
  2397.     0300
  2398.     7000        /THIS AREA MODIFIED BY ODT
  2399.     MTEMP+6
  2400. MOD0,
  2401. OS78,    HLT        //BIT 4 IS SET IF OS/78 IS RUNNING, BIT 9 IS SET IF
  2402.             //SYSTEM CONSOLE IS A VT278.
  2403.             //THIS IS THE "ORIGINAL", BUT DOESN'T STAY AROUND
  2404.             //LONG. THE COPY TO MODIFY IS IN KMINIT AT PMSRST
  2405. MSTCDF,    CDF CIF 0
  2406.     NOP        //V4: CAN'T BE SETTING FLAGS WHEN THEY SHOULD BE
  2407.             //CLEAR. V3 USED TO
  2408.             /TCF  EXIT WITH A CLEAR CONSCIENCE(ALSO A CLEAR FLAG)
  2409.     JMP I .+1
  2410. MSTADR,    0
  2411. SBLOCK,    0
  2412. BIPCCL,    0    /MORE STATUS BITS.
  2413.         /BIT 1: 1=> BATCH IS IN PROGRESS
  2414.         /BITS 6-8: FIELD OF BATCH MONITOR
  2415.         /HIGHEST CORE FIELD USED BY OS/8
  2416.         /OR 0 TO MEAN OS/8 MAY USE ALL OF CORE
  2417.     *0
  2418.     VERSNO        /OS/8 VERSION NUMBER
  2419.     HLT        /HIGHGROND NO LONGER SUPPORTED
  2420. PROMPT,    "}
  2421. KMONER,    CLA
  2422.     TAD [7605
  2423.     DCA ERRET
  2424.     JMS I [PRMESG
  2425.     TEXT    /?ERROR/
  2426.  
  2427. /THE FOLLOWING REGISTERS ARE SET TO VITAL INITIAL VALUES. TO ALTER
  2428. /THESE VALUES IS TO BRING DISASTER DOWN UPON YOUR HEAD!
  2429.  
  2430. LXR,    PMSRST-1
  2431. X1,    MSWITC        /THESE TWO ARE USED AT INITIALIZATION.
  2432. ADR1,    RUN8-1
  2433. ADR2,    RUN8&177+7377    /USED DURING R, AND RUN COMMANDS
  2434. XR,
  2435. AMFLAG,    0        /1 MEANS SAW ALTMODE
  2436.             /MUST NOT MOVE FOR CCL AND BATCH
  2437.  
  2438.     *20
  2439. RBFLAG,    0        /MUST BE AT LOCATION 20
  2440. TEMP2,    -6        //V4: ONLY MOVE 6 LOCATIONS. TCF ISN'T ALLOWED IN VT278.
  2441. SYSTEM,    7700
  2442. PCH,    PRINT
  2443. GLINE,    XGLINE
  2444. GNAME,    GETNAM
  2445. DEVHND,    7607
  2446. FUDJMP,    MSTCDF&177+5200
  2447. P6203,    6203
  2448. TMP,    PATCHLEV    /MONITOR PATCH LEVEL MUST BE AT LOC 31 FOR CCL
  2449. PGTOUT,    GETOUT
  2450. ERRET,    PCRLF        /MUST BE AT 33 FOR CCL
  2451.  
  2452. /THE FOLLOWING LOCS. ARE TEMPORARIES. HOWEVER, THERE IS NOW
  2453. /VITAL ONCE ONLY CODE TO HELP THE BATCH PROCESSOR. THIS CODE IS
  2454. /READ IN EVERY TIME THE KEYBOARD MONITOR IS RE-READ.
  2455.  
  2456. KOS78,
  2457. NM1,    OS78        //POINTS TO OS78 WORD FOR INIT ROUTINES. GETS
  2458.             //OVERWRITTEN WITH FIRST INPUT CHARACTER FROM KEYBOARD.
  2459. BATCH,            /ENTRY TO READ NEW BATCH MONITOR
  2460. NM2,    JMS I [7607    /THE BATCH INITIALIZER ALTERS  SOME VALUES
  2461. NM3,    610        /IN THIS LIST...THIS ONE**********
  2462. NM4,    0        /THIS ONE*****GETS ADDRESS OF BOS.
  2463. TEMP1,    13        /******GETS RECORD OF BOS*****
  2464. TM1,    SKP CLA        /ERROR. DON'T RUN BATCH
  2465. TMP1,    JMP BCHGO
  2466. NMCT,    DCA I KM1    /CLEAR BATCH FLAG.
  2467. PN,    JMP KMONER
  2468. PRDSW,
  2469. KM1,    7777
  2470. BCHGO,
  2471. RUNSW,    CIF CDF 0
  2472. DIGFLG,    JMP I .+1
  2473. SENTER,    KMINIT    /GETS ENTRY POINT (BOS)
  2474. KRCHK,    RCHK
  2475. EXTMP,    0
  2476. MERTST,    0
  2477. SPTST,    -1    /-1 USED IN RUN CODE
  2478.     FIELD 1
  2479.  
  2480. EJECT USR ROUTINES
  2481.     /FIELD 1
  2482.     /OS/8 USER SERVICE ROUTINE.
  2483.     /THIS PROCESSOR IS CALLED INTO MEMORY BY A JMS 7700 IN FIELD 1
  2484.     /IT REPLACES MEMORY FROM 200-1777
  2485.     /AND INTERPRETS THE WORDS AFTER THE JMS AS A MONITOR FUNCTION
  2486.     /MONITOR FUNCTIONS ARE ASSIGN,LOOKUP,ENTER,ETC.
  2487.     MAXCMD=13
  2488.     *200
  2489. MONITO,    0        /MONITOR SUBROUTINE
  2490.     DCA MACARG    /STORE AC ARG
  2491.     DCA USERFG    /SET FLAG TO INDICATE WE WERE CALLED DIRECTLY
  2492.     RDF        /GET CALLING FIELD
  2493.     TAD [CDF CIF 0
  2494.     DCA FGETX
  2495. MRENTR,    TAD FGETX
  2496.     DCA FPUTX    /FOR LOADING AND STORING CALLING SEQUENCE
  2497.     JMS FGET    /GET FIRST ARGUMENT[AND SET DATA FIELD 1)
  2498.     ISZ MONITO
  2499.     CLL
  2500.     TAD [-MAXCMD-1
  2501.     SZL
  2502.     JMP MERROR
  2503.     TAD JMPMAX
  2504.     DCA .+1        /BRANCH TO APPROPRIATE ROUTINE WITH LINK ON
  2505. FGET,    0        /MUST PRESERVE LINK
  2506.     TAD MONITO
  2507.     JMS FGETW
  2508.     JMP I FGET
  2509. /MONITOR COMMAND DISPATCH TABLE MUST BE JAMMED BEFORE 'FPUT'
  2510.     MERROR
  2511.     MASSIGN
  2512.     MLOOKUP
  2513.     MENTER
  2514.     MCLOSE
  2515.     MCD
  2516.     MCHAIN
  2517.     MERR
  2518.     MESCAP
  2519.     MESCPR
  2520.     MASGN
  2521. MRSETP,    MRESET
  2522. FPUT,    0        /MUST FOLLOW LAST ADDRESS IN JUMP TABLE
  2523. FPUTX,    0        /GETS CDF CIF OF CALLING FIELD
  2524.     DCA I MONITO
  2525.     CDF CIF 10
  2526. JMPMAX,    JMP I FPUT
  2527. MEOERR,    ISZ MERRNO
  2528. MIOERR,    ISZ MERRNO
  2529. MERROR,    ISZ MERRNO
  2530.     ISZ MERRNO
  2531.     ISZ MERRNO
  2532.     ISZ MERRNO
  2533. MERR,    CLA
  2534.     CIF 0
  2535.     JMS I [SHNDLR
  2536.     0210
  2537.     1400
  2538.     MERRTN
  2539.     HLT
  2540.     JMP I .-3
  2541.  
  2542.  
  2543. MCD,    CLA CLL CML RAR /CALL THE COMMAND DECODER, BUT FIRST
  2544.     JMS CDSWAP    /SWAP OUT MEMORY IF NECESSARY
  2545.     JMS FGET
  2546.     DCA T1
  2547.     CIF 0
  2548.     JMS I [SHNDLR
  2549.     0601
  2550.     0
  2551.     MCDREC
  2552.     JMP  MIOERR
  2553.     TAD FPUTX
  2554.     CDF CIF 0
  2555.     JMS I [200
  2556.     DCA FPUTX
  2557.     TAD FPUTX
  2558.     DCA FGETX
  2559.     JMS CDSWAP    /RESTORE THE SWAPPED CORE IF NECESSARY
  2560.     STL        /LINK MUST BE ON AT MRESET
  2561.     JMP I MRSETP    /AFTER CD, RESET DEVICE AREA
  2562. MCHAIN,    JMS FGET
  2563.     DCA T1        /BUFFER THE ARGUMENT
  2564.     CIF 0
  2565.     JMS I [SHNDLR
  2566.     0101
  2567.     7400
  2568.     MRUNRC
  2569.     JMP MIOERR
  2570.     TAD T1        /LOAD THE BUFFERED ARGUMENT
  2571.     CDF CIF 0
  2572.     JMP I .-5
  2573. MLNOTF,    CLA
  2574.     ISZ MONITO
  2575. MNEXT,    TAD USERFG
  2576. MESCAP,    CLL RAR
  2577.     TAD MONITO
  2578.     DCA I [7700
  2579.     TAD FPUTX
  2580.     DCA I [SMCIF
  2581.     CLA IAC CML
  2582.     CDF 0
  2583.     AND I [JSBITS
  2584.     CDF 10
  2585.     RAR
  2586.     SZL SPA CLA    /RESTORE CORE IF USERFG=1 AND JSW[11]=0
  2587.     JMP I [SMCIF
  2588.     JMP I [MRETRN
  2589. MESCPR,    CLL CML
  2590.     JMP MESCAP+1
  2591. FGETW,    0
  2592.     DCA FPUT
  2593. FGETX,    HLT
  2594.     TAD I FPUT
  2595.     CDF CIF 10
  2596.     JMP I FGETW
  2597.  
  2598. CDSWAP,    0
  2599.     TAD ME1000    /FORM READ OR WRITE OPERATION FOR RESTORE OR SAVE.
  2600.     DCA MCDCTL
  2601.     CDF 0
  2602.     TAD I [JSBITS
  2603.     CDF 10
  2604.     RTR
  2605.     SZL CLA        /IS IT NECESSARY TO SAVE MEMORY?
  2606.     JMP I CDSWAP    /NO
  2607.     CIF 0
  2608.     JMS I [SHNDLR
  2609. MCDCTL,    0
  2610.     0
  2611.     MTEMP+4
  2612.     JMP MIOERR
  2613.     JMP I CDSWAP
  2614.  
  2615. EOVFLO,    CIF 0
  2616.     JMS I [SHNDLR
  2617.     0111
  2618. ME1000,    1000        /ENTER OVERLAY LOADS OVER ENTER (NATCH)
  2619.     MEOVLY
  2620.     JMP MIOERR
  2621.     JMP I ME1000
  2622.  
  2623.  
  2624.     *400
  2625.     /ASSIGN PROCESSOR - TRANSLATE DEVICE NAME INTO DEVICE NUMBER
  2626.     /(IF NECESSARY),GET DEVICE HANDLER INTO CORE(IF NECESSARY)
  2627.     /AND ADJUST TABLES(IF NECESSARY).  IS THIS REALLY NECESSARY?
  2628. MASGN,    CLA IAC
  2629. MASSIGN,    DCA ASFLAG
  2630.     TAD MACARG    
  2631.     SZA        /IS DEVICE NUMERIC OR SYMBOLIC?
  2632.     JMP DFOUND    /NUMERIC
  2633.     JMS I [FGET    /GET HIGH ORDER 2 CHARS OF NAME
  2634.     ISZ I [MONITO
  2635.     SNA
  2636.     JMP I [MRTRN+1    /FIRST WORD OF NAME MUST BE NON-ZERO
  2637.     DCA NAME
  2638.     JMS I [FGET
  2639.     SNA        /IS NAME >2 CHARACTERS LONG?
  2640.     JMP NOHASH    /NO - DON'T HASH
  2641.     TAD NAME
  2642.     RAL
  2643.     CLL CML RAR    /FORCE SIGN BIT OF HASH NAME ON
  2644.     DCA NAME
  2645. NOHASH,    TAD [UDNAME-1    /SEARCH USER NAME TABLE FIRST
  2646. DSRCH,    DCA XR
  2647.     TAD [-17
  2648.     DCA T2
  2649. DSRCLP,    TAD I XR
  2650.     CIA
  2651.     TAD NAME
  2652.     SNA CLA
  2653.     JMP DSFND
  2654.     ISZ T2
  2655.     JMP DSRCLP
  2656.     TAD XR
  2657.     SMA CLA        /WHICH TABLE DID WE JUST SEARCH?
  2658.     JMP I [MRTRN+1    /SYSTEM TABLE - ERROR
  2659.     TAD [SDNAME-1
  2660.     JMP DSRCH    /GO SEARCH SYSTEM TABLE
  2661. DSFND,    TAD T2
  2662.     TAD [20
  2663.     JMS I [FPUT    /PUT NUMBER INTO CALLING SEQUENCE
  2664.     JMS I [FGET    /GET IT BACK IN AC, BUMPING POINTER
  2665.     ISZ I [MONITO
  2666. DFOUND,    JMS I [MCKDEV    /DETERMINE ITS VALIDITY (NON-ZERONESS)
  2667.             /AND FORM POINTERS
  2668.     SNA        /IS THE DEVICE HANDLER IN CORE?
  2669.     TAD I T2
  2670.     SNA        /DOES A HANDLER EXIST FOR THE DEVICE?
  2671.     JMP I [MLNOTF    /NO - SAME AS THE DEVICE NOT EXISTING
  2672.     CMA RAL        /GET THE COMPLEMENT OF THE HIGH ORDER BIT INTO THE LINK
  2673.     SNL CLA        /TWO PAGE HANDLER?(IF HANDLER IS IN CORE,
  2674.             /THIS TEST IS RANDOM BUT WE DON'T CARE)
  2675.     TAD [100    /YES - FORCE A TWO-PAGE READ
  2676.     TAD [100
  2677.     DCA DVHCTL
  2678.     TAD T1
  2679.     DCA T7        /SAVE T1 AS WE WILL DESTROY IT LATER
  2680.     TAD I T1
  2681.     TAD ASFLAG
  2682.     SZA CLA        /DOES HE ACTUALLY WANT US TO LOAD?
  2683.     JMP AFINIS    /NO.
  2684.     JMS I [FGET    /YES--FETCH PAGE IN WHICH HANDLER IS TO BE LOADED
  2685.     RAR        /GET THE LINK, WHICH HAS BEEN UNTOUCHED SINCE WE
  2686.             /PUT THE "TWO PAGE HANDLER" FLAG INTO IT
  2687.     SNL SMA        /IF THIS HANDLER IS TWO-PAGE, IS HE ALLOWING IT TO BE?
  2688.     JMP I [MLNOTF    /NO - GIVE AN ERROR RETURN
  2689.     RAL        /YES - ROTATE BACK
  2690.     AND [7600    /MAKE IT LEGAL
  2691.     DCA DVHLOC
  2692.     JMS GETREC
  2693.     DCA DVHREC
  2694.     CIF 0
  2695.     JMS I [SHNDLR
  2696. DVHCTL,    0        /READ ONE OR TWO PAGES INTO FIELD 0
  2697. DVHLOC,    0
  2698. DVHREC,    0
  2699.     JMP I [MIOERR    /SYSTEM DEVICE ERROR
  2700.         /NOW GO THROUGH THE TABLE OF AVAILABE HANDLERS
  2701.     TAD [-17    /AND MARK OFF THOSE WHICH ARE NOW IN CORE
  2702.     DCA T4
  2703. DVHCLP,    TAD T4
  2704.     JMS I [MCKDEV    /LOW ORDER BITS OF T4 GO THROUGH 1-17
  2705.     CMA
  2706.     TAD DVHLOC
  2707.     CLL CML RAR
  2708.     TAD DVHCTL    /IF A HANDLER ENTRY POINT IS WITHIN 200 WORDS OF THE
  2709.     SMA CLA        /LOADING ADDRESS (400 FOR A TWO-PAGE HANDLER)
  2710.     DCA I T1    /MARK IT AS WIPED
  2711.     JMS GETREC
  2712.     CIA
  2713.     TAD DVHREC
  2714.     SZA CLA
  2715.     JMP NOTINC
  2716.     TAD I T2
  2717.     AND [177
  2718.     TAD DVHLOC
  2719.     DCA I T1
  2720. NOTINC,    ISZ T4
  2721.     JMP DVHCLP
  2722. AFINIS,    TAD I T7
  2723.     JMP I [MRTRN    /STORE HANDLER ADDRESS AND EXIT
  2724. GETREC,    0
  2725.     TAD I T2    /GET RECORD OF DEVICE HANDLER
  2726.     CLL RTL
  2727.     RTL
  2728.     RTL        /EXTRACT THE RECORD NUMBER
  2729.     AND [17
  2730.     TAD [DVHORG-1    /ADD THE BASE OF DEVICE HANDLER STORAGE
  2731.     JMP I GETREC
  2732.  
  2733. MCKDEV,    0        /MUST PRESERVE LINK
  2734.     AND [17
  2735.     SNA
  2736.     JMP I [MERROR    /DEVICE 0 IS ILLEGAL
  2737.     DCA NAME
  2738.     TAD NAME
  2739.     TAD [SDVHND-1    /FORM POINTER INTO HANDLER IMAGE TABLE
  2740.     DCA T2
  2741.     TAD NAME
  2742.     TAD [DVHNDL-1
  2743.     DCA T1
  2744.     TAD NAME
  2745.     TAD [DCB-1
  2746.     DCA T8        /FORM POINTER TO DCB ENTRY FOR DEVICE
  2747.     TAD I T1
  2748.     JMP I MCKDEV
  2749.  
  2750.     IFNZRO .-564    <REASSEMBLE CONFIG>
  2751.             /SDNAME IS LIST OF PERMANENT DEVICE NAMES.
  2752. SDNAME,    ZBLOCK 17    /SYSTEM DNAME TABLE - SET UP BY "CONFIG"
  2753.  
  2754.  
  2755.     IFZERO .+200&1000    <*600>
  2756.     /LOOKUP PROCESSOR - GETS THE STARTING BLOCK OF AN INPUT FILE
  2757.     /ON A SPECIFIED DEVICE.SKIPS IF FILE WAS FOUND OR DEVICE
  2758.     /IS NOT FILE ORIENTED
  2759. MLOOKUP,CLL        /SET RDCAT MODE TO INPUT
  2760.     JMS MRDCAT
  2761.     JMP ERETRN    /NON-FILE STRUCTURED DEVICE
  2762.     JMS MDSRCH    /SEARCH THE DIRECTORY FOR THE FILE
  2763.     JMP MRTRN+1    /NOT FOUND - TAKE ERROR RETURN
  2764. LRETRN,    TAD T5
  2765.     CIA
  2766.     TAD I [DORG    /CONVERT T5 TO A RECORD NUMBER
  2767. ERETRN,    JMS I [FPUT
  2768.     ISZ I [MONITO
  2769.     TAD T6
  2770.     CIA        /STORE FILE LENGTH AS A NEGATIVE NUMBER
  2771. MRTRN,    JMS I [FPUT    /THIS CODE IS JUMPED TO BY SEVERAL ROUTINES
  2772. MRTRN2,    ISZ I [MONITO
  2773.     JMP I [MLNOTF
  2774.  
  2775. MRDCAT,    0
  2776.     SZA
  2777.     JMP MRDREN    /NOT THE FIRST SEGMENT - DON'T SET UP POINTERS
  2778.     DCA T5        /ZERO STARTING BLOCK NUMBER
  2779.     DCA T6        /ZERO FILE LENGTH
  2780.     TAD MACARG    /GET DEVICE NUMBER FROM AC
  2781.     JMS I [MCKDEV    /CHECK LEGALITY AND FORM POINTERS
  2782.     SNA
  2783.     JMP I [MERROR+1    /DEVICE HANDLER IS NOT IN CORE - ERROR
  2784.     DCA T9        /ADDRESS OF DEVICE HANDLER
  2785.     JMS I [FGET
  2786.     DCA T4        /STORE THE POINTER TO THE FILE NAME IN T4
  2787.     SNL
  2788.     CML RAR
  2789.     RTR        /FORM A MASK OF 2000 OR 1000 DEPENDING ON LINK
  2790.     AND I T8
  2791.     SZA CLA        /TEST FOR READ-ONLY(L=1) OR WRITE-ONLY(L=0)
  2792.     JMP MRTRN+1    /FAILED THE TEST - ERROR RETURN
  2793.     TAD I T8
  2794.     SMA CLA
  2795.     JMP I MRDCAT    /DEVICE IS NOT FILE-ORIENTED
  2796.     ISZ MRDCAT
  2797.     CLA IAC
  2798. MRDREN,    DCA MCATRC    /STORE SEGMENT NUMBER
  2799.     TAD T9        /USE LOW ORDER BITS
  2800.     AND [177    /OF DEVICE HANDLER ENTRY POINT
  2801.     CLL RTL        /AND THE REQUESTED SEGMENT NUMBER
  2802.     RAL        /TO FORM A "UNIQUE" KEY
  2803.     TAD MCATRC    /FOR THIS SEGMENT OF THIS DIRECTORY
  2804.         /(THE UNIQUENESS DEPENDS ON EACH HANDLER HAVING A DIFFERENT
  2805.         /STARTING OFFSET IN ITS PAGE)
  2806.     CIA
  2807.     TAD OLDT9    /COMPARE KEY AGAINST KEY OF CURRENT SEGMENT
  2808.     SNA        /ARE THEY THE SAME?
  2809.     JMP INLRDY    /YES - DON'T READ SEGMENT, ITS IN CORE
  2810.     CIA
  2811.     TAD OLDT9
  2812.     DCA OLDT9    /STORE THE KEY OF THE NEW IN-CORE SEGMENT
  2813.     CLA CLL CML RAR    /CHANGE WRITE TO READ
  2814.     JMS MWRCAT
  2815. INLRDY,    TAD I [DCOUNT
  2816.     CML CMA RAL
  2817.     SZL SPA
  2818.     JMP JMPME2
  2819.     CMA CML RAR    /NEW V3 DIRECTORY VERIFYER
  2820.     DCA NFILES    /FIRST WORD IN CATALOG = -# OF FILES IN CATALOG
  2821.     TAD [DPROPR-1
  2822.     DCA XR        /SET XR TO POINT TO FIRST FILE ENTRY
  2823.     JMP I MRDCAT    /RETURN TO BUMPED ADDRESS
  2824. MDSRCH,    0
  2825. FSRCLP,    TAD I XR
  2826.     SNA CLA    /EMPTY SPACES HAVE A ONE WORD ZERO DIRECTORY ENTRY
  2827.     JMP SKPMTF    /SO SKIP THE 4 WORD COMPARE ON THEM
  2828.     CLA CMA
  2829.     TAD XR
  2830.     DCA XR
  2831.     TAD [-4
  2832.     DCA T6
  2833.     TAD T4
  2834.     DCA T7
  2835. SRCWDL,    TAD T7
  2836.     JMS I [FGETW
  2837.     CIA
  2838.     TAD I XR
  2839.     SZA CLA    /COMPARE ENTRY AGAINST ARGUMENT(8 CHARACTERS)
  2840.     JMP NXTFIL
  2841.     ISZ T7
  2842.     ISZ T6
  2843.     JMP SRCWDL
  2844.     JMS BUMPXR    /SKIP GARBAGE WORDS
  2845.     TAD I XR
  2846.     SNA
  2847.     JMP SKPMTF+1    /UNCLOSED OUTPUT FILES DONT COUNT
  2848.     CIA
  2849.     DCA T6    /STORE FILE LENGTH
  2850.     ISZ MDSRCH
  2851.     JMP I MDSRCH
  2852. NXTFIL,    TAD T6
  2853.     IAC
  2854.     JMS BUMPXR    /SKIP REST OF NAME AND GARBAGE WORDS
  2855. SKPMTF,    TAD I XR    /GET LENGTH OF THIS ENTRY
  2856.     TAD T5
  2857.     DCA T5    /ADD TO BLOCK STARTING ADDRESS
  2858.     ISZ NFILES
  2859.     JMP FSRCLP
  2860.     DCA T5        /RE-INITIALIZE BLOCK NUMBER FOR NEXT SEGMENT
  2861.     TAD I [DLINK    /DIRECTORY EXHAUSTED - ANY MORE?
  2862.     SZA
  2863.     JMP MRDREN
  2864.     JMP I MDSRCH
  2865.  
  2866. BUMPXR,    0        /ROUTINE TO SKIP (DWASTE+AC) WORDS
  2867.  
  2868.     TAD I [DWASTE
  2869.     CIA        /DWASTE IS NEGATIVE AND SO IS AC
  2870.     TAD XR
  2871.     DCA XR
  2872.     JMP I BUMPXR
  2873.  
  2874. MWRCAT,    0
  2875.     TAD [4210
  2876.     DCA CATCTL
  2877.     CIF 0
  2878.     JMS I T9
  2879. CATCTL,    4210    /WRITE 2 RECORDS FROM FIELD 1
  2880.     1400
  2881. MCATRC,    1
  2882. JMPME2,    JMP I [MERROR+2    /CANNOT REWRITE CATALOG
  2883.     JMP I MWRCAT
  2884.  
  2885.     IFNZRO .-772    <REASSEMBLE CONFIG>    /USED TO BE 766
  2886. SDVHND,    ZBLOCK 17    /DEVICE HANDLER INFORMATION TABLE - SET BY CONFIG
  2887.  
  2888.  
  2889.     IFZERO 1000&. <*1000>
  2890.     /ENTER PROCESSOR FOR MONITOR
  2891.     /FIND A HOLE IN THE DIRECTORY LARGE ENOUGH TO ACCOMODATE THE FILE
  2892.     /AND STICK IT IN. MAKE A NOTE THAT WE DID SO FOR THE
  2893.     /"CLOSE" PROCESSOR.
  2894. MENTER,    DCA EPASS    /SET UP FOR PASS 1
  2895.     JMS I [MRDCAT    /READ CATALOG AND SET UP NFILES AND XR
  2896.     JMP I [ERETRN    /NON-FILE-STRUCTURED DEVICE
  2897.     JMS I [CONSOL
  2898.     DCA T2        /INTIIALIZE STARTING BLOCK NUMBER COUNTER
  2899.     TAD [DPROPR-1
  2900.     DCA XR        /RESTORE XR (CONSOLIDATOR DESTROYED IT)
  2901.     TAD MACARG
  2902.     CLL RTR
  2903.     RTR
  2904.     AND [377    /GET REQUESTED LENGTH FROM AC BITS 0-7
  2905.     CIA
  2906.     DCA T3        /T3=REQUESTED LENGTH.  IF T3=0, MEANS RETURN
  2907.             /LARGEST EMPTY SPACE ON TAPE. IF T3<>0, MEANS RETURN
  2908.             /SMALLEST BLOCK OF LENGTH =>T3.
  2909.     TAD I T8    /GET FCB ENTRY
  2910.     AND [7
  2911.     SZA CLA        /ANY ACTIVE TENTATIVE FILES ON THIS DEVICE?
  2912.     JMP I [MRTRN+1    /YES - TAKE ERROR RETURN
  2913. MELOOP,    TAD I XR
  2914.     SNA CLA
  2915.     JMP MEMPTY    /EMPTY SPACE - LOOK AT LENGTH
  2916.     MTHREE        /OCCUPIED - IGNORE
  2917.     JMS I [BUMPXR
  2918.     TAD I XR
  2919. MELEND,    TAD T2
  2920.     DCA T2        /UPDATE T2 TO STARTING BLOCK # OF NEXT ENTRY
  2921.     ISZ NFILES
  2922.     JMP MELOOP    /GO TO NEXT ENTRY
  2923.  
  2924.     /DIRECTORY BLOCK EXHAUSTED
  2925.     TAD EPASS
  2926.     SZA CLA        /WHAT PASS ARE WE IN?
  2927.     JMP EFINUP    /SECOND PASS - THIS IS FOR KEEPS
  2928.     TAD I [DLINK    /FIRST PASS
  2929.     SZA        /ANY MORE SEGMENTS?
  2930.     JMP I [MRDREN    /YES - CONTINUE
  2931.  
  2932.  
  2933.         /DONE - SEE IF OUR BEST IS GOOD ENOUGH.
  2934.     TAD T4
  2935.     JMS I [FGETW
  2936.     SZA CLA        /CHECK THAT FIRST WORD OF NAME IS NON-ZERO
  2937.     TAD T6
  2938.     SNA CLA        /AND THAT WE FOUND WHAT WE WANTED
  2939.     JMP I [MRTRN2    /OTHERWISE GIVE ERROR RETURN
  2940.     TAD ASFLAG    /GET NUMBER OF BEST SEGMENT
  2941.     ISZ EPASS    /AND RESTART THE ALGORITHM IN PASS 2
  2942.     JMP I [MRDREN    /(TAKES LESS SPACE THAN SAVING XR AND NAME)
  2943.  
  2944.     /EVERYTHING IS SET UP - PERFORM THE ACTUAL ENTRY OPERATION
  2945.  
  2946. EFINUP,    TAD XR
  2947.     DCA T1
  2948.     TAD [-4
  2949.     JMS I [BUMPXR
  2950.     TAD I [DWASTE
  2951.     CIA
  2952.     TAD XR        /CATALOG MUST HAVE ROOM FOR ONE MORE FILE
  2953.     TAD [-1772    /AFTER THIS FILE IS ENTERED
  2954.     SMA CLA        /WILL NEW ADDITION OVERFLOW CATALOG?
  2955.     JMP I [EOVFLO    /YUP - CALL OVERLAY TO EXTEND DIRECTORY
  2956. MELP2,    TAD I T1    /MOVE REST OF CATALOG UP
  2957.     DCA I XR    /TO CREATE SPACE FOR NEW ENTRY
  2958.     CLA CMA
  2959.     TAD T1
  2960.     DCA T1
  2961.     CLA CMA CLL RAL
  2962.     TAD XR
  2963.     DCA XR
  2964.     TAD T1
  2965.     CIA CLL CML
  2966.     TAD NAME
  2967.     SZA CLA        /HAVE WE PUSHED UP EVERYTHING?
  2968.     JMP MELP2    /NO, KEEP PUSHING
  2969.     TAD [-4
  2970.     DCA T1        /NOW MOVE THE USERS FILE NAME
  2971.     TAD NAME
  2972.     DCA XR
  2973.     TAD T4
  2974.     JMS I [FGETW    /[IN THE USERS FIELD, OF COURSE)
  2975.     DCA I XR
  2976.     ISZ T4
  2977.     ISZ T1        /INTO THE EMPTY SPACE JUST CREATED
  2978.     JMP .-5
  2979.     TAD I [MDATE    /PUT DATE OF CREATION INTO FILE NAME
  2980.     DCA I XR    /THIS WILL BE DESTROYED IF DWASTE=0
  2981.     IAC        /ADJUST XR BUMP BECAUSE OF DATE STORE
  2982.     JMS I [BUMPXR
  2983.     DCA I XR    /GIVE THE NEWLY ENTERED FILE A LENGTH OF 0
  2984.     TAD XR        /PUT A POINTER TO THE LENGTH WORD OF THE
  2985.     DCA I [DFLAG    /NEW ENTRY INTO THE DIRECTORY HEADER
  2986.     CLA CMA
  2987.     TAD I [DCOUNT
  2988.     DCA I [DCOUNT    /INCREASE THE FILE COUNT BY 1
  2989.     TAD I T8
  2990.     TAD ASFLAG
  2991.     DCA I T8    /SIGNAL AN OPEN OUTPUT FILE ON THIS DEVICE
  2992.     JMS I [MWRCAT    /WRITE THE ALTERED CATALOG BACK OUT
  2993.     JMP I [LRETRN    /STORE ARGS BACK JUST LIKE "LOOKUP"
  2994. MEMPTY,    TAD I XR
  2995.     CIA CLL
  2996.     DCA T1        /SAVE LENGTH OF CURRENT ENTRY
  2997.     TAD T3
  2998.     TAD T6
  2999.     CLA        /LINK NOW EQUALS BEST LENGTH>=DESIRED LENGTH
  3000.     TAD T3
  3001.     SNA
  3002.     CML        /IF DESIRED LENGTH=0 WE ALWAYS WANT MAXIMUM
  3003.     TAD T1
  3004.     CLA CML        /LINK IS NOW ON IF DESIRED LENGTH IS NOT IN BETWEEN
  3005.             /BEST LENGTH AND CURRENT LENGTH
  3006.     TAD T1
  3007.     CIA
  3008.     TAD T6
  3009.     SZL SNA CLA    /TAKE EITHER MIN OR MAX OF BEST AND CURRENT LENGTHS,
  3010.             /DEPENDING ON WHETHER LINK IS ON OR OFF
  3011.     JMP MNOCHG    /MIN(MAX)=BEST - NOTHING TO DO
  3012.     TAD T1
  3013.     DCA T6        /MAKE CURRENT ENTRY NEW "BEST"
  3014.     CLA CLL CMA RAL
  3015.     TAD XR
  3016.     DCA NAME    /REMEMBER CATALOG LOCATION
  3017.     TAD I [MCATRC
  3018.     DCA ASFLAG    /ALSO DIRECTORY SEGMENT NUMBER
  3019.     TAD T2
  3020.     DCA T5        /AND STARTING BLOCK NUMBER
  3021. MNOCHG,    TAD T1
  3022.     CIA
  3023.     JMP MELEND    /GO UPDATE THE BLOCK NUMBER
  3024.  
  3025.  
  3026.     /CLOSE PROCESSOR - CLOSES  AN OUTPUT FILE WHICH WAS OPENED
  3027.     /BY THE "ENTER" CALL -- ARGUMENTS ARE THE DEVICE NUMBER AND THE
  3028.     /CLOSING LENGTH OF THE FILE.  PERFORMS A DIRECTORY CLEANUP AFTER
  3029.     /CLOSING THE FILE.  IF AN ENTRY ALREADY EXISTS WITH THE NEW FILE'S
  3030.     /NAME IT IS DELETED. (CLOSE MAY BE USED AS A "DELETE" COMMAND
  3031.     /ONLY IF NO OUTPUT FILE WAS ENTERED).  AN ERROR RETURN IS 
  3032.     /GIVEN IF THE CLOSING LENGTH IS TOO BIG OR IF THERE WAS NEITHER
  3033.     /AN ACTIVE TENTATIVE FILE OR AN OLD FILE TO DELETE.
  3034.  
  3035. MCLOSE,    JMS I [MRDCAT    /GET THE CATALOG. ALSO NOTE YOU JUST CROSSED A PAGE!
  3036.     JMP CRETRN    /NON-FILE STRUCTURED DEVICE - RETURN NORMALLY
  3037.     CLA IAC        /GET THE NEXT WORD IN THE CALLING SEQUENCE
  3038.     JMS I [FGET
  3039.     DCA T1        /GET CLOSING LENGTH AND STORE IT AWAY
  3040.     JMS I [MDSRCH    /SEARCH FOR THE OLD COPY
  3041.     JMP NODLET    /NO OLD COPY
  3042.     MTHREE
  3043.     TAD I [DWASTE
  3044.     JMS SQUISH    /SQUISH OUT 3+#WASTE WORDS OF THE OLD COPY
  3045.     DCA I XR2    /AND MAKE THE OTHER TWO INTO AN EMPTY
  3046.     TAD T6        /FILE ENTRY WITH THE SAME LENGTH
  3047.     CIA
  3048.     DCA I XR2    /AS THE OLD COPY
  3049.     TAD I T8
  3050.     AND [7
  3051.     SNA        /IS THERE AN OPEN OUTPUT FILE ON THIS DEVICE
  3052.     JMP EOCLOS    /NO - FINISH UP AND GET OUT
  3053.     CIA        /GET THE SEGMENT NUMBER WE WANT
  3054.     TAD I [MCATRC
  3055.     SNA CLA
  3056.     JMP .+3
  3057.     JMS CONSOL
  3058.     JMS I [MWRCAT    /NO - WRITE OUT THE ONE WE SQUISHED
  3059.     TAD I [DFLAG    /GET LOCATION OF TENTATIVE FILE
  3060.     CIA CLL
  3061.     TAD XR2
  3062.     SZL CLA        /IS THE ENTRY TO BE CLOSED ABOVE THE ONE 
  3063.     JMP .+3        /WE JUST DELETED?
  3064.     MTHREE        /YES - MOVE THE POINTER DOWN
  3065.     TAD I [DWASTE    /TO COMPENSATE FOR THE SQUISHING
  3066.     TAD I [DFLAG    /THE POINTER WILL NOW POINT
  3067.     DCA I [DFLAG    /TO THE LENGTH WORD.
  3068.         /(THIS WAS WASTED WORK UNLESS THE CORRECT SEGMENT IS IN CORE)
  3069.  
  3070. NODLET,    TAD I T8
  3071.     AND [7
  3072.     SNA        /IS THERE AN OPEN OUTPUT FILE ON THIS DEVICE?
  3073.     JMP I [MRTRN+1    /WHAT DID HE CALL US FOR? - ERROR
  3074.     JMS I [MRDCAT    /YES - READ IN THE CORRECT SEGMENT
  3075.     TAD I [DFLAG
  3076.     DCA T4        /T4 POINTS TO THE LENGTH OF THE TENTATIVE ENTRY
  3077.     TAD T1
  3078.     CIA        /IF T1=0, NEW ENTRY WILL BE DELETED AUTOMATICALLY
  3079.     DCA I T4    /DURING CONSOLIDATION
  3080.     ISZ T4
  3081.     ISZ T4
  3082.     CLL CML
  3083.     TAD T1
  3084.     TAD I T4    /SUBTRACT CLOSING LENGTH FROM FREE BLOCK ADJACENT TO ENTRY
  3085.     SNL SZA
  3086.     JMP I [MERROR+3    /CLOSE ERROR
  3087.     DCA I T4
  3088. EOCLOS,    JMS CONSOL    /CONSOLIDATE THE DIRECTORY
  3089.     TAD [7770
  3090.     AND I T8
  3091.     DCA I T8
  3092.     SKP
  3093. CRETRN,    TAD [7600    /DO A WRITE OF 0 PAGES. (MAGTAPE)
  3094.     JMS I [MWRCAT
  3095.     ISZ I [MONITO
  3096.     JMP I [MRTRN2
  3097.     /CONSOLIDATOR - CHECKS FOR ENTRIES OF LENGTH 0 AND DELETES THEM.
  3098.     /ALSO CHECKS FOR ADJACENT FREE AREAS AND COMBINES THEM.
  3099. CONSOL,    0
  3100.     TAD [DPROPR-1
  3101.     DCA XR
  3102.     TAD I [DCOUNT
  3103.     DCA T7        /T7 = FILE COUNT
  3104. CONLP,    TAD I XR
  3105.     SNA CLA        /EMPTY FILE?
  3106.     JMP CONMTF    /YES - GO CHECK FOR NULL AND 2 IN A ROW
  3107.     MTHREE
  3108.     JMS I [BUMPXR    /GET PAST THE GARBAGE WORDS
  3109.     TAD I XR    /GET COUNT
  3110.     SZA CLA        /WOULD THIS HAPPEN TO BE A NULL FILE?
  3111.     JMP CONLPT    /NAH, GO TO NEXT ONE
  3112.     TAD [-5        /YEAH, REMOVE IT ENTIRELY
  3113.     TAD I [DWASTE    /INCLUDING THE WASTE WORDS
  3114. SQCOMN,    JMS SQUISH
  3115.     ISZ I [DCOUNT    /BUMP DOWN FILE COUNT IN DIRECTORY
  3116.     ISZ NFILES    /AS WELL AS THE TEMPORARY ONE IN PAGE 0
  3117.     NOP        /V3 RL INSISTS
  3118.     JMP CONSOL+1    /REPEAT ENTIRE CONSOLIDATION - THIS DELETION MAY
  3119.             /HAVE BROUGHT TWO FREE ENTRIES TOGEHER
  3120. /    THE ABOVE NOP FIXES THE KILLER CLOSE BUG
  3121. CONLPT,    ISZ T7
  3122.     JMP CONLP    /MORE FILES - KEEP PLUGGING
  3123.     JMP I CONSOL    /RETURN FROM CONSOLIDATOR
  3124. CONMTF,    TAD I XR    /IS THIS FREE ENTRY NULL?
  3125.     SNA
  3126.     JMP SQTRIV    /YES - SQUASHITLIKEABUG
  3127.     DCA T2        /NO - SAVE LENGTH
  3128.     TAD XR
  3129.     DCA SQUISH        /SAVE POSITION OF LENGTH WORD
  3130.     ISZ T7        /WAS IT THE LAST FILE?
  3131.     SKP        /NO, THEN THERE IS ONE AFTER IT(GOOD THINKING!)
  3132.     JMP I CONSOL    /YES - RETURN FROM CONSOLIDATOR
  3133.     TAD I XR
  3134.     SZA CLA        /TWO EMPTIES IN A ROW?
  3135.     JMP CONLP+3    /NO - SLIP BACK INTO LOOP
  3136.     TAD I XR
  3137.     TAD T2        /YES - COMBINE LENGTHS
  3138.     DCA I SQUISH    /STORE BACK IN FIRST LENGTH WORD AND SQUISH SECOND ENTRY
  3139. SQTRIV,    CLA CMA CLL RAL
  3140.     JMP SQCOMN    /SQUISH OUT 2 WORDS
  3141.  
  3142.  
  3143. MRESET,    TAD [-17
  3144.     DCA T3
  3145. MRSETL,    TAD T3
  3146.     JMS I [MCKDEV
  3147. /LINK MUST BE ON AT THIS POINT
  3148.     TAD [200
  3149.     SZL CLA        /ZERO ALL DEVICE HANDLER SLOTS THAT AREN'T RESIDENT
  3150.     DCA I T1
  3151.     JMS I [FGET
  3152.     SZA CLA
  3153.     TAD [7
  3154.     CMA STL
  3155.     AND I T8
  3156.     DCA I T8    /DELETE THE "FILE CURRENTLY OPEN" FLAG IF ASKED
  3157.     ISZ T3
  3158.     JMP MRSETL
  3159.     JMP I [MNEXT
  3160.  
  3161. /SUBR TO COLLAPSE DIRECTORY AFTER A  POINT
  3162. SQUISH,    0
  3163.     TAD XR
  3164.     DCA XR1
  3165.     CLA CLL CMA RAL
  3166.     TAD XR1
  3167.     DCA XR2        /SET UP XR2 FOR CHANGING SQUISHED ENTRY
  3168. SQLOOP,    TAD I XR
  3169.     DCA I XR1    /MOVE DOWN ONE WORD
  3170.     TAD XR
  3171.     TAD [-1777
  3172.     SZA CLA    /AT END YET?
  3173.     JMP SQLOOP    /NO, KEEP GOING
  3174.     JMP I SQUISH
  3175.     *1400
  3176.     /INITIAL DIRECTORY FOR MONITOR
  3177.     //USED BY BUILD AT WROS8 TO CREATE ABSLDR.SV FROM THE OS8 MONITOR
  3178.     //SOURCE. 
  3179.  
  3180. DCOUNT,    -2    /TWO ENTRIES
  3181. DORG,    MFREE    /FILE STORAGE STARTS AT BLOCK "MFREE"
  3182. DLINK,    0    /THIS IS THE ONLY DIRECTORY RECORD
  3183. DFLAG,    0    /THERE ARE NO OPEN OUTPUT FILES ON THIS DEVICE
  3184. DWASTE,    -1    /# OF WASTED WORDS PER ENTRY
  3185. DPROPR,    0102    /AB
  3186.     2314    /SL
  3187.     0422    /DR
  3188.     2326    /.SV
  3189.     VERDATE    //"DATE WORD" FOR ABLSDR.
  3190.     -6    /SIX BLOCKS LONG( 1 BLOCK = 256 WORDS)
  3191.         //IF THIS IS CHANGED, CHANGE THE "TAD (6" IN BUILD AT WROS8.
  3192.     0    /EMPTY SPACE
  3193.     -1    /OVERLAYED BY DEVICE DEPENDENT PART WITH LENGTH
  3194.  
  3195.     IFNZRO .-1415 <CNFER,QQQ>
  3196.  
  3197.  
  3198.     *3400    /"ENTER" OVERLAY TO USR - RUNS IN 11000
  3199.     JMP .+3
  3200. MSEGLM,    -7    /# DIRECT. SEGS
  3201. NEWLEN,    -10
  3202. MEOVLP,    TAD I [DLINK
  3203.     SNA CLA
  3204.     JMP MELAST    /LAST SEGMENT - MUST CREATE A NEW ONE
  3205.     ISZ I [DCOUNT    /BUMP ENTRY COUNT DOWN
  3206.     JMS I [MWRCAT    /WRITE OUT THIS SEGMENT
  3207.     JMS MSKIPF    /FIND END OF SHORTENED DIRECTORY
  3208.     DCA MEFCNT    /PREPARE TO TRANSFER LAST ENTRY
  3209.     TAD (MEOVLS-1
  3210.     DCA XR1        /INTO NEXT DIRECTORY SEGMENT
  3211.     TAD I XR
  3212.     DCA I XR1
  3213.     ISZ MEFCNT    /THROUGH A BUFFER AT LOC 11200
  3214.     TAD XR
  3215.     CIA
  3216.     TAD T1        /T1 WAS SET UP BY "ENTER"
  3217.     SZA CLA
  3218.     JMP .-7
  3219.     TAD I T1    /GET LENGTH OF MOVED ENTRY
  3220.     DCA MEOCNT
  3221.     TAD I [DLINK
  3222.     JMS I [MRDCAT    /READ NEXT SEGMENT
  3223.     JMS I [CONSOL    /MAKE SURE IT IS AT ITS SMALLEST
  3224.     TAD I [DORG
  3225.     TAD MEOCNT
  3226.     DCA I [DORG    /BUMP FILE ORIGIN DOWN
  3227.     JMS MSKIPF    /FIND LAST LOC IN NEW SEGMENT
  3228. MELP3,    TAD XR
  3229.     DCA METMP1
  3230.     TAD XR
  3231.     TAD MEFCNT
  3232.     DCA METMP2    /PREPARE TO PUSH ALL ENTRIES UP
  3233.     TAD I METMP1
  3234.     DCA I METMP2    /DO THE PUSHING
  3235.     STA
  3236.     TAD XR
  3237.     DCA XR
  3238.     TAD XR
  3239.     TAD (-DWASTE
  3240.     SZA CLA        /ARE WE THROUGH?
  3241.     JMP MELP3    /NO
  3242.     TAD (MEOVLS-1
  3243.     DCA XR        /PREPARE TO MOVE THE SAVED ENTRY INTO THE
  3244.     CLA CMA        /NEW SEGMENT
  3245.     TAD I [DCOUNT
  3246.     DCA I [DCOUNT    /INCREASE ENTRY COUNT OF NEW SEGMENT
  3247.     TAD MEFCNT
  3248.     CIA
  3249. MECOMN,    DCA MEFCNT    /STORE NUMBER OF WORDS TO MOVE
  3250.     TAD [DWASTE
  3251.     DCA XR1
  3252.     TAD I XR
  3253.     DCA I XR1
  3254.     ISZ MEFCNT
  3255.     JMP .-3        /MOVE THE ENTRY IN
  3256.     JMS MSKIPF
  3257.     TAD XR
  3258.     DCA T1        /T1=LAST LOC IN SEGMENT
  3259.     TAD I [DWASTE
  3260.     CIA
  3261.     TAD XR
  3262.     TAD [-1772
  3263.     SMA CLA        /HAVE WE MADE THIS SEGMENT TOO BIG?
  3264.     JMP MEOVLP    /YES - LOOP UNTIL WE GET IT RIGHT
  3265.     JMS I [MWRCAT    /WRITE OUT NEW SEGMENT
  3266.     JMP MEOXIT    /READ IN ENTER AND CONTINUE
  3267.  
  3268. MWRONG,    IAC
  3269. MELAST,    TAD NEWLEN
  3270.     DCA METMP1    /LENGTH OF NEW SEGMENT
  3271.     TAD METMP1
  3272.     CIA
  3273.     TAD I [DCOUNT
  3274.     SMA        /WERE THERE "NEWLEN+1"
  3275.     JMP MWRONG    /NO - SET OUR SIGHTS LOWER
  3276.     DCA I [DCOUNT    /ADJUST LENGTH OF OLD SEGMENT
  3277.     JMS MSKIPF    /FIND BOUNDARY LOC BETWEEN SEGMENTS
  3278.     TAD I [MCATRC
  3279.     IAC
  3280.     DCA I [DLINK    /LINK THE OLD LAST SEGMENT TO 
  3281.     TAD I [DLINK    /THE NEWLY CREATED ONE
  3282.     TAD MSEGLM
  3283.     SMA CLA
  3284.     JMP I (MEOERR    /PROVIDED THAT THERE IS ROOM FOR ANOTHER
  3285.     JMS I [MWRCAT    /WRITE OUT THE NEXT-TO-LAST SEGMENT
  3286.     ISZ I [MCATRC    /BUMP RECORD NUMBER FOR NEXT WRITE
  3287.     ISZ OLDT9    /LIKEWISE BUMP DIRECTORY KEY
  3288.     TAD METMP1
  3289.     DCA I [DCOUNT
  3290.     TAD MEOCNT
  3291.     CIA
  3292.     TAD I [DORG
  3293.     DCA I [DORG    /SET UP PARAMETERS OF THE NEW SEGMENT
  3294.     DCA I [DLINK    /MARK IT AS THE NEW LAST SEGMENT
  3295.     TAD XR
  3296.     TAD [-1777    /SET UP COUNT OF WORDS TO SLIDE DOWN
  3297.     JMP MECOMN    /USE COMMON CODE TO SLIDE WORDS AND EXIT
  3298.  
  3299. MSKIPF,    0        /SUBR TO FIND LAST LOC USED IN A SEGMENT
  3300.             /ALSO FINDS NUMBER OF BLOCKS USED BY SEGMENT
  3301.     TAD I [DCOUNT
  3302.     DCA MNOFIL
  3303.     TAD [DWASTE
  3304.     DCA XR
  3305.     DCA MEOCNT    /INITIALIZE POINTER(XR) AND COUNT(MEOCNT)
  3306. MSKPLP,    TAD I XR
  3307.     SNA CLA
  3308.     JMP MEOMTY
  3309.     MTHREE
  3310.     TAD I [DWASTE    /BUMP POINTER TO LENGTH WORD OF FILE ENTRY
  3311.     CIA
  3312.     TAD XR
  3313.     DCA XR
  3314. MEOMTY,    TAD I XR
  3315.     TAD MEOCNT
  3316.     DCA MEOCNT
  3317.     ISZ MNOFIL
  3318.     JMP MSKPLP
  3319.     JMP I MSKIPF
  3320.  
  3321. MEOCNT,    0
  3322. MEFCNT,    0
  3323. METMP1,    0
  3324. METMP2,    0
  3325. MNOFIL,    0
  3326.     PAGE
  3327.  
  3328. EJECT ABSLDR V4
  3329.     /ABSOLUTE LOADER FOR OS/8 - VERSION 4A
  3330.  
  3331.     *2000
  3332.  
  3333.     MEOVLS=1200    /DESTROYS PART OF "CLOSE" OP FOR BUFFER
  3334.     CTLBLK=3400
  3335.     BUFFER=CTLBLK
  3336.     RXM=6230    /KT8A INSTRUCTION
  3337.     LXM=6200    /KT8A INSTRUCTION
  3338.     XVALU=70    /XCODE
  3339.     XFIELD=20
  3340.     ORIGIN=21
  3341.     B1=22
  3342.     B2=23
  3343.     B3=24
  3344.     C1=25
  3345.     C2=26
  3346.     C3=27
  3347.     WD=30
  3348.     WD1=31
  3349.     WD2=32
  3350.     FILPTR=33
  3351.     PG7400=34
  3352.     LSTFLD=35
  3353.     LOADXR=11
  3354. ABSLDR,    JMS I (CTINIT
  3355.     JMS I (CTINIT
  3356.     JMP CALLCD
  3357.     JMP NOCD
  3358. NEXTCD,    JMS I (NEXFIL
  3359. CALLCD,    JMS I [200
  3360.     5    /COMMAND DECODE
  3361.     0216    /ASSUMED EXTENSION IS .BN
  3362. NOCD,    TAD [6001
  3363.     CDF 0
  3364.     DCA I [JSBITS    /SET JSBITS TO SAVE CD AREA NEXT TIME
  3365.     CDF 10
  3366.     TAD I [MPARAM+1
  3367.     AND [100
  3368.     SZA CLA        /IS /R SWITCH ON?
  3369.     JMS I (CTINIT    /YES - RE-INITIALIZE LOADER TABLES
  3370. LD7400,    7400
  3371.     TAD (MIFILE
  3372.     DCA FILPTR
  3373.     JMS I (SETADR    /GET THE STARTING ADDRESS IF IT APPEARS ON THE LINE
  3374. NEWFIL,    TAD (7001
  3375.     DCA HANDLR
  3376.     TAD I FILPTR
  3377.     AND [7760
  3378.     SZA        /LENGTH OF 256 BLOCKS IMPLIES AT LEAST 256
  3379.     TAD [17
  3380.     CLL CML RTR
  3381.     RTR
  3382.     DCA RCDCNT
  3383.     TAD I FILPTR
  3384.     ISZ FILPTR
  3385.     SNA
  3386.     JMP NEXTCD    /FILE POINTER = 0 MEANS NO MORE INPUT FILES
  3387.     JMS I [200
  3388.     1        /ASSIGN
  3389. HANDLR,    7001        /LOAD INTO 7000 IF NOT ALREADY LOADED
  3390.     JMP I (IOERR
  3391.     TAD I FILPTR
  3392.     DCA RECNO
  3393.     ISZ FILPTR
  3394.     CLA CMA
  3395.     DCA CHCNT
  3396.     DCA REOF
  3397.     TAD I [MPARAM    /TEST FOR /I
  3398.     AND (10
  3399.     SNA CLA
  3400.     JMP I (LOADER    /I IS NOT ON
  3401.     ISZ OFLG    /IS /I ALLOWED?
  3402.     JMP I (OERR    /NO!
  3403.     JMP I (SLASHO
  3404.  
  3405. GETCH,    0        /GET-NEXT-INPUT-CHARACTER ROUTINE
  3406.     TAD [200
  3407.     KRS
  3408.     TAD (-203
  3409.     SNA CLA
  3410.     KSF
  3411.     SKP
  3412.     JMP I (MGET
  3413.     ISZ JMPGET
  3414.     ISZ CHCNT
  3415. JMPX,    JMP JMPGET
  3416.     TAD REOF
  3417.     SZA CLA
  3418.     JMP I GETCH    /EOF REACHED BEFORE LOGICAL END - ERROR
  3419.     CIF 0
  3420.     JMS I HANDLR
  3421.     0210        /READ 2 RECORDS INTO FIELD 1
  3422. PBUFFR,    BUFFER
  3423. RECNO,    0
  3424.     JMP RERROR
  3425.     ISZ RECNO
  3426.     ISZ RCDCNT
  3427.     SKP
  3428.     ISZ REOF
  3429.     TAD (-601
  3430.     DCA CHCNT
  3431.     TAD PBUFFR
  3432.     DCA CHPTR
  3433.     TAD JMPX
  3434.     DCA JMPGET
  3435.     JMP GETCH+1
  3436.  
  3437. JMPGET,    JMP .
  3438.     JMP CHAR1
  3439.     JMP CHAR2
  3440. CHAR3,    TAD JMPX
  3441.     DCA JMPGET
  3442.     TAD I CHPTR
  3443.     AND LD7400
  3444.     CLL RTR
  3445.     RTR
  3446.     TAD CHTMP
  3447.     RTR
  3448.     RTR
  3449.     ISZ CHPTR
  3450.     JMP GCHCOM
  3451. CHAR2,    TAD I CHPTR
  3452.     AND LD7400
  3453.     DCA CHTMP
  3454.     ISZ CHPTR
  3455. CHAR1,    TAD I CHPTR
  3456. GCHCOM,    AND (377
  3457.     ISZ GETCH
  3458.     JMP I GETCH
  3459. RERROR,    SPA CLA
  3460.     JMP I (IOERR    /AN ACTUAL READ ERROR - AMAZING!
  3461.     ISZ REOF
  3462.     JMP RECNO+2
  3463. REOF,    0
  3464. CHCNT,    0
  3465. CHPTR,    0
  3466. CHTMP,    0
  3467. RCDCNT,    0
  3468. OFLG,    -1        /SWITCH FOR /O OPTION
  3469.     PAGE
  3470.     *2200
  3471. PUTWD,    0160        /ABSLDR VERSION NUMBER (V4 IS NOW "A0")
  3472.     CMA
  3473.     AND I B2    /AND OUT THE PAGE SLOT IN THE PAGE TABLE
  3474.     DCA I B2
  3475.     TAD ORIGIN
  3476.     DCA ORGX
  3477.     TAD XVALU
  3478.     CLL RAR
  3479.     SZA CLA        /TEST FOR FIELDS 0 OR 1
  3480.     JMP PUTIT    /NEITHER - STORE AS IS
  3481.     SNL
  3482.     JMP FLD0
  3483.     TAD ORIGIN
  3484.     SPA
  3485.     TAD [-400
  3486.     SPA CLA
  3487.     JMP FLD1
  3488.     CLA CLL CML RTR
  3489.     TAD ORIGIN
  3490.     SMA CLA
  3491.     JMP .+3
  3492.     ISZ I (OVLYFG    /SET FLAG THAT LOADER IS BEING OVERLAYED
  3493.     TAD (2400    /LOADER OVERLAYS GO IN MTEMP+11 - MTEMP+14
  3494. LCOMPR,    TAD ORIGIN
  3495.     RTL
  3496.     RTL
  3497.     RAL
  3498.     AND [17
  3499.     TAD (MTEMP
  3500. RLCOMN,    DCA PGTMP
  3501.     TAD BUFREC
  3502.     CIA
  3503.     TAD PGTMP
  3504.     SNA CLA
  3505.     JMP DONTWR
  3506.     JMS WRBUF
  3507. WRIBUF,     CLA        /MODIFIED..IF NOT /O GETS SZA CLA
  3508.     JMP DONTWR
  3509.     CIF 0
  3510.     JMS I [SHNDLR
  3511.     0210
  3512.     1400    /USE CATALOG SPACE
  3513. PGTMP,    0
  3514.     JMP I (LIOERR
  3515. DONTWR,    DCA OLDT9    /MARK THE CATALOG DESTROYED
  3516.     TAD PGTMP
  3517.     DCA BUFREC
  3518.     TAD ORIGIN
  3519.     AND [377
  3520.     TAD PTRBFR
  3521.     DCA ORGX
  3522.     CDF 10
  3523.     JMP PUTIT2
  3524. FLD1,    CLL
  3525.     TAD ORIGIN    /IGNORE LOCATIONS ABOVE 17600
  3526.     TAD [200
  3527.     SZL CLA
  3528.     JMP I PUTWD
  3529. PUTIT,    TAD XFIELD
  3530.     TAD (6201
  3531.     DCA .+1
  3532. M7,    -7
  3533. PUTIT2,    TAD C3
  3534.     DCA I ORGX
  3535. CDF10,    CDF 10
  3536.     JMP I PUTWD
  3537. FLD0,    TAD ORIGIN    /CHECK FOR STUFF IN PAGE 7000
  3538.     TAD (1000
  3539.     SNL CLA        /IF NON ZERO,OVERLAY
  3540.     JMP PUTIT
  3541.     ISZ PG7400    /SET OVERLAY FLAG
  3542.     JMP LCOMPR    /FORM RECORD NO.
  3543. WRBUF,    CALONC
  3544.     TAD BUFREC
  3545.     SNA
  3546.     JMP I WRBUF
  3547.     CIF 0
  3548.     JMS I [SHNDLR
  3549.     4210
  3550. PTRBFR,    1400
  3551. BUFREC,    0
  3552.     JMP I (LIOERR
  3553.     DCA BUFREC
  3554.     /BAD I/O ON SYSTEM DEVICE
  3555.     JMP I WRBUF
  3556.  
  3557. ORGX,
  3558. NEXFIL,    ERTRN
  3559.     JMS WRBUF    /WRITE WHATEVER
  3560.     TAD I [MPARAM-1
  3561.     SPA CLA
  3562.     JMP I (BUILD
  3563.     TAD I [MPARAM
  3564.     AND (40
  3565.     SZA CLA
  3566.     JMP I (BUILD
  3567.     JMP I NEXFIL
  3568.  
  3569. CORTB,    ZBLOCK 30    /ONCE-ONLY CODE INSERTED HERE LATER
  3570.     ZBLOCK 2    /EXTRA NEEDED BY ONCE-ONLY CODE
  3571.             /NOT USED BY CORE TABLE
  3572.     PAGE
  3573.     *2400
  3574. ITSOVR,    JMS ASSEMB        /END OF FILE
  3575.     CIA
  3576.     TAD LCKSUM
  3577. SZAIN,    SZA CLA        /TEST CHECKSUM
  3578.     JMP I (BADCKS
  3579.     TAD I [MPARAM+1        /TEST FOR S OPTION
  3580.     AND L40
  3581.     SNA CLA
  3582.     JMP I (NEWFIL        /TIME FOR ANOTHER FILE
  3583. LOADER,    DCA LCKSUM        /
  3584.     DCA I (OFLG    /CANCEL FURTHER /I'S
  3585.     TAD SZAIN
  3586.     DCA I (WRIBUF
  3587.     JMS GETFLD        /FIELD SETTING
  3588.     /DCA XFIELD
  3589.     TAD [200
  3590.     DCA ORIGIN        /ORIGIN SETTING
  3591.     JMS I (GETCH
  3592.     JMP I (NEWFIL
  3593.     SNA            /IGNORE ZEROES
  3594.     JMP .-3
  3595.     TAD [-200        /LOOKING FOR LEADER CODE
  3596.     SZA CLA
  3597.     JMP LOADER+1
  3598. LEADER,    JMS I (GETCH
  3599.     JMP I (NEWFIL
  3600.     SNA
  3601.     JMP LOADER+1
  3602.     TAD [-200
  3603.     SNA            /IS IT LEADER CODE?
  3604.     JMP LEADER
  3605. NEWWD,    SMA            /IS IT POSSIBLY AFIELD PSEUDO-OP?
  3606.     JMP FIELDW
  3607.     TAD [200        /IF NOT STORE FOR ASSEMBLING
  3608.     DCA WD1
  3609. NEWD1,    DCA I (HT
  3610.     JMS I (GETCH
  3611.     JMP I (BADINP
  3612.     DCA WD2            /STORE SECOND WORD FOR ASSEMBLING
  3613.     JMS I (GETCH
  3614.     JMP I (BADINP
  3615.     TAD [-200
  3616.     SNA            /TEST FOR TRAILER CODE
  3617.     JMP ITSOVR
  3618.     DCA WD            /STORE THIRD WORD
  3619.     JMS ASSEMB
  3620.     SNL
  3621.     JMP DATAWD
  3622.     DCA ORIGIN
  3623.     DCA I (LOADWD    /ZERO 'DATA LOADED' FLAG V3
  3624.     JMP GETNXT
  3625. DATAWD,    JMS I (LOADWD
  3626.     ISZ ORIGIN
  3627. L40,    40
  3628. GETNXT,    TAD WD1
  3629.     TAD WD2
  3630.     TAD LCKSUM
  3631.     DCA LCKSUM
  3632.     TAD WD
  3633.     JMP NEWWD
  3634.  
  3635. ASSEMB,    0            /ASSEMBLING WORDS...
  3636.     TAD WD1
  3637.     CLL RTL
  3638.     RTL
  3639.     RTL
  3640.     TAD WD2
  3641.     JMP I ASSEMB
  3642. FIELDW,    TAD (-32        /TESTING TO ISOLATE FIELD PSEUDO-OP
  3643.     SNA            /IS IT A CONTROL/Z?
  3644.     JMP CTLZ
  3645.     TAD (-46
  3646.     SPA            /IS IT GREATER THAN 300?
  3647.     JMP NOTXP
  3648.     DCA WD1
  3649.     TAD WD1
  3650.     AND [7
  3651.     SZA CLA
  3652.     JMP NOTXP
  3653.     TAD WD1
  3654.     AND (70
  3655.     ISZ I (HT        /I.D. DISTINGUISHES BETWEEN GETFLD & FIELDW CALL
  3656.     JMS I (XTEND        /GO SEARCH FOR GREATER THAN 32K FIELD SETTING
  3657.     /DCA XFIELD
  3658.     JMS I (GETCH
  3659.     JMP I (BADINP
  3660.     TAD [-200
  3661.     SZA
  3662.     JMP NEWWD
  3663. NOTXP,    CLA
  3664.     TAD LCKSUM
  3665.     SNA CLA
  3666.     JMP LOADER
  3667.     JMP I (BADINP
  3668. LCKSUM,    0
  3669. CTLZ,    TAD LCKSUM
  3670.     SZA CLA
  3671.     JMP I (BADINP
  3672.     JMP I (NEWFIL
  3673.  
  3674. GETFLD,    0            /TEST FOR SPECIFIED FIELD SETTING
  3675.     DCA C1
  3676.     DCA XVALU        /INITIALIZE XVALU
  3677.     DCA XFIELD        //V4: ABLSDR /I PATCH FOR KT8A
  3678.     TAD I (MPARAM+2        /COMMAND DECODER INPUT
  3679.     AND (1774
  3680.     SNA            /WAS FIELD SPECIFIED?
  3681.     JMP I GETFLD
  3682.     RTL            /IF SO, WHAT WAS IT?
  3683.     RAL
  3684.     ISZ C1
  3685.     SNL
  3686.     JMP .-3
  3687.     CLA CMA
  3688.     TAD C1            /FIELD...IS HERE
  3689.     JMS I (XTEND        /MAKE NECESSARY ADJUSTMENTS(KT8A)
  3690.     JMP I GETFLD
  3691.     PAGE
  3692.     *2600
  3693.     /BUILD CORE CONTROL BLOCK
  3694.     /FIELDS AND PAGES TO BE SAVED HAVE BEEN ISOLATED 
  3695.     /BY LOADWD.SEE CORTAB FOR MORE INFO ON TABLE.
  3696.  
  3697.  
  3698. BUILD,    TAD (CORTAB+135        /ROUTINE TO SEARCH SAVE TABLE
  3699.     DCA B1
  3700.     TAD I (CORTAB+3
  3701.     CLL CMA
  3702.     AND [7760
  3703.     SNA CLA
  3704.     CML
  3705.     TAD I (CORTAB
  3706.     CMA
  3707.     AND [7760
  3708.     SNA CLA
  3709.     IAC
  3710.     RTR
  3711.     DCA I (CTLBLK+3
  3712.     TAD (CTLBLK+3
  3713.     DCA LOADXR
  3714.     TAD [-40
  3715.     DCA C1
  3716.     TAD [70
  3717.     CLA
  3718.     TAD (37
  3719.     DCA FIELDB
  3720.     DCA I (CTLBLK
  3721. FLDLP,    TAD FIELDB
  3722.     TAD (-2
  3723.     SMA CLA        /IGNORE 07600 AND 17600 IN CCB    /V3
  3724.     CMA        /IN THE CORE MAP
  3725.     TAD [-37
  3726.     DCA C2
  3727.     DCA LOWERA
  3728. MTLOOP,    JMS I (SHFT
  3729.     SNL CLA
  3730.     JMP INUSE
  3731.     TAD LOWERA
  3732. MTRSME,    TAD [200
  3733.     DCA LOWERA
  3734.     ISZ C2
  3735.     JMP MTLOOP
  3736.     JMP FLDOVR
  3737. INUSE,    TAD LOWERA
  3738.     TAD [200
  3739.     DCA UPPERA
  3740.     ISZ C2
  3741.     SKP
  3742.     JMP ENDRGN-2
  3743.     JMS I (SHFT
  3744.     SZL CLA
  3745.     JMP ENDRGN
  3746.     TAD UPPERA
  3747.     JMP INUSE+1
  3748.     CLA CMA
  3749.     DCA C2
  3750. ENDRGN,    TAD LOWERA
  3751.     AND [7400
  3752.     DCA I LOADXR
  3753.     ISZ I (CTLBLK
  3754.     TAD LOWERA
  3755.     AND [7400
  3756.     CIA
  3757.     TAD UPPERA
  3758.     CLL RAR
  3759.     TAD XFB
  3760.     DCA I LOADXR
  3761.     TAD UPPERA
  3762.     JMP MTRSME
  3763.  
  3764. XFB,    0
  3765. FLDOVR,    JMS I (EXTST
  3766.     TAD I [MPARAM+1    /CLOBBER BATCH?
  3767.     AND [400
  3768.     TAD I (MPARAM+2    /AH ED, BUG IF YOU SPEC /P/1 TO LOADER
  3769.     AND (403
  3770.     TAD I (CTLBLK+3
  3771.     DCA I (CTLBLK+3
  3772.     TAD LSTFLD
  3773.     AND (37
  3774.     JMS I (BANKSW    /ADJUST FOR CDF
  3775.     TAD [CDF CIF 0
  3776.     DCA I (CTLBLK+1
  3777.     SKP
  3778. ORG200,    TAD [200
  3779.     TAD LSTADR
  3780.     SZA        /V3
  3781.     JMP NOORG    /V3 ALLOW EXPLICIT START ADDR TO OVERRIDE DEFAULT
  3782.     TAD I (LOADWD    /V3 NO EXPLICIT START ADDR
  3783.     CLA        /REPLACE BY 'SZA CLA' TO ALLOW SELF-STARTING STUFF
  3784. /*    SZA CLA        /V3 IS IT SELF STARTING BIN FORMAT?
  3785.     JMP ORG200    /V3 NO
  3786.     TAD XFIELD    /V3 YES
  3787.     TAD [CIF CDF 0    /V3
  3788.     DCA I (CTLBLK+1    /V3
  3789.     TAD I (ORIGIN    /V3
  3790. NOORG,    DCA I (CTLBLK+2
  3791.     JMP I (LGTOUT    /WRITE CONTROL BLOCK AND EXIT
  3792.  
  3793. FIELDB,    0
  3794.  
  3795.  
  3796. UPPERA,
  3797. SETADR,    0
  3798.     TAD I (MPARAM+3
  3799.     SNA        /IS THERE A STARTING ADDRESS SPECIFIED?
  3800.     JMP I SETADR    /NO
  3801.     DCA LSTADR
  3802.     TAD I [MPARAM-1
  3803.     DCA LSTFLD
  3804.     JMP I SETADR
  3805.  
  3806. LOWERA,    0
  3807. LSTADR,    0
  3808.     PAGE
  3809.     *3000
  3810. ZOFILE,    MOFILE
  3811. ZOUCNT,    -47
  3812. LGTOUT,    TAD PG7400
  3813.     SNA CLA
  3814.     JMP .+7
  3815.     CIF 0
  3816.     JMS I [SHNDLR
  3817.     0300
  3818.     7000
  3819.     MTEMP+16
  3820.     JMP I (LIOERR
  3821.     CIF 0
  3822.     JMS I [SHNDLR
  3823.     4210
  3824.     CTLBLK-200
  3825.     MTEMP+10
  3826.     JMP I (LIOERR
  3827.     TAD I (CTLBLK+2
  3828.     DCA CTL2    /MOVE THINGS INTO THIS PAGE 
  3829.     TAD I (CTLBLK+3
  3830.     DCA CTL3    /SO WE CAN REFERENCE THEM WITH DF=0
  3831.     TAD I [MPARAM
  3832.     AND (40
  3833.     SNA CLA
  3834.     JMP LNOGO
  3835.     TAD CTL3
  3836.     RAL
  3837.     SPA CLA        /ARE WE OVERLAYING THE I/O MONITOR?
  3838.     JMP LKICKM    /NO
  3839.     CDF 0
  3840.     DCA I [JSBITS    /YES - SET JSBITS TO FORCE A READ
  3841.     CDF 10
  3842.     JMS I [200
  3843.     13        /RESET I/O DEVICES AND FILES
  3844. LKICKM,    JMS I [200
  3845.     11        /KICK MONITOR OUT
  3846.  
  3847.     /********************************************
  3848.     /NO PAGE ZERO REFERENCES AFTER THIS POINT 
  3849.     /PAGE ZERO MAY CONTAIN USER CODE
  3850.     /********************************************
  3851.  
  3852.     DCA I ZOFILE    /ZERO OUT COMMAND DECODER AREA
  3853.     ISZ ZOFILE
  3854.     ISZ ZOUCNT
  3855.     JMP .-3
  3856.     TAD I (CTLBLK+1
  3857.     CDF 0
  3858.     DCA I (MSTCDF
  3859.     TAD CTL2
  3860.     DCA I (MSTADR    /SET UP STARTING ADDRESS IN FIELD 0
  3861.     JMP LMOVRD
  3862. LNOGO,    TAD CTL3    /ABOVE COMMENT DOESN'T APPLY TO NEXT 9 LINES
  3863.     SPA CLA        /ARE WE OVERLAYING THE KEYBOARD MONITOR?
  3864.     TAD (5        /NO - RETURN TO NON-SAVING ENTRY
  3865.     TAD [7600
  3866.     CDF 0
  3867.     DCA I (MSTADR
  3868.     TAD ZCDIF0
  3869.     DCA I (MSTCDF
  3870.     CLA CMA
  3871. LMOVRD,    CDF 10
  3872.     DCA I (7700    /SET 7700 TO -1 IF NO GO
  3873.     TAD I (CTLBLK+1
  3874.     CDF 0
  3875.     DCA I (JFIELD    /SET UP PARAMETERS IN FIELD 0
  3876.     TAD CTL2
  3877.     DCA I (JSTART
  3878.     TAD CTL3
  3879.     DCA I (JSBITS
  3880. LMOVLP,    TAD COMBO
  3881.     DCA I COMBPT
  3882.     ISZ LMOVLP
  3883.     ISZ COMBPT
  3884.     ISZ COMBCT
  3885.     JMP LMOVLP    /MOVE THE READ OF THE LOADER OVERLAY INTO FIELD 0
  3886. ZCDIF0,    CDF CIF 0
  3887.     TAD OVLYFG
  3888.     SZA CLA
  3889.     JMP I (MREAD    /LOADER OVERLAYED - GO READ OVERLAY
  3890.     JMP I (MSTCDF    /LOADER NOT OVERLAYED - WHY READ?
  3891. COMBPT,    MREAD-1
  3892. COMBCT,    -7
  3893. COMBO,    7607
  3894.     MREAD-1&177+4600    /JMS I .-1
  3895.     1210
  3896.     2000
  3897.     MTEMP+11    /LOCATION OF SCRATCH BLOCKS FOR LOADER OVERLAY
  3898.     HLT
  3899.     MSTCDF&177+5200    /JMP MSTCDF
  3900. CTL2,    0
  3901. CTL3,    0
  3902. OVLYFG,    0
  3903.     /LOADWD CALCULATES AN INDEX INTO CORTAB
  3904.     /IT SETS APPROPRIATE BITS FOR IDENTIFYING MEMORY AREA
  3905.     /TO BE SAVED BY CCB.SEE CORTAB FOR MORE INFO
  3906. LOADWD,    0            /ROUTINE TO IDENTIFY FIELDS AND PAGES 
  3907.     DCA C3            /TO BE SAVED.
  3908.     TAD XVALU        /FIELD VALUE-INDEX INTO CORTAB(SEE CORTAB)
  3909.     CLL RAL
  3910.     TAD XVALU
  3911.     TAD (CORTAB-1
  3912.     DCA B2
  3913.     TAD ORIGIN
  3914.     AND [7600
  3915.     CLL RTL
  3916.     RTL
  3917.     RTL
  3918.     ISZ B2
  3919.     TAD (-14
  3920.     SMA
  3921.     JMP .-3
  3922.     DCA CTL2
  3923.     CLL CML
  3924.     RAL
  3925.     ISZ CTL2
  3926.     JMP .-2
  3927.     JMS I (PUTWD
  3928.     JMP I LOADWD
  3929.     PAGE
  3930.     *3200
  3931. ERPCH,    0
  3932.     AND (77    /GET LOW ORDER 6 BITS
  3933.     SZA
  3934.     JMP NZCHAR
  3935.     JMS ERR
  3936. FILMSG,    TEXT    /, FILE 0/
  3937. NZCHAR,    TAD (240
  3938.     AND (77
  3939.     TAD (240    /CONVERT TO ASCII
  3940.     JMS LDRPCH    /PRINT
  3941.     JMP I ERPCH    /AND RETURN
  3942. LDRPCH,    0
  3943.     TLS
  3944.     TSF
  3945.     JMP .-1
  3946.     CLA
  3947.     JMP I LDRPCH
  3948. SHFT,    0
  3949.     CLA CLL CMA RTL
  3950.     DCA C3
  3951.     CLA CLL CML RTL
  3952.     TAD B1
  3953. SHFTLP,    DCA B3
  3954.     TAD I B3
  3955.     RAL
  3956.     DCA I B3
  3957.     CLA CMA CML
  3958.     TAD B3
  3959.     ISZ C3
  3960.     JMP SHFTLP
  3961.     JMP I SHFT    /NOTE: SHFT LEAVES AC NON-ZERO
  3962.  
  3963. ERR,    ONCE        /CAN'T USE PAGE 0 LITERALS--NOT THERE ANYMORE.
  3964.     CLA
  3965.     CDF 10
  3966.     TAD I (FILPTR    /ZERO CHAR GETS REPLACED BY "FILE #"
  3967.     TAD (322    /MAGIC NUMBER
  3968.     CLL CML RAR    /AC NOW CONTAINS " #"
  3969.     DCA FILMSG+3
  3970. ERRLUP,    TAD I ERR
  3971.     SNA
  3972.     JMP EOMESG    /MESSAGE MUST BE EVEN NUMBER OF CHARS LONG
  3973.     RTR
  3974.     RTR
  3975.     RTR
  3976.     JMS ERPCH
  3977.     TAD I ERR
  3978.     JMS ERPCH
  3979.     ISZ ERR
  3980.     JMP ERRLUP
  3981. EOMESG,    TAD (215    /TERMINATE MESSAGE WITH CR-LF
  3982.     JMS LDRPCH
  3983.     TAD T212
  3984.     JMS LDRPCH
  3985. ERTRN,    JMP I (ABSLDR    /RETURN TO LOADER STARTING ADDRESS
  3986. IOERR,    JMS ERR
  3987.     TEXT    %I/O ERROR%
  3988. BADINP,    JMS ERR
  3989.     TEXT    /BAD INPUT/
  3990. BADCKS,    JMS ERR
  3991.     TEXT    / BAD CHECKSUM/
  3992. NULERR,    JMS CTINIT
  3993. T212,    212
  3994.     JMS ERR
  3995.     TEXT    /NO INPUT/
  3996. LIOERR,    JMS ERR
  3997.     TEXT    /SYSTEM I-O ERROR/
  3998. OERR,    JMS ERR
  3999.     TEXT %NO /I!%
  4000.  
  4001. CTINIT,    0        /BEFORE ZAPPING TABLES, CALL ONCE-ONLY ROUTINE
  4002. CALONC,    JMS I ERR    /TO SEE IF THIS MONITOR KNOWS HOW TO HANDLE KT8A
  4003.             /MEMORY. WILL NOT RETURN IF IT CAN'T.
  4004.     TAD (-140
  4005.     DCA C1
  4006.     DCA XFIELD    /INITIALIZE XFIELD
  4007.     TAD (CORTAB-1
  4008.     DCA LOADXR
  4009.     CLA CMA
  4010.     DCA I LOADXR
  4011.     ISZ C1
  4012.     JMP .-3
  4013.     DCA LSTFLD
  4014.     DCA I (LSTADR    /V3 SET INITIAL STARTING ADDRESS TO 0
  4015.     DCA I (OVLYFG
  4016.     DCA PG7400
  4017.     ISZ CTINIT
  4018.     JMP I CTINIT
  4019.     PAGE
  4020.  
  4021. *CTLBLK+200
  4022.  
  4023. /CODE FOR OVERLAY OPTION IS HERE.IF /I IS NOT
  4024. /USED IMMEDIATELY, THIS CODE WILL PROBABLY BE DESTROYED,
  4025. /AS THIS AREA IS USED FOR A BUFFER
  4026.  
  4027. SLASHO,    CLA CMA
  4028.     DCA I (OFLG    /RE ENABLE /I
  4029.     TAD I (HANDLR
  4030.     DCA GLONK    /ENTRY POINT TO HANDLER
  4031.     TAD I (RECNO
  4032.     DCA CCBLOK
  4033.     CIF 0
  4034.     JMS I GLONK    /READ IN CORE CONTROL BLOCK
  4035.     0110
  4036. CCBPTR,    CTLBLK
  4037. CCBLOK,    0
  4038.     JMP I (OERR    /DATA FAILURE
  4039.     TAD I CCBPTR    /NO. SEGMENTS
  4040.     CMA        /TEST FOR BAD CORE IMAGE
  4041.     AND L7740
  4042.     SZA CLA
  4043.     JMP I (BADINP    /NOT CORE IMAGE
  4044.     TAD I CCBPTR
  4045.     DCA SEGCNT
  4046.     TAD I SGSTAD    /THIS CODE IS NEW FOR V3D
  4047. /    AND [70        /GET FIELD
  4048.     CLL RTR
  4049.     RAR
  4050.     DCA I (LSTFLD
  4051.     ISZ SGSTAD
  4052.     TAD I SGSTAD
  4053.     DCA I (LSTADR
  4054.     ISZ SGSTAD
  4055.     TAD I SGSTAD    /GET JSW FROM SAVE FILE
  4056.     AND [400
  4057.     DCA TEMP    /PRESERVE /P
  4058.     TAD I [MPARAM+1
  4059.     AND (7377
  4060.     TAD TEMP
  4061.     DCA I [MPARAM+1
  4062.     TAD I SGSTAD
  4063.     AND (3        /PRESERVE LAST 2 BITS
  4064.     DCA TEMP
  4065.     TAD I (MPARAM+2
  4066.     AND [7774
  4067.     TAD TEMP
  4068.     DCA I (MPARAM+2
  4069.     ISZ SGSTAD
  4070. NEWSEG,    TAD I SGSTAD    /SEGMENT START ADDRESS
  4071.     DCA ORIGIN
  4072.     TAD I SGFDLT    /FIELD AND LENGTH
  4073.     JMS I .+1    //V4: ABSLDR /I KT8A PATCH
  4074.     KLUGEI        //ADJUSTS XFIELD.
  4075.     TAD I SGFDLT
  4076.     AND [7700
  4077.     SNA        /V3C
  4078.     STL CLA RAR    /AC4000
  4079.     DCA SEGLTH
  4080.     TAD SEGLTH
  4081. TWOPG,    TAD [7600
  4082.     SMA CLA        /NO.. IS TWO PAGE SEGMENT LEFT?
  4083.     TAD [7600    /YES..-400 TO WORD COUNT
  4084.     TAD [7600    /NO.. -200 TO WORD COUNT
  4085.     DCA WDCT
  4086.     TAD SEGLTH
  4087.     TAD [7600    /BUMP DOWN LENGTH LEFT
  4088.     DCA SEGLTH
  4089.  
  4090.     ISZ CCBLOK    /POINT TO NEXT DATA RECORD
  4091.     TAD CCBLOK
  4092.     DCA DATRC
  4093.     DCA OLDT9    /MARK DIRECTORY DESTROYED
  4094.     CIF 0
  4095.     JMS I GLONK    /READ THE DATA RECORD IN
  4096.     0210
  4097.     1400    /INTO 11400
  4098. TEMP,
  4099. DATRC,    0
  4100.     JMP I (IOERR    /DATA FAILURE
  4101.     CLA CMA
  4102.     TAD ORIGIN
  4103.     AND [177
  4104.     TAD (1200    /SET UP INPUT POINTER
  4105.     CHARPT=10
  4106.     DCA CHARPT
  4107. LOOPI,    TAD I CHARPT
  4108.     JMS I (LOADWD    /MOST OF THE WORK
  4109.     ISZ ORIGIN
  4110. L7400,    7400        /NOP
  4111.     ISZ WDCT    /FINISHED THIS BLOCK?
  4112.     JMP LOOPI
  4113.     JMS I (WRBUF    /YES.. WRITE THE STUFF OUT
  4114.     DCA I (BUFREC    /SO THAT WRBUF DOESN'T SCREW US UP
  4115.     TAD SEGLTH    /V3C (REARRANGED)
  4116.     SMA SZA        /ALL PAGES DONE?
  4117.     JMP TWOPG    /NO, NEXT! (IF DONE, FALL INTO 'GTSEG')
  4118.     ISZ SEGCNT    /YES, ANY MORE SEGMENTS
  4119.     SKP
  4120.     JMP RENEW    /RESET CCB POINTER FOR NEXT /I
  4121.     CLA CLL CML RTL
  4122.     TAD SGSTAD
  4123.     DCA SGSTAD
  4124.     CLA CLL CML RTL
  4125.     TAD SGFDLT
  4126.     DCA SGFDLT    /POINT TO NEXT CCB ENTRIES
  4127.     JMP NEWSEG
  4128.  
  4129. GLONK,    0        /HANDLER ENTRY POINT HERE
  4130. WDCT,    0
  4131. SEGCNT,    0
  4132. SEGLTH,    0
  4133. CTLBLK=3400
  4134.  
  4135. SGFDLT,    CTLBLK+5    /FIELD AND LENGTH WORD
  4136. SGSTAD,    CTLBLK+1    /SEGMENT START ADDRESS
  4137.  
  4138. L7740,
  4139. RENEW,    7740        /USED TO CLEAR AC
  4140. L77,    77        /MIGHT OR MIGHT NOT SKIP
  4141.     TAD (CTLBLK+1
  4142.     DCA SGSTAD
  4143.     TAD (CTLBLK+5
  4144.     DCA SGFDLT
  4145.     JMP I (NEWFIL
  4146.     PAGE
  4147.     *4000
  4148. XTEND,    0        /CODE TO HANDLE EXTENDED MEMORY BANK MANIPULATIONS
  4149.     DCA XVALU    /STORE INFO TO BE PROCESSED
  4150.     TAD HT        /IS IT A GETFLD OR A FIELDW CALL?
  4151.     SZA CLA        /IF GETFLD CALL ALL WE WANT TO DO IS TRANSFORM 
  4152.     JMP XFLDT
  4153. XNDT,    TAD XVALU    / TRANSFORM FROM ABCDE TO ACDEB00
  4154.     JMS BANKSW
  4155.     DCA XFIELD
  4156.     JMP I XTEND
  4157. XFLDT,    JMS I (GETCH    /FIELDW CODE TEST FOR SECOND FIELD WORD
  4158.     JMP I (BADINP
  4159.     TAD [-200
  4160.     SNA
  4161.     JMP I (NOTXP
  4162.     SMA
  4163.     JMP XTD
  4164.     TAD [200    /REPEATED NEWWD CODE
  4165.     DCA WD1        /REPEATED NEWWD CODE
  4166.     TAD XVALU    /IF NO SECOND FIELD WORD WE PROCEED AS NORMALLY
  4167.     DCA XFIELD
  4168.     TAD XVALU
  4169.     CLL RTR
  4170.     RAR
  4171.     DCA XVALU
  4172.     JMP I (NEWD1        /BY PASS NEWWD CODE -- ALREADY RAN IT
  4173. XTD,    TAD (-32        /REPITITION OF FIELDW CODE
  4174.     SNA            /IS IT CONTROL/Z?
  4175.     JMP I (CTLZ
  4176.     TAD (-46
  4177.     SPA            /IS IT ABOVE 300?
  4178.     JMP I (NOTXP
  4179.     CLL RTR
  4180.     RAR
  4181.     AND [7
  4182.     TAD WD1
  4183.     DCA XVALU
  4184.     JMS TST278    //V4: IF VT278 SYSTEM IGNORE LXM. ELSE CONTINUE.
  4185.     TAD (7000
  4186.     LXM
  4187.     JMP XNDT
  4188. HT,    0
  4189. EXTST,    0        /BUILD CCB CODE TO HANDLE EXTENDED MEMORY
  4190.     TAD I (FIELDB        /PREVIOUSLY KNOWN AS FLDOVR CODE
  4191.     TAD (-1        /TRANSFORM THE BITS FROM 
  4192.     DCA I (FIELDB        /ABCDE FORM TO CDEBA FORM
  4193.     TAD I (FIELDB
  4194.     CLL RTR
  4195.     RTR
  4196.     SZL
  4197.     TAD (400
  4198.     CLL RAR
  4199.     SZL
  4200.     TAD (100
  4201.     CLL RTR
  4202.     RTR
  4203.     RAR
  4204.     DCA I (XFB
  4205.     CLA CLL CMA RTL
  4206.     TAD I (B1
  4207.     DCA I (B1
  4208.     ISZ I (C1
  4209.     JMP I (FLDLP
  4210.     TAD I (CTLBLK
  4211.     SNA
  4212.     JMP I (NULERR
  4213.     CIA
  4214.     DCA I (CTLBLK
  4215.     JMS TST278    //V4: IF VT278 SYSTEM IGNORE RXM. ELSE CONTINUE.
  4216.     RXM
  4217.     SNA CLA
  4218.     JMP I EXTST
  4219.     JMS KLUGEI    //V4: PATCH FOR ABLSDR /I
  4220.     JMP I EXTST
  4221. BANKSW,    0
  4222.     CLL RTR        /ISOLATE BANK AND FIELD BITS
  4223.     RTR
  4224.     SZL        /ADJUST FOR PROPER CDF CIF
  4225.     TAD [400    /WAS THERE AN "A" BIT?
  4226.     CLL RAR
  4227.     SZL        /WAS THERE A "B" BIT?
  4228.     TAD (4000
  4229.     CLL RTR
  4230.     RTR
  4231.     RAR
  4232.     JMP I BANKSW
  4233.  
  4234. KLUGEI,    0        //V4: ABSLDR /I PATCH TO ADJUST KT8A
  4235.     ISZ .-1        //FOR RETURN
  4236.     AND (70
  4237.     DCA XFIELD
  4238.     TAD XFIELD
  4239.     CLL RTR
  4240.     RAR
  4241.     DCA XVALU
  4242.     JMP I KLUGEI
  4243.  
  4244.  
  4245.     //CHECK FOR VT278 SYSTEM.
  4246.     //IF VT278, KT8A INSTRUCTIONS FOR MEMORY ABOVE 32K ARE NOT SUPPORTED
  4247.     //BECAUSE OF A CONFLICT WITH THE CONTROL PANEL MEMORY OF THE VT278.
  4248.  
  4249. TST278,    0
  4250.     CDF 0
  4251.     TAD I (OS78    /LOOK FOR 278 BIT
  4252.     CDF 10
  4253.     AND [4        /IF 278, BIT 9 IS SET.
  4254.     SNA CLA
  4255.     JMP I TST278    /NOT 278. CONTINUE.
  4256.     ISZ TST278    /ADJUST RETURN
  4257.     ISZ TST278    /TO IGNORE KT8A INSTRUCTION.
  4258.     JMP I TST278
  4259.  
  4260.  
  4261.     PAGE
  4262.  
  4263.     *4200
  4264.     /CORTAB IS A TABLE FOR STORING SAVE INFO
  4265.     /FOR EACH OF THE 0-37 FIELDS, THERE ARE THREE
  4266.     /IDENTIFYING WORDS...THE BITS IN THESE WORDS
  4267.     /CORRESPOND TO PAGES IN THE RESPECTIVE FIELD
  4268.     /E.G. CORTAB+130 REFERS TO 130%3=35TH FIELD
  4269.     /--- FIRST WORD,I.E. PAGES 0-14...
  4270.     /LOADWD BUILDS THE TABLE...
  4271.     /BUILD REFERENCES IT FOR CONSTRUCTING THE CCB
  4272. CORTAB,    ZBLOCK 140
  4273.     PAGE
  4274.  
  4275.     *CORTB        /ONCE-ONLY CODE
  4276.  
  4277. ONCE,    0        /ONCE-ONLY CODE TO CHECK FOR CORRECT MONITOR
  4278.     DCA I WRBUF    /DON'T CALL AGAIN
  4279.     TAD [400
  4280.     TAD K7400
  4281.     SZA CLA
  4282.     JMP OLDMON
  4283.     TAD [7
  4284.     TAD M7
  4285.     SNA CLA
  4286.     JMP I ONCE    /THEY AGREE
  4287. OLDMON,    TAD KERR
  4288.     DCA I NEXFIL
  4289.     JMS I PERR    /THEY DON'T
  4290.     TEXT    /INCOMPATIBLE/    /MESSAGE MUST BE AN EVEN # OF CHARS LONG
  4291.     CIF CDF 0
  4292.     JMP I K7605
  4293. K7400,    7400
  4294. PERR,    ERR
  4295. K7605,    7605
  4296. KERR,    ERR&177+5600
  4297.     /PAGE 0 - TEMPORARIES AND LITERALS.
  4298.         /LOCATIONS 0-3 ARE RESERVED FOR POINTERS TO KEY LOCATIONS
  4299.         /IN THE MONITOR (SO THE CUSPS CAN GET AT THESE LOCATIONS)
  4300.  
  4301.         /LOCATIONS 4-6 ARE RESERVED FOR SYSTEM ODT FIELD 1 BREAKPOINTS
  4302.  
  4303.     *7
  4304. OLDT9,    0        /POINTER TO DEVICE HANDLER OF DIRECTORY IN CORE
  4305.  
  4306.     *15
  4307. XR1,    0
  4308. XR2,    0
  4309. XR,    0
  4310.     *20        /ENTRY TO MONITOR FROM A CALL TO 17700 -
  4311.             /CAN BE DESTROYED AFTER IT IS EXECUTED
  4312. MSTART,    TAD I T1
  4313.     DCA MACARG
  4314.     TAD I [7700
  4315.     DCA I [MONITO
  4316.     TAD I [SMCIF
  4317.     DCA I T2    /FAKE A CALL TO "MONITO"
  4318.     TAD I [MONITO
  4319.     RAL
  4320.     SNL SMA CLA
  4321.     TAD I [SMCIF
  4322.     TAD T3
  4323.     SNA CLA        /CHECK FOR A CALL FROM 10000-11777
  4324.     JMP I [MERROR    /YES - GIVE ERROR IMMEDIATELY
  4325.     JMP I T4    /NO - SLIDE INTO MONITOR CODE
  4326.  
  4327.     *36        /POINTERS TO INTERNAL MONITOR LOCATIONS FOR "BUILD"
  4328.     SDNAME        /SYSTEM DEVICE NAME TABLE (PERMANENT NAMES)
  4329.     SDVHND        /DEVICE HANDLER INFORMATION TABLE
  4330.  
  4331.     *40        /LOCATIONS 20-37 RESERVED FOR CUSP SCRATCH SPACE
  4332. USERFG,    1    /MUST BE IN 40 - SEE CD LISTING
  4333. T1,    MARG1    /MUST BE AT 41
  4334. T2,    FGETX
  4335. T3,    -6213
  4336. T4,    MRENTR
  4337. T5,    0
  4338. T6,    0
  4339. T7,    0
  4340. T8,    0
  4341. T9,    0
  4342. NAME,    0
  4343. NFILES,    0
  4344. ASFLAG,    0
  4345. MACARG,    0
  4346. EPASS,    0
  4347. MERRNO,    4000
  4348. MEOXIT,    CIF 0        /RETURN FROM ENTER OVERLAY
  4349.     JMS I [SHNDLR
  4350.     0210
  4351.     1000
  4352.     MONTOR+2    /RESTORE LOCS 1000-1377 OF USR
  4353.     HLT        /HELP!
  4354.     JMP I .+1
  4355.     MENTER        /RESTART ENTER OPERATION COMPLETELY
  4356.     $
  4357.  
  4358.