Делал спрей для BGE, потребовался генератор случайных чисел. Два забраковал - не заполняли область, в конце концов откопал в интернете метод Фибоначчи с запаздываниями и пожертвовал буфером в 256 байт (можно меньше, но тогда медленнее будет) жалко, но зато работает как надо.
А один из прежних (забыл как обзывать) приспособил для заполнения буфера. Так на вшивость не тестировал, но в спрее раскидывает равномерно и заполняет полностью.
Код:
RNDF ld hl,RNDbuff ; начальное заполнение буфера для RND ; адрес буфера кратен 256
ld c,0
1 ld a,r
and #07
ld b,a
ld a,#35
.seed EQU $-1
2 bit 0,a
jr z,3F
xor %01110000
3 rrca
djnz 2B
ld (.seed),a
ld (hl),a
inc l
dec c
jr nz,1B
ret
RND ; метод Фибоначчи с запаздываниями , использую буфер на 256 байт вместо 98 для удобства.
push hl,de,bc
ld de,RNDbuff+256-97 ; 97 a
.ia EQU $-2
ld hl,RNDbuff+256-33 ; 33 b
.ib EQU $-2
ld bc,RNDbuff ; 0 i
.ii EQU $-2
ld a,(de)
sub (hl)
ld (bc),a ; X[i]= X[i-a]-X[i-b]
inc l
inc c
inc e
ld (.ia),de
ld (.ib),hl
ld (.ii),bc
pop bc,de,hl
ret