mirror of
https://github.com/livingcomputermuseum/UniBone.git
synced 2026-01-27 20:37:36 +00:00
Start MSCP test, KW11 without "line monitor bit clear"
This commit is contained in:
@@ -12,6 +12,29 @@ duiflg: .word 1 ; Interrupt flags
|
||||
|
||||
dubuff: .blkw 1000+1 ; data buffer: 512 words
|
||||
|
||||
durpkt: .blkw 70 ; rpkt structure, guessed from M9312 code
|
||||
.word 4711 ; guard word, overwritten?
|
||||
ducpkt: .blkw 100 ; cpkt structure
|
||||
.word 4712 ; guard word, overwritten?
|
||||
ducomm: .blkw 100 ; comm structure
|
||||
.word 4713 ; guard word, overwritten?
|
||||
|
||||
; MSCP init and command data
|
||||
; pointed to by r3
|
||||
dudt:
|
||||
.word 100000 ; S1: 100000 = no int, ring size 1, no vector
|
||||
.word ducomm ; S2: 002404 = ringbase lo addr
|
||||
.word 000000 ; S3: 000000 = no purge/poll, ringbase hi addr
|
||||
.word 000001 ; S4: 000001 = go bit
|
||||
;
|
||||
; MSCP command data
|
||||
;
|
||||
.byte 011,000 ; cmd=011(online), bytecnt_hi=000(0)
|
||||
.byte 041,002 ; cmd=041(read), bytecnt_hi=002(512)
|
||||
.word 0
|
||||
|
||||
|
||||
|
||||
duecnt: .word 1 ; event counter
|
||||
|
||||
duisr:
|
||||
@@ -26,8 +49,49 @@ duinit:
|
||||
; --- Restart new DMA transmission
|
||||
dugo:
|
||||
mov #dubase,r1 ; r1 = controller base address
|
||||
; code from ROM 23-767A9 for M9312
|
||||
|
||||
; TODO: read block 0 like boot loader
|
||||
clr r0 ; unit #0
|
||||
mov r0,(r1)+ ; init controller (write IP), bump ptr
|
||||
mov #4000,r5 ; S1 state bitmask
|
||||
mov #dudt,r3 ; point to data
|
||||
halt
|
||||
|
||||
; write 4 init words, with r5 mask from 4000 to 40000
|
||||
1$: tst (r1) ; error bit set ?
|
||||
bpl 2$
|
||||
halt ; halt on error
|
||||
2$: bit (r1),r5 ; step bit set ?
|
||||
beq 1$ ; not yet, wait loop
|
||||
mov (r3)+,(r1) ; yes, send next init data
|
||||
asl r5 ; next mask
|
||||
bpl 1$ ; s4 done? br if not yet
|
||||
|
||||
4$: mov #dubuff,r2 ; set bufptr to 0
|
||||
5$: clr (r2)+ ; clear buffer [0..2403]
|
||||
cmp r2,#ducomm ; check for end of buffer
|
||||
bne 5$ ; loop if not done
|
||||
|
||||
; 1st loop: Drive online. 2nd loop: read block
|
||||
mov r2,@#ducpkt-4 ; r2= ducomm. set lnt -- R2=2404
|
||||
movb (r3)+,@#ducpkt+10 ; R3 in init data - set command
|
||||
movb (r3),@#ducpkt+15 ; set bytecnt(hi)
|
||||
mov r0,@#ducpkt+4 ; set unit
|
||||
mov #durpkt,(r2)+ ; rq desc addr
|
||||
mov r5,(r2)+ ; rq own bit15
|
||||
mov #ducpkt,(r2)+ ; cp desc addr
|
||||
mov r5,(r2)+ ; cq own bit15
|
||||
mov -2(r1),r2 ; wake controller (read IP)
|
||||
|
||||
6$: tst @#ducomm+2 ; rq own controller ?
|
||||
bmi 6$ ; loop if not done
|
||||
|
||||
tstb @#durpkt+12 ; check for error ?
|
||||
beq 7$
|
||||
halt ; yup, fail back to begin to retry
|
||||
7$:
|
||||
tstb (r3)+ ; check end of table ?
|
||||
beq 4$ ; br if not yet
|
||||
|
||||
|
||||
inc duecnt ; register as event
|
||||
|
||||
@@ -25,5 +25,7 @@ kwinit:
|
||||
|
||||
; --- Restart new INTR
|
||||
kwgo:
|
||||
; nothing todo, INTR repeated automatically
|
||||
; bic #200,@#kwbase ; clear INTERRUPT MONITOR bit
|
||||
return
|
||||
|
||||
|
||||
@@ -24,8 +24,8 @@
|
||||
24
|
||||
25 ; enable tests
|
||||
26 000001 kwenab = 1
|
||||
27 000001 rkenab = 1
|
||||
28 000001 rlenab = 1
|
||||
27 000000 rkenab = 0
|
||||
28 000000 rlenab = 0
|
||||
29 000000 ryenab = 0 ; not yet tested
|
||||
30 000000 duenab = 0 ; not yet implemeneted
|
||||
31
|
||||
@@ -36,28 +36,28 @@
|
||||
36 ; Vectors
|
||||
37
|
||||
38 000060 . = corvec
|
||||
39 000060 001262 .word corisr ; RCV interrupt
|
||||
39 000060 001170 .word corisr ; RCV interrupt
|
||||
40 000062 000340 .word 340
|
||||
41 000064 . = coxvec
|
||||
42 000064 001276 .word coxisr ; XMT interrupt
|
||||
42 000064 001204 .word coxisr ; XMT interrupt
|
||||
43 000066 000340 .word 340
|
||||
44
|
||||
45 000001 .if ne kwenab
|
||||
46 000100 . = kwvect
|
||||
47 000100 001522 .word kwisr ; periodic interrupt
|
||||
47 000100 001430 .word kwisr ; periodic interrupt
|
||||
48 000102 000340 .word 340
|
||||
49 .endc
|
||||
50
|
||||
51 000001 .if ne rlenab
|
||||
52 000160 . = rlvect ; RL11
|
||||
53 000160 004644 .word rlisr
|
||||
54 000162 000340 .word 340
|
||||
51 000000 .if ne rlenab
|
||||
52 . = rlvect ; RL11
|
||||
53 .word rlisr
|
||||
54 .word 340
|
||||
55 .endc
|
||||
56
|
||||
57 000001 .if ne rkenab
|
||||
58 000220 . = rkvect ; RK11
|
||||
59 000220 002566 .word rkisr
|
||||
60 000222 000340 .word 340
|
||||
57 000000 .if ne rkenab
|
||||
58 . = rkvect ; RK11
|
||||
59 .word rkisr
|
||||
60 .word 340
|
||||
61 .endc
|
||||
62
|
||||
63 000000 .if ne ryenab
|
||||
@@ -84,16 +84,16 @@
|
||||
84 001004 005037 177776 clr @#psw ; priorty level 0, allow INTR
|
||||
85 ; Initialize devices
|
||||
86 001010 000005 reset
|
||||
87 001012 004737 001304 call corini
|
||||
88 001016 004737 001320 call coxini
|
||||
87 001012 004737 001212 call corini
|
||||
88 001016 004737 001226 call coxini
|
||||
89 000001 .if ne kwenab
|
||||
90 001022 004737 001534 call kwinit
|
||||
90 001022 004737 001442 call kwinit
|
||||
91 .endc
|
||||
92 000001 .if ne rkenab
|
||||
93 001026 004737 002574 call rkinit
|
||||
92 000000 .if ne rkenab
|
||||
93 call rkinit
|
||||
94 .endc
|
||||
95 000001 .if ne rlenab
|
||||
96 001032 004737 004652 call rlinit
|
||||
95 000000 .if ne rlenab
|
||||
96 call rlinit
|
||||
97 .endc
|
||||
98 000000 .if ne ryenab
|
||||
99 call ryinit
|
||||
@@ -102,107 +102,108 @@
|
||||
102 call duinit
|
||||
103 .endc
|
||||
104
|
||||
105 001036 012701 004772 mov #shello,r1 ; Print "Hello" message
|
||||
106 001042 004737 001334 call puts
|
||||
105 001026 012701 001460 mov #shello,r1 ; Print "Hello" message
|
||||
106 001032 004737 001242 call puts
|
||||
107
|
||||
108 ; main loop: check interrupt flags, restart DMA
|
||||
109 ; process serial input
|
||||
110 loop:
|
||||
111 001046 004737 001060 call dokbd ; check keyboard input
|
||||
112 001052 004737 001116 call dodev ; check device activities
|
||||
113 001056 000773 br loop
|
||||
111 001036 004737 001050 call dokbd ; check keyboard input
|
||||
112 001042 004737 001110 call dodev ; check device activities
|
||||
113 001046 000773 br loop
|
||||
114
|
||||
115
|
||||
116
|
||||
117 ; --- check keyboard input
|
||||
118 dokbd:
|
||||
119 001060 004737 001466 call getc
|
||||
120 001064 103013 bcc 9$ ; nothing received
|
||||
119 001050 004737 001374 call getc
|
||||
120 001054 103014 bcc 9$ ; nothing received
|
||||
121 ; process char in r0
|
||||
122 001066 120027 000003 cmpb r0,#3
|
||||
123 001072 001006 bne 1$
|
||||
124 001074 012701 005063 mov #sbye,r1 ; ^C: print "Bye", back to monitor
|
||||
125 001100 004737 001334 call puts
|
||||
126 001104 000137 165020 jmp monitr
|
||||
127 1$:
|
||||
128 ; echo chars without special meaning
|
||||
129 001110 004737 001446 call putc
|
||||
130 9$:
|
||||
131 001114 000207 return
|
||||
132
|
||||
133 ; -- check device activities
|
||||
134 dodev:
|
||||
135 ; For all devices: restart device DMA if Interrupt received
|
||||
136 000001 .if ne kwenab
|
||||
137 001116 005737 001516 tst kwiflg
|
||||
138 001122 001412 beq 1$
|
||||
139 001124 005037 001516 clr kwiflg
|
||||
140 001130 004737 001550 call kwgo
|
||||
141 001134 012700 000127 mov #kwlabl,r0 ; progress printout
|
||||
142 001140 012701 001520 mov #kwecnt,r1
|
||||
143 001144 004737 001236 call progrs
|
||||
144 1$:
|
||||
145 .endc
|
||||
146
|
||||
147 000001 .if ne rkenab
|
||||
148 001150 005737 001560 tst rkiflg
|
||||
149 001154 001412 beq 2$
|
||||
150 001156 005037 001560 clr rkiflg
|
||||
151 001162 004737 002602 call rkgo
|
||||
152 001166 012700 000113 mov #rklabl,r0 ; progress printout
|
||||
153 001172 012701 002564 mov #rkecnt,r1
|
||||
154 001176 004737 001236 call progrs
|
||||
155 2$:
|
||||
156 .endc
|
||||
157 000001 .if ne rlenab
|
||||
158 001202 005737 002636 tst rliflg
|
||||
159 001206 001412 beq 3$
|
||||
160 001210 005037 002636 clr rliflg
|
||||
161 001214 004737 004660 call rlgo
|
||||
162 001220 012700 000114 mov #rllabl,r0 ; progress printout
|
||||
163 001224 012701 004642 mov #rlecnt,r1
|
||||
164 001230 004737 001236 call progrs
|
||||
165 3$:
|
||||
166 .endc
|
||||
167 000000 .if ne ryenab
|
||||
168 tst ryiflg
|
||||
169 beq 4$
|
||||
170 clr ryiflg
|
||||
171 call rygo
|
||||
172 mov #rylabl,r0 ; progress printout
|
||||
173 mov #ryecnt,r1
|
||||
174 call progrs
|
||||
175 4$:
|
||||
176 .endc
|
||||
177 000000 .if ne ryenab
|
||||
178 tst duiflg
|
||||
179 beq 5$
|
||||
180 clr duiflg
|
||||
181 call dugo
|
||||
182 mov #dulabl,r0 ; progress printout
|
||||
183 mov #duecnt,r1
|
||||
184 call progrs
|
||||
185 5$:
|
||||
186 .endc
|
||||
187
|
||||
188 001234 000207 return
|
||||
189
|
||||
122 001056 120027 000003 cmpb r0,#3
|
||||
123 001062 001007 bne 1$
|
||||
124 001064 012701 001551 mov #sbye,r1 ; ^C: print "Bye", back to monitor
|
||||
125 001070 004737 001242 call puts
|
||||
126 001074 000005 reset ; stop devices
|
||||
127 001076 000137 165020 jmp monitr
|
||||
128 1$:
|
||||
129 ; echo chars without special meaning
|
||||
130 001102 004737 001354 call putc
|
||||
131 9$:
|
||||
132 001106 000207 return
|
||||
133
|
||||
134 ; -- check device activities
|
||||
135 dodev:
|
||||
136 ; For all devices: restart device DMA if Interrupt received
|
||||
137 000001 .if ne kwenab
|
||||
138 001110 005737 001424 tst kwiflg
|
||||
139 001114 001412 beq 1$
|
||||
140 001116 005037 001424 clr kwiflg
|
||||
141 001122 004737 001456 call kwgo
|
||||
142 001126 012700 000127 mov #kwlabl,r0 ; progress printout
|
||||
143 001132 012701 001426 mov #kwecnt,r1
|
||||
144 001136 004737 001144 call progrs
|
||||
145 1$:
|
||||
146 .endc
|
||||
147
|
||||
148 000000 .if ne rkenab
|
||||
149 tst rkiflg
|
||||
150 beq 2$
|
||||
151 clr rkiflg
|
||||
152 call rkgo
|
||||
153 mov #rklabl,r0 ; progress printout
|
||||
154 mov #rkecnt,r1
|
||||
155 call progrs
|
||||
156 2$:
|
||||
157 .endc
|
||||
158 000000 .if ne rlenab
|
||||
159 tst rliflg
|
||||
160 beq 3$
|
||||
161 clr rliflg
|
||||
162 call rlgo
|
||||
163 mov #rllabl,r0 ; progress printout
|
||||
164 mov #rlecnt,r1
|
||||
165 call progrs
|
||||
166 3$:
|
||||
167 .endc
|
||||
168 000000 .if ne ryenab
|
||||
169 tst ryiflg
|
||||
170 beq 4$
|
||||
171 clr ryiflg
|
||||
172 call rygo
|
||||
173 mov #rylabl,r0 ; progress printout
|
||||
174 mov #ryecnt,r1
|
||||
175 call progrs
|
||||
176 4$:
|
||||
177 .endc
|
||||
178 000000 .if ne duenab
|
||||
179 tst duiflg
|
||||
180 beq 5$
|
||||
181 clr duiflg
|
||||
182 call dugo
|
||||
183 mov #dulabl,r0 ; progress printout
|
||||
184 mov #duecnt,r1
|
||||
185 call progrs
|
||||
186 5$:
|
||||
187 .endc
|
||||
188
|
||||
189 001142 000207 return
|
||||
190
|
||||
191 ; progress
|
||||
192 ; check if the counter with address in r1 is at
|
||||
193 ; 1024. if yes, print the char in r0
|
||||
194 progrs:
|
||||
195 ; bic #777700,(r1) ; mask counter to 0..63
|
||||
196 001236 042711 177400 bic #777400,(r1) ; mask counter to 0..255
|
||||
197 ; bic #776000,(r1) ; mask counter to 0..1023
|
||||
198 001242 001002 bne 9$
|
||||
199 001244 004737 001446 call putc ; is at 0: print label character
|
||||
200 9$:
|
||||
201 001250 000207 return
|
||||
202
|
||||
191
|
||||
192 ; progress
|
||||
193 ; check if the counter with address in r1 is at
|
||||
194 ; 1024. if yes, print the char in r0
|
||||
195 progrs:
|
||||
196 ; bic #777700,(r1) ; mask counter to 0..63
|
||||
197 001144 042711 177400 bic #777400,(r1) ; mask counter to 0..255
|
||||
198 ; bic #776000,(r1) ; mask counter to 0..1023
|
||||
199 001150 001002 bne 9$
|
||||
200 001152 004737 001354 call putc ; is at 0: print label character
|
||||
201 9$:
|
||||
202 001156 000207 return
|
||||
203
|
||||
204
|
||||
205 .include ma_cons.mac
|
||||
205
|
||||
206 .include ma_cons.mac
|
||||
1
|
||||
2 .title ma_cons - Serial Console I/O
|
||||
3 000060 corvec= 060 ; vector for Receiver
|
||||
@@ -215,30 +216,30 @@
|
||||
10
|
||||
11 ; -- ISRs, increment Interrupt FLags
|
||||
12
|
||||
13 001252 000001 corifl: .word 1 ; Interrupt flags
|
||||
14 001254 000001 coxifl: .word 1
|
||||
13 001160 000001 corifl: .word 1 ; Interrupt flags
|
||||
14 001162 000001 coxifl: .word 1
|
||||
15
|
||||
16 001256 corbuf: .blkw 1 ; data buffer
|
||||
17 001260 coxbuf: .blkw 1
|
||||
16 001164 corbuf: .blkw 1 ; data buffer
|
||||
17 001166 coxbuf: .blkw 1
|
||||
18
|
||||
19 corisr:
|
||||
20 001262 013737 177562 001256 mov @#corbas+2,corbuf ; read char, clear INTR
|
||||
21 001270 005237 001252 inc corifl
|
||||
22 001274 000002 rti
|
||||
20 001170 013737 177562 001164 mov @#corbas+2,corbuf ; read char, clear INTR
|
||||
21 001176 005237 001160 inc corifl
|
||||
22 001202 000002 rti
|
||||
23
|
||||
24 coxisr:
|
||||
25 001276 005237 001254 inc coxifl
|
||||
26 001302 000002 rti
|
||||
25 001204 005237 001162 inc coxifl
|
||||
26 001210 000002 rti
|
||||
27
|
||||
28 ; -- Initialize device after RESET
|
||||
29 corini:
|
||||
30 001304 012737 000100 177560 mov #100,@#corbas ; Bit 6 = Receiver Interrupt Enable
|
||||
31 001312 005037 001252 clr corifl
|
||||
32 001316 000207 return
|
||||
30 001212 012737 000100 177560 mov #100,@#corbas ; Bit 6 = Receiver Interrupt Enable
|
||||
31 001220 005037 001160 clr corifl
|
||||
32 001224 000207 return
|
||||
33 coxini:
|
||||
34 001320 012737 000100 177564 mov #100,@#coxbas ; Bit 6 = Transmitter Interrupt Enable
|
||||
35 001326 005037 001254 clr coxifl
|
||||
36 001332 000207 return
|
||||
34 001226 012737 000100 177564 mov #100,@#coxbas ; Bit 6 = Transmitter Interrupt Enable
|
||||
35 001234 005037 001162 clr coxifl
|
||||
36 001240 000207 return
|
||||
37
|
||||
38
|
||||
39
|
||||
@@ -247,69 +248,69 @@
|
||||
42 ; puts - print a string
|
||||
43 ; r1 = pointer, r0,r1 changed
|
||||
44 puts:
|
||||
45 001334 112100 movb (r1)+,r0 ; load xmt char
|
||||
46 001336 001403 beq 1$ ; string ends with 0
|
||||
47 001340 004737 001446 call @#putc
|
||||
48 001344 000773 br puts ; transmit nxt char of string
|
||||
49 001346 000207 1$: return
|
||||
45 001242 112100 movb (r1)+,r0 ; load xmt char
|
||||
46 001244 001403 beq 1$ ; string ends with 0
|
||||
47 001246 004737 001354 call @#putc
|
||||
48 001252 000773 br puts ; transmit nxt char of string
|
||||
49 001254 000207 1$: return
|
||||
50
|
||||
51
|
||||
52 ; putnum - print the octal number in r0
|
||||
53 001350 numbf0: .blkw 10 ; space to mount number string
|
||||
54 001370 numbf1 =.
|
||||
53 001256 numbf0: .blkw 10 ; space to mount number string
|
||||
54 001276 numbf1 =.
|
||||
55 putnum:
|
||||
56 001370 010346 mov r3,-(sp)
|
||||
57 001372 010002 mov r0,r2 ; r2 = shifter
|
||||
58 001374 012701 001370 mov #numbf1,r1 ; r1 = buffer pointer, backwards
|
||||
59 001400 112741 000000 movb #0,-(r1) ; set terminating 0
|
||||
56 001276 010346 mov r3,-(sp)
|
||||
57 001300 010002 mov r0,r2 ; r2 = shifter
|
||||
58 001302 012701 001276 mov #numbf1,r1 ; r1 = buffer pointer, backwards
|
||||
59 001306 112741 000000 movb #0,-(r1) ; set terminating 0
|
||||
60 ; repeat 6 times
|
||||
61 001404 012703 000006 mov #6,r3
|
||||
61 001312 012703 000006 mov #6,r3
|
||||
62 1$:
|
||||
63 001410 010200 mov r2,r0
|
||||
63 001316 010200 mov r2,r0
|
||||
64 ; extract lower 3 bits = octal digit
|
||||
65 001412 042700 177770 bic #177770,r0 ; r0 &= 0x07
|
||||
66 001416 062700 000060 add #60,r0 ; r0 += '0'
|
||||
67 001422 110041 movb r0,-(r1) ; write in buffer
|
||||
68 001424 000241 clc
|
||||
69 001426 006202 asr r2 ; shift to next digit
|
||||
70 001430 006202 asr r2
|
||||
71 001432 006202 asr r2
|
||||
72 001434 077313 sob r3,1$ ; loop for all 6 digits
|
||||
65 001320 042700 177770 bic #177770,r0 ; r0 &= 0x07
|
||||
66 001324 062700 000060 add #60,r0 ; r0 += '0'
|
||||
67 001330 110041 movb r0,-(r1) ; write in buffer
|
||||
68 001332 000241 clc
|
||||
69 001334 006202 asr r2 ; shift to next digit
|
||||
70 001336 006202 asr r2
|
||||
71 001340 006202 asr r2
|
||||
72 001342 077313 sob r3,1$ ; loop for all 6 digits
|
||||
73
|
||||
74 001436 004737 001334 call @#puts
|
||||
75 001442 012603 mov (sp)+,r3
|
||||
76 001444 000207 return
|
||||
74 001344 004737 001242 call @#puts
|
||||
75 001350 012603 mov (sp)+,r3
|
||||
76 001352 000207 return
|
||||
77
|
||||
78
|
||||
79 ; putc - output a single char
|
||||
80 ; r0 = char
|
||||
81 putc:
|
||||
82 001446 005037 001254 clr coxifl ; reset interrupt flag
|
||||
83 001452 010037 177566 mov r0,@#coxbas+2 ; char into transmit buffer
|
||||
84 001456 005737 001254 1$: tst coxifl ; XMT RDY?
|
||||
85 001462 001775 beq 1$ ; no, loop
|
||||
82 001354 005037 001162 clr coxifl ; reset interrupt flag
|
||||
83 001360 010037 177566 mov r0,@#coxbas+2 ; char into transmit buffer
|
||||
84 001364 005737 001162 1$: tst coxifl ; XMT RDY?
|
||||
85 001370 001775 beq 1$ ; no, loop
|
||||
86 ; UART is buffering: char only started to sent now
|
||||
87 ; interrupt active until next putc
|
||||
88 001464 000207 return
|
||||
88 001372 000207 return
|
||||
89
|
||||
90 ; getc - poll and input a single char
|
||||
91 ; result in r0
|
||||
92 ; carry clear : nothing received
|
||||
93 ; carry set: char received
|
||||
94 getc:
|
||||
95 001466 005000 clr r0
|
||||
96 001470 005737 001252 tst corifl
|
||||
97 001474 001002 bne 1$
|
||||
98 001476 000241 clc ; Carry clear, no Interrupt, nothing received
|
||||
99 001500 000207 return
|
||||
95 001374 005000 clr r0
|
||||
96 001376 005737 001160 tst corifl
|
||||
97 001402 001002 bne 1$
|
||||
98 001404 000241 clc ; Carry clear, no Interrupt, nothing received
|
||||
99 001406 000207 return
|
||||
100 1$:
|
||||
101 001502 013700 001256 mov corbuf,r0 ; Interrupt, return char
|
||||
102 001506 005037 001252 clr corifl ; reset interrupt flag
|
||||
103 001512 000261 sec ; Carry Set
|
||||
104 001514 000207 return
|
||||
101 001410 013700 001164 mov corbuf,r0 ; Interrupt, return char
|
||||
102 001414 005037 001160 clr corifl ; reset interrupt flag
|
||||
103 001420 000261 sec ; Carry Set
|
||||
104 001422 000207 return
|
||||
104
|
||||
206 000001 .if ne kwenab
|
||||
207 .include ma_kw.mac
|
||||
207 000001 .if ne kwenab
|
||||
208 .include ma_kw.mac
|
||||
1 .title ma_kw - KW11 test driver
|
||||
2
|
||||
3 ; KW11 raises INTR at 50 Hz
|
||||
@@ -320,171 +321,80 @@
|
||||
8
|
||||
9
|
||||
10 ; --- ISRs, increment Interrupt FLags
|
||||
11 001516 000001 kwiflg: .word 1 ; Interrupt flags
|
||||
11 001424 000001 kwiflg: .word 1 ; Interrupt flags
|
||||
12
|
||||
13 001520 000001 kwecnt: .word 1 ; event counter
|
||||
13 001426 000001 kwecnt: .word 1 ; event counter
|
||||
14
|
||||
15 kwisr:
|
||||
16 001522 005237 001520 inc kwecnt ; register as event
|
||||
17 001526 005237 001516 inc kwiflg ; set ISR flag
|
||||
18 001532 000002 rti
|
||||
16 001430 005237 001426 inc kwecnt ; register as event
|
||||
17 001434 005237 001424 inc kwiflg ; set ISR flag
|
||||
18 001440 000002 rti
|
||||
19
|
||||
20 ; --- Initialize device after RESET
|
||||
21 kwinit:
|
||||
22 001534 012737 000100 177546 mov #100,@#kwbase ; set interrupt enable
|
||||
23 001542 005037 001520 clr kwecnt
|
||||
24 001546 000207 return
|
||||
22 001442 012737 000100 177546 mov #100,@#kwbase ; set interrupt enable
|
||||
23 001450 005037 001426 clr kwecnt
|
||||
24 001454 000207 return
|
||||
25
|
||||
26 ; --- Restart new INTR
|
||||
27 kwgo:
|
||||
28 001550 042737 000200 177546 bic #200,@#kwbase ; clear INTERRUPT MONITOR bit
|
||||
29 001556 000207 return
|
||||
30
|
||||
30
|
||||
208 .endc
|
||||
209 000001 .if ne rkenab
|
||||
210 .include ma_rk.mac
|
||||
1
|
||||
2 .title ma_rk - RK11/RK05 test driver
|
||||
3 ; RK11 DMA is generated by reading cylinder 0, head 0, sector 0
|
||||
4
|
||||
5 000220 rkvect = 220 ; vector of RK11 controller
|
||||
6 177400 rkbase = 777400 ; base addr of RK11 controller
|
||||
7 000113 rklabl = 'K ; label char
|
||||
8
|
||||
9 ; --- ISRs, increment Interrupt FLags
|
||||
10 001560 000001 rkiflg: .word 1 ; Interrupt flags
|
||||
11
|
||||
12 001562 rkbuff: .blkw 400+1 ; data buffer: 1 sector = 256 words
|
||||
13
|
||||
14 002564 000001 rkecnt: .word 1 ; event counter
|
||||
15
|
||||
16 rkisr:
|
||||
17 002566 005237 001560 inc rkiflg ; set ISR flag
|
||||
18 002572 000002 rti
|
||||
19
|
||||
20 ; --- Initialize device after RESET
|
||||
21 rkinit:
|
||||
22 002574 005037 002564 clr rkecnt
|
||||
23 002600 000207 return
|
||||
24
|
||||
25 ; --- Restart new DMA transmission
|
||||
26 rkgo:
|
||||
27 ; read first sector into rkbuff
|
||||
28 002602 005037 177412 clr @#rkbase+12 ; DA disk address = 0: unit 0, cyl/hd/sec=0
|
||||
29 002606 012737 001562 177410 mov #rkbuff,@#rkbase+10 ; BA bus address of DMA
|
||||
30 002614 012737 177400 177406 mov #-400,@#rkbase+6 ; WC word count = 256 words
|
||||
31 002622 012737 000105 177404 mov #100+4+1,@#rkbase+4 ; Command INT ENABLE + "READ" + GO
|
||||
32 002630 005237 002564 inc rkecnt ; register as event
|
||||
33 002634 000207 return
|
||||
34
|
||||
34
|
||||
211 .endc
|
||||
212 000001 .if ne rlenab
|
||||
213 .include ma_rl.mac
|
||||
1 .title ma_rl - RL11/RL01/2 test driver
|
||||
2
|
||||
3 ; RL11 DMA is generated by reading cylinder 0, head0, sector 0
|
||||
4
|
||||
5 000160 rlvect = 160 ; vector of RL11 controller
|
||||
6 174400 rlbase = 774400 ; base addr of RL11 controller
|
||||
7 000114 rllabl = 'L ; label char
|
||||
8
|
||||
9
|
||||
10 ; --- ISRs, increment Interrupt FLags
|
||||
11 002636 000001 rliflg: .word 1 ; Interrupt flags
|
||||
12
|
||||
13 002640 rlbuff: .blkw 2*400+1 ; data buffer: 2 sector = 256 words
|
||||
14
|
||||
15 004642 000001 rlecnt: .word 1 ; event counter
|
||||
16
|
||||
17 rlisr:
|
||||
18 004644 005237 002636 inc rliflg ; set ISR flag
|
||||
19 004650 000002 rti
|
||||
20
|
||||
21 ; --- Initialize device after RESET
|
||||
22 rlinit:
|
||||
23 004652 005037 004642 clr rlecnt
|
||||
24 004656 000207 return
|
||||
25
|
||||
26 ; --- Restart new DMA transmission
|
||||
27 rlgo:
|
||||
28 004660 012701 174400 mov #rlbase,r1 ; r1 = controller base address
|
||||
29
|
||||
30 ; sequence from boot loader 23-751A9, lot of testing
|
||||
31 ; 1. get status
|
||||
32 004664 012761 000013 000004 mov #013,4(r1) ; DA subcmd reset+getstatus
|
||||
33 004672 012711 000004 mov #4,(r1) ; CSR do "GET STATUS"
|
||||
34 004676 105711 1$: tstb (r1) ; test for ready
|
||||
35 004700 100376 bpl 1$ ; wait
|
||||
36 ; 2. read current track
|
||||
37 004702 012711 000010 mov #10,(r1) ; CSR read header cmd
|
||||
38 004706 105711 2$: tstb (r1) ; test for ready
|
||||
39 004710 100376 bpl 2$ ; wait
|
||||
40 ; 3. seek
|
||||
41 004712 016102 000006 mov 6(r1),r2 ; MP retrieve cyl/head/sector
|
||||
42 004716 042702 000077 bic #77,r2 ; set sector to zero
|
||||
43 004722 005202 inc r2 ; set seek flag, head 0, seek to cyl 0
|
||||
44 004724 010261 000004 mov r2,4(r1) ; DA for seek
|
||||
45 004730 012711 000006 mov #6,(r1) ; CSR seek cmd
|
||||
46 004734 105711 3$: tstb (r1) ; test for ready
|
||||
47 004736 100376 bpl 3$ ; wait
|
||||
48 ; 4. read sector 0+1 and interrupt
|
||||
49 004740 012761 002640 000002 mov #rlbuff,2(r1) ; BA bus address of DMA
|
||||
50 004746 005061 000004 clr 4(r1) ; DA select cyl0/head0/sector0
|
||||
51 004752 012761 177000 000006 mov #-512.,6(r1) ; MP set word count
|
||||
52 004760 012711 000114 mov #100+14,(r1) ; CSR read data cmd with Interrupt Enable
|
||||
53
|
||||
54 004764 005237 004642 inc rlecnt ; register as event
|
||||
55 004770 000207 return
|
||||
56
|
||||
56
|
||||
214 .endc
|
||||
215 000000 .if ne ryenab
|
||||
216 .include ma_ry.mac
|
||||
217 .endc
|
||||
218 000000 .if ne duenab
|
||||
219 .include ma_du.mac
|
||||
220 .endc
|
||||
221 .include ma_strings.mac
|
||||
28 ; nothing todo, INTR repeated automatically
|
||||
29 ; bic #200,@#kwbase ; clear INTERRUPT MONITOR bit
|
||||
30 001456 000207 return
|
||||
31
|
||||
31
|
||||
209 .endc
|
||||
210 000000 .if ne rkenab
|
||||
211 .include ma_rk.mac
|
||||
212 .endc
|
||||
213 000000 .if ne rlenab
|
||||
214 .include ma_rl.mac
|
||||
215 .endc
|
||||
216 000000 .if ne ryenab
|
||||
217 .include ma_ry.mac
|
||||
218 .endc
|
||||
219 000000 .if ne duenab
|
||||
220 .include ma_du.mac
|
||||
221 .endc
|
||||
222 .include ma_strings.mac
|
||||
1
|
||||
2 .title ma_strings - String constants
|
||||
3 shello:
|
||||
4 004772 015 012 .byte 15,12 ; space, CR, LF,
|
||||
5 004774 052 052 052 .ascii /*** Multi Device Interrupt&DMA test ***/
|
||||
004777 040 115 165
|
||||
005002 154 164 151
|
||||
005005 040 104 145
|
||||
005010 166 151 143
|
||||
005013 145 040 111
|
||||
005016 156 164 145
|
||||
005021 162 162 165
|
||||
005024 160 164 046
|
||||
005027 104 115 101
|
||||
005032 040 164 145
|
||||
005035 163 164 040
|
||||
005040 052 052 052
|
||||
6 005043 015 012 .byte 15,12 ; CR, LF
|
||||
7 005045 136 103 040 .ascii /^C to stop./
|
||||
005050 164 157 040
|
||||
005053 163 164 157
|
||||
005056 160 056
|
||||
8 005060 015 012 .byte 15,12 ; CR, LF
|
||||
9 005062 000 .byte 0
|
||||
4 001460 015 012 .byte 15,12 ; space, CR, LF,
|
||||
5 001462 052 052 052 .ascii /*** Multi Device Interrupt&DMA test ***/
|
||||
001465 040 115 165
|
||||
001470 154 164 151
|
||||
001473 040 104 145
|
||||
001476 166 151 143
|
||||
001501 145 040 111
|
||||
001504 156 164 145
|
||||
001507 162 162 165
|
||||
001512 160 164 046
|
||||
001515 104 115 101
|
||||
001520 040 164 145
|
||||
001523 163 164 040
|
||||
001526 052 052 052
|
||||
6 001531 015 012 .byte 15,12 ; CR, LF
|
||||
7 001533 136 103 040 .ascii /^C to stop./
|
||||
001536 164 157 040
|
||||
001541 163 164 157
|
||||
001544 160 056
|
||||
8 001546 015 012 .byte 15,12 ; CR, LF
|
||||
9 001550 000 .byte 0
|
||||
10
|
||||
11
|
||||
12 sbye:
|
||||
13 005063 015 012 .byte 15,12
|
||||
14 005065 107 157 157 .ascii /Good Bye!/
|
||||
005070 144 040 102
|
||||
005073 171 145 041
|
||||
15 005076 015 012 .byte 15,12 ; CR, LF
|
||||
16 005100 000 .byte 0
|
||||
13 001551 015 012 .byte 15,12
|
||||
14 001553 107 157 157 .ascii /Good Bye!/
|
||||
001556 144 040 102
|
||||
001561 171 145 041
|
||||
15 001564 015 012 .byte 15,12 ; CR, LF
|
||||
16 001566 000 .byte 0
|
||||
17
|
||||
17
|
||||
222
|
||||
223 .end
|
||||
224
|
||||
223
|
||||
224 .end
|
||||
225
|
||||
226
|
||||
226
|
||||
227
|
||||
227
|
||||
|
||||
@@ -24,8 +24,8 @@
|
||||
|
||||
; enable tests
|
||||
kwenab = 1
|
||||
rkenab = 1
|
||||
rlenab = 1
|
||||
rkenab = 0
|
||||
rlenab = 0
|
||||
ryenab = 0 ; not yet tested
|
||||
duenab = 0 ; not yet implemeneted
|
||||
|
||||
@@ -123,6 +123,7 @@ dokbd:
|
||||
bne 1$
|
||||
mov #sbye,r1 ; ^C: print "Bye", back to monitor
|
||||
call puts
|
||||
reset ; stop devices
|
||||
jmp monitr
|
||||
1$:
|
||||
; echo chars without special meaning
|
||||
@@ -174,7 +175,7 @@ dodev:
|
||||
call progrs
|
||||
4$:
|
||||
.endc
|
||||
.if ne ryenab
|
||||
.if ne duenab
|
||||
tst duiflg
|
||||
beq 5$
|
||||
clr duiflg
|
||||
|
||||
@@ -21,5 +21,10 @@ set ry enabled
|
||||
set ry0 double
|
||||
attach ry0 scratch.rx02_dd
|
||||
|
||||
# PDP11GUI
|
||||
set rq enabled
|
||||
set rq0 ra80
|
||||
attach rq0 scratch.ra80
|
||||
|
||||
|
||||
; PDP11GUI
|
||||
set stdio telnet=23
|
||||
|
||||
Reference in New Issue
Block a user