|
|
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: 36864 (0x9000)
Types: TextFile
Names: »cgrht«
└─⟦621cfb9a2⟧ Bits:30002817 RC8000 Dump tape fra HCØ. Detaljer om "HC8000" projekt.
└─⟦0364f57e3⟧
└─⟦this⟧ »cgrht«
(kkrh=slang list.no xref.no;
)
\f
s. a60,b20,c60 w. ;
p. <:fpnames:> ;
k=h55 ;
0 ;
a16: a14 ;
al w3 x1 ;
wa. w3 a16. ;
jl w2 x3 ; start init
jl. b0. ;
a50: 0,r.20 ;
; start exekvering
b0: jl. w3 h25.-2 ; input next command
se w2 114 ; if not r(eset) then
jl. b1. ; goto b1
jl. w3 a22. ; else reset cpu1
jl. b0. ; goto input next command
b1: se w2 97 ; if not (st)a(rt)
jl. b2. ; goto b
jl. w3 a24. ; else start cpu1
jl. b0. ; goto input next command
b2: se w2 111 ; if not (st)o(p) then
jl. b3. ; goto b3
jl. w3 a23. ; else stop cpu1
jl. b0. ; goto input next command
b3: se w2 105 ; if interrupt then
jl. b4. ; goto b4
jl. w3 a21. ; else interrupt
jl. b0. ; goto input next command
b4: se w2 102 ; if not f(inis) then
jl. b0. ; goto input next command
al w0 0 ;
rs w0 100 ;
jl. w3 a20. ;
al w2 0 ;
jl. w3 h7. ;
b. j1 w. ;
;
;
;
a20: ; venteprocedure
rs. w3 j0. ;
al. w3 a6. ;
al. w1 a7. ;
jd 1<11+16;
al. w1 a8. ;
jd 1<11+18;
al. w2 a50. ;
j1: rl w0 x2 ;
jl. w3 h32.-2 ;
1<23+32<12 +8 ;
al w2 x2+2 ;
sh. w2 a50.+16;
jl. j1. ;
al w2 10 ;
jl. w3 h33.-2 ;
jl. (j0.) ;
j0: 0 ;
e. ;
b. j0 w. ;
a24: am 1<1 ; start
a23: am 1<1 ; stop
a22: am 1<1 ; reset
a21: al w0 a0 ; interrupt
wa. w0 a5. ;
rs. w3 j0. ;
al w3 8 ;
do w3 (0) ;
jl. w3 a20. ; goto vent
jl. (j0.) ;
j0: 0 ;
e. ;
c0=+1 ; c0>0 for test af ri-ordren
a0=20<3 ;
a5: 1<23 ;
a6: <:clock:>,0,0,0,0 ;
a7: 0,1,0,0,0,0 ;
a8: 0,r.10 ;
;
a11: ; start test
c. -c0 ;
al w2 0 ;
al w3 20 ;
al w0 0 ;
al w1 19 ;
ds w3 1194 ;
ds w1 1190 ;
ss w1 1194 ;
ds w1 1186 ;
rl. w1 -4 ;
jl. a12. ;
m. wait cpu1 ;
a12: ls w1 -18 ;
rs w1 1198 ;
rl w1 1196 ;
al w1 x1+1 ;
rs w1 1196 ;
gg w3 66 ;
jl. a11. ;
;
;
c27: ;
b. h20,i12 w. ;
z. ;
c. c0 ;
jl. c26. ;
c27: ;
rl. w1 a50. ;
al w1 x1+1 ;
rs. w1 a50. ;
ri 16 ;
b. h20,i12 w. ;
c26: al. w3 h0. ;#1 init cpu1
gp w3 26 ;#1 set inf register addr;
rl w3 8 ;#1 base of controller descr addr
al. w1 c27. ;#1
rs w1 x3+a0+0 ;#1 set start addr
ri 16 ;#1 return interrupt;
;;
; testoutput
; antal ri - i type - antal int - int level - di - tl - tl - tl
;
; interrupt 16: input finis
; 18: input request
; 20: output finis
;
;#1 system table: monitor mode
h. ;
0 ;
h0: ;
0,r.6 ;
w. ;
0 ; -5 monitor call service addr
i0: h6 ; -3 interrupt service addr
1<23+0 ; -1 status interrupt limit
i1: h3 ; +1 register dump addr
0 ; +3 exception service addr
0 ; +5 escape service addr
;#1 system table: user mode
i2: h4 ; -5 monitor call service addr
i3: h5 ; -3 interrupt - -
1<23 + 6 ; -1 status < 12 + interrupt limit
i5: h7 ; +1 register dump addr
0 ; +3 exception service addr
0 ; +5 escape service addr
;#1 monitor register dump addr
h3: 0 ; w0
0 ; w1
0 ; w2
0 ; w3
1<23 ; status monitor mode
i4: c27 ; ic start cpu1 process
0 ; cause
0 ; sb
8 ; cpa
0 ; base
8 ; lower write limit
8.3777 7777 ; upper write limit
0<12 + 6 ; interrupt limits
;#1 interrupt service cpu1
h4: am 1 ;#1 monitor call service addr
h5: am 1 ;#1 interrupt service addr (level 1)
h6: al w3 1 ;#1 interrupt service addr (level 2)
rs. w3 a50.+2 ;
rl. w1 a50.+4 ;
al w1 x1+1 ;
rs. w1 a50.+4 ;
sh w2 14 ;
jl. c27. ;
rs. w2 a50.+6 ;
rs. w2 i10. ;
jl. c27. ;
h7: 0 ; w0
0 ; w1
0 ; w2
0 ; w3
1<23 ; status
i6: h8 ; ic
0 ; cause
0 ; sb
8 ; cpa
0 ; base
8 ;
8.3777 7777 ; upper write limit
0<12+20 ;
h8: ;
al w2 0 ;
do. w2 (a2.) ; start HC8000
al. w3 a49. ; output addr
ws. w3 a40. ;
rl w1 8 ; w1:= base of controller table
rs w3 x1+a0+1<3+2;
jl. h12. ; goto wait
h14: rl. w2 a41. ; w2:=share count
rl. w0 x2+a40. ; w0:=length of next share
wa w3 0 ;
al w2 x2+2 ;
rs. w2 a41. ;
rl. w0 x2+a40. ;
sh w0 0 ; if no more to output then
jl. h9. ; goto wait
ds w3 x1+a0+1<3+2; buff:= length,addr
al w2 0 ;
rs. w2 i10. ;
do. w0 (a2.) ; send data transfer request
al w2 0 ;
rs. w2 a50.+10;
h15: rl. w2 a50.+10;
al w2 x2+1 ;
rs. w2 a50.+10;
rl. w2 i10. ;
se w2 20 ; wait for data tranfer completed
jl. h15. ;
al w3 0 ;
rx. w3 i10. ;
se w3 x2 ; if a new interrupt already is arrieved then
jl. h13. ; goto h13
h12: al w2 0 ;
rs. w2 a50.+12;
h11: rl. w2 a50.+12;
al w2 x2+1 ;
rs. w2 a50.+12;
sl. w2 (a3.) ; if time out then
jl. h8. ; goto restart on HC8000
rl. w2 i10. ;
se w2 18 ; wait for ready signal from hc
jl. h11. ;
al w2 0 ;
rs. w2 i10. ; clear interrupt signal
h13: al w3 40 ;
di. w3 (a2.) ;
rs. w3 a50.+8 ;
rl w3 x1+a0+1<3+2;
jl. h14. ;
h9: ;
al w2 0
rs. w2 i10.
h16: rl. w2 i10.
sn w2 0
rl. w2 a50.+16
al w2 x2+1
rs. w2 a50.+16
jl. h16.
al w2 0
rs. w2 i10.
al w3 30
di. w3 (a2.)
rl. w2 i10.
sn w2 0
jl. -4
al w2 0
rs. w2 i10.
rl. w2 i10.
sn w2 0
jl. -4
di. w3 (a2.)
rs. w3 a50.+2
rl. w2 a50.+14;
al w2 x2+1 ;
rs. w2 a50.+14;
jl. h9. ;
i10: 0 ;
z. ;
a1: 0 ;
a2: 1<23+21<3+2.001 ;
a3: 100000 ;
a4: 0 ;
a9: 1<23+21<3+ 2.010 ; reset
a14: ; start init
rs. w2 a4. ; save return
rs. w1 a14. ; save fp base
rl w3 8 ; base of controller tabel
al w3 x3+a0 ;
rs. w3 a1. ; addr of contr. table for cpu1
al. w1 a11. ;
al w0 x1 ;
ds w1 x3+2 ;
ds w1 x3+10 ;
ds w1 x3+18 ;
ds w1 x3+26 ;
jd 1<11+28;
c. c0 ;
rl. w1 i0. ;
wa. w1 a14. ;
rs. w1 i0. ;
rl. w1 i1. ;
wa. w1 a14. ;
rs. w1 i1. ;
rl. w1 i2. ;
wa. w1 a14. ;
rs. w1 i2. ;
rl. w1 i3. ;
wa. w1 a14. ;
rs. w1 i3. ;
rl. w1 i4. ;
wa. w1 a14. ;
rs. w1 i4. ;
rl. w1 i5. ;
wa. w1 a14. ;
rs. w1 i5. ;
rl. w1 i6. ;
wa. w1 a14. ;
rs. w1 i6. ;
;
;
; rl. w1 i7.
; wa. w1 a14.
; rs. w1 i7.
z. ;
jl. (a4.) ; return
a40: 4,4,20,a46,0 ;
a41: 0 ;
a49: ;
2 ;
2 ;
a47: 1<23+0<3+2.001 ;
b. a50,b122,c35,d120,f120,i25,h20,p5 , g100 w.;
al w1 -500
al w1 1000
al w1 2000
al. w3 b122.
al w1 0
b122: al w1 x1+1 ;
gp w1 64
jl. b122.
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 charakter device
d50:
; call w0 = undifined
; w2 = return address.
; w1 = destroyed.
; w3 = charakter device no.
; for all acia : eaual address = status address.
; device address + 1 = data address.
rl w1 6 ; w1 := charakter device no.
al w1 x1 + 1 ; get charakter device data address.
ls w1 3 ; shift device data address 3.
ls w3 3 ; shirft device no 3 left.
lo. w1 d51. ; create device data address.
lo. w3 d51. ; create device address.
rl. w0 d52. ; load reset command.
do w0 x3 ; write out reset command.
rl. w0 d59. ; load charakter disable mask.
do w0 x3 ; write charakter initialisation.
di w0 x3 ; read charakter device status.
di w0 x1 ; read charakter device data.
rl. w0 d53. ; load charakter enable mask.
do w0 x3 ; write acia enable.
jl x2 ; return from subroutine.
d51: 1<23+0<3+2.100 ; charakter device no 0.
d52: 2.00000011 ; charakter device master reset command.
d59: 2.00000001 ; load acia diable mask.
d53: 2.10100001 ; charakter device init:
; bit 7 = recieve interupt enable.
; bit 6 and 5 = -, trh low, interupt
; enabled.
; bit 2 3 4 = 7 bits even parity 2 stop bit.
; bit 0 1 = divide counter witth 16.
d54: 2.00000010 ; status mask.
; bit 1 is transmit data register
; empty.
d55: 2.00000001 ; status mask.
; bit 0 is recieve data register full.
d58: 2.00000011 ; mask for boyh transmit and recieve.
d57: 0 ; return address.
d56: ;; read charakter device status.
;; w0 = status word.
;; w1 = 0 = no care.
;; 1 = recieve data full.
;; 2 = transmit data empty.
;; 3 = both.
;; w2 = return address.
;; w3 = device no. ( saved).
rs. w3 d57. ; save devcice no.
sh w3 63 ; if device address < 63
al w3 x3+1 ; device address + 1 ( interupt controlers).
ls w3 3 ; device no * 3.
lo. w3 d51. ; or in device base 0.
di w0 x3 ; load status word.
rl w1 0 ; move status word to w1.
la. w1 d58. ; add trinsmit and send bit out.
rl. w3 d57. ; reestablish w3.
jl x2 ; return from subtoutine.
;; charakter output.
;; call w0 = charakter.
;; w1 = result no.
;; 0 = data charakter read.
;; 2 = data charakter not read.
;; w2 = retrun address.
;; w3 = device no.
d40:
rs. w3 d42. ; save device address
sl w3 64 ; if device address > 63 then
al w3 x3+1 ; device no := device no + 1,
; so the charakter device data channel
; is selected.
ls w3 3 ; shift device no 3 to left.
lo. w3 d51.; or device base no 0.
do w0 x3 ; output dcharakter on device.
rl. w3 d42. ; reestablish device address.
jl x2 ; return from subroutine.
d42: 0 ; return address.
d60: ;; read data char.
;; w0 = return charakter read.
;; w1 = result 0 = charakter read
;; 2 = charakter not read.
;; w2 = return address.
;; w3 = device address.
rs. w2 d61. ; ave return address.
rl w2 6 ; get device address.
al w3 x3+1 ; add 1 to device address to calculate
; data address.
ls w2 3 ; shift device addreess 3. left.
lo. w2 d51. ; or device base 0.
di w1 x2 ; read status word from acia.
la. w1 d62. ; if status register signal no
; data word then
sn w1 0 ; goto return no read data
jl. d63. ;else
rl w2 6 ; get device address.
ls w2 3 ; device address * 8.
lo. w2 d51. ; or device base.
di w0 x2 ; read data word.
al w1 0 ; signal transport ok.
jl. (d61. ; return from subroutine.
d63: al w1 2 ; signal no read.
jl. (d61. ; return fom subroutine.
d61: 0 ; return address
d62: 2.00000001 ; status word mask for read.
d67: 0 ; return address.
d65: ;; read data char with no check.
;; w0 = result data word.
;; w1 = unchanged.
;; w2 = return address.
;; w3 = device address unchanged.
;;
rs. w3 d67. ; save device address.
sl w3 64 ; if device address > 63 then_
al w3 x3+1 ; add 1 to get data address.
ls w3 3 ; divece address timews 8.
lo. w3 d51. ; or device base 0.
di w0 x3 ; read data word.
rl. w3 d67. ; restablish device address.
jl x2 ; return from subroutinr.
d70: ; init of interupt controler.
; call w2 = address of controler.
; w1 = level no of first level.
; w3 = return address.
rs. w3 d71. ; save retune address.
al w3 x2 ; get interupt controler address into w3.
al w2 x2+1 ; increment device address to get
; get data address.
ls w3 3 ; device address times 8
ls w2 3 ; device control address times 3.
lo. w3 d51. ; or ddevice base to address of
; data address.
lo. w2 d51. ; or device base to address of
; control.
al w0 0 ; set master reset control wrord.
gp w2 64
do w0 x2 ; send master reset to device.
gp w2 64
ds. w3 d73. ; save device addresses.
al w3 0 ; counter := 0.
d75: rl. w0 d74. ; get preselect response memory
; for writing.
wa w0 6 ; increment response memory address.
do. w0 (d72. ; output preselect word
al w0 x1 ; get level data.
do. w0 (d73. ; output level.
al w1 x1+1 ; nextlevel.
al w3 x3+1 ; next
se w3 8 ; if -, last level then
jl. d75. ; goto repeat.
rl. w0 d78. ; get control word for preselecting
; auto clear for writing.
do. w0 (d72. ; send control word.
al w0 255 ; load auto clear mask all bits.
do. w0 (d73. ; send data word , set auto clear on
; on all interupt bits.
rl. w0 d76. ; get clear interupt mask
; and request bits.
do. w0 (d72. ; send clear interupt mask
; and request to controler.
rl. w0 d77. ; get mask for arm interupt controler
; and preselect interupt request for
; reading.
do. w0 (d72. ; write control word.
jl. (d71. ; return form subroutine.
d71: 0 ; return address.
d72: 0 ; device address.
d73: 0 ; device data address.
d74: 2.11100000 ; preselect response memory
d76: 2.00010000 ; clear all imr bits.
d77: 2.10101001 ; set preselect interupt request register
; for reading , and arm chip.
d78: 2.11000000 ; preselect auto clear register for writing.
b40: ;; monitor call addrs.
b. c20 w. ; monitor call block.
al w1 0
rs. w1 b112.
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. ; charakter devisce reset.
; jd 1<11+14
jl. c1. ; charakter device write.
c0: ;; reset charakter device.
jl. w2 d50. ; reset charakter device.
jl. i15. ; same process.
c1: ;; write char on charakter device
b. i0 w.
i1: jl. w2 d40. ; call write charakter device.
jl. i17. ; swop process.
c2:
al w3 64
jl. w2 d56. ; read status.
rs. w0 b119.
al w3 8 ; ask for interupt controler
jl. w2 d56. ; status.
rs. w0 b117. ; save staus tus.
jl. i15. ; call same.
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 = charakter device interupt ( not in rh8000).
b. c20 w. ;; interupt handling block.
rl. w1 b112. ; load idle loop counter.
gp w1 64 ; show idle loop counter.
al w1 0 ; reser idle loop counter.
rs. w1 b112. ;
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 charakter interupt.
; else
jl. i15. ; then same process.
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 charakter device interupt.
;
b. c20 w. ;; blovk handle charakter device.
gg w3 94 ; get interpt level.
se w3 64 ; if interupt no <> 64 then
jl. 0 ; same process.
jl. w2 d56. ; call read charakter status.
rs. w1 c3. ; save status.
rs. w1 b119.
gp w0 64 ; show status.
sn w1 2 ; if sttus = 2 then
jl. i16. ; next process.
se w1 1 ; if 1 or
sn w1 3 ; 3 then
jl. c2. ; goto c2.
gp w0 64 ;
gg w0 66 ; wait
jl. 0 ; next process.
c2:
jl. w2 d65. ; read data char.
rs. w0 b118. ; save data char.
rl. w1 c3. ; restablis status.
gp w1 64
se w1 3 ; if status was 3 then
jl. i16. ; same
jl. i16. ; else next.
c3: 0 ; save d status.
c4: 0 ; saved device no.
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.
al w2 8 ; w2 := interupt controler address.
al w1 64 ; w1 := first interupt level value.
jl. w3 d70. ; call init of interupt controler.
gg w3 66
; jl. w2 g0. ; call subroutine init of timer
jd 1<11+2 ; start
c.-1
p.<:hctimerinit:> ; load timer 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.
gp w3 26 ; init information register with
; value of current system table.
ri -10 ; return from interupt to n
; last current.
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
b90: ; cpa limit
b. c10 w.
b100:
al w3 64 ; load device address.
jd 1<11+12 ; call init of terminal driver.
c1: rl. w0 b118. ; get char.
al w3 64 ; get device address
jd 1<11+14 ; call outchar
jl. c1. ;
jl. b100. ; goto start of inpu process.
b110:
b. c20 w.
;; block second process.
jd 1<11+2 ; next process.
c0: rl. w1 b112. ; get loop counter.
al w1 x1+1 ; increment loop counter.
rs. w1 b112. ; save loop counter.
sl w1 2000
jd 1<11+4
c11: rl. w1 b119.
ls w1 12
gp w1 64
rl. w1 b117.
gp w1 64
jl. c11.
jl. c0. ; goto repeat.
e. ;; end block second process.
b112: 0
b116: 0
b117: 0
b118: 95 ; char to be output.
b119: 0
b101:
b111: jl. 0 ; end of 2. and first user program.
e.
; end of 2. user program.
e. ;
a60:
a46=k-a49-24 ;
e. ;
e. ;
e. ;
▶EOF◀