DataMuseum.dk

Presents historical artifacts from the history of:

RC4000/8000/9000

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about RC4000/8000/9000

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦add253c22⟧ TextFile

    Length: 22272 (0x5700)
    Types: TextFile
    Names: »cgaciatstt1«

Derivation

└─⟦621cfb9a2⟧ Bits:30002817 RC8000 Dump tape fra HCØ.  Detaljer om "HC8000" projekt.
    └─⟦0364f57e3⟧ 
        └─⟦this⟧ »cgaciatstt1« 

TextFile

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.    ;
     ;; jd 1<11+22   special test function.
     jl.        c19.
     ;; error in call
     al    w0   -20
     gp    w0   64
     jl.        -4      ; 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.
c19: ; special monitor entry.
     al  w1  x1-16  ; get address of register dump.
     rl  w2  x1+8   ; load status register.
     lo  w2  x1     ; mask dumped wo into status register.
     rs  w2  x1+8   ; save status register.
     rs. w2 b112.
     jl.     i15.   ; continue in 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.        c19.   ;  next process.
                       ; else
     sn  w2     24     ; if interupt = 24 then
     jl.        c4.    ; goto handel character interupt.
                       ; else
     ;; error
     al  w1     -1
     ls  w1     12
     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.
     di.  w1    (c20.  ; start data in.
     gp   w1    64     ; show data word read.
     rs.  w1    b116.  ; store data word read.
     sl   w1    2      ; if data word read then
     jl.        0
     al  w1 x1-1
     do. w1   (c20.
     jl.        i15.   ; goto same process.
c19: ;; at timer interupt.
     rl.  w1  b11.+2
     al  w1  x1+1
     rs. w1 b11.+2
     jl.      i15.    ; return in same process.
c20: 1<23+20<3+2.001   ; communication block interface.
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
     ls  w2     12
     gp  w3     64
     gp  w2     64
     rl. w1     f0.
     gp  w1     64
     jl.        -8
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  w0     64
     jl.  w3    g32.    ; call enable receive disable transmit
     jl.        i15.    ; goto same
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     g33.   ; call reestablish enable/disable transmit/recieve.
     jl.        i16.   ; call      b100 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.        i17.   ; start b110 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. w3  g0.       ; call subroutine init of timer
     jd         1<11+2 ; start
b99:
64,66,68,70,72,74,76,78    ; init value in first interupt controler.
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.
     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, d10 w.
p.   <:hcloadbl1:>
e.                     ;
▶EOF◀