|
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: »cgrht1«
└─⟦621cfb9a2⟧ Bits:30002817 RC8000 Dump tape fra HCØ. Detaljer om "HC8000" projekt. └─⟦0364f57e3⟧ └─⟦this⟧ »cgrht1«
(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◀