atarionline.pl Deasembler 6502 (fig-Forth) - 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: CommentAuthorbartgo
      • 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:

      [https://github.com/BartGo/forth-atari/blob/main/asm/DISASM.4TH]

      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.