atarionline.pl $D20A - powtarzalność numerków - Forum Atarum

    Jeśli chcesz wziąć udział w dyskusjach na forum - zaloguj się. Jeżeli nie masz loginu - poproś o członkostwo.

    • :
    • :

    Vanilla 1.1.4 jest produktem Lussumo. Więcej informacji: Dokumentacja, Forum.

    1.  
      Po każdym uruchomieniu programu z rejestru RANDOM ciągną mi się te same liczby.

      Jak najprościej uniknąć tego nieprzyjemnego efektu?
      • 2: CommentAuthormono
      • CommentTime21 Feb 2013 15:02
       
      poke $d20f,0: poke $d20f,3
      • 3: CommentAuthor0xF
      • CommentTime21 Feb 2013 15:02
       
      Te POKE mają efekt przeciwny. Jeśli masz je w programie, to się ich pozbadz.

      Jeśli nie, efekt dotyczy tylko emulatora.
      a. Zmien emulator.
      b. Dodaj czekanie na klawisz. Klawisz będziesz wciskal różnie, więc będą różne liczby losowe.
    2.  
      Nie mam takich POKE. Ciągnę po prostu za pomocą LDA RANDOM.

      W chacie sprawdzę, czy na real hw sytuacja wygląda lepiej.
      • 5: CommentAuthorEagle
      • CommentTime21 Feb 2013 16:02
       
    3.  
      OK, na Atarce działa dobrze. Czyli to tylko Altirra jest taka na maksa deterministyczna :)

      A w ostatecznej gierce to nie będzie problem, bo przed samym losowaniem będzie i tak jakieś menu, czyli siłą rzeczy będę czekał na klawisz :)
      • 7:
         
        CommentAuthortdc
      • CommentTime22 Feb 2013 00:02
       
      Na real Atari takich myków jak czekanie na klawisz robić nie trzeba, to że jakiś emulator sobie z czymś nie radzi nie powinno nas martwić.

      A wynika to z tego jak realizowane są generatory liczb losowych na pececie, na Atari nigdy nie było z tym problemu, na pececie od zawsze.
      • 8: CommentAuthor0xF
      • CommentTime22 Feb 2013 08:02
       
      Niezupełnie. Gdyby umieścić grę na cartridge okazałoby się, że prawdziwe Atari również generuje za każdym razem te same liczby pseudolosowe. Element losowości wprowadza użytkownik lub transmisja danych - elementy mechaniczne w stacjach i dyskach twardych, ani nawet SIO2PC na pewno nie działają z precyzją cyklu Atari.
      • 9:
         
        CommentAuthorlarek
      • CommentTime22 Feb 2013 08:02 zmieniony
       
      To może na wszelki wypadek stosować np. takie proste rozwiązanie:

      LDA $D20A
      ORA $14

      -------
      edit:
      nie, to też raczej niewiele da... a przynajmniej nie zawsze
      • 10: CommentAuthor0xF
      • CommentTime22 Feb 2013 09:02
       
      Nie ogarniam tego prostego rozwiązania.
      • 11:
         
        CommentAuthorlarek
      • CommentTime22 Feb 2013 09:02
       
      Nie dziwię sie ;)
      Już poprawiłem.
      • 12:
         
        CommentAuthorpirx
      • CommentTime22 Feb 2013 12:02
       
      dzieki za ten wątek - wyjaśnił mi się 1 problem, który miałem w pewnej dzikiej gierce, którą zacząłem skrobać.

      Jak w ogólności rozwiązać ten problem nie angażując użytkownika? Czyli jak uzyskać niewielkie, w przybliżeniu losowe, opóźnienie bez korzystania z urządzeń zewnętrznych?
      • 13: CommentAuthormono
      • CommentTime22 Feb 2013 12:02
       
      @mgr_inz_rafal: Zrozumiałem, że dostajesz ciągle jedną liczbę :D Fox ma rację. Nie ma potrzeby resetowania POKEYa we własnym programie.
      Nie sprawdzałem, ale czy ktoś wie może jak się zachowuje LFSR po reset? Jest zerowany czy pozostają tam stany nieustalone? No i podobnie z resetem samego POKEYa (SKCTL<-0<-3)?
      • 14: CommentAuthortebe
      • CommentTime22 Feb 2013 15:02
       
      RANDOM NUMBERS

      ->link<-

      p.s.
      Knight Lore wykorzystywał krótki kod do generowania liczb losowych, optymalizacja tej części gry polegała na zastąpieniu przez LDA $D20A
      • 15: CommentAuthorBluki
      • CommentTime22 Feb 2013 16:02
       
      Można podpatrzeć jak działa RND i RANDOMIZE w Atari Microsoft BASIC-u.
      • 16:
         
        CommentAuthorpirx
      • CommentTime22 Feb 2013 16:02
       
      procki nic nie dadzą, bo też są deterministyczne. Oczywiście czekanie na input usera załatwi sprawę.
      • 17:
         
        CommentAuthortdc
      • CommentTime22 Feb 2013 17:02 zmieniony
       

      pirx:

      dzieki za ten wątek - wyjaśnił mi się 1 problem, który miałem w pewnej dzikiej gierce, którą zacząłem skrobać.

      Jeden? A ile ich jeszcze jest ? Jak dużo to masz od razu już tytuł gry np. "99 problemów" :P
      ...bo Problem Jasia już był.
      • 18: CommentAuthor0xF
      • CommentTime22 Feb 2013 17:02
       
      Moznaby zmierzyć, po jakim czasie GTIA się nagrzeje. Albo wykorzystać niestabilne opcody. ;-)

      mono: w czasie resetu POKEYa LFSRy napelniaja się jedynkami. Poszukaj mojego artykułu w Syzygy, tam jest dokładny opis.
      • 19:
         
        CommentAuthorKrótki
      • CommentTime22 Feb 2013 18:02
       
      A jak wygląda zawartość RAM pod ROM-em po włączeniu komputera? OS jej nie zeruje, jeśli zostają tam losowe wartości to problem rozwiązany.
      • 20: CommentAuthormono
      • CommentTime23 Feb 2013 15:02 zmieniony
       
      Trudno tam chyba będzie znaleźć losowe wartości. Na komputerach, z którymi miałem do czynienia zazwyczaj widać tam sekwencje n*$00 n*$FF, czasem ucieknie gdzieś jakiś bit, ale do losowości to było temu daleko.

      @0xF: Dzięki - poszukam.
      • 21: CommentAuthor0xF
      • CommentTime23 Feb 2013 16:02
       
      Tak jak napisał Mono, prawie zawsze są tam zera i FF, a wzór zależy od maszyny. Podobnie z pamięcią dodatkową.
      • 22:
         
        CommentAuthortdc
      • CommentTime23 Feb 2013 16:02 zmieniony
       
      No to skoro wartości są prawie te same to można przeanalizować ich występowanie (rozkład), a nie wartości.
      • 23: CommentAuthormono
      • CommentTime23 Feb 2013 21:02
       
      Jeśli ktoś chce poczytać: Syzygy #7 - "Generator liczb pseudolosowych".
      @0xF: Jestem pod wrażeniem śledztwa. Świetny artykuł. Dzięki jeszcze raz.
      Swoją drogą nie przypuszczałem, że okres RANDOMa zależny jest od wyboru szerokości licznika w AUDCTL - im dłuższy okres tym lepiej więc po co to? A mając pełną tablicę wartości liczyłeś może jaki jest rozkład prawdopodobieństwa? Tak tylko z ciekawości pytam.