Virtuální interface

Počínaje Update 9 lze využívat funkci Virtuálního IFace.

Virtuání IFace lze vytvořit formou vlastní .DLL knihovny, která bude dynamicky připojena a umožňuje IFace využívat prostředky emulátoru.


Vytvoření IFace

Vytvořte ve VS projekt .DLL, stáhněte hlavičkový soubor rsIFace.h a přidejte jej do projektu.

Jedinou podmínkou k připojení IFace je existence exportovatelné procedury IFACE_INITIALIZE_PROC InitializeRespectrumIFace(PRS_IFACE pInitStruct)

ve vlastní .DLL knihovně. Tato procedura je volána při každém spuštění interního emulátoru. Během tohoto volání je třeba nastavit jednotlivé položky struktury RS_IFACE,

na kterou ukazuje vstupní pointer pInitStruct (viz. rsIFace.h)

Položky struktury pouze ke čtení:

UINT cbSize                velikost struktury RS_IFACE v bytech
LPBYTE pMemory        pointer na blok paměti emulátoru (viz Mapa paměti v rsIFace.h)
UINT uMemorySize     celková velikost bloku paměti v bajtech (0x1C000 pro 48k, 0x30000 pro 128k)
DWORD dwType         typ emulovaného zařízení (viz def. RS_...)
HWND hWnd              handle okna emulátoru (nezavírat !!!)
DWORD* pdwTicks     ukazatel na počet Tstates od spuštění emulátoru
 

Položky struktury, které lze nastavit během volání InitializeRespectrumIFace()

WCHAR szName[64]    název uživatelského iface (nepovinné)
 

Adresy vlastních procedur událostí definovaných v .dll : (nastavte pouze položky pro události, které chcete zpracovávat)
IFaceProc ReadProc      čtení z paměti
IFaceProc WriteProc     zápis do paměti
IFaceProc InProc          čtení z portu
IFaceProc OutProc        zápis na port

IFaceProc ReleaseProc  tato procedura bude volána při ukončení emulátoru
IFaceProc INTProc        maskovatelné přerušení
IFaceProc NMIProc        nemaskovatelné přerušení
IFaceProc RSTProc       RESET
IFaceProc CLKProc        před provedením každé instrukce (!!!)
 

Pokud dojde k některé výše uvedené události a je nastaven pointer IFaceProc pro tuto událost, je tato volána s parametry (DWORD* pAdr, BYTE* pByte)

Pro RSIFACE::ReadProc, WriteProc, InProc a OutProc

pAdr ptr na hodnotu adresy                   adresa = (LOWORD)*pAdr
pByte ptr na hodnotu byte                      byte = *pByte

Pro RSIFACE::CLKProc, NMIProc, ResetProc

pAdr ptr na hodnotu PC registru Z80     PC = (LOWORD)*pAdr
pByte NULL

Pro RSIFACE::ReleaseProc

pAdr = NULL
pByte = NULL

 

Procedura vrací  jednu nebo kombinaci následujících návratových hodnot:

RSR_DEFAULT provede interní zpracování události
RSR_IGNORE ignoruje interní zpracování události (mimo ReadProc a InProc)
RSR_BREAK zastaví emulaci a otevře debugger (pouze pro ladění)


RSIFACE::ReadProc a InProc jsou volány po interním zpracování, ostatní před zpracováním.

!!! ClkProc je volána před provedením každé instrukce, čímž může dojít k vysoké zátěži
a měla by být užívána jen velice opatrně !!!
 


Ukázkový kód jednoduchého IFace naleznete zde.

Klávesy NUM PAD 2,4,8,6 a 0 emulují Kemspton joystick
Klávesa NUM 7 invertuje bajty čtené z video RAM a klávesa NUM 9 pozměnuje hodnotu na portu 0xFE (BORDER COLOR)
 

 

   RESPECTRUM, TapeEditor & TapeStudio  ©2019-2020 Milan "mYdloch" Kremel  respectrum@email.cz