Author: hbelusca
Date: Mon Dec 23 18:17:29 2013
New Revision: 61358
URL:
http://svn.reactos.org/svn/reactos?rev=61358&view=rev
Log:
[NTVDM]
- Implement and export VDDInstallIOHook and VDDDeInstallIOHook; rework
EmulatorRead/WriteIo to take into account for different port handlers' sizes (byte,
word, dword). Still WIP and may be subject to renamings... RegisterIoPort needs to be
converted.
- Stubplement and export getIntelRegistersPointer.
- Export c_get/setXX functions which are aliases to get/setXX functions, for MIPS NTVDM
compatibility.
Modified:
branches/ntvdm/subsystems/ntvdm/io.c
branches/ntvdm/subsystems/ntvdm/io.h
branches/ntvdm/subsystems/ntvdm/ntvdm.h
branches/ntvdm/subsystems/ntvdm/ntvdm.spec
branches/ntvdm/subsystems/ntvdm/registers.c
branches/ntvdm/subsystems/ntvdm/registers.h
Modified: branches/ntvdm/subsystems/ntvdm/io.c
URL:
http://svn.reactos.org/svn/reactos/branches/ntvdm/subsystems/ntvdm/io.c?rev…
==============================================================================
--- branches/ntvdm/subsystems/ntvdm/io.c [iso-8859-1] (original)
+++ branches/ntvdm/subsystems/ntvdm/io.c [iso-8859-1] Mon Dec 23 18:17:29 2013
@@ -16,38 +16,281 @@
/* PRIVATE VARIABLES **********************************************************/
-typedef struct _EMULATOR_IOPORT_HANDLER
-{
- EMULATOR_IN_PROC In;
- EMULATOR_OUT_PROC Out;
-} EMULATOR_IOPORT_HANDLER, *PEMULATOR_IOPORT_HANDLER;
+typedef struct _EMULATOR_IOPORT_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 internally these members */
+ // EMULATOR_IN_PROC In;
+ // EMULATOR_OUT_PROC Out;
+
+
+ EMULATOR_INB_PROC InB;
+ EMULATOR_INW_PROC InW;
+ EMULATOR_IND_PROC InD;
+
+ EMULATOR_INSB_PROC InsB;
+ EMULATOR_INSW_PROC InsW;
+ EMULATOR_INSD_PROC InsD;
+
+ EMULATOR_OUTB_PROC OutB;
+ EMULATOR_OUTW_PROC OutW;
+ EMULATOR_OUTD_PROC OutD;
+
+ EMULATOR_OUTSB_PROC OutsB;
+ EMULATOR_OUTSW_PROC OutsW;
+ EMULATOR_OUTSD_PROC OutsD;
+} EMULATOR_IOPORT_HANDLERS, *PEMULATOR_IOPORT_HANDLERS;
/*
* This is the list of registered I/O Port handlers.
*/
-EMULATOR_IOPORT_HANDLER IoPortProc[EMULATOR_MAX_IOPORTS_NUM];
+EMULATOR_IOPORT_HANDLERS IoPortProc[EMULATOR_MAX_IOPORTS_NUM] = {{NULL}};
+
+/* PRIVATE FUNCTIONS **********************************************************/
+
+static VOID
+IOReadB(ULONG Port,
+ PUCHAR Buffer)
+{
+ if (IoPortProc[Port].InB)
+ {
+ *Buffer = IoPortProc[Port].InB(Port);
+ }
+ else
+ {
+ /* Return an empty port byte value */
+ DPRINT1("Read from unknown port: 0x%X\n", Port);
+ *Buffer = 0xFF;
+ }
+}
+
+static VOID
+IOReadStrB(ULONG Port,
+ PUCHAR Buffer,
+ ULONG Count)
+{
+ if (IoPortProc[Port].InsB)
+ {
+ IoPortProc[Port].InsB(Port, Buffer, Count);
+ }
+ else
+ {
+ while (Count--)
+ {
+ IOReadB(Port, Buffer++);
+ }
+ }
+}
+
+static VOID
+IOWriteB(ULONG Port,
+ PUCHAR Buffer)
+{
+ if (IoPortProc[Port].OutB)
+ {
+ IoPortProc[Port].OutB(Port, *Buffer);
+ }
+ else
+ {
+ /* Do nothing */
+ DPRINT1("Write to unknown port: 0x%X\n", Port);
+ }
+}
+
+static VOID
+IOWriteStrB(ULONG Port,
+ PUCHAR Buffer,
+ ULONG Count)
+{
+ if (IoPortProc[Port].OutsB)
+ {
+ IoPortProc[Port].OutsB(Port, Buffer, Count);
+ }
+ else
+ {
+ while (Count--)
+ {
+ IOWriteB(Port, Buffer++);
+ }
+ }
+}
+
+static VOID
+IOReadW(ULONG Port,
+ PUSHORT Buffer)
+{
+ if (IoPortProc[Port].InW)
+ {
+ *Buffer = IoPortProc[Port].InW(Port);
+ }
+ else
+ {
+ UCHAR Low, High;
+
+ // FIXME: Is it ok on Little endian and Big endian ??
+ IOReadB(Port, &Low);
+ IOReadB(Port + sizeof(UCHAR), &High);
+ *Buffer = MAKEWORD(Low, High);
+ }
+}
+
+static VOID
+IOReadStrW(ULONG Port,
+ PUSHORT Buffer,
+ ULONG Count)
+{
+ if (IoPortProc[Port].InsW)
+ {
+ IoPortProc[Port].InsW(Port, Buffer, Count);
+ }
+ else
+ {
+ while (Count--)
+ {
+ IOReadW(Port, Buffer++);
+ }
+ }
+}
+
+static VOID
+IOWriteW(ULONG Port,
+ PUSHORT Buffer)
+{
+ if (IoPortProc[Port].OutW)
+ {
+ IoPortProc[Port].OutW(Port, *Buffer);
+ }
+ else
+ {
+ UCHAR Low, High;
+
+ // FIXME: Is it ok on Little endian and Big endian ??
+ Low = LOBYTE(*Buffer);
+ High = HIBYTE(*Buffer);
+ IOWriteB(Port, &Low);
+ IOWriteB(Port + sizeof(UCHAR), &High);
+ }
+}
+
+static VOID
+IOWriteStrW(ULONG Port,
+ PUSHORT Buffer,
+ ULONG Count)
+{
+ if (IoPortProc[Port].OutsW)
+ {
+ IoPortProc[Port].OutsW(Port, Buffer, Count);
+ }
+ else
+ {
+ while (Count--)
+ {
+ IOWriteW(Port, Buffer++);
+ }
+ }
+}
+
+static VOID
+IOReadD(ULONG Port,
+ PULONG Buffer)
+{
+ if (IoPortProc[Port].InD)
+ {
+ *Buffer = IoPortProc[Port].InD(Port);
+ }
+ else
+ {
+ USHORT Low, High;
+
+ // FIXME: Is it ok on Little endian and Big endian ??
+ IOReadW(Port, &Low);
+ IOReadW(Port + sizeof(USHORT), &High);
+ *Buffer = MAKELONG(Low, High);
+ }
+}
+
+static VOID
+IOReadStrD(ULONG Port,
+ PULONG Buffer,
+ ULONG Count)
+{
+ if (IoPortProc[Port].InsD)
+ {
+ IoPortProc[Port].InsD(Port, Buffer, Count);
+ }
+ else
+ {
+ while (Count--)
+ {
+ IOReadD(Port, Buffer++);
+ }
+ }
+}
+
+static VOID
+IOWriteD(ULONG Port,
+ PULONG Buffer)
+{
+ if (IoPortProc[Port].OutD)
+ {
+ IoPortProc[Port].OutD(Port, *Buffer);
+ }
+ else
+ {
+ USHORT Low, High;
+
+ // FIXME: Is it ok on Little endian and Big endian ??
+ Low = LOWORD(*Buffer);
+ High = HIWORD(*Buffer);
+ IOWriteW(Port, &Low);
+ IOWriteW(Port + sizeof(USHORT), &High);
+ }
+}
+
+static VOID
+IOWriteStrD(ULONG Port,
+ PULONG Buffer,
+ ULONG Count)
+{
+ if (IoPortProc[Port].OutsD)
+ {
+ IoPortProc[Port].OutsD(Port, Buffer, Count);
+ }
+ else
+ {
+ while (Count--)
+ {
+ IOWriteD(Port, Buffer++);
+ }
+ }
+}
/* PUBLIC FUNCTIONS ***********************************************************/
-VOID WINAPI RegisterIoPort(ULONG Port,
- EMULATOR_IN_PROC InHandler,
- EMULATOR_OUT_PROC OutHandler)
-{
- if (IoPortProc[Port].In == NULL)
- IoPortProc[Port].In = InHandler;
- else
- DPRINT1("IoPortProc[0x%X].In already registered\n", Port);
-
- if (IoPortProc[Port].Out == NULL)
- IoPortProc[Port].Out = OutHandler;
- else
- DPRINT1("IoPortProc[0x%X].Out already registered\n", Port);
-}
-
-VOID WINAPI UnregisterIoPort(ULONG Port)
-{
- IoPortProc[Port].In = NULL;
- IoPortProc[Port].Out = NULL;
+VOID RegisterIoPort(ULONG Port,
+ EMULATOR_INB_PROC InHandler,
+ EMULATOR_OUTB_PROC OutHandler)
+{
+ if (IoPortProc[Port].InB == NULL)
+ IoPortProc[Port].InB = InHandler;
+ else
+ DPRINT1("IoPortProc[0x%X].InB already registered\n", Port);
+
+ if (IoPortProc[Port].OutB == NULL)
+ IoPortProc[Port].OutB = OutHandler;
+ else
+ DPRINT1("IoPortProc[0x%X].OutB already registered\n", Port);
+}
+
+VOID UnregisterIoPort(ULONG Port)
+{
+ IoPortProc[Port].InB = NULL;
+ IoPortProc[Port].OutB = NULL;
}
VOID WINAPI
@@ -57,24 +300,73 @@
ULONG DataCount,
UCHAR DataSize)
{
- INT i, j;
- LPBYTE Address = (LPBYTE)Buffer;
-
UNREFERENCED_PARAMETER(State);
- for (i = 0; i < DataCount; i++) for (j = 0; j < DataSize; j++)
- {
- ULONG CurrentPort = Port + j;
-
- /* Call the IN Port handler */
- if (IoPortProc[CurrentPort].In != NULL)
- {
- *(Address++) = IoPortProc[CurrentPort].In(CurrentPort);
- }
+ if (DataSize == 0 || DataCount == 0) return;
+
+ if (DataSize == sizeof(UCHAR))
+ {
+ if (DataCount == 1)
+ IOReadB(Port, Buffer);
else
- {
- DPRINT1("Read from unknown port: 0x%X\n", CurrentPort);
- *(Address++) = 0xFF; // Empty port value
+ IOReadStrB(Port, Buffer, DataCount);
+ }
+ else if (DataSize == sizeof(USHORT))
+ {
+ if (DataCount == 1)
+ IOReadW(Port, Buffer);
+ else
+ IOReadStrW(Port, Buffer, DataCount);
+ }
+ else if (DataSize == sizeof(ULONG))
+ {
+ if (DataCount == 1)
+ IOReadD(Port, Buffer);
+ else
+ IOReadStrD(Port, Buffer, DataCount);
+ }
+ else
+ {
+ PBYTE Address = (PBYTE)Buffer;
+
+ while (DataCount--)
+ {
+ ULONG CurrentPort = Port;
+ ULONG Count;
+ UCHAR NewDataSize = DataSize;
+
+ /* Read dword */
+ Count = NewDataSize / sizeof(ULONG);
+ NewDataSize = NewDataSize % sizeof(ULONG);
+ while (Count--)
+ {
+ IOReadD(CurrentPort, (PULONG)Address);
+ CurrentPort += sizeof(ULONG);
+ Address += sizeof(ULONG);
+ }
+
+ /* Read word */
+ Count = NewDataSize / sizeof(USHORT);
+ NewDataSize = NewDataSize % sizeof(USHORT);
+ while (Count--)
+ {
+ IOReadW(CurrentPort, (PUSHORT)Address);
+ CurrentPort += sizeof(USHORT);
+ Address += sizeof(USHORT);
+ }
+
+ /* Read byte */
+ Count = NewDataSize / sizeof(UCHAR);
+ NewDataSize = NewDataSize % sizeof(UCHAR);
+ while (Count--)
+ {
+ IOReadB(CurrentPort, (PUCHAR)Address);
+ CurrentPort += sizeof(UCHAR);
+ Address += sizeof(UCHAR);
+ }
+
+ ASSERT(Count == 0);
+ ASSERT(NewDataSize == 0);
}
}
}
@@ -86,20 +378,174 @@
ULONG DataCount,
UCHAR DataSize)
{
- INT i, j;
- LPBYTE Address = (LPBYTE)Buffer;
-
UNREFERENCED_PARAMETER(State);
- for (i = 0; i < DataCount; i++) for (j = 0; j < DataSize; j++)
- {
- ULONG CurrentPort = Port + j;
-
- /* Call the OUT Port handler */
- if (IoPortProc[CurrentPort].Out != NULL)
- IoPortProc[CurrentPort].Out(CurrentPort, *(Address++));
+ if (DataSize == 0 || DataCount == 0) return;
+
+ if (DataSize == sizeof(UCHAR))
+ {
+ if (DataCount == 1)
+ IOWriteB(Port, Buffer);
else
- DPRINT1("Write to unknown port: 0x%X\n", CurrentPort);
+ IOWriteStrB(Port, Buffer, DataCount);
+ }
+ else if (DataSize == sizeof(USHORT))
+ {
+ if (DataCount == 1)
+ IOWriteW(Port, Buffer);
+ else
+ IOWriteStrW(Port, Buffer, DataCount);
+ }
+ else if (DataSize == sizeof(ULONG))
+ {
+ if (DataCount == 1)
+ IOWriteD(Port, Buffer);
+ else
+ IOWriteStrD(Port, Buffer, DataCount);
+ }
+ else
+ {
+ PBYTE Address = (PBYTE)Buffer;
+
+ while (DataCount--)
+ {
+ ULONG CurrentPort = Port;
+ ULONG Count;
+ UCHAR NewDataSize = DataSize;
+
+ /* Write dword */
+ Count = NewDataSize / sizeof(ULONG);
+ NewDataSize = NewDataSize % sizeof(ULONG);
+ while (Count--)
+ {
+ IOWriteD(CurrentPort, (PULONG)Address);
+ CurrentPort += sizeof(ULONG);
+ Address += sizeof(ULONG);
+ }
+
+ /* Write word */
+ Count = NewDataSize / sizeof(USHORT);
+ NewDataSize = NewDataSize % sizeof(USHORT);
+ while (Count--)
+ {
+ IOWriteW(CurrentPort, (PUSHORT)Address);
+ CurrentPort += sizeof(USHORT);
+ Address += sizeof(USHORT);
+ }
+
+ /* Write byte */
+ Count = NewDataSize / sizeof(UCHAR);
+ NewDataSize = NewDataSize % sizeof(UCHAR);
+ while (Count--)
+ {
+ IOWriteB(CurrentPort, (PUCHAR)Address);
+ CurrentPort += sizeof(UCHAR);
+ Address += sizeof(UCHAR);
+ }
+
+ ASSERT(Count == 0);
+ ASSERT(NewDataSize == 0);
+ }
+ }
+}
+
+
+
+BOOL
+WINAPI
+VDDInstallIOHook(HANDLE hVdd,
+ WORD cPortRange,
+ PVDD_IO_PORTRANGE pPortRange,
+ PVDD_IO_HANDLERS IOhandler)
+{
+ /* Check possible validity of the VDD handle */
+ if (hVdd == 0 || hVdd == INVALID_HANDLE_VALUE) return FALSE;
+
+ /* Loop for each range of I/O ports */
+ while (cPortRange--)
+ {
+ WORD i;
+
+ /* Register the range of I/O ports */
+ for (i = pPortRange->First; i <= pPortRange->Last; ++i)
+ {
+ /*
+ * Don't do anything if the I/O port is already
+ * handled internally or externally.
+ */
+ if (IoPortProc[i].hVdd != 0)
+ {
+ DPRINT1("IoPortProc[0x%X] already registered\n", i);
+ continue;
+ }
+
+ /* Register wrt. the VDD */
+ IoPortProc[i].hVdd = hVdd;
+
+ /* Disable the internal handlers */
+ IoPortProc[i].InB = NULL;
+ IoPortProc[i].InW = NULL;
+ IoPortProc[i].InD = NULL;
+
+ IoPortProc[i].InsB = NULL;
+ IoPortProc[i].InsW = NULL;
+ IoPortProc[i].InsD = NULL;
+
+ IoPortProc[i].OutB = NULL;
+ IoPortProc[i].OutW = NULL;
+ IoPortProc[i].OutD = NULL;
+
+ IoPortProc[i].OutsB = NULL;
+ IoPortProc[i].OutsW = NULL;
+ IoPortProc[i].OutsD = NULL;
+
+ /* Save our handlers */
+ IoPortProc[i].VddIoHandlers = *IOhandler; // IOhandler[i]; ?????????
+ }
+
+ /* Go to next range */
+ ++pPortRange;
+ }
+
+ return TRUE;
+}
+
+VOID
+WINAPI
+VDDDeInstallIOHook(HANDLE hVdd,
+ WORD cPortRange,
+ PVDD_IO_PORTRANGE pPortRange)
+{
+ /* Check possible validity of the VDD handle */
+ if (hVdd == 0 || hVdd == INVALID_HANDLE_VALUE) return;
+
+ /* Loop for each range of I/O ports */
+ while (cPortRange--)
+ {
+ WORD i;
+
+ /* Unregister the range of I/O ports */
+ for (i = pPortRange->First; i <= pPortRange->Last; ++i)
+ {
+ /*
+ * Don't do anything if we don't own the I/O port.
+ */
+ if (IoPortProc[i].hVdd != hVdd)
+ {
+ DPRINT1("IoPortProc[0x%X] owned by somebody else\n", i);
+ continue;
+ }
+
+ /*
+ * Put automagically all the fields to zero:
+ * the hVdd gets unregistered as well as all the handlers.
+ */
+ // IoPortProc[i] = {NULL};
+ ZeroMemory(&IoPortProc[i], sizeof(IoPortProc[i]));
+ }
+
+ /* Go to next range */
+ ++pPortRange;
}
}
Modified: branches/ntvdm/subsystems/ntvdm/io.h
URL:
http://svn.reactos.org/svn/reactos/branches/ntvdm/subsystems/ntvdm/io.h?rev…
==============================================================================
--- branches/ntvdm/subsystems/ntvdm/io.h [iso-8859-1] (original)
+++ branches/ntvdm/subsystems/ntvdm/io.h [iso-8859-1] Mon Dec 23 18:17:29 2013
@@ -16,14 +16,28 @@
/* FUNCTIONS ******************************************************************/
-typedef BYTE (WINAPI *EMULATOR_IN_PROC)(ULONG Port);
-typedef VOID (WINAPI *EMULATOR_OUT_PROC)(ULONG Port, BYTE Data);
+typedef UCHAR (WINAPI *EMULATOR_INB_PROC)(ULONG Port);
+typedef USHORT (WINAPI *EMULATOR_INW_PROC)(ULONG Port);
+typedef ULONG (WINAPI *EMULATOR_IND_PROC)(ULONG Port);
-VOID WINAPI RegisterIoPort(ULONG Port,
- EMULATOR_IN_PROC InHandler,
- EMULATOR_OUT_PROC OutHandler);
+typedef VOID (WINAPI *EMULATOR_INSB_PROC)(ULONG Port, PUCHAR Buffer, ULONG Count);
+typedef VOID (WINAPI *EMULATOR_INSW_PROC)(ULONG Port, PUSHORT Buffer, ULONG Count);
+typedef VOID (WINAPI *EMULATOR_INSD_PROC)(ULONG Port, PULONG Buffer, ULONG Count);
-VOID WINAPI UnregisterIoPort(ULONG Port);
+typedef VOID (WINAPI *EMULATOR_OUTB_PROC)(ULONG Port, UCHAR Data);
+typedef VOID (WINAPI *EMULATOR_OUTW_PROC)(ULONG Port, USHORT Data);
+typedef VOID (WINAPI *EMULATOR_OUTD_PROC)(ULONG Port, ULONG Data);
+
+typedef VOID (WINAPI *EMULATOR_OUTSB_PROC)(ULONG Port, PUCHAR Buffer, ULONG Count);
+typedef VOID (WINAPI *EMULATOR_OUTSW_PROC)(ULONG Port, PUSHORT Buffer, ULONG Count);
+typedef VOID (WINAPI *EMULATOR_OUTSD_PROC)(ULONG Port, PULONG Buffer, ULONG Count);
+
+
+VOID RegisterIoPort(ULONG Port,
+ EMULATOR_INB_PROC InHandler,
+ EMULATOR_OUTB_PROC OutHandler);
+
+VOID UnregisterIoPort(ULONG Port);
VOID WINAPI EmulatorReadIo
(
Modified: branches/ntvdm/subsystems/ntvdm/ntvdm.h
URL:
http://svn.reactos.org/svn/reactos/branches/ntvdm/subsystems/ntvdm/ntvdm.h?…
==============================================================================
--- branches/ntvdm/subsystems/ntvdm/ntvdm.h [iso-8859-1] (original)
+++ branches/ntvdm/subsystems/ntvdm/ntvdm.h [iso-8859-1] Mon Dec 23 18:17:29 2013
@@ -21,7 +21,10 @@
#include <wingdi.h>
#include <wincon.h>
#include <winnls.h>
+#include <winreg.h>
#include <winuser.h>
+
+#include <nt_vdd.h>
#include <debug.h>
Modified: branches/ntvdm/subsystems/ntvdm/ntvdm.spec
URL:
http://svn.reactos.org/svn/reactos/branches/ntvdm/subsystems/ntvdm/ntvdm.sp…
==============================================================================
--- branches/ntvdm/subsystems/ntvdm/ntvdm.spec [iso-8859-1] (original)
+++ branches/ntvdm/subsystems/ntvdm/ntvdm.spec [iso-8859-1] Mon Dec 23 18:17:29 2013
@@ -31,7 +31,7 @@
@ stdcall getFS()
@ stdcall getGS()
@ stdcall getIF()
-; @ stdcall getIntelRegistersPointer()
+@ stdcall getIntelRegistersPointer()
@ stdcall getIP()
@ stdcall getMSW()
@ stdcall getOF()
@@ -41,8 +41,6 @@
@ stdcall getSP()
@ stdcall getSS()
@ stdcall getZF()
-
-
@ stdcall setAF(long)
@ stdcall setAH(long)
@@ -88,6 +86,96 @@
@ stdcall setZF(long)
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; NTVDM CCPU MIPS exports ;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+@ stdcall c_getAF() getAF
+@ stdcall c_getAH() getAH
+@ stdcall c_getAL() getAL
+@ stdcall c_getAX() getAX
+@ stdcall c_getBH() getBH
+@ stdcall c_getBL() getBL
+@ stdcall c_getBP() getBP
+@ stdcall c_getBX() getBX
+@ stdcall c_getCF() getCF
+@ stdcall c_getCH() getCH
+@ stdcall c_getCL() getCL
+@ stdcall c_getCS() getCS
+@ stdcall c_getCX() getCX
+@ stdcall c_getDF() getDF
+@ stdcall c_getDH() getDH
+@ stdcall c_getDI() getDI
+@ stdcall c_getDL() getDL
+@ stdcall c_getDS() getDS
+@ stdcall c_getDX() getDX
+@ stdcall c_getEAX() getEAX
+@ stdcall c_getEBP() getEBP
+@ stdcall c_getEBX() getEBX
+@ stdcall c_getECX() getECX
+@ stdcall c_getEDI() getEDI
+@ stdcall c_getEDX() getEDX
+@ stdcall c_getEIP() getEIP
+@ stdcall c_getES() getES
+@ stdcall c_getESI() getESI
+@ stdcall c_getESP() getESP
+@ stdcall c_getFS() getFS
+@ stdcall c_getGS() getGS
+@ stdcall c_getIF() getIF
+@ stdcall c_getIP() getIP
+@ stdcall c_getMSW() getMSW
+@ stdcall c_getOF() getOF
+@ stdcall c_getPF() getPF
+@ stdcall c_getSF() getSF
+@ stdcall c_getSI() getSI
+@ stdcall c_getSP() getSP
+@ stdcall c_getSS() getSS
+@ stdcall c_getZF() getZF
+
+@ stdcall c_setAF(long) setAF
+@ stdcall c_setAH(long) setAH
+@ stdcall c_setAL(long) setAL
+@ stdcall c_setAX(long) setAX
+@ stdcall c_setBH(long) setBH
+@ stdcall c_setBL(long) setBL
+@ stdcall c_setBP(long) setBP
+@ stdcall c_setBX(long) setBX
+@ stdcall c_setCF(long) setCF
+@ stdcall c_setCH(long) setCH
+@ stdcall c_setCL(long) setCL
+@ stdcall c_setCS(long) setCS
+@ stdcall c_setCX(long) setCX
+@ stdcall c_setDF(long) setDF
+@ stdcall c_setDH(long) setDH
+@ stdcall c_setDI(long) setDI
+@ stdcall c_setDL(long) setDL
+@ stdcall c_setDS(long) setDS
+@ stdcall c_setDX(long) setDX
+@ stdcall c_setEAX(long) setEAX
+@ stdcall c_setEBP(long) setEBP
+@ stdcall c_setEBX(long) setEBX
+@ stdcall c_setECX(long) setECX
+@ stdcall c_setEDI(long) setEDI
+@ stdcall c_setEDX(long) setEDX
+@ stdcall c_setEIP(long) setEIP
+@ stdcall c_setES(long) setES
+@ stdcall c_setESI(long) setESI
+@ stdcall c_setESP(long) setESP
+@ stdcall c_setFS(long) setFS
+@ stdcall c_setGS(long) setGS
+@ stdcall c_setIF(long) setIF
+@ stdcall c_setIP(long) setIP
+@ stdcall c_setMSW(long) setMSW
+@ stdcall c_setOF(long) setOF
+@ stdcall c_setPF(long) setPF
+@ stdcall c_setSF(long) setSF
+@ stdcall c_setSI(long) setSI
+@ stdcall c_setSP(long) setSP
+@ stdcall c_setSS(long) setSS
+@ stdcall c_setZF(long) setZF
+
+
+
+
@ stdcall MGetVdmPointer(long long long)
@ stdcall Sim32pGetVDMPointer(long long)
@@ -95,3 +183,6 @@
;@ stdcall VdmFlushCache(long long long long) ; Not exported on x86
@ stdcall VdmMapFlat(long long long)
;@ stdcall VdmUnmapFlat(long long ptr long) ; Not exported on x86
+
+@ stdcall VDDInstallIOHook(long long ptr ptr)
+@ stdcall VDDDeInstallIOHook(long long ptr)
Modified: branches/ntvdm/subsystems/ntvdm/registers.c
URL:
http://svn.reactos.org/svn/reactos/branches/ntvdm/subsystems/ntvdm/register…
==============================================================================
--- branches/ntvdm/subsystems/ntvdm/registers.c [iso-8859-1] (original)
+++ branches/ntvdm/subsystems/ntvdm/registers.c [iso-8859-1] Mon Dec 23 18:17:29 2013
@@ -37,6 +37,14 @@
+PVOID
+WINAPI
+getIntelRegistersPointer(VOID)
+{
+ UNIMPLEMENTED;
+ return NULL;
+}
+
ULONG
WINAPI
getEAX(VOID)
Modified: branches/ntvdm/subsystems/ntvdm/registers.h
URL:
http://svn.reactos.org/svn/reactos/branches/ntvdm/subsystems/ntvdm/register…
==============================================================================
--- branches/ntvdm/subsystems/ntvdm/registers.h [iso-8859-1] (original)
+++ branches/ntvdm/subsystems/ntvdm/registers.h [iso-8859-1] Mon Dec 23 18:17:29 2013
@@ -13,6 +13,8 @@
VOID EmulatorSetStack(WORD Segment, DWORD Offset);
+
+PVOID WINAPI getIntelRegistersPointer(VOID);
ULONG WINAPI getEAX(VOID);
VOID WINAPI setEAX(ULONG);