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 / bload.pa < prev    next >
Text File  |  1992-09-18  |  36KB  |  1,735 lines

  1. /Commercial BASIC Loader, EX
  2. /
  3. /
  4. /
  5. /
  6. /
  7. /
  8. /
  9. /
  10. /
  11. /
  12. /
  13. /COPYRIGHT (C) 1972, 1973, 1974, 1975, 1978, 1979, 1982
  14. /Digital Equipment Corporation, Maynard, Ma.
  15. /
  16. /
  17. /
  18. /This software is furnished under a license for use only on a
  19. /single computer system and may be copied only with the inclu-
  20. /sion of the above copyright notice.  This software, or any other
  21. /copies thereof, may not be provided or otherwise made available
  22. /to any other person except for use on such system and to one who
  23. /agrees to these license terms.  Title and ownership of the software
  24. /shall at all times remain in DEC.
  25. /
  26. /
  27. /The information in this software is subject to change without
  28. /notice and should not be construed as a commitment by Digital
  29. /Equipment Corporation.
  30. /
  31. /DEC assumes no responsibility for the use or reliability of its
  32. /software on equipment which is not supplied by DEC.
  33. /
  34. /
  35. /
  36. /
  37. /
  38. /
  39. /DEC-S8-LBASA-B-LA
  40. /
  41. /COPYRIGHT  C  1972, 1973, 1974,1978,1979, 1982
  42. /
  43. /DIGITAL EQUIPMENT CORPORATION
  44. /MAYNARD,MASSACHUSETTS 01754
  45. /
  46. /AUGUST 19, 1972
  47. /
  48. /HANK MAURER, 1972
  49. /SHAWN SPILMAN, 1973
  50. /
  51. /
  52. /
  53. /
  54. /ASSEMBLE AND LOAD AS FOLLOWS:
  55. /
  56. /    .PAL BLOAD/E/W
  57. /    .LOAD BLOAD
  58. /    .SA SYS BLOAD;3000=2000
  59. /
  60.     VERSON=    "B&77    /VERSION WORD LOCATED AT TAG "VERLOC"
  61.     PATCH=    "0&77
  62.  
  63. /    .R BLOAD     TO GET BLOAD VERSION NUMBER
  64.  
  65. /
  66. /CORRECTIONS MADE FOR V4        1975
  67. / .MADE SWAP ROUTINE A REAL SWAP
  68. / ./V FOR VERSION NUMBER
  69. / ./C SO NON-BASIC SAVE FILES CAN CHAIN TO BASIC SAVE FILES
  70. / .ADJUST JSW FOR /K
  71. / .CORRECTED CCB FOR /K
  72. / .CALCULATION OF DEFAULT CORE SIZE FOR PDP-8
  73. / .TEST FOR BATCH RUNNIG
  74. / .CHANGE ORDER OF CISTRT SO A CHAIN CAN BE
  75. /    CAN BE DONE FROM A .SV FILE WITH A 
  76. /    FILE STATEMENT
  77. /
  78.  
  79. /    30-APR-77    UPDATE VERSION AND FIX ERROR IN MAKECI WHEN BATCH NOT 
  80. /            RUNNING
  81. /    05-DEC-77    START COMMERCIAL BASIC FIELD 1 CHANGES
  82. /    31-JAN-78    ADD 7 BIT ASCII SUPPORT
  83. /    22-MAR-78    ADD GENERAL 2 PAGE SYSTEM HANDLER CODE
  84. /    27-MAR-78    MAKE BRTS FIELD 1 LOAD CHANGES
  85. /    18-APR-78    CLEAN UP CORE IMAGE CREATION LOGIC, REMOVE /C SWITCH
  86. /    16-May-78    ADD FANCY ERROR MESSAGES, GENERAL CORESIZE HANDLING
  87. /            USING /B SWITCH
  88. /    17-May-78    PUT IN TEMP FILE READ/WRITE BYPASS OPTIMIZATION
  89. /    2/23/79        CHANGED BRTS FIELD 1 LOADING CONSTANTS FOR
  90. /            ENHANCED HANDLER CHANGE TO BRTS
  91. /    5-Mar-79    Make source fixes for published patches
  92. /    30-Aug-81    Changed symbol table setup to allow more string
  93. /            literals
  94. /    01-JAN-82    REMOVED BASIC.UF REFERENCES
  95.     /OS8 BASIC COMPILER POST PROCESSOR
  96.  
  97.     /AUTO INDEX REGISTERS
  98.  
  99.     X10=    10
  100.     X11=    11
  101.     X13=    13
  102.     STACK=    15
  103.     NEXT=    16    /Highest S.T. location used passed by BCOMP
  104.  
  105.     AC7775=    CLL STA RTL
  106.  
  107.     /DUMMY SECTIONS FOR COMPILER/RUNTIME COMMUNICATIONS
  108.  
  109.     NOPUNCH
  110.  
  111.     /BRTS COMMUNICATIONS REGION
  112.  
  113.     *20
  114. STCDF,    0
  115. NSTADR,    0
  116. NASTAD,    0
  117. SSTADR,    0
  118. SASTAD,    0
  119. CODCDF,    0
  120. CODBGN,    0
  121. DATTOP,    0
  122. DATPTR,    0
  123. SWPINF,    0
  124.  
  125.     /BCOMP COMMON REGION
  126.  
  127.     *40
  128. VARCNT,    0
  129. SVCNT,    0
  130. ACNT,    0
  131. SACNT,    0
  132. LOCTRH,    0
  133. LOCTRL,    0
  134. BLOCK,    0
  135. HIFLD,    0
  136. BRTS,    0
  137. DLSIZE,    0
  138. ABORTX,    0
  139. FREFLD,    0        /CDF to highest S.T. location used by BCOMP
  140. OUTFLG,    0        /Flag passed by BCOMP, zero if no temp file writes done
  141.  
  142.     /PAGE 0 LOCATIONS USED BY LOADER
  143.  
  144. FREEHI,    0
  145. FREELO,    0
  146. TEMP,    0
  147. TEMP2,    0
  148. TEMP3,    0
  149. WORD1,    0
  150. WORD2,    0
  151. WORD3,    0
  152. NCHARS,    0
  153. NWORDS,    0
  154. SUBHI,    0
  155. SUBLO,    0
  156. CODSZ1,    0
  157. CODSZ2,    0
  158. LOCHI,    0
  159. LOCLO,    0
  160. CODB,    0
  161. CODF,    0
  162. ICOUNT,    0
  163. OCOUNT,    0
  164. AC1,    0
  165. AC2,    0
  166. AC3,    0
  167. SC,    0
  168. LINEH,    0
  169. LINEL,    0
  170. XLABEL,    0
  171. CLRFLD,    0
  172. CLREND,    0
  173. RESADR,    0
  174. PUTLOC,    0
  175. QOUTWRD,0
  176.     /MORE COMPILER DEFINITIONS
  177.  
  178.     KEYEND=    1665
  179.     VARST=    KEYEND
  180.     SVARST=    VARST+436
  181.     ARAYST=    SVARST+1074
  182.     SARYST=    ARAYST+200
  183.     SNUMS=    SARYST+200
  184.     TEMPS=    SNUMS+24
  185.     STEMPS=    TEMPS+2
  186.     LITRL=    STEMPS+2
  187.     SLITRL=    LITRL+2
  188.     DATLST=    SLITRL+2
  189.  
  190.     INFO=    7604    /BASIC SYSTEM INFORMATION AREA
  191.  
  192. /INFO    STARTING BLOCK +1 OF BASIC.SV
  193. /INFO+1  STARTING BLOCK +1 OF BCOMP.SV
  194. /INFO+2  STARTING BLOCK +1 OF BLOAD.SV
  195. /INFO+3  STARTING BLOCK +1 OF BRTS.SV
  196. /INFO+4  STARTING BLOCK +1 OF BASIC.OV
  197. /INFO+5  STARTING BLOCK +1 OF BASIC.EX
  198. /INFO+6  *UNUSED*
  199. /INFO+7  *UNUSED*
  200. /INFO+10 STARTING BLOCK OF BASIC.TM
  201. /INFO+11 SIZE IN BLOCKS OF BASIC.TM
  202. /INFO+12 INPUT HANDLER ENTRY ADDRESS
  203. /INFO+13 SIZE AND DEVICE NUMBER OF INPUT FILE
  204. /INFO+14 STARTING BLOCK OF INPUT FILE
  205. /INFO+15 THROUGH
  206. /INFO+20 NAME OF WORKSPACE
  207.  
  208.     /MISC DEFINES
  209.  
  210.     STRMAX=    205    /MAX LENGTH OF STRING IN CHARS
  211.     STRMIN=    22    /MIN LENGTH TO DEFAULT UNDIMENSIONED STRINGS TO
  212.     BLDCI=    200    /PAGE WHERE MAKECI GETS MOVED
  213.     STACKA=    7120    /MAIN STACK OF COMPILER
  214.     EDTBGN=    0201    /START OF EDITOR
  215.     EDTSIZ=    2400    /SIZE OF EDITOR
  216.  
  217.     JSW=    7746    /OS/8 JOB STATUS WORD IN FIELD 0
  218.     CDOPT2=    7642    /HIGH ORDER CD = OPTION AND ALTMODE FLAG
  219.     CDOPT3=    7643    /CD SWITCHES [ABC DEF GHI JKL]
  220.     CDOPT4=    7644    /CD SWITCHES [MNO PQR STU VWX]
  221.     CDOPT5=    7645    /CD SWITCHES [YZ0 123 456 789]
  222.     CDOPT6=    7646    /LOW ORDER CD = OPTION
  223.     BIPCCL=    7777    /OS/8 SOFTWARE CORE SIZE AND BATCH FLAGS WORD
  224.  
  225.     BABORT=    6    /CONTAINS ADDR OF BCOMP/BLOAD ^C HOOK IN SYS:
  226.     INBUF=    400    /BLOAD Temp file input buffer in FIELD 1
  227.             /overlays BCOMP output buffer
  228.     XERMSG=    1000    /Error message printer which executes in BCOMP input buffer
  229.     STPACK=    2000    /LOAD ADDRESS OF STRING ARITH PACKAGE IN FIELD 1
  230.     BRTSZ1=    2600    /HANDLER SIZE CONTROL WORD FOR BRTS FIELD 1 CODE
  231.     BRTLD1=    0000    /STARTING LOCATION OF BRTS LOAD FOR FIELD 1
  232.     BRTBG1=    0400    /SUBROUTINE ENTRY ADDR FOR BRTS STARTUP IN FIELD 1
  233.     BRTND1=    5400    /END OF BRTS FIELD 1 SECTION
  234.     OVSEP=    7    /OFFSET FROM START OF BLOAD OF BLOAD OVERLAY
  235.     MAGIC=    1234    /MAGIC NUMBER PASSED IN HIGH ORDER = OPTION FOR FAST
  236.             /.SV IMAGE STARTUP
  237.  
  238.     ENPUNCH        /END OF DUMMY SECTIONS
  239.     /LOADER PROPER
  240.  
  241.     *400
  242. LOADER,    JMS I    (IMAGE    /CORE IMAGE FILE PATCH
  243.     TAD    (7577    /EXECUTION RESUMES HERE
  244.     DCA    FREELO
  245.     CIA IAC
  246.     DCA    SWPINF    /SET SWAPPER FLAG TO INDICATE 17600 IS IN FIELD 1
  247.     DCA    LINEH    /CLEAR LINE NUMBER
  248.     DCA    LINEL
  249.     TAD    STACK    /ANY UNCLOSED FOR'S ?
  250.     CIA
  251.     TAD    (STACKA-1
  252.     SNA CLA
  253.     JMP    .+3    /NO
  254.     JMS I    (ERMSG    /YES
  255.     UFMSG        /UNCLOSED FOR LOOP
  256.     AC7775
  257.     TAD I    (7612    /TEST IF 2 PAGE SYSTEM HANDLER
  258.     SZA CLA        /SKP IF YES
  259. GOTTD,    JMP    NOTD8E    /JMP IF NO NEED TO ALLOCATE EXTRA PAGE
  260.             /PREV INSTR NOP'D TO FORCE SPACE IF FOR CORE IMAGE
  261.     TAD    (7377    /ALLOCATE HANDLER EXTENSION PAGE
  262.     DCA    FREELO
  263.     STL RAR        /SET SWAP INFO (17600 OUT NOW)
  264. NOTD8E,    DCA    SWPINF
  265.     JMS I    (FREEF    /GET CDF TO HIGHEST FIELD
  266.     DCA    SWPF1    /INTO 2 PLACES
  267.     TAD    SWPF1
  268.     DCA    SWPF2
  269.     TAD    SWPF1    /PASS NEW FIELD BITS FOR ANY 2 PAGE HANDLER
  270.     JMS    SWAP    /MOVE OS8 OUT
  271.     JMP I    (STSTUF    /DO SYMBOL TABLE STUFF
  272.     /PATCH SYSTEM HANDLER AND MOVE OS/8 OUT OR IN
  273.     /ENTRY AC = FIELD BITS FOR HANDLER IN BITS 6-8
  274.  
  275. SWAP,    0
  276.     AND    (70    /MASK EXTRANEOUS BITS
  277.     DCA    FBITS
  278.     AC7775        /TEST MAGIC LOCATION IN HANDLER
  279.     TAD I    (7612    /FOR A 3
  280.     SZA CLA
  281.     JMP    NOFADJ    /NO MATCH, BYPASS ADJUSTMENT
  282.     TAD    (7635    /OK, RELOCATE ANYTHING BEYOND 7635
  283.     DCA    HNDPTR
  284. HNDLP,    TAD I    HNDPTR    /RANGE CHECK BITS 0-8
  285.     TAD    (-6300
  286.     CLL
  287.     TAD    (70
  288.     SNL CLA        /SKP IF  CIF/CDF N0
  289.     JMP    NOPAT    /ELSE TRY NEXT WORD
  290.     TAD I    HNDPTR    /OK, NOW GET THE INSTRUCTION BITS
  291.     AND    (7707
  292.     TAD    FBITS    /ADD NEW FIELD
  293.     DCA I    HNDPTR    /STORE IT BACK
  294. NOPAT,    ISZ    HNDPTR    /BUMP PTR
  295.     JMP    HNDLP    /TRY AGAIN
  296. NOFADJ,    TAD    SWPINF    /IS ROOM ALLOCATED 2 PAGE SYSTEM HANDLER?
  297.     SPA CLA        /SKP IF NO, JUST MOVE 1 PAGE
  298.     JMP    TD8ESYS    /YES
  299.     JMS    SWPSUB    /SWAP 17600 TO/FROM N7600
  300.     CDF    10
  301.     7600
  302.     JMP I    SWAP
  303. TD8ESYS,JMS    SWPSUB    /SWAP 17600 TO/FROM N7400
  304.     CDF    10
  305.     7400
  306.     JMS    SWPSUB    /SWAP 27600 TO/FROM N7600
  307.     CDF    20
  308. L7600,    7600
  309. SWPRET,    CLA
  310.     JMP I    SWAP
  311. HNDPTR,    0
  312. FBITS,    0
  313.     /SWAPPER
  314.  
  315. SWPSUB,    0
  316.     TAD I    SWPSUB    /GET FIELD
  317.     DCA    SWP1    /TWICE
  318.     TAD    SWP1
  319.     DCA    SWP2    /ONCE FOR EACH DIRECTION
  320.     ISZ    SWPSUB
  321.     TAD I    SWPSUB    /GET HI FIELD ADDR
  322.     DCA    TEMP
  323.     ISZ    SWPSUB
  324.     TAD    L7600    /GET COUNT/POINTER
  325.     DCA    TEMP2
  326. SWP1,    HLT
  327.     TAD I    TEMP2    /GET PART OF RESIDENT
  328.     DCA    TEMP3
  329. SWPF1,    JMP    SWPRET    /RETURN IF 8K ONLY
  330.     TAD I    TEMP
  331. SWP2,    HLT
  332.     DCA I    TEMP2
  333.     TAD    TEMP3
  334. SWPF2,    HLT
  335.     DCA I    TEMP    /INTO HI FIELD
  336.     ISZ    TEMP    /BUMP POINTER
  337.     NOP        /JR PROTECT AGAINST WRAP AROUND
  338.     ISZ    TEMP2    /AND PTR/CTR
  339.     JMP    SWP1    /LOOP
  340.     CDF
  341.     JMP I    SWPSUB
  342.  
  343. /Store a word in the symbol table
  344. /STBCDF is set up at init time; point to symbol table with X11
  345. /Returns with data field of zero
  346.  
  347. STOSTB,    0
  348.     JMP    SETUP    /Set up the field
  349. STOCDF,    HLT        /Change to symbol table field
  350.     DCA I    X11    /Store the word
  351.     CDF    0    /Back to field zero
  352.     JMP I    STOSTB    /Return to caller
  353.  
  354. SETUP,    DCA    STOTMP    /Save the word
  355.     TAD    STCDF    /Get symbol table CDF
  356.     DCA    STOCDF    /Store in line
  357.     TAD    (NOP    /Clear the initialization
  358.     DCA    STOSTB+1
  359.     TAD    STOTMP    /Restore the data word
  360.     JMP    STOCDF    /Store it
  361. STOTMP,    0
  362.     PAGE
  363. NOSL,    CDF
  364.     JMS I    (FREEF    /SAVE FIELD
  365.     CIA
  366.     DCA    CLRFLD    /FOR ARRAY CLEARING
  367.     TAD    FREELO    /SAVE THIS ADDR
  368.     CIA
  369.     DCA    CLREND    /FOR END OF ARRAY CLEAR
  370.     ISZ    FREELO    /MAKE IT NEXT FREE + 1
  371.     TAD    (SVARST-1
  372.     DCA    X10    /ALLOCATE STRING VARS
  373.     TAD    (-436
  374.     DCA    TEMP
  375. ASVLUP,    CDF    10
  376.     TAD I    X10    /LOOK FOR DEFINED STRING VAR
  377.     DCA    TEMP2    /SAVE SYMBOL NUMBER
  378.     TAD I    X10    /GET SIZE
  379.     SPA
  380.     TAD    (4000+STRMIN /IF UNDEF USE DEFAULT NO CHARS
  381.     DCA    TEMP3
  382.     TAD    TEMP2    /IS IT DEFINED ?
  383.     CDF
  384.     SMA CLA
  385.     JMS    SVSTOR    /YES, CREATE ENTRY
  386.     ISZ    TEMP    /BUMP COUNT
  387.     JMP    ASVLUP    /LOOP
  388.     CDF    10    /ALLOCATE STRING TEMPS
  389. P6,    TAD I    (STEMPS+1
  390.     DCA    STEMPF    /INIT FIELD
  391.     TAD I    (STEMPS    /AND POINTER
  392.     SKP
  393. STMLUP,    TAD    TEMP    /LOOK AT NEXT ENTRY
  394.     SNA
  395.     JMP I    (ALLOCA    /DONE GO ALLOCATE ARRAYS
  396.     TAD    (-1
  397.     DCA    X10    /GET POINTER
  398. STEMPF,    CDF    10
  399.     TAD I    X10    /GET ADDR OF NEXT ENTRY
  400.     DCA    TEMP    /SAVE IT
  401. P7,    TAD I    X10    /AND ITS FIELD
  402.     DCA    STEMPF
  403.     ISZ    X10    /SKIP TEMP NUMBER
  404.     TAD I    X10    /GET SYM NUMBER
  405.     DCA    TEMP2
  406.     CDF
  407.     TAD    (STRMAX    /GIVE IT MAX SIZE
  408.     DCA    TEMP3
  409.     JMS    SVSTOR    /ALOOCATE IT
  410.     JMP    STMLUP    /LOOP
  411.     /MAKE ENTRY FOR STRING VARIABLE
  412.  
  413. SVSTOR,    0
  414.     TAD    TEMP2    /FIND ST ADDR
  415.     CLL RAL
  416.     TAD    TEMP2
  417.     TAD    SSTADR
  418.     DCA    X11
  419.     TAD    TEMP3    /NUMBER OF CHARS
  420.     JMS I    (CVT3F2
  421.     DCA    SUBLO    /NUMBER OF WORDS
  422.     DCA    SUBHI
  423.     JMS    SUB    /FREEHI,LO=FREEHI,LO-SUBHI,LO
  424.     TAD    FREELO    /SAVE ADDR
  425.     JMS I    (STOSTB
  426.     JMS I    (FREEF    /AND FIELD
  427.     JMS I    (STOSTB
  428.     TAD    NWORDS    /PUT IN TOTAL SIZE IN WORDS
  429.     JMS I    (STOSTB
  430.     JMP I    SVSTOR
  431.     /DOUBLE PRECISION SUBTRACT
  432.  
  433. SUB,    0
  434.     TAD    SUBLO    /SUBTRACT LOWER
  435.     CLL CML CIA
  436.     TAD    FREELO
  437.     DCA    FREELO
  438.     RAL        /GET BORROW
  439.     TAD    SUBHI
  440.     CIA
  441.     TAD    FREEHI    /SUBTRACT UPPER
  442.     DCA    FREEHI    /SAVE NEW UPPER
  443.     TAD    (BRTND1    /SEE IF ABOVE BRTS FIELD 1 SECTION
  444.     CLL CIA
  445.     TAD    FREELO    /DOUBLE WORD COMPARE
  446.     STA RAL
  447.     TAD    FREEHI
  448.     SMA CLA        /WILL IT FIT?
  449.     JMP I    SUB    /YUP
  450.     DCA    LINEH    /CLEAR LINE NUMBER
  451.     DCA    LINEL
  452.     JMS I    (ERMSG    /WRITE MESSAGE
  453.     TBMSG        /TOO BIG
  454.     JMP I    (ABORTL    /ABORT RUN
  455.  
  456.     /CHECK LABEL FOR UNDEFINED
  457.  
  458. CHKLBL,    0
  459.     TAD I    CHKLBL    /GET FIELD
  460.     DCA    .+1
  461.     HLT
  462.     TAD I    TEMP2    /GET FIRST WORD OF LABEL
  463.     SPA CLA
  464.     JMP I    CHKLBL    /SIGN BIT IS DEFINED
  465.     CLL CMA RAL    /GET ADDR OF LINE NUM
  466.     TAD    TEMP2
  467.     DCA    XLABEL
  468.     TAD I    XLABEL    /GET HIGH ORDER LINE
  469.     DCA    LINEH
  470.     ISZ    XLABEL
  471.     TAD I    XLABEL    /GET LOW ORDER
  472.     DCA    LINEL
  473.     CDF
  474.     JMS I    (ERMSG    /PRINT MESSAGE
  475.     USMSG
  476.     JMP I    CHKLBL    /RETURN
  477.  
  478.  
  479.     PAGE
  480.     /SYMBOL TABLE SETUP
  481.  
  482. STSTUF,    TAD    FREELO    /SAVE START OF RESIDENT -1
  483.     CIA        /NEGATED
  484.     DCA    RESADR    /USED TO COMPUTE AMOUNT OF MOVE
  485.     TAD    VARCNT    /GET NUMBER OF
  486.     TAD    (401    /VARIABLES
  487.     CIA
  488.     DCA    VARCNT
  489.     TAD    SVCNT    /STRING VARIABLES
  490.     TAD    (401
  491.     CIA
  492.     DCA    SVCNT
  493.     TAD    ACNT    /ARRAYS
  494.     TAD    (41
  495.     CIA
  496.     DCA    ACNT
  497.     TAD    SACNT    /AND STRING ARRAYS
  498.     TAD    (41
  499.     CIA
  500.     DCA    SACNT
  501.     JMS I    (FREEF    /SAVE HIGH FIELD
  502.     DCA    STCDF
  503.     TAD    VARCNT    /SUBTRACT SPACE FOR
  504.     CLL RAL        /SCALAR TABLE (3 WORDS A PIECE)
  505.     TAD    VARCNT
  506.     TAD    FREELO    /DON'T BOTHER WITH A
  507.     DCA    FREELO    /DOUBLE PREC. SUBTRACTION
  508.     TAD    FREELO    /SAVE START OF SCALAR TABLE
  509.     IAC        /FOR INTERPRETER
  510.     DCA    NSTADR
  511.  
  512.     TAD    FREELO    /CLEAR ALL VARIABLES
  513.     DCA    X11    /IN THE
  514.     JMS I    (STOSTB    /SCALAR TABLE
  515.     JMS I    (STOSTB
  516.     JMS I    (STOSTB
  517.     ISZ    VARCNT
  518.     JMP    .-4    /JUST TO BE NICE
  519.     CDF    10    /PREPARE TO MOVE
  520. P1,    TAD I    (LITRL+1/THE NUMERIC LITERALS
  521.     DCA    LFLD    /INTO THE SCALAR TABLE
  522.     TAD I    (LITRL
  523.     CDF
  524.     SKP
  525. NLLOOP,    TAD    TEMP    /ADDR OF NEXT LITERAL
  526.     SNA
  527.     JMP    NONL    /NO MORE NUMERIC LITERALS
  528.     TAD    (-1
  529.     DCA    X10
  530. LFLD,    CDF    10
  531.     TAD I    X10    /GET ADDR OF NEXT LITERAL
  532.     DCA    TEMP
  533. P2,    TAD I    X10    /ALSO ITS FIELD
  534.     DCA    LFLD
  535.     TAD I    X10    /NOW ITS VALUE
  536.     DCA    WORD1
  537.     TAD I    X10
  538.     DCA    WORD2
  539.     TAD I    X10
  540.     DCA    WORD3
  541.     TAD I    X10    /NOW THE SYMBOL NUMBER
  542.     DCA    TEMP2
  543.     TAD    TEMP2    /TIMES THREE
  544.     CLL RAL
  545.     TAD    TEMP2
  546.     TAD    FREELO    /PLUS START
  547.     DCA    X11    /GIVES STORE ADDR
  548.     TAD    WORD1    /NOW PUT LITERAL INTO TABLE
  549.     JMS I    (STOSTB
  550.     TAD    WORD2
  551.     JMS I    (STOSTB
  552.     TAD    WORD3
  553.     JMS I    (STOSTB
  554.     JMP    NLLOOP    /DO NEXT LITERAL
  555. NONL,    TAD    ACNT    /ALLOCATE ARRAY TABLE
  556.     CLL RAL
  557.     CLL RAL        /FOUR WORDS PER
  558.     TAD    FREELO    /SUBTRACT FROM LOWER END
  559.     DCA    FREELO
  560.     TAD    FREELO    /SAVE THIS
  561.     DCA    NASTAD    /START OF ARRAY TABLE
  562.  
  563.     TAD    SVCNT    /ALLOCATE
  564.     CLL RAL        /STRING VAR TABLE
  565.     TAD    SVCNT
  566.     TAD    FREELO    /3 WORDS EACH
  567.     DCA    FREELO
  568.     TAD    FREELO    /AND SAVE IT FOR THE INT
  569.     DCA    SSTADR
  570.  
  571.     TAD    SACNT    /NOW SPACE FOR STRING
  572.     CLL RAL        /ARRAY
  573.     CLL RAL
  574.     TAD    FREELO    /TABLE
  575.     DCA    FREELO
  576.     TAD    FREELO    /SAVE FOR INT
  577.     DCA    SASTAD
  578.     JMP I    (DODATA    /Do the data now
  579. NODATA,    CDF    10    /PREPARE TO MOVE
  580. P3,    TAD I    (SLITRL+1
  581.     DCA    SLFLD    /STRING LITERALS
  582.     TAD I    (SLITRL
  583.     CDF
  584.     SKP
  585. SLLOOP,    TAD    TEMP    /IS NEXT LIT THERE ?
  586.     SNA
  587.     JMP I    (NOSL    /NO, END OF THE LINE
  588.     TAD    (-1
  589.     DCA    X10
  590.     JMS    SFLD    /SET THE FIELD
  591.     TAD I    X10    /GET ADDR OF NEXT
  592.     DCA    TEMP
  593. P4,    TAD I    X10    /ALSO FIELD
  594.     DCA    TEMP2
  595.     TAD I    X10    /THEN CHAR COUNT
  596.     DCA    NCHARS
  597.     JMP I    (SLIT2    /DO REST OF STRING LIT
  598. SFLD,    0
  599. SLFLD,    CDF    10
  600.     JMP I    SFLD
  601.  
  602.     PAGE
  603. SLIT2,    TAD    NCHARS    /COMPUTE WORD COUNT
  604.     JMS I    (CVT3F2
  605.     TAD    X10    /TO GET ADDR OF SYMBOL NUMBER
  606.     DCA    TEMP3
  607.     TAD I    TEMP3
  608.     CLL RAL        /SYM NUMBER TIMES 3
  609.     TAD I    TEMP3
  610.     TAD    SSTADR    /PLUS BASE
  611.     DCA    X11    /GIVES ST ADDR
  612.     TAD    NWORDS    /GET NUMBER OF WORDS
  613.     CIA
  614.     DCA    TEMP3    /(SAVE NUMBER OF WORDS)
  615.     TAD    NWORDS    /Check if room
  616.     DCA    SUBLO
  617.     DCA    SUBHI
  618.     JMS I    (SUB    /Do double precision subtract
  619.     TAD    FREELO    /Set pointer for move
  620.     DCA    PUTLOC
  621.     JMS I    (FREEF    /And the field
  622.     CDF    0
  623.     DCA I    (PUTCDF
  624.     TAD    FREELO    /STICK THE ADDR
  625.     IAC
  626.     JMS I    (STOSTB    /INTO THE ST ENTRY
  627.     JMS I    (FREEF    /ALSO THE FIELD
  628.     JMS I    (STOSTB
  629.     TAD    NWORDS    /ALSO THE SIZE IN WORDS
  630.     JMS I    (STOSTB
  631.     TAD    NCHARS    /PUT IN THE LENGTH TOO
  632.     CIA        /(NEGATIVE)
  633.     JMP    .+3
  634. MOVSL,    JMS I    (SFLD
  635.     TAD I    X10
  636.     JMS I    (PUTWD    /MOVE THE LITERAL TEXT
  637.     ISZ    TEMP3
  638.     JMP    MOVSL
  639. P5,    TAD    TEMP2    /PUT THE FIELD OF THE NEXT
  640.     DCA I    (SLFLD    /ENTRY WHERE IT DOES THE MOST GOOD
  641.     JMP I    (SLLOOP    /DO THE NEXT LITERAL
  642.     /HANDLE DATA NOW
  643.  
  644. DODATA,    TAD    FREELO    /SAVE TOP OF DATA LIST
  645.     DCA    DATTOP
  646.     TAD    DATTOP    /IF EMPTY MAKE TOP=BOTTOM
  647.     DCA    DATPTR
  648.     TAD    DLSIZE
  649.     SNA        /IS ANY DATA ?
  650.     JMP I    (NODATA    /NO
  651.     CLL
  652.     TAD    FREELO    /GET START OF DATA
  653.     DCA    FREELO
  654.     SNL
  655.     JMP    TMDATA    /TOO MUCH DATA
  656. /    TAD    FREELO
  657. /    TAD    (-END-10
  658. /    SZL CLA
  659. /    JMP    TMDATA    /DITTO
  660.     TAD    FREELO    /SAVE IT
  661.     DCA    DATPTR
  662.     TAD    FREELO    /USE X11 TO FILL LIST
  663.     DCA    X11
  664.     TAD    (DATLST-1
  665.     DCA    X10
  666.     CDF    10
  667. DATLUP,    TAD I    X10    /ANY MORE DATA ELEMENTS ?
  668.     SNA
  669.     JMP I    (NODATA
  670.     DCA    TEMP    /SAVE ADDR
  671. P8,    TAD I    X10    /GET NEW FIELD
  672.     DCA    DATAF1
  673. P9,    TAD    DATAF1    /TWICE
  674.     DCA    DATAF2
  675.     TAD    TEMP    /START WITH NEW ELEMENT
  676.     DCA    X10
  677. DATAF1,    CDF    10
  678.     TAD I    TEMP    /GET COUNT
  679.     DCA    TEMP
  680. DATMOV,    TAD I    X10    /GET NEXT WORD
  681.     JMS I    (STOSTB    /MOVE INTO DATA AREA
  682. DATAF2,    CDF    10
  683.     ISZ    TEMP
  684.     JMP    DATMOV
  685.     JMP    DATLUP    /DO NEXT ELEMENT
  686. TMDATA,    DCA    LINEL    /ZERO LINE NUMBER
  687.     DCA    LINEH
  688.     JMS I    (ERMSG    /PRINT ERROR MESSAGE
  689.     TDMSG
  690.     JMP I    (ABORTL
  691.  
  692.     PAGE
  693.     /HANDLE NUMERIC ARRAYS
  694.  
  695. ALLOCA,    TAD    ACNT    /ANY ARRAYS ?
  696.     SNA CLA
  697.     JMP    ALLOCS    /NO
  698.     TAD    (ARAYST    /ALLOCATE ARRAYS
  699.     DCA    X10
  700.     TAD    NASTAD
  701.     DCA    X11
  702. DOARAY,    CDF    10
  703.     TAD I    X10    /GET NEXT ARRAY
  704.     DCA    TEMP
  705.     TAD I    X10    /GET FIRST DIM
  706.     SNA
  707.     TAD    (12    /USE 10 IF NONE
  708.     IAC        /ALLOCATE 0TH ELEMENT
  709.     DCA    TEMP2
  710.     TAD I    X10    /GET SECOND DIM
  711.     SNA
  712.     TAD    (12
  713.     IAC
  714.     DCA    TEMP3
  715.     TAD    TEMP3    /GET READY TO SUBTRACT
  716.     DCA    SUBLO
  717.     DCA    SUBHI
  718.     CDF
  719.     CLL CML RTR
  720.     AND    TEMP    /HOW MANY DIMS ?
  721.     SNA CLA
  722.     JMP    ONLY1    /ONE
  723.     TAD    TEMP2    /PRODUCT OF DIMS
  724.     JMS I    (MUL12
  725.     JMP    TIMES3    /MULT BY 3
  726. ONLY1,    DCA    TEMP3    /ZERO SECOND DIMENSION
  727.     TAD    TEMP2
  728.     DCA    SUBLO
  729. TIMES3,    TAD    (3    /MULT SIZE BY 3
  730.     JMS I    (MUL12
  731.     JMS I    (SUB    /SUBTRACT FROM FREE
  732.     TAD    FREELO
  733.     JMS I    (STOSTB    /SAVE ADDR IN S.T.
  734.     JMS I    (FREEF
  735.     JMS I    (STOSTB
  736.     TAD    TEMP2    /ALSO DIMS
  737.     JMS I    (STOSTB
  738.     TAD    TEMP3
  739.     JMS I    (STOSTB
  740.     ISZ    X10    /SKIP SYMBOL NUMBER
  741.     ISZ    ACNT
  742.     JMP    DOARAY
  743.     /HANDLE STRING ARRAYS
  744.  
  745. ALLOCS,    TAD    SACNT    /ANY STRING ARRAYS
  746.     SNA CLA
  747.     JMP I    (RELCIT    /NO
  748.     TAD    (SARYST+1
  749.     DCA    X10    /ALLOCATE STRING ARRAYS
  750.     TAD    SASTAD
  751.     DCA    X11
  752. DOSARY,    CDF    10
  753.     TAD I    X10
  754.     SNA
  755.     TAD    (12    /USE 10 FOR DIM
  756.     IAC
  757.     DCA    TEMP3
  758.     TAD I    X10    /GET DIM
  759.     SNA
  760.     TAD    (STRMIN    /USE DEFAULT IF NO SIZE SPEC
  761.     DCA    TEMP2
  762.     TAD    TEMP3
  763.     DCA    SUBLO    /PREPARE FOR MULT
  764.     DCA    SUBHI
  765.     CDF
  766.     TAD    TEMP2    /GET NUM WORDS PER STRING
  767.     JMS I    (CVT3F2
  768.     JMS I    (MUL12    /GET ARRAY SIZE
  769.     JMS I    (SUB    /DO SUBTRACTION
  770.     TAD    FREELO    /SAVE ADDR
  771.     JMS I    (STOSTB
  772.     JMS I    (FREEF
  773.     JMS I    (STOSTB
  774.     TAD    NWORDS    /AND SIZE IN WORDS
  775.     JMS I    (STOSTB
  776.     TAD    TEMP3    /AND NUMBER OF STRINGS
  777.     JMS I    (STOSTB
  778.     ISZ    X10    /SKIP NEXT NAME
  779.     ISZ    X10    /AND NEXT SYM NUMBER
  780.     ISZ    SACNT
  781.     JMP    DOSARY
  782.     JMP I    (RELCIT
  783.     /READ FROM THE CODE FILE
  784.  
  785. INWORD,    0
  786.     ISZ    ICOUNT    /ANYTHING IN BUFFER
  787.     JMP    NOREAD    /YASSUH! (Spreak Ingresh troop!)
  788.     JMS I    (7607    /READ NEXT BLOCK
  789.     210
  790.     INBUF    
  791. INBLOK,    0
  792.     JMP I    (IOERR
  793.     ISZ    INBLOK    /BUMP BLOCK COUNTER
  794.     TAD    INBLOK-1/RESET BUFFER POINTER
  795.     DCA    INPTR
  796.     TAD    (-400    /AND COUNTER
  797.     DCA    ICOUNT
  798. NOREAD,    CDF    10
  799.     TAD I    INPTR    /GET WORD
  800.     CDF
  801.     ISZ    INPTR    /BUMP POINTER
  802.     JMP I    INWORD
  803. INPTR,    INBUF
  804.  
  805.     PAGE
  806.     /Relocate GOTO/GOSUB addresses now
  807.     /In order to minimize I/O we use the code in the BCOMP output
  808.     /buffer directly if no more than 1 bufferfull is used.
  809.     /In addition, a test is made if the code will fit above the BCOMP
  810.     /Symbol Table, and if so code is stored directly instead of passing
  811.     /through the temp file first.
  812.  
  813. RELCIT,    DCA I    (PUTWD    /Clear 'loaded' flag
  814.     TAD    LOCTRL    /FIND START OF CODE
  815.     CLL IAC
  816.     DCA    SUBLO    /BY SUBTRACTING
  817.     RAL
  818.     TAD    LOCTRH    /AMOUNT FROM FREE
  819.     DCA    SUBHI
  820.     JMS I    (SUB
  821.     TAD    FREELO    /THIS IS THE START OF THE CODE
  822.     DCA    CODBGN    /MINUS ONE
  823.     TAD    FREEHI    /THIS IS THE FIELD NUMBER
  824.     DCA    CODCDF
  825.     TAD    CODBGN    /SET UP CODE STORE ROUTINE
  826.     DCA    PUTLOC    /STARTING ADDR-1
  827.     TAD    CODCDF
  828.     CLL RTL
  829.     RAL
  830.     TAD    (6201
  831.     DCA I    (PUTCDF    /STARTING CDF
  832.     TAD    LOCTRL    /SET UP PROG SIZE COUNT
  833.     CLL CML CIA
  834.     DCA    CODSZ1    /LOWER COUNT
  835.     RAL
  836.     TAD    LOCTRH
  837.     CIA
  838.     DCA    CODSZ2    /UPPER COUNT
  839.     TAD    BLOCK    /SET UP FOR READ AND WRITE
  840.     DCA I    (OUBLOK
  841.     TAD    BLOCK
  842.     DCA I    (INBLOK
  843.     TAD    (-401
  844.     DCA    OCOUNT
  845.     TAD    OUTFLG    /SEE IF BCOMP DID ANY WRITES TO TEMP FILE
  846.     SNA CLA        /SKP IF YES, FORCE READ AND WRITE
  847.     TAD    (400    /ELSE SET COUNT TO USE STUFF IN BUFFER AS IS
  848.     CMA
  849.     DCA    ICOUNT
  850.     TAD    CODBGN    /COMPARE LOWEST CORE LOC USED BY CODE-1
  851.     CLL CIA
  852.     TAD    NEXT    /TO HIGHEST S.T. ADDR USED
  853.     CLA CML RAL
  854.     TAD I    (PUTCDF    /CODE CDF
  855.     CIA
  856.     TAD    FREFLD    /S.T. CDF PASSED BY BCOMP
  857.     SPA CLA        /SKP IF CODE LOWER THAN SYMBOL TABLE END
  858.     TAD    (PUTWD-OUTWRD    /ELSE WE CAN STORE DIRECTLY AND SAVE SOME I/O
  859.     TAD    (OUTWRD
  860.     DCA    QOUTWRD    /SET THE PROPER OUTPUT ROUTINE POINTER
  861. RELOOP,    JMS I    (INWORD    /GET A WORD OF CODE
  862.     DCA    TEMP
  863.     TAD    (-5000
  864.     TAD    TEMP    /CHECK FOR OPCODE 5000 (GOTO)
  865.     AND    (7400
  866.     SZA CLA
  867.     JMP    NORELC    /NO JUMP
  868.     TAD    TEMP    /REMOVE FIELD BITS
  869.     AND    (340
  870.     CLL RTR
  871.     TAD    CDF0
  872.     DCA    LBLFLD    /FIELD OF LABEL ENTRY
  873.     TAD    TEMP    /ZERO FIELD BITS
  874.     AND    (7437
  875.     DCA    TEMP
  876.     JMS I    (INWORD    /GET REST OF ADDR
  877.     DCA    TEMP2
  878.     JMS I    (CHKLBL    /CHECK FOR UNDEFINED LABEL
  879. LBLFLD,    HLT
  880.     TAD I    TEMP2
  881.     AND    (7    /GET ADDR TO BE RELOCATED
  882.     DCA    LOCHI
  883.     ISZ    TEMP2
  884.     TAD I    TEMP2
  885.     CLL
  886.     TAD    CODBGN    /ADD BASE ADDR
  887. CDF0,    CDF
  888.     DCA    LOCLO    /SAVE LOW PART OF JUMP
  889.     RAL
  890.     TAD    CODCDF    /GET HIGH PART
  891.     TAD    LOCHI
  892.     CLL RTL        /PUT IT INTO CORRECT PLACE
  893.     RTL
  894.     RAL
  895.     TAD    TEMP    /PLUS INSTRUCTION
  896.     JMS I    QOUTWRD
  897.     ISZ    CODSZ1    /BUMP COUNTER
  898.     SKP
  899.     ISZ    CODSZ2    /CAN'T BE LAST WORD
  900.     TAD    LOCLO    /OUTPUT LOW ORDER ADDR
  901.     SKP
  902. NORELC,    TAD    TEMP    /JUST OUTPUT IT
  903. RELOUT,    JMS I    QOUTWRD
  904.     ISZ    CODSZ1    /DOUBLE WORD ISZ BUMP
  905.     JMP    RELOOP
  906.     ISZ    CODSZ2
  907.     JMP    RELOOP
  908.     JMP I    (LOADIT    /DONE RELOCATING, GO LOAD
  909.  
  910.     /PRINT ERROR MESSAGE
  911.  
  912. ERMSG,    0        /PRINT ERROR MESSAGE
  913.     CDF
  914.     TAD I    ERMSG    /GET CODE
  915.     ISZ    ERMSG
  916.     CIF CDF    10
  917.     JMS I    (XERMSG    /CALL FIELD 1 ERROR MESSAGE PRINTER
  918.     JMP I    ERMSG
  919.  
  920.     PAGE
  921. LOADIT,    TAD    PUTWD    /SEE IF CODE IS ALREADY LOADED
  922.     SZA CLA        /SKP IF NO
  923.     JMP    LOADED    /ELSE SKIP READ AND LOAD
  924.     TAD I    (OUDUMP    /TEST IF OUTPUT BUFFER WRITTEN
  925.     SZA CLA        /SKP DUMP IF YES
  926.     JMS I    (OUDUMP    /DUMP LAST BLOCK
  927.     TAD    LOCTRL    /SET UP COUNTER
  928.     CIA CLL CML
  929.     DCA    CODSZ1
  930.     RAL
  931.     TAD    LOCTRH
  932.     CIA
  933.     DCA    CODSZ2
  934.     DCA I    (INPTR    /ASSUME OUTPUT BUFFER USABLE AS IS
  935.     TAD I    (OUDUMP    /TEST IF TEMP FILE WRITES DONE
  936.     SNA CLA        /SKP IF YES
  937.     TAD    (400    /ELSE SET COUNT TO ALLOW READ FROM BUFFER AT ONCE
  938.     CMA        /FORCE NORMAL READ IF MORE THAN ONE BUFFERFULL
  939.     DCA    ICOUNT    /STORE THE INPUT COUNT
  940.     TAD    BLOCK    /SET UP BLOCK NUMBER
  941.     DCA I    (INBLOK
  942. LODLUP,    JMS I    (INWORD    /GET A WORD FROM TEMP FILE (OR BUFFER)
  943.     JMS    PUTWD    /PUT IN CORE NOW
  944.     ISZ    CODSZ1    /MORE CODE ?
  945.     JMP    LODLUP    /YES
  946.     ISZ    CODSZ2
  947.     JMP    LODLUP    /YES
  948. LOADED,    TAD    CODCDF    /SETUP CODE CDF
  949.     CLL RTL
  950.     RAL
  951.     TAD    CDFZER
  952.     DCA    CODCDF
  953. CLRLUP,    TAD    CLREND    /IS THIS THE END OF CLEAR ?
  954.     TAD    PUTLOC
  955.     SZA CLA
  956.     JMP    MORCLR    /NO, KEEP GOING
  957.     TAD    CLRFLD    /DO FIELDS MATCH ?
  958.     TAD    PUTCDF
  959.     SNA CLA
  960.     JMP    DONCLR    /YES, ARRAYS ARE CLEARED
  961. MORCLR,    JMS    PUTWD
  962.     JMP    CLRLUP
  963. DONCLR,    JMS    MOVFIN    /MOVE FINI PAGE INTO 7000-7177
  964.     JMP I    (7000    /GO READ BRTS.SV
  965.  
  966.     /BUMP POINTER AND STORE WORD IN CORE
  967.  
  968. PUTWD,    0
  969.     ISZ    PUTLOC    /PRE INCREMENT POINTER
  970.     JMP    PUTCDF    /JMP IF FIELD NOT CROSSED
  971.     DCA    PUTTMP    /SAVE WORD
  972.     TAD    PUTCDF    /PROPAGATE CARRY INTO CDF
  973.     TAD    (10
  974.     DCA    PUTCDF
  975.     TAD    PUTTMP    /GET WORD BACK
  976. PUTCDF,    HLT
  977.     DCA I    PUTLOC
  978.     CDF
  979.     JMP I    PUTWD
  980. PUTTMP,    0
  981.     /MAKE A CDF FROM FREEHI
  982.  
  983. FREEF,    0
  984.     TAD    FREEHI
  985.     CLL RTL
  986.     RAL
  987.     TAD    CDFZER
  988.     JMP I    FREEF
  989.  
  990. ABORTL,    JMS    MOVFIN    /PUT FINI PAGE INTO 7000-7177
  991.             /AND ABORT THE RUN
  992.     JMP I    (ABORT-FINI+7000
  993.  
  994. MOVFIN,    0        /FINI PAGE MOVER
  995. CDFZER,    CDF
  996.     TAD    (FINI-1    /MOVE INT READING CODE
  997.     DCA    X10
  998.     TAD    (6777    /INTO 7000
  999.     DCA    X11
  1000.     TAD    (-200
  1001.     DCA    TEMP    /PUT CORRECT COUNT HERE
  1002.     TAD I    X10
  1003.     DCA I    X11    /MOVE CODE
  1004.     ISZ    TEMP
  1005.     JMP    .-3
  1006.     JMP I    MOVFIN
  1007.  
  1008.     /Large core image save problem fix
  1009.  
  1010. PATCHI,    CLA STL RTL    /TEST IF ABOUT TO SAVE FIELD 1 OR 2
  1011.     TAD I    (FLDCNT&177+200
  1012.     CLL RAR
  1013.     SZA CLA
  1014.     JMP    FLDN    /JMP IF NOT FIELD 1 OR 2
  1015.     SZL        /LINK ON IF FIELD 1
  1016.     JMP    FLD1    /JMP IF FIELD 1 TO LEAVE LAST PAGE ALONE
  1017.     TAD I    (TDFLAG&177+200 /IF FIELD 2, TEST IF 2 PAGE SYSTEM HANDLER
  1018.     SZA CLA        /SKP IF NOT 2 PAGE SYSTEM HANDLER, 27600 IS USED
  1019. FLD1,    TAD    (3700
  1020. FLDN,    TAD    TEMP
  1021.     JMP I    (RETN&177+200
  1022.  
  1023.     PAGE
  1024.     /ROUTINES AT START OF THIS PAGE ARE RELOCATED BY "MOVFIN"
  1025.     /TO *7000 JUST PRIOR TO EXECUTION (EDITOR OVERLAYS HERE, ETC)
  1026.  
  1027. FINI,    TAD I    (ERMSG    /ANY ERRORS ?
  1028.     SZA CLA
  1029.     JMP    ABORT    /YES, DON'T RUN IT
  1030.     TAD    BRTS    /READ IN BRTS FIELD 1 SECTION
  1031.     DCA    BRTSB
  1032.     JMS I    (7607
  1033.     BRTSZ1+10
  1034.     BRTLD1        /INTO HERE
  1035. BRTSB,    0
  1036.     JMP    IOERR
  1037.     CIF    10    /NOW JMS TO FIELD 1 STARTUP CODE
  1038.     TAD    BRTSB    /PASS STARTING BLOCK OF BRTS IN AC
  1039.     JMS I    (BRTBG1
  1040.     STCDF        /CALL+1 CONTAINS ADDR OF BRTS PARAMETERS
  1041.  
  1042. IOERR,    DCA    LINEL    /ZERO LINE NUMBER
  1043.     JMS I    (ERMSG    /PRINT MESSAGE
  1044.     IOMSG
  1045. ABORT,    TAD    (20    /PASS FIELD BITS TO RESTORE HANDLER CIF/CDFS
  1046.     JMS I    (SWAP    /SWAP OS8 BACK
  1047.     TAD    (4207    /NOW REMOVE ^C HOOKS FROM SYS:
  1048.     DCA I    (7600
  1049.     TAD    (6213
  1050.     DCA I    (7605
  1051.     JMS I    (200    /CHECK OUT W/ CI BUILDER (RELOCATED MAKECI ROUTINE)
  1052.     TAD    ABORTX    /CALLED VIA CHAIN ?(FROM EDIT)
  1053.     SNA
  1054.     JMP I    (7600    /NO, RETURN TO OS8
  1055.     DCA    EDTBLK    /YES, SAVE EDITOR START
  1056.     JMS I    (7607    /READ IN EDITOR
  1057.     EDTSIZ        /THIS MUCH
  1058.     0
  1059. OWTEMP,
  1060. EDTBLK,    0
  1061.     JMP I    (7605    /ERROR
  1062.     JMP I    (EDTBGN    /GO START EDITOR
  1063.  
  1064.     /FOLLOWING ROUTINES EXECUTE IN THIS PAGE NORMALLY
  1065.  
  1066.     /MULTIPLY 12 BITS AND 24 BITS
  1067.  
  1068. MUL12,    0
  1069.     DCA    AC3    /SAVE 12 BIT THING
  1070.     DCA    AC2    /CLEAR REST OF AC
  1071.     DCA    AC1
  1072.     TAD    (-15    /ONLY TEST 12 BITS
  1073.     DCA    SC
  1074.     JMP    MULBGN
  1075. MULLUP,    SNL        /WAS BIT ON ?
  1076.     JMP    NOADD    /NO, DON'T ADD
  1077.     TAD    SUBLO    /ADD TO HIGH ORDER 2/3'S OF AC
  1078.     TAD    AC2
  1079.     DCA    AC2
  1080.     CML RAL
  1081.     TAD    SUBHI
  1082. NOADD,    TAD    AC1    /SHIFT AC RIGHT
  1083.     CLL RAR
  1084.     DCA    AC1
  1085.     TAD    AC2
  1086.     RAR
  1087.     DCA    AC2
  1088. MULBGN,    TAD    AC3
  1089. FTEMP,    RAR
  1090. FTEMP2,    DCA    AC3
  1091. FCNT,    ISZ    SC    /BUMP SHIFT COUNTER
  1092.     JMP    MULLUP
  1093.     TAD    AC2    /ANSWER IS LOWER 2/3'S OF AC
  1094.     DCA    SUBHI
  1095.     TAD    AC3
  1096.     DCA    SUBLO
  1097.     JMP I    MUL12
  1098.  
  1099.     /OUTPUT WORD TO TEMP FILE
  1100.  
  1101. OUTWRD,    0
  1102.     ISZ    OCOUNT    /ANY ROOM ?
  1103.     JMP    NOWRIT    /YES
  1104.     DCA    OWTEMP    /SAVE WORD
  1105.     JMS    OUDUMP    /WRITE BLOCK
  1106.     ISZ    OUBLOK    /BUMP BLOCK NUMBER
  1107.     TAD    OUBLOK-1/RESET BUFFER POINTER
  1108.     DCA    OUPTR
  1109.     TAD    (-400
  1110.     DCA    OCOUNT    /AND COUNT
  1111.     TAD    OWTEMP    /RESTORE AC
  1112. NOWRIT,    CDF    10
  1113.     DCA I    OUPTR    /INTO BUFFER
  1114.     CDF
  1115.     ISZ    OUPTR
  1116.     JMP I    OUTWRD
  1117. OUPTR,    0
  1118. OUDUMP,    0        /WRITE BLOCK
  1119.     JMS I    (7607    /WRITE BLOCK
  1120.     4210
  1121.     0
  1122. OUBLOK,    0
  1123.     JMP    IOERR
  1124.     JMP I    OUDUMP
  1125.     /CONVERT CHAR COUNT TO NUMBER OF 3/2 WORDS+1
  1126.     /CALCULATES 1+INT(2*(N+1)/3)
  1127.  
  1128. CVT3F2,    0
  1129.     CLL IAC        /CALCULATE 2*(N+1)
  1130.     CLL RAL        /LEAVE A CLEAR LINK
  1131.     DCA    AC1
  1132.     TAD    (-10    /SET FOR 8 STAGE SUBTRACT-SHIFT DIVIDE
  1133.     DCA    SC
  1134.     TAD    AC1    /GET 2*(N+1)
  1135. CVTLP,    STL
  1136.     TAD    (4000-600
  1137.     SMA        /SIGN BIT COMPLEMENTS IF WENT IN
  1138.     TAD    (4000+600 /RESTORE AND COMPLEMENT OTHERWISE
  1139.     RAL        /SHIFT IN QUOT BIT AND DISCARD SIGN BIT
  1140.     ISZ    SC
  1141.     JMP    CVTLP    /ITERATE
  1142.     AND    (377    /NOW MASK OUT REMAINDER
  1143.     IAC        /ALLOW FOR SIZE WORD
  1144.     DCA    NWORDS    /SAVE THE TOTAL SIZE
  1145.     TAD    NWORDS    /RETURN IT IN AC
  1146.     JMP I    CVT3F2    /--RETURN--
  1147.  
  1148.     END=FINI+200
  1149.  
  1150.     PAGE
  1151.     /ROUTINE USED TO INITIALIZE LOADER
  1152.  
  1153. IMAGE,    0
  1154.     TAD    (ABORTL    /MODIFY ^C HOOK POINTER FOR BLOAD TRAP ROUTINE
  1155.     DCA    BABORT
  1156.     JMS I    (ERMOVE    /SHUFFLE ERROR MESSAGE PRINTER TO FIELD 1
  1157.     CDF 10
  1158.     TAD I    (INFO+2    /GET STARTING BLOCK OF BLOAD
  1159.     TAD    (OVSEP    /OFFSET TO BLOAD OVERLAY
  1160.     CDF
  1161.     DCA I    (LDRBLK    /STORE INLINE
  1162.     CDF    10
  1163.     TAD I    (CDOPT4    /GET OPTION BITS [MNO PQR STU VWX]
  1164.     CDF
  1165.     AND    (4    /TEST FOR /V
  1166.     SZA CLA
  1167.     JMS I    (VERNUM    /JMS IF YES TO EXHIBIT BLOAD VERSION
  1168.     CDF 10
  1169.     TAD I    (CDOPT3    /GET OPTION BITS [ABC DEF GHI JKL]
  1170.     CDF
  1171.     AND    (40    /TEST IF /G SET
  1172.     SZA CLA        /SKP IF NO, COMPILE ONLY
  1173.     JMP    LSTART    /ELSE START LOADER NOW
  1174.     TAD    HIFLD
  1175.     CIA
  1176.     DCA I    (FLDCNT    /INIT CI BUILDER
  1177.     TAD I    (FLDCNT
  1178.     DCA I    (MYCORE    /AND CI STARTER
  1179.     CDF 10
  1180.     DCA I    (CDOPT6    /CLEAR =N BITS
  1181.     DCA I    (CDOPT3    /AND EARLY OPTIONS
  1182.     TAD I    (CDOPT4    /GET OPTION BITS [MNO PQR STU VWX]
  1183.     CDF
  1184.     RTL
  1185.     SZL CLA        /HAVE N SWITCH?
  1186.     JMP    NOTDSY    /DISALLOW RUNNING ON 2 PAGE SYSTEM HANDLER SYSTEM IF YES
  1187.     TAD    HIFLD
  1188.     CLL RAR
  1189.     SNA CLA        /SKP IF OVER 8K CORE
  1190.     JMP    NOTDSY    /ELSE JMP AROUND EXTRA PAGE ALLOCATION
  1191.     DCA I    (GOTTD    /FORCE EXTRA PAGE
  1192.     CLA IAC        /FLAG THE EXTRA PAGE
  1193. NOTDSY,    DCA I    (TDFLAG
  1194.     CMA
  1195.     DCA I    (ERMSG    /FORCE LOAD ABORT
  1196. LSTART,    TAD    (BLDCI-1    /MOVE CI BUILDER
  1197.     DCA    X10        /INTO LOW CORE
  1198.     TAD    (MAKECI-1
  1199.     DCA    X11
  1200.     TAD I    X11
  1201.     DCA I    X10
  1202.     ISZ    ICTR
  1203.     JMP    .-3
  1204.     TAD    HIFLD    /START OF BLOAD V1
  1205.     DCA    FREEHI
  1206.     JMP I    IMAGE    /RETURN TO LOADER
  1207.  
  1208. ICTR,    -200
  1209.  
  1210.     PAGE
  1211.     CCB=1000    /LOC TO START BUILDING CCB
  1212.  
  1213. MAKECI,    0        /THIS PAGE GETS MOVED TO *200
  1214.     NOP        /NOP'D FOR VT278
  1215.     NOP        /NOP'D FOR VT278
  1216.     ISZ I    (ERMSG    /WHY ARE WE HERE?
  1217.     JMP    BOSFIX    /GENUINE ABORTION
  1218.     TAD    (CCB-1    /INITIALIZE FIRST 4 WORDS OF CCB
  1219.     DCA    X10
  1220.     DCA I    X10    /ZERO SEGMENT COUNT
  1221.     TAD    (CIF CDF /SET CIF CDF ENTRY POINT
  1222.     DCA I    X10
  1223.     TAD    PCISTRT    /ENTRY ADDR
  1224.     DCA I    X10
  1225.     TAD    (1000    /JSW BITS
  1226.     DCA I    X10
  1227. /    TAD    TDFLAG    /TEST IF SPACE ALLOCATED FOR 2 PAGE SYSTEM HANDLER
  1228. /    SZA CLA        /SKP IF NO
  1229. /    TAD    (3700    /SET FLAG TO DECREMENT HIGHEST CCB FIELD SEGMEMT 1 PAGE
  1230. /    DCA    HIDECR    / IF YES
  1231. CCSEGS,    TAD    FLDCNT    /GET MINUS CURRENT FIELD
  1232.     CIA        /MAKE POSITIVE
  1233.     CLL RAL        /SHIFT TO AC6-8
  1234.     RTL
  1235.     DCA    TEMP    /SAVE
  1236.     TAD    CODCDF    /GET FIELD BITS OF LOWEST FIELD USED
  1237.     AND    (70
  1238.     CLL CIA
  1239.     TAD    TEMP    /COMPARE TO CURRENT FIELD
  1240.     SNL        /SKP IF CURRENT FIELD GE LOWEST FIELD
  1241.     JMP    NOCODE    /ELSE FIELD IS UNUSED
  1242.     SZA CLA        /SKP IF LOWEST FIELD
  1243.     JMP    ALLCODE    /JMP IF NOT, SAVE WHOLE FIELD
  1244.     TAD    CODBGN    /ISOLATE BLOCK BITS IN AC0-3
  1245.     AND    (7400
  1246.     DCA    TEMP2    /SAVE THEM
  1247.     TAD    TEMP2    /FORM POSITIVE PAGE COUNT
  1248.     CIA
  1249.     CLL RAR        /IN AC1-5
  1250.     TAD    TEMP    /ADD TO FIELD BITS
  1251.     DCA    TEMP
  1252.     TAD    TEMP2    /PICK UP START OF BLOCK IN CORE
  1253. ALLCODE,DCA I    X10    /STORE THE SEGMENT STARTING ADDR
  1254.     TAD    TEMP    /PICK UP PAGE COUNT/FIELD WORD
  1255. /    TAD    HIDECR    /DECREMENT PAGE COUNT IF SECOND SYS HANDLER PAGE ALLOCATED
  1256. /    AND    (3777    /MASK OUT SIGN BIT
  1257.     JMP I    (PATCHI
  1258. RETN,    AND    (3777    /MASK OUT SIGN BIT
  1259.     DCA I    X10    /NOW STORE PAGE COUNT/FIELD WORD
  1260. /    DCA    HIDECR    /ZERO OUT THE HIGH FIELD FLAG
  1261.     ISZ I    (CCB    /TALLY THE SEGMENT
  1262. NOCODE,    CLA CLL
  1263.     ISZ    FLDCNT    /NEXT FIELD ZERO?
  1264.     JMP    CCSEGS    /NO: LOOP
  1265.     TAD    PCISTRT    /STORE ADDR OF OUR STARTUP CODE
  1266.     DCA I    X10
  1267.     TAD    O300    /NOW THE PAGE COUNT/FIELD WORD
  1268.     DCA I    X10
  1269.     TAD I    (CCB
  1270.     CMA
  1271.     DCA I    (CCB    /NEGATE SEG COUNT
  1272.     JMS I    (7607    /READ CI STARTER
  1273. O300,    300        /FROM END OF BLOAD.SV
  1274. PCISTRT,CISTRT        /INTO HI CORE
  1275. LDRBLK,    0        /INIT BY "IMAGE"
  1276.     HLT        /CRASH SYS ON ERROR HERE
  1277.     TAD    (1000    /SET THE JSW NON RESTARTABLE NOW!
  1278.     DCA I    (JSW
  1279.     TAD    TDFLAG    /PASS 2 PAGE SYSTEM HANDLER FLAG
  1280.     DCA I    (FLAGTD
  1281.     TAD    MYCORE
  1282.     DCA I    (NOCORE    /AND CORE LIMIT
  1283.     TAD    (STCDF-1 /SAVE 10 KEY LOCATIONS
  1284.     DCA    X10
  1285.     TAD    (KEYLOC-1
  1286.     DCA    X11
  1287.     TAD I    X10
  1288.     DCA I    X11
  1289.     ISZ    MCICNT
  1290.     JMP    .-3
  1291.     JMS I    (7607    /CALL SYS HANDLER
  1292.     4200        /TO WRITE CCB
  1293.     CCB-200        /(AND PRECEDING PG)
  1294.     37        /INTO SCRATCH BLOCK
  1295.     HLT        /CRASH SYSTEM ON ERROR HERE
  1296.     JMP I    (7600    /FINAL SUCCESSFUL EXIT TO OS/8 -- IMAGE IS LOADED
  1297.  
  1298. MCICNT,    -12
  1299. FLDCNT,    -7
  1300. TDFLAG,    1        /ZERO IF BIG SYSTEM HANDLER ILLEGAL AT RUNTIME
  1301.             /NONZERO IF SPACE WAS ALLOCATED FOR IT
  1302. MYCORE,    0
  1303. /HIDECR,0        /SET TO 3700 TO DECREMENT PAGE COUNT OF HIGHEST
  1304. /            /MEMORY FIELD USED FOR 2 PAGE SYSTEM HANDLERS
  1305.     /RESTORE BATCH STATE AND EXIT IF ANY COMPILE ERROR
  1306.  
  1307. BOSFIX,    TAD I    (JSW    /TEST IF BATCH WAS UNTOUCHED
  1308.     AND    (400
  1309.     SNA CLA        /SKP IF YES, NO NEED TO RESTORE BATCH STATE
  1310.     TAD I     (BIPCCL
  1311.     RAL
  1312.     SMA CLA
  1313.     JMP I    MAKECI    /BATCH NOT RUNNING
  1314.     TAD I    (BIPCCL
  1315.     AND    (70
  1316.     TAD    CDFZRO
  1317.     DCA    BOSCDF    /CDF TO BATCH FIELD
  1318. BOSLUP,    CDF 10
  1319.     TAD I    BOSPT1    /GET BATCH WRDS
  1320. BOSCDF,    HLT
  1321.     DCA I    BOSPT2    /BACK INTO POSITION
  1322. CDFZRO,    CDF
  1323.     ISZ    BOSPT1
  1324.     ISZ    BOSPT2
  1325.     JMP    BOSLUP
  1326.     JMP I    MAKECI
  1327.  
  1328. BOSPT1,    7600
  1329. BOSPT2,    7774
  1330.  
  1331.     PAGE
  1332.     /ENTRY ADDR FOR .R BLOAD JUST PRINTS VERSION NUMBER AND EXITS
  1333.  
  1334.     TLS
  1335.     TSF
  1336.     JMP    .-1
  1337.     CLA CLL
  1338.     JMS    VERNUM    /PRINT THE VERSION
  1339.     JMP I    (7605    /RETURN TO OS/8
  1340.  
  1341.     /PRINT VERSION
  1342.  
  1343. VERNUM,    0
  1344.     TAD    (VTEXT
  1345.     DCA    TEMP
  1346. MOREV,    TAD I    TEMP
  1347.     SNA
  1348.     JMP    VOUT
  1349.     CLL RTR
  1350.     RTR
  1351.     RTR
  1352.     JMS    TTY
  1353.     TAD I TEMP
  1354.     JMS    TTY
  1355.     ISZ    TEMP
  1356.     JMP    MOREV
  1357. VOUT,    TAD    (15
  1358.     JMS    TTX
  1359.     TAD    (12
  1360.     JMS    TTX
  1361.     JMP I    VERNUM
  1362.  
  1363. VTEXT,    TEXT    /BLOAD  V /
  1364.     *.-1
  1365. VERLOC,    VERSON^100+PATCH
  1366.     0
  1367.  
  1368.  
  1369. TTY,    0
  1370.     TAD    (40
  1371.     AND    (77
  1372.     TAD    (40
  1373.     JMS    TTX
  1374.     JMP I    TTY
  1375.  
  1376. TTX,    0
  1377.     TLS
  1378.     TSF
  1379.     JMP    .-1
  1380.     CLA
  1381.     JMP I    TTX
  1382.  
  1383.     /ONCE ONLY ROUTINE TO MOVE ERROR MESSAGE PRINTER TO FIELD 1
  1384.  
  1385. ERMOVE,    0
  1386. ERLUP,    TAD I    ERAD1
  1387.     CDF    10
  1388.     DCA I    ERAD2
  1389.     CDF
  1390.     ISZ    ERAD1
  1391.     ISZ    ERAD2
  1392.     ISZ    ERCNT
  1393.     JMP    ERLUP
  1394.     JMP I    ERMOVE
  1395. ERAD1,    ERLOC0
  1396. ERAD2,    XERMSG
  1397. ERCNT,    -400
  1398.  
  1399.     PAGE
  1400. ERLOC0,
  1401.     RELOC    XERMSG
  1402.  
  1403.     /ERROR MESSAGE PRINTER
  1404.     /EXECUTES (IF AT ALL) IN FIELD 1 IN BCOMP TEMP FILE OUTPUT BUFFER
  1405.  
  1406. XERMSG,    0
  1407.     DCA    EADDR    /STORE MESSAGE POINTER PASSED IN AC
  1408.     TAD    (77    /FIRST PRINT "?"
  1409.     JMS    SPCH
  1410.     JMS    SCRIBE    /WRITE IT
  1411. EADDR,    0
  1412.     CDF
  1413.     TAD I    (LINEH    /SEE IF LINE NUMBER PRESENT
  1414.     SNA
  1415.     TAD I    (LINEL
  1416.     CDF    10
  1417.     SNA CLA
  1418.     JMP    NOLINO    /JMP IF NO, DON'T PRINT IT (IGNORES LINE 0)
  1419.     JMS    SCRIBE    /WRITE "at Line"
  1420.     ATLINE
  1421.     CDF
  1422.     DCA    SPCH    /Clear leading zero flag
  1423.     TAD I    (LINEH    /PRINT HIGH ORDER DIGITS
  1424.     JMS    PSN
  1425.     CDF
  1426.     TAD I    (LINEL    /PRINT LOW ORDER DIGITS
  1427.     JMS    PSN
  1428. NOLINO,    TAD    (15    /NOW PRINT CR,LF
  1429.     JMS    SPCH
  1430.     TAD    (12
  1431.     JMS    SPCH
  1432.     CIF CDF        /RETURN TO FIELD 0
  1433.     JMP I    XERMSG
  1434.  
  1435. SCRIBE,    0
  1436.     TAD I    SCRIBE    /GET MESSAGE ADDR
  1437.     ISZ    SCRIBE
  1438.     DCA    MSGPTR
  1439. SCRLP,    TAD I    MSGPTR
  1440.     SNA        /SKP IF NOT EOM
  1441.     JMP I    SCRIBE    /ELSE EXIT
  1442.     JMS    SPCH
  1443.     ISZ    MSGPTR
  1444.     JMP    SCRLP
  1445. MSGPTR,    0
  1446.  
  1447. SPCH,    0
  1448.     TLS
  1449.     TSF
  1450.     JMP    .-1
  1451.     CLA
  1452.     JMP I    SPCH
  1453.  
  1454. PSN,    0
  1455.     CDF    10
  1456.     DCA    LWORD    /SAVE LINE NUMBER WORD
  1457.     AC7775        /DO 3 DIGITS
  1458.     DCA    LCNTR
  1459. /    DCA    SPCH    /CLEAR LZ SWITCH
  1460. PSNLP,    TAD    LWORD    /SHIFT NEXT DIGIT UP
  1461.     RTL
  1462.     RTL
  1463.     DCA    LWORD
  1464.     TAD    LWORD
  1465.     RAL
  1466.     AND    (17
  1467.     SZA
  1468.     JMP    NOZERO    /PRINT IT IF NONZERO
  1469.     TAD    SPCH    /ANY PREV DIGITS
  1470.     SNA CLA
  1471.     JMP    LEAD0    /NO, IGNORE IT
  1472. NOZERO,    TAD    (60
  1473.     JMS    SPCH    /OUTPUT DIGIT
  1474. LEAD0,    ISZ    LCNTR
  1475.     JMP    PSNLP
  1476.     JMP I    PSN
  1477. LWORD,    0
  1478. LCNTR,    0
  1479.  
  1480. ATLINE,    ":;" ;0
  1481.     PAGE
  1482. UFMSG,    "U;"n;"c;"l;"o;"s;"e;"d;" ;"F;"O;"R;"-;"N;"E;"X;"T;" ;"L;"o;"o;"p;0
  1483. TBMSG,    "P;"r;"o;"g;"r;"a;"m;" ;"t;"o;"o;" ;"b;"i;"g;" ;"t;"o;" ;"r;"u;"n;0
  1484. TDMSG,    "T;"o;"o;" ;"m;"u;"c;"h;" ;"D;"A;"T;"A;0
  1485. USMSG,    "U;"n;"d;"e;"f;"i;"n;"e;"d;" ;"L;"i;"n;"e;" ;"N;"u;"m;"b;"e;"r;0
  1486. IOMSG,    "I;"/;"O;" ;"E;"r;"r;"o;"r;" ;"o;"n;" ;"S;"Y;"S;":;0
  1487.  
  1488.     PAGE
  1489.  
  1490.     RELOC
  1491.     /MAIN ENTRY POINT FOR PRE COMPILED PROGRAMS
  1492.  
  1493.     *7000
  1494.  
  1495. CISTRT,    JMP    RUNNED    /JMP IF DIRECT RUN
  1496.     CDF    10    /ELSE SEE IF BRTS PASSED MAGIC = OPTION
  1497.     TAD I    (CDOPT2    /IN HIGH ORDER BITS
  1498.     TAD    (-MAGIC
  1499.     SNA CLA        /SKP IF NO, DO FULL BASIC SYSTEM INITIALIZATION
  1500.     JMP I    (CHAIN    /JMP IF YES FOR FAST STARTUP
  1501. RUNNED,    TAD    (INFO-1    /INITIALIZE SYSTEM INFORMATION AREA ON RUN
  1502.     DCA    X10
  1503.     TAD    (NAMLST-1
  1504.     DCA    X11
  1505.     CDF    10
  1506.     DCA I    X10    /ZERO EDITOR BLOCK NUMBER
  1507.     CDF
  1508.     CIF 10
  1509.     JMS I (7700
  1510.     10        /USRIN
  1511. FINDSV,    TAD I    X11    /LOOKUP SOME SAVE FILES
  1512.     SNA
  1513.     JMP    USROUT    /DONE, KICK USR OUT
  1514.     DCA    XXXXSV    /SAVE POINTER TO NAME
  1515.     CLA IAC        /THEY'RE ON SYS
  1516.     CIF    10
  1517.     JMS I    (200
  1518.     2
  1519. XXXXSV,    0
  1520.     0
  1521.     JMP    NOTFND    /JMP IF NOT FOUND
  1522.     ISZ    X11    /BUMP TO NEXT FILE
  1523.     TAD    XXXXSV    /GET STARTING BLOCK
  1524.     IAC        /PLUS 1
  1525. ZERFIL,    CDF    10
  1526.     DCA I    X10    /INTO INFO AREA
  1527.     CDF
  1528.     JMP    FINDSV    /LOOP
  1529. NOTFND,    ISZ I    X11    /SKP IF ESSENTIAL SYSTEM COMPONENT
  1530.     JMP    ZERFIL    /JMP BACK IF NOT
  1531.     JMS I    (ERRORX    /TAKE ERROR EXIT
  1532.     1        /INCOMPLETE SYSTEM
  1533. USROUT,    CIF    10
  1534.     JMS I    (200
  1535.     11        /USR OUT
  1536.     JMP I    (CHAIN    /JMP TO CONTINUE STARTUP PROCESSING
  1537.  
  1538. NAMLST,    BCOMPN;0    /NOTE THAT BRTS MUST CHECK FOR BOTH
  1539.     BLOADN;0    /BCOMP AND BLOAD BEFORE ATTEMPTING A CHAIN TO BCOMP
  1540.     BRTSN;-1
  1541.     BOVN;-1
  1542.     0
  1543. BRTSN,    FILENAME BRTS.SV
  1544. BOVN,    FILENAME BASIC.OV
  1545. BCOMPN,    FILENAME BCOMP.SV
  1546. BLOADN,    FILENAME BLOAD.SV
  1547. CORE,    0
  1548.     TAD I    (BIPCCL
  1549.     AND COR70
  1550.     CLL RAR
  1551.     RTR
  1552.     SZA        /IS THERE A SYSTEM VALUE?
  1553.     JMP I CORE    /YES: USE IT
  1554. COR0,    CDF
  1555.     TAD    CORSIZ
  1556.     RTL
  1557.     RAL
  1558.     AND    COR70
  1559.     TAD    COREX
  1560.     DCA    .+1
  1561. COR1,    CDF
  1562.     TAD I    CORLOC
  1563. COR2,    NOP
  1564.     DCA    COR1
  1565.     TAD    COR2
  1566.     DCA I    CORLOC
  1567. COR70,    70
  1568.     TAD I    CORLOC
  1569. CORX,    7400
  1570.     TAD    CORX
  1571.     TAD    CORV
  1572.     SZA CLA
  1573.     JMP    COREX
  1574.     TAD    COR1
  1575.     DCA I    CORLOC
  1576.     ISZ    CORSIZ
  1577.     JMP    COR0
  1578. COREX,    CDF
  1579.     CLA CMA        /HI FIELD IS #FIELDS-1
  1580.     TAD    CORSIZ
  1581.     JMP I CORE
  1582. CORLOC,    CORX
  1583. CORV,    1400
  1584. CORSIZ,    1
  1585.  
  1586.     PAGE
  1587.     /CONTINUATION OF SAVE IMAGE STARTUP
  1588.  
  1589. CHAIN,    CDF    10
  1590.     DCA I    (CDOPT2
  1591.     DCA I    (CDOPT3    /ZERO OUT CD OPTION BITS
  1592.     DCA I    (CDOPT4
  1593.     DCA I    (CDOPT5
  1594.     TAD I    (INFO+3    /GET BRTS START BLOCK FROM INFORMATION AREA
  1595.     CDF
  1596.     DCA    BRTSST    /STORE INLINE
  1597.     JMS I    (7607    /NOW READ FIELD 1 SEGMENT IN
  1598.     BRTSZ1+10
  1599.     BRTLD1        /INTO HERE
  1600. BRTSST,    0
  1601.     JMS I    (ERRORX    /TAKE ERROR EXIT ON ERROR HERE
  1602.     4
  1603.     JMS I    (CORE    /GET HOST CORE SIZE
  1604.     TAD    NOCORE    /COMPARE TO REQUIRED CORE
  1605.     SPA CLA        /SKP IF HOST GE REQUIRED
  1606.     JMS I    (ERRORX    /ELSE PRINT USER ERROR MESSAGE
  1607.     3
  1608.     AC7775        /NOW SEE IF 2 PAGE SYSTEM HANDLER
  1609.     TAD I    (7612
  1610.     SZA CLA
  1611.     JMP    NOT2PG    /JMP IF NO
  1612.     TAD    FLAGTD    /IF YES, SEE IF SPACE ALLOCATED FOR IT
  1613.     SNA CLA
  1614.     JMS I    (ERRORX    /JMS IF NO TO GIVE ERROR
  1615.     2
  1616.     TAD    KEYLOC    /GET CDF TO HIGH CORE
  1617.     DCA    CDFTOP    /STORE INLINE
  1618. SWPLOOP,CDF    20    /SWAP SECOND PAGE OF HANDLER OUT NOW
  1619.     TAD I    SPTR
  1620.     DCA    STMP1
  1621. CDFTOP,    HLT
  1622.     TAD I    SPTR
  1623.     DCA    STMP2
  1624.     TAD    STMP1    /MOVE HANDLER WORD UP TO HIGH FIELD
  1625.     DCA I    SPTR
  1626.     CDF    20
  1627.     TAD    STMP2    /MOVE HIGH FIELD WORD TO FIELD 2
  1628.     DCA I    SPTR
  1629.     ISZ    SPTR
  1630.     JMP    SWPLOOP
  1631.     CDF        /NOW ADJUST THE HANDLER CIF/CDF'S TO MATCH
  1632.     TAD    CDFTOP
  1633.     AND    (70    /ISOLATE FIELD BITS
  1634.     DCA    CDFTOP
  1635. ADJLUP,    TAD I    SPTR0
  1636.     TAD    (-6300    /RANGE CHECK WORD FOR CIF/CDF N0
  1637.     CLL
  1638.     TAD    (70
  1639.     SNL CLA
  1640.     JMP    NOADJ    /JMP IF NOT CIF/CDF
  1641.     TAD I    SPTR0    /ELSE FIX DF
  1642.     AND    (7707
  1643.     TAD    CDFTOP
  1644.     DCA I    SPTR0
  1645. NOADJ,    ISZ    SPTR0
  1646.     JMP    ADJLUP    /LOOP UP TO END OF FIELD
  1647. NOT2PG,    TAD    KEYLOC+SWPINF-STCDF /SET LOW BIT INDICATING 17600 NOT SWAPPED
  1648.     RAR
  1649.     STL RAL
  1650.     DCA    KEYLOC+SWPINF-STCDF
  1651.     TAD I    (BIPCCL    /SEE IF BATCH RUNNING NOW
  1652.     RAL
  1653.     SMA CLA
  1654.     JMP    NOBAT    /JMP IF NO
  1655.     TAD I    (BIPCCL
  1656.     AND    (70    /ELSE GET SET TO SAVE BATCH STATE
  1657.     TAD    CDFO
  1658.     DCA    BATCDF    /STORE INLINE
  1659. BATCDF,    HLT
  1660.     TAD I    BATAD1    /GET A WORD
  1661.     CDF    10
  1662.     DCA I    BATAD2    /SAVE A WORD
  1663.     ISZ    BATAD2
  1664.     ISZ    BATAD1
  1665.     JMP    BATCDF
  1666. CDFO,    CDF
  1667. NOBAT,    TAD    BRTSST    /PASS STARTING BLOCK OF BRTS IN AC
  1668.     CIF    10    /NOW JMS TO FIELD 1 STARTUP OF BRTS
  1669.     JMS I    (BRTBG1
  1670.     KEYLOC        /CALL+1 CONTAINS PTR TO PARAMETER BLOCK FOR BRTS
  1671.  
  1672. NOCORE,    0
  1673. FLAGTD,    1
  1674. KEYLOC,    ZBLOCK    12
  1675. SPTR0,    7635        /POINTER FOR HANDLER FIELD FIXES
  1676. STMP1,    0
  1677. STMP2,    0
  1678. SPTR,    7600
  1679. BATAD1,    7774
  1680. BATAD2,    7600
  1681.  
  1682.     PAGE
  1683.     /ERROR MESSAGE PRINTER FOR CORE IMAGE STARTUP
  1684.  
  1685. ERRORX,    0
  1686.     TAD I    ERRORX    /CALL+1 CONTAINS MESSAGE NUMBER
  1687.     TAD    (MSGTAB-1
  1688.     DCA    ERRORX
  1689.     TAD I    ERRORX
  1690.     DCA    ERRORX    /POINT AT 6BIT TEXT
  1691. ERRLUP,    TAD I    ERRORX    /GET A WORD
  1692.     CLL RTR
  1693.     RTR
  1694.     RTR
  1695.     JMS    P6CH    /PRINT A CHAR
  1696.     TAD I    ERRORX    /GET WORD AGAIN
  1697.     JMS    P6CH    /PRINT ANOTHER
  1698.     ISZ    ERRORX
  1699.     JMP    ERRLUP
  1700.  
  1701. P6CH,    0
  1702.     AND    (77    /GET 6 BITS
  1703.     SNA        /SKP IF NOT END OF MESSAGE
  1704.     JMP    EOMESG
  1705.     TAD    (40    /MAKE 7 BITS
  1706.     AND    (77
  1707.     TAD    (40
  1708.     JMS    PCH    /PRINT IT
  1709.     JMP I    P6CH
  1710.  
  1711. EOMESG,    TAD    (15    /PRINT CR,LF
  1712.     JMS    PCH
  1713.     TAD    (12
  1714.     JMS    PCH
  1715.     JMP I    (7605    /EXIT TO KBM
  1716.  
  1717. PCH,    0
  1718.     TLS
  1719.     TSF
  1720.     JMP    .-1
  1721.     CLA
  1722.     JMP I    PCH
  1723.  
  1724. MSGTAB,    MSG1
  1725.     MSG2
  1726.     MSG3
  1727.     MSG4
  1728.  
  1729. MSG1,    TEXT    /INCOMPLETE SYSTEM/
  1730. MSG2,    TEXT    /CANNOT RUN WITH 2 PAGE SYSTEM HANDLER/
  1731. MSG3,    TEXT    /INSUFFICIENT CORE/
  1732. MSG4,    TEXT    /SYSTEM ERROR/
  1733.  
  1734.     PAGE
  1735.