diff options
author | Vladimir | 2011-06-08 03:12:14 +0400 |
---|---|---|
committer | Alyssa Milburn | 2011-06-15 17:32:56 +0200 |
commit | 3595e9b675b4f18570c589bd759a20ca28d469b8 (patch) | |
tree | fe689da80ed09d45bc3f18de02daa6ed47879ad3 /engines/dreamweb/runtime.h | |
parent | 2fa141335de2576e49dbb4c8d4cdadffacd68c71 (diff) | |
download | scummvm-rg350-3595e9b675b4f18570c589bd759a20ca28d469b8.tar.gz scummvm-rg350-3595e9b675b4f18570c589bd759a20ca28d469b8.tar.bz2 scummvm-rg350-3595e9b675b4f18570c589bd759a20ca28d469b8.zip |
DREAMWEB: added shr/shl instructions
Diffstat (limited to 'engines/dreamweb/runtime.h')
-rw-r--r-- | engines/dreamweb/runtime.h | 46 |
1 files changed, 38 insertions, 8 deletions
diff --git a/engines/dreamweb/runtime.h b/engines/dreamweb/runtime.h index af484fe19c..b69bd15d52 100644 --- a/engines/dreamweb/runtime.h +++ b/engines/dreamweb/runtime.h @@ -245,14 +245,16 @@ public: } inline void _add(uint8 &dst, uint8 src) { - flags._c = (unsigned(dst) + src) >= 0x100; - dst += src; + unsigned r = (unsigned)dst + src; + flags._c = r >= 0x100; + dst = r; flags.update(dst); } inline void _add(uint16 &dst, uint16 src) { - flags._c = (unsigned(dst) + src) >= 0x10000; - dst += src; + unsigned r = (unsigned)dst + src; + flags._c = r >= 0x10000; + dst = r; flags.update(dst); } @@ -304,10 +306,38 @@ public: flags.update(dst); } - inline void _shr(uint8 &dst, uint8 src) {} - inline void _shr(uint16 &dst, uint8 src) {} - inline void _shl(uint8 &dst, uint8 src) {} - inline void _shl(uint16 &dst, uint8 src) {} + inline void _shr(uint8 &dst, uint8 src) { + if (src > 0 && src < 32) { + dst >>= (src - 1); + flags._c = dst & 1; + dst >>= 1; + } + flags.update(dst); + } + inline void _shr(uint16 &dst, uint8 src) { + if (src > 0 && src < 32) { + dst >>= (src - 1); + flags._c = dst & 1; + dst >>= 1; + } + flags.update(dst); + } + inline void _shl(uint8 &dst, uint8 src) { + if (src > 0 && src < 32) { + dst <<= (src - 1); + flags._c = dst & 0x80; + dst <<= 1; + } + flags.update(dst); + } + inline void _shl(uint16 &dst, uint8 src) { + if (src > 0 && src < 32) { + dst <<= (src - 1); + flags._c = dst & 0x8000; + dst <<= 1; + } + flags.update(dst); + } inline void _mul(uint8 src) { unsigned r = unsigned(al) * src; |