;
;          mason_3.txt
;
;  - intel.hex 
;  inhx8m , intel intelec 8MDS
;   ASCII
;   AVR Studio 4.19,
; MPLAB IDE v8.92  c51asm.exe
;
;     AT89S51
;
;    bottle  
;   RI  TI 
;     
;  RI
;
;----------------------------------------------
;
;      
; *.xeh     
;     
;
; R7= 
; R6= 
; R5= 
; R4= 
; R3= 
; R2= 
; R1= 
; R0= 
;
;   DPTR     
;
;  ,      16  
;        
;   9600      0,001041666 S
;    800   //.
;
;    
;     
;     
;
;----------------------------------------------
;
;
      .cseg
 bottle:
     clr ES ;    
		 push PSW
     push ACC
     push DPL
     push DPH
     mov step_ptr,#low kod_onstr ;   
     mov step_ptr+1,#high kod_onstr ; 
     setb ap_fill ;    \
                ;    
     clr preof_ldr ;     , '\r'  '\n'
     clr eof_ldr ;    "  "
     clr glob_er ;   " "
     mov a,SBUF ;     
     clr RI ;   
     setb REN ;  
;		 ELL_OFF
 bottle_1:
;     mov a,P3 ;  S_IN
;     jnb ACC.S_SCL,wait_endrx ;    
     jnb RI,bottle_1
     clr RI
     mov tmp_rx,SBUF
     clr RI ; RI=0
     mov SBUF,tmp_rx ;  -
     mov a,#low rebottl
     push ACC
     mov a,#high rebottl
     push ACC ;       
     mov a,step_ptr
     push ACC
     mov a,step_ptr+1 ;    step_ptr
     push ACC ;     
     ret ;     step_ptr  (ret step_ptr)
;      
 rebottl:
     jb glob_er,wait_endrx ;    
     jb eof_ldr,wait_endrx ;     
     sjmp bottle_1
 wait_endrx:
     clr REN ;  
     mov wtm1,#tm_ertmo ;   
		        ; / 
     clr wtm1_tic ;    
		 setb en_wtm1
 wait_drx:
     jbc wtm1_tic,alles_wt
     mov a,P3 ;
     jb ACC.0,wait_drx ; RXD=P3.0
     mov wtm1,#tm_ertmo
     sjmp wait_drx
 alles_wt:
     clr en_wtm1 ;  wtm1 
;     ELL_OFF
     pop DPH ;     
     pop DPL
     pop ACC
     pop PSW
     setb ES ;    
    ret ;     acall(lcall) bottle  
    ;        /
;
;----------------------------------------------
;       
;      
;
 kod_onstr:
       mov a,#start_kod
       xrl a,tmp_rx
       jnz rip_00
    mov step_ptr,#low kod_cnth ;   
    mov step_ptr+1,#high kod_cnth ;  
;    ELL_ON ;   ELL
   ret ;    rebottl -    
 rip_00:
      PRETEX str2 ;      
      setb glob_er ;   
     ret ;    rebottl -    
;----------------------------------------------
;       
;      
;        
;
 kod_cnth:
       ASCII_HI
      mov step_ptr,#low kod_cntl ;   
      mov step_ptr+1,#high kod_cntl ;  
     ret ;    rebottl -    
;----------------------------------------------
;       
;      
;        
;
 kod_cntl:
      ASCII_LO
      mov cnt_byts,a ;   
      mov cb_total,a ;    
      mov step_ptr,#low kod_adrhh ;   
      mov step_ptr+1,#high kod_adrhh ;  
     ret ;    rebottl -    
;----------------------------------------------
;       
;      
;     
;         
;
 kod_adrhh:
      ASCII_HI
       mov step_ptr,#low kod_adrhl ;   
      mov step_ptr+1,#high kod_adrhl ;  
     ret ;    rebottl -    
;----------------------------------------------
;       
;      
;     
;         
;
 kod_adrhl:
       ASCII_LO
       mov map_adr+1,a ;     
       add a,cb_total
       mov cb_total,a ;  
       mov step_ptr,#low kod_adrlh ;   
      mov step_ptr+1,#high kod_adrlh ;  
     ret ;    rebottl -    
;----------------------------------------------
;       
;      
;     
;         
;
 kod_adrlh:
      ASCII_HI
       mov step_ptr,#low kod_adrll ;   
      mov step_ptr+1,#high kod_adrll ;  
     ret ;    rebottl -    
;----------------------------------------------
;       
;      
;     
;         
;
 kod_adrll:
       ASCII_LO
       mov map_adr,a ;     
       add a,cb_total
       mov cb_total,a ;  
       jnb ap_fill,no_dubl
       clr ap_fill ;    
       mov boot_adr,map_adr
       mov boot_adr+1,map_adr+1 ;   
 no_dubl:
      mov step_ptr,#low kod_typeh ;   
     mov step_ptr+1,#high kod_typeh ;  
    ret ;    rebottl -    
;----------------------------------------------
;       
;      
;         
;
 kod_typeh:
        ASCII_HI
       mov step_ptr,#low kod_typel ;   
      mov step_ptr+1,#high kod_typel ;  
     ret ;    rebottl -    
;----------------------------------------------
;       
;      
;         
;
 kod_typel:
        ASCII_LO
        push ACC
        add a,cb_total
        mov cb_total,a ;  
        pop ACC
        jnz over_ldd ;    0,  
                  ;   
        mov DPL,map_adr
        mov DPH,map_adr+1 ;   
       mov step_ptr,#low kod_datah ;   
      mov step_ptr+1,#high kod_datah ;  
     ret ;    rebottl -    
 over_ldd:
        xrl a,#1 ;  1 -  
        jnz error_type ;      (   .)
        setb preof_ldr ;   preeof_ldr
        mov step_ptr,#low kod_ksh ;   
      mov step_ptr+1,#high kod_ksh ;  
     ret ;    rebottl -    
 error_type:
      PRETEX str7 ;      
      setb glob_er ;   
     ret ;    rebottl -    
;----------------------------------------------
;       
;      
;        
;
 kod_datah:
       ASCII_HI
       mov step_ptr,#low kod_datal ;   
      mov step_ptr+1,#high kod_datal ;  
     ret ;    rebottl -    
;----------------------------------------------
;       
;      
;        
;
 kod_datal:
        ASCII_LO
        movx @dptr,a ;    
        inc dptr ;  +1
        add a,cb_total
        mov cb_total,a ;  
        djnz cnt_byts,repit_ld
       mov step_ptr,#low kod_ksh ;   
      mov step_ptr+1,#high kod_ksh ;  
     ret ; ajmp ret_proc_rx ;  
 repit_ld:
        mov step_ptr,#low kod_datah ;   
       mov step_ptr+1,#high kod_datah ;  
     ret ;    rebottl -    
        ; /   cnt_byts/
;----------------------------------------------
;       
;      
;        
;
 kod_ksh:
        ASCII_HI
       mov step_ptr,#low kod_ksl ;   
      mov step_ptr+1,#high kod_ksl ;  
     ret ;    rebottl -    
;----------------------------------------------
;       
;      
;        
;
 kod_ksl:
       ASCII_LO
       xch a,cb_total
       cpl a
       inc a
       xrl a,cb_total
       jnz error_ks
       mov step_ptr,#low kod_repk ;   
      mov step_ptr+1,#high kod_repk ;  
     ret ;     irq_RI
 error_ks:
      PRETEX str1 ;      
      setb glob_er ;   
     ret ;    rebottl -    
;----------------------------------------------
;       
;     "\r"
;
 kod_repk:
        mov a,#vk_kod
       xrl a,tmp_rx
       jnz rip_01
     mov step_ptr,#low kod_pps ;   
    mov step_ptr+1,#high kod_pps ;  
   ret ;     irq_RI
 rip_01:
      PRETEX str2 ;      
      setb glob_er ;   
     ret ;    rebottl -    
;----------------------------------------------
;       
;     "\n"
;
 kod_pps:
       mov a,#ps_kod
       xrl a,tmp_rx
       jnz rip_02
       jnb preof_ldr,rep_ldd
       setb eof_ldr ;   -
       PRETEX str3 ;      
     ret ;    rebottl -    
 rep_ldd:
    mov step_ptr,#low kod_onstr ;   
    mov step_ptr+1,#high kod_onstr ;  
   ret ;     irq_RI
 rip_02:
      PRETEX str2 ;      
      setb glob_er ;   
     ret ;    rebottl -    
;
;----------------------------------------------
;
;      \
;  
;    ap_fill=0     \
;                        
;    eof_ldr=1\?     "  "
;    glob_er=?    " "
;
;    
;  boot_addr+1:boot_addr
;
;----------------------------------------------
;
 asc_bin:
     mov a,tmp_rx ;   
     jnb ACC.6,asc_h0 ;  ,  4
               ;   
     add a,#0x09 ;   A-F
 asc_h0:
     anl a,#0x0F ;     
   ret
;
;----------------------------------------------
; ********************************************
;
;     ASCII
;    - esc  \0
;
;----------------------------------------------
;
;      
;    
;     RB
;     
;
; R7=  
; R6=  
; R5=  
; R4=  
; R3=  
; R2=  
; R1=  
; R0=  
;
;   DPTR     
;
;----------------------------------------------
;
;      
; 
;  RI\TI     
;     
;
;     prog_txd_init
;     TI   pro_txd
;
;----------------------------------------------
;
   .cseg
 proc_txd_init:
     clr eof_txd ;   "  "
     mov ctp_tx,#0 ;      = 0
 proc_txd:
    push PSW
    push ACC
    push DPH
    push DPL
    mov DPL,strg_ptr ; 
    mov DPH,(strg_ptr+1) ; 
    mov a,ctp_tx
    movc a,@a+dptr
    jnz stdtx ;      \0 (000)
    setb eof_txd ;   (0x00)
    sjmp end_stdtx ;    eof_txd=1
 stdtx:
    mov SBUF,a ;     
    inc ctp_tx ;
 end_stdtx:
    pop DPL
		pop DPH
		pop ACC
		pop PSW
   ret
;
;
;----------------------------------------------
;