| |
Wanderer Account closed
Registered: Apr 2003 Posts: 478 |
Division
I'd like to ask a question. I'd prefer it not become an "IFFL" thread that is so hopelessly off-topic it may as well be deleted. Just a simple question and a simple answer PLEASE :)
To the ones who remain helpful and mathematical whizes...
I need to do division for a routine I'm working on. The problem is I have to divide by various numbers, not just sets of two.
For example
LDA #$10
ASL
ASL
gives you 16/4 = 4
However I will need to divide divide by different values (eg. 5, 7, 22, etc.).
Is there such a way to load the Accumulator with a value (or X,Y) and divide it by ANY number, say from 1-200, and if so, how?
I'm very rusty on this. I can't remember a lot of the mathematical functions.
Thanks for any serious answers :)
|
|
| |
Scout
Registered: Dec 2002 Posts: 1570 |
Tumtidumtidum...
3D projection on the C=64 (or...how do I divide?)
---
-= Silicon Ltd. =-
http://forum.siliconlimited.com
Commodore 64 Scenemusic Podcast
http://8bitmayhem.blogspot.com/ |
| |
Wanderer Account closed
Registered: Apr 2003 Posts: 478 |
Well that helps but it doesn't help. First of all, Perff's routine calls upon "logtable" and "exptable" for which I have no clue what values they hold.
Secondly, the math is explained but unless I see it in actual machine code, I am likely unable to convert it. One of my main weaknesses was always math. ROR, ASL, ADC, SBC are one thing but division such as what I'm asking for, eeek....
I think I will try making a table of values for all possible divisions and see how that works. In the meantime if a better solution comes up in this thread, I'll try it :)
p.s. I actually saw that thread when I did a search (cause I wanted to make sure I didn't ask something that was already posted) but was hoping for something easier to understand. I appreciate the reply :) |
| |
Slartibartfast Account closed
Registered: Jul 2002 Posts: 230 |
Custard. |
| |
trident
Registered: May 2002 Posts: 91 |
http://www.google.com/search?q=6502+division
:-) |
| |
Wanderer Account closed
Registered: Apr 2003 Posts: 478 |
Thanks for the link. As the dividend is going to be constant (and 8 bits), I think I'll use a table.
There doesn't seem to be any one catch-all method of doing it but I can make a table from BASIC, save it to memory and it will work - plus take very little cycles to do so :)
|
| |
Scout
Registered: Dec 2002 Posts: 1570 |
Quote:
Thanks for the link. As the dividend is going to be constant (and 8 bits), I think I'll use a table.
There doesn't seem to be any one catch-all method of doing it but I can make a table from BASIC, save it to memory and it will work - plus take very little cycles to do so :)
Btw, ASL shifts the bits to the left => multiplies by 2.
Check your example in your first post =) |
| |
Wanderer Account closed
Registered: Apr 2003 Posts: 478 |
*hangs head in shame*
Correct you are :)
I found this routine originally from Rene van Belzen which does the job nicely. There are a few mods to make, such as division by zero, etc. but it serves the purpose.
LDA #$00
LDX #$08
ASL $03
l0 ROL
CMP $02
BCC s0
SBC $02
s0 ROL $03
DEX
BNE l0
RTS
"$03 contains the dividend, $02 contains the divisor.
After execution $03 contains the integer result." |
| |
Oswald
Registered: Apr 2002 Posts: 5094 |
Wanderer, if your dividend is constant you definitly should use a table. |
| |
Style
Registered: Jun 2004 Posts: 498 |
Sorry, Im still snarfing into my fruitloops about the 'I dont know what log and exp are' comment :D
|
| |
Honesty
Registered: Jan 2003 Posts: 121 |
The routine about is bitwise division.
This routine uses lotsa time, but memory wise it´s the shortest coz using no precalc at all.
It is also possible to divide with log function.
But the result is not so exact.
At the moment i try to divide with the 2nd binomic formular anyone tried it?
|
... 11 posts hidden. Click here to view all posts.... |
Previous - 1 | 2 | 3 - Next |