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:
         
        CommentAuthortdc
      • CommentTime22 Apr 2020 00:04
       
      O! Super!;)

      Dziękujemy Kaz - teraz gra będzie wyglądać o niebo lepiej!;)
      • 2:
         
        CommentAuthorKaz
      • CommentTime22 Apr 2020 00:04
       
      Potrzebne jeszcze jakieś obiekty, ale nie wiem jakie mają rozmiary i jakie kolory.
      • 3: CommentAuthorzbyti
      • CommentTime22 Apr 2020 01:04 zmieniony
       
      Na głównej jest link jako QR CODE do warsztatów TDC.

      @Kaz po prostu edytuj pierwszy post TDC i wrzucaj w widoczny sposób link do nowych sesji ZOOM.



      Można też każdorazowo generować dla sesji ZOOM ale to więcej roboty, lepiej niech to wskazuje do nowinki lub pierwszego postu w odpowiednim wątku.
      • 4:
         
        CommentAuthorKaz
      • CommentTime22 Apr 2020 06:04
       
      Zbyti - dzięki! To będzie metoda uzupełniająca.
      • 5: CommentAuthorVidol
      • CommentTime22 Apr 2020 06:04 zmieniony
       
      To ja dorzuce swoje 2 grosze na temat optymalizacji obrazkow g2f na przykladzie grafiki Kaz'a.


      Pierwsze co rzucilo mi sie w oczy to to ze zmieniany jest kolor inwersji, skoro jest nie uzywana to od razu mozna sie tego pozbyc :)
      Druga sprawa - zmiana trybu na gr8. Sa tam 3 zmiany kolorow. Kolor $d016 ($2c4)- w g2f Color0- nie musi byc zmieniany gdyz jest on nie uzywany w gr8.



      Sa to takie drobne szczegoly malo istotne dla wygladu grafiki, gdyz po tych zmianach na ekranie wizualnie nic sie nie zmienilo:) , jednak przy bardziej skomplikowanych rysunkach gdy np. dochodza duszki to dla programisty maja wielkie znaczenie.

      Mozna pokusic sie jeszcze o jedna zmiane. Wystarczy ze zamienimy w napisie 'Virus' kolory $D017 z $d016 (Image/Change Colors)i ustawic $d016-$82, $d017-$8c i w gr8 nie musimy martwic sie o jasnosc liter :). W gr8 jasnosc pobierana jest wlasnie z $d017 przy czym ignorowana jest informacja o kolorze.

      • 6: CommentAuthorzbyti
      • CommentTime22 Apr 2020 08:04 zmieniony
       
      @Vidol, @Kaz moglibyście wrzucić to też w postaci gotowej do użycia we własnym programie? Nie znam G2F, do tego jest on Windows Only.

      Chętnie przyjrzałbym się czy umiałbym to wyświetlić w Action! bez niczyjej pomocy.
      • 7: CommentAuthorzbyti
      • CommentTime22 Apr 2020 10:04 zmieniony
       
      @mkolodziejski może to usprawni Twoją pracę?

      Wiem, że czytasz parser etc. z uwolnionego kodu Action! który jest w ASM, ale może jest wygodniejsza droga?

      Słowa kluczowe są znane, dostępne w wielu miejscach łacznie z tym wątkiem.

      Procedury i funkcje łatwiej niż z ASM jest wyciągnąć z oficjalnego RUNTIME.ACT, zamieszczam w załączniku.
      • 8:
         
        CommentAuthorsun
      • CommentTime22 Apr 2020 11:04
       
      @zbyti: użycia w czym? W Action?
      Hm, no to nie wiem, formatów eksportu jest kilka, ale przeważnie się to ociera o mads lub ew. madpascal.
      Paczka z danymi oraz dane+asm.
      Można to spokojnie ogarnąć, może TDC ma do tego gotowe funkcje, jak nie, trzeba szukać na szwedzkiej stronie "napisz.se" :)
      • 9: CommentAuthorzbyti
      • CommentTime22 Apr 2020 11:04 zmieniony
       
      @sun dzięki! :] Tak, wciąż się bawię Action!

      Postaram się skorzystać z tej Szwedzkiej strony ;)
      • 10:
         
        CommentAuthorKaz
      • CommentTime22 Apr 2020 11:04
       

      Zbyti:

      @Kaz moglibyście wrzucić to też w postaci gotowej do użycia we własnym programie? Nie znam G2F, do tego jest on Windows Only.


      Plik G2F zawiera wszystkie potrzebne Ci dane (niepotrzebne też). Z niego potem możesz sobie wygenerować i zapisać wszystkie inne pliki. Zależy więc, czego potrzebujesz. Jeżeli wystarczy Ci sama bitmapa, to generujesz sobie plik MIC. Jeżeli potrzebne Ci dane fontów to FNT. Jeżeli duszki - to PMG. Jeżeli uproszczony obraz do wykorzystania na Atari - to plik MCH. I tak dalej.

      Vidol:

      To ja dorzuce swoje 2 grosze na temat optymalizacji obrazkow g2f


      Kamil, ale tutaj nigdzie nic nie było o optymalizacji obrazków, w ogóle to nie temat graficzny :D. Jeśli coś takiego robimy to proponuję w tym wątku: ->link<-
      żeby nie zaśmiecać TDC-owi.

      Z tym, że wolałbym, żebyś nie poprawiał mojej grafiki robionej na szybko w nocy w trakcie wykładu, bo to mało ambitne, tylko zaprezentował to co masz najlepszego - własne grafiki w kolejnych krokach, opowiedział jak je optymalizujesz, a do tego właśnie jakiś opis tworzenia w G2F, a może nawet warsztaty. Wpadaj dzisiaj na KWAS-a to omówimy na żywo sprawę!

      Akurat ten mój obrazek na razie nie potrzebuje optymalizacji, bo chciałbym na jego przykładzie omówić kilka elementów. Nie odnotowałeś tam jeszcze kilku innych rzeczy, które wypada w wersji finalnej poprawić:
      - na górze są wyłączone dwa wiersze, a na dole żaden,
      - jest zmiana kolorów w miejscu, w którym być nie powinny, linia 50 i 51 - to wynik błędu G2F, który chciałbym kiedyś pokazać,
      - i z merytoryki - oświetlenie napisu i książyca jest z innej strony, a powinno być zgodne.

      Takie przygotowanie obrazków w różnych wersjach bardzo się przydaje do demonstracji, ale jeszcze tego nie mam :). Za to pierwszy obrazek już mam przygotowany w dwóch wersjach - z przekroczeniem jednego zestawu znaków i mieszczący się w jednym zestawie, co omawialiśmy już na warsztatach. Ten pierwszy mógłby uniemożliwić programiście wyświetlenie w miejscu grafiki obiektów wykonanych na znakach. Ten drugi zostawia 14 znaków na taką operację. To niby drobiazgi, ale tak jak piszesz - mające kluczowe znaczenie, gdy tworzymy grę i zaczynamy intensywniej korzystać z możliwości Atari.

      Proponuję już dalszą dyskusję prowadzić we właściwym wątku.
      • 11: CommentAuthorzbyti
      • CommentTime22 Apr 2020 12:04 zmieniony
       
      @antrykot

      Odpowiadają na pytanie jak zamierzam nie przekroczyć 1KB dla DL to na ten moment przychodzą mi do głowy tylko 2 rozwiązania:

      1. Za pomocą dyrektyw:

      SET $E=$2000
      SET $491=$2000

      ustawić kompilatorowi gdzie ma się zaczynać mój CODE BASE i wrzucić deklarację DL na sam początek bo kompilator Action! wtedy od tego miejsca wrzuci zadeklarowane tablice.

      Skutkuje to tym, że muszę mniej więcej się orientować kiedy moje DL przekroczą $23FF.

      Czytałem jeszcze o jakiejś dyrektywie co robi OFFSET ale nie wiem czy to by coś dało bo się jeszcze nie wglębiłem.

      2. Widzę w źródłach przykładów dla Action! metodę tworzenie DL nie na etapie kompilacji ale dopiero po uruchomieni programu, wtedy można je wrzucać pod wcześniej wskazane adresy kosztem pracy w runtime na starcie programu.
      • 12:
         
        CommentAuthorsun
      • CommentTime22 Apr 2020 15:04
       
      A nie można po prostu zrobić move tej tablicy z danymi DL pod konkretny adresik? I sobie już w tablicy wpisać adres skoku jako tenże?
      • 13: CommentAuthorzbyti
      • CommentTime22 Apr 2020 15:04 zmieniony
       
      @sun to co proponujesz to taki złoty środek między pkt.1 a pkt.2 czyli przygotowanie DL w źródłach a relokacja plus uzupełnienie skoku w runtime.

      Poszukam jednak czy można to zrobić dyrektywami.

      Chcę uniknąć pracy w runtime którą powinien wykonać kompilator.

      Może DL warto przygotować jako bloki danych (fragment pamięci) pod odpowiednim adresem i linkować ze źródłem? I tak są pisane wartościami liczbowymi rozkazów na ten moment.

      Chyba należy to zrobić na takiej samej zasadzie jak wczytanie zestawu znaków. Nawet @tdc ma jedną linijkę zakomentowaną do wczytywania .DAT pod wskazany adres.
      • 14: CommentAuthorzbyti
      • CommentTime22 Apr 2020 16:04 zmieniony
       
      Tak. DL wydaje się najlepiej ogarniać metodą podaną w 4.3 Action! Toolkit:

      4.3 Using Large Assembly Language Modules
      -----------------------------------------

      Since you can direct Action!'s code generation, you can obviously
      "tell" it to reserve any given area of memory. This implies that you
      may assemble code for some specific address range, make a list of the subroutine entry points and/or variables to be accessed from Action!, and compile an Action! program which avoids the assembly language area. If the Action! program equates PROCedures, FUNCtions, and variable names to locations within this area, the assembly language routines, etc., may be used interchangeably with Action! routines.

      Here is a small example of what we are discussing:

      Assembly language:
      *=$3000
      LSH3 ; FUNCTION: left shift argument by 3
      ASL A
      ASL A
      ASL A ; left shift 3 times
      STA $A0 ; put where Action! puts function
      LDA #0 ; ...return values
      STA $A1
      RTS
      masks .BYTE 1,2,4,8,l6,32,64,l28 ; set of bit masks

      Action!:
      BYTE FUNC LSH3=$3000 (BYTE N)
      BYTE ARRAY MASK(0) = $300A

      For this particular example, you would probably be better off putting the small routine and array directly in your Action! program, via code blocks. But for larger, more complex operations, etc., this technique is very workable.
    1.  
      @zbyti

      dziękuję, źródłami się tylko posiłkowałem żeby przejrzeć co jest grane - potem skorzystałem z twojego kopipasty ze źródeł online na temat słów kluczowych, funkcji i procedur bibliotecznych - i dalej jadę już rzeźbą a dopasowaniu kontekstów ciągów znaków - drobna zapowiedź, w szykowanej wersji powinny działać `podpowiedzi` kontekstowe przy pisaniu (nie będzie to pełne wparcie jak w PRO ide dla C#, Jaby, C/C++, ale zawsze kilka klawiszy mniej trzeba będzie nacisnąć).

      Błąd który zauważyłeś - wynika z faktu, że składnia ma kolizję pojęciową - IF użyty liniowo sam wtedy jest pokolorowany jako `słowo kluczowe`, versus IF z wyrażeniem w nawiasach, wtedy jest kolorowany jako `funkcja lu wykołanie funkcji`. Do szybkiej poprawy :)

      @tdc taki miałem zamiar - żeby się przydało w community - nawet można pokusić się o drobny artykuł na forum żeby zostało dla potomnych (i w wyszukiwarce).
      • 16:
         
        CommentAuthorKaz
      • CommentTime22 Apr 2020 18:04
       

      mkolodziejski:

      nawet można pokusić się o drobny artykuł na forum żeby zostało dla potomnych (i w wyszukiwarce).


      O, to to! :D
      Zachęcam do skrobnięcia paru zdań, podesłania screenshotów i wrzucimy na główną oraz działu poradnikowego.
      • 17: CommentAuthorzbyti
      • CommentTime23 Apr 2020 00:04
       
      Zostawiam sobie info bo często się pojawia to pojęcie przy czytaniu o trybach graficznych.

      Cykl koloru
      Jednostka czasu odpowiadająca jednemu okresowi podstawowego sygnału taktującego GTIA (w systemie PAL - 3,546894 MHz, w systemie NTSC - 3,579545 MHz, w systemie SECAM - 3,563 MHz), co odpowiada 1/228 linii, czyli 1/71136 ramki, a także 1/2 cyklu maszynowego. Jednostka ta ma bezpośrednie przełożenie na określenie poziomej pozycji i szerokości wyświetlanych obiektów graficznych i do tego celu również jest używana.

      Jest to czas, w jakim układy graficzne Atari są w stanie dokonać pełnej zmiany koloru w linii poziomej, stąd też wynika najmniejsza szerokość pikseli w kolorowych trybach graficznych. Tryby monochromatyczne ANTIC-a dają możliwość wyświetlania pikseli o szerokości połowy cyklu koloru.

      ->link<-
      • 18: CommentAuthorzbyti
      • CommentTime23 Apr 2020 08:04
       
      @Kaz chyba nie musisz tworzyć każdorazowo linku do sesji Zooma dla TDC.

      Link do spotkania nr. 5 działa. Ustaw dziś jakiś bez numeru spotkania to podepnę pod QR CODE i do końca Warsztatów nie będę musiała nic zmieniać, każdy kto kliknie w środek QR na logo ZOOM będzie trafiał w tę sesję.
      • 19:
         
        CommentAuthorKaz
      • CommentTime23 Apr 2020 09:04
       
      To nie ja tworzę, ale jakub - wydaje mi się, że są tego jakieś racjonalne przyczyny, ale to może niech się Kuba wypowie.
      • 20:
         
        CommentAuthorKaz
      • CommentTime23 Apr 2020 10:04
       
      Link do dzisiejszego spotkania z TDC-em:

      ->link<-
      • 21: CommentAuthorzbyti
      • CommentTime23 Apr 2020 11:04
       
      Dzięki, zmieniłem link w QR CODE, jeżeli sesja pozostanie do końca warsztatów ta sama to nic nie będę musiał zmieniać.

      QR CODE po zeskanowaniu pokazuje link do pierwszego postu tego wątku, po "kliknięciu" od razu strzela w link sesji ZOOM warsztatów.
      • 22:
         
        CommentAuthorKaz
      • CommentTime23 Apr 2020 11:04
       
      Niestety, Kuba mi pisał przed chwilą, że link nie może być ten sam, mamy już przygotowane linki na kolejne dni.
      • 23: CommentAuthorzbyti
      • CommentTime23 Apr 2020 11:04 zmieniony
       
      No to trudno, będę pomieniał, chyba, że sam to opanujesz to wtedy nie będziesz musiał obwieszczać w kilku miejscach tylko zaktualizujesz link w lewym klocku po FTP i QR będzie aktualny.

      W lewym klocku podmieniasz tylko link w tym miejscu:

      <div><a href="https://us02web.zoom.us/j/82561643485?pwd=ZVpCQXU4YjhQNHJ3Mm1DR3c3QUJyUT09"><img style="margin-left: 35px; margin-bottom: 20px;" src="./gfx/tdc-qr-code.png" alt="Warsztaty Action!" height="200" width="200">
      </div>

      można to zrobić po FTP.

      Kuba też to może zrobić w sumie ;)
      • 24:
         
        CommentAuthorKaz
      • CommentTime23 Apr 2020 11:04
       
      To poproszę Cię o takie podmianki. Ja i tak będę informował w trzech dotychczasowych miejsach, bo ludzie czasami nie patrzą albo nie wiedzą o kodzie QR.
      • 25: CommentAuthorzbyti
      • CommentTime23 Apr 2020 11:04 zmieniony
       
      QR jest 200x200 trudno przegapić, ale Kuba, przy jego zdolnościach, to może sobie napisać skrypt który mu będzie podmieniał ten fragment strony i jednym kliknięciem (poleceniem konsoli) będzie podmieniał link na aktualny ;)
      • 26: CommentAuthorjakubd
      • CommentTime23 Apr 2020 12:04
       
      Można od razu ustawić, żeby się samo zmieniało z CRONa pewnie.
      Teoretycznie można także zrobić jeden link do wszystkich spotkań, ale wtedy mamy problem z ZOOMem - przy aktywnych opcjach "można wchodzić przed prowadzącym" oraz "brak poczekalni" efekt jest taki, że linki wielokrotnego użycia działają przez cały czas, co zakłócić może inne trwające spotkania na tym koncie, a tego nie chcemy.

      Na razie popatrzę na CRONa czy jest i dodam automacik, ale to wieczorem.
      • 27:
         
        CommentAuthortdc
      • CommentTime23 Apr 2020 20:04 zmieniony
       
      Pliki do dzisiejszego warsztatu.
      • 28:
         
        CommentAuthortdc
      • CommentTime23 Apr 2020 23:04 zmieniony
       
      Teraz się dzieje!;)))

      Po dzisiejszym warsztacie plik ATR. Warto uruchomić i zobaczyć co się dzieje!;))
      • 29: CommentAuthorzbyti
      • CommentTime24 Apr 2020 00:04 zmieniony
       
      • 30: CommentAuthorzbyti
      • CommentTime24 Apr 2020 01:04 zmieniony
       
      Przeczytałem kurs Zientary w Bajtku i widzę, że jest metoda ustalenia jaki adres należy wpisać do skoku DL na jej końcu.

      Wymaga to ustaleniu dla programu miejsca gdzie ma lądować skompilowany kod, np.:

      SET $E=$2000
      SET $491=$2000

      po kompilacji C odczytujemy adres naszej tablicy Display Listy (warto zadeklarować ją na samym poczatku programu) w monitorze za pomocą ? DL.

      Ogólnie po skompilowaniu można się za pomocą ? nazwa dowiedzieć pod jakim adresem wylądowała jaka zmienna, tablica, procedura.
      • 31:
         
        CommentAuthortdc
      • CommentTime24 Apr 2020 11:04 zmieniony
       
      Adres też można pobrać w trakcie, gdy program działa i modyfikować sobie coś - jeśli jest taka potrzeba.

      Czyli ustalenie tego adresu można zrobić już z poziomu kodu.

      Inna sprawa, że my to będziemy robić jeszcze inaczej, więc takiej potrzeby nie będzie;) Szczegóły w pliku txt;)
      • 32: CommentAuthorzbyti
      • CommentTime24 Apr 2020 12:04 zmieniony
       
      @tdc chyba nie doczytałeś jaka idea mi przyświeca.

      Ja chcę mieć podczas kompilacji wszystko ustawione w źródłach. Nie chcę żadnego doczytywania plików w runtime czy kopiowania DL jak to opisałeś w pliku, żadnego pobierania adresu w trakcie pracy programu etc.

      Dla mnie program po uruchomieniu ma robić swoją robotę a nie pracę jaką w innych językach wykonuje kompilator/linker.

      Dopóki program się będzie mieścił w pamięci nie zamierzam używać metody WG którą ostatnio zaprezentowałeś i szukam innych rozwiązań. Zapewne metodą @jhusak, mógłbym wrzuci przygotowane assety/DL/etc. do pamięci i dopiero wywołać kompilator Action!.
    2.  
      @zbyti
      poprawiłem błąd z kolorowaniem IFa po którym następowało wyrażenie w nawiasie (ach powiadło IT :P).

      dla przypomnienia repozytorium aktualnej wersji:
      ->link<-

      dla dociekliwych i chętnych przygody - tak wygląda zgłoszenie błędu w GitHub:
      ->link<-

      Zachęcam do testów i zgłaszania w ISSUEs kolejnych uwag, albo propozycji rozszerzeń.
      • 34:
         
        CommentAuthortdc
      • CommentTime24 Apr 2020 13:04 zmieniony
       
      Łukasz miał wczoraj pomysł na efekt:

      • 35: CommentAuthorzbyti
      • CommentTime24 Apr 2020 16:04 zmieniony
       
      @mkolodziejski dzięki, zaraz obejrzę parę źródeł za pomocą Twojego syntaxu :]

      EDIT: no to już masz zgłoszenie ode mnie na GitHub ->link<- ;)

      Jeżeli mógłbyś zmienne zrobić w innym kolorze niż biały to było by fajnie, szary albo coś co lubisz, biały się mocno wybija mi z kodu.

      PROC, FUNC i RETRUN - te słowa kluczowe jako tworzące bloki kodu wyróżnił bym innym kolorom od pozostałych.
      • 36: CommentAuthorastrofor
      • CommentTime24 Apr 2020 16:04
       
      Sublime text jest ok, ja znalazlem templata do brackets do syntaxtow, opartego na codemirror , a wiec 2 pieczenie przy jednym ogniu. Przy odrobinie wolnego czasu może zrobie konwersje.
      • 37: CommentAuthorzbyti
      • CommentTime24 Apr 2020 17:04 zmieniony
       
      @jakubd jak dla mnie wygląda, że link do wczorajszej sesji jak najbardziej będzie działał dziś. Zalogowałem się, plansza jest etc.

      Zawsze mogliśmy wchodzić przed hostem jak do tej pory.

      Powiszę tam chwile może ktoś wejdzie i sprawdzę, bo jak dla mnie jest to w pełni funkcjonalny link.

      EDIT: był @astrofor wszystko, działa, także nie widzę potrzeby nowego linku na dziś.
      • 38:
         
        CommentAuthorKaz
      • CommentTime24 Apr 2020 20:04
       
      Rozpoczęliśmy.
      • 39:
         
        CommentAuthortdc
      • CommentTime24 Apr 2020 23:04 zmieniony
       
      Dzisiejsza nasza praca, upiększanie grafiki tła (warianty, losowość) oraz zabawy w animowanie duszków:
      • 40: CommentAuthorzbyti
      • CommentTime24 Apr 2020 23:04 zmieniony
       
      @tdc dzięki za super warsztaty!

      Ja tym czasem staram się zdobywać podstawy ML czytając prosty kod i przenosząc go na Action! co polecam każdemu w formie ćwiczeń.

      Przepisałem dziś pierwsze listing z 5/92 Tajemnic Atari ->link<-



      @mono mi pomógł zrozumieć gdzie zrobiłem błąd, pisząc w zmiennej TEXT dużymi lterami ;) THX @mono.

      Dla ciekawych oba listingi. Lektura pomocnicza ->link<-

      Action! Przesuw poziomy
      SET $E=$2000
      SET $491=$2000

      BYTE ARRAY
      DL=[$70$70$70$46$C$20$41$1$20],
      TEXT="NNNNNNNNNNNNNNNNNNNNtajemnice@atariNNNNNNNNNNNNNNNNNNNN"

      BYTE
      RTCLOCK=$14,
      CH=$2FC
      CARD SDLSTL=$230

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

      PROC MAIN()
      SDLSTL=DL
      WHILE CH=$FF DO
      WAIT(5)
      DL(4)==+1
      IF DL(4)=$23+$C THEN DL(4)=$C FI
      OD
      GRAPHICS(0)
      RETURN

      Action! HSCROL
      SET $E=$2000
      SET $491=$2000

      BYTE ARRAY
      DL=[$70$70$70$56$C$20$41$1$20],
      TEXT="NNNNNNNNNNNNNNNNNNNNtajemnice@atariNNNNNNNNNNNNNNNNNNNN"

      BYTE
      RTCLOCK=$14,
      CH=$2FC,
      HSCROL=$D404
      CARD SDLSTL=$230

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

      PROC MAIN()
      BYTE I=$CA

      SDLSTL=DL

      WHILE CH=$FF DO
      I=8
      WHILE I DO
      I==-1
      HSCROL=I
      WAIT(1)
      OD
      DL(4)==+1
      IF DL(4)=$23+$C THEN DL(4)=$C FI
      OD
      GRAPHICS(0)
      RETURN

      Action! VSCROL
      SET $E=$2000
      SET $491=$2000

      BYTE ARRAY
      DL=[$70$70$70$70$67$D$20$41$1$20],
      TEXT="NNtejemnice@atariNNN"

      BYTE
      RTCLOCK=$14,
      CH=$2FC,
      VSCROL=$D405
      CARD SDLSTL=$230

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

      PROC MAIN()
      BYTE I=$CA

      I=$F
      SDLSTL=DL
      WHILE CH=$FF DO
      WHILE I DO
      I==-1
      VSCROL=I
      WAIT(3)
      OD
      WAIT(50)
      WHILE I<$F DO
      I==+1
      VSCROL=I
      WAIT(2)
      OD
      OD
      GRAPHICS(0)
      RETURN
      • 41: CommentAuthorzbyti
      • CommentTime25 Apr 2020 19:04 zmieniony
       
      Action! VSCROL Full
      SET $E=$2A00
      SET $491=$2A00

      BYTE ARRAY
      DL=[$70 $70 $70 $62 $21 $2A
      $22 $22 $22 $22 $22 $22 $22 $22 $22 $22
      $22 $22 $22 $22 $22 $22 $22 $22 $22 $22
      $02 $41 0 $2A],
      TEXT="NNNNNNNNNNNNtajemniceNNatariNNNNNNNNNNNN"

      BYTE
      RTCLOCK=$14,
      CH=$2FC,
      VSCROL=$D405
      CARD SDLSTL=$230

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

      PROC MAIN()
      BYTE
      I1=$CA,
      I2=$CB
      CARD LMS=$2A04

      I1=$17
      SDLSTL=DL
      WHILE I1 DO
      I2=8
      WHILE I2 DO
      I2==-1
      VSCROL=I2
      WAIT(2)
      OD
      LMS==-$28
      I1==-1
      OD
      GRAPHICS(0)
      RETURN
      • 42:
         
        CommentAuthorKaz
      • CommentTime25 Apr 2020 20:04 zmieniony
       
      Rozpoczęliśmy dzień 8, odcinek 8:
      • 43:
         
        CommentAuthortdc
      • CommentTime25 Apr 2020 23:04 zmieniony
       
      Warsztaty z dziś, wersja 0,7 + Opis;)

      W ATR doszedł nam nowy plik:
      CWICZ4 ACT 010
      • 44:
         
        CommentAuthorPeri Noid
      • CommentTime25 Apr 2020 23:04 zmieniony
       
      W temacie dzisiejszej ostatniej dyskusji - czy ktoś obeznany technicznie mógłby skompilować i pokazać asm dla poniższych dwóch procedur?

      PROC TEST=*(BYTE A,X,Y, STRING S)
      A=X-Y
      RETURN

      i
      PROC TEST(BYTE A,X,Y, STRING S)
      A=X-Y
      RETURN

      Dziękuję.
      • 45: CommentAuthorzbyti
      • CommentTime25 Apr 2020 23:04
       
      @Peri Noid a może być:

      PROC TEST(BYTE A,X,Y, CARD S)
      A=X-Y
      RETURN

      potrzebujesz jeszcze ten STRING?
      • 46: CommentAuthorzbyti
      • CommentTime26 Apr 2020 00:04 zmieniony
       
      PROC TEST(BYTE A,X,Y, CARD S)
      A=X-Y
      RETURN

      2000: 00        BRK
      2001: 00 BRK
      2002: 00 BRK
      2003: 00 BRK
      2004: 00 BRK
      2005: 4C 08 20 JMP $2008
      2008: 20 29 9E JSR $9E29
      200B: 00 BRK
      200C: 20 04 38 JSR $3804
      200F: AD 01 20 LDA $2001
      2012: ED 02 20 SBC $2002
      2015: 8D 00 20 STA $2000
      2018: 60 RTS
      2019: 60 RTS

      PROC TEST=*(BYTE A,X,Y, CARD S)
      A=X-Y
      RETURN

      2000: 38        SEC
      2001: AD 00 20 LDA $2000
      2004: ED 00 20 SBC $2000
      2007: 8D 00 20 STA $2000
      200A: 60 RTS
      200B: 60 RTS
      200C: 20 04 38 JSR $3804
      200F: AD 01 20 LDA $2001
      2012: ED 02 20 SBC $2002
      2015: 8D 00 20 STA $2000
      2018: 60 RTS
      2019: 60 RTS

      Trzeba by to napisać jako część realnego programu by ASM miał więcej sensu.
      • 47: CommentAuthorzbyti
      • CommentTime26 Apr 2020 00:04
       
      CARD FUNC SUM(BYTE A,B CARD C)
      C==+(A+B)
      RETURN (C)

      PROC MAIN()
      CARD RES
      RES=SUM(2,4,1000)
      RETURN

      2000: 00        BRK
      2001: 00 BRK
      2002: 00 BRK
      2003: 00 BRK
      2004: 4C 07 20 JMP $2007
      2007: 20 29 9E JSR $9E29
      200A: 00 BRK
      200B: 20 03 18 JSR $1803
      200E: AD 00 20 LDA $2000
      2011: 6D 01 20 ADC $2001
      2014: 85 AE STA $AE ;LELNUM+1
      2016: 18 CLC
      2017: AD 02 20 LDA $2002
      201A: 65 AE ADC $AE ;LELNUM+1
      201C: 8D 02 20 STA $2002
      201F: AD 03 20 LDA $2003
      2022: 69 00 ADC #$00
      2024: 8D 03 20 STA $2003
      2027: AD 03 20 LDA $2003
      202A: 85 A1 STA $A1 ;TSLNUM+1
      202C: AD 02 20 LDA $2002
      202F: 85 A0 STA $A0 ;TSLNUM
      2031: 60 RTS
      2032: 00 BRK
      2033: 00 BRK
      2034: 4C 37 20 JMP $2037
      2037: A9 03 LDA #$03
      2039: 85 A3 STA $A3 ;MVLNG+1
      203B: A0 E8 LDY #$E8
      203D: A2 04 LDX #$04
      203F: A9 02 LDA #$02
      2041: 20 04 20 JSR $2004
      2044: A5 A1 LDA $A1 ;TSLNUM+1
      2046: 8D 33 20 STA $2033
      2049: A5 A0 LDA $A0 ;TSLNUM
      204B: 8D 32 20 STA $2032
      204E: 60 RTS
      204F: 60 RTS

      CARD FUNC SUM=*(BYTE A,B CARD C)
      C==+(A+B)
      RETURN (C)

      PROC MAIN()
      CARD RES
      RES=SUM(2,4,1000)
      RETURN

      2000: 18        CLC
      2001: AD 00 20 LDA $2000
      2004: 6D 00 20 ADC $2000
      2007: 85 AE STA $AE ;LELNUM+1
      2009: 18 CLC
      200A: AD 00 20 LDA $2000
      200D: 65 AE ADC $AE ;LELNUM+1
      200F: 8D 00 20 STA $2000
      2012: AD 01 20 LDA $2001
      2015: 69 00 ADC #$00
      2017: 8D 01 20 STA $2001
      201A: AD 01 20 LDA $2001
      201D: 85 A1 STA $A1 ;TSLNUM+1
      201F: AD 00 20 LDA $2000
      2022: 85 A0 STA $A0 ;TSLNUM
      2024: 60 RTS
      2025: 00 BRK
      2026: 00 BRK
      2027: 4C 2A 20 JMP $202A
      202A: A9 03 LDA #$03
      202C: 85 A3 STA $A3 ;MVLNG+1
      202E: A0 E8 LDY #$E8
      2030: A2 04 LDX #$04
      2032: A9 02 LDA #$02
      2034: 20 00 20 JSR $2000
      2037: A5 A1 LDA $A1 ;TSLNUM+1
      2039: 8D 26 20 STA $2026
      203C: A5 A0 LDA $A0 ;TSLNUM
      203E: 8D 25 20 STA $2025
      2041: 60 RTS
      2042: 60 RTS
      • 48: CommentAuthorzbyti
      • CommentTime26 Apr 2020 00:04 zmieniony
       
      Wygenerowany kod nie ma dla mnie sensu...

      SET $E=$2000
      SET $491=$2000

      CARD RES=[0]

      PROC ADD=*(BYTE A,B)
      RES=A+B
      RETURN

      PROC MAIN()
      ADD(10,20)
      PRINTCE(RES)
      RETURN

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

      2000: 00 BRK
      2001: 00 BRK
      2002: 18 CLC
      2003: AD 02 20 LDA $2002
      2006: 6D 02 20 ADC $2002
      2009: 8D 00 20 STA $2000
      200C: A9 00 LDA #$00
      200E: 8D 01 20 STA $2001
      2011: 60 RTS
      2012: 4C 15 20 JMP $2015 ;MAIN
      2015: A2 14 LDX #$14
      2017: A9 0A LDA #$0A
      2019: 20 02 20 JSR $2002
      201C: AE 01 20 LDX $2001
      201F: AD 00 20 LDA $2000
      2022: 20 1C A2 JSR $A21C
      2025: 60 RTS
      2026: 60 RTS

      • 49: CommentAuthorzbyti
      • CommentTime26 Apr 2020 01:04
       
      SET $E=$2000
      SET $491=$2000

      BYTE COLBK=$D01A

      PROC SET_COLBK=*(BYTE COLOUR)
      COLBK=COLOUR
      RETURN

      PROC MAIN()
      SET_COLBK(10)
      RETURN

      2000: AD 00 20  LDA $2000
      2003: 8D 1A D0 STA $D01A ;COLBK
      2006: 60 RTS
      2007: 4C 0A 20 JMP $200A
      200A: A9 0A LDA #$0A
      200C: 20 00 20 JSR $2000
      200F: 60 RTS
      • 50: CommentAuthorzbyti
      • CommentTime26 Apr 2020 01:04 zmieniony
       
      Wydaje się, że =* jest do pisania procedur i funkcji w ASM.

      Czyli =* zapewnia przekazanie parametrów, które już sami obsłużymy w bloku kodu.

      SET $E=$2000
      SET $491=$2000

      PROC SET_COLBK=*(BYTE COLOUR)[$8D$1A$D0$60]

      PROC MAIN()
      SET_COLBK(10)
      RETURN

      2000: 8D 1A D0  STA $D01A   ;COLBK
      2003: 60 RTS
      2004: 4C 07 20 JMP $2007
      2007: A9 0A LDA #$0A
      2009: 20 00 20 JSR $2000
      200C: 60 RTS

      SET $E=$2000
      SET $491=$2000

      PROC SET_COLBK=*(BYTE COLOUR,A,B,C)[$8D$1A$D0$60]

      PROC MAIN()
      SET_COLBK(10,1,2,3)
      RETURN

      2000: 8D 1A D0  STA $D01A   ;COLBK
      2003: 60 RTS
      2004: 4C 07 20 JMP $2007
      2007: A9 03 LDA #$03
      2009: 85 A3 STA $A3 ;MVLNG+1
      200B: A0 02 LDY #$02
      200D: A2 01 LDX #$01
      200F: A9 0A LDA #$0A
      2011: 20 00 20 JSR $2000
      2014: 60 RTS