www.retrosoftware.co.uk
http://www.retrosoftware.co.uk/forum/

BIN/HEX to BCD (to Decimal)
http://www.retrosoftware.co.uk/forum/viewtopic.php?f=73&t=639
Page 1 of 1

Author:  tricky [ Tue Jun 28, 2011 11:13 am ]
Post subject:  BIN/HEX to BCD (to Decimal)

Here is the BBC code, .ssd for the bin to bcd described in sample code here http://www.retrosoftware.co.uk/wiki/index.php/BIN/HEX_to_BCD_%28to_Decimal%29

In case you don't know, you can just copy here and then paste in BeebEm (if you don't have line numbers, just AUTO and then paste).

Code:
   10*K.10O.|MREN.|M*FX12,4|ML.|M
   20bin_as_bcd = &70
   30FOR O = 0 TO 2 STEP 2
   40P% = &5200
   50[OPT O
   60.hex_to_bcd
   70sei
   80sed
   90tya
  100pha
  110lsr A : lsr A : lsr A : lsr A
  120tay
  130lda bits1512_b0,Y
  140sta bin_as_bcd+0
  150lda bits1512_b1,Y
  160sta bin_as_bcd+1
  170lda bits1512_b2,Y
  180sta bin_as_bcd+2
  190pla
  200and #&F
  210tay
  220clc
  230lda bits118_b0,Y
  240adc bin_as_bcd+0
  250sta bin_as_bcd+0
  260lda bits118_b1,Y
  270adc bin_as_bcd+1
  280sta bin_as_bcd+1
  290lda #0
  300adc bin_as_bcd+2
  310sta bin_as_bcd+2
  320txa
  330lsr A : lsr A : lsr A
  340tay
  350clc
  360lda bits73_b0,Y
  370adc bin_as_bcd+0
  380sta bin_as_bcd+0
  390lda bits73_b1,Y
  400adc bin_as_bcd+1
  410sta bin_as_bcd+1
  420lda #0
  430adc bin_as_bcd+2
  440sta bin_as_bcd+2
  450txa
  460and #7
  470adc bin_as_bcd+0
  480sta bin_as_bcd+0
  490lda #0
  500adc bin_as_bcd+1
  510sta bin_as_bcd+1
  520lda #0
  530adc bin_as_bcd+2
  540sta bin_as_bcd+2
  550cld
  560cli
  570rts
  580.bits1512_b2
  590EQUB &00
  600EQUB &00
  610EQUB &00
  620EQUB &01
  630EQUB &01
  640EQUB &02
  650EQUB &02
  660EQUB &02
  670EQUB &03
  680EQUB &03
  690EQUB &04
  700EQUB &04
  710EQUB &04
  720EQUB &05
  730EQUB &05
  740EQUB &06
  750.bits1512_b1
  760EQUB &00
  770EQUB &40
  780EQUB &81
  790EQUB &22
  800EQUB &63
  810EQUB &04
  820EQUB &45
  830EQUB &86
  840EQUB &27
  850EQUB &68
  860EQUB &09
  870EQUB &50
  880EQUB &91
  890EQUB &32
  900EQUB &73
  910EQUB &14
  920.bits1512_b0
  930EQUB &00
  940EQUB &96
  950EQUB &92
  960EQUB &88
  970EQUB &84
  980EQUB &80
  990EQUB &76
 1000EQUB &72
 1010EQUB &68
 1020EQUB &64
 1030EQUB &60
 1040EQUB &56
 1050EQUB &52
 1060EQUB &48
 1070EQUB &44
 1080EQUB &40
 1090.bits118_b1
 1100EQUB &00
 1110EQUB &02
 1120EQUB &05
 1130EQUB &07
 1140EQUB &10
 1150EQUB &12
 1160EQUB &15
 1170EQUB &17
 1180EQUB &20
 1190EQUB &23
 1200EQUB &25
 1210EQUB &28
 1220EQUB &30
 1230EQUB &33
 1240EQUB &35
 1250EQUB &38
 1260.bits118_b0
 1270EQUB &00
 1280EQUB &56
 1290EQUB &12
 1300EQUB &68
 1310EQUB &24
 1320EQUB &80
 1330EQUB &36
 1340EQUB &92
 1350EQUB &48
 1360EQUB &04
 1370EQUB &60
 1380EQUB &16
 1390EQUB &72
 1400EQUB &28
 1410EQUB &84
 1420EQUB &40
 1430.bits73_b1
 1440EQUB &00
 1450EQUB &00
 1460EQUB &00
 1470EQUB &00
 1480EQUB &00
 1490EQUB &00
 1500EQUB &00
 1510EQUB &00
 1520EQUB &00
 1530EQUB &00
 1540EQUB &00
 1550EQUB &00
 1560EQUB &00
 1570EQUB &01
 1580EQUB &01
 1590EQUB &01
 1600EQUB &01
 1610EQUB &01
 1620EQUB &01
 1630EQUB &01
 1640EQUB &01
 1650EQUB &01
 1660EQUB &01
 1670EQUB &01
 1680EQUB &01
 1690EQUB &02
 1700EQUB &02
 1710EQUB &02
 1720EQUB &02
 1730EQUB &02
 1740EQUB &02
 1750EQUB &02
 1760.bits73_b0
 1770EQUB &00
 1780EQUB &08
 1790EQUB &16
 1800EQUB &24
 1810EQUB &32
 1820EQUB &40
 1830EQUB &48
 1840EQUB &56
 1850EQUB &64
 1860EQUB &72
 1870EQUB &80
 1880EQUB &88
 1890EQUB &96
 1900EQUB &04
 1910EQUB &12
 1920EQUB &20
 1930EQUB &28
 1940EQUB &36
 1950EQUB &44
 1960EQUB &52
 1970EQUB &60
 1980EQUB &68
 1990EQUB &76
 2000EQUB &84
 2010EQUB &92
 2020EQUB &00
 2030EQUB &08
 2040EQUB &16
 2050EQUB &24
 2060EQUB &32
 2070EQUB &40
 2080EQUB &48
 2090]
 2100NEXT
 2110FOR T% = 0 TO 65535
 2120X%=T% MOD 256
 2130Y%=T% DIV 256
 2140CALL hex_to_bcd
 2150dec$=STR$(T%)
 2160dec$=STRING$(5-LEN(dec$),"0") + dec$
 2170bcd$=CHR$(48+(bin_as_bcd?2))
 2180bcd$=bcd$ + CHR$(48+(bin_as_bcd?1 DIV 16))
 2190bcd$=bcd$ + CHR$(48+(bin_as_bcd?1 MOD 16))
 2200bcd$=bcd$ + CHR$(48+(bin_as_bcd?0 DIV 16))
 2210bcd$=bcd$ + CHR$(48+(bin_as_bcd?0 MOD 16))
 2220PRINT dec$,bcd$
 2230IF dec$ <> bcd$ THEN INPUT A$
 2240NEXT


Attachments:
File comment: BIN/HEX to BCD (to Decimal)
hex_to_bcd.zip [1.53 KiB]
Downloaded 14 times

Page 1 of 1 All times are UTC [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/