forked from nonakap/xnp2
-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathi286x.h
103 lines (80 loc) · 2.83 KB
/
i286x.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#define I286_MEM mem
#define I286_STAT i286core.s.r
#define I286_REG i286core.s.r
#define I286_SEGREG i286core.s.r.w.es
#define I286_AX i286core.s.r.w.ax
#define I286_BX i286core.s.r.w.bx
#define I286_CX i286core.s.r.w.cx
#define I286_DX i286core.s.r.w.dx
#define I286_SI i286core.s.r.w.si
#define I286_DI i286core.s.r.w.di
#define I286_BP i286core.s.r.w.bp
#define I286_SP i286core.s.r.w.sp
#define I286_CS i286core.s.r.w.cs
#define I286_DS i286core.s.r.w.ds
#define I286_ES i286core.s.r.w.es
#define I286_SS i286core.s.r.w.ss
#define I286_IP i286core.s.r.w.ip
#define SEG_BASE i286core.s.es_base
#define ES_BASE i286core.s.es_base
#define CS_BASE i286core.s.cs_base
#define SS_BASE i286core.s.ss_base
#define DS_BASE i286core.s.ds_base
#define SS_FIX i286core.s.ss_fix
#define DS_FIX i286core.s.ds_fix
#define I286_AL i286core.s.r.b.al
#define I286_BL i286core.s.r.b.bl
#define I286_CL i286core.s.r.b.cl
#define I286_DL i286core.s.r.b.dl
#define I286_AH i286core.s.r.b.ah
#define I286_BH i286core.s.r.b.bh
#define I286_CH i286core.s.r.b.ch
#define I286_DH i286core.s.r.b.dh
#define I286_FLAG i286core.s.r.w.flag
#define I286_FLAGL i286core.s.r.b.flag_l
#define I286_FLAGH i286core.s.r.b.flag_h
#define I286_TRAP i286core.s.trap
#define I286_OV i286core.s.ovflag
#define I286_GDTR i286core.s.GDTR
#define I286_MSW i286core.s.MSW
#define I286_IDTR i286core.s.IDTR
#define I286_LDTR i286core.s.LDTR
#define I286_LDTRC i286core.s.LDTRC
#define I286_TR i286core.s.TR
#define I286_TRC i286core.s.TRC
#define I286_ADRSMASK i286core.s.adrsmask
#define I286_REMCLOCK i286core.s.remainclock
#define I286_BASECLOCK i286core.s.baseclock
#define I286_CLOCK i286core.s.clock
#define I286_REPPOSBAK i286core.e.repbak
#define I286_INPADRS i286core.e.inport
#define I286 __declspec(naked) static void
#define I286EXT __declspec(naked) void
typedef void (*I286TBL)(void);
#define I286IRQCHECKTERM \
__asm { xor eax, eax } \
__asm { cmp I286_REMCLOCK, eax } \
__asm { jle short nonremainclr } \
__asm { xchg I286_REMCLOCK, eax } \
__asm { sub I286_BASECLOCK, eax } \
nonremainclr: \
__asm { ret }
#define I286PREFIX(proc) \
__asm { bts i286core.s.prefix, 0 } \
__asm { jc fixed } \
__asm { mov I286_REPPOSBAK, esi } \
__asm { push offset removeprefix } \
fixed: \
GET_NEXTPRE1 \
__asm { movzx eax, bl } \
__asm { jmp (proc)[eax*4] }
extern void __fastcall i286x_localint(void);
extern void __fastcall i286x_selector(void);
extern void removeprefix(void);
extern const I286TBL i286op[256];
extern const I286TBL i286op_repne[256];
extern const I286TBL i286op_repe[256];
extern I286TBL v30op[256];
extern I286TBL v30op_repne[256];
extern I286TBL v30op_repe[256];
void i286xadr_init(void);