REP instructions in 32-bit mode with both 0x66 and 0x67 prefixes now work correctly - fixes QEMM and DESQview.

This commit is contained in:
TomW 2015-08-07 21:31:00 +01:00
commit 2db98723c7
2 changed files with 4 additions and 4 deletions

View file

@ -322,10 +322,10 @@ int rep386(int fv)
ea_seg = &_gs;
goto startrep;
case 0x66: case 0x166: case 0x266: case 0x366: /*Data size prefix*/
rep32 = (rep32 & 0x200) | (use32 ^ 0x100);
rep32 = (rep32 & 0x200) | ((use32 ^ 0x100) & 0x100);
goto startrep;
case 0x67: case 0x167: case 0x267: case 0x367: /*Address size prefix*/
rep32 = (rep32 & 0x100) | (use32 ^ 0x200);
rep32 = (rep32 & 0x100) | ((use32 ^ 0x200) & 0x200);
goto startrep;
case 0x6C: case 0x16C: /*REP INSB*/
if (c>0)

View file

@ -336,10 +336,10 @@ int rep386(int fv)
ea_seg = &_gs;
goto startrep;
case 0x66: case 0x166: case 0x266: case 0x366: /*Data size prefix*/
rep32 = (rep32 & 0x200) | (use32 ^ 0x100);
rep32 = (rep32 & 0x200) | ((use32 ^ 0x100) & 0x100);
goto startrep;
case 0x67: case 0x167: case 0x267: case 0x367: /*Address size prefix*/
rep32 = (rep32 & 0x100) | (use32 ^ 0x200);
rep32 = (rep32 & 0x100) | ((use32 ^ 0x200) & 0x200);
goto startrep;
case 0x6C: case 0x16C: /*REP INSB*/
// cpu_notreps++;