2 * COPYRIGHT: GPL - See COPYING in the top level directory
3 * PROJECT: 386/486 CPU Emulation Library
5 * PURPOSE: Common functions used internally by Soft386 (header file).
6 * PROGRAMMERS: Aleksandar Andrejevic <theflash AT sdf DOT lonestar DOT org>
12 /* DEFINES ********************************************************************/
15 #define FASTCALL __fastcall
18 #define SIGN_FLAG_BYTE 0x80
19 #define SIGN_FLAG_WORD 0x8000
20 #define SIGN_FLAG_LONG 0x80000000
22 #define GET_SEGMENT_RPL(s) ((s) & 3)
23 #define GET_SEGMENT_INDEX(s) ((s) & 0xFFF8)
24 #define EXCEPTION_HAS_ERROR_CODE(x) (((x) == 8) || ((x) >= 10 && (x) <= 14))
26 #define PAGE_ALIGN(x) ((x) & 0xFFFFF000)
27 #define PAGE_OFFSET(x) ((x) & 0x00000FFF)
30 #define PAGE_SIZE 4096
33 typedef struct _SOFT386_MOD_REG_RM
42 } SOFT386_MOD_REG_RM
, *PSOFT386_MOD_REG_RM
;
46 typedef union _SOFT386_PAGE_DIR
53 ULONG WriteThrough
: 1;
59 ULONG TableAddress
: 20;
62 } SOFT386_PAGE_DIR
, *PSOFT386_PAGE_DIR
;
64 typedef union _SOFT386_PAGE_TABLE
71 ULONG WriteThrough
: 1;
81 } SOFT386_PAGE_TABLE
, *PSOFT386_PAGE_TABLE
;
85 /* FUNCTIONS ******************************************************************/
103 PSOFT386_STATE State
,
114 PSOFT386_STATE State
,
122 PSOFT386_STATE State
,
130 PSOFT386_STATE State
,
139 PSOFT386_STATE State
,
147 PSOFT386_STATE State
,
155 PSOFT386_STATE State
,
161 Soft386InterruptInternal
163 PSOFT386_STATE State
,
164 USHORT SegmentSelector
,
166 BOOLEAN InterruptGate
173 PSOFT386_STATE State
,
175 PSOFT386_IDT_ENTRY IdtEntry
180 Soft386ExceptionWithErrorCode
182 PSOFT386_STATE State
,
191 PSOFT386_STATE State
,
197 Soft386CalculateParity
206 PSOFT386_STATE State
,
208 PSOFT386_MOD_REG_RM ModRegRm
213 Soft386ReadModrmByteOperands
215 PSOFT386_STATE State
,
216 PSOFT386_MOD_REG_RM ModRegRm
,
223 Soft386ReadModrmWordOperands
225 PSOFT386_STATE State
,
226 PSOFT386_MOD_REG_RM ModRegRm
,
233 Soft386ReadModrmDwordOperands
235 PSOFT386_STATE State
,
236 PSOFT386_MOD_REG_RM ModRegRm
,
243 Soft386WriteModrmByteOperands
245 PSOFT386_STATE State
,
246 PSOFT386_MOD_REG_RM ModRegRm
,
247 BOOLEAN WriteRegister
,
253 Soft386WriteModrmWordOperands
255 PSOFT386_STATE State
,
256 PSOFT386_MOD_REG_RM ModRegRm
,
257 BOOLEAN WriteRegister
,
263 Soft386WriteModrmDwordOperands
265 PSOFT386_STATE State
,
266 PSOFT386_MOD_REG_RM ModRegRm
,
267 BOOLEAN WriteRegister
,