Subject: Re: [stella] ASM comparison question From: "B. Watson" <atari@xxxxxxxxxxxxxx> Date: Wed, 25 May 2005 11:13:31 -0400 |
On Wed, 25 May 2005, Dennis Debro wrote: > I seem to be missing something. I'm trying to take a random number and > make it stay between 9 and 149. The code I have is... Does it absolutely *have* to be 9 to 149? If you can live with a range of 9 to 137, it's simple: jsr getRandomByte ; byte is 0-255 lsr a ; now it's 0-127, carry may or may not be set adc #9 ; now it's 9-137, done sta whereever This has the advantage of running in a constant amount of time (assuming your getRandomByte subroutine runs in constant time). Another idea would be to have a getRandom0to7 routine (possibly an alternate entry point to getRandomByte?) that returns a random number from 0 to 7: jsr getRandomByte lsr a sta tmp ; need one byte of RAM for this jsr getRandom0to7 adc tmp ; now A contains 0-134 adc #9 ; now it's 9-143 That still doesn't get the range you originally wanted, but it's closer. getRandom0to7 could be replaced with a getRandomNybble that returns a number from 0 to 15, which would give you a final result between 9 and 151 instead (closer yet, but still no cigar...) I assume the 9 to 149 range is being used for horizontal position of some random badguy or bomb? Depending on what it is, my attempted solutions might give the player a `safe zone' at the right edge of the screen, where the bomb/alien/whatever is guaranteed to never appear.. you could fix that by limiting the player's horizontal movement, of course. Here's another idea. This one gives you the range you want, but doesn't run in constant time (which probably is fine: your original code didn't). randomLoop: jsr getRandomByte cmp #141 bcc add9 ; if A < 141, continue... bcs randomLoop ; else A >= 141, try again add9: ; at this point, A is 0-140 adc #9 ; carry is known to be clear, we're really adding 9 ; A is now 9-149, store it or whatever Hopefully I've got my bcc/bcs logic straight: it's been a long time since I've had time to do any 6502 asm. I really miss it, though... Wow, that was fun! (Maybe it's even correct?) -- B. Archives (includes files) at http://www.biglist.com/lists/stella/archives/ Unsub & more at http://stella.biglist.com
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Aw: [stella] ASM comparison questio, cybergoth | Thread | Re: [stella] ASM comparison questio, B. Watson |
Re: [stella] ASM comparison questio, Dennis Debro | Date | Re: [stella] ASM comparison questio, B. Watson |
Month |