|
|
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◀