Co do najlepszości to ja tam bym się sprzeczał
Na początek zajrzałbym do
oficjalnej dokumentacji produktu. Nie ma w niej "nieudokumentowanych" rozkazów, ale cała reszta jest opisana bardzo dokładnie i szczegółowo. Dalsze informacje to
Home of the Z80 CPU - tam znajdziesz mnóstwo informacji na wszystkie tematy związane z Z80 w tym również do opisów listy rozkazów uwzględniającej nieoficjalne rozkazy. "Rozpiskę" rozkazów znajdziesz też na
naszym Wiki.
Jak już zdecydujesz z którego źródła korzystać i zapoznasz się z tym co tak na prawdę chcesz zrobić pojawi się kwestia co dokładnie chcesz uzyskać - disassembler działający na Z80 czy na "dużej" platformie?
Jeśli to pierwsze to zadanie jest dość ambitne choć jak pokazują przykłady jak najbardziej do zrobienia - gotowa procedura disassemblera była publikowana w książce "Mikroprocesor Z80" Jerzego Karczmarczuka i tej procedury (rozszerzonej o niepublikowane rozkazy) używaliśmy na Spectrum w "Summer Monitorze" i na Samie w eMonie.
Jeśli to drugie to masz znacznie większą swobodę i możliwości. Generalnie rozkazy są podzielone na grupy, które kodowane są na poszczególnych bitach w grupach rodzaj parametru, tryb adresowania i konkretny rozkaz kodowane są na kolejnych bitach do tego dochodzą oczywiście rozkazy prefiksowane CB/ED, które rozszerzają standardową listę oraz prefiksowanie dla rejestrów IX/IY, które HL zamienia na odpowiedni rejestr indeksowy z dodatkowym przesunięciem. Wszystko to opisane jest szczegółowo w oficjalnym manualu.
A disassembler to w sumie stosunkowo prosta sprawa... pobierasz bajt, sprawdzasz czy jest prefixem jeśli tak przeskakujesz do stosownej analizy pobierając następny bajt jeśli nie sprawdzasz poszczególne bity żeby namierzyć grupę, skaczesz do obsługi grupy, sprawdzasz bity, żeby ustalić parametry, pobierasz parametry zgodnie z tym i wszystko zamieniasz na tekst.