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 / build.pa < prev    next >
Text File  |  1992-09-18  |  74KB  |  3,751 lines

  1. /33 OS/8 V3D BUILD
  2. /
  3. /
  4. /
  5. /
  6. /
  7. /
  8. /
  9. /
  10. /
  11. /COPYRIGHT  (C)  1971,1972,1973,1974,1975,1977 BY DIGITAL EQUIPMENT CORPORATION
  12. /
  13. /
  14. /
  15. /
  16. /
  17. /
  18. /
  19. /
  20. /
  21. /
  22. /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
  23. /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
  24. /CORPORATION.  DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
  25. /FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT.
  26. /
  27. /THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
  28. /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
  29. /(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
  30. /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
  31. /
  32. /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
  33. /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
  34. /DIGITAL.
  35. /
  36. /
  37. /
  38. /
  39. /
  40. /
  41. /
  42. /
  43. /
  44. /
  45. /ABSTRACT--
  46. /BUILD IS THE SYSTEM CONFIGURATOR FOR THE OS/8 PROGRAMMING
  47. /SYSTEM. WITH BUILD, THE DEVICES WITHIN A PARTICULAR
  48. /SYSTEM CAN BE RAPIDLY AND EASILY CHANGED. BUILD ALSO
  49. /PROVIDES THE FACILITY FOR CREATING AN INITIAL OS/8 SYSTEM
  50. /FROM BINARY PAPER TAPES OR CASSETTES.
  51.  
  52. /V3 CHANGES
  53.  
  54. /0.    MADE BUILD SUPPORTABLE
  55. /1.    ADDED VE COMMAND (CURRENT VERSION # IS 3X WHERE X IS PATCH LEVEL)
  56. /2.    FIXED PROBLEM WITH Z'S AND 9'S IN FILENAMES
  57. /3.    CHANGED LENGTH OF DF32
  58. /4.    FIXED PROBLEM WITH RK8 BOOTSTRAP RECORD.
  59. /5.    ON LOAD, NULL EXTENSION FIRST SEARCHES FOR .BN
  60. /6.    CR TO $ DOESN'T GIVE ERROR
  61. /7.    FIXED BUG WITH BUILDING ROM SYS
  62. /8.    RUBOUTS TO BOL GIVE $
  63. /9.    ^U RETYPES $
  64. /10.    ASSUME DSK: IF NO DEV GIVEN WITH LOAD
  65. /11.    NO DOT IS PRINTED IF NO EXTENSION
  66. /12.    ^O STUFF NEW
  67. /13.    ALLOW PARITY ^C
  68. /14.    ADDED EXAMINE COMMAND
  69. /15.    FIXED BUG RE ACCESSING USR TABLE VIA POINTER
  70. /16.    CLEANED UP MOVE ROUTINE
  71. /17.    CLEANED UP NUMBER TOO BIG CHECKER
  72. /18.    OVERFLOW ERROR MESSAGE CHANGED TO 'BAD ORIGIN'
  73. /19.    DON'T ALLOW NAMES OVER 6 CHARS TO SPILL INTO EXTENSION;
  74. /    DON'T ALLOW MULTIPLE EXTENSIONS
  75. /20.    INCREASED NUMBER OF ALLOWABLE ENTRY PTS/HANDLER TO 16 (DEC)
  76. /21.    CLEANED UP SYMBOL PRINT ROUTINE
  77. /22.    GOT NAMES IN TABLE TO LINE UP.
  78. /23.    INSERT GRPNAME <CR> INSERTS FIRST HANDLER
  79. /24.    INSERT GRP,DEV1,DEV2,DEV3,...
  80. /25.    INSERT GRP,DEV1-5,...
  81. /26.    SAME FOR DELETE AND REPLACE
  82. /27.    COUNT DEVICES AND SLOTS ONLY ON BOOT
  83. /28.    FIXED BUG RE SYS RF08=4023
  84. /29.    GENERAL SUPPORT OF 2-PAGE SYS HANDLERS
  85. /30.    ADDED QL COMMAND
  86. /31.    SETS SA=00200, JSW=0
  87. /32.    UNLOAD UNLOADS AND DELETES
  88. /33.    ADDED DSK COMMAND
  89. /34.    BUILD COMMAND
  90. /35.    PRINT TELLS YOU ABOUT DSK
  91. /36.    TOOK OUT LOC DEPENDENT CHECK FOR SYSTEM HANDLERS
  92. /37.    INSERT ALLOWS SETTING # OF PLATTERS
  93. /38.    HANDLER HEADER LOADS DIRECTLY INTO DESCRIPTOR TABLE
  94. /39.    USES EXTRA CORE IF AVAILABLE (ALSO CHECKS SOFTWARE CORE SIZE)
  95. /40.    STOPS ECHOING ON INPUT LINE OVERFLOW
  96. /41.    *'S SYSTEM DEVICE
  97. /42.    REMEMBERS SYS ACROSS A BOOT
  98. /43.    'Y' INSTEAD OF 'YE'
  99. /44.    BO CHECKS DCB IN CORE TO SEE IF NEED REWRITE MONITOR
  100. /45.    ALLOW UNLOADING ENTRY POINT NAMES
  101. /46.    CTL COMMAND
  102. /47.    EACH COMMAND HAS ITS OWN MAXIMUM INPUT LINE SIZE
  103. /48.    ADDED CORE COMMAND
  104. /49.    FIXED ^U TO WRITE ZERO DIRECT MSG BUG
  105. /50.    HIT CONTINUE AFTER 'SYS ERR' TO RETRY
  106. /51.    PRESERVED DATE ACROSS BOOT
  107. /52.    MULTIPLE LOADS AND UNLOADS
  108. /53.    LOAD FROM SCRATCH USES INTERNAL ACTIVE HANDLERS
  109. /54.    CASSETTE SUPPORT
  110. /55.    SETS CORE CONTROL BLOCK
  111.  
  112. /CHANGES SINCE FIELD RELEASE
  113.  
  114. /A    'NO ROOM' DOESN'T PRINT 'BAD LOAD'
  115. /B    NO. OF ENTRY POINTS NOW CORRECTLY CHECKED FOR
  116. /C    FIXED BUG RE BUILDING TD8E FROM TD8E
  117. /D    BOOT CMD DISABLES BUILD CMD
  118. /E    JSW SET TO 1 BEFORE CHAINING TO ABSLDR
  119. /F    P CMD BUG FIXED
  120. /G    ALTER BUG FIXED
  121. /H    LENGTH OF INPUT LINE SYMBOLIC
  122. /I    SOFCOR STUFF OPTIMIZED
  123. /J    QL DOESN'T PRINT SPACE BETWEEN SYS'S GRP:NAME
  124. /K    FIXED BUG IN 32K
  125. /L    PAPER TAPE PUTS HLT IN 7600
  126.  
  127. /THINGS TO DO:
  128.  
  129. /?    DIES IF DATA OCCURS BEFORE *0
  130. /?    BOOT.ZE, .NZ  CMD?
  131. /?    GET 2-PAGE BIT OF CURRENT SYSTEM
  132.  
  133. /CHANGES FOR MAINTENANCE RELEASE V3C:
  134.  
  135. /    7-AUG-75
  136.  
  137. /1.    CHANGED VERSION NUMBER TO V5
  138. /2.    INCORPORATED PATCH SEQ #1 (DSN APRIL 1975)
  139. /    ZERO LOCATION SOFSET WHILE BUILDING
  140. /3.    INCORPORATED PATCH SEQ #2 (DSN NOV. 1974)
  141. /    DISMISS USR AFTER ?NAME ERROR
  142. /4.    INCORPORATED PATCH SEQ #3 (DSN  MARCH 1975)
  143. /    DECREASE SYSTEM SIZE BY 5 (FOR ABSLDR) WHEN BUILDING FROM PAPER TAPE
  144. /5.    INCORPORATED PATCH SEQ #4 (DSN APRIL 1975)
  145. /    ADDED 'SIZE' COMMAND TO BUILD
  146. /6.    FIXED BUG WHICH CAUSES SYSXY.RS NOT FOUND TO BE PRINTED
  147. /    ON BOOTXY.RS COMMAND
  148.  
  149. /CHANGES FOR V3D:
  150.  
  151. /    1-MAY-77
  152.  
  153. /1.    FIXED PROBLEM WITH CASSETTE BUILD (JSW WAS SET WRONG)
  154. /2.    ALLOWED SAVING OF HIGH-ORDER DATE BITS
  155.  
  156. /BUILD PAGE 0
  157.     *1
  158.     HLT        /SAFETY HALT AND PATCH SPACE
  159. SAV1,    0
  160. SAV2,    0        /SAVES GROUP NAME
  161.             /POINTER TO BATCH ROUTINE (GROSS BUT NEEDED THE ROOM)
  162. BATT,    BATTST        /AGAIN GROSS BUT WHAT CAN I SAY?
  163.     *10        /AUTO INDEX REGISTERS
  164. XR1,    0        /GENERAL PURPOSE REGISTERS
  165. XR2,    0
  166. XR3,    0
  167. XR4,    0        /USED TO BUILD IMAGE TABLES
  168. XR5,    0
  169. LXR,    0
  170. GNMXR,    0
  171. L600,    600
  172.  
  173.     *20
  174. COUNT,    0        /GENERAL COUNTER LOCATION
  175. CHAR,    0        /CHARACTER BUFFER
  176. TEMP,    0        /TEMPORARIES
  177. TMP1,    0
  178.  
  179.  
  180.     BUFFER=5400
  181.     BINARY=6000
  182.     DEVBUF=0400    /FIRST HANDLER AT 10400
  183.             /FOR REASONS TOO LONG TO GO INTO HERE,
  184.             /BUT WHICH HAVE TO DO WITH CURIOUS
  185.             /PROPERTIES OF THE NUMBER 0,
  186.             /HANDLERS CAN'T START AT 0.
  187.             /THEY COULD HAVE STARTED AT 200.
  188.     SOFSET=7747    /SYSTEM OFFSET. (CURRENTLY =0)
  189.     PG7600=BUFFER    /RECORD 0 (IMAGES OF BOTH 7600'S)
  190.  
  191.     LDRCTL=4113    /CHECK OS/8 ASSEMBLY
  192. NAME1,    0        /NAME1-4 HOLDS FILE AND DEVICE NAMES
  193. NAME2,    0
  194. NAME3,    0
  195. NAME4,    0
  196. TABLMT,    DSCTAB        /HIGH CORE END OF DESCRIPTORS
  197.             /FIRST FREE LOCATION
  198. SIZE,    0
  199. HNDPTR,    DEVBUF        /POINTS TO FIRST FREE LOCATION IN HANDLER TABLE
  200.  
  201.     BLDSAV=76    /**** WILL DESTROY PREVIOUS FILES
  202.             /START OF 40 BLOCK TO SAVE BUILD IN
  203.     HDRSIZ=10    /NUMBER OF ITEMS IN A DESCRIPTOR
  204. DSCPTR,    DSCTAB        /ALWAYS POINTS TO BEGIN OF CURRENT DESCRIPTOR
  205. SLOT,    0
  206. DSKG1,    0        /NAME OF 'DSK'
  207. DSKG2,    0
  208. DSKP1,    0
  209. DSKP2,    0
  210. NEWPAG,    0
  211. OLDPAG,    0
  212. NEWCOR,    0        /NEW CORE MAX
  213. SAVDAT,    0        /REMEMBERS DATE ACROSS A BOOT
  214.     DATEWD=7666
  215. FLAG2,    1        /0 IF PREVIOUS SYSTEM HAD A 2-PAGE HANDLER
  216. /SAMSYS,    1        /0 IF DIDN'T SPECIFY NEW SYS
  217.     BLOK66=0
  218. SYSDCB,    0
  219.     SA=7744
  220.     JSW=7746
  221. /BOOTDV,    0        /HANDLER ADDRESS OF DEVICE WE'RE BOOTSTRAPPING TO
  222. SAVHID,    0        /HIGH-ORDER DATE (BITS 3-4)
  223. /BEGLIN:    72 CHAR LINE BUFFER
  224.  
  225. /NEW BUILD CORE ALLOCATION:
  226.  
  227. /0000-5177    BUILD (ABSLD MUST BE ABOVE 4177)
  228. /5400-5777    DEVICE HANDLER FOR LOAD
  229. /5200-5377    PAPER TAPE/INIT/LINE BUFFER
  230. /6000-6377    INPUT BUFFER FOR LOAD (TEMP LOC OF USR)
  231. /6400-7577    DESCRIPTOR TABLE (DSCTAB)
  232.  
  233. /BINARY MUST FOLLOW BUFFER
  234. /FIELD 1: HANDLERS (0400-7577)
  235. /10000-10377    BLOK66    BUFFER
  236.     *200
  237.  
  238.     SKP CLA    /ENTRY FROM 'R BUILD'
  239.     HLT        /CHAIN ENTRY ADDRESS
  240.     TAD I [7600    /SEE IF SYSTEM ALREADY EXISTS
  241.     CIA
  242.     TAD [4207
  243.     SZA CLA    /IF NOT, BUILD SYSTEM FROM PAPER TAPE
  244.     CLA IAC    /NOTE FACT THAT OS/8 AINT AROUND
  245.     DCA I [RETSW
  246.     JMS I (CORE
  247.     DCA I (AMTCOR    /FIGURE OUT HOW MUCH CORE WE HAVE
  248.     JMS I (GOOD    /DO SOME INITIALIZATION; IT'LL DO YA GOOD
  249.     TAD (BATLS-1    /SET POINTER FOR BATCH OVERLAY
  250.     JMS I (BATTST    /GO CHECK FOR CALL FROM BATCH
  251. CONFIG,    CDF 0
  252.     DCA I (ECHOFLG    /ALLOW TYPING
  253.     JMS I [CRLF
  254. DOLR,    TAD ["$    /OUTPUT A $ BECAUSE I'M JEWISH
  255.     JMS I [TTYOUT
  256.     DCA I [SWAPER    /USE CURRENT HANDLER, NO SWAP ON ^C.
  257.     TAD [-LNLNGT
  258.     JMS I [GTEXT    /READ TTY LINE
  259.     JMP DOLR
  260.     JMS I [GNAME    /INTERPRET THE COMMAND
  261.     TAD NAME1
  262.     SNA
  263.     JMP CONFIG
  264.     DCA CHAR    /ENABLE TEST TO WORK
  265.     JMS I [TEST    /LOOK FOR THE COMMAND IN LIST
  266.     -1417;LOAD    /LOAD DEVICE HANDLER BINARY
  267.     -2205;REPLACE    /REPLACE IN SYSTEM
  268.     -1601;NAME    /ALTER PERMANENT NAME
  269.     -0114;ALTER    /CHANGE DEVICE HANDLER LOCATION
  270.     -2022;PRINT    /SYSTEM STATUS
  271.     -2331;SYSTEM    /SPECIFY SYSTEM DEVICE
  272.     -0217;BOOT    /BOOTSTRAP THE NEW SYSTEM
  273.     -2516;UNLOAD    /DELETE INACTIVE HANDLER
  274.     -0405;DELETE    /DELETE ACTIVE HANDLER
  275.     -1116;INSERT    /INSERT HANDLER IN SYSTEM
  276.     -2605;VERS    /TYPE VERSION #
  277.     -0530;EXAMINE    /EXAMINE LOCATION
  278.     -2114;QLIST    /QUICK LIST
  279.     -0423;DSK    /DSK
  280.     -0317;KORE    /CORE
  281.     -0403;DCBCM    /DCB
  282.     -0324;CTLCM    /CTL
  283.     -2311;SIZCM    /SIZE
  284.     -0516;END    /END COMMAND FOR BATCH
  285. BD,    -0225;BUILD    /BUILD
  286.     0        /MUST TERMINATE LIST WITH 0
  287.     JMP I [WHAT    /DIDN'T FIND COMMAND
  288.  
  289. /NEW HEADER BLOCK:
  290.  
  291. /    DEVICE GROUPNAME
  292. /    DEVICE PERMANENT NAME
  293. /    DCB    (R/W,TYPE,MAX # OF PLATTERS)
  294. /    1/2 PAGE, SYSTEM BIT, CORES BIT, REL ENTRY PT
  295. /    MUST BE 0
  296. /    SIZE OF 1 PLATTER
  297. CORSIZ,
  298. GETCHA,    0
  299.     TAD DSCPTR
  300.     TAD I GETCHA
  301.     ISZ GETCHA
  302.     DCA GETEM
  303.     TAD I GETEM
  304.     JMP I GETCHA
  305.  
  306. /GOTCHA SUBROUTINE MOVED FOR ROOM
  307.  
  308.     PUT=JMS I [GOTCHA
  309.     GET=JMS I [GETCHA
  310.  
  311.  
  312. BATTST,    0        /SUBROUTINE TO SEE IF CALLED FROM BATCH
  313.     DCA XR1    /POINTER TO OVERLAY CODE IN FIELD 2
  314.     TAD I [7777    /GET THE BATCH SWITCH (JMP BATBK IF IN BATCH)
  315.     RAL        /BIT 1
  316.     SMA CLA    /IF NO BATCH MAY NOT HAVE FIELD 2
  317.     JMP I BATTST    /NOT CALLED FROM BATCH
  318. BATBK,    CIF 20        /NOW TO FIELD 2
  319.     JMS I (BATSET    /GO DO SOME OVERLAYS
  320.     JMP I BATTST    /RETURN TO CALLER
  321. GETEM,            /POINTS INTO DSCTAB
  322. RELCOR,    0
  323.     CLA IAC
  324.     DCA CORSIZ    /MAKE RE-USABLE
  325.     TAD [7400
  326.     DCA CORX    /MAKE ROUTINE REUSABLE ON 32K MACHINE
  327. COR0,    CDF 0
  328.     TAD CORSIZ
  329.     RTL
  330.     RAL
  331.     AND COR70
  332.     TAD COREX
  333.     DCA .+1
  334. COR1,    CDF /N
  335.     TAD I CORLOC
  336. COR2,    NOP
  337.     DCA COR1
  338.     TAD COR2
  339.     DCA I CORLOC
  340. COR70,    70
  341.     TAD I CORLOC
  342. CORX,    7400
  343.     TAD CORX
  344.     TAD CORV
  345.     SZA CLA
  346.     JMP COREX
  347.     TAD COR1
  348.     DCA I CORLOC
  349.     ISZ CORSIZ
  350.     JMP COR0
  351. COREX,    CDF 0
  352.     STA
  353.     TAD CORSIZ
  354.     JMP I RELCOR    /LEAVE WITH HIGHEST EXISTENT BANK
  355.  
  356. CORLOC,    CORX
  357. CORV,    1400
  358.     PAGE
  359. /GET    GETS DESCRIPTOR ITEM FROM CURRENT DESCRIPTOR
  360. /OP
  361.  
  362. /PUT    PUTS DESCRIPTOR ITEM IN AC BACK IN SPECIFIED ITEM
  363. /OP    IN CURRENT DESCRIPTOR
  364.  
  365. /ITEMS:
  366.  
  367. /ACTIVE    BIT 0=1 MEANS ENTRY POINT HAS BEEN INSERTED (IS ACTIVE)
  368. /PERM1    PERMANENT NAME (FIRST 2 CHARS)
  369. /PERM2    2ND 2 CHARS
  370. /TWOPAG    BIT 0=1 MEANS 2-PAGE HANDLER, BIT 4 IGNORED, BITS 5-11 RELATIVE ENTRY POINT
  371. /PAGRES    BITS 7-11 GIVE PAGE OF START OF HANDLER WHEN ROTATED 6 RT
  372. /GRPNM1    GROUP NAME (DEVICE NAME) FIRST 2 CHARS
  373. /GRPNM2    2ND 2 CHARS
  374. /DEVSIZ    GIVES SIZE OF 1 PLATTER
  375. /PLATNUM # OF PLATTERS IN BITS 2-4
  376. /DSKBIT    BIT 1 IS FLAG FOR 'DSK' (USED TEMPORARILY BY BUILD)
  377. /MAXPLT    MAXIMUM NUMBER OF PLATTERS ALLOWED (IN BITS 9-11)
  378. /DCB    D.C.B. BIT 0: FILESTRUCTURED, BITS 3-8 DEVICE TYPE
  379. /    BITS 9-11 MAX NO. OF PLATTERS
  380. /CORES    BIT 2 MEANS ENTRY PT IS CORESIDENT WITH SYS HANDLER
  381. /SYSBIT    BIT 1 IS A 1 IF THE DEVICE HAS NAME 'SYS' AND IS A SYS DEVICE
  382.  
  383. /IF FIRST ENTRY OF A DESCRIPTOR IS GE 7600, THEN THIS
  384. /ENTRY IS A BOOTSTRAP ENTRY.
  385. /IT STARTS WITH THE NEGATIVE OF THE NUMBER OF WORDS IN THE
  386. /BOOTSTRAP (FOR THE PRECEDING DEVICE), FOLLOWED BY THAT MANY WORDS
  387.     GRPNM1=0
  388.     GRPNM2=1
  389.     PRMNM1=2
  390.     PRMNM2=3
  391.     DCB=4
  392.     MAXPLT=4
  393.     DVTYPE=4
  394.     TWOPAG=5    /BIT 0
  395.     SYSBIT=5    /BIT 1
  396.     ACTIVE=6
  397.     ENTPT=5
  398.     PAGRES=6
  399.     PLATNUM=6
  400.     DEVSIZ=7
  401.     DSKBIT=6    /BIT 1
  402.     CORES=5        /BIT 2
  403. /READ A LINE OF TEXT    RETURN 1 IS ^U RETURN
  404. GTEXT,    0        /ROUTINE TO COLLECT TTY INPUT
  405.     TAD (-BEGLIN    /AC IS NON-ZERO
  406.     DCA ENDLIN
  407.     DCA I (RUBFLG    /INITIALIZE RUBOUT TO \
  408.     TAD (BEGLIN-1
  409. RDTX,    DCA LXR        /BUFFER ADD. TO INDEX
  410. RDTXT,    JMS I [TTYIN    /READ BLOODY TELETYPE
  411.     TAD CHAR
  412.     DCA NAME1    /SETUP FOR TEST AGAIN
  413.     JMS I [TEST
  414.     -377;RBOUT    /RUBOUT
  415. LFMOD,    -212;LFEED    /LINE FEED..ECHO CURRENT COMMAND
  416.     -215;CARRET    /LINE TERMINATOR
  417.     -233;ALTMOD    /ALT MODE IN SEVERAL FLAVORS
  418.     -375;ALTMOD
  419.     -376;ALTMOD
  420.     -200;RDTXT    /IGNORE BLANKS
  421.     -217;RDTXT    /AS WELL AS ^O
  422.     -203;CTRLC    /BACK TO CURRENT SYSTEM
  423.     -225;CTRLU    /CTRLU
  424.     0        /IF NOT ONE OF THESE, PUT IN BUFFER
  425.     TAD LXR
  426.     TAD ENDLIN
  427.     SNA CLA
  428.     JMP RDTXT    /LINE OVERFLOW, STOP ECHOING
  429.     JMS I [PRNT    /PRINT THE CHARACTER
  430.     TAD CHAR
  431.     DCA I LXR    /AND PUT IN LINE BUFFER
  432.     JMP RDTXT    /NO PROBLEMS YET
  433. RBOUT,    TAD LXR        /IS THERE TEXT TO RUB OUT?
  434.     TAD [1-BEGLIN
  435.     SNA CLA
  436.     JMP RBCR    /NO..SO DON'T DO ANYTHING
  437.     TAD ["\        /YES..ECHO BACKSLASH?
  438.     ISZ I (RUBFLG    /IF = -1, NO
  439.     JMS I [TTYOUT
  440.     CLA CMA        /IGNORE CONSECUTIVE RUBOUTS
  441.     DCA I (RUBFLG
  442.     TAD LXR
  443.     DCA TMP1
  444.     TAD I TMP1
  445.     JMS I [TTYOUT    /ECHO LAST CHAR
  446. XRBACK,    CLA CMA
  447.     TAD LXR        /MOVE INDEX BACK ONE
  448.     JMP RDTX
  449. CARRET,    JMS I [CRLF    /GENERATE 215,212
  450. CAR1,    DCA I LXR
  451.     DCA I LXR    /GUARD AGAINS CMD <CR>
  452.     TAD [BEGLIN-1
  453.     DCA GNMXR    /SETUP FOR GNAME ROUTINE
  454.     ISZ GTEXT    /TAKE NORMAL RETURN
  455.     JMP I GTEXT
  456.  
  457. LFEED,    DCA I LXR    /A 0 TO MARK END
  458.     TAD [BEGLIN-1
  459.     DCA LXR
  460.     JMS I [CRLF
  461.     TAD ["$
  462.     JMS I [TTYOUT
  463. ECHO,    TAD I LXR
  464.     SNA        /DONE ECHOING?
  465.     JMP XRBACK    /YES..REPOSITION LXR
  466.     JMS I [TTYOUT
  467.     JMP ECHO
  468.  
  469. ALTMOD,    TAD ["$        /ALT MODE ECHOES AS $
  470.     JMS I [TTYOUT
  471.     JMP CAR1
  472.  
  473. CTRLU,    TAD ["^
  474.     JMS I [TTYOUT    /GENERATE ^U
  475.     TAD NAME1
  476.     TAD [100
  477.     JMS I [TTYOUT
  478. RBCR,    JMS I [CRLF
  479.     JMP I GTEXT    /TAKE ERROR RETURN
  480.     GETCHR=JMS I [GETC
  481.     BAKCHR=JMS I [BAKC
  482.  
  483. ENDLIN,
  484. GETNUM,    0        /PICKS UP NUMBER FROM LINE BUFF
  485.             /DELIM CHAR PUT IN 'CHAR'
  486.             /PRINTS ERROR MESSAGE IF  GT 4095
  487.             /IF NO NUMBER, TAKES RETURN 1
  488.             /IF NUMBER, TAKES RET 2 WITH # IN 'SIZE'
  489.     DCA SIZE
  490.     DCA GOTSW    /HAVEN'T FOUND ANY DIGITS YET
  491.     JMP NCHAR
  492. ROT,    DCA TMP1
  493.     ISZ GOTSW    /FOUND A DIGIT
  494.     TAD SIZE
  495.     AND [7000
  496.     SZA CLA
  497.     JMP I [BADARG    /NUMBER .GT. 4095
  498.     TAD SIZE
  499.     CLL RTL
  500.     RAL        /BUILD UP THE DIGIT
  501.     TAD TMP1
  502.     DCA SIZE
  503. NCHAR,    GETCHR
  504.     SNA        /0 ENDS THE LINE
  505.     JMP NUMOUT
  506.     TAD [-240    /IGNORE SPACES
  507.     SNA
  508.     JMP NCHAR
  509.     TAD (-30    /TEST LIMITS
  510.     CLL
  511.     TAD [10        /MUST BE BETWEEN 0 AND 7
  512.     SZL
  513.     JMP ROT
  514.     TAD (260    /RESTORE CHAR
  515. NUMOUT,    DCA CHAR    /SAVE AWAY THIS DELIMETER
  516.     TAD GOTSW    /DID WE GET ANY DIGITS?
  517.     SZA CLA        /?
  518.     ISZ GETNUM    /YES
  519.     JMP I GETNUM    /NO, RETURN
  520. GETC,    0        /GET THE NEXT CHARACTER, ADVANCE SCAN PAST IT
  521.     TAD I GNMXR
  522.     JMP I GETC
  523.  
  524. GOTSW,            /1 MEANS GOT A DIGIT
  525. BAKC,    0        /BACK UP SCAN TO THE CHARACTER JUST LOOKED AT
  526.     STA
  527.     TAD GNMXR
  528.     DCA GNMXR
  529.     JMP I BAKC
  530.     PAGE
  531.     INIT=JMS I [INI
  532.     ADVDSC=JMS I [DSCADV
  533.     ADVBOT=JMS I [BOTADV
  534.  
  535. /    JMS PRMNAM    /SEARCH TABLE FOR A PERMANENT NAME
  536.             /GIVEN IN NAME1-NAME2
  537.             /POINT TO DESCRIPTOR FOR THIS NAME
  538. /    JMS ACTNAM    /SAME BUT PERMANENT NAME MUST BE ACTIVE
  539. /    JMS BIGNAM    /SEARCHES FOR PERM & GRP NAME (GRP NAME IN SAV1,SAV2)
  540. /    JMS GRPNAM    /SAME BUT SEARCH FOR GROUP NAME
  541.  
  542. CHKNAM,    0
  543.     INIT
  544. CHKLUP,    ADVDSC        /ADVANCE TO NEXT DESCRIPTOR
  545.     ADVBOT        /ADVANCE OVER ANY BOOTSTRAP
  546.     JMP NFOUND    /NO MORE- ERROR
  547.     GET
  548. NM1,    GRPNM1        /GET GROUP OR PERMANENT NAME
  549.     CIA
  550.     TAD NAME1
  551.     SZA CLA        /DO FIRST WORDS MATCH?
  552.     JMP CHKLUP    /NO, TRY AGAIN
  553.     GET
  554. NM2,    GRPNM2        /GET 2ND WORD
  555.     CIA
  556.     TAD NAME2
  557.     SZA CLA        /2ND WORD MATCH?
  558.     JMP CHKLUP    /NO
  559.     TAD BIGFLG
  560.     SNA CLA        /WANT BOTH GROUP AND PERM NAME?
  561.     JMP NOBIG    /NO
  562.     GET        /YES
  563.     GRPNM1
  564.     CIA
  565.     TAD SAV1
  566.     SZA CLA
  567.     JMP CHKLUP
  568.     GET
  569.     GRPNM2
  570.     CIA
  571.     TAD SAV2
  572.     SZA CLA
  573.     JMP CHKLUP
  574. NOBIG,    TAD ACTSW    /FOUND MATCH
  575.     SNA CLA        /MUST HANDLER BE ACTIVE?
  576.     JMP I CHKNAM    /NO, RETURN
  577.     GET        /YES
  578.     ACTIVE
  579.     SMA CLA        /IS IT ACTIVE?
  580.     JMP CHKLUP    /NO, TRY AGAIN
  581.     JMP I CHKNAM    /YES, RETURN
  582. GRPNAM,    0
  583.     TAD (GRPNM1    /WANT TO SEARCH FOR GROUP NAME
  584.     DCA NM1
  585.     TAD (GRPNM2
  586.     DCA NM2
  587.     DCA ACTSW    /NEED NOT BE ACTIVE
  588.     DCA BIGFLG
  589.     JMS CHKNAM    /GO SEARCH
  590.     JMP I GRPNAM
  591.  
  592. ACTSW,    0        /1 MEANS HANDLER MUST BE ACTIVE
  593.  
  594. PRMNAM,    0
  595.     DCA ACTSW    /AC MAY BE NON ZERO (TO MEAN ACTIVE ONLY)
  596.     TAD (PRMNM1    /WANT TO SEARCH FOR PERMANENT NAME
  597.     DCA NM1
  598.     TAD (PRMNM2
  599.     DCA NM2
  600.     DCA BIGFLG
  601.     JMS CHKNAM    /GO SEARCH
  602.     JMP I PRMNAM
  603.  
  604. BADLOD,    JMS I [CRLF
  605.     JMS I [PRWD
  606.     TEXT    /?BAD LOAD/
  607.     DCA I TABLMT    /RESTORE SENTINEL 0
  608.     JMP I [CONFIG
  609.  
  610. BIGNAM,    0
  611.     DCA ACTSW
  612.     TAD (PRMNM1
  613.     DCA NM1
  614.     TAD (PRMNM2
  615.     DCA NM2
  616.     CLA IAC
  617.     DCA BIGFLG
  618.     JMS CHKNAM
  619.     JMP I BIGNAM
  620.  
  621. /SOMETIMES CHKNAM CAME FROM DSKASK INSTEAD OF GETSYS ****
  622.  
  623. BIGFLG,    0        /SET TO 1 TO CHECK GROUP & PERMANENT NAME
  624. NFOUND,    JMS I [PRNAME
  625.     JMS I [PRWD
  626.     TEXT / NOT FOUND/
  627.     JMP I [CONFIG
  628.  
  629. NOROOM,    JMS I [PRWD
  630.     TEXT /?NO ROOM/
  631.     DCA I TABLMT    /RESTORE SENTINEL 0
  632.     JMP I [CONFIG
  633.  
  634. VERS,    JMS I [PRWD
  635.     TEXT    /BUILD V6A/
  636.     JMP I [CONFIG
  637.  
  638. /BUILD CORE CONTROL BLOCK
  639. /    ***** CAUTION IF BUILD GROWS FROM FIELD 2
  640.  
  641. BLDCCB,    -3        /3 SEGMENTS
  642.     6203        /FIELD 0
  643.     0200        /200 IS S.A.
  644.     0000        /JSW
  645.     0000
  646.     1020        /20000-21777
  647.     0000        /10000-17577
  648.     3710
  649.     0000        /00000-07577
  650.     3700
  651. /GOES INTO WORDS 200-377 OF BLOCK 37
  652.     PAGE
  653. /LOAD A 1- OR 2-PAGE HANDLER INTO BUFFER
  654. /USE IT TO ABSLD
  655.  
  656. SETUP,    0
  657.     TAD [NAME1
  658.     DCA FILPTR    /POINT TO FILENAME AREA
  659.     TAD (BUFFER+1    /LOAD 2 PAGE HANDLER INTO 'BUFFER'
  660.     DCA DRIVER    /SET UP ASSIGN DEVICE HANDLER
  661.     JMS I [GNAME    /GET DEVICE NAME
  662.     TAD NAME1
  663.     SNA CLA
  664.     JMP I SETUP    /NO ARG
  665.     ISZ SETUP
  666.     TAD I (RETSW
  667.     SZA CLA
  668.     JMP I (BLDLOD    /WHEN LOADING STANDALONE, USE INTERNAL HANDLERS
  669.     TAD CHAR
  670.     TAD [-":
  671.     SZA CLA
  672.     JMP I (SETDSK    /USE 'DSK ' IF NO DEVICE GIVEN
  673.     TAD NAME1
  674.     DCA DVNM1
  675.     TAD NAME2
  676.     DCA DVNM1+1    /LOOKUP DEVICE NAME
  677. GETU,    JMS I (GETUSR
  678.     CIF 10
  679.     JMS I [200    /FETCH HANDLER
  680.     1
  681. SUBLUP,
  682. DVNM1,    0
  683. LODTMP,
  684. DVNUM,    0        /NAME GOES IN HERE
  685. DRIVER,    0
  686.     JMP I (KICKM    /NO DEVICE. RELEASE MONITOR
  687.     TAD CHAR
  688.     SZA CLA
  689.     JMS I [GNAME    /PICK UP FILE NAME
  690.     TAD DVNM1+1    /DEVICE NUMBER
  691.     JMS I (DTYPE    /SEE IF FILE STRUCTURED
  692.     TAD NAME1    /IF FILE STRUCTURED WITH NO NAME
  693.     SNA CLA        /IT IS AN ERROR
  694.     JMP I (NMER    /V3C
  695.     TAD NAME4    /SAVE ORIGINAL EXTENSION
  696.     DCA TEMP
  697.     TAD NAME4
  698.     SNA        /IF NULL
  699.     TAD (0216    /TRY .BN FIRST
  700. TRYAGN,    DCA NAME4
  701.     TAD DVNUM    /GET DEVICE NUMBER
  702.     CIF 10
  703.     JMS I [200    /DO LOOKUP OF FILENAME
  704.     2
  705. FILPTR,    NAME1
  706.     0
  707.     JMP LDEXT    /DIDN'T FIND FILE. DO SOMETHING
  708.     CIF 10
  709.     JMS I [200    /KICK OUT MONITOR
  710.     11
  711.     TAD DRIVER
  712. LOADIN,    DCA I [DVICE    /ENTRY POINT OF HANDLER
  713.     JMS I (IOPEN    /IF HERE, IT WILL FIT
  714.     JMP I SETUP
  715. LOAD,    JMS SETUP    /SET UP FOR INPUT
  716.     JMP I [NODEV    /NO LOAD DEVICE
  717.     STA CLL RAL    /-2 DO A HANDLER LOAD
  718.     CIF CDF 20    /OFF TO FIELD 2
  719.     JMS I (LDABS
  720.     JMP I [BADLOD    /BAD
  721.     TAD I TABLMT    /SEE IF HEADER INFORMATION IS OK
  722.     SMA
  723.     JMP I [BADLOD
  724.     TAD (20        /ALLOW 16 HANDLERS/BINARY
  725.     SPA CLA
  726.     JMP I [BADINP    /TOO MANY
  727.     TAD I TABLMT
  728.     DCA LODTMP    /# OF LOOPS TO EXECUTE
  729.     TAD TABLMT
  730.     TAD [PAGRES+1    /POINT TO FIRST 'PAGRES' WORD
  731.     DCA HDPTR    /GO THERE FOR DESCRIPTORS
  732.     TAD HNDPTR
  733.     JMS I [ROTL
  734.     DCA TEMP    /PAGE OF RESIDENCE
  735. PGLUP,    TAD TEMP
  736.     DCA I HDPTR    /INSERT PAGE OF RESIDENCE
  737.     TAD HDPTR
  738.     TAD [HDRSIZ
  739.     DCA HDPTR
  740.     ISZ LODTMP
  741.     JMP PGLUP
  742.     TAD [2-HDRSIZ
  743.     TAD HDPTR
  744.     DCA HDPTR    /POINT TO AFTER DESCRIPTORS
  745.     TAD HDPTR
  746.     CIA
  747.     TAD I (NEWLIM
  748.     SNA CLA        /AT END?
  749.     JMP I (OK        /YES
  750.     TAD I HDPTR    /NO, MAYBE A BOOTSTRAP RECORD
  751.     CLL
  752.     TAD [200
  753.     SNL CLA
  754.     JMP I [BADLOD    /NO
  755.     TAD I HDPTR    /MAYBE
  756.     CIA
  757.     IAC        /OVER COUNT
  758.     TAD HDPTR
  759.     CIA
  760.     TAD I (NEWLIM
  761.     SZA CLA
  762.     JMP I [BADLOD    /NO
  763.     JMP I (OK
  764. HDPTR,    0        /POINTS INTO NEW HEADER
  765.  
  766. /DESCRIPTOR TABLE DESCRIPTION:
  767.  
  768. /'TABLMT' ALWAYS POINTS TO FIRST FREE LOCATION
  769. /'DSCPTR' ALWAYS POINTS TO BEGIN OF CURRENT HEADER BLOCK
  770. /ITEMS ARE OF 3 FORMS:
  771. /(A) GROUP COUNT: IN RANGE -1 TO -20  (IGNORED AND HAS NO MEANING)
  772. /    IT IS THERE FOR COMPATIBILITY WITH OLD BUILD
  773. /(B) HEADER BLOCK STARTS WITH NUMBER IN RANGE 0-7577
  774. /    CONSISTS OF 'HDRSIZ' CONSECUTIVE WORDS
  775. /    DESCRIBED ELSEWHERE
  776. /(C) BOOTSTRAP BLOCK: STARTS WITH NUMBER IN RANGE 7600-7757
  777. /    THIS IS THE NEGATIVE OF THE NUMBER OF WORDS TO FOLLOW
  778. /NON-SYSTEM HEADER INFO:
  779.  
  780. /    - NUMBER OF ENTRY POINTS
  781.  
  782. /FOR EACH ENTRY POINT:
  783.  
  784. /0,1    GROUP NAME
  785. /2,3    ENTRY POINT NAME    (PERMANENT NAME)
  786. /4    R/W FILE-STR, DEVICE TYPE, MAX # OF PLATTERS
  787. /5    1/2 PAGE, REL ENTRY PT, SYSBIT, CORES
  788. /6*    PAGE OF HANDLER, ACTIVE BIT, # OF PLATS, DSKBIT
  789. /7    SIZE OF DEVICE
  790.  
  791. /* SUPPLIED BY BUILD
  792.  
  793. LDEXT,    TAD TEMP    /DIDN'T FIND FILE
  794.     SZA CLA
  795.     JMP I (KICKM    /NO RESORT
  796.     ISZ TEMP
  797.     JMP TRYAGN    /TRY NULL EXTENSION
  798.  
  799.     PAGE
  800. REPLACE,JMS I (DEL    /DELETE PERMANENT NAME SPECIFIED NEXT
  801.     TAD CHAR
  802.     TAD MEQ
  803.     SZA CLA        /AFTER ALL DELETIONS, MUST FIND A "="
  804.     JMP I [SYNTAX    /IF NOT, WARN THE GUY
  805.     JMS INS        /IF FOUND IT, NOW PERFORM INSERTIONS
  806.     JMP I [CONFIG    /THE GUY HAS BEEN HUMORED
  807.  
  808. INSERT,    JMS INS
  809. TSTEOL,    TAD CHAR    /THERE SHOULDN'T BE ANYTHING AFTER EOC
  810.     SNA CLA
  811.     JMP I [CONFIG    /THERE WASN'T
  812.     JMP I [SYNTAX    /WARN BLOKE ABOUT EXTRA STUFF
  813.  
  814. DELETE,    JMS I (DEL    /DELETE PERMANENT NAMES SPECIFIED
  815.     JMP TSTEOL
  816.  
  817. SYSTEM,    JMS INS        /SYS IS SAME AS INSERT
  818.     GET
  819.     SYSBIT
  820.     RTL
  821.     SPA SZL CLA    /BUT SYSBIT OR CORES SHOULD BE ON
  822.     JMP TSTEOL    /JUST TO HUMOR IT'S NAME
  823. TWOSYS,    JMS I [PRWD    /AND FOR COMPATIBILITY REASONS
  824.     TEXT    /?SYS/
  825.     JMP I [CONFIG
  826. INS,    0
  827.     TAD (STL RAR
  828.     DCA I (ACTION    /SET 'ACTION' FOR INSERTIONS
  829.     JMS I [TSTNAM    /LOOK FOR A NAME
  830.     JMS I [GRPNAM    /GET GROUP NAME
  831.     JMS SAVNAM
  832.     JMS I [TEST
  833. MEQ,    -"=;ACT
  834.     -",;INSNAM
  835.     -":;INSNAM
  836.     4000;ACT
  837.     0
  838. INSNAM,    JMS I [TSTNAM    /GRAB A NAME
  839. INSGN,    JMS I [BIGNAM    /GET PERMANENT NAME WITH SPECIFIED GROUP NAME
  840.     GET
  841.     GRPNM1
  842.     CIA
  843.     TAD SAV1
  844.     SZA CLA
  845.     JMP I [NFOUND    /MAKE SURE PERMANENT NAME FOUND
  846.     GET        /HAS GROUP NAME PREVIOUSLY SPECIFIED
  847.     GRPNM2
  848.     CIA
  849.     TAD SAV2
  850.     SZA CLA
  851.     JMP I [NFOUND
  852. ACT,    JMS I (SETACT    /SET ACTIVE BIT
  853. COM,    JMS I [TEST
  854.     -"-;HYPH
  855.     -",;INSNAM
  856.     -"=;INPLAT
  857.     0
  858.     JMP I INS
  859. INPLAT,    JMS I [GETNUM    /AN "="
  860.     JMP I [SYNTAX
  861.     TAD SIZE
  862.     SNA CLA
  863.     JMP I [BADARG    /=0 ILLEGAL
  864.     GET
  865.     MAXPLT
  866.     AND [7        /GET MAXIMUM # OF PLATTERS ALLOWED
  867.     SNA
  868.     IAC        /0 MEANT 1
  869.     CMA CLL
  870.     TAD SIZE    /COMPARE WITH USER'S REQUEST
  871.     SZL CLA        /IS HIS REQUEST OKAY?
  872.     JMP BADPLT    /REQUEST-SHMEST.  TOO MANY PLATTERS
  873.     TAD SIZE
  874.     JMS I [ROTR
  875.     DCA SIZE
  876.     GET
  877.     PLATNUM
  878.     AND (6177
  879.     TAD SIZE    /STORE AWAY HIS STATED NUMBER OF PLATTERS
  880.     PUT        /FOR FUTURE USE BY 'BOOT'
  881.     PLATNUM
  882.     JMP COM        /REJOIN PROCESSING
  883.  
  884. BADPLT,    JMS I [PRWD
  885.     TEXT    /?PLAT/
  886.     JMP I [CONFIG
  887. SAVNAM,    0
  888.     TAD NAME1
  889.     DCA SAV1    /SAVE GROUP NAME
  890.     TAD NAME2
  891.     DCA SAV2
  892.     JMP I SAVNAM
  893.  
  894. HYPH,    TAD NAME2
  895.     AND [77
  896.     CIA
  897.     DCA DETEM
  898.     GETCHR
  899.     AND [77
  900.     TAD DETEM    /GET CHAR AFTER HYPEN
  901.     SNA CLA        /REACHED IT YET?
  902.     JMP IGET    /YES, WELL TRY FOR MORE STUFF
  903.     BAKCHR        /NO, PUT IT BACK FOR FUTURE USE
  904.     ISZ NAME2    /FORM NEXT SEQUENTIAL NAME
  905.     JMP INSGN    /GO INSERT IT
  906. /DO WE REALLY HAVE TO START SEARCH AT CURRENT DESCR?
  907.  
  908. DETEM,    0
  909.  
  910. IGET,    GETCHR
  911.     DCA CHAR
  912.     JMP COM
  913.  
  914. NODEV,    JMS I [PRWD
  915.     TEXT    /?DEVICE/
  916.     JMP I [CONFIG
  917.     PAGE
  918. INTEM,
  919. SETACT,    0
  920.     GET
  921.     ACTIVE        /GET ACTIVATION BIT
  922.     RAL
  923. ACTION,    STL RAR        /ACTIVATE IT (SET TO 'CLL RAR' TO DEACT)
  924.     PUT
  925.     ACTIVE        /RESTORE
  926.     JMP I SETACT
  927.  
  928. DEL,    0
  929.     TAD (CLL RAR
  930.     DCA ACTION
  931. DELNAM,    JMS I [TSTNAM    /PARSE OFF A NAME
  932. DELGN,    JMS I [ACTNAM    /FIND IT AS AN ACTIVE PERMANENT NAME
  933.     JMS SETACT    /DEACTIVATE IT
  934.     GET
  935.     PLATNUM
  936.     AND [6177    /SET # OF PLATTERS TO 0
  937.     PUT
  938.     PLATNUM
  939. DCOM,    JMS I [TEST
  940.     -"-;DHYPH
  941.     -",;DELNAM
  942.     0
  943.     JMP I DEL
  944.  
  945. DHYPH,    TAD NAME2
  946.     AND [77
  947.     CIA
  948.     DCA INTEM
  949.     GETCHR
  950.     AND [77
  951.     TAD INTEM
  952.     SNA CLA        /REACHED FINAL NAME?
  953.     JMP DGET    /YES
  954.     BAKCHR        /NO, PUT FINAL LETTER BACK
  955.     ISZ NAME2    /YES, BUMP TO NEXT NAME
  956. L0423,    423
  957.     JMP DELGN    /DELETE NEXT ONE IN SUCCESSION
  958. DGET,    GETCHR
  959.     DCA CHAR
  960.     JMP DCOM
  961.  
  962. TTYIN,    0        /TTY INPUT ROUTINE
  963.     KSF
  964.     JMP .-1
  965.     KRB
  966.     SNA        /LOW LEVEL BLANK IGNORE
  967.     JMP TTYIN+1
  968.     AND [177    /HANDLE PARITY
  969.     TAD [200
  970.     DCA CHAR
  971.     JMP I TTYIN
  972. /DSK=ACTIVE PERMANENT NAME
  973. /DSK=GROUPNAME:PERMANENT NAME
  974. /DSK=<CR>    MEANS NO DSK SPECIFIED, USE 'SYS'
  975.  
  976. /JUST REMEMBERS NAME (NOTHING ELSE)
  977.  
  978. DSK,    JMS I [GNAME    /GET A NAME
  979.     TAD NAME1
  980.     SNA CLA
  981.     JMP NODSK
  982.     TAD CHAR
  983.     SNA
  984.     JMP NOCOL
  985.     TAD [-":
  986.     SZA CLA        /IS IT FOLLOWED BY A ":"?
  987.     JMP I [SYNTAX    /NO, ASSUME HE'S GIVING AN ACTIVE PERMANENT NAME
  988.             /THIS IS FOR COMPATIBILITY WITH OLD BUILD
  989. /    JMS I [GRPNAM    /YES, ITS A GROUP NAME
  990.     TAD NAME1    /SAVE IT
  991.     DCA DSKG1
  992.     TAD NAME2
  993.     DCA DSKG2
  994.     JMS I [TSTNAM    /GET PERMANENT NAME
  995. PN,    TAD NAME1
  996.     DCA DSKP1    /DON'T WORRY NOW IF IT'S AROUND
  997.     TAD NAME2
  998.     DCA DSKP2
  999.     TAD CHAR
  1000.     SZA CLA
  1001.     JMP I [SYNTAX
  1002.     JMP I [CONFIG
  1003.  
  1004. NODSK,    DCA DSKG1    /FIRST WORD 0 MEANS NONE SPECIFIED
  1005.     JMP I [CONFIG
  1006.  
  1007. NOCOL,    JMS I [ACTNAM    /IT MUST BE AN ACTIVE HANDLER
  1008.     GET
  1009.     GRPNM1
  1010.     DCA DSKG1
  1011.     GET
  1012.     GRPNM2
  1013.     DCA DSKG2
  1014.     JMP PN
  1015. SETDSK,    TAD L0423    /DS
  1016.     DCA I (DVNM1
  1017.     TAD (1300    /K
  1018.     DCA I (DVNM1+1
  1019.     JMP I (GETU
  1020.  
  1021. KICKM,    CIF 10        /RELEASE MONITOR AND RELOAD
  1022.     JMS I [200    /OUR DEVICES
  1023.     11
  1024.     JMP I [NFOUND
  1025.  
  1026. GETUSR,    0
  1027.     CIF 10
  1028.     JMS I [7700    /LOCK IN MONITOR
  1029.     10
  1030.     CIF 10        /RESET RESIDENT HANDLER TABLE
  1031.     JMS I [200
  1032.     13
  1033.     JMP I GETUSR
  1034. /    CODE FOR USING INTERNAL HANDLERS ON STANDALONE LOAD:
  1035.  
  1036. BLDLOD,    DCA I (FILPTR    /LOAD DEV
  1037.     JMS I [ACTNAM    /MUST BE ACTIVE
  1038.     JMS I [GETPG
  1039.     DCA HNDLOK    /LOCATION OF HANDLER
  1040.     TAD [-400
  1041.     JMS I [MOVE
  1042.     CDF 10
  1043. HNDLOK,    HLT
  1044.     CDF 0
  1045. PBUFFER,BUFFER
  1046.     GET
  1047.     DCB
  1048.     DCA BLDCB
  1049.     GET
  1050.     ENTPT
  1051.     AND [177
  1052.     TAD PBUFFER    /GET ENTRY POINT OF HANDLER
  1053.     JMP I (LOADIN
  1054.  
  1055. BLDCB,    0        /CONTAINS DCB OF CURRENT LOAD HANDLER
  1056.     PAGE
  1057. GETPG,    0
  1058.     GET
  1059.     PAGRES
  1060.     JMS I [ROTR
  1061.     AND [7600
  1062.     JMP I GETPG
  1063.  
  1064. /FORMAT:    NAME OLDNAME=NEWNAME
  1065.  
  1066. NAME,    JMS TSTNAM    /SEE IF ARGUMENT SUPPLIED
  1067.             /SEARCH PERMANENT TABLES
  1068.     JMS I [ACTNAM    /GET ACTIVE PERMANENT NAME DESCRIPTOR
  1069.     TAD CHAR
  1070.     TAD MEQL    /CHECK FOR =
  1071.     SZA CLA
  1072.     JMP I [BADARG
  1073.     JMS TSTNAM    /GET NEW DEVICE NAME
  1074.     TAD NAME1    /REPLACE THE NAME
  1075.     PUT
  1076.     PRMNM1
  1077.     TAD NAME2
  1078.     PUT
  1079.     PRMNM2
  1080.     JMP I [CONFIG
  1081. EXAMINE,CLA IAC
  1082. ALTER,    DCA XSWTCH
  1083.     JMS I [TSTNAM    /ALTER ALLOWS MODS TO A PARTICULAR
  1084.     JMS I [GRPNAM    /HANDLER'S ACTUAL CODE.
  1085.             /LOOK AT DEVICE TYPE ENTRY
  1086.     JMS GETPG    /GET PAGE OF RESIDENCE
  1087.     DCA PAGAD    /SAVE IT.
  1088.     JMS I [GETNUM    /GET RELATIVE LOC TO ALTER
  1089.     JMP I [SYNTAX    /NO NUMBER
  1090.     GET
  1091. P2PAG,    TWOPAG        /IS THIS A 2-PAGE HANDLER?
  1092.     SPA CLA
  1093.     TAD [7600
  1094.     TAD [7600    /ALLOW 200 OR 400 MAXIMUM
  1095.     CLL
  1096.     TAD SIZE    /IS THE # TO ALTER TOO LARGE?
  1097.     SZL CLA
  1098.     JMP I [BADARG    /I GUESS IT IS
  1099.     TAD SIZE
  1100.     TAD PAGAD    /GET ABSOLUTE LOCATION
  1101.     DCA PAGAD
  1102.     TAD XSWTCH
  1103.     SZA CLA        /EXAMINE OR ALTER?
  1104.     JMP EXAM    /EXAMINE
  1105.     TAD CHAR    /ALTER
  1106.     SZA CLA        /CR?
  1107.     JMP GETVAL    /NO
  1108.     JMS EXAMSB    /YES, GIVE GUY  OLD VALUE FIRST
  1109. ODTL,    TAD ["/        /ODT LIKE
  1110.     JMS I [TTYOUT
  1111.     TAD [-100
  1112.     JMS I [GTEXT
  1113.     JMP ODTL
  1114. GETVAL,    JMS I [GETNUM    /GET NEW CONTENTS
  1115.     JMP I (TSTEOL    /NO NUMBER
  1116.     TAD SIZE
  1117.     CDF 10
  1118.     DCA I PAGAD    /REPLACE THAT LOC.
  1119.     JMP I [CONFIG    /AND GET OUT
  1120. PAGAD,    0
  1121.  
  1122. /ALTER GROUPNAME,LOC=NEWVALUE
  1123. /ALTER GROUPNAME,LOC
  1124. /EXAMINE GROUPNAME,LOC
  1125. /SIZE ACTNAM
  1126. /SIZE ACTNAM=VALUE
  1127. /DCB ACTNAM
  1128. /DCB ACTNAM=VALUE
  1129. /CTL ACTNAM
  1130. /CTL ACTNAM=VALUE
  1131.  
  1132. SIZCM,    TAD (3        /SIZE COMMAND V3C
  1133. DCBCM,    TAD [-1        /EXAMINE DCB WORD
  1134. CTLCM,    TAD P2PAG    /EXAMINE CONTROL WORD
  1135.     DCA PUTAT
  1136.     TAD PUTAT
  1137.     DCA LOOKAT
  1138.     JMS I [TSTNAM    /GET A NAME
  1139.     JMS I [ACTNAM    /IT MUST BE ACTIVE
  1140.     JMS I [TEST
  1141. MEQL,    -"=;INPDCB
  1142.     4000;EXAMDCB
  1143.     0
  1144.     JMP I [SYNTAX
  1145. INPDCB,    JMS I [GETNUM
  1146.     JMP I [CONFIG    /IGNORE = NOTHING
  1147.     TAD SIZE
  1148.     PUT
  1149. XSWTCH,            /0 MEANS ALTER, 1 MEANS EXAMINE
  1150. PUTAT,    DCB
  1151.     JMP I [CONFIG    /THE USER LIVES DANGEROUSLY
  1152.  
  1153. EXAMDCB,GET
  1154. LOOKAT,    DCB
  1155.     JMS PUTNUM
  1156.     TAD ["/
  1157.     JMS I [TTYOUT
  1158.     TAD [-100
  1159.     JMS I [GTEXT
  1160.     JMP EXAMDCB
  1161.     JMP INPDCB    /NOW PARSE OFF THE REPLY
  1162. EXAM,    JMS EXAMSB
  1163.     JMP I [CONFIG
  1164.  
  1165. EXAMSB,    0
  1166.     CDF 10
  1167.     TAD I PAGAD    /GET CURRENT CONTENTS
  1168.     CDF 0
  1169.     JMS PUTNUM    /PRINT IT
  1170.     JMP I EXAMSB
  1171.  
  1172. PUTNUM,    0        /PRINT AN OCTAL NUMBER
  1173.     DCA PTM
  1174.     TAD [-4        /4 DIGITS
  1175.     DCA PKNT
  1176. PLOOP,    TAD PTM
  1177.     RTL
  1178.     RTL
  1179.     AND [7
  1180.     TAD (60
  1181.     JMS I [TTYOUT
  1182.     TAD PTM
  1183.     RTL
  1184.     RAL
  1185.     DCA PTM
  1186.     ISZ PKNT
  1187.     JMP PLOOP
  1188.     JMP I PUTNUM
  1189. PTM,    0
  1190.  
  1191. PKNT,
  1192. TSTNAM,    0
  1193.     JMS I [GNAME    /COLLECT NAME
  1194.     TAD NAME1    /IF NO NAME FOUND, GIVE ERROR
  1195.     SZA CLA
  1196.     JMP I TSTNAM
  1197. NAMERR,    JMS I [PRWD
  1198.     TEXT    /?NAME/
  1199.     JMP I [CONFIG
  1200.     PAGE
  1201. /PRINT FUNCTION TYPES OUT THE STATUS OF BUILD ON COMMAND
  1202. /AN * BESIDE A DEVICE INDICATES THAT IT IS CURRENTLY MARKED
  1203. /FOR INSERTION IN THE SYSTEM BEING BUILT.
  1204.  
  1205. TTY240,
  1206. PRINT,    STA
  1207.     DCA OLDPAG    /SET ILLEGAL OLD PAGE
  1208.     INIT
  1209.     ISZ I (LINEUP    /MAKE THINGS LINE UP
  1210. PRLUP,    ADVDSC        /ADVANCE TO NEXT DESCRIPTOR
  1211.     ADVBOT        /ADVANCE PAST A BOOTSTRAP (IF ANY)
  1212.     JMP DONE    /ALL DONE
  1213.     JMS I [GETPG    /GET PAGE OF NEW HANDLER
  1214.     DCA NEWPAG
  1215.     TAD NEWPAG
  1216.     CIA
  1217.     TAD OLDPAG    /COMPARE WITH LAST HANDLER'S PAGE
  1218.     SNA CLA        /SAME?
  1219.     JMP PRTPER    /YES
  1220.     JMS I [CRLF    /NO, GO TO NEXT LINE
  1221.     TAD NEWPAG
  1222.     DCA OLDPAG
  1223.     JMS PGNAME
  1224.     TAD TTY240
  1225.     JMS I [TTYOUT
  1226. PRTPER,    GET        /GET ACTIVE BIT
  1227.     ACTIVE
  1228.     SPA CLA        /IS IT ACTIVE?
  1229.     TAD ("*-STA    /YES, PRINT *
  1230.     TAD TTY240    /NO, PRINT SPACE
  1231.     JMS I [TTYOUT
  1232.     JMS PNAME    /PRINT PERMANENT NAME
  1233.     JMP PRLUP
  1234.  
  1235. PGNAME,    0
  1236.     GET
  1237.     GRPNM1
  1238.     JMS I (PRINTE    /PRINT GROUP NAME
  1239.     GET
  1240.     GRPNM2
  1241.     JMS I (PRINTE
  1242.     TAD (":
  1243.     JMS I [TTYOUT
  1244.     JMP I PGNAME
  1245. DONE,    DCA I (LINEUP    /NO MORE LINE-UP
  1246.     TAD DSKG1
  1247.     SNA CLA
  1248.     JMP TELCOR
  1249.     JMS I [CRLF    /TELL GUY ABOUT 'DSK'
  1250.     JMS I [CRLF
  1251.     JMS I [PRWD
  1252.     TEXT    /DSK=/
  1253.     TAD DSKG1
  1254.     JMS I (PRINTE
  1255.     TAD DSKG2
  1256.     JMS I (PRINTE
  1257.     TAD (":
  1258.     JMS I [TTYOUT
  1259.     TAD DSKP1
  1260.     JMS I (PRINTE
  1261.     TAD DSKP2
  1262.     JMS I (PRINTE
  1263. TELCOR,    TAD NEWCOR
  1264.     SNA
  1265.     JMP I [CONFIG    /NO SPECIFIED CORE LIMIT
  1266.     JMS I [ROTL
  1267.     TAD (6000
  1268.     DCA CORMSG+3
  1269.     JMS I [CRLF
  1270.     JMS I [PRWD
  1271. CORMSG,    TEXT    /CORE= /
  1272.     JMP I [CONFIG
  1273. /QUICK PRINT
  1274.  
  1275. QLIST,    INIT
  1276. QLUP,    ADVDSC        /ADVANCE TO NEXT DESCRIPTOR
  1277.     ADVBOT        /ADVANCE OVER ANY BOOTSTRAP IF NECESSARY
  1278.     JMP DONE    /GO AWAY WHEN NO MORE
  1279.     GET
  1280.     ACTIVE        /GET ACTIVE BIT
  1281.     SMA CLA        /IS IT ACTIVE?
  1282.     JMP QLUP    /NO, IGNORE IT
  1283.     GET        /YES
  1284.     SYSBIT
  1285.     RAL
  1286.     SPA CLA        /IS IT 'SYS'?
  1287.     JMS PGNAME    /YES, PRINT GROUP NAME TOO
  1288.     JMS PNAME    /NO, PRINT PERMANENT NAME ONLY
  1289.     JMP QLUP
  1290.  
  1291. DT,
  1292. PNAME,    0
  1293.     GET
  1294.     PRMNM1
  1295.     JMS I (PRINTE
  1296.     GET
  1297.     PRMNM2
  1298.     JMS I (PRINTE
  1299.     TAD TTY240
  1300.     JMS I [TTYOUT
  1301.     JMP I PNAME
  1302.     DCBTBL=7760
  1303.  
  1304. WHAT,    JMS I [PRNAME
  1305.     JMS I [PRWD
  1306.     TEXT /?/    /FOR WHEN A COMMAND ERROR OCCURS
  1307.     JMP I [CONFIG
  1308.  
  1309.  
  1310. DTYPE,    0        /RETURNS TYPE OF OUTPUT
  1311.     TAD (DCBTBL-1
  1312.     DCA DT        /ENTRY AC HAD DEVICE #
  1313.     CDF 10
  1314.     TAD I DT    /IF FILE DEVICE, LINK=0
  1315.     CDF 0
  1316.     CMA RAL        /ALSO, IF FILE AC=0 ON EXIT
  1317.     CLA RAL
  1318.     JMP I DTYPE
  1319. WRITCC,    0
  1320.     TAD [-6        /PUT IN DATA BREAK FILLERS
  1321.     JMS I [MOVE
  1322.     CDF 0
  1323.     K7750
  1324.     CDF 0
  1325.     PG7600+200+150
  1326.     TAD (4200
  1327.     JMS I [SYS    /WRITE NEW CCB
  1328.     BLDCCB-200
  1329.     37
  1330.     JMP I WRITCC
  1331.     PAGE
  1332. TOOMANY,JMS I [PRWD
  1333.     TEXT    /?HANDLERS/
  1334.     JMP I [CONFIG
  1335.  
  1336. GOTCHA,    0
  1337.     DCA I (GOTEM
  1338.     TAD I GOTCHA
  1339.     TAD DSCPTR
  1340.     ISZ GOTCHA
  1341.     DCA GETEMP
  1342.     TAD I (GOTEM
  1343.     DCA I GETEMP
  1344.     JMP I GOTCHA
  1345.  
  1346. GETEMP,    0        /TEMP FOR GOTCHA
  1347. TEST,    0        /TEST CHAR AGAINST ARGUMENTS
  1348.     TAD I TEST    /PICK UP ARGUMENT FROM LIST
  1349.     SNA        /0 TERMINATES
  1350.     JMP I TEST
  1351.     TAD CHAR    /SEE IF THEY COMPARE =
  1352.     AND (3777    /COMPARE ONLY LOW ORDER, THUS ALLOWING '4000' TO MEAN '0'
  1353.     SNA CLA
  1354.     JMP TSTOVR    /THEY DO..DISPATCH TO TABLE
  1355.     ISZ TEST
  1356.     ISZ TEST
  1357.     JMP TEST+1    /THEY DON'T. KEEP GOING
  1358. TSTOVR,    ISZ TEST
  1359.     TAD I TEST
  1360.     DCA TEMP
  1361.     JMP I TEMP
  1362.  
  1363. K7750,    7750        /DATA BREAK FILLERS
  1364.     7751
  1365.     7752
  1366.     7753
  1367.     7754
  1368.     7755
  1369.  
  1370. SYS,    0        /SAVES A FEW WORDS IN SYSTEM CALLS
  1371.     DCA SYCTL    /SAVE FUNCTION WORD
  1372.     TAD I SYS
  1373.     DCA SYBUF    /BUFFER BEING USED
  1374.     ISZ SYS
  1375.     TAD I SYS
  1376.     DCA SYREC    /RECORD #
  1377.     ISZ SYS        /THERE IS NO ERROR RETURN
  1378. /IF SWAPER SET AND BOOTDV SET, USE SPECIAL BOOT HANDLER HERE
  1379. GO,    JMS I SYSENT
  1380. SYCTL,    0
  1381. SYBUF,    0
  1382. SYREC,    0
  1383.     SKP CLA
  1384.     JMP I SYS
  1385.     JMS I [PRWD
  1386.     TEXT    /SYS ERR/
  1387.     HLT        /IF USER IS DARING, HIT CONTINUE TO RETRY
  1388.     JMP GO
  1389.  
  1390. SYSENT,    7607
  1391. /*****************
  1392. /
  1393. /    SYS HANDLER IS 2-PAGES LONG IF LOCATION 7612 IS A 3
  1394. /
  1395. /******************
  1396.  
  1397. CLRTBL,    0
  1398.     TAD [BEGLIN
  1399.     DCA XR1
  1400.     TAD [-200    /ZERO OUT 5200-5377
  1401.     DCA TMP1
  1402.     DCA I XR1
  1403.     ISZ TMP1
  1404.     JMP .-2
  1405.     JMP I CLRTBL
  1406.  
  1407. /FOR HANDLER ONLY
  1408. ORGLIM,    0        /THIS ROUTINE MAKES CERTAIN THAT
  1409.     DCA CLRTBL    /THE ORIGIN FOR LDABS IS WITHIN
  1410.     TAD CLRTBL    /THE BOUNDS SPECIFIED BY SIZE
  1411.     TAD [7600    /AND THE CONTENTS OF HNDPTR
  1412.     SPA
  1413.     JMP BADORG    /ORIGIN BELOW 200
  1414.     CIA
  1415.     TAD [400    /IS ORIGIN WITHIN UPPER BOUND?
  1416.     SPA CLA
  1417.     JMP BADORG
  1418.     TAD CLRTBL
  1419.     TAD [7600    /NOW GIVE BACK RELATIVE BUFFER
  1420.     TAD HNDPTR    /ADDRESS IN FIELD 1
  1421.     DCA CLRTBL
  1422.     TAD CLRTBL
  1423.     AND [7600
  1424.     TAD [200
  1425.     SNA CLA
  1426.     JMP I (NOROOM    /CAN'T 'ORIGIN' INTO PAGE 7600
  1427.     TAD CLRTBL
  1428.     CIF CDF 20    /CALLED FROM FIELD 2
  1429.     JMP I ORGLIM
  1430.  
  1431. BADORG,    JMS I [PRWD
  1432.     TEXT /?ORIGIN/
  1433.     JMP I (OVROUT
  1434.  
  1435. /SOMEWHERE TEST IF HE GAVE US A 2-PAGE BUT REQ A 1-PAGE
  1436. /    PG7600_0
  1437. /    BLOK66_66
  1438. /    IF OLD SYS WAS 1 PAGE, BLOK66/L_PG7600/L
  1439.  
  1440. RECZRO,    0        /READS FIELD 1 CODE, EVEN FOR 12K TD8E
  1441.     TAD [200
  1442.     JMS I [SYS    /READ RECORD 0
  1443.     PG7600
  1444.     0        /THAT NORMALLY CONTAINS FIELD 1
  1445.     TAD (210
  1446.     JMS I [SYS    /READ RECORD 66
  1447.     BLOK66
  1448.     66
  1449.     TAD FLAG2    /DID PREVIOUS SYSTEM HAVE A 2-PAGE HANDLER?
  1450.     SZA CLA
  1451.     TAD [-200    /NO
  1452.     JMS I [MOVE    /YES
  1453.     CDF 0
  1454.     PG7600
  1455.     CDF 10
  1456.     BLOK66
  1457.     JMP I RECZRO
  1458.  
  1459. NOTNUF,    JMS I [PRWD
  1460.     TEXT    /?CORE/
  1461.     JMP I [CONFIG
  1462.     PAGE
  1463. UNLOAD,    JMS I [TSTNAM    /PULL OFF A NAME
  1464.     JMS I [GRPNAM    /IT HAD BETTER BE A GROUP NAME
  1465.     JMS I [TEST
  1466.     -":;UNLPRM
  1467.     4000;UNLGRP
  1468.     0
  1469.     JMP I [SYNTAX
  1470.  
  1471. UNLPRM,    JMS I (SAVNAM    /UNLOAD PARTICULAR HANDLER
  1472. UNLNAM,    JMS I [TSTNAM
  1473.     JMS I [BIGNAM
  1474.     TAD DSCPTR    /DELETE A SINGLE DESCRIPTOR
  1475.     DCA SAVPTR    /DON(T DELETE HANDLER
  1476.     TAD DSCPTR    /OR BOOTSTRAP
  1477.     TAD [HDRSIZ    /NO RELOCATION NECESSARY
  1478.     DCA LSTPTR
  1479.     TAD TABLMT
  1480.     JMP NOMOR
  1481. UNLGRP,    JMS I [GETPG    /GET PAGE OF RESIDENCE
  1482.     DCA TOMOV    /START OF HANDLER
  1483.     GET
  1484.     TWOPAG        /IS IT A 1- OR 2- PAGE HANDLER?
  1485.     SPA CLA
  1486.     TAD [200    /2 PAGE
  1487.     TAD [200    /1 PAGE
  1488.     DCA UNSIZE
  1489.     TAD TOMOV    /DELETE HANDLER AND MOVE ALL FOLLOWING DOWN
  1490.     TAD UNSIZE
  1491.     DCA FROMOV    /GET FIRST LOCATION AFTER HANDLER
  1492.     TAD HNDPTR    /GET NEXT FREE LOCATION FOR HANDLER
  1493.     CIA
  1494.     TAD FROMOV    /GET NUMBER OF LOCS TO MOVE
  1495.     JMS I [MOVE
  1496.     CDF 10
  1497. FROMOV,    0
  1498.     CDF 10
  1499. TOMOV,    0        /UPDATE POINTERS; SEARCH DESCRIPTORS
  1500.     TAD UNSIZE    /FOR REFS TO MOVED HANDLERS AND DECREASE
  1501.     CIA        /THOSE REFS BY -UNSIZE
  1502.     TAD HNDPTR
  1503.     DCA HNDPTR    /FREES SOME BUFFER SPACE
  1504.     TAD TABLMT
  1505.     DCA OLDTOP    /REMEMBER ORIGINAL TOP OF STACK
  1506.     STA        /BACK UP OVER GROUP COUNT
  1507.     TAD DSCPTR
  1508.     DCA SAVPTR    /REMEMBER THIS LOCATION
  1509.     TAD UNSIZE
  1510.     JMS I [ROTL
  1511.     CIA
  1512.     DCA UNSIZE
  1513.     TAD DSCPTR
  1514.     TAD [HDRSIZ
  1515.     DCA LSTPTR    /'LSTPTR' POINTS TO FIRST DESCRIPTOR BEING MOVED
  1516. /COMPRESS THE DESCRIPTORS ABOVE THIS ONE
  1517.  
  1518. ADV,    ADVDSC        /ADVANCE TO NEXT DESCRIPTOR
  1519.     JMP BADV    /ENCOUNTERED A BOOTSTRAP RECORD
  1520.     JMP NOMORE    /NO MORE, THROUGH
  1521. GT,    JMS I [GETPG    /GET PAGE OF THIS DESCRIPTOR
  1522.     CLL CIA
  1523.     TAD TOMOV    /COMPARE WITH PAGE OF DELETED HANDLER
  1524.     SNA CLA
  1525.     JMP SAMPAG    /THEY'RE THE SAME
  1526.     SZL        /THEY'RE NOT THE SAME.  WHICH IS HIGHER?
  1527.     JMP ADV        /IT WAS BELOW HANDLER.  NO SWEAT.
  1528.     GET        /IT WAS ABOVE HANDLER, HAVE TO ACCOUNT FOR THIS
  1529.     PAGRES        /POINT TO NEW HANDLER LOCATION
  1530.     TAD UNSIZE
  1531.     PUT
  1532.     PAGRES
  1533.     JMP ADV        /CONTINUE
  1534. SAMPAG,    TAD [HDRSIZ
  1535.     TAD DSCPTR
  1536.     DCA LSTPTR    /NOTE LOCATION OF NEXT DESCRIPTOR
  1537.     JMP ADV
  1538. /ADVANCE PAST BOOTSTRAP OR DELETE IT AS NECESSARY
  1539. BADV,    TAD DSCPTR
  1540.     CIA
  1541.     TAD LSTPTR
  1542.     SZA CLA        /IS THIS BOOT PART OF GROUP BEING UNLOADED?
  1543.     JMP BDV        /NO
  1544.     TAD I DSCPTR    /YES
  1545.     CIA
  1546.     IAC
  1547.     TAD DSCPTR
  1548.     DCA LSTPTR    /SET 'LSTPTR' TO BEGIN OF NEXT DESCRIPTOR
  1549. BDV,    ADVBOT        /ADVANCE OVER BOOTSTRAP
  1550.     JMP NOMORE    /DONE
  1551.     JMP GT        /GO ON TO NEXT DESCRIPTOR
  1552. /ALL DESCRIPTORS FOR THE SAME HANDLER ARE CONSECUTIVE
  1553. /MOVE DOWN DESCRIPTORS
  1554.  
  1555. NOMORE,    TAD OLDTOP
  1556. NOMOR,    CIA
  1557.     TAD LSTPTR    /MINUS # OF WORDS TO MOVE
  1558.     JMS I [MOVE
  1559.     CDF 0
  1560. LSTPTR,    0        /FIRST DESCRIPTOR NOT CONSIDERED
  1561.     CDF 0
  1562. SAVPTR,    0        /POINTS TO INITIAL DESCRIPTOR BEING DELETED
  1563.     TAD LSTPTR
  1564.     CIA
  1565.     TAD SAVPTR    /GET NUMBER OF WORDS DELETED
  1566.     TAD TABLMT
  1567.     DCA TABLMT    /UPDATE TABLMT
  1568.     DCA I TABLMT    /MUST HAVE 0 AT TABLE END SO DON'T THINK IT'S A BOOTSTRAP
  1569.     JMS I [COMMA
  1570.     JMP UNLNAM
  1571.  
  1572. OLDTOP,            /ORIGINAL TOP OF DESCRIPTORS
  1573. INI,    0
  1574.     TAD (DSCTAB-HDRSIZ
  1575.     DCA DSCPTR
  1576.     JMP I INI
  1577.  
  1578.     INIT=JMS I [INI
  1579.  
  1580. /RETURN TO CONFIG IF EOL, OR BACK IN-LINE IF COMMA
  1581.  
  1582. UNSIZE,
  1583. COMMA,    0
  1584.     TAD CHAR
  1585.     SNA
  1586.     JMP I [CONFIG
  1587.     TAD (-",
  1588.     SNA CLA
  1589.     JMP I COMMA
  1590.     JMP I [SYNTAX
  1591. BOOTQ,    SZA CLA        /MAY BE OVERLAID
  1592.     JMP SAMEE
  1593.     DCA I (DRECT    /DON'T TOUCH DIRECTORY IF DIDN'T COPY SYS
  1594. SAMF,    JMS I [SYSWP
  1595.     JMP I (BOOT4
  1596. SAMEE,    JMS I (SYSCPY    /OR IF OLD DEV=NEW DEV
  1597.     JMP SAMF
  1598.     PAGE
  1599. LOCSYS,    0
  1600.     TAD (2331    /"SY"
  1601.     DCA NAME1
  1602.     TAD (2300    /"S "
  1603.     DCA NAME2
  1604.     DCA NAME3    /V3C
  1605.     DCA NAME4
  1606.     JMS I [ACTNAM    /LOOK UP 'SYS'
  1607.     JMP I LOCSYS
  1608.  
  1609. NOSLOT,    JMS I [PRWD
  1610.     TEXT    /?SLOTS/
  1611.     JMP I [CONFIG
  1612.  
  1613. GOOD,    0
  1614.     TAD [4207    /RESTORE 7600 TO NORMAL
  1615.     DCA I [7600
  1616.     TAD [5000
  1617.     DCA I [7601
  1618.     TAD (CDF CIF
  1619.     DCA I [SA    /SET SA=00200
  1620.     TAD [200
  1621.     DCA I (SA+1
  1622.     DCA I (JSW    /SET JOB STATUS WORD=0
  1623.     STA
  1624.     DCA I (DRECT
  1625.     CLL STA RTL    /-3
  1626.     TAD I [7612    /FUDGE FOR 12K TD8E
  1627.     DCA FLAG2    /SET FLAG2=0 IF PREV SYSTEM WAS 2 PAGE
  1628.     JMP I GOOD
  1629. PACK,    ISZ PROTECT    /OK TO PACK IT?
  1630.     JMP PACKOK    /YES
  1631.     STA
  1632.     DCA PROTECT    /INHIBIT OTHER PACKS ALSO
  1633.     JMP GNAME2
  1634. PACKOK,    ISZ SWIT    /PACK LEFT OR RIGHT
  1635.     JMP RIGHT
  1636.     TAD CHAR
  1637.     AND [77
  1638.     JMS I [ROTL    /ROTATE 6 LEFT
  1639.     DCA I TEMP    /STORE THE CHARACTER
  1640.     JMP GNAME2
  1641. RIGHT,    CLA CMA        /RESET FLIP FLOP
  1642.     DCA SWIT
  1643.     TAD CHAR
  1644.     AND [77
  1645.     TAD I TEMP
  1646.     DCA I TEMP
  1647.     ISZ TEMP    /POINT TO NEXT WORD
  1648.     JMP GNAME2
  1649. PROTECT,0        /-1 MEANS DON'T ACCEPT CHAR, IGNORE IT
  1650. SWIT,    0
  1651.  
  1652.  
  1653. ACTNAM,    0        /THEY MUST BE ACTIVE
  1654.     CLA IAC
  1655.     JMS I (PRMNAM
  1656.     JMP I ACTNAM
  1657. DOT,    CLA CMA
  1658.     DCA SWIT
  1659.     TAD (-3        /NOW ALLOW ONLY A 2-CHAR EXTENSION
  1660.     DCA PROTECT
  1661.     TAD (NAME4
  1662.     DCA TEMP
  1663.     ISZ DOTCNT    /HAD WE SEEN A DOT BEFORE?
  1664.     JMP SYNTAX    /YES
  1665.     JMP GNAME2    /NO
  1666.  
  1667. DOTCNT,    -1        /-1 MEANS HAVEN'T SEEN A DOT
  1668.  
  1669. EOL,    DCA CHAR
  1670.     JMP I GNAME
  1671.  
  1672. GNAME,    0        /COLLECT A WORD IN NAME1-NAME4
  1673.             /LEAVE DELIMITING CHAR IN 'CHAR'
  1674.     CDF 0
  1675.     TAD [-7        /MAX 6 CHARACTERS
  1676.     DCA PROTECT
  1677.     DCA NAME1    /FIRST CLEAR OUT COLLECTION AREA
  1678.     DCA NAME2
  1679.     DCA NAME3
  1680.     DCA NAME4
  1681.     CLA CMA
  1682.     DCA SWIT    /L-R PACKING SWITCH
  1683.     STA
  1684.     DCA DOTCNT    /ALLOW ONLY ONE DOT PER NAME
  1685.     TAD (NAME1
  1686.     DCA TEMP
  1687. GNAME2,    GETCHR
  1688.     SNA        /A 0 ENDS THE SEARCH
  1689.     JMP EOL
  1690.     DCA CHAR
  1691.     TAD CHAR
  1692.     TAD (-"A    /GET ONLY A-Z OR 0-9
  1693.     CLL
  1694.     TAD ("A-"Z-1
  1695.     SNL CLA        /IS IT A-Z?
  1696.     JMP PACK    /YES..PACK IT AWAY
  1697.     TAD CHAR
  1698.     TAD (-"0
  1699.     CLL
  1700.     TAD ("0-"9-1
  1701.     SNL CLA
  1702.     JMP PACK    /FOUND 0-9
  1703.     JMS I [TEST    /TEST FOR DELIMITING CHARS
  1704.     -".;DOT        /ADVANCE POINTERS
  1705.     0
  1706.     JMP I GNAME
  1707. SYNTAX,    JMS I [PRWD
  1708.     TEXT /?SYNTAX/
  1709.     JMP I [CONFIG
  1710.  
  1711. DSKBAD,    JMS I [PRWD
  1712.     TEXT    /?DSK/
  1713.     JMP I [CONFIG
  1714.     SRES=BEGLIN+60    /RESIDENCY TABLE
  1715.     SDCB=BEGLIN+100    /DCB
  1716.     SHND=BEGLIN+120    /SLOT ASSSIGNED?
  1717.     SNAME=BEGLIN+140/NAME
  1718.     SBUFF=BEGLIN+160/ADDRESS OF HANDLER
  1719.  
  1720.  
  1721. /    SYSTEM TABLES:
  1722.  
  1723. /THOSE IN USR:
  1724.  
  1725. /PDNT    PERMANENT DEVICE NAME TABLE    (SNAME)
  1726. /    POINTED TO BY LOCATION 10036 IN USR
  1727. /    CONTAIN HASH CODE OF DEVICE NAME
  1728. /    ADD TWO WORDS OF NAME TOGETHER AND TURN ON BIT 0
  1729. /    IF SECOND WORD WAS NON-ZERO
  1730. /    AN ENTRY OF 0 MEANS THERE IS NO DEVICE FOR THAT ENTRY
  1731.  
  1732. /DHIT    DEVICE HANDLER INFORMATION TABLE    (SHND)
  1733. /    POINTED TO BY LOCATION 10037 IN USR
  1734. /    BIT 0        =1 IF THIS IS A TWO-PAGE HANDLER
  1735. /    BITS 1-4    RELATIVE BLOCK LOCATION OF HANDLER ON SYSTEM DEVICE
  1736. /            (BLOCK SLOT).  ADD 15 TO GET ACTUAL BLOCK #.
  1737. /    BITS 5-11    RELATIVE ENTRY POINT OF HANDLER
  1738.  
  1739.  
  1740. /DHRT    DEVICE HANDLER RESIDENCY TABLE    (SRES)
  1741. /    IN LOCATIONS 17647-17665
  1742. /    ACTUAL ENTRY POINT OF HANDLER
  1743. /    WE ONLY CARE ABOUT IT IF THE HANDLER IS RESIDENT.
  1744. /    OTHERWISE IT'S ZERO.
  1745. /    THE SYSTEM HANDLER AND ALL HANDLERS CORESIDENT WITH
  1746. /    IT ARE ALWAYS RESIDENT IN CORE AND HAVE THIS ENTRY NON-0.
  1747.  
  1748.  
  1749. /DCWT    DEVICE CONTROL WORD TABLE    (SDCB)
  1750. /    RESIDES IN LOCATIONS 17760-17776
  1751. /    BIT 0        1 IF DEVICE IS FILE STRUCTURED
  1752. /    BIT 1        1 IF THE DEVICE IS READ ONLY
  1753. /    BIT 2        1 IF THE DEVICE IS WRITE-ONLY
  1754. /    BITS 3-8    PHYSICAL DEVICE TYPE
  1755. /    BITS 9-11    DIRECTORY BLOCK # (WE SET TO 0)
  1756. /PRE-ASSIGNED DEVICE TYPES
  1757.  
  1758. /0    TELETYPE
  1759. /1    HIGH SPEED PAPER TAPE READER
  1760. /2    HIGH SPEED PAPER TAPE PUNCH
  1761. /3    CARD READER
  1762. /4    LINE PRINTER (ANY TYPE)
  1763. /5    RK8 DISK
  1764. /6    RF08 (1 PLATTER)
  1765. /7    RF08 (2 PLATTERS)
  1766. /10    RF08 (3 PLATTERS)
  1767. /11    RF08 (4 PLATTERS)
  1768. /12    DF32 (1 PLATTER)
  1769. /13    DF32 (2 PLATTERS)
  1770. /14    DF32 (3 PLATTERS)
  1771. /15    DF32 (4 PLATTERS)
  1772. /16    TC08 DECTAPE
  1773. /17    LINCTAPE
  1774. /20    TM8E MAGTAPE
  1775. /21    TD8E DECTAPE (12K OR ROM)
  1776. /22    BAT:
  1777. /23    RK8E DISK
  1778. /27    TU60 CASSETTES
  1779. /30    VR12 (PDP-12 SCOPE)
  1780.     PAGE
  1781. BOOT2A,    TAD (15
  1782.     DCA SLOT    /START ASSIGNING AT BLOCK SLOT 16 (16-25)
  1783.     TAD (-17    /ALLOW 16 ACTIVE HANDLERS NOT COUNTING DSK
  1784.     DCA COUNT
  1785.     JMS I (CLRTBL    /CLEAR OUT IN-CORE TABLES
  1786.     TAD (SHND+1    /ASSIGN SLOTS, COUNT ACTIVE HANDLERS
  1787.     DCA XR1        /XR1 POINTS TO SLOT TABLE (DHIT)
  1788.     TAD (SDCB+1
  1789.     DCA XR2        /XR2 POINTS TO DCB TABLE
  1790.     TAD (SNAME+1
  1791.     DCA XR3        /XR3 POINTS TO PERMANENT DEVICE NAME TABLE
  1792.     TAD (SBUFF+1
  1793.     DCA XR4        /XR4 POINTS TO HANDLER BUFFER ADDRESSES
  1794.     TAD (SRES+1
  1795.     DCA XR5        /XR5 POINTS TO RESIDENCY TABLE
  1796.     CLA IAC        /??
  1797.     DCA OLDPAG    /SET 'OLDPAG' TO A RIDICULOUS VALUE
  1798.     INIT
  1799. SLTLUP,    ADVDSC        /GO TO NEXT DESCRIPTOR
  1800.     ADVBOT        /ADVANCING OVER ANY BOOTSTRAPS
  1801.     JMP BOOT2X    /ALL DONE CREATING INTERNAL COPIES OF TABLES
  1802.     GET
  1803.     ACTIVE
  1804.     SMA CLA        /IS IT ACTIVE?
  1805.     JMP INACT    /NO
  1806.     ISZ COUNT    /YES, UPDATE COUNT
  1807.     JMP ACTIV
  1808.     JMP I (TOOMANY    /TOO MANY ACTIVE HANDLERS
  1809.  
  1810. BOOT2X,/    TAD I (SNAME    /SEE IF SYS WAS SPECIFIED
  1811. /    DCA SAMSYS    /0 IF DIDN'T SPECIFY NEW SYS
  1812. /    TAD SAMSYS
  1813. /    SZA CLA
  1814. /    JMP CHKDSK
  1815. /    CDF 10
  1816. /    TAD I (7760    /DIDN'T SPECIFY SYS SO USE CURRENT SYS
  1817. /    CDF 0
  1818. /    DCA I (SDCB
  1819. /    TAD (7607
  1820. /    DCA I (SRES
  1821. /CHKDSK,    TAD DSKG1    /WAS DSK SPECIFIED?
  1822. /    SZA CLA
  1823. /    JMP I (BOOT3    /YES, ALREADY SET UP
  1824. /    TAD I (SDCB
  1825. /    DCA I (SDCB+1
  1826. /    TAD (7607
  1827. /    DCA I (SRES+1
  1828. /    DCA I (SBUFF+1
  1829.     JMP I (BOOT3
  1830. CHKRES,    0
  1831.     JMS I [GETPG    /GET PAGE OF RESIDENCE
  1832.     DCA NEWPAG
  1833.     TAD NEWPAG
  1834.     TAD OLDPAG
  1835.     SNA CLA        /SAME OR PREVIOUS PAGE?
  1836.     JMP I CHKRES    /YES, SAME PAGE
  1837.     ISZ CHKRES
  1838.     GET        /NO, A NEW PAGE, NEEDS NEW SLOT, ETC.
  1839.     CORES
  1840.     RTL        /GET CORES BIT
  1841.     SPA CLA        /IS THIS ALLOWED TO START A NEW GROUP?
  1842.     JMP I (TWOSYS    /NO, IT MAY ONLY BE CORESIDENT WITH SOMETHING EARLIER
  1843.     TAD NEWPAG    /YES
  1844.     CIA
  1845.     DCA OLDPAG    /GOT NEW 'OLDPAG'
  1846.     JMP I CHKRES
  1847. ACTIV,    JMS CHKRES
  1848.     JMP SAMPG
  1849.     GET
  1850.     SYSBIT
  1851.     RAL
  1852.     SPA CLA        /IS IT A 'SYS' HANDLER?
  1853.     JMP I (SETSY    /YES
  1854.     JMS I (GETSLOT    /NO
  1855.     JMS I (SETSLT    /SET BLOCK SLOT
  1856.     DCA I XR1
  1857.     TAD NEWPAG
  1858. HNDLOC,    DCA I XR4    /STORE AWAY ADDRESS OF HANDLER (OR 0 IF PREVIOUSLY USED)
  1859.     JMS I (GETDCB
  1860.     DCA I XR2    /SET DCB
  1861.     GET        /HASH CODE NAME
  1862.     PRMNM2
  1863.     DCA TEMP    /SAVE 2ND WORD
  1864.     GET
  1865.     PRMNM1
  1866.     TAD TEMP    /ADD 2 WORDS
  1867.     DCA TMP1    /SAVE SUM
  1868.     TAD TEMP
  1869.     SNA CLA        /WAS 2ND WORD 0?
  1870.     JMP NO4C    /YES
  1871.     TAD TMP1    /NO, FORCE BIT 0 ON
  1872.     RAL
  1873.     STL RAR
  1874.     DCA TMP1
  1875. NO4C,    TAD TMP1    /TAKE CODED NAME
  1876.     DCA I XR3    /SET PERMANENT NAME TABLE
  1877.     GET
  1878.     CORES
  1879.     RTL        /GET CORESIDENT BIT
  1880.     SMA CLA        /IS IT RESIDENT?
  1881.     JMP NORE    /NO
  1882.     GET        /YES
  1883.     ENTPT        /GET RELATIVE ENTRY POINT
  1884.     AND [177
  1885.     TAD [7600    /CORESIDENT ENTRY POINTS TO SYS MUST BE ON PAGE 7600
  1886. NORE,    DCA I XR5    /SET RESIDENCY TABLE
  1887. INACT,    GET        /BUT MAYBE IT'S 'DSK'
  1888.     DSKBIT
  1889.     RTL
  1890.     SNL CLA        /IS IT DSK?
  1891.     JMP SLTLUP    /NO, IT'S TO BE IGNORED
  1892.     JMS I (SLOTDSK    /YES ASSIGN 'DSK''S LOCATION SLOT
  1893.     GET        /GET RID OF DSK BIT
  1894.     DSKBIT
  1895.     RTL
  1896.     CLL RTR
  1897.     PUT
  1898.     DSKBIT
  1899.     JMP SLTLUP    /REITERATE
  1900. SAMPG,    TAD SLOT    /ALREADY HAVE SLOT
  1901.     JMS I (SETSLT
  1902.     DCA I XR1
  1903.     JMP HNDLOC
  1904.  
  1905. GOTEM,
  1906. CORE,    0
  1907.     TAD I [7777
  1908.     AND [70
  1909.     CLL RTR
  1910.     RAR
  1911.     SNA
  1912.     JMS I (RELCOR
  1913.     JMP I CORE
  1914.     PAGE
  1915. /    STEPS IN BOOTSTRAPPING:
  1916.  
  1917. /1.    ASSIGN DSK, IF SPECIFIED, MAKE SURE NFS        [BOOT2]
  1918. /2.    ASSIGN SLOTS                    [BOOT2A]
  1919. /3.    GIVE ERROR IF TOO MANY ACTIVE OR TOO MANY SLOTS    [BOOT2A]
  1920. /4.    BUILD INTERNAL COPIES OF DCB, SLOT, NAME, RES    [BOOT2A]
  1921. /5.    ALSO BUILD HANDLER ADDRESS TABLE, CONTAINS    [BOOT2A]
  1922. /    HANDLER ADDRESS IF NOT PREVIOUSLY WRITTEN OUT
  1923. /6.    COMPARE DCB'S OF NEW AND OLD SYSTEM, IF DIFF,    [BOOT3]
  1924. /    COPY SYSTEM OVER.  LEAVE NEW SYSTEM HANDLER
  1925. /    IN CORE
  1926. /7.    ASK GUY ABOUT NEW DIRECTORY            [BOOT4]
  1927. /8.    READ IN USR, UPDATE ITS TABLES, WRITE OUT USR    [BOOTC]
  1928. /    NAME TABLE, DHIT (SLOT, 2-PAGE,ENTPT)
  1929. /9.    READ IN CURRENT PAGE 7600 IMAGES        [BOOT5]
  1930. /    SET UP AS FOLLOWS:
  1931. /    PG7600/L:    BOOT
  1932. /    PG7600/H:    07600 IMAGE
  1933. /    BLOK66/L:    17600 IMAGE
  1934. /    BLOK66/U:    27600 IMAGE
  1935. /    THIS IS ACCOMPLISHED VIA:
  1936. /    PG7600_0
  1937. /    BLOK66_66
  1938. /    IF OLD SYS WAS 1 PAGE, BLOK66/L_PG7600/L
  1939. /10.    MOVE DCB AND RESIDENCY TABLES INTO 17600 IMAGE    [BOOT6]
  1940. /11.    MOVE BOOTSTRAP INTO PAGE 7600 IMAGES (2 PLACES)    [BOOT7]
  1941. /12.    WRITE OUT HANDLERS                [BOOT8]
  1942. /13.    ZERO DIRECTORY IF REQUESTED            [BOOTD]
  1943. /14.    PUT SYS, DATA BREAK, CORE LIM IN 07600 IMAGE    [BOOTE]
  1944. /15.    WRITE 7600 IMAGES BACK OUT ONTO TAPE        [BOOTF]
  1945. /    IF NEW SYS IS 1-PAGE, PG7600/L_BLOK66/L
  1946. /    0_PG7600
  1947. /    66_BLOK66
  1948. /16.    READ BACK PAGE 7600 IMAGES.  MOVE IN FIELD 1 STUFF
  1949. /    EXCEPT FOR CD AREA, RESTORE TODAY'S DATE,
  1950. /    BRANCH TO 7600
  1951. GETSLOT,0
  1952.     ISZ SLOT    /USE NEXT SLOT
  1953.     TAD SLOT
  1954.     TAD (-26
  1955.     SNA CLA
  1956.     JMP I (NOSLOT
  1957.     TAD SLOT
  1958.     JMP I GETSLOT
  1959.  
  1960. BOOT,    ISZ I (RETSW    /***?
  1961.     CLA IAC
  1962.     DCA I (BD    /DISABLE 'BUILD' CMD
  1963. /SEE IF ARGUMENT WAS GIVEN; TREAT IT AS BOOT DEVICE,
  1964. /SAVE HANDLER ADDRESS (MUST BE AN ACTIVE HANDLER)
  1965.     JMS I (LOCSYS    /IN CASE DSK=SYS
  1966. /    JMS I [GETNUM
  1967. /    NOP
  1968. /    TAD SIZE
  1969. /    DCA BOOTDV    /CHECK THAT # IS GT 7600
  1970. BOOT2,    TAD DSKG1    /FIND OUT ABOUT 'DSK'
  1971.     SNA
  1972.     JMP GOTD    /DSK=SYS
  1973.     DCA SAV1
  1974.     TAD DSKG2
  1975.     DCA SAV2
  1976.     TAD DSKP1
  1977.     DCA NAME1
  1978.     TAD DSKP2
  1979.     DCA NAME2
  1980.     JMS I [BIGNAM    /FIND IT IN TABLES
  1981. GOTD,    GET
  1982.     DCB
  1983.     SMA CLA        /IS IT FILE-STRUCTURED?
  1984.     JMP I (DSKBAD    /NO
  1985.     GET        /YES
  1986.     DSKBIT
  1987.     RTL
  1988.     STL RTR        /TURN ON BIT 1
  1989.     PUT
  1990.     DSKBIT
  1991.     JMP I (BOOT2A
  1992. GETDCB,    0
  1993.     GET
  1994.     PLATNUM
  1995.     JMS I [ROTL
  1996.     AND [7        /GET # OF PLATTERS
  1997.     SNA
  1998.     IAC        /0 MEANS 1
  1999.     TAD [-1        /SUBTRACT 1
  2000.     CLL RTL
  2001.     RAL        /TIMES 10
  2002.     DCA TMP1
  2003.     GET
  2004.     DCB
  2005.     AND [7770    /MASK OFF USEFUL INFO
  2006.     TAD TMP1
  2007.     JMP I GETDCB
  2008. SLOTDSK,0
  2009.     JMS I (CHKRES
  2010.     JMP SMPG
  2011.     TAD NEWPAG
  2012.     DCA I (SBUFF+1
  2013.     JMS GETSLOT
  2014.     JMS SETSLT
  2015. B,    DCA I (SHND+1
  2016.     JMS GETDCB
  2017.     DCA I (SDCB+1
  2018.     TAD (5723    /'DSK' HASHED
  2019.     DCA I (SNAME+1
  2020.     GET
  2021.     SYSBIT
  2022.     RTL        /SYSBIT TO L, CORES BIT TO AC0
  2023.     SNL SMA CLA    /IS IT EITHER SYS OR CORESIDENT WITH SYS?
  2024.     JMP NORE2    /NO, SO IT'S NOT CORE-RESIDENT
  2025.     GET        /YES, RESIDENT AT ALL TIMES IN 07600
  2026.     ENTPT
  2027.     AND [177
  2028.     TAD [7600
  2029. NORE2,    DCA I (SRES+1
  2030.     JMP I SLOTDSK
  2031.  
  2032. SETSY,    TAD NEWPAG
  2033.     DCA I (SBUFF
  2034. /    JMS SETSLT    /NO BLOCK SLOT
  2035.     DCA I (SHND
  2036.     JMS GETDCB
  2037.     DCA I (SDCB    /SET DCB
  2038.     TAD I (SNAME
  2039.     SZA CLA
  2040.     JMP I (TWOSYS
  2041.     TAD (4631    /HASH CODING FOR 'SYS'
  2042.     DCA I (SNAME
  2043. /CHECK THAT NAME IS 'SYS'
  2044.     TAD [7607
  2045.     DCA I (SRES
  2046. /CHECK REL ENTRY PT IS 7
  2047.     JMP I (INACT
  2048.  
  2049. SMPG,    TAD SLOT
  2050.     JMS SETSLT
  2051.     JMP B
  2052. SETSLT,    0
  2053.     SNA
  2054.     JMP .+3
  2055.     TAD [-15
  2056.     JMS I [ROTR
  2057.     DCA TMP1
  2058.     GET        /
  2059.     CORES        /
  2060.     RTL        /
  2061.     SPA SZL CLA    /
  2062.     JMP I SETSLT    /SYS &CORES HANDLERS GET 0 ENTRY (UNFORTUNATELY)
  2063.     GET
  2064.     ENTPT
  2065.     AND (4177
  2066.     TAD TMP1
  2067.     JMP I SETSLT
  2068.  
  2069.  
  2070.     PAGE
  2071.     USRBLK=13    /BLOCK OF USR ON SYSTEM DEVICE
  2072.     USRNPT=36    /POINTS TO USR PTR TO PERMANENT DEVICE NAME TABLE
  2073.     USRHPT=37    /POINTS TO USR PTR TO DEVICE HANDLER INFORMATION TABLE
  2074.  
  2075. BOOTC,    TAD [200    /READ FIRST BLOCK OF USR
  2076.     JMS I [SYS
  2077.     BUFFER        /INTO BUFFER
  2078.     USRBLK
  2079.     TAD I [BUFFER+USRNPT    /GET POINTER TO NAME TABLE
  2080.     TAD [BUFFER-400    /ADD IN OFFSET FOR RELOCATION
  2081.     DCA T1AD    /ASSUME BOTH TABLES OCCUR IN THE SECOND
  2082.     TAD I [BUFFER+USRHPT    /BLOCK OF THE USR
  2083.     TAD [BUFFER-400
  2084.     DCA T2AD    /GET POINTER TO DHIT
  2085.     TAD [400    /READ BLOCKS 2 AND 3 OF USR
  2086.     JMS I [SYS    /INTO BUFFER,BINARY
  2087.     BUFFER
  2088.     USRBLK+1
  2089.     TAD [-17
  2090.     JMS I [MOVE    /MOVE IN PERMANENT DEVICE NAME TABLE
  2091.     CDF 0
  2092.     SNAME
  2093.     CDF 0
  2094. T1AD,    HLT
  2095. /    TAD SAMSYS    /WAS SYS SPECIFIED?
  2096. /    SZA CLA
  2097. /    JMP CHKD2    /YES
  2098. /    TAD I T2AD    /NO, USE CURRENT SYS INFO
  2099. /    DCA I (SHND
  2100. /CHKD2,    TAD DSKG1
  2101. /    SZA CLA        /WAS DSK SPECIFIED?
  2102. /    JMP MVSHND    /YES
  2103. /    TAD I T2AD    /MAKE SAME AS SYS
  2104. /    DCA I (SHND+1
  2105. MVSHND,    TAD [-17    /NOW PUT IN SLOT WORDS (DHIT)
  2106.     JMS I [MOVE
  2107.     CDF 0
  2108.     SHND
  2109.     CDF 0
  2110. TMP2,
  2111. T2AD,    HLT
  2112.     TAD [4400    /RE-WRITE USR
  2113.     JMS I [SYS
  2114. L5400,    BUFFER
  2115.     USRBLK+1
  2116.     JMP I [BOOT5
  2117.     IFNZRO BUFFER-5400 <ERRRR,XX>
  2118. BOOTD,    TAD DRECT    /WANT NEW DIRECTORY?
  2119. SNACLA,    SNA CLA
  2120.     JMP BOOTE
  2121.     TAD L5400    /YEP. WRITE ONE
  2122.     JMS I [SYS
  2123.     DPROPR
  2124.     1
  2125. BOOTE,    TAD NEWCOR
  2126.     CLL RAL
  2127.     RTL
  2128.     TAD SAVHID    /V3D SET NEW H.O. DATE WORD
  2129.     DCA I [7777    /SET UP NEW CORE LIMIT
  2130.     TAD SYSLOC    /MOVE IN FRESH COPY OF SYS HANDLER
  2131.     TAD [7
  2132.     DCA SYSL2
  2133.     TAD [7607-7743-1
  2134.     JMS I [MOVE
  2135.     CDF 10
  2136. SYSL2,    HLT
  2137.     CDF 0
  2138.     7607
  2139.     TAD [-200    /PUT SYS HANDLER INTO REC 0 BUFF. ???
  2140.     JMS I [MOVE
  2141.     CDF 0
  2142.     7600
  2143.     CDF 0
  2144.     PG7600+200    /RESIDENT F0 CODE
  2145.     JMS I (WRITCC    /WRITE CCB AND DATA BREAK FILLERS
  2146.     TAD [200
  2147.     TAD SYSLOC    /MOVE IN COPY OF 27600 AGAIN
  2148.     DCA SYSL3
  2149.     TAD [-200
  2150.     JMS I [MOVE
  2151.     CDF 10
  2152. SYSL3,    HLT
  2153.     CDF 10
  2154.     BLOK66+200
  2155.     JMP I (BOOTF
  2156.  
  2157. DRECT,    -1        /1 MEANS WRITE A ZERO DIRECTORY
  2158.             /0 MEANS DON'T TOUCH DIRECTORY
  2159.             /-1 MEANS ASK GUY FOR OPTION
  2160. /SEE IF NEW SYSTEM HAS SAME DCB AS CURRENT SYSTEM
  2161. /THIS MAY WELL CAUSE EXTRA I/O WHEN GOING FROM RF08=K TO RF08=M
  2162.  
  2163. BOOT3,    CDF 10
  2164.     TAD I (DATEWD
  2165.     DCA SAVDAT    /SAVE TODAY'S DATE FOR FUTURE REFERENCE
  2166.     TAD I (DCBTBL    /GET DCB OF CURRENT SYSTEM
  2167.     CDF 0
  2168.     AND [7770
  2169.     DCA TMP2
  2170.     JMS I (PATCH    /V3D
  2171.     TAD SAVLOC    /DON'T COPY IF DID 'BUILD'
  2172.     SNA CLA        /WAS THE 'BU' COMMAND USED?
  2173.     TAD [-10    /NO, USE 'SZA CLA'
  2174.     TAD SNACLA    /YES, USE 'SNA CLA'
  2175.     DCA I (BOOTQ
  2176.     JMS SETUPSYS
  2177.     TAD SYSDCB
  2178.     CIA
  2179.     TAD TMP2
  2180.     JMP I (BOOTQ
  2181.  
  2182. /NOTE: THIS PROCEDURE DOESN'T COPY BOOTSTRAP IF NEW DEV=OLD DEV.
  2183. /    THEREFORE YOU CAN'T CHANGE BOOTSTRAPS
  2184. /    CHECK ON AFFECT FOR TD8E/ROM INTERACTION
  2185. SETUPSYS,0
  2186.     DCA SAVLOC
  2187.     TAD SAVLOC
  2188.     DCA I (SAVLC
  2189.     JMS I (LOCSYS
  2190.     JMS I [GETPG    /GET PAGE OF SYS HANDLER
  2191.     DCA SYSLOC    /PAGE OF START OF NEW SYSTEM HANDLER
  2192.     JMS I (GETDCB
  2193.     DCA SYSDCB
  2194.     JMS I (GETLEN
  2195.     GET
  2196.     TWOPAG
  2197.     DCA I (SYSSIZ
  2198.     TAD I (SYSSIZ
  2199.     SMA CLA        /IS IT 1- OR 2-PAGES?
  2200.     JMP ONEPG    /GUESS WHAT THIS MEANS [HINT LOOK AT LABEL]
  2201.     STA
  2202.     TAD I (AMTCOR
  2203.     SNA CLA
  2204.     JMP I (NOTNUF    /WE CAN'T RUN IN 8 K
  2205. ONEPG,    TAD [-400
  2206.     JMS I [MOVE
  2207.     CDF 10
  2208. SYSLOC,    HLT        /MOVE SYSTEM HANDLER
  2209.     CDF 10
  2210. SAVLOC,    0        /TO 10000-10377
  2211.     JMP I SETUPSYS
  2212.     PAGE
  2213. FIRST,    0        /SUBROUTINE FOR LDABS IN FIELD 2
  2214.     TAD KLUD
  2215.     DCA NEWLIM
  2216.     CIF CDF 20
  2217.     JMP I FIRST
  2218.  
  2219. /0:    LOADING OS/8
  2220. /-2:    LOADING HEADER OF HANDLER
  2221. /-1:    LOADING HANDLER
  2222.  
  2223. HND,    CDF 20        /DATA FIELD 2
  2224.     TAD I (ORIGIN
  2225.     DCA KLUD
  2226.     TAD TABLMT
  2227.     CIF CDF 20        /BACK TO FIELD 2
  2228.     JMP I (ORI
  2229.  
  2230. KLUD,    0
  2231. NEWLIM,    0        /NEW END OF DESCRIPTORS
  2232.  
  2233.  
  2234. OK,    STA        /NOW USE ORIGIN TO TELL US HOW BIG A
  2235.     CDF 20
  2236.     TAD I (ORIGIN    /HANDLER WAS LOADED
  2237.     CDF 00        /BACK TO OUR FIELD
  2238.     AND [7600
  2239.     TAD [200    /REMEMBER THAT ORIGIN IS ONE GREATER
  2240.     DCA HNDPTR    /THAN ACTUAL LAST LOCATION.
  2241.             /BETTER TO USE 2-PAGE BIT
  2242.     TAD NEWLIM
  2243.     DCA TABLMT    /SET NEW TABLE TOP
  2244.     DCA I TABLMT    /NEED 0 AT END
  2245.     JMS I [COMMA
  2246.     JMP I (LOAD
  2247.  
  2248.  
  2249.  
  2250. NMER,    CIF 10        /V3C
  2251.     JMS I [200    /DISMISS USR FROM CORE
  2252.     11
  2253.     JMP I (NAMERR
  2254.  
  2255. IOPEN,    0        /PREPARE TO READ INPUT
  2256.     CLA CMA
  2257.     DCA I (CHCNT
  2258.     TAD I (JMPX    /RESTORE SWITCH
  2259.     DCA I (JMPGET
  2260.     TAD I (FILPTR    /RESULTS OF LOOKUP
  2261.     DCA I (RECNO
  2262.     DCA I (REOF
  2263.     TAD (CDF 0
  2264.     CDF 20        /OFF TO FIELD 2
  2265.     DCA I (XFIELD    /SETUP LDABS FOR FIELD 0
  2266.     CDF 00        /BACK TO FIELD 0
  2267.     JMP I IOPEN
  2268.     PAGE
  2269.  
  2270. /BLOCK 0 OF DEVICE CONTAINS INITIAL IMAGE
  2271. /OF 17600 FOLLOWED BY 07600
  2272.  
  2273. /17600-17646    CD AREA    INITIALLY CONTAINS BOOTSTRAP
  2274. /17647-17665    RESIDENCY TABLE
  2275. /17666        DATE
  2276. /17667-17677    PART OF OS/8 KBM
  2277. /17700-17740    PART OF OS/8 USR
  2278. /17741-17757    USER DEVICE NAME TABLE/ODT
  2279. /17760-17776    CONTROL WORD TABLE (DCB)
  2280. /17777        UNUSED
  2281.  
  2282. /07600-07606    PART OF OS/8 CODE
  2283. /07607-07743    SYSTEM HANDLER
  2284. /07744-07745    STARTING ADDRESS
  2285. /07746        JOB STATUS WORD (JSW)
  2286. /07747        MUST BE 0 (SOFSET)
  2287. /07750-07755    DATA BREAK LOCATIONS RESERVED FOR HARDWARE
  2288. /07756-07775    KBM AND ODT
  2289. /07776        MUST BE 0 (SBLOCK)
  2290. /07777        SOFTWARE CORE SIZE, BATCH FLAGS
  2291.  
  2292. /IF SYSTEM HANDLER IS TWO PAGES LONG, THEN WE HAVE INSTEAD:
  2293.  
  2294. /BLOCK 66 (LOWER) CONTAINS 17600 IMAGE
  2295. /BLOCK 66 (UPPER) CONTAINS 27600 IMAGE (MUST END WITH 4 ZERO'S)
  2296. /BLOCK 0  (LOWER) CONTAINS BOOTSTRAP
  2297. /BLOCK 0  (UPPER) CONTAINS 07600 IMAGE
  2298.     *4000
  2299. DSCADV,    0        /ADVANCE TO NEXT DESCRIPTOR
  2300.             /RETURN 2 MEANS NO MORE
  2301.             /RETURN 1 MEANS NOW AT BOOTSTRAP BLOCK
  2302.             /RETURN 3 OTHERWISE
  2303.     TAD DSCPTR
  2304.     TAD [HDRSIZ
  2305.     DCA DSCPTR
  2306.     JMS I (SKPCRD    /SKIP A POSSIBLE GROUP COUNT
  2307.     TAD I DSCPTR
  2308.     CLL
  2309.     TAD [200
  2310.     SZL CLA
  2311.     JMP I DSCADV    /TAKE RETURN1 UPON REACHING BOOTSTRAP RECORD
  2312.     ISZ DSCADV
  2313.     TAD I DSCPTR
  2314.     SZA CLA
  2315.     ISZ DSCADV    /TAKE RETURN 2 IF ADVANCED TO END
  2316.     JMP I DSCADV
  2317.  
  2318. /RETURN 1 MEANS NO MORE DESCRIPTORS
  2319. BOTADV,    0
  2320.     TAD I DSCPTR
  2321.     CIA
  2322.     IAC        /COUNT IS ONE MORE
  2323.     TAD DSCPTR
  2324.     DCA DSCPTR    /POINT TO BEGIN OF NEXT DESCRIPTOR
  2325.     JMS I (SKPCRD
  2326.     TAD I DSCPTR
  2327.     CLL
  2328.     TAD [200
  2329.     SZL CLA
  2330.     JMP BOTADV+1    /WIERD CASE OF CONSECUTIVE BOOTSTRAPS
  2331.     TAD I DSCPTR
  2332.     SZA CLA
  2333.     ISZ BOTADV    /TAKE RETURN1 IF ADVANCED TO END
  2334.     JMP I BOTADV
  2335.  
  2336. /WIERD CASES CAN OCCUR IF GUY DELETES ALL ENTRY POINTS IN A GROUP SEPARATELY
  2337.  
  2338. /DESCRIPTOR ENTRIES:
  2339.  
  2340. /FIRST WORD:
  2341. /    0        MEANS END OF TABLE
  2342. /    -1 TO -20    MEANS GROUP COUNT (NOT NECESSARILY ACCURATE)
  2343. /    -21 TO -400 APPROX MEANS BOOTSTRAP RECORD COUNT
  2344. /    OTHER        MEANS DESCRIPTOR
  2345. SYSCPY,    0        /COPY OS/8 SYSTEM
  2346.     STA
  2347.     TAD I (AMTCOR
  2348.     SZA CLA
  2349.     TAD [10        /GT 8K
  2350.     DCA CORBIT
  2351.     TAD CORBIT
  2352.     SZA CLA
  2353.     JMP COP2
  2354.     JMS I [SYSWP    /SWAP IN NEW SYS HANDLER
  2355.     TAD (7410
  2356.     JMS I [SYS    /SAVE PART OF BUILD TO MAKE A BIG BUFFER
  2357.     400        /SAVE 400-
  2358.     27        /SAVE IN BLOCK 27
  2359.     JMS I [SYSWP    /GET BACK ORIGINAL HANDLER
  2360. COP2,    TAD [4210
  2361.     JMS COPY    /COPY BLOCK 0
  2362.     0
  2363.     TAD (5610
  2364.     JMS COPY    /COPY 7-15
  2365.     7
  2366.     TAD [4210
  2367.     JMS COPY    /COPY 26
  2368.     26
  2369.     TAD (7410
  2370.     JMS COPY    /COPY 51-66
  2371.     51
  2372.     TAD [4210
  2373.     JMS COPY    /COPY 67
  2374.     67
  2375.     TAD CORBIT
  2376.     SZA CLA
  2377.     JMP COP3
  2378.     JMS I [SYSWP    /GET BACK NEW HANDLER FOR A MOMENT
  2379.     TAD (3410    /RESTORE CORE WE SAVED
  2380.     JMS I [SYS
  2381.     400
  2382.     27
  2383.     JMS I [SYSWP    /RESTORE ORIGINAL SYS HANDLER
  2384. COP3,    JMP I SYSCPY
  2385. COPY,    0
  2386.     TAD CORBIT
  2387.     DCA TMP1
  2388.     TAD I COPY
  2389.     DCA COPREC    /ARG 1 CONTAINS FIRST BLOCK TO COPY
  2390.     TAD COPREC
  2391.     DCA CPREC2    /MAKE TWO COPIES
  2392.     STL RAR        /CONVERT 'WRITE' TO READ
  2393.     TAD TMP1
  2394.     JMS I [SYS    /READ FROM ORIGINAL DEVICE
  2395.     400
  2396. COPREC,    HLT
  2397.     JMS I [SYSWP
  2398.     TAD TMP1
  2399.     JMS I [SYS    /WRITE ON NEW DEVICE
  2400.     400
  2401. CPREC2,    HLT
  2402.     JMS I [SYSWP    /LEAVE WITH ORIGINAL SYSTEM HANDLER STILL IN SYSTEM
  2403.     JMP I COPY    /FALL THROUGH RECORD NUMBER
  2404. CORBIT,
  2405. GETLEN,    0
  2406.     GET        /GET LENGTH OF DEVICE
  2407.     PLATNUM
  2408.     JMS I [ROTL    /GET NUMBER OF PLATTERS
  2409.     AND [7
  2410.     SNA
  2411.     IAC        /0 MEANS 1
  2412.     CIA
  2413.     DCA COUNT
  2414.     GET
  2415.     DEVSIZ
  2416.     DCA TMP1
  2417. SIZLUP,    TAD TMP1
  2418.     SNA
  2419.     STA        /4096 BECOMES 4095
  2420.     ISZ COUNT
  2421.     JMP SIZLUP
  2422.     CIA
  2423.     TAD [70        /LEAVE ROOM FOR OS/8
  2424.     DCA DLENGTH
  2425.     JMP I GETLEN
  2426.  
  2427. DPROPR,    -1        /INITIAL EMPTY DIRECTORY
  2428.     MFREE
  2429.     0
  2430.     0
  2431.     -1
  2432.     0        /1 EMPTY FILE
  2433. DLENGT,    0
  2434.  
  2435.  
  2436. BADARG,    JMS I [PRWD
  2437.     TEXT    /?ARG/
  2438.     JMP I [CONFIG
  2439.     PAGE
  2440. /WANT TO COPY
  2441.  
  2442. /SYS    0
  2443. /KBM    7-12
  2444. /USR    13-15
  2445. /ENTER    26
  2446. /CD    51-53
  2447. /SAVE,DATE 54-55
  2448. /ERR    56
  2449. /CHAIN    57
  2450. /ODT    60-63
  2451. /CCL    64,65,67
  2452. /SYS    66
  2453.  
  2454. /EXTRA (DON'T WANT TO COPY):
  2455.  
  2456. /HANDLERS    16-25
  2457. /SCRATCH    27-50
  2458.  
  2459. /NEW ALGORITHM:
  2460.  
  2461. /SET FIELD 2 IF 12K OR MORE AND SKIP *'ED ITEMS
  2462.  
  2463. /1.    MOVE NEW SYS HANDLER TO 0,200
  2464. /2.*    SAVE 34 PAGES STARTING AT 10400 IN BLOCK 27 OF NEW DEVICE
  2465. /3.    COPY BLOCKS 7-15
  2466. /4.    COPY BLOCK 26
  2467. /5.    COPY BLOCKS 51-66
  2468. /6.    COPY BLOCK 67
  2469. /7.*    RESTORE 34 PAGES
  2470. /THE FOLLOWING ROUTINES AND VARIABLES MUST BE ABOVE THE LOCATIONS
  2471. /IN WHICH OS/8 AND CD LOAD INTO, BECAUSE THEY ARE CALLED BY LDABS.
  2472. /FURTHERMORE, NONE OF THESE ROUTINES MAY USE PAGE 0 LITERALS
  2473. /OR MAY USE ANY PAGE 0 TEMPORARIES, EXCEPT THAT SOME MAY USE
  2474. /PAGE ZERO TEMPORARIES IF THE STORE INTO THEM FIRST
  2475. /(EXCEPT THOSE COMMENTED OTHERWISE, WHICH MUST PRESERVE
  2476. /THE NEW PAGE 0 AT ALL COSTS, UNTIL IT IS WRITTEN OUT
  2477.  
  2478. /LDABS
  2479. /ICHAR
  2480. /BADINP
  2481. /OVER
  2482. /ASSEMB
  2483. /CTCTST
  2484. /PRWD
  2485. /CTRLC
  2486. /OVROUT
  2487. /ROTL
  2488. /PRINTE
  2489. /TTYOUT
  2490. /ROTR
  2491. /PWORD
  2492. /ECHOFL
  2493. /LINEUP
  2494. /CRLF
  2495. /PRNT
  2496. /RUBFLG
  2497. /MOVE
  2498. /SYSWP
  2499. /AMTCOR
  2500.     SYDCB=7760    /LOCATION OF SYS,DSK DCB WORDS
  2501.  
  2502. BOOT5,    JMS I (RECZRO
  2503. BOOT6,    TAD [-17
  2504.     JMS I [MOVE    /PUT RESIDENT FIELD 1 TABLES INTO
  2505.     CDF 0
  2506.     SDCB        /FIXED SPOTS
  2507.     CDF 10
  2508.     BLOK66+160
  2509.     TAD [-17
  2510.     JMS I [MOVE
  2511.     CDF 0
  2512.     SRES
  2513.     CDF 10
  2514.     BLOK66+47    /COULD SET USER DEVICE NAMES HERE IF DESIRED
  2515. BOOT7,    JMS I (LOCSYS
  2516. /    TAD SAMSYS
  2517. /    SZA CLA        /SAME SYSTEM?
  2518. /    JMP BOOT8    /YES
  2519. BLOOK,    ADVDSC        /SEARCH FOR BOOTSTRAP
  2520.     JMP FNDBOT    /FOUND BOOTSTRAP RECORD AMONGST DESCRIPTORS
  2521.     HLT        /IT WASN'T THERE!
  2522.     JMP BLOOK    /KEEP LOOKING
  2523.  
  2524. FNDBOT,    TAD DSCPTR
  2525.     IAC        /POINT TO BOOTSTRAP
  2526.     DCA FROMBO
  2527.     TAD I DSCPTR    /LENGTH OF BOOTSTRAP
  2528. /CHECK THAT'S IT'S LE 47 LOCS IF 1-PAGE SYSTEM
  2529.     JMS I [MOVE
  2530.     CDF 0
  2531. FROMBO,    HLT
  2532.     CDF 0
  2533.     PG7600
  2534.     TAD [-47    /MOVE FIRST 47 LOCS INTO CD AREA IN 17600 IMAGE
  2535.     JMS I [MOVE
  2536.     CDF 0
  2537.     PG7600
  2538.     CDF 10
  2539.     BLOK66
  2540. BOOT8,    TAD (-16
  2541.     DCA COUNT
  2542.     TAD (SBUFF
  2543.     DCA XR1
  2544.     TAD (SHND
  2545.     DCA XR2
  2546. DVLOOP,    TAD I XR1
  2547.     SNA
  2548.     JMP NOHN
  2549.     DCA DVBUF    /LOCATION OF HANDLER
  2550.     TAD I XR2
  2551.     JMS I [ROTL
  2552.     AND [17
  2553.     SNA
  2554.     JMP CN        /NO BLOCK SLOT
  2555.     TAD L15        /CONVERT TO ACTUAL BLOCK #
  2556.     DCA DVREC
  2557.     TAD [4210
  2558.     JMS I [SYS
  2559. DVBUF,    HLT
  2560. DVREC,    HLT
  2561. CN,    ISZ COUNT
  2562.     JMP DVLOOP
  2563.     JMP I (BOOTD
  2564. NOHN,    ISZ XR2
  2565.     JMP CN
  2566.  
  2567. SYSSIZ,    0        /MINUS MEANS 2-PAGE SYS HANDLER
  2568. CTRLC,    KCC        /CLEAR ^C FLAG
  2569.     TAD I (SWAPER    /DO WE HAVE TO SWITCH?
  2570.     SZA CLA
  2571.     JMS I (SYSWP    /YES. INSERT OLD HANDLER
  2572.     JMP END    /GO CHECK BATCH BEFORE RETURNING
  2573.  
  2574. KORE,    JMS I [GETNUM
  2575. L15,    15        /NOTHING MEANS 0
  2576.     TAD SIZE
  2577.     AND [7770
  2578.     SZA CLA
  2579.     JMP I [BADARG    /MUST BE BETWEEN 0 AND 7
  2580.     JMS I (RELCOR    /FIND REAL AMOUNT OF CORE
  2581.     CMA
  2582.     TAD SIZE
  2583.     SMA CLA
  2584.     JMP I (NOTNUF    /MUST BE .LE. REAL AMT OF CORE
  2585.     TAD CHAR
  2586.     SZA CLA
  2587.     JMP I [SYNTAX
  2588.     TAD SIZE
  2589.     DCA NEWCOR
  2590.     JMP I [CONFIG
  2591. /    IF NEW SYS IS 1-PAGE,   PG7600/L_BLOK66/L
  2592. /    0_PG7600
  2593. /    66_BLOK66
  2594.  
  2595. BOOTF,    TAD SYSSIZ
  2596.     SMA CLA        /IS NEW SYS TWO PAGES?
  2597.     TAD [-200    /NO
  2598.     JMS I [MOVE    /YES, NULL MOVE
  2599.     CDF 10
  2600.     BLOK66
  2601.     CDF 0
  2602.     PG7600
  2603.     TAD [4200
  2604.     JMS I [SYS
  2605.     PG7600
  2606.     0
  2607.     TAD [4210
  2608.     JMS I [SYS
  2609.     BLOK66
  2610.     66
  2611. BOOTG,    NOP
  2612. /    JMS I (RECZRO    /SIMULATE BOOTSTRAP
  2613.     TAD [-131    /MOVE UP FIELD 1 CODE
  2614.     JMS I [MOVE
  2615.     CDF 10
  2616.     BLOK66+47
  2617.     CDF 10
  2618.     7600+47
  2619.     TAD SAVDAT
  2620.     CDF 10
  2621.     DCA I (DATEWD
  2622.     CDF 0
  2623.     JMS I [PRWD
  2624.     TEXT /SYS BUILT/
  2625.  
  2626.  
  2627.  
  2628. /MUST DO SOME CLEAN UP IF BATCH IS RUNNING
  2629. /ALL OVERLAYED CODE MUST BE RESET IN CASE USER WANTS
  2630. /TO REUSE THIS COPY OF BUILD.
  2631.  
  2632. END,    JMS I BATT    /JUMP TO BATCH TEST ROUTINE FOR CLEAN UP
  2633.     JMP I [7600    /OTHERWISE GO HOME WITH NEW SYSTEM
  2634.             /THIS IS FROM BATCH
  2635.     PAGE
  2636.  
  2637.  
  2638. /MOVE MOVES CORE AROUND    (CALLABLE FROM ANY FIELD)
  2639.  
  2640. /    TAD (-# OF LOCS TO MOVE
  2641. /    JMS MOVE
  2642. /    CDF FROM FIELD
  2643. /    FROM BUFFER LOCATION START
  2644. /    CDF 'TO' FILED
  2645. /    TO BUFFER
  2646.  
  2647. /MUSTN'T DESTROY OS/8 LOCS, NO PAGE 0 TEMPS!
  2648.  
  2649. MOVE,    0
  2650.     DCA MVCT
  2651.     RDF
  2652.     TAD (CIF CDF
  2653.     DCA MOVRET
  2654.     TAD I MOVE    /GET CDF FROM-FLD
  2655.     DCA MVCDF2
  2656.     ISZ MOVE    /POINT TO FROM-BUF
  2657.     TAD I MOVE    /GET LOC TO MOVE
  2658.     DCA MVTM1
  2659.     ISZ MOVE    /POINT TO TO-CDF
  2660.     TAD I MOVE
  2661.     DCA MVDF    /GET CDF TO FIELD OF DESTINATION
  2662.     ISZ MOVE    /POINT TO TARGET AREA
  2663.     TAD I MOVE
  2664.     DCA MVTM2
  2665.     ISZ MOVE    /POINT TO RETURN
  2666.     TAD MVCT
  2667.     SNA CLA
  2668.     JMP MOVRET    /NOTHING TO MOVE
  2669. MVCDF2,    CDF 0        /GETS ALTERED TO PICK UP F1
  2670.     TAD I MVTM1
  2671. MVDF,    HLT
  2672.     DCA I MVTM2
  2673.     ISZ MVTM1    /BUMP POINTERS TO AREAS
  2674.     ISZ MVTM2
  2675. MV20,    20
  2676.     ISZ MVCT
  2677.     JMP MVCDF2
  2678. MOVRET,    HLT        /RETURN TO CALLING FIELD
  2679.     JMP I MOVE
  2680.  
  2681. CTCTST,    0
  2682.     TAD MV7600    /ALLOW FOR PARITY
  2683.     KRS
  2684.     TAD (-7603
  2685.     SNA CLA
  2686.     KSF
  2687.     JMP I CTCTST
  2688.     JMP I (CTRLC
  2689. MVCT,    0
  2690.  
  2691.  
  2692. ASSEMB,    0        /ASSEMBLE TWO 6 BIT WORDS
  2693.     CDF 20
  2694.     TAD I LWD1
  2695.     JMS I PROTL
  2696.     TAD I LWD2
  2697.     CDF 00
  2698.     JMP I ASSEMB
  2699.  
  2700. LWD1,    WD1
  2701. LWD2,    WD2
  2702. PROTL,    ROTL
  2703.  
  2704. BOOT4,    TAD I (DRECT
  2705.     SMA CLA
  2706.     JMP I (BOOTC    /HE'S SPECIFIED ABOUT DIRECTORY ZERO
  2707.     JMS I [PRWD    /YES, NO NEED TO COPY SYSTEM
  2708.     TEXT    /WRITE ZERO DIRECT?/
  2709.     TAD [-10    /DON'T WANT TO DESTROY PRECIOUS TABLES
  2710.     JMS I [GTEXT    /GET REPLY
  2711.     JMP BOOT4
  2712.     JMS I [GNAME
  2713.     TAD NAME1
  2714.     AND [7700
  2715.     TAD (-3100
  2716.     SNA CLA
  2717.     CLA IAC        /Y
  2718.     DCA I (DRECT    /NO; COULD HAVE SAVED LOCATION BUT I FEEL SAFER THIS WAY
  2719.     JMP I (BOOTC
  2720.  
  2721. MVTM1,
  2722. ROTL,    0
  2723.     CLL RTL
  2724.     RTL
  2725.     RTL
  2726.     JMP I ROTL
  2727.  
  2728. MVTM2,
  2729. ROTR,    0
  2730.     CLL RTR
  2731.     RTR
  2732.     RTR
  2733.     JMP I ROTR
  2734. TTYOUT,    0        /YOU GUESSED IT
  2735.     DCA TM
  2736.     TAD ECHOFL
  2737.     SZA CLA        /ARE WE ECHOING?
  2738.     JMP I TTYOUT    /NO
  2739.     TAD TM        /YES
  2740.     TLS
  2741.     TSF
  2742.     JMP .-1
  2743. MV7600,    7600        /CLA
  2744.     JMS I (CTCTST    /TEST FOR ^C.
  2745.     JMP I TTYOUT
  2746.  
  2747. TM,
  2748. SKPCRD,    0
  2749.     TAD I DSCPTR
  2750.     CLL
  2751.     TAD MV20        /A GROUP COUNT MUST BE IN THE RANGE -1 TO -20
  2752.     SNL CLA
  2753.     JMP I SKPCRD
  2754.     ISZ DSCPTR    /IT'S A DARN GROUP COUNT, GO PAST IT
  2755.     JMP SKPCRD+1    /WIERD CASE OF CONSECUTIVE GROUP COUNTS
  2756.  
  2757. ECHOFL,    0        /1 MEANS NOT ECHOING, SAW ^O
  2758. PATCH,    0
  2759.     TAD I [7777    /V3D
  2760.     AND L600
  2761.     DCA SAVHID    /SAVE HIGH ORDER DATE BITS
  2762.     JMP I PATCH
  2763.     PAGE
  2764. PRNAME,    0        /ROUTINE TO PRINT NAME1-NAME4
  2765.     TAD (NAME1
  2766.     DCA TEMP
  2767.     CLL STA RTL    /-3
  2768.     DCA COUNT
  2769. PRNM2,    TAD I TEMP
  2770.     JMS PRINTE    /TYPE OUT CHARS
  2771.     ISZ TEMP
  2772.     ISZ COUNT    /EXHAUSTED ALL?
  2773.     JMP PRNM2
  2774.     TAD I TEMP
  2775.     SNA CLA
  2776.     JMP I PRNAME    /NO . IF NO EXTENSION
  2777.     TAD (".        /PRINT '.'
  2778.     JMS I (TTYOUT
  2779.     TAD I TEMP
  2780.     JMS PRINTE
  2781.     JMP I PRNAME
  2782.  
  2783. PRINTE,    0
  2784.     DCA CHTMP2
  2785.     TAD CHTMP2    /EXTRACT LEFT HAND SIDE
  2786.     JMS I (ROTR
  2787.     JMS PWORD
  2788.     TAD CHTMP2
  2789.     JMS PWORD
  2790.     JMP I PRINTE
  2791. PWORD,    0
  2792.     AND (77
  2793.     SNA        /IF NULL, GET OUT
  2794.     JMP NULL
  2795.     DCA PRTM
  2796.     TAD (200
  2797.     KRS
  2798.     TAD (-217    /^O
  2799.     SNA CLA        /STOP ECHOING?
  2800.     KSF        /MAYBE
  2801.     SKP        /NO
  2802.     JMP CTO        /YES
  2803.     TAD PRTM
  2804.     TAD (240
  2805.     AND (77
  2806. PRSPAC,    TAD (240
  2807.     JMS I (TTYOUT
  2808.     JMP I PWORD
  2809. NULL,    TAD LINEUP
  2810.     SNA CLA        /PRINT SPACE?
  2811.     JMP I PRINTE    /NO
  2812.     JMP PRSPAC    /YES
  2813.  
  2814. PRWD,    0
  2815.     CLA
  2816. PRWD2,    TAD I PRWD
  2817.     JMS PRINTE
  2818.     TAD I PRWD
  2819.     ISZ PRWD
  2820.     AND (77
  2821.     SZA CLA
  2822.     JMP PRWD2
  2823.     JMP I PRWD    /LEAVE IF LAST WORD ENDED WITH 00
  2824.  
  2825. CHTMP2,    0
  2826.  
  2827. CTO,    KCC
  2828.     TAD ("^
  2829.     JMS I (TTYOUT
  2830.     TAD ("O
  2831.     JMS I (TTYOUT
  2832.     JMS CRLF
  2833.     CLA IAC
  2834.     DCA I (ECHOFL
  2835.     JMP I PWORD
  2836.  
  2837. LINEUP,    0        /NON-ZERO MEANS PRINT NULLS AS SPACES
  2838. OVER,    JMS I (ASSEMB    /EXTENSION OF LDABS.
  2839.     CIA
  2840.     CDF 20        /OFF TO FIELD 2
  2841.     TAD I LCKSUM    /CHECKSUM OK?
  2842.     CDF 00        /BACK TO OUR FIELD
  2843.     SZA CLA
  2844.     JMP BADINP    /SOORY ABOUT THAT
  2845.     CLA IAC
  2846.     JMP OVROUT    /SKIP ERROR EXIT
  2847. BADINP,    JMS PRWD
  2848.     TEXT /?BAD INPUT/
  2849.     JMS CRLF
  2850. OVROUT,    CDF 20
  2851.     TAD I (LDABS
  2852.     CDF 00
  2853.     DCA OTEMP
  2854.     JMP I OTEMP
  2855. OTEMP,    0
  2856.  
  2857.  
  2858. LCKSUM,    CKSUM
  2859. PRTM,    0
  2860. CRLF,    0
  2861.     TAD (215
  2862.     DCA NAME1
  2863.     JMS PRNT
  2864.     TAD (212
  2865.     JMS I (TTYOUT
  2866.     JMP I CRLF
  2867.  
  2868. PRNT,    0        /CHARACTER PRINT ROUTINE
  2869.     TAD ("\        /IF NOT RUBOUT, AND IF RUBOUT WAS
  2870.     ISZ RUBFLG    /LAST, ECHO \.
  2871.     SKP CLA
  2872.     JMS I (TTYOUT
  2873.     TAD NAME1
  2874.     JMS I (TTYOUT
  2875.     JMP I PRNT
  2876. RUBFLG,    0        /RUBOUT FLAG
  2877.     PAGE
  2878. /ASSUMES NEW PROPOSED SYSTEM HANDLER IS IN 10000-10377
  2879.  
  2880. /CAN'T DESTROY OS/8, IE. CAN'T USE PG 0 TEMPS
  2881.  
  2882. SYSWP,    0        /ROUTINE TO MOVE SYS HANDLER AROUND
  2883.     ISZ SWAPER    /DIDDLE SWAP INDICATOR
  2884.     CLA CMA        /-1 MEANS NEW HANDLER IS IN
  2885.     DCA SWAPER
  2886.     STA
  2887.     TAD AMTCOR
  2888.     SNA CLA        /DO WE HAVE 8K?
  2889.     JMP SWAPLW    /YES, DON'T SWAP WITH FIELD 2
  2890.     TAD L7600    /NO, CAN'T HURT TO SWAP FIELD 2
  2891.     DCA OUT
  2892.     TAD SAVLC
  2893.     TAD P200
  2894.     DCA IN
  2895.     TAD (4-200
  2896.     DCA STEMP    /SWAP ENTIRE PAGE (EXCEPT LAST 4 LOCATIONS)
  2897. SWAP3,    CDF 10        /SWAP 27600 & 2ND PAGE OF HANDLER
  2898.     TAD I IN
  2899.     DCA SYSQ
  2900.     CDF 20
  2901.     TAD I OUT
  2902.     CDF 10
  2903.     DCA I IN
  2904.     TAD SYSQ
  2905.     CDF 20
  2906.     DCA I OUT
  2907.     ISZ IN
  2908. L7400,    7400        /NOP
  2909.     ISZ OUT
  2910. L7600,    7600
  2911.     ISZ STEMP
  2912.     JMP SWAP3
  2913. SWAPLW,    CDF 0
  2914.     TAD (7607
  2915.     DCA OUT        /7607 ALWAYS TARGET DESTINATION
  2916.     TAD SAVLC
  2917.     TAD (7
  2918.     DCA IN
  2919.     TAD (7607-7743-1/ONLY 7607-7743 GETS MOVED
  2920.     DCA STEMP
  2921. SWAP2,    CDF 10
  2922.     TAD I IN
  2923.     DCA SYSQ    /TEMP STORE
  2924.     CDF 0
  2925.     TAD I OUT
  2926.     CDF 10
  2927.     DCA I IN
  2928.     TAD SYSQ
  2929.     CDF 0
  2930.     DCA I OUT
  2931.     ISZ IN
  2932.     ISZ OUT
  2933.     ISZ STEMP
  2934.     JMP SWAP2
  2935.     DCA I (SOFSET    /V3C
  2936.     JMP I SYSWP
  2937.  
  2938. AMTCOR,    1        /HIGHEST CORE BANK
  2939. SAVLC,    0        /MUST BE ABOVE 3577
  2940. CHTMP,
  2941. IN,    0        /POINTS TO HANDLER AREA AT ONE NAMED SYS
  2942. OUT,    0        /POINTS TO 7607 HANDLER
  2943. SWAPER,    0        /-1 MEANS NEW HANDLER IN
  2944.  
  2945. /MUST BE ABOVE OS/8,  NO PAGE 0 LITERALS
  2946.  
  2947. STEMP,
  2948. ICHAR,    0
  2949.     JMS I (CTCTST
  2950.     ISZ JMPGET    /POINT TO CORRECT CHAR
  2951.     ISZ CHCNT    /NEED WE READ?
  2952. JMPX,    JMP JMPGET    /NOT YET
  2953.     TAD REOF    /YES. DID LAST YIELD EOF?
  2954.     SZA CLA
  2955.     JMP I (BADINP    /SOMETHING IS WRONG.
  2956. RDIN,    JMS I DVICE
  2957. P200,    0200        /READ INTO FIELD 0
  2958. BINBUF,    BINARY
  2959. RECNO,    0
  2960.     JMP RERROR    /READ ERROR
  2961. RECNO2,    ISZ RECNO    /POINT TO NEXT RECORD
  2962.     TAD (-601
  2963.     DCA CHCNT    /NEW CHARACTER COUNT
  2964.     TAD BINBUF
  2965.     DCA CHPTR
  2966.     TAD JMPX
  2967.     DCA JMPGET    /RESET JUMP SWITCH
  2968.     JMP ICHAR+1
  2969. SYSQ,
  2970. JMPGET,    JMP .        /IF WE GET CAUGHT HERE, WE KNOW IT
  2971.     JMP CHAR1    /ASSEMBLE FIRST CHAR
  2972.     JMP CHAR2    /SECOND CHAR
  2973.     TAD JMPX    /THIRD CHAR HERE
  2974.     DCA JMPGET    /RESET SWITCH
  2975.     TAD I CHPTR
  2976.     AND L7400
  2977.     CLL RTR
  2978.     RTR
  2979.     TAD CHTMP    /ADD IN THE LAST TEMP STORE
  2980.     RTR
  2981.     RTR
  2982.     ISZ CHPTR    /TO NEXT CHAR
  2983.     JMP GCHCOM
  2984. CHAR2,    TAD I CHPTR
  2985.     AND L7400
  2986.     DCA CHTMP    /SAVE FOR THIRD CHAR
  2987.     ISZ CHPTR
  2988. CHAR1,    TAD I CHPTR
  2989. GCHCOM,    AND (377
  2990.     ISZ ICHAR    /PASS UP ERROR RET
  2991.     JMP TO20        /RETURN
  2992. RERROR,    SPA CLA        /FATAL, OR EOF?
  2993.     JMP IOERR    /FATAL
  2994.     ISZ REOF    /END OF FILE
  2995.     JMP RECNO2    /BACK TO MAINSTREAM
  2996. IOERR,    JMS I (PRWD
  2997.     TEXT    \?I/O\
  2998. TO20,    CIF CDF 20        /BACK TO FIELD 2
  2999.     JMP I ICHAR
  3000.  
  3001.  
  3002. REOF,    0
  3003. CHCNT,    0
  3004. CHPTR,    0
  3005. DVICE,    0
  3006. RETSW,    0        /0 MEANS RAN FROM 0S/8, 1 MEANS RNA STANDALONE
  3007.     PAGE
  3008.     LNLNGT=103
  3009. BEGLIN,    ZBLOCK LNLNGT
  3010.  
  3011.     SBLOCK=7776    /??
  3012. /CTCFAK,    .+1        /^C MUST NOT RETURN TO ANY SYSTEM.
  3013. /    JMP I CTCFAK    /CTCFAK MARKS OUR PLACE DURING
  3014. /            /SYSGEN, AND ^C WILL RETURN TO THAT PLACE.
  3015. /*** THIS STUFF GOES AWAY ON A BOOT
  3016.  
  3017. BUILD,    CDF 10
  3018.     TAD I [7200    /HAS SPECIAL CODE BEEN OVERLAID BY HANDLERS?
  3019.     CDF 0
  3020.     TAD [-1234
  3021.     SZA CLA
  3022.     JMP I (NOROOM    /YES, TOO BAD
  3023. /    TAD (5601
  3024. /    DCA I [7600
  3025. /    TAD (CTCFAK+1
  3026. /    DCA I (7601
  3027.     TAD [6600    /SAVE OLD SYSTEM HANDLER IN 16600
  3028.     JMS I (SETUPSYS
  3029. /    JMS CTCFAK
  3030. RDOS8,    JMS I [PRWD
  3031.     TEXT    \LOAD OS/8: \
  3032.     JMS RD
  3033.     JMP RDOS8
  3034.     CIF CDF 10
  3035.     JMS I (WROS8
  3036.     JMS I (SYSWP
  3037. /    JMS CTCFAK
  3038. RDCD,    JMS I [CRLF
  3039.     JMS I [PRWD
  3040.     TEXT    /LOAD CD: /
  3041.     DCA DVER
  3042.     JMS RD
  3043.     JMP RDCD
  3044.     CIF CDF 10
  3045.     JMS I (WRCD
  3046.     TAD I (RETSW
  3047.     SNA CLA        /NOT IF FROM SCRATCH
  3048.     JMS I (SYSWP    /GET OLD HANDLER IF ANY BACK IN
  3049.     JMP I [CONFIG
  3050. RD,    0
  3051.     TAD [-40
  3052.     JMS I [GTEXT
  3053.     JMP I RD
  3054.     JMS I (SETUP
  3055. DVER,    JMP I (NODEV
  3056.     JMS I (SYSWP    /PUT IN NEW HANDLER
  3057.     CIF CDF 10
  3058.     JMS I (SAVE
  3059.     JMS I (SYSWP
  3060.     CIF CDF 20    /OFF TO PAGE 2
  3061.     JMS I [LDABS    /PAST HERE PAGE 0 IS GONE
  3062.     JMP I RD
  3063.     JMS I (SYSWP
  3064.     ISZ RD
  3065.     JMP I RD
  3066.     PAGE
  3067.     *6400
  3068.  
  3069. DSCTAB,    ZBLOCK 1200
  3070. /RELIC:
  3071.  
  3072.     *7600
  3073.     0        /ONLY LOADED FROM PAPER TAPE.
  3074.  
  3075.     *7777
  3076.     0        /SET SOFTWARE CORE SIZE TO 'UNKNOWN'
  3077.     FIELD 1
  3078.     *0
  3079.     0        /FORCE ABSLDR TO LOAD THIS PAGE
  3080.     *400
  3081. /    ZBLOCK 5400
  3082.     0
  3083.     *6600
  3084.  
  3085.     RELOC BINARY
  3086.  
  3087. BINPUN,    CDF 10
  3088.     CLA
  3089.     TAD (-400
  3090.     CIF 0
  3091.     JMS I (MOVE
  3092.     CDF 10
  3093.     6600
  3094.     CDF 0
  3095.     BINARY        /MOVE ONESELF DOWN
  3096.     CIF CDF 0
  3097.     JMP I (LDR    /EXECUTE IN FIELD 0
  3098. LDR,    JMS LEDER    /PUNCH 72 FRAMES OF 200
  3099.     DCA CHECK    /0 CHECKSUM
  3100.     TAD (102
  3101.     JMS CKSUMM
  3102.     JMS PNCH
  3103. STARTB,    JMS I (CRLF
  3104.     TAD ("*
  3105.     JMS I (TTYOUT
  3106.     TAD (-100
  3107.     JMS I (GTEXT
  3108.     JMP STARTB
  3109.     JMS I (GETNUM
  3110.     JMP I (OVERB
  3111.     TAD SIZE
  3112.     AND (7770
  3113.     SZA CLA
  3114.     JMP STARTB
  3115.     TAD SIZE
  3116.     CLL RTL
  3117.     RAL
  3118.     DCA FLD
  3119.     JMS I (GETNUM    /GET LOWER LIMIT
  3120.     JMP STARTB
  3121.     TAD SIZE
  3122.     DCA LIM1
  3123.     JMS I (GETNUM    /GET UPPER LIMIT
  3124.     JMP STARTB
  3125.     TAD SIZE
  3126.     DCA LIM2
  3127.     TAD LIM2
  3128.     CMA
  3129.     TAD LIM1
  3130.     DCA COUNT2
  3131.     TAD FLD
  3132.     TAD (300
  3133.     JMS PNCH
  3134.     TAD FLD
  3135.     TAD (CDF 0
  3136.     DCA BUFLD
  3137.     TAD LIM1
  3138.     JMS I (ROTR
  3139.     AND (77
  3140.     TAD (100
  3141.     JMS CKSUMM
  3142.     TAD LIM1
  3143.     AND (77
  3144.     JMS CKSUMM
  3145. BUFLD,    HLT
  3146.     TAD I LIM1
  3147.     JMS I (ROTR
  3148.     AND (77
  3149.     JMS CKSUMM
  3150.     TAD I LIM1
  3151.     AND (77
  3152.     JMS CKSUMM
  3153.     ISZ LIM1
  3154.     ISZ COUNT2
  3155.     JMP BUFLD
  3156.     CIF CDF 0
  3157.     JMP STARTB
  3158. LEDER,    0        /PUNCH LEADER/TRAILER
  3159.     TAD (-200
  3160.     DCA COUNT2
  3161.     TAD (200
  3162.     JMS PNCH
  3163.     ISZ COUNT2
  3164.     JMP .-3
  3165.     JMP I LEDER
  3166.  
  3167. PNCH,    0
  3168.     PLS
  3169.     PSF
  3170.     JMP .-1
  3171.     CLA
  3172.     JMP I PNCH
  3173.  
  3174. FLD,    0
  3175. LIM1,    0
  3176. LIM2,    0
  3177. COUNT2,    0
  3178. CHECK,    0
  3179.  
  3180. CKSUMM,    0
  3181.     DCA CK1
  3182.     TAD CK1
  3183.     TAD CHECK
  3184.     DCA CHECK
  3185.     TAD CK1
  3186.     JMS PNCH
  3187.     JMP I CKSUMM
  3188.  
  3189. CK1,    0
  3190.     PAGE
  3191. OVERB,    TAD Q300
  3192.     JMS I QPNCH    /FIELD 0
  3193.     TAD Q176
  3194.     JMS I QCKSUM
  3195.     JMS I QCKSUM    /*7600
  3196.     TAD Q74
  3197.     JMS I QCKSUM
  3198.     STL CLA RTL
  3199.     JMS I QCKSUM    /HALT
  3200.     TAD Q177
  3201.     TAD Q77
  3202.     JMS I QCKSUM    /*7777
  3203.     JMS I QCKSUM
  3204.     JMS I QCKSUM    /*0000
  3205.     TAD Q102
  3206.     JMS I QCKSUM
  3207.     JMS I QCKSUM
  3208.     TAD I QCHECK
  3209.     JMS I QROTR
  3210.     AND Q77
  3211.     JMS I QPNCH
  3212.     TAD I QCHECK
  3213.     AND Q77
  3214.     JMS I QPNCH
  3215.     JMS I QLEDER
  3216.     HLT
  3217.     JMP .-1    /ALL DONE
  3218. Q300,    300
  3219. QPNCH,    PNCH
  3220. Q176,    176
  3221. QCKSUM,    CKSUMM
  3222. Q74,    74
  3223. Q177,    177
  3224. Q77,    77
  3225. Q102,    102
  3226. QCHECK,    CHECK
  3227. QROTR,    ROTR
  3228. QLEDER,    LEDER
  3229.     PAGE
  3230.  
  3231.     RELOC
  3232.     DIRLOC=1400    /FROM OS/8 ASSEMBLY
  3233.  
  3234.     READ=JMS I (7607
  3235.     WRITE=READ
  3236.     MFREE=70
  3237.     ERR=JMS I (WRERR
  3238.  
  3239.     *7200
  3240.  
  3241.  
  3242.     1234        /MAGIC NUMBER WHICH IF NOT HERE, MEANS HANDLERS OVERLAID
  3243.  
  3244. WROS8,    0
  3245.     CIF 0
  3246.     TAD Z7600
  3247.     JMS I (MOVE    /SAVE CURRENT 7600
  3248.     CDF 0
  3249.     7600
  3250.     CDF 0
  3251.     7000        /IN 07000
  3252.     TAD (-7        /MOVE 6600 TO 7600
  3253.     CIF 0
  3254.     JMS I (MOVE
  3255.     CDF 0
  3256.     6600
  3257.     CDF 0
  3258.     7600
  3259.     TAD (-34    /FINISH MOVING FIELD 0
  3260.     CIF 0
  3261.     JMS I (MOVE
  3262.     CDF 0
  3263.     6744
  3264.     CDF 0
  3265.     7744
  3266.     CDF 0
  3267.     TAD (6        /V3D DEV EXT LENGTH OF ABSLDR
  3268.     TAD I (DLENGTH    /FILL IN INITIAL LENGTH
  3269.     CDF 10
  3270.     DCA I (DIRLOC+14    /OS8 HAS INITIAL DIRECTORY
  3271.     CIF 0;WRITE;4200;7400;0;ERR    /INITIAL REC.0
  3272.     CIF 0;WRITE;4200;7400;66;ERR    /ALSO WRITE RECORD 66
  3273.     CIF 0;WRITE;4210;DIRLOC;1;ERR    /INITIAL DIRECTORY
  3274.     CIF 0;WRITE;5000;0;7;ERR    /KBM
  3275.     CIF 0;WRITE;4610;0;13;ERR    /USR
  3276.     CIF CDF 20    /OFF IN FIELD 2
  3277.     JMP I (BAK
  3278. WHER,    CDF 0    /RETURN FROM RELOCATED ROUTINES.
  3279.     TAD I (RETSW
  3280.     CDF 10
  3281.     SNA CLA        /SCRATCH BUILD?
  3282.     JMP I (RES76    /NO
  3283.     TAD Z7600    /YES    /MOVE 17600 UP THERE
  3284.     CIF 0
  3285.     JMS I (MOVE
  3286.     CDF 0
  3287.     7400
  3288.     CDF 10
  3289. Z7600,    7600
  3290.     JMS I (RESTORE
  3291.     CIF CDF 0
  3292.     JMP I WROS8
  3293.  
  3294. /RELATIONSHIP BEWTWEEN OS/8 CORE IMAGE AND BLOCKS ON SYSTEM DEVICE:
  3295.  
  3296. /ITEM        CORE LOC    BLOCKS
  3297.  
  3298. /KBM        0000-1777    7-12
  3299. /OVERLAYS    2000-3577    54-57
  3300. /INIT DIR    DIRLOC-        1
  3301. /ABSLDR CCB    LDRCTL-        70
  3302. /INIT BLOCK 0    7400-7777    0
  3303. /USR        10000-11377    13-15
  3304. /ABSLDR            12000-14377    71-75
  3305. /ENTER        13400-13577    26
  3306. /EXT MEM SAVE & ODT                64
  3307. /SYS    06600-06606    PART OF 07600
  3308. /SYS    06744-06777    "
  3309. WRCD,    0
  3310.     CIF 0;WRITE;4600;0;51;ERR    /CD
  3311.     CIF 0;WRITE;5011;0;60;ERR    /ODT
  3312.  
  3313. /THE NEXT ROUTINE IS TO FINISH LOADING BLOCK 64 OF THE
  3314. /SYSTEM DEVICE THAT HAD BEEN RESERVED.  THE FIRST PART
  3315. /WAS WRITTEN WITH OS8 AND NOW THE OTHER PART MUST BE
  3316. /WRITTEN ON THAT SAME BLOCK FROM CD.
  3317.  
  3318.     CIF 0;READ;210;0;64;ERR        /GET PART OF ODT WRITTEN
  3319.     /MOVE LOCATIONS 11600-11663 TO 10000-10063
  3320.     CIF 0
  3321.     TAD (-64
  3322.     JMS I (MOVE
  3323.     CDF 10
  3324.     1600
  3325.     CDF 10
  3326.     0000
  3327.     CIF 0;WRITE;4210;0;64;ERR
  3328.  
  3329. /END OF ROUTINE TO LOAD BLOCK 64
  3330.  
  3331.     JMS I (RESTORE
  3332.     JMS I (CASIT
  3333.     CIF CDF 0
  3334.     JMP I WRCD
  3335.     PAGE
  3336.     READ=JMS I (7607
  3337.     ERR=JMS WRERR
  3338.  
  3339. /SPECIAL CODE TO CHAIN TO ABSLDR, TO READ IN MCPIP
  3340.  
  3341.     JMS I (7700
  3342.     10        /LOCK USR IN CORE
  3343.     TAD R7600    /ZERO CD AREA
  3344.     DCA CDPTR
  3345.     TAD (-47
  3346.     DCA CDKNT
  3347.     DCA I CDPTR
  3348.     ISZ CDPTR
  3349.     ISZ CDKNT
  3350.     JMP .-3
  3351.     STL CLA RAR    /ALTMODE
  3352.     DCA I (7642
  3353.     JMS I (200
  3354.     12        /INQUIRE
  3355.     4503    /ENCODE CSA0
  3356. CDN,    0
  3357.     0
  3358.     HLT
  3359.     TAD CDN        /TAKE DEVICE NUMBER
  3360.     DCA I (7617    /STORE DEVICE NUMBER OF CASSETTE
  3361.     ISZ I (7620    /V3C FORCE BLOCK 1
  3362.     CLA IAC
  3363.     CDF 0        /V3D
  3364.     DCA I (7746    /SET JSW SO CHAIN DOESN'T DO USROUT
  3365.     CDF 10
  3366.     JMS I (200    /CHAIN TO ABSLDR
  3367.     6
  3368.     70
  3369. RESTORE,0
  3370.     CIF 0;READ;3701;0;BLDSAV;ERR
  3371.     CIF 0;READ;3510;0;BLDSAV+20;ERR    /RESTORE BUILD
  3372.     JMP I RESTORE
  3373.     WRITE=JMS I (7607
  3374.     ERR=JMS WRERR
  3375.  
  3376. SAVE,    0
  3377.     CDF 0
  3378.     DCA I (SOFSET
  3379.     DCA I (SBLOCK
  3380.     DCA I (DRECT    /HAVE TO KEEP DIRECTORY LATER
  3381.     CDF 10
  3382.     CIF 0;WRITE;7701;0;BLDSAV;ERR
  3383.     CIF 0;WRITE;7510;0;BLDSAV+20;ERR
  3384.     JMS CASIT
  3385.     CIF CDF 0
  3386.     JMP I SAVE
  3387.  
  3388. RES76,    TAD I (Z7600
  3389.     CIF 0
  3390.     JMS I (MOVE
  3391.     CDF 0
  3392.     7000        /RESTORE OLD PAGE 7600
  3393.     CDF 0
  3394.     7600
  3395.     JMP I (Z7600
  3396. WRERR,    0        /WRITE ERROR
  3397.     HLT CLA        /HIT CONTINUE TO RETRY
  3398.     TAD WRERR
  3399.     TAD (-6
  3400.     DCA WRERR    /POINT BACK TO CIF OF CALL
  3401.     JMP I WRERR    /RETRY
  3402.  
  3403. /RELATIONSHIP BETWEEN CD CORE IMAGE AND BLOCKS ON SYSTEM DEVICE:
  3404.  
  3405. /ITEM        CORE LOC    BLOCKS
  3406. /CD        00000-01377    51-63
  3407. /ODT        10000-11777    60-63
  3408.  
  3409. CSA,    0        /CASSETTE HANDLER ENTRY PT
  3410. CDPTR,    0
  3411.  
  3412. CDKNT,
  3413. CASIT,    0
  3414.     CDF 0
  3415.     TAD I (RECNO
  3416.     SNA
  3417.     CLA IAC        /IF BLOCK 0, CHANGE TO 1
  3418.     DCA I (RECNO
  3419.     TAD I PRETSW
  3420.     SNA CLA        /BUILDING FROM SCRATCH?
  3421.     JMP I CASIT    /NO
  3422.     TAD I (BLDCB    /YES, GET DCB OF LOAD HANDLER
  3423.     AND L770
  3424.     TAD M270    /CASSETTE DEVICE CODE=27
  3425.     SZA CLA
  3426.     JMP I CASIT    /NOT A CASSETTE
  3427.     TAD I (DVICE
  3428.     DCA CSA        /GET HANDLER ENTRY POINT
  3429.     CDF 10
  3430.     CIF 0
  3431.     JMS I CSA
  3432.     3        /SKIP TO NEXT FILE
  3433. L770,    770
  3434. M270,    -270
  3435. R7600,    7600        /IGNORE ERRORS
  3436.     CIF 0
  3437.     JMS I CSA
  3438.     100        /DUMMY READ A PAGE
  3439.     BINARY        /TO SKIP HEADER
  3440. PRETSW,    RETSW
  3441.     SKP CLA        /WANT AN ERROR
  3442.     HLT        /A GOOD READ IS BAD!
  3443.     JMP I CASIT
  3444.  
  3445. /INITIALIZATION CODE FOR BATCH OPERATION
  3446.  
  3447.  
  3448.  
  3449.     FIELD 2
  3450.  
  3451. *10
  3452. BATXR1,    0        /INDEX REG. 1 FOR BATCH
  3453. BATXR2,    0        /INDEX REG. 2 FOR BATCH
  3454.  
  3455.  
  3456. *200
  3457.  
  3458. BATSET,    0
  3459.     TAD I (XR1    /GET THE OVERLAY POINTER
  3460.     SZA        /IF ZERO USE OLD VALUE
  3461.             /THIS SAVES ME SOME FIELD 0 SPACE
  3462.     DCA BATXR1    /SAVE THE POINTER
  3463.     TAD I [7777    /NOW GET THE BATCH FIELD
  3464.     CDF 20        /TO FIELD 2
  3465.     AND (0070    /NOW GET THE FIELD BITS
  3466.     TAD (CIF    /MAKE A CIF FOR OVERLAY
  3467.     DCA CBATI    /SAVE IN INPUT ROUTINE
  3468.     TAD CBATI    /ALSO OUTPUT
  3469.     DCA CBATO    /OVERLAY
  3470.  
  3471. BATMOV,    TAD I BATXR1    /GET NEXT STORAGE ADDRESS
  3472.     SNA        /IF ZERO ALL DONE (SECOND TIME THRU)
  3473.     JMP BATDON    /RETURN TO CALLER
  3474.     DCA BATXR2    /OTHERWISE SAVE POINTER TO TARGET CODE
  3475. BATLUP,    TAD I BATXR1    /GET A PATCH WORD
  3476.     SNA        /ZERO MEANS END OF THIS PATCH
  3477.     JMP BATMOV    /GO GET ANOTHER POINTER OR MAYBE ALL DONE
  3478.     CDF 0        /BACK TO FIELD ZERO
  3479.     DCA I BATXR2    /NOW CODE IS BATCHABLE
  3480.     CDF 20        /BACK TO FIELD 2
  3481.     JMP BATLUP    /DO IT ALL AGAIN
  3482.  
  3483. BATDON,    CIF CDF 0    /RETURN TO CALLER
  3484.     JMP I BATSET    /BYE
  3485.  
  3486. BATLS,    TTYIN        /POINTER TO MOVE DATA
  3487.     CBATI=.    /SET CIF BATCH
  3488.     RELOC TTYIN+1    /RELOCATABLE CODE
  3489.     CIF
  3490.     JMS I BATINI    /JUMP TO GET INPUT FROM BATCH
  3491.     HLT        /BAD ERROR
  3492.     SKP        /SKIP OVER POINTER
  3493. BATINI,    5400        /POINTER TO BATCH INPUT ROUTINE
  3494.     0        /TERMINATOR
  3495.  
  3496.     TTYOUT+5    /NOW FOR OUTPUT
  3497.     RELOC
  3498.     CBATO=.    /SET FOR CIF BATCH
  3499.     RELOC TTYOUT+6    /POINTER TO MOVE DATA
  3500.     CIF        /CIF BATCH
  3501.     JMS I .+1    /GO SEND DATA TO BATCH
  3502.     7400        /POINTER TO BATCH OUTPUT PROCESSOR
  3503.     0        /TERMINATOR
  3504.  
  3505.  
  3506.     LFMOD        /POINTER TO LINE FEED MOD
  3507.     RELOC LFMOD+1    /RLOCATE THE CODE
  3508.     RDTXT        /IGNORE LINE FEEDS
  3509.     0        /TERMINATOR
  3510.  
  3511.     BATTST+1    /POINTER TO MODIFY BATCH TEST
  3512.     RELOC BATTST+2    /RELOCATE THE CODE
  3513.     JMP BATBK    /JUMP AROUND THE BATCH SWITCH TEST
  3514.             /WITH A NEW SYSTEM THE TEST IS ILLOGICAL
  3515.             /WHICH IS THE CASE IF A BOOT IS REQUESTED
  3516.     0        /TERMINATOR
  3517.     RELOC
  3518.  
  3519.     0        /FINAL OVERLAY TERMINATOR
  3520.  
  3521.  
  3522.  
  3523. /NOW COMES THE RESET CODE TO PUT THINGS BACK
  3524. / THE WAY THEY WERE TO BEGIN WITH.
  3525.  
  3526.     TTYIN        /POINTER TO MOVE DATA
  3527.     RELOC TTYIN+1    /RELOCATABLE CODE
  3528.     KSF        /SKIP ON FLAG
  3529.     JMP .-1
  3530.     KRB        /READ A CHAR
  3531.     SNA        /LOW LEVEL BLANK IGNORE
  3532.     JMP TTYIN+1    /GO GET ANOTHER
  3533.     0        /OVERLAY TERMINATOR
  3534.  
  3535.     TTYOUT+5    /NOW FOR OUTPUT
  3536.     RELOC TTYOUT+6    /RELOCATE AGAIN
  3537.     TLS        /PRINT THE CHAR
  3538.     TSF        /DONE?
  3539.     JMP .-1    /NO.
  3540.     0        /OVERLAY TERMINATOR
  3541.  
  3542.     LFMOD        /POINTER TO LINE FEED MOD
  3543.     RELOC LFMOD+1    /RELOCATE ONE MORE TIME
  3544.     LFEED        /LINE FEED..ECHO CURRENT COMMAND
  3545.     0        /TERMINATOR
  3546.  
  3547.     BATTST+1    /POINTER TO BATCH TEST
  3548.     RELOC BATTST+2    /RELOCATE THE CODE
  3549.     TAD I [7777    /RESET THE CODE TO ORIGINAL STATE
  3550.     0        /OVERLAY TERMINATOR
  3551.  
  3552.     RELOC
  3553.     0        /FINAL OVERLAY TERMINATOR
  3554.     PAGE
  3555.  
  3556.  
  3557. /LDABS DOES A REAL LIVE ABSLOAD IF AC=0
  3558. /IF AC=-2 THEN IT IS LOADING A HANDLER, THIS IS DONE AS FOLLOWS:
  3559. /SEARCH FOR *0
  3560. /THEN LOAD CONSEC WORDS INTO DESCRIPTOR TABLE
  3561. /AT NEXT ORIGIN, LOAD WORDS INTO HANDLER AREA (ALLOW ORIGINS)
  3562.  
  3563. /CAN'T USE PAGE 0 LITERALS IN CASE LOADING OS/8
  3564.  
  3565. LDABS,    0
  3566.     DCA LODTST    /-2 IF HANDLER, 0 IF OS8
  3567. LDABS2,    TAD JMPNXT
  3568.     DCA TSTO0
  3569.     DCA CKSUM    /CLEAR CHECKSUM
  3570.     JMS I (ICHA    /GET A BUFFER CHAR
  3571.     JMP LDAB    /NO INPUT FOUND
  3572.     SNA
  3573.     JMP .-3        /IGNORE BLANKS
  3574.     TAD (-200
  3575.     SZA CLA        /IS IT LEADER?
  3576.     JMP BADIN    /WASN'T 200..PROBABLY NOT BINARY
  3577. LEADER,    JMS I (ICHA
  3578.     JMP LDAB    /STRANGE....ALL LEADER!!!
  3579.     SNA
  3580.     JMP LDABS2    /START OVER.BLANKS AFTER LEADER
  3581.     TAD (-200    /IS IT STILL LEADER?
  3582.     SNA
  3583.     JMP LEADER    /YES
  3584. NEWWD,    SMA        /IS IT < 200?
  3585.     JMP FIELDW    /NO.TEST FOR FIELD SEETING
  3586.     TAD (200    /RESTORE CHARACTER
  3587.     DCA WD1
  3588.     JMS I (ICHA
  3589.     JMP BADIN    /EOF BETWEEN WORDS. HOW NICE!
  3590.     DCA WD2
  3591.     JMS I (ICHA
  3592.     JMP BADIN
  3593.     TAD (-200    /200 FINISHES US UP
  3594.     SNA
  3595.     JMP OVE
  3596.     DCA WD
  3597.     JMS I (ASSEM    /ASSEMBLE LAST WORD READ
  3598.     SZL        /IS IT AN ORIGIN?
  3599.     JMP ORGTST    /YES
  3600. XFIELD,    HLT        /GETS CDF N
  3601.     DCA I ORIGIN    /STORE THIS WORD
  3602. CDF20,    CDF 20
  3603.     ISZ ORIGIN    /SHOULD NEVER SKIP, BUT...
  3604. LD7,    7
  3605.     TAD ORIGIN
  3606.     TAD (200    /GIVE ERROR IF ORIGIN ADVANCES TO 7600
  3607.     SZA CLA
  3608.     JMP .+3        /SKIP AROUND ERROR
  3609.     CIF CDF 0    /ERROR IN FIELD 0
  3610.     JMP I (NOROOM
  3611. NEXT,    TAD WD1
  3612.     TAD WD2        /MAKE UP CHECKSUM
  3613.     TAD CKSUM
  3614.     DCA CKSUM
  3615.     TAD WD
  3616.     JMP NEWWD
  3617.  
  3618. ORGTST,    DCA ORGX    /TEST FOR ORIGIN
  3619.     TAD LODTST    /GET POINTER TO PROPER ORIGIN
  3620.     SNA CLA
  3621.     JMP .+3
  3622.     CIF CDF 0    /JUMP TO HANDLER TEST
  3623.     JMP I (HND
  3624.     TAD ORGX    /OS/8 - USE REAL ORIGIN
  3625. ORI,    DCA ORIGIN    /BUFFER AREA
  3626.     TAD LODTST    /HANDLER LOAD?
  3627.     SNA CLA
  3628.     JMP NEXT    /NOPE
  3629.     TAD ORGX    /DON'T START LOAD UNTIL *0 IS FOUND
  3630.     SZA CLA
  3631. TSTO0,    JMP NEXT
  3632.     DCA .-1        /FOUND *0..DO THE LOAD
  3633.     ISZ LODTST    /YES. BUMP LODTST TO LOAD HANDLER NEXT
  3634.     JMP NEXT
  3635.     TAD XFIELD
  3636.     TAD (-CDF 0
  3637.     SZA CLA
  3638.     JMP .+3        /JUMP AROUND IF NOT FIRST TIME
  3639.     CIF CDF 0    /SUBROUTINE IN FIELD 0
  3640.     JMS I [FIRST    /FIRST TIME THROUGH
  3641.  
  3642.  
  3643. /DO THIS BETTER; ALSO MAKE SURE HANDLER DOESN(T HAVE A FILED PSEUDO
  3644.     TAD (CDF 10
  3645.     DCA XFIELD    /AT THIS POINT, WE START
  3646.     CLA CMA        /LOADING THE HANDLER INTO THE
  3647.     DCA LODTST    /AREA SPECIFIED BY HNDORG+1
  3648. /CHECK 'ORIGIN' TO SEE IF HEADER WAS RIGHT SIZE
  3649. /ALSO ELSEWHERE, CAN CHECK ORIGIN WHEN BUMPING TO SEE
  3650. /IF WE HIT ANY MAGIC LOCATIONS
  3651.     TAD ORGX    /SEE IF LEGAL RE ORIGIN
  3652.     CIF CDF 0    /OFF ON FIELD 0
  3653.     JMS I (ORGLIM
  3654.     DCA ORIGIN    /ACTUAL FIELD 1 ORIGIN
  3655. /    TAD SNACLA    /LOADING FIELD 1..TEST ORIGINS
  3656. /    DCA JMPRE
  3657. JMPNXT,    JMP NEXT
  3658. FIELDW,    TAD (-100    /LESS THAN 300 FAILS
  3659.     SPA
  3660.     JMP BADIN
  3661.     DCA WD1
  3662.     TAD WD1
  3663.     AND LD7
  3664.     SZA CLA
  3665.     JMP BADIN    /DISECT WORD TO CATCH GARBAGE
  3666.     TAD LODTST    /IF LOADING HANDLER, IGNORE FIELD
  3667.     SZA CLA
  3668.     JMP FIELD2
  3669.     TAD WD1
  3670.     AND (70        /EXTRACT FIELD SETTING
  3671.     TAD [CDF 0
  3672.     DCA XFIELD
  3673. FIELD2,    JMS I (ICHA
  3674.     JMP BADIN
  3675.     TAD (7600
  3676.     SZA
  3677.     JMP NEWWD
  3678. OVE,    CIF CDF 0    /ROUTINE IN FIELD 0
  3679.     JMP I [OVER
  3680. LDAB,    CIF CDF 0    /BACK TO FIELD 0
  3681.     JMP I LDABS    /RETURN FROM SUBROUTINE
  3682.  
  3683. BADIN,    CIF CDF 0    /BACK TO FIELD 0
  3684.     JMP I [BADINP    /BAD INPUT
  3685.  
  3686.  
  3687. ORGX,    0
  3688. ORIGIN,    0
  3689. WD1,    0
  3690. WD2,    0
  3691. WD,    0
  3692. CKSUM,    0
  3693. LODTST,    0
  3694.     PAGE
  3695. ICHA,    0        /ICHAR CALL ROUTINE FOR FIELD 0
  3696.     CIF CDF 0    /OFF TO FIELD 0
  3697.     JMS I (ICHAR    /JUMP TO ICHAR
  3698.     JMP I ICHA    /ERROR RETURN
  3699.     ISZ ICHA    /GOOD RETURN
  3700.     JMP I ICHA    /RETURN TO CALLER
  3701.  
  3702.  
  3703.  
  3704. ASSEM,    0        /ASSEMBLE A WORD
  3705.             /THIS CODE APPEARS IN FIELD 0 ALSO
  3706.     TAD I (WD1    /GET WORD 1
  3707.     CLL RTL        /NOW DO THE ROTATE
  3708.     RTL;RTL
  3709.     TAD I (WD2    /NOW FOR THE SECOND PART
  3710.     JMP I ASSEM    /BACK TO CALLER
  3711.     PAGE
  3712.     WRITEX=JMS I (7607    /OFF TO WRITE TO DEV.
  3713.     ERROR=JMS ERRX        /ERROR SUBROUTINE
  3714. BAK,
  3715.     CIF 0;WRITEX;4111;3400;26;ERROR    /ENTER OVERLAY
  3716.     CIF 0;WRITEX;4701;2000;54;ERROR    /SAVE, DATE, MON ERROR, CHAIN OVERLAYS
  3717.     TAD Q200
  3718.     CDF 0
  3719.     TAD I QLD
  3720.     DCA I QLD
  3721.     CDF 20
  3722.     CIF 0;WRITEX;4101;LDRCTL;70;ERROR /ABSLDR CORE CONTROL BLOCK
  3723.     TAD (-114
  3724.     CIF 0
  3725.     JMS I (MOVE
  3726.     CDF 0
  3727.     4264
  3728.     CDF 0
  3729.     3464
  3730.     CIF 0;WRITEX;4200;3400;64;ERROR
  3731.     CIF 0;WRITEX;5210;2000;71;ERROR    /ABSLDR
  3732.     CIF CDF 10    /BACK TO FIELD 1
  3733.     JMP I (WHER
  3734. QLD,    LDRCTL+5
  3735. Q200,    200
  3736.  
  3737.  
  3738. ERRX,    0        /WRITE ERROR
  3739.     HLT CLA        /HIT CONTINUE TO RETRY
  3740.     TAD ERRX
  3741.     TAD (-6        /BACK TO TRY AGAIN
  3742.     DCA ERRX    /AGAIN
  3743.     JMP I ERRX    /RETRY
  3744.  
  3745.  
  3746.  
  3747.     FIELD 0
  3748.     *200
  3749.     $
  3750.  
  3751.