diff options
| -rw-r--r-- | engines/dreamweb/dreamweb.cpp | 4 | ||||
| -rw-r--r-- | engines/dreamweb/runtime.h | 46 |
2 files changed, 40 insertions, 10 deletions
diff --git a/engines/dreamweb/dreamweb.cpp b/engines/dreamweb/dreamweb.cpp index f2ee6a6268..feec93f8f5 100644 --- a/engines/dreamweb/dreamweb.cpp +++ b/engines/dreamweb/dreamweb.cpp @@ -413,7 +413,7 @@ void mode640x480(Context &context) { } void showgroup(Context &context) { - warning("vsync: STUB"); + warning("showgroup: STUB"); } void fadedos(Context &context) { @@ -426,7 +426,7 @@ void doshake(Context &context) { void vsync(Context &context) { //engine()->waitForVSync(); - warning("vsync: STUB"); + //warning("vsync: STUB"); //fixme: loop } void setmode(Context &context) { 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; |
