nesdev.comhttp://forums.nesdev.com/ Best way to have a number between #\$00 and #\$XX?http://forums.nesdev.com/viewtopic.php?f=2&t=16171 Page 1 of 1

 Author: MartsINY [ Mon Jul 03, 2017 4:14 pm ] Post subject: Best way to have a number between #\$00 and #\$XX? What is the best routine in assembly to have a number from #\$00 to a given number?I have solution but they are complex, I think there is surely an easy with with the instructions?

 Author: Sogona [ Mon Jul 03, 2017 4:27 pm ] Post subject: Re: Best way to have a number between #\$00 and #\$XX? Do you mean like generating a random number between 0 and n?

 Author: MartsINY [ Mon Jul 03, 2017 4:47 pm ] Post subject: Re: Best way to have a number between #\$00 and #\$XX? yes exactly what I mean!!doingLDA \$EF (random generator)AND #\$0FSome number won't be obtained...

 Author: tepples [ Mon Jul 03, 2017 4:58 pm ] Post subject: Re: Best way to have a number between #\$00 and #\$XX? How are you currently populating the value at address \$00EF? What range did you want, and what do you plan to use the numbers for? Does the range vary from call to call? Sometimes this can inform which technique is best.The general-purpose RNG I recommend nowadays is the LCG from cc65's C library. Sometimes, depending on the exact range I need and how quickly a value should repeat before being reused, I'll post-process the random stream with a least-recently-used generator, calculated over a circular buffer in a manner similar to RC4's mixer.

 Author: Sogona [ Mon Jul 03, 2017 5:02 pm ] Post subject: Re: Best way to have a number between #\$00 and #\$XX? Working with any number that isn't a power of 2 is always tricky.The way I've been doing it is having a table if values in ROM that's a power of two (The most i've needed is 8 so far, so that's what I've been using), and using a random number as the index for which to choose. Simple and quick.Code:lda randomAnd #%00000111TaxRtsOtherwise you have to use division, which is costly. IDK, I'm sure someone here has a better solution.

 Author: MartsINY [ Mon Jul 03, 2017 5:15 pm ] Post subject: Re: Best way to have a number between #\$00 and #\$XX? Sogona: thanks I will use this way!! what is clever and what I was looking for!!

 Author: MartsINY [ Mon Jul 03, 2017 5:26 pm ] Post subject: Re: Best way to have a number between #\$00 and #\$XX? tepples wrote:How are you currently populating the value at address \$00EF? What range did you want, and what do you plan to use the numbers for? Does the range vary from call to call? Sometimes this can inform which technique is best.The general-purpose RNG I recommend nowadays is the LCG from cc65's C library. Sometimes, depending on the exact range I need and how quickly a value should repeat before being reused, I'll post-process the random stream with a least-recently-used generator, calculated over a circular buffer in a manner similar to RC4's mixer.thanks! will look at it!!

 Author: NovaSquirrel [ Mon Jul 03, 2017 5:56 pm ] Post subject: Re: Best way to have a number between #\$00 and #\$XX? I usually just keep trying until I get a number out of the randomizer that works. Like this is the code I would use if I wanted 0, 1, 2, 3 or 4 with equal chances:Code:loop:  jsr random  ; get a new random number, put it in the accumulator  and #7      ; cut down the range  cmp #5      ; throw out 5, 6 or 7  bcs loop

 Author: tepples [ Mon Jul 03, 2017 7:02 pm ] Post subject: Re: Best way to have a number between #\$00 and #\$XX? Another way to get nearly uniformly distributed numbers from 0 to 4 without the time-uncertainty of looping calls to your RNG is to multiply the RNG's output by 5.Code:jsr random; Multiply A by 5/4 and keep bits 8-6sta tmp0lsr alsr aclcadc tmp0  ; C:A = 0 to 319and #\$C0  ; C:A = 0, 64, 128, 192, or 256rol arol arol aFor 5 choices in particular, you can treat values 0-203 one way and 204-255 another, such as returning 4 for all values 204+ and using bits 1-0 of values 0-203.Code:jsr randomcmp #204bcc not4  lda #4  bcs haveAnot4:  and #\$03haveA:

 Author: Bregalad [ Mon Jul 03, 2017 10:55 pm ] Post subject: Re: Best way to have a number between #\$00 and #\$XX? NovaSquirrel wrote:I usually just keep trying until I get a number out of the randomizer that works. Like this is the code I would use if I wanted 0, 1, 2, 3 or 4 with equal chances:Code:loop:  jsr random  ; get a new random number, put it in the accumulator  and #7      ; cut down the range  cmp #5      ; throw out 5, 6 or 7  bcs loopJust want to point out that's also exactly what I'd do.

 Author: MartsINY [ Tue Jul 04, 2017 4:18 pm ] Post subject: Re: Best way to have a number between #\$00 and #\$XX? Bregalad wrote:NovaSquirrel wrote:I usually just keep trying until I get a number out of the randomizer that works. Like this is the code I would use if I wanted 0, 1, 2, 3 or 4 with equal chances:Code:loop:  jsr random  ; get a new random number, put it in the accumulator  and #7      ; cut down the range  cmp #5      ; throw out 5, 6 or 7  bcs loopJust want to point out that's also exactly what I'd do.thx!! it's actually the easiest solution!!

 Page 1 of 1 All times are UTC - 7 hours Powered by phpBB® Forum Software © phpBB Grouphttp://www.phpbb.com/