about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-02-25 14:34:59 +0100
committerptitSeb <sebastien.chev@gmail.com>2024-02-25 14:34:59 +0100
commitff6cc844821439a8f50b68b27e6f1ac5264579c8 (patch)
tree70536275fb135002131b86d9db84c5167bd6f50b
parent02caee0c02c75e035ce976d1ffdb29baa6e0a6c5 (diff)
downloadbox64-ff6cc844821439a8f50b68b27e6f1ac5264579c8.tar.gz
box64-ff6cc844821439a8f50b68b27e6f1ac5264579c8.zip
Added CA opcode
-rw-r--r--src/emu/x64run.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/emu/x64run.c b/src/emu/x64run.c
index db7aabc3..7fd8e9bb 100644
--- a/src/emu/x64run.c
+++ b/src/emu/x64run.c
@@ -1407,7 +1407,20 @@ x64emurun:
             R_RSP = R_RBP;
             R_RBP = rex.is32bits?Pop32(emu):Pop64(emu);
             break;
-
+        case 0xCA:                      /* FAR RETN */
+            tmp16u = F16;
+            if(rex.is32bits) {
+                addr = Pop32(emu);
+                emu->segs[_CS] = Pop32(emu);    // no check, no use....
+            } else {
+                addr = Pop64(emu);
+                emu->segs[_CS] = Pop64(emu);    // no check, no use....
+            }
+            emu->segs_serial[_CS] = 0;
+            R_RSP += tmp16u;
+            // need to check status of CS register!
+            STEP2;
+            break;
         case 0xCB:                      /* FAR RET */
             if(rex.is32bits) {
                 addr = Pop32(emu);