|
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◀