f4a37271580ee5d665f265690958b4117766f53f
[reactos.git] / reactos / lib / fast486 / opcodes.h
1 /*
2 * Fast486 386/486 CPU Emulation Library
3 * opcodes.h
4 *
5 * Copyright (C) 2014 Aleksandar Andrejevic <theflash AT sdf DOT lonestar DOT org>
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20 */
21
22 #ifndef _OPCODES_H_
23 #define _OPCODES_H_
24
25 #pragma once
26
27 /* DEFINES ********************************************************************/
28
29 #define FAST486_NUM_OPCODE_HANDLERS 256
30 #define FAST486_OPCODE_WRITE_REG (1 << 1)
31 #define FAST486_OPCODE_HANDLER(x) \
32 BOOLEAN FASTCALL x(PFAST486_STATE State, UCHAR Opcode)
33
34 typedef BOOLEAN (FASTCALL *FAST486_OPCODE_HANDLER_PROC)(PFAST486_STATE, UCHAR);
35
36 extern
37 FAST486_OPCODE_HANDLER_PROC
38 Fast486OpcodeHandlers[FAST486_NUM_OPCODE_HANDLERS];
39
40 FAST486_OPCODE_HANDLER(Fast486OpcodePrefix);
41 FAST486_OPCODE_HANDLER(Fast486OpcodeIncrement);
42 FAST486_OPCODE_HANDLER(Fast486OpcodeDecrement);
43 FAST486_OPCODE_HANDLER(Fast486OpcodePushReg);
44 FAST486_OPCODE_HANDLER(Fast486OpcodePopReg);
45 FAST486_OPCODE_HANDLER(Fast486OpcodeNop);
46 FAST486_OPCODE_HANDLER(Fast486OpcodeExchangeEax);
47 FAST486_OPCODE_HANDLER(Fast486OpcodeShortConditionalJmp);
48 FAST486_OPCODE_HANDLER(Fast486OpcodeClearCarry);
49 FAST486_OPCODE_HANDLER(Fast486OpcodeSetCarry);
50 FAST486_OPCODE_HANDLER(Fast486OpcodeComplCarry);
51 FAST486_OPCODE_HANDLER(Fast486OpcodeClearInt);
52 FAST486_OPCODE_HANDLER(Fast486OpcodeSetInt);
53 FAST486_OPCODE_HANDLER(Fast486OpcodeClearDir);
54 FAST486_OPCODE_HANDLER(Fast486OpcodeSetDir);
55 FAST486_OPCODE_HANDLER(Fast486OpcodeHalt);
56 FAST486_OPCODE_HANDLER(Fast486OpcodeInByte);
57 FAST486_OPCODE_HANDLER(Fast486OpcodeIn);
58 FAST486_OPCODE_HANDLER(Fast486OpcodeOutByte);
59 FAST486_OPCODE_HANDLER(Fast486OpcodeOut);
60 FAST486_OPCODE_HANDLER(Fast486OpcodeShortJump);
61 FAST486_OPCODE_HANDLER(Fast486OpcodeMovRegImm);
62 FAST486_OPCODE_HANDLER(Fast486OpcodeMovByteRegImm);
63 FAST486_OPCODE_HANDLER(Fast486OpcodeAddByteModrm);
64 FAST486_OPCODE_HANDLER(Fast486OpcodeAddModrm);
65 FAST486_OPCODE_HANDLER(Fast486OpcodeAddAl);
66 FAST486_OPCODE_HANDLER(Fast486OpcodeAddEax);
67 FAST486_OPCODE_HANDLER(Fast486OpcodeOrByteModrm);
68 FAST486_OPCODE_HANDLER(Fast486OpcodeOrModrm);
69 FAST486_OPCODE_HANDLER(Fast486OpcodeOrAl);
70 FAST486_OPCODE_HANDLER(Fast486OpcodeOrEax);
71 FAST486_OPCODE_HANDLER(Fast486OpcodeAndByteModrm);
72 FAST486_OPCODE_HANDLER(Fast486OpcodeAndModrm);
73 FAST486_OPCODE_HANDLER(Fast486OpcodeAndAl);
74 FAST486_OPCODE_HANDLER(Fast486OpcodeAndEax);
75 FAST486_OPCODE_HANDLER(Fast486OpcodeXorByteModrm);
76 FAST486_OPCODE_HANDLER(Fast486OpcodeXorModrm);
77 FAST486_OPCODE_HANDLER(Fast486OpcodeXorAl);
78 FAST486_OPCODE_HANDLER(Fast486OpcodeXorEax);
79 FAST486_OPCODE_HANDLER(Fast486OpcodeTestByteModrm);
80 FAST486_OPCODE_HANDLER(Fast486OpcodeTestModrm);
81 FAST486_OPCODE_HANDLER(Fast486OpcodeTestAl);
82 FAST486_OPCODE_HANDLER(Fast486OpcodeTestEax);
83 FAST486_OPCODE_HANDLER(Fast486OpcodeXchgByteModrm);
84 FAST486_OPCODE_HANDLER(Fast486OpcodeXchgModrm);
85 FAST486_OPCODE_HANDLER(Fast486OpcodePushEs);
86 FAST486_OPCODE_HANDLER(Fast486OpcodePopEs);
87 FAST486_OPCODE_HANDLER(Fast486OpcodePushCs);
88 FAST486_OPCODE_HANDLER(Fast486OpcodeAdcByteModrm);
89 FAST486_OPCODE_HANDLER(Fast486OpcodeAdcModrm);
90 FAST486_OPCODE_HANDLER(Fast486OpcodeAdcAl);
91 FAST486_OPCODE_HANDLER(Fast486OpcodeAdcEax);
92 FAST486_OPCODE_HANDLER(Fast486OpcodePushSs);
93 FAST486_OPCODE_HANDLER(Fast486OpcodePopSs);
94 FAST486_OPCODE_HANDLER(Fast486OpcodeSbbByteModrm);
95 FAST486_OPCODE_HANDLER(Fast486OpcodeSbbModrm);
96 FAST486_OPCODE_HANDLER(Fast486OpcodeSbbAl);
97 FAST486_OPCODE_HANDLER(Fast486OpcodeSbbEax);
98 FAST486_OPCODE_HANDLER(Fast486OpcodePushDs);
99 FAST486_OPCODE_HANDLER(Fast486OpcodePopDs);
100 FAST486_OPCODE_HANDLER(Fast486OpcodeDaa);
101 FAST486_OPCODE_HANDLER(Fast486OpcodeCmpSubByteModrm);
102 FAST486_OPCODE_HANDLER(Fast486OpcodeCmpSubModrm);
103 FAST486_OPCODE_HANDLER(Fast486OpcodeCmpSubAl);
104 FAST486_OPCODE_HANDLER(Fast486OpcodeCmpSubEax);
105 FAST486_OPCODE_HANDLER(Fast486OpcodeDas);
106 FAST486_OPCODE_HANDLER(Fast486OpcodeAaa);
107 FAST486_OPCODE_HANDLER(Fast486OpcodeAas);
108 FAST486_OPCODE_HANDLER(Fast486OpcodePushAll);
109 FAST486_OPCODE_HANDLER(Fast486OpcodePopAll);
110 FAST486_OPCODE_HANDLER(Fast486OpcodeBound);
111 FAST486_OPCODE_HANDLER(Fast486OpcodeArpl);
112 FAST486_OPCODE_HANDLER(Fast486OpcodePushImm);
113 FAST486_OPCODE_HANDLER(Fast486OpcodeImulModrmImm);
114 FAST486_OPCODE_HANDLER(Fast486OpcodePushByteImm);
115 FAST486_OPCODE_HANDLER(Fast486OpcodeMovByteModrm);
116 FAST486_OPCODE_HANDLER(Fast486OpcodeMovModrm);
117 FAST486_OPCODE_HANDLER(Fast486OpcodeMovStoreSeg);
118 FAST486_OPCODE_HANDLER(Fast486OpcodeLea);
119 FAST486_OPCODE_HANDLER(Fast486OpcodeMovLoadSeg);
120 FAST486_OPCODE_HANDLER(Fast486OpcodeCwde);
121 FAST486_OPCODE_HANDLER(Fast486OpcodeCdq);
122 FAST486_OPCODE_HANDLER(Fast486OpcodeCallAbs);
123 FAST486_OPCODE_HANDLER(Fast486OpcodeWait);
124 FAST486_OPCODE_HANDLER(Fast486OpcodePushFlags);
125 FAST486_OPCODE_HANDLER(Fast486OpcodePopFlags);
126 FAST486_OPCODE_HANDLER(Fast486OpcodeSahf);
127 FAST486_OPCODE_HANDLER(Fast486OpcodeLahf);
128 FAST486_OPCODE_HANDLER(Fast486OpcodeRet);
129 FAST486_OPCODE_HANDLER(Fast486OpcodeLdsLes);
130 FAST486_OPCODE_HANDLER(Fast486OpcodeEnter);
131 FAST486_OPCODE_HANDLER(Fast486OpcodeLeave);
132 FAST486_OPCODE_HANDLER(Fast486OpcodeRetFarImm);
133 FAST486_OPCODE_HANDLER(Fast486OpcodeRetFar);
134 FAST486_OPCODE_HANDLER(Fast486OpcodeInt);
135 FAST486_OPCODE_HANDLER(Fast486OpcodeIret);
136 FAST486_OPCODE_HANDLER(Fast486OpcodeAam);
137 FAST486_OPCODE_HANDLER(Fast486OpcodeAad);
138 FAST486_OPCODE_HANDLER(Fast486OpcodeXlat);
139 FAST486_OPCODE_HANDLER(Fast486OpcodeLoop);
140 FAST486_OPCODE_HANDLER(Fast486OpcodeJecxz);
141 FAST486_OPCODE_HANDLER(Fast486OpcodeCall);
142 FAST486_OPCODE_HANDLER(Fast486OpcodeJmp);
143 FAST486_OPCODE_HANDLER(Fast486OpcodeJmpAbs);
144 FAST486_OPCODE_HANDLER(Fast486OpcodeMovAlOffset);
145 FAST486_OPCODE_HANDLER(Fast486OpcodeMovEaxOffset);
146 FAST486_OPCODE_HANDLER(Fast486OpcodeMovOffsetAl);
147 FAST486_OPCODE_HANDLER(Fast486OpcodeMovOffsetEax);
148 FAST486_OPCODE_HANDLER(Fast486OpcodeSalc);
149 FAST486_OPCODE_HANDLER(Fast486OpcodeMovs);
150 FAST486_OPCODE_HANDLER(Fast486OpcodeCmps);
151 FAST486_OPCODE_HANDLER(Fast486OpcodeStos);
152 FAST486_OPCODE_HANDLER(Fast486OpcodeLods);
153 FAST486_OPCODE_HANDLER(Fast486OpcodeScas);
154 FAST486_OPCODE_HANDLER(Fast486OpcodeIns);
155 FAST486_OPCODE_HANDLER(Fast486OpcodeOuts);
156
157 #endif // _OPCODES_H_