Beletettem a program elejébe egy "LD SP,100h" utasítást, de így is lefagy a FISH hívás. Elkezdtem kísérletezgetni, hogy mi lehet a veremmutató értéke. Amikor a program elindul (még az SP beállítása nélkül), 32428 van benne. Miután voltak EXOS hívások, 32439 lesz az értéke. Ezek szerint a verem valóban az 1. lapon van. Amikor 100h-ra beállítom, azt megcsinálja, de utána visszaváltozik az 1. lapon lévő címre. Még nem találtam meg, hogy hol változik vissza, meg kell nézni az összes EXOS hívást, de most úgy látom, hogy vagy a FISH hívás előtt/után kéne átállítani/visszaállítani a veremmutatót valahogyan, vagy az EXOS hívások előtt/után. A 2. lapra azért nem tudom tenni a vermet, mert oda lapoztam be azt a szegmenst, amit használok (ezen van a videomemória is). A 0. és 1. lap erre nem használható, mert ha ellapozom, lefagy. A 3. lapra pedig az EXDOS ROM kerül. De a verem akkor lehet a 0. lapon, csak ne változzon meg az EXOS hívások után, vagy legyen visszaállítva.
Így kérdeztem le az SP értékét, mert akármelyik regiszterbe nem engedi másolni. HL-t azért teszi bele a verembe, hogy a végén visszaállíthassam. Így ugyan a veremhasználat miatt némileg más értéket kérdez le, de az látszik, melyik lapon van. (Bizonytalan vagyok, hogy jól kérdeztem-e le, mert furcsa, hogy az első bájtot kell 256-tal szorozni, hogy jó legyen. Máskor 16 bites címeknél úgy rémlett, hogy az alacsony bájt van elöl, viszont így ad "jó" értéket.)
__asm__ (
"push HL\n"
"ld HL,0\n"
"add HL,SP\n"
"ld A,H\n"
"ld (_RA),A\n"
"ld A,L\n"
"ld (_RB),A\n"
"pop HL\n"
);
RSP=RA*256+RB;
Több türelmem most nincs hozzá, majd folytatom. Boldog Karácsonyt és jó ajándék bontogatást mindenkinek!