ASMB,R,Q,C
      HED RTE IV CONFIGURATOR     PART OF 92067-16014 
      NAM $CNFG,16 92067-16014 REV.1926 790610
*     NAME:   $CNFG 
*     SOURCE: 92067-18025 
*     RELOC:  PART OF 92067-16014 
*     PGMR:   S.K.,D.J.V.,J.M.N 
* 
* 
*  ***************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979.  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.       *
*  ***************************************************************
* 
      SUP 
      ENT $CNFG,$EXIT,$PCHN,$WRRD,$USRS,$ABDP,$SMTB 
      ENT $TRTB,$TREN,$NPGQ,$GDPG,$SAVE 
* 
      EXT $SBTB,$SSCT 
      EXT $XSIO,$CMST,$ENDS,$MRMP,$XCQ,$LIST
      EXT $CNV3,$PRSE,$PLP,$MATA,$MNP 
* 
* 
A     EQU 0 
B     EQU 1 
JSBCI EQU 5 
EQTA  EQU 1650B 
EQT#  EQU 1651B 
DRT   EQU 1652B 
LUMAX EQU 1653B 
INTBA EQU 1654B 
INTLG EQU 1655B 
KEYWD EQU 1657B 
EQT1  EQU 1660B 
EQT3  EQU 1662B 
EQT4  EQU 1663B 
EQT5  EQU 1664B 
EQT6  EQU 1665B 
EQT7  EQU 1666B 
EQT8  EQU 1667B 
EQT9  EQU 1670B 
EQT10 EQU 1671B 
EQT11 EQU 1672B 
EQT12 EQU 1771B 
TBG   EQU 1674B 
SYSTY EQU 1675B 
SKEDD EQU 1711B 
DUMMY EQU 1737B 
BPA2  EQU 1743B 
LBORG EQU 1745B 
SECT2 EQU 1757B 
* 
* 
$SAVE  BSS 9
      NOP 
      NOP 
      BSS 3 
TBGSV NOP 
PRVSV NOP 
ACN1  DEF CN1 
MRSET OCT 150077
* 
.3    DEC 3 
.4    DEC 4 
.5    DEC 5 
.6    DEC 6 
.7    DEC 7 
.8    DEC 8 
.12   DEC 12
.13   DEC 13
.14   DEC 14
.15   DEC 15
.16   DEC 16
.31   DEC 31
.32   DEC 32
.40   DEC 40
.64   DEC 64
.168  DEC 168 
* 
N1    DEC -1
N3    DEC -3
N4    DEC -4
N6    DEC -6
* 
B10   EQU .8
B37   EQU .31 
B40   EQU .32 
B41   OCT 41
B74   OCT 74
B75   OCT 75
B177  OCT 177 
B1777 OCT 177700
B377  OCT 377 
B1774 OCT 177400
B1776 OCT 1776
HLT4  OCT 102004
* 
YE    ASC 1,YE
NO    ASC 1,NO
SPACE ASC 1,
* 
MSG4  ASC 13,CURRENT I/O CONFIGURATION: 
MSG5  ASC 8,SELECT CODE   = 
MSG6  ASC 6,EQT   ,TYPE 
MSG8  ASC 4,PRIV I/O
MSG10 ASC 25,CURRENT SELECT CODE#,NEW SELECT CODE#?(/E TO END)
MSG12 ASC 20,NEW I/O CONFIGURATION PERMANENT?(YES/NO) 
MSG21 ASC 13,PHYSICAL MEM SIZE?(#PAGES) 
AMSG5 DEF MSG5
AMSG6 DEF MSG6
AMSG8 DEF MSG8
ACNFX DEF *+1 
SWREG ASC 3,$CNFX 
TEMP  EQU ACNFX 
CTRCL EQU SWREG+1 
CINTB EQU SWREG+2 
OLSTB BSS 56
* 
* 
* 
* 
$CNFG NOP 
SVTBL CLC 0         CLEAR ALL INTERRUPTS
      LDA SYSTY     GET CONSOLE EQT ADDRESS 
      ADA .3        POINT TO WORD 4 OF CONSOLE EQT
      STA $SAVE     SAVE IT 
      LDA .4,I      TRAP CELL CONTENTS FOR POWER FAIL 
      STA $SAVE+11  SLOT
      LDA HLT4      INSERT HALT 4 IN TRAP CELL SO THAT THE SYSTEM 
      STA .4,I      HALTS ON POWER FAIL DURING CONFIGURATION
      LDA DUMMY     SAVE PRIV INT CARD LOC
      STA $SAVE+5   FROM BASE PAGE
      STA PRVSV 
      LDA TBG 
      STA TBGSV 
      LDA SKEDD     SAVE CONTENTS 
      STA $SAVE+6 
      CLB           CLEARSYSTY TO PREVENT USER FROM 
RSTBL STB SYSTY     GETTING OPERATOR ATTENTION
      STB DUMMY     & DUMMY TO LET INTERRUPTS COME THRU 
      STB SKEDD     PREVENT PROG FROM BEING SCHEDULED 
      LDA $LIST     SAVE CONTENTS 
      STA $SAVE+7 
      ISZ $LIST 
      DLD EQT1      SAVE EQT WORDS 1-6 ON 
      DST $SAVE+1    BASE PAGE COMMUNICATION AREA 
      DLD EQT3
      DST $SAVE+3 
      DLD EQT5
      DST $SAVE+12
* 
      LDB ACNFX     GET $CNFX'S ID SEGMENT ADDRESS
      JSB TNAME 
      SEZ,SZA,RSS   PRESENT?
      CLB           NO
      STB CNXID     ID SEGMENT ADDRESS
* 
      LIA 1         READ THE SWITCH REGISTER CONTENTS 
      STA SWREG     AND SAVE IT 
      CLB           CLEAR THE SWITCH REGISTER 
      OTB 1 
      SSA,RSS       BIT 15 SET? 
      JMP MEMLD     NO,LOAD MEM RES & DRIVER PARTNS 
      CCA           YES,INITIALIZE SVTBL TO -1
      LDB .40       SVTBL IS 16 WORDS LONG
TEMP6 JSB SETM      AND RSTBL IS 20 WORDS LONG
WFLAG DEF SVTBL     STARTING FROM LOC SVTBL 
TEMP1 LDA SWREG 
TEMP2 ALF,ALF       GET NEW DISC SC IN BITS 0-5 
TEMP3 RAL,RAL 
TEMP4 AND B77       MASK DISC SC
TEMP5 SZA,RSS       0?
OLDSC JMP MEMLD     YES, DISC SC DOES NOT CHANGE
NEWSC STA NEWSC 
      LDA ASVTB     START OF SVTBL
      JSB SVENT     MAKE NEW DISC ENTRY IN SVTBL
      CLA 
      LDB NEWSC 
      CPB TBG       USED TO BE TBG? 
      STA TBG       YES, THEN CLEAR TBG 
      CPB $SAVE+5   USED TO BE PRIV I/O CARD? 
      STA $SAVE+5   YES, THEN CLEAR PRIV I/O CARD 
* 
TRPCL LDA DRT       POINT TO DRT ENTRY FOR LU2
      INA 
      LDA A,I       GET CONTENTS OF SYS LU ENTRY IN DRT 
      AND B77       MASK EQT # FOR DISC 
      ADA N1        SUBTRACT 1 TO START EQT#'S AT 0 
      MPY .15       FIND SYS DISC EQT ADDR
      ADA EQTA
      ADA .3        POINT TO WORD 4 OF SYS DISC EQT 
      STA B         SAVE ADDRESS IN THE B REG 
      STA RSTBL+5   SAVE FOR NOW
      JSB EQTCN     SET EQT WORD 4 FOR NEW SELECT CODE
      LDA INTBA     INTERRUPT TABLE ADDRESS 
      ADA OLDSC     ADD OLD SELECT CODE # 
      ADA N6        ADJUST ADDRESS
      LDB A,I       GET CONTENTS OF INTRPT TBL ENTRY
      INA           POINT TO NEXT SC IN INTRPT TBL
      CPB A,I       BOTH SELECT CODES THE SAME? 
      CCA,RSS       YES 
      CLA 
      STA TEMP      -1 IF 2 SC'S FOR DISC, 0 OTHERWISE
      JSB INTRP     SET TRAP CELL AND INTRPT TBL FOR NEW SC 
      LDA TEMP
      SSA,RSS       2 DISC SC'S?
      JMP MEMLD     NO, THEN LOAD MEMORY
      ISZ NEWSC     YES,SECOND SELECT CODE# FOR DISC
      ISZ OLDSC     SECOND SELECT CODE FOR DISC 
      LDA ASVTB 
      ADA .4        ENTER SECOND SC ENTRIES IN SVTBL
      JSB SVENT 
      JSB INTRP     SET UP TRAP CELL & INTRPT TBL FOR 2ND SC
      CCA           GET OLD SC BACK TO ORIGINAL VALUE 
      ADA OLDSC     OLD SC - 1
      CCB 
      ADB NEWSC     NEW SC - 1
PRMTB DST OLDSC     RESTORE THEM
* 
* 
*  LOAD MEMORY RESIDENT PROGRAMS AND RESIDENT LIBRARY 
*  AND THE DRIVER PARTITIONS INTO MEMORY
* 
* 
MEMLD LDA $SBTB+1   GET # OF PAGES IN DRIVER PARTITIONS 
      SZA,RSS       ANY GENERATED INTO SYSTEM?
DRPGS JMP MEMRS     NO, LOAD MEMORY RESIDENT PROGRAMS 
      STA DRPGS     USE THIS AS COUNTER 
      LDA B41       BUILD DISC RESIDENT PROGRAM 
      LDB $CMST     MAP TO LOAD DRIVER PARTITIONS 
      ADB N1
MWOCM CBX           # OF PAGES TO BE LOADED 
NPGS  CLB,INB       START LOADING FROM PAGE 1 
      XMS           TRANSFER SEQUENTIAL MEMORY
      STA MEMLD     A REG POINTS TO NEXT MAP REG# 
      LDB $ENDS     START PAGE OF DRIVER PARTITIONS 
      STB MEMLD+1 
      LDB $CMST     # OF PAGES IN THE MAX.ADDRESSABLE 
      CMB,INB       SPACE WITHOUT COMMON
      ADB .31 
      STB MWOCM     SAVE IT 
      LDA $SBTB     DISC ADDRESS OF DRIVER PARTNS 
      JSB DSCAD     SEPARATE TRACK AND SECTOR #'S 
* 
      LDA $CMST     START PAGE OF COMMON
      LSL 10        MULTIPLY BY 2000B 
      STA TEMP3     LOAD FOR DRIVER PARTN 
DRVLD LDA DRPGS 
      LDB DRPGS     # OF PAGES IN DRIVER PARTITIONS 
      CMB,INB       # OF PAGES LEFT TO BE LOADED
      ADB MWOCM     > MAX ADDRESS SPACE IN MAP? 
      SSB 
      LDA MWOCM     YES,#PGS TO LOAD AT ONE TIME=MWOCM
      STA NPGS      # OF PAGES OF DRVR PARTN TO BE LOADED 
      CAX           BUILD THE REST OF THE DISK RES MAP
      DLD MEMLD 
      XMS           LOAD MAP
      DST MEMLD     SAVE NEW VALUES OF A&B REG
      LDA NPGS      BUILD TRIPLETS TO READ DATA 
      LSL 10        FROM DISC W/OUT CROSSING TRACK BOUNDARY 
      STA TEMP      SAVE # OF WORDS IN BUFFER 
      JSB LOAD      LOAD NPGS OF DRIVER PARTITION 
      LDA NPGS      # PAGES LOADED
      CMA,INA 
      ADA DRPGS     #PAGES THAT HAD TO BE LOADED
      SZA,RSS       ANY LEFT? 
      JMP MEMRS     NO, DONE LOADING DRIVER PARTNS
* 
      STA DRPGS     #PAGES LEFT TO BE LOADED
      ISZ PRMAR     ADDRESS OF PARAMETER ARRAY
      LDB PRMAR,I   GET # OF WORDS IN LAST TRIPLET
      LSR 6         DIVIDE IT BY 64 
      CBX           SAVE B REG VALUE
      ISZ PRMAR     GET TRACK / SECTOR # FOR LAST TRIPLET 
      LDA PRMAR,I 
      JSB DSCAD     SEPARATE DISC ADDRESS 
      CXB           GET X REG IN B
      ADB TEMP2     B REG HAS NEW SECTOR #
      CMB           -(NEW SECTOR# + 1)
      ADB SECT2     # OF SECTORS/TRACK ON SYS DISC
      SSB,RSS       NEW SECT#># SECTORS/TRACK ON SYS DISC?
      JMP DRVLD     NO
      ISZ TEMP1     YES, INCREMENT TRACK# BY 1
      CLA           SECTOR# IS 0
      STA TEMP2     SECTOR# FOR SETUP 
      JMP DRVLD     LOAD THE NEXT PAGES 
* 
* 
*  INTRP - THIS PROCEDURE IS PERFORMED TO ENTER 
*   INTERRUPT TABLE AND TRAP CELL VALUES FOR DISC 
*   SELECT CODES
* 
*  CALLING SEQUENCE:  JSB INTRP 
* 
INTRP NOP 
      LDB OLDSC,I   TRAP CELL VALUE FOR OLD SELECT CODE 
      STB NEWSC,I   STORE VALUE IN NEWSC'S TRAP CELL
* 
      LDA INTBA     INTERRUPT TABLE ADDRESS 
      ADA N6
      STA TEMP2     SAVE THIS ADDRESS 
      LDB OLDSC     OLD SELECT CODE 
      ADB A         POINT INTO INTERRUPT TABLE
      LDA B,I       OLD SC'S INTERRUPT TABLE VALUE
      LDB NEWSC 
      ADB TEMP2 
      STA B,I       SAVE OLDSC VALUE IN NEWSC ENTRY 
      JMP INTRP,I   IN INTERRUPT TABLE - RETURN 
* 
* 
*  TNAME - SEARCH KEYWORD LIST FOR PROGRAM NAME 
*  CALLING SEQUENCE:  B REG = ADDRESS OF ASCII PROGRAM NAME 
*                     JSB TNAME 
*  RETURNS:  A REG = 0 IF PROGRAM NOT FOUND (E=1) 
*            B REG = ID SEGMENT ADDRESS OF REQUESTED PROGRAM
*            E REG = 0 IF STANDARD ID SEGMENT 
*            E REG = 1 IF SHORT ID SEGMENT OR NOT FOUND 
* 
* 
TNAME NOP 
TNTM3 STB TNTM3     ADDRESS OF NAME 1 AND 2 
TNTM4 INB           INCREMENT TO CHAR 3 AND 4 ADDR
TNTM5 STB TNTM4     SAVE IT 
      INB           INCR TO CHAR 5 ADDR 
      LDA B,I       ASCII NAME CHAR 5 AND X 
      AND B1774     MASK OFF X
      STA TNTM5 
      SZA           IF NULL CHAR. FORCE ERROR RETURN
      LDA KEYWD 
      STA TEMP
TN005 LDA TEMP,I    CHECK IF AT END OF LIST 
      CCE,SZA,RSS 
      JMP TNAME,I   END OF LIST RETURN
      ADA .12 
      LDB A,I       ID SEG ASCII NAME CHARS 1 AND 2 
      CPB TNTM3,I   COMPARE WITH REQUESTED CHAR 1,2 
      INA,RSS       COMPARES
      JMP TN030     DOES NOT COMPARE-GO TO NEXT PROG
      LDB A,I       ID SEG ASCII NAME CHARS 5,X 
      CPB TNTM4,I   COMPARE WITH REQUESTED CHARS 3,4
      INA,RSS       COMPARES
      JMP TN030     DOES NOT COMPARE-GO TO NEXT PROG
      LDA A,I       ID SEG ASCII NAME CHARS 5,X 
      STA B         SAVE FOR SHORT ID TEST
      AND B1774     MASK OFF X
      CPA TNTM5     COMPARE CHAR 5
      JMP TN040     COMPARES-SO PROGRAM FOUND 
* 
TN030 ISZ TEMP      INCREMENT KEYWORD ADDRESS 
      JMP TN005     GO TO COMPARE CHARS 
TN040 LSR 4         MOVE SHORT ID BIT TO LEAST B
      ERB           SET E FOR RETURN
      LDB TEMP,I    LOAD B WITH ID SEG ADDRESS
      JMP TNAME,I   EXIT
* 
* 
*   LOAD THE MEMORY RESIDENT PROGRAMS 
*    AND THE MEMORY RESIDENT LIBRARY
* 
* 
MEMRS LDA $SBTB+3   # OF PAGES IN MEM RESIDENT BASE PAGE
      SZA,RSS       MEM RES PROGRAMS EXIST? 
      JMP IOCNF     NO, THEN CONFIGURE I/O
      LDA B40       YES 
      LDB .32       32 REGISTERS
      CBX 
      LDB $MRMP     MEM RES MAP 
      XMM           TRANSFER MEM TO MAPS
* 
      LDA B1776     1776B WORDS TO LOAD FOR 
      STA TEMP      MEM RESIDENT BASE PAGE
      LDA $SBTB+2   DISC ADDRESS FOR MEM RES BASE PAGE
      JSB DSCAD 
      LDA .2        START ADDRESS IS 2
      STA TEMP3 
      JSB LOAD      LOAD MEM RES BASE PAGE
      LDA $SBTB+5   #PAGES FOR MEM RES LIB & PROGS
      LSL 10        MULTIPLY BY 2000B 
      STA TEMP      # OF WORDS IN BUFFER
      LDA $SBTB+4   DISC ADDRESS FOR MEM RES LIB & PROGS
      JSB DSCAD 
      LDA LBORG     STARTING MEM ADDRESS
      STA TEMP3     FOR RESIDENT LIBRARY
      JSB LOAD      LOAD THE MEM RES PROGS & LIB
* 
* 
****   I/O RE-CONFIGURATION   ******
* 
* 
IOCNF LDA SWREG     RE-CONFIGURATION REQUESTED? 
      SSA,RSS       BIT 15 IN SWITCH REGISTER SET?
      JMP $EXIT     NO, THEN DONE 
* 
      CCA           YES,INITIALIZE TRPCL,INTBL,EQTBL TO -1
      LDB .168      168 ENTRIES POSSIBLE
      JSB SETM
      DEF TRPCL     START AT LOC TRPCL
      CCA           INITIALIZE OLD SC TABLE TO -1 
      LDB B70 
      JSB SETM
      DEF OLSTB 
      LDA SVTBL     DISC I/O SELECT CODE CHANGED? 
      SSA 
      JMP CONSL     NO, THEN CONFIGURE CONSOLE SC 
      JSB JNENT     ENTER DISC SC IN INTBL AND TRPCL
      NOP           ERROR RETURN NOT POSSIBLE 
      LDA AEQTB     ADDRESS OF EQTBL
      ADA NEWSC     POINT TO NEW DISC SC ENTRY
      ADA NB10      IN EQTBL
      LDB RSTBL+5   EQT WORD 4 ADDRESS FOR DISC EQT 
      STB A,I       SET UP ENTRY IN EQTBL FOR DISC
      JSB CLRSC     CLEAR SC IN INTERRUPT TABLE &TRAP CELL
      LDA ARSTB     ADDRESS OF RSTBL
      JSB RSENT     MAKE ENTRIES IN RESTORE TABLE 
      LDA SVTBL+4   DISC HAS TWO SELECT CODES?
      CPA N1        ENTRY MADE IN SVTBL?
      JMP CONSL     NO, THEN CONFIGURE CONSOLE SC 
      ISZ NEWSC     YES 
      ISZ OLDSC 
      JSB JNENT     ENTER 2ND DISC SC IN INTBL & TRPCL
      NOP           DO NOTHING ON ERROR RETURN
      JSB CLRSC     CLEAR SC IN INTERRUPT TABLE & TRAP CELL 
      LDA ARSTB     POINTER INTO RSTBL FOR
      ADA .6        SECOND DISC SC ENTRIES
      JSB RSENT     MAKE ENTRIES IN RSTBL 
* 
CONSL LDA SWREG     GET BITS 0-5 OF SWITCH REGISTER 
      AND B77       GET CONSOLE SELECT CODE 
      SZA,RSS       0?
      JMP UNBCN     YES, CONSOLE SC NOT CHANGED 
      STA NEWSC     NO, NEW SELECT CODE FOR CONSOLE 
      LDA $SAVE     DETERMINE DRIVER TYPE FOR CURRENT 
      INA           SYSTEM CONSOLE - POINT TO WORD 5
      LDA A,I       OF CURRENT SYSTEM CONSOLE EQT 
      ALF,ALF       GET EQUIPMENT TYPE CODE 
      AND B77       INTO BITS 0-7 
      STA TEMP1     SAVE IT 
      LDA N3        CONFIGURE I/O INSTR TO FIND OUT TYPE
CONLP LDB ACN1,I    OF CONSOLE ATTACHED TO NEW SC 
      ADB NEWSC 
      STB ACN1,I    RESTORE INSTR 
      ISZ ACN1      POINT TO NEXT INSTR 
      INA,SZA       ALL INSTR CONFIGURED? 
      JMP CONLP     NO
      LDB .5
      LDA MRSET     MASTER RESET WORD 
CN1   CLF 0 
CN2   OTA 0 
CN3   SFS 0 
      CLB           DVR00 DRIVER
      CLA 
      CPB TEMP1     IS THIS CONSOLE SAME TYPE AS CURRENT ONE
      CCA,RSS       YES, INDICATE SO IN TEMP2 
      STB TEMP1     NO, THEN SAVE NEW CONSOLE TYPE
      STA TEMP2     0 IF DRIVER TYPES NOT SAME, -1 IF SAME
* 
*   FIND AN EQT WITH EQUIPMENT TYPE CODE MATCHING 
*   THE NEW SELECT CODE 
* 
      LDA NEWSC 
      JSB EQTFN     FIND AN EQT # WITH NEW SC 
      SSB,RSS       FOUND?
      JMP FNCNE     YES 
CNEQT LDA TEMP2     NO, THEN DRIVER TYPES WERE SAME?
      SSA 
      JMP CONTY     YES 
      CLA,INA       NO FIND EQT WITH RIGHT DRIVER TYPE
      STA TEMP      TEMP KEEPS COUNT OF EQT'S LOOKED AT 
      LDB EQTA      EQUIPMENT TABLE START 
      ADB .4        POINT TO WORD 5 OF THE FIRST EQT
EQTLP LDA B,I       GET CONTENTS OF WORD 5 OF EQT 
      ALF,ALF       EQUIPMENT TYPE CODE IN LOW 6 BITS 
      AND B77 
      CPA TEMP1     IS IT SAME AS THAT OF NEWSC?
      JMP FNDEQ     YES,THE RIGHT EQT HAS BEEN FOUND
      LDA TEMP
      CPA EQT#      ALL EQT'S DONE? 
      JMP EQERR     YES, THEN ERROR 
      ISZ TEMP      NO, POINT TO NEXT EQT'S WORD 5
      ADB .15 
      JMP EQTLP 
* 
FNCNE LDA TEMP5     EQT#-1 RETURNED BY EQTFN
      INA           EQT#
      STA TEMP      SAVE IT 
      INB           POINT TO WORD 5 OF EQT
      LDA B,I       GET CONTENTS OF WORD 5 OF EQT 
      ALF,ALF 
      AND B77       GET EQUIPMENT TYPE CODE 
      CPA TEMP1     IS IT SAME AS THAT OF NEW CONSOLE?
      JMP FNDEQ     YES, THEN FOUND THE RIGHT EQT 
      JMP CNEQT     NO, THEN FIND EQT 
* 
EQERR HLT 55B       HALT SYSTEM 
      JMP *-1 
* 
CONTY LDB $SAVE     DRIVER TYPE SAME FOR
      JMP EQTTY     OLD AND NEW SYSTEM CONSOLE
* 
UNBCN LDB $SAVE     UNBUFFER CONSOLE EQT
      JSB EQUNB 
      LDA TEMP2 
      STA $SAVE+9 
      LDA $SAVE,I   GET WORD 4 OF CONSOLE EQT 
      AND B77       GET THE SELECT CODE 
      LDB A,I       GET THE TRAP CELL CONTENTS FOR SYS CONSOLE
      STB CTRCL     SAVE TRAP CELL CONTENTS 
      ADA INTBA     INDEX INTO THE INTERRUPT TABLE
      ADA N6
      LDA A,I 
      STA CINTB     INTERRUPT TABLE ENTRY FOR SYS CONSOLE 
      JMP STRCN 
* 
* 
* 
*  CLRSC - ROUTINE TO CLEAR INTERRUPT TABLE ENTRY FOR OLDSC 
*          AND TO INSERT A JSB $CIC,I INSTR IN CORRESPONDING
*          TRAP CELL ENTRY
*  CALLING SEQUENCE:  JSB CLRSC 
* 
* 
CLRSC NOP 
      LDA OLDSC 
      CPA SVTBL     IS OLDSC SAME AS NEW DISC SC #1?
      JMP CLRSC,I   YES, THEN RETURN
      CPA SVTBL+4   IS OLDSC SAME AS NEW DISC SC #2?
      JMP CLRSC,I   YES, RETURN 
      LDA JSBCI     JSB $CIC,I INSTR
      STA OLDSC,I   IN TRAP CELL ENTRY FOR OLD SC 
      LDA INTBA     INTERRUPT TABLE ADDRESS 
      ADA N6
      ADA OLDSC     POINTER INTO THE INTERRUPT TABLE
      CLB           CLEAR ENTRY FOR OLD SC IN INTERRUPT TABLE 
      STB A,I 
      JMP CLRSC,I   RETURN
* 
* 
*   EQT HAS BEEN FOUND, CHANGE EQT# IN DRT ENTRY FOR
*   LU1 - THE SYSTEM CONSOLE AND IN BASE PAGE LOC SYSTY 
* 
FNDEQ ADB N1        POINT TO WORD 4 OF NEW EQT ADDRESS
      STB $SAVE     SAVE IS WHERE SYSTY+4 IS SAVED
      CPA .5        IN THIS DVR05 TYPE CONSOLE? 
      JMP NOSUB     YES, THEN SUBCHANNEL IS 0 
* 
      LDA LUMAX     # OF LOGICAL UNITS DEFINED
      CMA,INA 
      STA TEMP3     SAVE AS NEGATIVE COUNTER
      LDB DRT       START OF DEVICE REFERENCE TABLE 
DRTLP LDA B,I       GET AN ENTRY FROM DRT 
      AND B77       MASK EQT #
      CPA TEMP      SAVE AS NEW SYS CONSOLE'S EQT 
      JMP DRTEN     YES, FOUND NEW SYS CONSOLE'S ENTRY IN DRT 
* 
      INB           POINT TO NEXT ENTRY IN DRT
      ISZ TEMP3     INCREMENT COUNTER 
      JMP DRTLP     CHECK NEXT DRT ENTRY
* 
NOSUB LDA TEMP      EQT # OF NEW SYS CONSOLE
      RSS 
DRTEN LDA B,I       SET UP DRT ENTRY FOR LU 1 
      STA DRT,I 
* 
EQTTY LDB $SAVE     NEW CONSOLE'S EQT WORD 4 ADDRESS
      LDA B,I       GET CONTENTS OF WORD 4 OF EQT 
      AND B77 
      STA OLDSC     OLD SC # FOR CONSOLE
      JSB EQUNB     UNBUFFER EQT
      LDB TEMP2     SAVE BUFFERED/UNBUFFERED STATUS 
      STB $SAVE+9 
      LDA ASVTB     POINT TO ENTRY IN 
      ADA .8        SVTBL FOR SYSTEM CONSOLE
      JSB SVENT     ENTER NEW SC IN SVTBL 
      JSB JNENT     ENTER NEW & OLD SC IN INTBL & TRPCL 
      NOP           DO NOTHING ON ERROR RETURN
      CCA           SET FLAG TO INDICATE DO NOT CLEAR 
      STA NOCLR     CURRENT EQT'S FOR NEW SC
      LDA OLDSC     GET OLD SELECT CODE # 
      JSB IPROC     CONFIGURE INTRPT TBL & TRAP CELL
      LDA NEWSC     NEW SELECT CODE 
      JSB IPROC     CONFIGURE NEW SELECT CODE 
      LDA ARSTB     POINTER INTO RSTBL FOR CONSOLE SC 
      ADA .12 
      JSB RSENT     MAKE ENTRIES IN RSTBL FOR CONSOLE SC
      CLA           CLEAR FLAG
      STA NOCLR 
      LDB RSTBL+17  EQT WORD 4 ADDRESS OF CONSOLE 
      ADB N3        POINT TO FIRST WORD OF CONSOLE EQT
      STA B,I       CLEAR THIS WORD 
* 
STRCN LDB .11 
      JSB WRTTY 
      DEF MSG0      START RECONFIGURATION 
*   CONFIGURE LIST DEVICE SELECT CODE 
* 
LSTDV LDB .8
      JSB QUERY     ASK FOR 
      DEF MSG1      LIST DEVICE LU? 
LSTLU LDA PRSBF     GET FIRST WORD OF PARSE BUFFER
TRTMP SZA,RSS       NULL? 
      JMP LUDFL     YES, THEN DEFAULT LU# 
SAVPG LDB APRSB     ADDRESS OF PARSE BUFFER 
SVPG1 LDA LUMAX     UPPER LIMIT FOR LU# 
      STA MXLU# 
      CLA,INA       LOWER LIMIT FOR LU# 
      JSB TST#      TEST LU#
MXLU# NOP 
      JMP LUERR 
      RSS 
LUDFL INA           YES, THEN DEFAULT LU IS 1 
      STA LSTLU     LIST DEVICE LU# 
* 
*   LIST DEVICE SELECT CODE # 
* 
      CCB 
      LDA LSTLU 
      CPA .1        SAME AS CONSOLE LU? 
      JMP ECHO2     YES, DO NOT ASK FOR SELECT CODE#
      LDA LSTLU     GET EQT# FOR LIST DEVICE LU 
      ADA N1
      ADA DRT       ADDRESS OF DRT TABLE
      LDA A,I       GET CONTENTS
      AND B77       LIST DEVICE EQT# IN A REG 
      SZA,RSS       BIT BUCKET? 
      JMP LUERR     YES 
      ADA N1
      MPY .15       GET EQT ADDRESS 
      ADA EQTA
      ADA .3        POINT TO WORD 4 OF LIST DEV EQT 
      STA $SAVE+8   SAVE ADDR OF WORD 4 OF LIST DEV EQT 
LULST LDB .13 
      JSB QUERY 
      DEF MSG2      LIST DEVICE SELECT CODE #?
      LDA PRSBF     FIRST WORD OF PARSE BUFFER
      SZA,RSS       0?
      JMP ECHOQ     YES,NO CHANGE IN LIST DEV CHNL
      LDB APRSB     ADDRESS OF PARSE BUFFER 
      JSB TSTCH     TEST VALIDITY OF LIST DEVICE SELECT CODE# 
      JMP LULST     SELECT CODE # NOT VALID 
      STA NEWSC     NEW SELECT CODE # FOR LIST DEVICE 
      LDB $SAVE+8   ADDR OF WORD 4 OF LIST DEV EQT
      LDA B,I       GET CONTENTS OF LIST DEV EQT WORD 4 
      AND B77       MASK SC # 
      STA OLDSC     OLD SC # FOR LIST DEVICE
      JSB EQUNB     UNBUFFER LIST DEVICE EQT
      LDA TEMP2 
      STA $SAVE+10
      LDA ASVTB     ADDRESS OF SVTBL
      ADA .12       POINT TO LIST DEVICE ENTRIES
      JSB SVENT     MAKE NEWSC ENTRY IN SVTBL 
      JSB JNENT     INTBL AND TRPCL ENTRIES 
      NOP           DO NOTHING ON ERROR RETURN
      CCA           SET FLAG TO INDICATE DO NOT CLEAR 
      STA NOCLR     SC # FROM CURRENT NEWSC EQT'S 
      LDA OLDSC     ENTRY IN INTERRPT TABLE AND 
      JSB IPROC     AND TRAP CELL FOR OLD SELECT CODE 
      LDA NEWSC     AND NEW SELECT CODE FOR LIST DEVICE 
      JSB IPROC 
      LDA ARSTB     POINTER INTO RSTBL FOR
      ADA .18       LIST DEVICE 
      JSB RSENT     MAKE ENTRIES IN RSTBL FOR LIST DEVICE 
      CLA 
      STA NOCLR     RESET FLAG
      LDB RSTBL+23  GET EQT WORD 4 ADDR FOR LIST DEV
      ADB N3        POINT TO FIRST WORD OF LIST DEV EQT 
      STA B,I       CLEAR THE WORD
* 
* 
ECHOQ LDB .7
      JSB QUERY     ECHO?(YES/NO) 
      DEF MSG3
      LDA PRSBF     PARSE BUFFER
      CPA .1        NUMERIC VALUE?
      JMP ECHOQ     YES, THEN ASK AGAIN 
      CCB 
      LDA PRSBF+1   FIRST TWO CHARACTERS
      CPA NO        NO? 
      JMP ECHO2     ECHO NOT REQUIRED?
      CPA YE        YES?
      RSS 
      JMP ECHOQ     ERRONEOUS REPLY, ASK AGAIN
ECHO  CLB 
ECHO2 STB ECHO      ECHO=0 ECHO WANTED,-1 ECHO NOT WANTED 
* 
* 
*  PRINT A LIST OF CURRENT I/O CONFIGURATION
* 
STIO  DLD .ENT      SET UP MESSAGE
      DST MSG4+2
      LDB .13 
      JSB WRLST 
      DEF MSG4      CURRENT I/O CONFIGURATION:
      JSB PRNIO 
* 
*   WANT I/O CONFIGURATION? 
* 
WNTIO LDB .14 
      JSB QUERY 
      DEF MSG9      I/O RECONFIGURATION?(YES/NO)
      LDA PRSBF+1 
      CPA NO
CNTRP JMP MEMCN     I/O CONFIG NOT REQIURED 
CNINT CPA YE
LSTRP RSS 
LSINT JMP WNTIO     ASK QUES AGAIN
* 
*   I/O RECONFIGURATION IS DESIRED
* 
IOCN2 LDB .25 
      JSB WRTTY 
      DEF MSG10     CURRENT SELECT CODE#,NEW SELECT CODE#?(/E TO END) 
IOCN3 CLB,INB 
      JSB QUERY 
      DEF HYPHN     HYPHEN (-) PROMPT 
      LDA PRSBF 
      CPA .2        ASCII?
      JMP ENDIO     CHECK IF END OF LIST
      LDB APRSB     ADDRESS OF PARSE BUFFER 
      JSB TSTCH     TEST SELECT CODE VALIDITY 
      JMP IOCN3     NOT VALID ASK AGAIN 
      STA OLDSC     OLD SELECT CODE 
      LDA PRSBF+4   SECOND PARAMETER ASCII? 
      CPA .2
      RSS           YES, CHECK IF IT IS PR
      JMP NEWCH     NO, TEST NEW CHANNEL #
      LDA PRSBF+5 
      CPA PI        PRIVILEGED I/O CARD TO BE ADDED?
      RSS           YES 
      JMP IOERR     NO, THEN ERROR
      LDA OLDSC     OLD SELECT CODE VALUE 
      JSB CHKSC     NEW SC VALUE FOR DISC,CONSOLE OR LIST?
      JMP ERR3      YES, THEN CONFIG ERR 3
      LDA OLDSC     NO, GET OLDSC # 
      STA $SAVE+5   SET UP DUMMY WORD ON BASE PAGE
      ADA NB10
      ADA AINTB     POINT INTO INTBL
      CLB 
      STB A,I       CLEAR THE INTBL ENTRY FOR OLDSC 
      LDA OLDSC 
      CPA TBG       TBG CHANNEL?
      STB TBG       YES, CLEAR TBG WORD ON BASE PAGE
      ADA NB10
      ADA ATRPC     POINT INTO TRPCL TABLE
      LDB JSBCI     INSERT JSB $CIC,I INSTR IN
      STB A,I       TRPCL ENTRY FOR OLDSC 
      LDA OLDSC 
      ADA NB10
      CAX           SAVE A REG VALUE
      ADA AOLSC     POINT TO OLD SC TABLE 
      JSB PRVOL     RESTORE PREV OLDSC IF NECESSARY 
      CXA           GET OLDSC - 10B 
      ADA AOLSC     POINT TO OLDSC ENTRY IN OLSTB 
      CCB 
      STB A,I       NO OLDSC ASSIGNED 
      CXA           GET OLDSC -10B
      ADA AEQTB     EQT TBL 
      STB A,I         ENTRY TO -1 
      JMP IOCN3     ASK FOR MORE
* 
NEWCH LDB APRSB 
      ADB .4        POINT TO VALUES FOR NEW SC
      LDA B         IF THE NEW SELECT CODE # IS 0 
      INA              DO NOT GO THRU TSTCH ROUTINE 
      LDA A,I 
      SZA 
      JMP TSTNS     NOT 0 THEN TEST NEW SELEC CODE
      LDB OLDSC     GET OLD SELECT CODE # 
      CPB PRVSV     IS IT A PRIV I/O CARD?
      JMP STNWS     YES, THEN 0 FOR NEWSC IS VALID
      JMP IOERR     NO, THEN ERROR
                                                        