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

⟦503cf3cd5⟧ TextFile

    Length: 15360 (0x3c00)
    Types: TextFile
    Names: »trhtst2«

Derivation

└─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ.
    └─⟦b2ec5d50f⟧ 
        └─⟦this⟧ »trhtst2« 

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.
b34: jl. i17.,r.5    ; error static definition.
b14: jl. i17.,r.8   ; error reister dump address.

    ; 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
     i3           ; sys tab error
     i3           ; sys tab error
     0            ; sys tab error
     b14          ; dummy dump address.
     i3           ; sys tab error
     i3           ; sys tab error
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.
     i3           ; sys tab error.
     i3           ; sys  tab error
     0            ; sys tab error ststau interupt init.
     b14          ; sys tab error reg dump address.
     i3           ; exeption service address.
     i3           ; sys tab error escape service address.
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.
     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.
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 21 is used.
    ; device 21 is part of the rh device number.
    al w2    21      ; get dive 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.
    ds. w2    d34.
    ds. w0    d33.       ; save
    gg  w0     66
    di. w2   (d31.       ; data in channel start.
   rl   w1    66
   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.
       -2
d33:   -2
       -2
d34:   -2
d35:   -2
d36:   -2     ; interupt cause.
d37:    -2    ; interupt cause.



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.
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.
     sn w2 18       ; if interupt cause = channel input start
     jl.   i20.     ; then start process input b110.
     sn w2 16       ; if interupt cause = channel input finis
     jl.   i15.      ; then goto same process.
     se w2  14      ; if o interupt <> rh8000 interupt then
     jl.   i15.     ;  same process.
                    ; else
   ; gg w2  66      ; wait for next interupt from rc8000.
     jl.    i15.    ; then same process.
b42: ; exeption address.
     jl.      i16.
b43: ; escape address.
     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
b100: ; waiting process.
       al w2 0
b105:  al. w1 b103.     ;
       al. w3 b104.     ; get first and last buffer address.
b102:  al w2  x2+1      ; w2 := w2 + 1.
       rs w2   x1       ; store w2 in fi  buffer.
       al w1   x1+2     ; update buffer address.
       al w0 1111
       se w1   x3       ; skip if not equal
       jl.     b102.    ; else
       rl. w2   b103.   ; get first buffer address.
       jl.      b105.
b103: 111222,r.50
b104: 0
b101: jl. 0
b110:    ; 2. user process.
       al w3 -20
b115: al. w1 b113.       ;
      al. w2 b114.       ; get first and last buffer address.
b112: al w3  x3-1        ; w2 := w2 -1.
      rs w3   x1         ; store value item in buffer.
      al w1  x1+2        ; next buffer element.
     al w0 222
      se w1  x2          ; skip if not equal.
      jl.    b112.       ; goto store next buffer lement.
      al. w0   b113.     ; get first buffer address.
      al  w3   256       ; get no of half words to be stored.
      jd 1<11+10         ; start data in channel program  and passivate.
      rl. w3 b113.       ; get first buffer element.
      jl.    b115.
b113: 0,r.128
b114: 0
b111: jl. 0          ; end of 2. user program.
       jl.       0
       jl.       0
       jl.       0
i10:   jl.       0
i13:   jl.       0
i14:   jl.       0
i16:   jl.       0
i17:   jl.       0
i3: ; error entry form monitor tab.
       jl.        0     ; død
0,r.(:1024-k:)>1
e.
▶EOF◀