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