- Thanks Thomas for having pointed me towards the fact that the NTVDM exports were really STDCALL and not CDECL (as I've thought first, because originally I was checking whether the getXX() functions were stdcall or not, and distinguishing VOID stdcall or cdecl functions without the symbols was hopeless).
- Halfplement and export Sim32pGetVDMPointer and MGetVdmPointer, needed to run correctly the RageStorm "galaxy" sample mentioned yesterday (see revision 61283). Now it loads and the dispatch call works \o/
- VDD_INIT_PROC and VDD_DISPATCH_PROC have the same signature --> rename them to VDD_PROC.

Have fun at testing!

svn path=/branches/ntvdm/; revision=61286
This commit is contained in:
Hermès Bélusca-Maïto 2013-12-17 22:10:58 +00:00
parent ed874b41fc
commit 90ab15cf66
5 changed files with 290 additions and 265 deletions

View file

@ -171,4 +171,25 @@ VOID EmulatorSetA20(BOOLEAN Enabled)
A20Line = Enabled; A20Line = Enabled;
} }
PBYTE WINAPI Sim32pGetVDMPointer(ULONG Address, BOOL ProtectedMode)
{
// FIXME
UNREFERENCED_PARAMETER(ProtectedMode);
/*
* HIWORD(Address) == Segment (if ProtectedMode == FALSE)
* or Selector (if ProtectedMode == TRUE )
* LOWORD(Address) == Offset
*/
return SEG_OFF_TO_PTR(HIWORD(Address), LOWORD(Address));
}
PBYTE WINAPI MGetVdmPointer(ULONG Address, ULONG Size, BOOL ProtectedMode)
{
UNREFERENCED_PARAMETER(Size);
return Sim32pGetVDMPointer(Address, ProtectedMode);
}
/* EOF */ /* EOF */

View file

@ -1,88 +1,93 @@
@ cdecl getAF() @ stdcall getAF()
@ cdecl getAH() @ stdcall getAH()
@ cdecl getAL() @ stdcall getAL()
@ cdecl getAX() @ stdcall getAX()
@ cdecl getBH() @ stdcall getBH()
@ cdecl getBL() @ stdcall getBL()
@ cdecl getBP() @ stdcall getBP()
@ cdecl getBX() @ stdcall getBX()
@ cdecl getCF() @ stdcall getCF()
@ cdecl getCH() @ stdcall getCH()
@ cdecl getCL() @ stdcall getCL()
@ cdecl getCS() @ stdcall getCS()
@ cdecl getCX() @ stdcall getCX()
@ cdecl getDF() @ stdcall getDF()
@ cdecl getDH() @ stdcall getDH()
@ cdecl getDI() @ stdcall getDI()
@ cdecl getDL() @ stdcall getDL()
@ cdecl getDS() @ stdcall getDS()
@ cdecl getDX() @ stdcall getDX()
@ cdecl getEAX() @ stdcall getEAX()
@ cdecl getEBP() @ stdcall getEBP()
@ cdecl getEBX() @ stdcall getEBX()
@ cdecl getECX() @ stdcall getECX()
@ cdecl getEDI() @ stdcall getEDI()
@ cdecl getEDX() @ stdcall getEDX()
@ cdecl getEFLAGS() @ stdcall getEFLAGS()
@ cdecl getEIP() @ stdcall getEIP()
@ cdecl getES() @ stdcall getES()
@ cdecl getESI() @ stdcall getESI()
@ cdecl getESP() @ stdcall getESP()
@ cdecl getFS() @ stdcall getFS()
@ cdecl getGS() @ stdcall getGS()
@ cdecl getIF() @ stdcall getIF()
; @ cdecl getIntelRegistersPointer() ; @ stdcall getIntelRegistersPointer()
@ cdecl getIP() @ stdcall getIP()
@ cdecl getMSW() @ stdcall getMSW()
@ cdecl getOF() @ stdcall getOF()
@ cdecl getPF() @ stdcall getPF()
@ cdecl getSF() @ stdcall getSF()
@ cdecl getSI() @ stdcall getSI()
@ cdecl getSP() @ stdcall getSP()
@ cdecl getSS() @ stdcall getSS()
@ cdecl getZF() @ stdcall getZF()
@ cdecl setAF(long) @ stdcall setAF(long)
@ cdecl setAH(long) @ stdcall setAH(long)
@ cdecl setAL(long) @ stdcall setAL(long)
@ cdecl setAX(long) @ stdcall setAX(long)
@ cdecl setBH(long) @ stdcall setBH(long)
@ cdecl setBL(long) @ stdcall setBL(long)
@ cdecl setBP(long) @ stdcall setBP(long)
@ cdecl setBX(long) @ stdcall setBX(long)
@ cdecl setCF(long) @ stdcall setCF(long)
@ cdecl setCH(long) @ stdcall setCH(long)
@ cdecl setCL(long) @ stdcall setCL(long)
@ cdecl setCS(long) @ stdcall setCS(long)
@ cdecl setCX(long) @ stdcall setCX(long)
@ cdecl setDF(long) @ stdcall setDF(long)
@ cdecl setDH(long) @ stdcall setDH(long)
@ cdecl setDI(long) @ stdcall setDI(long)
@ cdecl setDL(long) @ stdcall setDL(long)
@ cdecl setDS(long) @ stdcall setDS(long)
@ cdecl setDX(long) @ stdcall setDX(long)
@ cdecl setEAX(long) @ stdcall setEAX(long)
@ cdecl setEBP(long) @ stdcall setEBP(long)
@ cdecl setEBX(long) @ stdcall setEBX(long)
@ cdecl setECX(long) @ stdcall setECX(long)
@ cdecl setEDI(long) @ stdcall setEDI(long)
@ cdecl setEDX(long) @ stdcall setEDX(long)
@ cdecl setEFLAGS(long) @ stdcall setEFLAGS(long)
@ cdecl setEIP(long) @ stdcall setEIP(long)
@ cdecl setES(long) @ stdcall setES(long)
@ cdecl setESI(long) @ stdcall setESI(long)
@ cdecl setESP(long) @ stdcall setESP(long)
@ cdecl setFS(long) @ stdcall setFS(long)
@ cdecl setGS(long) @ stdcall setGS(long)
@ cdecl setIF(long) @ stdcall setIF(long)
@ cdecl setIP(long) @ stdcall setIP(long)
@ cdecl setMSW(long) @ stdcall setMSW(long)
@ cdecl setOF(long) @ stdcall setOF(long)
@ cdecl setPF(long) @ stdcall setPF(long)
@ cdecl setSF(long) @ stdcall setSF(long)
@ cdecl setSI(long) @ stdcall setSI(long)
@ cdecl setSP(long) @ stdcall setSP(long)
@ cdecl setSS(long) @ stdcall setSS(long)
@ cdecl setZF(long) @ stdcall setZF(long)
@ stdcall MGetVdmPointer(long long long)
@ stdcall Sim32pGetVDMPointer(long long)

View file

@ -38,112 +38,112 @@ VOID EmulatorSetStack(WORD Segment, DWORD Offset)
ULONG ULONG
CDECL WINAPI
getEAX(VOID) getEAX(VOID)
{ {
return EmulatorContext.GeneralRegs[FAST486_REG_EAX].Long; return EmulatorContext.GeneralRegs[FAST486_REG_EAX].Long;
} }
VOID VOID
CDECL WINAPI
setEAX(ULONG Value) setEAX(ULONG Value)
{ {
EmulatorContext.GeneralRegs[FAST486_REG_EAX].Long = Value; EmulatorContext.GeneralRegs[FAST486_REG_EAX].Long = Value;
} }
USHORT USHORT
CDECL WINAPI
getAX(VOID) getAX(VOID)
{ {
return EmulatorContext.GeneralRegs[FAST486_REG_EAX].LowWord; return EmulatorContext.GeneralRegs[FAST486_REG_EAX].LowWord;
} }
VOID VOID
CDECL WINAPI
setAX(USHORT Value) setAX(USHORT Value)
{ {
EmulatorContext.GeneralRegs[FAST486_REG_EAX].LowWord = Value; EmulatorContext.GeneralRegs[FAST486_REG_EAX].LowWord = Value;
} }
UCHAR UCHAR
CDECL WINAPI
getAH(VOID) getAH(VOID)
{ {
return EmulatorContext.GeneralRegs[FAST486_REG_EAX].HighByte; return EmulatorContext.GeneralRegs[FAST486_REG_EAX].HighByte;
} }
VOID VOID
CDECL WINAPI
setAH(UCHAR Value) setAH(UCHAR Value)
{ {
EmulatorContext.GeneralRegs[FAST486_REG_EAX].HighByte = Value; EmulatorContext.GeneralRegs[FAST486_REG_EAX].HighByte = Value;
} }
UCHAR UCHAR
CDECL WINAPI
getAL(VOID) getAL(VOID)
{ {
return EmulatorContext.GeneralRegs[FAST486_REG_EAX].LowByte; return EmulatorContext.GeneralRegs[FAST486_REG_EAX].LowByte;
} }
VOID VOID
CDECL WINAPI
setAL(UCHAR Value) setAL(UCHAR Value)
{ {
EmulatorContext.GeneralRegs[FAST486_REG_EAX].LowByte = Value; EmulatorContext.GeneralRegs[FAST486_REG_EAX].LowByte = Value;
} }
ULONG ULONG
CDECL WINAPI
getEBX(VOID) getEBX(VOID)
{ {
return EmulatorContext.GeneralRegs[FAST486_REG_EBX].Long; return EmulatorContext.GeneralRegs[FAST486_REG_EBX].Long;
} }
VOID VOID
CDECL WINAPI
setEBX(ULONG Value) setEBX(ULONG Value)
{ {
EmulatorContext.GeneralRegs[FAST486_REG_EBX].Long = Value; EmulatorContext.GeneralRegs[FAST486_REG_EBX].Long = Value;
} }
USHORT USHORT
CDECL WINAPI
getBX(VOID) getBX(VOID)
{ {
return EmulatorContext.GeneralRegs[FAST486_REG_EBX].LowWord; return EmulatorContext.GeneralRegs[FAST486_REG_EBX].LowWord;
} }
VOID VOID
CDECL WINAPI
setBX(USHORT Value) setBX(USHORT Value)
{ {
EmulatorContext.GeneralRegs[FAST486_REG_EBX].LowWord = Value; EmulatorContext.GeneralRegs[FAST486_REG_EBX].LowWord = Value;
} }
UCHAR UCHAR
CDECL WINAPI
getBH(VOID) getBH(VOID)
{ {
return EmulatorContext.GeneralRegs[FAST486_REG_EBX].HighByte; return EmulatorContext.GeneralRegs[FAST486_REG_EBX].HighByte;
} }
VOID VOID
CDECL WINAPI
setBH(UCHAR Value) setBH(UCHAR Value)
{ {
EmulatorContext.GeneralRegs[FAST486_REG_EBX].HighByte = Value; EmulatorContext.GeneralRegs[FAST486_REG_EBX].HighByte = Value;
} }
UCHAR UCHAR
CDECL WINAPI
getBL(VOID) getBL(VOID)
{ {
return EmulatorContext.GeneralRegs[FAST486_REG_EBX].LowByte; return EmulatorContext.GeneralRegs[FAST486_REG_EBX].LowByte;
} }
VOID VOID
CDECL WINAPI
setBL(UCHAR Value) setBL(UCHAR Value)
{ {
EmulatorContext.GeneralRegs[FAST486_REG_EBX].LowByte = Value; EmulatorContext.GeneralRegs[FAST486_REG_EBX].LowByte = Value;
@ -152,56 +152,56 @@ setBL(UCHAR Value)
ULONG ULONG
CDECL WINAPI
getECX(VOID) getECX(VOID)
{ {
return EmulatorContext.GeneralRegs[FAST486_REG_ECX].Long; return EmulatorContext.GeneralRegs[FAST486_REG_ECX].Long;
} }
VOID VOID
CDECL WINAPI
setECX(ULONG Value) setECX(ULONG Value)
{ {
EmulatorContext.GeneralRegs[FAST486_REG_ECX].Long = Value; EmulatorContext.GeneralRegs[FAST486_REG_ECX].Long = Value;
} }
USHORT USHORT
CDECL WINAPI
getCX(VOID) getCX(VOID)
{ {
return EmulatorContext.GeneralRegs[FAST486_REG_ECX].LowWord; return EmulatorContext.GeneralRegs[FAST486_REG_ECX].LowWord;
} }
VOID VOID
CDECL WINAPI
setCX(USHORT Value) setCX(USHORT Value)
{ {
EmulatorContext.GeneralRegs[FAST486_REG_ECX].LowWord = Value; EmulatorContext.GeneralRegs[FAST486_REG_ECX].LowWord = Value;
} }
UCHAR UCHAR
CDECL WINAPI
getCH(VOID) getCH(VOID)
{ {
return EmulatorContext.GeneralRegs[FAST486_REG_ECX].HighByte; return EmulatorContext.GeneralRegs[FAST486_REG_ECX].HighByte;
} }
VOID VOID
CDECL WINAPI
setCH(UCHAR Value) setCH(UCHAR Value)
{ {
EmulatorContext.GeneralRegs[FAST486_REG_ECX].HighByte = Value; EmulatorContext.GeneralRegs[FAST486_REG_ECX].HighByte = Value;
} }
UCHAR UCHAR
CDECL WINAPI
getCL(VOID) getCL(VOID)
{ {
return EmulatorContext.GeneralRegs[FAST486_REG_ECX].LowByte; return EmulatorContext.GeneralRegs[FAST486_REG_ECX].LowByte;
} }
VOID VOID
CDECL WINAPI
setCL(UCHAR Value) setCL(UCHAR Value)
{ {
EmulatorContext.GeneralRegs[FAST486_REG_ECX].LowByte = Value; EmulatorContext.GeneralRegs[FAST486_REG_ECX].LowByte = Value;
@ -210,56 +210,56 @@ setCL(UCHAR Value)
ULONG ULONG
CDECL WINAPI
getEDX(VOID) getEDX(VOID)
{ {
return EmulatorContext.GeneralRegs[FAST486_REG_EDX].Long; return EmulatorContext.GeneralRegs[FAST486_REG_EDX].Long;
} }
VOID VOID
CDECL WINAPI
setEDX(ULONG Value) setEDX(ULONG Value)
{ {
EmulatorContext.GeneralRegs[FAST486_REG_EDX].Long = Value; EmulatorContext.GeneralRegs[FAST486_REG_EDX].Long = Value;
} }
USHORT USHORT
CDECL WINAPI
getDX(VOID) getDX(VOID)
{ {
return EmulatorContext.GeneralRegs[FAST486_REG_EDX].LowWord; return EmulatorContext.GeneralRegs[FAST486_REG_EDX].LowWord;
} }
VOID VOID
CDECL WINAPI
setDX(USHORT Value) setDX(USHORT Value)
{ {
EmulatorContext.GeneralRegs[FAST486_REG_EDX].LowWord = Value; EmulatorContext.GeneralRegs[FAST486_REG_EDX].LowWord = Value;
} }
UCHAR UCHAR
CDECL WINAPI
getDH(VOID) getDH(VOID)
{ {
return EmulatorContext.GeneralRegs[FAST486_REG_EDX].HighByte; return EmulatorContext.GeneralRegs[FAST486_REG_EDX].HighByte;
} }
VOID VOID
CDECL WINAPI
setDH(UCHAR Value) setDH(UCHAR Value)
{ {
EmulatorContext.GeneralRegs[FAST486_REG_EDX].HighByte = Value; EmulatorContext.GeneralRegs[FAST486_REG_EDX].HighByte = Value;
} }
UCHAR UCHAR
CDECL WINAPI
getDL(VOID) getDL(VOID)
{ {
return EmulatorContext.GeneralRegs[FAST486_REG_EDX].LowByte; return EmulatorContext.GeneralRegs[FAST486_REG_EDX].LowByte;
} }
VOID VOID
CDECL WINAPI
setDL(UCHAR Value) setDL(UCHAR Value)
{ {
EmulatorContext.GeneralRegs[FAST486_REG_EDX].LowByte = Value; EmulatorContext.GeneralRegs[FAST486_REG_EDX].LowByte = Value;
@ -268,28 +268,28 @@ setDL(UCHAR Value)
ULONG ULONG
CDECL WINAPI
getESP(VOID) getESP(VOID)
{ {
return EmulatorContext.GeneralRegs[FAST486_REG_ESP].Long; return EmulatorContext.GeneralRegs[FAST486_REG_ESP].Long;
} }
VOID VOID
CDECL WINAPI
setESP(ULONG Value) setESP(ULONG Value)
{ {
EmulatorSetStack(getSS(), Value); EmulatorSetStack(getSS(), Value);
} }
USHORT USHORT
CDECL WINAPI
getSP(VOID) getSP(VOID)
{ {
return EmulatorContext.GeneralRegs[FAST486_REG_ESP].LowWord; return EmulatorContext.GeneralRegs[FAST486_REG_ESP].LowWord;
} }
VOID VOID
CDECL WINAPI
setSP(USHORT Value) setSP(USHORT Value)
{ {
EmulatorSetStack(getSS(), Value); EmulatorSetStack(getSS(), Value);
@ -298,28 +298,28 @@ setSP(USHORT Value)
ULONG ULONG
CDECL WINAPI
getEBP(VOID) getEBP(VOID)
{ {
return EmulatorContext.GeneralRegs[FAST486_REG_EBP].Long; return EmulatorContext.GeneralRegs[FAST486_REG_EBP].Long;
} }
VOID VOID
CDECL WINAPI
setEBP(ULONG Value) setEBP(ULONG Value)
{ {
EmulatorContext.GeneralRegs[FAST486_REG_EBP].Long = Value; EmulatorContext.GeneralRegs[FAST486_REG_EBP].Long = Value;
} }
USHORT USHORT
CDECL WINAPI
getBP(VOID) getBP(VOID)
{ {
return EmulatorContext.GeneralRegs[FAST486_REG_EBP].LowWord; return EmulatorContext.GeneralRegs[FAST486_REG_EBP].LowWord;
} }
VOID VOID
CDECL WINAPI
setBP(USHORT Value) setBP(USHORT Value)
{ {
EmulatorContext.GeneralRegs[FAST486_REG_EBP].LowWord = Value; EmulatorContext.GeneralRegs[FAST486_REG_EBP].LowWord = Value;
@ -328,28 +328,28 @@ setBP(USHORT Value)
ULONG ULONG
CDECL WINAPI
getESI(VOID) getESI(VOID)
{ {
return EmulatorContext.GeneralRegs[FAST486_REG_ESI].Long; return EmulatorContext.GeneralRegs[FAST486_REG_ESI].Long;
} }
VOID VOID
CDECL WINAPI
setESI(ULONG Value) setESI(ULONG Value)
{ {
EmulatorContext.GeneralRegs[FAST486_REG_ESI].Long = Value; EmulatorContext.GeneralRegs[FAST486_REG_ESI].Long = Value;
} }
USHORT USHORT
CDECL WINAPI
getSI(VOID) getSI(VOID)
{ {
return EmulatorContext.GeneralRegs[FAST486_REG_ESI].LowWord; return EmulatorContext.GeneralRegs[FAST486_REG_ESI].LowWord;
} }
VOID VOID
CDECL WINAPI
setSI(USHORT Value) setSI(USHORT Value)
{ {
EmulatorContext.GeneralRegs[FAST486_REG_ESI].LowWord = Value; EmulatorContext.GeneralRegs[FAST486_REG_ESI].LowWord = Value;
@ -358,28 +358,28 @@ setSI(USHORT Value)
ULONG ULONG
CDECL WINAPI
getEDI(VOID) getEDI(VOID)
{ {
return EmulatorContext.GeneralRegs[FAST486_REG_EDI].Long; return EmulatorContext.GeneralRegs[FAST486_REG_EDI].Long;
} }
VOID VOID
CDECL WINAPI
setEDI(ULONG Value) setEDI(ULONG Value)
{ {
EmulatorContext.GeneralRegs[FAST486_REG_EDI].Long = Value; EmulatorContext.GeneralRegs[FAST486_REG_EDI].Long = Value;
} }
USHORT USHORT
CDECL WINAPI
getDI(VOID) getDI(VOID)
{ {
return EmulatorContext.GeneralRegs[FAST486_REG_EDI].LowWord; return EmulatorContext.GeneralRegs[FAST486_REG_EDI].LowWord;
} }
VOID VOID
CDECL WINAPI
setDI(USHORT Value) setDI(USHORT Value)
{ {
EmulatorContext.GeneralRegs[FAST486_REG_EDI].LowWord = Value; EmulatorContext.GeneralRegs[FAST486_REG_EDI].LowWord = Value;
@ -388,28 +388,28 @@ setDI(USHORT Value)
ULONG ULONG
CDECL WINAPI
getEIP(VOID) getEIP(VOID)
{ {
return EmulatorContext.InstPtr.Long; return EmulatorContext.InstPtr.Long;
} }
VOID VOID
CDECL WINAPI
setEIP(ULONG Value) setEIP(ULONG Value)
{ {
EmulatorExecute(getCS(), Value); EmulatorExecute(getCS(), Value);
} }
USHORT USHORT
CDECL WINAPI
getIP(VOID) getIP(VOID)
{ {
return EmulatorContext.InstPtr.LowWord; return EmulatorContext.InstPtr.LowWord;
} }
VOID VOID
CDECL WINAPI
setIP(USHORT Value) setIP(USHORT Value)
{ {
EmulatorExecute(getCS(), Value); EmulatorExecute(getCS(), Value);
@ -418,84 +418,84 @@ setIP(USHORT Value)
USHORT USHORT
CDECL WINAPI
getCS(VOID) getCS(VOID)
{ {
return EmulatorContext.SegmentRegs[FAST486_REG_CS].Selector; return EmulatorContext.SegmentRegs[FAST486_REG_CS].Selector;
} }
VOID VOID
CDECL WINAPI
setCS(USHORT Value) setCS(USHORT Value)
{ {
Fast486SetSegment(&EmulatorContext, FAST486_REG_CS, Value); Fast486SetSegment(&EmulatorContext, FAST486_REG_CS, Value);
} }
USHORT USHORT
CDECL WINAPI
getSS(VOID) getSS(VOID)
{ {
return EmulatorContext.SegmentRegs[FAST486_REG_SS].Selector; return EmulatorContext.SegmentRegs[FAST486_REG_SS].Selector;
} }
VOID VOID
CDECL WINAPI
setSS(USHORT Value) setSS(USHORT Value)
{ {
Fast486SetSegment(&EmulatorContext, FAST486_REG_SS, Value); Fast486SetSegment(&EmulatorContext, FAST486_REG_SS, Value);
} }
USHORT USHORT
CDECL WINAPI
getDS(VOID) getDS(VOID)
{ {
return EmulatorContext.SegmentRegs[FAST486_REG_DS].Selector; return EmulatorContext.SegmentRegs[FAST486_REG_DS].Selector;
} }
VOID VOID
CDECL WINAPI
setDS(USHORT Value) setDS(USHORT Value)
{ {
Fast486SetSegment(&EmulatorContext, FAST486_REG_DS, Value); Fast486SetSegment(&EmulatorContext, FAST486_REG_DS, Value);
} }
USHORT USHORT
CDECL WINAPI
getES(VOID) getES(VOID)
{ {
return EmulatorContext.SegmentRegs[FAST486_REG_ES].Selector; return EmulatorContext.SegmentRegs[FAST486_REG_ES].Selector;
} }
VOID VOID
CDECL WINAPI
setES(USHORT Value) setES(USHORT Value)
{ {
Fast486SetSegment(&EmulatorContext, FAST486_REG_ES, Value); Fast486SetSegment(&EmulatorContext, FAST486_REG_ES, Value);
} }
USHORT USHORT
CDECL WINAPI
getFS(VOID) getFS(VOID)
{ {
return EmulatorContext.SegmentRegs[FAST486_REG_FS].Selector; return EmulatorContext.SegmentRegs[FAST486_REG_FS].Selector;
} }
VOID VOID
CDECL WINAPI
setFS(USHORT Value) setFS(USHORT Value)
{ {
Fast486SetSegment(&EmulatorContext, FAST486_REG_FS, Value); Fast486SetSegment(&EmulatorContext, FAST486_REG_FS, Value);
} }
USHORT USHORT
CDECL WINAPI
getGS(VOID) getGS(VOID)
{ {
return EmulatorContext.SegmentRegs[FAST486_REG_GS].Selector; return EmulatorContext.SegmentRegs[FAST486_REG_GS].Selector;
} }
VOID VOID
CDECL WINAPI
setGS(USHORT Value) setGS(USHORT Value)
{ {
Fast486SetSegment(&EmulatorContext, FAST486_REG_GS, Value); Fast486SetSegment(&EmulatorContext, FAST486_REG_GS, Value);
@ -504,14 +504,14 @@ setGS(USHORT Value)
ULONG ULONG
CDECL WINAPI
getCF(VOID) getCF(VOID)
{ {
return EmulatorGetFlag(EMULATOR_FLAG_CF); return EmulatorGetFlag(EMULATOR_FLAG_CF);
} }
VOID VOID
CDECL WINAPI
setCF(ULONG Flag) setCF(ULONG Flag)
{ {
if (Flag & 1) if (Flag & 1)
@ -521,14 +521,14 @@ setCF(ULONG Flag)
} }
ULONG ULONG
CDECL WINAPI
getPF(VOID) getPF(VOID)
{ {
return EmulatorGetFlag(EMULATOR_FLAG_PF); return EmulatorGetFlag(EMULATOR_FLAG_PF);
} }
VOID VOID
CDECL WINAPI
setPF(ULONG Flag) setPF(ULONG Flag)
{ {
if (Flag & 1) if (Flag & 1)
@ -538,14 +538,14 @@ setPF(ULONG Flag)
} }
ULONG ULONG
CDECL WINAPI
getAF(VOID) getAF(VOID)
{ {
return EmulatorGetFlag(EMULATOR_FLAG_AF); return EmulatorGetFlag(EMULATOR_FLAG_AF);
} }
VOID VOID
CDECL WINAPI
setAF(ULONG Flag) setAF(ULONG Flag)
{ {
if (Flag & 1) if (Flag & 1)
@ -555,14 +555,14 @@ setAF(ULONG Flag)
} }
ULONG ULONG
CDECL WINAPI
getZF(VOID) getZF(VOID)
{ {
return EmulatorGetFlag(EMULATOR_FLAG_ZF); return EmulatorGetFlag(EMULATOR_FLAG_ZF);
} }
VOID VOID
CDECL WINAPI
setZF(ULONG Flag) setZF(ULONG Flag)
{ {
if (Flag & 1) if (Flag & 1)
@ -572,14 +572,14 @@ setZF(ULONG Flag)
} }
ULONG ULONG
CDECL WINAPI
getSF(VOID) getSF(VOID)
{ {
return EmulatorGetFlag(EMULATOR_FLAG_SF); return EmulatorGetFlag(EMULATOR_FLAG_SF);
} }
VOID VOID
CDECL WINAPI
setSF(ULONG Flag) setSF(ULONG Flag)
{ {
if (Flag & 1) if (Flag & 1)
@ -589,14 +589,14 @@ setSF(ULONG Flag)
} }
ULONG ULONG
CDECL WINAPI
getIF(VOID) getIF(VOID)
{ {
return EmulatorGetFlag(EMULATOR_FLAG_IF); return EmulatorGetFlag(EMULATOR_FLAG_IF);
} }
VOID VOID
CDECL WINAPI
setIF(ULONG Flag) setIF(ULONG Flag)
{ {
if (Flag & 1) if (Flag & 1)
@ -606,14 +606,14 @@ setIF(ULONG Flag)
} }
ULONG ULONG
CDECL WINAPI
getDF(VOID) getDF(VOID)
{ {
return EmulatorGetFlag(EMULATOR_FLAG_DF); return EmulatorGetFlag(EMULATOR_FLAG_DF);
} }
VOID VOID
CDECL WINAPI
setDF(ULONG Flag) setDF(ULONG Flag)
{ {
if (Flag & 1) if (Flag & 1)
@ -623,14 +623,14 @@ setDF(ULONG Flag)
} }
ULONG ULONG
CDECL WINAPI
getOF(VOID) getOF(VOID)
{ {
return EmulatorGetFlag(EMULATOR_FLAG_OF); return EmulatorGetFlag(EMULATOR_FLAG_OF);
} }
VOID VOID
CDECL WINAPI
setOF(ULONG Flag) setOF(ULONG Flag)
{ {
if (Flag & 1) if (Flag & 1)
@ -642,14 +642,14 @@ setOF(ULONG Flag)
ULONG ULONG
CDECL WINAPI
getEFLAGS(VOID) getEFLAGS(VOID)
{ {
return EmulatorContext.Flags.Long; return EmulatorContext.Flags.Long;
} }
VOID VOID
CDECL WINAPI
setEFLAGS(ULONG Flags) setEFLAGS(ULONG Flags)
{ {
EmulatorContext.Flags.Long = Flags; EmulatorContext.Flags.Long = Flags;
@ -658,14 +658,14 @@ setEFLAGS(ULONG Flags)
USHORT USHORT
CDECL WINAPI
getMSW(VOID) getMSW(VOID)
{ {
return LOWORD(EmulatorContext.ControlRegisters[FAST486_REG_CR0]); return LOWORD(EmulatorContext.ControlRegisters[FAST486_REG_CR0]);
} }
VOID VOID
CDECL WINAPI
setMSW(USHORT Value) setMSW(USHORT Value)
{ {
/* Set the lower 16 bits (Machine Status Word) of CR0 */ /* Set the lower 16 bits (Machine Status Word) of CR0 */

View file

@ -14,104 +14,104 @@
VOID EmulatorSetStack(WORD Segment, DWORD Offset); VOID EmulatorSetStack(WORD Segment, DWORD Offset);
ULONG getEAX(VOID); ULONG WINAPI getEAX(VOID);
VOID setEAX(ULONG); VOID WINAPI setEAX(ULONG);
USHORT getAX(VOID); USHORT WINAPI getAX(VOID);
VOID setAX(USHORT); VOID WINAPI setAX(USHORT);
UCHAR getAH(VOID); UCHAR WINAPI getAH(VOID);
VOID setAH(UCHAR); VOID WINAPI setAH(UCHAR);
UCHAR getAL(VOID); UCHAR WINAPI getAL(VOID);
VOID setAL(UCHAR); VOID WINAPI setAL(UCHAR);
ULONG getEBX(VOID); ULONG WINAPI getEBX(VOID);
VOID setEBX(ULONG); VOID WINAPI setEBX(ULONG);
USHORT getBX(VOID); USHORT WINAPI getBX(VOID);
VOID setBX(USHORT); VOID WINAPI setBX(USHORT);
UCHAR getBH(VOID); UCHAR WINAPI getBH(VOID);
VOID setBH(UCHAR); VOID WINAPI setBH(UCHAR);
UCHAR getBL(VOID); UCHAR WINAPI getBL(VOID);
VOID setBL(UCHAR); VOID WINAPI setBL(UCHAR);
ULONG getECX(VOID); ULONG WINAPI getECX(VOID);
VOID setECX(ULONG); VOID WINAPI setECX(ULONG);
USHORT getCX(VOID); USHORT WINAPI getCX(VOID);
VOID setCX(USHORT); VOID WINAPI setCX(USHORT);
UCHAR getCH(VOID); UCHAR WINAPI getCH(VOID);
VOID setCH(UCHAR); VOID WINAPI setCH(UCHAR);
UCHAR getCL(VOID); UCHAR WINAPI getCL(VOID);
VOID setCL(UCHAR); VOID WINAPI setCL(UCHAR);
ULONG getEDX(VOID); ULONG WINAPI getEDX(VOID);
VOID setEDX(ULONG); VOID WINAPI setEDX(ULONG);
USHORT getDX(VOID); USHORT WINAPI getDX(VOID);
VOID setDX(USHORT); VOID WINAPI setDX(USHORT);
UCHAR getDH(VOID); UCHAR WINAPI getDH(VOID);
VOID setDH(UCHAR); VOID WINAPI setDH(UCHAR);
UCHAR getDL(VOID); UCHAR WINAPI getDL(VOID);
VOID setDL(UCHAR); VOID WINAPI setDL(UCHAR);
ULONG getESP(VOID); ULONG WINAPI getESP(VOID);
VOID setESP(ULONG); VOID WINAPI setESP(ULONG);
USHORT getSP(VOID); USHORT WINAPI getSP(VOID);
VOID setSP(USHORT); VOID WINAPI setSP(USHORT);
ULONG getEBP(VOID); ULONG WINAPI getEBP(VOID);
VOID setEBP(ULONG); VOID WINAPI setEBP(ULONG);
USHORT getBP(VOID); USHORT WINAPI getBP(VOID);
VOID setBP(USHORT); VOID WINAPI setBP(USHORT);
ULONG getESI(VOID); ULONG WINAPI getESI(VOID);
VOID setESI(ULONG); VOID WINAPI setESI(ULONG);
USHORT getSI(VOID); USHORT WINAPI getSI(VOID);
VOID setSI(USHORT); VOID WINAPI setSI(USHORT);
ULONG getEDI(VOID); ULONG WINAPI getEDI(VOID);
VOID setEDI(ULONG); VOID WINAPI setEDI(ULONG);
USHORT getDI(VOID); USHORT WINAPI getDI(VOID);
VOID setDI(USHORT); VOID WINAPI setDI(USHORT);
ULONG getEIP(VOID); ULONG WINAPI getEIP(VOID);
VOID setEIP(ULONG); VOID WINAPI setEIP(ULONG);
USHORT getIP(VOID); USHORT WINAPI getIP(VOID);
VOID setIP(USHORT); VOID WINAPI setIP(USHORT);
USHORT getCS(VOID); USHORT WINAPI getCS(VOID);
VOID setCS(USHORT); VOID WINAPI setCS(USHORT);
USHORT getSS(VOID); USHORT WINAPI getSS(VOID);
VOID setSS(USHORT); VOID WINAPI setSS(USHORT);
USHORT getDS(VOID); USHORT WINAPI getDS(VOID);
VOID setDS(USHORT); VOID WINAPI setDS(USHORT);
USHORT getES(VOID); USHORT WINAPI getES(VOID);
VOID setES(USHORT); VOID WINAPI setES(USHORT);
USHORT getFS(VOID); USHORT WINAPI getFS(VOID);
VOID setFS(USHORT); VOID WINAPI setFS(USHORT);
USHORT getGS(VOID); USHORT WINAPI getGS(VOID);
VOID setGS(USHORT); VOID WINAPI setGS(USHORT);
ULONG getCF(VOID); ULONG WINAPI getCF(VOID);
VOID setCF(ULONG); VOID WINAPI setCF(ULONG);
ULONG getPF(VOID); ULONG WINAPI getPF(VOID);
VOID setPF(ULONG); VOID WINAPI setPF(ULONG);
ULONG getAF(VOID); ULONG WINAPI getAF(VOID);
VOID setAF(ULONG); VOID WINAPI setAF(ULONG);
ULONG getZF(VOID); ULONG WINAPI getZF(VOID);
VOID setZF(ULONG); VOID WINAPI setZF(ULONG);
ULONG getSF(VOID); ULONG WINAPI getSF(VOID);
VOID setSF(ULONG); VOID WINAPI setSF(ULONG);
ULONG getIF(VOID); ULONG WINAPI getIF(VOID);
VOID setIF(ULONG); VOID WINAPI setIF(ULONG);
ULONG getDF(VOID); ULONG WINAPI getDF(VOID);
VOID setDF(ULONG); VOID WINAPI setDF(ULONG);
ULONG getOF(VOID); ULONG WINAPI getOF(VOID);
VOID setOF(ULONG); VOID WINAPI setOF(ULONG);
ULONG getEFLAGS(VOID); ULONG WINAPI getEFLAGS(VOID);
VOID setEFLAGS(ULONG); VOID WINAPI setEFLAGS(ULONG);
USHORT getMSW(VOID); USHORT WINAPI getMSW(VOID);
VOID setMSW(USHORT); VOID WINAPI setMSW(USHORT);
#endif // _REGISTERS_H_ #endif // _REGISTERS_H_

View file

@ -16,13 +16,12 @@
#include "bop.h" #include "bop.h"
#include "registers.h" #include "registers.h"
typedef VOID (CDECL *VDD_INIT_PROC)(VOID); typedef VOID (WINAPI *VDD_PROC)(VOID);
typedef VOID (CDECL *VDD_DISPATCH_PROC)(VOID);
typedef struct _VDD_MODULE typedef struct _VDD_MODULE
{ {
HMODULE hDll; HMODULE hDll;
VDD_DISPATCH_PROC DispatchRoutine; VDD_PROC DispatchRoutine;
} VDD_MODULE, *PVDD_MODULE; } VDD_MODULE, *PVDD_MODULE;
/* BOP Identifiers */ /* BOP Identifiers */
@ -30,7 +29,7 @@ typedef struct _VDD_MODULE
/* PRIVATE VARIABLES **********************************************************/ /* PRIVATE VARIABLES **********************************************************/
#define MAX_VDD_MODULES 0xFF #define MAX_VDD_MODULES 0xFF + 1
VDD_MODULE VDDList[MAX_VDD_MODULES] = {{NULL}}; // TODO: Maybe use a linked list. VDD_MODULE VDDList[MAX_VDD_MODULES] = {{NULL}}; // TODO: Maybe use a linked list.
// But the number of elements must be <= MAXUSHORT // But the number of elements must be <= MAXUSHORT
@ -58,14 +57,14 @@ VOID WINAPI ThirdPartyVDDBop(LPWORD Stack)
case 0: case 0:
{ {
BOOL Success = TRUE; BOOL Success = TRUE;
WORD RetVal = 0; WORD RetVal = 0;
WORD Entry = 0; WORD Entry = 0;
LPCSTR DllName = NULL, LPCSTR DllName = NULL,
InitRoutineName = NULL, InitRoutineName = NULL,
DispatchRoutineName = NULL; DispatchRoutineName = NULL;
HMODULE hDll = NULL; HMODULE hDll = NULL;
VDD_INIT_PROC InitRoutine = NULL; VDD_PROC InitRoutine = NULL,
VDD_DISPATCH_PROC DispatchRoutine = NULL; DispatchRoutine = NULL;
DPRINT1("RegisterModule() called\n"); DPRINT1("RegisterModule() called\n");
@ -111,7 +110,7 @@ VOID WINAPI ThirdPartyVDDBop(LPWORD Stack)
/* Load the initialization routine if needed */ /* Load the initialization routine if needed */
if (InitRoutineName) if (InitRoutineName)
{ {
InitRoutine = (VDD_INIT_PROC)GetProcAddress(hDll, InitRoutineName); InitRoutine = (VDD_PROC)GetProcAddress(hDll, InitRoutineName);
if (InitRoutine == NULL) if (InitRoutine == NULL)
{ {
DPRINT1("Failed to load the initialization routine '%s'\n", InitRoutineName); DPRINT1("Failed to load the initialization routine '%s'\n", InitRoutineName);
@ -122,7 +121,7 @@ VOID WINAPI ThirdPartyVDDBop(LPWORD Stack)
} }
/* Load the dispatch routine */ /* Load the dispatch routine */
DispatchRoutine = (VDD_DISPATCH_PROC)GetProcAddress(hDll, DispatchRoutineName); DispatchRoutine = (VDD_PROC)GetProcAddress(hDll, DispatchRoutineName);
if (DispatchRoutine == NULL) if (DispatchRoutine == NULL)
{ {
DPRINT1("Failed to load the dispatch routine '%s'\n", DispatchRoutineName); DPRINT1("Failed to load the dispatch routine '%s'\n", DispatchRoutineName);