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: 3+34+3=40 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 22, 2001 by Nikolai Golovchenko
;*******************************************************************************
dec2bin16
mov W, tens
add W, thou
mov lo, W
add lo, W
mov W, <<tenk
mov hi, W
mov W, <>hund
add W, hund
add lo, W
mov W, thou
add hi, W
rl lo
rl hi
mov W, <>hund
add W, tens
add lo, W
mov W, <>tenk
snc
or W, #$01
add hi, W
mov W, <>thou
sub lo, W
sc
dec hi
clc
rl lo
rl hi
mov W, <>tenk
add W, ones
add lo, W
mov W, tenk
snc
mov W, --tenk
sub hi, W
retp
;*******************************************************************************