/* PRIVATE VARIABLES **********************************************************/
-typedef struct _EMULATOR_IOPORT_HANDLERS
+typedef struct _EMULATOR_IO_HANDLERS
{
- /* For Windows compatibility only, not used internally */
- HANDLE hVdd; // == 0 if unused,
- // INVALID_HANDLE_VALUE if handled internally,
- // a valid VDD handle if handled externally.
- VDD_IO_HANDLERS VddIoHandlers;
-
- /* We use these members internally */
-
EMULATOR_INB_PROC InB;
EMULATOR_INW_PROC InW;
EMULATOR_IND_PROC InD;
EMULATOR_OUTSB_PROC OutsB;
EMULATOR_OUTSW_PROC OutsW;
EMULATOR_OUTSD_PROC OutsD;
+} EMULATOR_IO_HANDLERS, *PEMULATOR_IO_HANDLERS;
+
+typedef struct _EMULATOR_IOPORT_HANDLERS
+{
+ HANDLE hVdd; // == 0 if unused,
+ // INVALID_HANDLE_VALUE if handled internally,
+ // a valid VDD handle if handled externally.
+ union
+ {
+ /* For Windows compatibility only, not used internally... */
+ VDD_IO_HANDLERS VddIoHandlers;
+
+ /* ... we use these members internally */
+ EMULATOR_IO_HANDLERS IoHandlers;
+ };
} EMULATOR_IOPORT_HANDLERS, *PEMULATOR_IOPORT_HANDLERS;
/*
PUCHAR Buffer)
{
if (IoPortProc[Port].hVdd == INVALID_HANDLE_VALUE &&
- IoPortProc[Port].InB)
+ IoPortProc[Port].IoHandlers.InB)
{
- *Buffer = IoPortProc[Port].InB(Port);
+ *Buffer = IoPortProc[Port].IoHandlers.InB(Port);
}
else if (IoPortProc[Port].hVdd > 0 &&
IoPortProc[Port].VddIoHandlers.inb_handler)
ULONG Count)
{
if (IoPortProc[Port].hVdd == INVALID_HANDLE_VALUE &&
- IoPortProc[Port].InsB)
+ IoPortProc[Port].IoHandlers.InsB)
{
- IoPortProc[Port].InsB(Port, Buffer, Count);
+ IoPortProc[Port].IoHandlers.InsB(Port, Buffer, Count);
}
else if (IoPortProc[Port].hVdd > 0 &&
IoPortProc[Port].VddIoHandlers.insb_handler)
PUCHAR Buffer)
{
if (IoPortProc[Port].hVdd == INVALID_HANDLE_VALUE &&
- IoPortProc[Port].OutB)
+ IoPortProc[Port].IoHandlers.OutB)
{
- IoPortProc[Port].OutB(Port, *Buffer);
+ IoPortProc[Port].IoHandlers.OutB(Port, *Buffer);
}
else if (IoPortProc[Port].hVdd > 0 &&
IoPortProc[Port].VddIoHandlers.outb_handler)
ULONG Count)
{
if (IoPortProc[Port].hVdd == INVALID_HANDLE_VALUE &&
- IoPortProc[Port].OutsB)
+ IoPortProc[Port].IoHandlers.OutsB)
{
- IoPortProc[Port].OutsB(Port, Buffer, Count);
+ IoPortProc[Port].IoHandlers.OutsB(Port, Buffer, Count);
}
else if (IoPortProc[Port].hVdd > 0 &&
IoPortProc[Port].VddIoHandlers.outsb_handler)
PUSHORT Buffer)
{
if (IoPortProc[Port].hVdd == INVALID_HANDLE_VALUE &&
- IoPortProc[Port].InW)
+ IoPortProc[Port].IoHandlers.InW)
{
- *Buffer = IoPortProc[Port].InW(Port);
+ *Buffer = IoPortProc[Port].IoHandlers.InW(Port);
}
else if (IoPortProc[Port].hVdd > 0 &&
IoPortProc[Port].VddIoHandlers.inw_handler)
ULONG Count)
{
if (IoPortProc[Port].hVdd == INVALID_HANDLE_VALUE &&
- IoPortProc[Port].InsW)
+ IoPortProc[Port].IoHandlers.InsW)
{
- IoPortProc[Port].InsW(Port, Buffer, Count);
+ IoPortProc[Port].IoHandlers.InsW(Port, Buffer, Count);
}
else if (IoPortProc[Port].hVdd > 0 &&
IoPortProc[Port].VddIoHandlers.insw_handler)
PUSHORT Buffer)
{
if (IoPortProc[Port].hVdd == INVALID_HANDLE_VALUE &&
- IoPortProc[Port].OutW)
+ IoPortProc[Port].IoHandlers.OutW)
{
- IoPortProc[Port].OutW(Port, *Buffer);
+ IoPortProc[Port].IoHandlers.OutW(Port, *Buffer);
}
else if (IoPortProc[Port].hVdd > 0 &&
IoPortProc[Port].VddIoHandlers.outw_handler)
ULONG Count)
{
if (IoPortProc[Port].hVdd == INVALID_HANDLE_VALUE &&
- IoPortProc[Port].OutsW)
+ IoPortProc[Port].IoHandlers.OutsW)
{
- IoPortProc[Port].OutsW(Port, Buffer, Count);
+ IoPortProc[Port].IoHandlers.OutsW(Port, Buffer, Count);
}
else if (IoPortProc[Port].hVdd > 0 &&
IoPortProc[Port].VddIoHandlers.outsw_handler)
PULONG Buffer)
{
if (IoPortProc[Port].hVdd == INVALID_HANDLE_VALUE &&
- IoPortProc[Port].InD)
+ IoPortProc[Port].IoHandlers.InD)
{
- *Buffer = IoPortProc[Port].InD(Port);
+ *Buffer = IoPortProc[Port].IoHandlers.InD(Port);
}
else
{
ULONG Count)
{
if (IoPortProc[Port].hVdd == INVALID_HANDLE_VALUE &&
- IoPortProc[Port].InsD)
+ IoPortProc[Port].IoHandlers.InsD)
{
- IoPortProc[Port].InsD(Port, Buffer, Count);
+ IoPortProc[Port].IoHandlers.InsD(Port, Buffer, Count);
}
else
{
PULONG Buffer)
{
if (IoPortProc[Port].hVdd == INVALID_HANDLE_VALUE &&
- IoPortProc[Port].OutD)
+ IoPortProc[Port].IoHandlers.OutD)
{
- IoPortProc[Port].OutD(Port, *Buffer);
+ IoPortProc[Port].IoHandlers.OutD(Port, *Buffer);
}
else
{
ULONG Count)
{
if (IoPortProc[Port].hVdd == INVALID_HANDLE_VALUE &&
- IoPortProc[Port].OutsD)
+ IoPortProc[Port].IoHandlers.OutsD)
{
- IoPortProc[Port].OutsD(Port, Buffer, Count);
+ IoPortProc[Port].IoHandlers.OutsD(Port, Buffer, Count);
}
else
{
EMULATOR_INB_PROC InHandler,
EMULATOR_OUTB_PROC OutHandler)
{
- if (IoPortProc[Port].InB == NULL)
- IoPortProc[Port].InB = InHandler;
+ if (IoPortProc[Port].IoHandlers.InB == NULL)
+ IoPortProc[Port].IoHandlers.InB = InHandler;
else
- DPRINT1("IoPortProc[0x%X].InB already registered\n", Port);
+ DPRINT1("IoPortProc[0x%X].IoHandlers.InB already registered\n", Port);
- if (IoPortProc[Port].OutB == NULL)
- IoPortProc[Port].OutB = OutHandler;
+ if (IoPortProc[Port].IoHandlers.OutB == NULL)
+ IoPortProc[Port].IoHandlers.OutB = OutHandler;
else
- DPRINT1("IoPortProc[0x%X].OutB already registered\n", Port);
+ DPRINT1("IoPortProc[0x%X].IoHandlers.OutB already registered\n", Port);
/* We hold the I/O port internally */
IoPortProc[Port].hVdd = INVALID_HANDLE_VALUE;
IoPortProc[i].hVdd = hVdd;
/* Disable the internal handlers */
- IoPortProc[i].InB = NULL;
- IoPortProc[i].InW = NULL;
- IoPortProc[i].InD = NULL;
+ IoPortProc[i].IoHandlers.InB = NULL;
+ IoPortProc[i].IoHandlers.InW = NULL;
+ IoPortProc[i].IoHandlers.InD = NULL;
- IoPortProc[i].InsB = NULL;
- IoPortProc[i].InsW = NULL;
- IoPortProc[i].InsD = NULL;
+ IoPortProc[i].IoHandlers.InsB = NULL;
+ IoPortProc[i].IoHandlers.InsW = NULL;
+ IoPortProc[i].IoHandlers.InsD = NULL;
- IoPortProc[i].OutB = NULL;
- IoPortProc[i].OutW = NULL;
- IoPortProc[i].OutD = NULL;
+ IoPortProc[i].IoHandlers.OutB = NULL;
+ IoPortProc[i].IoHandlers.OutW = NULL;
+ IoPortProc[i].IoHandlers.OutD = NULL;
- IoPortProc[i].OutsB = NULL;
- IoPortProc[i].OutsW = NULL;
- IoPortProc[i].OutsD = NULL;
+ IoPortProc[i].IoHandlers.OutsB = NULL;
+ IoPortProc[i].IoHandlers.OutsW = NULL;
+ IoPortProc[i].IoHandlers.OutsD = NULL;
/* Save our handlers */
IoPortProc[i].VddIoHandlers = *IOhandler; // IOhandler[i]; ?????????