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

⟦20223b954⟧ TextFile

    Length: 6912 (0x1b00)
    Types: TextFile
    Names: »tsetentry«

Derivation

└─⟦621cfb9a2⟧ Bits:30002817 RC8000 Dump tape fra HCØ.  Detaljer om "HC8000" projekt.
    └─⟦0364f57e3⟧ 
        └─⟦ef5fa0e68⟧ »jtas« 
└─⟦667bb35d6⟧ Bits:30007480 RC8000 Dump tape fra HCØ.
    └─⟦4334b4c0b⟧ 
        └─⟦ef5fa0e68⟧ »jtas« 
            └─⟦this⟧ 

TextFile

; code procedures for algol task creation

b. g1, e30 w.       ; block for tails and insertproc
d. , p.<:fpnames:> , l.
k=10000

s. b10, f10, j50, g5; start slang segment
h.
g0=2                ; no of externals
e5:
g1:  g2   , g2      ; head word
j3:  g0+3 , 0       ; rs entry  3 : reserve space
j8:  g0+8 , 0       ;  -  -     8 : end addr expr
j13: g0+13, 0       ;  -  -    13 : last used
j15: g0+15, 0       ;  -  -    15 : first of program
j16: g0+16, 0       ;  -  -    16 : segm tab base
j30: g0+30, 0       ;  -  -    30 : saved w3, stack ref
j43:     0, 1       ; own var seq count
j44:     0, 3       ; own var eff call segm 
j45:     1, b0      ; ext no 1 , chain for rel
j46:     2, b2      ; ext no 2 , chain for rel

g2=k-2-g1

w.
e0:  g0             ; start external list
     0              ; 0 hw to initialize in own core
     <:lock:>,0,0   ; external: name
     3<18+40<12 , 0 ; int proc(gen addr)
     <:calltask:>,0 ; name
     1<18+31<12+25<6+25 , 0 ; proc(int arr,int arr,proc)
     s3    , s4     ; date, clock

; variables
f0:  0 , r.8        ; message area
\f


; algol task create                                    page 2
e2:  rl. w2    (j13.) ; eff start
     ds. w3    (j30.)
     rl. w0    (j43.)
     se  w0     0     ; if seq count<>0 then error
     jl.        b1.
     al  w0     1
     rs. w0    (j43.) ; seq count:=1
     rl  w1  x2+2
     rs. w1    (j44.) ; eff call segm:=return inf
     jl.       (j8.)  ; end addr expr


; procedure set entry(ctbl,exctbl)
b. l10 , m10 w.
b2=k+1-g1             ; dummy chain for rel
m5:  0 , 0            ; double word
m6:  0 , r.5          ; parent name + name tab addr
e1:  rl. w2    (j13.) ; set entry
     ds. w3    (j30.)
     rl. w0    (j43.)
     sn  w0     1     ; if seq count<>1 then
     jl.        l1.
     se  w0     0
     jl.       (j8.)  ; if seq count<>0 then end addr expr
     jl.        b3.   ; else error
\f


; algol task create                                    page 3
l1:  al  w0     2
     rs. w0    (j43.) ; seq count:=2
     al  w1    -30    ; prepare call of lock
     jl. w3    (j3.)  ; reserve space 30 hw
     rs  w2  x1+0     ; set stack ref
     rl. w0     g1.
     rs  w0  x1+2     ; set own segm tab addr
     al  w3     l2
     ld  w0    -12
     al  w3     24
     ld  w0     12
     rs  w3  x1+4     ; set app., rel return
     al  w3     26
     al  w0  x1+28
     ds  w0  x1+8     ; set 1. formal
     al  w0  x1+26
     ds  w0  x1+12    ; set 2. formal
     al  w0  x1+24
     ds  w0  x1+16    ; set 3. formal
     al  w0  x1+22
     ds  w0  x1+20    ; set 4. formal
     al  w0     0
     al  w3     10
     ds  w0  x1+28    ; set values 1.,2. param
     rl. w0    (j44.) ; w0:=eff call segm
     ws. w0    (j16.)
     ls  w0    -1     ; w0:=segmno
     rl. w3     g1.   ; w3:=own segm tab addr 
     ws. w3    (j16.)
     ls  w3    -1
     al  w3  x3-1     ; w3:=own segm no - 1
     ds  w0  x1+24    ; set values 3.,4. param
     rl. w3    (j45.) ; w3:=segm addr(lock)
b0=k+1-g1             ; define link
     jl      x3+0     ; call lock(4 params)
l2=k-g1               ; define rel return addr
\f


; algol task create                                    page 4
     ds. w3    (j30.)
     rl. w3    (j46.) ; transfer call task to core
     rl  w0  x3
     rl  w3     66    ; w3:=proc descr addr
     dl  w1  x3+36
     ds. w1     m5.+2 ; save itr addr,ittr mask
     am     (x3+22)
     al  w3     1536  ; w3:=start algol area
     rs. w3     m6.+8 ; save start addr
     rl  w3  x3+50    ; w3:=parent proc aadr
     dl  w1  x3+4     ; save parent name
     ds. w1     m6.+2
     dl  w1  x3+8
     ds. w1     m6.+6
     rl. w3     m6.+8 ; get start algol area
     al  w0     100   ; send ok mess to parent
     ls  w0     12
     rs. w0     f0.   ; set opcode
     ws. w2    (j15.)
     al  w2  x2-1024 
     rs. w2     f0.+2 ; free core:=last used-first of prog -1024
     al. w0     l3.
     rs. w0     f0.+4 ; set entryaddr
     al. w1     f0.
     al. w3     m6.
     jd    1<11+16    ; send mess
     jd    1<11+18
     jl.        0
\f


; algol task create                                    page 5
l3:  al  w0     0     ; entry to task from exec
     rs  w0  x1+1536+36  ; clear program docname
     rl. w0     m5.
     rl. w3     m5.+2
     jd    1<11+0     ; set itr addr, itr mask
     rl  w3     66
     rl  w0  x3+50
     rs  w0  x1+1536+50 ; set parent proc addr
     rs  w0  x1+1536+54 ; set console proc addr
     rl. w2    (j13.)
     rs  w1     6
     dl  w1  x2+8
     rl  w2  x3+54    ; set base word of ctbl to
     al  w2  x2-1
     rs  w2  x1       ; execconst(54)-1
     ea  w1     0
     rl  w0  x3+26
     rs  w0  x1-2     ; ctbl.uixval:=execconst(26)
     al  w0     0
     rs  w0  x1       ; ctbl.lixval:=0
     rl. w2    (j13.)
     dl  w1  x2+12
     rl  w2  x3+58    ; set base word of exctbl to
     al  w2  x2-1
     rs  w2  x1       ; execconst(58)-1
     ea  w1     0
     rl  w0  x3+24
     rs  w0  x1-2     ; exctbl.uixval:=execconst(24)
     al  w0     0
     rs  w0  x1       ; exctbl.lixval:=0
     jl.       (j8.)  ; end addr expr, goto algol part
e.
\f


; algol task create                                    page 6 
; error procedure
b1:  am        -1     ; double call of eff start
b3:  al  w0     2     ; eff start not called before set entry
     rs. w0     f0.+2 ; set value
     al  w0     101
     ls  w0     12
     rs. w0     f0.   ; set opcode
     al. w1     f0.
     am        (66)
     am        (22)
     al  w3     1536+36  ; w3:=addr parent name
     jd    1<11+16    ; send mess
     jd    1<11+18    ; wait answ
     jl.        0



g4:
c. g4-g1-506
   m. code too big
z.
c. 502-g4+g1, jl -1, r.252-(:g4-g1:)>1 z. ; fill with ill instr.

<:set entry<0><0>:>           ; alarm text

i. e.                         ; end of segment
\f


; algol task create                                    page 7
; tails
g0:                          ; first tail
     
     1                       ; set entry
     0,r.4
     1<23 + e1 - e5          ; entry point
     1<18+25<12+25<6,0       ; proc(int array,int array)
     4<12 + e0 - e5          ; codeproc , start ext list
     1<12 + 4                ; 1 segm , 4 hw own

g1:                          ; last tail
     1<23 + 4                ; eff start
     0,r.4
     1<23 + e2 - e5          ; entry point
     1<18,0                  ; proc
     4<12 + e0 - e5
     1<12 + 4

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