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

⟦f5803ffaf⟧ TextFile

    Length: 8448 (0x2100)
    Types: TextFile
    Names: »rewind4tx   «

Derivation

└─⟦01e83a425⟧ Bits:30008166 Bånd med SW8010 og SW8500 source code
    └─⟦75ff9bef3⟧ 
        └─⟦this⟧ »rewind4tx   « 

TextFile


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