[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