From: Scott Dattalo
W_to_ascii:
mov bin, W ;added
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
;added (from here to bottom)
mov W, hundreds ;
or W, #$30 ;convert to ascii
call send_lcd ;hundreds to LCD
mov W, <>tens_and_ones
and W, #$0f
or W, #$30 ;always less than 0x0A
call send_lcd ;tens to LCD
mov W, tens_and_ones
and W, #$0f
or W, #$30
add W, Hack
call send_lcd ;ones to LCD
ret