Initial incomplete version of a MADE script dumper

svn-id: r32150
This commit is contained in:
Filippos Karapetis 2008-05-17 13:35:57 +00:00
parent f4cc7dfa85
commit 25e7e1999a
2 changed files with 58 additions and 1 deletions

View File

@ -183,7 +183,6 @@ ScriptInterpreter::~ScriptInterpreter() {
}
void ScriptInterpreter::runScript(int16 scriptObjectIndex) {
_vm->_quit = false;
_runningScriptObjectIndex = scriptObjectIndex;
@ -201,7 +200,64 @@ void ScriptInterpreter::runScript(int16 scriptObjectIndex) {
warning("ScriptInterpreter::runScript(%d) Unknown opcode %02X", _runningScriptObjectIndex, opcode);
}
}
}
void ScriptInterpreter::dumpScript(int16 scriptObjectIndex) {
_codeBase = _vm->_dat->getObject(scriptObjectIndex)->getData();
_codeIp = _codeBase;
int16 val = 0;
// TODO: script size
while (true) {
byte opcode = readByte();
if (opcode >= 1 && opcode <= _commandsMax) {
printf("[%04X:%04X] %s\n", _runningScriptObjectIndex, (uint) (_codeIp - _codeBase), _commands[opcode - 1].desc);
//(this->*_commands[opcode - 1].proc)();
// Handle command data
if (!strcmp(_commands[opcode - 1].desc, "cmd_branchTrue")) {
val = readInt16();
printf("Offset = %04X\n", val);
} else if (!strcmp(_commands[opcode - 1].desc, "cmd_branchFalse")) {
val = readInt16();
printf("Offset = %04X\n", val);
} else if (!strcmp(_commands[opcode - 1].desc, "cmd_branch")) {
val = readInt16();
printf("Offset = %04X\n", val);
} else if (!strcmp(_commands[opcode - 1].desc, "cmd_loadConstant")) {
val = readInt16();
printf("Constant = %04X\n", val);
} else if (!strcmp(_commands[opcode - 1].desc, "cmd_loadVariable")) {
val = readInt16();
printf("Variable = %04X\n", val);
} else if (!strcmp(_commands[opcode - 1].desc, "cmd_set")) {
val = readInt16();
printf("Variable = %04X\n", val);
} else if (!strcmp(_commands[opcode - 1].desc, "cmd_call")) {
// TODO
printf("TODO\n");
} else if (!strcmp(_commands[opcode - 1].desc, "cmd_arg") ||
!strcmp(_commands[opcode - 1].desc, "cmd_aset") ||
!strcmp(_commands[opcode - 1].desc, "cmd_tmp") ||
!strcmp(_commands[opcode - 1].desc, "cmd_tset") ||
!strcmp(_commands[opcode - 1].desc, "cmd_tspace")) {
val = readByte();
printf("argIndex = %d\n", val);
} else if (!strcmp(_commands[opcode - 1].desc, "cmd_send")) {
/*byte argc = */readByte();
// TODO
printf("TODO\n");
} else if (!strcmp(_commands[opcode - 1].desc, "cmd_extend")) {
/*byte func = */readByte();
/*byte argc = */readByte();
// TODO
printf("TODO\n");
}
} else {
warning("ScriptInterpreter::runScript(%d) Unknown opcode %02X", _runningScriptObjectIndex, opcode);
}
}
}
byte ScriptInterpreter::readByte() {

View File

@ -63,6 +63,7 @@ public:
ScriptInterpreter(MadeEngine *vm);
~ScriptInterpreter();
void runScript(int16 scriptObjectIndex);
void dumpScript(int16 scriptObjectIndex);
protected:
MadeEngine *_vm;