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

⟦f49c5830d⟧ TextFile

    Length: 4608 (0x1200)
    Types: TextFile
    Names: »kksysdma«

Derivation

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

TextFile

(sysdma=slang list.no xref.no
sysdma)
; sysdma
;
b. g2 w.

; format of input message to other computers
; mess +0     3<12
;      +2     first address   (this computer)
;      +4     last  address   (this computer)
;      +6     first address   (other computer)
;      +8     computer number (other computer)

s. a50,h20,i20 w.

; format of message buffer
a40=-10   ; message buffer address(other computer) or result
a38=- 8   ; receiver<12+sender (computer numbers)
a36=- 6   ; process description addr for receiver other computer
a34= -4   ;    -         -       -    -  sender     -      -
a32= -2   ; w2
a0 =  0   ; next buffer
a2 =  2   ; prev buffer
a4 =  4   ; receiver
a6 =  6   ; sender
          ;               i-o (normal)    i-o (other com)   mon call
a8 =  8   ; message       op<12 +mode       3<12            1<22+m_p_n
a10= 10   ;    -          first address     first addr      w0
a12= 12   ;    -          last  address     last  addr      w1
a14= 14   ;    -          1. segment        first addr(oc)  w2
a16= 16   ;    -                            comp no         w3
a18= 18   ;    -
a20= 20   ;    -
a22= 22   ;    -

     rs. w3     h10.   ; own process
     al  w0     8      ;
     jd         1<11+32; set own process description address in monitor
     jd         1<11+28; set monitor mode
i0:  al  w2     0      ;
     jd         1<11+24; wait event
     rl. w3     h11.   ; w3:=buffer addr
     sn  w0     8      ; if dma-transfer completed then
     jl.        i1.    ; goto i1.
     sn  w0     0      ; if not message
     se  w3     0      ; or wait dma-transfer completed then
     jl.        i0.    ;  goto i0
     bz  w0  x2+a8     ;  w0:=message type
     se  w0     3      ; if not input message then
     jl.        i3.    ; goto result 3
     rs. w2     h11.   ; save buffer address
     rl  w0  x2+a16    ; w0:=other computer number
     rl  w1  x2+a12    ; w1:=last addr
     ws  w1  x2+a10    ; w1:=last addr-first addr
     al  w1  x1+2      ; w1:=number of halfwords to transfer
     sh  w1     0      ; if nothing to transfer then
     jl.        i3.    ; then goto result 3
     ds. w1     h1.    ; else set dma input message
     rl  w1  x2+a10    ; w1:=first addr (this computer)
     rl  w0  x2+a14    ; w0:=first addr (other computer)
     ds. w1     h3.    ;
     al. w3     h1.    ; input message address
     ls  w3     3      ;
     wa. w3     h4.    ; w3:=1<23+addr<3+2.010
     do      x3        ; start dma-transfer
     sx         2.111  ; if buserror then
     jl.        i2.    ; goto result 2
     jl.        i0.    ; else goto wait
i1:  sn  w3     0      ; if no waiting buffer then
     jl.        i0.    ; goto wait
     am         -1     ; result 1
i2:  am         -1     ; result 2
i3:  al  w0     3      ; result 3
     rl. w2     h11.   ; buffer addr
     jd         1<11+26; get event
     se  w0     1      ; if not result ok then
     jl.        i7.    ; goto to send answer
     rs. w0     h8.    ;
     rl. w1     h1.    ; w1:=number of halfwords
     rs. w1     h6.    ;
     ls  w1     -1     ; w1:=number of words transfered
     wm. w1     h9.    ; w1:=number of chars
     rs. w1     h7.    ;
     rl. w0     h8.    ; w0:=result
i7:  al. w1     h5.    ; w1:=message address
     jd         1<11+22; send answer
     al  w2     0      ;
     rs. w2     h11.   ; ready
     jl.        i0.    ; goto wait
     0                 ; used (cpu)

h0:  0                 ; number (other computer)
h1:  0                 ; number of halfwords to transfer
h2:  0                 ; first address (other computer)
h3:  0                 ; first address (this computer)
h12: 20                ; interrupt level

h4:1<23 + 0 <3 + 2.010 ; device address

h5:  0                 ; answer: status
h6:  0                 ;         halfwords
h7:  0                 ;         chars
h8:  0                 ;

h9:  3                 ; constant
h10: 0                 ; own process
h11: 0                 ; bufferaddress or zero for no waiting buffer
e.

g2=k
g1:
g0:  1      ; size
     0,r.4  ; name
     s2     ; clock
     0      ; file
     0      ; block
     3<12+0 ; contents
     g2     ; size

d.
p.<:fpnames:>
p.<:insertproc:>
▶EOF◀