Prosty generator pseudolosowy: Różnice pomiędzy wersjami
Przejdź do nawigacji
Przejdź do wyszukiwania
wersja pierwsza |
mNie podano opisu zmian |
||
| Linia 3: | Linia 3: | ||
Na początku inicjujemy generator. Do rejestrów A, X i Y zapisujemu wartości początkowe generatora. | Na początku inicjujemy generator. Do rejestrów A, X i Y zapisujemu wartości początkowe generatora. | ||
<pre> | <pre> | ||
init | init sta byte_a | ||
stx byte_b | |||
sty byte_c | |||
rts | |||
</pre> | </pre> | ||
| Linia 13: | Linia 12: | ||
<pre> | <pre> | ||
random | 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 | |||
</pre> | </pre> | ||
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. | 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. | ||
Wersja z 29 gru 2008, 14:25
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 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.