Nem tudom, hogy ti hogyan vagytok vele, de én nem szeretem a titokzatos fekete dobozokat, amikben ki tudja mi történik

Megpróbálom összefoglalni, mi az amit eddig összeszedtem a ZXCF/Mátrix működéséről:
Az ugye köztudott, hogy a buszcsatlakozó ROMCS vezetékével le lehet tiltani a belső ROM-ot, és helyette a csatlakoztatott eszköz saját ROM programját futtatni.
Jelen esetben a ROM szerepét egy elemmel táplált SRAM látja el, ami lehetővé teszi a "ROM" program könnyű módosíthatóságát, beállítások tárolását, és megannyi extra funkciót. (Mondjuk ez a teljes SRAM használat nem biztos, hogy 100% megbízható megoldás, többen is találkoztak már azzal, hogy csak úgy megsérült a rendszer... én inkább egy FLASH ROM IC-t használtam volna a ROM programok számára, ezt is könnyen fel lehet tölteni Z80-al is, és mellé egy SRAM IC a beállításoknak, extra funkcióknak. Így SRAM sérülés esetén is egy alap rendszer el tudna indulni, nem kéne magnóról újratelepíteni az egészet.)
Ez az SRAM lehet 512/1024K méretű (az interface típusától függően), ez a terület 16K-s lapokra van osztva amely a Z80 0. lapjára, azaz a Spectrum ROM helyére lapozható be. A rendszer lelke tehát a lapozó regiszter, ami CF kártya használatakor 10BFh I/O címen található, USB esetén 3Fh címen (ez okozza azt, hogy a Mátrixon újra kell telepíteni a ResiDOS-t, ha a másik csatlakozót szeretnénk használni. Azt még nem értem, hogy miért volt erre megoldásra szükség... A ZXATASP is már ezt az SRAM-os megoldást alkalmazta, ott 029Fh a lapozó regiszter címe.)
A regiszter csak írható, D0-D5 bitekkel választjuk ki a kívánt memórialapot, D6=1 esetén írható az SRAM, D7=1 pedig letiltja ROMCS jel generálást, azaz ilyenkor a gép eredeti ROM-ja érhető el. Viszont ha engedélyezve van az írás, akkor a ROM területre történő írás végbe megy a kiválasztott SRAM lapon! (Van a 48-as ROM-ban is olyan bug, ahol a ROM-ra ír, de játékokban is előfordul.)
A lapozó regiszter értéke Resetnél 00h, azaz a 0. SRAM lap van kiválasztva, nem írható, és az SRAM olvasható a ROM helyett. Magyarán a gép bekapcsolásakor, vagy Resetnél az SRAM legelejére (0. lap) töltött ROM tartalom indul el. Ez eredményezi azt, hogy sérült tartalom esetén nem indul el a gép, csak színes krix-kraxok vannak a képernyőn. Ennek áthidalására készült a titokzatos UPLOAD jumper (ami a mi Mátrixainkon kapcsoló), ezzel fizikailag tiltjuk le az interface ROMCS jelét, így amikor a ResiDOS telepítő programja már szoftveresen kikapcsolta a lapozó regiszteren, akkor lehet visszakapcsolni.
Nézzük mit is csinál a ResiDOS telepítő: 25500 (639Ch) címre betölt egy CODE blokkot, ami tartalmazza a telepítéshez szükséges gépi kódú rutinokat, valamint magát a telepítendő ResiDOS binárist.
A betöltött blokk elején egy ugrótábla található, így a különböző verziókban is ugyanott hívható az egyes szubrutinok.
25500 (639Ch): a gép ROM tartalmának átmásolása C000-FFFFh területre
25503 (639Fh): a gép újraindítása
25506 (63A2h): vissza ad egy kódot, ettől függ, hogy milyen szöveggel szóli fel a Jumper átállítására. Megjegyzés: a jumper állása nincs ellenőrizve, tehát nem azért írja ezt ki, mert nem jó állásban van, hanem azért mert innentől mindenképpen szükséges az SRAM elérhetősége.
25509 (63A5h): ResiDOS telepítése
25512 (63A8h): ROMCS jel tiltása, valamint 128-as gépeken a 48-as ROM belapozása
25515 (63ABh): SRAM méretének megállapítása, komoly ellenőrzést nem végez tehát az esetleges hw hibákat nem szűri ki, minden egyes SRAM lap 0. bájtját vizsgálja, hogy tudja-e nullázni. A 0. bájtokat elmenti (erre szolgál az a csomó 0 bájt a CODE blokk elején), majd a végén visszaírja, így az SRAM tartalom megmarad a teszt végére.
25518 (63AEh): az esetlegesen már telepített ResiDOS verziószámát kérdezi le
25521 (63B1h): a jelenleg telepített ResiDOS-ról mondja meg milyen interface-hez való. Ez az Upgrade kérdésnél számítana, viszont én akárhogy is nézem, az Upgrade funkció nincs megírva... így csak két hibaüzenet között választhatunk

25524 (63B4h): a CODE blokkban található ResiDOS verziószámát adja meg
25527 (63B7h): a CODE blokkban található ResiDOS interface típusának képernyőre írása
Maga a lényegi telepítés ez

ld hl, 6774h
ld de, 0
ld bc, 2F55h
ldir
(Az értékek verziófüggően változhatnak.)
Persze mindez a megfelelő belapozás után, az SRAM 0. lapjára kerül a ResiDOS így ezzel indul a gép. Az LDIR után még további beállításokat is végez, pl beleírja, hogy mennyi SRAM-t tartalmaz a rendszer.
Az 1. lapra pedig gép 48-as ROM-ja kerül (128-ason ez előzőleg belapozva), amelyet először átmásol a RAM-ba, majd a megfelelő pontokon módosítja, és ezt a módosított verziót másolja az SRAM 1. lapra.
A módosítások során egy lapozó rutint épít be az RST 8 és NMI rutinok helyére, így az RST 8 hívás lesz a kulcs a ResiDOS elérésének, ilyet épít be a billentyűzet lekérdezéshez, a LOAD/SAVE rutinokba, utasítás elemzéshez, a CLOSE parancshoz, valamint a bejelentkező szöveg kiírásához.