diesen verwende ich meistens. 32bit pseudo-randomizer.
ist ziemlich zufällig und muss nur mit ein paar SID_werten
initalisiert werden.
wo der genau herstammt kann ich leider nicht sagen. ich habe
ihn x mal umgebaut und mit ACME macros versehen.
das ganze funktioniert ähnlich wie white flame's variante:
"based on mutation of a number"
gruss,
tecM0
Code
- arg = $6a ;floating point acc2 & rnd seed
- seed = $8b ;used by rnd#generator 32 bit
- ;--------------------------------------------------
- ;----- Paragraph @sub: 32bitRandomizer@ -----
- ;--------------------------------------------------
- !zone 32bit_randomize
- !macro add .mactar {
- lda arg+.mactar
- adc seed+.mactar
- sta arg+.mactar
- }
- !macro rot .target {
- lda seed+.target
- rol
- sta arg+.target
- }
- ; initalize the seed with 'random' data
- rndinit
- adc $d012
- sta seed+3
- eor $dc04
- sta seed+2
- sbc $dc05
- sta seed+1
- eor #23
- sta seed+0
- rts
- ; random value held in seed (32 bits),
- ; arg used as temp.
- ; preserves x, y
- ; returns msb in a.
- rnd lda seed+4
- asl
- sta arg+4
- +rot 3
- +rot 2
- +rot 1
- sec
- rol arg+4
- rol arg+3
- rol arg+2
- rol arg+1
- clc
- +add 4
- pha
- +add 3
- pha
- +add 2
- +add 1
- clc
- lda arg+2
- adc seed+4
- sta seed+2
- lda arg+1
- adc seed+3
- sta seed+1
- pla
- sta seed+3
- pla
- sta seed+4
- lda seed+1 ;most signif byte
- rts
- ;--------------------------------------------------eof