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

⟦e9433e8f2⟧ TextFile

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

Derivation

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

TextFile

s. a50,b121,c35,d120,f120,i25,h20,p5       w.
;
; +++ c names used by timer and clock.
; +++ b names used  for inter nal syetm tabs and dump
;     addrs.
; +++ d names used for process description constants.
;
      0,r.256
      k= 8 ;
      10                      ; start addrs
      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.
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
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.
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,r.6        ; 1. sys tab entry
     
b21: 0,r.6        ; 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,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.



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
b41:  ; interupt tab intry.
      jl.      i2.        ; interpupt entry addrs. swop process.
b42: ; exeption address.
     jl.      i16.
b43: ; escape address.
     jl.      i17.



b120:                  ; start
    al w0 0
    gp w0 64
    ; 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.
     al. w3     b22.+5  ; get addrs of 2. monitor sys tab.
     rs. w3   b68.-2
     rs. w2     b68.  ; save addrs of next and current.
     gp  w2    26    ; init of information reg.
  ; no init of timer in rh8000
  ;jl. w2     i0.   ; call subroutine init of timer
     jd      1<11+2  ; start


    ; constants for timer initialisation.
    ; cr = control reg. in timer (1 ,2 ,3 )
; interupt disabled from timer by 0<6
c10: 1<7+1<6+000<3+0<2+0<1+0   ; cr 1 operate all timers
c11: 1<7+0<6<000<3+0<2+0<1+1   ; cr 1 preset all timers.
c20: 1<7+0<6+000<3+0<2+0<1+0   ; cr 2 select cr 3.
c21: 1<7+0<6+000<3+0<2+0<1+1   ; cr 2 select cr 1.
c30: 1<7+0<6+000<3+0<2+1<1+0   ; cr 3 no prescale.
c31: 1<7+0<6+000<3+0<2+1<1+1   ; cr 3 prescale.
   ; device addrs for clock.
c0: 1<23+0<3+2.100             ;addrs for write cr 1 or 3.
                               ;         read nothing.

c1: 1<23+1<3+2.100             ; addrs write cr 2.
                               ; addrs read status reg..
c2: 1<23+2<3+2.100             ; addrs write most sgnf. byte
                               ;               buffer reg..
                               ; addrs read timer no 1 counter.
c3: 1<23+3<3+2.100             ; addrs write timer no 1 latches.
                               ; addrs read least sgnf. bytes
                               ;               buffer reg..
c4: 1<23+4<3+2.100             ; addrs write most sgnf. byte buffer reg..
                               ; 
                               ; addrs read timer no 2 counter.
c5: 1<23+5<3+2.100             ; addrs write timer 2 latches.
                               ; read least sgnf. byte buffer reg..
c6: 1<23+6<3+2.100             ; addrs write most sgnf. byte buffer reg..
                               ; addrs read timer 3 counter.
c7: 1<23+7<3+2.100             ; addrs write write timer no 3 latches.
                               ; addrs read least sgnf. byte buffer reg..

c12:        5                  ; most sgnf. byte to rtimer 0.
c14:         127               ; leats sgnf. byte to timer 1.
c22:        5                  ; most sgnf. byte to timewr 2.
c24:        127                ; least sgnf. byte to timer 2.
c32:        0                  ; most sgnf. byte to timer 3.
c34:        49                 ; least sgnf. byte to timer 3.



i0:     ; init of timer.
      rs. w2   c29.             ; save return address.
      rl. w1   c21.            ; select control reg 1 as addrs 0.
      do. w1   (c1.)           ; write dev no 1.
      rl. w1   c11.            ; preset all timers.
      do. w1   (c0.)           ; write char dev. 0.
      rl. w1     c20.          ; select cr 3 ass addrs 0.
      do. w1     (c1.)         ; write char dev. 1.
      rl. w1    c30.           ; set cr 3 no prescale.
      do. w1    (c0.)          ; swrite  char dev. 0.
      rl. w1    c21.           ; select cr as1 as addrs 0.
      do. w1    (c1.)          ; write char dev. 1.

     rl. w1     c32.  ; load most sgnf. counter value to timer bufffer.
;    jl.    (c29.)
     do. w1     (c6.)  ; write char dev. no 6.
     rl. w1     c34.  ; load least signif. byte to counter 3.
     do. w1     (c7.) ; write char dev. no. 7.
     rl. w1     c22.  ; load most sgnf. byte to counter 2.
     do. w1     (c4.) ; write char dev. 4.
     rl. w1     c24.  ; load least sgnf. byte to counter 3.
     do. w1     (c5.) ; write char dev. no. 5.
     rl. w1     c12.  ; load most sgnf. byte to counter 1.
     do. w1     (c2.) ; write char dev. no. 2.
     rl. w1     c14.  ; load least sgnf. byte to counter 1.
     do. w1     (c3.) ; write char dev. no. 3.
     rl. w1     c10.  ; send cr 1 operate all timers
     do. w1   (c0.) ; write char dev. no. 0.
     di. w1    (c1.)  ; data in char dev. 1.
     jl.       (c29.)  ; return from subroutine.
c29:      0            ; return address.


            ; interupt and monitor call service.

i15:                     ;
            jl.      i2. ; goto swop process.
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 
                       ; = relative from reg. dump addrs.


       0                  ; h8 - 2 : chain addrs.
h. ; half word.

h8:    0,     0           ; zero     , reciever iccn dev no.
w.    ; full word
              1           ;   no of word to be send
              0           ; addrs in iccn slave or message word.
              0           ; addrs in iccn master.


h0:  1<23 +0<3 + 2.011 ;reset hmess stack
h1:  1<23 +0<3 + 2.001 ;next from hmess stack
h3 :  1<23             ;monitor mode
h6:  1<23 +0<3 + 2.000 ;hresponse errror
b90:   0                ; cpa
b100:  al w2 0
       rl. w1 b105.     ; counter := b105.
b102:  dl. w0  b103.    ; get double operand.
       wm  w3  0        ; multiply w3.
       ds. w3  b104.    ; save multiply.
       ba. w2   1       ; increase w2.
    ;  gp w1 64         ;
       ls w1 -1          ; special move
      se w1   0        ; if w1 = 0 thee
       jl.    b102.
       rl. w1  b105.   ; w1 := (b105).
     ; jd   1<11+2      ; passivate
       jl.     b102.    ; go back.
       3
b103:  0                ;
b104:  0              ;
b105: 2.11<22
b101: 0
h9:  1<23 + h8<3 + 2.001 ; effective addrs to data out
                       ; for performing send message.
b110:    ; 2. user process.
   ;  am   0,r.8          ; 8 word for dump address.
      al w2 0        ; reset w2.
      al  w3 -1     ; counter := -1.
      al w3 x3-2000
     ;gp w3 64
b112: dl. w1 b113.   ; get double operand.
      wa  w1 0       ; w1 := w1 + w0.
      ds. w2 b114.   ; save double operand.
      bs. w2 1       ; decrease w2.
       al w3 x3+1
    ; gp w3 64
    ; sz w3   55
   ;  -1            ; escape
   ;  jd 1<11+2      ; passivate.
      jl.    b112.   ; goto b112.
      0
b114: 0
b113: 8388606        ;
b111: -1             ; 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◀