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
     
    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 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
     
    Mi tam zazwyczaj cała zerowa schodzi na często używane zmienne. Szkoda ją marnować na rozkazy ;)
    • 4:
       
      CommentAuthorkoala
    • CommentTime17 May 2016
     
    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
     
    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
     
    Dzięki za wytłumaczenie, mogę dalej optymalizować kod.
    • 7:
       
      CommentAuthortdc
    • CommentTime18 May 2016
     
    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
     
    @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
     
    Albo 65c816, tu mamy możliwość wędrówki ze stroną zero po całych 64kB ;)
    • 10: CommentAuthortebe
    • CommentTime19 May 2016
     
    co by było gdyby Pin uznał że strona zerowa to zło ;)
    • 11: CommentAuthorxxl
    • CommentTime19 May 2016
     
    w roboczej wersji MapRAM stron zero mogła leżeć w dowolnym miejscu pamięci :-)
    • 12: CommentAuthorpin
    • CommentTime19 May 2016
     
    no to szkoda, że tylko w roboczej bo może by się to komuś bardziej przydało.
    • 13:
       
      CommentAuthortdc
    • CommentTime24 May 2016 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
     
    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
     
    dlatego najlepsza opcja zawsze wylaczyc system, aby nie miec niespodzianek
    • 16: CommentAuthorpin
    • CommentTime25 May 2016
     
    na kompo? :D
    • 17: CommentAuthoras...
    • CommentTime25 May 2016
     
    Solo dobrze pisze!!
    • 18: CommentAuthorxxl
    • CommentTime26 May 2016
     
    "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
     
    xxl dobrze pisze!;)
    • 20: CommentAuthorGonzo
    • CommentTime27 May 2016
     
    Możecie to wszystko wyrzucic na śmietnik, atarka to totalne dno, nie tknę się tego wiecej
    • 21: CommentAuthorGonzo
    • CommentTime27 May 2016
     
    Co za syf, ze tez tyle czasu na to zmarnowalem
    • 22: CommentAuthorGonzo
    • CommentTime27 May 2016
     
    Adam - dzieki,ze przy każdej okazji mnie jebales,teraz wiem dlaczego, sam się teraz z j e b
    • 23: CommentAuthorblacktofu
    • CommentTime27 May 2016
     
    @Gonzo
    To temat o stronie zerowej. "Pun intended?"
    • 24:
       
      CommentAuthortdc
    • CommentTime30 May 2016
     
    ufff...
    • 25:
       
      CommentAuthorCOR/ira4
    • CommentTime14 Jun 2016
     
    @Gonzo zjedz Snickersa
    • 26: CommentAuthorDuddie
    • CommentTime14 Jun 2016
     
    IRATA4, odezwiesz się do mnie na priv w końcu?