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 20:04 zmieniony
       
      • 2: CommentAuthorantrykot
      • CommentTime17 Apr 2020 20:04
       
      Altirra 2.40? - nie używaj tego starocia, ma poważne bugi.
      • 3: CommentAuthorzbyti
      • CommentTime17 Apr 2020 21:04 zmieniony
       
      @antrykot taka rekomendacja prowadzącego ;) Ja jadę na Atari800.
      • 4:
         
        CommentAuthorKaz
      • CommentTime17 Apr 2020 21:04
       
      o, już 40 osób.
      • 5:
         
        CommentAuthortdc
      • CommentTime17 Apr 2020 21:04
       
      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 21:04
       
      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 21:04
       
      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 21:04 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 23:04 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 23:04
       
      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 23:04 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 23:04
       
      czy action zostało napisane w action, czy widelcem w trybie direct? :)
      • 13: CommentAuthorzbyti
      • CommentTime18 Apr 2020 00:04
       
      A to ten Grzesiek! :]
      • 14: CommentAuthorzbyti
      • CommentTime18 Apr 2020 00:04 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 01:04
       
      Zacnie;)
      • 16: CommentAuthorastrofor
      • CommentTime18 Apr 2020 01:04
       
      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 01:04 zmieniony
       
      @astrofor to nie jest porównanie tylko informacja ;P
      • 18:
         
        CommentAuthortdc
      • CommentTime18 Apr 2020 01:04
       
      Tak oczywiście, to zasadnicza różnica.

      Ale jak rozumiem Zbyti chciał się jedynie upewnić.
      • 19: CommentAuthorzbyti
      • CommentTime18 Apr 2020 02:04 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 02:04
       
      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 05:04
       
      Link do dzisiejszego, sobotniego warsztatu, który zacznie się o 20:00:

      ->link<-
      • 22:
         
        CommentAuthorKaz
      • CommentTime18 Apr 2020 07:04 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 08:04 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 10:04 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 10:04
       
      @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 12:04
       
      @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 12:04 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 13:04
       
      co za niekonsekwentny język, gorzej niż PHP :)
      • 29:
         
        CommentAuthortdc
      • CommentTime18 Apr 2020 13:04
       
      Widzę, że zbyti już całkiem sprawnie programuje w Action!;)
      • 30:
         
        CommentAuthortdc
      • CommentTime18 Apr 2020 13:04 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 16:04 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 20:04
       
      W tej chwili 25 osób, zaczęło się:
    1.  
      chętnie bym dołączył ale linka do zooma brak
      • 34: CommentAuthorfalcon030
      • CommentTime18 Apr 2020 20:04 zmieniony
       
      Link jest pod Artykułem na głównej.

      Codziennie jest nowy link.
      • 35:
         
        CommentAuthorKaz
      • CommentTime18 Apr 2020 21:04
       
      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 23:04 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 23:04
       
      Podsyłam ATR z naszymi dzisiejszymi osiągnięciami ;)))
      • 38:
         
        CommentAuthorshanti77
      • CommentTime18 Apr 2020 23:04 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 23:04 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 00:04
       
      I też takie coś zrobiliśmy;)
      Bez asemblera;)
      • 41:
         
        CommentAuthorshanti77
      • CommentTime19 Apr 2020 07:04
       
      @tdc to są tylko tanie sztuczki, wykorzystujące sposób kompilacji kodu.
      • 42:
         
        CommentAuthorKaz
      • CommentTime19 Apr 2020 07:04 zmieniony
       
      Link do dzisiejszej lekcji nr 3, niedzielnej, rozpoczynającej się o godzinie 20:00:

      ->link<-
      • 43: CommentAuthorzbyti
      • CommentTime19 Apr 2020 09:04 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 11:04 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 15:04 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 17:04
       
      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 17:04 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 17:04 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 17:04
       
      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 18:04
       
      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?