aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFilippos Karapetis2009-07-08 13:08:51 +0000
committerFilippos Karapetis2009-07-08 13:08:51 +0000
commit5ca94c5cce2ca0b42bb678835d9e141456bbae5b (patch)
treee0703cf1f64c321452e9496201ea040ade11aa7e
parentd351c7b9cb6cb46da9bb141c9ca90aba021c1602 (diff)
downloadscummvm-rg350-5ca94c5cce2ca0b42bb678835d9e141456bbae5b.tar.gz
scummvm-rg350-5ca94c5cce2ca0b42bb678835d9e141456bbae5b.tar.bz2
scummvm-rg350-5ca94c5cce2ca0b42bb678835d9e141456bbae5b.zip
- Moved printObject inside the Console class
- Enabled the parts where disassemble() is called svn-id: r42263
-rw-r--r--engines/sci/console.cpp41
-rw-r--r--engines/sci/console.h4
-rw-r--r--engines/sci/engine/vm.cpp5
3 files changed, 24 insertions, 26 deletions
diff --git a/engines/sci/console.cpp b/engines/sci/console.cpp
index 667a39c063..7f20e4013d 100644
--- a/engines/sci/console.cpp
+++ b/engines/sci/console.cpp
@@ -1927,7 +1927,7 @@ bool Console::cmdViewReference(int argc, const char **argv) {
break;
case KSIG_OBJECT:
DebugPrintf("object\n");
- printObject(_vm->_gamestate, reg);
+ printObject(reg);
break;
case KSIG_REF: {
int size;
@@ -1982,21 +1982,21 @@ bool Console::cmdViewObject(int argc, const char **argv) {
}
DebugPrintf("Information on the object at the given address:\n");
- printObject(_vm->_gamestate, addr);
+ printObject(addr);
return true;
}
bool Console::cmdViewActiveObject(int argc, const char **argv) {
DebugPrintf("Information on the currently active object or class:\n");
- printObject(_vm->_gamestate, scriptState.xs->objp);
+ printObject(scriptState.xs->objp);
return true;
}
bool Console::cmdViewAccumulatorObject(int argc, const char **argv) {
DebugPrintf("Information on the currently active object or class at the address indexed by the accumulator:\n");
- printObject(_vm->_gamestate, _vm->_gamestate->r_acc);
+ printObject(_vm->_gamestate->r_acc);
return true;
}
@@ -2195,8 +2195,7 @@ bool Console::cmdDissassemble(int argc, const char **argv) {
}
do {
- // TODO
- //addr = disassemble(_vm->_gamestate, addr, 0, 0);
+ addr = disassemble(_vm->_gamestate, addr, 0, 0);
} while (addr.offset > 0);
return true;
@@ -2247,9 +2246,7 @@ bool Console::cmdDissassembleAddress(int argc, const char **argv) {
}
do {
- // TODO
- //vpc = disassemble(_vm->_gamestate, vpc, do_bwc, do_bytes);
-
+ vpc = disassemble(_vm->_gamestate, vpc, do_bwc, do_bytes);
} while ((vpc.offset > 0) && (vpc.offset + 6 < size) && (--op_count));
return true;
@@ -3029,47 +3026,47 @@ int Console::printNode(reg_t addr) {
return 0;
}
-int printObject(EngineState *s, reg_t pos) {
+int Console::printObject(reg_t pos) {
+ EngineState *s = _vm->_gamestate; // for the several defines in this function
Object *obj = obj_get(s, pos);
Object *var_container = obj;
int i;
- Console *con = ((SciEngine *)g_engine)->getSciDebugger();
if (!obj) {
- con->DebugPrintf("[%04x:%04x]: Not an object.", PRINT_REG(pos));
+ DebugPrintf("[%04x:%04x]: Not an object.", PRINT_REG(pos));
return 1;
}
// Object header
- printf("[%04x:%04x] %s : %3d vars, %3d methods\n", PRINT_REG(pos), obj_get_name(s, pos),
+ DebugPrintf("[%04x:%04x] %s : %3d vars, %3d methods\n", PRINT_REG(pos), obj_get_name(s, pos),
obj->_variables.size(), obj->methods_nr);
if (!(obj->_variables[SCRIPT_INFO_SELECTOR].offset & SCRIPT_INFO_CLASS))
var_container = obj_get(s, obj->_variables[SCRIPT_SUPERCLASS_SELECTOR]);
- printf(" -- member variables:\n");
+ DebugPrintf(" -- member variables:\n");
for (i = 0; (uint)i < obj->_variables.size(); i++) {
printf(" ");
if (i < var_container->variable_names_nr) {
- printf("[%03x] %s = ", VM_OBJECT_GET_VARSELECTOR(var_container, i), selector_name(s, VM_OBJECT_GET_VARSELECTOR(var_container, i)));
+ DebugPrintf("[%03x] %s = ", VM_OBJECT_GET_VARSELECTOR(var_container, i), selector_name(s, VM_OBJECT_GET_VARSELECTOR(var_container, i)));
} else
- printf("p#%x = ", i);
+ DebugPrintf("p#%x = ", i);
reg_t val = obj->_variables[i];
- printf("%04x:%04x", PRINT_REG(val));
+ DebugPrintf("%04x:%04x", PRINT_REG(val));
Object *ref = obj_get(s, val);
if (ref)
- printf(" (%s)", obj_get_name(s, val));
+ DebugPrintf(" (%s)", obj_get_name(s, val));
- printf("\n");
+ DebugPrintf("\n");
}
- printf(" -- methods:\n");
+ DebugPrintf(" -- methods:\n");
for (i = 0; i < obj->methods_nr; i++) {
reg_t fptr = VM_OBJECT_READ_FUNCTION(obj, i);
- printf(" [%03x] %s = %04x:%04x\n", VM_OBJECT_GET_FUNCSELECTOR(obj, i), selector_name(s, VM_OBJECT_GET_FUNCSELECTOR(obj, i)), PRINT_REG(fptr));
+ DebugPrintf(" [%03x] %s = %04x:%04x\n", VM_OBJECT_GET_FUNCSELECTOR(obj, i), selector_name(s, VM_OBJECT_GET_FUNCSELECTOR(obj, i)), PRINT_REG(fptr));
}
if (s->seg_manager->_heap[pos.segment]->getType() == MEM_OBJ_SCRIPT)
- printf("\nOwner script:\t%d\n", s->seg_manager->getScript(pos.segment)->nr);
+ DebugPrintf("\nOwner script:\t%d\n", s->seg_manager->getScript(pos.segment)->nr);
return 0;
}
diff --git a/engines/sci/console.h b/engines/sci/console.h
index bc07ddb530..8d1299dd1e 100644
--- a/engines/sci/console.h
+++ b/engines/sci/console.h
@@ -37,7 +37,7 @@ struct List;
// Refer to the "addresses" command on how to pass address parameters
int parse_reg_t(EngineState *s, const char *str, reg_t *dest);
-int printObject(EngineState *s, reg_t pos);
+reg_t disassemble(EngineState *s, reg_t pos, int print_bw_tag, int print_bytecode);
class Console : public GUI::Debugger {
public:
@@ -46,6 +46,8 @@ public:
void preEnter();
void postEnter();
+ int printObject(reg_t pos);
+
private:
// General
bool cmdHelp(int argc, const char **argv);
diff --git a/engines/sci/engine/vm.cpp b/engines/sci/engine/vm.cpp
index 9bbdb90e0c..e0ac60f152 100644
--- a/engines/sci/engine/vm.cpp
+++ b/engines/sci/engine/vm.cpp
@@ -1972,8 +1972,6 @@ static EngineState *_game_run(EngineState *&s, int restoring) {
return s;
}
-int printObject(EngineState *s, reg_t pos);
-
int game_run(EngineState **_s) {
EngineState *s = *_s;
@@ -1982,7 +1980,8 @@ int game_run(EngineState **_s) {
// Now: Register the first element on the execution stack-
if (!send_selector(s, s->game_obj, s->game_obj, s->stack_base, 2, s->stack_base)) {
- printObject(s, s->game_obj);
+ Console *con = ((SciEngine *)g_engine)->getSciDebugger();
+ con->printObject(s->game_obj);
warning("Failed to run the game! Aborting...");
return 1;
}