summaryrefslogtreecommitdiff
path: root/src/m68k.h
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.h
parent8340b1f42288e0143bca8a254600fb34025ec803 (diff)
WIP
Diffstat (limited to 'src/m68k.h')
-rw-r--r--src/m68k.h12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/m68k.h b/src/m68k.h
index 40bdf1f..8fe10ee 100644
--- a/src/m68k.h
+++ b/src/m68k.h
@@ -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;