summaryrefslogtreecommitdiff
path: root/common.h
diff options
context:
space:
mode:
authorOxore <oxore@protonmail.com>2023-05-20 14:42:01 +0300
committerOxore <oxore@protonmail.com>2023-05-20 14:42:01 +0300
commitdc752c3b87cb998f194ab81f6f8fbdf490374474 (patch)
tree7fbaedf8c5fdf6e11f237d565dc050fc3f6b2a37 /common.h
parent935f386f61b63267bd6516a1888cf939b8eef238 (diff)
Impl data references, debuting with LEA
Diffstat (limited to 'common.h')
-rw-r--r--common.h18
1 files changed, 16 insertions, 2 deletions
diff --git a/common.h b/common.h
index aa48b81..65f7648 100644
--- a/common.h
+++ b/common.h
@@ -12,8 +12,22 @@ struct Settings {
bool raw_data_comment{};
};
-constexpr unsigned kRefRelMask = 1;
-constexpr unsigned kRefAbsMask = 2;
+using RefKindMask = unsigned;
+
+constexpr RefKindMask kRef1RelMask = (1 << 0); // For first argument
+constexpr RefKindMask kRef1AbsMask = (1 << 1); // For first argument
+constexpr RefKindMask kRef2RelMask = (1 << 2); // For second argument
+constexpr RefKindMask kRef2AbsMask = (1 << 3); // For second argument
+/// Indicates whether instruction is a call or just a branch, for any argument.
+/// Calls are BSR and JSR, branches are DBcc, Bcc and JMP.
+constexpr RefKindMask kRefCallMask = (1 << 4);
+constexpr RefKindMask kRefReadMask = (1 << 5); // For any argument
+constexpr RefKindMask kRefWriteMask = (1 << 6); // For any argument
+constexpr RefKindMask kRefRelMask = kRef1RelMask | kRef2RelMask;
+constexpr RefKindMask kRefAbsMask = kRef1AbsMask | kRef2AbsMask;
+constexpr RefKindMask kRef1Mask = kRef1RelMask | kRef1AbsMask; // For first argument
+constexpr RefKindMask kRef2Mask = kRef2RelMask | kRef2AbsMask; // For second argument
+constexpr RefKindMask kRefDataMask = kRefReadMask | kRefWriteMask;
constexpr size_t kInstructionSizeStepBytes = 2;
constexpr size_t kRomSizeBytes = 4 * 1024 * 1024;
constexpr size_t kDisasmMapSizeElements = kRomSizeBytes / kInstructionSizeStepBytes;