about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2023-06-25 20:16:17 +0200
committerptitSeb <sebastien.chev@gmail.com>2023-06-25 20:16:17 +0200
commitf37265235eb134647e47ba869e26f301fa342289 (patch)
treef7faece053a9c0e145a6b11d00965938b45d62a9 /src
parentf83b192d701e5104de8b81b76cef44c1afa7c25b (diff)
downloadbox64-f37265235eb134647e47ba869e26f301fa342289.tar.gz
box64-f37265235eb134647e47ba869e26f301fa342289.zip
[32BITS] Fixed 1E/1F opcodes and added 06/07 opcodes
Diffstat (limited to 'src')
-rwxr-xr-xsrc/emu/x64run.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/src/emu/x64run.c b/src/emu/x64run.c
index a3409570..2e4264c8 100755
--- a/src/emu/x64run.c
+++ b/src/emu/x64run.c
@@ -145,6 +145,21 @@ x64emurun:
             break;
 
         GO(0x00, add)                   /* ADD 0x00 -> 0x05 */
+        case 0x06:                      /* PUSH ES */
+            if(!rex.is32bits) {
+                unimp = 1;
+                goto fini;
+            }
+            Push32(emu, emu->segs[_ES]);  // even if a segment is a 16bits, a 32bits push/pop is done
+            break;
+        case 0x07:                      /* POP ES */
+            if(!rex.is32bits) {
+                unimp = 1;
+                goto fini;
+            }
+            emu->segs[_ES] = Pop32(emu);    // no check, no use....
+            emu->segs_serial[_ES] = 0;
+            break;
         GO(0x08, or)                    /*  OR 0x08 -> 0x0D */
         case 0x0F:                      /* More instructions */
             switch(rep) {
@@ -201,14 +216,14 @@ x64emurun:
                 unimp = 1;
                 goto fini;
             }
-            Push(emu, emu->segs[_DS]);  // even if a segment is a 16bits, a 32bits push/pop is done
+            Push32(emu, emu->segs[_DS]);  // even if a segment is a 16bits, a 32bits push/pop is done
             break;
         case 0x1F:                      /* POP DS */
             if(!rex.is32bits) {
                 unimp = 1;
                 goto fini;
             }
-            emu->segs[_DS] = Pop(emu);    // no check, no use....
+            emu->segs[_DS] = Pop32(emu);    // no check, no use....
             emu->segs_serial[_DS] = 0;
             break;