CommentTime12 Nov 2026 13:14 (9 minut temu) zmieniony
Jeden z LLM-ów naprawił mi w końcu listing deasemblera "6502 DISASSEMBLER by JOHN MATTES", opublikowanego w "Antic" w roku 1984.
Uruchomienie się udało chyba tylko dzięki AltirraSDL - chwała ilmenitowi!
Listing był oryginalnie wykonany fatalną czcionką i pomimo erraty nie udało mi się wcześniej tego uruchomić, ani znaleźć kodu gdzieś indziej. Oryginalnie był to program do wklepania do "edytora liniowego" fig-Forth, taki też plik wrzucam na GH:
Ciężko to wykorzystać, więc forma tekstowa (plikowa) załączona, jest bardziej czytelna - no i wystarczy ją wkleić do Altirry po zabootowaniu APX Extended fig-Forth, żeby się skompilowało.
Można też użyć mojej modyfikacji tego Fortha (plik IDE-BOOT.ATR z [https://github.com/BartGo/forth-atari/tree/main/spin-offs]).
Dokładnie nie prześledziłem działania kodu, nie jestem takim na poziomie, ale ogólnie wiadomo - kolejne komórki w pamięci są analizowane, jeśli rozpoznane jest polecenie to wypisuje się jego mnemonik, rozpoznawany jest tryb adresowania, długość itp.
Kod, opis i erraty były publikowane tu: [https://archive.org/details/1984-03-anticmagazine/page/74/mode/2up] [https://archive.org/details/1984-08-anticmagazine/page/n5/mode/2up] [https://archive.org/details/1984-11-anticmagazine/page/52/mode/1up]
Co to robi? - w słowniku Forth polecenia są albo zdefiniowane w Forth (można je wtedy łatwo zdekompilować, często dostępne jest polecenie DECOMP) albo w kodzie maszynowym (napisane w forthowym asemblerze, który wymaga składni RPN i nieco innej obsługi skoków) - przed wywołaniem DIS wrzucamy na stos adres od którego ma się zacząć deasemblacja - może to być po prostu jakaś liczba, albo początek definicji słowa, zdefinowanego przy pomocy CODE, przykładowo aby zdeasemblować słowo, dodające dwie liczby, piszemy ' + DIS - deasemblacja jest przerywana, jeśli coś naciśniemy lub jeśli w kodzie pojawi się instrukcja skoku, typowo kończąca polecenie i wyskakująca z powrotem do maszyny Fortha (RTS, JMP, itp) - program nie rozumie, czy jedziemy po prawidłowym kodzie maszynowym, więc może radośnie wyświetlać śmieci
Po co? Zacząłem się uczyć trochę asemblera 6502 i strasznie mi się podoba "interaktywność" asemblera Fortha, wklepujemy drobny element funkcjonalności i od razu możemy go wykonać, sklejając różne polecenia w "strumienie" (przy pomocy stosu). Powyższy deasembler pomaga zrozumieć, co wylądowało w pamięci.
Dla porównania składni, wklejam obrazek z oryginalnego kodu fig-Forth (fig-FORTH 6502 ASSEMBLY SOURCE LISTING, RELEASE 1.1 WITH COMPILER SECURITY AND VARIABLE LENGTH NAMES, September 1980), widać że co weszło to wyszło, tylko... hm, odwrotnie.