atarionline.pl Disassembler 6502 dla Apple. - 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: CommentAuthormarok
    • CommentTime11 Jun 2023 zmieniony
     
    Disassembler 6502 dla Apple.

    Miał dwóch słynnych autorów. Jak dla mnie zdumiewająco zwięzły (powstawał dla komputera z 4Kb pamięci RAM).
    Jego wielkość w oryginale mieści się całkowicie ("z powodzeniem") na dwóch stronach pamięci (odwołuje się przy tym jeszcze do krótkich fragmentów kodu "monitora" w ROM w Apple, które też zostały tu korportowane - bez zmian; zresztą, cały ten monitor mieści się na jednej stronie pamięci - $FFxx).
    Wersja do jakiej dotarłem miała postać hex-stringów (ciągnięte już z webarchive), którą odtwarzałem z wykorzystaniem strony: ->link<- (tak apropo).
    Potem to dostosowałem do postaci pliku źródłowego (z listingu deasemblacji), czyniąc dodatkowo drobne dostosowania pod Atari:
    - przerzucenie wykorzystywanych komórek pamięci ze strony zerowej z $4x na $8x,
    - "emulacja" zachowania rejestru sprzętowego pod zapis ascii na ekranie ($d012) i zapięcie działania deasemblera w pętli (w ogryginale kończył na jednej stronie ekranu), co wymagało ode mnie dodania całkiem sporo dodatkowego kodu (w porównaniu z całością)

    Co mogę jeszcze napisać o tym deasemblerze?
    Jego "outpust" jest bardzo czytelny (dobrze sformatowany) oraz pełny (są wyrzucane na ekran kody deasemblowane), przy całej swojej "prostocie".
    Działa bardzo wolno (trudno tego nie zauważyć; choć w oryginale może działać szybciej - tj. NTSC ma się do PAL), ale to w zasadzie nie jest wina samego kodu tegoż, a bardziej ("emulowanego") 'hardware' Apple1.

    Gdzieś w opisach o nim był podany szczegółowo zakres zajmowanej pamięci i tu mi się to nie zgodziło z tym, co wynika z deasemblacji tych stringów, o 4 bajty (mam go więcej). Więc myślę sobie, że albo to była jakaś tam niedokładność 'sprawozdawcza', albo to troszkę inna wersja od tamtej (może jakoś poprawniona?), chociaż nie sądzę (w każdym razie - odnotowuję fakt).

    Załączam oprócz obx jeszcze odtwarzane źródło z wstawką kodu pod Atari.

    Co do mechaniki działania deasemblera to mało się zdołałem rozeznać.
    Zauważyłem tylko, że (niektóre?) mnemoniki opkodów są dekodowane na zasadzie złożenia ich wyrażenia (3-literowego) w dwóch bajtach, tak iż każdą literę koduje 5 bitów.
    Jest to metoda, która została także wykorzystana w "Unassembler", od JBW (i ta sama, jaką "polecał" mi J. Husak, gdy "peorowałem" za 'swoją', opartą na "krótkiej tablicy mnemoników").

    Różnica jest w obu tych podejściach taka, że podstawą do wyliczenia z tych 5-bitów po ich wyodrębnieniu (do dodawania) jest w przypadku Unasemblera 'A' (lub '@' - nie pamiętam), a w tym drugim przypadku - '?' (= $3F) - więc poniżej właściwej dla liter ćwiartki (ale tylko tyle, by objąć wszystkie jeszcze litery).
    (Może to niejasne dla wielu, co w tym akapicie napisałem, ale "trudno i darmo".)