Prosty generator pseudolosowy
From Atariki
(Różnice między wersjami)
| Wersja z dnia 21:08, 4 kwi 2010 KMK (Dyskusja | wkład) (pierwsza osoba) ← Previous diff |
Wersja z dnia 15:32, 1 sie 2015 Tdc (Dyskusja | wkład) (int.) Next diff → |
||
| Linia 37: | Linia 37: | ||
| </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. |
| [[Kategoria:Niezbędnik kodera]] | [[Kategoria:Niezbędnik kodera]] | ||
Wersja z dnia 15:32, 1 sie 2015
Sprzętowy
Korzystamy z rejestru RANDOM układu Pokey:
lda $d20a
ldx $d20a
ldy $d20a
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.
