aboutsummaryrefslogtreecommitdiff
path: root/engines/dreamweb/runtime.h
diff options
context:
space:
mode:
authorVladimir Menshakov2011-06-12 11:44:34 +0400
committerAlyssa Milburn2011-06-15 17:34:16 +0200
commit99a4bb86ddc6ab58d11c1cbab2ca2ff01aa8f835 (patch)
tree5ceaa725d277d0899ac5bccbde9cc300557e59d7 /engines/dreamweb/runtime.h
parent2bcc06f9eae89dcdc45a5430aa0e0395c2fa576e (diff)
downloadscummvm-rg350-99a4bb86ddc6ab58d11c1cbab2ca2ff01aa8f835.tar.gz
scummvm-rg350-99a4bb86ddc6ab58d11c1cbab2ca2ff01aa8f835.tar.bz2
scummvm-rg350-99a4bb86ddc6ab58d11c1cbab2ca2ff01aa8f835.zip
DREAMWEB: fixed invalid generated jump instructions
Diffstat (limited to 'engines/dreamweb/runtime.h')
-rw-r--r--engines/dreamweb/runtime.h22
1 files changed, 10 insertions, 12 deletions
diff --git a/engines/dreamweb/runtime.h b/engines/dreamweb/runtime.h
index 9890f950b6..d92a8d6a2b 100644
--- a/engines/dreamweb/runtime.h
+++ b/engines/dreamweb/runtime.h
@@ -166,11 +166,9 @@ struct Flags {
inline bool z() const { return _z; }
inline bool c() const { return _c; }
inline bool s() const { return _s; }
- //complex flags:
- inline bool g() const { return !_z && _o; }
- inline bool ge() const { return _o; }
- inline bool l() const { return !_o; }
- inline bool le() const { return _z || !_o; }
+
+ inline bool l() const { return _o; }
+ inline bool le() const { return _o || _z; }
inline void update(uint8 v) {
_s = v & 0x80;
@@ -270,7 +268,7 @@ public:
inline void _add(uint8 &dst, uint8 src) {
unsigned r = (unsigned)dst + src;
- flags.update_o(r, dst);
+ flags.update_o((uint8)r, dst);
flags._c = r >= 0x100;
dst = r;
flags.update(dst);
@@ -278,21 +276,21 @@ public:
inline void _add(uint16 &dst, uint16 src) {
unsigned r = (unsigned)dst + src;
- flags.update_o(r, dst);
+ flags.update_o((uint16)r, dst);
flags._c = r >= 0x10000;
dst = r;
flags.update(dst);
}
inline void _sub(uint8 &dst, uint8 src) {
- flags.update_o(dst - src, dst);
+ flags.update_o(uint8(dst - src), dst);
flags._c = dst < src;
dst -= src;
flags.update(dst);
}
inline void _sub(uint16 &dst, uint16 src) {
- flags.update_o(dst - src, dst);
+ flags.update_o(uint16(dst - src), dst);
flags._c = dst < src;
dst -= src;
flags.update(dst);
@@ -383,21 +381,21 @@ public:
inline void _mul(uint8 src) {
unsigned r = unsigned(al) * src;
- flags.update_o(r, al);
ax = (uint16)r;
flags._c = r >= 0x10000;
flags._z = r == 0;
flags._s = r & 0x8000;
+ flags._o = ah != 0;
}
inline void _mul(uint16 src) {
unsigned r = unsigned(ax) * src; //assuming here that we have at least 32 bits
- flags.update_o(r, ax);
dx = (r >> 16) & 0xffff;
ax = r & 0xffff;
- flags._c = false;//fixme
+ flags._c = false;
flags._z = r == 0;
flags._s = r & 0x80000000;
+ flags._o = dx != 0;
}
inline void _neg(uint8 &src) {