;
;          bdadb.txt
;    
; 
;    (unsigned int) 0-65536
;         ASCII
; 
;   
;
;----------------------------------------------
;
 dm_10 equ 10 ;
 dm_100 equ 100 ;
 dm_1000 equ 1000 ;
 dm_10000 equ 10000 ;
 m_ascii equ 0x30 ;
 m_blank equ 0x0F ;
;
   .dseg
 units:  .ds 1 ;  
 tens:   .ds 1 ;  
 hundr:  .ds 1 ;  
 thous:  .ds 1 ;  
 tthous: .ds 1 ;   
 m_drvl: .ds 1 ;  /
                  ;  
 m_drvh: .ds 1 ;  /
                  ;  
 m_acel: .ds 1 ; /
                  ;  
 m_aceh: .ds 1 ; /
                  ;  
;
;----------------------------------------------
;
;     
;     m_drvh:m_drvl
;
  .cseg
 bin_dec:
   clr a
   mov units,a
   mov tens,a
   mov hundr,a
   mov thous,a
   mov tthous,a
   mov r0,#tthous
   mov m_acel,#low dm_10000
   mov m_aceh,#high dm_10000
   acall bddiv
   mov m_acel,#low dm_1000
   mov m_aceh,#high dm_1000
   acall bddiv
   mov m_acel,#dm_100
   mov m_aceh,#0
   acall bddiv
   mov m_acel,#dm_10
   mov m_aceh,#0
   acall bddiv
   mov @r0,m_drvl
  ret
;----------------------------------
 bddiv:
   clr c
   inc @r0
   mov a,m_drvl
   subb a,m_acel
   mov m_drvl,a
   mov a,m_drvh
   subb a,m_aceh
   mov m_drvh,a
   jc stp_bddiv
   sjmp bddiv
 stp_bddiv:
   mov a,m_drvl ;  
   add a,m_acel
   mov m_drvl,a
   mov a,m_drvh
   addc a,m_aceh
   mov m_drvh,a
   dec @r0
   dec r0
  ret
;
;----------------------------------------------
;
;     
;     
; (  bin_dec)
;
;      
;    !
;
 dec_ascii:
   mov r0,#units
   mov a,@r0
   orl a,#m_ascii
   mov @r0,a
   inc r0
   mov a,@r0
   orl a,#m_ascii
   mov @r0,a
   inc r0
   mov a,@r0
   orl a,#m_ascii
   mov @r0,a
   inc r0
   mov a,@r0
   orl a,#m_ascii
   mov @r0,a
   inc r0
   mov a,@r0
   orl a,#m_ascii
   mov @r0,a
  ret
;
;----------------------------------------------
;
;     
;     ASCII,
;   0-9
;     !
;
;    
;
 ascii_dec:
   mov r0,#units
   mov a,#m_blank
   anl a,@r0
   mov @r0,a
   inc r0
   mov a,#m_blank
   anl a,@r0
   mov @r0,a
   inc r0
   mov a,#m_blank
   anl a,@r0
   mov @r0,a
   inc r0
   mov a,#m_blank
   anl a,@r0
   mov @r0,a
   inc r0
   mov a,#m_blank
   anl a,@r0
   mov @r0,a
  ret
;
;----------------------------------------------
;
;    -
;      
;     m_drvh:m_drvl
;
 dec_bin:
    clr a
    mov m_drvl,a
    mov m_drvh,a
    mov m_drvl,units
    mov r0,#tens
    mov  m_acel,#dm_10
    mov m_aceh,#0
    lcall p_mul ;acall p_mul
    inc r0
    mov m_acel,#dm_100
    mov m_aceh,#0
    lcall p_mul ;acall p_mul
    inc r0
    mov m_acel,#low dm_1000
    mov m_aceh,#high dm_1000
    lcall p_mul ;acall p_mul
    inc r0
    mov m_acel,#low dm_10000
    mov m_aceh,#high dm_10000
    lcall p_mul
  ret
;----------------------------------
 p_mul:
    mov a,@r0
    jz end_mul
    mov r2,a
 pp_mul:
    mov a,m_acel
    add a,m_drvl
    mov m_drvl,a
    mov a,m_aceh
    addc a,m_drvh
    mov m_drvh,a
    djnz r2,pp_mul
 end_mul:
   ret
;