Unpacked BCD to 16 bit binary conversion
;*******************************************************************************
; Input: unpacked BCD in tenk:thou:hund:tens:ones
;Output: 16 bit binary in hi:lo
; Size: 35 instructions
;Timing: 2+34+2=38 instruction cycles
;
; Notes:
;1) if input is higher than 65535 output is meaningless
;2) algorithm synopsis:
;
;> dec2bin([1 10 100 1000 1e4], 16)
;ans =
;0000000000000001
;0000000000001010
;0000000001100100
;0000001111101000
;0010011100010000
;
;Or coded in three levels ('+' represents +1, '-' represents -1):
;000000000000000+ * ones +
;000000000000+0+0 * tens +
;000000000++00+00 * hund +
;00000+0000-0+000 * thou +
;00+0+00-000+0000 * tenk
;
;bin = (((tens+thou+tenk*256)*2+
; hund+hund*16+thou*256)*2+
; tens+hund*16-thou*16+tenk*16*256)*2+
; ones+tenk*16-tenk*256
;
;January 24, 2001 by Nikolai Golovchenko
;*******************************************************************************
dec2bin16
movf tens, w
addwf thou, w
movwf lo
addwf lo, f
rlf tenk, w
movwf hi
swapf hund, w
addwf hund, w
addwf lo, f
movf thou, w
addwf hi, f
rlf lo, f
rlf hi, f
swapf hund, w
addwf tens, w
addwf lo, f
swapf tenk, w
skpnc
iorlw 0x01
addwf hi, f
swapf thou, w
subwf lo, f
skpc
decf hi, f
clrc
rlf lo, f
rlf hi, f
swapf tenk, w
addwf ones, w
addwf lo, f
movf tenk, w
skpnc
decf tenk, w
subwf hi, f
return
;*******************************************************************************