User Tools

Site Tools


base:flexible_galois_lfsr

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

base:flexible_galois_lfsr [2015-04-17 04:31] (current)
Line 1: Line 1:
 +This is a very simple yet flexible PRNG. It can be configured for 2..16 bits of randomness. Thanks to Zed Yago for providing the proper tap sequences. They are taken from "​Graphics Gems".
  
 +Tap Sequences
 +<​code>​
 +LFSR Term -> Period
 +-------------------
 +$03 -> 1..$03
 +$06 -> 1..$07
 +$0c -> 1..$0f
 +$14 -> 1..$1f
 +$30 -> 1..$3f
 +$60 -> 1..$7f
 +$b8 -> 1..$ff
 +$0110 -> 1..$01ff
 +$0240 -> 1..$03ff
 +$0500 -> 1..$07ff
 +$0ca0 -> 1..$0fff
 +$1b00 -> 1..$1fff
 +$3500 -> 1..$3fff
 +$6000 -> 1..$7fff
 +$b400 -> 1..$ffff
 +</​code>​
 +
 +16-bit version - you have to read the random number from rand.
 +<​code>​
 +prng16:
 +    lsr rand+1
 +    ror rand
 +    bcc skip
 +    lda rand+1
 +    ; $60 = 1..32767, see table above
 +    eor #$60
 +    sta rand+1
 +skip:
 +    rts
 +
 +rand:
 +    ; seed mustn'​t be zero!
 +    .byte $01,$00
 +</​code>​
 +
 +8-bit version - returns the random number in A.
 +<​code>​
 +prng8:
 +    lsr rand
 +    lda rand
 +    bcc skip
 +    ; $30 = 1..63, see table above
 +    eor #$30
 +    sta rand
 +skip:
 +    rts
 +
 +rand:
 +    ; seed mustn'​t be zero!
 +    .byte $01
 +</​code>​
base/flexible_galois_lfsr.txt ยท Last modified: 2015-04-17 04:31 (external edit)