about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-04-05 19:04:16 +0200
committerptitSeb <sebastien.chev@gmail.com>2021-04-05 19:04:16 +0200
commit23e7d5c370f672773f04f70da2feb80a3b99b764 (patch)
tree2fed466b2eba3d58d4fca31bc78783e28d70e6b3 /src
parent676b7523b36eabaa48073c9da84512ffc0261581 (diff)
downloadbox64-23e7d5c370f672773f04f70da2feb80a3b99b764.tar.gz
box64-23e7d5c370f672773f04f70da2feb80a3b99b764.zip
Added 67 80/8B opcodes
Diffstat (limited to 'src')
-rw-r--r--src/emu/x64run67.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/emu/x64run67.c b/src/emu/x64run67.c
index 10af9a5b..e074be4b 100644
--- a/src/emu/x64run67.c
+++ b/src/emu/x64run67.c
@@ -96,6 +96,22 @@ int Run67(x64emu_t *emu, rex_t rex)
     GO(0x30, xor)                   /* XOR 0x30 -> 0x35 */

     #undef GO

 

+    case 0x80:                      /* GRP Eb,Ib */

+        nextop = F8;

+        GETEB32(1);

+        tmp8u = F8;

+        switch((nextop>>3)&7) {

+            case 0: EB->byte[0] = add8(emu, EB->byte[0], tmp8u); break;

+            case 1: EB->byte[0] =  or8(emu, EB->byte[0], tmp8u); break;

+            case 2: EB->byte[0] = adc8(emu, EB->byte[0], tmp8u); break;

+            case 3: EB->byte[0] = sbb8(emu, EB->byte[0], tmp8u); break;

+            case 4: EB->byte[0] = and8(emu, EB->byte[0], tmp8u); break;

+            case 5: EB->byte[0] = sub8(emu, EB->byte[0], tmp8u); break;

+            case 6: EB->byte[0] = xor8(emu, EB->byte[0], tmp8u); break;

+            case 7:               cmp8(emu, EB->byte[0], tmp8u); break;

+        }

+        break;

+

     case 0x88:                      /* MOV Eb,Gb */

         nextop = F8;

         GETEB32(0);

@@ -122,6 +138,15 @@ int Run67(x64emu_t *emu, rex_t rex)
         GETGB;

         GB = EB->byte[0];

         break;

+    case 0x8B:                      /* MOV Gd,Ed */

+        nextop = F8;

+        GETED32(0);

+        GETGD;

+        if(rex.w)

+            GD->q[0] = ED->q[0];

+        else

+            GD->q[0] = ED->dword[0];

+        break;

 

     case 0x8D:                      /* LEA Gd,M */

         nextop = F8;