From 9d318497f715e7ce651714d8d09956f77d378bfc Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Wed, 17 Nov 2010 08:05:11 +0000 Subject: SCI: Unified the functionality and parameters of the disasm and disasm_addr commands svn-id: r54276 --- engines/sci/console.cpp | 37 +++++++++++++++++++++---------------- engines/sci/console.h | 2 +- engines/sci/engine/scriptdebug.cpp | 6 +++--- 3 files changed, 25 insertions(+), 20 deletions(-) (limited to 'engines') diff --git a/engines/sci/console.cpp b/engines/sci/console.cpp index fe426d3489..357ca15c40 100644 --- a/engines/sci/console.cpp +++ b/engines/sci/console.cpp @@ -2611,15 +2611,16 @@ bool Console::cmdStepCallk(int argc, const char **argv) { bool Console::cmdDisassemble(int argc, const char **argv) { if (argc < 3) { DebugPrintf("Disassembles a method by name.\n"); - DebugPrintf("Usage: %s \n", argv[0]); - DebugPrintf("The last parameter, is optional. If true\n"); - DebugPrintf("or 1 is specified, the associated bytecode is shown next to\n"); - DebugPrintf("each dissassembled command\n"); + DebugPrintf("Usage: %s \n", argv[0]); + DebugPrintf("Valid options are:\n"); + DebugPrintf(" bwt : Print byte/word tag\n"); + DebugPrintf(" bc : Print bytecode\n"); return true; } reg_t objAddr = NULL_REG; bool printBytecode = false; + bool printBWTag = false; if (parse_reg_t(_engine->_gamestate, argv[1], &objAddr, false)) { DebugPrintf("Invalid address passed.\n"); @@ -2646,11 +2647,15 @@ bool Console::cmdDisassemble(int argc, const char **argv) { return true; } - if (argc == 4 && (!strcmp(argv[3], "1") || !strcmp(argv[3], "true"))) - printBytecode = true; + for (int i = 3; i < argc; i++) { + if (!scumm_stricmp(argv[i], "bwt")) + printBytecode = true; + else if (!scumm_stricmp(argv[i], "bc")) + printBWTag = true; + } do { - addr = disassemble(_engine->_gamestate, addr, 0, printBytecode); + addr = disassemble(_engine->_gamestate, addr, printBWTag, printBytecode); } while (addr.offset > 0); return true; @@ -2668,9 +2673,9 @@ bool Console::cmdDisassembleAddress(int argc, const char **argv) { } reg_t vpc = NULL_REG; - int op_count = 1; - int do_bwc = 0; - bool do_bytes = false; + int opCount = 1; + bool printBWTag = false; + bool printBytes = false; int size; if (parse_reg_t(_engine->_gamestate, argv[1], &vpc, false)) { @@ -2684,25 +2689,25 @@ bool Console::cmdDisassembleAddress(int argc, const char **argv) { for (int i = 2; i < argc; i++) { if (!scumm_stricmp(argv[i], "bwt")) - do_bwc = 1; + printBWTag = true; else if (!scumm_stricmp(argv[i], "bc")) - do_bytes = true; + printBytes = true; else if (toupper(argv[i][0]) == 'C') - op_count = atoi(argv[i] + 1); + opCount = atoi(argv[i] + 1); else { DebugPrintf("Invalid option '%s'\n", argv[i]); return true; } } - if (op_count < 0) { + if (opCount < 0) { DebugPrintf("Invalid op_count\n"); return true; } do { - vpc = disassemble(_engine->_gamestate, vpc, do_bwc, do_bytes); - } while ((vpc.offset > 0) && (vpc.offset + 6 < size) && (--op_count)); + vpc = disassemble(_engine->_gamestate, vpc, printBWTag, printBytes); + } while ((vpc.offset > 0) && (vpc.offset + 6 < size) && (--opCount)); return true; } diff --git a/engines/sci/console.h b/engines/sci/console.h index 269ff47099..d9f1408b41 100644 --- a/engines/sci/console.h +++ b/engines/sci/console.h @@ -36,7 +36,7 @@ namespace Sci { class SciEngine; struct List; -reg_t disassemble(EngineState *s, reg_t pos, int print_bw_tag, bool printBytecode); +reg_t disassemble(EngineState *s, reg_t pos, bool printBWTag, bool printBytecode); class Console : public GUI::Debugger { public: diff --git a/engines/sci/engine/scriptdebug.cpp b/engines/sci/engine/scriptdebug.cpp index 2f1e44f1cf..303e4c8142 100644 --- a/engines/sci/engine/scriptdebug.cpp +++ b/engines/sci/engine/scriptdebug.cpp @@ -64,7 +64,7 @@ const char *opcodeNames[] = { }; // Disassembles one command from the heap, returns address of next command or 0 if a ret was encountered. -reg_t disassemble(EngineState *s, reg_t pos, int print_bw_tag, bool printBytecode) { +reg_t disassemble(EngineState *s, reg_t pos, bool printBWTag, bool printBytecode) { SegmentObj *mobj = s->_segMan->getSegment(pos.segment, SEG_TYPE_SCRIPT); Script *script_entity = NULL; const byte *scr; @@ -110,7 +110,7 @@ reg_t disassemble(EngineState *s, reg_t pos, int print_bw_tag, bool printBytecod debugN(" "); } - if (print_bw_tag) + if (printBWTag) debugN("[%c] ", opsize ? 'B' : 'W'); debugN("%s", opcodeNames[opcode]); @@ -335,7 +335,7 @@ void SciEngine::scriptDebug() { } debugN("Step #%d\n", s->scriptStepCounter); - disassemble(s, s->xs->addr.pc, 0, true); + disassemble(s, s->xs->addr.pc, false, true); if (_debugState.runningStep) { _debugState.runningStep--; -- cgit v1.2.3