|
|
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: »tcgauto0«
└─⟦667bb35d6⟧ Bits:30007480 RC8000 Dump tape fra HCØ.
└─⟦4334b4c0b⟧
└─⟦this⟧ »tcgauto0«
s. a50,b121,c35,d120,f120,i25,h20,p5 w.
;
; +++ c names used by timer and clock.
; +++ b names used for inter nal syetm tabs and dump
; addrs.
; +++ d names used for process description constants.
;
0,r.256
k= 8 ;
10 ; start addrs
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.
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
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.
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,r.6 ; 1. sys tab entry
b21: 0,r.6 ; 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,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.
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
b41: ; interupt tab intry.
jl. i2. ; interpupt entry addrs. swop process.
b42: ; exeption address.
jl. i16.
b43: ; escape address.
jl. i17.
b120: ; start
al w0 0
gp w0 64
; 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.
al. w3 b22.+5 ; get addrs of 2. monitor sys tab.
rs. w3 b68.-2
rs. w2 b68. ; save addrs of next and current.
gp w2 26 ; init of information reg.
; no init of timer in rh8000
;jl. w2 i0. ; call subroutine init of timer
jd 1<11+2 ; start
; constants for timer initialisation.
; cr = control reg. in timer (1 ,2 ,3 )
; interupt disabled from timer by 0<6
c10: 1<7+1<6+000<3+0<2+0<1+0 ; cr 1 operate all timers
c11: 1<7+0<6<000<3+0<2+0<1+1 ; cr 1 preset all timers.
c20: 1<7+0<6+000<3+0<2+0<1+0 ; cr 2 select cr 3.
c21: 1<7+0<6+000<3+0<2+0<1+1 ; cr 2 select cr 1.
c30: 1<7+0<6+000<3+0<2+1<1+0 ; cr 3 no prescale.
c31: 1<7+0<6+000<3+0<2+1<1+1 ; cr 3 prescale.
; device addrs for clock.
c0: 1<23+0<3+2.100 ;addrs for write cr 1 or 3.
; read nothing.
c1: 1<23+1<3+2.100 ; addrs write cr 2.
; addrs read status reg..
c2: 1<23+2<3+2.100 ; addrs write most sgnf. byte
; buffer reg..
; addrs read timer no 1 counter.
c3: 1<23+3<3+2.100 ; addrs write timer no 1 latches.
; addrs read least sgnf. bytes
; buffer reg..
c4: 1<23+4<3+2.100 ; addrs write most sgnf. byte buffer reg..
;
; addrs read timer no 2 counter.
c5: 1<23+5<3+2.100 ; addrs write timer 2 latches.
; read least sgnf. byte buffer reg..
c6: 1<23+6<3+2.100 ; addrs write most sgnf. byte buffer reg..
; addrs read timer 3 counter.
c7: 1<23+7<3+2.100 ; addrs write write timer no 3 latches.
; addrs read least sgnf. byte buffer reg..
c12: 5 ; most sgnf. byte to rtimer 0.
c14: 127 ; leats sgnf. byte to timer 1.
c22: 5 ; most sgnf. byte to timewr 2.
c24: 127 ; least sgnf. byte to timer 2.
c32: 0 ; most sgnf. byte to timer 3.
c34: 49 ; least sgnf. byte to timer 3.
i0: ; init of timer.
rs. w2 c29. ; save return address.
rl. w1 c21. ; select control reg 1 as addrs 0.
do. w1 (c1.) ; write dev no 1.
rl. w1 c11. ; preset all timers.
do. w1 (c0.) ; write char dev. 0.
rl. w1 c20. ; select cr 3 ass addrs 0.
do. w1 (c1.) ; write char dev. 1.
rl. w1 c30. ; set cr 3 no prescale.
do. w1 (c0.) ; swrite char dev. 0.
rl. w1 c21. ; select cr as1 as addrs 0.
do. w1 (c1.) ; write char dev. 1.
rl. w1 c32. ; load most sgnf. counter value to timer bufffer.
; jl. (c29.)
do. w1 (c6.) ; write char dev. no 6.
rl. w1 c34. ; load least signif. byte to counter 3.
do. w1 (c7.) ; write char dev. no. 7.
rl. w1 c22. ; load most sgnf. byte to counter 2.
do. w1 (c4.) ; write char dev. 4.
rl. w1 c24. ; load least sgnf. byte to counter 3.
do. w1 (c5.) ; write char dev. no. 5.
rl. w1 c12. ; load most sgnf. byte to counter 1.
do. w1 (c2.) ; write char dev. no. 2.
rl. w1 c14. ; load least sgnf. byte to counter 1.
do. w1 (c3.) ; write char dev. no. 3.
rl. w1 c10. ; send cr 1 operate all timers
do. w1 (c0.) ; write char dev. no. 0.
di. w1 (c1.) ; data in char dev. 1.
jl. (c29.) ; return from subroutine.
c29: 0 ; return address.
; interupt and monitor call service.
i15: ;
jl. i2. ; goto swop process.
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
; = relative from reg. dump addrs.
0 ; h8 - 2 : chain addrs.
h. ; half word.
h8: 0, 0 ; zero , reciever iccn dev no.
w. ; full word
1 ; no of word to be send
0 ; addrs in iccn slave or message word.
0 ; addrs in iccn master.
h0: 1<23 +0<3 + 2.011 ;reset hmess stack
h1: 1<23 +0<3 + 2.001 ;next from hmess stack
h3 : 1<23 ;monitor mode
h6: 1<23 +0<3 + 2.000 ;hresponse errror
b90: 0 ; cpa
b100: al w2 0
rl. w1 b105. ; counter := b105.
b102: dl. w0 b103. ; get double operand.
wm w3 0 ; multiply w3.
ds. w3 b104. ; save multiply.
ba. w2 1 ; increase w2.
; gp w1 64 ;
ls w1 -1 ; special move
se w1 0 ; if w1 = 0 thee
jl. b102.
rl. w1 b105. ; w1 := (b105).
; jd 1<11+2 ; passivate
jl. b102. ; go back.
3
b103: 0 ;
b104: 0 ;
b105: 2.11<22
b101: 0
h9: 1<23 + h8<3 + 2.001 ; effective addrs to data out
; for performing send message.
b110: ; 2. user process.
; am 0,r.8 ; 8 word for dump address.
al w2 0 ; reset w2.
al w3 -1 ; counter := -1.
al w3 x3-2000
;gp w3 64
b112: dl. w1 b113. ; get double operand.
wa w1 0 ; w1 := w1 + w0.
ds. w2 b114. ; save double operand.
bs. w2 1 ; decrease w2.
al w3 x3+1
; gp w3 64
; sz w3 55
; -1 ; escape
; jd 1<11+2 ; passivate.
jl. b112. ; goto b112.
0
b114: 0
b113: 8388606 ;
b111: -1 ; 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◀