diff options
author | Vladimir Menshakov | 2011-06-17 21:15:06 +0400 |
---|---|---|
committer | Vladimir Menshakov | 2011-06-17 21:15:06 +0400 |
commit | 27890ec3e2cb708fc18f46f839dc8ce9d8311b3d (patch) | |
tree | 5684bba3062a834a030a2275b147e1a43dc50a42 /engines/dreamweb/runtime.h | |
parent | 2e2676526d97db7b1bff5be2838e4479aca3ba97 (diff) | |
download | scummvm-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.h | 16 |
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) { |