diff options
author | Oxore <oxore@protonmail.com> | 2025-01-08 00:46:44 +0300 |
---|---|---|
committer | Oxore <oxore@protonmail.com> | 2025-02-01 18:26:18 +0300 |
commit | 6769fca1dd90f4e34e1fd6b2256c3795bbcaf658 (patch) | |
tree | 80899430ea776d80b98be4e198591a61f8384d16 /src/m68k.cpp | |
parent | 8340b1f42288e0143bca8a254600fb34025ec803 (diff) |
WIP
Diffstat (limited to 'src/m68k.cpp')
-rw-r--r-- | src/m68k.cpp | 17 |
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) { |