Revision 13b55754
b/cpu-i386.h | ||
---|---|---|
85 | 85 |
#define VIP_MASK 0x00100000 |
86 | 86 |
#define ID_MASK 0x00200000 |
87 | 87 |
|
88 |
#define CR0_PE_MASK (1 << 0) |
|
89 |
#define CR0_TS_MASK (1 << 3) |
|
90 |
#define CR0_WP_MASK (1 << 16) |
|
91 |
#define CR0_AM_MASK (1 << 18) |
|
92 |
#define CR0_PG_MASK (1 << 31) |
|
93 |
|
|
94 |
#define CR4_VME_MASK (1 << 0) |
|
95 |
#define CR4_PVI_MASK (1 << 1) |
|
96 |
#define CR4_TSD_MASK (1 << 2) |
|
97 |
#define CR4_DE_MASK (1 << 3) |
|
98 |
|
|
88 | 99 |
#define EXCP00_DIVZ 0 |
89 | 100 |
#define EXCP01_SSTP 1 |
90 | 101 |
#define EXCP02_NMI 2 |
... | ... | |
161 | 172 |
#endif |
162 | 173 |
|
163 | 174 |
typedef struct SegmentCache { |
175 |
uint32_t selector; |
|
164 | 176 |
uint8_t *base; |
165 | 177 |
unsigned long limit; |
166 | 178 |
uint8_t seg_32bit; |
167 | 179 |
} SegmentCache; |
168 | 180 |
|
169 |
typedef struct SegmentDescriptorTable { |
|
170 |
uint8_t *base; |
|
171 |
unsigned long limit; |
|
172 |
/* this is the returned base when reading the register, just to |
|
173 |
avoid that the emulated program modifies it */ |
|
174 |
unsigned long emu_base; |
|
175 |
} SegmentDescriptorTable; |
|
176 |
|
|
177 | 181 |
typedef struct CPUX86State { |
178 | 182 |
/* standard registers */ |
179 | 183 |
uint32_t regs[8]; |
... | ... | |
205 | 209 |
} fp_convert; |
206 | 210 |
|
207 | 211 |
/* segments */ |
208 |
uint32_t segs[6]; /* selector values */
|
|
209 |
SegmentCache seg_cache[6]; /* info taken from LDT/GDT */
|
|
210 |
SegmentDescriptorTable gdt;
|
|
211 |
SegmentDescriptorTable ldt;
|
|
212 |
SegmentDescriptorTable idt;
|
|
212 |
SegmentCache segs[6]; /* selector values */
|
|
213 |
SegmentCache ldt;
|
|
214 |
SegmentCache tr;
|
|
215 |
SegmentCache gdt; /* only base and limit are used */
|
|
216 |
SegmentCache idt; /* only base and limit are used */
|
|
213 | 217 |
|
214 | 218 |
/* exception/interrupt handling */ |
215 | 219 |
jmp_buf jmp_env; |
216 | 220 |
int exception_index; |
217 | 221 |
int error_code; |
218 |
uint32_t cr2; |
|
222 |
uint32_t cr[5]; /* NOTE: cr1 is unused */ |
|
223 |
uint32_t dr[8]; /* debug registers */ |
|
219 | 224 |
int interrupt_request; |
220 | 225 |
|
221 | 226 |
/* user data */ |
Also available in: Unified diff