;
; Peter Hemsley's 12-bit Bin_to_BCD (ProdH:ProdL binary input
; and D3:D0 unpacked BCD output)
;
Bin2Dec
movf ProdH,W ; 16-bit binary hi |B0
iorlw 0xF0 ; w=H2-16 |B0
movwf D1 ; D1=H2-16 |B0
addwf D1,f ; D1=H2*2-32 |B0
addwf D1,f ; D1=H2*3-48 |B0
movwf D2 ; D2=H2-16 |B0
addlw -D'5' ; w=H2-21 |B0
addwf D2,f ; D2=H2*2-37 Done! |B0
addlw D'41' ; w=H2+20 |B0
movwf D0 ; D0=H2+20 |B0
swapf ProdL,W ; 16-bit binary lo |B0
iorlw 0xF0 ; w=H1-16 |B0
addwf D1,f ; D1=H2*3+H1-64 |B0
addwf D0,f ; D0=H2+H1+4, C=1 |B0
rlf D0,f ; D0=(H2+H1)*2+9, C=0 |B0
comf D0,f ; D0=-(H2+H1)*2-10 |B0
rlf D0,f ; D0=-(H2+H1)*4-20 |B0
movf ProdL,W ; |B0
andlw 0x0F ; w=H0 |B0
addwf D0,f ; D0=H0-(H2+H1)*4-20 Done! |B0
rlf D1,f ; C=0, D1=H2*6+H1*2-128 Done! |B0
movlw D'5' ; |B0
movwf D3 ; |B0
movlw D'10' ; |B0
mod0 addwf D0,f ; D(X)=D(X)mod10 |B0
decf D1,f ; D(X+1)=D(X+1)+D(X)div10 |B0
skpc ; |B0
goto mod0 ; |B0
mod1 addwf D1,f ; |B0
decf D2,f ; |B0
skpc ; |B0
goto mod1 ; |B0
mod2 addwf D2,f ; |B0
decf D3,f ; |B0
skpc ; |B0
goto mod2 ; |B0
return ; |B0