Hmm, na razie mam tylko doświadczenie z pisaniem komend z kropką, które się uruchamiają w pamięci interfejsu, czyli ROM ESXDOS jest wtedy załączony i nie trzeba żadnych sztuczek (a nawet odwrotnie, można wtedy wołać procedury z ZX ROM).
Trochę na temat przełączania jest napisane na stronie Velesofta:
https://velesoft.speccy.cz/zx/divide/divide-memory.htmWspomnianych jest kilka specjalnych adresów (0000h, 0008h, 0038h, 0066h, 04c6h and 0562h), które są dekodowane sprzętowo. Da ostatnie służą do powrotu do ROM-u z Basicem.
Adresy 0000, 0008 włączają ROM divIDE/MMC, a żeby go wyłączyć, pobrany musi być rozkaz z zakresu 1FF8h-1FFFh.
W tym miejscu znajdziemy:
1FF8 C9 RET
1FF9 FB EI
1FFA C9 RET
1FFB E9 JP (HL)
1FFC FF RST 38H
1FFD FF RST 38H
1FFE FF RST 38H
1FFF FF RST 38H
Najprościej więc odłożyć na stos adres powrotu i wykonać JP 1FF8H (bez włączania przerwań) lub JP 1FF9H (z włączeniem przerwań).
Albo też adres powrotu zapakować do HL i wykonać JP 1FFBH.Tych adresów nie należy wywoływać bezpośrednio, bo komputer się zwiesi lub wyresetuje przy powrocie do Basica.
Do "gładkiego" powrotu do ZX ROM służą dwie procedury pod adresami 04c6h oraz 0562h. Nie wiem jeszcze, czym się od siebie różnią.
Aaa OK. To już wszystko rozumiem. Po rst 8 i wywołaniu funkcji jest powrót do oryginalnego ROMu ZX?
Przetestuje sobie i dam znać czy wszystko działa (chcę załadować obrazek pod 16384).
Funkcje wywoływane przez RST 8 w większości przypadków wracają włączając ROM sprzed wywołania. Czyli:
- Wywołanie z
włączonym ZX ROM rozkazu RST 8 wywoła wskazaną funkcję ESXDOS i nastąpi powrót do ZX ROM.
- Wywołanie z
wyłączonym ZX ROM rozkazu RST 8 wywoła wskazaną funkcję ESXDOS (lub ZX ROM) i
nie nastąpi powrót do ZX ROM.
I jeszcze jedna uwaga: komendy z kropką są ładowane do pamięci RAM divIDE pod adres 2000h i potem następuje skok pod ten adres. Warto pamiętać, że ZX ROM jest wtedy nieaktywny i nie ma dostępu np. do czcionki systemowej.
Sprawa nie mniej istotna - wywołanie funkcji ESXDOS wymaga podania nie tylko numeru funkcji bezpośrednio po rozkazie RST 8, ale nierzadko również jakichś parametrów, najczęściej w A oraz w HL. Ale taką uwagę znalazłem w opisie API, ale jeszcze nie przetestowałem: gdy wywołanie następuje z poziomu ZX ROM, zamiast HL należy używać IX.
Sprawa (na razie) ostatnia - gdy musimy zajrzeć do drugiego ROM-u na chwilę, możemy wykonać rozkaz OUT 227. Najstarszy bit wskazuje, który ROM będzie włączony:
0 - ZX ROM,
1 - ESXDOS.
Takiego przełączenia można bezpiecznie dokonać tylko kodem spod adresów 4000h-FFFFh oczywiście.