ASMB,R,L,C   MH-RTGEN   DRIVER SECTION. 
      HED MH RTGEN DRIVER SECTION   PAPER TAPE BOOTSTRAP
*     NAME:   MHDVR 
*     SOURCE: 92060-18033 
*     RELOC:  SEE NAM RECORD
*     PGMR:   G.A.A.
* 
*  ***************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975.  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.       *
*  ***************************************************************
* 
      NAM MHGEN 92060-16033 REV. A 750911 
      SUP 
* 
*     CONSTANTS ARE EXTERNAL ON BASE PAGE 
* 
      EXT N1,N2,N3,N4,N5,N6,N8,N9,N10,N16,N27 
      EXT N64,P2,P3,P4,P5,P6,P7,P8,P9,P11,P12,P13,P14 
      EXT P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25 
      EXT P28,P29,P31,P33,P60,P64,P99,P202,P6K,L60,L2000
      EXT M60,M77,M120,M177,M377,M777,M400,D128,M200,M0760
      EXT M1740,M1600,M1777,M2000,M1377,M7400,M7000,M7600 
      EXT M7700,M7777,M0300,M1177 
      EXT DPWRS,P0100,P1000,P100,P10,P1 
      EXT OPWRS,M0100,M1000,M100,M10
      EXT LWASM,PPREL,PPREL,BLANK,UBLNK,MSIGN,RPARB 
      EXT DSKA,MOVW 
* 
*     ENTRY POINTS FOR THIS MODULE
* 
*     VARIABLES ... 
* 
      ENT SYSCH     SYSTEM SUBCHANNEL 
      ENT AUXCH     AUX DISC SUBCHANNEL 
      ENT DSIZE     SYSTEM DISC SIZE (TRACKS) 
      ENT DAUXN     AUX DISC SIZE (TRACKS)
      ENT DSETU     INITILIZE SUBROUTINE
      ENT DSKSC     SCRATCH DISC ADDRESS
      ENT LSSYS,LSAUX  LAST SEEK FLAGS
      ENT DISKA     INCREMENT DISC ADDRESS SUBROUTINE 
      ENT DISKO     DISC OUTPUT ROUTINE 
      ENT DISKI     DISC INPUT ROUTINE
      ENT DSTBL     GENERATE DISC TABLE SUBROUTINE
      ENT TRTST     TEST CURRENT TRACK SUBROUTINE 
      ENT DTSET     SET UP TAT SUBROUTNE
      ENT SDS#      SYSTEM DISC SECTORS/TRACK 
      ENT ADS#      AUX DISC SECTORS/TRACK
      ENT FSECT     FLUSH FINAL SECTOR FROM CORE
      ENT DERCN     DISC ERROR COUNT
      ENT DBPO      ORG OF DUMMY BASE PAGE
      ENT DSKAB     INITIAL ABS DISC ADDRESS
      ENT PTBOT     CONFIGURE DISC/ PUNCH BOOT
* 
*     UTILITY SUBROUTINES 
* 
      EXT DOCON,SPACE,READ,GETNA,GINIT,GETOC,GETAL
      EXT INERR,YE/NO,LSTS,ERROR,LSTE,LABDO,IRERR 
      EXT OUTID,CONVD 
* 
A     EQU 0 
B     EQU 1 
DRKEY EQU 102B      TTY ADDRESS 
      SPC 3 
BEGIN EQU *         START OF PROG.
      SPC 1 
TBUF  BSS 5         TEMP BUFFER 
TBCHN BSS 1         TEMP
DRHSP EQU 103B      PUNCH ADDRESS 
DC    EQU 0 
* 
*     DEFINE LST ADDRESSES
* 
LST   EQU 7         LST IS FIXED ON BASE PAGE 
LST1  EQU LST 
LST2  EQU LST+1 
LST3  EQU LST+2 
LST4  EQU LST+3 
LST5  EQU LST+4 
      HED MH RTGEN - CONSTANTS AND ADDRESSES
* 
DSKAB OCT 2         INITIAL DISC ADDRESS FOR SYS CODE 
ASBUF DEF ASPBF+1   ADDRESS OF 9-WORD BUFFER IN BOOT
ABOOT DEF START     ADDRESS OF BOOTSTRAP LOADR
INITE DEF INIER     FOR DISK ERROR
#SUBC NOP           NUMBER OF SUBCHANNELS DEFINED 
DSIZE BSS 1         DISK SIZE - NO. OF TRACKS 
DSKSC BSS 1         ADDRESS OF DISK SCRATCH AREA
DAUXN BSS 1         AUXILIARY DISK SIZE 
SDS#  BSS 1         # SECTORS/TRACK FOR SYSTEM DISC$
ADS#  OCT 0         # SECTORS/TRACK FOR AUX. DISC 
DERCN BSS 1         DISK ERROR COUNTER
ATB30 DEF TB30
DIST1 DEF ATB30 
DIST2 DEF ATB30 
LSSYS OCT -1        SYSTEM LAST SEEK FLAG 
LSAUX OCT -1        SCRATCH LAST SEEK FLAG
SCRSZ BSS 1         SIZE OF SCRATCH UNIT
SYSCH BSS 1         SUBCHANNEL OF SYSTEM UNIT 
AUXCH BSS 1         SUBCHANNEL OF AUX UNIT
SCRCH BSS 1         SUBCHANNEL OF SCRATCH UNIT
INIT1 NOP           INITILIZATION FLAG FOR DRIVER 
* 
ADBP  DEF DBP       ADDRESS OF DUMMY BASE PAGE
DBP   EQU *         START OF DUMMY BASE PAGE
DBPO  EQU DBP       DEFINE ENTRY POINT
* 
MES8  DEF MES08 
MES08 ASC 8,SCRATCH SUBCHNL?
#DATA ABS I/OTB-I/OTC  NO. OF DATA I/O INSTRUCTIONS 
INTMP BSS 1         TEMP FOR INITILIZATION ROUTINES 
MS3  DEF *+1       SUBCHANNEL NUMBER MESAGE 
      ASC 3,  00? 
MES1  DEF *+1 
      ASC 20,# TRKS, FIRST CYL #, HEAD #, # SURFACES, 
      ASC 14, UNIT, # SPARES FOR SUBCHNL: 
P68   DEC 68        LENGTH OF MESSAGE 
* 
MES50 DEF *+1 
      ASC 7,START SCRATCH?
MES4  DEF MES04 
MES04 ASC 6,PUNCH BOOT? 
MES05 ASC 8,SYSTEM SUBCHNL? 
MES07 ASC 9,AUX DISC SUBCHNL? 
MES40 DEF *+1 
      ASC 13,# 128 WORD SECTORS/TRACK?
"/E"  ASC 1,/E
"?0"  ASC 1,?0
MES5  DEF MES05 
MES7  DEF MES07 
DLST  DEF LST 
      HED INTERACTIVE DISC SET UP SECTION 
* 
*  THE FOLLOWING MESSAGES ARE PRINTED DURING THE INITIALIZATION 
*  PHASE, WITH THE SPECIFICATIONS FOR EACH VALID RESONSE. 
* 
* 
*  MESSAGE         RESPONSE 
* 
*  MH DISC CHANL?  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
* 
*  SCRATCH SUBCHNL?  ENTER 1 OCTAL DIGIT (MAY BE ANY DEFINED SUBCHNL) 
* 
*  START SCRATCH?  ENTER 3 DECIMAL DIGITS 
* 
*  # 128 WORD SECTORS/TRACK?  ENTER 3 DECIMAL DIGITS       $$ 
      SPC 3 
DSETU NOP           ENTRY POINT FOR QUESTION SECESSION. 
      LDB $TB32     PUT TB32 IN THE LST 
      JSB LSTE
      NOP           IGNOR ALREADY THERE RETURN
      CLA           CLEAR THE FLAG WORDS
CHNLD LDA P16 
      LDB MESS2     MESS2 = ADDR: CONTROLLER CHNL?
      JSB READ      PRINT MESSAGE, GET REPLY
      LDA P2        SET FOR 2 OCTAL DIGITS INPUT
      JSB DOCON     GET DIGITS, RETURN OCTAL
      JMP CHNLD     REPEAT INPUT
* 
      STA DCHNL     SET DISK CHANNEL NUMBER 
* 
      JSB SPACE     SET UP TRACK MAP
STB30 LDA P68       SEND MESSAGE: 
      LDB MES1      # TRKS, FIRST CYL #, HEAD #, # SURFACES,
      JSB DRKEY,I   UNIT, # SPARES FOR SUBCHNL: 
      LDA ATB30     SET ADDRESSES 
      STA SDS#      FOR INPUT 
      STA INTMP     AND CLEAR LOOPS 
      LDB M7600 =-128 CLEAR 
      CLA           THE 
TB30. STA INTMP,I   TRACK 
      ISZ INTMP     MAP 
      INB,SZB       STEP COUNT - DONE?
      JMP TB30.     NO - CLEAR NEXT WORD
* 
      STA INIT1     CLEAR INIT FLAG 
      STA #SUBC     SET 0 DEFINED SUBCHANNELS 
TB30A STB INTMP     SAVE CURRENT UNIT 
      LDA B         CONVERT FOR THE MESSAGE 
      JSB KCVT
      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 GETNA     TWO CHARACTERS
      CPA "/E"      /E? 
      JMP TB30X     YES - GO CHECK FURTHER
* 
      JSB GINIT     NO - REINITIALIZE LBUF SCAN 
      LDA N4        CONVERT 4 DIGITS
      JSB GETOC     DECIMAL 
      JMP TB30E     ERROR - 
* 
      STA TBCHN     SET # TRACKS IN TEMP
      SZA,RSS       IF ZERO 
      JMP TB30B     GO UPDATE POINTERS
* 
      JSB GETAL     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 SDS#,I    THE CYL # FOR TRACK 0.
      CCA           GET 1 DIGIT 
      JSB GET       HEAD NUMBER 
      STA B         SAVE
      ADA N5        MUST BE LESS THAN 5.
      SSA,RSS       WELL? 
      JMP TB30E     NO - BITCH
* 
      BLF,BLF       PUT IN ITS PLACE
      STB BSHED     AND SAVE
      CCA           NOW GET # SURFACES
      JSB GET       MUST BE 1 TO 5. 
      STA B 
      SZA 
      ADA N6
      SSA,RSS       WELL? 
      JMP TB30E     NOT GOOD!  BITCH
      BLF,BLF       MOVE TO HIGH
      BLF           END AND 
      ADB BSHED     COMBINE WITH HEAD 
      STB BSHED 
      CLA,INA       NOW GET UNIT
      JSB GET       MUST BE 0 TO 7. 
      ADA BSHED     GOOD - ADD THE HEAD WORD
      STA BSHED     AND SAVE IT.
      CLA           PREPARE FOR DEFAULT # SPARES
      STA TBUF+1    NAMELY 0. 
      JSB GETAL     TEST FOR SPARES 
      CPA BLANK     WELL? 
      RSS           YES, SO SET TO CONVERT 2 DIGITS 
      JMP TB30C     NO,  USE DEFAULT
* 
      LDA N2
      JSB GET       CONVERT THE # SPARES
      STA TBUF+1    SAVE THE NUMBER 
      JSB GETAL     END OF LINE?
      SZA           WELL? 
      JMP TB30E     NO - TOO BAD - AND YOU ALMOST 
*                                   MADE IT TOO.
TB30C ISZ SDS#      STEP TO HEAD/UNIT WORD. 
      LDA BSHED     AND 
      STA SDS#,I    SALT IT AWAY. 
      ISZ SDS#      NOW THE # TRACKS
      LDA TBCHN     WORD
      STA SDS#,I    SALT IT AWAY. 
      STA DSIZE     SET ALSO FOR ASSUMPTION 
      STA SCRSZ     OF ONE UNIT ONLY
      ISZ SDS#      STEP TO SPARES
      LDA TBUF+1    AND 
      STA SDS#,I    SALT THAT AWAY TOO. 
      LDA INTMP     TO THIS SUBCHANNEL
      STA SYSCH     FOR DEFAULT 
      STA SCRCH     SINGLE SUBCHANNEL SYSTEM
      ISZ #SUBC     STEP TOTAL SUBCHANNEL COUNT 
TB30B ISZ SDS#      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 INERR     TELL HIM THERE WAS AN ERROR 
      JMP TB30F     GO ASK AGAIN
* 
      SPC 1 
TB30X JSB GETAL     /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 INERR     YES - TELL HIM
      JMP STB30     AND RESTART 
* 
TB30Z JSB DSSIZ     GET THE SYSTEM DISC # SECT./TRK.
      STA SDS#      AND SET IT. 
      CLA,INA       IF ONLY 
      CPA #SUBC     ONE SUBCHANNEL
      JMP AUXIN     SKIP TO THE AUX. MESSAGE
* 
      SPC 1 
      JSB SPACE 
ISYSC LDA P15       SEND MESSAGE: 
      LDB MES5      SYSTEM SUBCHNL? 
      JSB READ      GET ANSWER
      CLA,INA       ONE DIGIT OCTAL 
      JSB DOCON     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 
      SPC 1 
      JSB SPACE 
SCRUN LDA P16       SEND MESSAGE: 
      LDB MES8      SCRATCH SUBCHNL?
      JSB READ      GO GET ANSWER 
      CLA,INA       CONVERT ONE OCTAL 
      JSB DOCON     DIGIT 
      JMP SCRUN     ERROR - TRY AGAIN 
* 
      JSB TSTCH     TEST FOR LEGAL SUBCHANNEL 
      STA SCRCH     SAVE SCRATCH SUBCHANNEL 
      STB SCRSZ     AND SIZE
AUXIN CLA           PRESET TO SHOW NO AUX DISC
      STA DAUXN     SET CHANNEL TO ZERO 
      CCA           AND SUBCHANNEL
      STA AUXCH     TO -1.
      JSB SPACE 
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 GETOC     NUMBER
      JMP AUX0      NO  TRY FOR YES OR NO 
* 
      STA TBUF      SAVE THE NUMBER 
      JSB GETAL     END OF INPUT? 
      SZA 
      JMP AUX0      NO  LET YE/NO 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 GINIT     RESET THE SCANNER 
      JSB YE/NO     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 SPACE     YES - SET UP AUX UNIT 
AUXUN LDA P17       SEND QUESTION:
      LDB MES7      AUX DISC SUBCHNL? 
      JSB READ      GO SEND AND GET ANSWER
      CLA,INA       CONVERT ONE DIGIT OCTAL 
      JSB DOCON 
      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 INERR     SEND ERROR MESSAGE
      JMP AUXIN     AND TRY AGAIN 
* 
SYSER JSB INERR     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 
      LDA SDS#      SET AUX TRK SIZE TO SAME AS SYS DISC
AUX3  STA ADS#      SET AUX DISC # SECT. TRACK
      SPC 1 
STSCR JSB SPACE     NEW LINE
STREL LDA P14 
      LDB MES50     MES50 = ADDR: START SCRATCH?
      JSB READ      PRINT MESSAGE, GET REPLY
      LDA N3        SET FOR 3 DECIMAL DIGITS INPUT
      JSB DOCON     GET DIGITS, RETURN OCTAL
      JMP STREL     REPEAT INPUT
* 
      LDB SCRSZ     GET SCRATCH SIZE
      CMB,INB       IF INPUT NOT GREATER
      ADB A         THAN DISC 
      SSB           SIZE
      JMP STREM     SKIP
* 
      JSB INERR     ELSE ERROR
      JMP STREL     TRY AGAIN 
* 
STREM LDB SCRCH     GET SCRATCH SUBCHANNEL
      CPB SYSCH     IF SAME AS SYSTEM 
      RSS           SKIP
      ADA M400      ELSE ADD 400 TO FLAG AS NON SYSTEM
      SZA           IF SYSTEM AND ZERO SKIP 
      RAL,SLA       ELSE MULTIPLY BY TWO
      LDA DSIZE     ZERO ON SYSTEM - USE UPPER HALF SYSTEM
      ALF,ALF       ROTATE TO 
      RAR,RAR       TRACK LOCATION
      AND M7600     MASK TO TRACK 
      STA DSKSC     SET START SCRATCH 
* 
*                                  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. 
      JMP DSETU,I   RETURN TO MAIN LINE CODE
      SPC 1 
P32   DEC 32
BSHED NOP 
      SPC 1 
* 
*                                  GET # SECTORS FOR DISC 
* 
DSSIZ NOP 
      JSB SPACE     NEW LINE
#SEC1 LDA P25 
      LDB MES40     MES40 = ADDR: # 128 WORD SECTORS/TRACK?$$ 
      JSB READ      PRINT MESSAGE, GET REPLY
      LDA N3        SET FOR 3 DECIMAL DIGITS INPUT
      JSB DOCON     GET DIGITS, RETURN OCTAL
      JMP #SEC1     REPEAT INPUT
* 
      ALS           DOUBLE FOR 64 WORD SECTORS
      JMP DSSIZ,I   RETURN
      SPC 2 
GET   NOP           GET SUBROUTINE  CHECKS FOR EXISTANCE
      STA TBUF      AND GETS NEXT 
      JSB GETAL     INPUT NUMBER
      CPA BLANK     PASS NUMBER TYPE ECT FLAG IN A
      RSS           LINE NOT EMPTY SO SKIP
      JMP TB30E     EMPTY LINE SO ERROR 
* 
      LDA TBUF      GET TYPE/ # DIGITS
      JSB GETOC     GET NUMBER
      JMP TB30E     CONVERSION ERROR  BITCH 
* 
      JMP GET,I     ELSE 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         NUMBER TO B 
      BLS,BLS       INDEX INTO THE
      ADB ATB30     MAP TABLE ADDRESS 
      ADB P2        STEP TO # TRACKS
      LDB B,I       GET # TRACKS IN B 
      SZB           IF ZERO - ERROR  - SKIP 
      JMP TSTCH,I   ELSE OK - RETURN B= # TRACKS
* 
      LDA INIT1     ELSE GET INIT FLAG
      SZA,RSS       IF NOT SET
      JSB INERR     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 DCHNL     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 
      HED MH RTGEN   CONFIGURE AND COMPLETE INITILIZATION 
PTBOT NOP           CONFIGURE/PUNCH BOOT ENTRY POINT
      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 
      JSB INITS     INITILIZE THE SYSTEM DISC 
      SPC 1 
      LDB ABOOT     WRITE THE DISC BOOT ON
      CLA,CLE       THE 
      JSB DISKD     DISC TRACK 0 SECT 0 TO SET ADDRESSES
      LDB DP#RM     GET THE TABLE ADDRESS IN BOOT 
      LDA PL#ST     AND ADDRESS IN PARER BOOT 
      JSB MOVW      MOVE THE WORDS
      DEC -10 
      LDB D#HDS     GET ADDRESS OF REST OF PRAMS
      LDA DIST1     GET ADDRESS OF DISC PRAMS 
      INA           STEP TO THE HEAD/UNIT WORD
      LDA A,I       GET THE WORD
      ALF           ROTATE TO LOW A 
      AND M17       AND ISOLATE THE #HEADS PER CYL. 
      STA B,I       SET FOR BOOT
      INB           STEP THE ADDRESS
      LDA H#AD      GET THE BASE HEAD ADDRESS 
      STA PT#H2     SET IN SECOND ADDRESS FOR PT
      ALF,ALF       AND SET BASE HEAD FOR 
      STA B,I       AND SET IT FOR THE BOOT 
      INB           STEP TO NEXT ADDRESS
      LDA PT#TR 
      STA PT#T2     SET FOR ADDRESS RECORD
      STA B,I       SET FOR THE BOOT
      INB           STEP TO NEXT ADDRESS
      LDA SDS#      SET 
      ALF,RAL       THE 
      RAL           NUMBER OF WORDS 
      STA B,I       PER TRACK 
      LDA LWASM     GET LWAM
      AND M0760     MASK TO PAGE
      STA TBUF      SAVE
      LDA BADD      GET THE BOOT ADDRESS
      AND M1177     MASK TO PAGE BITS AND 
      IOR TBUF      ADD PAGE BITS AND 
      STA BADD      SET FOR THE PAPER BOOT
      RAL,CLE,ERA   CLEAR THE SIGN BIT
      INB 
      STA B,I       SET THE ADDRESS 
      INB           FOR BOOTING 
      STA B,I       AND 
      STA BADDD     FOR THE PAPER BOOT
      INB 
      LDA B,I       GET THE TABLE ADDRESS 
      AND M1777     AND MASK TO PAGE OFFSET 
      IOR TBUF      ADD THE PAGE BITS 
      STA B,I       AND RESTORE 
      INB           STEP THE THE NEXT ONE 
      LDA B,I       GET THE DEF 
      AND M1777     SAVE THE OFFSET 
      IOR TBUF      SET THE PAGE
      STA B,I       AND RESET 
      INB           AND YET ANOTHER 
      LDA B,I 
      AND M1777 
      IOR TBUF
      STA B,I 
      LDA DDIV      CONFIGURE THE DIVIDE
      AND M1777 
      IOR TBUF
      STA DDIV      AND RESET IT
      INB           ONE MORE TIME 
      LDA B,I 
      AND M1777 
      IOR TBUF
      STA B,I       DONE SO 
      LDB ABOOT     OUTPUT THE BOOTSTRAP
      CLA,CLE       TO THE DISC 
      JSB DISKD     TRACK ZERO SECT  ZERO 
      SKP 
BOOT0 JSB SPACE     NEW LINE
      LDA P11       SEND MESSAGE
      LDB MES4      PUNCH BOOT? 
      JSB READ      GET THE WORD
      JSB YE/NO     ANALIZE 
      JMP BOOT0     ERROR - TRY AGAIN 
* 
      JMP PTBOT,I   NO RETURN TO MAIN 
      SPC 1 
      JSB LEADR     PUNCH LEADR 
      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
      LDA BOOTL     GET NEGATIVE LENGTH+3 
      LDB STRAP     GET ADDRESS OF THE BOOT 
      JSB DRHSP,I   SEND TO THE PUNCH 
      JSB LEADR     PUNCH TRAILER 
      JMP BOOT0     GO ASK IF HE WANTS ANOTHER
      SPC 1 
LEADR NOP           ROUTINE TO PUNCH LEADER 
      LDA N27       GET COUNT 
      STA TBUF      SET IN COUNTER
LEAD1 LDB DZERO     GET ADDRESS OF A ZERO 
      CCA           SET FOR 1 WORD BINARY 
      JSB DRHSP,I   GO PUNCH
      ISZ TBUF      STEP COUNT - DONE?
      JMP LEAD1     NO - SEND IT AGAIN
* 
      JMP LEADR,I   YES - RETURN
      SPC 2 
MESS2 DEF *+1 
      ASC 8,CONTROLLER CHNL?
MES6  DEF *+1 
      ASC 16,AUX DISC (YES OR NO OR # TRKS)?
HPDSK DEF I/OTB,I   ADDRESS OF I/O INSTRUCTION LIST 
DCHNL BSS 1         DISK I/O CHANNEL NO. (OCTAL)
DZERO DEF ZERO
ZERO  NOP 
DP#RM DEF WAK 
PL#ST DEF WA#KE 
D#HDS DEF #HDS
                              