ASMB,R,L,C
      HED SCGN5 91700-16143 REV.A 760108 * (C) HEWLETT-PACKARD CO. 1976 * 
      NAM SCGN5,5 91700-16143 REV.A 760108
      SPC 1 
******************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976.  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.       *
******************************************************************
      SPC 2 
**************************************************
* 
*SCGN5              BCS GENERATOR SEGMENT 
* 
*SOURCE PART #      91700-18143 REV A 
* 
*REL PART #         91700-16143 REV A 
* 
*WRITTEN BY:        LARRY POMATTO 
* 
*DATE WRITTEN:      9-18-74 
* 
*MODIFIED BY:       K. HAHN 
* 
*DATE MODIFIED:     6-27-75 
* 
*************************************************** 
**************************************************
A     EQU 0 
B     EQU 1 
      SUP 
* 
* 
* 
* 
*  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 LST,PLK,PLKS,?XFER,LSTI,LSTP
      EXT .MEM.,PRCMD 
      EXT UEXFL,SSTBL,.MEM3 
      EXT LST1,LST2,LST3,LST4,LST5
      EXT .MEM1,.MEM4 
      EXT .MEM2,.MEM5,.MEM6,NAMR.,LISTO 
      EXT PARSA 
      EXT PNAME,PNAMA 
      EXT EXEC,LOCC,BPLOC,PRINT 
      EXT INDCB,PRMT,GTOUT,ABDCB
      EXT FCRET,WRITF,FCLOS,CLSFI 
      EXT FILCK,FERR,SWAPR,LSDCB,CMDLU
      EXT ENDLU,LOUT,.DFER,CNUMO,CNUMD
* 
* 
* 
.XFER EQU ?XFER 
* 
* 
*    .MEM. TABLE DEFINITIONS
* 
*       .MEM1 = FWABP 
*       .MEM2 = LWABP 
*       .MEM3 = FWAM
*       .MEM4 = LWAM
*       .MEM5 = FWAC
*       .MEM6 = LWAC
* 
* 
* 
*  ERROR CODES
* 
*  TB: SYMBOL TABLE/ID SEG OVERFLOW 
*  NA: PARAMETER NAME ERROR 
*  PA: PARAMETER ERROR
*  PR: PARAMETER PRIORITY ERROR 
*  IN: PARAMETER EXECUTION INTERVAL ERROR 
*  CH: INVALID CHANNEL NUMBER 
*  DR: INVALID DRIVER NAME
*  LU: INVALID DEVICE REFERENCE NUMBER
*  EQ: INVALID EQT. NO. IN INT RECORD 
*  AD: INVALID ENTRY POINT
*  DU: DUPLICATE PROGRAM NAME 
      SKP 
* 
* 
LINTL BSS 1         STARTING BASE PAGE LINK ADDRESS 
WDCNT BSS 1         TEMPORARY WORD COUNTER
* 
MAXC  BSS 1         MAX CHAR COUNT
TCHAR BSS 1         TEMPORARY CHAR SAVE AREA
OCTNO BSS 1         OCTAL DIGIT 
* 
CURAL BSS 1 
SETAD BSS 1         ABSOLUTE OUTPUT BUFFER ADDRESS
* 
      SPC 1 
TEMP1 BSS 1 
TEMP2 BSS 1 
TEMP3 BSS 1 
CURAT BSS 1         CURRENT TBUF ADDRESS
TBUF  BSS 4         TEMPORARY BUFFER
PPREL BSS 1 
TBREL BSS 1 
* 
* 
AEQT  BSS 1         ADDRESS OF EQUIPMENT TABLE
CEQT  BSS 1         NO. ENTRIES IN EQUIPMENT TABLE
* 
* 
PROCT BSS 1         NO. OF INT. ENTRIES 
* 
* 
PARNO BSS 1         PARAMETER RECORD LENGTH 
* 
IODMA BSS 1         I/O DMA FLAG IN EQT 
IOBUF BSS 1         I/O BUFFERING FLAG IN EQT 
DFLAG BSS 1         DMA-IN FLAG FOR EQT 
BFLAG BSS 1         BUFFERING-IN FLAG FOR EQT 
INTCH BSS 1         INT RECORD CHANNEL NO.
* 
DRANG BSS 1         DIGIT RANGE 
DIFLG BSS 1         DATA-IN FLAG = -1/0 = NOT IN/IN 
CMFLG BSS 1         COMMA FLAG = -1/0 = NOT IN/IN 
BUFUL BSS 1         BUFFER U/L FLAG 
LBLAD BSS 1 
MEMAD BSS 1 
      SPC 2 
* 
*     HERE IS THE END OF AREA THAT NEEDS TO BE SAVED
*     MAKE SURE BSS FOR OTHER SEGMENTS AT LEAST THIS
*     BIG...BSSIZ=THAT SIZE 
* 
BSSIZ EQU * 
      SKP 
* 
*     UTILITY ROUTINES
* 
*                                   PRINT: ERR XX 
* 
*  THE ERROR SUBROUTINE IS USED TO PRINT THE DIAGNOSTICS
*  FOR ALL ERROR MESSAGES.
* 
*  CALLING SEQUENCE:
*    A = 2-CHAR ASCII ERROR CODE
*    B = IGNORED
*    JSB ERROR
* 
*  RETURN: CONTENTS OF A AND B ARE DESTROYED. 
* 
ERROR NOP           PRINT ERROR MESSAGES
      STA AMERR+3   SET ERROR CODE INTO MESSAGE 
      LDA P6
      LDB AMERR     AMERR = MESSAGE ADDRESS 
      JSB PRINT     PRINT ERROR MESSAGE 
      JMP ERROR,I   RETURN
* 
AMERR DEF *+1 
      ASC 3,ERR     ERROR MESSAGE = ERR + CODE
      SKP 
* 
*                     SET DATA TO ABS TAPE
* 
*  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 SETAD     BUFFER ADDRESS
      STA PLKS      OFFSET ADDRESS
      LDA TEMP1     STARTING ADDRESS
      JSB PLK       OUTPUT ROUTINE IN THE LOADER
      JMP SETCR,I 
* 
      SKP 
* 
ALBUF DEF LBUF
ATBUF DEF TBUF
* 
* 
* 
ERR10 ASC 1,PA      PARAMETER ERROR 
ERR24 ASC 1,CH      INVALID CHANNEL NO. IN EQT REC
ERR25 ASC 1,DR      INVALID DRIVER NAME 
ERR27 ASC 1,LU      INVALID DEVICE REF. NO. 
ERR33 ASC 1,AD      INVALID ENTRY POINT IN INT RECORD 
ERR34 ASC 1,UE      UNDEFINED EXTERNAL
PTERM ASC 1,EN
COMMA OCT 54        COMMA 
IJSB  JSB 0,I       I-JSB CODE FOR INTERRUPT LOCS 
UASCZ OCT 30000     UPPER ASCII ZERO CHAR 
CHARD OCT 104       ASCII CHAR D
REQT  ASC 1,RE
RDRT  ASC 1,RS
RINT  ASC 1,RI
* 
MES25 DEF *+1 
      ASC 4,EQT TBL 
* 
      OCT 6412
      ASC 2,LU#:
* 
MES2  DEF *+1 
      ASC 6,REL SYS MODS
* 
      SKP 
* 
*     INITIALIZATION SECTION
* 
* 
*     THIS IS WHERE WE START. 
* 
SWPIN NOP           THIS IS WHERE CONTROL IS PASSED 
      LDA RSTA      WHEN SEGMENT ROLLED IN
      JMP SWAPR     CONTROL IS RETURN TO MAIN WITH A REG=START
      SPC 1 
RSTA  DEF RSTRT 
      SPC 1 
* 
* 
*  THE FOLLOWING MESSAGES ARE PRINTED DURING THE INITIALIZATION 
*  PHASE, WITH THE SPECIFICATIONS FOR EACH VALID RESONSE. 
* 
* 
*  MESSAGE         RESPONSE 
* 
*  FWA BP?         ENTER 4 OCTAL DIGITS 
* 
*  LWA MEM?        ENTER 5 OCTAL DIGITS 
* 
*  FWA MEM         ENTER 5 OCTAL DIGITS 
* 
* # WORDS COMMON    4 DEC DIGITS
* 
* 
RSTRT NOP 
      CLA 
      STA NAMR. 
      LDA LISTO 
      AND N9        CLEAR BIT 3, FOR NEW HEADING
      STA LISTO 
* 
* 
* 
*                                   SET FWA BP LINKAGE
FWENT LDA P7
      LDB MES27     MES27 = ADDR: FWA BP LINKAGE? 
      JSB READ     PRINT AND GET REPLY
      LDA P4
      JSB DOCON     GET 4 OCTAL DIGITS, CONVERT 
      RSS           INVALID DIGIT ENTERED 
      JMP SETFB     YES - SET FWA BP LINKAGE
LNKER JSB INERR 
      JMP FWENT     REPEAT MESSAGE
SETFB LDB OCTNO     GET FWA BP
      SZB,RSS       SKIP - VALID (NON-ZERO) FWA BP
      JMP LNKER     REPEAT FWA BP LINKAGE INPUT 
      STB .MEM1 
      STB LINTL     SAVE STARTING LINK ADDRESS FOR INT LINK TABLE 
      CMB,INB       CHECK IF GREATER THAN 1777
      ADB B1777 
      SSB 
      JMP LNKER     YES IT IS...ERROR 
SMLWA LDA P8
      LDB MESS3     MESS3 = ADDR: LWA MEM?
      JSB READ     PRINT MESSAGE, GET REPLY 
      LDA P5        SET FOR 5 OCTAL DIGITS INPUT
      JSB DOCON     GET DIGITS, RETURN OCTAL
      JMP SMLWA     REPEAT INPUT
      LDA OCTNO     GET LWAM
      SZA,RSS       ZERO IS ERROR 
      JMP SMLWE 
      STA .MEM6     SAVE LWAM IN LWAC 
      CMA,INA       CHECK IF LESS THAN FWABP
      ADA .MEM1 
      SSA           ERROR?
      JMP GETAV     NO
SMLWE JSB INERR     YES...ERROR 
      JMP SMLWA     TRY AGAIN 
* 
GETAV LDA P8        PRINT:
      LDB MES34     "FWA MEM" 
      JSB READ     GET THE ANSWER 
      LDA P5        SET FOR 5 OCTAL DIGITS. 
      JSB DOCON     CONVERT TO OCTAL. 
      JMP SYMER     -ERROR. 
      JMP SETAV     OK , SET BOUNDARY.
* 
SYMER JSB INERR 
      JMP GETAV     -REPEAT REQUEST 
* 
SETAV LDA OCTNO     IF NUMBER 
      SZA,RSS       ZERO IS ERROR 
      JMP SYMER 
      STA .MEM3     SAVE FIRST WORD MEM 
      ADA N1        SET UP LWABP
      STA .MEM2 
      CMA,INA       CHECK IF LOWER THAN FWABP 
      ADA .MEM1 
      SSA,RSS       ERROR?
      JMP SYMER     YES 
      LDA .MEM2 
      CMA,INA       CHECK IF GREATER THAN 1777
      LDB B1777 
      ADA B1777 
      SSA,RSS       IF NEGATIVE...DEFAULT TO 1777 
      LDB .MEM2     GET ACTUAL
      STB .MEM2     SAVE AS LWABP 
* 
*     GET # WORDS OF COMMON 
* 
GETCM LDA P14 
      LDB MES7      "# WORDS OF COMMON" 
      JSB READ
      LDA N5        CONVERT DEC NUMBER
      JSB DOCON 
      JMP COMER     ERROR IN CONVERSIO
      LDA .MEM6     GET LWAM
      CMA 
      ADA OCTNO     SEE IF WE HAVE ROOM 
      ADA .MEM3 
      SSA           ERROR?
      JMP GTCM1     NO
COMER JSB INERR     ERROR 
      JMP GETCM     TRY AGAIN 
      SPC 1 
GTCM1 LDA OCTNO     GET # OF WORDS
      SZA           IF ZERO...NO COMMON .MEM4=.MEM5=.MEM6 
      CMA           IF NOT ZERO...ALLOW FOR COMMON
      ADA .MEM6 
      STA .MEM4     SET IN LWAM...
      CPA .MEM6     IF=TO .MEM6...NO COMMON 
      RSS 
      INA           OTHERWISE SET FWAC TO LWAM+1
      STA .MEM5 
* 
*     DEFINE SYMBOLS NEEDED BY BCS
*     WHICH PCS NORMALLY DEFINES
*     THESE SYMBOLS ARE:
*     .EQT.,.SQT.,HALT,.MEM.
*     .EQT. IS BETWEEN THE 6 WORD SQT ENTRY AND THE 
*           START OF THE 4 WORD EQT ENTRIES. IT CONTAINS
*           THE # OF EQT ENTRIES DEFINED
*     .SQT. WHERE THE START OF THE SQT TABLE IS LOCATED 
*     .HALT IF DEFINED IS THE RESTART LOCATION
*           IF NOT DEFINED IT BECOMES A LOCKED HALT 
*     .MEM. IS A 6 WORD TABLE WITH THE FIRST WORD 
*           CONTAINING THE ADDRESS OF THE MEM TABLE 
*           THE TABLE CONSISTS OF FWABP,LWABP,FWAM,LWAM 
*           AND LWAM (THERE ARE TWO LWAM ENTRIES) 
* 
      CLA           CLEAR OUT LST ENTRIES 
      STA LST 
      STA .XFER 
      LDA DEFLC     GET ADDRESS OF ASC TABLE
      STA TEMP1     SAVE TO USE 
      LDA N4        NUMBER OF ENTRIES TO DEFINE 
      STA TEMP2     SAVE IN DOWN COUNTER
ASGNM LDB TEMP1,I   GET ENTRY ADDRESS 
      STB DFER1 
      JSB SSTBL     IT ISN'T DEFINED, WILL SET UP LST FOR US
      NOP 
      LDA LST1      GET ADD WHERE TO PUT SYMBOL 
      STA DFER2     SAVE FOR MOVE 
      JSB .DFER     MOVE IN NAME
DFER2 NOP 
DFER1 NOP 
      LDB LST3
      LDA B,I 
      AND M7400 
      STA B,I       MASK OFF LOWER BYTE 
      INB           GET TO LST4 
      CLA           SET AS SPECIAL DEFINED
      STA B,I 
      INB           GET TO LST5 
      LDA .MEM1     DEFINE A BASE PAGE LINK 
      STA B,I 
      ISZ .MEM1     INCREMENT FWABP 
      ISZ TEMP1     GET TO NEXT ENTRY 
      ISZ LST       INCREMENT # OF LST ENTRIES
      ISZ TEMP2     DONE? 
      JMP ASGNM     NO
* 
* 
*     HERE GO RELOCATE THE SYSTEM 
* 
      LDA P12       PRINT:
      LDB MES2      "REL SYS MODS"
      JSB PRINT     PRINT 
*                                     RELOCATE FROM RTS/2100 LOADER 
      CLA           GET A ZERO
      STA PNAME     CLEAR NAME FLAG 
      STA LOCC      CLEAR LOCC IN LOADER
      STA BPLOC     SAME FOR BPLOC
      JSB PRCMD     GO RELOCATE SYS MODULES 
      JSB GTOUT     ERROR FROM LOADER...GET OUT 
      LDA LOCC      UPDATE FWAM 
      STA .MEM3     FWAM
      LDA BPLOC     UPDATE FWABP
      STA .MEM1 
      LDB .IOCA     SEE IF THEY DEFINED IOC 
      JSB SSTBL 
      JMP RELSE     NO...ERROR
      LDB .HLTA     SEE IF HALT DEFINED 
      JSB SSTBL 
      JSB GTOUT     NOT DEFINED??? WE DEFINED IT...GET OUT
      LDA LST4,I    NEEDED, SEE IF DEFINED
      SZA           DEFINED?
      JMP CHCK3     YES 
* 
CHCK2 LDA .MEM3     GET ADDRESS 
      STA LST4,I    AND SAVE IT 
      ISZ LST       INCREMENT # OF ENTRIES
      LDA HTINA     GET ADDRESS WHERE HALT INSTRUCTION LOCATED
      STA SETAD     SAVE FOR PUNCHING IT OUT
      LDA JMPIN     GET JUMP BASE PAGE INSTURCTION
      IOR .MEM1     SET IN BASE PAGE LINK 
      STA HTIN+1    SAVE AS NEXT INST AFTER HALT
      LDA .MEM3     GET ADDRESS WHERE HALT TO GO
      LDB A 
      INB           SET FOR 2 WORD TRANSFER 
      JSB SETCR     WRITE OUT 2 WORDS 
      LDA .MEM.     SET FOR ADDRESS WHERE LINK CONTENTS ARE 
      ADA P2        GET TO .MEM3
      STA SETAD     SAVE ADDRESS
      LDA .MEM1     GET OUTPUT ADDRESS
      LDB .MEM1 
      JSB SETCR     SET IN LINK WORD
      ISZ .MEM1 
      ISZ .MEM3 
      ISZ .MEM3     SET FOR FWAM
CHCK3 LDA ATBUF     SET UP FOR OUTPUTING HALT LINK WORD 
      STA SETAD 
      LDA LST4,I    GET ADDRESS WHERE HALT INSTRUCTION
      STA SETAD,I   SAVE FOR OUTPUTING
      LDA LST5,I    GET BASE PAGE LINK
      LDB LST5,I    ADDRESS FOR OUTPUTING 
      JSB SETCR     AND GO OUTPUT LINK WORD 
      LDA UEXFL     SEE IF WE HAVE ANY UNDEFINED EXT. 
      SZA,RSS       UNDEFINED?
      JMP GENIO     NO...CONTINUE 
RELSE LDA ERR34     UNDEFINED EXT 
      JSB ERROR     RESTART 
      JMP RSTRT 
      SPC 1 
B1777 OCT 1777
.IOCA DEF *+1 
      ASC 3,.IOC. 
      SKP 
* 
* 
* 
*                                   NUMERICAL INPUT CONTROL 
* 
*  THE DOCON SUBROUTINE ANALYZES THE INPUT FOR THE
*  CHANNEL NO., TBG CHANNEL NO., AND LAST 
*  WORD OF AVAILABLE MEMORY.
* 
*  CALLING SEQUENCE:
*    A = MAX NO. OF CHARACTERS PERMITTED IN RESPONSE. 
*        THE SIGN OF A DETERMINES THE CONVERSION FROM 
*        ASCII TO OCTAL (POS.) OR DECIMAL (NEG.). 
*    B = IGNORED
*    JSB DOCON
* 
*  RETURN:
*    (N+1): CONTENTS OF A AND B ARE DESTROYED.  AN INVALID
*           CHARACTER HAS BEEN DETECTED IN THE RESPONSE, OR 
*           THE RESPONSE CONTAINS AN INVALID NO. CHARACTERS.
*           THE MESSAGE IS TO BE REPEATED ON RETURN.
*    (N+2): A = CONVERTED RESULT
* 
DOCON NOP 
      JSB GETOC     GET OCTAL/DECIMAL, RETURN OCTAL 
      JMP *+4       INVALID DIGIT 
      JSB GETAL     GET NEXT CHAR FROM LBUF 
      CPA ZERO      CHAR = ZERO? (END OF BUFFER)
      JMP *+3       YES - CONTINUE
      JSB INERR     INVALID DIGIT ENTRY 
      JMP DOCON,I   RETURN
      ISZ DOCON     INCR RETURN ADDRESS 
      LDA OCTNO     GET CONVERTED NUMBER
      JMP DOCON,I   RETURN
      SKP 
* 
*                                   INVALID TTY RESPONSE
* 
*  THE INERR SUBROUTINE PRINTS THE DIAGNOSTIC FOR INVALID 
*  RESPONSES DURING THE INITIALIZATION SECTION. 
* 
*  CALLING SEQUENCE:
*    A = IGNORED
*    B = IGNORED
*    JSB INERR
* 
*  RETURN: CONTENTS OF A AND B ARE DESTROYED. 
* 
INERR NOP 
      LDA ERR10     SET INVALID DEVICE ERROR CODE 
      JSB ERROR     PRINT ERROR MESSAGE 
      JMP INERR,I   RETURN
* 
      SKP 
MES27 DEF MS27
MES34 DEF SYMES 
SYMES ASC 4,FWA MEM?
MS27  ASC 4,FWA BP? 
MESS3 DEF *+1 
      ASC 5,LWA MEM?
HTINA DEF *+1 
HTIN  HLT 77B       DEFINED HALT INST 
      NOP 
JMPIN OCT 124000    JMP BASE PAGE INDIRECT
* 
* 
      SKP 
* 
*     BUILD 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.
*  SQT TABLE,DMA ASSIGNMENT, AND INTERUPT LINK TABLE
* 
*  THE EQT RECORDS HAVE THE FOLLOWING FORMAT: 
* 
*    N1,D.N2<,D><,UX> 
* 
*  N1 = CHANNEL NO. (2 OCTAL DIGITS)
*  N2 = DRIVER CLASS. CODE (2 OCTAL DIGITS) 
*  D = DMA FLAG (OPTIONAL)
*  UX= SUB CHANNEL
* 
* 
*  EACH SQT RECORD CONSISTS OF A 2-DIGIT NO. SPECIFYING THE 
*  CORRESPONDING ENTRY IN THE EQUIPMENT TABLE 
* 
* 
*  THE INT RECORDS HAVE ONE OF THE FOLLOWING FORMATS: 
* 
*  N1,N2,ENTRY POINT
*  N1,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) 
* 
* 
GENIO CLA           SET # OF EQT'S TO ZERO
      STA CEQT      CLEAR EQT COUNTER 
      LDA .MEM3     FWAM
      STA SQTAD     ADDRESS WHERE SQT GOES
      ADA P6        GET TO EQT ENTRIES
      STA AEQT      SAVE AS CURRENT EQT ADDRESS 
      INA           SAVE ROOM FOR # OF EQT ENTRIES
      STA PPREL 
      LDA P7        PRINT:
      LDB MES25     "EQT TBL" 
      JSB PRINT 
* 
SEQT  LDA CEQT      EQT COUNT 
      INA 
      ADA P6        SET EQT#=EQT+6...START PRINTING AT 7
      LDB MES6A     STUFF INTO PRINT BUFFER 
      JSB STFNM 
      LDA P9        PRINT:
      LDB MES6      "EQT XX =?" 
      JSB READ     AND INPUT DRIVER REQUEST 
      LDA N2
      JSB GETNA     MOVE 2 CHARS TO TBUF
      CPA PTERM     CHARS= END ?
      JMP SSQTI     YES, TRY TO END 
      CPA REQT      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,U 
IOERR LDA ERR24     SET CODE = INVALID CHNL IN EQT
      JSB ERROR     PRINT DIAGNOSTIC
      JMP SEQT      GET NEXT EQT RECORD 
* 
CLDBU LDB OCTNO     GET I/O CHANNEL NO. 
      STB EQTW1     SET I/O ADDRESS 
      ADB N8        IS CHAN EQ. LESS THAN 10? 
      SSB 
      JMP IOERR     YES, CHANNEL ERROR
      CLA 
      STA IODMA     CLEAR DMA FLAG
      STA IOBUF     CLEAR AUTOMATIC BUFFERING FLAG
      LDA N2        TWO CHAR COMPARE
      JSB GETNA     SEE IF IT IS D. 
      CPA ASCD.     CHARS=D.? 
      JMP STYPE     YES 
DVERR LDA ERR25     SET CODE = INVALID DRIVER NAME
      JSB ERROR     PRINT DIAGNOSTIC
      JMP SEQT      GET NEXT EQT RECORD 
STYPE LDA N2
      JSB GETNA     MOVE 2 CHARS TO TBUF
      STA ASTYP     SAVE 2 ASCII CHARS FOR I.XX,C.XX
      CCA 
      ADA CURAL     ADJUST CURRENT LBUF ADDR
      STA CURAL     RESET CURAL TO CONVERT TYPE 
      LDA P2
      JSB GETOC     GET 2 OCTAL CHARS, CONVERT
      JMP DVERR     INVALID DRIVER NAME 
      LDB OCTNO     GET DRIVER TYPE 
      BLF,BLF       ROTATE TO UPPER B 
      STB EQTW2     SET DRIVER TYPE 
      JSB GETAL     GET NEXT CHAR FROM LBUF 
      CPA ZERO      END OF BUFFER?
      JMP LISCN     SCAN FOR I.XX, C.XX 
      CPA BLANK     CHAR = COMMA? 
      RSS           YES - CONTINUE
      JMP DVERR     NO - INVALID DRIVER NAME
* 
      CCA 
      STA DFLAG     SET DMA-IN FLAG 
      STA BFLAG     SET BUFFERING-IN FLAG 
* 
INDBU CCA 
      STA CMFLG     SET COMMA FLAG = NO COMMA IN
      JSB GETAL     GET NEXT CHAR FROM LBUF 
      CPA CHARD     CHAR = D? 
      JMP SEDMA     YES - SET DMA CODE
      CPA CHARU     CHAR = U? 
      JMP SETBU     YES - SET BUFFERING CODE
UNERR LDA ERR10     SET CODE = INVALID D,B,T
      JSB ERROR     PRINT DIAGNOSTIC
      JMP SEQT      GET NEXT EQT RECORD 
EQTST JSB GETAL     GET NEXT CHAR FROM LBUF 
      CPA ZERO      END OF BUFFER?
      JMP LISCN     SCAN FOR I.XX, C.XX 
      CPA BLANK     CHAR = COMMA? 
      JMP INDBU     YES - GET NEXT D,B,U, ENTRY 
      JMP UNERR     NO - INVALID D,B,U CHARACTER
* 
SEDMA ISZ DFLAG     SKIP - FIRST D ENTERED
      JMP UNERR     DUPLICATE D'S ENTERED 
      LDA MSIGN     SET BIT 15 = 1 FOR DMA FLAG 
      IOR EQTW1     SET IN DMA BIT
      STA EQTW1     AND SAVE IT 
      JMP EQTST     TEST FOR NEXT OPERAND 
* 
SETBU ISZ BFLAG     HERE FOR SUBCHANNEL PROCESSING
      JMP UNERR     DUPLICATE U'S ENTERED 
      LDA N2        2 CHAR CONVERSION 
      JSB GETOC 
      JMP UNERR     ERROR IN CONVERSION 
      LSL 6         GET IN CORRECT POSITION FOR SUBCHANNEL
      IOR EQTW1     MERGE IT IN 
      STA EQTW1 
      JMP EQTST     AND CHECK FOR MORE
* 
LISCN LDB ASDDR     ADDRESS OF D.XX BUFFER
      JSB SSTBL     IS IT IN THE SYMBOL TABLE?
      JMP DVERR     NO
      LDA LST4,I    YES, GET THE ADDRESS
      STA EQTW4     SAVE DRIVER START ADDRESS 
      LDA EQTWA     GET ADDRESS OF EQT TABLE
      STA SETAD     SAVE FOR PUNCHING 
      LDA PPREL     GET CURRENT OUTPUT ADDRESS
      LDB A 
      ADB P3        4 WORD EQT ENTRY
      STB PPREL     SAVE FOR LATTER 
      JSB SETCR     OUTPUT IN ABS 
      ISZ PPREL     BUMP TO NEXT EQT ENTRY
      ISZ CEQT      INCR EQT ENTRY COUNT
      JMP SEQT      PROCESS NEXT EQT RECORD 
* 
      SPC 1 
* 
SSQTI LDA CEQT      ANY EQT'S BEEN LOADED?
      SZA 
      JMP SSQT      YES, CAN END
      LDA ERR10     NO,AT LEAST ONE REQUIRED
      JSB ERROR     PRINT: "ERR PA" 
      JMP SEQT      START OVER
* 
SQTAD NOP 
EQTWA DEF *+1 
EQTW1 NOP 
EQTW2 NOP 
      NOP 
EQTW4 NOP 
      SPC 1 
ASCD. ASC 1,D.
CHARU OCT 125 
      SKP 
* 
*                                   SET DEVICE REFERENCE TABLE (SQT)
* 
SSQT  LDA P11       SEND OUT BEGINING MESSAGE 
      LDB MESQ0     "SQT ENTRIES" 
      JSB PRINT 
      LDA MESQA     GET ADDRESS OF MESSAGE BUFFERS
      STA CMSQA     SAVE AS CURRENT 
      LDA SQTEA     GET ADDRESS OF START OF SQT ADDRESS 
      STA CSQTE 
      LDA N6        GET # OF SQT ENTRIES
      STA SQTCT     SAVE IN DOWN COUNTER
      SPC 1 
SQTIN LDB CMSQA     GET ADDRESS OF MESSAGES 
      LDA B,I 
      INB 
      LDB B,I 
      JSB READ      GET INPUT 
      LDA N2        GET FIRST 2 CHARS 
      JSB GETNA 
      CPA RDRT      RETRY SQT TABLE?
      JMP SSQT      YES 
      CPA REQT      RETRY EQT TABLE?
      JMP GENIO     YES 
      JSB GINIT     RESET FOR SCAN
      LDA P2        CONVERT SQT ENTRY 
      JSB GETOC     TO OCTAL
      JMP SQTER     ERROR IN CONVERSION 
      SZA,RSS       0 IS ILLEGAL
      JMP SQTER 
      STA CSQTE,I   SAVE VALUE
      ADA N7        CHECK IF IN RANGE 
      SSA           LESS THAN 6?
      JMP SQTER     ERROR 
      CMA           CHECK IF OUT OF RANGE 
      ADA CEQT
      SSA 
      JMP SQTER     OUT OF RANGE
      ISZ CMSQA     GET NEXT MESSAGE ADDRESS
      ISZ CMSQA     GET TO NEXT COUNT 
      ISZ CSQTE     GET NEXT STORAGE ADDRESS
      ISZ SQTCT     DONE? 
      JMP SQTIN     NO...GET NEXT ENTRY 
* 
      LDA SQTEA     GET ADDRESS OF WHERE BUFFER TO BE OUTPUTED IS 
      STA SETAD     SAVE ADDRESS
      LDA SQTAD     GET ABS OUTPUT ADDRESS
      LDB SQTAD     GET ENDING ADDRESS
      ADB P5
      JSB SETCR     OUTPUT IT 
      JMP GTDMA     GO GET DMA FLAGS
      SPC 1 
SQTER LDA ERR27     SQT ERROR 
      JSB ERROR 
      JMP SQTIN     AND TRY AGAIN 
      SPC 1 
CMSQA NOP 
CSQTE NOP 
SQTCT NOP 
N7    OCT -7
      SPC 1 
SQTEA DEF *+1 
      REP 6 
      NOP 
      SPC 1 
MESQA DEF QMESA 
QMESA OCT 5 
      DEF KYBD? 
      OCT 4 
      DEF TTY?
      OCT 4 
      DEF LIB?
      OCT 6 
      DEF PNCH? 
      OCT 6 
      DEF INPT? 
      OCT 5 
      DEF LIST? 
MESQ0 DEF *+1 
      ASC 6,SQT ENTRIES 
                                                                                                                                                                            