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
     
    O! Super!;)

    Dziękujemy Kaz - teraz gra będzie wyglądać o niebo lepiej!;)
    • 2:
       
      CommentAuthorKaz
    • CommentTime22 Apr 2020
     
    Potrzebne jeszcze jakieś obiekty, ale nie wiem jakie mają rozmiary i jakie kolory.
    • 3: CommentAuthorzbyti
    • CommentTime22 Apr 2020 zmieniony
     
    N I E A K T Y W N Y
    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
     
    Zbyti - dzięki! To będzie metoda uzupełniająca.
    • 5: CommentAuthorVidol
    • CommentTime22 Apr 2020 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 zmieniony
     
    N I E A K T Y W N Y
    @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 zmieniony
     
    N I E A K T Y W N Y
    @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
     
    @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 zmieniony
     
    N I E A K T Y W N Y
    @sun dzięki! :] Tak, wciąż się bawię Action!

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

    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 zmieniony
     
    N I E A K T Y W N Y
    @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
     
    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 zmieniony
     
    N I E A K T Y W N Y
    @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 zmieniony
     
    N I E A K T Y W N Y
    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
     

    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
     
    N I E A K T Y W N Y
    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
     
    N I E A K T Y W N Y
    @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
     
    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
     
    Link do dzisiejszego spotkania z TDC-em:

    ->link<-
    • 21: CommentAuthorzbyti
    • CommentTime23 Apr 2020
     
    N I E A K T Y W N Y
    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
     
    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 zmieniony
     
    N I E A K T Y W N Y
    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
     
    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 zmieniony
     
    N I E A K T Y W N Y
    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
     
    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 zmieniony
     
    Pliki do dzisiejszego warsztatu.
    • 28:
       
      CommentAuthortdc
    • CommentTime23 Apr 2020 zmieniony
     
    Teraz się dzieje!;)))

    Po dzisiejszym warsztacie plik ATR. Warto uruchomić i zobaczyć co się dzieje!;))
    • 29: CommentAuthorzbyti
    • CommentTime24 Apr 2020 zmieniony
     
    N I E A K T Y W N Y
    • 30: CommentAuthorzbyti
    • CommentTime24 Apr 2020 zmieniony
     
    N I E A K T Y W N Y
    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 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 zmieniony
     
    N I E A K T Y W N Y
    @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 zmieniony
     
    Łukasz miał wczoraj pomysł na efekt:

    • 35: CommentAuthorzbyti
    • CommentTime24 Apr 2020 zmieniony
     
    N I E A K T Y W N Y
    @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
     
    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 zmieniony
     
    N I E A K T Y W N Y
    @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
     
    Rozpoczęliśmy.
    • 39:
       
      CommentAuthortdc
    • CommentTime24 Apr 2020 zmieniony
     
    Dzisiejsza nasza praca, upiększanie grafiki tła (warianty, losowość) oraz zabawy w animowanie duszków:
    • 40: CommentAuthorzbyti
    • CommentTime24 Apr 2020 zmieniony
     
    N I E A K T Y W N Y
    @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 zmieniony
     
    N I E A K T Y W N Y
    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 zmieniony
     
    Rozpoczęliśmy dzień 8, odcinek 8:
    • 43:
       
      CommentAuthortdc
    • CommentTime25 Apr 2020 zmieniony
     
    Warsztaty z dziś, wersja 0,7 + Opis;)

    W ATR doszedł nam nowy plik:
    CWICZ4 ACT 010
    • 44: CommentAuthorPeri Noid
    • CommentTime25 Apr 2020 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
     
    N I E A K T Y W N Y
    @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 zmieniony
     
    N I E A K T Y W N Y
    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
     
    N I E A K T Y W N Y
    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 zmieniony
     
    N I E A K T Y W N Y
    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
     
    N I E A K T Y W N Y
    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 zmieniony
     
    N I E A K T Y W N Y
    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