.
const uint8_t table[][16] = {
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f},
{0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff},
{0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03},
{0xff,0x00,0xff,0xff,0xff,0xff,0xff,0x1f,0xff,0x00,0xff,0xff,0xff,0xff,0xff,0x1f},
{0xff,0x00,0xff,0xff,0xff,0xff,0xff,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f},
{0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f},
{0xff,0x00,0xff,0xff,0xff,0xff,0xff,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03},
{0xff,0x00,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0xff,0x00,0xff,0xff,0xff,0xff,0xff,0x03,0xff,0x00,0xff,0xff,0xff,0xff,0xff,0x03},
{0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03},
{0xff,0x00,0xff,0xff,0xff,0xff,0xff,0x1f,0x00,0x00,0xff,0x00,0x00,0xff,0xff,0x0f},
{0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0x03},
{0x00,0x00,0xff,0xff,0xff,0xff,0xff,0x03,0xff,0x00,0xff,0xff,0xff,0xff,0xff,0x1f},
{0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0xff,0x00,0xff,0xff,0xff,0xff,0xff,0x1f},
{0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0x03},
{0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0xff,0x00,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0xff,0x00,0xff,0xff,0xff,0xff,0xff,0x13,0xff,0x00,0xff,0xff,0xff,0xff,0xff,0x13},
{0xff,0x00,0xff,0xff,0xff,0xff,0xff,0x03,0xff,0x00,0xff,0xff,0xff,0xff,0xff,0x1f},
{0xff,0x00,0xff,0xff,0xff,0xff,0xff,0x0f,0xff,0x00,0xff,0xff,0xff,0xff,0xff,0x03},
{0xff,0x00,0xff,0xff,0xff,0xff,0xff,0x03,0xff,0x00,0xff,0x00,0x00,0xff,0xff,0x0f},
{0xff,0x00,0xff,0x00,0xff,0xff,0xff,0x03,0xff,0x00,0xff,0x00,0xff,0xff,0xff,0x03},
{0x00,0x00,0xff,0xff,0x00,0xff,0xff,0x0f,0x00,0x00,0xff,0xff,0x00,0xff,0xff,0x0f},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0x00},
{0x00,0x00,0xff,0x00,0x00,0xff,0xff,0x0f,0x00,0x00,0xff,0x00,0x00,0xff,0xff,0x0f}
};
const uint8_t table2[512] = {
19,18,11, 3,19,18,11, 3,10,18,11, 3,10,18,11, 3,
21,10,11, 3,19,18,11, 3,10,18,11, 3, 0, 0,11, 3,
8, 4, 4, 4, 8, 4, 4, 4, 8, 4, 4, 8, 8, 4, 4, 8,
8, 4, 4, 8, 8, 4, 4, 8, 8, 4, 4, 8, 8, 4, 4, 8,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 1, 1, 1, 9,
1, 1, 1, 9, 1, 1, 1, 9, 1, 1, 1, 9, 1, 1, 1, 9,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 1, 1, 1, 9,
1, 1, 1, 9, 1, 1, 1, 9, 1, 1, 1, 9, 1, 1, 1, 9,
10,10, 0,12,10,18, 0,12,10,20, 0,12,10,20, 0,12,
22,23, 0,12,10,10, 0,12, 0,24, 0,12,25,26, 0,12,
7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3,
7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0,
2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0,
4, 4,13,14, 4, 4,13,14, 4, 4,13,14, 4, 4,13,14,
4, 4,13,14, 4, 4,13,14, 4, 4,13,14, 4, 4,13,14,
5, 1, 3, 6, 5, 1, 3, 6, 5, 1, 3, 6, 5, 1, 3, 6,
5, 1, 3, 6, 5, 1, 3, 6, 5, 1, 3, 6, 5, 1, 3, 6,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5, 1, 3, 6, 5, 1, 3, 6, 5, 1, 3, 6, 5, 1, 3, 6,
5, 1, 3, 6, 5, 1, 3, 6, 5, 1, 3, 6, 5, 1, 3, 6,
4, 4, 3,15, 4, 4, 3,15, 4, 4, 3,15, 4, 4, 3,15,
4, 4, 3,15, 4, 4, 3,15, 4, 4, 3,15, 4, 4, 3,15,
5, 1, 3, 6, 5, 1, 3, 6, 5, 1, 3, 6, 5, 1, 3, 6,
5, 1, 3, 6, 5, 1, 3, 6, 5, 1, 3, 6, 5, 1, 3, 6,
2,16, 2,16, 2,16, 2,16, 2,16, 2,16, 2,16, 2,16,
2,17, 2,17, 2,17, 2,17, 2,17, 2,17, 2,17, 2,17,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
uint8_t m68k_opcode_valid_table[0x2000];
void init_m68k_opcode_valid(void) {
for (int i = 0; i < 512; i++) {
int offset = i * 16;
for (int j = 0; j < 16; j++)
m68k_opcode_valid_table[offset + j] = table[table2[i]][j];
}
}
bool m68k_opcode_valid(uint16_t opcode) {
return ((m68k_opcode_valid_table[opcode >> 3]) & (1 << (opcode & 7))) != 0;
}
всё работает. спс