atarionline.pl Atari Action! Compiler - 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:
         
        CommentAuthorjhusak
      • CommentTime18 Jun 2026 16:31 zmieniony
       
      W przypływie kolejnej weny w kolejnym podejściu stworzyłem Atari Action! Compiler - ale podszedłem od strony "szybkiej" a jednocześnie "maksimum kompatybilności". Za README:
      -----------------------

      Atari Action! Compiler

      Autor: Jakub Husak, 2026

      STAN:

      Kompilator działa w 100% jak oryginał
      Dynamiczne dołączanie biblioteki może zawieść w niektórych przypadkach.


      Atari Action Compiler to kompilator Atari Action! uruchamiany w piaskownicy (sandboxie) - minimalistycznym emulatorze Atari 8-bit zbudowanym na bazie fake6502 - emulatora procesora MOS 6502.

      Emuluje kod oryginalnego kartridża Action! w środowisku „gołego” Atari 8-bit. Emulowany jest wyłącznie procesor CPU — brak obsługi NMI — jednak przy każdej wirtualnej ramce (oryginalnie 1/50 sekundy) zwiększany jest zegar systemowy. Jedna ramka trwa około 30 000 instrukcji (ponieważ cykle procesora nie są zliczane). Wykorzystywany jest ROM Altirra XL.

      Obraz kartridża nie został w istotny sposób zmodyfikowany - usunięto fragmenty niszczące zawartość pamięci (zabezpieczenie przed używaniem obrazu kartridża w RAM) oraz dodano kilka hooków na określone adresy i warunki, na przykład rozpoznawanie pętli bezczynności (idle loop), wstawianie nazw plików do buforów nazw plików oraz poke(764,12) (wciśnięcie return) :). Po zakończeniu kompilacji pobierany jest kod błędu i wyświetlana jest ostatnia kompilowana linia, tak jak w oryginalnym kartridżu.

      Działa to w następujący sposób: ustawiana jest flaga trybu Monitor, uruchamiany jest kartridż, następnie wywoływana jest komenda C"nazwa_pliku", po czym program czeka na wejście w pętlę IDLE. Następnie wywoływana jest komenda W"nazwa_pliku", wyświetlane są komunikaty błędów (jeśli wystąpiły), a program kończy działanie.

      Zgodność nie jest stuprocentowa. Użytkownik może użyć instrukcji SET, która zapisuje dane do pamięci, a jeśli zapis następuje do rejestrów sprzętowych (które nie są zaimplementowane) lub w przypadku innych nietypowych zastosowań - efekt może być inny od oryginału. Jednak jeśli użytkownik skorzysta z tych instrukcji zgodnie z ich przeznaczeniem (np. ustawianie adresu startowego), nie powinien napotkać problemów.

      Eksperymentalne dynamiczne linkowanie bibliotek zasadniczo działa poprawnie. Pozostało jeszcze kilka drobnych problemów, na przykład (problem już rozwiązany) w Printf znacznik %H odwołuje się do funkcji wyświetlania liczby szesnastkowej znajdującej się w innym banku pamięci. Crawler kopiuje tę funkcję do obszaru $Axxx, który jest wykorzystywany podczas kompilacji, ale nie jest używany w czasie wykonywania programu.

      Nie występuje narzut związany z systemem operacyjnym dysku (DOS), dzięki czemu można wykorzystać całą dostępną pamięć — od rozsądnego początku obszaru pamięci aż do adresu 0x93FF.

      Atari Action! Compiler zachowuje pełnię możliwości kartridża Atari Action!. Powinien działać dokładnie tak jak oryginał, łącznie ze wszystkimi dołączonymi bibliotekami w plikach *.ACT (należy pamiętać o rozróżnianiu wielkości liter w nazwach plików). Również adresy procedur Action! są identyczne z tymi z prawdziwego kartridża.

      -----------------------------
      ->link<- do projektu :)

      -----------------------------
      Disclaimer: Ejaj było użyte w roli konsultanta i wiele pomogło, napisało kilka nudnych procedur, z których jedna została i na tym koniec.

      Podziękowania:
      Projekt w tej postaci nie powstałby bez pracy JAC!a i oczywiście Clintona Parkera, autora języka Action!
      • 2: CommentAuthorgregor2
      • CommentTime18 Jun 2026 18:57 zmieniony
       
      Szkoda ze AI przy tym grzebalo.
      Tak moze wykozystalbym to w swoim emulowanym SBC. Mam juz AppleBASIC, IntegerBASIC BBC Basic,EhBASIC,Supermon816,Forth z AppleI, ale tez dla 8080 TinyBASIC i jmon plus wlasciwie cale oprogramowanie z Apple 1.
      Wszystko bez AI.
      • 3:
         
        CommentAuthorjhusak
      • CommentTime18 Jun 2026 18:58 zmieniony
       
      AI w tym nie grzebało :) z proof of conceptu praktycznie nic ejajowego nie zostało :) 95% mięska napisałem sam. Ejaj głównie pomógł w pisaniu testów - to żmudna i niewdzięczna robota - a to nie grzebanie "w tym", tylko "z boku".

      A z tym AI to zależy, co się chce osiągnąć i jakim kosztem. Lubię dłubać, ale wiem, że to nie efektywne, momentami demotywujące (jak te testy). Ale jak się fajnie dłubie, to AI nie ma tu nic do roboty.
      • 4: CommentAuthorzbyti
      • CommentTime18 Jun 2026 20:33 zmieniony
       
      oczywiście doceniam, ale nie użyję - nie grzeb w czymś połowicznie bo ja to "kiedyś w końcu" zrobię dobrze ;) nie po to zakupiłem "te grube książki" ;)
      • 5:
         
        CommentAuthorjhusak
      • CommentTime18 Jun 2026 21:08 zmieniony
       
      :D musiałem kilka razy przeczytać :) No cóż, po całym dniu kodowania ręcznie...

      Napisałem ten soft dla siebie, bo wkurzała mnie zabawa z emulatorem. Na dodatek raz na jakiś czas coś się w Atari800 poprawi i przestaje dobrze działać, co dobrze działało, i trzeba zgłaszać.

      A tak, odpalasz w makefile kompilator, i po 0.02 sekundy masz wynik. Na dodatek ciekawostka - nie trzeba pisać D: w nazwach plików (np. inkludowanych) - po prostu INCLUDE "PLIK.ACT" i działa :) W oryginale też tak pewnie można.

      Jak tak patrzę w ten kod Action, to to jest kawał dobrego kodu, otwartego, można wszystkie procki podmieniać, handlery np. błędu...
      • 6: CommentAuthorzbyti
      • CommentTime18 Jun 2026 21:18 zmieniony
       
      @jhusak doceniam, że przeczytałeś post kilka razy, ale twój pierwotny odruch (przed edycją) był jak najbardziej adekwatny ;) i pewnie pozostanie prawidłowym komentarzem, jednak o ile się znamy to wiesz, że spróbuję :] ale raczej na 65816 ;)

      ps. oczywiście był adekwatny także jak go przeczytać sarkastycznie a nie jako moje intencje ;)
      • 7:
         
        CommentAuthorjhusak
      • CommentTime18 Jun 2026 21:37
       
      Ech, czyli napisałeś konkretnie, że napisałeś niekonkretnie :P
      • 8: CommentAuthorzbyti
      • CommentTime18 Jun 2026 21:42 zmieniony
       
      szczerze to napisałem słuchając:
      35:15 jakby komuś timestamp nie zadziałał ;)

      gdzie jak zwykle podziwiam Mikera z żoną Sylwią, siwego wysokiego pana który przez moment wydaje się mieć brata bliźniaka tyle, że w okularach no i przez moment widzę spacerującego "wierzę nauce" Adama, a jak "nauka zmieni zdanie" to wciąż mam to samo nazwisko.

      tak. mam książkę o kompilatorach ze "smokiem", mam też taką z epoki i mam na uwadze Action! ;)
      • 9: CommentAuthorastrofor
      • CommentTime18 Jun 2026 22:01 zmieniony
       
      @zbyti: smok czerwony czy purpurowy ?
      @zbyti: purpurowe druga edycja , czerwona jest z 2002
      • 10: CommentAuthorzbyti
      • CommentTime18 Jun 2026 22:05 zmieniony
       
      @astrofor purpurator to był pudzian w MMA ;) ja tylko wiem, że historycznie nazywa się to "dragon edition" - osobiście mam na półce wydrukowane takie cudo: ->link<- i "inne" ;) i wszystko czai się na Action! ale jak to u "człowieka" - musi się "uleżeć" ;)
      • 11: CommentAuthorarctus
      • CommentTime18 Jun 2026 23:40
       
      Sparafrazuję klasyka:
      "Jakub, nie mieszajmy myślowo dwóch różnych systemów walutowych. Nie bądźmy Pewex`ami."


      Do tego fragmentu README.md pasuje jak ulał :)
      Normally Action! gets file in atari format (enter=0x9b). But in unix/PC world enter=0x10.
      • 12:
         
        CommentAuthorjhusak
      • CommentTime19 Jun 2026 01:31 zmieniony
       
      Dzięki za wyłapanie - poprawione :)

      A jeśli tak jest zrobione (wybór EOL) - to znaczy, że mi było potrzebne :P

      I to jest dowód, że to nie ejaj pisał :) Tylko Husak jednym palcem, drugi trzymając w... naparstku.
      • 13: CommentAuthortebe
      • CommentTime13 Jul 2026 17:06
       
      ->link<-

      actionc is a Rust cross-compiler for the Atari 8-bit Action! language. It compiles Action! source code on a modern computer into Atari load-format executables, with a compatibility-oriented path for original programs and an optimized path for maintained code.

      The project is under active development. The compatibility and optimized modes are the primary ways to build runnable programs; the newer MIR6502 mode is available for experimentation and compiler validation.
      • 14:
         
        CommentAuthorjhusak
      • CommentTime14 Jul 2026 01:44
       
      Fajnie, że są takie projekty. Ciekawe, jak mocno optymalizuje ten rust cross compiler. Ktoś sprawdzi?
      • 15: CommentAuthormkur
      • CommentTime14 Jul 2026 21:55
       
      Przykładowo, Toms Navigator skompilowany nowym kompilatorem w trybie optimized jest jakieś 5% mniejszy. Główny uzysk jest na branch invertion (odwraca warunek skoku i eliminuje JMP), unikania niepotrzebnego zapisywania argumentów funkcji i procedur do pamięci/na stosie, oraz eliminacji ponownego ładowania wartości do rejestrów. Większy uzysk będzie z globalnej optymalizacji kodu - jest to kierunek rozwojowy dla nowego backendu.
      • 16:
         
        CommentAuthorjhusak
      • CommentTime14 Jul 2026 23:46 zmieniony
       
      Czyli oryginał jest niemal idealny :) zrobiony na ponad 90 % :)

      A robi obliczenia podczas kompilacji?
      Czy a=3*5 zrobi 15, czy policzy mnożenie, jak teraz?
      • 17:
         
        CommentAuthortdc
      • CommentTime17 Jul 2026 08:31
       
      Gratki, Kuba;)

      Wyczuwam w tym projekcie dużą dawkę irytacji emulatorem;)))
      • 18:
         
        CommentAuthorjhusak
      • CommentTime17 Jul 2026 15:36
       
      A i słusznie, bo Action! nie ma trybu tekstowego, jak np. Basic, i przez E: nie działa.