08 September 2020, 10:48 | #1 |
Registered User
Join Date: Feb 2020
Location: Germany
Posts: 195
|
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: 51
Posts: 5,365
|
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: 53
Posts: 725
|
/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: 195
|
thanks for your replies
|
08 September 2020, 13:11 | #5 |
Registered User
Join Date: Sep 2009
Location: Norway
Posts: 1,719
|
|
08 September 2020, 13:18 | #6 |
son of 68k
Join Date: Nov 2007
Location: Lyon / France
Age: 51
Posts: 5,365
|
|
08 September 2020, 14:10 | #7 |
Registered User
Join Date: Feb 2020
Location: Germany
Posts: 195
|
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: 3,331
|
Quote:
:50 is simple enough (already answered by others), but general multiplication or division in BCD is slow, in general. To multply, use the pen-and-paper algorithm of multiplying digit by digit, then add the partial products by a BCD add. Similarly, a BCD division follows the pen-and-paper 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: 3,331
|
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 |
BCD Arithmetic - howto^ | Herpes | Coders. General | 50 | 22 November 2021 06:38 |
ccr behaviour of div for v=1 | meynaf | Coders. Asm / Hardware | 9 | 02 December 2017 22:20 |
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 |
|
|