Ezután jön a betöltõ megszerkesztése, ismét a már jól ismert betöltõmet használtam fel. A memória lefoglalás, ennek függvényében videócím kiszámítás, a rendszerhez való visszatérést biztosító HIBA eljárás a szokásos, "100% EXOS kompatibilis"
Amit most megemlítenék, hogy az elmúlt félórában tovább fejlesztettem memóriakezelést, így most már nemcsak, hogy EXOS 2.0 kompatibilis, hanem RAM bõvítés nélküli EP64-en is fut a program!
Gyakorlati értelme nincs sok, de szeretem a kihívásokat, a vajon hogyan lehetne megoldani problémákat
De hátha majd elõkerül a világból egy EP64 tulajdonos, és nagyon fog örülni, hogy végre egy játék ami az õ gépén is fut.
Gyakorlatilag a hivatalosan kiadott néhány játékon kívül nincs egyetlen program se ami menne EP64-en.
Egyik ok, a közvetlen szegmenscímek használata, ami megakadályozza azt is, hogy felbõvített EP64-en fussanak a programok (kivéve, ha F8-FB címeken is van bõvítés).
Másik ok, hogy nincs elég RAM egy 64K-s gépben
ami elsõ hallásra elég furcsa, hiszen egy 48K-s program miért ne férne el egy 64K-s gépben?
Egy átlag Spectrum átírat 4 szegmenst használ: egy videó szegmens az alsó 16K Spectrum memóriának, amiben található a képernyõ memória is. Két másik szegmenst a felsõ 32K Spectrum memóriának, és kell még egy videó szegmens az LPT tábla számára.
Viszont egy 64K-s gépen csak 2 szabad szegmens van... a másik kettõ a nullás lap ill. a rendszerszegmens céljára van felhasználva.
Azt már eddig is tudta a betöltõm, hogy az LPT tábla akár lehet megosztott szegmensben is, tehát ha van elég hely benne, a rendszerszegmens elejére kerül az LPT tábla, így máris megspóroltunk egy szegmenst.
De még mindig kéne egy...
Egyszerû a megoldás: a nullás lapról tegyük át az EXOS cuccait, no meg a saját programunkat a rendszerszegmensbe, állítsuk be a rendszerszegmenst nullás lapnak, és máris miénk az eddigi nullás lap szegmens!
Gyakorlatban így mûködik ez a fejlesztett betöltõ:
-lefoglal egy videószegmenst, ami majd az 1-es lapra kerül mint alsó 16K Spectrum RAM, ha nem sikerül, akkor HIBA rutinon át kilépés
-lefoglal egy akármilyen szegmenst a 2-es lapra, ha nem sikerül, HIBA...
-megpróbál lefoglalni egy akármilyen szegmenst a 3. lapra, ha nem sikerül, akkor jön az EP64 probléma...
-megpróbál lefoglalni egy videószegmenst az LPT táblának, ez lehet megosztott is, ha van benne elég hely (EXOS felhasználói határ beállítással ellenõrizve)
Ha a 3. szegmens lefoglalásánál EP64 problémával találkozik, akkor a következõ történik:
-ellenõrzi, hogy ez a 3. szegmens megosztott, és van-e benne elég hely a nullás lap eleje+LPT tábla számára, ha nincs akkor HIBA...
-ha van elég hely, akkor jön a trükk: a nullás lap elsõ 800H bájtja (ebbe benne van az EXOS rutinja a lap elején, plusz a 100H-tól kezdõdõ programunk) át lesz másolva megosztott szegmens elejére, természetesen az felhasználói határ ennek megfelelõen lesz beállítva, hogy EXOS ne tudjon lefele terjeszkedéssel bajt okozni. Átmásolás után a rendszerszegmens BFFC címén átállítjuk a nullás lap számát. Az eredeti szám természetesen el lesz tárolva. Ezután a felszabadult nullás lap szegmens kerül a 3. lapon felhasználásra. Az új nulláslap szegmens száma kerül majd bejegyzésre az LPT szegmensnek is.
Az LPT készítõ rutin számára pedig bejegyezzük, hogy 800H-tól készítse majd a szegmensben az LPT-t.
Ennek megfelelõen módosult egy kicsit az LPT készítõ rutin is, hogy az elõre megadott címen kezdje készíteni az LPT szegmensben az LPT-t. Ez normál esetben nulla, ha EP64 módban fut a program akkor lesz 800H. Természetesen ezzel módosult egy kicsit az LPT cím kiadása is a NICK-nek, hiszen így a 8-11-es címbitekkel is kell foglalkozni.
A HIBA eljárás is bõvítve lett, ha lett eltárolva nulláslap szegmensszám, akkor kilépés elött helyreállítja azt, visszamásolva az elsõ 800H bájtot. Ily módon még EP64 módban futva is megõriztük a rendszer teljes épségét, töltési hiba, vagy meleg reset esetén szépen kilép az EP logóhoz a program!
Kisebb módosítások voltak az EXOS 2.0 kompatibilitáshoz (Amit már a CPC betöltõmben is megcsináltam), a kép alján lévõ státuszsor az EXOS-tól lesz átvéve, ill kilépéskor a rendszerszegmensbõl lesz kiolvasva a visszaállítandó EXOS LPT címe.