-
Notifications
You must be signed in to change notification settings - Fork 9
/
core286.c
42 lines (35 loc) · 1.06 KB
/
core286.c
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
#include "minx86dec/state.h"
#include "minx86dec/opcodes.h"
static minx86_read_ptr_t cip;
#include "minx86dec/x86_core_macros.h"
void minx86dec_decode286(struct minx86dec_state *state,struct minx86dec_instruction *ins) {
cip = state->read_ip;
#define core_level 2
#define isdata32 0 /* no 386-style 32-bit */
#define isaddr32 0 /* no 386-style 32-bit */
#define no_32
#define fpu_level 2
ins->start = state->read_ip;
ins->opcode = MXOP_UD;
ins->segment = -1;
ins->argc = 0;
/* this follows the DOSBox style of core implementation by having one
* master header file with decoding logic #included with #defines to
* enable/disable functions */
{
#include "x86_core.h"
}
/* invalid opcode. step 1 forward (2 if FPU instruction) */
if (ins->opcode == MXOP_UD) {
ins->argc = 0;
if ((*(state->read_ip) & 0xF8) == 0xD8)
ins->end = state->read_ip = (ins->start + 2);
else if (*(state->read_ip) == 0x0F)
ins->end = state->read_ip = (ins->start + 2);
else
ins->end = state->read_ip = (ins->start + 1);
}
else {
ins->end = state->read_ip = cip;
}
}