about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-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);