Merge pull request #2573 from Cacodemon345/x86-drfix

x86: mov r, DR6 now always writes bits 4-11 and bits 16-31 as 1
This commit is contained in:
Miran Grča
2022-08-04 16:52:26 +02:00
committed by GitHub
3 changed files with 4 additions and 2 deletions

View File

@@ -196,6 +196,7 @@ exec386(int cycs)
enter_smm_check(0); enter_smm_check(0);
else if (trap) { else if (trap) {
flags_rebuild(); flags_rebuild();
dr[6] |= 0x4000;
if (msw&1) if (msw&1)
pmodeint(1,0); pmodeint(1,0);
else { else {

View File

@@ -404,6 +404,7 @@ exec386_dynarec_int(void)
oldcs = CS; oldcs = CS;
#endif #endif
cpu_state.oldpc = cpu_state.pc; cpu_state.oldpc = cpu_state.pc;
dr[6] |= 0x4000;
x86_int(1); x86_int(1);
} }

View File

@@ -91,7 +91,7 @@ static int opMOV_r_DRx_a16(uint32_t fetchdat)
return 1; return 1;
} }
fetch_ea_16(fetchdat); fetch_ea_16(fetchdat);
cpu_state.regs[cpu_rm].l = dr[cpu_reg]; cpu_state.regs[cpu_rm].l = dr[cpu_reg] | (cpu_reg == 6 ? 0xffff0ff0u : 0);
CLOCK_CYCLES(6); CLOCK_CYCLES(6);
PREFETCH_RUN(6, 2, rmdat, 0,0,0,0, 0); PREFETCH_RUN(6, 2, rmdat, 0,0,0,0, 0);
return 0; return 0;
@@ -104,7 +104,7 @@ static int opMOV_r_DRx_a32(uint32_t fetchdat)
return 1; return 1;
} }
fetch_ea_32(fetchdat); fetch_ea_32(fetchdat);
cpu_state.regs[cpu_rm].l = dr[cpu_reg]; cpu_state.regs[cpu_rm].l = dr[cpu_reg] | (cpu_reg == 6 ? 0xffff0ff0u : 0);
CLOCK_CYCLES(6); CLOCK_CYCLES(6);
PREFETCH_RUN(6, 2, rmdat, 0,0,0,0, 1); PREFETCH_RUN(6, 2, rmdat, 0,0,0,0, 1);
return 0; return 0;