Made NMI's always auto-clear, will revert if it makes things worse.
This commit is contained in:
@@ -195,10 +195,14 @@ exec386(int cycs)
|
|||||||
cpu_state.oldpc = cpu_state.pc;
|
cpu_state.oldpc = cpu_state.pc;
|
||||||
x86_int(2);
|
x86_int(2);
|
||||||
nmi_enable = 0;
|
nmi_enable = 0;
|
||||||
|
#ifdef OLD_NMI_BEHAVIOR
|
||||||
if (nmi_auto_clear) {
|
if (nmi_auto_clear) {
|
||||||
nmi_auto_clear = 0;
|
nmi_auto_clear = 0;
|
||||||
nmi = 0;
|
nmi = 0;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
nmi = 0;
|
||||||
|
#endif
|
||||||
} else if ((cpu_state.flags & I_FLAG) && pic.int_pending && !cpu_end_block_after_ins) {
|
} else if ((cpu_state.flags & I_FLAG) && pic.int_pending && !cpu_end_block_after_ins) {
|
||||||
vector = picinterrupt();
|
vector = picinterrupt();
|
||||||
if (vector != -1) {
|
if (vector != -1) {
|
||||||
|
@@ -797,10 +797,14 @@ exec386_dynarec(int cycs)
|
|||||||
cpu_state.oldpc = cpu_state.pc;
|
cpu_state.oldpc = cpu_state.pc;
|
||||||
x86_int(2);
|
x86_int(2);
|
||||||
nmi_enable = 0;
|
nmi_enable = 0;
|
||||||
|
#ifdef OLD_NMI_BEHAVIOR
|
||||||
if (nmi_auto_clear) {
|
if (nmi_auto_clear) {
|
||||||
nmi_auto_clear = 0;
|
nmi_auto_clear = 0;
|
||||||
nmi = 0;
|
nmi = 0;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
nmi = 0;
|
||||||
|
#endif
|
||||||
} else if ((cpu_state.flags & I_FLAG) && pic.int_pending) {
|
} else if ((cpu_state.flags & I_FLAG) && pic.int_pending) {
|
||||||
vector = picinterrupt();
|
vector = picinterrupt();
|
||||||
if (vector != -1) {
|
if (vector != -1) {
|
||||||
|
@@ -968,6 +968,9 @@ check_interrupts(void)
|
|||||||
if (nmi && nmi_enable && nmi_mask) {
|
if (nmi && nmi_enable && nmi_mask) {
|
||||||
nmi_enable = 0;
|
nmi_enable = 0;
|
||||||
interrupt(2);
|
interrupt(2);
|
||||||
|
#ifndef OLD_NMI_BEHAVIOR
|
||||||
|
nmi = 0;
|
||||||
|
#endif
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if ((cpu_state.flags & I_FLAG) && pic.int_pending && !noint) {
|
if ((cpu_state.flags & I_FLAG) && pic.int_pending && !noint) {
|
||||||
|
Reference in New Issue
Block a user