ASMB,Q,R,C
      HED RTGN7 - 13037 & ICD DISC SUBROUTINE SEGMENT.
      NAM RT4G7,5,90 92067-16322 REV.2026 800423
* 
*  ***************************************************************
*  * (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:        RT4G7
*     SOURCE:      92067-18322
*     REL:         92067-16322
*     WRITTEN BY:  JJC,KFH, GAA 
* 
******************************************************************
      SPC 3 
* 
*   7905 SUBROUTINE ENTRY POINTS: 
* 
      ENT \DST5       ENTRY FOR DSETU 
      ENT \BOT5       ENTRY FOR PTBOT 
      ENT \TB32       ENTRY FOR DSTBL.
      ENT \FSC5       ENTRY FOR FSECT.
* 
* 
* 
* 
*   EXTERNAL UTILITY SUBROUTINES: 
* 
      EXT WRITF 
      EXT \CRET,\FMRR,\CFIL,\DSKD 
      EXT \MESS,\SRET,\RNME,\CONV 
      EXT \DCON,\SPAC,\READ,\GETN,\GINT,\GET#,\GETC 
      EXT \INER,\YENO,\LSTE,\LSTS,\ABOR,\ABDO 
      EXT \PIOC,\TBCH,\BDCB 
      EXT \MTCH 
* 
* 
      EXT \LST5,\OBUF 
      EXT \TBUF,\PREL 
      EXT \MDTB,\SCTK 
      EXT \ADSK,\IBI
* 
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. 
* 
*************************************************************************** 
* 
* 
BEG55 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 SEG 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         DISC ADDR WHERE SYSTEM BEGINS - TRACK 
SYSEC BSS 1         DISC 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 
* 
BEG05 JMP \SRET     SEGMENT ENTRY POINT 
* 
DC    EQU 0 
ABOOT DEF START     ADDR OF 128 WD BOOT EXTENSION (13037 DISCS) 
HBOOT DEF HSTRT     ADDR OF 256 WD HPIB DISC BOOT EXTENSION 
HBOT2 DEF HSTRT+128 ADDR OF 2ND HALF OF HPIB BOOT 
ATB30 DEF TB30      ADDR OF TRACK MAP TABLE IMAGE 
* 
INTMP BSS 1         TEMP FOR INITILIZATION ROUTINES 
MS3  DEF *+1       SUBCHANNEL NUMBER MESAGE 
      ASC 3,  00? 
* 
MES1  DEF *+1 
      ASC 19,MODEL,#TRKS,FIRST CYL,HEAD,#SURFACES,
      ASC 18,UNIT,#SPARES FOR SUBCHNL:
MS1A  DEF MES1+20 
MSIBI DEF *+1 
      ASC 18,ADDRESS,#SPARES(,UNIT) FOR 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 # ?
MESS2 DEF *+1 
      ASC 12,CONTROLLER SELECT CODE?
MES6  DEF *+1 
      ASC 16,AUX DISC (YES OR NO OR # TRKS)?
"/E"  ASC 1,/E
SBUF  BSS 3 
DSBUF DEF SBUF
MES5  DEF MES05 
MES7  DEF MES07 
* 
L2000 OCT -2000 
M0760 OCT 76000 
M77   OCT 77
M377  OCT 377 
M1177 OCT 101777
M1760 OCT 1760
M1777 OCT 1777
M74C  OCT 7400
M7400 OCT 177400
M7700 OCT 177700
M2300 OCT 2300
MSIGN OCT 100000
* 
N1    DEC -1
N2    DEC -2
N3    DEC -3
N4    DEC -4
N5    DEC -5
N6    DEC -6
N8    DEC -8
N16   DEC -16 
N64   DEC -64 
N160  DEC -160
P1    DEC 1 
P2    DEC 2 
P4    DEC 4 
P6    DEC 6 
P7    DEC 7 
P15   DEC 15
P17   DEC 17
P18   DEC 18
P23   DEC 23
P25   DEC 25
P31   DEC 31
P64   DEC 64
P74   DEC 74
P128  DEC 128 
BLANK OCT 40
ZERO  OCT 60
CTEMP NOP 
DTEMP NOP 
STEMP NOP 
TTEMP NOP 
      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 
* 
*  13037 TYPE SYSTEM DISC:
*  MODEL,#TRKS,FIRST CYL,HEAD,#SURFACES,UNIT,#SPARES FOR SUBCHNL: 
*   OR
*  HPIB SYSTEM DISC:
*  MODEL,#TRKS,FIRST CYL,HEAD,#SURFACES,ADDRESS,#SPARES(,UNIT) FOR SUBCHNL: 
* 
*  0? 
*  .
*  .
*  .
*  .
*  32?
* 
*  SYSTEM SUBCHNL? ENTER 1 OCTAL DIGIT
* 
*  AUX DISC (YES OR NO OR #TRACKS)?  ENTER YES OR NO OR #TRACKS 
* 
*  AUX DISC SUBCHNL? ENTER 1 OCTAL DIGIT
* 
*  DISC MODEL # ? ENTER MODEL NUMBER
      SPC 3 
\DST5 NOP           ENTRY POINT FOR QUESTION SECESSION. 
      LDB $TB32     PUT $TB32 OR $TA32 IN SYM TBL 
      LDA \IBI      GET SYS DISC TYPE 
      SLA           IS IT ICD?? 
      LDB $TA32       YES- PUT $TA32 IN SYM TBL 
      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 DCHNL     SET DISK CHANNEL NUMBER 
      ADA N8        TEST FOR >= 10 OCTAL
      SSA,RSS 
      JMP SPRMT     OK
      JSB \INER 
      JMP CHNLD 
* 
SPRMT JSB \SPAC 
      LDA \IBI
      SLA,RSS       IS SYS DISC ICD?? 
      JMP STB30       NO-SEND THE APPROP. PROMPT
* 
      LDA MSIBI     GET THE IBI SUFFIX FOR THE MESSAGE
      LDB MS1A      APPEND IT HERE. 
      MVW P18 
* 
STB30 LDA P74       SEND PROMPT: "MODEL,#TRKS,FIRST CYL,HEAD, 
      LDB MES1      #SURFACES,(UNIT/ADDRESS),#SPARES(,UNIT) 
      JSB \MESS     FOR SUBCHNL:" 
      LDA ATB30     SET ADDRESSES 
      STA STEMP     FOR INPUT 
      STA INTMP     AND CLEAR LOOPS 
      LDB N160  =-160 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 
      LDA B         CONVERT FOR THE MESSAGE 
      CMA,INA 
      LDB DSBUF 
      JSB \CONV 
      LDA SBUF+2
      STA MS3+2     SET IN THE MESSAGE
      LDB MS3       GET MESSAGE ADDRESS 
      LDA P5        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 N6        GET 6 ASCII - MODEL # 
      JSB \GETN 
      JSB \MTCH     LOOK UP SECTORS/TRK IN MODEL TABLE
      DEF *+6 
      DEF \MDTB     TABLE ADDR
      DEF \TBUF     KEY ADDR
      DEC 10        DEPTH OF SEARCH 
      DEC 3         KEY LENGTH
      DEC 5         ENTRY LENGTH
      JMP TB30E     \MTCH ERROR-INVALID MODEL # 
* 
      ADA P3        OFFSET TO GET SEC/TRK 
      LDB A,I 
      STB STEMP,I   SAVE IT AWAY IN TMT 
      INA 
* 
      LDA A,I       GET DISC TYPE WORD
      RAL           ICD FLAG IN BIT0,88020 FLAG IN BIT15
      STA DTEMP     SAVE IT FOR LATER 
      XOR \IBI      MAKE SURE THIS DISC'S ICD BIT 
      SLA             IS THE SAME AS THE SYS DISC!
      JMP TB30E       NOPE-THEY TRIED TO MIX 13037 & ICD
* 
      LDA N4        CONVERT 4 DIGITS
      JSB \GET#     DECIMAL #TRACKS 
      JMP TB30E     ERROR - 
* 
      STA TTEMP     SET # TRACKS IN TEMP
      SZA,RSS       IF ZERO 
      JMP TB30E     ERROR- CAN'T HAVE 0 TRK SUBCH 
* 
      JSB \GETC     NOT ZERO - GET NEXT CHARACTER 
      CPA BLANK     COMMA IN? 
      RSS           YES - SKIP
      JMP TB30E     NO - ERROR
* 
      LDA N3        SET FOR 
      JSB GET       3 DECIMAL DIGITS AND CONVERT
      STA CTEMP     THE CYL # FOR TRACK 0.
      LDA N2        GET 2 DIGIT 
      JSB GET       HEAD NUMBER 
      STA B         SAVE
      ADA N64       MUST BE LESS THAN 64... 
      SSA,RSS       WELL? 
      JMP TB30E     NO - BITCH
* 
      BLF           PUT IN ITS PLACE
      STB BSHED     AND SAVE
      LDA N2        NOW GET # SURFACES
      JSB GET       MUST BE 1 TO 63...
      STA B 
      SZA 
      ADA N64 
      SSA,RSS       WELL? 
      JMP TB30E     NOT GOOD!  BITCH
      BLF,BLF       SHIFT INTO PLACE
      RBL,RBL         AND 
      ADB BSHED         COMBINE WITH HEAD 
      STB BSHED 
* 
      LDA N2        NOW GET UNIT
      JSB GET       MUST BE 0 TO 15...
      STA B 
      ADA N16 
      SSA,RSS       WELL??
      JMP TB30E       NO - COMPLAIN.
      ADB BSHED     COMBINE 
      STB BSHED     SAVE
      JSB \GETC     TEST FOR SPARES 
      CPA BLANK     WELL? 
      RSS           YES, SO SET TO CONVERT 3 DIGITS 
      JMP TB30E     NO, ERROR -REQUIRE # SPARES NOW 
* 
      LDA N3
      JSB GET       CONVERT THE # SPARES
      LDB A         SET IN B TOO
      ADB M7400     SUBTRACT 256
      SSB,RSS       #SPARES <= 255??
      JMP TB30E       NO..GIVE AN ERROR 
* 
      LDB DTEMP     GET DISC TYPE AGAIN 
      SLB,RSS       TEST ICD TYPE BIT 
      JMP EOLIN       NO-13037 TYPE DISC
* 
      IOR MSIGN     SET THE ICD BIT 
      STA DTEMP 
* 
      SSB,RSS       TEST IF ICD UNIT# REQ'D 
      JMP EOLIN     NO UNIT REQ'D-CHECK FOR END OF LINE 
      CLA,INA 
      JSB GET       GET UNIT# FOR ICD DISC 88020
      LSL 10        SHIFT IT INTO PLACE 
      IOR DTEMP     ADD IN REST OF SPARES WORD
* 
EOLIN STA DTEMP     SAVE SPARES/(ICD UNIT) WORD 
      JSB \GETC     END OF LINE?
      SZA           WELL? 
      JMP TB30E     NO - TOO BAD - AND YOU ALMOST 
*                                   MADE IT TOO.
TB30C ISZ STEMP     STEP TO WORD 1- 1ST CYLINDER
      LDA CTEMP     GET 1ST CYL 
      STA STEMP,I   SAVE IT AWAY IN TMT 
      ISZ STEMP     STEP TO HEAD/UNIT WORD. 
      LDA BSHED     AND 
      STA STEMP,I   SALT IT AWAY. 
      ISZ STEMP     NOW THE # TRACKS
      LDA TTEMP     WORD
      STA STEMP,I   SALT IT AWAY. 
      STA DSIZE     SET ALSO FOR ASSUMPTION 
      ISZ STEMP     STEP TO SPARES/HPIB UNIT# (IF REQ'D)
      LDA DTEMP      AND
      STA STEMP,I   SALT THAT AWAY TOO. 
      LDA INTMP     TO THIS SUBCHANNEL
      STA SYSCH     FOR DEFAULT 
TB30B ISZ #SUBC     STEP TOTAL SUBCHANNEL COUNT 
      ISZ STEMP     STEP TABLE
      ISZ INTMP     STEP SUBCHANNEL 
TB30F LDB INTMP     IF CURRENT SUBCHANNEL 
      CPB P32       IS 32 THEN
      JMP TB30Y     DONE SO GO EXIT 
* 
      JMP TB30A     NOT 32 - GO ASK FOR NEXT ONE
* 
      SPC 1 
TB30E JSB \INER     TELL HIM THERE WAS AN ERROR 
      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 N4         DECIMAL DIGITS 
      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     TEST FOR TOO MANY TRACKS
      CMB,SSB,INB,SZB OK? 
      JMP SYSER     NO GO BITCH 
* 
      LDA SYSCH     GET SYS SUBCHANNEL
      MPY P5        OFFSET INTO TMT.. 
      ADA ATB30       TO SEC/TRK WORD 
      LDB A,I             GET SEC/TRK FROM TMT
      CPB \SCTK     CONSISTENT W/ DISC IN "SYSTEM DISC MODEL?" RESPONSE?
      RSS             YES - OK
      JMP SYSER       NO - SCOLD THEM 
* 
      LDA SYSCH 
* 
*  SET VALUES FOR THE BOOT
* 
      RSS 
SETEM CLA           SUBCHANNEL IN A 
      MPY P5        CALC OFFSET 
      LDB ATB30     POSITION WITHIN TMT FOR INFO
      ADB A 
* 
      INB           STEP TO 1ST CYLINDER WORD 
      LDA B,I       GET FIRST CYLINDER #
      STA TBASE     SET FIRST CYL FOR MAC BOOT EXT
      STA HTBAS     ALSO FOR ICD BOOT EXT.
      STA PT#TR     SET 1ST CYL FOR MAC STRAP 
      STA PT#T2     SET 1ST CYL  "   "    " 
      AND M377      GET 1ST CYL-LO BYTE 
      STA !CYLL     SET FOR ICD STRAP 
      LDA B,I       FRESH COPY
      ALF,ALF       ROTATE
      AND M377      GET 1ST CYL-HI BYTE 
      STA !CYLH     SET FOR ICD STRAP 
* 
      INB 
      LDA B,I 
      LDB A 
      AND M1760     1760 OCTAL MASK 
      ALF           SHIFT INTO PLACE
      STA H#AD      SET HD# FOR MAC STRAP COMMANDS
      STA PT#H2      "   "   "   "    " 
      ALF,ALF 
      STA BHD#      SET BASE HD# FOR MAC BOOT EXT 
      STA BHED#     ALSO FOR ICD BOOT 
      STA !HEAD     ALSO FOR ICD STRAP
* 
      LDA B         FRESH COPY
      ALF 
      RAL,RAL       SHIFT INTO PLACE
      AND M77       MASK OFF # OF SURFACES
      STA #HDS      SET FOR ICD BOOT EXT
      STA #HEDS     ALSO FOR ICD BOOT 
* 
      LDA B 
      AND M17       GOT THE UNIT
      LDB WA#KE     NOW INCORPORATE IT
      ADB A         IT INTO THE WAKEUP, 
      STB WA#KE     SEEK,AND \READ COMMANDS 
      STB WAK 
* 
      LDB PT#SK 
      ADB A 
      STB PT#SK 
      STB SKCMD 
* 
      LDB PT#AD 
      ADB A 
      STB PT#AD 
      STB AD#RC 
* 
      LDB R#DCM 
      ADB A 
      STB R#DCM 
      STB R#CMD 
* 
      LDB P#EN
      ADB A 
      STB P#EN
      STB S#TAC 
* 
      STA !UNIT     SET ADDR. SEL. FOR ICD STRAP PPOLL
* 
      LDB AD1       GET THE ICD COMMAND 
      ADB A         ADD IN THE ADDR SELECT
* 
      STB AD1       SET UP ALL ICD OCT 440 COMMANDS 
      STB AD2         FOR ICD BOOT EXT. ... 
      STB AD3 
      STB AD5 
* 
      STB !AD1        FOR ICD BOOT STRAP ...
      STB !AD2
      STB !AD3
      STB !AD5
* 
      LDB AD4       GET ICD 550 COMMAND 
      ADB A         ADD IN THE ADDR SELECT
      STB AD4       SET UP ALL ICD 550 COMMANDS 
      STB AD6 
      STB !AD4      SET EM FOR ICD STRAP TOO
      STB !AD6
* 
* 
      LDA \SCTK 
      LSL 6         X 64 TO GET WORDS/TRACK 
      STA #WDTK     WDS TRK OF DESTINATION SYS DISC 
      STA WD#TK     SET FOR ICD BOOT ALSO 
* 
      SPC 1 
AUXIN CLA           PRESET TO SHOW NO AUX DISC
      STA DAUXN     SET CHANNEL TO ZERO 
      STA ADS#      #SECT PER TRACK TO ZERO,
      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      GET BACK THE SIZE
      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 N4
      JSB \DCON 
      JMP AUXUN     ERROR - TRY AGAIN 
* 
      JSB TSTCH     TEST FOR LEGAL UNIT 
AUX1  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 
* 
SYSER JSB \INER     SEND ERROR MESSAGE
      JMP ISYSC     TRY AGAIN 
* 
AUX2  ADB M7400     TOO MANY TRACKS FOR AUX 
      CMB,SSB,INB,SZB DISC? 
      JMP AUX4      YES GO BITCH
      SPC 1 
      STA AUXCH     SET AUX CHANNEL 
      MPY P5        OFFSET INTO TMT 
      ADA ATB30 
      LDA A,I       PICK UP SEC/TRK OF AUX CHANNEL
AUX3  STA ADS#      SET AUX DISC # SECT. TRACK
      SPC 1 
*                                  NOTE:  THE FACT THAT ANY GIVEN DISC
*                                  ADDRESS IS ON A UNIT OTHER THAN
*                                  THE SYSTEM UNIT IS FLAGGED BY
*                                  ITS TRACK ADDRESS BEING GREATER THAN 
*                                  400 BY THE AMOUNT OF THE DESIRED 
*                                  TRACK. 
STSCR JMP \DST5,I   RETURN TO MAIN LINE CODE
      SPC 1 
P3    DEC 3 
P5    DEC 5 
P14   DEC 14
P32   DEC 32
BSHED NOP 
      SPC 1 
* 
*                                  GET # SECTORS FOR DISC 
* 
DSSIZ NOP 
      JSB \SPAC     NEW LINE
      RSS 
#SEC1 JSB \INER     INVALID DISC MODEL #
      LDA P14 
      LDB MES40     MES40 = ADDR: DISC MODEL # ?
      JSB \READ      PRINT MESSAGE, GET REPLY 
      LDA N6        SET FOR 6 ASCII CHARS INPUT 
                                                                                                                                                                                                                                                