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
    • CommentTime17 Apr 2020 zmieniony
     
    • 2: CommentAuthorantrykot
    • CommentTime17 Apr 2020
     
    Altirra 2.40? - nie używaj tego starocia, ma poważne bugi.
    • 3: CommentAuthorzbyti
    • CommentTime17 Apr 2020 zmieniony
     
    @antrykot taka rekomendacja prowadzącego ;) Ja jadę na Atari800.
    • 4:
       
      CommentAuthorKaz
    • CommentTime17 Apr 2020
     
    o, już 40 osób.
    • 5:
       
      CommentAuthortdc
    • CommentTime17 Apr 2020
     
    Kody błędów
    Kompilator Action! sygnalizuje błędy składniowe wykryte podczas kompilacji przez wskazanie miejsca wystąpienia i podanie liczbowego kodu błędu. U czasie wykonywania programu mogą pojawić się błędy spowodowane użyciem niewłaściwych wartości lub wykonaniem instrukcji, które są w aktualnej chwili niepoprawne. Błędy te, zwane błędami wykonania, są sygnalizowane dopiero podczas działania programu.
    Poniżej przedstawione są meldunki błędów sygnalizowanych przez kompilator oraz ich krótki opis.
    0 — Out of system memory
    Zbyt mały obszar dostępnej pamięci. Jeśli błąd wystąpił podczas kompilacji, to konieczne jest kompilowanie programu z dyskietki lub kasety.
    1 — Missing "
    Brak cudzysłowu (") w ciągu tekstowym.
    2 - Nested DEFINE
    Zagnieżdżona dyrektywa DEFINE. Dyrektywy DEFINE nie mogą występować w innych dyrektywach DEFINE.
    3 - Global variable symbol table full
    Brak miejsca w tablicy symboli zmiennych globalnych.
    4 - Local variable symbol table full
    Brak miejsca w tablicy symboli zmiennych lokalnych.
    5 - SET directive syntax error
    Błąd składniowy w dyrektywie SET.
    6 — Declaration error
    Nieprawidłowy format deklaracji zmiennej, procedury lub funkcji.
    7 — Invalid argument list
    Zbyt dużo parametrów zostało umieszczone w instrukcji albo wywołaniu procedury lub funkcji.
    8 — Variable not declared
    Kompilator napotkał identyfikator, który nie został uprzednia zadeklarowany.
    9 - Not a constant
    Użyta zmiennej w miejscu, w którym wymagane jest zastosowanie stałej.
    10 - Illegal assignment
    Niedozwolona forma instrukcji przypisania, na przykład przypisanie zmiennej wartości logicznej <x=5<7).
    str. 163
    11 — Unknown error
    Wystąpił błąd, lecz system Action! nie może rozpoznać jego rodzaju.
    12 - Missing THEN
    Brak słowa THEN po warunku w instrukcji IF.
    13 - Missing FI
    Brak słowa FI kończącego instrukcję IF.
    14 - Out of code space
    Zbyt mały obszar pamięci dla programu wynikowego. Konieczna jest kompilacja z dyskietki lub kasety.
    15 - Missing DO
    Brak instrukcji DO rozpoczynającej pętlę instrukcji FOR, WHILE lub UNTIL.
    16 — Missing TO
    Brak słowa TO w instrukcji FOR.
    17 - Bad expression
    Nieprawidłowy format wyrażenia arytmetycznego lub warunkowego.
    18 - Unmatched parentheses
    Niezamknięty nawias, czyli brak nawiasu z lewej lub prawej strony.
    19 - Missing OD
    Brak słowa OD kończącego pętlę DO/OD.
    20 - Can't allocate memory
    System Action! nie może przemieścić większego obszaru swojej pamięci operacyjnej.
    21 — Illegal array reference
    Forma odwołania do tablicy lub jej elementu jest nieprawidłowa.
    22 — Input file too large
    Plik źródłowy do kompilacji jest zbyt duży i musi być podzielony na mniejsze części.
    23 — Illegal conditional expression
    Niedozwolony format wyrażenia warunkowego lub wyrażenie to zostało użyte w niedozwolonym miejscu.
    24- Illegal FOR syntax
    Nieprawidłowa składnia instrukcji FOR.
    25- Illegal EXIT
    Instrukcja EXIT została użyta w niewłaściwym miejscu lub w niedozwolony sposób.
    str. 164
    26 - Nesting too deep
    Nastąpiło zbyt głębokie zagnieżdżenie programu (dozwolone jest maksymalnie 16 poziomów).
    27 - Illegal TYPE syntax
    Niedozwolona składnia definicji rekordu TYPE.
    28 - Illegal RETURN
    Instrukcja RETURN została użyta w niewłaściwym miejscu lub w niedozwolony sposób.
    61 - Out of symbol table space
    Brak miejsca w tablicy symboli kompilatora.

    128 - BREAK key was used to stop program execution.
    • 6:
       
      CommentAuthortdc
    • CommentTime17 Apr 2020
     
    Editor Commands Summary
    Note: <C/S>--denotes pressing CONTROL & SHIFT at the same time.
    I/O COMMANDS:
    1. Read a file -- position the cursor, <C/S>R, enter filespec.
    Control+Shift+
    2. Disk Directory -- <C/S>R, ?n:*.* (n=device number).
    Control+Shift+
    3. Write a file -- <C/S>W, enter filespec
    Control+Shift+
    4. List to printer -- <C/S>W, enter P:
    Control+Shift+
    5. Start of Line -- <C/S> <
    Control+Shift+
    6. End of Line -- <C/S> >
    Control+Shift+
    7. Next Line -- <Return>

    8. Tab--><Tab>


    Cursor Movement Within Window
    1. Up, Down, Left, Right--><Cntrl><appropriate arrow>. Note: Up and Down arrows are dynamic in window 2 when Directory is present.
    2. Tab Handling:
    a. Set tab -- <Shift><Set tab>
    b. Clear tab -- <Ctrl><Clear tab>.

    3. Window movement:
    a. Start of file -- <C/S> H
    b. Up one screen -- <C/S> <up arrow>.
    c. Down one screen -- <C/S> ]
    d. Left one character -- <C/S> [

    Control+Shift+

    4. Text entry:
    a. Enter program -- enter text
    b. Next Line -- <Return>
    c. Control characters -- precede each character with <Esc>

    5. Delete Text:
    a. Back 1 character -- <Back S>
    b. Cursor -- <Cntrl><Delete>
    c. Delete line -- position cursor on line, <Shift><Delete>

    6. Insert/Replace text:
    a. Toggle modes -- <C/S> I
    Control+Shift+
    b. Insert line -- <Shift><Insert>

    7. Restore Altered Line:
    a. Restore line -- don't move cursor, <C/S> U
    Control+Shift+
    b. Recall line -- don't move cursor, <C/S> P
    Control+Shift+

    8. Text blocks:
    a. Load Block -- position cursor, <Shift><Delete> until done
    Shift+
    b. Paste block -- position cursor, <C/S> P
    Control+Shift+

    9. Searches/Substitutions:
    a. Find String -- <C/S> F, enter string
    Control+Shift+
    b. Substitute -- <C/S> S, enter new string
    Control+Shift+

    10. Breaking & Combining Lines:
    a. Break line -- position cursor, <C/S><RETURN>
    Control+Shift+
    b. Combine line -- put cursor at front of second line, <C/S><BACK S>
    Control+Shift+

    a. Leave editor -- <C/S> m
    • 7:
       
      CommentAuthortdc
    • CommentTime17 Apr 2020
     
    Przej. do Monitora
    Control+Shift+M

    Komendy monitora Action!

    B
    restart języka Action!

    C ("<file spec>")

    kompilacja programu w edytorze lub z pliku

    D
    wywołanie DOSa

    E
    powrót do Edytora

    O
    Opcje monitora

    P
    kontynuacja przerwanego programu (o ile to możliwe)

    R ("<file spec>")
    Uruchomienie programu po kopilacji do pamięci lub uruchomienie z pliku (jak w BASIC Run)

    SET <address>=<value>
    wstawienie wartosci do adresu pamięci RAM

    W ("<file spec>")
    Zapisanie programu po kompilacji do pliku

    X <statement>:,<statement>:
    Wywołanie komend Action! (biblioteki itp.)

    ? <address>
    Wyświetlenie wartości w zadanym adresie lub stałych kompilatora.

    * <address>
    Wyświetlenie wartości RAM jako lista kolejnych adresów.
    • 8: CommentAuthorzbyti
    • CommentTime17 Apr 2020 zmieniony
     

    TDC:

    Edytor:
    Shift+Control+Góra - przesunięcie się o jeden ekran w górę (zależy od aktualnych ustawień wielkości okienka edycyjnego)
    Shift+Control+Dół - przesunięcie się o jeden ekran w dół (--"--)
    Shift+Control+, - przesuwanie podglądu edycji w lewo (nie działa pod emulatorem Altirra w wersji np. 2.20)
    Shift+Control+. - przesunięcie podglądu edycji w prawo (--"--)
    Shift+Control+E - przeskoczenie do końca tekstu
    Shift+Control+Return - wstawienie pustej linii lub podział linii na dwie (w miejscu kursora)
    Shift+Control+Backspace - połączenie bieżącej linii z linią znajdującą się wyżej (o ile kursor znajduje się na początku linii)
    Shift+Control+T - ustawianie znaczników
    Shift+Control+U - Undo - działa nieco inaczej niż dziś się do tego przyzwyczailiśmy. Działa tylko odnośnie aktualnej linii do czasu aż jej nie opuścimy (czyli przywraca zmianę tej jednej linii od czasu, gdy przesunięty został na nią kursor)
    Shift+Delete - kasowanie kolejnych linii oraz wstawianie ich do "schowka" (odpowiednik Control+X itp.)
    Shift+Control+P - wstawianie tekstu ze "schowka" do aktualnego okienka edycyjnego (odpowiednik Control+V itp.)
    Shift+Control+I - przełączanie się pomiędzy dwoma trybami edycji INSERT i REPLACE. Pierwszy jest naturalny dla użytkowników edytorów dla małego Atari, drugi będzie bardziej intuicyjny dla osób przyzwyczajonych do współczesnych edytorów dla dużych komputerów Atari, Apple lub pecetów.

    Shift+Control+R - wczytanie pliku tekstowego (również ponowne, czyli dołączenie pliku do tekstu)
    Shift+Control+W - zapis pliku tekstowego z aktywnego okna edycyjnego (źródło programu)
    Shift+Control+1 lub 2 - przejście między oknami edycji
    Shift+Control+D - zamknięcie aktywnego okienka (bez zapisu zawartości)
    Clear - kasowanie zawartości aktywnego okienka bez zamykania samego okienka
    Shift+Control+M - przejście do monitora Action!
    Shift+Control+F - szukanie ciągu znaków w tekście programu (lub innego edytowanego pliku tekstowego)
    Shift+Control+S - zamiana ciągów znaków

    Ciągi tekstowe wpisywane w operacjach takich jak np. R, W, F, S itp. są zapamiętywane i proponowane po ponownym użyciu. Możemy je wykorzystać, skasować lub edytować naciskając Backspace.

    W edytorze działa też wiele typowych dla Atari kombinacji klawiszy, jednak mogą one działać nieco inaczej, gdyż edytor Action! został przemyślany nieco inaczej niż systemowy edytor (czyli został zaprojektowany bardziej elastycznie, udostępniając wiele nowych możliwości).
    • 9: CommentAuthorzbyti
    • CommentTime17 Apr 2020 zmieniony
     


    Reszta w książce Jezyki Atari XL XE cz.2 dostępnej w biblioteczce Atarowca (rozdział 3, str. 119).
    • 10:
       
      CommentAuthortdc
    • CommentTime17 Apr 2020
     
    Dziękuję Wam bardzo!;)

    Nagadałem się i zmęczyłem ;)

    Jutro zaczynamy programować grę!;)
    Zaczniemy od zaprojektowania podstawowych elementów gry - strzelanki ;)
    • 11: CommentAuthorzbyti
    • CommentTime17 Apr 2020 zmieniony
     
    Co do gry i grafiki to można posiłkować się przykładem wykonanym przez @tebe w Mad Pascalu, źródło: invaders.pas ->link<-

    • 12:
       
      CommentAuthorsun
    • CommentTime17 Apr 2020
     
    czy action zostało napisane w action, czy widelcem w trybie direct? :)
    • 13: CommentAuthorzbyti
    • CommentTime18 Apr 2020
     
    A to ten Grzesiek! :]
    • 14: CommentAuthorzbyti
    • CommentTime18 Apr 2020 zmieniony
     
    Jako, że przez pierwsze dwie godziny nie było nic dla mnie a jak się zaczęło to już byłem rozkojarzony i czytałem czat, przez co parę razy byłem "nie w temacie", więc musiałem sobie coś sprawdzić.

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

    Sprawdziłem Quick, CLSN Pascal i Action!.

    Faktyczne, chyba w tamtych czasach nikt się nie kłopotał sprawdzaniem czy nie przekroczono zakresu przy kompilacji.

    Oto wyniki (Quick też nic nie widział złego w kodzie):






    Za to nowoczesne narzędzie:

    program Test;

    uses crt;
    var i: byte;

    begin
    for i :=0 to 265 do writeln(i);
    repeat until keypressed;
    end.

    Mad Pascal Compiler version 1.6.4 [2020/03/01] for 6502
    Compiling hello.pas
    hello.pas (8,20) Error: Range check error while evaluating constants (265 must be between 0 and 255)


    ------------------
    (program exited with code: 1)
    Press return to continue

    Oczywiście Mad Pascal przy warunku 255 kompilował się i pracował prawidłowo a Action! jak pamiętamy wpadał w wieczną pętlę.
    • 15:
       
      CommentAuthortdc
    • CommentTime18 Apr 2020
     
    Zacnie;)
    • 16: CommentAuthorastrofor
    • CommentTime18 Apr 2020
     
    No tak, ale to porównanie jest nieco nieuczciwe , Action to kompilator w atari, mad pascal to nowoczesne sprzęty, więc chyba nieporównywalne, jakby kompilator mad pascala wypluwał ten error w atari, no można by się chwalić
    • 17: CommentAuthorzbyti
    • CommentTime18 Apr 2020 zmieniony
     
    @astrofor to nie jest porównanie tylko informacja ;P
    • 18:
       
      CommentAuthortdc
    • CommentTime18 Apr 2020
     
    Tak oczywiście, to zasadnicza różnica.

    Ale jak rozumiem Zbyti chciał się jedynie upewnić.
    • 19: CommentAuthorzbyti
    • CommentTime18 Apr 2020 zmieniony
     
    Jako osoba po raz pierwszy programująca w językach wysokiego poziomu na komputerach 8-bit nie mam świadomości ich (kompilatorów) ograniczeń, zwłaszcza w wydaniu natywnym.

    Na czacie też ktoś (Jaro) miał dysonans poznawczy, że procedurę kończy (przerywa? za Zientarą) się słowem kluczowym RETURN. Tak miał wbite w głowę, że RETURN coś zwraca, że nie mógł nad tym przejść do porządku dziennego ;)

    Dla mnie informacja, że kompilator tego nie sprawdza było odkryciem. Dopiero jak sobie uprzytomnię, że to jest puszczone na 8-bit to przestaje mnie to dziwić, ale pierwszy odruch bazuje na przyzwyczajeniu do "dużych" kompilatorów i ich możliwości.
    • 20: CommentAuthorastrofor
    • CommentTime18 Apr 2020
     
    Ja bym poszedł dalej. Obecnie w programowaniu Kompilator jest po to żeby wyłapywać wszystkie błędy, i zapewniać standardy, a nie być hiper liberalny, aby zapewnić happy coding. Pozatym kod jest po to żeby był czytelny dla użytkownika , nie dla komputera. Rozwlekłość nie jest błędem , wręcz przeciwnie. W niektórych dziedzinach (nie game dev) optymalizacji w ogóle się nie robi w czasie pisania, tylko jak coś ewidentnie źle działa na benchmarkach to się optymalizuje. Generalnie pętle , dodatkowe zmienne można olać, chyba że ta pętla jest w jakimś cyklicznym listenerze itd. Instrukcja goto to pure evil, nasi poprzednicy pod koniec lat 90 tych toczyli boje i pisali książki żeby się tego cholerstwa pozbyć.
    Pomysł żeby każdy ide miał własne skróty klawiszowe to też koszmar, no obecnie toleruję się vi i emacsa, jako narzędzie guru, reszta to ctr+c , ctr+v , narzędzia głupków - ja nie sądze. Ja sam mam gęsią skórkę jak myśle o
    edytorze tekstu tag. Jednym słowem, to o czym dziś była mowa to w rozumieniu współczesnym wysyp antypatternów. Ale traktując to jako powrót do retro to w sumie świetna rozrywka i jak ktoś patrzy z dobrej perspektywy to lekcja też.
    • 21:
       
      CommentAuthorKaz
    • CommentTime18 Apr 2020
     
    Link do dzisiejszego, sobotniego warsztatu, który zacznie się o 20:00:

    ->link<-
    • 22:
       
      CommentAuthorKaz
    • CommentTime18 Apr 2020 zmieniony
     
    Myślę, że może się przydać niektórym opis i podsumowanie Action!, jakie poczynił w 1984 roku Brian Moriarty. W artykule jest bardzo przystępnie objaśniony cały język, wskazane zalety i wady. Są też banchmarki, co pewnie zainteresuje Zbytiego (jest i Sieve, ale autor podał też powody dla których nie lubi takich testów, więc zmodyfikował o wypełnianie ekranu).
    • 23: CommentAuthorzbyti
    • CommentTime18 Apr 2020 zmieniony
     
    @Kaz, dzięki. Czytałem ten art., właśnie z tego artykułu wziąłem słabą implementację SIEVE w Atari Basic, można napisać to sporo lepiej.

    Jak ktoś nie chce walczyć ze skanami to jest wersja elektroniczna tego artykułu tutaj ->link<-

    A tutaj wszystkie materiały w ANALOG-u (i innych magazynach) o Action! ->link<-
    • 24: CommentAuthorzbyti
    • CommentTime18 Apr 2020 zmieniony
     
    @tdc polecał (między innymi) De Re Atari. Jak ktoś nie ma czasu na przeczytanie całej książki to proponuję pobrać ściągawkę ;)

    De Re Atari Programmers Card ->link<-

    Oczywiście warto rzucić okiem na wszystkie książki ->link<-
    • 25:
       
      CommentAuthorsun
    • CommentTime18 Apr 2020
     
    @zbyti: tak to ja :)
    Swego czasu, gdzieś zaraz po tym, jak wyginęły dinozaury, powstał język C. O ile pamiętam, a nie programuję w C, miał on tę przypadłość, zwaną zaletą i wychwalaną ponad wszystko, że lał na sprawdzanie takich rzeczy, jak wczoraj zobaczyliśmy w Action. Dawało to, jak to tłumaczono, pełną kontrolę programisty nad kodem, kompilator się tu nie wtryniał, co napisałeś, skompilował a potem były kwiatki.
    ... i chyba niedługo po tym... tak mi się zdaje, powstały debadżery ;)
    • 26: CommentAuthorJaro
    • CommentTime18 Apr 2020
     
    @zbyti
    Okazuje się że, słowo RETURN ma inne znaczenie niż w językach, którymi posługuję się na co dzień. Tam RETURN coś zwraca i dlatego stosuje się go w funkcjach. Procedury nic nie zwracają i dlatego nie potrzebują RETURNa.
    W Action! te polecenie kończy procedurę, coś jak END w Pascalu.
    W innych językach stosuje się nawiasy lub wcięcia.
    No cóż, trzeba się przyzwyczaić :)
    • 27: CommentAuthorzbyti
    • CommentTime18 Apr 2020 zmieniony
     
    @Jaro aż tak się odzwyczajać nie musisz :]

    BYTE FUNC TEST()
    RETURN (1)

    PROC MAIN()
    BYTE X=[0]
    X=TEST()
    PRINTBE(X)
    RETURN

    Pomyśl o procedurze jak o funkcji zwracającej void ;)
    • 28: CommentAuthorJaro
    • CommentTime18 Apr 2020
     
    co za niekonsekwentny język, gorzej niż PHP :)
    • 29:
       
      CommentAuthortdc
    • CommentTime18 Apr 2020
     
    Widzę, że zbyti już całkiem sprawnie programuje w Action!;)
    • 30:
       
      CommentAuthortdc
    • CommentTime18 Apr 2020 zmieniony
     

    zbyti:

    Jako osoba po raz pierwszy programująca w językach wysokiego poziomu na komputerach 8-bit nie mam świadomości ich (kompilatorów) ograniczeń, zwłaszcza w wydaniu natywnym.

    Na czacie też ktoś (Jaro) miał dysonans poznawczy, że procedurę kończy (przerywa? za Zientarą) się słowem kluczowym RETURN. Tak miał wbite w głowę, że RETURN coś zwraca, że nie mógł nad tym przejść do porządku dziennego ;)


    Dla mnie informacja, że kompilator tego nie sprawdza było odkryciem(...)

    Tak naprawdę to brak Retrun nie jest jakimś ograniczeniem czy problemem. Dlatego że RETURN nie ma żadnego obowiązku znajdować sie na końcu procedury (przecież może znajdować się w jednym lub kilku IF-THEN gdzieś wcześniej)

    astrofor:

    Obecnie w programowaniu Kompilator jest po to żeby wyłapywać wszystkie błędy, i zapewniać standardy, a nie być hiper liberalny

    O! I to jest kluczowe słowo LIBERALNY;)
    Fajnie że ono padło.

    Zbyti ma pierwszy argument przemawiający za tym dlaczego tak trudno jest obecnie zaimplementować Action! na pecetach i innych współczesnych komputerach. Dzisiejsze języki nie są liberalne, a Action! i trochę Turbo Basic XL już tak;)

    I to jest oczywiście ogromna zaleta Action!
    Kocham ten język za to, że jest liberalny;)

    astrofor:

    aby zapewnić happy coding

    Ponownie bardzo mi się podoba Twoje zdanie!;)

    Ale właśnie dlatego tak fajnie się programuje na Atari. Atari to jest happy coding, czy to w Atari BASIC czy T. BASIC XL czy w szczególności w Action!

    Dlatego taki warsztat to super sprawa - cieszmy się z programowania na Atari!;)

    ...bo na pececie można o tym pomarzyć...

    astrofor:

    Instrukcja goto to pure evil, nasi poprzednicy pod koniec lat 90 tych toczyli boje i pisali książki żeby się tego cholerstwa pozbyć.

    W Action! GOTO nie ma, ale już w Pascalu jest;)

    astrofor:

    Jednym słowem, to o czym dziś była mowa to w rozumieniu współczesnym wysyp antypatternów

    Ale tak się programowało w latach 80;) Dlatego szykuj się na jeszcze wiele podobnych rzeczy!;)

    astrofor:

    Ale traktując to jako powrót do retro to w sumie świetna rozrywka i jak ktoś patrzy z dobrej perspektywy to lekcja też.

    Jednak dla mnie to wszystko jest bardzo pozytywne, możesz to nazywać "retro";) Mam nadzieję że się będziesz dobrze bawił!;)

    @Kaz - dzięki!;)
    @Zbyti - też dzieki za materiały!;)


    Macie jeszcze sporo czasu, aby do 20:00 trochę potrenować Action!;)
    • 31: CommentAuthorzbyti
    • CommentTime18 Apr 2020 zmieniony
     
    @all proszę o pomoc.

    Zainteresowałem się algorytmami do generowania labiryntów ->link<-

    Chciałem sobie w ramach warsztatów Action! zrobić taki labirynt i móc go przechodzić jakąś postacią wielkości jednego znaku.

    W głównej pętli "DO OD" sprawdzam czy było zdarzenie SKSTAT i odczytuję KBCODE jednak oczywistym jest, że ta pętla wykonuje się zbyt szybko by to zapewniło mi wygodne sterowanie.

    Nie chcę robić pętli spowalniających czy tym podobny niekoszernych wynalazków którymi się teraz posługuję.

    Obecnie wywołuję poniższą procedurę i jest gut, ale chciałbym to zrobić prawidłowo.
    PROC WAIT()
    BYTE I,FRAME
    FOR I=0 TO 3
    DO
    FRAME=RTCLOCK
    WHILE FRAME=RTCLOCK DO OD
    OD
    RETURN

    Jak w Action! robić to na przerwaniach? Ktoś dysponuje kawałkiem kodu lub dobrą podpowiedzią/linkiem?

    Samodzielnie znalazłem tylko to ->link<-

    Z tego co widzę trochę to dziwne, że język "do gier" a nie ma takich mechanizmów, tylko ML trzeba naparzać. Quick starał się mieć takie rzeczy w pakiecie.
    • 32:
       
      CommentAuthorKaz
    • CommentTime18 Apr 2020
     
    W tej chwili 25 osób, zaczęło się:
    • 33: CommentAuthorbrzezinski
    • CommentTime18 Apr 2020
     
    chętnie bym dołączył ale linka do zooma brak
    • 34: CommentAuthorfalcon030
    • CommentTime18 Apr 2020 zmieniony
     
    Link jest pod Artykułem na głównej.

    Codziennie jest nowy link.
    • 35:
       
      CommentAuthorKaz
    • CommentTime18 Apr 2020
     
    Link na stronie głównej w nowince, do tego w komentarzach pod nowinką oraz tutaj na forum wyżej. Tak samo będzie jutro, pojutrze i w kolejnych dniach - że osobny, nowy link.

    A tymczasem 35 osób.
    • 36: CommentAuthorzbyti
    • CommentTime18 Apr 2020 zmieniony
     
    @tdc

    Tak sobie zacząłem, bo chcę generować labirynt i się po nim poruszać. Na razie poruszam się po ekranie swoim "avatarem" ;)



    Możesz skomentować czy idę w dobrym kierunku?

    Mógłbyś opisać jak odczytywać klawiaturę na przerwaniu, abym mógł zrezygnować z WAIT()? Bez tego za szybko odczytuje wartość.

    ;MAZE
    ;------------------------------------

    DEFINE
    ESC="28",
    AVATAR="32",
    LEFT="PLAYERPOS^=0 PLAYERPOS==-1 PLAYERPOS^=AVATAR",
    RIGHT="PLAYERPOS^=0 PLAYERPOS==+1 PLAYERPOS^=AVATAR",
    UP="PLAYERPOS^=0 PLAYERPOS==-40 PLAYERPOS^=AVATAR",
    DOWN="PLAYERPOS^=0 PLAYERPOS==+40 PLAYERPOS^=AVATAR"

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

    CARD
    SAVMSC=$58

    BYTE
    RTCLOCK=$14,KBCODE=$D209,
    SKSTAT=$D20F,STICK0=$0278,
    RND=$D20A

    BYTE POINTER PLAYERPOS
    BYTE ARRAY SCREEN

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

    PROC BOX()
    BYTE X,Y
    SCREEN=SAVMSC
    FOR Y=0 TO 23
    DO
    FOR X=0 TO 23 DO SCREEN(X)=128 OD
    SCREEN==+40
    OD
    RETURN

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

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

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

    PROC MOVE()
    IF KBCODE=134 THEN LEFT RETURN FI
    IF KBCODE=135 THEN RIGHT RETURN FI
    IF KBCODE=142 THEN UP RETURN FI
    IF KBCODE=143 THEN DOWN RETURN FI
    RETURN

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

    PROC MAIN()
    GRAPHICS(0)

    BOX()
    PLAYERPOS=SAVMSC+41
    PLAYERPOS^=AVATAR

    DO
    IF (SKSTAT & 4)=0 THEN
    IF KBCODE=ESC THEN EXIT FI
    MOVE() WAIT(8)
    FI
    OD

    RETURN
    • 37:
       
      CommentAuthortdc
    • CommentTime18 Apr 2020
     
    Podsyłam ATR z naszymi dzisiejszymi osiągnięciami ;)))
    • 38:
       
      CommentAuthorshanti77
    • CommentTime18 Apr 2020 zmieniony
     
    @zbyti Ja bym tylko usunął w procedurze wait() pętlę for
    FRAME=RTCLOCK+3
    WHILE FRAME<>RTCLOCK DO OD


    Ta trójka mogłaby być również parametrem procedury i można by wtedy czekać określoną liczbę ramek WAIT(3). Ale na Action za bardzo się nie znam.
    • 39: CommentAuthorzbyti
    • CommentTime18 Apr 2020 zmieniony
     
    @shanti77 masz rację, zaraz zmienię.

    EDIT: zmieniłem. Dzięki! :]

    PROC WAIT(BYTE FRAMES)
    FRAMES==+RTCLOCK
    WHILE FRAMES<>RTCLOCK DO OD
    RETURN
    • 40:
       
      CommentAuthortdc
    • CommentTime19 Apr 2020
     
    I też takie coś zrobiliśmy;)
    Bez asemblera;)
    • 41:
       
      CommentAuthorshanti77
    • CommentTime19 Apr 2020
     
    @tdc to są tylko tanie sztuczki, wykorzystujące sposób kompilacji kodu.
    • 42:
       
      CommentAuthorKaz
    • CommentTime19 Apr 2020 zmieniony
     
    Link do dzisiejszej lekcji nr 3, niedzielnej, rozpoczynającej się o godzinie 20:00:

    ->link<-
    • 43: CommentAuthorzbyti
    • CommentTime19 Apr 2020 zmieniony
     
    Krótka ściągawka by Peter Dell:
    ;
    ; $00-$7f zeropage for OS
    ; $80-$ff zeropage for you

    ; $100-$1ff CPU stack

    ; $200-$2ff OS vector, registers
    ; $300-$3ff OS vector, registers

    ; $400-$5ff OS buffers

    ; $600-$6ff Page 6, object code in BASIC

    ; $700-$1fff Disk Operating System

    ; $2000-RAMTOP Your code

    ; $8000-$9fff Cartrige 8k/low 16k
    ; $a000-$bfff Cartrige 8k/High 16k/BASIC

    ; $c000-$cfff OS part 1
    ; $cc00-$cfff OS character set, international

    ; $e000-$ffff OS part 2
    ; $e000-$e3ff OS character set, standard

    To jest z jego kursu MADS. Według słów @tdc Action! zabiera nam trochę ze strony zerowej tutaj opisanej jako wolna.
    • 44: CommentAuthorzbyti
    • CommentTime19 Apr 2020 zmieniony
     
    Załączam RUNTIME.ACT na którym działa przykład jaki powyżej napisałem, czyli także GRAPHICS(0).

    Spowolniłem pętle z 3 do 8. Poruszamy się klawiszami kursora.





    INFO: na serwerze był już plik RUNTIME.ACT wiec w załączniku zmieniła się nazwa na RUNTIME2.ACT po pobraniu należy ją zmienić na taką jaką się includuje.

    @tdc ponawiam pytanie o te "proste baz ASM" przerwania w Action! o których wczoraj mówiłeś bym mógł tak obsłużyć MOVE().
    • 45: CommentAuthorzbyti
    • CommentTime19 Apr 2020 zmieniony
     
    Zrobiłem refaktoryzację i podstawowy ops kodu TDC z wczoraj.

    Zmienne które były mapowane na wektory systemowe itd. nazwałem zgodnie z atari memory map ->link<-

    Podczas posługiwania się tablicą AMEMORY wskazałem o jaką wartość z mapy chodzi z linkowanej strony.

    Zmienne z mieszanego pol/ang ujednoliciłem na ang. tam gdzie zrozumiałem ich znaczenie.

    Prośba do prowadzącego aby pozostawiał po sobie podobnie, lub lepiej opisany kod, wtedy łatwiej do niego wrócić.

    MODULE
    ; ATARI VIRUS INVADERS
    ; WARSZTAT ATARIONLINE 2020
    ; BY TDC

    ;----main variables-------------------

    BYTE
    GOVER,LIVES,LEVEL

    CARD
    QQ,Z,TI,SCREEN=[$9B50]

    CARD ARRAY FY(36),DD(7)

    ;----helper variables----------------

    BYTE
    A,B,X,Y,
    Q,Q1,Q2,Q3,Q4,Q5

    ;----map variables--------------------

    BYTE
    CH=$2FC,RANDOM=$D20A,
    STICK0=$278,STRIG0=$284,
    VCOUNT=$D40B,WSYNC=$D40A,
    COLPF2=$D018,COLBK=$D01A

    CARD SDLSTL=$230

    BYTE ARRAY AMEMORY=0;

    ;COLOR2 --> $2C6
    ;POKE($2C6,10) AMEMORY($2C6)=10

    ;----main code------------------------

    PROC START()
    LIVES=3
    X=125
    RETURN

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

    PROC VIRUS()
    AMEMORY(708)=0 ;COLOR0
    AMEMORY(709)=8 ;COLOR1
    AMEMORY(710)=$94 ;COLOR2
    AMEMORY(711)=$1F ;COLOR3
    AMEMORY(712)=0 ;COLOR4

    ; ZERO(SCREEN,1120)

    START()

    WHILE CH<>28
    DO
    AMEMORY(77)=0 ;ATRACT
    OD
    RETURN

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

    PROC INI()
    ;AMEMORY(559)=0 ;DMCTL
    FOR Q=0 TO 32 DO FY(Q)=Q*40 OD

    ;WG("D:DL_A.DAT",$8033,$CE,4)

    WHILE CH<>28
    DO
    VIRUS()
    OD

    CH=42
    GRAPHICS(0)
    RETURN
    • 46:
       
      CommentAuthorKaz
    • CommentTime19 Apr 2020
     
    Nie wiem czy już był ten link, ale początki programowania w Action! kolega TDC zapodawał też tutaj: ->link<- . Jakby ktoś na pierwszej czy drugiej lekcji nie był to z tym da radę nadrobić.
    • 47: CommentAuthorzbyti
    • CommentTime19 Apr 2020 zmieniony
     
    @Kaz widzisz, pogoniłeś nas wczoraj i ja bezowocnie teraz oczekuję na odpowiedź na forum od @tdc ;)

    Chyba wdrożę protokół "obywatelu zrób sobie dobrze sam" ;P
    • 48:
       
      CommentAuthorKaz
    • CommentTime19 Apr 2020 zmieniony
     
    Były ponad 3 godziny na zadawanie pytań, będą i dzisiaj i jutro i jeszcze przez 2 tygodnie. Od poczekania paru godzin na warsztaty w programowaniu jeszcze nikt nie umarł :)
    • 49: CommentAuthorzbyti
    • CommentTime19 Apr 2020
     
    No przecież zadałem pytanie czy mi odpowie na forum i zrobi code review ;)

    Jak chcesz to wdam się dziś w dyskusję na warsztatach jak się robi takie przerwania - zapewne się ucieszysz i mnie zmutujesz :D
    • 50:
       
      CommentAuthorKaz
    • CommentTime19 Apr 2020
     
    A, czyli Tobie chodzi o ocenę własnego projektu w Action!, który nie wykonujesz razem z TDC-em w ramach warsztatów :) To co innego, to oczywiście że miejsce na to nie jest na warsztatach, tylko na forum. Ale jak w takim razie powiązałeś fakt, że apelowałem o skończenie warsztatu po 3 godzinach z faktem braku odpowiedzi na forum?