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 18:04
       
      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 18:04
       
      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 18:04 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 19:04 zmieniony
       
      • 5:
         
        CommentAuthorKaz
      • CommentTime19 Apr 2020 19:04
       
      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 19:04 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 19:04
       
      Już siedzi 9 osób więc wpadaj.
      • 8:
         
        CommentAuthorKaz
      • CommentTime19 Apr 2020 20:04
       
      Twardo 29 osób co wieczór. Ciekawe, czy w tygodniu też dadzą radę? :)
      • 9: CommentAuthorzbyti
      • CommentTime19 Apr 2020 20:04 zmieniony
       
      Podobno to zalecenie w praktyce jest problematyczne.



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

      ->link<-
      • 11:
         
        CommentAuthortdc
      • CommentTime20 Apr 2020 03:04 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 08:04 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 09:04 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 10:04
       
      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 10:04
       
      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 14:04 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 15:04 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 15:04 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 16:04
       
      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 17:04 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 19:04 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 19:04
       
      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 23:04
       
      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 03:04 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 05:04
       
      a gdzie to DLI ? :)
      • 29: CommentAuthorzbyti
      • CommentTime21 Apr 2020 07:04 zmieniony
       
      @Vidol racja, zaraz wyedytuję, była czwarta rano... ;)
      • 30:
         
        CommentAuthorKaz
      • CommentTime21 Apr 2020 08:04 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 08:04 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]
    4.  
      @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 12:04 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 ;)
    5.  
      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 12:04
       
      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 13:04 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 13:04 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 14:04
       
      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 14:04 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 15:04 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 15:04 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 15:04
       
      Przy okazji, jak zrobisz żeby w Action! DL nie przekraczało granicy jedno-kibibajtowego bloku?
      • 43: CommentAuthorzbyti
      • CommentTime21 Apr 2020 15:04 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 16:04 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
    6.  
      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 17:04
       
      @mkolodziejski czuję się zaszczycony :]
      • 47:
         
        CommentAuthorKaz
      • CommentTime21 Apr 2020 20:04
       
      Zaczęło się!
      • 48:
         
        CommentAuthorKaz
      • CommentTime21 Apr 2020 23:04 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 23:04 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 00:04 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).