Atari Action! Compiler: Różnice pomiędzy wersjami

Z Atariki
Przejdź do nawigacji Przejdź do wyszukiwania
Jhusak (dyskusja | edycje)
Dodano artykuł
Jhusak (dyskusja | edycje)
 
(Nie pokazano 2 pośrednich wersji utworzonych przez tego samego użytkownika)
Linia 1: Linia 1:
Atari Action Compiler to kompilator Atari Action! uruchamiany w piaskownicy (sandboxie) - minimalistycznym emulatorze Atari 8-bit zbudowanym na bazie fake6502 - emulatora procesora MOS 6502.
Atari Action Compiler to kompilator Atari Action! uruchamiany w piaskownicy (sandboxie) - minimalistycznym emulatorze Atari 8-bit zbudowanym na bazie fake6502 - emulatora procesora MOS 6502. Autorem jest [[Jakub Husak]].
 
==Opis==


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.
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.
Linia 5: Linia 7:
Obraz kartridża nie został w istotny sposób zmodyfikowany - usunięto fragmenty niszczące pamięć (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.
Obraz kartridża nie został w istotny sposób zmodyfikowany - usunięto fragmenty niszczące pamięć (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.
==Działanie==
Przed uruchomieniem oprogramowania kartridża ustawiana jest flaga trybu Monitor, uruchamiany jest kartridż, następnie wywoływana jest komenda C"nazwa_pliku" (wpisywana do bufora oraz do komórki 764 jest wpisywany kod RETURN), po czym program czeka na wejście w pętlę IDLE po kompilacji. Następnie, jeśli nie było błędów,  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ść==
Zgodność jest niemal 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 (wówczas zgodność 100%).
 
==Biblioteka Action!==


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 biblioteki zasadniczo działa poprawnie. Pozostało (prawdopodobnie) 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. W tym szczególnym przypadku crawler (moduł kompilatora przechodzący po wszystkich możliwych ścieżkach danej funkcji) kopiuje tę funkcję do obszaru $Axxx, który jest wykorzystywany podczas kompilacji, ale nie jest używany w czasie wykonywania programu.


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.
==Pamięć==


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.
Dostępna jest cała pamięć operacyjna tak, jak w przypadku komputera Atari uruchominego bez żadnego DOSu, dzięki czemu można wykorzystać całą dostępną pamięć — od rozsądnego początku obszaru pamięci aż do adresu 0x93FF (gdzie zaczyna się bufor nazw symboli dla starndardowych ustawień)




Strona projektu:
==Strona projektu i linki==


https://github.com/jhusak/atari_action_compiler
https://github.com/jhusak/atari_action_compiler


[[Kategoria: Atari 8-bit]][[Kategoria: Języki programowania]][[Kategoria:Programowanie]]
[[Kategoria: Atari 8-bit]][[Kategoria: Języki programowania]][[Kategoria:Programowanie]]

Aktualna wersja z 11 lip 2026, 16:42

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

Opis

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 pamięć (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łanie

Przed uruchomieniem oprogramowania kartridża ustawiana jest flaga trybu Monitor, uruchamiany jest kartridż, następnie wywoływana jest komenda C"nazwa_pliku" (wpisywana do bufora oraz do komórki 764 jest wpisywany kod RETURN), po czym program czeka na wejście w pętlę IDLE po kompilacji. Następnie, jeśli nie było błędów, 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ść

Zgodność jest niemal 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 (wówczas zgodność 100%).

Biblioteka Action!

Eksperymentalne dynamiczne linkowanie biblioteki zasadniczo działa poprawnie. Pozostało (prawdopodobnie) 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. W tym szczególnym przypadku crawler (moduł kompilatora przechodzący po wszystkich możliwych ścieżkach danej funkcji) kopiuje tę funkcję do obszaru $Axxx, który jest wykorzystywany podczas kompilacji, ale nie jest używany w czasie wykonywania programu.

Pamięć

Dostępna jest cała pamięć operacyjna tak, jak w przypadku komputera Atari uruchominego bez żadnego DOSu, dzięki czemu można wykorzystać całą dostępną pamięć — od rozsądnego początku obszaru pamięci aż do adresu 0x93FF (gdzie zaczyna się bufor nazw symboli dla starndardowych ustawień)


Strona projektu i linki

https://github.com/jhusak/atari_action_compiler