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