aboutsummaryrefslogtreecommitdiff
path: root/engines/dreamweb/runtime.h
diff options
context:
space:
mode:
authorVladimir Menshakov2011-06-17 21:15:06 +0400
committerVladimir Menshakov2011-06-17 21:15:06 +0400
commit27890ec3e2cb708fc18f46f839dc8ce9d8311b3d (patch)
tree5684bba3062a834a030a2275b147e1a43dc50a42 /engines/dreamweb/runtime.h
parent2e2676526d97db7b1bff5be2838e4479aca3ba97 (diff)
downloadscummvm-rg350-27890ec3e2cb708fc18f46f839dc8ce9d8311b3d.tar.gz
scummvm-rg350-27890ec3e2cb708fc18f46f839dc8ce9d8311b3d.tar.bz2
scummvm-rg350-27890ec3e2cb708fc18f46f839dc8ce9d8311b3d.zip
DREAMWEB: clear cx after rep movs/stos commands
Diffstat (limited to 'engines/dreamweb/runtime.h')
-rw-r--r--engines/dreamweb/runtime.h16
1 files changed, 11 insertions, 5 deletions
diff --git a/engines/dreamweb/runtime.h b/engines/dreamweb/runtime.h
index b8a87bd69e..bb671431b0 100644
--- a/engines/dreamweb/runtime.h
+++ b/engines/dreamweb/runtime.h
@@ -462,12 +462,14 @@ public:
es.byte(di++) = ds.byte(si++);
}
- inline void _movsb(uint size) {
+ inline void _movsb(uint size, bool clear_cx = false) {
uint8 *dst = es.ptr(di, size);
uint8 *src = ds.ptr(si, size);
memcpy(dst, src, size);
di += size;
si += size;
+ if (clear_cx)
+ cx = 0;
}
inline void _movsw() {
@@ -475,18 +477,20 @@ public:
_movsb();
}
- inline void _movsw(uint size) {
- _movsb(size * 2);
+ inline void _movsw(uint size, bool clear_cx = false) {
+ _movsb(size * 2, clear_cx);
}
inline void _stosb() {
es.byte(di++) = al;
}
- inline void _stosb(uint size) {
+ inline void _stosb(uint size, bool clear_cx = false) {
uint8 *dst = es.ptr(di, size);
memset(dst, al, size);
di += size;
+ if (clear_cx)
+ cx = 0;
}
inline void _stosw() {
@@ -494,13 +498,15 @@ public:
es.byte(di++) = ah;
}
- inline void _stosw(uint size) {
+ inline void _stosw(uint size, bool clear_cx = false) {
uint8 *dst = es.ptr(di, size);
di += 2 * size;
while(size--) {
*dst++ = al;
*dst++ = ah;
}
+ if (clear_cx)
+ cx = 0;
}
inline void _xchg(uint16 &a, uint16 &b) {