aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStapleButter <thetotalworm@gmail.com>2016-11-24 18:31:49 +0100
committerStapleButter <thetotalworm@gmail.com>2016-11-24 18:31:49 +0100
commitf74fb2dd27d739b22c44c4df793fb894fc5b5aef (patch)
treea31d17aa09f2a46817527dbf633bf878b14109f5
parent3505ec993b0d700800f77c667078e2c552a38b34 (diff)
well, adding shit. laying out the base for the interpreter. really dirty code.
-rw-r--r--ARM.cpp24
-rw-r--r--ARM.h6
-rw-r--r--ARMInterpreter.cpp31
-rw-r--r--ARMInterpreter.h16
-rw-r--r--ARMInterpreter_Branch.cpp27
-rw-r--r--ARMInterpreter_Branch.h13
-rw-r--r--ARM_InstrTable.h1962
-rw-r--r--NDS.cpp34
-rw-r--r--NDS.h4
-rw-r--r--main.cpp5
-rw-r--r--melonDS.depend30
11 files changed, 2139 insertions, 13 deletions
diff --git a/ARM.cpp b/ARM.cpp
index 47d5ec9..2e51d86 100644
--- a/ARM.cpp
+++ b/ARM.cpp
@@ -1,31 +1,37 @@
-#include "ARM.h"
+#include <stdio.h>
#include "NDS.h"
+#include "ARM.h"
+#include "ARMInterpreter.h"
ARM::ARM(u32 num)
{
// well uh
Num = num;
+}
+
+ARM::~ARM()
+{
+ // dorp
+}
+void ARM::Reset()
+{
for (int i = 0; i < 16; i++)
R[i] = 0;
- ExceptionBase = num ? 0x00000000 : 0xFFFF0000;
+ ExceptionBase = Num ? 0x00000000 : 0xFFFF0000;
// zorp
JumpTo(ExceptionBase);
}
-ARM::~ARM()
-{
- // dorp
-}
-
void ARM::JumpTo(u32 addr)
{
// pipeline shit
// TODO: THUMB!!
+ if (addr&1) printf("!!! THUMB JUMP\n");
NextInstr = Read32(addr);
R[15] = addr+4;
@@ -43,7 +49,9 @@ s32 ARM::Execute(s32 cycles)
R[15] += 4;
// actually execute
- // er...
+ if ((CurInstr & 0xF0000000) != 0xE0000000) printf("well shit\n");
+ u32 icode = ((CurInstr >> 4) & 0xF) | ((CurInstr >> 16) & 0xFF0);
+ cycles -= ARMInterpreter::ARMInstrTable[icode](this);
}
return cycles;
diff --git a/ARM.h b/ARM.h
index 024ecb9..b1ce0bf 100644
--- a/ARM.h
+++ b/ARM.h
@@ -6,12 +6,18 @@
#include "types.h"
#include "NDS.h"
+// lame
+#define C_S(x) x
+#define C_N(x) x
+
class ARM
{
public:
ARM(u32 num);
~ARM(); // destroy shit
+ void Reset();
+
void JumpTo(u32 addr);
s32 Execute(s32 cycles);
diff --git a/ARMInterpreter.cpp b/ARMInterpreter.cpp
new file mode 100644
index 0000000..2acef27
--- /dev/null
+++ b/ARMInterpreter.cpp
@@ -0,0 +1,31 @@
+#include <stdio.h>
+#include "NDS.h"
+#include "ARMInterpreter.h"
+#include "ARMInterpreter_Branch.h"
+
+
+namespace ARMInterpreter
+{
+
+
+s32 A_UNK(ARM* cpu)
+{
+ printf("undefined ARM instruction %08X @ %08X\n", cpu->CurInstr, cpu->R[15]-8);
+ NDS::Halt();
+ return 0x7FFFFFFF;
+}
+
+s32 T_UNK(ARM* cpu)
+{
+ printf("undefined THUMB instruction %04X @ %08X\n", cpu->CurInstr, cpu->R[15]-4);
+ NDS::Halt();
+ return 0x7FFFFFFF;
+}
+
+
+
+#define INSTRFUNC_PROTO(x) s32 (*x)(ARM* cpu)
+#include "ARM_InstrTable.h"
+#undef INSTRFUNC_PROTO
+
+}
diff --git a/ARMInterpreter.h b/ARMInterpreter.h
new file mode 100644
index 0000000..5318b81
--- /dev/null
+++ b/ARMInterpreter.h
@@ -0,0 +1,16 @@
+
+#ifndef ARMINTERPRETER_H
+#define ARMINTERPRETER_H
+
+#include "types.h"
+#include "ARM.h"
+
+namespace ARMInterpreter
+{
+
+extern s32 (*ARMInstrTable[4096])(ARM* cpu);
+extern s32 (*THUMBInstrTable[1024])(ARM* cpu);
+
+}
+
+#endif // ARMINTERPRETER_H
diff --git a/ARMInterpreter_Branch.cpp b/ARMInterpreter_Branch.cpp
new file mode 100644
index 0000000..4555235
--- /dev/null
+++ b/ARMInterpreter_Branch.cpp
@@ -0,0 +1,27 @@
+#include "ARM.h"
+
+
+namespace ARMInterpreter
+{
+
+
+s32 A_B(ARM* cpu)
+{
+ s32 offset = (s32)(cpu->CurInstr << 8) >> 6;
+ cpu->JumpTo(cpu->R[15] + offset);
+
+ return C_S(2) + C_N(1);
+}
+
+s32 A_BL(ARM* cpu)
+{
+ s32 offset = (s32)(cpu->CurInstr << 8) >> 6;
+ cpu->R[14] = cpu->R[15] - 4;
+ cpu->JumpTo(cpu->R[15] + offset);
+
+ return C_S(2) + C_N(1);
+}
+
+
+}
+
diff --git a/ARMInterpreter_Branch.h b/ARMInterpreter_Branch.h
new file mode 100644
index 0000000..cb7926f
--- /dev/null
+++ b/ARMInterpreter_Branch.h
@@ -0,0 +1,13 @@
+
+#ifndef ARMINTERPRETER_BRANCH_H
+#define ARMINTERPRETER_BRANCH_H
+
+namespace ARMInterpreter
+{
+
+s32 A_B(ARM* cpu);
+s32 A_BL(ARM* cpu);
+
+}
+
+#endif
diff --git a/ARM_InstrTable.h b/ARM_InstrTable.h
new file mode 100644
index 0000000..812d040
--- /dev/null
+++ b/ARM_InstrTable.h
@@ -0,0 +1,1962 @@
+
+INSTRFUNC_PROTO(ARMInstrTable[4096]) =
+{
+ // 0000 0000 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0000 0001 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0000 0010 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0000 0011 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0000 0100 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0000 0101 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0000 0110 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0000 0111 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0000 1000 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0000 1001 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0000 1010 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0000 1011 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0000 1100 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0000 1101 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0000 1110 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0000 1111 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+
+
+ // 0001 0000 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0001 0001 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0001 0010 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0001 0011 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0001 0100 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0001 0101 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0001 0110 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0001 0111 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0001 1000 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0001 1001 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0001 1010 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0001 1011 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0001 1100 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0001 1101 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0001 1110 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0001 1111 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+
+
+ // 0010 0000 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0010 0001 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0010 0010 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0010 0011 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0010 0100 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0010 0101 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0010 0110 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0010 0111 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0010 1000 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0010 1001 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0010 1010 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0010 1011 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0010 1100 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0010 1101 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0010 1110 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0010 1111 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+
+
+ // 0011 0000 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0011 0001 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0011 0010 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0011 0011 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0011 0100 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0011 0101 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0011 0110 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0011 0111 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0011 1000 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0011 1001 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0011 1010 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0011 1011 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0011 1100 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0011 1101 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0011 1110 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0011 1111 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+
+
+ // 0100 0000 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0100 0001 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0100 0010 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0100 0011 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0100 0100 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0100 0101 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0100 0110 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0100 0111 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0100 1000 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0100 1001 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0100 1010 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0100 1011 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0100 1100 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0100 1101 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0100 1110 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0100 1111 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+
+
+ // 0101 0000 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0101 0001 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0101 0010 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0101 0011 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0101 0100 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0101 0101 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0101 0110 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0101 0111 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0101 1000 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0101 1001 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0101 1010 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0101 1011 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0101 1100 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0101 1101 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0101 1110 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0101 1111 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+
+
+ // 0110 0000 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0110 0001 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0110 0010 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0110 0011 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0110 0100 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0110 0101 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0110 0110 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0110 0111 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0110 1000 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0110 1001 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0110 1010 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0110 1011 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0110 1100 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0110 1101 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0110 1110 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0110 1111 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+
+
+ // 0111 0000 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0111 0001 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0111 0010 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0111 0011 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0111 0100 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0111 0101 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0111 0110 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0111 0111 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0111 1000 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0111 1001 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0111 1010 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0111 1011 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0111 1100 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0111 1101 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0111 1110 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 0111 1111 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+
+
+ // 1000 0000 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1000 0001 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1000 0010 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1000 0011 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1000 0100 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1000 0101 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1000 0110 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1000 0111 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1000 1000 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1000 1001 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1000 1010 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1000 1011 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1000 1100 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1000 1101 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1000 1110 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1000 1111 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+
+
+ // 1001 0000 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1001 0001 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1001 0010 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1001 0011 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1001 0100 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1001 0101 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1001 0110 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1001 0111 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1001 1000 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1001 1001 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1001 1010 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1001 1011 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1001 1100 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1001 1101 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1001 1110 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1001 1111 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+
+
+ // 1010 0000 0000
+ A_B, A_B, A_B, A_B,
+ A_B, A_B, A_B, A_B,
+ A_B, A_B, A_B, A_B,
+ A_B, A_B, A_B, A_B,
+
+ // 1010 0001 0000
+ A_B, A_B, A_B, A_B,
+ A_B, A_B, A_B, A_B,
+ A_B, A_B, A_B, A_B,
+ A_B, A_B, A_B, A_B,
+
+ // 1010 0010 0000
+ A_B, A_B, A_B, A_B,
+ A_B, A_B, A_B, A_B,
+ A_B, A_B, A_B, A_B,
+ A_B, A_B, A_B, A_B,
+
+ // 1010 0011 0000
+ A_B, A_B, A_B, A_B,
+ A_B, A_B, A_B, A_B,
+ A_B, A_B, A_B, A_B,
+ A_B, A_B, A_B, A_B,
+
+ // 1010 0100 0000
+ A_B, A_B, A_B, A_B,
+ A_B, A_B, A_B, A_B,
+ A_B, A_B, A_B, A_B,
+ A_B, A_B, A_B, A_B,
+
+ // 1010 0101 0000
+ A_B, A_B, A_B, A_B,
+ A_B, A_B, A_B, A_B,
+ A_B, A_B, A_B, A_B,
+ A_B, A_B, A_B, A_B,
+
+ // 1010 0110 0000
+ A_B, A_B, A_B, A_B,
+ A_B, A_B, A_B, A_B,
+ A_B, A_B, A_B, A_B,
+ A_B, A_B, A_B, A_B,
+
+ // 1010 0111 0000
+ A_B, A_B, A_B, A_B,
+ A_B, A_B, A_B, A_B,
+ A_B, A_B, A_B, A_B,
+ A_B, A_B, A_B, A_B,
+
+ // 1010 1000 0000
+ A_B, A_B, A_B, A_B,
+ A_B, A_B, A_B, A_B,
+ A_B, A_B, A_B, A_B,
+ A_B, A_B, A_B, A_B,
+
+ // 1010 1001 0000
+ A_B, A_B, A_B, A_B,
+ A_B, A_B, A_B, A_B,
+ A_B, A_B, A_B, A_B,
+ A_B, A_B, A_B, A_B,
+
+ // 1010 1010 0000
+ A_B, A_B, A_B, A_B,
+ A_B, A_B, A_B, A_B,
+ A_B, A_B, A_B, A_B,
+ A_B, A_B, A_B, A_B,
+
+ // 1010 1011 0000
+ A_B, A_B, A_B, A_B,
+ A_B, A_B, A_B, A_B,
+ A_B, A_B, A_B, A_B,
+ A_B, A_B, A_B, A_B,
+
+ // 1010 1100 0000
+ A_B, A_B, A_B, A_B,
+ A_B, A_B, A_B, A_B,
+ A_B, A_B, A_B, A_B,
+ A_B, A_B, A_B, A_B,
+
+ // 1010 1101 0000
+ A_B, A_B, A_B, A_B,
+ A_B, A_B, A_B, A_B,
+ A_B, A_B, A_B, A_B,
+ A_B, A_B, A_B, A_B,
+
+ // 1010 1110 0000
+ A_B, A_B, A_B, A_B,
+ A_B, A_B, A_B, A_B,
+ A_B, A_B, A_B, A_B,
+ A_B, A_B, A_B, A_B,
+
+ // 1010 1111 0000
+ A_B, A_B, A_B, A_B,
+ A_B, A_B, A_B, A_B,
+ A_B, A_B, A_B, A_B,
+ A_B, A_B, A_B, A_B,
+
+
+
+ // 1011 0000 0000
+ A_BL, A_BL, A_BL, A_BL,
+ A_BL, A_BL, A_BL, A_BL,
+ A_BL, A_BL, A_BL, A_BL,
+ A_BL, A_BL, A_BL, A_BL,
+
+ // 1011 0001 0000
+ A_BL, A_BL, A_BL, A_BL,
+ A_BL, A_BL, A_BL, A_BL,
+ A_BL, A_BL, A_BL, A_BL,
+ A_BL, A_BL, A_BL, A_BL,
+
+ // 1011 0010 0000
+ A_BL, A_BL, A_BL, A_BL,
+ A_BL, A_BL, A_BL, A_BL,
+ A_BL, A_BL, A_BL, A_BL,
+ A_BL, A_BL, A_BL, A_BL,
+
+ // 1011 0011 0000
+ A_BL, A_BL, A_BL, A_BL,
+ A_BL, A_BL, A_BL, A_BL,
+ A_BL, A_BL, A_BL, A_BL,
+ A_BL, A_BL, A_BL, A_BL,
+
+ // 1011 0100 0000
+ A_BL, A_BL, A_BL, A_BL,
+ A_BL, A_BL, A_BL, A_BL,
+ A_BL, A_BL, A_BL, A_BL,
+ A_BL, A_BL, A_BL, A_BL,
+
+ // 1011 0101 0000
+ A_BL, A_BL, A_BL, A_BL,
+ A_BL, A_BL, A_BL, A_BL,
+ A_BL, A_BL, A_BL, A_BL,
+ A_BL, A_BL, A_BL, A_BL,
+
+ // 1011 0110 0000
+ A_BL, A_BL, A_BL, A_BL,
+ A_BL, A_BL, A_BL, A_BL,
+ A_BL, A_BL, A_BL, A_BL,
+ A_BL, A_BL, A_BL, A_BL,
+
+ // 1011 0111 0000
+ A_BL, A_BL, A_BL, A_BL,
+ A_BL, A_BL, A_BL, A_BL,
+ A_BL, A_BL, A_BL, A_BL,
+ A_BL, A_BL, A_BL, A_BL,
+
+ // 1011 1000 0000
+ A_BL, A_BL, A_BL, A_BL,
+ A_BL, A_BL, A_BL, A_BL,
+ A_BL, A_BL, A_BL, A_BL,
+ A_BL, A_BL, A_BL, A_BL,
+
+ // 1011 1001 0000
+ A_BL, A_BL, A_BL, A_BL,
+ A_BL, A_BL, A_BL, A_BL,
+ A_BL, A_BL, A_BL, A_BL,
+ A_BL, A_BL, A_BL, A_BL,
+
+ // 1011 1010 0000
+ A_BL, A_BL, A_BL, A_BL,
+ A_BL, A_BL, A_BL, A_BL,
+ A_BL, A_BL, A_BL, A_BL,
+ A_BL, A_BL, A_BL, A_BL,
+
+ // 1011 1011 0000
+ A_BL, A_BL, A_BL, A_BL,
+ A_BL, A_BL, A_BL, A_BL,
+ A_BL, A_BL, A_BL, A_BL,
+ A_BL, A_BL, A_BL, A_BL,
+
+ // 1011 1100 0000
+ A_BL, A_BL, A_BL, A_BL,
+ A_BL, A_BL, A_BL, A_BL,
+ A_BL, A_BL, A_BL, A_BL,
+ A_BL, A_BL, A_BL, A_BL,
+
+ // 1011 1101 0000
+ A_BL, A_BL, A_BL, A_BL,
+ A_BL, A_BL, A_BL, A_BL,
+ A_BL, A_BL, A_BL, A_BL,
+ A_BL, A_BL, A_BL, A_BL,
+
+ // 1011 1110 0000
+ A_BL, A_BL, A_BL, A_BL,
+ A_BL, A_BL, A_BL, A_BL,
+ A_BL, A_BL, A_BL, A_BL,
+ A_BL, A_BL, A_BL, A_BL,
+
+ // 1011 1111 0000
+ A_BL, A_BL, A_BL, A_BL,
+ A_BL, A_BL, A_BL, A_BL,
+ A_BL, A_BL, A_BL, A_BL,
+ A_BL, A_BL, A_BL, A_BL,
+
+
+
+ // 1100 0000 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1100 0001 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1100 0010 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1100 0011 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1100 0100 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1100 0101 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1100 0110 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1100 0111 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1100 1000 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1100 1001 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1100 1010 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1100 1011 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1100 1100 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1100 1101 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1100 1110 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1100 1111 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+
+
+ // 1101 0000 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1101 0001 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1101 0010 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1101 0011 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1101 0100 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1101 0101 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1101 0110 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1101 0111 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1101 1000 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1101 1001 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1101 1010 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1101 1011 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1101 1100 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1101 1101 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1101 1110 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1101 1111 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+
+
+ // 1110 0000 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1110 0001 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1110 0010 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1110 0011 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1110 0100 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1110 0101 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1110 0110 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1110 0111 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1110 1000 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1110 1001 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1110 1010 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1110 1011 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1110 1100 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1110 1101 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1110 1110 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1110 1111 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+
+
+ // 1111 0000 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1111 0001 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1111 0010 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1111 0011 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1111 0100 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1111 0101 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1111 0110 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1111 0111 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1111 1000 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1111 1001 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1111 1010 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1111 1011 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1111 1100 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1111 1101 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1111 1110 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+
+ // 1111 1111 0000
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK,
+ A_UNK, A_UNK, A_UNK, A_UNK
+};
+
+INSTRFUNC_PROTO(THUMBInstrTable[1024]) =
+{
+ // 0000 0000 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 0000 0100 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 0000 1000 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 0000 1100 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 0001 0000 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 0001 0100 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 0001 1000 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 0001 1100 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 0010 0000 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 0010 0100 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 0010 1000 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 0010 1100 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 0011 0000 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 0011 0100 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 0011 1000 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 0011 1100 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+
+
+ // 0100 0000 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 0100 0100 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 0100 1000 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 0100 1100 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 0101 0000 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 0101 0100 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 0101 1000 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 0101 1100 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 0110 0000 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 0110 0100 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 0110 1000 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 0110 1100 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 0111 0000 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 0111 0100 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 0111 1000 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 0111 1100 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+
+
+ // 1000 0000 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 1000 0100 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 1000 1000 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 1000 1100 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 1001 0000 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 1001 0100 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 1001 1000 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 1001 1100 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 1010 0000 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 1010 0100 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 1010 1000 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 1010 1100 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 1011 0000 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 1011 0100 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 1011 1000 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 1011 1100 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+
+
+ // 1100 0000 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 1100 0100 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 1100 1000 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 1100 1100 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 1101 0000 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 1101 0100 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 1101 1000 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 1101 1100 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 1110 0000 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 1110 0100 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 1110 1000 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 1110 1100 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 1111 0000 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 1111 0100 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 1111 1000 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+
+ // 1111 1100 00
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK,
+ T_UNK, T_UNK, T_UNK, T_UNK
+};
diff --git a/NDS.cpp b/NDS.cpp
index 71de789..038cf09 100644
--- a/NDS.cpp
+++ b/NDS.cpp
@@ -9,9 +9,13 @@ namespace NDS
ARM* ARM9;
ARM* ARM7;
+s32 ARM9Cycles, ARM7Cycles;
+
u8 ARM9BIOS[0x1000];
u8 ARM7BIOS[0x4000];
+bool Running;
+
void Init()
{
@@ -48,6 +52,36 @@ void Reset()
printf("ARM7 BIOS loaded: %08X\n", ARM7Read32(0x00000000));
fclose(f);
}
+
+ ARM9->Reset();
+ ARM7->Reset();
+
+ ARM9Cycles = 0;
+ ARM7Cycles = 0;
+
+ Running = true; // hax
+}
+
+
+void RunFrame()
+{
+ s32 framecycles = 560190<<1;
+
+ // very gross and temp. loop
+
+ while (Running && framecycles>0)
+ {
+ ARM9Cycles = ARM9->Execute(32 + ARM9Cycles);
+ ARM7Cycles = ARM7->Execute(16 + ARM7Cycles);
+
+ framecycles -= 32;
+ }
+}
+
+
+void Halt()
+{
+ Running = false;
}
diff --git a/NDS.h b/NDS.h
index dff2693..a1e7283 100644
--- a/NDS.h
+++ b/NDS.h
@@ -10,6 +10,10 @@ namespace NDS
void Init();
void Reset();
+void RunFrame();
+
+void Halt();
+
u32 ARM9Read32(u32 addr);
u32 ARM7Read32(u32 addr);
diff --git a/main.cpp b/main.cpp
index 7ac564b..376dea1 100644
--- a/main.cpp
+++ b/main.cpp
@@ -9,5 +9,10 @@ int main()
NDS::Init();
+ for (;;)
+ {
+ NDS::RunFrame();
+ }
+
return 0;
}
diff --git a/melonDS.depend b/melonDS.depend
index c60dba6..988dd07 100644
--- a/melonDS.depend
+++ b/melonDS.depend
@@ -1,20 +1,40 @@
# depslib dependency file v1.0
-1478130209 source:c:\documents\sources\melonds\main.cpp
+1480007651 source:c:\documents\sources\melonds\main.cpp
<stdio.h>
"NDS.h"
-1478129148 c:\documents\sources\melonds\nds.h
+1480006838 c:\documents\sources\melonds\nds.h
"types.h"
1463409689 c:\documents\sources\melonds\types.h
-1463410049 source:c:\documents\sources\melonds\nds.cpp
+1480007757 source:c:\documents\sources\melonds\nds.cpp
<stdio.h>
"NDS.h"
+ "ARM.h"
-1478128612 source:c:\documents\sources\melonds\arm.cpp
+1480007764 source:c:\documents\sources\melonds\arm.cpp
+ <stdio.h>
+ "NDS.h"
"ARM.h"
+ "ARMInterpreter.h"
+
+1480008165 c:\documents\sources\melonds\arm.h
+ "types.h"
+ "NDS.h"
-1478130006 c:\documents\sources\melonds\arm.h
+1480008597 c:\documents\sources\melonds\arm_instrtable.h
+
+1480005496 c:\documents\sources\melonds\arminterpreter.h
"types.h"
+ "ARM.h"
+
+1480008388 source:c:\documents\sources\melonds\arminterpreter.cpp
+ <stdio.h>
+ "NDS.h"
+ "ARMInterpreter.h"
+ "ARMInterpreter_Branch.h"
+ "ARM_InstrTable.h"
+
+1480008608 c:\documents\sources\melonds\arminterpreter_branch.h