|
DataMuseum.dkPresents historical artifacts from the history of: RC4000/8000/9000 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC4000/8000/9000 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 22272 (0x5700) Types: TextFile Names: »cgaciatstt1«
└─⟦621cfb9a2⟧ Bits:30002817 RC8000 Dump tape fra HCØ. Detaljer om "HC8000" projekt. └─⟦0364f57e3⟧ └─⟦this⟧ »cgaciatstt1«
s. a50,b122,c35,d120,f120,i25,h20,p5 , g100 w.; 0 ; 0 ; 0 ; jl. b120. ; goto start. ;; reg. dump addrs + 0 = w0 ;; 2 = w1 ;; 4 = w2 ;; 6 = w3 ;; 8 = status ;; 10 = ic ;; 12 = cause ;; 14 = addrs. ;; ;; process definition reg.s. ;; reg. dump adress + efective addrs of 'ri' instr. ;; + 0 = cpa ( common protected area ). ;; + 2 = base ;; + 4 = lowlim ;; + 6 = uplim ;; + 8 = intlim. ; device channel address blocks. 0,r.20 b30: 0,r.5 ; 1. static definition ; process definition addrs. ; b10: 0,r.8 ; 1. reg dump addrs b31: 0,r.5 ; 2. process definition reg. addrs. b11: 0,r.8 ; 2. reg dump addrs b32: 0,r.5 ; 3. proces definition regisster addrs. b12: 0,r.8 ; 3. reg dump addrs 0,r.6 b33: ; 4. process definition reg. addrs. 0 ; cpa should be set to b90 0 ; base = 0 0 ; low lim schold be set to b100 0 ; upper lim schold be set to b101. 256 ; interupt limit. b13: 0,r.8 ; 4. reg dump addrs. ; + 10 schould be set to b100. ;; sys information reg. inf, points to 2. ;; half word of status/intlim initialisatiosation in ;; sys tab entry. ;; the sys tab entry consist of 6 consequtive words ;; with the following contents: ;; inf - 5 = monitor call service addrs ;; inf - 3 = interupt service addrs ;; inf - 1 = status/intlim initialisation. ;; inf + 1 = reg. dump addrs. ;; inf + 3 = exeption service addrs ;; inf + 5 = escape service addrs b20: 0,r.6 ; 1. sys tab entry ; b21: 0,r.6 ; 2. sys tab entry b22: 0,r.6 ; 3. sys tab entry, monitor table. b23: ; 4. sys tab entry. 0 ; monitor call service addrs 0 ; interupt service addrs. 0 ; status interupt limit addrs 0 ; reg dump addrs. 0 ; exeption service addrs 0 ; escape service addrs. ;; status reg. constant. h. ; d10: 0,256 ; status 0, interupt limit 0 d13: 6,6 ; monitor process interupt limit. d14: 256,256 ; user process interupt limit w. ; d11: 1<23+6 ; monitor mode , interupt limit 6 d12: 1<23 ; monitor mode. d5: 5 ; relative inf init from sys tab start. b66: 0 ; addrs of current sys tab. b68: 0 ; addrs of next sys tab. -1 ; last in systam tab. d80: ;et current process register dump place. ; call w3 = return address. ; ; result: w2 = tart of dynamic register dump area. rl. w2 b66. ; could be taken from ; information register instead. al w2 x2+12 ; get from monitor to process table. al w2 x2+1 ; get to reg dump address. rl w2 x2 ; load reg dump address. jl x3 ; return. d20: ; data out channel start. ; w0 = address of buffer. ; w3 = no af half words to be transferred. ; ; device no is 1 is used. ; device 1 is part of the rh device number. al w2 1 ; get device number. ls w2 3 ; device number times 8. al w2 x2+2 ; second word of device block. wa w2 8 ; add address of device base. ds w0 x2 ; save buffer address and no of ; words transferred. rs. w0 d23. ; save buffer address. al w2 -2 wa w2 0 ; get buffer state address. al w1 2 ; save state data out channel rs w1 x2 ; in buffer state. rl. w2 b117. ; get flag data out in progress. al w2 x2+2 ; in crease flag counter. rs. w2 b117. ; save flag data out . do. w2 ( d22. ; data out channel start. rs. w2 d25. ; save result word. jl. i2. ; goto start next process. d22: 1<23+1<3+2.001 ; effective address for start ; of channel data in as device 22. d23: 0 ; buffer address. d25: -22222 ; return word from data out insttr. d30: ; data in channel start. ; w0 = address of buffer ; w3 = no of half words transferred ( not used). ; ; device no 2 is used. ; device 2 is part of the rh device number. rl. w2 b116. ; al w2 x2-2 ; rs. w2 b116. ; decrease input interupt counter. rl. w2 b112. ; set flag indicating data in al w2 x2+2 ; channel operation in rs. w2 b112. ; progress. al w2 2 ; get device number. ls w2 3 ; device number := device number * 8; al w2 x2+2 ; get address of second word in device block. wa w2 8 ; add address of bevice blocks base. ds w0 x2 ; save buffer address and ; no of words transferred. rs. w0 d33. ; save current buffer address. rl w2 0 ; get buffer state address. al w2 x2-2 ; al w1 1 ; state channel data input. rs w1 x2 ; save buffer state. di. w2 ( d31. ; data in channel start. rs. w2 d35. ; save word. jl. i2. ; goto start next process. d31: 1<23+2<3+2.001 ; effective address for start ; of channel data out as device 6. d33: -2 d35: -2 d36: -2 ; interupt cause. ; reset character device c. 1 a0 = 1 ; total set. p. <:hcacia:> ; load hcacia procedures. z. ;; ++++++++++++++++++++++ b40: ;; monitor call addrs. ;; +++++++++++++++++++++++ b. c20 w. ; monitor call block. jl. x2+f120. ; switch to function. f120:jl 10 ; 1<11+0 monitor 0 goto init. jl. i2. ; 1<11+2 swop process. jl. c2. ; 1<11+4. jl. f120. ; entry 1 < 11 + 6 can not be used. jl. d20. ; 1<11+8 data out channel start. jl. d30. ; 1<11+10 data in channel start. ; jd 1<11 + 12 jl. c0. ; character devisce reset. ; jd 1<11+14 jl. c1. ; character device write. ; jd 1<11+16 jl. c3. ; initialise interupt controler. ;; jd 1<11+18 read acia device. jl. c5. ; ;; jd 1<11 + 20 reset and init acia as communication line. jl. c6. ; ;; jd 1<11+22 special test function. jl. c19. ;; error in call al w0 -20 gp w0 64 jl. -4 ; stop. c0: ;; reset character device. al w2 x3 ; load device address. al w1 8 ; load kind terminal/console. jl. w3 g20. ; reset character device. jl. w3 g33. ; set transmit disable and recieve enable. jl. i15. ; same process. c19: ; special monitor entry. al w1 x1-16 ; get address of register dump. rl w2 x1+8 ; load status register. lo w2 x1 ; mask dumped wo into status register. rs w2 x1+8 ; save status register. rs. w2 b112. jl. i15. ; continue in same process. c1: ;; write char on character device b. i0 w. al w2 x3 ; load device address. jl. w3 g26. ; call write character device. jl. w3 g34. ; call enable transmit and recieve. jl. i2. ; swop process. c6: ;; reset and init communication line. al w2 x3 ; load device address. al w1 92 ; load kind for communication line. jl. w3 g20. ; call reset communication line. jl. w3 g33. ; sat transmit diable receive enable. jl. i15. ; return to same process. c2: al w1 x1-14 ; get dump address. rs. w1 i0. ; save reg dump address. rl w2 x3 ; get device address. jl. w3 g22. ; read status. rs. w0 ( i0. ; save status in dumped w1. jl. i15. ; call same. c5: ;; read acia device. al w1 x1-16 ; calc. address of dumped w0. rs. w1 i0. ; save address of dumped w0. al w2 x3 ; get device address. jl. w3 g24. ; call read acia. rl. w2 i0. ; get register dump address. rs w0 x2 ; save data octet in dumped w0. rs w1 x2+2 ; save result in dumped w1. jl. i15. ; call same. c3: ;; initialise and reset interupt controler. al w2 8 al. w1 b99. jl. w3 g18. jl. i15. ; same process. i0: 0 ; register dump address. e. ;; end block write char. e. ;; end monitor block. ;; +++++++++++++++++++++ b41: ;; interupt tab intry. ;; +++++++++++++++++++++ ;; w2 = cause. ;; cause 14 = timer interupt (or from rc8000) ;; 16 = channel in put finis ;; 18 = channel input start ;; 20 = channel output finis ;; 22 = local dma device interupt. ;; 24 = character device interupt ( not in rh8000). b. c20 w. ;; interupt handling block. sn w2 18 ; if interupt cause = channel input start jl. c1. ; then start channel input . sn w2 16 ; if interupt cause = channel input finis jl. c2. ; then goto input channel finis control. sn w2 20 ; if interupt is data out channel finis jl. c0. ; then goto c0. sn w2 14 ; if interupt = rh8000 interupt then jl. c19. ; next process. ; else sn w2 24 ; if interupt = 24 then jl. c4. ; goto handel character interupt. ; else ;; error al w1 -1 ls w1 12 gp w2 64 gp w1 64 jl. -4 ; repeat c0: ; interupt data out channel stop. rl. w2 b117. ; decrease dataout in progress al w2 x2-2 ; counter. rs. w2 b117. ; rl. w2 d23. ; get buffer address. al w2 x2-2 ; calculate state address. al w1 4 ; save state after data out, i.e ready ; for data in. rs w1 x2 ; after data out. jl. i2. ; goto swop process. c2: ; input channel finis. rl. w2 d33. ; get buffer address. al w2 x2-2 ; calculate buffer state address. al w1 3 ; save state indicating rs w1 x2 ; after data in. rl. w1 b112. ; clear flag indicating data in al w1 x1-2 ; data in channel operation rs. w1 b112. ; in progress. jl. i2. ; goto swop process. c1: ; handling of channel input start interupt. di. w1 (c20. ; start data in. gp w1 64 ; show data word read. rs. w1 b116. ; store data word read. sl w1 2 ; if data word read then jl. 0 al w1 x1-1 do. w1 (c20. jl. i15. ; goto same process. c19: ;; at timer interupt. rl. w1 b11.+2 al w1 x1+1 rs. w1 b11.+2 jl. i15. ; return in same process. c20: 1<23+20<3+2.001 ; communication block interface. c3: 0 ; flag indicating that interupt channel ; input had been handled. g1: c4: ;;handling of character device interupt. ; b. c20 w. ;; block handle character device. jl. w3 g35. ; get acia interupt controler. sn. w3 ( f0. ; if interupt no = device nothen jl. c11. ; goto.continue else ;; error al w2 -2 ls w2 12 gp w3 64 gp w2 64 rl. w1 f0. gp w1 64 jl. -8 c11: rs. w3 c4. ; save interupt ( device ) no. rs. w2 c10. ; save complete device no. c8: sn w1 4 ; if status = 4 then jl. c9. ; goto disable interupt. se w1 2 ; if 2 or sn w1 6 ; 6 then jl. c2. ; goto c2. ;; error ;; al w2 -3 ;; gp w2 64 ;; gp w0 64 jl. w3 g32. ; call enable receive disable transmit jl. i15. ; goto same c2: rl. w2 c4. ; get original device address. jl. w3 g24. ; read data char. sn w1 0 ; if data read then jl. c5. ; goto save octet. jl. w3 g28. ; call read char with no check. jl. c6. ; goto continue. c5: rs. w0 b118. ; save data char. c6: jl. w3 g33. ; call reestablish enable/disable transmit/recieve. jl. i16. ; call b100 process.. c9: ;; call disable transmit interupt ;; and return to process write character. rl. w2 c10. ; reestablish complete control device no. jl. w3 g33. ; call disable transmit enable recieve. jl. i17. ; start b110 process . c3: 0 ; save d status. c4: 0 ; saved device no. c10: 0 ; complete return address. e. ;; end bloch handle char interupt. ;; exeption address and escape address. ;; b42: ;; exeption address. b43: ;; escape address. jl. 0 e. ; end monitor jump table , and monitor ;procedure block. b120: ; start ; init of user proc in b100. al. w1 b33. ; addrs of process definition reg.s al. w0 b90. ; addrs of cpa. rs w0 x1 ; save cpa in user pt&roc def. reg. al. w3 b100. ; get addrs of low lim. ; al. w0 b101. ; get upper limit. ds w0 x1+6 ; save upper limit. rl. w0 d14. ; interupt limit rs w0 x1+8 ; save interupt limit ; init of 2. user process. al. w1 b31. ; addrs of 2. user process ; process definition reg.s. al. w0 b90. ; addrs of cpa. rs w0 x1 ; save cpa. al. w3 b110. ; get lower limit. al. w0 b111. ; get upper limit. ds w0 x1+6 ; save upper limit. rl. w0 d14. ; get inter limit. rs w0 x1+8 ; save interupt limit. ; init of first user proc reg. (ic). al. w2 b13. ; get reg. addrs. al. w0 b100. ; get user proc start addrs. ; set user proc in monitor mode. rl. w3 d12. ; get status reg contents for monitor ; mode. ds w0 x2+10 ; save monitor mode in user proc st ; status register. ; init of 2. user proc reg. (ic). al. w2 b11. ; get reg addrs al. w0 b110. ; get user proc start addrs. ; set user proc in monitor mode. rl. w3 d12. ; get status register contents ; for monitor mode. ds w0 x2+10 ; save monitor mode in user proc. ; init of first user proc sys tab. al. w2 b23. ; get addrs of sys tab to user program. rl. w0 d11. ; get status/ interupt limit init. al. w1 b13. ; get addrs of reg dump addrs jl. w3 b50. ; call init of sys tab. rl. w0 d11. ; get status and inter limit . al. w2 b21. ; addrs of 2. suer proc sys tab. al. w1 b11. ; reg. dump addrs of 2. user proc. jl. w3 b50. ; call init of sys tab. jl. b80. ; goto continue. b50: ;; subroutine init of sys tab. ;; w2 = addrs of sys tab. ;; w1 = addrs of reg dumb addrs of user proc. ;; w0 = status interupt limit initialisation. ;; w3 = return addrs. rs w0 x2+4 ; save status and interupt limit. ; al. w0 b40. ; get addrs of monitor call. rs w0 x2 ; save monitor call addrs in syetm tab. al. w0 b41. ; get addrs of interupt servece. rs w0 x2+2 ; save interupt service addrs in sys tab. rs w1 x2+6 ; save reg dump addrs of user process in ; sys tab. al. w0 b116. ; ; al w0 0 ; get std exeption ;address. rs w0 x2+8 ; save exeption al w0 0 ; get std escape address. rs w0 x2+10 ; save escape. jl x3 ; return from subroutine. b51: ;; subroutine init of process definition ;; registers for a monitor process. ;; call: w2 = address of 1. process definition register. ;; w3 = return address. ;; ;; return w0 = destroyed. al w0 0 ; w0 := 0. rs w0 x2 ; cpa := 0. rs w0 x2+2 ; base := 0. al w0 8 ; w0 := 8. rs w0 x2+4 ; lowerlimit := 8. rl. w0 b52. ; get max upper limit. rs w0 x2+6 ; upperlimit := max. rl. w0 b53. ; get interupt limit 6,6 rs w0 x2+8 ; save interupt limit jl x3 ; return from subroutine. b52: 8000000 ; upper limit b53: 6<12+6 ; disable level + enable level. ; b80: ; continue. ; init of first monitor tab. rl. w0 d12. ; status and interupt limit init for ; monitor ; process. status := monitor mode ; interupt limit :=0. al. w1 b10. ; reg dump addres. rl. w3 d12. ; get monitor mode init. rs w3 x1+8 ; save monitor mode. al. w2 b20. ; sys tab addrs. jl. w3 b50. ; call init of sys tab. ; init of 2. monitor tab. rl. w0 d12. ; status := monitor mode interupt limit ; := 0. al. w1 b12. ; reg dum addrs. rl. w3 d12. ; get monitor mode. rs w3 x1+8 ; init reg dump status. al. w2 b22. ; sys tab addrs. jl. w3 b50. ; call init of sys tab. al. w2 b30. ; w0 := address of process definition ; register for monitor proc 1. jl. w3 b51. ; call subroutine init of monitor ; process definition registers. al. w2 b32. ; w0 := address of process definition ; registers for monitor proc 2. jl. w3 b51. ; call subroutine init of monitor ; process definition registers. ; b22 = process in b100 ; b20 = process in b110. b121:al. w3 b20.+5 ; get addrs of 1 monitor sys tab. ; address of process in b110. al. w2 b22.+5 ; get addrs of 2. monitor sys tab. ; address of process in b100. ds. w3 b68. ; save addrs of next and current. gp w2 26 ; init of information reg. ;; first process is b110. al w2 8 ; w2 := interupt controler address. al. w1 b99. ; w1 := first interupt level value. jl. w3 g18. ; call init of interupt controler. jl. w3 g0. ; call subroutine init of timer jd 1<11+2 ; start b99: 64,66,68,70,72,74,76,78 ; init value in first interupt controler. c. 1 p. <:hctimerinit:> ; load timer init code. l. z. c. 1 p. <:hcintrinit:> ; get interupt controler init code. l. z. ; interupt and monitor call service. i17: ;; start process in b110. al. w3 b22.+5 ; al. w2 b20.+5 ; get addres of monitor tab for process ; in b110. ds. w3 b68. ; save address of next and current. jl. i15. ; goto start same. i16: ;; start process in b100. al. w2 b22.+5 ; load address of process in b100. al. w3 b20.+5 ; load address of montab of process in b110. ds. w3 b68. ; save mon tab address. ; continue in start same. i15: ; ; same process rl. w3 b66. ; get address of system table of current. gp w3 26 ; init information register with ; value of current system table. ri -10 ; return from interupt to n ; last current. i2: ; monitor call service. ; from call 2. dl. w3 b68. ; get addrs of current and next. rs. w2 b68. ; next := current. rs. w3 b66. ; current := next. gp w3 26 ; inf reg := symbol tab of next. ri -10 ; call return from intprt effective addrs b90: ; cpa limit b. c10, d10 w. p. <:hcloadbl1:> e. ; ▶EOF◀