Historka o emulátoru MSX pro Sord m5 a kvalitě Basicu od Microsoftu

Mám svou oblíbenou a kolem dokola neustále omílanou historku o sordistech.

Ovšem mnozí ji dosud neznají!

Uvedu ji tedy, aby se s ní mohlo seznámit více lidí (těch asi dvacet, co to tady čtou).

Tedy, Sord m5 je hardwarově podobný počítačům MSX, konkrétně jedničkové řadě.

Čísla portů připojení klávesnice a dalších periferií se sice liší, ale procesor a videoprocesor je stejný a zvukový interface podobný.

Ocituji z dobového dokumentu, rok 1990:

Po hardwarové stránce jsou si systémy M5 a MSX vcelku podobné, oba mají stejný mikroprocesor a stejný typ videoprocesoru.
Zvukové čipy se od sebe svými schopnostmi nepatrně liší.
Naprosto rozdílné je pak zapojení klávesnice, joysticků, tiskárny a magnetofonu.

Konkrétně pro videoprocesor se například uvádí tyto rozdíly:

MSX ma stejny videoprocesor (dale jen VDP) jako M5. Avsak ma jej zapojeny na portech 98 a 99, zatim co M5 na portech 10 a 11.
Proto je potreba vsechny odkazy (instrukce IN a OUT) presmerovat. V programu proto hledame kody D398, DB98, D399 a DB99 a zapisujeme si adresy na kterych lezi konstanta s cislem portu. Nachazi-li se napriklad bajty D398, t.j. instrukce OUT (98),A na adrese 9CB4, do poznamek si uvedeme 9CB5 - 10. Pro jistotu prohledneme program jeste i okolo instrukci OUT (C),r , neodkazuji-li se na VDP.

Pri zapisu do registru 0 a 1 VDP dochazi k neshode v nekterych bitech. Rozdily jsou v tabulce 1.
Pokud nam pri pokusnem startu vypadl obraz (sikme pruhy pres obrazovku), je to tim, ze program zapsal do registru 0 bajt se shozenym bitem EXTVI nebo se nastavil jiny typ pameti VRAM.
Pokud mame na barevne televizi zelenocerne pozadi, je to tim, ze jako BCOL byla nastavena barva transparent (pruhledna). MSX ji zobrazuje jako cernou.
Proto musime v programu tyto bajty najit a poznamenat si jejich adresy a konstanty, kterymi budou nahrazeny.

Protože pro Sord je málo her a pro MSX více, rozhodli se sordisté (nejprve brněnský klub, poté LZR Soft) vytvořit “emulátor” MSX.

Takový “emulátor” bylo možné realizovat jednoduše tak, že do (upraveného) Sordu nahraje ROM z MSX (která má originálně 32 KiO) a doplní ji o rutiny, které místo na hardware MSX budou přistupovat na hardware Sordu.

Emulátor funguje tak, že v paměti počítače M5 běží program, který není nic jiného než upravená ROM počítače MSX.
Veškeré změny v této ROM se týkají pouze odkazů na hardware. Jsou přečíslovány porty videoprocesoru, je emulován zvukový čip, zcela je přepracován přerušovací systém a s ním i obsluha klávesnice.
Rutiny se tedy navenek tváří stejně jako v počítači MSX, ale uvnitř pracují jinak.
Program z této ROM se z pochopitelných důvodů v počítači SORD M5 nachází v paměti RAM, jejíž velikost je v tomto případě 64KB.

Tolik tedy na úvod.

A nyní k té historce:

K vyřešení totiž zůstávalo, kde na tyto rutiny vzít volné místo, když MSX Basic ROM je zcela zaplněna kódem od Microsoftu a neyužité místo tam vlastně žádné není.

Řešení znělo – vyber si jakýkoli podprogram z microsoftí ROM, napiš vlastní, který bude dělat to samé – většinou bude mít poloviční velikost, než původní, a tím vytvoříme volné místo pro přidání potřebných rutin.

Druhý dokument z roku 1990 říká doslova:

Vysel jsem ze zkusenosti, ktere jsem do te doby se systemem MSX mel, disassembloval a okomentoval jsem si tu cast interpretru jazyka BASIC-MSX, ktera obsahovala rutiny pro magnetofon a zacal jsem zjistovat, jestli format pujde vubec nahradit.
V tomto miste mi to neda, abych se nezminil o dojmu, jakym na me program ve strojovem kodu zapusobil.
System MSX musel vznikat za velkych porodnich bolesti a na programu je to prilis patrne. BASIC-MSX se honosi tim, ze z neho vznikl slavny GW-BASIC. Jestli je napsan stejnym zpusobem ...
Ale vsechno zle je k necemu dobre.
Diky tomu, ze rutiny byly v prumeru dvakrat tak dlouhe, nez by bylo nezbytne potreba, podarilo se mi vtestnat misto nich rutiny pracujici s formatem m.5.
Upozornuji, ze jsem menil jen BASIC-MSX, do oblasti BIOS-MSX jsem nezasahoval, takze puvodni MSX rutiny zapnou/vypnout motor, nacist/zapsat pisk pred hlavickou/telem a nacist/zapsat jeden bajt zustaly na svych mistech zachovany a lze je proto v programech pouzivat!

Zdrojový kód poslední verze MSX emulátoru (1.C release 1.3) z roku 1991 najdete TADY.

Návod, jak upravovat hry, které nejsou důsledné ve využívání MSX BIOSu a přistupují i na hardware počítače najdete zas TU.
Je to i takový pěkný přehled hardwarových rozdílů mezi MSX a Sordem m5.