ASMB,R,L,C        RTMG1 
*     NAME:   RTMG1 RTE-M SEGMENTED GEN.-LOADER (SEGMENT 5) 
*     SOURCE: 91740-18050 
*     RELOC:  91740-16050 
*     PGMR:   MIKE SCHOENDORF 
* 
*  ***************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977.  ALL RIGHTS     *
*  * RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED,      *
*  * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT*
*  * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.       *
*  ***************************************************************
* 
* 
      HED  RTE-M SYSTEM GENERATOR-LOADER
      NAM RTMG1,5 91740-16050 REV 1901 790101 
* 
* 
A     EQU 0 
B     EQU 1 
***************** - HIGH CORE - ******************
*                                                *
*                    - IDENTS -                  *
*                                                *
**************************************************
*                 - FIXUP TABLES -               *
*                    ----------                  *
*                                                *
*                                                *
*                     -------                    *
*                     - LST -                    *
**************************************************
*                                                *
*                                                *
*           PROGRAM LOADING CONTROL              *
*                                                *
*                                                *
**************************************************
*                                                *
* 
*               I/O TABLE GENERATION             *
* 
*                                                *
**************************************************
*                                                *
*                                                *
*                  PARAMETER INPUT               *
*                                                *
*                                                *
**************************************************
* 
* 
* 
      SKP 
* 
* 
* 
* 
* 
*  RTMGN PROGRAM TABLE FORMAT (IDENTS)
* 
*  WORD 1:  IP1 - NAME  1,2 
*  WORD 2:  IP2 - NAME  3,4 
*  WORD 3:  IP3 - NAME  5,SC
* 
*          SC = 0  PROGRAM HAS BEEN LOADED
*             = XX (OCTAL) INT PRG
* 
* 
*  LST FORMAT 
* 
*  WORD 1: LST1 - NAME 1,2
*  WORD 2: LST2 - NAME 3,4
*  WORD 3: LST3 - NAME 5, ORDINAL 
*  WORD 4: LST4 - IDENT ADDRESS 
*  WORD 5: LST5 - BP LINK ADDRESS 
* 
* 
* 
*  ENTERNS AND EXTERNS
* 
      EXT ABRT1,BPAGA,ER#OR 
      EXT FUT1,FUT4,FUTI,FUTS 
      EXT LNKDR,LST4
      EXT LST5,LST,LSTUL,.MEM1,.MEM2
      EXT .MEM3,.MEM4,OPT.3,PLK4,PLK,PLKS,REL06,RTMLI 
      EXT SAVE1,SEGFL,SSTBL,UEXFL,UNDEF 
* 
      EXT A$CIA,AINT#,ALBUF,ATBUF,BIDNT,BPFIX 
      EXT CM#LG,CU#AL,CURAT,DO#ON 
      EXT GBUF,GENRT,GE#AL,GE#NA,GE#OC
      EXT GI#IT,GNFLG,GNSG1,GNSG2,GREAD 
      EXT GTIME,IDNOS,IN#RR,INTER 
      EXT IP1,IP2,IP3,LDSEG,LSTSV,LWAMG,LWGBP,LWSA1,MATA
      EXT MAXPT,MPFT,MRMP,MSIZE,NMAX
      EXT OC#NO,PCOM,PP#EL,PRIN1,PRIN2
      EXT PROCT,RANAD,RELOC 
      EXT SP#CE,START,STRAD,STRPN 
      EXT SYSTM,TBUF#,TB#HN,TCNT,WDCNT
* 
      EXT DU#MY 
* 
ERROR EQU ER#OR 
* 
AINT  EQU AINT# 
CMFLG EQU CM#LG 
CURAL EQU CU#AL 
DOCON EQU DO#ON 
FTIME EQU GTIME 
GETAL EQU GE#AL 
GETNA EQU GE#NA 
GETOC EQU GE#OC 
GINIT EQU GI#IT 
INERR EQU IN#RR 
LBUF  EQU GBUF
OCTNO EQU OC#NO 
PPREL EQU PP#EL 
READ  EQU GREAD 
SPACE EQU SP#CE 
TBCHN EQU TB#HN 
TBUF  EQU TBUF# 
* 
* 
* 
* 
* 
* 
*    .MEM. TABLE DEFINITIONS
* 
*       .MEM1 = FWABP 
*       .MEM2 = LWABP 
*       .MEM3 = FWAM
*       .MEM4 = LWAM
*       .MEM5 = FWAC
*       .MEM6 = LWAC
* 
* 
* 
*  ERROR CODES
* 
*  AD: INVALID ENTRY POINT
*  CH: INVALID CHANNEL NUMBER 
*  DR: INVALID DRIVER NAME
*  DU: DUPLICATE PROGRAM NAME 
*  EQ: INVALID EQT. NO. IN INT. RECORD
*  IN: PARAMETER INTERVAL EXECUTION ERROR 
*  LU: INVALID DEVICE REFERENCE NUMBER
*  ON: INVALID ON PARAMETER 
*  NA: PARAMETER NAME ERROR 
*  PA: PARAMETER ERROR
*  PD: PARTITION ALREADY DEFINED
*  PR: PARAMETER PRIORITY ERROR 
*  PS: NOT ENOUGH MEMORY LEFT FOR PARTITION 
*  PT: PARTITION DEFINITION ERROR 
*  SO: SYSTEM OVERFLOW
*  TB: SYMBOL TABLE/ID SEGMENT OVERFLOW 
* 
* 
      SUP 
      SKP 
* 
* 
RTMG1 NOP 
      NOP 
      LDA GNSG1     WHERE GO FLAG 
      SZA,RSS 
      JMP RTMG3     PRINT "RTMGN" 
      CPA P1
      JMP TPSY1     SET TYPE OF SYSTEM
      CPA P2
      JMP REL06     RET. TO SEG. THAT CALL LDR. SUBCONTROL
      CPA P3
      JMP RTMG5     RELOCATE SYSTEM MODULES 
      JMP RTMG6     RETURN FROM FIXUPS
* 
* 
ID    CLA 
      STA SEGFL     LAST SEGMENT FLAG 
      CLA,INA       SET FOR FIRST ENTRY TO
      STA GNSG2     GENERATOR SEGMENT 2 
      LDA P9
      JMP LDSEG     LOAD IN GEN SEG 2 
      HED ** SYSTEM BASE PAGE COMMUNICATION AREA ** 
*** SYSTEM BASE PAGE  COMMUNICATION  AREA *** 
* 
* 
* SYSTEM TABLE DEFINITION * 
* 
.     EQU 1650B 
XI    DEF .-1       ADDRESS OF INDEX REGISTER SAVE AREA 
EQTA  DEF .+0       FWA  OF  EQUIPMENT TABLE
INTLG DEF .+5       # OF INTERRUPT TABLE ENTRIES
TBG   DEF .+20      I/O ADDRESS OF TIME-BASE CARD 
SYSTY DEF .+21      EQT ENTRY ADDRESS OF SYSTEM TTY 
* 
* 
* DEFINITION OF MEMORY ALLOCATION BASES * 
* 
DUMMY DEF .+55      I/O ADDRESS OF DUMMY INT. CARD
* 
* UTILITY PARAMETERS
* 
BGLWA DEF .+87      LWA MEMORY BACKGROUND PARTITION 
BPCLR DEF .+43
      SKP 
* 
*  ROUTINE TO RESERVE AND SET CORE   ON THE 
*  LOADER PRODUCED ABSOLUTE OUTPUT. 
* 
*  CALLING SEQUENCE:
*    A = FINAL STARTING ADDRES
*    B = FINAL ENDING ADDRESS 
* 
*    SETAD = ADDRESS OF THE OUTPUT DATA BUFFER
* 
*    JSB SETCR
* 
*  RETURN: A AND B ARE DESTROYED
* 
SETCR NOP 
      STA TEMP1 
      CMA,INA 
      ADA ALBUF     BUFFER ADDRESS
      STA PLKS      OFFSET ADDRESS
      LDA TEMP1     STARTING ADDRESS
      STA PLK4
      JSB PLK       OUTPUT ROUTINE IN THE LOADER
      JMP SETCR,I 
* 
TEMP1 NOP 
* 
* 
* 
*  SUBROUTINE TO DETERMINE IF ANSWER IS YES OR NO 
* 
MAYBE NOP 
      JSB READ      PRINT MESSAGE, GET REPLY
      LDA N2        GET FIRST TWO ASCII CHARACTERS
      JSB GETNA 
      CCB 
      CPA NO        NO? 
      CLB           YES 
      CPA YE        YES?
      CLB,INB       YES 
      SSB,RSS 
      ISZ MAYBE 
      SSB 
      JSB INERR     PARMETER ERROR
      JMP MAYBE,I 
* 
NO    ASC 1,NO
YE    ASC 1,YE
* 
N2    DEC -2
      SKP 
* 
* 
* 
*  THE BUFCL SUBROUTINE STUFFS A 64 WORD BUFFER WITH CALL+1 
* 
*  CALLING SEQUENCE:
*    A = IGNORED
*    B = ADDRESS OF BUFFER
*    JSB BUFCL
*    CALL+1 = DATA TO BE STUFFED
* 
*  RETURN: CONTENTS OF A AND B ARE DESTROYED. 
* 
BUFCL NOP 
      LDB ALBUF 
      LDA N64 
      STA WDCNT     SET BUFFER LENGTH = 64
      LDA BUFCL,I    GET STUFF DATA 
      STA 1,I       CLEAR BUFFER WORD 
      INB 
      ISZ WDCNT     ALL WORDS CLEAR?
      JMP *-3       NO - CONTINUE CLEARING
      ISZ BUFCL 
      JMP BUFCL,I   RETURN
* 
N64   DEC -64 
      SPC 5 
* 
*  SUBROUTINE TO CLEAR THE OUTPUT BUFFER
* 
BUFC  NOP 
      JSB BUFCL 
      OCT 0 
      JMP BUFC,I
      SKP 
* 
* 
* 
*  SUBROUTINE TO RESERVE AND SET CORE 
* 
*  CALLING SEQUENCE:
*    A = DATA TO BE OUTPUT
*    B = ADDRESS OF DATA
*    JSB STCR1
* 
*  RETURN:
*    A = DATA WORD OUTPUTTED
* 
STCR1 NOP 
      STA LBUF      SAVE DATA TO BE OUTPUT
      LDA 1         SET A REG TO ADDRESS
      JSB SETCR     GO OUTPUT IT
      LDA LBUF      GET DATA
      JMP STCR1,I 
      SPC 5 
* 
*  SUBROUTINE TO GET THE ADDRESS OF THE FOLLOWING ENTRIES 
*  IN THE LST, TO SET THEM TO THEIR PROPER VALUE, AND TO
*  OUTPUT THEM. 
* 
STUFF NOP 
      STA LBUF      SAVE VALUE OF ENTRY 
      JSB SSTBL     FIND IN LST 
      JMP ABRT1     ISN'T THERE, START OVER 
      LDA LST4,I    GET ADDRESS 
      LDB 0 
      JSB SETCR     GO OUTPUT VALUE 
      JMP STUFF,I 
      SKP 
* 
*  THE 3 WORD PROGRAM NAME IS PUT INTO THE RTMGN PROG 
*  TABLE. THE NAMES ARE LOADED FROM THE TOP DOWN. 
* 
*  CALLING SEQUENCE:
*    A = ADDRESS OF PROGRAM NAME
*    B = IGNORED
*    JSB LDIPX
* 
*  RETURN:  A AND B ARE DESTROYED 
* 
LDIPX NOP 
      STA IPXSV     SAVE PROG NAME ADDRESS
      JSB INIPX     INITIALIZE TO START OF TABLE
      LDA PROCT      NUMBER OF ENTRIES
      ALS            MULT X2
      ADA PROCT      PLUS ONE TO MAKE IT X3 
      CMA,INA 
      ADA BIDNT      BUILD NEXT NAME ADDRESS
      STA BIDNT      FOR SAVE 
      JSB IPX       INITIALIZE IP POINTERS
      LDA IPXSV,I   GET N1-N2 
      STA IP1,I     PUT IN TABLE
      ISZ IPXSV     BUMP POINTER
      LDA IPXSV,I   GET N3-N4 
      STA IP2,I     SAVE
      ISZ IPXSV 
      LDA IPXSV,I   GET N5-XX 
      STA IP3,I     SAVE
      ISZ PROCT     BUMP NUMBER OF NAMES
      JMP LDIPX,I   RETURN
* 
IPXSV NOP           PROGRAM NAME ADDRESS
* 
      SKP 
* 
*  INIPX SETS THE ADDRESS OF THE FIRST ENTRY IN THE 
*  PROGRAM IDENT TABLE AS THE CURRENT ADDRESS.
* 
* 
*  CALLING SEQUENCE:
*    A = IGNORED
*    B = IGNORED
* 
*  RETURN:  A AND B DESTROYED 
* 
INIPX NOP 
      LDA LWAMG 
      ADA N2
      STA BIDNT 
      JMP INIPX,I 
* 
* 
* 
*  THE IPX ROUTINE ADDRESSES THE CURRENT 3 WORD ENTRY 
*  IN THE INTERRUPT PROGRAM TABLE FROM THE ADDRESS OF 
*  THE CURRENT ENTRY (BIDNT). THE TABLE START ADDRESS 
*  IS LWAM. 
* 
*  CALLING SEQUENCE:
*    A = IGNORED
*    B = IGNORED
*    JSB IPX
* 
*  RETURN, CONTENTS OF A AND B ARE DESTROYED
* 
IPX NOP 
      LDA BIDNT     BUILD POINTERS
      STA IP1 
      INA 
      STA IP2 
      INA 
      STA IP3 
      ADA N5
      STA BIDNT 
      JMP IPX,I 
* 
* 
      SKP 
*                                   CONVERT A TO ASCII AT B 
* 
*  THE CONVD SUBROUTINE CONVERTS THE CONTENTS OF A
*  INTO ASCII (DECIMAL OR OCTAL) AT THE LOCATION SPECIFIED
*  BY B.  THE CONVERTED RESULT REQUIRES 3 WORDS, AND IS 
*  IN THE FORMAT:  XXXXX, WITH A SPACE IN THE FIRST POSITION. 
* 
*  CALLING SEQUENCE:
*    A = NO. TO BE CONVERTED.  IF THE SIGN OF A IS POS.,
*        THE CONVERSION IS TO BE IN OCTAL;  IF NEGATIVE,
*        IN DECIMAL.
*    B = ADDRESS OF CORE LOCATION FOR CONVERTED RESULT
*    JSB CONVD
* 
*  RETURN: CONTENTS OF A AND B ARE DESTOYED.
* 
CONVD NOP 
      STB CURAT     SET MESSAGE ADDRESS 
      LDB OPWRS     GET ADDR OF OCTAL POWERS
      SSA           SKIP IF OCTAL CONV REQUIRED 
      LDB DPWRS     GET ADDRESS OF DECIMAL POWERS 
      STB RANAD     SET POWER RANGE ADDRESS 
      SSA,RSS       SKIP IF NEGATIVE (DECIMAL)
      CMA,INA       CONVERT NUMBER TO NEGATIVE
      STA 1         PUT NUMBER IN B (REMAINDER) 
      LDA N2
      STA TCNT      SET CONVERSION COUNTER
      JSB GETD      GET FIRST DIGIT 
      IOR B20K      ADD BLANK TO FIRST CHAR 
      STA CURAT,I   SAVE FIRST BLANK, CHARACTER 
      ISZ CURAT     INCR MESSAGE ADDRESS
NEXTD JSB GETD      GET NEXT DIGIT
      ALF,ALF       ROTATE TO UPPER 
      STA CURAT,I   SAVE UPPER CHARACTER
      JSB GETD      GET NEXT DIGIT
      IOR CURAT,I   ADD UPPER CHAR
      STA CURAT,I   SAVE NEXT 2 CHARACTERS
      ISZ CURAT     INCR MESSAGE ADDRESS
      ISZ TCNT      SKIP - 5 DIGITS IN
      JMP NEXTD     NO - CONTINUE WITH NEXT DIGIT 
      JMP CONVD,I   YES - RETURN
* 
B20K  OCT 20000 
      SKP 
* 
* 
DPWRS DEF *+1 
      DEC 10000 
      DEC 1000
      DEC 100 
      DEC 10
P1    DEC 1 
OPWRS DEF *+1 
      OCT 10000 
      OCT 1000
      OCT 100 
      OCT 10
      OCT 1 
* 
      SKP 
      SKP 
* 
*  GETD PROVIDES THE ASCII CHARACTERS FOR CONVD.
* 
*  CALLING SEQUENCE:
*    A = IGNORED
*    B = REMAINDER
*    JSB GETD 
* 
*  RETURN:
*    A = ASCII DIGIT
*    B = IGNORED
* 
GETD  NOP 
      CLA 
INCRA ADB RANAD,I   ADD POWER 
      CMB,SSB,INB,SZB   SKIP - TRY NEXT HIGHER DIGIT
      JMP *+4       DIGIT FOUND 
      INA           INCR DIGIT
      CMB,INB       RESTORE REMAINDER TO NEGATIVE 
      JMP INCRA     TRY HIGHER DIGIT
      ADB RANAD,I   ADD POWER 
      CMB,INB       RESTORE REMAINDER 
      ISZ RANAD     INCR POWER LIST ADDRESS 
      IOR B60       CONVERT TO ASCII
      JMP GETD,I    RETURN WITH DIGIT IN A
* 
B60   OCT 60
* 
      SKP 
      HED RTMGN  INITIALIZATION 
* 
*  INITIAL TRANSFER IS MADE TO RTMGN BY INPUTTING 
*  "ON,RTMGN,FI,LE,NM,E", WHERE "FILENM" IS THE INPUT 
*  FILE NAME.  IF NO FILE NAME, THE FIRST PARAMETER IS
*  THE LU OF THE INPUT. NO PARAMETERS 2 AND 3.  PARA- 
*  METER 4 IS THE ERROR LOG DEVICE LU.
* 
* 
*  THE FOLLOWING MESSAGES ARE PRINTED DURING THE INITIALIZATION 
*  PHASE, WITH THE SPECIFICATIONS FOR EACH VALID RESONSE. 
* 
* 
*  MESSAGE                RESPONSE
* 
*  DEFINE OUTPUT DEVICES  ENTER DEVICE LU, OR FILE NAME 
*                         FOR OUTPUT AND ECHO 
* 
*  TYPE OF SYSTEM?        ENTER 1 OCTAL DIGIT 
* 
*  TBG CHNL?              ENTER 2 OCTAL DIGITS
* 
*  PRIV. INT?             ENTER 2 OCTAL DIGITS
* 
*  MEM SIZE?              ENTER UP TO 3 DECIMAL DIGITS
* 
*  LWAM?                  ENTER UP TO 5 OCTAL DIGITS
* 
*  PRIV. DRIV. ACC. COM?  ENTER YES OR NO 
* 
*  FWA BP?                ENTER UP TO 4 OCTAL DIGITS
* 
* 
* 
RTMG3 CCA           SET LINK DIRECTION FLAG 
      STA LNKDR     TO SYSTEM LINKS 
      LDA P19 
      LDB MES01     GENERATOR STARTED 
      JSB PRIN2     PRINT MESSAGE 
      JMP RTMLI 
* 
*  SET TYPE OF SYSTEM 
* 
TPSY1 JSB SPACE     NEW LINE
TPSYS JSB INTER     INTERACTIVE INPUT 
      LDA P17 
      LDB MES14     TYPE OF SYSTEM? 
      JSB READ      PRINT MESSAGE, GET REPLY
      CLA,INA       SET FOR 1 OCTAL DIGIT INPUT 
      JSB DOCON     GET DIGIT 
      JMP TPSYS     REPEAT INPUT
      STA SYSTM     SAVE SYSTEM TYPE
      SZA,RSS       MUST BE EITHER A 1, 2, OR 3 
      JMP ERRP1     INVALID PARAMETER 
      CMA,INA 
      ADA P3
      SSA,RSS 
      JMP TBG1      VALID PARAMETER 
ERRP1 JSB INERR     ERROR 
      JMP TPSYS     REPEAT INPUT
* 
*  SET TIME BASE GENERATOR CHANNEL
* 
TBG1  JSB SPACE     NEW LINE
CHNLT JSB INTER     INTERACTIVE INPUT 
      LDA P11 
      LDB MES30     TBG CHNL? 
      JSB READ      PRINT MESSAGE, GET REPLY
      LDA P2        SET FOR 2 OCTAL DIGITS INPUT
      JSB DOCON     GET DIGITS, RETURN OCTAL
      JMP CHNLT     REPEAT INPUT
      STA TBCHN     SET TBG CHANNEL NO. 
* 
*  GET PRIV. INT. CARD ADDR.
* 
      JSB SPACE     NEW LINE
DUMY  JSB INTER     INTERACTIVE INPUT 
      LDA P12 
      LDB MES41     PRIV. INT?
      JSB READ      PRINT MESSAGE, GET REPLY
      LDA P2        SET FOR 2 OCTAL DIGITS INPUT
      JSB DOCON     GET DIGITS
      JMP DUMY      ERROR, REPEAT INPUT 
      STA PICA      SAVE ADDRESS
* 
*  DETERMINE IF PRIV. DRIVERS ACCESS COMMON 
* 
      LDA SYSTM     GET SYSTEM TYPE 
      CPA P3        RTE-M-III?
      RSS 
      JMP LWSAM     NO
      JSB SPACE     NEW LINE
PRCOM JSB INTER     INTERACTIVE INPUT 
      LDA P30 
      LDB MES15     PRIV. DRIVERS ACCESS COMMON?
      JSB MAYBE 
      JMP PRCOM     ERROR, REPEAT INPUT 
      STB PCOM      SAVE IF PRIV. DIRVERS ACCESS COMMON 
* 
*  SET MEMORY SIZE
* 
      JSB SPACE     NEW LINE
MEMSZ JSB INTER 
      LDA P11 
      LDB MES16     MEM SIZE? 
      JSB READ      PRINT MESSAGE, GET REPLY
      LDA N3        SET FOR 3 DECIMAL DIGITS INPUT
      JSB DOCON     GET DIGITS
      JMP MEMSZ     ERROR, REPEAT INPUT 
      STA MSIZE     SAVE MEMORY SIZE
      JMP FWENT-1 
* 
*  SET LAST WORD OF AVAILABLE MEMORY
* 
LWSAM JSB SPACE     NEW LINE
      JSB INTER     INTERACTIVE INPUT 
      LDA P7
      LDB MES24     LWAM? 
      JSB READ      PRINT MESSAGE, GET REPLY
      LDA P5        SET FOR 5 OCTAL DIGITS
      JSB DOCON     GET DIGITS
      JMP LWSAM+1   ERROR, REPEAT INPUT 
      CPA UDFE      =77777? 
      ADA N1        YES 
      STA .MEM4     LWAM
      STA LWSA1     LAST WORD SAM 
      SKP 
* 
*  SET FWABP LINKAGE
* 
      JSB SPACE     NEW LINE
FWENT JSB INTER     INTERACTIVE INPUT 
      LDA P9
      LDB MES27     FWA BP? 
      JSB READ      PRINT MESSAGE, GET REPLY
      LDA P4
      JSB DOCON     GET 4 OCTAL DIGITS, CONVERT 
      JMP FWENT     ERROR, REPEAT INPUT 
      STA .MEM1     SAVE FWA BP 
      SZA           VALID (NON-ZERO) FWA BP 
      SSA 
      JMP FWERR 
      ADA N8
      SSA 
      JMP FWERR 
      CMA,INA 
      ADA B1636 
      SSA,RSS 
      JMP FWEN1 
FWERR JSB INERR     INVALID PARAMETER  FWABP=0
      JMP FWENT     REPEAT FWABP LINKAGE INPUT
FWEN1 LDA .MEM1 
      ADA N1
      STA LWGBP     SAVE FOR INT PROCESSOR
      JSB SPACE     NEW LINE
      JMP CLBUF 
      SKP 
* 
B1636 OCT 1636
N1    DEC -1
N3    DEC -3
P2    DEC 2 
P3    DEC 3 
P4    DEC 4 
P5    DEC 5 
P7    DEC 7 
P9    DEC 9 
P17   DEC 17
P30   DEC 30
P32   DEC 32
* 
* 
MES01 DEF *+1 
      ASC 10,* GENERATOR STARTED
MES14 DEF *+1 
      ASC 9,* TYPE OF SYSTEM? 
MES15 DEF *+1 
      ASC 15,* PRIV. DRIVERS ACCESS COMMON? 
MES16 DEF *+1 
      ASC 6,* MEM SIZE? 
MES24 DEF *+1 
      ASC 4,* LWAM? 
MES27 DEF *+1 
      ASC 5,* FWA BP? 
MES30 DEF *+1 
      ASC 6,* TBG CHNL? 
MES41 DEF *+1 
      ASC 6,* PRIV. INT?
* 
* 
      SKP 
CLBUF JSB BUFC      CLEAR BUFFER TO OCTAL ZEROS 
      LDA XI        START ADDR OF AREA TO BE CLEARED
      LDB BPCLR     END ADDRESS 
      JSB SETCR     CLEAR LOWER HALF
      LDA BPCLR 
      LDB BGLWA 
      JSB SETCR     CLEAR UPPER HALF
      LDA PICA      PRIV INT CARD ADD 
      LDB DUMMY     1737B 
      JSB STCR1     OUTPUT IT 
      LDB B1770 
      CLA,INA   
      JSB STCR1     SET MPTFL TO 1
      JMP RTMLI 
* 
PICA  NOP           PRIV INT CARD ADD 
B1770 OCT 1770
      SKP 
* 
*  RELOCATE SYSTEM MODULES
* 
RTMG5 LDA LST       SET LST TABLE TO PROPER # OF ENTRIES
      STA LSTSV 
      JSB SPACE     NEW LINE
      JSB INTER     INTERACTIVE INPUT 
      LDA P14 
      LDB MES02     REL SYS MODS
      JSB RELOC     RELOCATE SYSTEM MODULES 
      DEC 1         MODULE TYPE NEEDED
      JMP ABRT1     ERROR FROM LOADER, EXIT 
      LDA UNDEF     WERE THERE ANY UNDEFINED? 
      CMA,INA 
      ADA UEXFL 
      SZA,RSS 
      JMP REL1      NO CONTINUE 
RELSE LDA AD        YES 
      JSB ERRER     ERROR 
      JMP ABRT1     EXIT
REL1  LDB A$STR 
      JSB SSTBL     WAS $STRT LOADED? 
      JMP RELSE     NO, ERROR,
      LDA LST4,I    YES, GET STARTING ADDRESS 
      STA STRAD     SAVE IT FOR CLEAN-UP AT END OF RTMGN
      LDB A$CIC     $CIC NAME 
      JSB SSTBL     WAS $CIC LOADED?
      JMP RELSE     NO, ERROR, START OVER 
      LDA LST4,I    BUILD A BP LINK FOR $CIC
      LDB .MEM2                 FOR $CIC
      STB A$CIA     SAVE FOR JSB INSTRUCTION
      STB LST5,I
      JSB STCR1 
      CCA 
      ADA .MEM2     BUMP TO NEXT LINK 
      STA .MEM2 
      JMP TBGEN     YES, GO BUILD I/O TABLES
* 
ERRER NOP 
      CLB 
      JSB ERROR 
      JMP ERRER,I 
* 
      SKP 
* 
A$CIC DEF *+1 
      ASC 3,$CIC
A$STR DEF *+1 
      ASC 3,$STRT 
* 
MES02 DEF *+1 
      ASC 7,* REL SYS MODS
* 
AB    ASC 1,AB
AD    ASC 1,AD      INVALID ENTRY POINT IN INT REC
* 
P6    DEC 6 
P12   DEC 12
UDFE  OCT 77777 
* 
BLANK EQU P32 
* 
* 
      SKP 
* 
P24   DEC 24
P27   DEC 27
* 
MES20 DEF *+1 
      ASC 10,* # OF I/O CLASSES?
MES21 DEF *+1 
      ASC 12,* # OF RESOURCE NUMBERS? 
MES22 DEF *+1 
      ASC 14,* BUFFER LIMITS (LOW,HIGH)?
D$CLS DEF $CLS
$CLS  ASC 3,$CLAS 
D$RNT DEF $RNTB 
$RNTB ASC 3,$RNTB 
* 
$BLLO ASC 3,$BLLO 
$BLHI ASC 3,$BLUP 
      HED RTMGN  GENERATE I/O TABLES
* 
*                                   GENERATE I/O TABLES 
* 
*  THIS SECTION OF CODE GENERATES THE I/O TABLES
*  FOR THE SYSTEM.  THESE INCLUDE THE EQUIPMENT TABLE (EQT),
*  STANDARD DEVICE REFERENCE TABLE (DRT), AND INTERRUPT TABLE.
* 
*  THE EQT RECORDS HAVE THE FOLLOWING FORMAT: 
* 
*    N1,DVRN2<,D><,B><,T=><,X=> 
* 
*  N1 = CHANNEL NO. (2 OCTAL DIGITS)
*  N2 = DRIVER CLASS. CODE (2 OCTAL DIGITS) 
*  D = DMA FLAG (OPTIONAL)
*  B = BUFFERING FLAG (OPTIONAL)
*  T = TIME-OUT VALUE TO BE ENTERED 
*  X = # WORDS OF EQT EXTENSION 
* 
*    IF T= IS ENTERED, A VALUE FOR THE DEVICE'S TIME-OUT
*    CLOCK MUST NEXT BE ENTERED.
*    THE OPERATOR MUST ENTER A POSITIVE DECIMAL NUMBER
*    OF UP TO FIVE DIGITS.  THIS IS THEN THE NUMBER OF
*    TIME BASE GENERATOR INTERRUPTS (10 MSEC INTERVALS) 
*    BETWEEN THE TIME IO IS INITIATED ON THE DEVICE AND 
*    THE TIME AFTER WHICH THE DEVICE SHOULD HAVE INTERRUPTED. 
*    IF THE DEVICE HAS NOT INTERRUPTED BY THIS TIME, IT 
*    IS CONSIDERED TO HAVE TIMED-OUT. 
* 
* 
*  EACH DRT RECORD CONSISTS OF A 2-DIGIT NO. SPECIFYING THE 
*  CORRESPONDING ENTRY IN THE EQUIPMENT TABLE 
*  AND AN OPTIONAL 1-DIGIT NO. SPECIFYING A 
*  SUBCHANNEL WITHIN THAT ENTRY.  FOR EXAMPLE, IN 
*  RESPONSE TO THE MESSAGE:  5 = ?, THE RESPONSE 6 INDICATES THAT 
*  THE LOGICAL UNIT NO. 5 IS TO USE DEVICE 6 IN EQT.
*  WHEREAS THE RESPONSE 6,2 INDICATES THAT THE
*  LOGICAL UNIT NO. 5 IS TO USE SUBCHANNEL 2 OF 
*  DEVICE 6 IN EQT. 
* 
* 
*  THE INT RECORDS HAVE ONE OF THE FOLLOWING FORMATS: 
* 
*    N1,EQT,N2
*    N1,PRG,NAME
*    N1,ENT,ENTRY 
*    N1,ABS,N3
* 
*  N1 = CHANNEL NO. (2 OCTAL DIGITS - MUST BE IN INCREASING ORDER)
*        EXCEPTION:    IF N1 = 04 (POWER - FAIL), 
*        THIS ENTRY DOES NOT HAVE TO BE IN ORDER.  ALSO,
*        ONLY AN ENT OR AN ABS TYPE ENTRY IS ACCEPTED 
*        FOR N1 = 04. 
*  N2 = EQT NO. 
*  NAME = PROGRAM NAME TO BE SCHEDULED
*  ENTRY = ENTRY POINT TO WHICH TRANSFER IS TO BE MADE
*  N3 = ABSOLUTE VALUE (6 OCTAL DIGITS) 
* 
*  # OF I/O CLASSES 
* 
TBGEN LDA .MEM3     SET PROGRAM COUNTER TO FWAM 
      STA PPREL 
      LDA SYSTM      GET SYSTEM TYPE
      CPA P1        TYPE 1? 
      JMP BLMT      YES, GET BUFFER LIMITS
      LDA .MEM3     SET PROGRAM COUNTER TO FWAM 
      STA PPREL 
      LDA .MEM2     RESET LWABP 
      LDB BPFIX 
      STA BPFIX 
      STB .MEM2 
      JSB BUFC
      JSB SPACE     NEW LINE
IOCLS JSB INTER     INTERACTIVE INPUT 
      LDA P19 
      LDB MES20     # OF I/O CLASSES? 
      JSB TABLE     PRINT MESSAGE, ANALYZE REPLY
      JMP IOCLS     ERROR, REPEAT INPUT 
      LDB D$CLS     ADDRESS OF ENT NAME 
      JSB ENPNT     FIND ENTRY IN LST 
* 
* # OF RESOURCE NUMBERS 
* 
      JSB SPACE     NEW LINE
RNUMB JSB INTER     INTERACTIVE INPUT 
      LDA P24 
      LDB MES21     # OF RESOURCE NUMBERS?
      JSB TABLE     PRINT MESSAGE, ANALYZE REPLY
      JMP RNUMB     ERROR, REPEAT INPUT 
      LDB D$RNT     ADDRESS OF ENTRY NAME 
      JSB ENPNT     FIND ENTRY IN LST 
      LDA BPFIX     RESET LWABP 
      STA .MEM2 
BLMT  LDA P3
      STA GNFLG 
      LDA P3
      STA GENRT 
* 
*  BUFFER LIMITS (LOW,HIGH) 
* 
      JSB SPACE     NEW LINE
BLMTS JSB INTER     INTERACTIVE INPUT 
      LDA P27 
      LDB MES22     BUFFER LIMITS (LOW,HIGH)? 
      JSB READ      PRINT MESSAGE, GET REPLY
      JSB BLSET     SET UP
      DEF $BLLO     LOWER LIMIT 
      JMP BLMT0     ERROR 
      JSB BLSET     NOW SET UP THE UPPER LIMIT
      DEF $BLHI 
      JMP BLMT0     ERROR 
      JMP GEN00 
* 
BLMT0 JSB INERR     ERROR 
      JMP BLMTS     REPEAT INPUT
      SKP 
* 
*  GENERATE I/O TABLES
* 
GEN00 LDA PPREL 
      STA .MEM3     SET FWAM
      JSB SPACE     NEW LINE
GENIO JSB INTER     INTERACTIVE INPUT 
      CLA 
      STA UNDEF     SET TO PRINT ALL UNDEFS 
      STA OPT.3,I   ZERO FIXUP COUNTER
      STA IDNOS     ID'S MADE 
      STA STRPN     START UP PROGRAM FLAG 
      STA CEQT      NOS OF EQT'S
      STA PROCT     NOS OF INT PROG ENTRIES 
      STA START     START UP PROGRAM USED 
* 
*  EQT TABLE
* 
      JSB SPACE     NEW LINE
      JSB FUTI      INITIALIZE FIXUP TABLE
      LDA .MEM3     FWAM
      STA AEQT      EQT STARTING ADDRESS
      STA PPREL 
      LDA P9        PRINT:
      LDB MES25     "EQT TBL" 
      JSB PRIN1 
      JSB SPACE     NEW LINE
* 
SEQT  JSB INTER     INTERACTIVE INPUT 
      JSB SPACE     NEW LINE
SEQT1 JSB INTER     INTERACTIVE INPUT 
      LDA CEQT      EQT COUNT 
      INA 
      LDB MES6A     STUFF INTO PRINT BUFFER 
      JSB STFNM 
      LDA P11 
      LDB MES06     EQT XX =? 
      JSB READ      PRINT MESSAGE, GET REPLY
      LDA N2
      JSB GETNA     MOVE 2 CHARS TO TBUF
      CPA EN        CHARS= END ?
      JMP SSQTI     YES, TRY TO END 
      CPA RE        REPEAT? 
      JMP GENIO     YES 
* 
      JSB GINIT     INITIALIZE BUFFER SCAN
      LDA P2
      JSB GETOC     GET 2 OCTAL DIGITS, CONVERT 
      JMP IOERR     INVALID DIGIT 
      JSB GETAL     GET NEXT CHAR FROM LBUF 
      CPA BLANK     CHAR = COMMA? 
      JMP CLDBU     YES - SET CHNL NO., CLEAR D,B,T,X 
IOERR LDA CH        SET CODE = INVALID CHNL IN EQT
      JSB ERRER     ERROR 
      JMP SEQT1     REPEAT INPUT
      SKP 
                                                                                                                                                                                                                                          