atarionline.pl Warsztaty Action! - robimy action games;) - 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: CommentAuthorzbyti
    • CommentTime19 Apr 2020
     
    Powiązanie jest takie, że nie dałeś spokojnie zdać pytania do końca :D

    Ale mniejsza.

    A mój projekt jest w ramach warsztatów tylko nie bazuje na kodzie @tdc ;)
    • 2:
       
      CommentAuthorKaz
    • CommentTime19 Apr 2020
     
    Zadawania pytań po tym, gdy się już pożegnaliśmy, jest mocno nie rekomendowane :). Przecież zawsze można do Tomka napisać czy to maila, czy na forum czy na priv.

    A skoro to osobny od warsztatowego program, to proponuję nawet stworzyć nowy wątek, żeby dyskusja o Twoim projekcie nie mieszała się z dyskusją o sprawach warsztatowych. Zaglądają tu również osoby początkujące, które mogą być troszkę zagubione, że się tu pisze alternatywne programy w alternatywny sposób :)
    • 3: CommentAuthorzbyti
    • CommentTime19 Apr 2020 zmieniony
     
    Mój kod na ten moment ma pomóc uczestnikom warsztatów w otrzaskaniu się z elementami języka i jest bardziej przejrzysty niż to co aktualnie udostępnił @TDC.

    Jak projektowi wyrosną nogi to założę wątek.

    Na warsztatach padło, że można obsłużyć któreś z przerwań jakie ma Atari, nie pamiętam które z trzech, bez uciekania się do ASM. Zaciekawiło mnie to więc proszę o kontynuację tutaj albo chociaż o wskazanie miejsca gdzie sobie to mogę doczytać.

    Udostępni nagranie to zobaczymy czy się wyrwałem po tym jak się pożegnaliśmy czy po tym jak @tdc zapytał czy są jeszcze jakieś pytania ;)

    Nikt się nie powinien zgubić bo napisałem, że to mój kod. Kod @tdc wrzuciłem w bardziej przejrzystej formie, więc kursant może go przeczytać bez uciekania się do montowania atr.

    I w ogóle proszę pokazać mi swój kod w Action! bo mam wrażenie, że Pan nie jest uczestnikiem warsztatów tylko obserwatorem ;) :D
    • 4: CommentAuthorzbyti
    • CommentTime19 Apr 2020 zmieniony
     
    • 5:
       
      CommentAuthorKaz
    • CommentTime19 Apr 2020
     
    Bartku, wrażenie masz dobre, bo moderuję. Zresztą było to wyjaśniane wcześniej, więc nie rozumiem dlaczego to wrażenie, a nie wiedza :)

    Co do tego, czy ktoś się zgubi czy nie - to proponuję jednak zebyśmy byli bardziej wyrozumiali dla początkujących i osób, które jeszcze nie wiedzą tyle co Ty. Często są to osoby, które nigdy wcześniej nie były na Zoomie czy na Forum Atarum, a tu od razu dostają miliony informacji. Tak sobie rozmyślam, że jeżeli wszystko chwytasz w lot, a nawet umiesz więcej - to taki warsztat niewiele Ci da, za to pochłonie mnóstwo czasu. Może rozważ indywidualne rozmowy z TDC-em, tylko w zakresie tych kilku rzeczy, które Cię interesują? To tylko taki pomysł, nie odbierz tego źle.

    A jeżeli chciałbyś poprowadzić własne warsztaty, z własnymi przykładami i wedle własnego pomysłu to z wielką chęcią zapraszam - ustalimy godziny spotkań, stworzy się pokój spotkań. Nie ma to jak nauka programowania od wielu różnych osobowości!
    • 6: CommentAuthorzbyti
    • CommentTime19 Apr 2020 zmieniony
     
    @Kaz polecę w punktach.

    1. Faktycznie, za dużo informacji na raz może przytłaczać, ale jak do tej pory nie było takiego wątku o Action! a przez ostatnie pół roku przeczytałem wszystkie na AOL i nigdzie nie było tyle sensownych informacji i przykładów co tutaj. Warsztaty miną a do wątku będzie można na spokojnie wrócić.

    2. Dziś będę wyrozumiały i będę w silent mode.

    3. O Action! wiem już całkiem sporo ale o Atari wciąż prawie nic a to jest właśnie clou tych warsztatów, więc dojadę do końca, po prostu na obecne 6h było jeszcze mało konkretów.

    4. Jako prowadzący warsztaty dla miłośników Atari na ten moment nie przedstawiam żadnej wartości :D Czekam na @bocianu i jego warsztaty o blibsach :D

    5. Zaintrygowały mnie te przerwania bo wszędzie widzę ASM wklejany w Action! ponadto Action! nie ma do tego przewidzianych narzędzi i trzeba robić to kodami rozkazów albo robić własne DEFINE.

    Dobra... To ja luzuję tutaj, może ktoś w przyszłości skorzysta z tego co jest.

    Do usłyszenia za chwilę :]
    • 7:
       
      CommentAuthorKaz
    • CommentTime19 Apr 2020
     
    Już siedzi 9 osób więc wpadaj.
    • 8:
       
      CommentAuthorKaz
    • CommentTime19 Apr 2020
     
    Twardo 29 osób co wieczór. Ciekawe, czy w tygodniu też dadzą radę? :)
    • 9: CommentAuthorzbyti
    • CommentTime19 Apr 2020 zmieniony
     
    Podobno to zalecenie w praktyce jest problematyczne.



    Wzmianka z kursu Action! w Bajtku.
    • 10:
       
      CommentAuthorKaz
    • CommentTime20 Apr 2020
     
    Link do spotkania nr 4, poniedziałkowego, godzina 20:00

    ->link<-
    • 11:
       
      CommentAuthortdc
    • CommentTime20 Apr 2020 zmieniony
     
    O! Ale się tu dzieje!;) Dzięki chłopaki;)

    Ten tekst o Action! co podlinkował Kaz to już zapomniałem że go napisałem ;)))
    7 lat i już zapomniane;)


    Załączam kolejny plik ATR, z naszą wczorajszą pracą. Niewiele tego;)
    To co robiliśmy pod koniec nie jest częścią gry, traktujmy to jako ćwiczenia, dlatego tak właśnie nazwałem to co zrobiliśmy. Wczytujcie plik "CWICZ1.ACT". Grę będziemy kontynuować w dniu dzisiejszym w poprzednim pliku.
    • 12: CommentAuthorzbyti
    • CommentTime20 Apr 2020 zmieniony
     
    Skoro w Action! jest ograniczona tablica na zmienne globalne lokalne etc. (error code 3,4,61) i można z niej "kraść" bajty długimi nazwami zmiennych i jest to częsty problem w praktyce to czas napisać jakiś Action! Minifier.

    Taki parser pozbierał by wszystkie zmienne, nazwy procedur etc. i w zależności od ich ilości zastąpił jedną literą (możne włączenie case sensitive by podwoiło możliwości?) lub przy wyjątkowo długim kodzie dwoma.

    Odpalony przed kompilacją zapobiegałby w większości przypadków przekroczeniu pamięci na tych tablicach.

    Rozwiązanie jest tak oczywiste, że jeżeli faktycznie jest to częsty problem to już musiał to ktoś w epoce ogarnąć.

    Napisanie tego dziś na PC jest sporo łatwiejsze.

    Osobiście mam zamiar pisać nazwy zmiennych i procedur "ZNACZĄCE" i martwić się dopiero jak problem wystąpi :]

    EDIT: o! też jest taka sztuczka: Compile to Disk ->link<-
    • 13: CommentAuthorzbyti
    • CommentTime20 Apr 2020 zmieniony
     
    Wygląda, że o to mi chodziło ->link<-

    Dzięki @tdc za podpowiedź o VBLANK :]

    ;
    ; Example of using the vertical blank
    ; deferred interrupt from Action
    ;

    BYTE RTCLOCK = 20,
    CH = $2FC,
    COLOR2 = $2C6

    CARD VVBLKD = $224,
    SDLST = $230,
    OLDVEC

    DEFINE JMPI = "$6C"

    ;
    ; Within a VBI you can't call any
    ; subroutines, nor can you multiply
    ; or divide. . . .

    PROC VBLANKD()
    COLOR2 = RTCLOCK
    [JMPI OLDVEC]

    ;Simulate the OS call SETVBV

    PROC SETVBV(BYTE WHICH CARD ADDR)
    CARD POINTER TEMP
    BYTE V
    TEMP = $216 + (WHICH LSH 1)
    V = RTCLOCK+ 1
    WHILE V <> RTCLOCK DO OD
    TEMP^ = ADDR
    RETURN

    PROC MAIN()
    BYTE OLDC2

    OLDC2 = COLOR2
    PRINTE("Setting up Vblank")

    OLDVEC = VVBLKD
    SETVBV(7, VBLANKD)

    WHILE CH = $FF DO
    PRINTE("Press any key to quit")
    OD
    CH = $FF ;Swallow key press

    PrintE("Restoring Vblank")

    Setvbv(7, OLDVEC)
    COLOR2 = OLDC2
    PRINTE("Returning")
    RETURN
    • 14: CommentAuthorzbyti
    • CommentTime20 Apr 2020
     
    To jeszcze jedna "ściągawka" aby łatwo sobie odświeżyć podstawowe możliwości.

    Reserved keywords

    AND Fl OR UNTIL = (
    ARRAY FOR POINTER WHILE <> )
    BYTE FUNC PROC XOR # .
    CARD IF RETURN = > [
    CHAR INCLUDE RSH - >= ]
    DEFINE INT SET * < "
    DO LSH STEP / <= '
    ELSE MOD THEN & $ ;
    ELSEIF MODULE TO % <
    EXIT OD TYPE ! @

    ----------------------------------------------------

    Library procedures.

    Print PrintE PrintD PrintDE PrintB PrintBE
    PrintBD PrintBDE PrintC PrintCE PrintCD PrintCDE
    PrintI PrintIE PrintID PrintIDE Put PutE
    PutD PutDE InputS InputSD InputMD Open
    Close XIO Note Point Graphics SetColor
    Plot DrawTo Fill Position Sound SndRst
    SCopy SCopyS SAssign StrB StrC StrI
    Break Error Zero SetBlock MoveBlock

    ----------------------------------------------------

    Library functions.

    InputB InputC InputI InputBD InpuCD InputID
    GetD Locate Paddle PTrig Stick STrig
    SCompare ValB ValC ValI Rand Peek
    PeekC Poke PokeC
    • 15:
       
      CommentAuthorKaz
    • CommentTime20 Apr 2020
     
    A ja jeszcze raz przypomnę ten artek TDC o Action! dla początkujących, bo niektórzy lepiej przyswajają wiedzę czytaną niż słuchaną:

    ->link<-
  1.  
    Zbyti, odnośnie tablicy zmiennych globalnych to jest opisany też trick na powiększenie jej w The Action! Toolkit

    ->link<-

    3.1 Increasing Your Symbol Table Space
    3.2 Increasing the Number of Global Symbols
    • 17: CommentAuthorzbyti
    • CommentTime20 Apr 2020 zmieniony
     
    Na warsztatach na "czacie" z @pirx i @Peri Noid zastanawialiśmy się czym się różni w Action! użycie (w pewnych zastosowaniach) ARRAY od POINTER i przypuszczaliśmy, że niczym.

    Postanowiłem to sprawdzić :]

    PROC MAIN() 
    CARD SAVMSC=$58
    BYTE ARRAY SCREEN

    SCREEN=SAVMSC
    SCREEN(0)=32
    RETURN

    ;------------------------------------------

    * = 1000
    1000 A5 59 LDA $59
    1002 8D A8 0E STA $0EA8
    1005 A5 58 LDA $58
    1007 8D A7 0E STA $0EA7
    100A AD A7 0E LDA $0EA7
    100D 85 AE STA $AE
    100F AD A8 0E LDA $0EA8
    1012 85 AF STA $AF
    1014 A9 20 LDA #$20
    1016 A0 00 LDY #$00
    1018 91 AE STA ($AE),Y
    101A 60 RTS
    101B 60 RTS
    101C .END

    PROC MAIN()
    CARD SAVMSC=$58
    BYTE POINTER SCREEN

    SCREEN=SAVMSC
    SCREEN^=32
    RETURN

    ;------------------------------------------

    * = 1000
    1000 A5 59 LDA $59
    1002 8D 93 0E STA $0E93
    1005 A5 58 LDA $58
    1007 8D 92 0E STA $0E92
    100A AD 92 0E LDA $0E92
    100D 85 AE STA $AE
    100F AD 93 0E LDA $0E93
    1012 85 AF STA $AF
    1014 A9 20 LDA #$20
    1016 A0 00 LDY #$00
    1018 91 AE STA ($AE),Y
    101A 60 RTS
    101B 60 RTS
    101C .END

    @tooloudtoowide dzięki, zaraz obadam ten materiał :]
    • 18: CommentAuthorzbyti
    • CommentTime20 Apr 2020 zmieniony
     

    The Action! Toolkit Section 3:

    You will recall from Section 1 we mentioned that, by default, Action! supports only up to 255 Global symbols (as well as up to 255 Local symbols). The limit on the length of any given symbol (name) is greater than the limit on the length of a line, so virtually any name is valid. However, the total space occupied by names and Action!'s associated type bytes, values, etc., cannot exceed the space reserved via STSP ($495).

    This section will discuss how to bypass two of the three limitations noted above. Note that there is currently no way to have Action! recognize more than 255 different local symbols. We do not feel that this is a limitation: if you have a PROCedure or FUNCtion which uses this many symbols, it should probably be broken into two or more subroutines anyway.
  2.  
    Zbyti, dlatego w walce ilościowej local vs global ta druga omija limit 255 po opisanym tricku.

    problem zmiennych jest jak się nadefiniuje za dużo systemowych i potem ze swoimi nagle robi się ciasno... ale nie dotarłem jeszcze do tego problemu. Jak nie mogłem zrobić sobie dobrych przeliczeń trajektorni lotu powiedzmy pocisku - to zrobiłem sobie precalc do tablicy i ruszyłem dalej.

    Ja z listy to-do mam zakolejkowane wrzucanie asm w kod Action! Jak to ogarnę w stopniu jaki mi jest potrzebny to ruszam dalej.
    • 20: CommentAuthorzbyti
    • CommentTime20 Apr 2020 zmieniony
     
    @tooloudtoowide czyli nie odpuściłeś jeszcze Action!? Fajnie :D

    Zapewne widziałeś ->link<-

    Jak się ma zasoby to pewnie można powyższy kod sobie dołączyć i "wygodnie" pisać ASM w Action!
  3.  
    Nie odpuściłem, ale mam całą listę kroków w jakich chcę to sobie "zgłębić" a w międzyczasie klikam w asm proste rzeczy plus to co w Action! robię równolegle też w cc65 na wypadek jakbym dotarł do ściany kompilatora :)

    Muszę znowu spisać w jeden odcinek następne przemyślenia obarczone wizualizacją kolejnego kroku :) tylko czasu brak.
    • 22:
       
      CommentAuthorPeri Noid
    • CommentTime20 Apr 2020
     
    A może mi ktoś pokazać asm tego co Action generuje na okazję POKE?

    Bawię się tym dla porównania w cc65. Sprawdziłem analogiczny kod do tego powyżej od @zbyti korzystając z POKE, tablicy i wskaźnika. I np. najgorszy kod dało użycie wskaźnika (jakieś 3 skoki do procedur bibliotecznych), natomiast POKE czy tablica[0] dały kod identyczny, niewymagający żadnych skoków. Ciekawe.
    • 23: CommentAuthorzbyti
    • CommentTime20 Apr 2020 zmieniony
     
    @Peri Noid proszę bardzo ;)

    ;PROC Poke(CARD address, BYTE value)
    ; store byte or char value at address
    ; (single byte store)
    poke sta arg0
    stx arg1
    tya
    ldy #0
    sta (arg0),y
    rts
    ;
    ;PROC PokeC(CARD address, value)
    ; store cardinal or integer value at
    ; address (2 byte store)
    pokec jsr poke
    iny
    lda arg3
    sta (arg0),y
    rts
    ;
    • 24: CommentAuthorzbyti
    • CommentTime20 Apr 2020 zmieniony
     
    Poprawiłem SIEVE w Action! (by wyrównać szanse) tak by używał funkcji bibliotecznych do zapełnienia tablicy wartościami (jako to jest w CC65 i MP) wyrzucając FOR jaki był w oryginalnym kodzie testu i przewaga Mad Pascala stopniała z ~350 ramek do ~100 w 10 iteracjach.

    Szczegóły w tym wątku ->link<-
    • 25:
       
      CommentAuthorPeri Noid
    • CommentTime20 Apr 2020
     
    No to w sumie cc65 robi bardzo podobny kod. Tylko w optymalnych warunkach może zostać zoptymalizowany nawet do LDA+STA. Ale to co najważniejsze, nie jest to funkcja tylko ciąg instrukcji w kodzie. Czyli odpada konieczność skakania i powrotu (czyli w sumie 12 taktów, jeśli dobrze liczę).
    • 26:
       
      CommentAuthortdc
    • CommentTime20 Apr 2020
     
    Dzisiejsze zajęcia skoncentrowały się na ABC programowania procesora graficznego ANTIC. Wiem, że dałem czadu dla tych, którzy się jeszcze nigdy z tym nie spotkali;))) Ale zapewniam że zabawa jest przednia i warto poeksperymentować!;)
    • 27: CommentAuthorzbyti
    • CommentTime21 Apr 2020 zmieniony
     
    W ramach warsztatów pobawiłem się DL, może ktoś skorzysta :]

    CARD SDLSTL=$230
    BYTE POINTER SCREEN
    BYTE RTCLOCK=$14

    BYTE ARRAY
    KING=[0
    0 0 0 0 0 0 0 $18 0 0 $18 0 0 $7E 0 7 $7E $E0
    $F $99 $F0 $1F $DB $F8 $1F $FF $F8 $1F $FF $F8
    $1F $E7 $F8 $1F $DB $F8 $F $BD $F0 7 $BD $E0 7
    $DB $E0 2 $66 $40 3 $FF $C0 1 0 $80 1 $FF $80
    ],
    QUEEN=[0
    0 0 0 0 0 0 0 0 0 $11 $18 $88 $1B $BD $D8 $1B
    $BD $D8 $1B $BD $D8 $1F $FF $F8 $1F $FF $F8 $1F
    $FF $F8 $1F $FF $F8 $F $FF $F0 $F $FF $F0 $C 0
    $30 7 $FF $E0 6 0 $60 $3 $FF $C0 3 0 $C0 1 $FF $80
    ],
    DL=[$70 $70 $4F $00 $40
    15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15
    15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15
    15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15
    15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15
    $41 0 0
    ]

    ;------------------------------------

    PROC WAIT(BYTE FRAMES)
    FRAMES==+RTCLOCK
    WHILE FRAMES<>RTCLOCK DO OD
    RETURN

    ;------------------------------------

    PROC DRAW_PIECE(BYTE ARRAY PIECE, BYTE POS)
    BYTE I1,I2,INV

    SCREEN==+POS
    FOR I2=0 TO 3
    DO
    IF (I2 & 1) THEN INV=$FF ELSE INV=0 FI
    FOR I1=1 TO 57
    DO
    SCREEN^=INV ! PIECE(I1)
    SCREEN==+1
    IF (I1 MOD 3)=0 THEN SCREEN==+37 FI
    OD
    OD
    RETURN

    ;------------------------------------

    PROC MAIN()
    CARD
    SCREEN1=$4000,
    SCREEN2=$5000
    BYTE I

    PRINTE("PLEASE WAIT...")

    FOR I=0 TO 36 STEP 3
    DO
    SCREEN=@SCREEN1
    DRAW_PIECE(QUEEN,I)
    OD

    FOR I=0 TO 36 STEP 3
    DO
    SCREEN=@SCREEN2
    DRAW_PIECE(KING,I)
    OD

    SDLSTL=DL
    DO
    WAIT(10)
    DL(4)=$50
    WAIT(10)
    DL(4)=$40
    OD
    RETURN

    Disyplay List Array Values:

    ANTIC	OS
    $02 $00
    $03 -
    $04 $0C
    $05 $0D
    $06 $01
    $07 $02
    $08 $03
    $09 $04
    $0A $05
    $0B $06
    $0C $0E
    $0D $07
    $0E $0F
    $0F $08

    Decimal Hex mode lines line line
    15 $F 8 1 320 40 graphics mode 8
    65 $41 -- -- -- -- jump & wait VBLANK
    112 $70 -- 8 -- -- 8 blank lines


    Basic Mode Number : 8
    Antic Number : 15
    Type : graphics
    LMS Byte : $4F
    Mode Lines : 192
    Scan Lines per Mode Line : 1
    Bytes per Mode Line : 40

    LMS
    Rozkazem ładowania wskaźnika pamięci ekranu (LMS - Load Memory Scan) może być każdy z rozkazów tworzenia linii trybu. Uzyskuje się to przez ustawienie bitu 6 kodu rozkazu oraz podanie adresu danych obrazu w dwóch następnych bajtach.
    • 28: CommentAuthorVidol
    • CommentTime21 Apr 2020
     
    a gdzie to DLI ? :)
    • 29: CommentAuthorzbyti
    • CommentTime21 Apr 2020 zmieniony
     
    @Vidol racja, zaraz wyedytuję, była czwarta rano... ;)
    • 30:
       
      CommentAuthorKaz
    • CommentTime21 Apr 2020 zmieniony
     
    Dla początkujących wyjaśnijmy pomyłkę - DL to skrót od Display List, a DLI to Display List Interrupt. Nie każdy musi znać wszystkie skróty, a ten wątek odwiedząją wybitnie początkujący, niech się oswajają z potrzebnymi skrótami.

    A przy okazji lecimy z linkiem do dzisiejszej lekcji, nr 5:

    ->link<-
    • 31: CommentAuthorzbyti
    • CommentTime21 Apr 2020 zmieniony
     
    Tak. Z bieżących wątków gdzie miedzy innymi omówiony jest przykład DLI polecić można ten dotyczący Archon Adventures ->link<-

    Wracając do DL:

    Display Lists Simplified ->link<-

    ANTIC AND THE DISPLAY LIST ->link<-

    Display Lists ->link<-

    ANTIC Display List ->link<- [PL]

    Tajemnice Atari 92/3 ->link<- [PL]

    Tajemnice Atari 92/4 ->link<- [PL]

    Do Re Atari ->link<- [PL]
    • 32: CommentAuthormkolodziejski
    • CommentTime21 Apr 2020 zmieniony
     
    @zbyti
    zrobiłem na szybko plik składni ACTION! do Sublime Text 3, chciałbym zaprosić ciebie do testów :)

    może ktoś jeszcze będzie zainteresowany? Po 17 - wystawię link do repozytorium GitHub.

    na razie GIST: ->link<-
    • 33: CommentAuthorzbyti
    • CommentTime21 Apr 2020 zmieniony
     
    @mkolodziejski dzięki Ci dobry człowieku!

    Zaraz jak tylko dasz dostęp do wytczki sprawdzę i dam znać! :]

    EDIT: ok, widzę GIST, obadam :]

    Potestowałem chwilę, świetna robota! Poza drobiazgiem, który pewnie widzisz sam ale dla pewności dałem Ci na priv to nic tylko korzystać! :D

    Gruntownych testów nie robię ale, że zamierzam trochę popisać jeszcze w Action! to sukcesywnie będę zgłaszał błędy albo nawet pokuszę się o pull request ;)
    • 34: CommentAuthormkolodziejski
    • CommentTime21 Apr 2020 zmieniony
     
    plik składni - ->link<-

    instrukcja instalacji: ->link<-

    Plik składni wzoruję na tych fragmentach kodów Action! które przewijają się przez `warsztat TeDeCa` - na razie może w nim brakować DUUUŻo, porównałem z BNFami (definicja składni parsera) z kodów Action (dla ciekawskich - moduły 10.asm i 11.asm). Będę dodawał na bieżąco rozwoju świetnego warsztatu (dzięki @tdc) - zgodnie z obietnicą - kod trafi wieczorem na GitHub i będzie można forkować, zgłaszać swoje uwagi i zmiany.
    • 35: CommentAuthorCaesar
    • CommentTime21 Apr 2020
     
    Akurat wczoraj nie miałem za dużo czasu a było to, czego się najbardziej chciałem dowiedzieć :( Liczę, że TDC na szybko streści poprzedni wykład.
    • 36: CommentAuthorzbyti
    • CommentTime21 Apr 2020 zmieniony
     
    Każdemu kto nie jest purystą i koduje aktualnie w Action! poza emulatorem polecam skorzystać z pracy @mkolodziejski!

    Czytelność i moja orientacja w kodzie bardzo wzrosła :]

    • 37: CommentAuthorzbyti
    • CommentTime21 Apr 2020 zmieniony
     
    Zachęcam do pobrania i przejrzenia poniższych plików, można je traktować jakoś "ściągawki" do mapy pamięci Atari etc.

    Jeden plik pochodzi ze źródeł Mad Pascala a drugi z K65.
    • 38: CommentAuthorantrykot
    • CommentTime21 Apr 2020
     
    DL=[$70 $70 $4F $00 $40
    15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15
    15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15
    15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15
    15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15
    $41 0 0
    ]

    I ANTIC skoczy gdzieś w maliny, kiedy tylko POKEY zechce.
    • 39: CommentAuthorzbyti
    • CommentTime21 Apr 2020 zmieniony
     
    @antrykot jako że się nie znam to dopytam, chodzi o $41 0 0? Miałem tam ustawiony adres DL ale @tdc mówił, że dopóki nie wyłączy się OS to jest to "ignorowane" czy coś w tym stylu, @tdc ma tak samo w swoim źródle:

    BYTE ARRAY P=0; POKE(710,10) P(710)=10
    ,DIS=[112
    66 $50 $9B
    2 2 4 4 4 4 4 4 2 2 2 2 2 2 2 2
    2 2 2 2 2 2 2 2 2 2
    $40 2
    65 0 0
    ]

    Rozkaz skoku (65) z oczekiwaniem na synchronizację pionową - powinien kończyć Display List i jednocześnie "uruchamiać" ją od początku.


    Mógłbyś szerzej opisać problem? atariki.krap.pl ma rację czy @tdc? ;)
    • 40: CommentAuthorantrykot
    • CommentTime21 Apr 2020 zmieniony
     
    To jest ignorowane dopóki cyklicznie wykonywana jest druga faza VBI. Ale druga faza może być zablokowana przez IRQ (albo CRITIC>0), wystarczy, że się naciśnie odpowiedni klawisz w pechowym momencie. (I nie, nie ma tam być adresu jaki "ustawiasz dla LMS", tylko adres początku DL.)
    • 41: CommentAuthorzbyti
    • CommentTime21 Apr 2020 zmieniony
     
    @antrykot dzięki za info.

    Faktycznie mój błąd, miałem na myśli początek DL a napisałem jak napisałem ;) Wyedytowałem, swoją pomyłkę dla jasności pytania.

    Przepisywałem DL ze swojego kodu w ASM i tam miałem poprawnie:

    ;
    .local dl8
    .byte $70,$70 ;2x8 empty scanlines
    .byte $4f,a(schess1)
    :94 .byte $0f
    .byte $4f,a(schess2)
    :92 .byte $0f
    .byte $41,a(dl8) ;Wait VBL, jump DL
    .endl

    .local dl0
    .byte $70,$70,$70 ;3x8 empty scanlines
    .byte $42,a(stext)
    :23 .byte $02
    .byte $41,a(dl0) ;Wait VBL, jump DL
    .endl
    • 42: CommentAuthorantrykot
    • CommentTime21 Apr 2020
     
    Przy okazji, jak zrobisz żeby w Action! DL nie przekraczało granicy jedno-kibibajtowego bloku?
    • 43: CommentAuthorzbyti
    • CommentTime21 Apr 2020 zmieniony
     
    @antrykot nie mam pojęcia, jak to ogarnę to dam znać, chyba, że wiesz to napisz.

    Na ten moment kombinuję bo chyba nie ma mechanizmu by podczas kompilacji wstawić ten adres DL po $41, wygląda, że muszę to zrobić w runtime...
    • 44: CommentAuthorzbyti
    • CommentTime21 Apr 2020 zmieniony
     
    Np. tak ->link<- się ustawia skok na początek DL :] ale badziew... To ja to na ten moment oleję, szkoda roboty dla testowego kodu.

    ;
    dlist_ptr==+22
    dlist_ptr^=save_dlist_ptr-((save_dlist_ptr RSH 8) LSH 8)
    dlist_ptr==+1
    dlist_ptr^=save_dlist_ptr RSH 8 ;divide by 256!
    dma=0 ; turn off the antic chip
    dlist_vector=save_dlist_ptr; install the dlist vector
    savmsc=old_savmsc; reset the screen starting address
    dma=34 ; turn on the antic chip
    • 45: CommentAuthormkolodziejski
    • CommentTime21 Apr 2020 zmieniony
     
    jak obiecałem kolorowanie składni do Action! dla edytora Sublime Text 3 - trafiło na GitHub: ->link<-

    @zbyti - pozwoliłem sobie na `cytat` z Twojego kodu w postaci screenshota działania składni w akcji :)

    @tdc - jeszcze raz wielkie dzięki za te warsztaty - inspirują!

    żebym ja ~30 lat temu zainteresował się Action!... to pewnie nic by się zawodowo nie zmieniło :D ale przynajmniej znałbym Action! :)
    • 46: CommentAuthorzbyti
    • CommentTime21 Apr 2020
     
    @mkolodziejski czuję się zaszczycony :]
    • 47:
       
      CommentAuthorKaz
    • CommentTime21 Apr 2020
     
    Zaczęło się!
    • 48:
       
      CommentAuthorKaz
    • CommentTime21 Apr 2020 zmieniony
     
    To ja wrzucam dzisiejszy obrazek tła (114 znaków, bez znaków w inwersie, przyciemnione zgodnie z życzeniem) w formacie G2F tutaj, można sobie pobrać, jeśli ktoś potrzebuje do analiz albo wczytania do swojego programu.
    • 49:
       
      CommentAuthortdc
    • CommentTime21 Apr 2020 zmieniony
     
    Dzięki Kaz!;)

    mkolodziejski:

    @tdc - jeszcze raz wielkie dzięki za te warsztaty - inspirują!

    Dzięki - cieszę się bardzo;)

    Fajny pomysł z przygotowaniem tej składni;) Pewnie będzie to pomocne dla wielu osób;)


    Podsyłam kolejnego ATRa, mamy teraz pliki:
    S ACT 004
    CWICZ1 ACT 005
    CWICZ2 ACT 005 - przykład animacji na przykładzie setblock() i moveblock().
    CWICZ3 ACT 006 - przykład animowania setblock - przesuwanie obrazu za pomocą display listy;)
    • 50:
       
      CommentAuthorKaz
    • CommentTime22 Apr 2020 zmieniony
     
    To jeszcze ekran tytułowy na szybko, żeby było na czym pracować. Dla utrudnienia - 3 zmiany kolorów w DLI, 1 zmiana trybów graficznych (z GR12 na GR0).