Prosty generator pseudolosowy

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 12:25, 29 gru 2008
KMK (Dyskusja | wkład)

← Previous diff
Wersja z dnia 12:29, 29 gru 2008
KMK (Dyskusja | wkład)

Next diff →
Linia 1: Linia 1:
 +== Sprzętowy ==
 +
 +Korzystamy z rejestru [[Rejestry_POKEY-a#RANDOM|RANDOM]] układu [[Pokey]]:
 +
 +<pre>
 + lda $d20a
 + ldx $d20a
 + ldy $d20a
 +</pre>
 +
 +== Programowy ==
Czasami jest potrzeba generowania liczb pseudolosowych w powtarzalny sposób (np. w grach). W takim przypadku [[POKEY|POKEY]] ze swoim rejestrem [[Rejestry_POKEY-a|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ę. Czasami jest potrzeba generowania liczb pseudolosowych w powtarzalny sposób (np. w grach). W takim przypadku [[POKEY|POKEY]] ze swoim rejestrem [[Rejestry_POKEY-a|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ę.

Wersja z dnia 12:29, 29 gru 2008

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. 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.

Personal tools