.TITLE FLOPPY RT-11 BOOTSTRAPS ; BOOTS.MAC - FLOPPY BOOTSTRAPS. .NLIST .MCALL .REGDEF .REGDEF .ASECT .=1000 .NLIST SEQ .LIST .IF DF $BOOT MINIMAL KEYSTROKE BOOTSTRAP FOR LSI-11 WITHOUT BOOT PROM R0/ XXXXXX 0 R1/ XXXXXX 177170@ ; OPEN COMMAND STATUS REG 177170/ 000040 40000 ; FORCE AN INIT / 000000 / 000040 3 ; DO BUFFER UNLOAD WHEN DONE R3/ XXXXXX 0 R4/ XXXXXX 177172 R5/ XXXXXX R6/ XXXXXX 1000 ; SET STACK POINTER VALID R7/ XXXXXX 1000@ ; SET PC FOR PROCEDE AT 1000 1000/ XXXX 105711 ; WAIT FOR FLAG 1002/ XXXX 1776 1004/ XXXX 100002 ; BRANCH WHEN FINISHED 1006/ XXXX 111423 ; LOAD A BYTE 1010/ XXXX 773 ; GO BACK FOR ANOTHER 1012/ XXXX 5007 ; START AT LOC 0 P ; PROCEDE AT 1000 WITHOUT INIT .NLIST .ENDC .LIST ; MINIMAL RT-11 BOOTSTRAP FOR DSD-210 FLOPPY CONTROLLER ; PUT A RT-11 DISKETTE (CONTAINING MONITR.SYS) INTO THE LEFT ; DRIVE (UNIT 0) WITH THE LABEL FACING TO THE LEFT. WRITE PROTECT ; THE DRIVE WHILE BOOTING IF DESIRED AND START AT 1000. ; NOTE: THIS BOOTSTRAP IS IN POSITION INDEPENDENT CODE AND ; CAN BE LOADED AND EXECUTED ANYWHERE. RXCS=177170 ; FLOPPY COMMAND STATUS REGISTER FLPBOT: CLR R0 ; 1 IF DRIVE 1 MOV #100247, R2 ; 100267 IF DRIVE 1. RESET ; READ SECTOR 1, TRACK 1 MOV #RXCS, R1 ; RXCS TST (R1) BEQ .-2 BMI FLPBOT-2 ; ERROR - RETRY. MOV R1, R4 MOV #3, (R4)+ ; EMPTY BUFFER CLR R3 ; DELAY A LITTLE 4$: TSTB (R1) BEQ .-2 BPL 6$ ; MUST BE DONE. MOVB (R4), (R3)+ ; LOAD STARTING AT 0 BR 4$ 6$: CLR PC ; NOTE: R0 MUST BE 0 OR 1 HERE. ; DEC PDP-11 BOOTSTRAP FOR RT-11 ; READS SECTOR 1 TRACK 1 INTO CORE STARTING AT 0. ; STARTS AT 0 WITH R0 = 0 IF UNIT 0, R0 = 1 IF UNIT 1. ; THIS IS USED IN THE DSD-210-11 PROM BOOTSTRAP AT 173000. .=173000 ; LOCATION OF PROM BOOTSTRAP BOTDEC: MOV #100247, R2 ; UNIT 0 READ, GO ; USE 100267 FOR UNIT 1 RESTRT: MOV #RXCS, R1 BITB R2, (R1) ; TEST DONE BEQ .-2 MOVB #7, R3 ; SEQUENCE COUNTER FOR SECTOR,TRACK MOV R1, R0 ; SET UP RXDB POINTER ; *************** 3 DRIVE BOOT MODIFICATION ***** ; MOV R2, (R0)+ ; EXECUTE READ+ R0 = RXDB PTR MOV R3, (R0)+ ; FORCES USE OF DRIVE 0 ONLY ; *************** BR .+6 LDRXDB: MOV #1, (R0) ; LOAD SECTOR, TRACK INTO RXDB ASR R3 ; SET = 3 BCS .+6 ; SET TO LOAD SECTOR, TRACK 3$: MOVB (PC)+, (R1) ; GIVE EMPTY BUF COMMAND. [OR ] EMPBUF: MOVB (R0), (R3)+ ; LOAD DATA INTO CORE IF CARRY CLEAR BIT R2, (R1) ; ERROR, DONE, OR TRANSFER REQ BEQ .-2 ; WAIT FOR ONE OF ABOVE? BMI RESTRT ; ERROR - RETRY FROM BEG. BCS LDRXDB ; R3= 3+C - LOAD SECTOR ; 1+C - LOAD TRACK ; 0+C - LOADS ANOTHER 1 (IGNORED) ; THEN LOADS EMPTY BUF COMMAND AT 3$ TSTB (R1) ; TRANSFER REQUEST IN EMP BUF. BMI EMPBUF ; READ ANOTHER BYTE. CLR R0 ; BUF EMPTY, MUST BE DONE. CMP #240, (R0) ; CHECK THE DATA. BNE RESTRT ; NOT GOOD - RETRY. CMPB #247, R2 ; IS UNIT = 0? (SETS CARRY IF NOT) ADC R0 ; R0 = 0 IF UNIT 0, = 1 IF UNIT 1. CLR PC ; START AT 0. .END