650 lines
9.4 KiB
Text
650 lines
9.4 KiB
Text
; BOOT MONITOR
|
|
;
|
|
; REBASE HIGHER LINK/BOT:140000
|
|
; WANT PERFORMANCE COUNTER - CLOCK TICKS TO DO SOMETHING?
|
|
|
|
KW11LKS = 177546
|
|
KW11VEC = 100
|
|
|
|
DL11RCSR = 177560
|
|
DL11RBUF = 177562
|
|
DL11XCSR = 177564
|
|
DL11XBUF = 177566
|
|
DL11VEC = 64
|
|
|
|
PSW = 177776
|
|
|
|
.ASECT
|
|
.=140000
|
|
START: RESET
|
|
CLR @#PSW
|
|
MOV #START,SP
|
|
CLR @#DL11XCSR ; CLEAR THE XCSR
|
|
MOV #BANNER,R0
|
|
JSR PC,PRINT
|
|
MOV #CLKAST,@#KW11VEC
|
|
MOV #340,@#KW11VEC+2
|
|
BIS #100,@#KW11LKS ; 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
|
|
RTI
|
|
|
|
LGHTON: .WORD 0
|
|
CLKTIC: .WORD 0
|
|
|
|
CLKAST:
|
|
INC CLKTIC
|
|
RTI
|
|
|
|
ONECHR:
|
|
TSTB @#DL11XCSR
|
|
BPL ONECHR
|
|
MOVB R0,@#DL11XBUF
|
|
RTS PC
|
|
|
|
PRTPTR: .WORD 0
|
|
|
|
PRINT:
|
|
BITB #100,@#DL11XCSR
|
|
BNE PRINT
|
|
MOV R0,PRTPTR
|
|
MOV #PRTAST,@#DL11VEC
|
|
MOV #200,@#DL11VEC+2
|
|
BISB #100,@#DL11XCSR
|
|
RTS PC
|
|
|
|
PRTAST:
|
|
TSTB @PRTPTR
|
|
BEQ 2$
|
|
MOVB @PRTPTR,@#DL11XBUF
|
|
INC PRTPTR
|
|
RTI
|
|
2$: CLRB @#DL11XCSR
|
|
RTI
|
|
|
|
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,@#DL11RCSR
|
|
RTS PC
|
|
|
|
INPAST:
|
|
MOV R0,-(SP)
|
|
MOVB @#DL11RBUF,R0
|
|
BIC #340,@#PSW ; HACK TO PERMIT XBUF INTERRUPTS WHILE RBUF INTERRUPT HANDLER STILL RUNNING
|
|
CMPB R0,#15
|
|
BEQ 7$ ; CARRIAGE RETURN
|
|
CMPB R0,#127.
|
|
BEQ 2$ ; <DEL>
|
|
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
|
|
RTI
|
|
|
|
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,@#DL11XCSR
|
|
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
|
|
RTI
|
|
|
|
|
|
CMDTBL: .WORD BOOT,HALT,TEST,DIAG,LIGHTS,HELP
|
|
HLPMSG: .ASCIZ 'COMMANDS ARE BOOT, HALT, TEST, DIAG, LIGHTS 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 'DIAG'
|
|
.ASCIZ 'LIGHTS'
|
|
.ASCIZ 'HELP'
|
|
.BYTE 0
|
|
UNKMSG: .ASCIZ 'UNKNOWN COMMAND'<12><15>
|
|
BANNER: .ASCIZ 'PDP-11 MONITOR V1.0'<12><15><12><15>
|
|
; 'ADAPTED FROM CODE BY 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>
|
|
LOOMSG: .ASCIZ ' ITERATIONS'<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
|
|
|
|
LOOCNT: .WORD 0
|
|
|
|
DIAG:
|
|
CLR LOOCNT
|
|
CLR CLKTIC
|
|
DIAGLP:
|
|
CLR R5
|
|
BMI L1
|
|
BVS L1
|
|
BHI L1
|
|
BLT L1
|
|
BLOS L2
|
|
L1: HALT
|
|
|
|
L2: DEC R5
|
|
BPL L3
|
|
BEQ L3
|
|
BGE L3
|
|
BLE L4
|
|
L3: HALT
|
|
|
|
L4: ROR R5
|
|
BVC L5
|
|
BCC L5
|
|
BNE L6
|
|
L5: HALT
|
|
|
|
L6: MOVB #17,@#177776
|
|
BPL L7
|
|
BVC L7
|
|
BLT L7
|
|
BHI L7
|
|
BMI L8
|
|
L7: HALT
|
|
|
|
L8: MOV #77777,R3
|
|
ADD #77777,R3
|
|
CMPB @#177776,#5
|
|
BNE L9
|
|
HALT
|
|
|
|
L9: MOVB #1700,R4
|
|
BPL L10
|
|
CMP R4,#177700
|
|
BEQ L11
|
|
L10: HALT
|
|
|
|
L11: CLRB R4
|
|
CMP R4,#177400
|
|
BEQ L12
|
|
HALT
|
|
|
|
L12: MOV #125252,R5
|
|
MOV R5,R0
|
|
MOV R0,R1
|
|
MOV R1,R2
|
|
MOV R2,R3
|
|
MOV R3,R4
|
|
MOV R4,R5
|
|
SUB R5,R1
|
|
BLT NODIAG
|
|
BEQ L13
|
|
NODIAG: HALT
|
|
|
|
L13: ROL R2
|
|
BCC L14
|
|
BLT L15
|
|
L14: HALT
|
|
|
|
L15: ADD R2,R3
|
|
INC R3
|
|
COM R3
|
|
ADD R3,R1
|
|
BCS L16
|
|
BLE L17
|
|
L16: HALT
|
|
|
|
L17: ROR R4
|
|
BIS R4,R3
|
|
ADD R5,R3
|
|
INC R3
|
|
BCS L18
|
|
DEC R1
|
|
BLT L19
|
|
L18: HALT
|
|
|
|
L19: COM R0
|
|
BLOS L20
|
|
HALT
|
|
|
|
L20: BIC R0,R1
|
|
ADD R1,R1
|
|
BGT L21
|
|
BLE L22
|
|
L21: HALT
|
|
|
|
L22: SWAB R1
|
|
CMP R1,#052125
|
|
BNE L23
|
|
BIT R4,R5
|
|
BGT L23
|
|
COM R5
|
|
BNE L24
|
|
L23: HALT
|
|
|
|
L24: MOVB #177401,R0
|
|
BPL L26
|
|
L25: HALT
|
|
|
|
L26: SOB R0,L25
|
|
CLR R1
|
|
L27: INC R1
|
|
SOB R0,L27
|
|
TST R0
|
|
BNE L28
|
|
TST R1
|
|
BEQ L29
|
|
L28: HALT
|
|
|
|
L29: MOV #N1,PC
|
|
HALT
|
|
|
|
N1: TST (PC)+
|
|
HALT
|
|
|
|
N2: MOV #N3,-(SP)
|
|
RTS PC
|
|
HALT
|
|
|
|
N3: CLR -(SP)
|
|
MOV #N4,-(SP)
|
|
RTI
|
|
HALT
|
|
|
|
N4: JMP @#N5
|
|
HALT
|
|
|
|
N5: MOV #3,R5
|
|
CLR @#6
|
|
MOV #N6,@#4
|
|
TST -(R5)
|
|
HALT
|
|
N6: ADD #4,SP
|
|
|
|
CLR R0
|
|
MOV #7777,R1
|
|
N7: MOV R0,R2
|
|
ADD #5,R2
|
|
CMP (R0)+,-5(R2)
|
|
BEQ N8
|
|
HALT
|
|
D1: .WORD 0
|
|
|
|
N8: SOB R1,N7
|
|
|
|
INC LOOCNT
|
|
BCC 10$
|
|
HALT
|
|
10$: CMP CLKTIC,#2200
|
|
BHI 20$
|
|
JMP DIAGLP
|
|
20$: MOV #LOOMSG+5,R0
|
|
MOV LOOCNT,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)+ ; STORE "JMP @#140000" INSTRUCTION AT ADDRESS 0
|
|
MOV #START,(R2)+
|
|
MOV #START,(R2)+ ; STORE #140000 IN VECTOR 4, IN CASE OF TRAP TO 4
|
|
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)
|
|
MOV R3,R0
|
|
CLR PC
|
|
|
|
.END START
|