ASMB,Q,R,C
      HED RTGN1 - 7900 SUBROUTINE SEGMENT.
      NAM RT4G1,5,90 92067-16316 REV.2001 790817
* 
*  ***************************************************************
*  * (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.       *
*  ***************************************************************
      SPC 3 
******************************************************************
* 
*     NAME:          RT4G1
*     SOURCE:        92067-18316
*     RELOC:         92067-16316
*     WRITTEN BY:    JJC, KFH, JH,  GAA 
* 
******************************************************************
* 
* 
*   ENTRY POINTS: 
* 
      ENT \DST0,\BOT0 
      ENT \TB31 
      ENT \FSC0 
* 
* 
* 
*   EXTERNAL UTILITY SUBROUTINES: 
* 
      EXT WRITF 
      EXT \CRET,\FMRR,\CFIL,\DSKD 
      EXT \MESS,\SRET,\RNME 
      EXT \DCON,\SPAC,\READ,\GETN,\GINT,\GET#,\GETC 
      EXT \INER,\YENO,\LSTE,\LSTS,\ABOR,\ABDO 
      EXT \PREL 
      EXT \PIOC,\TBCH 
      EXT \SCTK,\MTCH,\MDTB 
* 
* 
      EXT \LST5,\OBUF 
      EXT \TBUF,\BDCB 
      EXT \ADSK 
* 
A     EQU 0 
B     EQU 1 
      SUP 
      SKP 
*************************************************************************** 
* 
*                                                              770913 
* 
*    THE FOLLOWING BLOCK OF STORAGE FOR VARIABLES PRECEEDS, 
*    AND IS REFERENCED BY, EACH SEGMENT.  IT IS NOT OVERLAID
*    AS EACH NEW SEGMENT IS LOADED INTO MEMORY. 
* 
*    THE LOCATION OF EACH VARIABLE MUST BE THE SAME IN ALL
*    SEGMENTS.  IF A CHANGE IS MADE, MAKE THE SAME CHANGES
*    IN THE REST OF THE SEGMENTS. 
* 
*************************************************************************** 
* 
* 
BEG00 EQU * 
TB30  BSS 160       TRACK MAP TABLE/HEADER RECORD BUFFER
* 
ILIST BSS 64        USER SYSTEM PROG IDENT ADDR LIST
CURIL BSS 1         CURRENT ILIST ADDRESS 
* 
SYSCH BSS 1         SUBCHANNEL OF SYSTEM UNIT.
DCHNL BSS 1         CHANNEL OF SYSTEM DISK UNIT 
AUXCH BSS 1         SUBCHANNEL OF AUX UNIT. 
DSIZE BSS 1         DISK SIZE -NO. OF TRACKS. 
#SUBC BSS 1         # DISC SUBCHANNELS DEF'D (7905/7920)
DAUXN BSS 1         AUXILIARY DISK SIZE.
ADS#  BSS 1         AUX DISC SECTORS/TRACK. 
* 
*             RELOCATION BASE TABLE.
RBTA  BSS 1         ABSOLUTE PROGRAM BASE.
TPREL BSS 1         CURRENT PROGRAM BASE ADDRESS. 
TPBRE BSS 1         BASE PAGE RELOCATION ADDRESS. 
COMAD BSS 1         CURRENT COMMON RELOCATION BASE. 
      BSS 1         ABS PROGRAM BASE FOR MR CODE. 
* 
WDCNT BSS 1         TEMPORARY WORD COUNTER. 
DSKSY BSS 1         INITIAL ID SEGMENT DISK ADDRESS 
IDSP  BSS 1         POSITION OF 1ST ID SEG. IN SECT 
TTYCH BSS 1         SYSTEM TTY CHANNEL NO.
* 
PLFLG BSS 1         PROGRAM LOAD. FLAG = -1/0 = L/NL
DSCNT BSS 1         DISK SEGMENT SECTOR COUNT 
* 
NXFLG BSS 1         ENT/EXT FLAG = -1/0 
EXCNT BSS 1         SYMBOL COUNTER
* 
LCNT  BSS 1         CURRENT \LBUF COUNT 
DCNT  BSS 1         CURRENT DBUF COUNT
CURAI BSS 1         CURRENT IBUF COUNT
* 
CPLS  BSS 1         ADDRESS OF TOP OF FIXED CP LINK IMAGE 
CPL1  BSS 1         ADDRESS OF LOW CURRENT PAGE LINK SPECS. 
CPL1H BSS 1         NUMBER OF CURRENT PAGE LINKS ASSIGNED 
CPL2H BSS 1         IN LOW AND HIGH AREA RESPECTIVELY 
URBP1 BSS 1         LWA R/T DISC RES BP LINK AREA 
CURAK BSS 1         CURRENT KBUF ADDRESS
* 
CURAT BSS 1         CURRENT \TBUF ADDRESS 
TCNT  BSS 1         CURRENT \TBUF COUNT 
* 
CURAP BSS 1         CURRENT PLIST ADDRESS 
* 
AMAD  BSS 1         CURRENT MLIST ADDRESS 
* 
IXCNT BSS 1         ID EXTENSION COUNT
IDEXC BSS 1         CURRENT ID EXT'S USED 
IDEX  BSS 1         ADDRESS OF ID EXTENSION TABLE 
* 
LICNT BSS 1         LONG ID SEGMENT COUNT 
SSCNT BSS 1         SHORT ID SEGMENT COUNT- FOR SEGMENTED PROGS 
* 
DSKID BSS 1         DISK ID SEGMENT ADDRESS 
KEYCN BSS 1         TOTAL KEYWORD COUNT 
KEYCT BSS 1         CURRENT KEYWORD COUNT 
* 
MLIST BSS 11        MEMORY MAP BUFFER 
* 
TEMP1 BSS 1 
TEMP2 BSS 1 
LWH1  BSS 1 
LWH2  BSS 1 
LWH3  BSS 1 
LWH4  BSS 1 
L01   BSS 1 
* 
FSYBP BSS 1         FIRST WORD SYS BP LINKAGE 
SYSAD BSS 1         CURRENT ID SEGMENT ADDRESS
* 
TBREL BSS 1         CURRENT BP RELOC ADDR 
PBREL BSS 1         INITIAL BP RELOC ADDR 
* 
RELAD BSS 1         CURRENT CORE RELOCATION ADDRESS 
* 
BSBAD BSS 1         BG SEGMENT BP RELOC ADDR
BSPAD BSS 1         BG SEGMENT PROG RELOC ADDR
* 
LFLAG BSS 1         PROGRAMS-LOADED FLAG
IMAIN BSS 1         CURRENT MAIN IDENT INDEX. 
HDFLG BSS 1         HEADING FORMAT FLAG 
CIDNT BSS 1         CURRENT MAIN IDENT INDEX. 
* 
AEQT  BSS 1         ADDRESS OF EQUIPMENT TABLE
CEQT  BSS 1         NO. ENTRIES IN EQUIPMENT TABLE
SPLCO BSS 1         SPOOL EQT COUNT 
DVMAP BSS 1         ADDRESS OF DRIVER MAP TABLE 
* 
DPFLG BSS 1         DP RELOCATION FLAG, 0=YES, -1=NO
DPLN BSS 1          PAGE LENGTH OF DRIVER PARTITION 
DPADD BSS 1         START ADDR OF DRIVER PARTITION
DSKDP BSS 1         DISK ADDRESS OF DP #2 
PAGE# BSS 1         NEXT PHYSICAL PAGE TO ALLOCATE
DPNUM BSS 1         CURRENT DP# -1, OR TOT DP PAGES 
SDID  BSS 1         IDENT IDEX OF SYS DISK DRIVER 
LWDP1 BSS 1         LAST WORD OF DP, +1 
FWSDA BSS 1         FIRST WORD OF SDA 
* 
ASQT  BSS 1         ADDR OF DEVICE REFERENCE TABLE
CSQT  BSS 1         NO. ENTRIES IN DEV. REF. TABLE
* 
AINT  BSS 1         ADDRESS OF INTERRUPT TABLE
* 
DSKIN BSS 1         DISK ADDR OF INT CODE RECORD
INTCN BSS 1         RECORD COUNT OF INT CODE
* 
IDSAV BSS 1         INDEX OF CURRENT IDENT. 
DSKMN BSS 1         INITIAL MAIN DISK ADDRESS 
BSSDP BSS 1         INITIAL DISK RES MAIN BSS DISP
PRENT BSS 1         PRIMARY ENTRY POINT 
DBLAD BSS 1         CURRENT DBL ADDRESS 
REKEY BSS 1         INSTRUCTION TYPE BYTE 
INSCN BSS 1         INSTRUCTION TYPE COUNTER
INSTR BSS 1         CURRENT INSTRUCTION 
PAGNO BSS 1         CURRENT PAGE NO.
OPRND BSS 1         CURRENT OPERAND 
PLGTH BSS 1         PROGRAM LENGTH
* 
DRT2  BSS 1         DISK DRT ENTRY ( SYSTEM)
DRT3  BSS 1         AUX DISK DRT ENTRY
* 
LIBFG BSS 1 
LDTYP BSS 1 
* 
SCH1  BSS 1         INDEX OF IDENT OF PGM TO BE SCHEDULED 
SCH3  BSS 1         ADDRESS OF CURRENT ID SEGMENT 
SCH4  BSS 1         ADDRESS OF THE SCHEDULED PGM ID SEG 
FGBGC BSS 1         BACKGROUND USING FG COMMON FLAG 
$LIBR BSS 1         INDEX OF $LIBR ENT
$LIBX BSS 1         INDEX OF $LIBX ENT
CUPRI BSS 1 
* 
BLLO  BSS 1         -(LOWER BUFFER LIMIT) 
BLHI  BSS 1         -(UPPER BUFFER LIMIT) 
* 
MEM6  BSS 1 
MEM12 BSS 1 
* 
COMRT BSS 1         MAXIMUM RT COM LENGTH 
COMBG BSS 1         MAXIMUM BG COM LENGTH 
COMSZ BSS 1         #WORDS COMMON DECLARED IN CURRENT MAIN
RTCAD BSS 1         RT COMMON ADDRESS 
BGCAD BSS 1         BG COMMON ADDRESS 
FPCOM BSS 1         FIRST PAGE OCCUPIED BY COMMON 
LPCOM BSS 1         LAST PAGE CONTAINING ANY COMMON 
* 
FPSAM BSS 1         1ST PAGE CONTAINING S.A.M.
FWSAM BSS 1         1ST WORD CONTAINING S.A.M.
SYMAD BSS 1         VALUE FOR AVMEM IN SCOM 
SAM#1 BSS 1         SIZE OF FIRST CHUNK OF SAM
SAM#2 BSS 1         SIZE OF SECOND CHUNK OF SAM 
SAM2P BSS 1         START PAGE OF SAM #2
LWTAI BSS 1         LAST WORD OF TABLE AREA I FOR SAM#0 
FWPRV BSS 1         FIRST WORD FOR PRIVILEGED PROGRAMS
* 
FWSYS BSS 1         FIRST WORD OF SYSTEM CODE 
LPSYS BSS 1         LAST PAGE CONTAINING SYS
LWSYS BSS 1         LAST WORD OF SYSTEM 
LPSLB BSS 1         LAST PAGE OF SLOW BOOT
LWSLB BSS 1         LAST WORD OF SLOW BOOT
MTYPE BSS 1         MAIN PROGRAMS'S TYPE
* 
HIBP  BSS 1         BP LINK MODE FOR FIXUP ENTRIES
LOLNK BSS 1         LOW LINK FOR SSGA,LIB, OR SYS 
HILNK BSS 1         HI LINK USED BY MEM RES PRG 
BPINC BSS 1         BP LINK ALLOCATION MODE, -1=DOWN,1=UP 
BPLMT BSS 1         LAST AVAIL BP LINK IN CURRENT MODE, +1
* 
TPMAX BSS 1         HWM FOR RELOCATION OF BG MAINS & SEGS 
MAXPT BSS 1         NUM PARTS. ALLOWED
MAT.  BSS 1         ADDRESS OF MEMORY ALLOCATION TABLE
* 
SSGA. BSS 1         FWA SSGA
MAP.  BSS 1         PTR TO MEU RES MAP
MPFT. BSS 1         PTR TO MPFT 
* 
EMLNK BSS 1         EMA SYMBOL'S LINK 
EMLST BSS 1         LST INDEX OF EMA SYMBOL 
EMDSK BSS 1         DISK ADDR OF EMA PROGRAM
* 
*     MEMORY RESIDENT AREA POINTERS 
* 
MRACM BSS 1         MR ACCESS COMMON FLAG (>0 IF YES) 
LBCAD BSS 1         FIRST WORD OF MEMORY RES LIBRARY
LEND  BSS 1         LAST  WORD OF MEMORY RES LIBRARY
FWMRP BSS 1         FIRST WORD OF MEMORY RES PROGRAM AREA 
EMRP  BSS 1         LAST  WORD OF MEMORY RES PROGRAM AREA 
FPMRP BSS 1         FIRST PAGE OF MEMORY RES PROGRAM AREA 
FPMBP BSS 1         PAGE # FOR MEMORY RES BASE PAGE 
MRP#  BSS 1         # PAGES OCCUPIED BY MRL & MRP'S 
DSKMB BSS 1         DISK ADDRESS OF MEMORY RES BASE PAGE
DSKMR BSS 1         DISK ADDRESS OF MEMORY RESIDENT LIB/PROG AREA 
DSKBP BSS 1         SYSTEM DISK ADDRESS 
* 
DSKAV BSS 1         NEXT AVAILABLE DISK ADDRESS 
DSKLC BSS 1         DISK ADDRESS OF LIBRARY CODE
DSKLB BSS 1         DISK ADDR OF LIBRARY ENTRY PTS
DSKUT BSS 1         UTILITY PROG DISK ADDRESS 
DSKBS BSS 1         DISK ADDR OF MAIN BG DISK RES BP
DSKBR BSS 1         CURRENT MAIN BG DISK RES DISK AD
ADICT BSS 1         ADDR OF DISK DICTIONARY 
LBCNT BSS 1         RESIDENT LIBR ENTRY PT COUNT
SYCNT BSS 1         SYSTEM ENTRY POINT COUNT
KEYAD BSS 1         CURRENT KEYWORD ADDRESS 
* 
SYBAD BSS 1         ADDR OF FIRST BP LINK FOR BG
IDSAD BSS 1         ADDR OF FIRST ID SEGMENT
ABSID BSS 1         IDENT ADDR FOR NEXT BG SEG SCAN 
IDMBS BSS 1         BG MAIN ADDRESS FOR BS REF
* 
SYTRK BSS 1         DISK ADDR WHERE SYSTEM BEGINS - TRACK 
SYSEC BSS 1         DISK ADDR WHERE SYSTEM BEGINS - SECTOR
* 
SSGAF BSS 1         SSGA ACCESS FLAG
SPAR2 BSS 1         SPARE VARIABLE
SPAR3 BSS 1         SPARE VARIABLE
SPAR4 BSS 1         SPARE VARIABLE
SPAR5 BSS 1         SPARE VARIABLE
* 
********************************************************* 
*                                                       * 
*  END OF COMMON STORAGE BLOCK FOR ALL SEGMENTS.        * 
*                                                       * 
********************************************************* 
* 
      SKP 
BEGIN JMP \SRET     SEGMENT'S ENTRY POINT 
ABOOT DEF START     ADDRESS OF BOOTSTRAP LOADR
* 
INTMP BSS 1         TEMP FOR INITILIZATION ROUTINES 
MS3  DEF *+1       SUBCHANNEL NUMBER MESAGE 
      ASC 2,
MES1  DEF *+1 
      ASC 15,# TRKS, FIRST TRK ON SUBCHNL:
* 
MES4  DEF MES04 
MES04 ASC 8,BOOT FILE NAMR? 
MES05 ASC 8,SYSTEM SUBCHNL? 
MES07 ASC 9,AUX DISC SUBCHNL? 
MES40 DEF *+1 
      ASC 7,DISC MODEL # ?
"/E"  ASC 1,/E
"?0"  ASC 1,?0
MES5  DEF MES05 
MES7  DEF MES07 
TTEMP NOP 
STEMP NOP 
P23   DEC 23
N8    DEC -8
* 
ATB30 DEF TB30
      HED INTERACTIVE DISC SET UP SECTION 
* 
*  THE FOLLOWING MESSAGES ARE PRINTED DURING THE INITIALIZATION 
*  PHASE, WITH THE SPECIFICATIONS FOR EACH VALID RESONSE. 
* 
* 
*  MESSAGE         RESPONSE 
* 
*  CONTROLLER SELECT CODE?   ENTER 2 OCTAL DIGITS 
* 
*  # TRKS, FIRST TRK ON SUBCHNL:
*  0? 
*  .               ENTER TWO 3 DIGIT DECIMAL NOS. 
*  .               SEPERATED BY A COMMA 
*  .               OR 
*  .               /E 
*  7? 
* 
*  SYSTEM SUBCHNL? ENTER 1 OCTAL DIGIT
* 
*  AUX DISC (YES OR NO)? ENTER YES OR NO
* 
*  AUX DISC SUBCHNL? ENTER 1 OCTAL DIGIT
      SPC 3 
\DST0 NOP           ENTRY POINT FOR QUESTION SECESSION. 
      LDB $TB31     PUT TB31 IN THE LST 
      JSB \LSTE 
      NOP           IGNOR AL\READY THERE RETURN 
CHNLD LDA P23 
      LDB MESS2     MESS2 = ADDR: CONTROLLER SELECT CODE? 
      JSB \READ      PRINT MESSAGE, GET REPLY 
      LDA P2        SET FOR 2 OCTAL DIGITS INPUT
      JSB \DCON     GET DIGITS, RETURN OCTAL
      JMP CHNLD     REPEAT INPUT
* 
      STA DCHN      SET DISK CHNL # FOR BOOTSTRAP.
      STA DCHNL     SET DISK CHNL # 
      ADA N8        MUST BE >= TO 10 OCTAL
      SSA,RSS 
      JMP STB30-1 
      JSB \INER 
      JMP CHNLD 
* 
      JSB \SPAC     SET UP TRACK MAP
STB30 LDA P29       SEND MESSAGE: 
      LDB MES1      # TRKS, FIRST TRK ON SUBCHNL: 
      JSB \MESS     PRINT MESSAGE 
      LDA ATB30     SET ADDRESSES 
      STA STEMP     FOR INPUT  *TEMP* 
      STA INTMP     AND CLEAR LOOPS 
      ADA P8        SET # TRACKS ADDRESS
      STA TTEMP     * TEMP *
      LDB N16       CLEAR 
      CLA           THE 
TB30. STA INTMP,I   TRACK 
      ISZ INTMP     MAP 
      INB,SZB       STEP COUNT - DONE?
      JMP TB30.     NO - CLEAR NEXT WORD
* 
      STA #SUBC     SET 0 DEFINED SUBCHANNELS 
TB30A STB INTMP     SAVE CURRENT UNIT 
      ADB "?0"      ADD CONSTANT TO GET ?X
      BLF,BLF       AND ROTATE TO GET X?
      STB MS3+2     SET IN MESSAGE
      LDB MS3       GET MESSAGE ADDRESS 
      LDA P4        AND LENGTH
      JSB \READ      GO GET THE ANSWER
      LDA N2        GET FIRST 
      JSB \GETN     TWO CHARACTERS
      CPA "/E"      /E? 
      JMP TB30X     YES - GO CHECK FURTHER
* 
      JSB \GINT     NO - REINITIALIZE LBUF SCAN 
      LDA N3        CONVERT 3 DIGITS
      JSB \GET#     DECIMAL 
      JMP TB30E     ERROR - 
* 
      STA TTEMP,I   SET # TRACKS
      SZA,RSS       IF ZERO 
      JMP TB30B     GO UPDATE POINTERS
* 
      JSB \GETC     NOT ZERO - GET NEXT CHARACTER 
      CPA BLANK     COMMA IN? 
      RSS           YES - SKIP
      JMP TB30E     NO - ERROR
* 
      LDA N3        SET FOR 
      JSB \DCON     3 DECIMAL DIGITS  AND CONVERT 
      JMP TB30E+1   ERROR 
* 
      STA STEMP,I   SET FIRST TRACK OF CHANNEL
      LDA TTEMP,I   GET CHANNEL SIZE
      STA DSIZE     SET SYSTEM
      LDA INTMP     TO THIS SUBCHANNEL
      STA SYSCH     FOR DEFAULT 
TB30B ISZ #SUBC     STEP TOTAL SUBCHANNEL COUNT 
      ISZ STEMP     STEP TABLE
      ISZ TTEMP     ADDRESSES 
      ISZ INTMP     STEP SUBCHANNEL 
TB30F LDB INTMP     IF CURRENT SUBCHANNEL 
      CPB P8        IS 8 THEN 
      JMP TB30Y     DONE SO GO EXIT 
* 
      JMP TB30A     NOT 8 - GO ASK FOR NEXT ONE 
* 
      SPC 1 
TB30E JSB \INER     TELL HIM THERE WAS AN ERROR 
      CLA           CLEAR 
      STA TTEMP,I   CURRENT # TRACKS
      JMP TB30F     GO ASK AGAIN
* 
      SPC 1 
TB30X JSB \GETC     /E ENTERED
      SZA           ANY THING ELSE? 
      JMP TB30E     YES - ERROR 
* 
TB30Y LDA #SUBC     NO - GET NUMBER OF CHANNELS 
      CMA,INA,SZA   DEFINED -  IS IT ZERO?
      JMP TB30Z     NO - SKIP 
* 
      JSB \INER     YES - TELL HIM
      JMP STB30     AND RESTART 
* 
TB30Z JSB \SPAC 
ISYSC LDA P15       SEND MESSAGE: 
      LDB MES5      SYSTEM SUBCHNL? 
      JSB \READ      GET ANSWER 
      LDA N3        OCTAL RESPONSE
      JSB \DCON     GO CONVERT
      JMP ISYSC     ERROR - TRY AGAIN 
* 
      JSB TSTCH     TEST FOR LEGAL SUBCHANNEL 
      STB DSIZE     SET SYSTEM SIZE 
      STA SYSCH     SET SYSTEM SUBCHANNEL 
* 
      ADB M7400     IF GREATER THEN 256,
      CMB,SSB,INB,SZB 
      RSS           THEN ERROR
      JMP SETEM+1 
      JSB \INER     SEND ERROR DIAGNOSTIC 
      JMP ISYSC 
* 
SETEM CLA 
      LDB ATB30     EXTRACT INFO
      ADB A          CONCERNING SYSTEM
      LDB B,I       SUBCHANNEL
      STB T#AC0     AND STORE VALUES FOR BOOT 
      STB TBASE     STARTING TRACK #
* 
      LDB A 
      CLE,ERB 
      STB UN#IT 
      STB U#NIT 
* 
      XOR P1        SET PLATTER NUMBER. 
      ALF,ALF 
      RAL 
      STA H#AD
      STA B#MSK 
* 
      LDA S#EKC 
      ADA B 
      STA S#EKC     SET HEAD # IN SEEK COMMAND
      STA SKCMD 
* 
      LDA R#DCM 
      ADA B 
      STA R#DCM     AND IN THE \READ COMMAND
      STA R#CMD 
      SPC 1 
AUXIN CLA           PRESET TO SHOW NO AUX DISC
      STA DAUXN     SET CHANNEL TO ZERO 
      STA ADS#
      CCA           AND SUBCHANNEL
      STA AUXCH     TO -1.
      JSB \SPAC 
AUXDS LDA P31       SEND MESSAGE
      LDB MES6      AUX DISC (YES OR NO OR # TRKS)? 
      JSB \READ      GO GET ANSWER
      LDA N3        FIRST TRY FOR A DECIMAL 
      JSB \GET#     NUMBER
      JMP AUX0      NO  TRY FOR YES OR NO 
* 
      STA \TBUF      SAVE THE NUMBER
      JSB \GETC     END OF INPUT? 
      SZA 
      JMP AUX0      NO  LET \YENO SEND ERROR
* 
      LDA \TBUF      RESTORE THE SIZE TO A AND
      STA DAUXN     SET THE AUX DISC SIZE 
      JSB DSSIZ     GET ITS # SECTORS / TRACK 
      JMP AUX3      GO SET IT 
* 
AUX0  JSB \GINT     RESET THE SCANNER 
      JSB \YENO     TRY FOR YES OR NO 
      JMP AUXDS     NO MUST BE BAD ANSWER 
* 
      JMP STSCR     NO - SKIP 
* 
      CLA,INA       YES - IF ONLY ONE 
      CPA #SUBC     DISC SUBCHANNEL THEN
      JMP AUX4      THEN WRONG ANSWER  TRY AGAIN
* 
      JSB \SPAC     YES - SET UP AUX UNIT 
AUXUN LDA P17       SEND QUESTION:
      LDB MES7      AUX DISC SUBCHNL? 
      JSB \READ      GO SEND AND GET ANSWER 
      LDA N3        OCTAL RESPONSE
      JSB \DCON 
      JMP AUXUN     ERROR - TRY AGAIN 
* 
      JSB TSTCH     TEST FOR LEGAL UNIT 
      STB DAUXN     SET SIZE OF AUX UNIT
      CPA SYSCH     SAME AS SYSTEM? 
      RSS           YES - ERROR SKIP
      JMP AUX2      NO - GO SET UP
* 
AUX4  JSB \INER     SEND ERROR MESSAGE
      JMP AUXIN     AND TRY AGAIN 
* 
      SPC 1 
AUX2  ADB M7400     IF SIZE IS GREATER
      CMB,SSB,INB,SZB 
      JMP AUX4      THAN 256, THEN ERROR
* 
      STA AUXCH     SET AUX CHANNEL 
      LDA \SCTK     SET AUX TRK SIZE TO SAME AS SYS DISC
AUX3  STA ADS#      SET AUX DISC # SECT. TRACK
      SPC 1 
STSCR JMP \DST0,I   RETURN TO MAIN LINE CODE
* 
M7400 OCT 177400
      SPC 1 
* 
*     GET # SECTORS FOR DISC
* 
DSSIZ NOP 
      JSB \SPAC     NEW LINE
      RSS 
INVLD JSB \INER     INVALID DISC MODEL #
      LDA P14 
      LDB MES40     MES40 = ADDR: DISC MODEL # ?
      JSB \READ      PRINT MESSAGE, GET REPLY 
      LDA N6        GET MODEL- 6 ASCII
      JSB \GETN 
      JSB \MTCH     TABLE SEARCH ROUTINE
      DEF *+6 
      DEF \MDTB     DISC MODEL TABLE
      DEF \TBUF     KEY (MODEL #) 
      DEC 9         DEPTH OF SEARCH (9 VALID DISC MODELS) 
      DEC 3         LENGTH OF KEY (WORDS) 
      DEC 5         LENGTH OF ENTRY (WORDS) 
      JMP INVLD     INVALID MODEL-TRY AGAIN 
      ADA P3        OFFSET INTO MODEL ENTRY 
      LDA A,I       PICK UP SECTORS/TRACK (64 WORD SECTORS) 
      JMP DSSIZ,I   RETURN
      SKP 
      SPC 3 
*                                  SUBROUTINE TO TEST LEGALITY OF 
*                                  A SUBCHANNEL.  THE TEST CONSISTS 
*                                  OF LOOKING FOR THE DESIRED 
*                                  CHANNEL IN THE TRACK MAP.
*     CALLING SEQUENCE
* 
*     P-1           ERROR RETURN
*     P    JSB TSTCH
*     P+2           NORMAL RETURN CHANNEL IN A SIZE IN B
      SPC 1 
*     A ON ENTRY IS ASSUMED TO BE THE SUBCHANNEL TO BE CHECKED. 
*     ERROR EXIT IS P-1 
*     IF THE SUBCHANNEL IS LEGAL IT IS RETURNED IN A
*     AND B IS THE NUMBER OF TRACKS ON THAT CHANNEL 
      SPC 1 
TSTCH NOP 
      LDB A         TEST FOR VALID SUBCHANNEL # 
      ADB N8
      SSB,RSS 
      JMP TSTER     NO GOOD 
* 
      LDB ATB30     GET TABLE ADDRESS 
      ADB A         ADD SUBCHANNEL
      ADB P8        STEP TO # TRACKS
      LDB B,I       GET # TRACKS IN B 
      SZB           IF ZERO - ERROR  - SKIP 
      JMP TSTCH,I   ELSE OK - RETURN B= # TRACKS
* 
TSTER JSB \INER     SEND ERROR MESSAGE
      LDA TSTCH     GET RETURN ADDRESS
      ADA N2        ADJUST FOR P-1
      JMP A,I       AND RETURN
      SKP 
* 
*                                   INSERT CHNL NO. IN INSTRUCTION
* 
*  THE STDSK SUBROUTINE SETS THE CURRENT DISK CHANNEL 
*  NOS. IN THE I/O INSTRUCTIONS.
* 
*  CALLING SEQUENCE:
*    A = NO. WORDS TO BE CONFIGURED (NEG.)
*    B = ADDRESS OF INSTRUCTION ADDR LIST 
*    JSB STDSK
* 
*  RETURN:
*    A = DESTROYED
*    B = NEXT INSTRUCTION ADDRESS 
* 
STDSK NOP 
      STA \TBUF      SAVE NO. OF INSTRUCTIONS 
STDS1 LDA B,I       GET INSTRUCTION 
      AND M7700     ISOLATE INSTRUCTION CODE
      IOR DCHN      INSERT CHANNEL NO.
      STA B,I       SET INSTRUCTION IN CODE 
      INB           INCR INSTRUCTION ADDRESS
      ISZ \TBUF      SKIP - ALL INSTRUCTIONS CONFIG.
      JMP STDS1     CONFIGURE NEXT INSTRUCTION
      JMP STDSK,I   RETURN
* 
      SPC 2 
DCHN  NOP 
HPDSK DEF I/OTB,I   ADDRESS OF I/O INSTR LIST 
#DATA ABS I/OTB-I/OTC  # OF DATA I/O INSTR
#CMND ABS I/OTC-I/OTD  # OF COMMAND I/O INSTR 
I/OTB DEF DSKDJ     DATA CHANNEL
      DEF DSKDK 
      DEF DSKDL 
      DEF DSKDM 
      DEF DSKDN 
      DEF DSKDO 
      DEF DSKPP 
      DEF DSKDQ 
      DEF DSKDR 
      DEF DSKDS 
      DEF DSKDZ 
I/OTC DEF DSKCL     COMMAND CHANNEL 
      DEF DSKCM 
      DEF DSKCP 
      DEF DSKCQ 
      DEF DSKCR 
      DEF DSKCS 
      DEF DSKCT 
      DEF DSKCU 
      DEF DSKCV 
I/OTD EQU * 
      HED MH RTGEN   CONFIGURE AND COMPLETE INITILIZATION 
\BOT0 NOP           CONFIGURE PAPER TAPE BOOTSTRAP
      LDA #DATA     GET THE NUMBER OF DATA CHANNEL INSTRUCTIONS 
      LDB HPDSK     GET THE ADDRESS OF THE DISK ADDRESSES 
      JSB STDSK     GO SET DATA CHANNEL ADDRESSES 
      ISZ DCHN      STEP TO COMMAND CHANNEL 
      LDA #CMND     GET NUMBER OF COMMAND CHANNEL INSTRUCTIONS
      JSB STDSK     SET COMMAND CHANNEL ADDRESSES 
* 
      LDA BADD      GET THE BOOT ADDRESS
      AND M1177     MASK TO PAGE BITS AND 
      IOR M0760      ADD PAGE BITS AND
      STA BADD      SET FOR THE PAPER BOOT
* 
*     SEND BOOT EXTENSION TO OUTPUT FILE
* 
      LDB ABOOT     OUTPUT THE BOOT EXT ENSION
      CLA,CLE       TO PSEUDO TRACK 0 SECTOR 0
      JSB \DSKD     IN CORE IMAGE OUTPUT FILE.
      LDA P2        INITIALIZE SYSTEM DISC ADDR 
      STA \ADSK       WHERE SYSTEM BASE PAGE WILL BEGIN 
      SKP 
BOOT0 JSB \SPAC     NEW LINE
      LDA P15       SEND MESSAGE
      LDB MES4      BOOT FILE NAME? 
      JSB \RNME     GET THE NAME. 
* 
      JSB \GINT     IF 0 ANSWER, THEN 
      CLA,INA       NO BOOT WANTED
      JSB \GETN 
      CPA ZERO
      JMP \BOT0,I 
* 
      JSB \CRET     CREATE BOOT FILE. 
      DEF *+5 
      DEF \BDCB 
      DEF P1
      DEF P7
      DEF M2300 
* 
      CLA 
      JSB \CFIL     CHECK FILE STATUS.
      JMP BOOT0     ERROR- TRY AGAIN. 
* 
      LDA NBLC      GET BOOT LENGTH 
      STA \TBUF      SET FOR CHECK SUM CACULATION 
      LDA STRAP     GET LOAD ADDRESS
      CLB,RSS       INITIALIZE CHECKSUM 
BOOT1 ADB A,I       COMPUTE CHECKSUM
      INA           STEP ADDRESS
      ISZ \TBUF      DONE?
      JMP BOOT1     NO - GET NEXT WORD
* 
      STB A,I       YES - SET CHECKSUM
* 
      JSB WRITF     OUTPUT THE BOOTSTRAP FILE.
      DEF *+5 
      DEF \BDCB 
      DEF \FMRR 
      DEF STRAP+1 
      DEF BOOTL 
* 
      LDA \BDCB+2   IF ITS A TYPE 0 FILE
      SZA           THEN WRITE AN EOF 
      JMP \BOT0,I   NO
      JSB WRITF 
      DEF *+5 
      DEF \BDCB 
      DEF \FMRR 
      DEF STRAP+1 
      DEF N1
      JMP \BOT0,I   RETURN TO MAIN. 
      SPC 2 
MESS2 DEF *+1 
      ASC 12,CONTROLLER SELECT CODE?
MES6  DEF *+1 
      ASC 16,AUX DISC (YES OR NO OR # TRKS)?
P3    DEC 3 
P5    DEC 5 
P7    DEC 7 
N1    DEC -1
M2300 OCT 2300
ZERO  OCT 60
P14   DEC 14
P24   DEC 24
* 
      SKP 
* GENERATE $TB31 TRACK MAP TABLE. 
* 
\TB31  NOP
*                                  GENERATE TB31
      SPC 2 
      LDA ATB30     GET THE TABLE ADDRESS 
      STA \TBUF      SET FOR INDEXING 
      LDA N16       GET NUMBER OF WORDS 
      STA \TBUF+1    SET COUNT
      LDB $TB31     GET THE LST ENTRY 
      JSB \LSTS      FOR $TB31
      JSB \ABOR     BAD NEWS  NO $TB31 ?????
      LDB \PREL     GET THE CORE ADDRESS FOR TABLE
      STB \LST5,I    SET IN THE SYMBOL TABLE
* 
DSTB1 LDA \TBUF,I    GET WORD FROM TABLE
      JSB \ABDO     SEND TO DISC
      ISZ \TBUF      STEP TABLE ADDRESS 
      ISZ \TBUF+1    STEP COUNT - DONE? 
      JMP DSTB1     NO - GET NEXT ENTRY 
* 
      STB \PREL     RESET NEW CORE ADDRESS
* 
      LDB ATB30     SIGNAL \DSKD TO 
      CMB,INB        WRITE HEADER RECORD #1 
      CLA,CLE        CONTAINING THE 
      JSB \DSKD      TRACK MAP TABLE IMAGE
      JMP \TB31,I   EXIT
* 
$TB31 DEF *+1 
      ASC 3,$TB31 
* 
                                                                                                                              