ViewVC Help
View File | Revision Log | View Changeset | Root Listing
root/Oni2/Daodan/src/beaengine/Includes/instr_set/opcodes_prefixes.c
Revision: 984
Committed: Sun Mar 16 23:35:10 2014 UTC (11 years, 6 months ago) by alloc
Content type: text/x-csrc
File size: 9055 byte(s)
Log Message:
Daodan: TV code

File Contents

# Content
1 /* Copyright 2006-2009, BeatriX
2 * File coded by BeatriX
3 *
4 * This file is part of BeaEngine.
5 *
6 * BeaEngine is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU Lesser General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * BeaEngine is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public License
17 * along with BeaEngine. If not, see <http://www.gnu.org/licenses/>. */
18
19 /* ====================================================================
20 * Legacy Prefix F0h-Group 1
21 * ==================================================================== */
22 void __bea_callspec__ PrefLock(PDISASM pMyDisasm)
23 {
24 if (!Security(0, pMyDisasm)) return;
25 (*pMyDisasm).Prefix.LockPrefix = InvalidPrefix;
26 GV.EIP_++;
27 (*pMyDisasm).Prefix.Number++;
28 GV.NB_PREFIX++;
29 (*pMyDisasm).Instruction.Opcode = *((UInt8*) (UIntPtr)GV.EIP_);
30 (void) opcode_map1[*((UInt8*) (UIntPtr)GV.EIP_)](pMyDisasm);
31 GV.OperandSize = 32;
32 }
33
34 /* ====================================================================
35 * Legacy Prefix F2h-Group 1
36 * ==================================================================== */
37 void __bea_callspec__ PrefREPNE(PDISASM pMyDisasm)
38 {
39 if (!Security(0, pMyDisasm)) return;
40 (*pMyDisasm).Prefix.RepnePrefix = SuperfluousPrefix;
41 GV.EIP_++;
42 (*pMyDisasm).Prefix.Number++;
43 GV.NB_PREFIX++;
44 GV.PrefRepne = 1;
45 (*pMyDisasm).Instruction.Opcode = *((UInt8*) (UIntPtr)GV.EIP_);
46 (void) opcode_map1[*((UInt8*) (UIntPtr)GV.EIP_)](pMyDisasm);
47 GV.PrefRepne = 0;
48 }
49
50 /* ====================================================================
51 * Legacy Prefix F3h-Group 1
52 * ==================================================================== */
53 void __bea_callspec__ PrefREPE(PDISASM pMyDisasm)
54 {
55 if (!Security(0, pMyDisasm)) return;
56 (*pMyDisasm).Prefix.RepPrefix = SuperfluousPrefix;
57 GV.EIP_++;
58 (*pMyDisasm).Prefix.Number++;
59 GV.NB_PREFIX++;
60 GV.PrefRepe = 1;
61 (*pMyDisasm).Instruction.Opcode = *((UInt8*) (UIntPtr)GV.EIP_);
62 (void) opcode_map1[*((UInt8*) (UIntPtr)GV.EIP_)](pMyDisasm);
63 GV.PrefRepe = 0;
64 }
65
66 /* ====================================================================
67 * Legacy Prefix 2Eh-Group 2
68 * ==================================================================== */
69 void __bea_callspec__ PrefSEGCS(PDISASM pMyDisasm)
70 {
71 if (!Security(0, pMyDisasm)) return;
72 (*pMyDisasm).Prefix.CSPrefix = InUsePrefix;
73 GV.EIP_++;
74 (*pMyDisasm).Prefix.Number++;
75 GV.NB_PREFIX++;
76 (*pMyDisasm).Instruction.Opcode = *((UInt8*) (UIntPtr)GV.EIP_);
77 (void) opcode_map1[*((UInt8*) (UIntPtr)GV.EIP_)](pMyDisasm);
78 }
79
80 /* ====================================================================
81 * Legacy Prefix 3Eh-Group 2
82 * ==================================================================== */
83 void __bea_callspec__ PrefSEGDS(PDISASM pMyDisasm)
84 {
85 if (!Security(0, pMyDisasm)) return;
86 (*pMyDisasm).Prefix.DSPrefix = InUsePrefix;
87 GV.EIP_++;
88 (*pMyDisasm).Prefix.Number++;
89 GV.NB_PREFIX++;
90 (*pMyDisasm).Instruction.Opcode = *((UInt8*) (UIntPtr)GV.EIP_);
91 (void) opcode_map1[*((UInt8*) (UIntPtr)GV.EIP_)](pMyDisasm);
92 }
93
94 /* ====================================================================
95 * Legacy Prefix 26h-Group 2
96 * ==================================================================== */
97 void __bea_callspec__ PrefSEGES(PDISASM pMyDisasm)
98 {
99 if (!Security(0, pMyDisasm)) return;
100 (*pMyDisasm).Prefix.ESPrefix = InUsePrefix;
101 GV.EIP_++;
102 (*pMyDisasm).Prefix.Number++;
103 GV.NB_PREFIX++;
104 (*pMyDisasm).Instruction.Opcode = *((UInt8*) (UIntPtr)GV.EIP_);
105 (void) opcode_map1[*((UInt8*) (UIntPtr)GV.EIP_)](pMyDisasm);
106 }
107
108 /* ====================================================================
109 * Legacy Prefix 64h-Group 2
110 * ==================================================================== */
111 void __bea_callspec__ PrefSEGFS(PDISASM pMyDisasm)
112 {
113 if (!Security(0, pMyDisasm)) return;
114 (*pMyDisasm).Prefix.FSPrefix = InUsePrefix;
115 GV.EIP_++;
116 (*pMyDisasm).Prefix.Number++;
117 GV.NB_PREFIX++;
118 GV.SEGMENTFS = 1;
119 (*pMyDisasm).Instruction.Opcode = *((UInt8*) (UIntPtr)GV.EIP_);
120 (void) opcode_map1[*((UInt8*) (UIntPtr)GV.EIP_)](pMyDisasm);
121 }
122
123 /* ====================================================================
124 * Legacy Prefix 65h-Group 2
125 * ==================================================================== */
126 void __bea_callspec__ PrefSEGGS(PDISASM pMyDisasm)
127 {
128 if (!Security(0, pMyDisasm)) return;
129 (*pMyDisasm).Prefix.GSPrefix = InUsePrefix;
130 GV.EIP_++;
131 (*pMyDisasm).Prefix.Number++;
132 GV.NB_PREFIX++;
133 (*pMyDisasm).Instruction.Opcode = *((UInt8*) (UIntPtr)GV.EIP_);
134 (void) opcode_map1[*((UInt8*) (UIntPtr)GV.EIP_)](pMyDisasm);
135 }
136
137
138 /* ====================================================================
139 * Legacy Prefix 36h-Group 2
140 * ==================================================================== */
141 void __bea_callspec__ PrefSEGSS(PDISASM pMyDisasm)
142 {
143 if (!Security(0, pMyDisasm)) return;
144 (*pMyDisasm).Prefix.SSPrefix = InUsePrefix;
145 GV.EIP_++;
146 (*pMyDisasm).Prefix.Number++;
147 GV.NB_PREFIX++;
148 (*pMyDisasm).Instruction.Opcode = *((UInt8*) (UIntPtr)GV.EIP_);
149 (void) opcode_map1[*((UInt8*) (UIntPtr)GV.EIP_)](pMyDisasm);
150 }
151
152 /* ====================================================================
153 * Legacy Prefix 66h-Group 3
154 * ==================================================================== */
155 void __bea_callspec__ PrefOpSize(PDISASM pMyDisasm)
156 {
157 if (!Security(0, pMyDisasm)) return;
158 (*pMyDisasm).Prefix.OperandSize = InUsePrefix;
159 GV.EIP_++;
160 (*pMyDisasm).Prefix.Number++;
161 GV.NB_PREFIX++;
162 GV.OriginalOperandSize = GV.OperandSize; /* if GV.OperandSize is used as a mandatory prefix, keep the real operandsize value */
163 if (GV.Architecture == 16) {
164 GV.OperandSize = 32;
165 }
166 else {
167 if (GV.OperandSize != 64) {
168 GV.OperandSize = 16;
169 }
170 }
171 (*pMyDisasm).Instruction.Opcode = *((UInt8*) (UIntPtr)GV.EIP_);
172 (void) opcode_map1[*((UInt8*) (UIntPtr)GV.EIP_)](pMyDisasm);
173 if (GV.Architecture == 16) {
174 GV.OperandSize = 16;
175 }
176 else {
177 GV.OperandSize = 32;
178 }
179 }
180
181 /* ====================================================================
182 * Legacy Prefix 67h-Group 4
183 * ==================================================================== */
184 void __bea_callspec__ PrefAdSize(PDISASM pMyDisasm)
185 {
186 if (!Security(0, pMyDisasm)) return;
187 (*pMyDisasm).Prefix.AddressSize = InUsePrefix;
188 GV.EIP_++;
189 (*pMyDisasm).Prefix.Number++;
190 GV.NB_PREFIX++;
191 if (GV.Architecture == 16) {
192 GV.AddressSize = GV.AddressSize << 1;
193 }
194 else {
195 GV.AddressSize = GV.AddressSize >> 1;
196 }
197
198 (*pMyDisasm).Instruction.Opcode = *((UInt8*) (UIntPtr)GV.EIP_);
199 (void) opcode_map1[*((UInt8*) (UIntPtr)GV.EIP_)](pMyDisasm);
200 if (GV.Architecture == 16) {
201 GV.AddressSize = GV.AddressSize >> 1;
202 }
203 else {
204 GV.AddressSize = GV.AddressSize << 1;
205 }
206
207 }
208
209 /* ====================================================================
210 * Escape Prefix 0Fh-two bytes opcodes
211 * ==================================================================== */
212 void __bea_callspec__ Esc_2byte(PDISASM pMyDisasm)
213 {
214 if (!Security(0, pMyDisasm)) return;
215 GV.EIP_++;
216 (*pMyDisasm).Instruction.Opcode = *((UInt8*) (UIntPtr)GV.EIP_)+0x0F00;
217 (void) opcode_map2[*((UInt8*) (UIntPtr)GV.EIP_)](pMyDisasm);
218 }
219
220 /* ====================================================================
221 * Escape Prefix 0F38h-three bytes opcodes
222 * ==================================================================== */
223 void __bea_callspec__ Esc_tableA4(PDISASM pMyDisasm)
224 {
225 if (!Security(0, pMyDisasm)) return;
226 GV.EIP_++;
227 (*pMyDisasm).Instruction.Opcode = *((UInt8*) (UIntPtr)GV.EIP_)+0x0F3800;
228 (void) opcode_map3[*((UInt8*) (UIntPtr)GV.EIP_)](pMyDisasm);
229 }
230 /* ====================================================================
231 * Escape Prefix 0F3Ah-three bytes opcodes
232 * ==================================================================== */
233 void __bea_callspec__ Esc_tableA5(PDISASM pMyDisasm)
234 {
235 if (!Security(0, pMyDisasm)) return;
236 GV.EIP_++;
237 (*pMyDisasm).Instruction.Opcode = *((UInt8*) (UIntPtr)GV.EIP_)+0x0F3A00;
238 (void) opcode_map4[*((UInt8*) (UIntPtr)GV.EIP_)](pMyDisasm);
239 }