uxn

Varvara Ordinator, written in ANSI C(SDL2)
git clone https://git.eamoncaddigan.net/uxn.git
Log | Files | Refs | README | LICENSE

commit 5b4ec0be6b7ca9740fa72d99cfa9d9392dd5d14d
parent f4e9e2e915d76d5ca8fc63284ab077e27347edf9
Author: Andrew Alderwick <andrew@alderwick.co.uk>
Date:   Wed, 25 Aug 2021 21:59:30 +0100

Added a second PRNG with longer period

Diffstat:
Mprojects/examples/demos/prng.tal | 43+++++++++++++++++++++++++++++++------------
1 file changed, 31 insertions(+), 12 deletions(-)

diff --git a/projects/examples/demos/prng.tal b/projects/examples/demos/prng.tal @@ -1,7 +1,6 @@ -( pseudo-random number generator ) - -( based on 16-bit xorshift algorithm discussed on - http://www.retroprogramming.com/2017/07/xorshift-pseudorandom-numbers-in-z80.html ) +( pseudo-random number generator, + based on two 16-bit xorshift algorithms by George Marsaglia + http://www.jstatsoft.org/v08/i14/paper ) ( devices ) @@ -18,17 +17,22 @@ |0100 ( -> ) ( init ) ;on-frame .Screen/vector DEO2 + ( seed prng (must be nonzero) ) - .DateTime/month DEI .DateTime/day DEI - #00 .DateTime/second #a0 SFT2 EOR2 - #00 .DateTime/minute #40 SFT2 EOR2 - .DateTime/hour EOR + #00 .DateTime/second DEI + #00 .DateTime/minute DEI #60 SFT2 EOR2 + #00 .DateTime/hour DEI #c0 SFT2 EOR2 ;prng2/x STA2 + #00 .DateTime/hour DEI #04 SFT2 + #00 .DateTime/day DEI #10 SFT2 EOR2 + #00 .DateTime/month DEI #60 SFT2 EOR2 + #00 .DateTime/year DEI #a0 SFT2 EOR2 ;prng2/y STA2 + ;prng2/x LDA2 ;prng2/y LDA2 EOR2 ORAk ,&non-zero JCN INC2 &non-zero ;prng/seed STA2 ( theme ) - #0fe5 .System/r DEO2 - #0fc5 .System/g DEO2 + #0fe5 .System/r DEO2 + #0fc5 .System/g DEO2 #0f25 .System/b DEO2 BRK @@ -42,16 +46,17 @@ BRK @draw-pixel - ,prng JSR + ,prng2 JSR #00 SWP .Screen/x DEO2 #00 SWP .Screen/y DEO2 #01 .Screen/pixel DEO JMP2r @prng ( -- number* ) - ( returns the next number in the 65,535-long sequence, + ( returns the next number in a 65,535-long sequence, which is never zero but every other 16-bit number appears once before the sequence repeats ) + ( http://www.retroprogramming.com/2017/07/ xorshift-pseudorandom-numbers-in-z80.html ) ,&seed LDR2 DUP2 #70 SFT2 EOR2 DUP2 #09 SFT2 EOR2 @@ -61,3 +66,17 @@ &seed $2 +@prng2 ( -- number* ) + ( returns the next number in a (2^32-1)-long sequence ) + ( http://b2d-f9r.blogspot.com/2010/08/ 16-bit-xorshift-rng-now-with-more.html ) + ,&x LDR2 + DUP2 #50 SFT2 EOR2 + DUP2 #03 SFT2 EOR2 + ,&y LDR2 DUP2 ,&x STR2 + DUP2 #01 SFT2 EOR2 EOR2 + ,&y STR2k POP + JMP2r + + &x $2 + &y $2 +