[SOFT386]
[reactos.git] / lib / soft386 / common.h
1 /*
2 * COPYRIGHT: GPL - See COPYING in the top level directory
3 * PROJECT: 386/486 CPU Emulation Library
4 * FILE: common.h
5 * PURPOSE: Common functions used internally by Soft386 (header file).
6 * PROGRAMMERS: Aleksandar Andrejevic <theflash AT sdf DOT lonestar DOT org>
7 */
8
9 #ifndef _COMMON_H_
10 #define _COMMON_H_
11
12 /* DEFINES ********************************************************************/
13
14 #ifndef FASTCALL
15 #define FASTCALL __fastcall
16 #endif
17
18 #define SIGN_FLAG_BYTE 0x80
19 #define SIGN_FLAG_WORD 0x8000
20 #define SIGN_FLAG_LONG 0x80000000
21 #define GET_SEGMENT_RPL(s) ((s) & 3)
22 #define GET_SEGMENT_INDEX(s) ((s) & 0xFFF8)
23
24 typedef struct _SOFT386_MOD_REG_RM
25 {
26 INT Register;
27 BOOLEAN Memory;
28 union
29 {
30 INT SecondRegister;
31 ULONG MemoryAddress;
32 };
33 } SOFT386_MOD_REG_RM, *PSOFT386_MOD_REG_RM;
34
35 /* FUNCTIONS ******************************************************************/
36
37 inline
38 BOOLEAN
39 Soft386ReadMemory
40 (
41 PSOFT386_STATE State,
42 INT SegmentReg,
43 ULONG Offset,
44 BOOLEAN InstFetch,
45 PVOID Buffer,
46 ULONG Size
47 );
48
49 inline
50 BOOLEAN
51 Soft386WriteMemory
52 (
53 PSOFT386_STATE State,
54 INT SegmentReg,
55 ULONG Offset,
56 PVOID Buffer,
57 ULONG Size
58 );
59
60 inline
61 BOOLEAN
62 Soft386StackPush
63 (
64 PSOFT386_STATE State,
65 ULONG Value
66 );
67
68 inline
69 BOOLEAN
70 Soft386StackPop
71 (
72 PSOFT386_STATE State,
73 PULONG Value
74 );
75
76 inline
77 BOOLEAN
78 Soft386LoadSegment
79 (
80 PSOFT386_STATE State,
81 INT Segment,
82 USHORT Selector
83 );
84
85 inline
86 BOOLEAN
87 Soft386FetchByte
88 (
89 PSOFT386_STATE State,
90 PUCHAR Data
91 );
92
93 inline
94 BOOLEAN
95 Soft386FetchWord
96 (
97 PSOFT386_STATE State,
98 PUSHORT Data
99 );
100
101 inline
102 BOOLEAN
103 Soft386FetchDword
104 (
105 PSOFT386_STATE State,
106 PULONG Data
107 );
108
109 inline
110 BOOLEAN
111 Soft386InterruptInternal
112 (
113 PSOFT386_STATE State,
114 USHORT SegmentSelector,
115 ULONG Offset,
116 BOOLEAN InterruptGate
117 );
118
119 inline
120 BOOLEAN
121 Soft386GetIntVector
122 (
123 PSOFT386_STATE State,
124 UCHAR Number,
125 PSOFT386_IDT_ENTRY IdtEntry
126 );
127
128 VOID
129 __fastcall
130 Soft386Exception
131 (
132 PSOFT386_STATE State,
133 INT ExceptionCode
134 );
135
136 inline
137 BOOLEAN
138 Soft386CalculateParity
139 (
140 UCHAR Number
141 );
142
143 inline
144 BOOLEAN
145 Soft386ParseModRegRm
146 (
147 PSOFT386_STATE State,
148 BOOLEAN AddressSize,
149 PSOFT386_MOD_REG_RM ModRegRm
150 );
151
152 inline
153 BOOLEAN
154 Soft386ReadModrmByteOperands
155 (
156 PSOFT386_STATE State,
157 PSOFT386_MOD_REG_RM ModRegRm,
158 PUCHAR RegValue,
159 PUCHAR RmValue
160 );
161
162 inline
163 BOOLEAN
164 Soft386ReadModrmWordOperands
165 (
166 PSOFT386_STATE State,
167 PSOFT386_MOD_REG_RM ModRegRm,
168 PUSHORT RegValue,
169 PUSHORT RmValue
170 );
171
172 inline
173 BOOLEAN
174 Soft386ReadModrmDwordOperands
175 (
176 PSOFT386_STATE State,
177 PSOFT386_MOD_REG_RM ModRegRm,
178 PULONG RegValue,
179 PULONG RmValue
180 );
181
182 inline
183 BOOLEAN
184 Soft386WriteModrmByteOperands
185 (
186 PSOFT386_STATE State,
187 PSOFT386_MOD_REG_RM ModRegRm,
188 BOOLEAN WriteRegister,
189 UCHAR Value
190 );
191
192 inline
193 BOOLEAN
194 Soft386WriteModrmWordOperands
195 (
196 PSOFT386_STATE State,
197 PSOFT386_MOD_REG_RM ModRegRm,
198 BOOLEAN WriteRegister,
199 USHORT Value
200 );
201
202 inline
203 BOOLEAN
204 Soft386WriteModrmDwordOperands
205 (
206 PSOFT386_STATE State,
207 PSOFT386_MOD_REG_RM ModRegRm,
208 BOOLEAN WriteRegister,
209 ULONG Value
210 );
211
212 #endif // _COMMON_H_
213
214 /* EOF */