Difference between revisions of "Converting Binary Coded Decimal"

From BeebWiki
Jump to: navigation, search
(Added 6502 code.)
m
Line 8: Line 8:
 
A 7-bit binary number can be converted to BCD so it can be printed in hex with the following 6502 code:
 
A 7-bit binary number can be converted to BCD so it can be printed in hex with the following 6502 code:
  
     \ Print decimal number by converting it to BCD
+
     \ Convert binary number to BCD
     \ --------------------------------------------
+
     \ ----------------------------
     \ On entry, A=value to print 0-99
+
     \ On entry, A=value 0-99
     \ On exit,  A,X corrupted
+
     \ On exit,  A=BCD value
 +
    \          X corrupted
 
     .BINtoBCD
 
     .BINtoBCD
 
     TAX            :\ Transfer number to X
 
     TAX            :\ Transfer number to X

Revision as of 01:20, 3 October 2016

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
   \           X corrupted
   .BINtoBCD
   TAX             :\ Transfer number to X
   LDA #&99        :\ Start with -1 in BCD form
   SED             :\ Switch to Decimal arithmetic
   .PrDecLp
   CLC:ADC #1      :\ Add 1 with BCD arithmetic
   DEX:BPL PrDecLp :\ Add 1 for the total in X until X<0
   CLD:RTS         :\ Switch back to Binary arithmetic


Jgharston 21:11, 23 June 2007 (BST) Jgharston (talk) 00:19, 3 October 2016 (UTC)