Prosty generator pseudolosowy: Różnice pomiędzy wersjami

Z Atariki
Przejdź do nawigacji Przejdź do wyszukiwania
Bob er (dyskusja | edycje)
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 equ *
init   sta byte_a
                sta byte_a
      stx byte_b
                stx byte_b
      sty byte_c
                sty byte_c
      rts
                rts
</pre>
</pre>


Linia 13: Linia 12:


<pre>
<pre>
random equ *
random lda byte_a
                lda byte_a
      eor byte_b
                eor byte_b
      asl
                asl @
      sta byte_a
                sta byte_a
      clc
                clc
      lda byte_b
                lda byte_b
      adc byte_c
                adc byte_c
      sta byte_b
                sta byte_b
      lda byte_c
                lda byte_c
      eor byte_b
                eor byte_b
      sta byte_c
                sta byte_c
      rts
                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.