2 * COPYRIGHT: GPL - See COPYING in the top level directory
3 * PROJECT: 386/486 CPU Emulation Library
5 * PURPOSE: Header file for Soft386.
6 * PROGRAMMERS: Aleksandar Andrejevic <theflash AT sdf DOT lonestar DOT org>
12 /* INCLUDES *******************************************************************/
17 /* DEFINES ********************************************************************/
19 #define SOFT386_NUM_GEN_REGS 8
20 #define SOFT386_NUM_SEG_REGS 6
21 #define SOFT386_NUM_CTRL_REGS 8
22 #define SOFT386_NUM_DBG_REGS 8
24 #define SOFT386_CR0_PE (1 << 0)
25 #define SOFT386_CR0_MP (1 << 1)
26 #define SOFT386_CR0_EM (1 << 2)
27 #define SOFT386_CR0_TS (1 << 3)
28 #define SOFT386_CR0_ET (1 << 4)
29 #define SOFT386_CR0_NE (1 << 5)
30 #define SOFT386_CR0_WP (1 << 16)
31 #define SOFT386_CR0_AM (1 << 18)
32 #define SOFT386_CR0_NW (1 << 29)
33 #define SOFT386_CR0_CD (1 << 30)
34 #define SOFT386_CR0_PG (1 << 31)
36 struct _SOFT386_STATE
;
37 typedef struct _SOFT386_STATE SOFT386_STATE
;
38 typedef struct _SOFT386_STATE
*PSOFT386_STATE
;
40 enum _SOFT386_GEN_REGS
52 enum _SOFT386_SEG_REGS
62 enum _SOFT386_CTRL_REGS
74 enum _SOFT386_DBG_REGS
88 (NTAPI
*SOFT386_MEM_READ_PROC
)
98 (NTAPI
*SOFT386_MEM_WRITE_PROC
)
100 PSOFT386_STATE State
,
108 (NTAPI
*SOFT386_IO_READ_PROC
)
110 PSOFT386_STATE State
,
118 (NTAPI
*SOFT386_IO_WRITE_PROC
)
120 PSOFT386_STATE State
,
126 typedef union _SOFT386_REG
135 } SOFT386_REG
, *PSOFT386_REG
;
137 typedef struct _SOFT386_SEG_REG
141 /* Descriptor cache */
145 ULONG Executable
: 1;
146 ULONG SystemType
: 1;
152 } SOFT386_SEG_REG
, *PSOFT386_SEG_REG
;
161 ULONG Executable
: 1;
162 ULONG SystemType
: 1;
169 ULONG Granularity
: 1;
182 ULONG OffsetHigh
: 16;
185 typedef struct _SOFT386_TABLE_REG
189 } SOFT386_TABLE_REG
, *PSOFT386_TABLE_REG
;
191 typedef union _SOFT386_FLAGS_REG
218 } SOFT386_FLAGS_REG
, *PSOFT386_FLAGS_REG
;
220 typedef struct _SOFT386_TSS
248 } SOFT386_TSS
, *PSOFT386_TSS
;
250 struct _SOFT386_STATE
252 SOFT386_MEM_READ_PROC MemReadCallback
;
253 SOFT386_MEM_WRITE_PROC MemWriteCallback
;
254 SOFT386_IO_READ_PROC IoReadCallback
;
255 SOFT386_IO_WRITE_PROC IoWriteCallback
;
256 SOFT386_REG GeneralRegs
[SOFT386_NUM_GEN_REGS
];
257 SOFT386_SEG_REG SegmentRegs
[SOFT386_NUM_SEG_REGS
];
259 SOFT386_FLAGS_REG Flags
;
260 SOFT386_TABLE_REG Gdtr
, Idtr
, Ldtr
, Tss
;
261 ULONGLONG TimeStampCounter
;
262 ULONG ControlRegisters
[SOFT386_NUM_CTRL_REGS
];
263 ULONG DebugRegisters
[SOFT386_NUM_DBG_REGS
];
266 /* FUNCTIONS ******************************************************************/
270 Soft386Continue(PSOFT386_STATE State
);
274 Soft386StepInto(PSOFT386_STATE State
);
278 Soft386StepOver(PSOFT386_STATE State
);
282 Soft386StepOut(PSOFT386_STATE State
);
286 Soft386DumpState(PSOFT386_STATE State
);
290 Soft386Reset(PSOFT386_STATE State
);
292 #endif // _SOFT386_H_