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.h | |
parent | 8340b1f42288e0143bca8a254600fb34025ec803 (diff) |
WIP
Diffstat (limited to 'src/m68k.h')
-rw-r--r-- | src/m68k.h | 12 |
1 files changed, 12 insertions, 0 deletions
@@ -22,6 +22,7 @@ enum class OpSize: int { enum class OpCode: uint8_t { kNone, kRaw, ///< Emits ".short" + kRaw8, ///< Emits ".byte" kORI, kANDI, kSUBI, @@ -152,6 +153,7 @@ enum class ArgType: uint8_t { kSR, kUSP, kRaw, ///< Emits "0xXXXX" for ".short" + kRaw8, ///< Emits "0xXX" for ".byte" }; struct D8AnPCXiAddr { @@ -181,6 +183,7 @@ struct Arg { union { int32_t lword{}; ///< kLong, kWord, kDisplacement, kImmediate uint16_t uword; ///< kRegMask, kRaw + uint8_t ubyte; ///< kRaw8 uint8_t xn; ///< kDn, kAn, kAnAddr, kAnAddrIncr, kAnAddrDecr D16AnPCAddr d16_an; ///< kD16AnAddr D16AnPCAddr d16_pc; ///< kD16PCAddr @@ -311,6 +314,11 @@ struct Arg { a.uword = instr; return a; } + static constexpr auto Raw8(const uint16_t instr) { + Arg a{{ArgType::kRaw8}, false, {0}}; + a.ubyte = instr; + return a; + } }; struct Op { @@ -332,6 +340,10 @@ struct Op { { return Op::Typical(OpCode::kRaw, OpSize::kNone, Arg::Raw(instr)); } + static constexpr auto Raw8(const uint8_t data) + { + return Op::Typical(OpCode::kRaw8, OpSize::kNone, Arg::Raw(data)); + } }; constexpr size_t kMnemonicBufferSize = 10; |