Mad Pascal w przeglądarce (WASM) – podobnie jak cc65 w 8bitworkshop
chciałbym zapytać pewnie głównie Tebe, czy jest możliwa implementacja wersji kompilatora Mad Pascal działającej w przeglądarce, podobnie jak obecnie działa cc65 w projekcie 8bitworkshop.
Dla cc65 zastosowano następujące podejście:
kompilator, assembler i linker cc65 są napisane w przenośnym C
cały toolchain został skompilowany do WebAssembly (WASM) przy użyciu Emscripten
pliki wejściowe i wyjściowe obsługiwane są przez wirtualny system plików (VFS) w pamięci przeglądarki
narzędzia działają w Web Workerze, więc IDE nie zawiesza interfejsu
wynik to prawdziwy kod 6502 (XEX/ATR), a nie WASM
Dzięki temu można pisać i kompilować programy na Atari 8-bit bez instalowania czegokolwiek, bezpośrednio online.
tylko że:
Mad Pascal nie jest napisany w C (Pascal / FreePascal)
FreePascal nie ma natywnego backendu do WASM w tym kontekście
możliwe zależności od systemu plików, procesów lub bibliotek OS
mysle ze
integracja z istniejącą infrastrukturą 8bitworkshop bedzie dosc prosta jak juz bedzie plik wasm
Co udało się zrobić: Wykorzystując pas2js, udało mi się uruchomić główny plik kompilatora (mp.js) w środowisku przeglądarkowym. Napisałem prosty wrapper z wirtualnym systemem plików, który ładuje niezbędne biblioteki (mock system.pas itp.). Całość działa poprawnie: wpisuję kod w Pascalu, a skrypt w JS zwraca poprawny kod źródłowy asemblera (.a65) Ale Utknąłem na drugim etapie. Mam plik tekstowy .a65, ale potrzebuję zamienić go na binarkę Atari (.xex). Mad Pascal generuje kod pod MADS-a, ale z tego co widzę, mp.js nie zawiera w sobie assemblera.
czy istnieje port MADS napisany w JavaScript lub skompilowany do WebAssembly (WASM)? Ewentualnie, czy istnieje inny assembler 6502 działający w przeglądarce, który byłby wystarczająco zgodny ze składnią wyjściową Mad Pascala, aby to "zlinkować"?
@astrofor TeBe to "ojciec" Mad Pascala, ale jeżeli chcesz iść tą ścieżką to radzę pisać do JAC! bo to jego pomysł by Mad Pascal wynieść na wyższy poziom "abstrakcji" (jak ja lubię tę nowomowę IT, ale wydaje się adekwatna) ;)
Masz racje zamiast na forum napisalem bezposredio w issues na repo mad pascala. Jakos mam ogromne watpliwosci czy uda sie zintegrowac mad pascala w 8bitworkshop tak jak cc65. cc65 jest w wasmie emscripterowym, z wbudowanym wirtualnym filesystemem, z gotowym api do js co znacznie ulatwia sprawe integracji przegladarkowej
@astrofor z mojego punktu widzenia to doceniam, że Mad Pascal kompiluje się na czymkolwiek innym niż A8 (na cokolwiek innego) ;) zanim "dołączyłem" do projektu to Mad Pascal kompilował się tylko na A8 - ponoć miałem jakąś zasługę, że kompiluje się na inne targety ale już niejasno to pamiętam, nawet ponoć odpowiadam za target na C64, czemu zaprzeczam (to robota TeBe), udzielałem tylko zachęt (tak to byłem ja) ;) jedyny target za jaki można mnie pociągnąć do odpowiedzialności to C+4 ;) jakiś udział miałem by rozbić monolit tak by szło go targetować ale to wciąż nie jest tak oczywiste jak powinno być. TeBe to atarowiec z krwi i kości :]
EDIT1: target RAW to jeszcze mój pomysł i wykonanie ale odkąd JAC! robi swoje to przyznaję się tylko do idei a nie do kodu ;)
EDIT2: no i oddajmy sprawiedliwość Bocianu, że jak rzuciłem, że jest fajny emu 6502 w pytongu to on napisał unittesty w oparciu o to emu ;) gość jest zajebisty ;)
@astrofor mój poprzedni wpis mógł zabrzmieć jakbym się chwalił ale jego idea jest taka, że jak czegoś potrzebowałem to próbowałem to zrobić sam tak jak Bocianu ;) a TeBe nie stoi temu na przekór, więc do dzieła :D
@zbyti: Jak robi się coś fajnego, to czemu się tym nie chwalić? Miałeś też bardzo fajny tutorial o programowaniu na Atari, którym niespecjalnie się chwaliłeś — a szkoda.
Wracając do pas2js: na razie trzeba jeszcze poczekać. Obecnie są problemy z kompilacją większości programów, głównie przez 64-bitowe liczby całkowite, których JavaScript nie obsługuje wprost. Dodatkowo kompilacja działa tylko do MADS-a, a nie do binarki.
Trzymam kciuki za projekt. Jednym z pomysłów mogłoby być postawienie w Dockerze kompilatora Mad Pascala, wystawienie HTTP API jako bramki do kompilatora, a jako bonus — MCP dla LLM-ów robiący to samo co API. Można by to połączyć z 8bitworkshop, choć wtedy byłoby to już rozwiązanie pół-webowe i wszystko musiałoby działać lokalnie.
edit: na razie poprawilem i zaktualizowalem dockera do mad pascala w dockerhubie, mad pascal verision 1.75 odchudzilem z 500mb do 60mb dziala jedna linia : docker run --rm -v "$(pwd):/code" astrofor/madpascal wsk(wsk to w moim przypadku wsk.pas , czyli nazwa glownego pliku)