aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorColin Snover2017-01-05 10:29:14 -0600
committerColin Snover2017-03-30 19:46:27 -0500
commitf4d3664d3fb529a451ef57658b443fb1c878bdfa (patch)
tree458b84d7d1a6b1ef52f016c6c411a824b21df1a0 /engines
parent3b34f17fb3f8d4f325fd8f7b10dc3a9325d72b29 (diff)
downloadscummvm-rg350-f4d3664d3fb529a451ef57658b443fb1c878bdfa.tar.gz
scummvm-rg350-f4d3664d3fb529a451ef57658b443fb1c878bdfa.tar.bz2
scummvm-rg350-f4d3664d3fb529a451ef57658b443fb1c878bdfa.zip
SCI: Replace magic numbers in reg_t handling with symbols
Diffstat (limited to 'engines')
-rw-r--r--engines/sci/engine/kernel.cpp2
-rw-r--r--engines/sci/engine/scriptdebug.cpp4
-rw-r--r--engines/sci/engine/vm.cpp10
-rw-r--r--engines/sci/engine/vm.h2
-rw-r--r--engines/sci/engine/vm_types.h12
5 files changed, 18 insertions, 12 deletions
diff --git a/engines/sci/engine/kernel.cpp b/engines/sci/engine/kernel.cpp
index 60d4ccbf22..13a836ab77 100644
--- a/engines/sci/engine/kernel.cpp
+++ b/engines/sci/engine/kernel.cpp
@@ -380,7 +380,7 @@ uint16 Kernel::findRegType(reg_t reg) {
if (!reg.getSegment())
return SIG_TYPE_INTEGER | (reg.getOffset() ? 0 : SIG_TYPE_NULL);
- if (reg.getSegment() == 0xFFFF)
+ if (reg.getSegment() == kUninitializedSegment)
return SIG_TYPE_UNINITIALIZED;
// Otherwise it's an object
diff --git a/engines/sci/engine/scriptdebug.cpp b/engines/sci/engine/scriptdebug.cpp
index d15cf83b71..971c721d6b 100644
--- a/engines/sci/engine/scriptdebug.cpp
+++ b/engines/sci/engine/scriptdebug.cpp
@@ -230,12 +230,12 @@ reg_t disassemble(EngineState *s, reg32_t pos, reg_t objAddr, bool printBWTag, b
if (opsize) {
int8 offset = (int8)scr[retval.getOffset()];
retval.incOffset(1);
- debugN("\t%02x [%04x]", 0xff & offset, 0xffff & (retval.getOffset() + offset));
+ debugN("\t%02x [%04x]", 0xff & offset, kOffsetMask & (retval.getOffset() + offset));
}
else {
int16 offset = (int16)READ_SCI11ENDIAN_UINT16(&scr[retval.getOffset()]);
retval.incOffset(2);
- debugN("\t%04x [%04x]", 0xffff & offset, 0xffff & (retval.getOffset() + offset));
+ debugN("\t%04x [%04x]", 0xffff & offset, kOffsetMask & (retval.getOffset() + offset));
}
break;
diff --git a/engines/sci/engine/vm.cpp b/engines/sci/engine/vm.cpp
index 74a2841521..a9d575b013 100644
--- a/engines/sci/engine/vm.cpp
+++ b/engines/sci/engine/vm.cpp
@@ -120,7 +120,7 @@ extern const char *opcodeNames[]; // from scriptdebug.cpp
static reg_t read_var(EngineState *s, int type, int index) {
if (validate_variable(s->variables[type], s->stack_base, type, s->variablesMax[type], index)) {
- if (s->variables[type][index].getSegment() == 0xffff) {
+ if (s->variables[type][index].getSegment() == kUninitializedSegment) {
switch (type) {
case VAR_TEMP: {
// Uninitialized read on a temp
@@ -194,7 +194,7 @@ static void write_var(EngineState *s, int type, int index, reg_t value) {
// this happens at least in sq1/room 44 (slot-machine), because a send is missing parameters, then
// those parameters are taken from uninitialized stack and afterwards they are copied back into temps
// if we don't remove the segment, we would get false-positive uninitialized reads later
- if (type == VAR_TEMP && value.getSegment() == 0xffff)
+ if (type == VAR_TEMP && value.getSegment() == kUninitializedSegment)
value.setSegment(0);
s->variables[type][index] = value;
@@ -331,7 +331,7 @@ ExecStack *send_selector(EngineState *s, reg_t send_obj, reg_t work_obj, StackPt
assert(argp[0].toUint16() == argc); // The first argument is argc
ExecStack xstack(work_obj, send_obj, curSP, argc, argp,
- 0xFFFF, curFP, selector, -1, -1, -1, -1,
+ kUninitializedSegment, curFP, selector, -1, -1, -1, -1,
origin, stackType);
if (selectorType == kSelectorVariable)
@@ -360,7 +360,7 @@ static void addKernelCallToExecStack(EngineState *s, int kernelCallNr, int kerne
// Add stack frame to indicate we're executing a callk.
// This is useful in debugger backtraces if this
// kernel function calls a script itself.
- ExecStack xstack(NULL_REG, NULL_REG, NULL, argc, argv - 1, 0xFFFF, make_reg32(0, 0),
+ ExecStack xstack(NULL_REG, NULL_REG, NULL, argc, argv - 1, kUninitializedSegment, make_reg32(0, 0),
-1, kernelCallNr, kernelSubCallNr, -1, -1, s->_executionStack.size() - 1, EXEC_STACK_TYPE_KERNEL);
s->_executionStack.push_back(xstack);
}
@@ -884,7 +884,7 @@ void run_vm(EngineState *s) {
// We shouldn't initialize temp variables at all
// We put special segment 0xFFFF in there, so that uninitialized reads can get detected
for (int i = 0; i < opparams[0]; i++)
- s->xs->sp[i] = make_reg(0xffff, 0);
+ s->xs->sp[i] = make_reg(kUninitializedSegment, 0);
s->xs->sp += opparams[0];
break;
diff --git a/engines/sci/engine/vm.h b/engines/sci/engine/vm.h
index 18549e3a0e..dbd4ee13d6 100644
--- a/engines/sci/engine/vm.h
+++ b/engines/sci/engine/vm.h
@@ -116,7 +116,7 @@ struct ExecStack {
fp = sp = sp_;
argc = argc_;
variables_argp = argp_;
- if (localsSegment_ != 0xFFFF)
+ if (localsSegment_ != kUninitializedSegment)
local_segment = localsSegment_;
else
local_segment = pc_.getSegment();
diff --git a/engines/sci/engine/vm_types.h b/engines/sci/engine/vm_types.h
index e60f52e85c..734f4d3101 100644
--- a/engines/sci/engine/vm_types.h
+++ b/engines/sci/engine/vm_types.h
@@ -30,6 +30,12 @@ namespace Sci {
// Segment ID type
typedef uint16 SegmentId;
+enum {
+ kUninitializedSegment = 0x1FFF,
+ kSegmentMask = 0x1FFF,
+ kOffsetMask = 0x7FFFF
+};
+
struct reg_t {
// Segment and offset. These should never be accessed directly
SegmentId _segment;
@@ -61,14 +67,14 @@ struct reg_t {
}
bool isPointer() const {
- return getSegment() != 0 && getSegment() != 0xFFFF;
+ return getSegment() != 0 && getSegment() != kUninitializedSegment;
}
uint16 requireUint16() const;
int16 requireSint16() const;
inline bool isInitialized() const {
- return getSegment() != 0xFFFF;
+ return getSegment() != kUninitializedSegment;
}
// Comparison operators
@@ -173,7 +179,7 @@ static inline reg_t make_reg(SegmentId segment, uint16 offset) {
return r;
}
-#define PRINT_REG(r) (0xffff) & (unsigned) (r).getSegment(), (unsigned) (r).getOffset()
+#define PRINT_REG(r) (kSegmentMask) & (unsigned) (r).getSegment(), (unsigned) (r).getOffset()
// A true 32-bit reg_t
struct reg32_t {