From fab43f0f714a3bcfc314d7da66430e75c07b2a50 Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Sat, 21 Oct 2017 18:55:40 +0200 Subject: SCI: Fix offsets in disasm for multi-param opcodes This code was assuming that retval points to the start of the next instruction, which is only true if the current parameter is the last one. This fixes op_call printing. --- engines/sci/engine/scriptdebug.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'engines/sci/engine/scriptdebug.cpp') diff --git a/engines/sci/engine/scriptdebug.cpp b/engines/sci/engine/scriptdebug.cpp index bae1fb4757..93902965d7 100644 --- a/engines/sci/engine/scriptdebug.cpp +++ b/engines/sci/engine/scriptdebug.cpp @@ -260,7 +260,7 @@ reg_t disassemble(EngineState *s, reg32_t pos, const Object *obj, bool printBWTa retval.incOffset(2); } - const uint32 offset = findOffset(param_value, script_entity, retval.getOffset()); + const uint32 offset = findOffset(param_value, script_entity, pos.getOffset() + bytecount); reg_t addr; addr.setSegment(retval.getSegment()); addr.setOffset(offset); @@ -277,11 +277,11 @@ reg_t disassemble(EngineState *s, reg32_t pos, const Object *obj, bool printBWTa if (opsize) { int8 offset = (int8)scr[retval.getOffset()]; retval.incOffset(1); - debugN("\t%02x [%04x]", 0xff & offset, kOffsetMask & (retval.getOffset() + offset)); + debugN("\t%02x [%04x]", 0xff & offset, kOffsetMask & (pos.getOffset() + bytecount + offset)); } else { int16 offset = (int16)READ_SCI11ENDIAN_UINT16(&scr[retval.getOffset()]); retval.incOffset(2); - debugN("\t%04x [%04x]", 0xffff & offset, kOffsetMask & (retval.getOffset() + offset)); + debugN("\t%04x [%04x]", 0xffff & offset, kOffsetMask & (pos.getOffset() + bytecount + offset)); } break; -- cgit v1.2.3