ESXDOS disas

ESXDOS je najpoužívanejší systém pre periférie DIVIDE a DIVMMC. Aktuálna verzia je 0.8.9 z roku 2021, podľa číslovania je OS stále vo vývoji. ESXDOS je v niekoľkých verziách, ktoré sú kompilované pre rôzny hardvér (DIVIDE, DIVMMC, MB03). Stránka projektu je s minimom informácií, podrobnosti sa nenachádzajú ani v inštalačnom balíčku.

ESXDOS je one-man-show, uzavretý autorský počin jediného človeka. Na rozdiel od väčšiny iných projektov pre historické počítače, ktoré sú verejné vrátane zdrojových kódov. Je to na škodu projektu samotného, lebo ako hovorí naše príslovie "Viac hláv - viac rozumu". Zrovna takýto projekt by potreboval širšiu vývojársku základňu, aby sa vyvíjal pozitívnym smerom.

Pátraním po ďalších informáciách som zistil, že neexistuje oficiálny popis API rozhrania. Údajne sa dá vyžiadať od autora. Ja som nepochodil, autor na môj e-mail nereagoval (hoci v dávnej minulosti sme si už pár e-mailov ohľadom inej problematiky vymenili). 

Nejaké podrobnosti o ESXDOSe sa dajú nájsť na nasledujúcich stránkach:

ZXFILES - súhrn informácií o ESXDOS-e

UNIDOS - úprava ESXDOS-u pre moderný HW emulátor

UNIDOS Wolf - ďalší port pre emulátor

Na týchto stránkach sa dá dopátrať k čiastočnému popisu API rozhraní aj k nejakým ďalším informáciám, ako aj k pokusu o spätný preklad kódu. I napriek tomu, že boli významnou pomocou, informácie z týchto stránok neboli dostatočné. A tak som sa na jar 2023 rozhodol urobiť vážny krok - reverzný preklad kódu. Keďže sa však vzhľadom na objem jedná o náročnú úlohu, vyžadujúcu množstvo času, oslovil som skupinu ďalších ľudí s cieľom získať pomoc s prekladom. Avšak už len zverejnenie zámeru sa stretlo s nevôľou, čo ma fakt prekvapilo. Mnohí očakávajú pridanie ďalších nových funkcionalít do budúcich verzií, pritom podporujú uzavretosť kódu a akceptujú šialene pomalé tempo vývoja. A to aj odchovanci moderných otvorených platforiem, ktorí obľubujú open-source projekty.  

Z osobných dôvodov som musel práce nateraz pozastaviť (snáď len dočasne).

Preklad kódu som presunul do prostredia IDA, ktoré zjednodušuje samotný preklad, i keď niektoré činnosti naopak komplikuje. V konečnom dôsledku to však prinieslo pozitívny smer (obrázky z prostredia IDA).

Aktuálne je okomentovaných približne 50% statického kódu z Flash pamäte. Navyše ESXDOS ešte obsahuje dva dynamické bloky kódu, ktoré sú v RAM. Dokopy teda je okomentovaných možno 20% kódu.

Z výsledku prekladu kódu mám zmiešané pocity. Prelínajú sa tam geniálne napísané časti (ako napríklad prvých 100 bajtov) so školáckymi chybami - akoby to ani nepísal jeden človek. Časté používanie polovíc indexových registrov je jednou z ďalších zvláštností kódu.

; RST38 hack

; from DIVMMC :

; 0038: JR 1Fh (18h, E5h)

; from ZX ROM :

; 0038: (ZX ROM) PUSH AF

; 0039: (DIVMMC) PUSH HL (E5h)

; ---------------------------------------------------------------------------

RST38:

                 jr      RST38A          ; redirect (DIVMMC)

; End of function RST38                  ; invisible "PUSH HL" (ZX ROM)

; ---------------------------------------------------------------------------

                 ld      hl, 39h ; '9'   ; ZX ROM "INT38" routine

                 jp      JMP2ZX          ; jump to ZX ROM to HL with original HL restored

; ---------------------------------------------------------------------------

Jedným z vedľajších efektov spätného prekladu je objavenie množstva chýb, ktoré sa nachádzajú v pôvodnom kóde. Keďže pri preklade je potrebné zvažovať každú použitú inštrukciu, ktorá sa nachádza v kóde, niekedy sa také chyby, alebo nezmysly objavia veľmi ľahko. Medzi najčastejšie chyby patrí ignorovanie návratových chybových stavov a neoptimalizované časti kódu.

Update 1. 1. 2024: Skontaktoval som sa s ďalším človekom, ktorý pracoval na disassemblingu ESXDOSu a predbežne sme sa dohodli na spolupráci.


Tagy: ESXDOS, disassembly, ZX Spectrum, DIVIDE, DIVMMC