diff --git a/10.01_base/3_test/multiarb/ma_du.mac b/10.01_base/3_test/multiarb/ma_du.mac index 10b6824..5d25cd2 100644 --- a/10.01_base/3_test/multiarb/ma_du.mac +++ b/10.01_base/3_test/multiarb/ma_du.mac @@ -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 diff --git a/10.01_base/3_test/multiarb/ma_kw.mac b/10.01_base/3_test/multiarb/ma_kw.mac index ecf4759..1d1ee9a 100644 --- a/10.01_base/3_test/multiarb/ma_kw.mac +++ b/10.01_base/3_test/multiarb/ma_kw.mac @@ -25,5 +25,7 @@ kwinit: ; --- Restart new INTR kwgo: + ; nothing todo, INTR repeated automatically + ; bic #200,@#kwbase ; clear INTERRUPT MONITOR bit return diff --git a/10.01_base/3_test/multiarb/multiarb.lst b/10.01_base/3_test/multiarb/multiarb.lst index ef20f0b..d998f10 100644 --- a/10.01_base/3_test/multiarb/multiarb.lst +++ b/10.01_base/3_test/multiarb/multiarb.lst @@ -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 diff --git a/10.01_base/3_test/multiarb/multiarb.mac b/10.01_base/3_test/multiarb/multiarb.mac index f833d33..12bd962 100644 --- a/10.01_base/3_test/multiarb/multiarb.mac +++ b/10.01_base/3_test/multiarb/multiarb.mac @@ -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 diff --git a/10.01_base/3_test/multiarb/test.simh_pdp11 b/10.01_base/3_test/multiarb/test.simh_pdp11 index c962960..28ebdcd 100644 --- a/10.01_base/3_test/multiarb/test.simh_pdp11 +++ b/10.01_base/3_test/multiarb/test.simh_pdp11 @@ -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