ASMB,R,B,L,C,N IFN NAM BOOTX,7 92070-1X087 REV. 2001 791009 XIF * NAME: BOOTX * SOURCE: 92070-18087 * RELOC: 92070-1X087 * PGMR: MTW * * * **************************************************************** * * (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. * * **************************************************************** * * IFN ENT BOOTX XIF IFZ ORG 0B XIF O EQU * BOOTX DEC 67 NOP ABS JMP+HERE-O SIZE ABS BUF-BOOTX NOP POWER FAIL RESTART NOT POSSIABLE * * A - REGISTER * * 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 * <-HPIB-> <-UNIT-> <------SC------> * SYSAD ABS SYS-O HPIBA OCT 0 UNIT# OCT 0 FHED OCT 0 FCYL OCT 0 #SPAR OCT 0 #TRKS OCT 206 #SECT OCT 36 #HEDS OCT 2 (IF = 1 THEN SURFACE MODE) SYS ASC 3,SYSTEM OCT 0 IF SET TO 51523 WILL SUSPEND (102077) REV. DEC 1 A EQU 0 B EQU 1 * SKP HERE CLC 4 TURN OFF POWER FAIL INTERRUPTS SZA IS IT POWER FAIL RESTART? ABS JMP+HERE0-O NO THEN CONTINUE STA 4 YES THEN REBOOT ABS JMP+REBOT-O HERE0 SSA HLT 1 STOP IF A<0 MANUAL BOOT ABS STA+TEMP-O CLA STA 4 FORCE REBOOT IF AUTO RESTART SZB,RSS ABS LDB+SYSAD-O IF B=0 USE DEFAULT NAME FOR SYSTEM ABS STB+FILAD-O ABS LDA+SYSAD-O LDB B,I SZB,RSS IF LOAD & GO CHECK FOR DEFAULT ABS STA+FILAD-O ABS LDA+TEMP-O ABS AND+B77-O OTA 2,C ENABLE GLOBAL REGISTER ABS LDA+TEMP-O ALF,ALF RAR ABS STA+TEMP-O ABS AND+B7-O ABS STA+DISKA-O ABS IOR+LSTNA-O ADD LISTEN ADDRESS ABS STA+L0-O ABS STA+L1-O DISK LISTEN ABS STA+L2-O ABS LDA+DISKA-O ABS IOR+TLKA-O ADD TALK ADDRESS ABS STA+T1-O DISK TALK ABS STA+T2-O ABS LDA+TEMP-O RAL,RAL GET TO UNIT RAL ABS AND+B7-O ABS STA+UNIT-O ABS IOR+EOI-O ADD EOI ABS STA+U1-O UNIT+EOI SKP * BLANK FILL FILE NAME * ABS LDA+M3-O ABS STA+CNT-O ABS LDA+NAMAD-O ABS STA+TEMP-O CLE LOOP ABS LDB+M256-O ABS LDA+FILAD-O+I+I SEZ ABS LDB+B377-O AND B SZA,RSS ABS JMP+FZERO-O SEZ ABS IOR+TEMP-O+I+I ABS STA+TEMP-O+I+I CME SEZ ABS JMP+LOOP-O ABS ISZ+FILAD-O ABS ISZ+TEMP-O ABS ISZ+CNT-O ABS JMP+LOOP-O ABS LDB+FILAD-O+I+I CHECK TO HALT AT END OF BOOT ABS LDA+HLT77-O GET HALT INSTRUCTION ABS CPB+ASS-O DID HE SET STOP SIGNAL ABS STA+HLT-O YES SET HALT INSTRUCTION ABS JMP+CONT-O FZERO SEZ,RSS ABS JMP+LBYT-O F0 ABS LDA+BLNK-O ABS IOR+TEMP-O+I+I ABS STA+TEMP-O+I+I ABS ISZ+TEMP-O ABS ISZ+CNT-O RSS ABS JMP+CONT-O LBYT ABS LDA+UBLNK-O ABS STA+TEMP-O+I+I ABS JMP+F0-O SKP * SUBROUTINE TO CONVERT TRACK TO CYL & HEAD * TCONV NOP CLB SET FOR DIVIDE ABS DIV+I+I A-REG = CYL, B-REG = HEAD OFFSET ABS #HEDS-O ABS ADA+FCYL-O ADD FIRST CYL ABS STA+CYL-O ABS AND+B377-O ABS STA+CYL+1-O LOWER BYTE OF CYL ADDRESS ABS LDA+CYL-O FETCH CYL WORD AGAIN ALF,ALF ABS AND+B377-O ABS STA+CYL-O UPPER BYTE OF CYL ADDRESS ABS ADB+FHED-O ADD FIRST HEAD TO HEAD OFFSET ABS STB+HED-O AND STORE IT ABS LDA+#HEDS-O CHECK IF CYLINDER OR SURFACE MODE ABS LDB+B1005-O CLE,ERA SZA ABS ADB+B2-O ABS STB+FLMSK-O SET FILE MASK ABS JMP+TCONV-O+I+I RETURN * * SEARCH THE DIRECTORY * DIREC ABS LDA+BUF+8-O ABS STA+#DTRK-O ABS LDB+DEFL-O * NEXT LDA B,I ABS CPA+NAME-O ABS JMP+MATCH-O FIRST WORD MATCHES NENT ABS ADB+.16-O NO MATCH, SO FETCH NEXT ENTRY ABS CPB+EOB-O END OF BUFFER? ABS JMP+DREAD-O YES, SEE IF THERE ARE MORE TRACKS ABS JMP+NEXT-O NO, GET NEXT ENTRY * DREAD ABS ISZ+#DTRK-O HAVE WE READ ALL DIR. TRACKS? RSS NO HLT 2 YES, COULDN'T FIND IT ABS LDA+TEMP-O GO READ NEXT DIR. TRACK ABS JMP+CONT+1-O MATCH INB LDA B,I ABS CPA+NAME+1-O ABS JMP+MCH1-O ABS ADB+M1-O ABS JMP+NENT-O MCH1 INB LDA B,I ABS CPA+NAME+2-O ABS JMP+FOUND-O ABS ADB+M2-O ABS JMP+NENT-O SKP FOUND ABS ADB+B2-O LDA B,I ABS STA+TRACK-O INB LDA B,I ABS AND+B377-O RAR DIVIDE BY 2 TO GET PHYSICAL SECT. ABS IOR+EOI-O TAG LAST BYTE WITH EOI ABS STA+SECTR-O AND STORE IT INB LDA B,I FETCH FILE SIZE ASL 6 MULT. BY 64 = NO. OF WORDS ABS STA+TEMP2-O ABS LDB+DST16-O SET UP DESTINATION FOR 16K CLA ABS STA+DST32-O+I+I SEE HOW BIG MEMORY IS ABS LDA+DST32-O+I+I SZA,RSS IF STILL 0 THEN 32K ABS LDB+DST32-O ABS STB+TEMP-O ABS STB+LOCAD-O ABS LDA+TEMP2-O CMB,INB ADB A USE FILE SIZE OR MEMORY SIZE? SSB,RSS ABS LDA+TEMP-O USE MEMORY SIZE RAL X 2 = NO. OF CHARS. CMA,INA MAKE IT NEG. ABS STA+LEN-O STORE IT IN THE QUAD ABS LDA+TRACK-O FETCH TRACK AND ABS JSB+TCONV-O CONVERT TO CYL & HEAD SKP * FIX-UPS FOR THE BIG MOVE * ABS LDA+TEMP-O DESTINATION ADDRESS ABS LDB+LDAD-O WHERE WE START CMB,INB SUBTRACT ADA B ABS LDB+DEF1-O ADB A ABS STB+DEF1-O ABS LDB+DEF2-O ADB A ABS STB+DEF2-O ABS LDB+DEF3-O ADB A ABS STB+DEF3-O ABS LDB+QUADA-O ADB A ABS STB+QUADA-O ABS LDB+DSJA-O ADB A ABS STB+DSJA-O CLA ABS STA+DEFL-O START WITH LOCATION 0 ABS STA+JMP..-O SET TO START PROGRAM * * CODE TO MOVE BOOT TO TOP OF MEMORY * ABS LDA+LSIZE-O LOAD SIZE ABS STA+CNT-O ABS LDB+LDAD-O WHERE WE START LOOP2 LDA B,I ABS STA+TEMP-O+I+I ABS ISZ+TEMP-O INB ABS ISZ+CNT-O ABS JMP+LOOP2-O ABS JMP+LOCAD-O+I+I JMP TO IT SKP .16 DEC 16 B2 OCT 2 B3 OCT 3 B7 OCT 7 B77 OCT 77 B1005 OCT 1005 DST16 OCT 36500 DST32 OCT 76500 BLNK OCT 40 UBLNK OCT 20000 #DTRK OCT 0 TRACK OCT 0 CNT OCT 0 DISKA OCT 0 FILAD OCT 0 TEMP2 OCT 0 LOCAD OCT 0 HLT77 HLT 77B ASS ASC 1,SS NAMAD ABS NAME-O NAME BSS 3 LDAD ABS READ-O LSIZE ABS READ-BUF * * CONT ABS LDA+#TRKS-O DIREC. STARTS IN LAST TRACK ABS ADA+M1-O LAST TR = #TRKS - 1 ABS STA+TEMP-O ABS JSB+TCONV-O CONVERT TO CYL & HEAD ABS LDA+EOI-O FETCH EOI BIT ABS STA+SECTR-O START WITH SECTOR 0 ABS LDA+#SECT-O FETCH SECTORS/TRACK ASL 7 MULT. BY 128 STA B ABS ADA+DEFL-O BEGINNING OF BUFFER ABS STA+EOB-O END OF BUFFER BLS X 2 = NO. OF CHARS. CMB,INB ABS STB+LEN-O LENGTH = 1 TRACKS WORTH ABS JMP+READ-O LAST EQU * BSS EQU LAST-BOOTX BSS 500B-BSS SKP * THIS CODE GETS MOVED TO HIGH MEMORY * READ ABS LDA+M3-O SET FOR 3 RETRIES ABS STA+FAIL-O READ2 CLC DMACT,C ABS LDA+ONL-O PUT IT OTA DREG ON-LINE STC DREG,C ABS LDA+AIFC-O ASSERT OTA DREG IFC STC DREG,C FOR ABS LDA+M256-O > 100 MICROSECS. RD1 INA,SZA ABS JMP+RD1-O ABS LDA+CMDRS-O CLEAR IFC OTA DREG STC DREG,C ABS LDA+QUADA-O QUADS ADDRESS ABS JSB+SCDMA-O GO DO IT ABS JMP+RTRY-O DMA PARITY RETURN ABS LDA+CMDRS-O OTA DREG STC DREG,C ABS LDA+UNTLK-O UNTALK OTA DREG THE DISK STC DREG,C ABS LDA+BIT15-O THIS IS THE OTA CREG WAY YOU ABS LDA+M8-O CLEAR THE RD2 STC DREG,C INBOUND INA,SZA FIFO ABS JMP+RD2-O ABS LDA+LEN-O CHECK RESIDUE SZA ZERO IS GOOD. ABS JMP+RTRY-O OTHERWISE, TRY AGAIN. * * NOW GET THE DSJ * ABS LDA+DSJA-O ADDRESS OF DSJ QUADS ABS JSB+SCDMA-O ABS JMP+RTRY-O DMA PARITY ABS LDA+DSJ-O FETCH DSJ SZA,RSS DSJ = 0 ? ABS JMP+JMP..-O YES, CONTINUE RTRY ABS ISZ+FAIL-O NO. RETRY? ABS JMP+READ2-O YEP. HLT 3 NOPE. T.S. ABS JMP+READ-O OK TRY AGAIN JMP.. ABS JMP+DIREC-O CONTINUE * CCA INDICATE MANUAL UP OTA 3 INSURE NO SEQUENTIAL LOADING CLB AND NO FILE STC 4 ENABLE WORLD HLT NOP JMP 2 INCASE OF %R SKP * SELF-CONFIG. DMA OUTPUT ROUTINE * SCDMA NOP OTA DMAPT PASS DMA THE STARTING ADDRESS STC DMAPT,C START AUTO CONFIGURATION SFS RRR 16 GET OFF THE BACKPLANE SFS DMACT NOW JUST WAIT FOR IT ABS JMP+POW?-O POWER DOWN? DONE SFS DMADR CHECK FOR DMA PARITY ABS ISZ+SCDMA-O NO PARITY CLC DMACN,C ABS JMP+SCDMA-O+I+I * * POW? RRR 16 GET OFF THE BACKPLANE SFC 4 NO POWER DOWN? ABS JMP+SFS-O CLA STA 4 INSURE REBOOT ON POWER UP SFS 4 LET IT GO ALL THE WAY ABS JMP+*-1-O REBOT OTA 1 DIDN'T GO ALL THE WAY CLC 2 FORCE REBOOT JMP 2 SKP ********************************************************************** * * QUADS * ********************************************************************** * * SEEK + READ COMMAND * QUADA ABS QUAD0-O QUAD0 OCT 141000 CONT+DEV. CMD.+WORD+FOUR+OUT OCT 0 DEF1 ABS CMD2-O ABS CMD2-CMD3 * * READ DATA * OCT 71200 OCT 103000 DEFL ABS BUF-O LEN OCT 0 * * READ DSJ * DSJA ABS DSJQ-O DSJQ OCT 141000 CONT+DEV.CMD.+WORD+FOUR+OUT OCT 0 WRITE DEF2 ABS CMD3-O DEC -8 * OCT 61200 DEV.CMD.+BYTE+FOUR+IN OCT 102000 READ+PACK DEF3 ABS DSJ-O DEC -1 SKP * SEEK BUFFER * CMD2 OCT 60042 ABS UNL ABS MTA L0 OCT 0 OCT 550 OCT 17 SET FILE MASK FLMSK OCT 1001 SURFACE MODE ABS UNL ABS MTA L1 OCT 0 LISTEN+DISK ADDRESS OCT 550 SECONDARY OCT 2 SEEK OPCODE UNIT OCT 0 CYL OCT 0 OCT 0 HED OCT 0 SECTR OCT 0 SECTOR+EOI ABS UNL UNLISTEN * * READ COMMAND BUFFER * OCT 60042 L2 OCT 0 LISTEN+DISK ADDRESS OCT 550 SECONDARY OCT 5 READ OPCODE U1 OCT 0 UNIT+EOI ABS UNL UNLISTEN ABS MLA MY LISTEN ADDRESS T1 OCT 0 TALK+DISK ADDRESS OCT 540 SECONDARY OCT 1400 UNCOUNTED XFER OCT 60040 INPUT MODE * * READ DSJ BUFFER * CMD3 OCT 60042 ABS MLA MY LISTEN ADDRESS T2 OCT 0 TALK+DISK ADDRESS OCT 560 SECONDARY OCT 1001 COUNTED XFER OF 1 BYTE UNTLK ABS UNT UNTALK ABS UNL UNLISTEN OCT 60040 INPUT MODE SKP * HP-IB ADDRESSES * UNT EQU 537B UNL EQU 477B MTA EQU 536B MLA EQU 476B * * PHI STUFF * DREG EQU 30B CREG EQU 31B SREG EQU 32B * * DMA REGISTERS * DMAPT EQU 20B DMACN EQU 21B DMADR EQU 22B DMACT EQU 23B * * CONSTANTS, ETC. * CMDRS OCT 60043 TEMP OCT 0 B377 OCT 377 EOB OCT 0 BIT15 OCT 100000 M8 DEC -8 M1 DEC -1 M2 DEC -2 M3 DEC -3 ONL OCT 70200 AIFC OCT 60021 EOI OCT 1000 M256 DEC -256 DSJ OCT 0 FAIL OCT 0 * LSTNA OCT 440 TLKA OCT 500 * BUF OCT 0 * LDA EQU 062000B LDB EQU 066000B STA EQU 072000B STB EQU 076000B ADA EQU 042000B ADB EQU 046000B I EQU 040000B INDIRECT BIT (CODE AS I+I) CPA EQU 052000B CPB EQU 056000B JSB EQU 016000B JMP EQU 026000B ISZ EQU 036000B AND EQU 012000B IOR EQU 032000B DIV EQU 000400B LESS BIT 15 END