summaryrefslogtreecommitdiff
path: root/src/m68k.cpp
diff options
context:
space:
mode:
authorOxore <oxore@protonmail.com>2025-01-08 00:46:44 +0300
committerOxore <oxore@protonmail.com>2025-02-01 18:26:18 +0300
commit6769fca1dd90f4e34e1fd6b2256c3795bbcaf658 (patch)
tree80899430ea776d80b98be4e198591a61f8384d16 /src/m68k.cpp
parent8340b1f42288e0143bca8a254600fb34025ec803 (diff)
WIP
Diffstat (limited to 'src/m68k.cpp')
-rw-r--r--src/m68k.cpp17
1 files changed, 14 insertions, 3 deletions
diff --git a/src/m68k.cpp b/src/m68k.cpp
index fe96ee6..248bfb3 100644
--- a/src/m68k.cpp
+++ b/src/m68k.cpp
@@ -169,7 +169,13 @@ static Arg FetchArg(
static size_t disasm_verbatim(DisasmNode &node, const uint16_t instr)
{
- node.op = Op::Raw(instr);
+ if (node.op.opcode == OpCode::kRaw8) {
+ node.op = Op::Raw8(instr >> 8);
+ node.size = 1;
+ } else {
+ node.op = Op::Raw(instr);
+ node.size = 2;
+ }
return node.size;
}
@@ -856,7 +862,7 @@ static size_t disasm_trivial(
DisasmNode &node, const OpCode opcode)
{
node.op = Op::Typical(opcode, OpSize::kNone);
- return node.size;
+ return node.size = kInstructionSizeStepBytes;
}
static size_t disasm_tas(
@@ -1661,7 +1667,7 @@ size_t DisasmNode::Disasm(const DataView &code, const Settings &s)
{
// We assume that machine have no MMU and ROM data always starts at 0
assert(this->address < code.size);
- size = kInstructionSizeStepBytes;
+ size = 0;
ref_kinds = 0;
ref1_addr = 0;
ref2_addr = 0;
@@ -1693,6 +1699,7 @@ static const char *ToString(const OpCode opcode, const Condition condition)
assert(false);
break;
case OpCode::kRaw: return ".short";
+ case OpCode::kRaw8: return ".byte";
case OpCode::kORI: return "ori";
case OpCode::kANDI: return "andi";
case OpCode::kSUBI: return "subi";
@@ -1954,6 +1961,9 @@ static size_t snprint_reg_mask_sierra(
int SNPrintArgRaw(char *const buf, const size_t bufsz, const Arg &arg)
{
+ if (arg.type == ArgType::kRaw8) {
+ return snprintf(buf, bufsz, "0x%02x", arg.ubyte);
+ }
return snprintf(buf, bufsz, "0x%04x", arg.uword);
}
@@ -1974,6 +1984,7 @@ static int SNPrintArg(
assert(false);
break;
case ArgType::kRaw:
+ case ArgType::kRaw8:
return SNPrintArgRaw(buf, bufsz, arg);
case ArgType::kDn:
if (TargetAssembler::kSierraAsm68 == target_asm) {