atarionline.pl PMG in action! - 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: CommentAuthorw1k
    • CommentTime13 Sep 2010 zmieniony
     
    how i can create simply PMG in action? is exist little example?
    • 2:
       
      CommentAuthorjhusak
    • CommentTime13 Sep 2010
     
    You mean PMG, as in title?
    • 3: CommentAuthorw1k
    • CommentTime13 Sep 2010
     
    yes
    • 4:
       
      CommentAuthorKaz
    • CommentTime13 Sep 2010
     
    If you can read in Polish I recommend to read "Atari Basic" written by Wieslaw Migut and others:

    ->link<-

    The PMG is described on pages 46-49, including simple example in Atari Basic.
    • 5: CommentAuthorw1k
    • CommentTime13 Sep 2010
     
    yes, i know some about pmg in basic, but how i can writen DATA in action!?
    • 6:
       
      CommentAuthorjhusak
    • CommentTime13 Sep 2010 zmieniony
     
    Look into my Battle Ships (BMUSIC) music source:

    ->link<-

    There is a lot of Data lines.
    • 7: CommentAuthorw1k
    • CommentTime14 Sep 2010
     
    ok, thank you.. hm, it is good idea making games in action in PMG, or exist other techniques?
    • 8: CommentAuthorGury
    • CommentTime15 Sep 2010
     
    Hi w1k, here is short example of using PMG in Action!

    ;
    ; Player/Missile Graphics demo
    ;
    PROC MAIN()

    CARD X
    BYTE Y
    BYTE A=106
    CARD PMBASE

    ; PLAYER DATA
    BYTE ARRAY PM_DATA=[
    153 189 255 189 153
    ]

    ; SET GR. MODE AND BACKGROUND COLOR
    GRAPHICS(0)
    POKE(710,0)

    ; PLAYER POSITION
    X=120
    Y=48

    ; SET PLAYER ADDRESS
    A=A-8
    POKE(54279,A)
    PMBASE=256*A

    ; ENABLE PM GRAPHICS WITH 2-LINE RES.
    POKE(559,46)
    POKE(53277,3)

    ; SET PLAYER HORIZONTAL POSITION
    POKE(53248,X)

    ; CLEAR PLAYER DATA FIRST
    ZERO(PMBASE+512,128)

    ; SET PLAYER COLOR
    POKE(704,216)

    ; DRAW PLAYER
    MOVEBLOCK(PMBASE+512+Y,PM_DATA,5)

    ; INFINITE LOOP
    DO OD

    RETURN
    • 9:
       
      CommentAuthorCosi
    • CommentTime15 Sep 2010
     
    Hello Gury! How is Effectus? :)
    • 10:
       
      CommentAuthortdc
    • CommentTime16 Sep 2010 zmieniony
     

    w1k:

    or exist other techniques?

    Yes, Action! is a very fast and interesting language. All advanced techniques from asm are quite available in Act. For example: hardware graphics multiplexer, interruptions, special modes like HIP etc.
    • 11: CommentAuthorw1k
    • CommentTime16 Sep 2010
     
    excelent! today i try it, thank you :)
    • 12: CommentAuthorw1k
    • CommentTime16 Sep 2010 zmieniony
     
    effectus error:

    MoveBlock #PMBASE+512+Y, #PM_DATA, #5
    .IF %3<$0100
    common.asm (220) ERROR: Illegal character: 3
    • 13: CommentAuthorGury
    • CommentTime16 Sep 2010
     
    Hello w1k, please try that code only in Action!, Effectus does not yet compile it properly.

    Hello to you too, Cosi. Effectus is in continued development and as such, many things are still missing. I am thinking about including symbol table for the code (variables, commands and such...), but not in the current branch of Effectus versions. I plan to make some more amendments to finish first stage of development and then starting with completely different approach to the problem.
    • 14:
       
      CommentAuthorCosi
    • CommentTime16 Sep 2010
     
    Good luck then! Please let us know, when a new version is ready - I guess some beta tests would be helpful ;-)
    • 15: CommentAuthorw1k
    • CommentTime17 Sep 2010
     
    and what about sequences in actions? I have to really write procedures from below?
    • 16:
       
      CommentAuthorinsert
    • CommentTime27 Dec 2010
     
    jak zakonczyc program i wrocic do edytora action zeby na ekranie nie zostawaly smieci po duszku?
    • 17: CommentAuthormono
    • CommentTime27 Dec 2010
     
    Wyłączyć DMA dla PMG w DMACTLS oraz zablokować przepisywanie sprajtów na ekran w PMGCTL.
    • 18:
       
      CommentAuthorinsert
    • CommentTime27 Dec 2010
     
    jak to najlepiej zrobic w action?
    • 19: CommentAuthormono
    • CommentTime27 Dec 2010 zmieniony
     
    Jakoś chyba tak (nie znam action):
    BYTE DMACTL = 559
    BYTE PMGCTL = 53277

    DMACTL = 34
    PMGCTL = 0

    Edit: Powinno działać.
    • 20:
       
      CommentAuthorinsert
    • CommentTime28 Dec 2010
     
    dlaczego wpisujesz wartosc 34? (prosze o lopatologiczne wyjasnienie)
    • 21: CommentAuthormono
    • CommentTime28 Dec 2010 zmieniony
     
    DMACTL oraz
    PMGCTL
    Edit: info
    Edit 2: w kodzie dla porządku zmienna powinna się nazywać DMACTLS, bo to jet cień; PMGCTL to PMCNTL (tak mi się jakoś utarło to PMGCTL) - ten nie ma cienia, więc ustawia się od razu rejestr sprzętowy; w zasadzie to tylko wyłączenie przepisywania sprajtów na ekran w PMCNTL powinno wystarczyć - DMACTLS nie musisz ruszać
    • 22:
       
      CommentAuthorinsert
    • CommentTime28 Dec 2010
     
    ok, ale nie lapie tego, jestem zupelnym poczatkujacym, tam bit 3 odpowiada za PMG dla graczy, powinien byc wyzerowany, liczba 34 w bin to 00100010, czyli zerujesz 3 bit ale dlaczego ustawiasz 6 i 2?
    • 23: CommentAuthormono
    • CommentTime28 Dec 2010
     
    Za przepisywanie sprajtów z rejestrów GRAFPx/M na ekran odpowiada bit 0 i 1 PMCNTL - kiedy je wyzerujesz sprajty znikną z ekranu niezależnie od ustawienia bitów w GTIACTL(S) oraz DMACTL(S).
    GTIACTL(S) służy tylko do konfigurowanie priorytetów PMG oraz tricków typu łączenie pocisków w 5 playera, lub włączenia trybu nakładania sprajtów (tzn. multicolor - nałożenie sprajtów/pocisków 1 i 2 oraz 3 i 4 na siebie skutkuje uzyskaniem dodatkowego koloru o wartości COLPM1 OR COLPM2 lub COLPM3 OR COLPM4).
    Bity 3 i 2 DMACTL za to służą do włączenia kanału DMA dla ANTICa, który automatycznie przepisuje co linię (lub co dwie - zależnie od bitu 4) dane z pamięci (konfigurowanej rejestrem PMBASE) do rejestrów GRAFPx/M. Bit 5 powoduje pobieranie danych programu displaylist dzięki czemu rysowany jest ekran, no a bity 0 i 1 konfigurują szerokość ekranu.
    • 24:
       
      CommentAuthorinsert
    • CommentTime28 Dec 2010
     
    oki, to ja to rozumiem tak:

    rejestr PMCNTL ma adres $D01D czyli 53277 dziesietnie, zeruje go w calosci czyli wpisuje w niego wartosc 0

    rejestr DMACTL ma adres $D400 czyli 54272 dziesietnie (dlaczego w przykladzie wpisujesz cos w adres 559 dziesietnie?)

    bity 3 i 2 ustawiam na zero w tym rejestrze zeby wylaczyc DMA dla PMG

    bity 0 i 1 to szerokosc ekranu wiec cos musza miec ustawione, czy tak?

    bit 5 musi byc wlaczony z tego co rozumiem

    wiec myslac tymi wytycznymi do tego rejestru wpisalbym 100010 (od prawej: nie ustawiam bitu 0 informacji o szerokosci ekranu, ustawiam bit 1 na normalny obraz 320 pixeli, zeruje oba DMA dla PMG, kolejny bit to rozdzielczosc graczy i pociskow wiec wstawiam 0 bo mnie to nie interesuje, bit 5 ustawiam na 1 bo ma byc wlaczony) co daje dziesietnie liczbe 34

    dobrze to rozumiem?
    • 25: CommentAuthormono
    • CommentTime28 Dec 2010
     
    Dokładnie. 559 ($22F) to tzw. rejestr-cień (SHADOW - stąd S na końcu oryginalnej nazwy) rejestru sprzętowego. System na każdym przerwaniu VBLK (co 1/50 lub 1/60 s) ustawia odpowiednie rejestry sprzętowe wartościami zapisanymi w cieniach. Nie wszystkie rejestry sprzętowe mają cienie więc np. takie PMCNTL trzeba ustawiać bezpośrednio.
    Oczywiście jak zablokujesz przerwanie VBLKD (albo ustawisz rejestr CRITIC=$41), to większość cieni nie będzie przepisywana.
    • 26:
       
      CommentAuthorinsert
    • CommentTime28 Dec 2010
     
    dziekuje! to sie teraz "podlozyles" i bede Cie meczyl ;)