From 15fe831fc77c5b99c054f94af6d0cea7bd50909f Mon Sep 17 00:00:00 2001 From: Jeff Date: Tue, 27 Sep 2016 11:40:47 -0700 Subject: [PATCH] Sanpshot the bootcode used for initial PDP-11 testing --- devices/pdp11/rom/custom/bootcode.mac | 458 ++++++++++++++++++++++++++ modules/pdp11/lib/cpustate.js | 2 +- 2 files changed, 459 insertions(+), 1 deletion(-) create mode 100644 devices/pdp11/rom/custom/bootcode.mac diff --git a/devices/pdp11/rom/custom/bootcode.mac b/devices/pdp11/rom/custom/bootcode.mac new file mode 100644 index 000000000..71c2f4c86 --- /dev/null +++ b/devices/pdp11/rom/custom/bootcode.mac @@ -0,0 +1,458 @@ +; BOOT LOADER CODE +; +; REBASE HIGHER LINK/BOT:140000 +; WANT PERFORMANCE COUNTER - CLOCK TICKS TO DO SOMETHING? + +START: RESET + CLR @#177776 + MOV #START,SP + CLR @#177564 + MOV #BANNER,R0 + JSR PC,PRINT + MOV #CLKAST,@#100 + MOV #340,@#102 + BIS #100,@#177546 ; SET CLOCK TICKING + + MOV #PROMPT,R0 + JSR PC,PRINT + SUB #256,SP + MOV SP,R0 + JSR PC,INPUT + CLR R0 +1$: WAIT + INC R0 + TST LGHTON + BEQ 1$ + MOV #054000,-(SP) ; SUPER PRIORITY 0 ALT REG + MOV LGHTON,-(SP) ; CALL SUPER LOOP START + RTT + +LGHTON: .WORD 0 +CLKTIC: .WORD 0 +CLKAST: + INC CLKTIC + RTT + +ONECHR: + TSTB @#177564 + BPL ONECHR + MOVB R0,@#177566 + RTS PC + +PRTPTR: .WORD 0 +PRINT: + BITB #100,@#177564 + BNE PRINT + MOV R0,PRTPTR + MOV #PRTAST,@#64 + MOV #200,@#66 + BISB #100,@#177564 + RTS PC + +PRTAST: + TSTB @PRTPTR + BEQ 2$ + MOVB @PRTPTR,@#177566 + INC PRTPTR + RTT +2$: CLRB @#177564 + RTT + +BUFFER: .WORD 0 ; INPUT BUFFER POINTER +LENGTH: .WORD 0 ; INPUT BUFFER LENGTH + +INPUT: + MOV R0,BUFFER + CLR LENGTH + MOV #INPAST,@#60 + MOV #200,@#62 + BISB #100,@#177560 + RTS PC + +INPAST: + MOV R0,-(SP) + MOVB @#177562,R0 + CMPB R0,#15 + BEQ 7$ ; CARRIAGE RETURN + CMPB R0,#127. + BEQ 2$ ; + CMPB R0,#10 + BNE 4$ ; BACK SPACE +2$: TST LENGTH ; DATA IN BUFFER? + BEQ 3$ + DEC LENGTH ; LENGTH + MOV #DEL,R0 + JSR PC,PRINT +3$: BR 9$ +4$: CMPB R0,#40 + BLT 9$ ; BELOW SPACE + CMPB R0,#177 + BGE 9$ ; SKIP STUFF TOO BIG + JSR PC,ONECHR ; ECHO CHAR + CMPB R0,#172 + BGT 5$ ; ABOVE Z + CMPB R0,#141 + BLT 5$ ; BELOW A + BICB #40,R0 ; CONVERT TO UPPER CASE +5$: CMP LENGTH,#254 + BGE 9$ + MOVB R0,-(SP) + MOV BUFFER,R0 + ADD LENGTH,R0 + MOVB (SP)+,(R0) + INC LENGTH + BR 9$ + +7$: MOV BUFFER,R0 + ADD LENGTH,R0 + CLRB (R0) + MOV #CMD,@#240 ; CALL CMD AT PRIORITY 2 + MOV #100,@#242 + MOV #2000,@#177772 +9$: MOV (SP)+,R0 + RTT + +CMD: + CLR @#177772 ; NO MORE PIR CALLS + MOV R0,-(SP) + MOV R1,-(SP) + MOV R2,-(SP) + MOV R3,-(SP) + MOV R4,-(SP) + MOV #EOL,R0 + JSR PC,PRINT +1$: BITB #100,@#177564 + BNE 1$ + CLR R4 + MOV #CMDLST,R3 ; CMD LIST +3$: MOVB (R3)+,R0 + BEQ 13$ + MOV BUFFER,R2 ; USER CMD +4$: MOVB (R2)+,R1 + BEQ 15$ ; NULL COMMAND? + CMPB R1,#40 + BEQ 4$ ; SKIP SPACE +5$: CMPB R0,R1 + BNE 7$ + MOVB (R3)+,R0 + BEQ 9$ + MOVB (R2)+,R1 + BEQ 9$ + CMPB R1,#40 + BNE 5$ + BR 9$ +7$: MOVB (R3)+,R0 + BNE 7$ + INC R4 + BR 3$ +9$: ASL R4 + JSR PC,@CMDTBL(R4) ; EXECUTE + BR 15$ + +13$: MOV #UNKMSG,R0 + JSR PC,PRINT + +15$:CLR LENGTH + MOV #PROMPT,R0 + JSR PC,PRINT + MOV (SP)+,R4 + MOV (SP)+,R3 + MOV (SP)+,R2 + MOV (SP)+,R1 + MOV (SP)+,R0 + RTT + + +CMDTBL: .WORD BOOT,HALT,TEST,LIGHTS,HELP +HLPMSG: .ASCIZ 'COMMANDS ARE BOOT, HALT, LIGHTS, TEST AND HELP'<15><12>'BOOT DEVICES ARE RK? RL? OR RP?'<15><12> +EOL: .BYTE 15,12,0 +DEL: .BYTE 10,40,10,0 +CMDLST: .ASCIZ 'BOOT' + .ASCIZ 'HALT' + .ASCIZ 'TEST' + .ASCIZ 'LIGHTS' + .ASCIZ 'HELP' + .BYTE 0 +UNKMSG: .ASCIZ 'UNKNOWN COMMAND'<12><15> +BANNER: .ASCIZ 'PAUL NANKERVIS - PAULNANK@HOTMAIL.COM'<12><15><12><15> +PROMPT: .ASCIZ 'BOOT> ' +BADBOO: .ASCIZ 'UNKNOWN BOOT DEVICE'<12><15> +PERMSG: .ASCIZ ' CLOCK TICKS'<12><15> + + .EVEN + +HELP: + MOV #HLPMSG,R0 + JSR PC,PRINT + RTS PC + +HALT: + HALT + MOV #EOL,R0 + JSR PC,PRINT + RTS PC + +TEST: + CLR CLKTIC + + MOV #15000,R5 +10$: MOV R5,@#177570 ; DISPLAY + MOV R5,R4 + ASR R4 +15$: CLR R0 + MOV R5,R1 + DIV R4,R0 + MOV R0,R2 + MUL R4,R2 + ADD R3,R1 + CMP R1,R5 + BEQ 20$ + HALT +20$:SOB R4,15$ + SOB R5,10$ + + MOV #PERMSG+5,R0 + MOV CLKTIC,R3 + +25$:CLR R2 + DIV #10,R2 + ADD #'0,R3 + MOVB R3,-(R0) + MOV R2,R3 + BNE 25$ + + JSR PC,PRINT + RTS PC + + +MMR0=177572 +MMR1=177574 +MMR2=177576 +MMR3=172516 + +LIGHTS: + MOV #77406,R3 ; DEFAULT PDR + CLR R2 + CLR R1 + MOV #8.,R0 +1$: MOV R3,172300(R1) ; KERNEL I PDR + MOV R2,172340(R1) ; KERNEL I PAR + MOV R3,172320(R1) ; KERNEL D PDR + MOV R2,172360(R1) ; KERNEL D PAR + MOV R3,172200(R1) ; SUPER I PDR + MOV R2,172240(R1) ; SUPER I PAR + MOV R3,172220(R1) ; SUPER D PDR + MOV R2,172260(R1) ; SUPER D PAR + MOV R3,177600(R1) ; USER I PDR + MOV R2,177640(R1) ; USER I PAR + MOV R3,177620(R1) ; USER D PDR + MOV R3,177660(R1) ; USER D PAR + ADD #200,R2 + ADD #2,R1 + SOB R0,1$ + BIS #176000,@#172376 ; KERNEL D POINTS TO I/O SPACE + BIS #176000,@#172276 ; SUPER D POINTS TO I/O SPACE + BIS #176000,@#177676 ; USER D POINTS TO I/O SPACE + MOV #77,@#MMR3 ; 77 FOR 22 BIT + MOV #1,@#MMR0 + + MOV #1700,@#172244 ; BASE SUPER I (PAR 2) #40000 AT #170000 + MOV #1700,@#172264 ; BASE SUPER D (PAR 2) #40000 AT #170000 + MOV #010000,@#177776 ; SET PM TO SUPER + + MOV #40200,R3 ; SUPER CODE ADDRESS + MOV #SUPERS,R2 ; ADDRESS SUPER CODE +10$: MOV (R2)+,-(SP) + MTPI (R3)+ + CMP R2,#SUPERE + BLO 10$ + + MOV #40200,LGHTON ; CHANGE IDLE TASK + RTS PC + +; +; TO BE COPIED TO SUPER #40200 AT PHYSICAL #170000 +; #40000 TO #40200 FOR WAIT & JMP INSTRUCTIONS +; +SUPERS: + MOV #37,R0 ; LOAD PATTERN + MOV #174000,R1 + BIT #1,@#177570 + BEQ 10$ + MOV #7417,R0 + MOV R0,R1 + COM R1 + BIT #2,@#177570 + BEQ 10$ + MOV #36163,R0 + MOV #37000,R1 +10$: MOV R1,R2 + SUB #2,R2 + BIC #1,R2 ; WAIT ADDRESS + MOV R2,R3 + BIC #177701,R3 ; ADDRESS OFFSET + MOV #0000001,40000(R3) ; WRITE WAIT + ADD #2,R3 + MOV #0000113,40000(R3) ; WRITE JMP (R3) + + MOV R2,R4 + ASH #-6,R4 + BIC #177600,R4 + MOV #1700,R5 + SUB R4,R5 ; PAR ADDRESS BASE FOR WAIT + MOV R2,R4 + ASH #-12.,R4 + BIC #177761,R4 ; PAR SELECT OFFSET + MOV R5,172240(R4) ; SUPER I SPACE + + MOV R1,R3 + ASH #-12.,R3 + BIC #177761,R3 ; PAR SELECT OFFSET + CMP R3,R4 ; SAME PAR + BEQ 30$ + MOV R1,R4 + ASH #-6,R4 + BIC #177600,R4 + MOV #1700,R5 + SUB R4,R5 ; PAR ADDRESS BASE FOR JMP + MOV R5,172240(R3) ; SUPER I SPACE +30$: + MOV #3,R4 + ADD @#177570,R4 + MOV #2,R3 + ADD PC,R3 +40$:JMP (R2) + SOB R4,40$ + MOV R0,R2 + ROR R2 ; ROTATE PATTERN + ROL R1 + ROR R0 + BR 10$ +SUPERE: + + +BOOT: + CLR R3 ; UNIT +1$: MOVB (R2)+,R1 + BEQ BOOTRK ; DEFAULT DEVICE IS RK0 + CMPB R1,#40 + BEQ 1$ + CMPB R1,#'R + BEQ 5$ + + MOV #BADBOO,R0 + JSR PC,PRINT + RTS PC + +5$: MOVB (R2)+,R1 ; HOPEFULLY K, L OR P +7$: MOVB (R2)+,R0 ; DIGIT + BEQ 9$ + CMPB R0,#40 + BEQ 9$ + CMPB R0,#'7 + BGT 11$ + SUB #'0,R0 + BLT 11$ + ASL R3 + ASL R3 + ASL R3 + BIS R0,R3 ; PUT DIGIT INTO UNIT + BR 7$ +9$: CLR R2 + MOV #137,(R2)+ + MOV #START,(R2)+ + MOV #START,(R2)+ + CLR (R2)+ + CMPB R1,#'K + BEQ BOOTRK + CMPB R1,#'L + BEQ BOOTRL + CMPB R1,#'P + BEQ BOOTRP + +11$: MOV #UNKMSG,R0 + JSR PC,PRINT + RTS PC + +RLCS=174400 +BOOTRL: + RESET + SWAB R3 ; UNIT NUMBER + MOV #RLCS,R1 ; CSR + MOV #13,4(R1) ; CLR ERR + BIS #4,R3 ; UNIT+GSTAT + MOV R3,(R1) ; ISSUE CMD + TSTB (R1) ; WAIT + BPL .-2 + CLRB R3 + BIS #10,R3 ; UNIT+RDHDR + MOV R3,(R1) ; ISSUE CMD + TSTB (R1) ; WAIT + BPL .-2 + MOV 6(R1),R2 ; GET HDR + BIC #77,R2 ; CLR SECTOR + INC R2 ; MAGIC BIT + MOV R2,4(R1) ; SEEK TO 0 + CLRB R3 + BIS #6,R3 ; UNIT+SEEK + MOV R3,(R1) ; ISSUE CMD + TSTB (R1) ; WAIT + BPL .-2 + CLR 2(R1) ; CLR BA + CLR 4(R1) ; CLR DA + MOV #-512.,6(R1) ; SET WC + CLRB R3 + BIS #14,R3 ; UNIT+READ + MOV R3,(R1) ; ISSUE CMD + TSTB (R1) ; WAIT + BPL .-2 + BIC #377,(R1) + CLR R2 + CLR R3 + CLR R4 + CLR R5 + CLR PC + +RKDA=177412 +READGO=5 +BOOTRK: + RESET + SWAB R3 ; UNIT NUMBER + ASL R3 + ASL R3 + ASL R3 + ASL R3 + ASL R3 + MOV #RKDA,R1 ; CSR + MOV R3,(R1) ; LOAD DA + CLR -(R1) ; CLEAR BA + MOV #-256.*2,-(R1) ; LOAD WC + MOV #READGO,-(R1) ; READ & GO + CLR R2 + CLR R3 + CLR R4 + CLR R5 + TSTB (R1) + BPL .-2 + CLRB (R1) + CLR PC + +RPCSR=0176700 +BOOTRP: + RESET + MOV #RPCSR, R1 + MOV #0000040, 10(R1) ; RESET + MOV R3, 10(R1) ; SET UNIT + MOV #0000021, (R1) ; PACK ACK + MOV #0010000, 32(R1) ; 16B MODE + MOV #-512., 2(R1) ; SET WC + CLR 4(R1) ; CLR BA + CLR 6(R1) ; CLR DA + CLR 34(R1) ; CLR CYL + MOV #0000071, (R1) ; READ + TSTB (R1) ; WAIT + BPL .-2 + CLRB (R1) + CLR PC + + .END START diff --git a/modules/pdp11/lib/cpustate.js b/modules/pdp11/lib/cpustate.js index d9e8f03d1..9f8f0c38c 100644 --- a/modules/pdp11/lib/cpustate.js +++ b/modules/pdp11/lib/cpustate.js @@ -879,7 +879,7 @@ CPUStatePDP11.prototype.trap = function(vector, reason) this.opFlags &= ~PDP11.OPFLAG.TRAP_MASK; // lose interest in traps after an abort this.trapPSW = -1; // reset flag that we have a trap within a trap - if (DEBUG) this.println("trap to vector " + str.toOct(vector, 3) + (reason? " (reason " + reason + ")" : "")); + if (DEBUG && this.dbg) this.dbg.println("trap to vector " + this.dbg.toStrBase(vector) + (reason? " (reason " + reason + ")" : "")); throw vector; };