ASMB,R,L,C
* 
* 
*  ***************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980.  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 XL  GENERATOR SEGMENT 3 
      NAM L20G3,5 92071-1X080 REV.2041 800715 
* 
*     NAME:    RTE XL  GENERATOR SEGMENT 3
*     SOURCE:  92071-18080
*     PGMR:    B.C. 
* 
      ENT L20G3 
* 
* 
      EXT EXEC
* 
      EXT DSTRG,IPBUF,DIPBF 
      EXT OP?,ASTRX 
      EXT EXIT,CNUMO,L.BUF
* 
      EXT NAMR,READF,OPEN,CLOSE 
      EXT SDCB3 
      EXT PPREL,LNKDR,.ENTR,.MBT,.CBT 
      EXT TDBP,LDBP,CSDBP,CUDBP,BPFWA 
* 
      EXT READ,FLERR,NAMRR,DRKEY,SPACE,MOVE 
      EXT LOCC
      EXT CNV99,L.ADD 
      EXT ERRCT,CONSL,AINT,STCR1
      EXT CBP.L,FXN.L,LSY.L,L.CLS,PRERR 
* 
      SUP PRESS EXTRANIOUS LISTING
* 
      SKP 
* 
L20G3 JSB SPACE 
      LDA LOCC
      STA PPREL 
      LDA P10 
      STA CONSL 
      LDB DMES8     TABLE GENERATION
      JSB DRKEY     OUTPUT MESSAGE
      JSB SPACE 
      JMP GTIFT     GET THE IFT TABLES
* 
DMES8 DEF MES8
MES8  ASC 5,* TBL GEN 
* 
      SKP 
* 
* 
*     GET THE IFT TABLE 
* 
GTIFT NOP 
      LDA D$DVT 
      LDB LOCC
      JSB FSYMB     FIND ADDRESS OF $DVTA AND PATCH 
      JSB MSENT      MISSING SYSTEM ENTRY POINT 
* 
      LDA FXN.L 
      STA FUT1      GET FIXUP ADDRESS AND SAVE
      ADA N4
      STA OPT3      1ST ADDRESS OF FIXUP FOR GENERATOR
      CLA,INA 
      STA CIFT      IFT COUNT 
      STA CDVT      DVT COUNT 
      JSB SPACE 
      CLA 
      STA MAXLU 
SIFT1 LDA P10 
      LDB DMS12     IFT TBL ? 
      JSB DRKEY     OUTPUT MESSAGE
      JSB SPACE 
      JSB BUFC
      JSB READ      READ INPUT
      JMP EXIT
      LDA OP? 
      CPA IF        IFT ? 
      JMP SIFT5     YES , IT IS AN IFT
      CPA EN        IS IT AN END? 
      JMP ENIFT     YES , END THE IFT ENTRIES 
      JMP IFERR     NO , IT IS AN ERROR 
* 
SIFT5 CCA 
      STA DFLAG     SET DRIVER IN FLAG
      STA SCFLG     SET SELECT CODE IN FLAG 
      CLA 
      STA LDTYP 
      STA SCNM
      STA EXTWD 
      LDA MSIGN 
      STA QUEUE     DEFAULT QUEUE TO FIFO 
* 
      JSB NAMRR     GET FILE NAME 
      SSA 
      JMP IFERR 
      LDA N6
      JSB MOVE
      DEF IPBUF+0 
      DEF FILE5 
      LDA TYPE5 
      AND P3
      STA TYPE5 
      ERA,SLA       IS IT A FILE? 
      JMP F5OPN     YES 
      JMP IFERR     ERROR , NOT A FILE
* 
F5OPN JSB OPN5
* 
L.MOR JSB L.RED 
      DEF *+2 
      DEF FLAG
      SSA           EOF ON THE RELO FILE? 
      JMP IF8       YES , RETURN TO COMMAND FILE INPUT
* 
      JSB L.CLS 
      DEF *+3 
      DEF TYPE
      DEF SBFLD     SUBFIELD , GEN=0
      SSA           RTN REC TYPE , 0=OK , -1=CK SUM ERR 
      JSB ERROR                         , -2=ILL REC
* 
      LDA TYPE
      CPA P1        IS IT NAM RECORD? 
      JSB MNAM      YES , SAVE NAM AS DEFAULT ENTRY POINT 
* 
* 
      LDA TYPE
      CPA P7        GEN OR LOD REC? 
      RSS           YES 
      JMP L.MOR     NO , READ ANOTHER RECORD
      LDA SBFLD     GET SUB FIELD 
      SZA           GEN RECORD? 
      JMP L.MOR     NO
* 
      LDA LEN       GET RECORD LENGTH 
      ADA N3        SUBTRACT OFF 3 HEADER WD
      ALS           MULTIPLY BY 2 
      STA LEN        TO GET CHARACTER LENGTH
      CLA,INA 
      STA ISTRF 
      STA RELFG 
* 
      LDA LEN 
      LDB LBUF3     ECHO GEN RECORD 
      JSB DRKEY 
* 
IF5   JSB NAMRF 
      SSA 
      JMP L.MOR     READ NEXT INFO
      JMP IF15
* 
IF8   JSB CLOSE     CLOSE THE RELO FILE 
      DEF *+2 
      DEF SDCB3+0 
* 
      CLA 
      STA RELFG     END OF RELOC FILE 
      SKP 
*     GET SELECT CODE , QUEUEING , AND TABLE EXTENSION
* 
IF10  JSB NAMRR 
      SSA 
      JMP IF50      END OF STRING 
IF15  LDB DIPBF 
      ADB P3
      LDA B,I 
      ARS,ARS       TYPE OF SUBPARAMTER 
      AND P3
      INB 
      LDB B,I       GET ACTUAL SUBPARAMETER 
      STB SUBP1      AND SAVE IT
      LDB A 
      LDA DIPBF,I   GET FNAME 
      CPA SC        IS IT THE SELECT CODE 
      JMP SELCD     YES 
      CPA QU        IS IT THE QUEUE TYPE? 
      JMP SETQU     YES 
      CPA TX        IS IT THE # OF IFT EXTENSION? 
      JMP SETTX     YES , SET THE # OF EXTENSION
      CPA IT        IS IT THE INTERFACE TYPE? 
      JMP SETIT     YES 
      AND HIMSK 
      CPA E         IS IT AN ENTRY PT. ?
      JMP SETPD     YES 
IFERR LDA P3        IFT INPUT ERROR 
      JSB LDRER     PRINT IT
      JMP DVT        AND CONTINUE TO GET DVT
* 
*     SELECT CODE 
* 
SELCD ISZ SCFLG 
      JMP SCERR 
      CPB P1        IS IT NUMERIC?
      RSS           YES 
      JMP SCERR 
      LDA SUBP1     GET THE SELECT CODE 
      ADA N16 
      SSA           SC LT 20B 
      JMP SCERR     YES , ERROR 
      LDA SUBP1     GET THE SELECT CODE 
      CMA,INA 
      ADA B57 
      SSA           SC GT 57B?
      JMP SCERR     YES , ERROR 
      LDA SUBP1     GET SELECT CODE 
      JSB CKSC      GO CHECK SC FOR DUPLICATION 
      JMP SCERR     YES , DUPLICATION 
      LDA SUBP1     GET THE SELECT CODE 
      STA SCNM      AND SAVE IT 
      JMP IF20
SCERR LDA P13 
      JSB LDRER 
      JMP IF20
      SKP 
* 
*     QUEUING TYPE
* 
SETQU CLB 
      LDA SUBP1 
      CPA PR        IS IT PRIORITY
      JMP QYES      YES , SET BIT TO 0
      INB           NO
      CPA FI        IS IT FIFO? 
      RSS           YES 
      JMP QUERR     ERROR 
QYES  RBR 
      STB QUEUE 
      JMP IF20
* 
QUERR LDA P14 
      JSB LDRER 
      JMP IF20
* 
* 
*     SET THE EXTENSION WORD
* 
SETTX CPB P1
      RSS 
      JMP TBERR 
      LDA SUBP1 
      SSA           POSITIVE? 
      JMP TBERR    NNO
      ADA N512
      SSA,RSS       LESS THAN 512?
      JMP TBERR     NO , ERROR
      LDA SUBP1     YES , GET # OF EXT WD 
      STA EXTWD     SAVE IT 
      JMP IF20
TBERR LDA P15 
      JSB LDRER 
* 
IF20  LDA RELFG 
      SLA           INFO FROM WHICH FILE? 
      JMP IF5       IFT INFO FROM RELO FILE 
      JMP IF10      IFT INFO FROM COMMAND FILE
* 
* 
* 
ERROR NOP           ILL REC OR CK SUM IN RELO REC 
      CLA 
      JSB LDRER 
      JMP ERROR,I 
* 
      SKP 
* 
*     ENTRY POINT 
* 
SETPD ISZ DFLAG 
      NOP 
      LDA DIPBF 
      RAL 
      INA 
      LDB DASCP 
      RBL 
      JSB .MBT      MOVE BYTE 
      DEF P5
      NOP 
      JMP IF20
* 
* 
* 
*     SET THE INTERFACE TYPE
* 
SETIT CPB P1        NUMERIC?
      RSS           YES 
      JMP TYERR     NO , ERROR
      LDA SUBP1     GET PARAMETER 
      SSA           POSITIVE? 
      JMP TYERR     NO , ERROR
      CMA,INA       YES , NEGATE
      ADA P63 
      SSA           LESS THAN 63? 
      JMP TYERR     NO
      LDA SUBP1     GET PARAMETER 
      STA LDTYP     YES , SAVE THE INTERFACE TYPE 
      JMP IF20
* 
TYERR LDA P12       INTERFACE TYPE ERROR
      JSB LDRER 
      JMP IF20
* 
* 
      SKP 
* 
IF50  LDA P13 
      LDB SCFLG     GET SELECT CODE IN FLAG 
      SSB 
      JSB LDRER 
      LDA DFLAG     GET THE  DRIVER IN FLAG 
      SSA,RSS       IS THE DRIVER ENTRY POINT IN? 
      JMP IF55      YES 
      LDA DMES8     NO , USE NAM AS DEFAULT 
      RAL 
      LDB DASCP 
      RBL 
      JSB .MBT
      DEF P5
      NOP 
IF55  JSB FUTP      SET UP FOUR POINTER FOR FIXUP 
      LDA LSY.L     CHECK FOR FIXUP OVERFLOW
      CMA 
      ADA FUT4
      SSA 
      JMP LER5      YES, OVERFLOW 
      NOP 
      LDA CIFT      IFT # 
      ALF,ALF 
      IOR MSIGN     FLAG AS IFT FIXUP 
      IOR LDTYP     IFT # & DRIVER TYPE 
      STA FUT1,I    WORD 1 OF FIXUP 
      CLA 
      STA VALUA 
      JSB DVADD     FIND DRIVER ENTRY POINT 
      LDA P9
      LDB RESLT     GET RESULT
      SZB           ENTRY POINT THERE?
      JSB LDRER     NO , UNDEFINED DRIVER ENTRY POINT 
      LDA VALUA     GET ADDRESS OF ENTRY POINT
* 
      LDB FUT1
      ADB N1        PHYSICAL DRIVER ADDRESS 
      STA B,I       WORD 2 OF FIXUP 
      ADB N1
      LDA PPREL     CURRENT DVT ADDRESS 
      STA B,I       WORD 3 OF FIXUP 
      LDA SCNM      SELECT CODE 
      ALF,ALF 
      RAL 
      IOR EXTWD     # OF TX 
      IOR QUEUE     QUEUEING TYPE & S.C. & # OF TX
      STA FUT4,I    WORD 4 OF FIXUP 
      ISZ OPT.3,I   BUMP UP # OF FIXUP
* 
      LDA CIFT
      LDB DM#37 
      JSB STFNM 
      JSB SPACE 
      LDA P8
      LDB DMS37 
      JSB DRKEY     PRINT IFT # 
* 
      ISZ CIFT
      JMP DVT       LET GET A DVT 
* 
      SKP 
* 
* 
DASCP DEF ASCPD 
ASCPD NOP 
      NOP 
      NOP 
* 
DMS12 DEF MES12 
MES12 ASC 5,* IFT TBL?
* 
D$IFT DEF $IFTA 
$IFTA ASC 3,$IFTA 
* 
D$IF# DEF $IFT# 
$IFT# ASC 3,$IFT# 
* 
DMS13 DEF MES13 
MES13 ASC 5,* DVT TBL?
* 
D$DVT DEF $DVTA 
$DVTA ASC 3,$DVTA 
* 
D$DV# DEF $DVT# 
$DVT# ASC 3,$DVT# 
* 
DM#35 DEF M#35
DMS35 DEF MES35 
MES35 ASC 3,* DVT 
M#35  NOP 
      ASC 3,
* 
DM#37 DEF M#37
DMS37 DEF MES37 
MES37 ASC 3,* IFT 
M#37  NOP 
      ASC 3,
* 
F5    DEF FILE5 
FILE5 BSS 3 
TYPE5 NOP 
F5SC  NOP 
F5DSC NOP 
IERR5 NOP 
* 
      SKP 
* 
*  DVT TABLE
* 
DVT   JSB SPACE     NEW LINE
      LDA P10       PRINT:
      LDB DMS13     "DVT TBL" 
      JSB DRKEY 
      JSB SPACE     NEW LINE
* 
SDVT1 JSB SPACE     NEW LINE
      JSB BUFC
      JSB READ      PRINT MESSAGE, GET REPLY
      JMP EXIT
      LDA OP? 
      CPA EN        CHARS= END ?
      JMP SIFT1     YES, TRY TO END 
      CPA IF        ANOTHER IFT ? 
      JMP SIFT5     YES 
      CPA DV        IS IT A DVT?
      RSS           YES 
      JMP UNERR     NO , IT IS AN ERROR 
      ISZ DVTIN     DVT IN FLAG 
      SKP 
* 
      CLA 
      STA QUEUE 
      STA DVRAD     LOGICAL DRIVER ENTRY POINT
      STA TIMWD     CLEAR TIME WORD 
      STA EXTWD     CLEAR DVT EXTENSION WORD
      STA #LU       CLEAR THE LU COUNT
      STA #DP       CLEAR THE DRIVER PARMETER COUNT 
      STA MFG       CLEAR ACCEPT THE PARAMETER FLAG 
      CCA 
      STA TBUF
      STA MDLFD     SET FLAG MODEL NOT SPECIFIED = -1 
      STA BFLAG     SET BUFFERING-IN FLAG 
      STA DFLAG     SET LOGICAL DRIVER IN FLAG
      STA RFLAG     SET # OF DRIVER PARM IN FLAG
      STA PFLAG     SET DRIVER PARMETER IN FLAG 
      STA LUFLG     SET THE LU IN FLAG
      LDA BLIM
      STA HIBUF     SET THE DEFAULT LIMIT LOW=100,HIGH=400
      LDA P63       SET DEFAULT DEVICE PRIORITY TO 63 
      STA DEVPR 
      LDA B70 
      STA LDTYP     SET DEFAULT DEVICE TYPE TO 70B AN INSTRUMENT
* 
      LDA FUT4      SET UP DP IN FREE MEMORY
      ADA N1
      STA CFUT4 
      STA DPA       DRIVER PARAMETER ADDRESS
      ADA N1
      STA PFUT4 
      CLA 
      STA CFUT4,I   ZERO OUT DP COUNT 
* 
      JSB NAMRR     GET FILE NAME 
      SSA 
      JMP UNERR 
      LDA N6
      JSB MOVE
      DEF IPBUF+0 
      DEF FILE5 
* 
      JSB NAMRR     GET MODEL # 
      SSA 
      JMP UNERR 
      LDB DIPBF 
      ADB P3
      LDA B,I       GET TYPE
      AND P3
      SZA,RSS       IS IT NULL
      JMP FOPEN     YES 
      CLA 
      STA MDLFD     SET FLAG MODEL SPECIFIED = 0
      LDA N10       NO
      JSB MOVE
      DEF IPBUF+0 
      DEF TBUF
* 
FOPEN LDA TYPE5     GET FILE TYPE 
      AND P3
      STA TYPE5 
      SZA,RSS       IS IT A NULL? 
      JMP IF90      YES 
      CPA P3        IS IT A FILE NAME?
      RSS           YES 
      JMP UNERR     NO
* 
      JSB SPACE 
      JSB OPN5
* 
* 
L.MR  JSB L.RED 
      DEF *+2 
      DEF FLAG
      SSA           EOF ON THE RELO FILE? 
      JMP IF80      YES , RETURN TO COMMAND FILE INPUT
* 
      JSB L.CLS 
      DEF *+3 
      DEF TYPE
      DEF SBFLD     SUBFIELD
      SSA           RTN REC TYPE , 0=OK , -1=CK SUM ERR 
      JSB ERROR 
* 
* 
      LDA TYPE
      CPA P1        IS IT THE NAM RECORD? 
      JSB MNAM      YES , USE NAM AS THE DEFAULT ENTRY POINT
* 
* 
      LDA TYPE
      CPA P7        GEN OR LOD RECORD?
      RSS 
      JMP L.MR      NO , READ ANOTHER RECORD
      LDA SBFLD     GET GEN RECORD
      SZA           GEN RECORD? 
      JMP L.MR      NO
* 
      LDA LEN       GET RECORD LENGTH 
      ADA N3        SUBTRACT OFF 3 HEADER WD
      ALS           MULTIPLY BY 2 
      STA LEN        TO GET CHARACTER LENGTH
      CLA,INA 
      STA ISTRF 
      STA RELFG 
      STA PNFLG     SET FIRST TIME PRINT FLAG 
* 
IF60  JSB NAMRF 
      SSA 
      JMP L.MR      READ NEXT INFO
      LDA DIPBF,I   GET FIRST INPUT 
      AND HIMSK 
      CPA M         IS IT THE MODEL #?
      JMP IF65      YES 
      LDA MFG 
      CPA P1        ACCEPT THE PARAMETERS?
      JMP L.MR      NO , GET ANOTHER MODEL? 
      LDA PNFLG     GET PRINT IT FLAG 
      CPA P1
      RSS           YES , 1ST TIME FLAG 
      JMP IFN10     NO , NOT 1ST TIME FLAG
      INA 
      STA PNFLG 
      LDA LEN 
      LDB LBUF3      ECHO THE GEN RECORD
      JSB DRKEY 
      JMP IFN10     GET NEXT PARAMETER
* 
IF65  CLA,INA 
      STA MFG       SET IN THE MODEL SECTION
      LDA MDLFD 
      CPA P1        HAS THE MODEL # BEEN FOUND? 
      JMP IF80      YES , CLOSE RELO FILE AND CONTINUE
      CLB           NO
      LDA DIPBF 
      ADA P3
      STB A,I       CLEAR OUT PARM TYPE WD
      STB TBUF+3    CLEAR OUT PARM TYPE WD
      LDA DIPBF     COMPARE MODEL # ? 
      RAL 
      LDB ATBUF 
      RBL 
      JSB .CBT      COMPARE THEM
      DEF P20 
      NOP 
      JMP IF70      YES , MODEL # MATCHED 
      JMP L.MR
      JMP L.MR
IF70  CLA 
      STA MFG       ACCEPT THE PARARMETER IN MODEL #
      INA 
      STA MDLFD     YES , MODEL FOUND 
      JMP IF60
* 
IF80  JSB CLOSE     CLOSE THE RELO FILE 
      DEF *+2 
      DEF SDCB3+0 
* 
      LDA MDLFD 
      SZA           DID WE FIND THE MODLE #?
      JMP IF90      YES , MODEL FOUND 
      LDA P24       NO , GIVE ERROR MESSAGE 
      JSB LDRER 
* 
IF90  CLA 
      STA RELFG     END OF RELOC FILE 
      CCA 
      STA PFLAG 
      JSB SPACE 
* 
* 
      SKP 
IFN   JSB NAMRR 
      SSA 
      JMP LISCN     END OF STRING 
IFN10 LDB DIPBF 
      ADB P3
      LDA B,I 
      STA OFST2     SUB PARAMETER TYPE
      ARS,ARS 
      AND P3
      INB 
      STB OFST1     SUB PARAMETER ADDRESS 
      LDB B,I       GET ACTUAL SUBPARAMETER 
      STB SUBP1      AND SAVE IT
      LDB A 
      LDA DIPBF,I 
      CPA BL        IS IT BUFFER LENGTH ? 
      JMP SETBL     YES 
      CPA DP        IS IT DRIVER PARAMETER ?
      JMP SETDP     YES 
      CPA DT        IS IT DRIVER TYPE ? 
      JMP SETDT     YES 
      CPA LU        IS IT LOGICAL UNIT ?
      JMP SETLU     YES 
      CPA PR        IS IT PRIORITY ?
      JMP SETPR     YES 
      CPA TO        IS IT TIME OUT ?
      JMP SETTO     YES 
      CPA TX        IS IT # OF TABLE EXTENSION ?
      JMP SETBX     YES 
      CPA DX        IS IT # OF DRIVER PARAMETER 
      JMP SETDX     YES 
      CPA QU        IS IT QUEUING TYPE? 
      JMP STQU      YES , SET QUEUEING TYPE 
      CPA DASH      IS IT A CONTINUATION? 
      JMP MORIN     YES 
      AND HIMSK 
      CPA E         IS IT THE DRIVER ENTRY POINT? 
      JMP SETLD     YES 
      LDA P11       WHAT IS IT ?????? 
      JSB LDRER 
      JMP SDVT1 
* 
MORIN JSB READ
      JMP EXIT
      JMP IFN10 
* 
* 
IFN20 LDA RELFG 
      SLA 
      JMP IF60
      JMP IFN 
* 
      SKP 
* 
*     SET TIME OUT
* 
SETTO CPB P1        NUMERIC?
      RSS 
      JMP TOERR     NO , ERROR
      LDA SUBP1     GET TIME OUT VALUE
      SZA 
      CMA           ONE'S COMPLEMENT FOR THAT TIME
      STA TIMWD     SAVE FOR OUTPUT 
      JMP IFN20 
* 
TOERR LDA P16 
      JSB LDRER 
      JMP IFN20 
* 
*     TABLE EXTENSION 
* 
SETBX CPB P1
      RSS 
      JMP TXERR 
      LDA SUBP1     GET # OF TABLE EXTENSION
      ADA N512
      SSA,RSS       LESS THAN 512?
      JMP TXERR     NO , ERROR
      LDA SUBP1     YES , GET # OF TABLE EXTENSION
      STA EXTWD     SAVE # OF EXTENSIONS
      JMP IFN20 
* 
TXERR LDA P15 
      JSB LDRER 
      JMP IFN20 
* 
*     DEVICE PRIORITY 
* 
SETPR CPB P1        IS IT NUMERIC?
      RSS 
      JMP PRERS 
      LDA SUBP1     GET DEVICE PRIORITY 
      ADA N64 
      SSA,RSS       LESS THAN 64? 
      JMP PRERS     NO , DEVICE PR ERROR
      LDA SUBP1     YES 
      STA DEVPR 
      JMP IFN20 
* 
PRERS LDA P20 
      JSB LDRER 
      JMP IFN20 
* 
      SKP 
      SKP 
* 
*     DRIVER PARAMETER SIZE 
* 
SETDX CPB P1        IS IT NUMERIC?
      RSS           YES 
      JMP DXERR     NO , ERROR
      LDA SUBP1     GET DX SIZE 
      SSA           POSITIVE? 
      JMP DXERR     NO
      ADA N128
      SSA,RSS       LESS THAN 128?
      JMP DXERR     NO , ERROR
      LDA SUBP1     GET SIZE
      CMA,INA       NEGATE
      ADA PFUT4     FIXUP ADDRESS 
      STA DPBND     SAVE IN DP LOWER BOUND
      CMA,INA       NEGATE
      ADA LSY.L     ADD SYMBOL TABLE UPPER BOUND
      SSA,RSS       OVERFLOW? 
      JMP LER5      YES , SYSTEM OVERFLOWED 
      STB RFLAG     SET DX IN 
* 
      LDA SUBP1     GET NEW SIZE
      CMA,INA 
      ADA #DP       ADD OLD SIZE
      SSA,RSS       IS NEW DX BIGGER? 
      JMP SDX20     NO
      STA ZTEM5     YES , SAVE DIFFERENCE 
      CLB           CLEAR THE BIGGER AREA 
      LDA SUBP1 
      CMA,INA 
      ADA PFUT4 
STDX5 STB A,I       CLEAR NEW DP AREA 
      INA 
      ISZ ZTEM5 
      JMP STDX5 
SDX20 LDB SUBP1 
      STB #DP 
      STB CFUT4,I   NEW DP COUNT
      JMP IFN20 
* 
DXERR LDA P21 
      JSB LDRER 
      JMP IFN20 
* 
      SKP 
* 
*     DEVICE TYPE 
* 
SETDT CPB P1
      RSS 
      JMP DTERR 
      LDA SUBP1 
      SSA           POSITIVE? 
      JMP DTERR     NO
      ADA N64 
      SSA,RSS       LESS THAN 64? 
      JMP DTERR     NO
      LDA SUBP1     YES 
      ALF,ALF 
      STA LDTYP     AND SAVE IT 
      JMP IFN20 
* 
DTERR LDA P18 
      JSB LDRER 
      JMP IFN20 
* 
      SKP 
* 
*   SET BUFFER LIMITS 
* 
SETBL CLA 
      LDB SUBP1 
      CPB BU        IS 1ST PARM BUFFERING?
      JMP SBL5      YES ,SET FLAG 
      CPB UN        NO , IS IT UNBUFFERING? 
      JMP SBL10     YES 
      SZB           IS IT A NULL? 
      JMP BLERR     NO , ERROR
      RSS           YES 
SBL5  STB BFLAG     SET BUFFER FLAG 
SBL10 LDB DIPBF     YES , GET LOWER LIMIT 
      ADB P3
      LDA B,I 
      ARS,ARS 
      ARS,ARS 
      AND P3
      CPA P1        IS IT NUMERIC?
      RSS           YES 
      JMP BLERR     NO , ERROR
      ADB P2
      LDA B,I       GET LOWER LIMIT 
      SSA           POSITIVE? 
      JMP BLERR     NO
      STA LOBUF     AND STORE IT
      LDB DIPBF     GET UPPER LIMIT 
      ADB P3
      LDA B,I 
      ALF,ALF 
      RAL,RAL 
      AND P3
      CPA P1        IS IT NUMERIC?
      RSS           YES 
      JMP BLERR 
      ADB P3
      LDA B,I       GOT IT
      STA HIBUF 
      LDB LOBUF     GET LOWER LIMIT 
      CMB,INB       NEGATE
      ADB HIBUF 
      SSB           HI LIMIT > LOW LIMIT
      JMP BLERR     NO , ERROR
      ASR 4         DIVIDE BY 16
      BLF,BLF       SHIFT UP TO UPPER 8 BITS
      STB HIBUF 
      LDB LOBUF 
      ASR 4 
      STB A 
      IOR HIBUF     MERGE IN THE HIBUF LIMIT
      STA HIBUF     SAVE IT 
      JMP IFN20 
* 
BLERR LDA P17 
      JSB LDRER 
      JMP IFN20 
      SKP 
* 
*     SET DRIVER PARAMETER
* 
SETDP SZB,RSS       NULL? 
      JMP SDP30     YES , EXIT
      LDA B60 
      STA MASK      SAVE IT AS A MASK 
      LDA N5
      STA CNT1
      LDB SUBP1     GET PARAMETER POSITION POINTER
      CMB,INB 
      ADB #DP       ADD DP COUNT
      SSB           IS PARAMETER WITHIN RANGE?
      JMP DPERR     NO , ERROR
* 
      LDB SUBP1     GET POINTER AGAIN 
      CMB,INB 
      ADB PFUT4 
      INB           ADDRESS TO STORE DP 
SDP10 LDA OFST2     GET PARMATER TYPE 
      AND MASK
      SZA,RSS       JMP IF NOT NULL 
      JMP SDP30     NULL , FINISH 
      LDA MASK
      RAL,RAL 
      STA MASK
* 
      ISZ OFST1     SUB PARM ADDRESS
      LDA OFST1,I   GET SUB PARM
      CPB DPBND     ADDRESS EXCEEDED DP BOUND?
      JMP DPERR     YES 
      STA B,I 
      ADB N1
      ISZ CNT1      ANY MORE SUB PARM?
      JMP SDP10     YES 
SDP30 JMP IFN20     NO
* 
DPERR LDA P19 
      JSB LDRER 
      JMP IFN20 
* 
      SKP 
* 
*     SET LU'S
* 
SETLU ISZ LUFLG     GET THE LU'S
      JMP LUERR 
      CPB P1        IS IT NUMERIC?
      RSS 
      JMP LUERR 
      CLA 
      STA LU1 
      STA LU2 
      STA LU3 
      LDA SUBP1     GET SUB PARM 1
      STA LU1 
      LDA OFST2     GET PARM TYPE 
      AND B60       GET 2ND SUB PARM TYPE 
      SZA,RSS 
      JMP IFN       IT IS THE END 
      ARS 4 
      CPA P1        IS IT NUMERIC?
      JMP LUERR     NO , ERROR
      ISZ OFST1     YES 
      LDA OFST1,I   GET IT
      STA LU2       STORE 2ND LU
      LDA OFST2     3RD SUB PARM TYPE 
      AND B300
      SZA,RSS 
      JMP IFN       IT IS THE END 
      CPA P64       IS IT NUMERIC?
      RSS           YES 
      JMP LUERR 
      ISZ OFST1 
      LDA OFST1,I   GET 3RD LU
      STA LU3       AND STORE IT
      JMP IFN20 
* 
LUERR LDA P22 
      JSB LDRER 
      JMP IFN20 
* 
      SKP 
* 
* 
*     ENTRY POINT 
* 
SETLD ISZ DFLAG 
      NOP 
      LDA DIPBF 
      RAL 
      INA 
      LDB DASCP 
      RBL 
      JSB .MBT      MOVE BYTE 
      DEF P5
      NOP 
* 
      CLA 
      STA VALUA 
      JSB DVADD     FIND DRIVER ENTRY POINT 
      LDA P9
      LDB RESLT 
      SZB           ERROR 
      JSB LDRER     YES , UNDEFINED DRIVER ENTRY POINT
      LDA VALUA 
      STA DVRAD     SAVE IN DRIVER ADDRESS
      JMP IFN20 
* 
* 
* 
UNERR LDA P4
      JSB LDRER 
      JMP SDVT1 
* 
*     SET DVT QUEUEING
* 
STQU  CLB 
      LDA SUBP1     GET THE PARAMETER 
      CPA PR        IS IT PRIORITY? 
      JMP QOK       YES 
      INB           NO
      CPA FI        IS IT FIFO? 
      RSS           YES 
      JMP QERR
QOK   RBR 
      STB QUEUE 
      JMP IFN20 
* 
QERR  LDA P14 
      JSB LDRER 
      JMP IFN20 
* 
      SKP 
* 
LISCN JSB CNUMO     CONVERT DVT ADDRESS TO OCTAL
      DEF *+3 
      DEF PPREL+0 
      DEF MES35+4 
      LDA CDVT
      LDB DM#35 
      JSB STFNM 
      JSB SPACE 
      LDA P14 
      LDB DMS35 
      JSB DRKEY     PRINT DVT ADDRESS 
      JSB SPACE 
* 
      JSB BUFC
      LDB DSTRG     ADDRESS OF STRING 
      CCA 
      STA B,I       DVT 1  LINK WORD
      INB 
      LDA QUEUE 
      STA B,I       DVT 2 QUEUE BIT 15
      INB 
      LDA PPREL 
      ADA P2
      STA B,I       DVT 3  CIRCULAR NODE POINT TO DVT 3 
      INB 
      LDA PPREL 
      STA B,I       DVT 4  CIRCULAR DVT  POINT TO DVT 1 
      ADB P2
      LDA LDTYP 
      STA B,I       DVT 6  DEVICE TYPE
      ADB P2
      CLA 
      ISZ BFLAG     IS BUFFERING REQUESTED ?
      IOR MSIGN     YES , SET BIT 15
      STA B,I       DVT 8  B & CLEAR BUFFER ACC.
      INB 
      LDA HIBUF 
      STA B,I       DVT 9  BUFFER LIMIT & 1ST TIME BIT
      ADB P2
      CCA 
      STA B,I       DVT 11 TIME OUT LIST LINKAGE
      ADB P2
      LDA TIMWD 
      STA B,I       DVT 13 TIME OUT VALUE 
      INB 
      LDA DVRAD 
      STA B,I       DVT 14 LOGICAL DRIVER ADDRESS 
      ADB P6
      LDA DEVPR 
      IOR MSIGN 
      STA B,I       DVT 20 DVR COMMON & DEV PRIORTY 
      LDA #DP       GET # OF DVR PARM 
      ALF,ALF       SHIFT TO UPPER BYTE 
      RAL 
      AND HIMSK 
      ADA EXTWD 
      LDB DSTRG 
      ADB P20 
      STA B,I       DVTP & DVTX 
      LDA PPREL     GET CURRENT DVT ADDRESS 
      STA ADVT      AND SAVE IT IN ADVT 
      LDB A 
      ADB P21 
      STB PPREL 
      JSB SETCR     OUTPUT IN ABS 
      ISZ PPREL 
      JSB BUFC      CLEAR THE OUTPUT BUFFER 
      LDA #DP       DRIVER PARAMETER? 
      SZA,RSS 
      JMP CH250     NO
      CMA,INA       YES NEGATE # OF DRIVER PARAMETER
      STA #DP       AND STORE IT BACK 
      CLA,INA 
      STA TCNT      DP COUNT
CH0   LDA DSTRG     ADDRESS OF OUTPUT BUFFER
      STA ZTEMP 
      LDA N40       OUTPUT BUFFER SIZE
      STA CNT1
      CLA 
      STA CNT2      # OF DRIVER PARAMETER IN OUTPUT BUFFER
CH050 LDA PFUT4,I   GET DRIVER PARAMETER
      STA ZTEMP,I   STORE IT IN THE OUTPUT BUFFER 
* 
      ISZ ZTEMP     BUMP UP OUTPUT ADDRESS
      LDA PFUT4 
      ADA N1
      STA PFUT4     DECREASE ADDRESS
      ISZ CNT2      BUMP UP # OF DRIVER PARM IN OUTPUT BUFFER 
      ISZ #DP       END OF DRIVER PARAMETER ? 
      RSS 
      JMP CH150     YES 
      ISZ CNT1      END OF OUTPUT BUFFER ?
      JMP CH050     NO , GET MORE DRIVER PARM 
CH150 LDB CNT2      # OF DRIVER PARAMETER 
      LDA PPREL 
      ADB PPREL 
      ADB N1
      STB PPREL 
      JSB SETCR     OUTPUT ABS
      ISZ PPREL 
      JSB BUFC
      LDA #DP 
      SZA           ANY MORE DRIVER PARAMETER?
      JMP CH0       YES 
* 
* 
* 
      SKP 
CH250 JSB SPACE 
      CLA 
      STA OFST1 
      STA OFST2 
      LDA LU1       GET LU 1
      SZA 
      JSB CKDLU     PREVIOUSLY DEFINE ? 
      JSB LUER      YES , ERROR 
      STA OFST1     NO
      LDA LU2       GET 2ND LU
      SZA,RSS 
      JMP CH020 
      JSB CKDLU     PREVIOUSLY DEFINE ? 
      JSB LUER      YES , ERROR 
      ALF,ALF       NO , EVERYTHING OK
      STA OFST2 
      LDA LU3       GET 3RD LU
      SZA,RSS 
      JMP CH020 
      JSB CKDLU     PREVIOUSLY DEFINE ? 
      JSB LUER      YES , ERROR 
      IOR OFST2     NO
      STA OFST2 
CH020 JSB FUTP      SET UP FOUR POINTER FOR FIXUP 
      NOP 
      LDA CIFT      GET IFT # 
      ADA N1
      ALF,ALF       MOVE TO UPPER BYTE
      IOR EXTWD     IFT # & # OF TX 
      STA FUT1,I    WORD 1 OF FIXUP 
      LDA ADVT            CURRENT DVT ADDRESS 
      LDB FUT1
      ADB N1
      STA 1,I       WORD 2 OF FIXUP 
      ADB N1
      LDA OFST1     1ST LU
      STA 1,I       WORD 3 OF FIXUP 
      ADB N1
      LDA OFST2     2ND & 3RD LU
      STA B,I       WORD 4 OF FIXUP 
      ISZ OPT.3,I   BUMP UP # OF FIXUP
      LDA LSY.L 
      CMA 
      ADA FUT4
      SSA           CHECK FOR MEMORY OVERFLOW 
      JMP LER5
* 
* 
      ISZ CDVT
      CLA 
      STA FTIME 
      JSB SPACE 
      JMP SDVT1 
* 
      SKP 
* 
LUER  NOP 
      LDA P22       LU ALREADY DEFINED
      JSB LDRER 
      CLA 
      JMP LUER,I
* 
* 
LER5  LDA P8        SYSTEM OVERFLOW 
      JSB LDRER 
      JMP EXIT      START OVER
* 
* 
ENIFT LDA PPREL 
      STA LOCC
* 
      LDB CIFT
      ADB N1
      LDA D$IF# 
      JSB FSYMB     PATCH # OF IFT'S
      JSB MSENT     MISSING SYSTEM ENTRY POINT
* 
      LDB CDVT
      ADB N1
      LDA D$DV# 
      JSB FSYMB     PATCH # OF DVT'S
      JSB MSENT     MISSING SYSTEM ENTRY POINT
* 
* 
      SKP 
* 
*     NODE INPUT
* 
      JSB SPACE     NEW LINE
      CLA,INA 
      STA CNODE     SET NODE COUNT=1
      LDA P15 
      LDB ME27A     "* NODE INPUT"
      JSB DRKEY 
      JSB SPACE 
* 
ND0   CLA 
      STA NODCK 
      LDA CNODE 
      LDB M27CA 
      JSB STFNM 
      JSB SPACE 
      LDA P18 
      LDB ME27B     "* NODE XX = LU #'S " 
      JSB DRKEY 
      JSB READ
      JMP EXIT
      LDA CNODE 
      ALF,ALF 
      STA CNODE 
      LDA OP? 
      CPA EN        IS IT THE END 
      JMP ENODE     YES 
      CPA NO        IS IT A NODE? 
      RSS           YES 
      JMP NDERR     ??? WHAT IS IT ?
      LDA FUT4      PREPARE THE FIXUP 
      ADA N1
      STA CFUT4     SAVE COUNTER ADDRESS
      ADA N1
      STA PFUT4     SAVE POINTER ADDRESS
      CLA 
      STA CFUT4,I   ZERO OUT # OF LU'S
* 
ND5   JSB NAMRR 
      SSA 
      JMP NDFIN 
      LDB DIPBF 
      ADB P3
      LDA B,I       GET TYPE
      CPA P1        IS IT NUMERIC?
      RSS           YES 
      JMP NDERR     NO , ERROR
      STA NODCK     SET NODE IN 
      LDA DIPBF,I 
      STA #LU       NO , LET SAVE IT
      LDA OPT.3,I         # OF FIXUP
      CMA,INA 
      STA OFST1     AND SAVE IT 
      LDB OPT3      ADDRESS OF FIXUP
ND010 STB CNT1      CURRENT ADDRESS OF FIXUP
      LDA B,I       GET WORD 1 OF FIXUP 
      SSA           IS IT A DVT FIXUP ENTRY 
      JMP ND060     NO
      ADB N2        YES,MOVE TO LU
      LDA B,I       GET LU
      STB OFST2     ADDRESS OF NODE 
      AND LOMSK 
      CPA #LU       DOES THIS EQUAL FIXUP LU ?
      JMP ND050     YES 
      ADB N1        NO GET NEXT WORD
      LDA B,I 
      AND HIMSK     UPPER BYTE
      ALF,ALF 
      CPA #LU       DOES THIS EQUAL FIXUP 
      JMP ND050     YES 
      LDA B,I       NO , GET WORD AGAIN 
      AND LOMSK 
      CPA #LU       DOES THIS EQUAL FIXUP ? 
      JMP ND050     YES 
      JMP ND060     NO
ND050 LDA OFST2,I   HAS THIS LU BEEN DEFINE IN A NODE ? 
      AND HIMSK 
      SZA           NO , SET NODE 
      JMP NDERR     YES , ERROR 
      LDA OFST2     LU MATCHED , GET FIX ADDRESS
      STA PFUT4,I   SAVE THE NODE ADDRESS 
      ISZ CFUT4,I   BUMP UP THE COUNT 
      LDA PFUT4 
      ADA N1
      STA PFUT4 
      JMP ND5       GET ANOTHER LU
* 
ND060 ISZ OFST1     NEXT FIXUP
      RSS 
      JMP NDERR     UNABLE TO FIND THE LU 
      LDB CNT1
      ADB N4        GET NEXT FIXUP ADDRESS
      JMP ND010 
* 
NDFIN LDA NODCK     ANY NODE? 
      SZA,RSS       YES 
      JMP NDERR     ERROR , NO NODE INPUTTED
      LDA CFUT4,I   GET # OF FIXUP
      CMA,INA 
      STA CFUT4,I 
      LDA CFUT4 
      ADA N1
      STA PFUT4     NODE ADDRESS
ND100 LDB PFUT4,I   GET NODE ADDRESS
      LDA B,I       GET NODE IN FIXUP 
      IOR CNODE     INSERT NODE # 
      STA B,I       SAVE IT BACK
      LDA PFUT4     GET NEXT VALUE
      ADA N1
      STA PFUT4 
      ISZ CFUT4,I   ARE WE FINISH?
      JMP ND100     NO
ND105 LDA CNODE 
      ALF,ALF 
      INA 
      STA CNODE 
      JMP ND0 
* 
NDERR LDA P6        NODE ERROR
      JSB LDRER 
      JMP ND105 
* 
ME27A DEF *+1 
      ASC 8,* DVT NODE LIST 
ME27B DEF *+1 
      ASC 3,* NODE
ME27C NOP 
      ASC 5,= LU #'S? 
M27CA DEF ME27C 
* 
* 
CNODE NOP 
LOMSK OCT 377 
      SKP 
      SKP 
* 
*     NODE
* 
ENODE LDA N2
      STA OFST1     NODE INFO OFFSET
      LDA N2
      STA OFST2     DVT ADDRESS OFFSET
      CCA 
      STA BFLAG     NODE FLAG 
      LDA OPT.3,I   # OF FIXED UP ENTRIES 
      LDB CNODE     # OF NODE 
      BLF,BLF 
      ADB N1
      STB CNODE 
      SZB           ANY NODE? 
      JSB FIXTB     YES ,FIXUP THE NODE LINKS IN THE DVT
      CLA           NO
      STA OFST1     IFT INFO OFFSET 
      LDA N3
      STA OFST2     DVT ADDRESS OFFSET
      CLA 
      STA BFLAG     IFT FLAG
      LDA OPT.3,I   # OF FIXUP ENTRIES
      LDB CIFT
      ADB N1
      SZB,RSS       ANY FIXUP ENTRIES?
      JMP F05       NO
      JSB FIXTB     YES 
* 
*     FIX DVT EXT WORD FOR DVT ENTRIES NOT IN 
*     A NODE CONFIGURATION
* 
      LDA OPT.3,I   GET & NEGATE # OF FIXUPS
      CMA,INA 
      STA CNT1
      LDB OPT3      FIXUP ADDRESS 
FX5   STB PFUT4 
      LDA B,I       GET FIRST FIXUP 
      SSA           IS THIS A DVT FIXUP?
      JMP FX15      NO , GET NEXT DVT 
      AND LOMSK 
      SZA,RSS       IS EXT WD ZERO? 
      JMP FX15      YES , GET NEXT DVT
      STA EXTWD     NO , SAVE # OF EXT WD 
      ADB N2        POINT TO NODE WORD
      LDA B,I       GET NODE IN DVT FIXUP 
      AND HIMSK 
      SZA           IS NODE ZERO? 
      JMP FX15      NO , GET NEXT DVT 
      ADB P1        YES , POINT TO DVT FIXUP WD 2 
      LDB B,I       GET REAL DVT ADDRESS
      ADB P21       POINT TO DVT 22 
      LDA PPREL 
      JSB STCR1     PATCH UP DVT 22 
* 
      LDA PPREL 
      ADA EXTWD 
      STA PPREL     UPDATE LOCC 
* 
FX15  ISZ CNT1      ANY MORE FIXUP? 
      RSS           YES 
      JMP F05       NO
      LDB PFUT4 
      ADB N4
      JMP FX5 
* 
      SKP 
* 
*     FIXUP TABLE 
* 
FIXTB NOP 
      CMA,INA 
      STA CNT1      # OF FIXUP ENTRIES
      STA Z1TMP     SAVE # OF FIXUP ENTRIES 
      CMB,INB 
      STB CNT2      # OF NODE OR IFT ENTRIES
      CLA 
      STA CFUT4 
FI05  ISZ CFUT4     THE NODE # OR IFT # TO MATCH
      LDA OPT3
      STA PFUT4 
      CCA 
      STA ZTEMP     FIRST TIME FLAG 
      LDA Z1TMP     RESTORE # OF FIXUPS 
      STA CNT1
FI10  LDA PFUT4,I   GET FIRST FIXUP 
      SSA           IS THIS A DVT ? 
      JMP FI15      NO GET NEXT FIXUP 
      AND LOMSK 
      STA EXTWD     # OF TX 
      LDB PFUT4 
      ADB OFST1 
      LDA B,I       GET NODE # OR IFT # 
      AND HIMSK 
      ALF,ALF 
      CPA CFUT4     DOES IT MATCH CURRENT # ? 
      JMP FI20      YES 
FI15  ISZ CNT1      END OF FIXUP? 
      RSS           NO
      JMP FI40      YES 
      LDA PFUT4 
      ADA N4
      STA PFUT4 
      JMP FI10
* 
FI20  ISZ ZTEMP     IS IT THE 1ST MATCH?
      JMP FI30      NO
      LDA PFUT4     YES 
      ADA N1
      LDA A,I       GET DVT ADDRESS 
      STA ADDR1     SAVE IT AS THE 1ST ADDRESS
      STA ADDR2     SAVE IT AS THE 2ND ADDRESS
      LDA EXTWD 
      STA MAXRD 
      JMP FI15
* 
FI30  LDA PFUT4 
      ADA N1
      LDA A,I       GET THE MATCHING DVT'S ADDRESS
      STA ADDR3     ADDRESS OF LINKING DVT
      LDB BFLAG     IF NODE FIXUP ADD 2 POINT TO DVT 3
      SZB 
      ADA P2
      LDB OFST2     LOCATION WITHIN THE DVT 
      CMB,INB 
      ADB ADDR2     DVT ADDRESS 
      JSB STCR1     ABS OUTPUT
      LDA BFLAG 
      SZA           IS THIS A NODE SEARCH ? 
      RSS           YES 
      JMP FI35      NO
      LDA EXTWD 
      SZA,RSS       ANY TABLE EXTENSION ? 
      JMP FI35      NO
      LDA PPREL 
      LDB ADDR2 
      ADB P21 
      JSB STCR1     OUTPUT THE DVTX ADDRESS 
      LDA EXTWD     # OF TX 
      CMA,INA       NEGATE
      ADA MAXRD     ADD CURRENT MAX 
      SSA           IS IT POSITIVE ?
      RSS           NO
      JMP FI35      YES 
      LDA EXTWD     REPLACE CURRENT MAX 
      STA MAXRD 
FI35  LDA ADDR3     SET LAST ADDRESS AS CURRENT LINKING ADDRESS 
      STA ADDR2     CURRENT LINKING ADDRESS 
      JMP FI15
* 
*     COMPLETED ONE PASS,FIXUP LAST WITH 1ST TO CLOSE LOOP
* 
FI40  LDB ADDR2     SECOND DVT ADDRESS
      LDA OFST2     GET DVT OFFSET
      CMA,INA 
      ADB A         DVT 2 + OFFSET FOR PATCH
      LDA BFLAG 
      SZA           IF NODE FIXUP ADD 2 POINT TO DVT 3
      LDA P2
      ADA ADDR1     PLACE ADDRESS 1 INTO DVT 2
      JSB STCR1 
      LDA BFLAG 
      SZA           IS THIS A NODE ?
      RSS           YES 
      JMP FI50      NO
      LDA MAXRD 
      SZA,RSS       ANY TABLE EXTENSION FOR THIS NODE ? 
      JMP FI50      NO
      LDA PPREL     OUTPUT DVTX ADDRESS 
      LDB ADDR2 
      ADB P21 
      JSB STCR1 
      LDA PPREL 
      ADA MAXRD     RESERVE MAX EXT TABLE FOR THE NODE
      STA PPREL 
* 
FI50  ISZ CNT2      FINISH WITH # OF NODE OR # OF IFT 
      JMP FI05      NO
      JMP FIXTB,I   YES 
* 
      SKP 
* 
F05   LDB PPREL 
      STB LOCC
      LDA D$IFT 
      JSB FSYMB     FIND AND PATCH IFT ADDRESS
      JSB MSENT     MISSING SYSTEM ENTRY POINT
* 
      LDA OPT.3,I   GET # OF FIXUP
      SZA,RSS       ANY FIXUP?
      JMP PWRFL     NO , DO POWER FAIL
      CMA,INA       NEGATE
      STA CNT1      AND SAVE
      LDA OPT3
      STA ADDR1     IFT ADDRESS 
      CLA 
      STA CDVT
* 
F10   JSB BUFC
      LDB DSTRG 
      STB PFUT4 
      CCA 
      STA PFUT4,I   IFT 1  TIME OUT LIST LINKAGE
      ISZ PFUT4 
      ISZ PFUT4 
      LDA PFUT4     SAVE IFT 3 ADDRESS
      STA ZTEMP       IN ZTEMP
      ISZ PFUT4 
      LDA ADDR1,I   GET 1ST WORD OF FIXUP 
      SSA,RSS       IS THIS A IFT ENTRY?
      JMP F80       NO
      AND B7740     YES 
      STA IFTNM     IFT NUMBER
      LDA ADDR1,I   GET 1ST WORD AGAIN
      AND LOMSK 
      ALF,ALF 
      STA DTYPE 
      LDB ADDR1 
      ADB N1        POINT TO FIXUP 2ND WORD 
      LDA B,I 
      STA PFUT4,I   IFT 4  PHYSICAL DRIVER ADDRESS
      ISZ PFUT4 
      LDA PPREL     CURRENT IFT ADDRESS 
      STA DPA       AND SAVE IT 
      STA B,I       PLACE IT IN FIXUP WORD 2
      ADB N1        POINT TO FIXUP 3RD WORD 
      LDA B,I       DVT ADDRESS 
      STA PFUT4,I   IFT 5  DVT REFERENCE
      ISZ PFUT4 
      ADB N1        POINT TO FIXUP 4TH WORD 
      CLA 
      STA QUEUE 
      LDA B,I       GET 4TH FIXUP WORD
      SSA           IS Q SET ?
      ISZ QUEUE     YES 
      AND B7700     NO
      RAR 
      ALF,ALF     SHIFT TO LOW BYTE 
      STA SCNM      SELECT CODE 
      LDA B,I       GET WORD 4 AGAIN
      AND B777      EXTENSION WORD
      STA EXTWD 
      LDA QUEUE 
      RAR           MOVE TO BIT 15
      STA ZTEMP,I   IFT  3 QUEUE
      LDA DTYPE 
      IOR SCNM
      STA PFUT4,I   IFT 6  INTERFACE TYPE & SC
      ISZ PFUT4 
      ADB N1
      STB ADDR1 
      LDA EXTWD 
      IOR B2000 
      STA PFUT4,I   IFT 7  IFT EXTENSION LENGTH 
      ISZ PFUT4 
* 
      JSB CNUMO 
      DEF *+3 
      DEF PPREL+0 
      DEF MES37+4 
      ISZ CDVT
      LDA CDVT
      LDB DM#37 
      JSB STFNM 
      JSB SPACE 
      LDA P14 
      LDB DMS37 
      JSB DRKEY     PRINT IFT ADDRESS 
* 
      LDA PPREL 
      LDB A 
      ADB P6
      STB PPREL 
      JSB SETCR     OUTPUT IFT TABLE
      ISZ PPREL 
      LDA PPREL 
      ADA EXTWD     RESERVE SPECIFIED # OF EXT WDS
      STA PPREL 
* 
*     PATCH IFT ADDRESS INTO DVT
* 
      LDA OPT.3,I 
      CMA,INA 
      STA CNT2      # OF FIXUP
      LDB OPT3
F50   STB ADDR2     IFT ADDRESS 
      LDA ADDR2,I 
      SSA           IS THIS A DVT ENTRY ? 
      JMP F55       NO
      AND B7740     YES 
      CPA IFTNM     EQUAL TO CURRENT ?
      RSS           YES 
      JMP F55 
      ADB N1
      LDB B,I       GET DVT FIXUP WORD 2 DVT'S ADDRESS
      ADB P4        DVT WORD 5 IFT REFERENCE
      LDA DPA       IFT ADDRESS 
      JSB STCR1 
F55   ISZ CNT2      ANY MORE DVT'S ?
      RSS 
      JMP F100      NO
      LDB ADDR2     GET NEXT DVT
      ADB N4
      JMP F50 
F80   LDA ADDR1 
      ADA N4
      STA ADDR1 
F100  ISZ CNT1      ANY MORE IFT'S ?
      RSS           YES 
      JMP PWRFL     NO , CHECK POWER FAIL 
      JMP F10       NEXT IFT
* 
* 
B2000 OCT 2000
B7740 OCT 77400 
B7700 OCT 77000 
B777  OCT 777 
* 
ADDR1 NOP 
ADDR2 NOP 
ADDR3 NOP 
* 
      SKP 
* 
*     CHECK FOR THE POWER FAIL DRIVER 
* 
PWRFL JSB L.ADD     FIND ID.43
      DEF *+5 
      DEF ID.43 
      DEF VALUA 
      DEF SADDR 
      DEF RESLT 
      LDA RESLT 
      SZA           IS ID.43 ( POWERFAIL DRIVER ) THERE ? 
      JMP FIXLU     NO , DO NOTHING 
      LDA VALUA     YES , BUILD A DUMMY IFT 
      STA Z1TMP     SAVE ADDRESS OF ID.43 
      LDB PPREL 
      LDA D$PIF 
      JSB FSYMB     FIND & PATCH $PIFT WITH ADDR OF DUMMY IFT 
      JSB MSENT     MISSING SYSTEM ENTRY POINT
* 
      LDB PPREL 
      CCA           PATCH DUMMY IFT 1 WITH -1 
      JSB STCR1 
      LDB PPREL     PATCH DUMMY IFT 4 WITH
      ADB P3          ADDRESS OF ID.43
      STB PPREL 
      LDA Z1TMP     ADDRESS OF ID.43
      JSB STCR1 
* 
      ISZ PPREL 
      LDB PPREL 
      CLA,INA       PLACE 1 IN DUMMY IFT 5
      JSB STCR1 
* 
      LDB PPREL 
      ADB P2
      STB PPREL 
      LDA B1001     SET BIT 9 OF DUMMY IFT 7 & 1 WD OF EXT
      JSB STCR1 
      ISZ PPREL 
      ISZ PPREL 
      JMP FIXLU 
* 
D$PIF DEF $PIFT 
$PIFT ASC 3,$PIFT 
* 
ID.43 ASC 3,ID.43 
* 
      SKP 
* 
*  BUILD THE LU TABLE 
* 
FIXLU LDB PPREL 
      STB LOCC
      LDA D$LUT 
      JSB FSYMB     FIND AND PATCH LU TABLE ADDRESS 
      JSB MSENT     MISSING SYSTEM ENTRY POINT
* 
      LDA D$LU# 
      LDB MAXLU 
      JSB FSYMB     FIND AND PATCH # OF LU
      JSB MSENT     MISSING SYSTEM ENTRY POINT
* 
      JSB BUFC
      LDB DIPBF     CLEAR 24 ADDITIONAL WORDS 
      LDA N24       FOR A TOTAL OF 64 WORDS 
      STA WDCNT     EQUAL TO MAX # OF LU
      CLA 
LP1   STA B,I 
      INB 
      ISZ WDCNT 
      JMP LP1 
      LDA OPT.3,I   # OF FIXUP ENTRIES
      SZA,RSS       ANY FIXUP?
      JMP SINTT     NO , DO INTERRUPT 
      CMA,INA 
      STA CNT1
      LDB OPT3
LU10  STB PFUT4     POINTER FOR FIXUP ENTRY 
      LDA PFUT4,I   GET 1ST WORD OF FIXUP 
      SSA           IS THIS A DVT ENTRY 
      JMP LU20      NO , NEXT FIXUP 
      ADB N1
      LDA B,I       GET DVT ADDRESS 
      STA ADVT      AND SAVE IT 
      ADB N1
      STB ZTEMP 
      LDA B,I 
      AND LOMSK     1ST LU
      SZA,RSS       ZERO ?
      JMP LU20      YES , NEXT DVT
      ADA N1
      ADA DSTRG 
      LDB ADVT      DVT ADDRESS 
      STB A,I       SAVE IT IN THE LU TABLE 
      LDA ZTEMP 
      ADA N1
      STA ZTEMP 
      LDA ZTEMP,I 
      AND HIMSK 
      SZA,RSS       ANY MORE LU ? 
      JMP LU20      NO
      ALF,ALF 
      ADA DSTRG 
      ADA N1
      STB A,I       STORE DVT IN 2ND LU LOCATION
      LDA ZTEMP,I 
      AND LOMSK 
      SZA,RSS       ANY MORE LU ? 
      JMP LU20      NO
      ADA DSTRG 
      ADA N1
      STB A,I       STORE DVT IN 3ND LU LOCATION
LU20  ISZ CNT1      END OF FIXUP
      RSS 
      JMP LU40
      LDB PFUT4 
      ADB N4
      JMP LU10
LU40  LDA PPREL     OUTPUT LU TABLE 
      LDB PPREL 
      ADB MAXLU 
      ADB N1
      STB PPREL 
      JSB SETCR 
      ISZ PPREL 
      JMP SINTT 
* 
D$LUT DEF $LUTA 
$LUTA ASC 3,$LUTA 
* 
D$LU# DEF $LUT# 
$LUT# ASC 3,$LUT# 
* 
      SKP 
* 
*  INTERRUPT TABLE PROCESSOR
* 
SINTT LDB PPREL 
      STB LOCC
      ADB N16       SUBTRACT -20B TO $INTA
      LDA D$INT     FIND & PATCH $INTA
      JSB FSYMB 
      JSB MSENT     MISSING SYSTEM ENTRY POINT
* 
      LDA N3
      JSB MOVE
      DEF $CIC+0
      DEF ASCPD+0 
* 
      JSB DVADD     FIND ADDRESS OF $CIC
      LDB RESLT     GET RESULT
      SZB           IS ENTRY THERE? 
      JSB MSENT     NO , MISSING SYSTEM ENTRY SYMBOL
* 
      JSB L.SCN     SCAN FOR A BASE PAGE
      DEF *+3 
      DEF VALUA 
      DEF BPADR 
* 
      LDA BPADR 
      SSA,RSS       BASE PAGE ALLOCATED?
      JMP SET15     YES 
* 
      JSB L.ABP     NO , ALLOCATE A BP
      DEF *+3 
      DEF DUMBP 
      DEF BPADR 
* 
      LDA VALUA 
      STA DUMBP,I   UPDATE DUMMY BP WITH LINK 
SET15 LDA BPADR     LOAD $CIC ADDRESS 
      IOR IJSB      ADD JSB 0,I CODE
      STA JSCIC     SET JSB CIC,I CODE
      JSB BUFCL 
JSCIC OCT 0         STUFF DATA
      LDA P5
      LDB P40 
      JSB SETCR     OUTPUT JSB $CIC,I 
      LDA P40 
      LDB P63 
      JSB SETCR     OUTPUT JSB $CIC,I 
* 
      LDA N7        FILL LOC 11B TO 17B 
      STA CNT1      WITH "  CLC  SC,C " 
      LDA P9
      STA CNT2
SET30 LDA CLCF0     GET CLC 00,C
      LDB CNT2      ADDRESS TO FILL 
      IOR B         DATA   CLC SC,C 
      JSB STCR1     OUTPUT
      ISZ CNT2
      ISZ CNT1      ANY MORE ?
      JMP SET30     YES 
* 
      JSB SPACE     NEW LINE
      LDA PPREL     GET CURRENT RELOCATION ADDR 
      STA AINT      SAVE INTERRUPT TABLE ADDRESS
      LDA P9
      LDB MES29     MES29 = ADDR. * INT TABLE 
      JSB DRKEY     PRINT: INT TBL
* 
      JSB SPACE     NEW LINE
* 
SETIN JSB BUFC
      JSB READ      PRINT MESSAGE, GET REPLY
      JMP EXIT
      LDA OP? 
      CPA EN        CHARS = EN? 
      JMP ENDIO     YES - I/O TABLES COMPLETE 
      CPA IN        CHECK FOR INTERRUPT 
      RSS           YES 
      JMP ITERR     NO , ERROR
      JSB NAMRR     GET SELECT CODE 
      SSA 
      JMP ITERR     END OF LINE ERROR 
      LDB DIPBF 
      ADB P3
      LDA B,I       GET TYPE
      CPA P1        IS IT NUMERIC ? 
      RSS           YES 
      JMP ITERR     NO , ERROR
      LDA DIPBF,I   GET INTERRUPT CHANNEL 
      STA INTCH 
      ADA N16       CHAN L.T. 20B ? 
      SSA 
      JMP ITERR     YES, CHANNEL ERROR
      LDA INTCH     GET SELECT CODE 
      CMA,INA 
      ADA B57       S.C. GT 57B?
      SSA           NO
      JMP ITERR     YES , ERROR 
* 
      CLB 
      LDA INTCH     GET SELECT CODE 
      DIV P4        DIVIDE BY 4 
      STA PIMKB     THIS $PIMK BIT
* 
      SKP 
* 
*     ENT ENTRY 
* 
INTEN JSB NAMRR 
      SSA           IS IT THE END ? 
      JMP ITERR     YES 
      LDA N3        NO , MOVE THE ENTRY NAME
      JSB MOVE
      DEF IPBUF+0 
      DEF ASCPD+0 
* 
      JSB DVADD     GET THE ADDRESS OF ENTRY POINT
      LDA RESLT     CHECK RESULT FOR ERROR
      SZA,RSS 
      JMP SETE1     EVERYTHING OK 
* 
      LDA P9
      JSB LDRER     ERROR 
      JMP SETIN 
* 
SETE1 LDA PIMKW     GET PIMK WORD 
      LDB BIT       GET BIT ADDRESS 
      ADB PIMKB     ADD PIMK BIT
      INB 
      LDB B,I       GET THE MASK BIT
      IOR B         IOR IT WITH THE PIMK WORD 
      STA PIMKW     SAVE THE NEW PIMK WORD
* 
      JSB L.SCN     SCAN FOR A BP 
      DEF *+3 
      DEF VALUA 
      DEF BPADR 
* 
      LDA BPADR 
      SSA,RSS       DOES ENTRY HAVE LINK? 
      JMP SETE5     YES 
* 
      JSB L.ABP     NO , ALLOCATE A BP LINK 
      DEF *+3 
      DEF DUMBP 
      DEF BPADR     REAL BP 
* 
      LDA VALUA 
      STA DUMBP,I   PUT LINK IN DUMMY BP
SETE5 LDA BPADR 
      IOR IJSB      CONSTRUCT JSB LINK,I
      STA B 
      CLA 
      JSB COMIN 
      JSB REMOV 
      JMP SETIN 
* 
* 
      SKP 
ITERR LDA P7
      JSB LDRER 
      JMP SETIN     REPEAT INPUT
* 
* 
ITER2 NOP 
      LDA P10 
      JSB LDRER     PRIVILEDGE INTERRUPT ERROR - FATAL
      JMP ITER2,I 
* 
ENDIO LDA OPT.3,I   GET THE FIXUP TABLE 
      SZA,RSS       ANY FIXUP?
      JMP TST30     NO
      CMA,INA 
      STA CNT1
      LDB OPT3
TST10 STB PFUT4     POINT TO FIXUP ENTRY
      LDA PFUT4,I 
      SSA,RSS 
      JMP TST20 
      ADB N3
      LDA B,I       GET SELECT CODE 
      AND MSK1
      ARS 
      ALF,ALF 
      STA INTCH 
* 
      CLB 
      DIV P4        DIVIDE SELECT CODE BY 4 
      STA PIMKB     THIS IS THE $PIMK BIT 
      LDA PIMKW     GET $PIMK WORD
      LDB BIT       GET BIT ADDRESS 
      ADB PIMKB     ADD BIT POSITION
      INB 
      AND B,I 
      SZA           HAS PRIVILEDGE INTERRUPT BEEN SET?
      JSB ITER2 
      LDB PFUT4 
      ADB N1        BACK UP TO IFT ADDRESS
      LDA B,I       GET IFT ADDRESS 
      LDB JSCIC 
      JSB COMIN     OUTPUT THE TRAP CELL AND INT TBL
TST20 ISZ CNT1
      RSS 
      JMP TST50 
      LDB PFUT4 
      ADB N4
      JMP TST10 
* 
TST30 LDB MAXSC 
      SZB           MAXSC ZERO? 
      JMP TST50     NO
      LDB B30       YES , SET MAXSC TO 30B
      STB MAXSC     AND SAVE IT 
* 
TST50 LDB MAXSC     GET LARGEST SELECT CODE 
      ADB N16       SUBTRACT -20B 
      INB 
      LDA D$IN#     FIND & PATCH # OF INTERRUPT ENTRIES 
      JSB FSYMB 
      JSB MSENT     MISSING SYSTEM ENTRY POINT
* 
      LDB PIMKW     GET THE $PIMK WORD
      CMB           NEGATE IT THE REAL MASK 
      LDA D$PMK 
      JSB FSYMB     FIND & PATCH $PIMK PRIV. INT. MASK
      JSB MSENT     MISSING SYSTEM ENTRY POINT
      LDA MAXSC 
      ADA N16 
      ADA AINT
      INA 
      STA LOCC
      LDA MAXSC     FWA FOR USER BP 
      INA 
      STA BPFWA 
      ADA LDBP      LOWER BOUND FOR DUMMY BP
      STA CUDBP     CURRENT USER DUMMY BP 
      JSB SPACE     NEW LINE
      JSB SPACE     NEW LINE
* 
      JSB EXEC
      DEF *+3       LOAD SEGMENT 4
      DEF P8
      DEF SEG4
      JMP EXIT
      SKP 
* 
IJSB  JSB 0,I       I-JSB CODE FOR INTERRUPT LOCS 
* 
INTCH NOP           INT RECORD CHANNEL NO.
* 
MES29 DEF *+1 
      ASC 5,* INT TBL 
* 
D$INT DEF $INTA 
$INTA ASC 3,$INTA 
* 
D$IN# DEF $INT# 
$INT# ASC 3,$INT# 
* 
D$PMK DEF $PIMK 
$PIMK ASC 3,$PIMK 
* 
$CIC  ASC 3,$CIC
SEG4  ASC 3,L20G4 
      SKP 
* 
* 
*     OUTPUT TRAP LOC AND INT TABLE 
* 
*     CALLING SEQUENCE: 
*                  LDA INT TABLE CODE 
*                  LDB TRAP CELL INSTRUCTION
*                  JSB COMIN
* 
COMIN NOP 
      STA TBUF      SAVE INT TABLE CODE 
      STB TBUF+1    SAVE TRAP CELL INST.
* 
      LDA INTCH 
      STA B 
      CMB,INB 
      ADB MAXSC 
      SSB,RSS 
      RSS 
      STA MAXSC 
* 
      LDA TBUF+1    GET INT LOC CODE
      LDB INTCH     INT SELECT CODE 
      JSB STCR1 
* 
      LDA TBUF      INT TABLE CODE
      LDB N16 
      ADB INTCH 
      ADB AINT
      JSB STCR1 
* 
      JMP COMIN,I 
* 
* 
      SKP 
* 
*     REMOVE THE IFT FIXUP ENTRY FOR
*     EITHER A ENTRY POINT INTERRUPT OR PROGRAM INTERRUPT 
* 
REMOV NOP 
      LDA OPT.3,I   GET THE FIXUP TABLE 
      CMA,INA 
      STA CNT1
      LDB OPT3
SST10 STB PFUT4     POINT TO FIXUP ENTRY
      LDA PFUT4,I 
      SSA,RSS 
      JMP SST20 
      ADB N3
      LDA B,I       GET SELECT CODE 
      AND MSK1
      ARS 
      ALF,ALF 
      CPA INTCH     MATCHING SELECT CODE? 
      RSS           YES 
      JMP SST20     NO , GET NEXT ONE 
      LDA PFUT4,I   GET WORD 1
      AND MSK77     MASK OUT BIT FOR IFT ENTRY
      STA PFUT4,I 
      JMP REMOV,I   EXIT
* 
SST20 ISZ CNT1
      RSS 
      JMP REMOV,I 
      LDB PFUT4 
      ADB N4
      JMP SST10 
* 
* 
* 
* 
      SKP 
* 
* 
*     ROUTINE TO MOVE DRIVER NAM INTO DMES8 FOR 
*     DEFAULT DRIVER ENTRY POINT
* 
MNAM  NOP 
      LDA LBUF3 
      RAL 
      LDB DMES8 
      RBL 
      JSB .MBT      MOVE 5 BYTE 
      DEF P5
      NOP 
      JMP MNAM,I
* 
* 
* 
* 
* 
*  ROUTINE TO CONVERT THE OCTAL NUMBER IN A TO
*  ASCII AND STUFF THE 2 LOW ORDER DIGITS INTO A BUFFER 
*  ADDRESSED BY B. LEADING ZEROS ARE SUPPRESED
* 
*  CALLING SEQUENCE:
* 
*    A = OCTAL NUMBER 
*    B = BUFFER ADDRESS 
* 
*  RETURN: A AND B ARE DESTROYED
* 
STFNM NOP 
      STB STFAD     SAVE FINAL ADDRESS
      JSB CNV99 
      STA STFAD,I   STORE IN BUFFER 
      JMP STFNM,I 
* 
STFAD NOP 
* 
* 
* 
      SKP 
      SKP 
      SKP 
*     TO ALLOCATE A BASE PAGE LINK
* 
* 
*     JSB TABLE ENTRY #1,I  L.ABP 
*     DEF RETRN 
*     DEF DUMY      RETURNS DUMMY BP ADDRESS  NEG = ERROR 
*     DEF REAL      RETURNS REAL BP ADDRESS 
* 
DBP   NOP 
RBP   NOP 
L.ABP NOP 
      JSB .ENTR 
      DEF DBP 
      LDA LNKDR     GET LINK DIRECTION
      CPA N1        IS IT A SYSTEM LINK ? 
      JMP L.A10     YES 
      LDA CBP.L     GET CURRENT REAL BP 
      ADA LDBP      ADD LOWER BOUND FOR DUMMY BP
      CPA CSDBP     HAS IT REACH SYS BP AREA? 
      JMP L.A20     YES , ERROR 
      STA DBP,I 
      INA 
      STA CUDBP 
      LDA CBP.L     GET CURRENT USER REAL BP
      STA RBP,I 
      INA 
      STA CBP.L     UPDATE CURRENT REAL BP
      JMP L.ABP,I   RETURN
* 
*     SYSTEM LINK ALLOCATION
* 
L.A10 LDA CBP.L     GET CURRENT REAL BP 
      ADA LDBP      ADD LOWER BOUND FOR DUMMY BP
      CPA CUDBP     HAS IT REACH USER BP AREA?
      JMP L.A20     YES , ERROR 
      STA DBP,I     NO , STORE DUMMY BP 
      ADA N1
      STA CSDBP     UPDATE CURRENT SYS DUM BP 
      LDA CBP.L 
      STA RBP,I     STORE REAL BP 
      ADA N1
      STA CBP.L     UPDATE CURRENT SYS REAL BP
      JMP L.ABP,I 
* 
L.A20 CCA           ERROR 
      STA DBP,I 
      LDA P23 
      JSB LDRER     BASE PAGE LINKAGE OVERFLOW
      JMP EXIT
* 
* 
* 
      SKP 
* 
* 
*     TO SCAN DUMMY BASE PAGE ( OR EXISTING BASE PAGE ) 
*     FOR AN EXISTING BASE LINK.
* 
*     JSB TABLE ENTRY #2,I  L.SCN 
*     DEF RETRN 
*     DEF VALUE     VALUE TO SCAN FOR 
*     DEF BPADR     +/-  ADDRESS TO USE / NOT FOUND 
* 
VALAD NOP           ADDRESS OF VALUE
BPADR NOP 
L.SCN NOP 
      JSB .ENTR 
      DEF VALAD 
      LDA VALAD,I   GET VALUE TO SCAN FOR 
      LDB TDBP      SCAN SYS DUMMY BP 
L.S20 CPB CSDBP     IS IT EQUAL TO CURRENT SYS DUM BP 
      JMP L.S30     YES , TRY USER BASE PAGE
      CPA B,I       IS IT EQUAL TO SEARCH VALUE 
      JMP FNDSY     YES , SYSTEM BP LINK
      ADB N1        NO, ADD LINK DIRECTION FOR NEXT BP VALUE
      JMP L.S20     NO CONTINUE SEARCH
FNDSY CMB,INB       CALCULATE REAL BP ADDRESS 
      ADB TDBP      ADD TOP OF DUMMY BP ADDRESS 
      CMB,INB       DIFFERENCE BETWEEN CURRENT AND TOP DUM BP 
      ADB B1777     SUBTRACT FROM TOP OF REAL BP
      STB BPADR,I   THIS IS THE REAL LINK 
      JMP L.SCN,I   RETURN
* 
L.S30 LDB LDBP      LOWER BOUND FOR USER DUMMY BP 
      ADB BPFWA     SET USER BP LOCATION
L.S60 CPB CUDBP     IS IT EQUAL CURRENT USER DUM BP?
      JMP NOTF      YES , RETURN NOT FOUND
      CPA B,I 
      JMP FNDUS     YES , FOUND USER BP 
      INB           NO , GET NEXT ADDRESS 
      JMP L.S60     IS IT EQUAL TO CURRENT BP?
FNDUS LDA LDBP      FOUND USER BP 
      CMA,INA 
      ADB A 
      STB BPADR,I 
      JMP L.SCN,I 
* 
NOTF  CCB           NOT FOUND 
      STB BPADR,I 
      JMP L.SCN,I 
* 
      SKP 
* 
* 
*     LDRER OUTPUTS ERRORS TO THE LIST DEVICE 
* 
*     CALLING SEQUENCE: 
*                       A-REG = +VE ERROR CODE
*                       JSB LDRER 
*                       RETURN
* 
* 
LDRER NOP 
      MPY P3        CALCULATE OFFSET INTO LIST OF ERROR CODE
      ADA EMESS     ADD STARTING ADDRESS OF LIST
      STA B         AND SAVE IN B-REG FOR OUTPUT
      LDA P6        LENGTH OF MESSAGE IN CHARACTERS 
      JSB DRKEY     PRINT IT
      ISZ ERRCT     BUMP UP ERROR COUNT 
      JSB ASTRX     PRINT ******
      JSB SPACE 
      JMP LDRER,I   AND RETURN
* 
* 
EMESS DEF *+1 
      ASC 3,IL REC  ILL REC OR CK SUM IN RELO REC 
      ASC 3,        FREE FOR NEW ERROR MSG 1
      ASC 3,        FREE FOR NEW ERROR MSG 2
      ASC 3,IFT ER  IFT INPUT ERROR 
      ASC 3,DVT ER  DVT INPUT ERROR 
      ASC 3,MS ENT  MISSING SYSTEM ENTRY POINT
      ASC 3,NOD ER  NODE INPUT ERROR
      ASC 3,INT ER  INTERRUPT TABLE INPUT ERROR 
      ASC 3,OV MEM  SYSTEM OVERFLOW ,NEEDS LAGER PARTITION
      ASC 3,UND DV  UNDEFINED DRIVER ENTRY POINT
      ASC 3,PR INT  PRIVILEDGE INTERRUPT ERROR - FATAL ERROR
      ASC 3,??      ILLEGAL INPUT 
      ASC 3,IT ERR  INTERFACE TYPE ERROR
      ASC 3,SC ERR  SELECT CODE ERROR 
      ASC 3,QU ERR  QUEUING ERROR 
      ASC 3,TX ERR  TABLE EXTENSION ERROR 
      ASC 3,TO ERR  TIME OUT ERROR
      ASC 3,BL ERR  BUFFER LIMIT ERROR
      ASC 3,DT ERR  DEVICE TYPE ERRORR
      ASC 3,DP ERR  DRIVER PARAMETER ERROR
      ASC 3,PR ERR  DEVICE PRIORITY ERRORR
      ASC 3,DX ERR  DRIVER PARAMETER ERROR
      ASC 3,LU ERR  LU SPECIFICATION ERROR
      ASC 3,OV BSE  BASE PAGE LINKAGE OVERFLOW
      ASC 3,MDL NF  SPECIFIED MODLE # NOT FOUND IN FILE 
* 
      SKP 
      SKP 
* 
* 
*     THE BUFCL SUBROUTINE STUFFS A 40 WORD BUFFER WITH CALL+1
* 
* 
*     CALLING SEQUENCE: 
*       A = IGNORED 
*       B = ADDRESS OF BUFFER 
*       JSB BUFCL 
*       CALL+1 = DATA TO STUFFED
* 
*     RETURN: CONTENTS OF A AND B ARE DESTROYED 
* 
BUFCL NOP 
      LDB DSTRG 
      LDA N40 
      STA WDCNT     SET BUFFER LENGTH = 40
      LDA BUFCL,I   GET STUFF DATA
      STA B,I       CLEAR BUFFER WORD 
      INB 
      ISZ WDCNT     ALL WORDS CLEAR?
      JMP *-3       NO - CONTINUE CLEARING
      ISZ BUFCL 
      JMP BUFCL,I RETURN
* 
WDCNT NOP           TEMPORARY WORD COUNTER
* 
* 
*     SUBROUTINE TO CLEAR OUTPUT BUFFER 
* 
BUFC  NOP 
      JSB BUFCL 
      OCT 0 
      JMP BUFC,I
* 
      SKP 
* 
* 
*  THE CKDLU SUBROUTINE DETERMINES IF THE LU # HAVE BEEN DEFINED
*  OR LU LARGER THAN 77B
* 
*  CALLING SEQUENCE 
* 
*  LDA LU # 
*  JSB CKDLU
*   JMP ERROR       ERROR LU HAVE PREVIOUSLY DEFINE 
*   NORMAL RETURN   (A) = LU #
* 
* 
CKDLU NOP 
      STA LUFLG 
      ADA N64 
      SSA,RSS       LESS THAN 64? 
      JMP CKDLU,I   NO , ERROR
      LDA LUFLG     YES 
      CLB 
      DIV P16       (A)=QUOTIENT (B)=REMAINDER
      STA KTEMP     SAVE IT FOR CHECK 
      SZB 
      RSS 
      ADA N1
      ADA NUMFL     ADDRESS OF NUMFL
      STA ZTEMP     SAVE IT 
      LDA ZTEMP,I   YES , LOAD THE FLAG 
      ADB BIT       ADDRESS OF BIT
      LDB B,I 
      AND B 
      SZA           HAS THIS LU BEEN ENTERED ?
      JMP CKDLU,I   YES , ERROR 
      LDA ZTEMP,I   NO , RELOAD THE FLAG
      IOR B         TAG THE FLAG
      STA ZTEMP,I   AND STORE IT BACK 
      LDA LUFLG 
      LDB LUFLG 
      CMB,INB 
      ADB MAXLU 
      SSB,RSS 
      RSS 
      STA MAXLU 
      ISZ CKDLU 
      JMP CKDLU,I 
* 
NUMFL DEF *+1 
      NOP 
      NOP 
      NOP 
      NOP 
BIT   DEF *+1 
      OCT 100000
      OCT 1 
      OCT 2 
      OCT 4 
      OCT 10
      OCT 20
      OCT 40
      OCT 100 
      OCT 200 
      OCT 400 
      OCT 1000
      OCT 2000
      OCT 4000
      OCT 10000 
      OCT 20000 
      OCT 40000 
      OCT 100000
* 
KTEMP NOP 
* 
      SKP 
* 
*     CKSC SUBROUTINE CHECKS FOR PREVIOUSLY DEFINED 
*          SELECT CODE. 
* 
*     CALL SEQUENCE 
* 
*     LDA SELECT CODE 
*     JSB CKSC
*     JMP ERROR     ERROR RETURN
*     NORMAL RETURN 
* 
CKSC  NOP 
      CLB 
      DIV P16       (A)=QUOTIENT (B)=REMAINDER
      STA KTEMP     SAVE IT FOR CHECK 
      SZB 
      RSS 
      ADA N1
      ADA SCFL      SELECT CODE FLAG ARRAY ADDRESS
      STA ZTEMP 
      LDA ZTEMP,I   LOAD THE FLAG 
      ADB BIT 
      LDB B,I 
      AND B 
      SZA           HAS THIS SELECT CODE BEEN ENTERED?
      JMP CKSC,I    YES , ERROR RETURN
      LDA ZTEMP,I   NO , RELOAD FLAG
      IOR B         TAG THE FLAG
      STA ZTEMP,I   AND STORE IT BACK 
      ISZ CKSC
      JMP CKSC,I    NORMAL RETURN 
* 
SCFL  DEF *+1 
      NOP 
      NOP 
      NOP 
      NOP 
* 
      SKP 
      SKP 
      SKP 
      SKP 
* 
* 
*     OUTPUT CONSECUTIVE CORE LOCATIONS 
* 
*     LDA START     STARTING ADDRESS
*     LDB END       ENDING ADDRESS
*     JSB SETCR     DATA WILL BE AT STRNG 
* 
SETCR NOP 
      STA ZTEM5    STARTING ADDRESS 
      CMA,INA       NEGATE STARTING ADDRESS 
      ADA B         ADD ENDING ADDRESS
      INA           ADD 1 FOR TOTAL # TO OUTPUT 
      CMA,INA       NEGATE FOR COUNT
      STA CNT10 
      LDA DSTRG     ADDRESS OF DATA 
      STA CNT20 
SET10 LDA CNT20,I   GET DATA
      LDB ZTEM5     GET ADDRESS 
      JSB STCR1     OUTPUT
      ISZ CNT20     NEXT DATA WORD
      ISZ ZTEM5     NEXT ADDRESS
      ISZ CNT10     ANY MORE OUTPUT ? 
      JMP SET10     YES 
      JMP SETCR,I   NO
* 
      SKP 
* 
*     ROUTINE TO FIND SYSTEM SYMBOL AND PATCH UP ITS VALUE
* 
*     CALLING SEQUENCE
* 
*     LDA ADDRESS OF SYMBOL 
*     LDB VALUE TO PATCH IN 
*     JSB FSYMB 
*     ERROR RETURN
*     NORMAL RETURN 
* 
FSYMB NOP 
      STA SYBAD     PUT SYMBOL ADDRESS INTO CALLING SEQUENCE
      STB PVAL      SAVE PATCH VALUE
      JSB L.ADD     FIND SYMBOL 
      DEF *+5 
SYBAD DEF * 
      DEF VALUA 
      DEF SADDR 
      DEF RESLT 
      LDA RESLT     GET RESULT
      SZA           ANY ERROR 
      JMP ERTN      YES , ERROR 
      LDA PVAL      PATCH VALUE 
      LDB VALUA 
      JSB STCR1 
      ISZ FSYMB     NORMAL RETURN 
ERTN  JMP FSYMB,I 
* 
VALUA NOP 
SADDR NOP 
RESLT NOP 
PVAL  NOP 
* 
* 
* 
*     ROUTINE TO PRINT MISSING SYSTEM ENTRY POINT 
* 
MSENT NOP 
      LDA PRERR 
      SZA           PRINT ERROR?
      JMP MSENT,I   NO , PRINTED PREVIOUSLY 
      LDA P5
      JSB LDRER     PRINT " MS ENT "
      CCA 
      STA PRERR     SET ERROR PRINTED FLAG
      JMP MSENT,I 
* 
* 
      SKP 
      SKP 
* 
*     FIND PHYSICAL OR LOGICAL DRIVER ENTRY POINT 
* 
*     CALLIN SEQUENCE 
* 
*     ASCII OF DRIVER ENTRY POINT IN ASCPD
*     JSB DVADD 
*     ENTRY POINT IN VALUA
*       OR ERROR MESSAGE
* 
DVADD NOP 
      JSB L.ADD     FIND DRIVER ENTRY POINT 
      DEF *+5 
      DEF ASCPD 
      DEF VALUA 
      DEF SADDR 
      DEF RESLT 
      JMP DVADD,I 
      SKP 
* 
*     ROUTINE TO READ IN A RELOCATABLE RECORD . 
* 
*     JSB L.RED 
*     DEF *+2 
*     DEF FLAG      0/-1  OK/EOF
* 
* 
FFLAG NOP 
L.RED NOP 
      JSB .ENTR 
      DEF FFLAG 
RREAD JSB READF     READ THE NEXT REL RECORD
      DEF *+6 
      DEF SDCB3 
      DEF IERR5 
      DEF L.BUF+0   RELOCATABLE RECORD BUFFER ! 
      DEF P60 
      DEF LEN       ACTUAL RECORD LENGTH READ 
* 
      SSA,RSS       ANY ERROR?
      JMP FNXT2     NO
      STA FFLAG,I 
      JMP L.RED,I 
* 
FNXT2 STA FFLAG,I 
      LDA LEN       GET THE RECORD LENGTH READ
      SZA,RSS       ZERO RECORD LENGTH ?
      JMP RREAD     YES, SO TRY AGAIN 
      SSA,RSS       NO, WAS IT A NEG LENGTH ( -1 )
      JMP L.RED,I   NO , RETURN 
      STA FFLAG,I   YES , SET EOF 
      JMP L.RED,I 
* 
      SKP 
* 
* 
* THE NAMRF SUBROUTINE USES THE RELOCATABLE LIBRARY 
* PARSING ROUTINE NAMR.  THE INPUT TO NAMR IS A STRING
* OF ASCII CHARACTERS.
* THE OUTPUT IS A 10 WORD BUFFER PARSED AS :
* PRAM1,PRAM2,PRAM3,TYPE,S1,S2,S3,S4,S5,S6
* PARAMETERS BETWEEN COMMAS ARE PARSED.  SUBPARAMETERS ARE
* DELINEATED BY COLONS.  THE TYPE WORD DESCRIBES ALL
* PARAMETERS AS ASCII, NUMERIC, OR NULL.
* THE TYPE WORD IS BROKEN UP INTO 2 BIT FIELDS TO DESCRIBE
* THE INPUT.
*15,14 13,12  11,10  9,8  7,6  5,4  3,2   1,0 
*-----------------------------------------------
*       S6   ! S5   ! S4 ! S3 ! S2 ! S1 ! PRAM !
*-----------------------------------------------
* 
* PRAM = 0 ...NULL       PRAM1 = PRAM2 = PRAM3 = 0
* PRAM = 1....NUMERIC  (ONLY PRAM1 USED) PRAM1 = #
* PRAM = 2 ...NOT USED
* PRAM = 3 ... ASCII  (USES PRAM1,PRAM2,PRAM3 ) 
* 
* S1 - S6 ARE DEFINED THE SAME EXCEPT THEY ARE ONE WORD ONLY
* 
NAMRF NOP 
      JSB NAMR      THIS IS THE RELO LIBR PARSING ROUTINE 
      DEF *+5       RETURN ADDR 
      DEF IPBUF+0   ADDRESS OF 10 WORD PARSED BUFFER
      DEF L.BUF+3   ADDRESS OF BUFFER TO BE PARSED
      DEF LEN       CHARACTER LENGTH
      DEF ISTRF     CHAR OFFSET IN STRNG FOR NEXT PRAM
      JMP NAMRF,I   RETURN TO CALLER
* 
* 
      SKP 
* 
*     OPEN THE RELOCATABLE FILE 
* 
OPN5  NOP 
      JSB OPEN      OPEN THE FILE ! 
      DEF *+7 
      DEF SDCB3+0   DCB 
      DEF IERR5     ERROR FLAG
      DEF FILE5     ASCII FILE NAME 
      DEF IPTN1     READ OPTION 
      DEF F5SC      SECURITY CODE 
      DEF F5DSC     CART REF #
      SSA,RSS       ANY ERROR IN THE READ ? 
      JMP OPN5,I    NO
      LDB F5        YES , GET THE FILE NAME 
      JSB FLERR     AND REPORT
      JMP OPN5,I
* 
* 
* 
* 
* 
*     SET FIXUP TABLE POINTERS
* 
FUTP  NOP 
      LDA FUT1
      ADA N4
      STA FUT1
      ADA N3
      STA FUT4
      JMP FUTP,I
* 
* 
      NOP 
OPT.3 DEF *-1 
FUT1  NOP 
FUT4  NOP 
* 
      SKP 
      SKP 
* 
#DP   NOP 
#LU   NOP 
ADVT  NOP 
BFLAG NOP 
CDVT  NOP 
CFUT4 NOP 
CIFT  NOP 
CNT1  NOP 
CNT2  NOP 
CNT10 NOP 
CNT20 NOP 
DPA   NOP 
DEVPR NOP 
DFLAG NOP 
DPBND NOP 
DTYPE NOP 
DUMBP NOP 
DVRAD NOP 
DVTIN NOP 
EXTWD NOP 
FLAG  NOP 
FTIME NOP 
HIBUF NOP 
IFTNM NOP 
IPTN1 NOP 
ISTRF NOP 
LDTYP NOP 
LEN   NOP 
LOBUF NOP 
LU1   NOP 
LU2   NOP 
LU3   NOP 
LUFLG NOP 
MASK  NOP 
MAXLU NOP 
MAXSC NOP 
MAXRD NOP 
MDLFD NOP           -1/0/1 MODEL NOT SPEC./NOT FOUND/FOUND
MFG   NOP 
NODCK NOP           NO NODE INPUTTED/YES NODE INPUTTED
OFST1 NOP 
OFST2 NOP 
OPT3  NOP           1ST ADDRESS OF FIXUP IN GENERATOR 
QUEUE NOP 
PFLAG NOP 
PFUT4 NOP 
PIMKB OCT 4         $PIMK BIT 
PIMKW OCT 2         $PIMK WORD
PNFLG NOP 
RELFG NOP 
RFLAG NOP 
SBFLD NOP           SUBFIELD , GEN=0
SCFLG NOP 
SCNM  NOP 
SUBP1 NOP 
TCNT  NOP 
TIMWD NOP 
TYPE  NOP 
ZTEMP NOP 
ZTEM5 NOP 
Z1TMP NOP 
* 
ATBUF DEF TBUF
TBUF  BSS 10
      SKP 
      SKP 
* 
*     CONSTANTS 
* 
P1    EQU BIT+2 
P2    EQU BIT+3 
P3    DEC 3 
P4    EQU BIT+4 
P5    DEC 5 
P6    DEC 6 
P7    DEC 7 
P8    EQU BIT+5 
P9    DEC 9 
P10   DEC 10
P11   DEC 11
P12   DEC 12
P13   DEC 13
P14   DEC 14
P15   DEC 15
P16   EQU BIT+6 
P17   DEC 17
P18   DEC 18
P19   DEC 19
P20   DEC 20
P21   DEC 21
P22   DEC 22
P23   DEC 23
P24   DEC 24
P32   EQU BIT+7 
P40   DEC 40
P60   DEC 60
P63   DEC 63
P64   EQU BIT+8 
* 
N1    DEC -1
N2    DEC -2
N3    DEC -3
N4    DEC -4
N5    DEC -5
N6    DEC -6
N7    DEC -7
N10   DEC -10 
N16   DEC -16 
N24   DEC -24 
N40   DEC -40 
N64   DEC -64 
N128  DEC -128
N512  DEC -512
* 
B30   OCT 30
B57   OCT 57
B60   OCT 60
B70   OCT 70
B300  OCT 300 
B1001 OCT 1001
B1777 OCT 1777
* 
BL    ASC 1,BL
BU    ASC 1,BU
DP    ASC 1,DP
DT    ASC 1,DT
DV    ASC 1,DV
DX    ASC 1,DX
EN    ASC 1,EN
FI    ASC 1,FI
IF    ASC 1,IF
IN    ASC 1,IN
IT    ASC 1,IT
LU    ASC 1,LU
NO    ASC 1,NO
PR    ASC 1,PR
QU    ASC 1,QU
SC    ASC 1,SC
TO    ASC 1,TO
TX    ASC 1,TX
UN    ASC 1,UN
* 
BLIM  OCT 11060 
DASH  OCT 26440 
E     OCT 42400 
M     OCT 46400 
HIMSK OCT 177400
MSIGN EQU BIT+1 
MSK1  OCT 77000 
MSK77 OCT 77777 
CLCF0 CLC 0,C 
* 
LBUF3 DEF L.BUF+3 
* 
BLANK EQU P32 
* 
A     EQU 0 
B     EQU 1 
      END L20G3 
                          