WARNING: Untested code
Input:
W is a binary number in the range 0..29
Output:
W is a BCD number in the range 0x00..0x29
; W is 0..29
addlw .256-.20 ; C will be set if number was >= 20
skpnc
addlw .6 ; ...adjust for 20..29
addlw -(.256-.20) ; Back to original value
addlw .256-.10 ; C will be set if number was >= 10
skpnc
addlw .6 ; ...adjust for 10..29
addlw -(.256-.10) ; Back to original value
Comments: