Prosty generator pseudolosowy
From Atariki
←Older revision | Newer revision→
Sprzętowy
Korzystamy z rejestru RANDOM układu Pokey:
lda $d20a ldx $d20a ldy $d20a
Uwaga: dobrze jest zadbać, żeby pomiędzy kolejnymi odczytami rejestru upływało co najmniej 8 cykli zegara 1,77 MHz - w przeciwnym razie kolejne odczytywane liczby mogą być ze sobą w sposób widoczny skorelowane. To zjawisko może szczególnie silnie występować na akceleratorach.
Programowy
Czasami jest potrzeba generowania liczb pseudolosowych w powtarzalny sposób (np. w grach). W takim przypadku POKEY ze swoim rejestrem RANDOM nie będzie zbyt pomocny. Można wtedy użyć poniższej metody (jest ona bliżej nierozpoznanego autorstwa).
Na początku inicjujemy generator. Do rejestrów A, X i Y zapisujemy wartości początkowe generatora.
init sta byte_a stx byte_b sty byte_c rts
Następnie możemy wołać poniższą funkcję. Wartość zwracana jest w akumulatorze (cały bajt).
random lda byte_a eor byte_b asl sta byte_a clc lda byte_b adc byte_c sta byte_b lda byte_c eor byte_b sta byte_c rts
Jak widać metoda jest dosyć szybka, zajmuje stałą ilość cykli, nie potrzebuje żadnych tablic. Wystarczą 3 bajty gdzieś w pamięci i nie muszą być one obok siebie.