|
|
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: 12288 (0x3000)
Types: TextFile
Names: »texecintf1«
└─⟦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 normal algol-tasks interfacing to e x e c
; and the call of the algoltask
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=0 ; no of externals
e5:
g1: g2 , g2 ; head word
j3: g0+3 , 0 ; rs entry 3 : reserve space
j4: g0+4 , 0 ; - - 4 : take expr
j5: g0+5 , 0 ; - - 5 : goto point
j6: g0+6 , 0 ; - - 6 : end integer expr
j8: g0+8 , 0 ; - - 8 : end addr expr
j13: g0+13, 0 ; - - 13 : last used
j30: g0+30, 0 ; - - 30 : saved w3, stack ref
g2=k-2-g1
w.
e0: g0 ; start external list
0 ; 0 hw in own core
s3 , s4 ; date, clock
; variables
f2: 0 ; work
f9=20 ; real addr of entryaddr to exec-proc
f10: 0 , r.15 ; paramarea for exec calls
\f
; exec interface page 2
; procedures with no params
e10: am -1 ; end task(1)
e11: am -1 ; abort(2)
e12: am -2 ; check void(3)
e13: am -1 ; logout(5)
e14: al w1 6 ; stop appl(6)
rl. w2 (j13.) ; saved w3, stack ref
ds. w3 (j30.)
jl. w3 b9. ; call exec-proc
jl. (j8.) ; end addr expr (only check void)
; procedures with one integer call param
e15: rl. w2 (j13.) ; split(9), reschedule
ds. w3 (j30.) ; saved w3, stack ref
jl. w1 b1. ; take 1. param
rl w0 x1 ; w0:=time
al w1 9
jl. w3 b9. ; call exec-proc
; integer procedures with one integer call param
e16: am -4 ; start alien(10)
e17: am -1 ; get excb(14)
e18: am -7 ; put excb(15)
e19: al w1 22 ; write ctbl(22)
rs. w1 f2. ; save procno
rl. w2 (j13.)
ds. w3 (j30.) ; saved w3, stack ref
jl. w1 b1. ; take 1. param
rl w0 x1
rl. w1 f2.
jl. w3 b9. ; call exec-proc
rl w1 0 ; w1:=status
jl. (j6.) ; end intg expr
\f
; exec interface page 3
; integer procedures with one integer call,return param
e23: am -1 ; reserve excb(12)
e24: al w1 13 ; release excb(13)
rs. w1 f2. ; save procno
rl. w2 (j13.)
ds. w3 (j30.) ; saved w3, stack ref
jl. w1 b1. ; take 1. param
rl w0 x1
rl. w1 f2.
jl. w3 b9. ; call exec-proc
rl w1 0 ; w1:=status
rl w0 4 ; w0:=excbno
dl. w3 (j30.)
rs w0 (x2+8) ; store excbno
jl. (j6.) ; end intg expr
\f
; exec interface page 4
; integer procedure dump(type,start index, end index,long array)
b. m10 w.
e25: rl. w2 (j13.)
ds. w3 (j30.) ; saved w3, stack ref
jl. w1 b1. ; take 1. param
rl w0 x1
rs. w0 f10. ; store dumptype in paramarea
jl. w1 b2. ; take 2. param
rl w1 x1
al w1 x1-1
ls w1 1 ; convert index to hw
rs. w1 f10.+2; store rel startaddr
jl. w1 b3. ; take 3. param
rl w1 x1
al w1 x1-1
ls w1 1 ; convert index to hw
rs. w1 f10.+4; store rel endaddr
dl w1 x2+20
ea w1 0 ; w1:=dope addr long array
al w3 8
al w0 0
sh w3 (x1-2) ; if lowindex<>1 or high index<2 then
se w0 (x1) ; status:=4
jl. m1.
rl w3 (x2+20) ; move text in array to paramarea
dl w1 x3+4
ds. w1 f10.+8
dl w1 x3+8
ds. w1 f10.+12
al. w2 f10. ; set params for dump call
al w1 4
jl. w3 b9. ; call exec-proc
rl w1 0 ; w1:=status
se w1 x1
m1: al w1 4 ; status:=4
jl. (j6.) ; end intg expr
e.
\f
; exec interface page 5
; integer procedure write terminal(applid,emergency,broadcast,phtid)
e26: rl. w2 (j13.)
ds. w3 (j30.) ; saved w3, stack ref
jl. w1 b1. ; take 1. param
rl w0 x1
rs. w0 f10. ; store applid in paramarea
jl. w1 b2. ; take 2. param
rl w0 x1
rs. w0 f10.+2; store emergency in paramarea
jl. w1 b3. ; take 3. param
rl w0 x1
rs. w0 f10.+4; store broadcast in paramarea
jl. w1 b4. ; take 4. param
rl w0 x1
rs. w0 f10.+6; store phtid in paramarea
al. w2 f10. ; set params for exec proc
al w1 11
jl. w3 b9. ; call exec-proc
rl w1 0 ; w1:=status
rl w0 4 ; w0:=phtid pointer
dl. w3 (j30.)
rs w0 (x2+20) ; store phtid
jl. (j6.) ; end intg expr
; integer procedure priority(min,max)
e27: rl. w2 (j13.)
ds. w3 (j30.) ; saved w3, stack ref
jl. w1 b2. ; take 2. param
jl. w1 b1. ; take 1. param
rl w0 x1 ; set params for exec-proc
al w1 8
jl. w3 b9. ; call exec-proc
rs. w2 f10. ; save w2
dl. w3 (j30.)
rs w1 (x2+8) ; store minprio
rl. w1 f10.
rs w1 (x2+12) ; store maxprio
rl w1 0 ; w1:=startprio
jl. (j6.) ; end intg expr
\f
; exec interface page 6
; integer procedure opmess(textarray,statout)
b. m10 w.
m2: 10
e28: rl. w2 (j13.)
ds. w3 (j30.) ; saved w3,stack ref
dl w1 x2+8 ; check array size
ea w1 0
al w3 28
al w0 0
sn w0 (x1) ; if low index<>1 or
se w3 (x1-2) ; high index<>7 then
jl. m4. ; goto error
rl w1 (x2+8) ; 1.formal:=base addr array
rs w1 x2+8
jl. w1 b2. ; take 2. param
rl w3 x1
al w2 0
rs. w2 f2. ; set 3 zero chars in converted statout
sl w3 0
sl w3 999 ; if statout>=0 and statout<999 then
jl. m1.
wd. w3 m2. ; begin
al w2 x2+48 ; convert statout to char
rs. w2 f2. ; store 3. digit
al w2 0
wd. w3 m2.
al w2 x2+48
al w3 x3+48
ls w2 8
ls w3 16
wa w3 4 ; combine 2. and 3. digit
wa. w3 f2.
rs. w3 f2. ; f2:=converted statout
am -2
m1: al w1 28 ; w1:=hw last word
dl. w3 (j30.)
am (x2+8) ; last word bits 16:23 :=0
rl w0 x1
ls w0 -8
ls w0 8
am (x2+8)
rs w0 x1
\f
; exec interface page 7
rl w3 x2+8 ; w3:=base textarray
al. w2 f10. ; w2:=first textout
m3: rl w1 x3+2 ; while word bits 16:23<>0 do
rs w1 x2 ; move words
al w2 x2+2
al w3 x3+2
sz w1 255
jl. m3.
al w1 x1+32 ; last word bits 16:23:=space
rs w1 x2-2
rl. w1 f2.
rs w1 x2 ; end up with statout
al. w0 f10. ; setup params for exec-proc
al w2 x2+2
al w1 7
jl. w3 b9. ; call exec-proc
am w1 -1 ; status:=0
m4: al w1 1
jl. (j6.) ; end intg expr
e.
; procedure call_task(ctbl,exctbl,task)
b. m3 w.
e29: rl. w2 (j13.)
ds. w3 (j30.)
al w1 -14
jl. w3 (j3.) ; reserve space for ext call
rs w2 x1+0
rl. w0 g1.
rs w0 x1+2 ; set return segm tab addr
al w3 8
ls w3 12
al w3 x3+m0
rs w3 x1+4 ; set app, rel return
dl w0 x2+8 ; move array formals to new stack
ds w0 x1+8
dl w0 x2+12
ds w0 x1+12
dl w1 x2+16
jl. (j5.) ; goto point
m0=k-g1
jl. e10. ; goto end task
e.
\f
; exec interface page 8
; subprocedure take param
; call: w2=stack ref, jl. w1 b<paramno>.
; return w1=addr param, stack(param)=addr param, w0=undef
; w2,w3=stack ref,saved w3
b. m10 w.
m1: 0 ; param
m2: 0 ; return
b1: am -4 ; 1. param
b2: am -4 ; 2. param
b3: am -4 ; 3. param
b4: al w0 20 ; 4. param
rs. w0 m1. ; save paramno
rs. w1 m2. ; save return
am. (m1.)
dl w1 x2 ; load paramdescr
so w0 16
jl. w3 (j4.) ; take expr
ds. w3 (j30.)
am. (m1.)
rs w1 x2 ; store paramaddr
jl. (m2.)
e.
; subroutine call-exec-proc
b9: am (66)
am (22) ; get first core addr
jl (f9) ; return to call addr
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.
<:exec intf1<0>:> ; alarm text
i. e. ; end of segment
\f
; exec interface page 9
; tails
g0: ; first tail
1 ; end task , no of segments
0,r.4 ; fill for docname
1<23 + e10 - e5 ; entry point
1<18 , 0 ; procedure
4<12 + e0 - e5 ; codeproc , start ext. list
1<12 ; 1 segment
1<23 + 4 ; abort
0,r.4
1<23 + e11 - e5
1<18 , 0
4<12 + e0 - e5
1<12
1<23 + 4 ; check void
0,r.4
1<23 + e12 - e5
1<18 , 0
4<12 + e0 - e5
1<12
1<23 + 4 ; logout
0,r.4
1<23 + e13 - e5
1<18 , 0
4<12 + e0 - e5
1<12
1<23 + 4 ; stop appl
0,r.4
1<23 + e14 - e5
1<18 , 0
4<12 + e0 - e5
1<12
1<23 + 4 ; split (reschedule)
0,r.4
1<23 + e15 - e5
1<18+19<12,0 ; proc(intg addr)
4<12 + e0 - e5
1<12
\f
; exec interface page 10
1<23 + 4 ; start alien
0,r.4
1<23 + e16 - e5
3<18+19<12,0 ; intg proc(intg addr)
4<12 + e0 - e5
1<12
1<23 + 4 ; get excb
0,r.4
1<23 + e17 - e5
3<18+19<12,0
4<12 + e0 - e5
1<12
1<23 + 4 ; put excb
0,r.4
1<23 + e18 - e5
3<18+19<12,0
4<12 + e0 - e5
1<12
1<23 + 4 ; write ctbl
0,r.4
1<23 + e19 - e5
3<18+19<12,0
4<12 + e0 - e5
1<12
\f
; exec interface page 11
1<23 + 4 ; reserve excb
0,r.4
1<23 + e23 - e5
3<18+19<12,0
4<12 + e0 - e5
1<12
1<23 + 4 ; release excb
0,r.4
1<23 + e24 - e5
3<18+19<12,0
4<12 + e0 - e5
1<12
1<23 + 4 ; dump
0,r.4
1<23 + e25 - e5
3<18+27<12+19<6+19,19<18 ; intg proc(intg addr,intg addr,intg addr,long array)
4<12 + e0 - e5
1<12
1<23 + 4 ; write terminal
0,r.4
1<23 + e26 - e5
3<18+19<12+19<6+19,19<18 ; intg proc(intg addr,intg addr,intg addr,intg addr)
4<12 + e0 - e5
1<12
\f
; exec interface page 12
1<23 + 4 ; priority
0,r.4
1<23 + e27 - e5
3<18+19<12+19<6,0 ; intg proc(intg addr,intg addr)
4<12 + e0 - e5
1<12
1<23 + 4 ; opmess
0,r.4
1<23 + e28 - e5
3<18+19<12+27<6,0 ; intg proc(long array,intg addr)
4<12 + e0 - e5
1<12
g1: ; last tail
1<23 + 4 ; call_task
0,r.4
1<23 + e29 - e5
1<18+31<12+25<6+25,0 ; proc(intg array,intg array,proc)
4<12 + e0 - e5
1<12
d. , p.<:insertproc:>
▶EOF◀