mirror of
https://github.com/86Box/86Box.git
synced 2026-02-22 01:25:33 -07:00
Merge pull request #6561 from snowkat/grp4-ud
CPU: Restrict allowed opcodes in INC/DEC Grp4
This commit is contained in:
@@ -56,16 +56,23 @@ opINCDEC_b_a16(uint32_t fetchdat)
|
||||
if (cpu_state.abrt)
|
||||
return 1;
|
||||
|
||||
if (rmdat & 0x38) {
|
||||
seteab(temp - 1);
|
||||
if (cpu_state.abrt)
|
||||
return 1;
|
||||
setsub8nc(temp, 1);
|
||||
} else {
|
||||
seteab(temp + 1);
|
||||
if (cpu_state.abrt)
|
||||
return 1;
|
||||
setadd8nc(temp, 1);
|
||||
switch (rmdat & 0x38) {
|
||||
case 0: /* INC r/m8 */
|
||||
seteab(temp + 1);
|
||||
if (cpu_state.abrt)
|
||||
return 1;
|
||||
setadd8nc(temp, 1);
|
||||
break;
|
||||
case 0x8: /* DEC r/m8 */
|
||||
seteab(temp - 1);
|
||||
if (cpu_state.abrt)
|
||||
return 1;
|
||||
setsub8nc(temp, 1);
|
||||
break;
|
||||
default:
|
||||
cpu_state.pc = cpu_state.oldpc;
|
||||
x86illegal();
|
||||
break;
|
||||
}
|
||||
CLOCK_CYCLES((cpu_mod == 3) ? timing_rr : timing_mm);
|
||||
PREFETCH_RUN((cpu_mod == 3) ? timing_rr : timing_mm, 2, rmdat, (cpu_mod == 3) ? 0 : 1, 0, (cpu_mod == 3) ? 0 : 1, 0, 0);
|
||||
@@ -83,16 +90,23 @@ opINCDEC_b_a32(uint32_t fetchdat)
|
||||
if (cpu_state.abrt)
|
||||
return 1;
|
||||
|
||||
if (rmdat & 0x38) {
|
||||
seteab(temp - 1);
|
||||
if (cpu_state.abrt)
|
||||
return 1;
|
||||
setsub8nc(temp, 1);
|
||||
} else {
|
||||
seteab(temp + 1);
|
||||
if (cpu_state.abrt)
|
||||
return 1;
|
||||
setadd8nc(temp, 1);
|
||||
switch (rmdat & 0x38) {
|
||||
case 0: /* INC r/m8 */
|
||||
seteab(temp + 1);
|
||||
if (cpu_state.abrt)
|
||||
return 1;
|
||||
setadd8nc(temp, 1);
|
||||
break;
|
||||
case 0x8: /* DEC r/m8 */
|
||||
seteab(temp - 1);
|
||||
if (cpu_state.abrt)
|
||||
return 1;
|
||||
setsub8nc(temp, 1);
|
||||
break;
|
||||
default:
|
||||
cpu_state.pc = cpu_state.oldpc;
|
||||
x86illegal();
|
||||
break;
|
||||
}
|
||||
CLOCK_CYCLES((cpu_mod == 3) ? timing_rr : timing_mm);
|
||||
PREFETCH_RUN((cpu_mod == 3) ? timing_rr : timing_mm, 2, rmdat, (cpu_mod == 3) ? 0 : 1, 0, (cpu_mod == 3) ? 0 : 1, 0, 1);
|
||||
|
||||
Reference in New Issue
Block a user