08 September 2020, 10:48  #1 
Registered User
Join Date: Feb 2020
Location: Germany
Posts: 103

div and mul of BCD or Hex?
Hello coder,
I am currently working on the display and calculation of scores. I have already read the thread "BCD Arithmetic  howto^". The simple adding and subtracting is no problem. But I have to divide the score by 50. Also the points can be increased by graduation 3*90 or 5*240 etc. Now to my problem. For dividing and multiplying with BCD there are no 1:1 commands. Multiplying can be avoided by using LookUp tables and adding. But for x:50 there is no alternative. Of course I can calculate everything in hex and convert the hex values to decimal for the display. But this eats a lot of cycles. How can I solve the problem without overloading the computer. Thanks in advance JoeJoe @Admins: please move to right section, sorry Last edited by JoeJoe; 08 September 2020 at 11:44. Reason: wrong section 
08 September 2020, 11:13  #2 
son of 68k
Join Date: Nov 2007
Location: Lyon / France
Age: 48
Posts: 4,350

You can convert the divide into a multiply.
First, add the number to itself to do *2. Then, remove the two last digits to do /100. You will have achieved /50. 
08 September 2020, 11:18  #3 
Registered User
Join Date: Dec 2010
Location: Athens/Greece
Age: 50
Posts: 647

/50 can be achieved by /100 (dropping last byte) and add the number to itself (so /100*2)

08 September 2020, 11:46  #4 
Registered User
Join Date: Feb 2020
Location: Germany
Posts: 103

thanks for your replies

08 September 2020, 13:11  #5 
Registered User
Join Date: Sep 2009
Location: Norway
Posts: 1,557


08 September 2020, 13:18  #6 
son of 68k
Join Date: Nov 2007
Location: Lyon / France
Age: 48
Posts: 4,350


08 September 2020, 14:10  #7 
Registered User
Join Date: Feb 2020
Location: Germany
Posts: 103

That's right, but we don't want to be like that
I do this with the reciprocal method. x/50 = x*(1/50) 
08 September 2020, 16:07  #8  
Registered User
Join Date: Jan 2019
Location: Germany
Posts: 1,322

Quote:
:50 is simple enough (already answered by others), but general multiplication or division in BCD is slow, in general. To multply, use the penandpaper algorithm of multiplying digit by digit, then add the partial products by a BCD add. Similarly, a BCD division follows the penandpaper algorithm of continuous subtraction until an overflow, and keeping the number of times a number was subtracted, then carry over the remainder, and continue with the next digit. All these algorithms are slow... 

08 September 2020, 16:09  #9 
Registered User
Join Date: Jan 2019
Location: Germany
Posts: 1,322

If you have no division instruction, the same way as in BCD, except that each digit can be either 0 or 1, which simplifies continuous subtraction to a single compare. If you do, well, use the division instruction. 
Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)  
Thread Tools  
Similar Threads  
Thread  Thread Starter  Forum  Replies  Last Post 
ccr behaviour of div for v=1  meynaf  Coders. Asm / Hardware  9  02 December 2017 22:20 
BCD Arithmetic  howto^  Herpes  Coders. General  49  16 September 2014 19:42 
Hex  Hanzu  HOL contributions  2  13 November 2013 16:57 
Little hex editing help please  Aria  support.Games  4  16 June 2011 20:20 
68000 Div/divu  dlfrsilver  support.WinUAE  3  01 November 2005 11:31 

