[Scummvm-cvs-logs] SF.net SVN: scummvm:[54275] scummvm/trunk/engines/sci

thebluegr at users.sourceforge.net thebluegr at users.sourceforge.net
Wed Nov 17 01:05:11 CET 2010


Revision: 54275
          http://scummvm.svn.sourceforge.net/scummvm/?rev=54275&view=rev
Author:   thebluegr
Date:     2010-11-17 00:05:09 +0000 (Wed, 17 Nov 2010)

Log Message:
-----------
SCI: Added the ability to display original script bytecode in the "disasm" console command

Modified Paths:
--------------
    scummvm/trunk/engines/sci/console.cpp
    scummvm/trunk/engines/sci/console.h
    scummvm/trunk/engines/sci/engine/scriptdebug.cpp

Modified: scummvm/trunk/engines/sci/console.cpp
===================================================================
--- scummvm/trunk/engines/sci/console.cpp	2010-11-16 23:06:46 UTC (rev 54274)
+++ scummvm/trunk/engines/sci/console.cpp	2010-11-17 00:05:09 UTC (rev 54275)
@@ -1210,7 +1210,7 @@
 						className,
 						PRINT_REG(temp.reg),
 						temp.script);
-			}
+			} else DebugPrintf(" Class 0x%x (not loaded; can't get name) (script %d)\n", i, temp.script);
 		}
 	}
 
@@ -2609,13 +2609,17 @@
 }
 
 bool Console::cmdDisassemble(int argc, const char **argv) {
-	if (argc != 3) {
+	if (argc < 3) {
 		DebugPrintf("Disassembles a method by name.\n");
-		DebugPrintf("Usage: %s <object> <method>\n", argv[0]);
+		DebugPrintf("Usage: %s <object> <method> <print bytecode>\n", argv[0]);
+		DebugPrintf("The last parameter, <print bytecode> is optional. If true\n");
+		DebugPrintf("or 1 is specified, the associated bytecode is shown next to\n");
+		DebugPrintf("each dissassembled command\n");
 		return true;
 	}
 
 	reg_t objAddr = NULL_REG;
+	bool printBytecode = false;
 
 	if (parse_reg_t(_engine->_gamestate, argv[1], &objAddr, false)) {
 		DebugPrintf("Invalid address passed.\n");
@@ -2642,8 +2646,11 @@
 		return true;
 	}
 
+	if (argc == 4 && (!strcmp(argv[3], "1") || !strcmp(argv[3], "true")))
+		printBytecode = true;
+
 	do {
-		addr = disassemble(_engine->_gamestate, addr, 0, 0);
+		addr = disassemble(_engine->_gamestate, addr, 0, printBytecode);
 	} while (addr.offset > 0);
 
 	return true;
@@ -2663,7 +2670,7 @@
 	reg_t vpc = NULL_REG;
 	int op_count = 1;
 	int do_bwc = 0;
-	int do_bytes = 0;
+	bool do_bytes = false;
 	int size;
 
 	if (parse_reg_t(_engine->_gamestate, argv[1], &vpc, false)) {
@@ -2679,7 +2686,7 @@
 		if (!scumm_stricmp(argv[i], "bwt"))
 			do_bwc = 1;
 		else if (!scumm_stricmp(argv[i], "bc"))
-			do_bytes = 1;
+			do_bytes = true;
 		else if (toupper(argv[i][0]) == 'C')
 			op_count = atoi(argv[i] + 1);
 		else {

Modified: scummvm/trunk/engines/sci/console.h
===================================================================
--- scummvm/trunk/engines/sci/console.h	2010-11-16 23:06:46 UTC (rev 54274)
+++ scummvm/trunk/engines/sci/console.h	2010-11-17 00:05:09 UTC (rev 54275)
@@ -36,7 +36,7 @@
 class SciEngine;
 struct List;
 
-reg_t disassemble(EngineState *s, reg_t pos, int print_bw_tag, int print_bytecode);
+reg_t disassemble(EngineState *s, reg_t pos, int print_bw_tag, bool printBytecode);
 
 class Console : public GUI::Debugger {
 public:

Modified: scummvm/trunk/engines/sci/engine/scriptdebug.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/scriptdebug.cpp	2010-11-16 23:06:46 UTC (rev 54274)
+++ scummvm/trunk/engines/sci/engine/scriptdebug.cpp	2010-11-17 00:05:09 UTC (rev 54275)
@@ -64,7 +64,7 @@
 };
 
 // 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, int print_bytecode) {
+reg_t disassemble(EngineState *s, reg_t pos, int print_bw_tag, bool printBytecode) {
 	SegmentObj *mobj = s->_segMan->getSegment(pos.segment, SEG_TYPE_SCRIPT);
 	Script *script_entity = NULL;
 	const byte *scr;
@@ -97,7 +97,7 @@
 
 	debugN("%04x:%04x: ", PRINT_REG(pos));
 
-	if (print_bytecode) {
+	if (printBytecode) {
 		if (pos.offset + bytecount > scr_size) {
 			warning("Operation arguments extend beyond end of script");
 			return retval;
@@ -335,7 +335,7 @@
 	}
 
 	debugN("Step #%d\n", s->scriptStepCounter);
-	disassemble(s, s->xs->addr.pc, 0, 1);
+	disassemble(s, s->xs->addr.pc, 0, true);
 
 	if (_debugState.runningStep) {
 		_debugState.runningStep--;


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list