# Converting Binary Coded Decimal

Binary Coded Decimal (BCD) is a method of representing a decimal number as a hexadecimal value using the hex digits 0-9 and ignoring A-F. For example, the number 21 (hex &15) would be represented as &21 (decimal 33). It can be a convenient internal representation of decimal numbers as each hexadecimal digit can be displayed without any further processing. See Wikipedia. BCD values can be decoded with:

```   number% = VALSTR\$~bcd%
```

Numbers can be encoded in BCD using:

```   bcd% = EVAL("&"+STR\$number%)
```

A 7-bit binary number can be converted to BCD so it can be printed in hex with the following 6502 code:

```   \ Convert binary number to BCD
\ ----------------------------
\ On entry, A=value 0-99
\ On exit,  A=BCD value &00-&99
\           X corrupted
.BINtoBCD
TAX             :\ Transfer number to X
SED             :\ Switch to Decimal arithmetic
.BINtoBCDlp
DEX             :\ Decrement input value in X
BPL BINtoBCDlp  :\ Loop until input value < 0
CLD:RTS         :\ Switch back to Binary arithmetic
```

A BCD number can be converted to binary with the following 6502 code:

```\ Convert BCD to Binary
\ --------------------------------------------
\ On entry, A=BCD value &00-&99
\ On exit,  X=binary value 0-99
\           A=corrupted
.BCDtoBIN