|
|
DataMuseum.dkPresents historical artifacts from the history of: RC4000/8000/9000 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC4000/8000/9000 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 6912 (0x1b00)
Types: TextFile
Names: »tsetentry«
└─⟦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⟧
; 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◀