summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/v60/v60d.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/v60/v60d.cpp')
-rw-r--r--src/devices/cpu/v60/v60d.cpp1445
1 files changed, 710 insertions, 735 deletions
diff --git a/src/devices/cpu/v60/v60d.cpp b/src/devices/cpu/v60/v60d.cpp
index 70fcdab8296..2a14f65436f 100644
--- a/src/devices/cpu/v60/v60d.cpp
+++ b/src/devices/cpu/v60/v60d.cpp
@@ -2,11 +2,10 @@
// copyright-holders:Farfetch'd, R. Belmont
#include "emu.h"
-#include "debugger.h"
-#include "v60.h"
+#include "v60d.h"
// Register names
-static const char *const v60_reg_names[69] = {
+const char *const v60_disassembler::v60_reg_names[69] = {
"R0", "R1", "R2", "R3",
"R4", "R5", "R6", "R7",
"R8", "R9", "R10", "R11",
@@ -26,39 +25,19 @@ static const char *const v60_reg_names[69] = {
"ADTMR1","Reserved","Reserved","Reserved"
};
-static const uint8_t *rombase;
-static offs_t pcbase;
-
-#define readop(a) rombase[(a) - pcbase]
-
-static signed char read8(unsigned pc)
-{
- return readop(pc);
-}
-
-static signed short read16(unsigned pc)
-{
- return readop(pc) | (readop(pc+1) << 8);
-}
-
-static signed int read32(unsigned pc)
-{
- return readop(pc) | (readop(pc+1) << 8)| (readop(pc+2) << 16)| (readop(pc+3) << 24);
-}
-
-static void out_AM_Register(int reg, std::ostream &stream)
+void v60_disassembler::out_AM_Register(int reg, std::ostream &stream)
{
stream << v60_reg_names[reg];
}
-static void out_AM_RegisterIndirect(int reg, int opsize, std::ostream &stream)
+void v60_disassembler::out_AM_RegisterIndirect(int reg, int opsize, std::ostream &stream)
{
if(opsize & 0x80)
stream << '@';
util::stream_format(stream, "[%s]", v60_reg_names[reg]);
}
-static void out_AM_RegisterIndirectIndexed(int rn, int rx, int opsize, std::ostream &stream)
+void v60_disassembler::out_AM_RegisterIndirectIndexed(int rn, int rx, int opsize, std::ostream &stream)
{
if(opsize & 0x80)
util::stream_format(stream, "%s@[%s]", v60_reg_names[rx], v60_reg_names[rn]);
@@ -67,21 +46,21 @@ static void out_AM_RegisterIndirectIndexed(int rn, int rx, int opsize, std::ostr
}
-static void out_AM_Autoincrement(int reg, int opsize, std::ostream &stream)
+void v60_disassembler::out_AM_Autoincrement(int reg, int opsize, std::ostream &stream)
{
if(opsize & 0x80)
stream << '@';
util::stream_format(stream, "[%s+]", v60_reg_names[reg]);
}
-static void out_AM_Autodecrement(int reg, int opsize, std::ostream &stream)
+void v60_disassembler::out_AM_Autodecrement(int reg, int opsize, std::ostream &stream)
{
if(opsize & 0x80)
stream << '@';
util::stream_format(stream, "[-%s]", v60_reg_names[reg]);
}
-static void out_AM_Displacement(int reg, int disp, int opsize, std::ostream &stream)
+void v60_disassembler::out_AM_Displacement(int reg, int disp, int opsize, std::ostream &stream)
{
util::stream_format(stream, "%s%X%s[%s]",
disp >= 0 ? "" : "-", disp >= 0 ? disp : -disp,
@@ -89,7 +68,7 @@ static void out_AM_Displacement(int reg, int disp, int opsize, std::ostream &str
v60_reg_names[reg]);
}
-static void out_AM_DisplacementIndexed(int rn, int rx, int disp, int opsize, std::ostream &stream)
+void v60_disassembler::out_AM_DisplacementIndexed(int rn, int rx, int disp, int opsize, std::ostream &stream)
{
if(opsize & 0x80)
util::stream_format(stream, "%s@%s%X[%s]", v60_reg_names[rx], disp >= 0 ? "" : "-", disp >= 0 ? disp : -disp,v60_reg_names[rn]);
@@ -97,12 +76,12 @@ static void out_AM_DisplacementIndexed(int rn, int rx, int disp, int opsize, std
util::stream_format(stream, "%s%X[%s](%s)", disp >= 0 ? "" : "-", disp >= 0 ? disp : -disp,v60_reg_names[rn], v60_reg_names[rx]);
}
-static void out_AM_PCDisplacement(unsigned pc, int disp, int opsize, std::ostream &stream)
+void v60_disassembler::out_AM_PCDisplacement(offs_t pc, int disp, int opsize, std::ostream &stream)
{
util::stream_format(stream, "%X%s[PC]", pc+disp, opsize & 0x80 ? "@" : "");
}
-static void out_AM_PCDisplacementIndexed(unsigned pc, int disp, int rx, int opsize, std::ostream &stream)
+void v60_disassembler::out_AM_PCDisplacementIndexed(offs_t pc, int disp, int rx, int opsize, std::ostream &stream)
{
if(opsize & 0x80)
util::stream_format(stream, "%s@%X[PC]", v60_reg_names[rx], pc+disp);
@@ -110,7 +89,7 @@ static void out_AM_PCDisplacementIndexed(unsigned pc, int disp, int rx, int opsi
util::stream_format(stream, "%X[PC](%s)", pc+disp, v60_reg_names[rx]);
}
-static void out_AM_DisplacementIndirect(int reg, int disp, int opsize, std::ostream &stream)
+void v60_disassembler::out_AM_DisplacementIndirect(int reg, int disp, int opsize, std::ostream &stream)
{
util::stream_format(stream, "%s[%s%X[%s]]",
opsize & 0x80 ? "@" : "",
@@ -118,7 +97,7 @@ static void out_AM_DisplacementIndirect(int reg, int disp, int opsize, std::ostr
v60_reg_names[reg]);
}
-static void out_AM_DisplacementIndirectIndexed(int rn, int rx, int disp, int opsize, std::ostream &stream)
+void v60_disassembler::out_AM_DisplacementIndirectIndexed(int rn, int rx, int disp, int opsize, std::ostream &stream)
{
if(opsize & 0x80)
util::stream_format(stream, "%s@[%s%X[%s]]", v60_reg_names[rx], disp >= 0 ? "" : "-", disp >= 0 ? disp : -disp,v60_reg_names[rn]);
@@ -126,12 +105,12 @@ static void out_AM_DisplacementIndirectIndexed(int rn, int rx, int disp, int ops
util::stream_format(stream, "[%s%X[%s]](%s)", disp >= 0 ? "" : "-", disp >= 0 ? disp : -disp,v60_reg_names[rn], v60_reg_names[rx]);
}
-static void out_AM_PCDisplacementIndirect(unsigned pc, int disp, int opsize, std::ostream &stream)
+void v60_disassembler::out_AM_PCDisplacementIndirect(offs_t pc, int disp, int opsize, std::ostream &stream)
{
util::stream_format(stream, "%s[%X[PC]]", opsize & 0x80 ? "@" : "", pc+disp);
}
-static void out_AM_PCDisplacementIndirectIndexed(unsigned pc, int disp, int rx, int opsize, std::ostream &stream)
+void v60_disassembler::out_AM_PCDisplacementIndirectIndexed(offs_t pc, int disp, int rx, int opsize, std::ostream &stream)
{
if(opsize & 0x80)
util::stream_format(stream, "%s@[%X[PC]]", v60_reg_names[rx], pc+disp);
@@ -139,7 +118,7 @@ static void out_AM_PCDisplacementIndirectIndexed(unsigned pc, int disp, int rx,
util::stream_format(stream, "[%X[PC]](%s)", pc+disp, v60_reg_names[rx]);
}
-static void out_AM_DoubleDisplacement(int reg, int disp2, int disp1, int opsize, std::ostream &stream)
+void v60_disassembler::out_AM_DoubleDisplacement(int reg, int disp2, int disp1, int opsize, std::ostream &stream)
{
util::stream_format(stream, "%s%X%s[%s%X[%s]]",
disp1 >= 0 ? "" : "-", disp1 >= 0 ? disp1 : -disp1,
@@ -148,7 +127,7 @@ static void out_AM_DoubleDisplacement(int reg, int disp2, int disp1, int opsize,
v60_reg_names[reg]);
}
-static void out_AM_PCDoubleDisplacement(unsigned pc, int disp2, int disp1, int opsize, std::ostream &stream)
+void v60_disassembler::out_AM_PCDoubleDisplacement(offs_t pc, int disp2, int disp1, int opsize, std::ostream &stream)
{
util::stream_format(stream, "%s%X%s[%X[PC]]",
disp1 >= 0 ? "" : "-", disp1 >= 0 ? disp1 : -disp1,
@@ -156,14 +135,14 @@ static void out_AM_PCDoubleDisplacement(unsigned pc, int disp2, int disp1, int o
disp2 + pc);
}
-static void out_AM_DirectAddress(unsigned addr, int opsize, std::ostream &stream)
+void v60_disassembler::out_AM_DirectAddress(unsigned addr, int opsize, std::ostream &stream)
{
if(opsize & 0x80)
stream << '@';
util::stream_format(stream, "%X", addr);
}
-static void out_AM_DirectAddressIndexed(unsigned addr, int rx, int opsize, std::ostream &stream)
+void v60_disassembler::out_AM_DirectAddressIndexed(unsigned addr, int rx, int opsize, std::ostream &stream)
{
if(opsize & 0x80)
util::stream_format(stream, "%s@%X", v60_reg_names[rx], addr);
@@ -171,14 +150,14 @@ static void out_AM_DirectAddressIndexed(unsigned addr, int rx, int opsize, std::
util::stream_format(stream, "%X(%s)", addr, v60_reg_names[rx]);
}
-static void out_AM_DirectAddressDeferred(unsigned addr, int opsize, std::ostream &stream)
+void v60_disassembler::out_AM_DirectAddressDeferred(unsigned addr, int opsize, std::ostream &stream)
{
if(opsize & 0x80)
stream << '@';
util::stream_format(stream, "[%X]", addr);
}
-static void out_AM_DirectAddressDeferredIndexed(unsigned addr, int rx, int opsize, std::ostream &stream)
+void v60_disassembler::out_AM_DirectAddressDeferredIndexed(unsigned addr, int rx, int opsize, std::ostream &stream)
{
if(opsize & 0x80)
util::stream_format(stream, "%s@[%X]", v60_reg_names[rx], addr);
@@ -186,7 +165,7 @@ static void out_AM_DirectAddressDeferredIndexed(unsigned addr, int rx, int opsiz
util::stream_format(stream, "[%X](%s)", addr, v60_reg_names[rx]);
}
-static void out_AM_Immediate(unsigned value, int opsize, std::ostream &stream)
+void v60_disassembler::out_AM_Immediate(unsigned value, int opsize, std::ostream &stream)
{
if(opsize == 0)
value &= 0xff;
@@ -196,21 +175,21 @@ static void out_AM_Immediate(unsigned value, int opsize, std::ostream &stream)
util::stream_format(stream, "#%X", value);
}
-static int decode_AM(unsigned ipc, unsigned pc, int m, int opsize, std::ostream &stream)
+u32 v60_disassembler::decode_AM(unsigned ipc, offs_t pc, int m, int opsize, const data_buffer &opcodes, std::ostream &stream)
{
- unsigned char mod = readop(pc);
+ unsigned char mod = opcodes.r8(pc);
if(m) {
switch(mod>>5) {
case 0: // Double displacement (8 bit)
- out_AM_DoubleDisplacement(mod&0x1F, read8(pc+1), read8(pc+2), opsize, stream);
+ out_AM_DoubleDisplacement(mod&0x1F, opcodes.r8(pc+1), opcodes.r8(pc+2), opsize, stream);
return 3;
case 1: // Double displacement (16 bit)
- out_AM_DoubleDisplacement(mod&0x1F, read16(pc+1), read16(pc+3), opsize, stream);
+ out_AM_DoubleDisplacement(mod&0x1F, opcodes.r16(pc+1), opcodes.r16(pc+3), opsize, stream);
return 5;
case 2: // Double displacement (32 bit)
- out_AM_DoubleDisplacement(mod&0x1F, read32(pc+1), read32(pc+5), opsize, stream);
+ out_AM_DoubleDisplacement(mod&0x1F, opcodes.r32(pc+1), opcodes.r32(pc+5), opsize, stream);
return 9;
case 3: // Register
@@ -226,69 +205,69 @@ static int decode_AM(unsigned ipc, unsigned pc, int m, int opsize, std::ostream
return 1;
case 6:
- switch (readop(pc+1)>>5)
+ switch (opcodes.r8(pc+1)>>5)
{
case 0: // Displacement indexed (8 bit)
- out_AM_DisplacementIndexed(readop(pc+1)&0x1F, mod&0x1F, read8(pc+2), opsize, stream);
+ out_AM_DisplacementIndexed(opcodes.r8(pc+1)&0x1F, mod&0x1F, opcodes.r8(pc+2), opsize, stream);
return 3;
case 1: // Displacement indexed (16 bit)
- out_AM_DisplacementIndexed(readop(pc+1)&0x1F, mod&0x1F, read16(pc+2), opsize, stream);
+ out_AM_DisplacementIndexed(opcodes.r8(pc+1)&0x1F, mod&0x1F, opcodes.r16(pc+2), opsize, stream);
return 4;
case 2: // Displacement indexed (32 bit)
- out_AM_DisplacementIndexed(readop(pc+1)&0x1F, mod&0x1F, read32(pc+2), opsize, stream);
+ out_AM_DisplacementIndexed(opcodes.r8(pc+1)&0x1F, mod&0x1F, opcodes.r32(pc+2), opsize, stream);
return 6;
case 3: // Register indirect indexed
- out_AM_RegisterIndirectIndexed(readop(pc+1)&0x1F, mod&0x1F, opsize, stream);
+ out_AM_RegisterIndirectIndexed(opcodes.r8(pc+1)&0x1F, mod&0x1F, opsize, stream);
return 2;
case 4: // Displacement indirect indexed (8 bit)
- out_AM_DisplacementIndirectIndexed(readop(pc+1)&0x1F, mod&0x1F, read8(pc+2), opsize, stream);
+ out_AM_DisplacementIndirectIndexed(opcodes.r8(pc+1)&0x1F, mod&0x1F, opcodes.r8(pc+2), opsize, stream);
return 3;
case 5: // Displacement indirect indexed (16 bit)
- out_AM_DisplacementIndirectIndexed(readop(pc+1)&0x1F, mod&0x1F, read16(pc+2), opsize, stream);
+ out_AM_DisplacementIndirectIndexed(opcodes.r8(pc+1)&0x1F, mod&0x1F, opcodes.r16(pc+2), opsize, stream);
return 4;
case 6: // Displacement indirect indexed (32 bit)
- out_AM_DisplacementIndirectIndexed(readop(pc+1)&0x1F, mod&0x1F, read32(pc+2), opsize, stream);
+ out_AM_DisplacementIndirectIndexed(opcodes.r8(pc+1)&0x1F, mod&0x1F, opcodes.r32(pc+2), opsize, stream);
return 6;
case 7:
- switch (readop(pc+1)&0x1F)
+ switch (opcodes.r8(pc+1)&0x1F)
{
case 16: // PC Displacement Indexed (8 bit)
- out_AM_PCDisplacementIndexed(ipc, read8(pc+2), mod&0x1F, opsize, stream);
+ out_AM_PCDisplacementIndexed(ipc, opcodes.r8(pc+2), mod&0x1F, opsize, stream);
return 3;
case 17: // PC Displacement Indexed (16 bit)
- out_AM_PCDisplacementIndexed(ipc, read16(pc+2), mod&0x1F, opsize, stream);
+ out_AM_PCDisplacementIndexed(ipc, opcodes.r16(pc+2), mod&0x1F, opsize, stream);
return 4;
case 18: // PC Displacement Indexed (32 bit)
- out_AM_PCDisplacementIndexed(ipc, read32(pc+2), mod&0x1F, opsize, stream);
+ out_AM_PCDisplacementIndexed(ipc, opcodes.r32(pc+2), mod&0x1F, opsize, stream);
return 6;
case 19: // Direct Address Indexed
- out_AM_DirectAddressIndexed(read32(pc+2), mod&0x1F, opsize, stream);
+ out_AM_DirectAddressIndexed(opcodes.r32(pc+2), mod&0x1F, opsize, stream);
return 6;
case 24: // PC Displacement Indirect Indexed(8 bit)
- out_AM_PCDisplacementIndirectIndexed(ipc, read8(pc+2), mod&0x1F, opsize, stream);
+ out_AM_PCDisplacementIndirectIndexed(ipc, opcodes.r8(pc+2), mod&0x1F, opsize, stream);
return 3;
case 25: // PC Displacement Indirect Indexed (16 bit)
- out_AM_PCDisplacementIndirectIndexed(ipc, read16(pc+2), mod&0x1F, opsize, stream);
+ out_AM_PCDisplacementIndirectIndexed(ipc, opcodes.r16(pc+2), mod&0x1F, opsize, stream);
return 4;
case 26: // PC Displacement Indirect Indexed (32 bit)
- out_AM_PCDisplacementIndirectIndexed(ipc, read32(pc+2), mod&0x1F, opsize, stream);
+ out_AM_PCDisplacementIndirectIndexed(ipc, opcodes.r32(pc+2), mod&0x1F, opsize, stream);
return 6;
case 27: // Direct Address Deferred Indexed
- out_AM_DirectAddressDeferredIndexed(read32(pc+2), mod&0x1F, opsize, stream);
+ out_AM_DirectAddressDeferredIndexed(opcodes.r32(pc+2), mod&0x1F, opsize, stream);
return 6;
default:
@@ -308,15 +287,15 @@ static int decode_AM(unsigned ipc, unsigned pc, int m, int opsize, std::ostream
} else {
switch(mod>>5) {
case 0: // Displacement (8 bit)
- out_AM_Displacement(mod&0x1F, read8(pc+1), opsize, stream);
+ out_AM_Displacement(mod&0x1F, opcodes.r8(pc+1), opsize, stream);
return 2;
case 1: // Displacement (16 bit)
- out_AM_Displacement(mod&0x1F, read16(pc+1), opsize, stream);
+ out_AM_Displacement(mod&0x1F, opcodes.r16(pc+1), opsize, stream);
return 3;
case 2: // Displacement (32 bit)
- out_AM_Displacement(mod&0x1F, read32(pc+1), opsize, stream);
+ out_AM_Displacement(mod&0x1F, opcodes.r32(pc+1), opsize, stream);
return 5;
case 3: // Register indirect
@@ -324,15 +303,15 @@ static int decode_AM(unsigned ipc, unsigned pc, int m, int opsize, std::ostream
return 1;
case 4: // Displacement indirect (8 bit)
- out_AM_DisplacementIndirect(mod&0x1F, read8(pc+1), opsize, stream);
+ out_AM_DisplacementIndirect(mod&0x1F, opcodes.r8(pc+1), opsize, stream);
return 2;
case 5: // Displacement indirect (16 bit)
- out_AM_DisplacementIndirect(mod&0x1F, read16(pc+1), opsize, stream);
+ out_AM_DisplacementIndirect(mod&0x1F, opcodes.r16(pc+1), opsize, stream);
return 3;
case 6: // Displacement indirect (32 bit)
- out_AM_DisplacementIndirect(mod&0x1F, read32(pc+1), opsize, stream);
+ out_AM_DisplacementIndirect(mod&0x1F, opcodes.r32(pc+1), opsize, stream);
return 5;
case 7:
@@ -357,34 +336,34 @@ static int decode_AM(unsigned ipc, unsigned pc, int m, int opsize, std::ostream
return 1;
case 16: // PC Displacement (8 bit)
- out_AM_PCDisplacement(ipc, read8(pc+1), opsize, stream);
+ out_AM_PCDisplacement(ipc, opcodes.r8(pc+1), opsize, stream);
return 2;
case 17: // PC Displacement (16 bit)
- out_AM_PCDisplacement(ipc, read16(pc+1), opsize, stream);
+ out_AM_PCDisplacement(ipc, opcodes.r16(pc+1), opsize, stream);
return 3;
case 18: // PC Displacement (32 bit)
- out_AM_PCDisplacement(ipc, read32(pc+1), opsize, stream);
+ out_AM_PCDisplacement(ipc, opcodes.r32(pc+1), opsize, stream);
return 5;
case 19: // Direct Address
- out_AM_DirectAddress(read32(pc+1), opsize, stream);
+ out_AM_DirectAddress(opcodes.r32(pc+1), opsize, stream);
return 5;
case 20:
switch(opsize&0x7F) {
case 0: // Immediate (8 bit)
- out_AM_Immediate(read8(pc+1), opsize, stream);
+ out_AM_Immediate(opcodes.r8(pc+1), opsize, stream);
return 2;
case 1: // Immediate (16 bit)
- out_AM_Immediate(read16(pc+1), opsize, stream);
+ out_AM_Immediate(opcodes.r16(pc+1), opsize, stream);
return 3;
case 2: // Immediate (32 bit)
- out_AM_Immediate(read32(pc+1), opsize, stream);
+ out_AM_Immediate(opcodes.r32(pc+1), opsize, stream);
return 5;
default:
@@ -393,31 +372,31 @@ static int decode_AM(unsigned ipc, unsigned pc, int m, int opsize, std::ostream
}
case 24: // PC Displacement Indirect (8 bit)
- out_AM_PCDisplacementIndirect(ipc, read8(pc+1), opsize, stream);
+ out_AM_PCDisplacementIndirect(ipc, opcodes.r8(pc+1), opsize, stream);
return 2;
case 25: // PC Displacement Indirect (16 bit)
- out_AM_PCDisplacementIndirect(ipc, read16(pc+1), opsize, stream);
+ out_AM_PCDisplacementIndirect(ipc, opcodes.r16(pc+1), opsize, stream);
return 3;
case 26: // PC Displacement Indirect (32 bit)
- out_AM_PCDisplacementIndirect(ipc, read32(pc+1), opsize, stream);
+ out_AM_PCDisplacementIndirect(ipc, opcodes.r32(pc+1), opsize, stream);
return 5;
case 27: // Direct Address Deferred
- out_AM_DirectAddressDeferred(read32(pc+1), opsize, stream);
+ out_AM_DirectAddressDeferred(opcodes.r32(pc+1), opsize, stream);
return 5;
case 28: // PC Double Displacement (8 bit)
- out_AM_PCDoubleDisplacement(ipc, read8(pc+1), read8(pc+2), opsize, stream);
+ out_AM_PCDoubleDisplacement(ipc, opcodes.r8(pc+1), opcodes.r8(pc+2), opsize, stream);
return 3;
case 29: // PC Double Displacement (16 bit)
- out_AM_PCDoubleDisplacement(ipc, read16(pc+1), read16(pc+3), opsize, stream);
+ out_AM_PCDoubleDisplacement(ipc, opcodes.r16(pc+1), opcodes.r16(pc+3), opsize, stream);
return 5;
case 30: // PC Double Displacement (32 bit)
- out_AM_PCDoubleDisplacement(ipc, read32(pc+1), read32(pc+5), opsize, stream);
+ out_AM_PCDoubleDisplacement(ipc, opcodes.r32(pc+1), opcodes.r32(pc+5), opsize, stream);
return 9;
default:
@@ -433,92 +412,92 @@ static int decode_AM(unsigned ipc, unsigned pc, int m, int opsize, std::ostream
}
-static int decode_F1(const char *opnm, int opsize1, int opsize2, unsigned ipc, unsigned pc, std::ostream &stream)
+u32 v60_disassembler::decode_F1(const char *opnm, int opsize1, int opsize2, unsigned ipc, offs_t pc, const data_buffer &opcodes, std::ostream &stream)
{
- unsigned char code = readop(pc);
+ unsigned char code = opcodes.r8(pc);
util::stream_format(stream, "%-8s", opnm);
if(code & 0x20) {
- int ret = decode_AM(ipc, pc+1, code & 0x40, opsize1, stream) + 2;
+ int ret = decode_AM(ipc, pc+1, code & 0x40, opsize1, opcodes, stream) + 2;
stream << ", ";
out_AM_Register(code & 0x1f, stream);
return ret;
} else {
out_AM_Register(code & 0x1f, stream);
stream << ", ";
- return decode_AM(ipc, pc+1, code & 0x40, opsize1, stream) + 2;
+ return decode_AM(ipc, pc+1, code & 0x40, opsize1, opcodes, stream) + 2;
}
}
-static int decode_F2(const char *opnm, int opsize1, int opsize2, unsigned ipc, unsigned pc, std::ostream &stream)
+u32 v60_disassembler::decode_F2(const char *opnm, int opsize1, int opsize2, unsigned ipc, offs_t pc, const data_buffer &opcodes, std::ostream &stream)
{
int ret;
- unsigned char code = readop(pc);
+ unsigned char code = opcodes.r8(pc);
util::stream_format(stream, "%-8s", opnm);
- ret = decode_AM(ipc, pc+1, code & 0x40, opsize1, stream);
+ ret = decode_AM(ipc, pc+1, code & 0x40, opsize1, opcodes, stream);
stream << ", ";
- ret += decode_AM(ipc, pc+1+ret, code & 0x20, opsize2, stream);
+ ret += decode_AM(ipc, pc+1+ret, code & 0x20, opsize2, opcodes, stream);
return ret+2;
}
-static int decode_F1F2(const char *opnm, int opsize1, int opsize2, unsigned ipc, unsigned pc, std::ostream &stream)
+u32 v60_disassembler::decode_F1F2(const char *opnm, int opsize1, int opsize2, unsigned ipc, offs_t pc, const data_buffer &opcodes, std::ostream &stream)
{
- if(readop(pc) & 0x80)
- return decode_F2(opnm, opsize1, opsize2, ipc, pc, stream);
+ if(opcodes.r8(pc) & 0x80)
+ return decode_F2(opnm, opsize1, opsize2, ipc, pc, opcodes, stream);
else
- return decode_F1(opnm, opsize1, opsize2, ipc, pc, stream);
+ return decode_F1(opnm, opsize1, opsize2, ipc, pc, opcodes, stream);
}
-static int decode_F3(const char *opnm, int opsize1, int opsize2, unsigned ipc, unsigned pc, std::ostream &stream)
+u32 v60_disassembler::decode_F3(const char *opnm, int opsize1, int opsize2, unsigned ipc, offs_t pc, const data_buffer &opcodes, std::ostream &stream)
{
util::stream_format(stream, "%-8s", opnm);
- return decode_AM(ipc, pc, readop(pc-1) & 1, opsize1, stream) + 1;
+ return decode_AM(ipc, pc, opcodes.r8(pc-1) & 1, opsize1, opcodes, stream) + 1;
}
-static int decode_F4a(const char *opnm, int opsize1, int opsize2, unsigned ipc, unsigned pc, std::ostream &stream)
+u32 v60_disassembler::decode_F4a(const char *opnm, int opsize1, int opsize2, unsigned ipc, offs_t pc, const data_buffer &opcodes, std::ostream &stream)
{
- util::stream_format(stream, "%-8s%X", opnm, ipc+read8(pc));
+ util::stream_format(stream, "%-8s%X", opnm, ipc+opcodes.r8(pc));
return 2;
}
-static int decode_F4b(const char *opnm, int opsize1, int opsize2, unsigned ipc, unsigned pc, std::ostream &stream)
+u32 v60_disassembler::decode_F4b(const char *opnm, int opsize1, int opsize2, unsigned ipc, offs_t pc, const data_buffer &opcodes, std::ostream &stream)
{
- util::stream_format(stream, "%-8s%X", opnm, ipc+read16(pc));
+ util::stream_format(stream, "%-8s%X", opnm, ipc+opcodes.r16(pc));
return 3;
}
-static int decode_F5(const char *opnm, int opsize1, int opsize2, unsigned ipc, unsigned pc, std::ostream &stream)
+u32 v60_disassembler::decode_F5(const char *opnm, int opsize1, int opsize2, unsigned ipc, offs_t pc, const data_buffer &opcodes, std::ostream &stream)
{
stream << opnm;
return 1;
}
-static int decode_F6(const char *opnm, int opsize1, int opsize2, unsigned ipc, unsigned pc, std::ostream &stream)
+u32 v60_disassembler::decode_F6(const char *opnm, int opsize1, int opsize2, unsigned ipc, offs_t pc, const data_buffer &opcodes, std::ostream &stream)
{
- util::stream_format(stream, "%-8s%s, %X[PC]", opnm, v60_reg_names[readop(pc) & 0x1f], ipc+read16(pc+1));
+ util::stream_format(stream, "%-8s%s, %X[PC]", opnm, v60_reg_names[opcodes.r8(pc) & 0x1f], ipc+opcodes.r16(pc+1));
return 4;
}
-static int decode_F7a(const char *opnm, int opsize1, int opsize2, unsigned ipc, unsigned pc, std::ostream &stream)
+u32 v60_disassembler::decode_F7a(const char *opnm, int opsize1, int opsize2, unsigned ipc, offs_t pc, const data_buffer &opcodes, std::ostream &stream)
{
int ret;
- unsigned char code = readop(pc);
+ unsigned char code = opcodes.r8(pc);
unsigned char code2;
util::stream_format(stream, "%-8s", opnm);
- ret = decode_AM(ipc, pc+1, code & 0x40, opsize1, stream);
+ ret = decode_AM(ipc, pc+1, code & 0x40, opsize1, opcodes, stream);
stream << ", ";
- code2 = readop(pc+1+ret);
+ code2 = opcodes.r8(pc+1+ret);
if(code2 & 0x80)
out_AM_Register(code2 & 0x1f, stream);
else
out_AM_Immediate(code2, 1, stream);
stream << ", ";
- ret += decode_AM(ipc, pc+2+ret, code & 0x20, opsize2, stream);
+ ret += decode_AM(ipc, pc+2+ret, code & 0x20, opsize2, opcodes, stream);
stream << ", ";
- code2 = readop(pc+2+ret);
+ code2 = opcodes.r8(pc+2+ret);
if(code2 & 0x80)
out_AM_Register(code2 & 0x1f, stream);
else
@@ -527,42 +506,42 @@ static int decode_F7a(const char *opnm, int opsize1, int opsize2, unsigned ipc,
return ret+4;
}
-static int decode_F7b(const char *opnm, int opsize1, int opsize2, unsigned ipc, unsigned pc, std::ostream &stream)
+u32 v60_disassembler::decode_F7b(const char *opnm, int opsize1, int opsize2, unsigned ipc, offs_t pc, const data_buffer &opcodes, std::ostream &stream)
{
int ret;
- unsigned char code = readop(pc);
+ unsigned char code = opcodes.r8(pc);
unsigned char code2;
util::stream_format(stream, "%-8s", opnm);
- ret = decode_AM(ipc, pc+1, code & 0x40, opsize1, stream);
+ ret = decode_AM(ipc, pc+1, code & 0x40, opsize1, opcodes, stream);
stream << ", ";
- code2 = readop(pc+1+ret);
+ code2 = opcodes.r8(pc+1+ret);
if(code2 & 0x80)
out_AM_Register(code2 & 0x1f, stream);
else
out_AM_Immediate(code2, 1, stream);
stream << ", ";
- ret += decode_AM(ipc, pc+2+ret, code & 0x20, opsize2, stream);
+ ret += decode_AM(ipc, pc+2+ret, code & 0x20, opsize2, opcodes, stream);
return ret+3;
}
-static int decode_F7c(const char *opnm, int opsize1, int opsize2, unsigned ipc, unsigned pc, std::ostream &stream)
+u32 v60_disassembler::decode_F7c(const char *opnm, int opsize1, int opsize2, unsigned ipc, offs_t pc, const data_buffer &opcodes, std::ostream &stream)
{
int ret;
- unsigned char code = readop(pc);
+ unsigned char code = opcodes.r8(pc);
unsigned char code2;
util::stream_format(stream, "%-8s", opnm);
- ret = decode_AM(ipc, pc+1, code & 0x40, opsize1, stream);
+ ret = decode_AM(ipc, pc+1, code & 0x40, opsize1, opcodes, stream);
stream << ", ";
- ret += decode_AM(ipc, pc+1+ret, code & 0x20, opsize2, stream);
+ ret += decode_AM(ipc, pc+1+ret, code & 0x20, opsize2, opcodes, stream);
stream << ", ";
- code2 = readop(pc+1+ret);
+ code2 = opcodes.r8(pc+1+ret);
if(code2 & 0x80)
out_AM_Register(code2 & 0x1f, stream);
else
@@ -571,70 +550,70 @@ static int decode_F7c(const char *opnm, int opsize1, int opsize2, unsigned ipc,
return ret+3;
}
-static int dopUNHANDLED(unsigned ipc, unsigned pc, std::ostream &stream)
+u32 v60_disassembler::dopUNHANDLED(unsigned ipc, offs_t pc, const data_buffer &opcodes, std::ostream &stream)
{
- util::stream_format(stream, "$%02X", readop(pc));
+ util::stream_format(stream, "$%02X", opcodes.r8(pc));
return 1;
}
-static int dop58UNHANDLED(unsigned ipc, unsigned pc, std::ostream &stream)
+u32 v60_disassembler::dop58UNHANDLED(unsigned ipc, offs_t pc, const data_buffer &opcodes, std::ostream &stream)
{
util::stream_format(stream, "$58");
return 1;
}
-static int dop59UNHANDLED(unsigned ipc, unsigned pc, std::ostream &stream)
+u32 v60_disassembler::dop59UNHANDLED(unsigned ipc, offs_t pc, const data_buffer &opcodes, std::ostream &stream)
{
util::stream_format(stream, "$59");
return 1;
}
-static int dop5AUNHANDLED(unsigned ipc, unsigned pc, std::ostream &stream)
+u32 v60_disassembler::dop5AUNHANDLED(unsigned ipc, offs_t pc, const data_buffer &opcodes, std::ostream &stream)
{
util::stream_format(stream, "$5A");
return 1;
}
-static int dop5BUNHANDLED(unsigned ipc, unsigned pc, std::ostream &stream)
+u32 v60_disassembler::dop5BUNHANDLED(unsigned ipc, offs_t pc, const data_buffer &opcodes, std::ostream &stream)
{
util::stream_format(stream, "$5B");
return 1;
}
-static int dop5CUNHANDLED(unsigned ipc, unsigned pc, std::ostream &stream)
+u32 v60_disassembler::dop5CUNHANDLED(unsigned ipc, offs_t pc, const data_buffer &opcodes, std::ostream &stream)
{
util::stream_format(stream, "$5C");
return 1;
}
-static int dop5DUNHANDLED(unsigned ipc, unsigned pc, std::ostream &stream)
+u32 v60_disassembler::dop5DUNHANDLED(unsigned ipc, offs_t pc, const data_buffer &opcodes, std::ostream &stream)
{
util::stream_format(stream, "$5D");
return 1;
}
-static int dop5EUNHANDLED(unsigned ipc, unsigned pc, std::ostream &stream)
+u32 v60_disassembler::dop5EUNHANDLED(unsigned ipc, offs_t pc, const data_buffer &opcodes, std::ostream &stream)
{
util::stream_format(stream, "$5E");
return 1;
}
-static int dop5FUNHANDLED(unsigned ipc, unsigned pc, std::ostream &stream)
+u32 v60_disassembler::dop5FUNHANDLED(unsigned ipc, offs_t pc, const data_buffer &opcodes, std::ostream &stream)
{
util::stream_format(stream, "$5F");
return 1;
}
#define DEFINE_EASY_OPCODE(name, opnm, ftype, opsize1, opsize2) \
- static int dop ## name(unsigned ipc, unsigned pc, std::ostream &stream) \
+ u32 v60_disassembler::dop ## name(unsigned ipc, offs_t pc, const data_buffer &opcodes, std::ostream &stream) \
{ \
- return decode_ ## ftype(opnm, opsize1, opsize2, ipc, pc, stream); \
+ return decode_ ## ftype(opnm, opsize1, opsize2, ipc, pc, opcodes, stream); \
}
#define DEFINE_EASY_OPCODE_EX(name, opnm, ftype, opsize1, opsize2, flags) \
- static int dop ## name(unsigned ipc, unsigned pc, std::ostream &stream) \
+ u32 v60_disassembler::dop ## name(unsigned ipc, offs_t pc, const data_buffer &opcodes, std::ostream &stream) \
{ \
- return decode_ ## ftype(opnm, opsize1, opsize2, ipc, pc, stream) | (flags); \
+ return decode_ ## ftype(opnm, opsize1, opsize2, ipc, pc, opcodes, stream) | (flags); \
}
#define DEFINE_TRIPLE_OPCODE(name, string, ftype) \
@@ -693,8 +672,8 @@ DEFINE_EASY_OPCODE(BR8, "br", F4a, 0, 0)
DEFINE_EASY_OPCODE(BR16, "br", F4b, 0, 0)
DEFINE_EASY_OPCODE(BRK, "brk", F5, 0, 0)
DEFINE_EASY_OPCODE(BRKV, "brkv", F5, 0, 0)
-DEFINE_EASY_OPCODE_EX(BSR, "bsr", F4b, 0, 0, DASMFLAG_STEP_OVER)
-DEFINE_EASY_OPCODE_EX(CALL, "call", F1F2, 0, 2, DASMFLAG_STEP_OVER)
+DEFINE_EASY_OPCODE_EX(BSR, "bsr", F4b, 0, 0, STEP_OVER)
+DEFINE_EASY_OPCODE_EX(CALL, "call", F1F2, 0, 2, STEP_OVER)
DEFINE_EASY_OPCODE(CAXI, "caxi", F1, 2, 2)
DEFINE_EASY_OPCODE(CHKAR, "chkar", F1F2, 0, 0) // ?
DEFINE_EASY_OPCODE(CHKAW, "chkaw", F1F2, 0, 0) // ?
@@ -719,21 +698,21 @@ DEFINE_EASY_OPCODE(CVTSW, "cvt.sw", F2, 0, 2)
DEFINE_EASY_OPCODE(CVTLW, "cvt.lw", F2, 1, 2)
DEFINE_EASY_OPCODE(CVTDPZ, "cvtd.pz", F7c, 0, 1)
DEFINE_EASY_OPCODE(CVTDZP, "cvtd.zp", F7c, 1, 0)
-DEFINE_EASY_OPCODE_EX(DBGT, "dbgt", F6, 0, 0, DASMFLAG_STEP_OVER)
-DEFINE_EASY_OPCODE_EX(DBGE, "dbge", F6, 0, 0, DASMFLAG_STEP_OVER)
-DEFINE_EASY_OPCODE_EX(DBLT, "dbgt", F6, 0, 0, DASMFLAG_STEP_OVER)
-DEFINE_EASY_OPCODE_EX(DBLE, "dbge", F6, 0, 0, DASMFLAG_STEP_OVER)
-DEFINE_EASY_OPCODE_EX(DBH, "dbh", F6, 0, 0, DASMFLAG_STEP_OVER)
-DEFINE_EASY_OPCODE_EX(DBNL, "dbnl", F6, 0, 0, DASMFLAG_STEP_OVER)
-DEFINE_EASY_OPCODE_EX(DBL, "dbl", F6, 0, 0, DASMFLAG_STEP_OVER)
-DEFINE_EASY_OPCODE_EX(DBNH, "dbnh", F6, 0, 0, DASMFLAG_STEP_OVER)
-DEFINE_EASY_OPCODE_EX(DBE, "dbe", F6, 0, 0, DASMFLAG_STEP_OVER)
-DEFINE_EASY_OPCODE_EX(DBNE, "dbne", F6, 0, 0, DASMFLAG_STEP_OVER)
-DEFINE_EASY_OPCODE_EX(DBV, "dbe", F6, 0, 0, DASMFLAG_STEP_OVER)
-DEFINE_EASY_OPCODE_EX(DBNV, "dbne", F6, 0, 0, DASMFLAG_STEP_OVER)
-DEFINE_EASY_OPCODE_EX(DBN, "dbn", F6, 0, 0, DASMFLAG_STEP_OVER)
-DEFINE_EASY_OPCODE_EX(DBP, "dbp", F6, 0, 0, DASMFLAG_STEP_OVER)
-DEFINE_EASY_OPCODE_EX(DBR, "dbr", F6, 0, 0, DASMFLAG_STEP_OVER)
+DEFINE_EASY_OPCODE_EX(DBGT, "dbgt", F6, 0, 0, STEP_OVER)
+DEFINE_EASY_OPCODE_EX(DBGE, "dbge", F6, 0, 0, STEP_OVER)
+DEFINE_EASY_OPCODE_EX(DBLT, "dbgt", F6, 0, 0, STEP_OVER)
+DEFINE_EASY_OPCODE_EX(DBLE, "dbge", F6, 0, 0, STEP_OVER)
+DEFINE_EASY_OPCODE_EX(DBH, "dbh", F6, 0, 0, STEP_OVER)
+DEFINE_EASY_OPCODE_EX(DBNL, "dbnl", F6, 0, 0, STEP_OVER)
+DEFINE_EASY_OPCODE_EX(DBL, "dbl", F6, 0, 0, STEP_OVER)
+DEFINE_EASY_OPCODE_EX(DBNH, "dbnh", F6, 0, 0, STEP_OVER)
+DEFINE_EASY_OPCODE_EX(DBE, "dbe", F6, 0, 0, STEP_OVER)
+DEFINE_EASY_OPCODE_EX(DBNE, "dbne", F6, 0, 0, STEP_OVER)
+DEFINE_EASY_OPCODE_EX(DBV, "dbe", F6, 0, 0, STEP_OVER)
+DEFINE_EASY_OPCODE_EX(DBNV, "dbne", F6, 0, 0, STEP_OVER)
+DEFINE_EASY_OPCODE_EX(DBN, "dbn", F6, 0, 0, STEP_OVER)
+DEFINE_EASY_OPCODE_EX(DBP, "dbp", F6, 0, 0, STEP_OVER)
+DEFINE_EASY_OPCODE_EX(DBR, "dbr", F6, 0, 0, STEP_OVER)
DEFINE_TRIPLE_OPCODE(DEC, "dec", F3)
DEFINE_EASY_OPCODE(DISPOSE, "dispose", F5, 0, 0)
DEFINE_TRIPLE_OPCODE(DIV, "div", F1F2)
@@ -754,7 +733,7 @@ DEFINE_TRIPLE_OPCODE(INC, "inc", F3)
DEFINE_EASY_OPCODE(INSBFL, "insbfl", F7c, 2, 0x82)
DEFINE_EASY_OPCODE(INSBFR, "insbfr", F7c, 2, 0x82)
DEFINE_EASY_OPCODE(JMP, "jmp", F3, 0, 0)
-DEFINE_EASY_OPCODE_EX(JSR, "jsr", F3, 0, 0, DASMFLAG_STEP_OVER)
+DEFINE_EASY_OPCODE_EX(JSR, "jsr", F3, 0, 0, STEP_OVER)
DEFINE_EASY_OPCODE(LDPR, "ldpr", F1F2, 2, 2)
DEFINE_EASY_OPCODE(LDTASK, "ldtask", F1F2, 2, 2)
DEFINE_TRIPLE_OPCODE(MOV, "mov", F1F2)
@@ -804,16 +783,16 @@ DEFINE_EASY_OPCODE(PUSH, "push", F3, 2, 0)
DEFINE_EASY_OPCODE(PUSHM, "pushm", F3, 2, 0)
DEFINE_TRIPLE_OPCODE(REM, "rem", F1F2)
DEFINE_TRIPLE_OPCODE(REMU, "remu", F1F2)
-DEFINE_EASY_OPCODE_EX(RET, "ret", F3, 2, 0, DASMFLAG_STEP_OUT)
-DEFINE_EASY_OPCODE_EX(RETIU, "retiu", F3, 1, 0, DASMFLAG_STEP_OUT)
-DEFINE_EASY_OPCODE_EX(RETIS, "retis", F3, 1, 0, DASMFLAG_STEP_OUT)
+DEFINE_EASY_OPCODE_EX(RET, "ret", F3, 2, 0, STEP_OUT)
+DEFINE_EASY_OPCODE_EX(RETIU, "retiu", F3, 1, 0, STEP_OUT)
+DEFINE_EASY_OPCODE_EX(RETIS, "retis", F3, 1, 0, STEP_OUT)
DEFINE_EASY_OPCODE(ROTB, "rot.b", F1F2, 0, 0)
DEFINE_EASY_OPCODE(ROTH, "rot.h", F1F2, 0, 1)
DEFINE_EASY_OPCODE(ROTW, "rot.w", F1F2, 0, 2)
DEFINE_EASY_OPCODE(ROTCB, "rotc.b", F1F2, 0, 0)
DEFINE_EASY_OPCODE(ROTCH, "rotc.h", F1F2, 0, 1)
DEFINE_EASY_OPCODE(ROTCW, "rotc.w", F1F2, 0, 2)
-DEFINE_EASY_OPCODE_EX(RSR, "rsr", F5, 0, 0, DASMFLAG_STEP_OUT)
+DEFINE_EASY_OPCODE_EX(RSR, "rsr", F5, 0, 0, STEP_OUT)
DEFINE_EASY_OPCODE(RVBIT, "rvbit", F1F2, 0, 0)
DEFINE_EASY_OPCODE(RVBYT, "rvbyt", F1F2, 2, 2)
DEFINE_EASY_OPCODE(SCH0BSU, "sch0bsu", F7b, 0x80, 2)
@@ -849,7 +828,7 @@ DEFINE_EASY_OPCODE(TASI, "tasi", F3, 0, 0)
DEFINE_EASY_OPCODE(TB, "tb", F6, 0, 0)
DEFINE_TRIPLE_OPCODE(TEST, "test", F3)
DEFINE_EASY_OPCODE(TEST1, "test1", F1F2, 2, 2)
-DEFINE_EASY_OPCODE_EX(TRAP, "trap", F3, 0, 0, DASMFLAG_STEP_OVER)
+DEFINE_EASY_OPCODE_EX(TRAP, "trap", F3, 0, 0, STEP_OVER)
DEFINE_EASY_OPCODE(TRAPFL, "trapfl", F5, 0, 0)
DEFINE_EASY_OPCODE(UPDATE, "update", F1F2, 0, 3) // ?
DEFINE_EASY_OPCODE(UPDPSWH, "updpsw.h", F1F2, 2, 2)
@@ -862,638 +841,634 @@ DEFINE_EASY_OPCODE(XORBSD, "xorbsd", F7b, 0x80, 0x80)
DEFINE_EASY_OPCODE(XORNBSU, "xornbsu", F7b, 0x80, 0x80)
DEFINE_EASY_OPCODE(XORNBSD, "xornbsd", F7b, 0x80, 0x80)
-static int (*const dasm_optable_58[32])(unsigned ipc, unsigned pc, std::ostream &stream) =
-{
- /* 0x00 */ dopCMPCB,
- /* 0x01 */ dopCMPCFB,
- /* 0x02 */ dopCMPCSB,
- /* 0x03 */ dop58UNHANDLED,
- /* 0x04 */ dop58UNHANDLED,
- /* 0x05 */ dop58UNHANDLED,
- /* 0x06 */ dop58UNHANDLED,
- /* 0x07 */ dop58UNHANDLED,
- /* 0x08 */ dopMOVCUB,
- /* 0x09 */ dopMOVCDB,
- /* 0x0A */ dopMOVCFUB,
- /* 0x0B */ dopMOVCFDB,
- /* 0x0C */ dopMOVCSB,
- /* 0x0D */ dop58UNHANDLED,
- /* 0x0E */ dop58UNHANDLED,
- /* 0x0F */ dop58UNHANDLED,
- /* 0x10 */ dop58UNHANDLED,
- /* 0x11 */ dop58UNHANDLED,
- /* 0x12 */ dop58UNHANDLED,
- /* 0x13 */ dop58UNHANDLED,
- /* 0x14 */ dop58UNHANDLED,
- /* 0x15 */ dop58UNHANDLED,
- /* 0x16 */ dop58UNHANDLED,
- /* 0x17 */ dop58UNHANDLED,
- /* 0x18 */ dopSCHCUB,
- /* 0x19 */ dopSCHCDB,
- /* 0x1A */ dopSKPCUB,
- /* 0x1B */ dopSKPCDB,
- /* 0x1C */ dop58UNHANDLED,
- /* 0x1D */ dop58UNHANDLED,
- /* 0x1E */ dop58UNHANDLED,
- /* 0x1F */ dop58UNHANDLED
+u32 (v60_disassembler::*const v60_disassembler::dasm_optable_58[32])(unsigned ipc, offs_t pc, const data_buffer &opcodes, std::ostream &stream) =
+{
+ /* 0x00 */ &v60_disassembler::dopCMPCB,
+ /* 0x01 */ &v60_disassembler::dopCMPCFB,
+ /* 0x02 */ &v60_disassembler::dopCMPCSB,
+ /* 0x03 */ &v60_disassembler::dop58UNHANDLED,
+ /* 0x04 */ &v60_disassembler::dop58UNHANDLED,
+ /* 0x05 */ &v60_disassembler::dop58UNHANDLED,
+ /* 0x06 */ &v60_disassembler::dop58UNHANDLED,
+ /* 0x07 */ &v60_disassembler::dop58UNHANDLED,
+ /* 0x08 */ &v60_disassembler::dopMOVCUB,
+ /* 0x09 */ &v60_disassembler::dopMOVCDB,
+ /* 0x0A */ &v60_disassembler::dopMOVCFUB,
+ /* 0x0B */ &v60_disassembler::dopMOVCFDB,
+ /* 0x0C */ &v60_disassembler::dopMOVCSB,
+ /* 0x0D */ &v60_disassembler::dop58UNHANDLED,
+ /* 0x0E */ &v60_disassembler::dop58UNHANDLED,
+ /* 0x0F */ &v60_disassembler::dop58UNHANDLED,
+ /* 0x10 */ &v60_disassembler::dop58UNHANDLED,
+ /* 0x11 */ &v60_disassembler::dop58UNHANDLED,
+ /* 0x12 */ &v60_disassembler::dop58UNHANDLED,
+ /* 0x13 */ &v60_disassembler::dop58UNHANDLED,
+ /* 0x14 */ &v60_disassembler::dop58UNHANDLED,
+ /* 0x15 */ &v60_disassembler::dop58UNHANDLED,
+ /* 0x16 */ &v60_disassembler::dop58UNHANDLED,
+ /* 0x17 */ &v60_disassembler::dop58UNHANDLED,
+ /* 0x18 */ &v60_disassembler::dopSCHCUB,
+ /* 0x19 */ &v60_disassembler::dopSCHCDB,
+ /* 0x1A */ &v60_disassembler::dopSKPCUB,
+ /* 0x1B */ &v60_disassembler::dopSKPCDB,
+ /* 0x1C */ &v60_disassembler::dop58UNHANDLED,
+ /* 0x1D */ &v60_disassembler::dop58UNHANDLED,
+ /* 0x1E */ &v60_disassembler::dop58UNHANDLED,
+ /* 0x1F */ &v60_disassembler::dop58UNHANDLED
};
-static int (*const dasm_optable_59[32])(unsigned ipc, unsigned pc, std::ostream &stream) =
-{
- /* 0x00 */ dopADDDC,
- /* 0x01 */ dopSUBDC,
- /* 0x02 */ dopSUBRDC,
- /* 0x03 */ dop59UNHANDLED,
- /* 0x04 */ dop59UNHANDLED,
- /* 0x05 */ dop59UNHANDLED,
- /* 0x06 */ dop59UNHANDLED,
- /* 0x07 */ dop59UNHANDLED,
- /* 0x08 */ dop59UNHANDLED,
- /* 0x09 */ dop59UNHANDLED,
- /* 0x0A */ dop59UNHANDLED,
- /* 0x0B */ dop59UNHANDLED,
- /* 0x0C */ dop59UNHANDLED,
- /* 0x0D */ dop59UNHANDLED,
- /* 0x0E */ dop59UNHANDLED,
- /* 0x0F */ dop59UNHANDLED,
- /* 0x10 */ dopCVTDPZ,
- /* 0x11 */ dop59UNHANDLED,
- /* 0x12 */ dop59UNHANDLED,
- /* 0x13 */ dop59UNHANDLED,
- /* 0x14 */ dop59UNHANDLED,
- /* 0x15 */ dop59UNHANDLED,
- /* 0x16 */ dop59UNHANDLED,
- /* 0x17 */ dop59UNHANDLED,
- /* 0x18 */ dopCVTDZP,
- /* 0x19 */ dop59UNHANDLED,
- /* 0x1A */ dop59UNHANDLED,
- /* 0x1B */ dop59UNHANDLED,
- /* 0x1C */ dop59UNHANDLED,
- /* 0x1D */ dop59UNHANDLED,
- /* 0x1E */ dop59UNHANDLED,
- /* 0x1F */ dop59UNHANDLED
+u32 (v60_disassembler::*const v60_disassembler::dasm_optable_59[32])(unsigned ipc, offs_t pc, const data_buffer &opcodes, std::ostream &stream) =
+{
+ /* 0x00 */ &v60_disassembler::dopADDDC,
+ /* 0x01 */ &v60_disassembler::dopSUBDC,
+ /* 0x02 */ &v60_disassembler::dopSUBRDC,
+ /* 0x03 */ &v60_disassembler::dop59UNHANDLED,
+ /* 0x04 */ &v60_disassembler::dop59UNHANDLED,
+ /* 0x05 */ &v60_disassembler::dop59UNHANDLED,
+ /* 0x06 */ &v60_disassembler::dop59UNHANDLED,
+ /* 0x07 */ &v60_disassembler::dop59UNHANDLED,
+ /* 0x08 */ &v60_disassembler::dop59UNHANDLED,
+ /* 0x09 */ &v60_disassembler::dop59UNHANDLED,
+ /* 0x0A */ &v60_disassembler::dop59UNHANDLED,
+ /* 0x0B */ &v60_disassembler::dop59UNHANDLED,
+ /* 0x0C */ &v60_disassembler::dop59UNHANDLED,
+ /* 0x0D */ &v60_disassembler::dop59UNHANDLED,
+ /* 0x0E */ &v60_disassembler::dop59UNHANDLED,
+ /* 0x0F */ &v60_disassembler::dop59UNHANDLED,
+ /* 0x10 */ &v60_disassembler::dopCVTDPZ,
+ /* 0x11 */ &v60_disassembler::dop59UNHANDLED,
+ /* 0x12 */ &v60_disassembler::dop59UNHANDLED,
+ /* 0x13 */ &v60_disassembler::dop59UNHANDLED,
+ /* 0x14 */ &v60_disassembler::dop59UNHANDLED,
+ /* 0x15 */ &v60_disassembler::dop59UNHANDLED,
+ /* 0x16 */ &v60_disassembler::dop59UNHANDLED,
+ /* 0x17 */ &v60_disassembler::dop59UNHANDLED,
+ /* 0x18 */ &v60_disassembler::dopCVTDZP,
+ /* 0x19 */ &v60_disassembler::dop59UNHANDLED,
+ /* 0x1A */ &v60_disassembler::dop59UNHANDLED,
+ /* 0x1B */ &v60_disassembler::dop59UNHANDLED,
+ /* 0x1C */ &v60_disassembler::dop59UNHANDLED,
+ /* 0x1D */ &v60_disassembler::dop59UNHANDLED,
+ /* 0x1E */ &v60_disassembler::dop59UNHANDLED,
+ /* 0x1F */ &v60_disassembler::dop59UNHANDLED
};
-static int (*const dasm_optable_5A[32])(unsigned ipc, unsigned pc, std::ostream &stream) =
-{
- /* 0x00 */ dopCMPCH,
- /* 0x01 */ dopCMPCFH,
- /* 0x02 */ dopCMPCSH,
- /* 0x03 */ dop5AUNHANDLED,
- /* 0x04 */ dop5AUNHANDLED,
- /* 0x05 */ dop5AUNHANDLED,
- /* 0x06 */ dop5AUNHANDLED,
- /* 0x07 */ dop5AUNHANDLED,
- /* 0x08 */ dopMOVCUH,
- /* 0x09 */ dopMOVCDH,
- /* 0x0A */ dopMOVCFUH,
- /* 0x0B */ dopMOVCFDH,
- /* 0x0C */ dopMOVCSH,
- /* 0x0D */ dop5AUNHANDLED,
- /* 0x0E */ dop5AUNHANDLED,
- /* 0x0F */ dop5AUNHANDLED,
- /* 0x10 */ dop5AUNHANDLED,
- /* 0x11 */ dop5AUNHANDLED,
- /* 0x12 */ dop5AUNHANDLED,
- /* 0x13 */ dop5AUNHANDLED,
- /* 0x14 */ dop5AUNHANDLED,
- /* 0x15 */ dop5AUNHANDLED,
- /* 0x16 */ dop5AUNHANDLED,
- /* 0x17 */ dop5AUNHANDLED,
- /* 0x18 */ dopSCHCUH,
- /* 0x19 */ dopSCHCDH,
- /* 0x1A */ dopSKPCUH,
- /* 0x1B */ dopSKPCDH,
- /* 0x1C */ dop5AUNHANDLED,
- /* 0x1D */ dop5AUNHANDLED,
- /* 0x1E */ dop5AUNHANDLED,
- /* 0x1F */ dop5AUNHANDLED
+u32 (v60_disassembler::*const v60_disassembler::dasm_optable_5A[32])(unsigned ipc, offs_t pc, const data_buffer &opcodes, std::ostream &stream) =
+{
+ /* 0x00 */ &v60_disassembler::dopCMPCH,
+ /* 0x01 */ &v60_disassembler::dopCMPCFH,
+ /* 0x02 */ &v60_disassembler::dopCMPCSH,
+ /* 0x03 */ &v60_disassembler::dop5AUNHANDLED,
+ /* 0x04 */ &v60_disassembler::dop5AUNHANDLED,
+ /* 0x05 */ &v60_disassembler::dop5AUNHANDLED,
+ /* 0x06 */ &v60_disassembler::dop5AUNHANDLED,
+ /* 0x07 */ &v60_disassembler::dop5AUNHANDLED,
+ /* 0x08 */ &v60_disassembler::dopMOVCUH,
+ /* 0x09 */ &v60_disassembler::dopMOVCDH,
+ /* 0x0A */ &v60_disassembler::dopMOVCFUH,
+ /* 0x0B */ &v60_disassembler::dopMOVCFDH,
+ /* 0x0C */ &v60_disassembler::dopMOVCSH,
+ /* 0x0D */ &v60_disassembler::dop5AUNHANDLED,
+ /* 0x0E */ &v60_disassembler::dop5AUNHANDLED,
+ /* 0x0F */ &v60_disassembler::dop5AUNHANDLED,
+ /* 0x10 */ &v60_disassembler::dop5AUNHANDLED,
+ /* 0x11 */ &v60_disassembler::dop5AUNHANDLED,
+ /* 0x12 */ &v60_disassembler::dop5AUNHANDLED,
+ /* 0x13 */ &v60_disassembler::dop5AUNHANDLED,
+ /* 0x14 */ &v60_disassembler::dop5AUNHANDLED,
+ /* 0x15 */ &v60_disassembler::dop5AUNHANDLED,
+ /* 0x16 */ &v60_disassembler::dop5AUNHANDLED,
+ /* 0x17 */ &v60_disassembler::dop5AUNHANDLED,
+ /* 0x18 */ &v60_disassembler::dopSCHCUH,
+ /* 0x19 */ &v60_disassembler::dopSCHCDH,
+ /* 0x1A */ &v60_disassembler::dopSKPCUH,
+ /* 0x1B */ &v60_disassembler::dopSKPCDH,
+ /* 0x1C */ &v60_disassembler::dop5AUNHANDLED,
+ /* 0x1D */ &v60_disassembler::dop5AUNHANDLED,
+ /* 0x1E */ &v60_disassembler::dop5AUNHANDLED,
+ /* 0x1F */ &v60_disassembler::dop5AUNHANDLED
};
-static int (*const dasm_optable_5B[32])(unsigned ipc, unsigned pc, std::ostream &stream) =
-{
- /* 0x00 */ dopSCH0BSU,
- /* 0x01 */ dopSCH0BSD,
- /* 0x02 */ dopSCH1BSU,
- /* 0x03 */ dopSCH1BSD,
- /* 0x04 */ dop5BUNHANDLED,
- /* 0x05 */ dop5BUNHANDLED,
- /* 0x06 */ dop5BUNHANDLED,
- /* 0x07 */ dop5BUNHANDLED,
- /* 0x08 */ dopMOVBSU,
- /* 0x09 */ dopMOVBSD,
- /* 0x0A */ dopNOTBSU,
- /* 0x0B */ dopNOTBSD,
- /* 0x0C */ dop5BUNHANDLED,
- /* 0x0D */ dop5BUNHANDLED,
- /* 0x0E */ dop5BUNHANDLED,
- /* 0x0F */ dop5BUNHANDLED,
- /* 0x10 */ dopANDBSU,
- /* 0x11 */ dopANDBSD,
- /* 0x12 */ dopANDNBSU,
- /* 0x13 */ dopANDNBSD,
- /* 0x14 */ dopORBSU,
- /* 0x15 */ dopORBSD,
- /* 0x16 */ dopORNBSU,
- /* 0x17 */ dopORNBSD,
- /* 0x18 */ dopXORBSU,
- /* 0x19 */ dopXORBSD,
- /* 0x1A */ dopXORNBSU,
- /* 0x1B */ dopXORNBSD,
- /* 0x1C */ dop5BUNHANDLED,
- /* 0x1D */ dop5BUNHANDLED,
- /* 0x1E */ dop5BUNHANDLED,
- /* 0x1F */ dop5BUNHANDLED
+u32 (v60_disassembler::*const v60_disassembler::dasm_optable_5B[32])(unsigned ipc, offs_t pc, const data_buffer &opcodes, std::ostream &stream) =
+{
+ /* 0x00 */ &v60_disassembler::dopSCH0BSU,
+ /* 0x01 */ &v60_disassembler::dopSCH0BSD,
+ /* 0x02 */ &v60_disassembler::dopSCH1BSU,
+ /* 0x03 */ &v60_disassembler::dopSCH1BSD,
+ /* 0x04 */ &v60_disassembler::dop5BUNHANDLED,
+ /* 0x05 */ &v60_disassembler::dop5BUNHANDLED,
+ /* 0x06 */ &v60_disassembler::dop5BUNHANDLED,
+ /* 0x07 */ &v60_disassembler::dop5BUNHANDLED,
+ /* 0x08 */ &v60_disassembler::dopMOVBSU,
+ /* 0x09 */ &v60_disassembler::dopMOVBSD,
+ /* 0x0A */ &v60_disassembler::dopNOTBSU,
+ /* 0x0B */ &v60_disassembler::dopNOTBSD,
+ /* 0x0C */ &v60_disassembler::dop5BUNHANDLED,
+ /* 0x0D */ &v60_disassembler::dop5BUNHANDLED,
+ /* 0x0E */ &v60_disassembler::dop5BUNHANDLED,
+ /* 0x0F */ &v60_disassembler::dop5BUNHANDLED,
+ /* 0x10 */ &v60_disassembler::dopANDBSU,
+ /* 0x11 */ &v60_disassembler::dopANDBSD,
+ /* 0x12 */ &v60_disassembler::dopANDNBSU,
+ /* 0x13 */ &v60_disassembler::dopANDNBSD,
+ /* 0x14 */ &v60_disassembler::dopORBSU,
+ /* 0x15 */ &v60_disassembler::dopORBSD,
+ /* 0x16 */ &v60_disassembler::dopORNBSU,
+ /* 0x17 */ &v60_disassembler::dopORNBSD,
+ /* 0x18 */ &v60_disassembler::dopXORBSU,
+ /* 0x19 */ &v60_disassembler::dopXORBSD,
+ /* 0x1A */ &v60_disassembler::dopXORNBSU,
+ /* 0x1B */ &v60_disassembler::dopXORNBSD,
+ /* 0x1C */ &v60_disassembler::dop5BUNHANDLED,
+ /* 0x1D */ &v60_disassembler::dop5BUNHANDLED,
+ /* 0x1E */ &v60_disassembler::dop5BUNHANDLED,
+ /* 0x1F */ &v60_disassembler::dop5BUNHANDLED
};
-static int (*const dasm_optable_5C[32])(unsigned ipc, unsigned pc, std::ostream &stream) =
-{
- /* 0x00 */ dopCMPFS,
- /* 0x01 */ dop5CUNHANDLED,
- /* 0x02 */ dop5CUNHANDLED,
- /* 0x03 */ dop5CUNHANDLED,
- /* 0x04 */ dop5CUNHANDLED,
- /* 0x05 */ dop5CUNHANDLED,
- /* 0x06 */ dop5CUNHANDLED,
- /* 0x07 */ dop5CUNHANDLED,
- /* 0x08 */ dopMOVFS,
- /* 0x09 */ dopNEGFS,
- /* 0x0A */ dopABSFS,
- /* 0x0B */ dop5CUNHANDLED,
- /* 0x0C */ dop5CUNHANDLED,
- /* 0x0D */ dop5CUNHANDLED,
- /* 0x0E */ dop5CUNHANDLED,
- /* 0x0F */ dop5CUNHANDLED,
- /* 0x10 */ dopSCLFS,
- /* 0x11 */ dop5CUNHANDLED,
- /* 0x12 */ dop5CUNHANDLED,
- /* 0x13 */ dop5CUNHANDLED,
- /* 0x14 */ dop5CUNHANDLED,
- /* 0x15 */ dop5CUNHANDLED,
- /* 0x16 */ dop5CUNHANDLED,
- /* 0x17 */ dop5CUNHANDLED,
- /* 0x18 */ dopADDFS,
- /* 0x19 */ dopSUBFS,
- /* 0x1A */ dopMULFS,
- /* 0x1B */ dopDIVFS,
- /* 0x1C */ dop5CUNHANDLED,
- /* 0x1D */ dop5CUNHANDLED,
- /* 0x1E */ dop5CUNHANDLED,
- /* 0x1F */ dop5CUNHANDLED
+u32 (v60_disassembler::*const v60_disassembler::dasm_optable_5C[32])(unsigned ipc, offs_t pc, const data_buffer &opcodes, std::ostream &stream) =
+{
+ /* 0x00 */ &v60_disassembler::dopCMPFS,
+ /* 0x01 */ &v60_disassembler::dop5CUNHANDLED,
+ /* 0x02 */ &v60_disassembler::dop5CUNHANDLED,
+ /* 0x03 */ &v60_disassembler::dop5CUNHANDLED,
+ /* 0x04 */ &v60_disassembler::dop5CUNHANDLED,
+ /* 0x05 */ &v60_disassembler::dop5CUNHANDLED,
+ /* 0x06 */ &v60_disassembler::dop5CUNHANDLED,
+ /* 0x07 */ &v60_disassembler::dop5CUNHANDLED,
+ /* 0x08 */ &v60_disassembler::dopMOVFS,
+ /* 0x09 */ &v60_disassembler::dopNEGFS,
+ /* 0x0A */ &v60_disassembler::dopABSFS,
+ /* 0x0B */ &v60_disassembler::dop5CUNHANDLED,
+ /* 0x0C */ &v60_disassembler::dop5CUNHANDLED,
+ /* 0x0D */ &v60_disassembler::dop5CUNHANDLED,
+ /* 0x0E */ &v60_disassembler::dop5CUNHANDLED,
+ /* 0x0F */ &v60_disassembler::dop5CUNHANDLED,
+ /* 0x10 */ &v60_disassembler::dopSCLFS,
+ /* 0x11 */ &v60_disassembler::dop5CUNHANDLED,
+ /* 0x12 */ &v60_disassembler::dop5CUNHANDLED,
+ /* 0x13 */ &v60_disassembler::dop5CUNHANDLED,
+ /* 0x14 */ &v60_disassembler::dop5CUNHANDLED,
+ /* 0x15 */ &v60_disassembler::dop5CUNHANDLED,
+ /* 0x16 */ &v60_disassembler::dop5CUNHANDLED,
+ /* 0x17 */ &v60_disassembler::dop5CUNHANDLED,
+ /* 0x18 */ &v60_disassembler::dopADDFS,
+ /* 0x19 */ &v60_disassembler::dopSUBFS,
+ /* 0x1A */ &v60_disassembler::dopMULFS,
+ /* 0x1B */ &v60_disassembler::dopDIVFS,
+ /* 0x1C */ &v60_disassembler::dop5CUNHANDLED,
+ /* 0x1D */ &v60_disassembler::dop5CUNHANDLED,
+ /* 0x1E */ &v60_disassembler::dop5CUNHANDLED,
+ /* 0x1F */ &v60_disassembler::dop5CUNHANDLED
};
-static int (*const dasm_optable_5D[32])(unsigned ipc, unsigned pc, std::ostream &stream) =
-{
- /* 0x00 */ dopCMPBFS,
- /* 0x01 */ dopCMPBFZ,
- /* 0x02 */ dopCMPBFL,
- /* 0x03 */ dop5DUNHANDLED,
- /* 0x04 */ dop5DUNHANDLED,
- /* 0x05 */ dop5DUNHANDLED,
- /* 0x06 */ dop5DUNHANDLED,
- /* 0x07 */ dop5DUNHANDLED,
- /* 0x08 */ dopEXTBFS,
- /* 0x09 */ dopEXTBFZ,
- /* 0x0A */ dopEXTBFL,
- /* 0x0B */ dop5DUNHANDLED,
- /* 0x0C */ dop5DUNHANDLED,
- /* 0x0D */ dop5DUNHANDLED,
- /* 0x0E */ dop5DUNHANDLED,
- /* 0x0F */ dop5DUNHANDLED,
- /* 0x10 */ dop5DUNHANDLED,
- /* 0x11 */ dop5DUNHANDLED,
- /* 0x12 */ dop5DUNHANDLED,
- /* 0x13 */ dop5DUNHANDLED,
- /* 0x14 */ dop5DUNHANDLED,
- /* 0x15 */ dop5DUNHANDLED,
- /* 0x16 */ dop5DUNHANDLED,
- /* 0x17 */ dop5DUNHANDLED,
- /* 0x18 */ dopINSBFR,
- /* 0x19 */ dopINSBFL,
- /* 0x1A */ dop5DUNHANDLED,
- /* 0x1B */ dop5DUNHANDLED,
- /* 0x1C */ dop5DUNHANDLED,
- /* 0x1D */ dop5DUNHANDLED,
- /* 0x1E */ dop5DUNHANDLED,
- /* 0x1F */ dop5DUNHANDLED
+u32 (v60_disassembler::*const v60_disassembler::dasm_optable_5D[32])(unsigned ipc, offs_t pc, const data_buffer &opcodes, std::ostream &stream) =
+{
+ /* 0x00 */ &v60_disassembler::dopCMPBFS,
+ /* 0x01 */ &v60_disassembler::dopCMPBFZ,
+ /* 0x02 */ &v60_disassembler::dopCMPBFL,
+ /* 0x03 */ &v60_disassembler::dop5DUNHANDLED,
+ /* 0x04 */ &v60_disassembler::dop5DUNHANDLED,
+ /* 0x05 */ &v60_disassembler::dop5DUNHANDLED,
+ /* 0x06 */ &v60_disassembler::dop5DUNHANDLED,
+ /* 0x07 */ &v60_disassembler::dop5DUNHANDLED,
+ /* 0x08 */ &v60_disassembler::dopEXTBFS,
+ /* 0x09 */ &v60_disassembler::dopEXTBFZ,
+ /* 0x0A */ &v60_disassembler::dopEXTBFL,
+ /* 0x0B */ &v60_disassembler::dop5DUNHANDLED,
+ /* 0x0C */ &v60_disassembler::dop5DUNHANDLED,
+ /* 0x0D */ &v60_disassembler::dop5DUNHANDLED,
+ /* 0x0E */ &v60_disassembler::dop5DUNHANDLED,
+ /* 0x0F */ &v60_disassembler::dop5DUNHANDLED,
+ /* 0x10 */ &v60_disassembler::dop5DUNHANDLED,
+ /* 0x11 */ &v60_disassembler::dop5DUNHANDLED,
+ /* 0x12 */ &v60_disassembler::dop5DUNHANDLED,
+ /* 0x13 */ &v60_disassembler::dop5DUNHANDLED,
+ /* 0x14 */ &v60_disassembler::dop5DUNHANDLED,
+ /* 0x15 */ &v60_disassembler::dop5DUNHANDLED,
+ /* 0x16 */ &v60_disassembler::dop5DUNHANDLED,
+ /* 0x17 */ &v60_disassembler::dop5DUNHANDLED,
+ /* 0x18 */ &v60_disassembler::dopINSBFR,
+ /* 0x19 */ &v60_disassembler::dopINSBFL,
+ /* 0x1A */ &v60_disassembler::dop5DUNHANDLED,
+ /* 0x1B */ &v60_disassembler::dop5DUNHANDLED,
+ /* 0x1C */ &v60_disassembler::dop5DUNHANDLED,
+ /* 0x1D */ &v60_disassembler::dop5DUNHANDLED,
+ /* 0x1E */ &v60_disassembler::dop5DUNHANDLED,
+ /* 0x1F */ &v60_disassembler::dop5DUNHANDLED
};
-static int (*const dasm_optable_5E[32])(unsigned ipc, unsigned pc, std::ostream &stream) =
-{
- /* 0x00 */ dopCMPFL,
- /* 0x01 */ dop5EUNHANDLED,
- /* 0x02 */ dop5EUNHANDLED,
- /* 0x03 */ dop5EUNHANDLED,
- /* 0x04 */ dop5EUNHANDLED,
- /* 0x05 */ dop5EUNHANDLED,
- /* 0x06 */ dop5EUNHANDLED,
- /* 0x07 */ dop5EUNHANDLED,
- /* 0x08 */ dopMOVFL,
- /* 0x09 */ dopNEGFL,
- /* 0x0A */ dopABSFL,
- /* 0x0B */ dop5EUNHANDLED,
- /* 0x0C */ dop5EUNHANDLED,
- /* 0x0D */ dop5EUNHANDLED,
- /* 0x0E */ dop5EUNHANDLED,
- /* 0x0F */ dop5EUNHANDLED,
- /* 0x10 */ dopSCLFL,
- /* 0x11 */ dop5EUNHANDLED,
- /* 0x12 */ dop5EUNHANDLED,
- /* 0x13 */ dop5EUNHANDLED,
- /* 0x14 */ dop5EUNHANDLED,
- /* 0x15 */ dop5EUNHANDLED,
- /* 0x16 */ dop5EUNHANDLED,
- /* 0x17 */ dop5EUNHANDLED,
- /* 0x18 */ dopADDFL,
- /* 0x19 */ dopSUBFL,
- /* 0x1A */ dopMULFL,
- /* 0x1B */ dopDIVFL,
- /* 0x1C */ dop5EUNHANDLED,
- /* 0x1D */ dop5EUNHANDLED,
- /* 0x1E */ dop5EUNHANDLED,
- /* 0x1F */ dop5EUNHANDLED
+u32 (v60_disassembler::*const v60_disassembler::dasm_optable_5E[32])(unsigned ipc, offs_t pc, const data_buffer &opcodes, std::ostream &stream) =
+{
+ /* 0x00 */ &v60_disassembler::dopCMPFL,
+ /* 0x01 */ &v60_disassembler::dop5EUNHANDLED,
+ /* 0x02 */ &v60_disassembler::dop5EUNHANDLED,
+ /* 0x03 */ &v60_disassembler::dop5EUNHANDLED,
+ /* 0x04 */ &v60_disassembler::dop5EUNHANDLED,
+ /* 0x05 */ &v60_disassembler::dop5EUNHANDLED,
+ /* 0x06 */ &v60_disassembler::dop5EUNHANDLED,
+ /* 0x07 */ &v60_disassembler::dop5EUNHANDLED,
+ /* 0x08 */ &v60_disassembler::dopMOVFL,
+ /* 0x09 */ &v60_disassembler::dopNEGFL,
+ /* 0x0A */ &v60_disassembler::dopABSFL,
+ /* 0x0B */ &v60_disassembler::dop5EUNHANDLED,
+ /* 0x0C */ &v60_disassembler::dop5EUNHANDLED,
+ /* 0x0D */ &v60_disassembler::dop5EUNHANDLED,
+ /* 0x0E */ &v60_disassembler::dop5EUNHANDLED,
+ /* 0x0F */ &v60_disassembler::dop5EUNHANDLED,
+ /* 0x10 */ &v60_disassembler::dopSCLFL,
+ /* 0x11 */ &v60_disassembler::dop5EUNHANDLED,
+ /* 0x12 */ &v60_disassembler::dop5EUNHANDLED,
+ /* 0x13 */ &v60_disassembler::dop5EUNHANDLED,
+ /* 0x14 */ &v60_disassembler::dop5EUNHANDLED,
+ /* 0x15 */ &v60_disassembler::dop5EUNHANDLED,
+ /* 0x16 */ &v60_disassembler::dop5EUNHANDLED,
+ /* 0x17 */ &v60_disassembler::dop5EUNHANDLED,
+ /* 0x18 */ &v60_disassembler::dopADDFL,
+ /* 0x19 */ &v60_disassembler::dopSUBFL,
+ /* 0x1A */ &v60_disassembler::dopMULFL,
+ /* 0x1B */ &v60_disassembler::dopDIVFL,
+ /* 0x1C */ &v60_disassembler::dop5EUNHANDLED,
+ /* 0x1D */ &v60_disassembler::dop5EUNHANDLED,
+ /* 0x1E */ &v60_disassembler::dop5EUNHANDLED,
+ /* 0x1F */ &v60_disassembler::dop5EUNHANDLED
};
-static int (*const dasm_optable_5F[32])(unsigned ipc, unsigned pc, std::ostream &stream) =
-{
- /* 0x00 */ dopCVTWS,
- /* 0x01 */ dopCVTSW,
- /* 0x02 */ dop5FUNHANDLED,
- /* 0x03 */ dop5FUNHANDLED,
- /* 0x04 */ dop5FUNHANDLED,
- /* 0x05 */ dop5FUNHANDLED,
- /* 0x06 */ dop5FUNHANDLED,
- /* 0x07 */ dop5FUNHANDLED,
- /* 0x08 */ dopCVTLS,
- /* 0x09 */ dopCVTLW,
- /* 0x0A */ dop5FUNHANDLED,
- /* 0x0B */ dop5FUNHANDLED,
- /* 0x0C */ dop5FUNHANDLED,
- /* 0x0D */ dop5FUNHANDLED,
- /* 0x0E */ dop5FUNHANDLED,
- /* 0x0F */ dop5FUNHANDLED,
- /* 0x10 */ dopCVTSL,
- /* 0x11 */ dopCVTWL,
- /* 0x12 */ dop5FUNHANDLED,
- /* 0x13 */ dop5FUNHANDLED,
- /* 0x14 */ dop5FUNHANDLED,
- /* 0x15 */ dop5FUNHANDLED,
- /* 0x16 */ dop5FUNHANDLED,
- /* 0x17 */ dop5FUNHANDLED,
- /* 0x18 */ dop5FUNHANDLED,
- /* 0x19 */ dop5FUNHANDLED,
- /* 0x1A */ dop5FUNHANDLED,
- /* 0x1B */ dop5FUNHANDLED,
- /* 0x1C */ dop5FUNHANDLED,
- /* 0x1D */ dop5FUNHANDLED,
- /* 0x1E */ dop5FUNHANDLED,
- /* 0x1F */ dop5FUNHANDLED
+u32 (v60_disassembler::*const v60_disassembler::dasm_optable_5F[32])(unsigned ipc, offs_t pc, const data_buffer &opcodes, std::ostream &stream) =
+{
+ /* 0x00 */ &v60_disassembler::dopCVTWS,
+ /* 0x01 */ &v60_disassembler::dopCVTSW,
+ /* 0x02 */ &v60_disassembler::dop5FUNHANDLED,
+ /* 0x03 */ &v60_disassembler::dop5FUNHANDLED,
+ /* 0x04 */ &v60_disassembler::dop5FUNHANDLED,
+ /* 0x05 */ &v60_disassembler::dop5FUNHANDLED,
+ /* 0x06 */ &v60_disassembler::dop5FUNHANDLED,
+ /* 0x07 */ &v60_disassembler::dop5FUNHANDLED,
+ /* 0x08 */ &v60_disassembler::dopCVTLS,
+ /* 0x09 */ &v60_disassembler::dopCVTLW,
+ /* 0x0A */ &v60_disassembler::dop5FUNHANDLED,
+ /* 0x0B */ &v60_disassembler::dop5FUNHANDLED,
+ /* 0x0C */ &v60_disassembler::dop5FUNHANDLED,
+ /* 0x0D */ &v60_disassembler::dop5FUNHANDLED,
+ /* 0x0E */ &v60_disassembler::dop5FUNHANDLED,
+ /* 0x0F */ &v60_disassembler::dop5FUNHANDLED,
+ /* 0x10 */ &v60_disassembler::dopCVTSL,
+ /* 0x11 */ &v60_disassembler::dopCVTWL,
+ /* 0x12 */ &v60_disassembler::dop5FUNHANDLED,
+ /* 0x13 */ &v60_disassembler::dop5FUNHANDLED,
+ /* 0x14 */ &v60_disassembler::dop5FUNHANDLED,
+ /* 0x15 */ &v60_disassembler::dop5FUNHANDLED,
+ /* 0x16 */ &v60_disassembler::dop5FUNHANDLED,
+ /* 0x17 */ &v60_disassembler::dop5FUNHANDLED,
+ /* 0x18 */ &v60_disassembler::dop5FUNHANDLED,
+ /* 0x19 */ &v60_disassembler::dop5FUNHANDLED,
+ /* 0x1A */ &v60_disassembler::dop5FUNHANDLED,
+ /* 0x1B */ &v60_disassembler::dop5FUNHANDLED,
+ /* 0x1C */ &v60_disassembler::dop5FUNHANDLED,
+ /* 0x1D */ &v60_disassembler::dop5FUNHANDLED,
+ /* 0x1E */ &v60_disassembler::dop5FUNHANDLED,
+ /* 0x1F */ &v60_disassembler::dop5FUNHANDLED
};
-static int (*const dasm_optable_C6[8])(unsigned ipc, unsigned pc, std::ostream &stream) =
+u32 (v60_disassembler::*const v60_disassembler::dasm_optable_C6[8])(unsigned ipc, offs_t pc, const data_buffer &opcodes, std::ostream &stream) =
{
- /* 0x0 */ dopDBV,
- /* 0x1 */ dopDBL,
- /* 0x2 */ dopDBE,
- /* 0x3 */ dopDBNH,
- /* 0x4 */ dopDBN,
- /* 0x5 */ dopDBR,
- /* 0x6 */ dopDBLT,
- /* 0x7 */ dopDBLE
+ /* 0x0 */ &v60_disassembler::dopDBV,
+ /* 0x1 */ &v60_disassembler::dopDBL,
+ /* 0x2 */ &v60_disassembler::dopDBE,
+ /* 0x3 */ &v60_disassembler::dopDBNH,
+ /* 0x4 */ &v60_disassembler::dopDBN,
+ /* 0x5 */ &v60_disassembler::dopDBR,
+ /* 0x6 */ &v60_disassembler::dopDBLT,
+ /* 0x7 */ &v60_disassembler::dopDBLE
};
-static int (*const dasm_optable_C7[8])(unsigned ipc, unsigned pc, std::ostream &stream) =
+u32 (v60_disassembler::*const v60_disassembler::dasm_optable_C7[8])(unsigned ipc, offs_t pc, const data_buffer &opcodes, std::ostream &stream) =
{
- /* 0x0 */ dopDBNV,
- /* 0x1 */ dopDBNL,
- /* 0x2 */ dopDBNE,
- /* 0x3 */ dopDBH,
- /* 0x4 */ dopDBP,
- /* 0x5 */ dopTB,
- /* 0x6 */ dopDBGE,
- /* 0x7 */ dopDBGT
+ /* 0x0 */ &v60_disassembler::dopDBNV,
+ /* 0x1 */ &v60_disassembler::dopDBNL,
+ /* 0x2 */ &v60_disassembler::dopDBNE,
+ /* 0x3 */ &v60_disassembler::dopDBH,
+ /* 0x4 */ &v60_disassembler::dopDBP,
+ /* 0x5 */ &v60_disassembler::dopTB,
+ /* 0x6 */ &v60_disassembler::dopDBGE,
+ /* 0x7 */ &v60_disassembler::dopDBGT
};
-static int dop58(unsigned ipc, unsigned pc, std::ostream &stream)
+u32 v60_disassembler::dop58(unsigned ipc, offs_t pc, const data_buffer &opcodes, std::ostream &stream)
{
- return dasm_optable_58[readop(pc) & 0x1f](ipc, pc, stream);
+ return (this->*dasm_optable_58[opcodes.r8(pc) & 0x1f])(ipc, pc, opcodes, stream);
}
-static int dop59(unsigned ipc, unsigned pc, std::ostream &stream)
+u32 v60_disassembler::dop59(unsigned ipc, offs_t pc, const data_buffer &opcodes, std::ostream &stream)
{
- return dasm_optable_59[readop(pc) & 0x1f](ipc, pc, stream);
+ return (this->*dasm_optable_59[opcodes.r8(pc) & 0x1f])(ipc, pc, opcodes, stream);
}
-static int dop5A(unsigned ipc, unsigned pc, std::ostream &stream)
+u32 v60_disassembler::dop5A(unsigned ipc, offs_t pc, const data_buffer &opcodes, std::ostream &stream)
{
- return dasm_optable_5A[readop(pc) & 0x1f](ipc, pc, stream);
+ return (this->*dasm_optable_5A[opcodes.r8(pc) & 0x1f])(ipc, pc, opcodes, stream);
}
-static int dop5B(unsigned ipc, unsigned pc, std::ostream &stream)
+u32 v60_disassembler::dop5B(unsigned ipc, offs_t pc, const data_buffer &opcodes, std::ostream &stream)
{
- return dasm_optable_5B[readop(pc) & 0x1f](ipc, pc, stream);
+ return (this->*dasm_optable_5B[opcodes.r8(pc) & 0x1f])(ipc, pc, opcodes, stream);
}
-static int dop5C(unsigned ipc, unsigned pc, std::ostream &stream)
+u32 v60_disassembler::dop5C(unsigned ipc, offs_t pc, const data_buffer &opcodes, std::ostream &stream)
{
- return dasm_optable_5C[readop(pc) & 0x1f](ipc, pc, stream);
+ return (this->*dasm_optable_5C[opcodes.r8(pc) & 0x1f])(ipc, pc, opcodes, stream);
}
-static int dop5D(unsigned ipc, unsigned pc, std::ostream &stream)
+u32 v60_disassembler::dop5D(unsigned ipc, offs_t pc, const data_buffer &opcodes, std::ostream &stream)
{
- return dasm_optable_5D[readop(pc) & 0x1f](ipc, pc, stream);
+ return (this->*dasm_optable_5D[opcodes.r8(pc) & 0x1f])(ipc, pc, opcodes, stream);
}
-static int dop5E(unsigned ipc, unsigned pc, std::ostream &stream)
+u32 v60_disassembler::dop5E(unsigned ipc, offs_t pc, const data_buffer &opcodes, std::ostream &stream)
{
- return dasm_optable_5E[readop(pc) & 0x1f](ipc, pc, stream);
+ return (this->*dasm_optable_5E[opcodes.r8(pc) & 0x1f])(ipc, pc, opcodes, stream);
}
-static int dop5F(unsigned ipc, unsigned pc, std::ostream &stream)
+u32 v60_disassembler::dop5F(unsigned ipc, offs_t pc, const data_buffer &opcodes, std::ostream &stream)
{
- return dasm_optable_5F[readop(pc) & 0x1f](ipc, pc, stream);
+ return (this->*dasm_optable_5F[opcodes.r8(pc) & 0x1f])(ipc, pc, opcodes, stream);
}
-static int dopC6(unsigned ipc, unsigned pc, std::ostream &stream)
+u32 v60_disassembler::dopC6(unsigned ipc, offs_t pc, const data_buffer &opcodes, std::ostream &stream)
{
- return dasm_optable_C6[readop(pc) >> 5](ipc, pc, stream);
+ return (this->*dasm_optable_C6[opcodes.r8(pc) >> 5])(ipc, pc, opcodes, stream);
}
-static int dopC7(unsigned ipc, unsigned pc, std::ostream &stream)
+u32 v60_disassembler::dopC7(unsigned ipc, offs_t pc, const data_buffer &opcodes, std::ostream &stream)
{
- return dasm_optable_C7[readop(pc) >> 5](ipc, pc, stream);
+ return (this->*dasm_optable_C7[opcodes.r8(pc) >> 5])(ipc, pc, opcodes, stream);
}
-static int (*const dasm_optable[256])(unsigned ipc, unsigned pc, std::ostream &stream) =
-{
- /* 0x00 */ dopHALT,
- /* 0x01 */ dopLDTASK,
- /* 0x02 */ dopSTPR,
- /* 0x03 */ dopGETRA,
- /* 0x04 */ dopGETPTE,
- /* 0x05 */ dopGETATE,
- /* 0x06 */ dopUNHANDLED,
- /* 0x07 */ dopUNHANDLED,
- /* 0x08 */ dopRVBIT,
- /* 0x09 */ dopMOVB,
- /* 0x0A */ dopMOVSBH,
- /* 0x0B */ dopMOVZBH,
- /* 0x0C */ dopMOVSBW,
- /* 0x0D */ dopMOVZBW,
- /* 0x0E */ dopUNHANDLED,
- /* 0x0F */ dopUNHANDLED,
- /* 0x10 */ dopCLRTLBA,
- /* 0x11 */ dopUNHANDLED,
- /* 0x12 */ dopLDPR,
- /* 0x13 */ dopUPDPSWW,
- /* 0x14 */ dopUPDPTE,
- /* 0x15 */ dopUPDATE,
- /* 0x16 */ dopUNHANDLED,
- /* 0x17 */ dopUNHANDLED,
- /* 0x18 */ dopUNHANDLED,
- /* 0x19 */ dopMOVTHB,
- /* 0x1A */ dopUNHANDLED,
- /* 0x1B */ dopMOVH,
- /* 0x1C */ dopMOVSHW,
- /* 0x1D */ dopMOVZHW,
- /* 0x1E */ dopUNHANDLED,
- /* 0x1F */ dopUNHANDLED,
- /* 0x20 */ dopINB,
- /* 0x21 */ dopOUTB,
- /* 0x22 */ dopINH,
- /* 0x23 */ dopOUTH,
- /* 0x24 */ dopINW,
- /* 0x25 */ dopOUTW,
- /* 0x26 */ dopUNHANDLED,
- /* 0x27 */ dopUNHANDLED,
- /* 0x28 */ dopUNHANDLED,
- /* 0x29 */ dopMOVTWB,
- /* 0x2A */ dopUNHANDLED,
- /* 0x2B */ dopMOVTWH,
- /* 0x2C */ dopRVBYT,
- /* 0x2D */ dopMOVW,
- /* 0x2E */ dopUNHANDLED,
- /* 0x2F */ dopUNHANDLED,
- /* 0x30 */ dopUNHANDLED,
- /* 0x31 */ dopUNHANDLED,
- /* 0x32 */ dopUNHANDLED,
- /* 0x33 */ dopUNHANDLED,
- /* 0x34 */ dopUNHANDLED,
- /* 0x35 */ dopUNHANDLED,
- /* 0x36 */ dopUNHANDLED,
- /* 0x37 */ dopUNHANDLED,
- /* 0x38 */ dopNOTB,
- /* 0x39 */ dopNEGB,
- /* 0x3A */ dopNOTH,
- /* 0x3B */ dopNEGH,
- /* 0x3C */ dopNOTW,
- /* 0x3D */ dopNEGW,
- /* 0x3E */ dopUNHANDLED,
- /* 0x3F */ dopMOVD,
- /* 0x40 */ dopMOVEAB,
- /* 0x41 */ dopXCHB,
- /* 0x42 */ dopMOVEAH,
- /* 0x43 */ dopXCHH,
- /* 0x44 */ dopMOVEAW,
- /* 0x45 */ dopXCHW,
- /* 0x46 */ dopUNHANDLED,
- /* 0x47 */ dopSETF,
- /* 0x48 */ dopBSR,
- /* 0x49 */ dopCALL,
- /* 0x4A */ dopUPDPSWH,
- /* 0x4B */ dopCHLVL,
- /* 0x4C */ dopCAXI,
- /* 0x4D */ dopCHKAR,
- /* 0x4E */ dopCHKAW,
- /* 0x4F */ dopCHKAE,
- /* 0x50 */ dopREMB,
- /* 0x51 */ dopREMUB,
- /* 0x52 */ dopREMH,
- /* 0x53 */ dopREMUH,
- /* 0x54 */ dopREMW,
- /* 0x55 */ dopREMUW,
- /* 0x56 */ dopUNHANDLED,
- /* 0x57 */ dopUNHANDLED,
- /* 0x58 */ dop58,
- /* 0x59 */ dop59,
- /* 0x5A */ dop5A,
- /* 0x5B */ dop5B,
- /* 0x5C */ dop5C,
- /* 0x5D */ dop5D,
- /* 0x5E */ dop5E,
- /* 0x5F */ dop5F,
- /* 0x60 */ dopBV8,
- /* 0x61 */ dopBNV8,
- /* 0x62 */ dopBL8,
- /* 0x63 */ dopBNL8,
- /* 0x64 */ dopBE8,
- /* 0x65 */ dopBNE8,
- /* 0x66 */ dopBNH8,
- /* 0x67 */ dopBH8,
- /* 0x68 */ dopBN8,
- /* 0x69 */ dopBP8,
- /* 0x6A */ dopBR8,
- /* 0x6B */ dopUNHANDLED,
- /* 0x6C */ dopBLT8,
- /* 0x6D */ dopBGE8,
- /* 0x6E */ dopBLE8,
- /* 0x6F */ dopBGT8,
- /* 0x70 */ dopBV16,
- /* 0x71 */ dopBNV16,
- /* 0x72 */ dopBL16,
- /* 0x73 */ dopBNL16,
- /* 0x74 */ dopBE16,
- /* 0x75 */ dopBNE16,
- /* 0x76 */ dopBNH16,
- /* 0x77 */ dopBH16,
- /* 0x78 */ dopBN16,
- /* 0x79 */ dopBP16,
- /* 0x7A */ dopBR16,
- /* 0x7B */ dopUNHANDLED,
- /* 0x7C */ dopBLT16,
- /* 0x7D */ dopBGE16,
- /* 0x7E */ dopBLE16,
- /* 0x7F */ dopBGT16,
- /* 0x80 */ dopADDB,
- /* 0x81 */ dopMULB,
- /* 0x82 */ dopADDH,
- /* 0x83 */ dopMULH,
- /* 0x84 */ dopADDW,
- /* 0x85 */ dopMULW,
- /* 0x86 */ dopMULX,
- /* 0x87 */ dopTEST1,
- /* 0x88 */ dopORB,
- /* 0x89 */ dopROTB,
- /* 0x8A */ dopORH,
- /* 0x8B */ dopROTH,
- /* 0x8C */ dopORW,
- /* 0x8D */ dopROTW,
- /* 0x8E */ dopUNHANDLED,
- /* 0x8F */ dopUNHANDLED,
- /* 0x90 */ dopADDCB,
- /* 0x91 */ dopMULUB,
- /* 0x92 */ dopADDCH,
- /* 0x93 */ dopMULUH,
- /* 0x94 */ dopADDCW,
- /* 0x95 */ dopMULUW,
- /* 0x96 */ dopMULUX,
- /* 0x97 */ dopSET1,
- /* 0x98 */ dopSUBCB,
- /* 0x99 */ dopROTCB,
- /* 0x9A */ dopSUBCH,
- /* 0x9B */ dopROTCH,
- /* 0x9C */ dopSUBCW,
- /* 0x9D */ dopROTCW,
- /* 0x9E */ dopUNHANDLED,
- /* 0x9F */ dopUNHANDLED,
- /* 0xA0 */ dopANDB,
- /* 0xA1 */ dopDIVB,
- /* 0xA2 */ dopANDH,
- /* 0xA3 */ dopDIVH,
- /* 0xA4 */ dopANDW,
- /* 0xA5 */ dopDIVW,
- /* 0xA6 */ dopDIVX,
- /* 0xA7 */ dopCLR1,
- /* 0xA8 */ dopSUBB,
- /* 0xA9 */ dopSHLB,
- /* 0xAA */ dopSUBH,
- /* 0xAB */ dopSHLH,
- /* 0xAC */ dopSUBW,
- /* 0xAD */ dopSHLW,
- /* 0xAE */ dopUNHANDLED,
- /* 0xAF */ dopUNHANDLED,
- /* 0xB0 */ dopXORB,
- /* 0xB1 */ dopDIVUB,
- /* 0xB2 */ dopXORH,
- /* 0xB3 */ dopDIVUH,
- /* 0xB4 */ dopXORW,
- /* 0xB5 */ dopDIVUW,
- /* 0xB6 */ dopDIVUX,
- /* 0xB7 */ dopNOT1,
- /* 0xB8 */ dopCMPB,
- /* 0xB9 */ dopSHAB,
- /* 0xBA */ dopCMPH,
- /* 0xBB */ dopSHAH,
- /* 0xBC */ dopCMPW,
- /* 0xBD */ dopSHAW,
- /* 0xBE */ dopUNHANDLED,
- /* 0xBF */ dopUNHANDLED,
- /* 0xC0 */ dopUNHANDLED,
- /* 0xC1 */ dopUNHANDLED,
- /* 0xC2 */ dopUNHANDLED,
- /* 0xC3 */ dopUNHANDLED,
- /* 0xC4 */ dopUNHANDLED,
- /* 0xC5 */ dopUNHANDLED,
- /* 0xC6 */ dopC6,
- /* 0xC7 */ dopC7,
- /* 0xC8 */ dopBRK,
- /* 0xC9 */ dopBRKV,
- /* 0xCA */ dopRSR,
- /* 0xCB */ dopTRAPFL,
- /* 0xCC */ dopDISPOSE,
- /* 0xCD */ dopNOP,
- /* 0xCE */ dopUNHANDLED,
- /* 0xCF */ dopUNHANDLED,
- /* 0xD0 */ dopDECB,
- /* 0xD1 */ dopDECB,
- /* 0xD2 */ dopDECH,
- /* 0xD3 */ dopDECH,
- /* 0xD4 */ dopDECW,
- /* 0xD5 */ dopDECW,
- /* 0xD6 */ dopJMP,
- /* 0xD7 */ dopJMP,
- /* 0xD8 */ dopINCB,
- /* 0xD9 */ dopINCB,
- /* 0xDA */ dopINCH,
- /* 0xDB */ dopINCH,
- /* 0xDC */ dopINCW,
- /* 0xDD */ dopINCW,
- /* 0xDE */ dopPREPARE,
- /* 0xDF */ dopPREPARE,
- /* 0xE0 */ dopTASI,
- /* 0xE1 */ dopTASI,
- /* 0xE2 */ dopRET,
- /* 0xE3 */ dopRET,
- /* 0xE4 */ dopPOPM,
- /* 0xE5 */ dopPOPM,
- /* 0xE6 */ dopPOP,
- /* 0xE7 */ dopPOP,
- /* 0xE8 */ dopJSR,
- /* 0xE9 */ dopJSR,
- /* 0xEA */ dopRETIU,
- /* 0xEB */ dopRETIU,
- /* 0xEC */ dopPUSHM,
- /* 0xED */ dopPUSHM,
- /* 0xEE */ dopPUSH,
- /* 0xEF */ dopPUSH,
- /* 0xF0 */ dopTESTB,
- /* 0xF1 */ dopTESTB,
- /* 0xF2 */ dopTESTH,
- /* 0xF3 */ dopTESTH,
- /* 0xF4 */ dopTESTW,
- /* 0xF5 */ dopTESTW,
- /* 0xF6 */ dopGETPSW,
- /* 0xF7 */ dopGETPSW,
- /* 0xF8 */ dopTRAP,
- /* 0xF9 */ dopTRAP,
- /* 0xFA */ dopRETIS,
- /* 0xFB */ dopRETIS,
- /* 0xFC */ dopSTTASK,
- /* 0xFD */ dopSTTASK,
- /* 0xFE */ dopCLRTLB,
- /* 0xFF */ dopCLRTLB
+u32 (v60_disassembler::*const v60_disassembler::dasm_optable[256])(unsigned ipc, offs_t pc, const data_buffer &opcodes, std::ostream &stream) =
+{
+ /* 0x00 */ &v60_disassembler::dopHALT,
+ /* 0x01 */ &v60_disassembler::dopLDTASK,
+ /* 0x02 */ &v60_disassembler::dopSTPR,
+ /* 0x03 */ &v60_disassembler::dopGETRA,
+ /* 0x04 */ &v60_disassembler::dopGETPTE,
+ /* 0x05 */ &v60_disassembler::dopGETATE,
+ /* 0x06 */ &v60_disassembler::dopUNHANDLED,
+ /* 0x07 */ &v60_disassembler::dopUNHANDLED,
+ /* 0x08 */ &v60_disassembler::dopRVBIT,
+ /* 0x09 */ &v60_disassembler::dopMOVB,
+ /* 0x0A */ &v60_disassembler::dopMOVSBH,
+ /* 0x0B */ &v60_disassembler::dopMOVZBH,
+ /* 0x0C */ &v60_disassembler::dopMOVSBW,
+ /* 0x0D */ &v60_disassembler::dopMOVZBW,
+ /* 0x0E */ &v60_disassembler::dopUNHANDLED,
+ /* 0x0F */ &v60_disassembler::dopUNHANDLED,
+ /* 0x10 */ &v60_disassembler::dopCLRTLBA,
+ /* 0x11 */ &v60_disassembler::dopUNHANDLED,
+ /* 0x12 */ &v60_disassembler::dopLDPR,
+ /* 0x13 */ &v60_disassembler::dopUPDPSWW,
+ /* 0x14 */ &v60_disassembler::dopUPDPTE,
+ /* 0x15 */ &v60_disassembler::dopUPDATE,
+ /* 0x16 */ &v60_disassembler::dopUNHANDLED,
+ /* 0x17 */ &v60_disassembler::dopUNHANDLED,
+ /* 0x18 */ &v60_disassembler::dopUNHANDLED,
+ /* 0x19 */ &v60_disassembler::dopMOVTHB,
+ /* 0x1A */ &v60_disassembler::dopUNHANDLED,
+ /* 0x1B */ &v60_disassembler::dopMOVH,
+ /* 0x1C */ &v60_disassembler::dopMOVSHW,
+ /* 0x1D */ &v60_disassembler::dopMOVZHW,
+ /* 0x1E */ &v60_disassembler::dopUNHANDLED,
+ /* 0x1F */ &v60_disassembler::dopUNHANDLED,
+ /* 0x20 */ &v60_disassembler::dopINB,
+ /* 0x21 */ &v60_disassembler::dopOUTB,
+ /* 0x22 */ &v60_disassembler::dopINH,
+ /* 0x23 */ &v60_disassembler::dopOUTH,
+ /* 0x24 */ &v60_disassembler::dopINW,
+ /* 0x25 */ &v60_disassembler::dopOUTW,
+ /* 0x26 */ &v60_disassembler::dopUNHANDLED,
+ /* 0x27 */ &v60_disassembler::dopUNHANDLED,
+ /* 0x28 */ &v60_disassembler::dopUNHANDLED,
+ /* 0x29 */ &v60_disassembler::dopMOVTWB,
+ /* 0x2A */ &v60_disassembler::dopUNHANDLED,
+ /* 0x2B */ &v60_disassembler::dopMOVTWH,
+ /* 0x2C */ &v60_disassembler::dopRVBYT,
+ /* 0x2D */ &v60_disassembler::dopMOVW,
+ /* 0x2E */ &v60_disassembler::dopUNHANDLED,
+ /* 0x2F */ &v60_disassembler::dopUNHANDLED,
+ /* 0x30 */ &v60_disassembler::dopUNHANDLED,
+ /* 0x31 */ &v60_disassembler::dopUNHANDLED,
+ /* 0x32 */ &v60_disassembler::dopUNHANDLED,
+ /* 0x33 */ &v60_disassembler::dopUNHANDLED,
+ /* 0x34 */ &v60_disassembler::dopUNHANDLED,
+ /* 0x35 */ &v60_disassembler::dopUNHANDLED,
+ /* 0x36 */ &v60_disassembler::dopUNHANDLED,
+ /* 0x37 */ &v60_disassembler::dopUNHANDLED,
+ /* 0x38 */ &v60_disassembler::dopNOTB,
+ /* 0x39 */ &v60_disassembler::dopNEGB,
+ /* 0x3A */ &v60_disassembler::dopNOTH,
+ /* 0x3B */ &v60_disassembler::dopNEGH,
+ /* 0x3C */ &v60_disassembler::dopNOTW,
+ /* 0x3D */ &v60_disassembler::dopNEGW,
+ /* 0x3E */ &v60_disassembler::dopUNHANDLED,
+ /* 0x3F */ &v60_disassembler::dopMOVD,
+ /* 0x40 */ &v60_disassembler::dopMOVEAB,
+ /* 0x41 */ &v60_disassembler::dopXCHB,
+ /* 0x42 */ &v60_disassembler::dopMOVEAH,
+ /* 0x43 */ &v60_disassembler::dopXCHH,
+ /* 0x44 */ &v60_disassembler::dopMOVEAW,
+ /* 0x45 */ &v60_disassembler::dopXCHW,
+ /* 0x46 */ &v60_disassembler::dopUNHANDLED,
+ /* 0x47 */ &v60_disassembler::dopSETF,
+ /* 0x48 */ &v60_disassembler::dopBSR,
+ /* 0x49 */ &v60_disassembler::dopCALL,
+ /* 0x4A */ &v60_disassembler::dopUPDPSWH,
+ /* 0x4B */ &v60_disassembler::dopCHLVL,
+ /* 0x4C */ &v60_disassembler::dopCAXI,
+ /* 0x4D */ &v60_disassembler::dopCHKAR,
+ /* 0x4E */ &v60_disassembler::dopCHKAW,
+ /* 0x4F */ &v60_disassembler::dopCHKAE,
+ /* 0x50 */ &v60_disassembler::dopREMB,
+ /* 0x51 */ &v60_disassembler::dopREMUB,
+ /* 0x52 */ &v60_disassembler::dopREMH,
+ /* 0x53 */ &v60_disassembler::dopREMUH,
+ /* 0x54 */ &v60_disassembler::dopREMW,
+ /* 0x55 */ &v60_disassembler::dopREMUW,
+ /* 0x56 */ &v60_disassembler::dopUNHANDLED,
+ /* 0x57 */ &v60_disassembler::dopUNHANDLED,
+ /* 0x58 */ &v60_disassembler::dop58,
+ /* 0x59 */ &v60_disassembler::dop59,
+ /* 0x5A */ &v60_disassembler::dop5A,
+ /* 0x5B */ &v60_disassembler::dop5B,
+ /* 0x5C */ &v60_disassembler::dop5C,
+ /* 0x5D */ &v60_disassembler::dop5D,
+ /* 0x5E */ &v60_disassembler::dop5E,
+ /* 0x5F */ &v60_disassembler::dop5F,
+ /* 0x60 */ &v60_disassembler::dopBV8,
+ /* 0x61 */ &v60_disassembler::dopBNV8,
+ /* 0x62 */ &v60_disassembler::dopBL8,
+ /* 0x63 */ &v60_disassembler::dopBNL8,
+ /* 0x64 */ &v60_disassembler::dopBE8,
+ /* 0x65 */ &v60_disassembler::dopBNE8,
+ /* 0x66 */ &v60_disassembler::dopBNH8,
+ /* 0x67 */ &v60_disassembler::dopBH8,
+ /* 0x68 */ &v60_disassembler::dopBN8,
+ /* 0x69 */ &v60_disassembler::dopBP8,
+ /* 0x6A */ &v60_disassembler::dopBR8,
+ /* 0x6B */ &v60_disassembler::dopUNHANDLED,
+ /* 0x6C */ &v60_disassembler::dopBLT8,
+ /* 0x6D */ &v60_disassembler::dopBGE8,
+ /* 0x6E */ &v60_disassembler::dopBLE8,
+ /* 0x6F */ &v60_disassembler::dopBGT8,
+ /* 0x70 */ &v60_disassembler::dopBV16,
+ /* 0x71 */ &v60_disassembler::dopBNV16,
+ /* 0x72 */ &v60_disassembler::dopBL16,
+ /* 0x73 */ &v60_disassembler::dopBNL16,
+ /* 0x74 */ &v60_disassembler::dopBE16,
+ /* 0x75 */ &v60_disassembler::dopBNE16,
+ /* 0x76 */ &v60_disassembler::dopBNH16,
+ /* 0x77 */ &v60_disassembler::dopBH16,
+ /* 0x78 */ &v60_disassembler::dopBN16,
+ /* 0x79 */ &v60_disassembler::dopBP16,
+ /* 0x7A */ &v60_disassembler::dopBR16,
+ /* 0x7B */ &v60_disassembler::dopUNHANDLED,
+ /* 0x7C */ &v60_disassembler::dopBLT16,
+ /* 0x7D */ &v60_disassembler::dopBGE16,
+ /* 0x7E */ &v60_disassembler::dopBLE16,
+ /* 0x7F */ &v60_disassembler::dopBGT16,
+ /* 0x80 */ &v60_disassembler::dopADDB,
+ /* 0x81 */ &v60_disassembler::dopMULB,
+ /* 0x82 */ &v60_disassembler::dopADDH,
+ /* 0x83 */ &v60_disassembler::dopMULH,
+ /* 0x84 */ &v60_disassembler::dopADDW,
+ /* 0x85 */ &v60_disassembler::dopMULW,
+ /* 0x86 */ &v60_disassembler::dopMULX,
+ /* 0x87 */ &v60_disassembler::dopTEST1,
+ /* 0x88 */ &v60_disassembler::dopORB,
+ /* 0x89 */ &v60_disassembler::dopROTB,
+ /* 0x8A */ &v60_disassembler::dopORH,
+ /* 0x8B */ &v60_disassembler::dopROTH,
+ /* 0x8C */ &v60_disassembler::dopORW,
+ /* 0x8D */ &v60_disassembler::dopROTW,
+ /* 0x8E */ &v60_disassembler::dopUNHANDLED,
+ /* 0x8F */ &v60_disassembler::dopUNHANDLED,
+ /* 0x90 */ &v60_disassembler::dopADDCB,
+ /* 0x91 */ &v60_disassembler::dopMULUB,
+ /* 0x92 */ &v60_disassembler::dopADDCH,
+ /* 0x93 */ &v60_disassembler::dopMULUH,
+ /* 0x94 */ &v60_disassembler::dopADDCW,
+ /* 0x95 */ &v60_disassembler::dopMULUW,
+ /* 0x96 */ &v60_disassembler::dopMULUX,
+ /* 0x97 */ &v60_disassembler::dopSET1,
+ /* 0x98 */ &v60_disassembler::dopSUBCB,
+ /* 0x99 */ &v60_disassembler::dopROTCB,
+ /* 0x9A */ &v60_disassembler::dopSUBCH,
+ /* 0x9B */ &v60_disassembler::dopROTCH,
+ /* 0x9C */ &v60_disassembler::dopSUBCW,
+ /* 0x9D */ &v60_disassembler::dopROTCW,
+ /* 0x9E */ &v60_disassembler::dopUNHANDLED,
+ /* 0x9F */ &v60_disassembler::dopUNHANDLED,
+ /* 0xA0 */ &v60_disassembler::dopANDB,
+ /* 0xA1 */ &v60_disassembler::dopDIVB,
+ /* 0xA2 */ &v60_disassembler::dopANDH,
+ /* 0xA3 */ &v60_disassembler::dopDIVH,
+ /* 0xA4 */ &v60_disassembler::dopANDW,
+ /* 0xA5 */ &v60_disassembler::dopDIVW,
+ /* 0xA6 */ &v60_disassembler::dopDIVX,
+ /* 0xA7 */ &v60_disassembler::dopCLR1,
+ /* 0xA8 */ &v60_disassembler::dopSUBB,
+ /* 0xA9 */ &v60_disassembler::dopSHLB,
+ /* 0xAA */ &v60_disassembler::dopSUBH,
+ /* 0xAB */ &v60_disassembler::dopSHLH,
+ /* 0xAC */ &v60_disassembler::dopSUBW,
+ /* 0xAD */ &v60_disassembler::dopSHLW,
+ /* 0xAE */ &v60_disassembler::dopUNHANDLED,
+ /* 0xAF */ &v60_disassembler::dopUNHANDLED,
+ /* 0xB0 */ &v60_disassembler::dopXORB,
+ /* 0xB1 */ &v60_disassembler::dopDIVUB,
+ /* 0xB2 */ &v60_disassembler::dopXORH,
+ /* 0xB3 */ &v60_disassembler::dopDIVUH,
+ /* 0xB4 */ &v60_disassembler::dopXORW,
+ /* 0xB5 */ &v60_disassembler::dopDIVUW,
+ /* 0xB6 */ &v60_disassembler::dopDIVUX,
+ /* 0xB7 */ &v60_disassembler::dopNOT1,
+ /* 0xB8 */ &v60_disassembler::dopCMPB,
+ /* 0xB9 */ &v60_disassembler::dopSHAB,
+ /* 0xBA */ &v60_disassembler::dopCMPH,
+ /* 0xBB */ &v60_disassembler::dopSHAH,
+ /* 0xBC */ &v60_disassembler::dopCMPW,
+ /* 0xBD */ &v60_disassembler::dopSHAW,
+ /* 0xBE */ &v60_disassembler::dopUNHANDLED,
+ /* 0xBF */ &v60_disassembler::dopUNHANDLED,
+ /* 0xC0 */ &v60_disassembler::dopUNHANDLED,
+ /* 0xC1 */ &v60_disassembler::dopUNHANDLED,
+ /* 0xC2 */ &v60_disassembler::dopUNHANDLED,
+ /* 0xC3 */ &v60_disassembler::dopUNHANDLED,
+ /* 0xC4 */ &v60_disassembler::dopUNHANDLED,
+ /* 0xC5 */ &v60_disassembler::dopUNHANDLED,
+ /* 0xC6 */ &v60_disassembler::dopC6,
+ /* 0xC7 */ &v60_disassembler::dopC7,
+ /* 0xC8 */ &v60_disassembler::dopBRK,
+ /* 0xC9 */ &v60_disassembler::dopBRKV,
+ /* 0xCA */ &v60_disassembler::dopRSR,
+ /* 0xCB */ &v60_disassembler::dopTRAPFL,
+ /* 0xCC */ &v60_disassembler::dopDISPOSE,
+ /* 0xCD */ &v60_disassembler::dopNOP,
+ /* 0xCE */ &v60_disassembler::dopUNHANDLED,
+ /* 0xCF */ &v60_disassembler::dopUNHANDLED,
+ /* 0xD0 */ &v60_disassembler::dopDECB,
+ /* 0xD1 */ &v60_disassembler::dopDECB,
+ /* 0xD2 */ &v60_disassembler::dopDECH,
+ /* 0xD3 */ &v60_disassembler::dopDECH,
+ /* 0xD4 */ &v60_disassembler::dopDECW,
+ /* 0xD5 */ &v60_disassembler::dopDECW,
+ /* 0xD6 */ &v60_disassembler::dopJMP,
+ /* 0xD7 */ &v60_disassembler::dopJMP,
+ /* 0xD8 */ &v60_disassembler::dopINCB,
+ /* 0xD9 */ &v60_disassembler::dopINCB,
+ /* 0xDA */ &v60_disassembler::dopINCH,
+ /* 0xDB */ &v60_disassembler::dopINCH,
+ /* 0xDC */ &v60_disassembler::dopINCW,
+ /* 0xDD */ &v60_disassembler::dopINCW,
+ /* 0xDE */ &v60_disassembler::dopPREPARE,
+ /* 0xDF */ &v60_disassembler::dopPREPARE,
+ /* 0xE0 */ &v60_disassembler::dopTASI,
+ /* 0xE1 */ &v60_disassembler::dopTASI,
+ /* 0xE2 */ &v60_disassembler::dopRET,
+ /* 0xE3 */ &v60_disassembler::dopRET,
+ /* 0xE4 */ &v60_disassembler::dopPOPM,
+ /* 0xE5 */ &v60_disassembler::dopPOPM,
+ /* 0xE6 */ &v60_disassembler::dopPOP,
+ /* 0xE7 */ &v60_disassembler::dopPOP,
+ /* 0xE8 */ &v60_disassembler::dopJSR,
+ /* 0xE9 */ &v60_disassembler::dopJSR,
+ /* 0xEA */ &v60_disassembler::dopRETIU,
+ /* 0xEB */ &v60_disassembler::dopRETIU,
+ /* 0xEC */ &v60_disassembler::dopPUSHM,
+ /* 0xED */ &v60_disassembler::dopPUSHM,
+ /* 0xEE */ &v60_disassembler::dopPUSH,
+ /* 0xEF */ &v60_disassembler::dopPUSH,
+ /* 0xF0 */ &v60_disassembler::dopTESTB,
+ /* 0xF1 */ &v60_disassembler::dopTESTB,
+ /* 0xF2 */ &v60_disassembler::dopTESTH,
+ /* 0xF3 */ &v60_disassembler::dopTESTH,
+ /* 0xF4 */ &v60_disassembler::dopTESTW,
+ /* 0xF5 */ &v60_disassembler::dopTESTW,
+ /* 0xF6 */ &v60_disassembler::dopGETPSW,
+ /* 0xF7 */ &v60_disassembler::dopGETPSW,
+ /* 0xF8 */ &v60_disassembler::dopTRAP,
+ /* 0xF9 */ &v60_disassembler::dopTRAP,
+ /* 0xFA */ &v60_disassembler::dopRETIS,
+ /* 0xFB */ &v60_disassembler::dopRETIS,
+ /* 0xFC */ &v60_disassembler::dopSTTASK,
+ /* 0xFD */ &v60_disassembler::dopSTTASK,
+ /* 0xFE */ &v60_disassembler::dopCLRTLB,
+ /* 0xFF */ &v60_disassembler::dopCLRTLB
};
-CPU_DISASSEMBLE(v60)
+offs_t v60_disassembler::disassemble(std::ostream &stream, offs_t pc, const data_buffer &opcodes, const data_buffer &params)
{
- rombase = oprom;
- pcbase = pc;
- return dasm_optable[oprom[0]](pc, pc+1, stream) | DASMFLAG_SUPPORTED;
+ return (this->*dasm_optable[opcodes.r8(pc)])(pc, pc+1, opcodes, stream) | SUPPORTED;
}
-CPU_DISASSEMBLE(v70)
+u32 v60_disassembler::opcode_alignment() const
{
- rombase = oprom;
- pcbase = pc;
- return dasm_optable[oprom[0]](pc, pc+1, stream) | DASMFLAG_SUPPORTED;
+ return 1;
}