English Amiga Board


Go Back   English Amiga Board > Coders > Coders. General > Coders. Tutorials

 
 
Thread Tools
Old 08 September 2020, 10:48   #1
JoeJoe
Registered User
 
Join Date: Feb 2020
Location: Germany
Posts: 177
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
JoeJoe is offline  
Old 08 September 2020, 11:13   #2
meynaf
son of 68k
 
meynaf's Avatar
 
Join Date: Nov 2007
Location: Lyon / France
Age: 51
Posts: 5,323
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.
meynaf is online now  
Old 08 September 2020, 11:18   #3
alkis
Registered User
 
Join Date: Dec 2010
Location: Athens/Greece
Age: 53
Posts: 719
/50 can be achieved by /100 (dropping last byte) and add the number to itself (so /100*2)
alkis is offline  
Old 08 September 2020, 11:46   #4
JoeJoe
Registered User
 
Join Date: Feb 2020
Location: Germany
Posts: 177
thanks for your replies
JoeJoe is offline  
Old 08 September 2020, 13:11   #5
8bitbubsy
Registered User
 
8bitbubsy's Avatar
 
Join Date: Sep 2009
Location: Norway
Posts: 1,709
Quote:
Originally Posted by meynaf View Post
Then, remove the two last digits to do /100.
How is this achieved in a fast way when working with binary?
8bitbubsy is offline  
Old 08 September 2020, 13:18   #6
meynaf
son of 68k
 
meynaf's Avatar
 
Join Date: Nov 2007
Location: Lyon / France
Age: 51
Posts: 5,323
Quote:
Originally Posted by 8bitbubsy View Post
How is this achieved in a fast way when working with binary?
Who cares ? This thread is about BCD, not binary.
meynaf is online now  
Old 08 September 2020, 14:10   #7
JoeJoe
Registered User
 
Join Date: Feb 2020
Location: Germany
Posts: 177
That's right, but we don't want to be like that

I do this with the reciprocal method. x/50 = x*(1/50)
JoeJoe is offline  
Old 08 September 2020, 16:07   #8
Thomas Richter
Registered User
 
Join Date: Jan 2019
Location: Germany
Posts: 3,214
Quote:
Originally Posted by JoeJoe View Post
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.

: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...
Thomas Richter is offline  
Old 08 September 2020, 16:09   #9
Thomas Richter
Registered User
 
Join Date: Jan 2019
Location: Germany
Posts: 3,214
Quote:
Originally Posted by 8bitbubsy View Post
How is this achieved in a fast way when working with binary?

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.
Thomas Richter is offline  
 


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

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT +2. The time now is 12:51.

Top

Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2024, vBulletin Solutions Inc.
Page generated in 0.08754 seconds with 15 queries