нашел еще парочку интересных псевдо рандомайзеров
Код:
; 16-bit xorshift pseudorandom number generator
; returns hl = pseudorandom number
; corrupts a
; http://www.retroprogramming.com/2017/07/xorshift-pseudorandom-numbers-in-z80.html?m=1
Random:
lxi h, 1 ; seed must not be 0
mov a,h
rar
mov a,l
rar
xra h
mov h,a
mov a,l
rar
mov a,h
rar
xra l
mov l,a
xra h
mov h,a
shld Random+1 ; 116
ret
Код:
; Fast RND
;
; An 8-bit pseudo-random number generator,
; using a similar method to the Spectrum ROM,
; - without the overhead of the Spectrum ROM.
;
; R = random number seed
; an integer in the range [1, 256]
;
; R -> (33*R) mod 257
;
; S = R - 1
; an 8-bit unsigned integer. 256 period
; http://www.z80.info/pseudo-random.txt
Random:
mvi a, 34
mov l, a
rrc
rrc
rrc
xri $1f
add l
sbi 255
sta Random+1 ; 64
ret
Код:
; returns pseudo random 8 bit number in A. Only affects A.
; By Lee Davison. 256 period
; https://philpem.me.uk/leeedavison/z80/prng/index.html
Random:
mvi a, 1 ; get seed. must not be zero
ani $B8 ; mask non feedback bits
stc ; set carry
jpo no_clr ; skip clear if odd
cmc ; complement carry (clear it)
no_clr:
lda Random+1 ; get seed back
ral ; rotate carry into byte
sta Random+1 ; save back for next prn ; 72
ret