|
|
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: 8448 (0x2100)
Types: TextFile
Names: »rewind4tx «
└─⟦01e83a425⟧ Bits:30008166 Bånd med SW8010 og SW8500 source code
└─⟦75ff9bef3⟧
└─⟦this⟧ »rewind4tx «
; fgs 1988.05.06 rewind/unload, page ...1...
b. g5 ; block for insertproc
d.
p. <:fpnames:> ; block for fpnames
l.
s. a5,b0,c27,d0,e12,f4
w.
k=h55
g3=k ; define program base address;
; constants:
c0: <:unload:> ;
c4: 2.111101 ; mask for harmless bits
; all device bits + all rts bits + normal answer
; variables:
c6: 0 ; program name addr
c7: 0 ; param pointer
; mess area:
c2: 0, r.8 ;
; answer area:
c3: 0, r.8 ;
; filedescriptor:
c10: 0, r.10 ; modekind, 4 words docname, 5 words tail
\f
; fgs 1988.05.06 rewind/unload, page ...2...
g4: ; program start:
al w1 x3+2 ; save prog name addr
rs. w1 c6. ;
se w3 x2 ; if left hand side then
jl. e1. ; alarm(<:call:>);
al w3 x3+10 ;
rs. w3 c7. ; save param pointer;
bl w2 x3 ; if endparam then
sh w2 3 ; then alarm(<:param missing:>);
jl. e11. ;
bl w2 x3+1 ;
se w2 4 ; if integer then
jl. a0. ; begin <*device number*>
rl w3 x3+2 ; device := param *
ls w3 1 ; 2 +
wa w3 74 ; first device in nametable;
sl w3 (76) ; if device >= first area in nametable then
jl. e5. ; alarm (<:not device:>);
rl w3 x3 ; proc := nametable (device);
al w3 x3+2 ; w3 := addr name;
jl. a1. ; goto name;
; end <*device number*> else
a0: ; begin <*name*>;
al. w1 h54. ; w1:=lookup area;
al w3 x3+2 ; w3:=name addr.
jd 1<11+42 ; lookup(param2);
se w0 0 ;
jl. a1. ; if found then
bz w2 x1+1 ; begin
se w2 18 ; if kind<>18 then
jl. e4. ; alarm(<:modekind:>);
bl w2 x1 ;
sz w2 1 ; if mode odd then
jl. e4. ; alarm(<:modekind:>);
al w3 x1+2 ; end;
\f
; fgs 1988.05.06 rewind/unload, page ...2...
a1: dl w1 x3+2 ; end <*name*>;
ds. w1 c10.+4 ; move tapename
dl w1 x3+6 ; to filedescriptor;
ds. w1 c10.+8 ;
al. w3 c10.+2 ; w3 := addr name in file descriptor;
jd 1<11+4 ; proc descr (name);
sn w0 0 ; if not exist then
jl. e7. ; alarm (<:no process:>);
rl w3 (0) ;
sn w3 18 ; if kind = 18 then
jl. a2. ; goto ok;
sl w3 84 ; if kind < 84
sl w3 86 ; or kind > 85 then
jl. e6. ; alarm (<:not mt:>);
am (0) ;
el w3 +36 ; get subkind;
se w3 18 ; if subkind <> 18 then
jl. e6. ; alarm (<:not mt:>);
a2: rl. w3 c6. ; w3 := addr prog name;
dl w1 x3+2 ; move op :=
sn. w0 (c0. ) ; if progname (1:2) = <:unload:> then
se. w1 (c0.+2) ; unload
am -1 ; else
al w0 5 ; rewind;
al. w1 c2. ; w1 := addr mess area;
rs w0 x1+2 ; mess area.move op := move op;
al w0 8 ; mess area.operation :=
hs w0 x1 ; move;
al. w3 c10.+2 ; w3 := addr docname;
jd 1<11+6 ; initialize process;
jd 1<11+16 ; send message;
al. w1 c3. ; w1 := addr answer area;
jd 1<11+18 ; wait answer;
jd 1<11+10 ; release process;
al w3 1 ;
ls w3 (0) ; status := 1 shift result;
al w0 0 ;
se w3 1<1 ; if status = dummy answer then
ds. w0 c3.+2 ; begin
; answer.status := status;
; halfs xferred := 0 ;
; end;
lo. w3 c3. ; status := status or answer.status;
al w2 x3 ; w2 := status;
la. w3 c4. ; status := status harmless bits;
sn w3 0 ; if status = 0 then
al w2 0 ; w2 := 0;
al. w1 c10.+2 ; w1 := addr docname;
jl. h7. ; goto fp;
\f
; fgs 1988.05.06 rewind/unload, page ...3...
e0: <:<10>***:> ;
e1: jl. w1 f1. , <:call<10><0>:>
e2: jl. w1 f2. , <: param<10>:>
e3: jl. w1 f3. , <: param<10>:>
e4: jl. w1 f3. , <: modekind error<10>:>
e5: jl. w1 f3. , <: not device no<10><0>:>
e6: jl. w1 f3. , <: device not mt<10><0>:>
e7: jl. w1 f3. , <: no process<10><0>:>
e11: jl. w1 f1. , <:parameter missing<10><0>:>
f0:
; procedure outalarmhead
b. j0
w.
rs. w3 j0. ; save return
al. w0 e0. ;
jl. w3 h31.-2 ; outtext(cur,<:***:>);
rl. w0 c6. ; outtext(programname);
jl. w3 h31. ;
al w2 32 ; outsp;
jl. w3 h26. ;
jl. (j0.) ; return
j0: 0 ; saved return
e.
\f
; fgs 1988.05.06 rewind/unload, page ...4...
f1:
b. j3
w.
rs. w1 j2. ; save text addr
jl. w3 f0. ; outalarmhead
rl. w0 j2. ;
jl. w3 h31. ; outtext(alarm);
jl. f4. ; goto alarmexit;
f2:
rs. w1 j2. ; save alarm text;
jl. w3 f0. ; outalarmhead;
rl. w2 c7. ; parampointer;
al w0 x2-8 ;
jl. w3 h31. ; outtext(preceeding param);
al w2 46 ;
jl. w3 h26. ; outpoint;
jl. j0. ;
f3:
rs. w1 j2. ; save alarm text
jl. w3 f0. ; outalarmhead;
j0: rl. w2 c7. ; parampointer;
bz w3 x2+1 ;
se w3 10 ;
jl. j1. ; if param=text then
al w0 x2+2 ; outtext(param)
jl. w3 h31. ; else
jl. j3. ;
j1: rl w0 x2+2 ; outinteger(param);
jl. w3 h32. ;
1 ;
j3: rl. w0 j2. ;
jl. w3 h31. ; outtext(alarm);
f4: al w2 1 ; not ok
jl. h7. ;
j2: 0 ;
e.
e. ; end program segment
m. 1989.02.03 fp utility, sys3, rewind/unload
\f
; fgs 1988.05.06 rewind/unload, page ...5...
g2=k-h55 ; code length
g0: (:g2+511:)>9 ; segments
0, r.4 ; docname
s2 ; date
0, 0 ; file, block
2<12+g4-g3 ; contents, entry
g2 ; loadlength
g1: 1<23+4 ; segments
0, r.4 ; docname
s2 ; date
0, 0 ; file, block
2<12+g4-g3 ; contents, entry
g2 ; loadlength
d.
p.<:insertproc:>
e.
▶EOF◀