atarionline.pl Procedury na stronie zerowej - 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:
         
        CommentAuthorshanti77
      • CommentTime17 May 2016 08:05
       
      Co daje umieszczenie kodu procedury na stronie zerowej, czy niektóre z rozkazów wykonują się szybciej, jeśli tak to które? Sugeruje to Tebe w swoim kursie programowania, ale nie wyjaśnia tam tego, poza tym często do rysowania duszków sprzetowych używane są procedury na stronie zerowej. Mógłby ktoś to wyjaśnić?
      • 2: CommentAuthormono
      • CommentTime17 May 2016 09:05 zmieniony
       
      Jeśli masz samomodyfikujący się kod, to oszczędzasz cykl i bajt na każdej operacji. Przykładowo taki kawałek kodu:
      ;poza ZPG/na ZPG
      lda lo,x ;4/4 cykli ;3/2 bajty
      sta jump+1 ;4/3 ;3/2
      lda hi,x ;4/4 ;3/2
      sta jump+2 ;4/3 ;3/2
      jump:
      jmp $ffff ;3/3 ;3/3
      lo:
      .byte <routine1
      .byte <routine2
      ...
      hi:
      .byte >routine1
      .byte >routine2
      ...

      jeśli go umieścisz poza ZPG, wtedy:
      a) zajmie 15 bajtów
      b) wykona się w 19 cyklach
      natomiast umieszczony na ZPG:
      a) zajmie 11 bajtów
      b) wykona się w 17 cyklach
      bo lo/hi oraz jump+1/2 znajduje się na stronie zerowej więc i krótszy tryb adresowania zostanie zastosowany.
      Procedura syntezy dźwięku w NeoTrackerze jest np umieszczona na ZPG, bo to pozwala na szybsze wykonanie kodu a przez to wyższą częstotliwość syntezy niż gdyby była umieszczona poza ZPG.

      Edit: Oczywiście kod musi być skompilowany osobno dla wersji "poza ZPG" i osobno dla wersji "na ZPG" bo wchodzą w grę inne tryby adresowania (absolutny i zerostronnicowy).
      • 3: CommentAuthornosty
      • CommentTime17 May 2016 09:05
       
      Mi tam zazwyczaj cała zerowa schodzi na często używane zmienne. Szkoda ją marnować na rozkazy ;)
      • 4:
         
        CommentAuthorkoala
      • CommentTime17 May 2016 10:05
       
      w Lotharek Dance tekstura jest na stronie zerowej i ją całą zajmuje:)
      Może należy też dodać że przepełnienie indeksowania nie przenosi na kolejną stronę a cały czas jest na ZPG, qrcze zagmatwałem, ale przykład:
      ldx #$10
      lda $00f8,x

      wczyta z $0008 a nie z $0108

      co w Lotharek Dance mi się bardzo przydawało:)
      • 5: CommentAuthorxxl
      • CommentTime17 May 2016 11:05
       
      1. lda $xxxx,y
      bedzie szybsze od:
      2. lda ($xx),y

      jak umiescisz procke na stronie zero to nadal mozesz korzystac z tablic (2) ale uzywajac trybu (1)
      wykorzystywane w zXEmulatorze
      • 6:
         
        CommentAuthorshanti77
      • CommentTime17 May 2016 12:05
       
      Dzięki za wytłumaczenie, mogę dalej optymalizować kod.
      • 7:
         
        CommentAuthortdc
      • CommentTime18 May 2016 23:05
       
      Warto może jeszcze zadać pytanie gdzie się coś znajduje na ZPG, co jest ważne a co nie, gdzie można bezpiecznie coś zamieścić itp. Ktoś chętny?
      • 8: CommentAuthorbob_er
      • CommentTime18 May 2016 23:05
       
      @nosty: Heh, a mi nigdy nie brakło miejsca na stronie zerowej :). Mimo, że każdy efekt używa innych komórek.

      @TDC: jeśli chodzi o zawartość ZP związaną z obecnością systemu/ROMu - to każda mapa pamięci Ci to powie (w skrócie - bez BASICa używaj od $80 w górę). A jeśli pytasz o ZP bez ROMu - to jest tu pełna swoboda użycia.
      • 9: CommentAuthorpin
      • CommentTime19 May 2016 00:05
       
      Albo 65c816, tu mamy możliwość wędrówki ze stroną zero po całych 64kB ;)
      • 10: CommentAuthortebe
      • CommentTime19 May 2016 00:05
       
      co by było gdyby Pin uznał że strona zerowa to zło ;)
      • 11: CommentAuthorxxl
      • CommentTime19 May 2016 06:05
       
      w roboczej wersji MapRAM stron zero mogła leżeć w dowolnym miejscu pamięci :-)
      • 12: CommentAuthorpin
      • CommentTime19 May 2016 23:05
       
      no to szkoda, że tylko w roboczej bo może by się to komuś bardziej przydało.
      • 13:
         
        CommentAuthortdc
      • CommentTime24 May 2016 01:05 zmieniony
       
      @bob_er, dzięki za wyjaśnienia (choć nie do mnie one były), więc ja dodam kilka groszy od siebie:

      1. W komórce nr 7, zawsze jest 1 (i co ciekawe przydaje się to w różnych czarach Atari ;)

      2. w komórkach 18-20 znajduje się licznik ramek (RTCLOK), zmieniany przez systemowe przerwanie VBLK (lub sprzętowy zegar np. obsługiwany przez Spartę DOS itp.), czyli tu się będzie nam zmieniać wartość jeśli używamy systemu (ale tylko w algorytmach, które trwają dłużej niż czas ramki lub przecinają się z procedurą przerwania VBLK).
      Również przydatne

      3. Action! rezerwuje sobie adresy $A3 do $AF, jako miejsca gdzie są przekazywane parametry procedur (o ile jest ich więcej niż 3 bajty).

      Czyli, jeśli programujemy zgodnie z metodami jakich uczą w szkołach przy programowaniu strukturalnym itp. (czyli marnujemy czas CPU i miejsce w RAM) to lepiej tych adresów nie ruszać. Jeśli programujemy w Action! bardziej jak w asemblerze, to zwykle nie jest nam potrzeba tylu parametrów i można użyć tych adresów (zaczynać od końca czyli od $AF) licząc się z tym, że się przeliczymy i zaczną się dziać dziwne rzeczy ;):P
      • 14: CommentAuthorbob_er
      • CommentTime24 May 2016 21:05
       
      Komórka 82 odpowiada za rozmiar lewego marginesu. Gdzieś tam jest jeszcze adres włączający tryb przyciągania uwagi. itd, itp... Jak napisałem - każda mapa pamięci to powie. Np. taka: ->link<-
      • 15: CommentAuthorsolo/ng
      • CommentTime24 May 2016 22:05
       
      dlatego najlepsza opcja zawsze wylaczyc system, aby nie miec niespodzianek
      • 16: CommentAuthorpin
      • CommentTime25 May 2016 21:05
       
      na kompo? :D
      • 17: CommentAuthoras...
      • CommentTime25 May 2016 22:05
       
      Solo dobrze pisze!!
      • 18: CommentAuthorxxl
      • CommentTime26 May 2016 08:05
       
      "jedna z wiekszych zalet systemu atari jest to, ze mozna go wylaczyc i odzyskac zajmowana przez niego przestrzen"... i czas procesora
      • 19:
         
        CommentAuthortdc
      • CommentTime26 May 2016 23:05
       
      xxl dobrze pisze!;)
      • 20: CommentAuthorGonzo
      • CommentTime27 May 2016 03:05
       
      Możecie to wszystko wyrzucic na śmietnik, atarka to totalne dno, nie tknę się tego wiecej
      • 21: CommentAuthorGonzo
      • CommentTime27 May 2016 03:05
       
      Co za syf, ze tez tyle czasu na to zmarnowalem
      • 22: CommentAuthorGonzo
      • CommentTime27 May 2016 03:05
       
      Adam - dzieki,ze przy każdej okazji mnie jebales,teraz wiem dlaczego, sam się teraz z j e b
      • 23: CommentAuthorblacktofu
      • CommentTime27 May 2016 08:05
       
      @Gonzo
      To temat o stronie zerowej. "Pun intended?"
      • 24:
         
        CommentAuthortdc
      • CommentTime30 May 2016 02:05
       
      ufff...
      • 25:
         
        CommentAuthorCOR/ira4
      • CommentTime14 Jun 2016 00:06
       
      @Gonzo zjedz Snickersa
      • 26: CommentAuthorDuddie
      • CommentTime14 Jun 2016 12:06
       
      IRATA4, odezwiesz się do mnie na priv w końcu?