mirror of
https://github.com/reactos/reactos.git
synced 2025-07-27 07:41:51 +00:00
[HAL]
Add the x86 emulator to x86BiosCall. It can call into int 10 and executes a few instructions. svn path=/branches/ros-amd64-bringup/; revision=45466
This commit is contained in:
parent
077f4e3c79
commit
ae3d0930ce
4 changed files with 10 additions and 224 deletions
|
@ -254,7 +254,7 @@ x86BiosCall(
|
||||||
VmState.Flags.ReturnOnIret = 1;
|
VmState.Flags.ReturnOnIret = 1;
|
||||||
|
|
||||||
/* Call the x86 emulator */
|
/* Call the x86 emulator */
|
||||||
// x86Emulator(&VmState);
|
x86Emulator(&VmState);
|
||||||
|
|
||||||
/* Copy registers back to caller */
|
/* Copy registers back to caller */
|
||||||
*Registers = VmState.BiosRegisters;
|
*Registers = VmState.BiosRegisters;
|
||||||
|
|
|
@ -1,221 +0,0 @@
|
||||||
|
|
||||||
typedef union
|
|
||||||
{
|
|
||||||
USHORT Short;
|
|
||||||
ULONG Long;
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
ULONG Cf:1;
|
|
||||||
ULONG Pf:1;
|
|
||||||
ULONG Af:1;
|
|
||||||
ULONG Zf:1;
|
|
||||||
ULONG Sf:1;
|
|
||||||
ULONG Tf:1;
|
|
||||||
ULONG If:1;
|
|
||||||
ULONG Df:1;
|
|
||||||
ULONG Of:1;
|
|
||||||
ULONG Iopl:3;
|
|
||||||
ULONG Nt:1;
|
|
||||||
ULONG Rf:1;
|
|
||||||
ULONG Vm:1;
|
|
||||||
ULONG Ac:1;
|
|
||||||
ULONG Vif:1;
|
|
||||||
ULONG Vip:1;
|
|
||||||
ULONG Id:1;
|
|
||||||
};
|
|
||||||
} EFLAGS;
|
|
||||||
|
|
||||||
typedef union
|
|
||||||
{
|
|
||||||
ULONG Dword;
|
|
||||||
USHORT Word;
|
|
||||||
UCHAR Byte;
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
UCHAR Low;
|
|
||||||
UCHAR High;
|
|
||||||
};
|
|
||||||
} REGU;
|
|
||||||
|
|
||||||
typedef union
|
|
||||||
{
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
UCHAR mod:2;
|
|
||||||
UCHAR reg:3;
|
|
||||||
UCHAR rm:3;
|
|
||||||
};
|
|
||||||
UCHAR Byte;
|
|
||||||
} MODRM;
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
union
|
|
||||||
{
|
|
||||||
ULONG Eax;
|
|
||||||
USHORT Ax;
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
UCHAR Al;
|
|
||||||
UCHAR Ah;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
union
|
|
||||||
{
|
|
||||||
ULONG Ecx;
|
|
||||||
USHORT Cx;
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
UCHAR Cl;
|
|
||||||
UCHAR Ch;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
union
|
|
||||||
{
|
|
||||||
ULONG Edx;
|
|
||||||
USHORT Dx;
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
UCHAR Dl;
|
|
||||||
UCHAR Dh;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
union
|
|
||||||
{
|
|
||||||
ULONG Ebx;
|
|
||||||
USHORT Bx;
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
UCHAR Bl;
|
|
||||||
UCHAR Bh;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
union
|
|
||||||
{
|
|
||||||
ULONG Ebp;
|
|
||||||
USHORT Bp;
|
|
||||||
};
|
|
||||||
union
|
|
||||||
{
|
|
||||||
ULONG Esi;
|
|
||||||
USHORT Si;
|
|
||||||
};
|
|
||||||
union
|
|
||||||
{
|
|
||||||
ULONG Edi;
|
|
||||||
USHORT Di;
|
|
||||||
};
|
|
||||||
union
|
|
||||||
{
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
ULONG ReservedDsMBZ:4;
|
|
||||||
ULONG SegDs:16;
|
|
||||||
};
|
|
||||||
ULONG ShiftedDs;
|
|
||||||
};
|
|
||||||
union
|
|
||||||
{
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
ULONG ReservedEsMBZ:4;
|
|
||||||
ULONG SegEs:16;
|
|
||||||
};
|
|
||||||
ULONG ShiftedEs;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Extended */
|
|
||||||
union
|
|
||||||
{
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
ULONG ReservedCsMBZ:4;
|
|
||||||
ULONG SegCs:16;
|
|
||||||
};
|
|
||||||
ULONG ShiftedCs;
|
|
||||||
};
|
|
||||||
union
|
|
||||||
{
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
ULONG ReservedSsMBZ:4;
|
|
||||||
ULONG SegSs:16;
|
|
||||||
};
|
|
||||||
ULONG ShiftedSs;
|
|
||||||
};
|
|
||||||
|
|
||||||
union
|
|
||||||
{
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
ULONG ReservedMsMBZ:4;
|
|
||||||
ULONG SegMs:16;
|
|
||||||
};
|
|
||||||
ULONG ShiftedMs;
|
|
||||||
};
|
|
||||||
|
|
||||||
union
|
|
||||||
{
|
|
||||||
ULONG Eip;
|
|
||||||
USHORT Ip;
|
|
||||||
};
|
|
||||||
|
|
||||||
union
|
|
||||||
{
|
|
||||||
ULONG Esp;
|
|
||||||
USHORT Sp;
|
|
||||||
};
|
|
||||||
|
|
||||||
EFLAGS Eflags;
|
|
||||||
|
|
||||||
} X86_REGISTERS, *PX86_REGISTERS;
|
|
||||||
|
|
||||||
enum
|
|
||||||
{
|
|
||||||
X86_VMFLAGS_RETURN_ON_IRET = 1,
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
union
|
|
||||||
{
|
|
||||||
X86_BIOS_REGISTERS BiosRegisters;
|
|
||||||
X86_REGISTERS Registers;
|
|
||||||
REGU IndexedRegisters[8];
|
|
||||||
};
|
|
||||||
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
ULONG ReturnOnIret:1;
|
|
||||||
} Flags;
|
|
||||||
|
|
||||||
PVOID MemBuffer;
|
|
||||||
|
|
||||||
#if 1
|
|
||||||
PCHAR Mnemonic;
|
|
||||||
PCHAR DstReg;
|
|
||||||
PCHAR SrcReg;
|
|
||||||
ULONG SrcEncodung;
|
|
||||||
ULONG DstEncoding;
|
|
||||||
ULONG Length;
|
|
||||||
#endif
|
|
||||||
} X86_VM_STATE, *PX86_VM_STATE;
|
|
||||||
|
|
||||||
enum
|
|
||||||
{
|
|
||||||
PREFIX_SIZE_OVERRIDE = 0x010001,
|
|
||||||
PREFIX_ADDRESS_OVERRIDE = 0x020002,
|
|
||||||
PREFIX_SEGMENT_CS = 0x040004,
|
|
||||||
PREFIX_SEGMENT_DS = 0x040008,
|
|
||||||
PREFIX_SEGMENT_ES = 0x040010,
|
|
||||||
PREFIX_SEGMNET_FS = 0x040020,
|
|
||||||
PREFIX_SEGMENT_GS = 0x040040,
|
|
||||||
PREFIX_SEGMENT_SS = 0x040080,
|
|
||||||
PREFIX_LOCK = 0x080100,
|
|
||||||
PREFIX_REP = 0x100200,
|
|
||||||
} PREFIX_STATE;
|
|
||||||
|
|
||||||
|
|
||||||
VOID
|
|
||||||
NTAPI
|
|
||||||
x86Emulator(PX86_VM_STATE VmState);
|
|
|
@ -5,7 +5,6 @@
|
||||||
<include>include</include>
|
<include>include</include>
|
||||||
<include base="ntoskrnl">include</include>
|
<include base="ntoskrnl">include</include>
|
||||||
<define name="_NTHAL_" />
|
<define name="_NTHAL_" />
|
||||||
<define name="_X86BIOS_" />
|
|
||||||
<directory name="generic">
|
<directory name="generic">
|
||||||
<directory name="bus">
|
<directory name="bus">
|
||||||
<file>bushndlr.c</file>
|
<file>bushndlr.c</file>
|
||||||
|
@ -43,7 +42,6 @@
|
||||||
<file>misc.c</file>
|
<file>misc.c</file>
|
||||||
<file>systimer.S</file>
|
<file>systimer.S</file>
|
||||||
<file>usage.c</file>
|
<file>usage.c</file>
|
||||||
<file>x86bios.c</file>
|
|
||||||
</directory>
|
</directory>
|
||||||
</if>
|
</if>
|
||||||
</directory>
|
</directory>
|
||||||
|
|
|
@ -5,11 +5,14 @@
|
||||||
<bootstrap installbase="$(CDOUTPUT)" nameoncd="hal.dll" />
|
<bootstrap installbase="$(CDOUTPUT)" nameoncd="hal.dll" />
|
||||||
<include base="hal">include</include>
|
<include base="hal">include</include>
|
||||||
<include base="ntoskrnl">include</include>
|
<include base="ntoskrnl">include</include>
|
||||||
|
<include base="x86emu">.</include>
|
||||||
<define name="_DISABLE_TIDENTS" />
|
<define name="_DISABLE_TIDENTS" />
|
||||||
<define name="_NTHAL_" />
|
<define name="_NTHAL_" />
|
||||||
|
<define name="_X86BIOS_" />
|
||||||
<library>hal_generic</library>
|
<library>hal_generic</library>
|
||||||
<library>hal_generic_up</library>
|
<library>hal_generic_up</library>
|
||||||
<library>ntoskrnl</library>
|
<library>ntoskrnl</library>
|
||||||
|
<library>x86emu</library>
|
||||||
|
|
||||||
<directory name="up">
|
<directory name="up">
|
||||||
<file>halinit_up.c</file>
|
<file>halinit_up.c</file>
|
||||||
|
@ -21,4 +24,10 @@
|
||||||
<file>mps.S</file>
|
<file>mps.S</file>
|
||||||
</directory>
|
</directory>
|
||||||
</directory>
|
</directory>
|
||||||
|
<directory name="generic">
|
||||||
|
<directory name="amd64">
|
||||||
|
<file>x86bios.c</file>
|
||||||
|
</directory>
|
||||||
|
</directory>
|
||||||
|
|
||||||
</module>
|
</module>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue