aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladimir2011-06-08 03:12:14 +0400
committerAlyssa Milburn2011-06-15 17:32:56 +0200
commit3595e9b675b4f18570c589bd759a20ca28d469b8 (patch)
treefe689da80ed09d45bc3f18de02daa6ed47879ad3
parent2fa141335de2576e49dbb4c8d4cdadffacd68c71 (diff)
downloadscummvm-rg350-3595e9b675b4f18570c589bd759a20ca28d469b8.tar.gz
scummvm-rg350-3595e9b675b4f18570c589bd759a20ca28d469b8.tar.bz2
scummvm-rg350-3595e9b675b4f18570c589bd759a20ca28d469b8.zip
DREAMWEB: added shr/shl instructions
-rw-r--r--engines/dreamweb/dreamweb.cpp4
-rw-r--r--engines/dreamweb/runtime.h46
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;