From f37265235eb134647e47ba869e26f301fa342289 Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Sun, 25 Jun 2023 20:16:17 +0200 Subject: [32BITS] Fixed 1E/1F opcodes and added 06/07 opcodes --- src/emu/x64run.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'src') 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; -- cgit 1.4.1