|
|
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: 21504 (0x5400)
Types: TextFile
Names: »cgm6800tst«
└─⟦621cfb9a2⟧ Bits:30002817 RC8000 Dump tape fra HCØ. Detaljer om "HC8000" projekt.
└─⟦0364f57e3⟧
└─⟦this⟧ »cgm6800tst«
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. ;
;; error in call
jl. 0 ; 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.
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. i2. ; next process.
; else
sn w2 24 ; if interupt = 24 then
jl. c4. ; goto handel character interupt.
; else
;; error
al w1 -1
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.
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.
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
gp w3 64
gp w2 64
jl. -4
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 w1 64
jl. -4
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 g37. ; call reestablish enable/disable transmit/recieve.
jl. i15. ; call same 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. i16. ; start b100 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. w2 g0. ; call subroutine init of timer
jd 1<11+2 ; start
b99:
64,66,68,70,72,74,76,78
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.
jl. i3. ; goto start.
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.
i3:
jl. w2 i4. ; call procedure show idle.
gp w3 26 ; inf reg := symbol tab of next.
ri -10 ; call return from intprt effective addrs
i4: ;; show and reinit idle.
b. f10 w.
al w1 0
rx. w1 b11.+2 ; get working register w1 in regdump area.
ns. w1 f0.
gp w1 64
jl x2
f0: 0 ;
e.
;; end show idle and reinit.
b90: ; cpa limit
b. c10, d10 w.
p.<:m6800load2:>
e. ;
▶EOF◀