.TITLE RK05 BOOTSTRAP FOR CONCURRENT PASCAL SYSTEM .SBTTL INTRODUCTION ; ; ; THIS PROGRAM IS DESIGNED TO RESIDE ON BLOCK 0 OF AN RK05 PACK ; CONTAINING A SOLO SYSTEM. THE PROGRAM IS INITIATED BY THE ; STANDARD HARDWARE LOAD SEQUENCE, AND MOVES A PART OF ITSELF TO ; 156000 (8). THIS SECTION THEN READS IN THE KERNEL PORTION OF ; THE SOLO SYSTEM, WHICH WILL READ IN THE SOLO SYSTEM ITSELF. ; ; ; DEFINITIONS: ; RKCS = 177404 ;RK-11 CONTROL/STATUS REGISTER RKWC = 177406 ;RK-11 WORD COUNT (2'S COMPLEMENT) RKBA = 177410 ;RK-11 BUS ADDRESS REGISTER RKDA = 177412 ;RK-11 DISK ADDRESS REGISTER ; RKRD = 5 ;READ COMMAND (RKCS) ; ; ; TPS = 177564 ;TERMINAL PRINTER STATUS TPB = 177566 ;TERMINAL PRINTER BUFFER ; ; ; $LOC = 156000 ;HIGH MEMORY ADDRESS ; ; UNITNO = 40 ;PLACE TO PUT BOOTED UNIT ; ; .ASECT ;ABSOLUTE SECTION . = 0 ;START AT ABSOLUTE 0 .PAGE .SBTTL NON-RELOCATABLE CODE ; ; ; THE FOLLOWING CODE IS USED TO MOVE THE RELOCATABLE CODE TO A HIGH ; MEMORY ADDRESS. ; START: NOP ;SOME BOOT ROMS EXPECT THIS BR 10$ ;SKIP TRAP VECTORS TRAP4,0 ;TRAP TO 4 TRAP10,0 ;TRAP TO 10 10$: MOV #$LOC,SP ;SET SO TRAP TO 4/10 IS OK ;(WILL NOT CAUSE DOUBLE BUS ERROR) MOV SP,R0 ;R0 -> AREA FOR CODE MOV #20$,R1 ;R1 -> CODE 15$: MOV (R1)+,(R0)+ ;MOVE A WORD OF CODE CMP @R1,#-1 ;DONE? BNE 15$ ;NO, MOVE MORE CODE JMP @#$LOC ;DONE, START RELOCATED PORTION .PAGE .SBTTL RELOCATED CODE ; ; ; THE FOLLOWING CODE IS MOVED AND THEREFORE MUST BE POSITION- ; INDEPENDENT!!!! ; 20$: MOV @#RKDA,R5 ;R5 = DISK ADDR REG BIC #^C160000,R5 ;ISOLATE UNIT BITS MOVB #1,@#RKDA ;SET BLOCK NUMBER (DON'T CHANGE DRIVE ;NUMBER) MOV #-27000.,@#RKWC ;SET LARGE WORD COUNT MOV #0,@#RKBA ;SET BUFFER ADDRESS MOV #RKRD,@#RKCS ;READ IT 25$: TSTB @#RKCS ;DONE YET? BPL 25$ ;NO, LOOP TILL DONE BIT ON TST @#RKCS ;ERROR BIT SET? BMI IOERR ;YES, PRINT "DISK ERROR" CMP @#0,#137 ;TEST FOR JMP @#X INSTRUCTION @ 0 BNE BADFIL ;NOT THERE, BAD DISK MOV R5,@#UNITNO ;PASS UNIT NUMBER TO KERNEL NOP ;CONVENIENT PLACE TO PUT A HALT CLR PC ;ELSE, JUMP TO LOCATION 0 IOERR: JSR R0,PRINT ;CALL TTYOUT SUBROUTINE .ASCIZ \I/O ERROR\ ;BAD BLOCK ON DISK BADFIL: JSR R0,PRINT ;CALL TTYOUT SUBROUTINE .ASCIZ \BAD DISK FORMAT\ ;KERNEL NFG PRINT: TSTB @#TPS ;WAIT ON TERMINAL READY BPL PRINT ;NOT READY MOVB (R0)+,@#TPB ;PRINT NEXT CHARACTER BNE PRINT ;IF NE, MORE TO PRINT 40$: HALT ;HALT CPU BR 40$ ;DON'T ALLOW RE-TRY ENDCOD: .WORD -1 ;END OF MOVED CODE ; ; CHECK FOR CODE FIT INTO BOOT ; .IF GE, .ERROR ;;BOOT CODE EXTENDS INTO BITMAP .ENDC . = 400 ;MOVE PAST BITMAP ; ; THESE ROUTINES HANDLE TRAPS TO 4 AND 10 (WHILE BOOT STILL IN BLOCK ; ZERO OF MEMORY). ; ; TRAP4: JSR R0,PRINT ;TRAP TO 4 .ASCIZ \TRAP TO 4\ TRAP10: JSR R0,PRINT ;TRAP TO 10 .ASCIZ \TRAP TO 10\ .END