|
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: 15360 (0x3c00) Types: TextFile Names: »trhtst2«
└─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ. └─⟦b2ec5d50f⟧ └─⟦this⟧ »trhtst2«
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. b34: jl. i17.,r.5 ; error static definition. b14: jl. i17.,r.8 ; error reister dump address. ; 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 i3 ; sys tab error i3 ; sys tab error 0 ; sys tab error b14 ; dummy dump address. i3 ; sys tab error i3 ; sys tab error 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. i3 ; sys tab error. i3 ; sys tab error 0 ; sys tab error ststau interupt init. b14 ; sys tab error reg dump address. i3 ; exeption service address. i3 ; sys tab error escape service address. 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. 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. 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 21 is used. ; device 21 is part of the rh device number. al w2 21 ; get dive 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. ds. w2 d34. ds. w0 d33. ; save gg w0 66 di. w2 (d31. ; data in channel start. rl w1 66 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. -2 d33: -2 -2 d34: -2 d35: -2 d36: -2 ; interupt cause. d37: -2 ; interupt cause. 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. 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. sn w2 18 ; if interupt cause = channel input start jl. i20. ; then start process input b110. sn w2 16 ; if interupt cause = channel input finis jl. i15. ; then goto same process. se w2 14 ; if o interupt <> rh8000 interupt then jl. i15. ; same process. ; else ; gg w2 66 ; wait for next interupt from rc8000. jl. i15. ; then same process. b42: ; exeption address. jl. i16. b43: ; escape address. 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 b100: ; waiting process. al w2 0 b105: al. w1 b103. ; al. w3 b104. ; get first and last buffer address. b102: al w2 x2+1 ; w2 := w2 + 1. rs w2 x1 ; store w2 in fi buffer. al w1 x1+2 ; update buffer address. al w0 1111 se w1 x3 ; skip if not equal jl. b102. ; else rl. w2 b103. ; get first buffer address. jl. b105. b103: 111222,r.50 b104: 0 b101: jl. 0 b110: ; 2. user process. al w3 -20 b115: al. w1 b113. ; al. w2 b114. ; get first and last buffer address. b112: al w3 x3-1 ; w2 := w2 -1. rs w3 x1 ; store value item in buffer. al w1 x1+2 ; next buffer element. al w0 222 se w1 x2 ; skip if not equal. jl. b112. ; goto store next buffer lement. al. w0 b113. ; get first buffer address. al w3 256 ; get no of half words to be stored. jd 1<11+10 ; start data in channel program and passivate. rl. w3 b113. ; get first buffer element. jl. b115. b113: 0,r.128 b114: 0 b111: jl. 0 ; end of 2. user program. jl. 0 jl. 0 jl. 0 i10: jl. 0 i13: jl. 0 i14: jl. 0 i16: jl. 0 i17: jl. 0 i3: ; error entry form monitor tab. jl. 0 ; død 0,r.(:1024-k:)>1 e. ▶EOF◀