summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/arcompact/arcompactdasm.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/arcompact/arcompactdasm.cpp')
-rw-r--r--src/devices/cpu/arcompact/arcompactdasm.cpp2621
1 files changed, 2579 insertions, 42 deletions
diff --git a/src/devices/cpu/arcompact/arcompactdasm.cpp b/src/devices/cpu/arcompact/arcompactdasm.cpp
index 7283cfd06b6..b9cf4354f80 100644
--- a/src/devices/cpu/arcompact/arcompactdasm.cpp
+++ b/src/devices/cpu/arcompact/arcompactdasm.cpp
@@ -1,20 +1,18 @@
// license:BSD-3-Clause
// copyright-holders:David Haywood
/*********************************\
-
ARCompact disassembler
\*********************************/
#include "emu.h"
-#include "arcompactdasm.h"
+#include "arcompactdasm_internal.h"
u32 arcompact_disassembler::opcode_alignment() const
{
return 2;
}
-
// condition codes (basic ones are the same as arc
const char *const arcompact_disassembler::conditions[0x20] =
{
@@ -486,7 +484,7 @@ const char *const arcompact_disassembler::opcodes_04[0x40] =
/* 10 */ "BCLR",
/* 11 */ "BTST",
/* 12 */ "BXOR",
- /* 13 */ "BSMK",
+ /* 13 */ "BMSK",
/* 14 */ "ADD1",
/* 15 */ "ADD2",
/* 16 */ "ADD3",
@@ -535,13 +533,17 @@ const char *const arcompact_disassembler::opcodes_04[0x40] =
/* 3f */ "0x3f",
};
+
+
+/*****************************************************************************/
+
offs_t arcompact_disassembler::disassemble(std::ostream &stream, offs_t pc, const data_buffer &opcodes, const data_buffer &params)
{
int size;
uint32_t op = opcodes.r16(pc);
- uint8_t instruction = ((op & 0xf800) >> 11);
+ uint8_t instruction = ((op & 0xf800) >> 11);
if (instruction < 0x0c)
{
@@ -549,54 +551,2589 @@ offs_t arcompact_disassembler::disassemble(std::ostream &stream, offs_t pc, cons
op <<= 16;
op |= opcodes.r16(pc+2);
- op &= ~0xf8000000;
-
- switch (instruction) // 32-bit instructions (with optional extra dword for immediate data)
+ switch (instruction & 0x3f) // 32-bit instructions (with optional extra dword for immediate data)
{
- case 0x00: size = handle00_dasm(stream, pc, op, opcodes); break; // Bcc
- case 0x01: size = handle01_dasm(stream, pc, op, opcodes); break; // BLcc/BRcc
- case 0x02: size = handle02_dasm(stream, pc, op, opcodes); break; // LD r+o
- case 0x03: size = handle03_dasm(stream, pc, op, opcodes); break; // ST r+o
- case 0x04: size = handle04_dasm(stream, pc, op, opcodes); break; // op a,b,c (basecase)
- case 0x05: size = handle05_dasm(stream, pc, op, opcodes); break; // op a,b,c (05 ARC ext)
- case 0x06: size = handle06_dasm(stream, pc, op, opcodes); break; // op a,b,c (06 ARC ext)
- case 0x07: size = handle07_dasm(stream, pc, op, opcodes); break; // op a,b,c (07 User ext)
- case 0x08: size = handle08_dasm(stream, pc, op, opcodes); break; // op a,b,c (08 User ext)
- case 0x09: size = handle09_dasm(stream, pc, op, opcodes); break; // op a,b,c (09 Market ext)
- case 0x0a: size = handle0a_dasm(stream, pc, op, opcodes); break; // op a,b,c (0a Market ext)
- case 0x0b: size = handle0b_dasm(stream, pc, op, opcodes); break; // op a,b,c (0b Market ext)
+ default: break; // size = -1;
+ case 0x00: // Bcc
+ {
+ uint8_t subinstr = (op & 0x00010000) >> 16;
+
+ switch (subinstr & 0x01)
+ {
+ default: break; // size = -1;
+ case 0x00:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// B<cc><.d> s21 0000 0sss ssss sss0 SSSS SSSS SSNQ QQQQ
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_B_cc_D_s21(stream, pc, op, opcodes); break; // Branch Conditionally
+ }
+ case 0x01:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// B<.d> s25 0000 0sss ssss sss1 SSSS SSSS SSNR tttt
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_B_D_s25(stream, pc, op, opcodes); break; // Branch Unconditionally Far
+ }
+ }
+ break;
+ }
+ case 0x01: // BLcc/BRcc
+ {
+ uint8_t subinstr = (op & 0x00010000) >> 16;
+ switch (subinstr & 0x01)
+ {
+ default: break; // size = -1;
+ case 0x00: // Branch & Link
+ {
+ uint8_t subinstr2 = (op & 0x00020000) >> 17;
+ switch (subinstr2)
+ {
+ default: break; // size = -1;
+ case 0x00:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// BL<.cc><.d> s21 0000 1sss ssss ss00 SSSS SSSS SSNQ QQQQ
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_BL_cc_d_s21(stream, pc, op, opcodes); break; // Branch and Link Conditionally
+ }
+ case 0x01:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// BL<.d> s25 0000 1sss ssss ss10 SSSS SSSS SSNR tttt
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_BL_d_s25(stream, pc, op, opcodes); break; // Branch and Link Unconditional Far
+ }
+ }
+ break;
+ }
+ case 0x01: // Branch on Compare
+ {
+ uint8_t subinstr2 = (op & 0x00000010) >> 4;
+
+ switch (subinstr2)
+ {
+ default: break; // size = -1;
+ case 0x00: // Branch on Compare Register-Register
+ {
+ uint8_t subinstr3 = op & 0x0000000f;
+ switch (subinstr3)
+ {
+ case 0x00:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// BREQ<.d> b,c,s9 0000 1bbb ssss sss1 SBBB CCCC CCN0 0000
+// BREQ b,limm,s9 0000 1bbb ssss sss1 SBBB 1111 1000 0000 (+ Limm)
+// BREQ limm,c,s9 0000 1110 ssss sss1 S111 CCCC CC00 0000 (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_BREQ_reg_reg(stream, pc, op, opcodes); break; // BREQ (reg-reg)
+ }
+ case 0x01:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// BRNE<.d> b,c,s9 0000 1bbb ssss sss1 SBBB CCCC CCN0 0001
+// BRNE b,limm,s9 0000 1bbb ssss sss1 SBBB 1111 1000 0001 (+ Limm)
+// BRNE limm,c,s9 0000 1110 ssss sss1 S111 CCCC CC00 0001 (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_BRNE_reg_reg(stream, pc, op, opcodes); break; // BRNE (reg-reg)
+ }
+ case 0x02:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// BRLT<.d> b,c,s9 0000 1bbb ssss sss1 SBBB CCCC CCN0 0010
+// BRLT b,limm,s9 0000 1bbb ssss sss1 SBBB 1111 1000 0010 (+ Limm)
+// BRLT limm,c,s9 0000 1110 ssss sss1 S111 CCCC CC00 0010 (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_BRLT_reg_reg(stream, pc, op, opcodes); break; // BRLT (reg-reg)
+ }
+ case 0x03:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// BRGE<.d> b,c,s9 0000 1bbb ssss sss1 SBBB CCCC CCN0 0011
+// BRGE b,limm,s9 0000 1bbb ssss sss1 SBBB 1111 1000 0011 (+ Limm)
+// BRGE limm,c,s9 0000 1110 ssss sss1 S111 CCCC CC00 0011 (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_BRGE_reg_reg(stream, pc, op, opcodes); break; // BRGE (reg-reg)
+ }
+ case 0x04:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// BRLO<.d> b,c,s9 0000 1bbb ssss sss1 SBBB CCCC CCN0 0100
+// BRLO b,limm,s9 0000 1bbb ssss sss1 SBBB 1111 1000 0100 (+ Limm)
+// BRLO limm,c,s9 0000 1110 ssss sss1 S111 CCCC CC00 0100 (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_BRLO_reg_reg(stream, pc, op, opcodes); break; // BRLO (reg-reg)
+ }
+ case 0x05:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// BRHS b,limm,s9 0000 1bbb ssss sss1 SBBB 1111 1000 0101 (+ Limm)
+// BRHS limm,c,s9 0000 1110 ssss sss1 S111 CCCC CC00 0101 (+ Limm)
+// BRHS<.d> b,c,s9 0000 1bbb ssss sss1 SBBB CCCC CCN0 0101
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_BRHS_reg_reg(stream, pc, op, opcodes); break; // BRHS (reg-reg)
+ }
+ case 0x0e:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// BBIT0<.d> b,c,s9 0000 1bbb ssss sss1 SBBB CCCC CCN0 1110
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_BBIT0_reg_reg(stream, pc, op, opcodes); break; // BBIT0 (reg-reg)
+ }
+ case 0x0f:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// BBIT1<.d> b,c,s9 0000 1bbb ssss sss1 SBBB CCCC CCN0 1111
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_BBIT1_reg_reg(stream, pc, op, opcodes); break; // BBIT1 (reg-reg)
+ }
+ default:
+ {
+ // 0x06 - 0x0d
+ size = handle::dasm_reserved(stream, pc, instruction, subinstr, subinstr2, subinstr3, op, opcodes); break; // reserved
+ }
+ }
+ break;
+ }
+ case 0x01: // Branch on Compare/Bit Test Register-Immediate
+ {
+ uint8_t subinstr3 = op & 0x0000000f;
+ switch (subinstr3)
+ {
+ case 0x00:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// BREQ<.d> b,u6,s9 0000 1bbb ssss sss1 SBBB UUUU UUN1 0000
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_BREQ_reg_imm(stream, pc, op, opcodes); break; // BREQ (reg-imm)
+ }
+ case 0x01:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// BRNE<.d> b,u6,s9 0000 1bbb ssss sss1 SBBB UUUU UUN1 0001
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_BRNE_reg_imm(stream, pc, op, opcodes); break; // BRNE (reg-imm)
+ }
+ case 0x02:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// BRLT<.d> b,u6,s9 0000 1bbb ssss sss1 SBBB UUUU UUN1 0010
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_BRLT_reg_imm(stream, pc, op, opcodes); break; // BRLT (reg-imm)
+ }
+ case 0x03:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// BRGE<.d> b,u6,s9 0000 1bbb ssss sss1 SBBB UUUU UUN1 0011
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_BRGE_reg_imm(stream, pc, op, opcodes); break; // BRGE (reg-imm)
+ }
+ case 0x04:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// BRLO<.d> b,u6,s9 0000 1bbb ssss sss1 SBBB UUUU UUN1 0100
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_BRLO_reg_imm(stream, pc, op, opcodes); break; // BRLO (reg-imm)
+ }
+ case 0x05:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// BRHS<.d> b,u6,s9 0000 1bbb ssss sss1 SBBB UUUU UUN1 0101
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_BRHS_reg_imm(stream, pc, op, opcodes); break; // BRHS (reg-imm)
+ }
+ case 0x0e:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// BBIT0<.d> b,u6,s9 0000 1bbb ssss sss1 SBBB uuuu uuN1 1110
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_BBIT0_reg_imm(stream, pc, op, opcodes); break; // BBIT0 (reg-imm)
+ }
+ case 0x0f:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// BBIT1<.d> b,u6,s9 0000 1bbb ssss sss1 SBBB uuuu uuN1 1111
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_BBIT1_reg_imm(stream, pc, op, opcodes); break; // BBIT1 (reg-imm)
+ }
+ default:
+ {
+ // 0x06 - 0x0d
+ size = handle::dasm_reserved(stream, pc, instruction, subinstr, subinstr2, subinstr3, op, opcodes); break; // reserved
+ }
+ }
+ }
+ }
+ }
+ }
+ break;
+ }
+ case 0x02:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// IIII I
+// LD<zz><.x><.aa><.di> a,[b,s9] 0001 0bbb ssss ssss SBBB DaaZ ZXAA AAAA
+// LD<zz><.x><.aa><.di> 0,[b,s9] 0001 0bbb ssss ssss SBBB DaaZ ZX11 1110
+// PREFETCH<.aa> [b,s9] 0001 0bbb ssss ssss SBBB 0aa0 0011 1110
+//
+// LD<zz><.x><.di> a,[limm] 0001 0110 0000 0000 0111 DRRZ ZXAA AAAA (+ Limm)
+// LD<zz><.x><.di> 0,[limm] 0001 0110 0000 0000 0111 DRRZ ZX11 1110 (+ Limm)
+// PREFETCH [limm] 0001 0110 0000 0000 0111 0RR0 0011 1110 (+ Limm)
+//
+// can be used as a POP alias for higher registers
+// 40020310: 1404 3410
+// LD.AB r16 <- [r28_SP, 004] 0001 0100 0000 0100 0011 0100 0001 0000
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_LD_r_o(stream, pc, op, opcodes); break; // LD r+o
+ }
+ case 0x03:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// IIII I
+// ST<zz><.aa><.di> c,[b,s9] 0001 1bbb ssss ssss SBBB CCCC CCDa aZZR
+// ST<zz><.di> c,[limm] 0001 1110 0000 0000 0111 CCCC CCDR RZZR (+ Limm)
+// ST<zz><.aa><.di> limm,[b,s9] 0001 1bbb ssss ssss SBBB 1111 10Da aZZR (+ Limm)
+//
+// can be used as a PUSH alias for higher registers
+// 400202A6: 1CFC B408
+// ST.AW [r28_SP, 1fc] <- r16 0001 1100 1111 1100 1011 0100 0000 1000
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_ST_r_o(stream, pc, op, opcodes); break; // ST r+o
+ }
+ case 0x04: // op a,b,c (basecase)
+ {
+ uint8_t subinstr = (op & 0x003f0000) >> 16;
+
+ switch (subinstr & 0x3f)
+ {
+ case 0x00:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// PP
+// General Operations Reg-Reg 0010 0bbb 00ii iiii FBBB CCCC CCAA AAAA
+// ADD<.f> a,b,c 0010 0bbb 0000 0000 FBBB CCCC CCAA AAAA
+// ADD<.f> a,limm,c 0010 0110 0000 0000 F111 CCCC CCAA AAAA (+ Limm)
+// ADD<.f> a,b,limm 0010 0bbb 0000 0000 FBBB 1111 10AA AAAA (+ Limm)
+// ADD<.f> 0,b,c 0010 0bbb 0000 0000 FBBB CCCC CC11 1110
+// ADD<.f> 0,b,limm 0010 0bbb 0000 0000 FBBB 1111 1011 1110 (+ Limm)
+//
+// PP
+// Gen Op Reg+6-bit unsigned Imm 0010 0bbb 01ii iiii FBBB UUUU UUAA AAAA
+// ADD<.f> a,b,u6 0010 0bbb 0100 0000 FBBB uuuu uuAA AAAA
+// ADD<.f> 0,b,u6 0010 0bbb 0100 0000 FBBB uuuu uu11 1110
+//
+// PP
+// Gen Op Reg+12-bit signed Imm 0010 0bbb 10ii iiii FBBB ssss ssSS SSSS
+// ADD<.f> b,b,s12 0010 0bbb 1000 0000 FBBB ssss ssSS SSSS
+//
+// PP M
+// Gen Op Conditional Register 0010 0bbb 11ii iiii FBBB CCCC CC0Q QQQQ
+// ADD<.cc><.f> b,b,c 0010 0bbb 1100 0000 FBBB CCCC CC0Q QQQQ
+// ADD<.cc><.f> b,b,limm 0010 0bbb 1100 0000 FBBB 1111 100Q QQQQ (+ Limm)
+// ADD<.cc><.f> 0,limm,c 0010 0110 1100 0000 F111 CCCC CC0Q QQQQ (+ Limm)
+//
+// PP M
+// Gen Op ConReg 6-bit unsign Imm 0010 0bbb 11ii iiii FBBB UUUU UU1Q QQQQ
+// ADD<.cc><.f> b,b,u6 0010 0bbb 1100 0000 FBBB uuuu uu1Q QQQQ
+//
+//
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_ADD(stream, pc, op, opcodes); break; // ADD
+ }
+ case 0x01:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// ADC<.f> a,b,c 0010 0bbb 0000 0001 FBBB CCCC CCAA AAAA
+// ADC<.f> a,b,u6 0010 0bbb 0100 0001 FBBB uuuu uuAA AAAA
+// ADC<.f> b,b,s12 0010 0bbb 1000 0001 FBBB ssss ssSS SSSS
+// ADC<.cc><.f> b,b,c 0010 0bbb 1100 0001 FBBB CCCC CC0Q QQQQ
+// ADC<.cc><.f> b,b,u6 0010 0bbb 1100 0001 FBBB uuuu uu1Q QQQQ
+// ADC<.f> a,limm,c 0010 0110 0000 0001 F111 CCCC CCAA AAAA (+ Limm)
+// ADC<.f> a,b,limm 0010 0bbb 0000 0001 FBBB 1111 10AA AAAA (+ Limm)
+// ADC<.cc><.f> b,b,limm 0010 0bbb 1100 0001 FBBB 1111 100Q QQQQ (+ Limm)
+//
+// ADC<.f> 0,b,c 0010 0bbb 0000 0001 FBBB CCCC CC11 1110
+// ADC<.f> 0,b,u6 0010 0bbb 0100 0001 FBBB uuuu uu11 1110
+// ADC<.f> 0,b,limm 0010 0bbb 0000 0001 FBBB 1111 1011 1110 (+ Limm)
+// ADC<.cc><.f> 0,limm,c 0010 0110 1100 0001 F111 CCCC CC0Q QQQQ (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_ADC(stream, pc, op, opcodes); break; // ADC
+ }
+ case 0x02:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// SUB<.f> a,b,c 0010 0bbb 0000 0010 FBBB CCCC CCAA AAAA
+// SUB<.f> a,b,u6 0010 0bbb 0100 0010 FBBB uuuu uuAA AAAA
+// SUB<.f> b,b,s12 0010 0bbb 1000 0010 FBBB ssss ssSS SSSS
+// SUB<.cc><.f> b,b, c 0010 0bbb 1100 0010 FBBB CCCC CC0Q QQQQ
+// SUB<.cc><.f> b,b,u6 0010 0bbb 1100 0010 FBBB uuuu uu1Q QQQQ
+// SUB<.f> a,limm,c 0010 0110 0000 0010 F111 CCCC CCAA AAAA (+ Limm)
+// SUB<.f> a,b,limm 0010 0bbb 0000 0010 FBBB 1111 10AA AAAA (+ Limm)
+// SUB<.cc><.f> b,b,limm 0010 0bbb 1100 0010 FBBB 1111 100Q QQQQ (+ Limm)
+//
+// SUB <.f> 0,b,c 0010 0bbb 0000 0010 FBBB CCCC CC11 1110
+// SUB <.f> 0,b,u6 0010 0bbb 0100 0010 FBBB uuuu uu11 1110
+// SUB <.f> 0,b,limm 0010 0bbb 0000 0010 FBBB 1111 1011 1110 (+ Limm)
+// SUB <.cc><.f> 0,limm,c 0010 0110 1100 0010 F111 CCCC CC0Q QQQQ (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_SUB(stream, pc, op, opcodes); break; // SUB
+ }
+ case 0x03:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// SBC<.f> a,b,c 0010 0bbb 0000 0011 FBBB CCCC CCAA AAAA
+// SBC<.f> a,b,u6 0010 0bbb 0100 0011 FBBB uuuu uuAA AAAA
+// SBC<.f> b,b,s12 0010 0bbb 1000 0011 FBBB ssss ssSS SSSS
+// SBC<.cc><.f> b,b,c 0010 0bbb 1100 0011 FBBB CCCC CC0Q QQQQ
+// SBC<.cc><.f> b,b,u6 0010 0bbb 1100 0011 FBBB uuuu uu1Q QQQQ
+// SBC<.f> a,limm,c 0010 0110 0000 0011 F111 CCCC CCAA AAAA (+ Limm)
+// SBC<.f> a,b,limm 0010 0bbb 0000 0011 FBBB 1111 10AA AAAA (+ Limm)
+// SBC<.cc><.f> b,b,limm 0010 0bbb 1100 0011 FBBB 1111 100Q QQQQ (+ Limm)
+//
+// SBC<.f> 0,b,c 0010 0bbb 0000 0011 FBBB CCCC CC11 1110
+// SBC<.f> 0,b,u6 0010 0bbb 0100 0011 FBBB uuuu uu11 1110
+// SBC<.f> 0,b,limm 0010 0bbb 0000 0011 FBBB 1111 1011 1110 (+ Limm)
+// SBC<.cc><.f> 0,limm,c 0010 0110 1100 0011 F111 CCCC CC0Q QQQQ (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_SBC(stream, pc, op, opcodes); break; // SBC
+ }
+ case 0x04:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// AND<.f> a,b,c 0010 0bbb 0000 0100 FBBB CCCC CCAA AAAA
+// AND<.f> a,b,u6 0010 0bbb 0100 0100 FBBB uuuu uuAA AAAA
+// AND<.f> b,b,s12 0010 0bbb 1000 0100 FBBB ssss ssSS SSSS
+// AND<.cc><.f> b,b,c 0010 0bbb 1100 0100 FBBB CCCC CC0Q QQQQ
+// AND<.cc><.f> b,b,u6 0010 0bbb 1100 0100 FBBB uuuu uu1Q QQQQ
+// AND<.f> a,limm,c 0010 0110 0000 0100 F111 CCCC CCAA AAAA (+ Limm)
+// AND<.f> a,b,limm 0010 0bbb 0000 0100 FBBB 1111 10AA AAAA (+ Limm)
+// AND<.cc><.f> b,b,limm 0010 0bbb 1100 0100 FBBB 1111 100Q QQQQ (+ Limm)
+//
+// AND<.f> 0,b,c 0010 0bbb 0000 0100 FBBB CCCC CC11 1110
+// AND<.f> 0,b,u6 0010 0bbb 0100 0100 FBBB uuuu uu11 1110
+// AND<.f> 0,b,limm 0010 0bbb 0000 0100 FBBB 1111 1011 1110 (+ Limm)
+// AND<.cc><.f> 0,limm,c 0010 0110 1100 0100 F111 CCCC CC0Q QQQQ (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_AND(stream, pc, op, opcodes); break; // AND
+ }
+ case 0x05:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// OR<.f> a,b,c 0010 0bbb 0000 0101 FBBB CCCC CCAA AAAA
+// OR<.f> a,b,u6 0010 0bbb 0100 0101 FBBB uuuu uuAA AAAA
+// OR<.f> b,b,s12 0010 0bbb 1000 0101 FBBB ssss ssSS SSSS
+// OR<.cc><.f> b,b,c 0010 0bbb 1100 0101 FBBB CCCC CC0Q QQQQ
+// OR<.cc><.f> b,b,u6 0010 0bbb 1100 0101 FBBB uuuu uu1Q QQQQ
+// OR<.f> a,limm,c 0010 0110 0000 0101 F111 CCCC CCAA AAAA (+ Limm)
+// OR<.f> a,b,limm 0010 0bbb 0000 0101 FBBB 1111 10AA AAAA (+ Limm)
+// OR<.cc><.f> b,b,limm 0010 0bbb 1100 0101 FBBB 1111 100Q QQQQ (+ Limm)
+//
+// OR<.f> 0,b,c 0010 0bbb 0000 0101 FBBB CCCC CC11 1110
+// OR<.f> 0,b,u6 0010 0bbb 0100 0101 FBBB uuuu uu11 1110
+// OR<.f> 0,b,limm 0010 0bbb 0000 0101 FBBB 1111 1011 1110 (+ Limm)
+// OR<.cc><.f> 0,limm,c 0010 0110 1100 010 1 F111 CCCC CC0Q QQQQ (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_OR(stream, pc, op, opcodes); break; // OR
+ }
+ case 0x06:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// IIII I SS SSSS
+// BIC<.f> a,b,c 0010 0bbb 0000 0110 FBBB CCCC CCAA AAAA
+// BIC<.f> a,b,u6 0010 0bbb 0100 0110 FBBB uuuu uuAA AAAA
+// BIC<.f> b,b,s12 0010 0bbb 1000 0110 FBBB ssss ssSS SSSS
+// BIC<.cc><.f> b,b,c 0010 0bbb 1100 0110 FBBB CCCC CC0Q QQQQ
+// BIC<.cc><.f> b,b,u6 0010 0bbb 1100 0110 FBBB uuuu uu1Q QQQQ
+// BIC<.f> a,limm,c 0010 0110 0000 0110 F111 CCCC CCAA AAAA (+ Limm)
+// BIC<.f> a,b,limm 0010 0bbb 0000 0110 FBBB 1111 10AA AAAA (+ Limm)
+// BIC<.cc><.f> b,b,limm 0010 0bbb 1100 0110 FBBB 1111 100Q QQQQ (+ Limm)
+//
+// BIC<.f> 0,b,c 0010 0bbb 0000 0110 FBBB CCCC CC11 1110
+// BIC<.f> 0,b,u6 0010 0bbb 0100 0110 FBBB uuuu uu11 1110
+// BIC<.f> 0,b,limm 0010 0bbb 0000 0110 FBBB 1111 1011 1110 (+ Limm)
+// BIC<.cc><.f> 0,limm,c 0010 0110 1100 0110 F111 CCCC CC0Q QQQQ (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_BIC(stream, pc, op, opcodes); break; // BIC
+ }
+ case 0x07:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// IIII I SS SSSS
+// XOR<.f> a,b,c 0010 0bbb 0000 0111 FBBB CCCC CCAA AAAA
+// XOR<.f> a,b,u6 0010 0bbb 0100 0111 FBBB uuuu uuAA AAAA
+// XOR<.f> b,b,s12 0010 0bbb 1000 0111 FBBB ssss ssSS SSSS
+// XOR<.cc><.f> b,b,c 0010 0bbb 1100 0111 FBBB CCCC CC0Q QQQQ
+// XOR<.cc><.f> b,b,u6 0010 0bbb 1100 0111 FBBB uuuu uu1Q QQQQ
+// XOR<.f> a,limm,c 0010 0110 0000 0111 F111 CCCC CCAA AAAA (+ Limm)
+// XOR<.f> a,b,limm 0010 0bbb 0000 0111 FBBB 1111 10AA AAAA (+ Limm)
+// XOR<.cc><.f> b,b,limm 0010 0bbb 1100 0111 FBBB 1111 100Q QQQQ (+ Limm)
+//
+// XOR<.f> 0,b,c 0010 0bbb 0000 0111 FBBB CCCC CC11 1110
+// XOR<.f> 0,b,u6 0010 0bbb 0100 0111 FBBB uuuu uu11 1110
+// XOR<.f> 0,b,limm 0010 0bbb 0000 0111 FBBB 1111 1011 1110 (+ Limm)
+// XOR<.cc><.f> 0,limm,c 0010 0110 1100 0111 F111 CCCC CC0Q QQQQ (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_XOR(stream, pc, op, opcodes); break; // XOR
+ }
+ case 0x08:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// IIII I SS SSSS
+// MAX<.f> a,b,c 0010 0bbb 0000 1000 FBBB CCCC CCAA AAAA
+// MAX<.f> a,b,u6 0010 0bbb 0100 1000 FBBB uuuu uuAA AAAA
+// MAX<.f> b,b,s12 0010 0bbb 1000 1000 FBBB ssss ssSS SSSS
+// MAX<.cc><.f> b,b,c 0010 0bbb 1100 1000 FBBB CCCC CC0Q QQQQ
+// MAX<.cc><.f> b,b,u6 0010 0bbb 1100 1000 FBBB uuuu uu1Q QQQQ
+// MAX<.f> a,limm,c 0010 0110 0000 1000 F111 CCCC CCAA AAAA (+ Limm)
+// MAX<.f> a,b,limm 0010 0bbb 0000 1000 FBBB 1111 10AA AAAA (+ Limm)
+// MAX<.cc><.f> b,b,limm 0010 0bbb 1100 1000 FBBB 1111 100Q QQQQ (+ Limm)
+//
+// MAX<.f> 0,b,c 0010 0bbb 0000 1000 FBBB CCCC CC11 1110
+// MAX<.f> 0,b,u6 0010 0bbb 0100 1000 FBBB uuuu uu11 1110
+// MAX<.f> 0,b,limm 0010 0bbb 0000 1000 FBBB 1111 1011 1110 (+ Limm)
+// MAX<.cc><.f> 0,limm,c 0010 0110 1100 1000 F111 CCCC CC0Q QQQQ (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_MAX(stream, pc, op, opcodes); break; // MAX
+ }
+ case 0x09:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// IIII I SS SSSS
+// MIN<.f> a,b,c 0010 0bbb 0000 1001 FBBB CCCC CCAA AAAA
+// MIN<.f> a,b,u6 0010 0bbb 0100 1001 FBBB uuuu uuAA AAAA
+// MIN<.f> b,b,s12 0010 0bbb 1000 1001 FBBB ssss ssSS SSSS
+// MIN<.cc><.f> b,b,c 0010 0bbb 1100 1001 FBBB CCCC CC0Q QQQQ
+// MIN<.cc><.f> b,b,u6 0010 0bbb 1100 1001 FBBB uuuu uu1Q QQQQ
+// MIN<.f> a,limm,c 0010 0110 0000 1001 F111 CCCC CCAA AAAA (+ Limm)
+// MIN<.f> a,b,limm 0010 0bbb 0000 1001 FBBB 1111 10AA AAAA (+ Limm)
+// MIN<.cc><.f> b,b,limm 0010 0bbb 1100 1001 FBBB 1111 100Q QQQQ (+ Limm)
+//
+// MIN<.f> 0,b,c 0010 0bbb 0000 1001 FBBB CCCC CC11 1110
+// MIN<.f> 0,b,u6 0010 0bbb 0100 1001 FBBB uuuu uu11 1110
+// MIN<.f> 0,b,limm 0010 0bbb 0000 1001 FBBB 1111 1011 1110 (+ Limm)
+// MIN<.cc><.f> 0,limm,c 0010 0110 1100 1001 F111 CCCC CC0Q QQQQ (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_MIN(stream, pc, op, opcodes); break; // MIN
+ }
+ case 0x0a:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// IIII I SS SSSS
+// MOV<.f> b,s12 0010 0bbb 1000 1010 FBBB ssss ssSS SSSS
+// MOV<.f> 0,s12 0010 0110 1000 1010 F111 ssss ssSS SSSS (is b is 'Limm' there's no destination)
+
+// MOV<.cc><.f> b,c 0010 0bbb 1100 1010 FBBB CCCC CC0Q QQQQ
+// MOV<.cc><.f> b,u6 0010 0bbb 1100 1010 FBBB uuuu uu1Q QQQQ
+// MOV<.cc><.f> b,limm 0010 0bbb 1100 1010 FBBB 1111 100Q QQQQ (+ Limm)
+//
+// MOV<.cc><.f> 0,c 0010 0110 1100 1010 F111 CCCC CC0Q QQQQ
+// MOV<.cc><.f> 0,u6 0010 0110 1100 1010 F111 uuuu uu1Q QQQQ
+// MOV<.cc><.f> 0,limm 0010 0110 1100 1010 F111 1111 100Q QQQQ (+ Limm)
+//
+// NOP 0010 0110 0100 1010 0111 0000 0000 0000 (NOP is a custom encoded MOV where b is 'LIMM')
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_MOV(stream, pc, op, opcodes); break; // MOV
+ }
+ case 0x0b:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// IIII I SS SSSS
+// TST b,s12 0010 0bbb 1000 1011 1BBB ssss ssSS SSSS
+// TST<.cc> b,c 0010 0bbb 1100 1011 1BBB CCCC CC0Q QQQQ
+// TST<.cc> b,u6 0010 0bbb 1100 1011 1BBB uuuu uu1Q QQQQ
+// TST<.cc> b,limm 0010 0bbb 1100 1011 1BBB 1111 100Q QQQQ (+ Limm)
+// TST<.cc> limm,c 0010 0110 1100 1011 1111 CCCC CC0Q QQQQ (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_TST(stream, pc, op, opcodes); break; // TST
+ }
+ case 0x0c:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// IIII I SS SSSS
+// CMP b,s12 0010 0bbb 1000 1100 1BBB ssss ssSS SSSS
+// CMP<.cc> b,c 0010 0bbb 1100 1100 1BBB CCCC CC0Q QQQQ
+// CMP<.cc> b,u6 0010 0bbb 1100 1100 1BBB uuuu uu1Q QQQQ
+// CMP<.cc> b,limm 0010 0bbb 1100 1100 1BBB 1111 100Q QQQQ (+ Limm)
+// CMP<.cc> limm,c 0010 0110 1100 1100 1111 CCCC CC0Q QQQQ (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_CMP(stream, pc, op, opcodes); break; // CMP
+ }
+ case 0x0d:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// RCMP b,s12 0010 0bbb 1000 1101 1BBB ssss ssSS SSSS
+// RCMP<.cc> b,c 0010 0bbb 1100 1101 1BBB CCCC CC0Q QQQQ
+// RCMP<.cc> b,u6 0010 0bbb 1100 1101 1BBB uuuu uu1Q QQQQ
+// RCMP<.cc> b,limm 0010 0bbb 1100 1101 1BBB 1111 100Q QQQQ (+ Limm)
+// RCMP<.cc> limm,c 0010 0110 1100 1101 1111 CCCC CC0Q QQQQ (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_RCMP(stream, pc, op, opcodes); break; // RCMP
+ }
+ case 0x0e:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// RSUB<.f> a,b,c 0010 0bbb 0000 1110 FBBB CCCC CCAA AAAA
+// RSUB<.f> a,b,u6 0010 0bbb 0100 1110 FBBB uuuu uuAA AAAA
+// NEG<.f> a,b 0010 0bbb 0100 1110 FBBB 0000 00AA AAAA (NEG is an alias)
+//
+// RSUB<.f> b,b,s12 0010 0bbb 1000 1110 FBBB ssss ssSS SSSS
+// RSUB<.cc><.f> b,b,c 0010 0bbb 1100 1110 FBBB CCCC CC0Q QQQQ
+// RSUB<.cc><.f> b,b,u6 0010 0bbb 1100 1110 FBBB uuuu uu1Q QQQQ
+// NEG<.cc><.f> b,b 0010 0bbb 1100 1110 FBBB 0000 001Q QQQQ (NEG is an alias)
+//
+// RSUB<.f> a,limm,c 0010 0110 0000 1110 F111 CCCC CCAA AAAA (+ Limm)
+// RSUB<.f> a,b,limm 0010 0bbb 0000 1110 FBBB 1111 10AA AAAA (+ Limm)
+// RSUB<.cc><.f> b,b,limm 0010 0bbb 1100 1110 FBBB 1111 100Q QQQQ (+ Limm)
+//
+// RSUB<.f> 0,b,c 0010 0bbb 0000 1110 FBBB CCCC CC11 1110
+// RSUB<.f> 0,b,u6 0010 0bbb 0100 1110 FBBB uuuu uu11 1110
+// RSUB<.f> 0,b,limm 0010 0bbb 0000 1110 FBBB 1111 1011 1110 (+ Limm)
+// RSUB<.cc><.f> 0,limm,c 0010 0110 1100 1110 F111 CCCC CC0Q QQQQ (+ Limm)
+//
+// IIII I SS SSSS
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_RSUB(stream, pc, op, opcodes); break; // RSUB
+ }
+ case 0x0f:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// BSET<.f> a,b,c 0010 0bbb 0000 1111 FBBB CCCC CCAA AAAA
+// BSET<.f> a,b,u6 0010 0bbb 0100 1111 FBBB uuuu uuAA AAAA
+// BSET<.cc><.f> b,b,c 0010 0bbb 1100 1111 FBBB CCCC CC0Q QQQQ
+// BSET<.cc><.f> b,b,u6 0010 0bbb 1100 1111 FBBB uuuu uu1Q QQQQ
+// BSET<.f> a,limm,c 0010 0110 0000 1111 F111 CCCC CCAA AAAA (+ Limm)
+//
+// BSET<.f> 0,b,c 0010 0bbb 0000 1111 FBBB CCCC CC11 1110
+// BSET<.f> 0,b,u6 0010 0bbb 0100 1111 FBBB uuuu uu11 1110
+// BSET<.cc><.f> 0,limm,c 0010 0110 1100 1111 F110 CCCC CC0Q QQQQ (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_BSET(stream, pc, op, opcodes); break; // BSET
+ }
+ case 0x10:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// BCLR<.f> a,b,c 0010 0bbb 0001 0000 FBBB CCCC CCAA AAAA
+// BCLR<.f> a,b,u6 0010 0bbb 0101 0000 FBBB uuuu uuAA AAAA
+// BCLR<.cc><.f> b,b,c 0010 0bbb 1101 0000 FBBB CCCC CC0Q QQQQ
+// BCLR<.cc><.f> b,b,u6 0010 0bbb 1101 0000 FBBB uuuu uu1Q QQQQ
+// BCLR<.f> a,limm,c 0010 0110 0001 0000 F111 CCCC CCAA AAAA (+ Limm)
+//
+// BCLR<.f> 0,b,c 0010 0bbb 0001 0000 FBBB CCCC CC11 1110
+// BCLR<.f> 0,b,u6 0010 0bbb 0101 0000 FBBB uuuu uu11 1110
+// BCLR<.cc><.f> 0,limm,c 0010 0110 1101 0000 F111 CCCC CC0Q QQQQ (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_BCLR(stream, pc, op, opcodes); break; // BCLR
+ }
+ case 0x11:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// BTST<.cc> b,c 0010 0bbb 1101 0001 1BBB CCCC CC0Q QQQQ
+// BTST<.cc> b,u6 0010 0bbb 1101 0001 1BBB uuuu uu1Q QQQQ
+// BTST<.cc> limm,c 0010 0110 1101 0001 1111 CCCC CC0Q QQQQ (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_BTST(stream, pc, op, opcodes); break; // BTST
+ }
+ case 0x12:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// BXOR<.f> a,b,c 0010 0bbb 0001 0010 FBBB CCCC CCAA AAAA
+// BXOR<.f> a,b,u6 0010 0bbb 0101 0010 FBBB uuuu uuAA AAAA
+// BXOR<.cc><.f> b,b,c 0010 0bbb 1101 0010 FBBB CCCC CC0Q QQQQ
+// BXOR<.cc><.f> b,b,u6 0010 0bbb 1101 0010 FBBB uuuu uu1Q QQQQ
+// BXOR<.f> a,limm,c 0010 0110 0001 0010 F111 CCCC CCAA AAAA (+ Limm)
+//
+// BXOR<.f> 0,b,c 0010 0bbb 0001 0010 FBBB CCCC CC11 1110
+// BXOR<.f> 0,b,u6 0010 0bbb 0101 0010 FBBB uuuu uu11 1110
+// BXOR<.cc><.f> 0,limm,c 0010 0110 1101 0010 F111 CCCC CC0Q QQQQ (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_BXOR(stream, pc, op, opcodes); break; // BXOR
+ }
+ case 0x13:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// BMSK<.f> a,b,c 0010 0bbb 0001 0011 FBBB CCCC CCAA AAAA
+// BMSK<.f> a,b,u6 0010 0bbb 0101 0011 FBBB uuuu uuAA AAAA
+// BMSK<.cc><.f> b,b,c 0010 0bbb 1101 0011 FBBB CCCC CC0Q QQQQ
+// BMSK<.cc><.f> b,b,u6 0010 0bbb 1101 0011 FBBB uuuu uu1Q QQQQ
+// BMSK<.f> a,limm,c 0010 0110 0001 0011 F111 CCCC CCAA AAAA (+ Limm)
+//
+// BMSK<.f> 0,b,c 0010 0bbb 0001 0011 FBBB CCCC CC11 1110
+// BMSK<.f> 0,b,u6 0010 0bbb 0101 0011 FBBB uuuu uu11 1110
+// BMSK<.cc><.f> 0,limm,c 0010 0110 1101 0011 F111 CCCC CC0Q QQQQ (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_BMSK(stream, pc, op, opcodes); break; // BMSK
+ }
+ case 0x14:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// IIII I SS SSSS
+// ADD1<.f> a,b,c 0010 0bbb 0001 0100 FBBB CCCC CCAA AAAA
+// ADD1<.f> a,b,u6 0010 0bbb 0101 0100 FBBB uuuu uuAA AAAA
+// ADD1<.f> b,b,s12 0010 0bbb 1001 0100 FBBB ssss ssSS SSSS
+// ADD1<.cc><.f> b,b,c 0010 0bbb 1101 0100 FBBB CCCC CC0Q QQQQ
+// ADD1<.cc><.f> b,b,u6 0010 0bbb 1101 0100 FBBB uuuu uu1Q QQQQ
+// ADD1<.f> a,limm,c 0010 0110 0001 0100 F111 CCCC CCAA AAAA (+ Limm)
+// ADD1<.f> a,b,limm 0010 0bbb 0001 0100 FBBB 1111 10AA AAAA (+ Limm)
+// ADD1<.cc><.f> b,b,limm 0010 0bbb 1101 0100 FBBB 1111 100Q QQQQ (+ Limm)
+//
+// ADD1<.f> 0,b,c 0010 0bbb 0001 0100 FBBB CCCC CC11 1110
+// ADD1<.f> 0,b,u6 0010 0bbb 0101 0100 FBBB uuuu uu11 1110
+// ADD1<.f> 0,b,limm 0010 0bbb 0001 0100 FBBB 1111 1011 1110 (+ Limm)
+// ADD1<.cc><.f> 0,limm,c 0010 0110 1101 0100 F111 CCCC CC0Q QQQQ (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_ADD1(stream, pc, op, opcodes); break; // ADD1
+ }
+ case 0x15:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// IIII I SS SSSS
+// ADD2<.f> a,b,c 0010 0bbb 0001 0101 FBBB CCCC CCAA AAAA
+// ADD2<.f> a,b,u6 0010 0bbb 0101 0101 FBBB uuuu uuAA AAAA
+// ADD2<.f> b,b,s12 0010 0bbb 1001 0101 FBBB ssss ssSS SSSS
+// ADD2<.cc><.f> b,b,c 0010 0bbb 1101 0101 FBBB CCCC CC0Q QQQQ
+// ADD2<.cc><.f> b,b,u6 0010 0bbb 1101 0101 FBBB uuuu uu1Q QQQQ
+// ADD2<.f> a,limm,c 0010 0110 0001 0101 F111 CCCC CCAA AAAA (+ Limm)
+// ADD2<.f> a,b,limm 0010 0bbb 0001 0101 FBBB 1111 10AA AAAA (+ Limm)
+// ADD2<.cc><.f> b,b,limm 0010 0bbb 1101 0101 FBBB 1111 100Q QQQQ (+ Limm)
+//
+// ADD2<.f> 0,b,c 0010 0bbb 0001 0101 FBBB CCCC CC11 1110
+// ADD2<.f> 0,b,u6 0010 0bbb 0101 0101 FBBB uuuu uu11 1110
+// ADD2<.f> 0,b,limm 0010 0bbb 0001 0101 FBBB 1111 1011 1110 (+ Limm)
+// ADD2<.cc><.f> 0,limm,c 0010 0110 1101 0101 F111 CCCC CC0Q QQQQ (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_ADD2(stream, pc, op, opcodes); break; // ADD2
+ }
+ case 0x16:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// IIII I SS SSSS
+// ADD3<.f> a,b,c 0010 0bbb 0001 0110 FBBB CCCC CCAA AAAA
+// ADD3<.f> a,b,u6 0010 0bbb 0101 0110 FBBB uuuu uuAA AAAA
+// ADD3<.f> b,b,s12 0010 0bbb 1001 0110 FBBB ssss ssSS SSSS
+// ADD3<.cc><.f> b,b,c 0010 0bbb 1101 0110 FBBB CCCC CC0Q QQQQ
+// ADD3<.cc><.f> b,b,u6 0010 0bbb 1101 0110 FBBB uuuu uu1Q QQQQ
+// ADD3<.f> a,limm,c 0010 0110 0001 0110 F111 CCCC CCAA AAAA (+ Limm)
+// ADD3<.f> a,b,limm 0010 0bbb 0001 0110 FBBB 1111 10AA AAAA (+ Limm)
+// ADD3<.cc><.f> b,b,limm 0010 0bbb 1101 0110 FBBB 1111 100Q QQQQ (+ Limm)
+//
+// ADD3<.f> 0,b,c 0010 0bbb 0001 0110 FBBB CCCC CC11 1110
+// ADD3<.f> 0,b,u6 0010 0bbb 0101 0110 FBBB uuuu uu11 1110
+// ADD3<.f> 0,b,limm 0010 0bbb 0001 0110 FBBB 1111 1011 1110 (+ Limm)
+// ADD3<.cc><.f> 0,limm,c 0010 0110 1101 0110 F111 CCCC CC0Q QQQQ (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_ADD3(stream, pc, op, opcodes); break; // ADD3
+ }
+ case 0x17:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// IIII I SS SSSS
+// SUB1<.f> a,b,c 0010 0bbb 0001 0111 FBBB CCCC CCAA AAAA
+// SUB1<.f> a,b,u6 0010 0bbb 0101 0111 FBBB uuuu uuAA AAAA
+// SUB1<.f> b,b,s12 0010 0bbb 1001 0111 FBBB ssss ssSS SSSS
+// SUB1<.cc><.f> b,b,c 0010 0bbb 1101 0111 FBBB CCCC CC0Q QQQQ
+// SUB1<.cc><.f> b,b,u6 0010 0bbb 1101 0111 FBBB uuuu uu1Q QQQQ
+// SUB1<.f> a,limm,c 0010 0110 0001 0111 F111 CCCC CCAA AAAA (+ Limm)
+// SUB1<.f> a,b,limm 0010 0bbb 0001 0111 FBBB 1111 10AA AAAA (+ Limm)
+// SUB1<.cc><.f> b,b,limm 0010 0bbb 1101 0111 FBBB 1111 100Q QQQQ (+ Limm)
+//
+// SUB1<.f> 0,b,c 0010 0bbb 0001 0111 FBBB CCCC CC11 1110
+// SUB1<.f> 0,b,u6 0010 0bbb 0101 0111 FBBB uuuu uu11 1110
+// SUB1<.f> 0,b,limm 0010 0bbb 0001 0111 FBBB 1111 1011 1110 (+ Limm)
+// SUB1<.cc><.f> 0,limm,c 0010 0110 1101 0111 F111 CCCC CC0Q QQQQ (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_SUB1(stream, pc, op, opcodes); break; // SUB1
+ }
+ case 0x18:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// IIII I SS SSSS
+// SUB2<.f> a,b,c 0010 0bbb 0001 1000 FBBB CCCC CCAA AAAA
+// SUB2<.f> a,b,u6 0010 0bbb 0101 1000 FBBB uuuu uuAA AAAA
+// SUB2<.f> b,b,s12 0010 0bbb 1001 1000 FBBB ssss ssSS SSSS
+// SUB2<.cc><.f> b,b,c 0010 0bbb 1101 1000 FBBB CCCC CC0Q QQQQ
+// SUB2<.cc><.f> b,b,u6 0010 0bbb 1101 1000 FBBB uuuu uu1Q QQQQ
+// SUB2<.f> a,limm,c 0010 0110 0001 1000 F111 CCCC CCAA AAAA (+ Limm)
+// SUB2<.f> a,b,limm 0010 0bbb 0001 1000 FBBB 1111 10AA AAAA (+ Limm)
+// SUB2<.cc><.f> b,b,limm 0010 0bbb 1101 1000 FBBB 1111 100Q QQQQ (+ Limm)
+//
+// SUB2<.f> 0,b,c 0010 0bbb 0001 1000 FBBB CCCC CC11 1110
+// SUB2<.f> 0,b,u6 0010 0bbb 0101 1000 FBBB uuuu uu11 1110
+// SUB2<.f> 0,b,limm 0010 0bbb 0001 1000 FBBB 1111 1011 1110 (+ Limm)
+// SUB2<.cc><.f> 0,limm,c 0010 0110 1101 1000 F111 CCCC CC0Q QQQQ (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_SUB2(stream, pc, op, opcodes); break; // SUB2
+ }
+ case 0x19:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// IIII I SS SSSS
+// SUB3<.f> a,b,c 0010 0bbb 0001 1001 FBBB CCCC CCAA AAAA
+// SUB3<.f> a,b,u6 0010 0bbb 0101 1001 FBBB uuuu uuAA AAAA
+// SUB3<.f> b,b,s12 0010 0bbb 1001 1001 FBBB ssss ssSS SSSS
+// SUB3<.cc><.f> b,b,c 0010 0bbb 1101 1001 FBBB CCCC CC0Q QQQQ
+// SUB3<.cc><.f> b,b,u6 0010 0bbb 1101 1001 FBBB uuuu uu1Q QQQQ
+// SUB3<.f> a,limm,c 0010 0110 0001 1001 F111 CCCC CCAA AAAA (+ Limm)
+// SUB3<.f> a,b,limm 0010 0bbb 0001 1001 FBBB 1111 10AA AAAA (+ Limm)
+// SUB3<.cc><.f> b,b,limm 0010 0bbb 1101 1001 FBBB 1111 100Q QQQQ (+ Limm)
+//
+// SUB3<.f> 0,b,c 0010 0bbb 0001 1001 FBBB CCCC CC11 1110
+// SUB3<.f> 0,b,u6 0010 0bbb 0101 1001 FBBB uuuu uu11 1110
+// SUB3<.f> 0,limm,c 0010 0110 0001 1001 F111 CCCC CC11 1110 (+ Limm)
+// SUB3<.cc><.f> 0,limm,c 0010 0110 1101 1001 F111 CCCC CC0Q QQQQ (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_SUB3(stream, pc, op, opcodes); break; // SUB3
+ }
+ case 0x1a:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// IIII I SS SSSS
+// MPY<.f> a,b,c 0010 0bbb 0001 1010 FBBB CCCC CCAA AAAA
+// MPY<.f> a,b,u6 0010 0bbb 0101 1010 FBBB uuuu uuAA AAAA
+// MPY<.f> b,b,s12 0010 0bbb 1001 1010 FBBB ssss ssSS SSSS
+// MPY<.cc><.f> b,b,c 0010 0bbb 1101 1010 FBBB CCCC CC0Q QQQQ
+// MPY<.cc><.f> b,b,u6 0010 0bbb 1101 1010 FBBB uuuu uu1Q QQQQ
+// MPY<.f> a,limm,c 0010 0110 0001 1010 F111 CCCC CCAA AAAA (+ Limm)
+// MPY<.f> a,b,limm 0010 0bbb 0001 1010 FBBB 1111 10AA AAAA (+ Limm)
+// MPY<.cc><.f> b,b,limm 0010 0bbb 1101 1010 FBBB 1111 100Q QQQQ (+ Limm)
+//
+// MPY<.f> 0,b,c 0010 0bbb 0001 1010 FBBB CCCC CC11 1110
+// MPY<.f> 0,b,u6 0010 0bbb 0101 1010 FBBB uuuu uu11 1110
+// MPY<.cc><.f> 0,limm,c 0010 0110 1101 1010 F111 CCCC CC0Q QQQQ (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_MPY(stream, pc, op, opcodes); break; // MPY *
+ }
+ case 0x1b:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// IIII I SS SSSS
+// MPYH<.f> a,b,c 0010 0bbb 0001 1011 FBBB CCCC CCAA AAAA
+// MPYH<.f> a,b,u6 0010 0bbb 0101 1011 FBBB uuuu uuAA AAAA
+// MPYH<.f> b,b,s12 0010 0bbb 1001 1011 FBBB ssss ssSS SSSS
+// MPYH<.cc><.f> b,b,c 0010 0bbb 1101 1011 FBBB CCCC CC0Q QQQQ
+// MPYH<.cc><.f> b,b,u6 0010 0bbb 1101 1011 FBBB uuuu uu1Q QQQQ
+// MPYH<.f> a,limm,c 0010 0110 0001 1011 F111 CCCC CCAA AAAA (+ Limm)
+// MPYH<.f> a,b,limm 0010 0bbb 0001 1010 FBBB 1111 10AA AAAA (+ Limm)
+// MPYH<.cc><.f> b,b,limm 0010 0bbb 1101 1011 FBBB 1111 100Q QQQQ (+ Limm)
+//
+// MPYH<.f> 0,b,c 0010 0bbb 0001 1011 FBBB CCCC CC11 1110
+// MPYH<.f> 0,b,u6 0010 0bbb 0101 1011 FBBB uuuu uu11 1110
+// MPYH<.cc><.f> 0,limm,c 0010 0110 1101 1011 F111 CCCC CC0Q QQQQ (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_MPYH(stream, pc, op, opcodes); break; // MPYH *
+ }
+ case 0x1c:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// IIII I SS SSSS
+// MPYHU<.f> a,b,c 0010 0bbb 0001 1100 FBBB CCCC CCAA AAAA
+// MPYHU<.f> a,b,u6 0010 0bbb 0101 1100 FBBB uuuu uuAA AAAA
+// MPYHU<.f> b,b,s12 0010 0bbb 1001 1100 FBBB ssss ssSS SSSS
+// MPYHU<.cc><.f> b,b,c 0010 0bbb 1101 1100 FBBB CCCC CC0Q QQQQ
+// MPYHU<.cc><.f> b,b,u6 0010 0bbb 1101 1100 FBBB uuuu uu1Q QQQQ
+// MPYHU<.f> a,limm,c 0010 0110 0001 1100 F111 CCCC CCAA AAAA (+ Limm)
+// MPYHU<.f> a,b,limm 0010 0bbb 0001 1100 FBBB 1111 10AA AAAA (+ Limm)
+// MPYHU<.cc><.f> b,b,limm 0010 0bbb 1101 1100 FBBB 1111 100Q QQQQ (+ Limm)
+//
+// MPYHU<.f> 0,b,c 0010 0bbb 0001 1100 FBBB CCCC CC11 1110
+// MPYHU<.f> 0,b,u6 0010 0bbb 0101 1100 FBBB uuuu uu11 1110
+// MPYHU<.cc><.f> 0,limm,c 0010 0110 1101 1100 F111 CCCC CC0Q QQQQ (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_MPYHU(stream, pc, op, opcodes); break; // MPYHU *
+ }
+ case 0x1d:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// MPYU<.f> a,b,c 0010 0bbb 0001 1101 FBBB CCCC CCAA AAAA
+// MPYU<.f> a,b,u6 0010 0bbb 0101 1101 FBBB uuuu uuAA AAAA
+// MPYU<.f> b,b,s12 0010 0bbb 1001 1101 FBBB ssss ssSS SSSS
+// MPYU<.cc><.f> b,b,c 0010 0bbb 1101 1101 FBBB CCCC CC0Q QQQQ
+// MPYU<.cc><.f> b,b,u6 0010 0bbb 1101 1101 FBBB uuuu uu1Q QQQQ
+// MPYU<.f> a,limm,c 0010 0110 0001 1101 F111 CCCC CCAA AAAA (+ Limm)
+// MPYU<.f> a,b,limm 0010 0bbb 0001 1101 FBBB 1111 10AA AAAA (+ Limm)
+// MPYU<.cc><.f> b,b,limm 0010 0bbb 1101 1101 FBBB 1111 100Q QQQQ (+ Limm)
+//
+// MPYU<.f> 0,b,c 0010 0bbb 0001 1101 FBBB CCCC CC11 1110
+// MPYU<.f> 0,b,u6 0010 0bbb 0101 1101 FBBB uuuu uu11 1110
+// MPYU<.cc><.f> 0,limm,c 0010 0110 1101 1101 F111 CCCC CC0Q QQQQ (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_MPYU(stream, pc, op, opcodes); break; // MPYU *
+ }
+ case 0x20:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// IIII I SS SSSS
+// Jcc [c] 0010 0RRR 1110 0000 0RRR CCCC CC0Q QQQQ
+// Jcc limm 0010 0RRR 1110 0000 0RRR 1111 100Q QQQQ (+ Limm)
+// Jcc u6 0010 0RRR 1110 0000 0RRR uuuu uu1Q QQQQ
+// Jcc.F [ilink1] 0010 0RRR 1110 0000 1RRR 0111 010Q QQQQ
+// Jcc.F [ilink2] 0010 0RRR 1110 0000 1RRR 0111 100Q QQQQ
+// IIII I SS SSSS
+// J [c] 0010 0RRR 0010 0000 0RRR CCCC CCRR RRRR
+// J.F [ilink1] 0010 0RRR 0010 0000 1RRR 0111 01RR RRRR
+// J.F [ilink2] 0010 0RRR 0010 0000 1RRR 0111 10RR RRRR
+// J limm 0010 0RRR 0010 0000 0RRR 1111 10RR RRRR (+ Limm)
+// J u6 0010 0RRR 0110 0000 0RRR uuuu uuRR RRRR
+// J s12 0010 0RRR 1010 0000 0RRR ssss ssSS SSSS
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_Jcc(stream, pc, op, opcodes); break; // Jcc
+ }
+ case 0x21:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// IIII I SS SSSS
+// Jcc.D u6 0010 0RRR 1110 0001 0RRR uuuu uu1Q QQQQ
+// Jcc.D [c] 0010 0RRR 1110 0001 0RRR CCCC CC0Q QQQQ
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// J.D [c] 0010 0RRR 0010 0001 0RRR CCCC CCRR RRRR
+// J.D u6 0010 0RRR 0110 0001 0RRR uuuu uuRR RRRR
+// J.D s12 0010 0RRR 1010 0001 0RRR ssss ssSS SSSS
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+ size = handle::dasm32_Jcc_D(stream, pc, op, opcodes); break; // Jcc.D
+ }
+ case 0x22:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// IIII I SS SSSS
+// JLcc [c] 0010 0RRR 1110 0010 0RRR CCCC CC0Q QQQQ
+// JLcc limm 0010 0RRR 1110 0010 0RRR 1111 100Q QQQQ (+ Limm)
+// JLcc u6 0010 0RRR 1110 0010 0RRR uuuu uu1Q QQQQ
+// JL [c] 0010 0RRR 0010 0010 0RRR CCCC CCRR RRRR
+// JL limm 0010 0RRR 0010 0010 0RRR 1111 10RR RRRR (+ Limm)
+// JL u6 0010 0RRR 0110 0010 0RRR uuuu uuRR RRRR
+// JL s12 0010 0RRR 1010 0010 0RRR ssss ssSS SSSS
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_JLcc(stream, pc, op, opcodes); break; // JLcc
+ }
+ case 0x23:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// IIII I SS SSSS
+// JLcc.D u6 0010 0RRR 1110 0011 0RRR uuuu uu1Q QQQQ
+// JLcc.D [c] 0010 0RRR 1110 0011 0RRR CCCC CC0Q QQQQ
+// JL.D [c] 0010 0RRR 0010 0011 0RRR CCCC CCRR RRRR
+// JL.D u6 0010 0RRR 0110 0011 0RRR uuuu uuRR RRRR
+// JL.D s12 0010 0RRR 1010 0011 0RRR ssss ssSS SSSS
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_JLcc_D(stream, pc, op, opcodes); break; // JLcc.D
+ }
+ case 0x28:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// IIII I SS SSSS
+// LP<cc> u7 0010 0RRR 1110 1000 0RRR uuuu uu1Q QQQQ
+// LP s13 0010 0RRR 1010 1000 0RRR ssss ssSS SSSS
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_LP(stream, pc, op, opcodes); break; // LPcc
+ }
+ case 0x29:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// IIII I SS SSSS
+// PP
+// General Operations Reg-Reg 0010 0bbb 00ii iiii FBBB CCCC CCAA AAAA
+// FLAG c 0010 0000 0010 1001 0000 0000 0100 0000 (Leapster BIOS uses this redundant encoding where A is unused?)
+//
+// PP
+// Gen Op Reg+6-bit unsigned Imm 0010 0bbb 01ii iiii FBBB UUUU UUAA AAAA
+// no listed FLAG encodings
+//
+// PP
+// Gen Op Reg+12-bit signed Imm 0010 0bbb 10ii iiii FBBB ssss ssSS SSSS
+// FLAG s12 0010 0rrr 1010 1001 0RRR ssss ssSS SSSS
+//
+// PP M
+// Gen Op Conditional Register 0010 0bbb 11ii iiii FBBB CCCC CC0Q QQQQ
+// FLAG<.cc> c 0010 0rrr 1110 1001 0RRR CCCC CC0Q QQQQ
+// FLAG<.cc> limm 0010 0rrr 1110 1001 0RRR 1111 100Q QQQQ (+ Limm)
+//
+// PP M
+// Gen Op ConReg 6-bit unsign Imm 0010 0bbb 11ii iiii FBBB UUUU UU1Q QQQQ
+// FLAG<.cc> u6 0010 0rrr 1110 1001 0RRR uuuu uu1Q QQQQ
+//
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_FLAG(stream, pc, op, opcodes); break; // FLAG
+ }
+ case 0x2a:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// IIII I SS SSSS
+// LR b,[c] 0010 0bbb 0010 1010 0BBB CCCC CCRR RRRR
+// LR b,[limm] 0010 0bbb 0010 1010 0BBB 1111 10RR RRRR (+ Limm)
+// LR b,[u6] 0010 0bbb 0110 1010 0BBB uuuu uu00 0000
+// LR b,[s12] 0010 0bbb 1010 1010 0BBB ssss ssSS SSSS
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_LR(stream, pc, op, opcodes); break; // LR
+ }
+ case 0x2b:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// IIII I SS SSSS
+// SR b,[c] 0010 0bbb 0010 1011 0BBB CCCC CCRR RRRR
+// SR b,[limm] 0010 0bbb 0010 1011 0BBB 1111 10RR RRRR (+ Limm)
+// SR b,[u6] 0010 0bbb 0110 1011 0BBB uuuu uu00 0000
+// SR b,[s12] 0010 0bbb 1010 1011 0BBB ssss ssSS SSSS
+// SR limm,[c] 0010 0110 0010 1011 0111 CCCC CCRR RRRR (+ Limm)
+// SR limm,[u6] 0010 0110 0110 1011 0111 uuuu uu00 0000
+// SR limm,[s12] 0010 0110 1010 1011 0111 ssss ssSS SSSS (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_SR(stream, pc, op, opcodes); break; // SR
+ }
+ case 0x2f: // Sub Opcode
+ {
+ uint8_t subinstr2 = op & 0x0000003f;
+ switch (subinstr2 & 0x3f)
+ {
+ case 0x00:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// IIII I SS SSSS ss ssss
+// ASL<.f> b,c 0010 0bbb 0010 1111 FBBB CCCC CC00 0000
+// ASL<.f> b,u6 0010 0bbb 0110 1111 FBBB uuuu uu00 0000
+// ASL<.f> b,limm 0010 0bbb 0010 1111 FBBB 1111 1000 0000 (+ Limm)
+//
+// ASL<.f> 0,c 0010 0110 0010 1111 F111 CCCC CC00 0000
+// ASL<.f> 0,u6 0010 0110 0110 1111 F111 uuuu uu00 0000
+// ASL<.f> 0,limm 0010 0110 0010 1111 F111 1111 1000 0000 (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_ASL_single(stream, pc, op, opcodes); break; // ASL
+ }
+ case 0x01:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// IIII I SS SSSS ss ssss
+// ASR<.f> b,c 0010 0bbb 0010 1111 FBBB CCCC CC00 0001
+// ASR<.f> b,u6 0010 0bbb 0110 1111 FBBB uuuu uu00 0001
+// ASR<.f> b,limm 0010 0bbb 0010 1111 FBBB 1111 1000 0001 (+ Limm)
+//
+// ASR<.f> 0,c 0010 0110 0010 1111 F111 CCCC CC00 0001
+// ASR<.f> 0,u6 0010 0110 0110 1111 F111 uuuu uu00 0001
+// ASR<.f> 0,limm 0010 0110 0010 1111 F111 1111 1000 0001 (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_ASR_single(stream, pc, op, opcodes); break; // ASR
+ }
+ case 0x02:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// IIII I SS SSSS ss ssss
+// LSR<.f> b,c 0010 0bbb 0010 1111 FBBB CCCC CC00 0010
+// LSR<.f> b,u6 0010 0bbb 0110 1111 FBBB uuuu uu00 0010
+// LSR<.f> b,limm 0010 0bbb 0010 1111 FBBB 1111 1000 0010 (+ Limm)
+//
+// LSR<.f> 0,c 0010 0110 0010 1111 F111 CCCC CC00 0010
+// LSR<.f> 0,u6 0010 0110 0110 1111 F111 uuuu uu00 0010
+// LSR<.f> 0,limm 0010 0110 0010 1111 F111 1111 1000 0010 (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_LSR_single(stream, pc, op, opcodes); break; // LSR
+ }
+ case 0x03:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// IIII I SS SSSS ss ssss
+// ROR<.f> b,c 0010 0bbb 0010 1111 FBBB CCCC CC00 0011
+// ROR<.f> b,u6 0010 0bbb 0110 1111 FBBB uuuu uu00 0011
+// ROR<.f> b,limm 0010 0bbb 0010 1111 FBBB 1111 1000 0011 (+ Limm)
+//
+// ROR<.f> 0,c 0010 0110 0010 1111 F111 CCCC CC00 0011
+// ROR<.f> 0,u6 0010 0110 0110 1111 F111 uuuu uu00 0011
+// ROR<.f> 0,limm 0010 0110 0010 1111 F111 1111 1000 0011 (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_ROR_single(stream, pc, op, opcodes); break; // ROR
+ }
+ case 0x04:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// IIII I SS SSSS ss ssss
+// RRC<.f> b,c 0010 0bbb 0010 1111 FBBB CCCC CC00 0100
+// RRC<.f> b,u6 0010 0bbb 0110 1111 FBBB uuuu uu00 0100
+// RRC<.f> b,limm 0010 0bbb 0010 1111 FBBB 1111 1000 0100 (+ Limm)
+//
+// RRC<.f> 0,c 0010 0110 0010 1111 F111 CCCC CC00 0100
+// RRC<.f> 0,u6 0010 0110 0110 1111 F111 uuuu uu00 0100
+// RRC<.f> 0,limm 0010 0110 0010 1111 F111 1111 1000 0100 (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_RRC(stream, pc, op, opcodes); break; // RCC
+ }
+ case 0x05:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// IIII I SS SSSS ss ssss
+// SEXB<.f> b,c 0010 0bbb 0010 1111 FBBB CCCC CC00 0101
+// SEXB<.f> b,u6 0010 0bbb 0110 1111 FBBB uuuu uu00 0101
+// SEXB<.f> b,limm 0010 0bbb 0010 1111 FBBB 1111 1000 0101 (+ Limm)
+//
+// SEXB<.f> 0,c 0010 0110 0010 1111 F111 CCCC CC00 0101
+// SEXB<.f> 0,u6 0010 0110 0110 1111 F111 uuuu uu00 0101
+// SEXB<.f> 0,limm 0010 0110 0010 1111 F111 1111 1000 0101 (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_SEXB(stream, pc, op, opcodes); break; // SEXB
+ }
+ case 0x06:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// IIII I SS SSSS ss ssss
+// SEXW<.f> b,c 0010 0bbb 0010 1111 FBBB CCCC CC00 0110
+// SEXW<.f> b,u6 0010 0bbb 0110 1111 FBBB uuuu uu00 0110
+// SEXW<.f> b,limm 0010 0bbb 0010 1111 FBBB 1111 1000 0110 (+ Limm)
+//
+// SEXW<.f> 0,c 0010 0110 0010 1111 F111 CCCC CC00 0110
+// SEXW<.f> 0,u6 0010 0110 0110 1111 F111 uuuu uu00 0110
+// SEXW<.f> 0,limm 0010 0110 0010 1111 F111 1111 1000 0110 (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_SEXW(stream, pc, op, opcodes); break; // SEXW
+ }
+ case 0x07:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// IIII I SS SSSS ss ssss
+// EXTB<.f> b,c 0010 0bbb 0010 1111 FBBB CCCC CC00 0111
+// EXTB<.f> b,u6 0010 0bbb 0110 1111 FBBB uuuu uu00 0111
+// EXTB<.f> b,limm 0010 0bbb 0010 1111 FBBB 1111 1000 0111 (+ Limm)
+//
+// EXTB<.f> 0,c 0010 0110 0010 1111 F111 CCCC CC00 0111
+// EXTB<.f> 0,u6 0010 0110 0110 1111 F111 uuuu uu00 0111
+// EXTB<.f> 0,limm 0010 0110 0010 1111 F111 1111 1000 0111 (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_EXTB(stream, pc, op, opcodes); break; // EXTB
+ }
+ case 0x08:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// IIII I SS SSSS ss ssss
+// EXTW<.f> b,c 0010 0bbb 0010 1111 FBBB CCCC CC00 1000
+// EXTW<.f> b,u6 0010 0bbb 0110 1111 FBBB uuuu uu00 1000
+// EXTW<.f> b,limm 0010 0bbb 0010 1111 FBBB 1111 1000 1000 (+ Limm)
+//
+// EXTW<.f> 0,c 0010 0110 0010 1111 F111 CCCC CC00 1000
+// EXTW<.f> 0,u6 0010 0110 0110 1111 F111 uuuu uu00 1000
+// EXTW<.f> 0,limm 0010 0110 0010 1111 F111 1111 1000 1000 (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_EXTW(stream, pc, op, opcodes); break; // EXTW
+ }
+ case 0x09:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// IIII I SS SSSS ss ssss
+// ABS<.f> b,c 0010 0bbb 0010 1111 FBBB CCCC CC00 1001
+// ABS<.f> b,u6 0010 0bbb 0110 1111 FBBB uuuu uu00 1001
+// ABS<.f> b,limm 0010 0bbb 0010 1111 FBBB 1111 1000 1001 (+ Limm)
+//
+// ABS<.f> 0,c 0010 0110 0010 1111 F111 CCCC CC00 1001
+// ABS<.f> 0,u6 0010 0110 0110 1111 F111 uuuu uu00 1001
+// ABS<.f> 0,limm 0010 0110 0010 1111 F111 1111 1000 1001 (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_ABS(stream, pc, op, opcodes); break; // ABS
+ }
+ case 0x0a:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// IIII I SS SSSS ss ssss
+// NOT<.f> b,c 0010 0bbb 0010 1111 FBBB CCCC CC00 1010
+// NOT<.f> b,u6 0010 0bbb 0110 1111 FBBB uuuu uu00 1010
+// NOT<.f> b,limm 0010 0bbb 0010 1111 FBBB 1111 1000 1010 (+ Limm)
+//
+// NOT<.f> 0,c 0010 0110 0010 1111 F111 CCCC CC00 1010
+// NOT<.f> 0,u6 0010 0110 0110 1111 F111 uuuu uu00 1010
+// NOT<.f> 0,limm 0010 0110 0010 1111 F111 1111 1000 1010 (+ Limm)
+//
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_NOT(stream, pc, op, opcodes); break; // NOT
+ }
+ case 0x0b:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// IIII I SS SSSS ss ssss
+// RLC<.f> b,c 0010 0bbb 0010 1111 FBBB CCCC CC00 1011
+// RLC<.f> b,u6 0010 0bbb 0110 1111 FBBB uuuu uu00 1011
+// RLC<.f> b,limm 0010 0bbb 0010 1111 FBBB 1111 1000 1011 (+ Limm)
+//
+// RLC<.f> 0,c 0010 0110 0010 1111 F111 CCCC CC00 1011
+// RLC<.f> 0,u6 0010 0110 0110 1111 F111 uuuu uu00 1011
+// RLC<.f> 0,limm 0010 0110 0010 1111 F111 1111 1000 1011 (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_RLC(stream, pc, op, opcodes); break; // RLC
+ }
+ case 0x0c:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// IIII I SS SSSS ss ssss
+// EX<.di> b,[c] 0010 0bbb 0010 1111 DBBB CCCC CC00 1100
+// EX<.di> b,[u6] 0010 0bbb 0110 1111 DBBB uuuu uu00 1100
+// EX<.di> b,[limm] 0010 0bbb 0010 1111 DBBB 1111 1000 1100 (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_EX(stream, pc, op, opcodes); break; // EX
+ }
+ case 0x3f: // ZOPs (Zero Operand Opcodes)
+ {
+ uint8_t subinstr3 = (op & 0x07000000) >> 24;
+ subinstr3 |= ((op & 0x00007000) >> 12) << 3;
+
+ switch (subinstr3 & 0x3f)
+ {
+ case 0x01:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// IIII I$$$ SS SSSS $$$ ss ssss
+// SLEEP <u6> 0010 0001 0110 1111 0000 uuuu uu11 1111
+// SLEEP c 0010 0001 0010 1111 0000 CCCC CC11 1111
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_SLEEP(stream, pc, op, opcodes); break; // SLEEP
+ }
+ case 0x02:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// IIII I$$$ SS SSSS $$$ ss ssss
+// SWI/TRAP0 0010 0010 0110 1111 0000 0000 0011 1111
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_SWI(stream, pc, op, opcodes); break; // SWI / TRAP9
+ }
+ case 0x03:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// IIII I$$$ SS SSSS $$$ ss ssss
+// SYNC 0010 0011 0110 1111 0000 0000 0011 1111
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_SYNC(stream, pc, op, opcodes); break; // SYNC
+ }
+ case 0x04:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// IIII I$$$ SS SSSS $$$ ss ssss
+// RTIE 0010 0100 0110 1111 0000 0000 0011 1111
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_RTIE(stream, pc, op, opcodes); break; // RTIE
+ }
+ case 0x05:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// IIII I$$$ SS SSSS $$$ ss ssss
+// BRK 0010 0101 0110 1111 0000 0000 0011 1111
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_BRK(stream, pc, op, opcodes); break; // BRK
+ }
+
+ default:
+ {
+ // 0x00, 0x06-0x3f
+ size = handle::dasm_illegal(stream, pc, instruction, subinstr, subinstr2, subinstr3, op, opcodes); break; // illegal
+ }
+ }
+ break;
+ }
+ default:
+ {
+ // 0x0d - 0x3e
+ size = handle::dasm_illegal(stream, pc, instruction, subinstr, subinstr2, op, opcodes); break; // illegal
+ }
+ }
+ break;
+ }
+
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// IIII I SS SSSS
+// LD<zz><.x><.aa><.di> a,[b,c] 0010 0bbb aa11 0ZZX DBBB CCCC CCAA AAAA
+// LD<zz><.x><.aa><.di> 0,[b,c] 0010 0bbb aa11 0ZZX DBBB CCCC CC11 1110
+// PREFETCH<.aa> [b,c] 0010 0bbb aa11 0000 0BBB CCCC CC11 1110 (ZZXD is 0) (prefetch is an alias)
+//
+// LD<zz><.x><.aa><.di> a,[b,limm] 0010 0bbb aa11 0ZZX DBBB 1111 10AA AAAA (+ Limm) (C is 62)
+// LD<zz><.x><.aa><.di> 0,[b,limm] 0010 0bbb aa11 0ZZX DBBB 1111 1011 1110 (+ Limm) (C is 62)
+// PREFETCH<.aa> [b,limm] 0010 0bbb aa11 0000 0BBB 1111 1011 1110 (+ Limm) (C is 62) (ZZXD is 0) (prefetch is an alias)
+//
+// if b is 62 (Limm) then aa becomes RR (reserved)
+// LD<zz><.x><.di> a,[limm,c] 0010 0110 RR11 0ZZX D111 CCCC CCAA AAAA (+ Limm) (b is 62)
+// LD<zz><.x><.di> 0,[limm,c] 0010 0110 RR11 0ZZX D111 CCCC CC11 1110 (+ Limm) (b is 62)
+// PREFETCH [limm,c] 0010 0110 RR11 0000 0111 CCCC CC11 1110 (+ Limm) (b is 62) (ZZXD is 0) (prefetch is an alias)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ case 0x30: size = handle::dasm32_LD_0(stream, pc, op, opcodes); break; // LD r-r
+ case 0x31: size = handle::dasm32_LD_1(stream, pc, op, opcodes); break; // LD r-r
+ case 0x32: size = handle::dasm32_LD_2(stream, pc, op, opcodes); break; // LD r-r
+ case 0x33: size = handle::dasm32_LD_3(stream, pc, op, opcodes); break; // LD r-r
+ case 0x34: size = handle::dasm32_LD_4(stream, pc, op, opcodes); break; // LD r-r
+ case 0x35: size = handle::dasm32_LD_5(stream, pc, op, opcodes); break; // LD r-r
+ case 0x36: size = handle::dasm32_LD_6(stream, pc, op, opcodes); break; // LD r-r
+ case 0x37: size = handle::dasm32_LD_7(stream, pc, op, opcodes); break; // LD r-r
+ default:
+ {
+ size = handle::dasm_illegal(stream, pc, instruction, subinstr, op, opcodes); break; // illegal
+ }
+ }
+ break;
+ }
+ case 0x05: // op a,b,c (05 ARC ext)
+ {
+ uint8_t subinstr = (op & 0x003f0000) >> 16;
+
+ switch (subinstr)
+ {
+ case 0x00:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// IIII I SS SSSS
+// ASL<.f> a,b,c 0010 1bbb 0000 0000 FBBB CCCC CCAA AAAA
+// ASL<.f> a,b,u6 0010 1bbb 0100 0000 FBBB uuuu uuAA AAAA
+// ASL<.f> b,b,s12 0010 1bbb 1000 0000 FBBB ssss ssSS SSSS
+// ASL<.cc><.f> b,b,c 0010 1bbb 1100 0000 FBBB CCCC CC0Q QQQQ
+// ASL<.cc><.f> b,b,u6 0010 1bbb 1100 0000 FBBB uuuu uu1Q QQQQ
+// ASL<.f> a,limm,c 0010 1110 0000 0000 F111 CCCC CCAA AAAA (+ Limm)
+// ASL<.f> a,b,limm 0010 1bbb 0000 0000 FBBB 1111 10AA AAAA (+ Limm)
+// ASL<.cc><.f> b,b,limm 0010 1bbb 1100 0000 FBBB 1111 100Q QQQQ (+ Limm)
+//
+// ASL<.f> 0,b,c 0010 1bbb 0000 0000 FBBB CCCC CC11 1110
+// ASL<.f> 0,b,u6 0010 1bbb 0100 0000 FBBB uuuu uu11 1110
+// ASL<.cc><.f> 0,limm,c 0010 1110 1100 0000 F111 CCCC CC0Q QQQQ (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_ASL_multiple(stream, pc, op, opcodes); break; // ASL
+ }
+ case 0x01:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// LSR<.f> a,b,c 0010 1bbb 0000 0001 FBBB CCCC CCAA AAAA
+// LSR<.f> a,b,u6 0010 1bbb 0100 0001 FBBB uuuu uuAA AAAA
+// LSR<.f> b,b,s12 0010 1bbb 1000 0001 FBBB ssss ssSS SSSS
+// LSR<.cc><.f> b,b,c 0010 1bbb 1100 0001 FBBB CCCC CC0Q QQQQ
+// LSR<.cc><.f> b,b,u6 0010 1bbb 1100 0001 FBBB uuuu uu1Q QQQQ
+// LSR<.f> a,limm,c 0010 1110 0000 0001 F111 CCCC CCAA AAAA (+ Limm)
+// LSR<.f> a,b,limm 0010 1bbb 0000 0001 FBBB 1111 10AA AAAA (+ Limm)
+// LSR<.cc><.f> b,b,limm 0010 1bbb 1100 0001 FBBB 1111 100Q QQQQ (+ Limm)
+//
+// LSR<.f> 0,b,c 0010 1bbb 0000 0001 FBBB CCCC CC11 1110
+// LSR<.f> 0,b,u6 0010 1bbb 0100 0001 FBBB uuuu uu11 1110
+// LSR<.cc><.f> 0,limm,c 0010 1110 1100 0001 F111 CCCC CC0Q QQQQ (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_LSR_multiple(stream, pc, op, opcodes); break; // LSR
+ }
+ case 0x02:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// ASR<.f> a,b,c 0010 1bbb 0000 0010 FBBB CCCC CCAA AAAA
+// ASR<.f> a,b,u6 0010 1bbb 0100 0010 FBBB uuuu uuAA AAAA
+// ASR<.f> b,b,s12 0010 1bbb 1000 0010 FBBB ssss ssSS SSSS
+// ASR<.cc><.f> b,b,c 0010 1bbb 1100 0010 FBBB CCCC CC0Q QQQQ
+// ASR<.cc><.f> b,b,u6 0010 1bbb 1100 0010 FBBB uuuu uu1Q QQQQ
+// ASR<.f> a,limm,c 0010 1110 0000 0010 F111 CCCC CCAA AAAA (+ Limm)
+// ASR<.f> a,b,limm 0010 1bbb 0000 0010 FBBB 1111 10AA AAAA (+ Limm)
+// ASR<.cc><.f> b,b,limm 0010 1bbb 1100 0010 FBBB 1111 100Q QQQQ (+ Limm)
+//
+// ASR<.f> 0,b,c 0010 1bbb 0000 0010 FBBB CCCC CC11 1110
+// ASR<.f> 0,b,u6 0010 1bbb 0100 0010 FBBB uuuu uu11 1110
+// ASR<.cc><.f> 0,limm,c 0010 1110 1100 0010 F111 CCCC CC0Q QQQQ (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_ASR_multiple(stream, pc, op, opcodes); break; // ASR
+ }
+ case 0x03:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// ROR<.f> a,b,c 0010 1bbb 0000 0011 FBBB CCCC CCAA AAAA
+// ROR<.f> a,b,u6 0010 1bbb 0100 0011 FBBB uuuu uuAA AAAA
+// ROR<.f> b,b,s12 0010 1bbb 1000 0011 FBBB ssss ssSS SSSS
+// ROR<.cc><.f> b,b,c 0010 1bbb 1100 0011 FBBB CCCC CC0Q QQQQ
+// ROR<.cc><.f> b,b,u6 0010 1bbb 1100 0011 FBBB uuuu uu1Q QQQQ
+// ROR<.f> a,limm,c 0010 1110 0000 0011 F111 CCCC CCAA AAAA (+ Limm)
+// ROR<.f> a,b,limm 0010 1bbb 0000 0011 FBBB 1111 10AA AAAA (+ Limm)
+// ROR<.cc><.f> b,b,limm 0010 1bbb 1100 0011 FBBB 1111 100Q QQQQ (+ Limm)
+//
+// ROR<.f> 0,b,c 0010 1bbb 0000 0011 FBBB CCCC CC11 1110
+// ROR<.f> 0,b,u6 0010 1bbb 0100 0011 FBBB uuuu uu11 1110
+// ROR<.cc><.f> 0,limm,c 0010 1110 1100 0011 F111 CCCC CC0Q QQQQ (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_ROR_multiple(stream, pc, op, opcodes); break; // ROR
+ }
+ case 0x04:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// MUL64 <0,>b,c 0010 1bbb 0000 0100 0BBB CCCC CC11 1110
+// MUL64 <0,>b,u6 0010 1bbb 0100 0100 0BBB uuuu uu11 1110
+// MUL64 <0,>b,s12 0010 1bbb 1000 0100 0BBB ssss ssSS SSSS
+// MUL64 <0,>limm,c 0010 1110 0000 0100 0111 CCCC CC11 1110 (+ Limm)
+//
+// MUL64<.cc> <0,>b,c 0010 1bbb 1100 0100 0BBB CCCC CC0Q QQQQ
+// MUL64<.cc> <0,>b,u6 0010 1bbb 1100 0100 0BBB uuuu uu1Q QQQQ
+// MUL64<.cc> <0,>limm,c 0010 1110 1100 0100 0111 CCCC CC0Q QQQQ (+ Limm)
+// MUL64<.cc> <0,>b,limm 0010 1bbb 1100 0100 0BBB 1111 100Q QQQQ (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_MUL64(stream, pc, op, opcodes); break; // MUL64
+ }
+ case 0x05:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// MULU64 <0,>b,c 0010 1bbb 0000 0101 0BBB CCCC CC11 1110
+// MULU64 <0,>b,u6 0010 1bbb 0100 0101 0BBB uuuu uu11 1110
+// MULU64 <0,>b,s12 0010 1bbb 1000 0101 0BBB ssss ssSS SSSS
+// MULU64 <0,>limm,c 0010 1110 0000 0101 0111 CCCC CC11 1110 (+ Limm)
+//
+// MULU64<.cc> <0,>b,c 0010 1bbb 1100 0101 0BBB CCCC CC0Q QQQQ
+// MULU64<.cc> <0,>b,u6 0010 1bbb 1100 0101 0BBB uuuu uu1Q QQQQ
+// MULU64<.cc> <0,>limm,c 0010 1110 1100 0101 0111 CCCC CC0Q QQQQ (+ Limm)
+// MULU64<.cc> <0,>b,limm 0010 1bbb 1100 0101 0BBB 1111 100Q QQQQ (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_MULU64(stream, pc, op, opcodes); break; // MULU64
+ }
+ case 0x06:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// ADDS<.f> a,b,c 0010 1bbb 0000 0110 FBBB CCCC CCAA AAAA
+// ADDS<.f> a,b,u6 0010 1bbb 0100 0110 FBBB uuuu uuAA AAAA
+// ADDS<.f> b,b,s12 0010 1bbb 1000 0110 FBBB ssss ssSS SSSS
+// ADDS<.cc><.f> b,b,c 0010 1bbb 1100 0110 FBBB CCCC CC0Q QQQQ
+// ADDS<.cc><.f> b,b,u6 0010 1bbb 1100 0110 FBBB uuuu uu1Q QQQQ
+// ADDS<.f> a,limm,c 0010 1110 0000 0110 F111 CCCC CCAA AAAA (+ Limm)
+// ADDS<.f> a,b,limm 0010 1bbb 0000 0110 FBBB 1111 10AA AAAA (+ Limm)
+// ADDS<.cc><.f> b,b,limm 0010 1bbb 1100 0110 FBBB 1111 10QQ QQQQ (+ Limm)
+//
+// ADDS<.f> 0,b,c 0010 1bbb 0000 0110 FBBB CCCC CC11 1110
+// ADDS<.f> 0,b,u6 0010 1bbb 0100 0110 FBBB uuuu uu11 1110
+// ADDS<.f> 0,b,limm 0010 1bbb 0000 0110 FBBB 1111 1011 1110 (+ Limm)
+// ADDS<.cc><.f> 0,limm,c 0010 1110 1100 0110 F111 CCCC CC0Q QQQQ (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_ADDS(stream, pc, op, opcodes); break; // ADDS
+ }
+ case 0x07:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// SUBS<.f> a,b,c 0010 1bbb 0000 0111 FBBB CCCC CCAA AAAA
+// SUBS<.f> a,b,u6 0010 1bbb 0100 0111 FBBB uuuu uuAA AAAA
+// SUBS<.f> b,b,s12 0010 1bbb 1000 0111 FBBB ssss ssSS SSSS
+// SUBS<.cc><.f> b,b,c 0010 1bbb 1100 0111 FBBB CCCC CC0Q QQQQ
+// SUBS<.cc><.f> b,b,u6 0010 1bbb 1100 0111 FBBB uuuu uu1Q QQQQ
+// SUBS<.f> a,limm,c 0010 1110 0000 0111 F111 CCCC CCAA AAAA (+ Limm)
+// SUBS<.f> a,b,limm 0010 1bbb 0000 0111 FBBB 1111 10AA AAAA (+ Limm)
+// SUBS<.cc><.f> b,b,limm 0010 1bbb 1100 0111 FBBB 1111 10QQ QQQQ (+ Limm)
+//
+// SUBS<.f> 0,b,c 0010 1bbb 0000 0111 FBBB CCCC CC11 1110
+// SUBS<.f> 0,b,u6 0010 1bbb 0100 0111 FBBB uuuu uu11 1110
+// SUBS<.f> 0,b,limm 0010 1bbb 0000 0111 FBBB 1111 1011 1110 (+ Limm)
+// SUBS<.cc><.f> 0,limm,c 0010 1110 1100 0111 F111 CCCC CC0Q QQQQ (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_SUBS(stream, pc, op, opcodes); break; // SUBS
+ }
+ case 0x08:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// DIVAW a,b,c 0010 1bbb 0000 1000 0BBB CCCC CCAA AAAA
+// DIVAW a,b,u6 0010 1bbb 0100 1000 0BBB uuuu uuAA AAAA
+// DIVAW b,b,s12 0010 1bbb 1000 1000 0BBB ssss ssSS SSSS
+// DIVAW<.cc> b,b,c 0010 1bbb 1100 1000 0BBB CCCC CC0Q QQQQ
+// DIVAW<.cc> b,b,u6 0010 1bbb 1100 1000 0BBB uuuu uu1Q QQQQ
+// DIVAW a,limm,c 0010 1110 0000 1000 0111 CCCC CCAA AAAA (+ Limm)
+// DIVAW a,b,limm 0010 1bbb 0000 1000 0BBB 1111 10AA AAAA (+ Limm)
+// DIVAW<.cc> b,b,limm 0010 1bbb 1100 1000 0BBB 1111 10QQ QQQQ (+ Limm)
+//
+// DIVAW 0,b,c 0010 1bbb 0000 1000 0BBB CCCC CC11 1110
+// DIVAW 0,b,u6 0010 1bbb 0100 1000 0BBB uuuu uu11 1110
+// DIVAW<.cc> 0,limm,c 0010 1110 1100 1000 0111 CCCC CC0Q QQQQ (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_DIVAW(stream, pc, op, opcodes); break; // DIVAW
+ }
+ case 0x0a:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// IIII I SS SSSS
+// ASLS<.f> a,b,c 0010 1bbb 0000 1010 FBBB CCCC CCAA AAAA
+// ASLS<.f> a,b,u6 0010 1bbb 0100 1010 FBBB uuuu uuAA AAAA
+// ASLS<.f> b,b,s12 0010 1bbb 1000 1010 FBBB ssss ssSS SSSS
+// ASLS<.cc><.f> b,b,c 0010 1bbb 1100 1010 FBBB CCCC CC0Q QQQQ
+// ASLS<.cc><.f> b,b,u6 0010 1bbb 1100 1010 FBBB uuuu uu1Q QQQQ
+// ASLS<.f> a,limm,c 0010 1110 0000 1010 F111 CCCC CCAA AAAA (+ Limm)
+// ASLS<.f> a,b,limm 0010 1bbb 0000 1010 FBBB 1111 10AA AAAA (+ Limm)
+// ASLS<.cc><.f> b,b,limm 0010 1bbb 1100 1010 FBBB 1111 10QQ QQQQ (+ Limm)
+// ASLS<.f> 0,b,c 0010 1bbb 0000 1010 FBBB CCCC CC11 1110
+// ASLS<.f> 0,b,u6 0010 1bbb 0100 1010 FBBB uuuu uu11 1110
+// ASLS<.cc><.f> 0,limm,c 0010 1110 1100 1010 F111 CCCC CC0Q QQQQ (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_ASLS(stream, pc, op, opcodes); break; // ASLS
+ }
+ case 0x0b:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// ASRS<.f> a,b,c 0010 1bbb 0000 1011 FBBB CCCC CCAA AAAA
+// ASRS<.f> a,b,u6 0010 1bbb 0100 1011 FBBB uuuu uuAA AAAA
+// ASRS<.f> b,b,s12 0010 1bbb 1000 1011 FBBB ssss ssSS SSSS
+// ASRS<.cc><.f> b,b,c 0010 1bbb 1100 1011 FBBB CCCC CC0Q QQQQ
+// ASRS<.cc><.f> b,b,u6 0010 1bbb 1100 1011 FBBB uuuu uu1Q QQQQ
+// ASRS<.f> a,limm,c 0010 1110 0000 1011 F111 CCCC CCAA AAAA (+ Limm)
+// ASRS<.f> a,b,limm 0010 1bbb 0000 1011 FBBB 1111 10AA AAAA (+ Limm)
+// ASRS<.cc><.f> b,b,limm 0010 1bbb 1100 1011 FBBB 1111 10QQ QQQQ (+ Limm)
+//
+// ASRS<.f> 0,b,c 0010 1bbb 0000 1011 FBBB CCCC CC11 1110
+// ASRS<.f> 0,b,u6 0010 1bbb 0100 1011 FBBB uuuu uu11 1110
+// ASRS<.cc><.f> 0,limm,c 0010 1110 1100 1011 F111 CCCC CC0Q QQQQ (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_ASRS(stream, pc, op, opcodes); break; // ASRS
+ }
+ case 0x0c:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Unknown Extension Op
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+ // Leapster BIOS uses this in loop at 400384a0
+ size = handle04_helper_dasm(stream, pc, op, opcodes, "UNKNOWN 0x05-0x0c op", 0,0);
+ break;
+ }
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Unknown Extension Op
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ case 0x10:
+ {
+ // Leapster BIOS uses this in loop at 400384a0
+ size = handle04_helper_dasm(stream, pc, op, opcodes, "UNKNOWN 0x05-0x10 op", 0,0);
+ break;
+ }
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// Unknown Extension Op
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ case 0x14:
+ {
+ // Leapster BIOS uses this in loop at 400384a0
+ size = handle04_helper_dasm(stream, pc, op, opcodes, "UNKNOWN 0x05-0x14 op", 0,0);
+ break;
+ }
+ case 0x28:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// ADDSDW<.f> a,b,c 0010 1bbb 0010 1000 FBBB CCCC CCAA AAAA
+// ADDSDW<.f> a,b,u6 0010 1bbb 0110 1000 FBBB uuuu uuAA AAAA
+// ADDSDW<.f> b,b,s12 0010 1bbb 1010 1000 FBBB ssss ssSS SSSS
+// ADDSDW<.cc><.f> b,b,c 0010 1bbb 1110 1000 FBBB CCCC CC0Q QQQQ
+// ADDSDW<.cc><.f> b,b,u6 0010 1bbb 1110 1000 FBBB uuuu uu1Q QQQQ
+// ADDSDW<.f> a,limm,c 0010 1110 0010 1000 F111 CCCC CCAA AAAA (+ Limm)
+// ADDSDW<.f> a,b,limm 0010 1bbb 0010 1000 FBBB 1111 10AA AAAA (+ Limm)
+// ADDSDW<.cc><.f> b,b,limm 0010 1bbb 1110 1000 FBBB 1111 10QQ QQQQ (+ Limm)
+//
+// ADDSDW<.f> 0,b,c 0010 1bbb 0010 1000 FBBB CCCC CC11 1110
+// ADDSDW<.f> 0,b,u6 0010 1bbb 0110 1000 FBBB uuuu uu11 1110
+// ADDSDW<.cc><.f> 0,limm,c 0010 1110 1110 1000 F111 CCCC CC0Q QQQQ (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_ADDSDW(stream, pc, op, opcodes); break; // ADDSDW
+ }
+ case 0x29:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// SUBSDW<.f> a,b,c 0010 1bbb 0010 1001 FBBB CCCC CCAA AAAA
+// SUBSDW<.f> a,b,u6 0010 1bbb 0110 1001 FBBB uuuu uuAA AAAA
+// SUBSDW<.f> b,b,s12 0010 1bbb 1010 1001 FBBB ssss ssSS SSSS
+// SUBSDW<.cc><.f> b,b,c 0010 1bbb 1110 1001 FBBB CCCC CC0Q QQQQ
+// SUBSDW<.cc><.f> b,b,u6 0010 1bbb 1110 1001 FBBB uuuu uu1Q QQQQ
+// SUBSDW<.f> a,limm,c 0010 1110 0010 1001 F111 CCCC CCAA AAAA (+ Limm)
+// SUBSDW<.f> a,b,limm 0010 1bbb 0010 1001 FBBB 1111 10AA AAAA (+ Limm)
+// SUBSDW<.cc><.f> b,b,limm 0010 1bbb 1110 1001 FBBB 1111 10QQ QQQQ (+ Limm)
+//
+// SUBSDW<.f> 0,b,c 0010 1bbb 0010 1001 FBBB CCCC CC11 1110
+// SUBSDW<.f> 0,b,u6 0010 1bbb 0110 1001 FBBB uuuu uu11 1110
+// SUBSDW<.cc><.f> 0,limm,c 0010 1110 1110 1001 F111 CCCC CC0Q QQQQ (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_SUBSDW(stream, pc, op, opcodes); break; // SUBSDW
+ }
+ case 0x2f: // SOPs
+ {
+ uint8_t subinstr2 = op & 0x0000003f;
+ switch (subinstr2)
+ {
+ case 0x00:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// SWAP<.f> b,c 0010 1bbb 0010 1111 FBBB CCCC CC00 0000
+// SWAP<.f> b,u6 0010 1bbb 0110 1111 FBBB uuuu uu00 0000
+// SWAP<.f> b,limm 0010 1bbb 0010 1111 FBBB 1111 1000 0000 (+ Limm)
+//
+// SWAP<.f> 0,c 0010 1110 0010 1111 F111 CCCC CC00 0000
+// SWAP<.f> 0,u6 0010 1110 0110 1111 F111 uuuu uu00 0000
+// SWAP<.f> 0,limm 0010 1110 0010 1111 F111 1111 1000 0000 (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_SWAP(stream, pc, op, opcodes); break; // SWAP
+ }
+ case 0x01:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// NORM<.f> b,c 0010 1bbb 0010 1111 FBBB CCCC CC00 0001
+// NORM<.f> b,u6 0010 1bbb 0110 1111 FBBB uuuu uu00 0001
+// NORM<.f> b,limm 0010 1bbb 0010 1111 FBBB 1111 1000 0001 (+ Limm)
+//
+// NORM<.f> 0,c 0010 1110 0010 1111 F111 CCCC CC00 0001
+// NORM<.f> 0,u6 0010 1110 0110 1111 F111 uuuu uu00 0001
+// NORM<.f> 0,limm 0010 1110 0010 1111 F111 1111 1000 0001 (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_NORM(stream, pc, op, opcodes); break; // NORM
+ }
+ case 0x02:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// SAT16<.f> b,c 0010 1bbb 0010 1111 FBBB CCCC CC00 0010
+// SAT16<.f> b,u6 0010 1bbb 0110 1111 FBBB uuuu uu00 0010
+// SAT16<.f> b,limm 0010 1bbb 0010 1111 FBBB 1111 1000 0010 (+ Limm)
+//
+// SAT16<.f> 0,c 0010 1110 0010 1111 F111 CCCC CC00 0010
+// SAT16<.f> 0,u6 0010 1110 0110 1111 F111 uuuu uu00 0010
+// SAT16<.f> 0,limm 0010 1110 0010 1111 F111 1111 1000 0010 (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_SAT16(stream, pc, op, opcodes); break; // SAT16
+ }
+ case 0x03:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// RND16<.f> b,c 0010 1bbb 0010 1111 FBBB CCCC CC00 0011
+// RND16<.f> b,u6 0010 1bbb 0110 1111 FBBB uuuu uu00 0011
+// RND16<.f> b,limm 0010 1bbb 0010 1111 FBBB 1111 1000 0011 (+ Limm)
+//
+// RND16<.f> 0,c 0010 1110 0010 1111 F111 CCCC CC00 0011
+// RND16<.f> 0,u6 0010 1110 0110 1111 F111 uuuu uu00 0011
+// RND16<.f> 0,limm 0010 1110 0010 1111 F111 1111 1000 0011 (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_RND16(stream, pc, op, opcodes); break; // RND16
+ }
+ case 0x04:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// ABSSW<.f> b,c 0010 1bbb 0010 1111 FBBB CCCC CC00 0100
+// ABSSW<.f> b,u6 0010 1bbb 0110 1111 FBBB uuuu uu00 0100
+// ABSSW<.f> b,limm 0010 1bbb 0010 1111 FBBB 1111 1000 0100 (+ Limm)
+//
+// ABSSW<.f> 0,c 0010 1110 0010 1111 F111 CCCC CC00 0100
+// ABSSW<.f> 0,u6 0010 1110 0110 1111 F111 uuuu uu00 0100
+// ABSSW<.f> 0,limm 0010 1110 0010 1111 F111 1111 1000 0100 (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_ABSSW(stream, pc, op, opcodes); break; // ABSSW
+ }
+ case 0x05:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// ABSS<.f> b,c 0010 1bbb 0010 1111 FBBB CCCC CC00 0101
+// ABSS<.f> b,u6 0010 1bbb 0110 1111 FBBB uuuu uu00 0101
+// ABSS<.f> b,limm 0010 1bbb 0010 1111 FBBB 1111 1000 0101 (+ Limm)
+//
+// ABSS<.f> 0,c 0010 1110 0010 1111 F111 CCCC CC00 0101
+// ABSS<.f> 0,u6 0010 1110 0110 1111 F111 uuuu uu00 0101
+// ABSS<.f> 0,limm 0010 1110 0010 1111 F111 1111 1000 0101 (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_ABSS(stream, pc, op, opcodes); break; // ABSS
+ }
+ case 0x06:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// NEGSW<.f> b,c 0010 1bbb 0010 1111 FBBB CCCC CC00 0110
+// NEGSW<.f> b,u6 0010 1bbb 0110 1111 FBBB uuuu uu00 0110
+// NEGSW<.f> b,limm 0010 1bbb 0010 1111 FBBB 1111 1000 0110 (+ Limm)
+//
+// NEGSW<.f> 0,c 0010 1110 0010 1111 F111 CCCC CC00 0110
+// NEGSW<.f> 0,u6 0010 1110 0110 1111 F111 uuuu uu00 0110
+// NEGSW<.f> 0,limm 0010 1110 0010 1111 F111 1111 1000 0110 (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_NEGSW(stream, pc, op, opcodes); break; // NEGSW
+ }
+ case 0x07:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// NEGS<.f> b,c 0010 1bbb 0010 1111 FBBB CCCC CC00 0111
+// NEGS<.f> b,u6 0010 1bbb 0110 1111 FBBB uuuu uu00 0111
+// NEGS<.f> b,limm 0010 1bbb 0010 1111 FBBB 1111 1000 0111 (+ Limm)
+//
+// NEGS<.f> 0,c 0010 1110 0010 1111 F111 CCCC CC00 0111
+// NEGS<.f> 0,u6 0010 1110 0110 1111 F111 uuuu uu00 0111
+// NEGS<.f> 0,limm 0010 1110 0010 1111 F111 1111 1000 0111 (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_NEGS(stream, pc, op, opcodes); break; // NEGS
+ }
+ case 0x08:
+ {
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// NORMW<.f> b,c 0010 1bbb 0010 1111 FBBB CCCC CC00 1000
+// NORMW<.f> b,u6 0010 1bbb 0110 1111 FBBB uuuu uu00 1000
+// NORMW<.f> b,limm 0010 1bbb 0010 1111 FBBB 1111 1000 1000 (+ Limm)
+//
+// NORMW<.f> 0,c 0010 1110 0010 1111 F111 CCCC CC00 1000
+// NORMW<.f> 0,u6 0010 1110 0110 1111 F111 uuuu uu00 1000
+// NORMW<.f> 0,limm 0010 1110 0010 1111 F111 1111 1000 1000 (+ Limm)
+// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ size = handle::dasm32_NORMW(stream, pc, op, opcodes); break; // NORMW
+ }
+ case 0x3f: // ZOPs (Zero Operand Opcodes)
+ {
+ uint8_t subinstr3 = (op & 0x07000000) >> 24;
+ subinstr3 |= ((op & 0x00007000) >> 12) << 3;
+
+ switch (subinstr3)
+ {
+ default:
+ {
+ size = handle::dasm_illegal(stream, pc, instruction, subinstr, subinstr2, subinstr3, op, opcodes); break; // illegal
+ }
+ }
+ break;
+ }
+ default:
+ {
+ size = handle::dasm_illegal(stream, pc, instruction, subinstr, subinstr2, op, opcodes); break; // illegal
+ }
+ }
+ break;
+ }
+ default:
+ {
+ size = handle::dasm_illegal(stream, pc, instruction, subinstr, op, opcodes); break; // illegal
+ }
+
+ }
+ break;
+ }
+ case 0x06: size = handle::dasm32_ARC_EXT06(stream, pc, op, opcodes); break; // op a,b,c (06 ARC ext)
+ case 0x07: size = handle::dasm32_USER_EXT07(stream, pc, op, opcodes); break; // op a,b,c (07 User ext)
+ case 0x08: size = handle::dasm32_USER_EXT08(stream, pc, op, opcodes); break; // op a,b,c (08 User ext)
+ case 0x09: size = handle::dasm32_MARKET_EXT09(stream, pc, op, opcodes); break; // op a,b,c (09 Market ext)
+ case 0x0a: size = handle::dasm32_MARKET_EXT0a(stream, pc, op, opcodes); break; // op a,b,c (0a Market ext)
+ case 0x0b: size = handle::dasm32_MARKET_EXT0b(stream, pc, op, opcodes); break; // op a,b,c (0b Market ext)
}
}
else
{
size = 2;
- op &= ~0xf800;
-
switch (instruction) // 16-bit instructions
{
- case 0x0c: size = handle0c_dasm(stream, pc, op, opcodes); break; // Load/Add reg-reg
- case 0x0d: size = handle0d_dasm(stream, pc, op, opcodes); break; // Add/Sub/Shft imm
- case 0x0e: size = handle0e_dasm(stream, pc, op, opcodes); break; // Mov/Cmp/Add
- case 0x0f: size = handle0f_dasm(stream, pc, op, opcodes); break; // op_S b,b,c (single 16-bit ops)
- case 0x10: size = handle10_dasm(stream, pc, op, opcodes); break; // LD_S
- case 0x11: size = handle11_dasm(stream, pc, op, opcodes); break; // LDB_S
- case 0x12: size = handle12_dasm(stream, pc, op, opcodes); break; // LDW_S
- case 0x13: size = handle13_dasm(stream, pc, op, opcodes); break; // LSW_S.X
- case 0x14: size = handle14_dasm(stream, pc, op, opcodes); break; // ST_S
- case 0x15: size = handle15_dasm(stream, pc, op, opcodes); break; // STB_S
- case 0x16: size = handle16_dasm(stream, pc, op, opcodes); break; // STW_S
- case 0x17: size = handle17_dasm(stream, pc, op, opcodes); break; // Shift/Sub/Bit
- case 0x18: size = handle18_dasm(stream, pc, op, opcodes); break; // Stack Instr
- case 0x19: size = handle19_dasm(stream, pc, op, opcodes); break; // GP Instr
- case 0x1a: size = handle1a_dasm(stream, pc, op, opcodes); break; // PCL Instr
- case 0x1b: size = handle1b_dasm(stream, pc, op, opcodes); break; // MOV_S
- case 0x1c: size = handle1c_dasm(stream, pc, op, opcodes); break; // ADD_S/CMP_S
- case 0x1d: size = handle1d_dasm(stream, pc, op, opcodes); break; // BRcc_S
- case 0x1e: size = handle1e_dasm(stream, pc, op, opcodes); break; // Bcc_S
- case 0x1f: size = handle1f_dasm(stream, pc, op, opcodes); break; // BL_S
+ default: break; // size = -1;
+ case 0x0c: // Load/Add reg-reg
+ {
+ uint8_t subinstr = (op & 0x0018) >> 3;
+ switch (subinstr)
+ {
+ default: break; // size = -1;
+ case 0x00:
+ {
+// #######################################################################################################################
+// IIII I S S
+// LD_S a,[b,c] 0110 0bbb ccc0 0aaa
+// #######################################################################################################################
+ size = handle::dasm_LD_S_a_b_c(stream, pc, op, opcodes); break; // LD_S a,[b,c]
+ }
+ case 0x01:
+ {
+// #######################################################################################################################
+// IIII I S S
+// LDB_S a,[b,c] 0110 0bbb ccc0 1aaa
+// #######################################################################################################################
+ size = handle::dasm_LDB_S_a_b_c(stream, pc, op, opcodes); break; // LDB_S a,[b,c]
+ }
+ case 0x02:
+ {
+// #######################################################################################################################
+// IIII I S S
+// LDW_S a,[b,c] 0110 0bbb ccc1 0aaa
+// #######################################################################################################################
+ size = handle::dasm_LDW_S_a_b_c(stream, pc, op, opcodes); break; // LDW_S a,[b,c]
+ }
+ case 0x03:
+ {
+// #######################################################################################################################
+// IIII I S S
+// ADD_S a,b,c 0110 0bbb ccc1 1aaa
+// #######################################################################################################################
+ size = handle::dasm_ADD_S_a_b_c(stream, pc, op, opcodes); break; // ADD_S a,b,c
+ }
+ }
+ break;
+ }
+ case 0x0d: // Add/Sub/Shft imm
+ {
+ uint8_t subinstr = (op & 0x0018) >> 3;
+ switch (subinstr)
+ {
+ default: break; // size = -1;
+ case 0x00:
+ {
+// #######################################################################################################################
+// ADD_S c,b,u3 0110 1bbb ccc0 0uuu
+// #######################################################################################################################
+ size = handle::dasm_ADD_S_c_b_u3(stream, pc, op, opcodes); break; // ADD_S c,b,u3
+ }
+ case 0x01:
+ {
+// #######################################################################################################################
+// SUB_S c,b,u3 0110 1bbb ccc0 1uuu
+// #######################################################################################################################
+ size = handle::dasm_SUB_S_c_b_u3(stream, pc, op, opcodes); break; // SUB_S c,b,u3
+ }
+ case 0x02:
+ {
+// #######################################################################################################################
+// IIII I S S
+// ASL_S c,b,u3 0110 1bbb ccc1 0uuu
+// #######################################################################################################################
+ size = handle::dasm_ASL_S_c_b_u3(stream, pc, op, opcodes); break; // ASL_S c,b,u3
+ }
+ case 0x03:
+ {
+// #######################################################################################################################
+// IIII I S S
+// ASR_S c,b,u3 0110 1bbb ccc1 1uuu
+// #######################################################################################################################
+ size = handle::dasm_ASR_S_c_b_u3(stream, pc, op, opcodes); break; // ASR_S c,b,u3
+ }
+ }
+ break;
+ }
+ case 0x0e: // Mov/Cmp/Add
+ {
+ uint8_t subinstr = (op & 0x0018) >> 3;
+
+ switch (subinstr)
+ {
+ default: break; // size = -1;
+ case 0x00:
+ {
+// #######################################################################################################################
+// IIII I S S
+// ADD_S b,b,h 0111 0bbb hhh0 0HHH
+// ADD_S b,b,limm 0111 0bbb 1100 0111 (+ Limm)
+// #######################################################################################################################
+ size = handle::dasm_ADD_S_b_b_h_or_limm(stream, pc, op, opcodes); break; // ADD_S b,b,h or ADD_S b,b,limm
+ }
+ case 0x01:
+ {
+// #######################################################################################################################
+// IIII I S S
+// MOV_S b,h 0111 0bbb hhh0 1HHH
+// MOV_S b,limm 0111 0bbb 1100 1111 (+ Limm)
+// #######################################################################################################################
+ size = handle::dasm_MOV_S_b_h_or_limm(stream, pc, op, opcodes); break; // MOV_S b,h or MOV_S b,limm
+ }
+ case 0x02:
+ {
+// #######################################################################################################################
+// IIII I S S
+// CMP_S b,h 0111 0bbb hhh1 0HHH
+// CMP_S b,limm 0111 0bbb 1101 0111 (+ Limm)
+// #######################################################################################################################
+ size = handle::dasm_CMP_S_b_h_or_limm(stream, pc, op, opcodes); break; // CMP_S b,h or CMP_S b,limm
+ }
+ case 0x03:
+ {
+// #######################################################################################################################
+// IIII I S S
+// MOV_S h,b 0111 0bbb hhh1 1HHH
+// #######################################################################################################################
+ size = handle::dasm_MOV_S_h_b(stream, pc, op, opcodes); break; // MOV_S h,b
+ }
+ }
+ break;
+ }
+ case 0x0f: // op_S b,b,c (single 16-bit ops)
+ {
+ uint8_t subinstr = op & 0x01f;
+
+ switch (subinstr)
+ {
+ case 0x00: // SOPs
+ {
+ uint8_t subinstr2 = (op & 0x00e0) >> 5;
+
+ switch (subinstr2)
+ {
+ case 0x00:
+ {
+// #######################################################################################################################
+// IIII I sssS SSSS
+// J_S [b] 0111 1bbb 0000 0000
+// #######################################################################################################################
+ size = handle::dasm_J_S_b(stream, pc, op, opcodes); break; // J_S [b]
+ }
+ case 0x01:
+ {
+// #######################################################################################################################
+// IIII I sssS SSSS
+// J_S.D [b] 0111 1bbb 0010 0000
+// #######################################################################################################################
+ size = handle::dasm_J_S_D_b(stream, pc, op, opcodes); break; // J_S.D [b]
+ }
+ case 0x02:
+ {
+// #######################################################################################################################
+// IIII I sssS SSSS
+// JL_S [b] 0111 1bbb 0100 0000
+// #######################################################################################################################
+ size = handle::dasm_JL_S_b(stream, pc, op, opcodes); break; // JL_S [b]
+ }
+ case 0x03:
+ {
+// #######################################################################################################################
+// IIII I sssS SSSS
+// JL_S.D [b] 0111 1bbb 0110 0000
+// #######################################################################################################################
+ size = handle::dasm_JL_S_D_b(stream, pc, op, opcodes); break; // JL_S.D [b]
+ }
+ case 0x06:
+ {
+// #######################################################################################################################
+// SUB_S.NE b,b,b 0111 1bbb 1100 0000
+// IIII I sssS SSSS
+// #######################################################################################################################
+ size = handle::dasm_SUB_S_NE_b_b_b(stream, pc, op, opcodes); break; // SUB_S.NE b,b,b
+ }
+ case 0x07: // ZOPs
+ {
+ uint8_t subinstr3 = (op & 0x0700) >> 8;
+
+ switch (subinstr3)
+ {
+ case 0x00:
+ {
+// #######################################################################################################################
+// IIII I$$$ sssS SSSS
+// NOP_S 0111 1000 1110 0000
+// #######################################################################################################################
+ size = handle::dasm_NOP_S(stream, pc, op, opcodes); break; // NOP_S
+ }
+ case 0x01:
+ {
+// #######################################################################################################################
+// IIII I$$$ sssS SSSS
+// UNIMP_S 0111 1001 1110 0000
+// #######################################################################################################################
+ size = handle::dasm_UNIMP_S(stream, pc, op, opcodes); break; // UNIMP_S
+ }
+ case 0x04:
+ {
+// #######################################################################################################################
+// IIII I$$$ sssS SSSS
+// JEQ_S [blink] 0111 1100 1110 0000
+// #######################################################################################################################
+ size = handle::dasm_JEQ_S_blink(stream, pc, op, opcodes); break; // JEQ_S [BLINK]
+ }
+ case 0x05:
+ {
+// #######################################################################################################################
+// IIII I$$$ sssS SSSS
+// JNE_S [blink] 0111 1101 1110 0000
+// #######################################################################################################################
+ size = handle::dasm_JNE_S_blink(stream, pc, op, opcodes); break; // JNE_S [BLINK]
+ }
+ case 0x06:
+ {
+// #######################################################################################################################
+// IIII I$$$ sssS SSSS
+// J_S [blink] 0111 1110 1110 0000
+// #######################################################################################################################
+ size = handle::dasm_J_S_blink(stream, pc, op, opcodes); break; // J_S [BLINK]
+ }
+ case 0x07:
+ {
+// #######################################################################################################################
+// IIII I$$$ sssS SSSS
+// J_S.D [blink] 0111 1111 1110 0000
+// #######################################################################################################################
+ size = handle::dasm_J_S_D_blink(stream, pc, op, opcodes); break; // J_S.D [BLINK]
+ }
+
+ default: // 0x02, 0x03
+ {
+ size = handle::dasm_illegal(stream, pc, instruction, subinstr, subinstr2, subinstr3, op, opcodes); break;
+ }
+ }
+ break;
+ }
+ default: // 0x04, 0x05
+ {
+ size = handle::dasm_illegal(stream, pc, instruction, subinstr, subinstr2, op, opcodes); break;
+ }
+ }
+ break;
+ }
+ case 0x02:
+ {
+// #######################################################################################################################
+// IIII I S SSSS
+// SUB_S b,b,c 0111 1bbb ccc0 0010
+// #######################################################################################################################
+ size = handle::dasm_SUB_S_b_b_c(stream, pc, op, opcodes); break; // SUB_S b,b,c
+ }
+ case 0x04:
+ {
+// #######################################################################################################################
+// IIII I S SSSS
+// AND_S b,b,c 0111 1bbb ccc0 0100
+// #######################################################################################################################
+ size = handle::dasm_AND_S_b_b_c(stream, pc, op, opcodes); break; // AND_S b,b,c
+ }
+ case 0x05:
+ {
+// #######################################################################################################################
+// IIII I S SSSS
+// OR_S b,b,c 0111 1bbb ccc0 0101
+// #######################################################################################################################
+ size = handle::dasm_OR_S_b_b_c(stream, pc, op, opcodes); break; // OR_S b,b,c
+ }
+ case 0x06:
+ {
+// #######################################################################################################################
+// IIII I S SSSS
+// BIC_S b,b,c 0111 1bbb ccc0 0110
+// #######################################################################################################################
+ size = handle::dasm_BIC_S_b_b_c(stream, pc, op, opcodes); break; // BIC_S b,b,c
+ }
+ case 0x07:
+ {
+// #######################################################################################################################
+// IIII I S SSSS
+// XOR_S b,b,c 0111 1bbb ccc0 0111
+// #######################################################################################################################
+ size = handle::dasm_XOR_S_b_b_c(stream, pc, op, opcodes); break; // XOR_S b,b,c
+ }
+ case 0x0b:
+ {
+// #######################################################################################################################
+// IIII I S SSSS
+// TST_S b,c 0111 1bbb ccc0 1011
+// #######################################################################################################################
+ size = handle::dasm_TST_S_b_c(stream, pc, op, opcodes); break; // TST_S b,c
+ }
+ case 0x0c:
+ {
+// #######################################################################################################################
+// IIII I S SSSS
+// MUL64_S <0,>b,c 0111 1bbb ccc0 1100
+// #######################################################################################################################
+ size = handle::dasm_MUL64_S_0_b_c(stream, pc, op, opcodes); break; // MUL64_S <0,>b,c
+ }
+ case 0x0d:
+ {
+
+// #######################################################################################################################
+// IIII I S SSSS
+// SEXB_S b,c 0111 1bbb ccc0 1101
+// #######################################################################################################################
+ size = handle::dasm_SEXB_S_b_c(stream, pc, op, opcodes); break; // SEXB_S b,c
+ }
+ case 0x0e:
+ {
+// #######################################################################################################################
+// IIII I S SSSS
+// SEXW_S b,c 0111 1bbb ccc0 1110
+// #######################################################################################################################
+ size = handle::dasm_SEXW_S_b_c(stream, pc, op, opcodes); break; // SEXW_S b,c
+ }
+ case 0x0f:
+ {
+// #######################################################################################################################
+// IIII I S SSSS
+// EXTB_S b,c 0111 1bbb ccc0 1111
+// #######################################################################################################################
+ size = handle::dasm_EXTB_S_b_c(stream, pc, op, opcodes); break; // EXTB_S b,c
+ }
+ case 0x10:
+ {
+// #######################################################################################################################
+// IIII I S SSSS
+// EXTW_S b,c 0111 1bbb ccc1 0000
+// #######################################################################################################################
+ size = handle::dasm_EXTW_S_b_c(stream, pc, op, opcodes); break; // EXTW_S b,c
+ }
+ case 0x11:
+ {
+// #######################################################################################################################
+// IIII I S SSSS
+// ABS_S b,c 0111 1bbb ccc1 0001
+// #######################################################################################################################
+ size = handle::dasm_ABS_S_b_c(stream, pc, op, opcodes); break; // ABS_S b,c
+ }
+ case 0x12:
+ {
+// #######################################################################################################################
+// IIII I S SSSS
+// NOT_S b,c 0111 1bbb ccc1 0010
+// #######################################################################################################################
+ size = handle::dasm_NOT_S_b_c(stream, pc, op, opcodes); break; // NOT_S b,c
+ }
+ case 0x13:
+ {
+// #######################################################################################################################
+// IIII I S SSSS
+// NEG_S b,c 0111 1bbb ccc1 0011
+// #######################################################################################################################
+ size = handle::dasm_NEG_S_b_c(stream, pc, op, opcodes); break; // NEG_S b,c
+ }
+ case 0x14:
+ {
+// #######################################################################################################################
+// IIII I S SSSS
+// ADD1_S b,b,c 0111 1bbb ccc1 0100
+// #######################################################################################################################
+ size = handle::dasm_ADD1_S_b_b_c(stream, pc, op, opcodes); break; // ADD1_S b,b,c
+ }
+ case 0x15:
+ {
+// #######################################################################################################################
+// IIII I S SSSS
+// ADD2_S b,b,c 0111 1bbb ccc1 0101
+// #######################################################################################################################
+ size = handle::dasm_ADD2_S_b_b_c(stream, pc, op, opcodes); break; // ADD2_S b,b,c
+ }
+ case 0x16:
+ {
+// #######################################################################################################################
+// IIII I S SSSS
+// ADD3_S b,b,c 0111 1bbb ccc1 0110
+// #######################################################################################################################
+ size = handle::dasm_ADD3_S_b_b_c(stream, pc, op, opcodes); break; // ADD3_S b,b,c
+ }
+ case 0x18:
+ {
+// #######################################################################################################################
+// IIII I S SSSS
+// ASL_S b,b,c 0111 1bbb ccc1 1000
+// #######################################################################################################################
+ size = handle::dasm_ASL_S_b_b_c_multiple(stream, pc, op, opcodes); break; // ASL_S b,b,c (multiple)
+ }
+ case 0x19:
+ {
+// #######################################################################################################################
+// IIII I S SSSS
+// LSR_S b,b,c 0111 1bbb ccc1 1001
+// #######################################################################################################################
+ size = handle::dasm_LSR_S_b_b_c_multiple(stream, pc, op, opcodes); break; // LSR_S b,b,c (multiple)
+ }
+ case 0x1a:
+ {
+// #######################################################################################################################
+// IIII I S SSSS
+// ASR_S b,b,c 0111 1bbb ccc1 1010
+// #######################################################################################################################
+ size = handle::dasm_ASR_S_b_b_c_multiple(stream, pc, op, opcodes); break; // ASR_S b,b,c (multiple)
+ }
+ case 0x1b:
+ {
+// #######################################################################################################################
+// IIII I S SSSS
+// ASL_S b,c 0111 1bbb ccc1 1011
+// #######################################################################################################################
+ size = handle::dasm_ASL_S_b_c_single(stream, pc, op, opcodes); break; // ASL_S b,c (single)
+ }
+ case 0x1c:
+ {
+// #######################################################################################################################
+// IIII I S SSSS
+// ASR_S b,c 0111 1bbb ccc1 1100
+// #######################################################################################################################
+ size = handle::dasm_ASR_S_b_c_single(stream, pc, op, opcodes); break; // ASR_S b,c (single)
+ }
+ case 0x1d:
+ {
+// #######################################################################################################################
+// IIII I S SSSS
+// LSR_S b,c 0111 1bbb ccc1 1101
+// #######################################################################################################################
+ size = handle::dasm_LSR_S_b_c_single(stream, pc, op, opcodes); break; // LSR_S b,c (single)
+ }
+ case 0x1e:
+ {
+// #######################################################################################################################
+// IIII I S SSSS
+// TRAP_S u6 0111 1uuu uuu1 1110
+// #######################################################################################################################
+ size = handle::dasm_TRAP_S_u6(stream, pc, op, opcodes); break; // TRAP_S u6 (not a5?)
+ }
+ case 0x1f:
+ {
+ uint8_t subinstr2 = (op & 0x07e0) >> 5;
+ if (subinstr2 == 0x3f)
+ {
+// #######################################################################################################################
+// IIII Isss sssS SSSS
+// BRK_S 0111 1111 1111 1111
+// #######################################################################################################################
+ size = handle::dasm_BRK_S(stream, pc, op, opcodes); break; // BRK_S ( 0x7fff only? ) // BRK_S ( 0x7fff only? )
+ }
+ else
+ {
+ size = handle::dasm_illegal(stream, pc, instruction, subinstr, subinstr2, op, opcodes); break;
+ }
+ }
+ default: // 0x01, 0x03, 0x08, 0x09, 0x0a, 0x17
+ {
+ size = handle::dasm_illegal(stream, pc, instruction, subinstr, op, opcodes); break;
+ }
+ }
+ break;
+ }
+ case 0x10:
+ {
+// #######################################################################################################################
+// IIII I
+// LD_S c,[b,u7] 1000 0bbb cccu uuuu
+// #######################################################################################################################
+ size = handle::dasm_LD_S_c_b_u7(stream, pc, op, opcodes); break; // LD_S c,[b,u7]
+ }
+ case 0x11:
+ {
+// #######################################################################################################################
+// IIII I
+// LDB_S c,[b,u5] 1000 1bbb cccu uuuu
+// #######################################################################################################################
+ size = handle::dasm_LDB_S_c_b_u5(stream, pc, op, opcodes); break; // LDB_S c,[b,u5]
+ }
+ case 0x12:
+ {
+// #######################################################################################################################
+// IIII I
+// LDW_S c,[b,u6] 1001 0bbb cccu uuuu
+// #######################################################################################################################
+ size = handle::dasm_LDW_S_c_b_u6(stream, pc, op, opcodes); break; // LDW_S c,[b,u6]
+ }
+ case 0x13:
+ {
+// #######################################################################################################################
+// IIII I
+// LDW_S.X c,[b,u6] 1001 1bbb cccu uuuu
+// #######################################################################################################################
+ size = handle::dasm_LDW_S_X_c_b_u6(stream, pc, op, opcodes); break; // LDW_S.X c,[b,u6]
+ }
+ case 0x14:
+ {
+// #######################################################################################################################
+// IIII I
+// ST_S c,[b,u7] 1010 0bbb cccu uuuu
+// #######################################################################################################################
+ size = handle::dasm_ST_S_c_b_u7(stream, pc, op, opcodes); break; // ST_S c,[b,u7]
+ }
+ case 0x15:
+ {
+// #######################################################################################################################
+// IIII I
+// STB_S c,[b,u5] 1010 1bbb cccu uuuu
+// #######################################################################################################################
+ size = handle::dasm_STB_S_c_b_u5(stream, pc, op, opcodes); break; // STB_S
+ }
+ case 0x16:
+ {
+// #######################################################################################################################
+// IIII I
+// STW_S c,[b,u6] 1011 0bbb cccu uuuu
+// #######################################################################################################################
+ size = handle::dasm_STW_S_c_b_u6(stream, pc, op, opcodes); break; // STW_S
+ }
+ case 0x17: // Shift/Sub/Bit
+ {
+ uint8_t subinstr = (op & 0x00e0) >> 5;
+ switch (subinstr)
+ {
+ default: break; // size = -1;
+ case 0x00:
+ {
+// #######################################################################################################################
+// IIII I SSS
+// ASL_S b,b,u5 1011 1bbb 000u uuuu
+// #######################################################################################################################
+ size = handle::dasm_ASL_S_b_b_u5(stream, pc, op, opcodes); break; // ASL_S b,b,u5
+ }
+ case 0x01:
+ {
+// #######################################################################################################################
+// IIII I SSS
+// LSR_S b,b,u5 1011 1bbb 001u uuuu
+// #######################################################################################################################
+ size = handle::dasm_LSR_S_b_b_u5(stream, pc, op, opcodes); break; // LSR_S b,b,u5
+ }
+ case 0x02:
+ {
+// #######################################################################################################################
+// IIII I SSS
+// ASR_S b,b,u5 1011 1bbb 010u uuuu
+// #######################################################################################################################
+ size = handle::dasm_ASR_S_b_b_u5(stream, pc, op, opcodes); break; // ASR_S b,b,u5
+ }
+ case 0x03:
+ {
+// #######################################################################################################################
+// IIII I SSS
+// SUB_S b,b,u5 1011 1bbb 011u uuuu
+// #######################################################################################################################
+ size = handle::dasm_SUB_S_b_b_u5(stream, pc, op, opcodes); break; // SUB_S b,b,u5
+ }
+ case 0x04:
+ {
+// #######################################################################################################################
+// IIII I SSS
+// BSET_S b,b,u5 1011 1bbb 100u uuuu
+// #######################################################################################################################
+ size = handle::dasm_BSET_S_b_b_u5(stream, pc, op, opcodes); break; // BSET_S b,b,u5
+ }
+ case 0x05:
+ {
+// #######################################################################################################################
+// IIII I SSS
+// BCLR_S b,b,u5 1011 1bbb 101u uuuu
+// #######################################################################################################################
+ size = handle::dasm_BCLR_S_b_b_u5(stream, pc, op, opcodes); break; // BCLR_S b,b,u5
+ }
+ case 0x06:
+ {
+// #######################################################################################################################
+// IIII I SSS
+// BMSK_S b,b,u5 1011 1bbb 110u uuuu
+// #######################################################################################################################
+ size = handle::dasm_BMSK_S_b_b_u5(stream, pc, op, opcodes); break; // BMSK_S b,b,u5
+ }
+ case 0x07:
+ {
+// #######################################################################################################################
+// IIII I SSS
+// BTST_S b,u5 1011 1bbb 111u uuuu
+// #######################################################################################################################
+ size = handle::dasm_BTST_S_b_u5(stream, pc, op, opcodes); break; // BTST_S b,u5
+ }
+ }
+ break;
+ }
+ case 0x18: // Stack Instr
+ {
+ uint8_t subinstr = (op & 0x00e0) >> 5;
+ switch (subinstr)
+ {
+ default: break; // size = -1;
+ case 0x00:
+ {
+// #######################################################################################################################
+// IIII I SSS
+// LD_S b,[sp,u7] 1100 0bbb 000u uuuu
+// #######################################################################################################################
+ size = handle::dasm_LD_S_b_sp_u7(stream, pc, op, opcodes); break; // LD_S b,[sp,u7]
+ }
+ case 0x01:
+ {
+// #######################################################################################################################
+// IIII I SSS
+// LDB_S b,[sp,u7] 1100 0bbb 001u uuuu
+// #######################################################################################################################
+ size = handle::dasm_LDB_S_b_sp_u7(stream, pc, op, opcodes); break; // LDB_S b,[sp,u7]
+ }
+ case 0x02:
+ {
+// #######################################################################################################################
+// IIII I SSS
+// ST_S b,[sp,u7] 1100 0bbb 010u uuuu
+// #######################################################################################################################
+ size = handle::dasm_ST_S_b_sp_u7(stream, pc, op, opcodes); break; // ST_S b,[sp,u7]
+ }
+ case 0x03:
+ {
+// #######################################################################################################################
+// IIII I SSS
+// STB_S b,[sp,u7] 1100 0bbb 011u uuuu
+// #######################################################################################################################
+ size = handle::dasm_STB_S_b_sp_u7(stream, pc, op, opcodes); break; // STB_S b,[sp,u7]
+ }
+ case 0x04:
+ {
+// #######################################################################################################################
+// IIII I SSS
+// ADD_S b,sp,u7 1100 0bbb 100u uuuu
+// #######################################################################################################################
+ size = handle::dasm_ADD_S_b_sp_u7(stream, pc, op, opcodes); break; // ADD_S b,sp,u7
+ }
+
+ case 0x05: // subtable 18_05
+ {
+ uint8_t subinstr2 = (op & 0x0700) >> 8;
+ switch (subinstr2)
+ {
+ case 0x00:
+ {
+// #######################################################################################################################
+// IIII Isss SSS
+// ADD_S sp,sp,u7 1100 0000 101u uuuu
+// #######################################################################################################################
+ size = handle::dasm_ADD_S_sp_sp_u7(stream, pc, op, opcodes); break; // ADD_S sp,sp,u7
+ }
+ case 0x01:
+ {
+// #######################################################################################################################
+// IIII Isss SSS
+// SUB_S sp,sp,u7 1100 0001 101u uuuu
+// #######################################################################################################################
+ size = handle::dasm_SUB_S_sp_sp_u7(stream, pc, op, opcodes); break; // SUB_S sp,sp,u7
+ }
+ default: size = handle::dasm_illegal(stream, pc, instruction, subinstr, subinstr2, op, opcodes); break;
+ }
+ break;
+ }
+ case 0x06: // subtable 18_06
+ {
+ uint8_t subinstr2 = op & 0x001f;
+ switch (subinstr2)
+ {
+ case 0x01:
+ {
+// #######################################################################################################################
+// IIII I SSSs ssss
+// POP_S b 1100 0bbb 1100 0001
+// #######################################################################################################################
+ size = handle::dasm_POP_S_b(stream, pc, op, opcodes); break; // POP_S b
+ }
+ case 0x11:
+ {
+// #######################################################################################################################
+// IIII I SSSs ssss
+// POP_S blink 1100 0RRR 1101 0001
+// #######################################################################################################################
+ size = handle::dasm_POP_S_blink(stream, pc, op, opcodes); break; // POP_S blink
+ }
+ default: size = handle::dasm_illegal(stream, pc, instruction, subinstr, subinstr2, op, opcodes); break;
+ }
+ break;
+ }
+ case 0x07: // subtable 18_07
+ {
+ uint8_t subinstr2 = op & 0x001f;
+
+ switch (subinstr2)
+ {
+ case 0x01:
+ {
+// #######################################################################################################################
+// IIII I SSSs ssss
+// PUSH_S b 1100 0bbb 1110 0001
+// #######################################################################################################################
+ size = handle::dasm_PUSH_S_b(stream, pc, op, opcodes); break; // PUSH_S b
+ }
+ case 0x11:
+ {
+// #######################################################################################################################
+// IIII I SSSs ssss
+// PUSH_S blink 1100 0RRR 1111 0001
+// #######################################################################################################################
+ size = handle::dasm_PUSH_S_blink(stream, pc, op, opcodes); break; // PUSH_S blink
+ }
+ default: size = handle::dasm_illegal(stream, pc, instruction, subinstr, subinstr2, op, opcodes); break;
+ }
+ }
+ }
+ break;
+ }
+ case 0x19: // GP Instr
+ {
+ uint8_t subinstr = (op & 0x0600) >> 9;
+
+ switch (subinstr)
+ {
+ default: break; // size = -1;
+ case 0x00:
+ {
+// #######################################################################################################################
+// IIII ISS
+// LD_S r0,[gp,s11] 1100 100s ssss ssss
+// #######################################################################################################################
+ size = handle::dasm_LD_S_r0_gp_s11(stream, pc, op, opcodes); break; // LD_S r0,[gp,s11]
+ }
+ case 0x01:
+ {
+// #######################################################################################################################
+// IIII ISS
+// LDB_S r0,[gp,s9] 1100 101s ssss ssss
+// #######################################################################################################################
+ size = handle::dasm_LDB_S_r0_gp_s9(stream, pc, op, opcodes); break; // LDB_S r0,[gp,s9]
+ }
+ case 0x02:
+ {
+// #######################################################################################################################
+// IIII ISS
+// LDW_S r0,[gp,s10] 1100 110s ssss ssss
+// #######################################################################################################################
+ size = handle::dasm_LDW_S_r0_gp_s10(stream, pc, op, opcodes); break; // LDW_S r0,[gp,s10]
+ }
+ case 0x03:
+ {
+// #######################################################################################################################
+// IIII ISS
+// ADD_S r0,gp,s11 1100 111s ssss ssss
+// #######################################################################################################################
+ size = handle::dasm_ADD_S_r0_gp_s11(stream, pc, op, opcodes); break; // ADD_S r0,gp,s11
+ }
+ }
+ break;
+ }
+ case 0x1a:
+ {
+// #######################################################################################################################
+// IIII I
+// LD_S b,[pcl,u10] 1101 0bbb uuuu uuuu
+// #######################################################################################################################
+ size = handle::dasm_LD_S_b_pcl_u10(stream, pc, op, opcodes); break; // LD_S b,[pcl,u10]
+ }
+
+ case 0x1b:
+ {
+// #######################################################################################################################
+// IIII I
+// MOV_S b,u8 1101 1bbb uuuu uuuu
+// #######################################################################################################################
+ size = handle::dasm_MOV_S_b_u8(stream, pc, op, opcodes); break; // MOV_S b, u8
+ }
+
+ case 0x1c: // ADD_S/CMP_S
+ {
+ uint8_t subinstr = (op & 0x0080) >> 7;
+ switch (subinstr)
+ {
+ default: break; // size = -1;
+ case 0x00:
+ {
+// #######################################################################################################################
+// IIII I s
+// ADD_S b,b,u7 1110 0bbb 0uuu uuuu
+// #######################################################################################################################
+ size = handle::dasm_ADD_S_b_b_u7(stream, pc, op, opcodes); break; // ADD_S b, b, u7
+ }
+ case 0x01:
+ {
+// #######################################################################################################################
+// IIII I s
+// CMP_S b,u7 1110 0bbb 1uuu uuuu
+// #######################################################################################################################
+ size = handle::dasm_CMP_S_b_u7(stream, pc, op, opcodes); break; // CMP_S b, u7
+ }
+ }
+ break;
+ }
+ case 0x1d: // BRcc_S
+ {
+ uint8_t subinstr = (op & 0x0080) >> 7;
+ switch (subinstr)
+ {
+ default: break; // size = -1;
+ case 0x00:
+ {
+// #######################################################################################################################
+// IIII I s
+// BREQ_S b,0,s8 1110 1bbb 0sss ssss
+// #######################################################################################################################
+ size = handle::dasm_BREQ_S_b_0_s8(stream, pc, op, opcodes); break; // BREQ_S b,0,s8
+ }
+ case 0x01:
+ {
+// #######################################################################################################################
+// IIII I s
+// BRNE_S b,0,s8 1110 1bbb 1sss ssss
+// #######################################################################################################################
+ size = handle::dasm_BRNE_S_b_0_s8(stream, pc, op, opcodes); break; // BRNE_S b,0,s8
+ }
+ }
+ break;
+ }
+ case 0x1e: // Bcc_S
+ {
+ uint8_t subinstr = (op & 0x0600) >> 9;
+ switch (subinstr)
+ {
+ default: break; // size = -1;
+ case 0x00:
+ {
+// #######################################################################################################################
+// IIII ISS
+// B_S s10 1111 000s ssss ssss
+// #######################################################################################################################
+ size = handle::dasm_B_S_s10(stream, pc, op, opcodes); break; // B_S s10
+ }
+ case 0x01:
+ {
+// #######################################################################################################################
+// IIII ISS
+// BEQ_S s10 1111 001s ssss ssss
+// #######################################################################################################################
+ size = handle::dasm_BEQ_S_s10(stream, pc, op, opcodes); break; // BEQ_S s10
+ }
+ case 0x02:
+ {
+// #######################################################################################################################
+// IIII ISS
+// BNE_S s10 1111 010s ssss ssss
+// #######################################################################################################################
+ size = handle::dasm_BNE_S_s10(stream, pc, op, opcodes); break; // BNE_S s10
+ }
+ case 0x03: // Bcc_S
+ {
+ uint8_t subinstr2 = (op & 0x01c0) >> 6;
+ switch (subinstr2)
+ {
+ default: break; // size = -1;
+ case 0x00:
+ {
+// #######################################################################################################################
+// IIII ISSs ss
+// BGT_S s7 1111 0110 00ss ssss
+// #######################################################################################################################
+ size = handle::dasm_BGT_S_s7(stream, pc, op, opcodes); break; // BGT_S s7
+ }
+ case 0x01:
+ {
+// #######################################################################################################################
+// IIII ISSs ss
+// BGE_S s7 1111 0110 01ss ssss
+// #######################################################################################################################
+ size = handle::dasm_BGE_S_s7(stream, pc, op, opcodes); break; // BGE_S s7
+ }
+ case 0x02:
+ {
+// #######################################################################################################################
+// IIII ISSs ss
+// BLT_S s7 1111 0110 10ss ssss
+// #######################################################################################################################
+ size = handle::dasm_BLT_S_s7(stream, pc, op, opcodes); break; // BLT_S s7
+ }
+ case 0x03:
+ {
+// #######################################################################################################################
+// IIII ISSs ss
+// BLE_S s7 1111 0110 11ss ssss
+// #######################################################################################################################
+ size = handle::dasm_BLE_S_s7(stream, pc, op, opcodes); break; // BLE_S s7
+ }
+ case 0x04:
+ {
+// #######################################################################################################################
+// IIII ISSs ss
+// BHI_S s7 1111 0111 00ss ssss
+// #######################################################################################################################
+ size = handle::dasm_BHI_S_s7(stream, pc, op, opcodes); break; // BHI_S s7
+ }
+ case 0x05:
+ {
+// #######################################################################################################################
+// IIII ISSs ss
+// BHS_S s7 1111 0111 01ss ssss
+// #######################################################################################################################
+ size = handle::dasm_BHS_S_s7(stream, pc, op, opcodes); break; // BHS_S s7
+ }
+ case 0x06:
+ {
+// #######################################################################################################################
+// IIII ISSs ss
+// BLO_S s7 1111 0111 10ss ssss
+// #######################################################################################################################
+ size = handle::dasm_BLO_S_s7(stream, pc, op, opcodes); break; // BLO_S s7
+ }
+
+ case 0x07:
+ {
+// #######################################################################################################################
+// IIII ISSs ss
+// BLS_S s7 1111 0111 11ss ssss
+// #######################################################################################################################
+ size = handle::dasm_BLS_S_s7(stream, pc, op, opcodes); break; // BLS_S s7
+ }
+ }
+ }
+ }
+ break;
+ }
+ case 0x1f:
+ {
+// #######################################################################################################################
+// IIII I
+// BL_S s13 1111 1sss ssss ssss
+// #######################################################################################################################
+ size = handle::dasm_BL_S_s13(stream, pc, op, opcodes); break; // BL_S s13
+ }
}
}
return size | SUPPORTED;
}
+