about summary refs log tree commit diff stats
path: root/src/emu
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-04-16 15:46:03 +0200
committerptitSeb <sebastien.chev@gmail.com>2021-04-16 15:46:03 +0200
commit7a95dcd6b6bf51cde91d0cc2a17107b49d17a376 (patch)
treef0689a01a5897f6a851e07cc9f148ff21746a488 /src/emu
parent47d0c04b30fe953db0d7dd77b6c46a5f62f4464b (diff)
downloadbox64-7a95dcd6b6bf51cde91d0cc2a17107b49d17a376.tar.gz
box64-7a95dcd6b6bf51cde91d0cc2a17107b49d17a376.zip
Added E0..E3 opcodes ([DYNAREC] too)
Diffstat (limited to 'src/emu')
-rwxr-xr-xsrc/emu/x64run.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/emu/x64run.c b/src/emu/x64run.c
index c08c1ac0..1fcc6d2f 100755
--- a/src/emu/x64run.c
+++ b/src/emu/x64run.c
@@ -1146,6 +1146,35 @@ x64emurun:
             if(emu->quit)
                 goto fini;
             break;
+        case 0xE0:                      /* LOOPNZ */
+            CHECK_FLAGS(emu);
+            tmp8s = F8S;
+            --R_RCX; // don't update flags
+            if(R_RCX && !ACCESS_FLAG(F_ZF))
+                R_RIP += tmp8s;
+            STEP
+            break;
+        case 0xE1:                      /* LOOPZ */
+            CHECK_FLAGS(emu);
+            tmp8s = F8S;
+            --R_RCX; // don't update flags
+            if(R_RCX && ACCESS_FLAG(F_ZF))
+                R_RIP += tmp8s;
+            STEP
+            break;
+        case 0xE2:                      /* LOOP */
+            tmp8s = F8S;
+            --R_RCX; // don't update flags
+            if(R_RCX)
+                R_RIP += tmp8s;
+            STEP
+            break;
+        case 0xE3:                      /* JECXZ */
+            tmp8s = F8S;
+            if(!R_RCX)
+                R_RIP += tmp8s;
+            STEP
+            break;
 
         case 0xE8:                      /* CALL Id */
             tmp32s = F32S; // call is relative