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

thebluegr at users.sourceforge.net thebluegr at users.sourceforge.net
Mon Jun 7 17:14:59 CEST 2010


Revision: 49486
          http://scummvm.svn.sourceforge.net/scummvm/?rev=49486&view=rev
Author:   thebluegr
Date:     2010-06-07 15:14:58 +0000 (Mon, 07 Jun 2010)

Log Message:
-----------
Fixed regression from commit #49465 - there are in fact two restAdjust variables, the current and global one

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

Modified: scummvm/trunk/engines/sci/console.cpp
===================================================================
--- scummvm/trunk/engines/sci/console.cpp	2010-06-07 13:47:27 UTC (rev 49485)
+++ scummvm/trunk/engines/sci/console.cpp	2010-06-07 15:14:58 UTC (rev 49486)
@@ -597,7 +597,7 @@
 bool Console::cmdRegisters(int argc, const char **argv) {
 	EngineState *s = _engine->_gamestate;
 	DebugPrintf("Current register values:\n");
-	DebugPrintf("acc=%04x:%04x prev=%04x:%04x &rest=%x\n", PRINT_REG(s->r_acc), PRINT_REG(s->r_prev), s->restAdjust);
+	DebugPrintf("acc=%04x:%04x prev=%04x:%04x &rest=%x\n", PRINT_REG(s->r_acc), PRINT_REG(s->r_prev), s->restAdjustCur);
 
 	if (!s->_executionStack.empty()) {
 		DebugPrintf("pc=%04x:%04x obj=%04x:%04x fp=ST:%04x sp=ST:%04x\n",

Modified: scummvm/trunk/engines/sci/engine/scriptdebug.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/scriptdebug.cpp	2010-06-07 13:47:27 UTC (rev 49485)
+++ scummvm/trunk/engines/sci/engine/scriptdebug.cpp	2010-06-07 15:14:58 UTC (rev 49486)
@@ -205,12 +205,12 @@
 
 	if (pos == s->xs->addr.pc) { // Extra information if debugging the current opcode
 		if (opcode == op_callk) {
-			int stackframe = (scr[pos.offset + 2] >> 1) + (s->restAdjust);
+			int stackframe = (scr[pos.offset + 2] >> 1) + (s->restAdjustCur);
 			int argc = ((s->xs->sp)[- stackframe - 1]).offset;
 			bool oldScriptHeader = (getSciVersion() == SCI_VERSION_0_EARLY);
 
 			if (!oldScriptHeader)
-				argc += (s->restAdjust);
+				argc += (s->restAdjustCur);
 
 			printf(" Kernel params: (");
 
@@ -221,7 +221,7 @@
 			}
 			printf(")\n");
 		} else if ((opcode == op_send) || (opcode == op_self)) {
-			int restmod = s->restAdjust;
+			int restmod = s->restAdjustCur;
 			int stackframe = (scr[pos.offset + 1] >> 1) + restmod;
 			reg_t *sb = s->xs->sp;
 			uint16 selector;

Modified: scummvm/trunk/engines/sci/engine/state.h
===================================================================
--- scummvm/trunk/engines/sci/engine/state.h	2010-06-07 13:47:27 UTC (rev 49485)
+++ scummvm/trunk/engines/sci/engine/state.h	2010-06-07 15:14:58 UTC (rev 49486)
@@ -143,6 +143,7 @@
 
 	reg_t r_acc; /**< Accumulator */
 	int16 restAdjust; /**< &rest register (only used for save games) */
+	int16 restAdjustCur; /**< current &rest register (only used for save games) */
 	reg_t r_prev; /**< previous comparison result */
 
 	StackPtr stack_base; /**< Pointer to the least stack element */

Modified: scummvm/trunk/engines/sci/engine/vm.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/vm.cpp	2010-06-07 13:47:27 UTC (rev 49485)
+++ scummvm/trunk/engines/sci/engine/vm.cpp	2010-06-07 15:14:58 UTC (rev 49486)
@@ -718,7 +718,7 @@
 	StackPtr s_temp; // Temporary stack pointer
 	int16 opparams[4]; // opcode parameters
 
-	s->restAdjust = s->restAdjust;
+	s->restAdjustCur = s->restAdjust;
 	// &rest adjusts the parameter count by this value
 	// Current execution data:
 	s->xs = &(s->_executionStack.back());
@@ -1116,17 +1116,17 @@
 
 		case op_call: { // 0x20 (32)
 			int argc = (opparams[1] >> 1) // Given as offset, but we need count
-			           + 1 + s->restAdjust;
+			           + 1 + s->restAdjustCur;
 			StackPtr call_base = s->xs->sp - argc;
-			s->xs->sp[1].offset += s->restAdjust;
+			s->xs->sp[1].offset += s->restAdjustCur;
 
 			xs_new = add_exec_stack_entry(s->_executionStack, make_reg(s->xs->addr.pc.segment,
 											s->xs->addr.pc.offset + opparams[0]),
 											s->xs->sp, s->xs->objp,
-											(validate_arithmetic(*call_base)) + s->restAdjust,
+											(validate_arithmetic(*call_base)) + s->restAdjustCur,
 											call_base, NULL_SELECTOR, s->xs->objp,
 											s->_executionStack.size()-1, s->xs->local_segment);
-			s->restAdjust = 0; // Used up the &rest adjustment
+			s->restAdjustCur = 0; // Used up the &rest adjustment
 			s->xs->sp = call_base;
 
 			s->_executionStackPosChanged = true;
@@ -1140,19 +1140,19 @@
 
 			bool oldScriptHeader = (getSciVersion() == SCI_VERSION_0_EARLY);
 			if (!oldScriptHeader) {
-				s->xs->sp -= s->restAdjust;
-				s->restAdjust = 0; // We just used up the s->restAdjust, remember?
+				s->xs->sp -= s->restAdjustCur;
+				s->restAdjust = 0; // We just used up the s->restAdjustCur, remember?
 			}
 
 			int argc = validate_arithmetic(s->xs->sp[0]);
 
 			if (!oldScriptHeader)
-				argc += s->restAdjust;
+				argc += s->restAdjustCur;
 
 			callKernelFunc(s, opparams[0], argc);
 
 			if (!oldScriptHeader)
-				s->restAdjust = s->restAdjust;
+				s->restAdjustCur = s->restAdjust;
 
 			// Calculate xs again: The kernel function might
 			// have spawned a new VM
@@ -1163,27 +1163,27 @@
 		}
 
 		case op_callb: // 0x22 (34)
-			temp = ((opparams[1] >> 1) + s->restAdjust + 1);
+			temp = ((opparams[1] >> 1) + s->restAdjustCur + 1);
 			s_temp = s->xs->sp;
 			s->xs->sp -= temp;
 
-			s->xs->sp[0].offset += s->restAdjust;
+			s->xs->sp[0].offset += s->restAdjustCur;
 			xs_new = execute_method(s, 0, opparams[0], s_temp, s->xs->objp,
 									s->xs->sp[0].offset, s->xs->sp);
-			s->restAdjust = 0; // Used up the &rest adjustment
+			s->restAdjustCur = 0; // Used up the &rest adjustment
 			if (xs_new)    // in case of error, keep old stack
 				s->_executionStackPosChanged = true;
 			break;
 
 		case op_calle: // 0x23 (35)
-			temp = ((opparams[2] >> 1) + s->restAdjust + 1);
+			temp = ((opparams[2] >> 1) + s->restAdjustCur + 1);
 			s_temp = s->xs->sp;
 			s->xs->sp -= temp;
 
-			s->xs->sp[0].offset += s->restAdjust;
+			s->xs->sp[0].offset += s->restAdjustCur;
 			xs_new = execute_method(s, opparams[0], opparams[1], s_temp, s->xs->objp,
 									s->xs->sp[0].offset, s->xs->sp);
-			s->restAdjust = 0; // Used up the &rest adjustment
+			s->restAdjustCur = 0; // Used up the &rest adjustment
 
 			if (xs_new)  // in case of error, keep old stack
 				s->_executionStackPosChanged = true;
@@ -1201,7 +1201,7 @@
 					s->_executionStack.pop_back();
 
 					s->_executionStackPosChanged = true;
-					s->restAdjust = s->restAdjust; // Update &rest
+					s->restAdjust = s->restAdjustCur; // Update &rest
 					return; // "Hard" return
 				}
 
@@ -1234,16 +1234,16 @@
 
 		case op_send: // 0x25 (37)
 			s_temp = s->xs->sp;
-			s->xs->sp -= ((opparams[0] >> 1) + s->restAdjust); // Adjust stack
+			s->xs->sp -= ((opparams[0] >> 1) + s->restAdjustCur); // Adjust stack
 
-			s->xs->sp[1].offset += s->restAdjust;
+			s->xs->sp[1].offset += s->restAdjustCur;
 			xs_new = send_selector(s, s->r_acc, s->r_acc, s_temp,
-									(int)(opparams[0] >> 1) + (uint16)s->restAdjust, s->xs->sp);
+									(int)(opparams[0] >> 1) + (uint16)s->restAdjustCur, s->xs->sp);
 
 			if (xs_new && xs_new != s->xs)
 				s->_executionStackPosChanged = true;
 
-			s->restAdjust = 0;
+			s->restAdjustCur = 0;
 
 			break;
 
@@ -1263,17 +1263,17 @@
 
 		case op_self: // 0x2a (42)
 			s_temp = s->xs->sp;
-			s->xs->sp -= ((opparams[0] >> 1) + s->restAdjust); // Adjust stack
+			s->xs->sp -= ((opparams[0] >> 1) + s->restAdjustCur); // Adjust stack
 
-			s->xs->sp[1].offset += s->restAdjust;
+			s->xs->sp[1].offset += s->restAdjustCur;
 			xs_new = send_selector(s, s->xs->objp, s->xs->objp,
-									s_temp, (int)(opparams[0] >> 1) + (uint16)s->restAdjust,
+									s_temp, (int)(opparams[0] >> 1) + (uint16)s->restAdjustCur,
 									s->xs->sp);
 
 			if (xs_new && xs_new != s->xs)
 				s->_executionStackPosChanged = true;
 
-			s->restAdjust = 0;
+			s->restAdjustCur = 0;
 			break;
 
 		case op_super: // 0x2b (43)
@@ -1283,24 +1283,24 @@
 				error("[VM]: Invalid superclass in object");
 			else {
 				s_temp = s->xs->sp;
-				s->xs->sp -= ((opparams[1] >> 1) + s->restAdjust); // Adjust stack
+				s->xs->sp -= ((opparams[1] >> 1) + s->restAdjustCur); // Adjust stack
 
-				s->xs->sp[1].offset += s->restAdjust;
+				s->xs->sp[1].offset += s->restAdjustCur;
 				xs_new = send_selector(s, r_temp, s->xs->objp, s_temp,
-										(int)(opparams[1] >> 1) + (uint16)s->restAdjust,
+										(int)(opparams[1] >> 1) + (uint16)s->restAdjustCur,
 										s->xs->sp);
 
 				if (xs_new && xs_new != s->xs)
 					s->_executionStackPosChanged = true;
 
-				s->restAdjust = 0;
+				s->restAdjustCur = 0;
 			}
 
 			break;
 
 		case op_rest: // 0x2c (44)
 			temp = (uint16) opparams[0]; // First argument
-			s->restAdjust = MAX<int16>(s->xs->argc - temp + 1, 0); // +1 because temp counts the paramcount while argc doesn't
+			s->restAdjustCur = MAX<int16>(s->xs->argc - temp + 1, 0); // +1 because temp counts the paramcount while argc doesn't
 
 			for (; temp <= s->xs->argc; temp++)
 				PUSH32(s->xs->variables_argp[temp]);


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