diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2023-06-25 20:16:17 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2023-06-25 20:16:17 +0200 |
| commit | f37265235eb134647e47ba869e26f301fa342289 (patch) | |
| tree | f7faece053a9c0e145a6b11d00965938b45d62a9 /src | |
| parent | f83b192d701e5104de8b81b76cef44c1afa7c25b (diff) | |
| download | box64-f37265235eb134647e47ba869e26f301fa342289.tar.gz box64-f37265235eb134647e47ba869e26f301fa342289.zip | |
[32BITS] Fixed 1E/1F opcodes and added 06/07 opcodes
Diffstat (limited to 'src')
| -rwxr-xr-x | src/emu/x64run.c | 19 |
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; |