diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2023-10-24 16:59:40 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2023-10-24 16:59:40 +0200 |
| commit | 12c40a5b804143cee0d538c4de4b526522bcfcd2 (patch) | |
| tree | c3a976d0f65df337ac04f16710d92f02a39cefaa /src/emu | |
| parent | e9a2f9ff6281eac45b1e10457f3c79f780451c02 (diff) | |
| download | box64-12c40a5b804143cee0d538c4de4b526522bcfcd2.tar.gz box64-12c40a5b804143cee0d538c4de4b526522bcfcd2.zip | |
[32BITS] Added 66 06/07 and 66 1E/1F opcodes ([ARM64_DYNAREC] too)
Diffstat (limited to 'src/emu')
| -rw-r--r-- | src/emu/x64run66.c | 28 |
1 files changed, 28 insertions, 0 deletions
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); |