From 12c40a5b804143cee0d538c4de4b526522bcfcd2 Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Tue, 24 Oct 2023 16:59:40 +0200 Subject: [32BITS] Added 66 06/07 and 66 1E/1F opcodes ([ARM64_DYNAREC] too) --- src/emu/x64run66.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'src/emu') diff --git a/src/emu/x64run66.c b/src/emu/x64run66.c index 938fde48..49a5ba3c 100644 --- a/src/emu/x64run66.c +++ b/src/emu/x64run66.c @@ -112,6 +112,20 @@ uintptr_t Run66(x64emu_t *emu, rex_t rex, int rep, uintptr_t addr) GO(0x28, sub) /* SUB 0x29 ~> 0x2D */ GO(0x30, xor) /* XOR 0x31 ~> 0x35 */ + case 0x06: /* PUSH ES */ + if(!rex.is32bits) { + return 0; + } + 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) { + return 0; + } + emu->segs[_ES] = Pop32(emu); // no check, no use.... + emu->segs_serial[_ES] = 0; + break; + case 0x0F: /* more opcdes */ #ifdef TEST_INTERPRETER return Test660F(test, rex, addr); @@ -119,6 +133,20 @@ uintptr_t Run66(x64emu_t *emu, rex_t rex, int rep, uintptr_t addr) return Run660F(emu, rex, addr); #endif + case 0x1E: /* PUSH DS */ + if(!rex.is32bits) { + return 0; + } + 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) { + return 0; + } + emu->segs[_DS] = Pop32(emu); // no check, no use.... + emu->segs_serial[_DS] = 0; + break; + case 0x39: nextop = F8; GETEW(0); -- cgit 1.4.1