From: Scott Dattalo, notes
Translated and optimized for the Scenix SX by Nikolai Golovchenko
;******************************** ;binary_to_bcd - 8-bits ; ;Input ; bin - 8-bit binary number ; A1*16+A0 ;Outputs ; hundreds - the hundreds digit of the BCD conversion ; tens_and_ones - the tens and ones digits of the BCD conversion binary_to_bcd: clr hundreds mov W, <>bin ;w = A0*16+A1 add W, bin ;w = A0+A1 and W, #00001111b ;w = A0+A1 % 16 mov tens_and_ones, W ;tens_and_ones = A0+A1 % 16 mov W, #$16 snb DC ;if A0+A1 > 16 add tens_and_ones, W ; tens_and_ones += 16 mov W, #$06 snb DC ;if tens_and_ones % 16 > 10 add tens_and_ones, W ; tens_and_ones += 6 add tens_and_ones, W ;tens_and_ones += 6 sb DC ;if tens_and_ones < 10 sub tens_and_ones, W ; tens_and_ones -= 6 mov W, #$16 - 1 + $6 snb bin.4 add tens_and_ones, W mov W, #-$06 sb DC add tens_and_ones, W mov W, #$30 snb bin.5 add tens_and_ones, W mov W, #$20 snb bin.7 add tens_and_ones, W mov W, #$60 snb bin.6 add tens_and_ones, W add tens_and_ones, W rl hundreds sb hundreds.0 sub tens_and_ones, W snb bin.7 inc hundreds