summaryrefslogtreecommitdiff
path: root/csrc/mkf_asm_data.c
diff options
context:
space:
mode:
Diffstat (limited to 'csrc/mkf_asm_data.c')
-rw-r--r--csrc/mkf_asm_data.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/csrc/mkf_asm_data.c b/csrc/mkf_asm_data.c
index 032034a..555f861 100644
--- a/csrc/mkf_asm_data.c
+++ b/csrc/mkf_asm_data.c
@@ -669,8 +669,22 @@ void cfcn_00455040(void *arg1, void *arg2)
bx -= 0xfd;
void *old_esi = esi; /* push esi */
esi = edi - 1 - dx;
- memcpy(edi, esi, bx); /* using rep movsb */
+
+ /* the following is a little bit tricky,
+ * if we use memcpy/memmove, the picture is broken
+ */
+#if 1
+ ecx = bx;
+ do {
+ *(uint8_t*)edi = *(uint8_t*)esi;
+ edi++;
+ esi++;
+ ecx--;
+ } while (ecx);
+#else
+ memmove(edi, esi, bx); /* using rep movsb */
edi += bx; /* by movsb */
+#endif
esi = old_esi; /* pop esi */
ecx = old_ecx; /* restore ecx */
}