Prosty generator pseudolosowy

From Atariki

Revision as of 21:18, 6 lis 2008; view current revision
←Older revision | Newer revision→
Jump to: navigation, search

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. Nie jest ona mojego autorstwa. Znalazłem to gdzieś na sieci, niestety źródłowego adresu w tej chwili nie znajdę.

Na początku inicjujemy generator. Do rejestrów A, X i Y zapisujemu wartości początkowe generatora.

init equ *
                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 equ *
                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.

Personal tools