[Scummvm-cvs-logs] SF.net SVN: scummvm:[47683] scummvm/trunk/engines/sci/engine/vm.cpp

lskovlun at users.sourceforge.net lskovlun at users.sourceforge.net
Fri Jan 29 23:17:27 CET 2010


Revision: 47683
          http://scummvm.svn.sourceforge.net/scummvm/?rev=47683&view=rev
Author:   lskovlun
Date:     2010-01-29 22:17:27 +0000 (Fri, 29 Jan 2010)

Log Message:
-----------
SCI: uge? and ult? opcodes now work correctly when comparing pointers with 1000.

Modified Paths:
--------------
    scummvm/trunk/engines/sci/engine/vm.cpp

Modified: scummvm/trunk/engines/sci/engine/vm.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/vm.cpp	2010-01-29 22:02:28 UTC (rev 47682)
+++ scummvm/trunk/engines/sci/engine/vm.cpp	2010-01-29 22:17:27 UTC (rev 47683)
@@ -896,7 +896,9 @@
 		case op_uge_: // 0x14 (20)
 			s->r_prev = s->r_acc;
 			r_temp = POP32();
-			if (r_temp.segment && s->r_acc.segment)
+			if (s->r_acc == make_reg(0, 0x3e8))
+				s->r_acc = make_reg(0, r_temp.segment);
+			else if (r_temp.segment && s->r_acc.segment)
 				s->r_acc = make_reg(0, (r_temp.segment == s->r_acc.segment) && r_temp.offset >= s->r_acc.offset);
 			else
 				s->r_acc = ACC_ARITHMETIC_L(validate_arithmetic(r_temp) >= /*acc*/);
@@ -905,7 +907,9 @@
 		case op_ult_: // 0x15 (21)
 			s->r_prev = s->r_acc;
 			r_temp = POP32();
-			if (r_temp.segment && s->r_acc.segment)
+			if (s->r_acc == make_reg(0, 0x3e8))
+				s->r_acc = make_reg(0, !r_temp.segment);
+			else if (r_temp.segment && s->r_acc.segment)
 				s->r_acc = make_reg(0, (r_temp.segment == s->r_acc.segment) && r_temp.offset < s->r_acc.offset);
 			else
 				s->r_acc = ACC_ARITHMETIC_L(validate_arithmetic(r_temp) < /*acc*/);


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