diff options
author | Vladimir Menshakov | 2011-06-12 11:44:34 +0400 |
---|---|---|
committer | Alyssa Milburn | 2011-06-15 17:34:16 +0200 |
commit | 99a4bb86ddc6ab58d11c1cbab2ca2ff01aa8f835 (patch) | |
tree | 5ceaa725d277d0899ac5bccbde9cc300557e59d7 /engines/dreamweb/runtime.h | |
parent | 2bcc06f9eae89dcdc45a5430aa0e0395c2fa576e (diff) | |
download | scummvm-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.h | 22 |
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) { |