aboutsummaryrefslogtreecommitdiff
path: root/devtools/tasmrecover/tasm
diff options
context:
space:
mode:
authorVladimir Menshakov2011-06-17 21:15:06 +0400
committerVladimir Menshakov2011-06-17 21:15:06 +0400
commit27890ec3e2cb708fc18f46f839dc8ce9d8311b3d (patch)
tree5684bba3062a834a030a2275b147e1a43dc50a42 /devtools/tasmrecover/tasm
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 'devtools/tasmrecover/tasm')
-rw-r--r--devtools/tasmrecover/tasm/cpp.py16
-rw-r--r--devtools/tasmrecover/tasm/op.py12
-rw-r--r--devtools/tasmrecover/tasm/proc.py1
3 files changed, 17 insertions, 12 deletions
diff --git a/devtools/tasmrecover/tasm/cpp.py b/devtools/tasmrecover/tasm/cpp.py
index 324772120e..0196e5b45c 100644
--- a/devtools/tasmrecover/tasm/cpp.py
+++ b/devtools/tasmrecover/tasm/cpp.py
@@ -407,17 +407,17 @@ namespace %s {
def _lodsw(self):
self.body += "\t_lodsw();\n"
- def _stosb(self, n):
- self.body += "\t_stosb(%s);\n" %("" if n == 1 else n)
+ def _stosb(self, n, clear_cx):
+ self.body += "\t_stosb(%s%s);\n" %("" if n == 1 else n, ", true" if clear_cx else "")
- def _stosw(self, n):
- self.body += "\t_stosw(%s);\n" %("" if n == 1 else n)
+ def _stosw(self, n, clear_cx):
+ self.body += "\t_stosw(%s%s);\n" %("" if n == 1 else n, ", true" if clear_cx else "")
- def _movsb(self, n):
- self.body += "\t_movsb(%s);\n" %("" if n == 1 else n)
+ def _movsb(self, n, clear_cx):
+ self.body += "\t_movsb(%s%s);\n" %("" if n == 1 else n, ", true" if clear_cx else "")
- def _movsw(self, n):
- self.body += "\t_movsw(%s);\n" %("" if n == 1 else n)
+ def _movsw(self, n, clear_cx):
+ self.body += "\t_movsw(%s%s);\n" %("" if n == 1 else n, ", true" if clear_cx else "")
def _stc(self):
self.body += "\tflags._c = true;\n "
diff --git a/devtools/tasmrecover/tasm/op.py b/devtools/tasmrecover/tasm/op.py
index 9baebccfc3..10fdd8a568 100644
--- a/devtools/tasmrecover/tasm/op.py
+++ b/devtools/tasmrecover/tasm/op.py
@@ -317,26 +317,30 @@ class _lodsw(baseop):
class _stosw(baseop):
def __init__(self, arg):
self.repeat = 1
+ self.clear_cx = False
def visit(self, visitor):
- visitor._stosw(self.repeat)
+ visitor._stosw(self.repeat, self.clear_cx)
class _stosb(baseop):
def __init__(self, arg):
self.repeat = 1
+ self.clear_cx = False
def visit(self, visitor):
- visitor._stosb(self.repeat)
+ visitor._stosb(self.repeat, self.clear_cx)
class _movsw(baseop):
def __init__(self, arg):
self.repeat = 1
+ self.clear_cx = False
def visit(self, visitor):
- visitor._movsw(self.repeat)
+ visitor._movsw(self.repeat, self.clear_cx)
class _movsb(baseop):
def __init__(self, arg):
self.repeat = 1
+ self.clear_cx = False
def visit(self, visitor):
- visitor._movsb(self.repeat)
+ visitor._movsb(self.repeat, self.clear_cx)
class _in(baseop):
def __init__(self, arg):
diff --git a/devtools/tasmrecover/tasm/proc.py b/devtools/tasmrecover/tasm/proc.py
index c304438984..c127c406f7 100644
--- a/devtools/tasmrecover/tasm/proc.py
+++ b/devtools/tasmrecover/tasm/proc.py
@@ -62,6 +62,7 @@ class proc:
break
if isinstance(stmts[i + 1], cls):
stmts[i + 1].repeat = 'cx'
+ stmts[i + 1].clear_cx = True
del stmts[i]
i += 1
return