%----------------%  19.09.88 VERSION 10
%-    standalone-   -%
%-        -5300     -%
%-------------------------------------%
GLOBAL (LOCATION=&7C00) (START=&0)
.BEGIN EQU $

%------     --------%
%      ,    
. DUM
%    
  BYTES HDMI="MI",HDUS="SS"
  DATA LDADDR       %   (  ->  )
  DATA ENDMRK       %   (   <>0)
  EQUALS BHLN=$
%    
  EQUALS BLCKLN=512 %     
  BYTES [BLCKLN]
. FIN

%------   -----------------%
% 0000:      .....
%            
%            .....
% BUFFER-4:  
% BUFFER:    
% BEGIN:     

  EQUALS BUFFER=BEGIN-BLCKLN-BHLN-2     %  
  EQUALS WADDR=BUFFER+LDADDR
  EQUALS WEND=BUFFER+ENDMRK
  EQUALS WBUFF=BUFFER+BHLN
  EQUALS WMIUS0=BUFFER+HDMI ,WMIUS1=BUFFER+HDUS

%----  (    0) --%
.       RSET                      * RESET'   
.       BR   OVERBU
.       DAT ABOBUS-BEGIN,&00E0    *EBUS-
.       DAT ABOBUS-BEGIN,&00E0    *EINSTR-
.       DAT MAIN-BEGIN  ,&00E0    *BPT-
.OVERBU MOV  #BUFFER,%6           * BUFFER (  )
.       BPT                       *  7- 

LOCALS LABORT
  BYTES TXFAIL=RN.LF."<<DEVIATION>>".0
PROGRAM ABOBUS()
  SP=PC
  CALL DPC 'TXFAIL'
  GOTO $

%===================%
%=   =%
%===================%
LOCALS LMAIN
  BYTES TCOPY=RN.LF.LF.LF.LF.LF.LF."*MIUS TAPE BOOTSTRAP*"
  BYTES RN.LF.LF.LF," SELF-COPYING",0
  BYTES TLOAD=RN.LF," PROGRAM LOADING",0
  BYTES TSTART=RN.LF," PROGRAM START ",0 % ' '   '' 

PROGRAM MAIN()
%=
%=    
%=
  CALL DPC 'TCOPY-BEGIN'
  R5=&200
  (WHILE R5(-2)>=             % -  DCYCLE   2
    R5_BEGIN=@R5
  )WHILE
  PC=+'BEGIN'
%=
%=  
%=
  CALL DPC 'TLOAD'
  (WHILE
    (WHILE
      REPEAT CALL RBLOCK 'BUFFER','BLCKLN+BHLN' WHILE R0<>0  % 
    )WHILE WMIUS0<>"IM" OR WMIUS1<>"SS"    %  
  WHILE WEND=0                             %   
%                                     
    R3=WADDR ; R4='WBUFF'
    R5='BLCKLN'
    (WHILE R5(-2)>=
      ^R3=^R4
    )WHILE
  )WHILE
%=
%=  
%=
  CALL DPC 'TSTART'
  2[SP]=0 ; @SP=WADDR ; DESACTIVATE

%===========================%
%=    =%
%===========================%
LOCALS LMT
  EQUALS MTADDR=&F558         %  

%        (  )
  EQUALS MTOFF=&1             %  `'
  EQUALS MTREAD=&3,MTWRIT=&5  %/ 
  EQUALS MTMARK=&7            % 
  EQUALS MTFORW=&9,MTBACK=&B  %/   ( )
  EQUALS MTLGAP=&D            %  
  EQUALS MTREV=&F             %

  EQUALS DNSTY=&6000          %   (800 bpi)

PROGRAM RBLOCK()
  R5='MTADDR'
  _R5=R0                      %  (  ?)
  _R5=R1(.NEG.)               %  (  )
  _R5='DNSTY+MTREAD'          % 
  REPEAT WHILE @R5:>=0        %  
  R0=0 ; IF @R5<0 OR 2[R5]<>0 THEN R0=+1  %  
  RETURN

%=============================%
%=     =%
%=============================%
LOCALS LDP
  EQUALS COIST=&FF70,COOST=&FF74
PROGRAM DPC()
  (WHILE @R0:<>0
    REPEAT WHILE @'COOST':>=0
    @'COOST+2':=^R0
  )WHILE
  RETURN
