|
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: 16128 (0x3f00) Types: TextFile Names: »trhtst10«
└─⟦667bb35d6⟧ Bits:30007480 RC8000 Dump tape fra HCØ. └─⟦4334b4c0b⟧ └─⟦this⟧ »trhtst10«
s. a50,b121,c35,d120,f120,i25,h20,p5 w. ; k= 0 ; jl. b120. ; goto start. a1: 0 ; saved interupt register. ; 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. b30: 0 ; 1. static definition 0 0 0 0 ; process definition addrs. b10: 0 0 0 0 0 0 0 0 ; 1. reg dump addrs b31: 0 0 0 0 0 ; 2. process definition reg. addrs. b11: 0 0 0 0 0 0 0 0 ; 2. reg dump addrs b32: 0 0 0 0 0 ; 3. proces definition regisster addrs. b12: 0 0 0 0 0 0 0 0 ; 3. reg dump addrs 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 0 0 0 0 0 0 0 ; 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 0 0 0 0 0 ; 1. sys tab entry b21: 0 0 0 0 0 0 ; 2. sys tab entry ; system table error entry. b22: 0 0 0 0 0 0 ; 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: 0,0 ; monitor process interupt limit. d14: 256,256 ; user process interupt limit w. d11: 1<23+0 ; 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. -1,r.6 ; make roome for 6 more process. d20: ; data out channel start. ; w0 = address of buffer. ; w3 = no af half words to be transferred. ; ; device no is 22 is used. ; device 22 is part of the rh device number. al w2 22 ; 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 current 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+22<3+2.001 ; effective address for start ; of channel data in as device 22. d23: 0 ; current buffer address. d25: -222222 ; retrun word from data out. d30: ; data in channel start. ; w0 = address of buffer ; w3 = no of half words transferred ( not used). ; ; device no 21 is used. ; device 21 is part of the rh device number. rl. w2 b116. al w2 x2-2 rs. w2 b116. ; decrease input interupt counter. rl. w2 b112. ; al w2 x2+2 ; set flag indicating data in rs. w2 b112. ; channel operation in progress. al w2 21 ; 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 w3 x2-2 ; al w1 1 ; state channel data input. rs w1 x3 ; save buffer state. di. w2 (d31. ; data in channel start. rs. w2 d35. ; save word. jl. i2. ; goto start next process. d31: 1<23+21<3+2.001 ; effective address for start ; of channel data out as device 6. d33: -2 d35: -2 d36: -2 ; interupt cause. d37: -2 ; instr counter at interupt. jl. 0 b40: ; monitor call addrs. jl. x2+f120. ; switch to function. f120: jl. i10. ; monitor 0 goto init. jl. i2. ; swop process. jl. i13. ; wrong entry. jl. i14. ; entry 1 < 11 + 3 can not be used. jl. d20. ; data out channel start. jl. d30. ; data in channel start. b. c20 w. ; interupt handlimg 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 = charekter device interupt ( not in rh8000). rs. w2 d36. ; save interupt cause no. rs. w1 d37. ; save instr at interupt. 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. i2. ; next process. ; else gg w2 66 ; wait for next interupt from rc8000. jl. i15. ; then same process. c0: ; interupt data out channel stop. rl. w2 b117. ; clear flag data out in progress. al w2 x2-2 ; rs. w2 b117. ; rl. w2 d23. ; get buffer address. al w2 x2-2 ; calculate state address. al w1 4 ; save state indicating 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. ; al w1 x1-2 ; clear flag indicating data in rs. w1 b112. ; channel operation in progress. jl. i2. ; goto swop process. c1: ; handling of channel input start interupt. rl. w2 b116. ; get input channel flag. al w2 x2+2 ; increase flag counter. rs. w2 b116. ; save flag counter. jl. i2. ; goto swop process. c3: 0 ; flag indicating that interupt channel ; input had been handled. e. ; end interupt handling. b42: ; exeption address. jl. i16. b43: ; escape address. i10: i13: i14: i3: i16: i17: jl. i17. 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. w0 b100. ; get addrs of low lim. rs w0 x1+4 ; save lower limit. al. w0 b101. ; get upper limit. rs 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. w0 b110. ; get lower limit. rs w0 x1+4 ; save lower limit. al. w0 b111. ; get upper limit. rs 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. rs w0 x2+10 ; save start addrs ( ic.) ; set user proc in monitor mode. rl. w0 d12. ; get status reg contents for monitor mode. rs w0 x2+8 ; 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. rs w0 x2+10 ; save start addrs. ; set user proc in monitor mode. rl. w0 d12. ; get status register contents ; for monitor mode. rs w0 x2+8 ; 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 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. b121:al. w2 b20.+5 ; get addrs of 1 monitor sys tab. ; process in b110. al. w3 b22.+5 ; get addrs of 2. monitor sys tab. ; process in b100. rs. w2 b68.-2 ; current rs. w3 b68. ; save addrs of next. ; after return from interupt next is current. ; i.e. b100 is started first. gp w2 26 ; init of information reg. ; no init of timer in rh8000 ;jl. w2 i0. ; call subroutine init of timer ; al w2 2 ; jl. b40. ; start first process. jd 1<11+2 ; start ; interupt and monitor call service. b. a10 w. ; block start process. i20: ; start process in b110. al. w2 b20.+5 ; get address system table in b110 al. w3 b22.+5 ; get address of system table in b100 rs. w2 b66. rs. w3 b68. i15: ; rl. w3 b66. ; get address of current. gp w3 26 ; init information with address ; of current system table. ri -10 ; return from interupt with same current. i2: ; monitor call service. ; delay current process. ; start next process. al. w1 b68. ; w1 := address of next. ; (x1-2) := addressof current. dl w3 x1 ; get addrs of current and next. a1: sh w3 8 ; if next = empty then jl. a0. ; goto save current and start rs w3 x1-2 ; current := next. al w1 x1+2 ; get next process. rl w3 x1 ; get next. jl. a1. ; goto select next. a0: ds w3 x1 ; save current and stop. jl. i15. ; goto start current. e. ; end block select process to run b90: jl. 0 ; cpa b. c10 w. b100: ; channel input process. rl. w0 c0. rl. w1 c1. rl. w2 c2. rl. w3 c3. jl 0 ; goto register 0. c5: rl. w1 b118. al w1 x1+1 rs. w1 b118. jl. c5. c0: rl w3 132 c1: rs w3 1196 c2: jl 0 c3: 0 b110: ; output channel process. jd 1<11+2 rl. w1 b119. al w1 x1+1 rs. w1 b119. jl. b110. b118: 0 b119: 0 ; activating times. b116: 0 ; input channel interupt status, ; 0 = idle , >0 = interupt pending. b117: 0 ; output channel status. 0 = idle, 0> data out in progress. b112: 0 ; input channel status. 0 = idle, 0> data in channel ; in progress. 4 ; buffer state 1 state. b115: 0 55555,r.64 ; channel buffer 2. 4 ; channel buffer 2 state. ; ( initial state after output is simulated). b114: 0 66666,r.64 ; channel buffer 2. b101: b111: jl. 0 ; end of 2. and first user program. e. 0,r.(:2048-k:)>1 e. ▶EOF◀