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

⟦00a28e80b⟧ TextFile

    Length: 18432 (0x4800)
    Types: TextFile
    Names: »trhtst5«

Derivation

└─⟦667bb35d6⟧ Bits:30007480 RC8000 Dump tape fra HCØ.
    └─⟦4334b4c0b⟧ 
        └─⟦this⟧ »trhtst5« 

TextFile

s. a50,b121,c35,d120,f120,i25,h20,p5       w.
;
      k= 0 ;
      jl.      b120.          ; goto start.
a1:          0                ; saved interupt register.
   ; 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    ; 1. static definition
     0
     0
     0
     0
              ; process definition addrs.
    
b10: 0
     0
     0
     0
     0
     0
     0
     0          ; 1. reg dump addrs
b31: 0
     0
     0
     0
     0            ; 2. process definition reg. addrs.
b11: 0
     0
     0
     0
     0
     0
     0
     0          ; 2. reg dump addrs
b32: 0
     0
     0
     0
     0            ; 3. proces definition regisster addrs.
b12: 0
     0
     0
     0
     0
     0
     0
     0          ; 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
     0
     0
     0
     0
     0
     0
     0          ; 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
      0
      0
      0
      0
      0        ; 1. sys tab entry
     
b21: 0
      0
      0
      0
      0
      0        ; 2. sys tab entry
     ; system table error entry.
b22: 0
      0
      0
      0
      0
      0        ; 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:   0,0       ; monitor process interupt limit.
d14: 256,256     ; user process interupt limit
w.
d11: 1<23+0      ; 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.
    -1,r.6       ; make roome for 6 more process.
d20: ; data out channel start.
     ; w0 = address of buffer.
     ; w3 = no af half words to be transferred.
     ;
     ; device no is 22 is used.
     ; device 22 is part of the rh device number.
     al w2    22         ; 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 current 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+22<3+2.001     ; effective address for start
                         ; of channel data in as device 22.
d23:        0            ; current buffer address.
d25:       -222222       ; retrun word from data out.

d30:                     ;  data in channel  start.
    ; w0 = address of buffer
    ; w3 = no of half words transferred ( not used).
    ;
    ; device no 21 is used.
    ; device 21 is part of the rh device number.
    rl. w2    b116.
    al  w2 x2-2
    rs. w2    b116.  ; decrease input interupt counter.
    rl. w2    b112.  ;
    al  w2 x2+2      ; set flag indicating data in 
    rs. w2    b112.  ; channel operation in progress.
    al w2     21     ; 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  w3 x2-2          ;
    al  w1    1          ;  state channel data input.
    rs  w1 x3            ; save buffer state.
    di. w2   (d31.       ; data in channel start.
   rs.  w2   d35.    ; save word.
    jl.      i2.        ; goto start next process.
d31: 1<23+21<3+2.001      ; effective address for start
                         ; of channel data out as device 6.
d33:   -2
d35:   -2
d36:   -2     ; interupt cause.
d37:   -2     ; instr counter at interupt.
    jl.     0



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  can not be used.
      jl.        d20.     ; data out channel start.
      jl.        d30.     ; data in channel start.
b. c20 w.    ; interupt handlimg 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 = charekter device interupt ( not in rh8000).
     rs. w2 d36.    ; save interupt cause no.
     rs. w1 d37.    ; save instr at interupt.
     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
    gg w2  66      ; wait for next interupt from rc8000.
     jl.    i15.    ; then same process.

c0:   ; interupt data out channel stop.
    rl. w2   b117.  ; clear flag data out in progress.
    al  w2  x2-2   ;
    rs. w2    b117. ; 
    rl. w2    d23.  ; get buffer address.
    al  w2  x2-2    ; calculate state address.
    al  w1    4     ; save state indicating
    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.  ;
    al  w1   x1-2    ; clear flag indicating data in 
    rs. w1    b112.  ; channel operation 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.
e.   ; end interupt handling.
b42: ; exeption address.
     jl.      i16.
b43: ; escape address.
i10:
i13:
i14:
i3:
i16:
i17:
     jl.      i17.



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. 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.
                        ; process in b110.
     al. w3     b22.+5  ; get addrs of 2. monitor sys tab.
                        ; process in b100.
     rs. w2   b68.-2 ; current
     rs. w3     b68.  ; save addrs of   next.   
                       ; after return from interupt next is current.
                      ; i.e. b100 is started first.
     gp  w2    26    ; init of information reg.
  ; no init of timer in rh8000
  ;jl. w2     i0.   ; call subroutine init of timer
   ; al   w2   2
   ; jl.      b40.  ; start first process.
     jd      1<11+2  ; start


            ; interupt and monitor call service.
b.  a10   w. ; block start process.
i20:       ; start process in b110.
     al. w2 b20.+5       ; get address system table in b110
     al. w3 b22.+5       ; get address of system table in b100
      rs. w2 b66.
      rs. w3 b68.
     

i15:                     ;
    rl. w3 b66.           ;  get  address of current.
    gp  w3   26           ;  init information  with address
                          ; of  current  system table.
    ri      -10           ; return  from interupt with same current.
i2:         ; monitor call service.
            ; delay current process.
            ; start next process.
    al. w1 b68.        ; w1 := address of next.
                       ; (x1-2) := addressof current.
    dl  w3 x1          ; get addrs of current and next.
a1: sh  w3 8           ; if next = empty then
    jl.    a0.         ; goto save current and start
    rs  w3 x1-2        ; current := next.
    al w1  x1+2        ; get next process.
    rl w3  x1          ; get next.
    jl.    a1.         ; goto select next.
a0: ds  w3 x1          ; save current and stop.
    jl.     i15.       ; goto start current.
e.   ; end block select process to run
b90:   jl.    0         ; cpa
b. c10 w.
b100: ; channel input process.
     rl. w2 b118.
     al  w2 x2+2
     rs. w2 b118. ; increase activating counter.
     rl. w0 b112. ; if data in channel operation
     se  w0   0   ; allready in progress then
     jl.     c0.  ; goto next process.
     rl. w0 b116. ; if no input interupt waiting 
     sn  w0  0    ; then goto
     jl.    c0.   ; call nextprocess.
     al. w2 b114. ; else get address of first buffer.
     rl  w1 x2-2  ; get buffer state
     sn  w1  4    ; if buffer state = data out channel finis
     jl.     c1.  ; then goto service.
     al. w2 b115. ; else get address of second buffer.
     rl w1 x2-2  ; get buffer state.
     sn  w1  4    ; if buffer state = data out channel finis
     jl.     c1.  ; then goto service.
c0:  jd 1<11+2    ; else next process.
     jl.     b100.; goto start input buffer.
c1: ; input buffer service.
     rl  w0  4    ; get buffer address.
     al  w3  128  ; get nof of half words in buffer.
     jd 1<11+10   ; start input buffer process.
     jl.    b100. ; goto start of inpu process.

b110: ; output channel process.
    rl. w2  b119. ;
    al  w2 x2+2
    rs. w2 b119. ; increase activating counter.
     rl. w1  b117. ; if data out in progress
     se  w1    0   ; then goto
     jl.      c3.  ; call next process.
     al. w2  b114. ; get address of first data buffer.
     rl  w1 x2-2   ; get buffer state
     sn  w1    3   ; if buffer state = data out finis
     jl.     c4.   ; then goto output service.
     al. w2   b115.; get address of second buffer.
     rl  w1 x2-2   ; get buffer state.
     sn w1     3   ; if buffer state = data out finis then
     jl.      c4.  ; goto data out service.
c3:  ; no buffer or output in progress.
     jd 1<11+2     ; call next process.
     jl.    b110.  ; goto start or output process.
c4:  ; data out service.
     rl   w0  4    ; w0 = buffer address.
     al   w3 x2+126; get address of last buffer.
     al   w2 x2+64; get address of second half of buffer.
     rl   w1  x2   ; get 1. word of 2. half of buffer.
c5:  al   w1 x1-1  ; decrease data word.
     rs   w1  x2   ; saev data word.
     al   w2 x2+2  ; increase buffer pointer.
     se   w2 x3    ; if not end of buffer then
     jl.      c5.  ; repeat in c5.
     al   w3  128  ; else get no of half words.
     jd 1<11+8     ; call monitor start out process.
     jl.      b110.; goto start of output process.
b118: 0
b119: 0    ; activating times.
b116: 0    ; input channel interupt status,
           ;  0 = idle , >0 = interupt pending.
b117: 0    ; output channel status. 0 = idle, 0> data out in progress.
b112: 0    ; input channel status. 0 = idle, 0> data in channel 
           ; in progress.
     7777   ; buffer state  1 state.
b115:
    0,r.64 ; channel buffer 2.
      4    ; channel buffer 2 state.
           ; ( initial state after output is simulated).
b114:
c2: 0,r.64 ; channel buffer 2.
b101: 
b111: jl. 0          ; end of 2. and first user program.
e.
0,r.(:2048-k:)>1
e.
▶EOF◀