aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
Diffstat (limited to 'engines')
-rw-r--r--engines/director/lingo/lingo-bytecode.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/engines/director/lingo/lingo-bytecode.cpp b/engines/director/lingo/lingo-bytecode.cpp
index 64fc354cb5..086f61de4f 100644
--- a/engines/director/lingo/lingo-bytecode.cpp
+++ b/engines/director/lingo/lingo-bytecode.cpp
@@ -83,6 +83,11 @@ void Lingo::addCodeV4(Common::SeekableSubReadStreamEndian &stream, ScriptType ty
_currentEntityId = id;
_scriptContexts[type][id] = _currentScriptContext;
+ if (debugChannelSet(5, kDebugLoading)) {
+ debugC(5, kDebugLoading, "Lscr header:");
+ stream.hexdump(0x5c);
+ }
+
// read the Lscr header!
// unk1
for (uint32 i = 0; i < 0x10; i++) {
@@ -117,6 +122,12 @@ void Lingo::addCodeV4(Common::SeekableSubReadStreamEndian &stream, ScriptType ty
uint32 constsStoreOffset = constsOffset + 6 * constsCount;
uint32 constsStoreSize = stream.size() - constsStoreOffset;
stream.seek(constsStoreOffset);
+
+ if (debugChannelSet(5, kDebugLoading)) {
+ debugC(5, kDebugLoading, "Lscr consts store:");
+ stream.hexdump(constsStoreSize);
+ }
+
byte *constsStore = (byte *)malloc(constsStoreSize);
stream.read(constsStore, constsStoreSize);
@@ -193,6 +204,11 @@ void Lingo::addCodeV4(Common::SeekableSubReadStreamEndian &stream, ScriptType ty
// read each entry in the function table.
stream.seek(functionsOffset);
for (uint16 i = 0; i < functionsCount; i++) {
+ if (debugChannelSet(5, kDebugLoading)) {
+ debugC(5, kDebugLoading, "Function %d header:", i);
+ stream.hexdump(0x2a);
+ }
+
_currentScriptFunction = i;
_currentScriptContext->functions.push_back(new ScriptData);
_currentScript = _currentScriptContext->functions[_currentScriptFunction];
@@ -223,6 +239,11 @@ void Lingo::addCodeV4(Common::SeekableSubReadStreamEndian &stream, ScriptType ty
continue;
}
+ if (debugChannelSet(5, kDebugLoading)) {
+ debugC(5, kDebugLoading, "Function %d code:", i);
+ Common::hexdump(codeStore, length, 16, startOffset);
+ }
+
uint16 pointer = startOffset - codeStoreOffset;
Common::Array<uint32> offsetList;
while (pointer < startOffset + length - codeStoreOffset) {
@@ -254,10 +275,12 @@ void Lingo::addCodeV4(Common::SeekableSubReadStreamEndian &stream, ScriptType ty
} else {
// unimplemented instruction
if (opcode < 0x40) { // 1 byte instruction
+ debugC(5, kDebugLingoCompile, "Unimplemented opcode: 0x%02x", opcode);
offsetList.push_back(_currentScript->size());
g_lingo->code1(Lingo::c_unk);
g_lingo->codeInt(opcode);
} else if (opcode < 0x80) { // 2 byte instruction
+ debugC(5, kDebugLingoCompile, "Unimplemented opcode: 0x%02x (%d)", opcode, (uint)codeStore[pointer]);
offsetList.push_back(_currentScript->size());
g_lingo->code1(Lingo::c_unk1);
g_lingo->codeInt(opcode);
@@ -265,6 +288,7 @@ void Lingo::addCodeV4(Common::SeekableSubReadStreamEndian &stream, ScriptType ty
g_lingo->codeInt((uint)codeStore[pointer]);
pointer += 1;
} else { // 3 byte instruction
+ debugC(5, kDebugLingoCompile, "Unimplemented opcode: 0x%02x (%d, %d)", opcode, (uint)codeStore[pointer], (uint)codeStore[pointer+1]);
offsetList.push_back(_currentScript->size());
g_lingo->code1(Lingo::c_unk2);
g_lingo->codeInt(opcode);
@@ -286,6 +310,11 @@ void Lingo::addNamesV4(Common::SeekableSubReadStreamEndian &stream) {
debugC(1, kDebugLingoCompile, "Add V4 script name index");
// read the Lnam header!
+ if (debugChannelSet(5, kDebugLoading)) {
+ debugC(5, kDebugLoading, "Lnam header:");
+ stream.hexdump(0x14);
+ }
+
stream.readUint16();
stream.readUint16();
stream.readUint16();