i8085.c: Fixed inte callback not being called when the IE flag was cleared after the CPU received an interrupt. This fixes interrupts in n8080.c helifire and spacelnc. [Qwi Jibo]

This commit is contained in:
Michaël Banaan Ananas 2011-01-21 18:17:22 +00:00
parent 251c18f538
commit 638032fbeb
2 changed files with 10 additions and 10 deletions

View File

@ -404,7 +404,7 @@ static void check_for_interrupts(i8085_state *cpustate)
/* push the PC and jump to $0024 */
M_PUSH(PC);
cpustate->IM &= ~IM_IE;
set_inte(cpustate, 0);
cpustate->PC.w.l = ADDR_TRAP;
cpustate->icount -= 11;
}
@ -422,7 +422,7 @@ static void check_for_interrupts(i8085_state *cpustate)
/* push the PC and jump to $003C */
M_PUSH(PC);
cpustate->IM &= ~IM_IE;
set_inte(cpustate, 0);
cpustate->PC.w.l = ADDR_RST75;
cpustate->icount -= 11;
}
@ -437,7 +437,7 @@ static void check_for_interrupts(i8085_state *cpustate)
/* push the PC and jump to $0034 */
M_PUSH(PC);
cpustate->IM &= ~IM_IE;
set_inte(cpustate, 0);
cpustate->PC.w.l = ADDR_RST65;
cpustate->icount -= 11;
}
@ -452,7 +452,7 @@ static void check_for_interrupts(i8085_state *cpustate)
/* push the PC and jump to $002C */
M_PUSH(PC);
cpustate->IM &= ~IM_IE;
set_inte(cpustate, 0);
cpustate->PC.w.l = ADDR_RST55;
cpustate->icount -= 11;
}
@ -468,7 +468,7 @@ static void check_for_interrupts(i8085_state *cpustate)
vector = (*cpustate->irq_callback)(cpustate->device, I8085_INTR_LINE);
/* use the resulting vector as an opcode to execute */
cpustate->IM &= ~IM_IE;
set_inte(cpustate, 0);
switch (vector & 0xff0000)
{
case 0xcd0000: /* CALL nnnn */
@ -1258,7 +1258,7 @@ CPU_GET_INFO( i8080 )
case CPUINFO_INT_INPUT_LINES: info->i = 1; break;
/* --- the following bits of info are returned as pointers to functions --- */
case CPUINFO_FCT_INIT: info->init = CPU_INIT_NAME(i8080); break;
case CPUINFO_FCT_INIT: info->init = CPU_INIT_NAME(i8080); break;
/* --- the following bits of info are returned as NULL-terminated strings --- */
case DEVINFO_STR_NAME: strcpy(info->s, "8080"); break;
@ -1282,7 +1282,7 @@ CPU_GET_INFO( i8080a )
case CPUINFO_INT_INPUT_LINES: info->i = 1; break;
/* --- the following bits of info are returned as pointers to functions --- */
case CPUINFO_FCT_INIT: info->init = CPU_INIT_NAME(i8080); break;
case CPUINFO_FCT_INIT: info->init = CPU_INIT_NAME(i8080); break;
/* --- the following bits of info are returned as NULL-terminated strings --- */
case DEVINFO_STR_NAME: strcpy(info->s, "8080A"); break;

View File

@ -917,8 +917,8 @@ GAME( 1979, spacefevo2, spacefev, spacefev, spacefev, 0, ROT270, "Nintendo", "Sp
GAME( 1979, highsplt, 0, spacefev, highsplt, 0, ROT270, "Nintendo", "Space Fever High Splitter (set 1)", GAME_SUPPORTS_SAVE )
GAME( 1979, highsplta, highsplt, spacefev, highsplt, 0, ROT270, "Nintendo", "Space Fever High Splitter (set 2)", GAME_SUPPORTS_SAVE )
GAME( 1979, highspltb, highsplt, spacefev, highsplt, 0, ROT270, "Nintendo", "Space Fever High Splitter (alt Sound)", GAME_SUPPORTS_SAVE )
GAME( 1979, spacelnc, 0, spacefev, spacelnc, 0, ROT270, "Nintendo", "Space Launcher", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
GAME( 1979, spacelnc, 0, spacefev, spacelnc, 0, ROT270, "Nintendo", "Space Launcher", GAME_SUPPORTS_SAVE )
GAME( 1979, sheriff, 0, sheriff, sheriff, 0, ROT270, "Nintendo", "Sheriff", GAME_SUPPORTS_SAVE )
GAME( 1980, bandido, sheriff, sheriff, bandido, 0, ROT270, "Nintendo (Exidy license)", "Bandido", GAME_SUPPORTS_SAVE )
GAME( 1980, helifire, 0, helifire, helifire, 0, ROT270, "Nintendo", "HeliFire (set 1)", GAME_NOT_WORKING | GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
GAME( 1980, helifirea, helifire, helifire, helifire, 0, ROT270, "Nintendo", "HeliFire (set 2)", GAME_NOT_WORKING | GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
GAME( 1980, helifire, 0, helifire, helifire, 0, ROT270, "Nintendo", "HeliFire (set 1)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
GAME( 1980, helifirea, helifire, helifire, helifire, 0, ROT270, "Nintendo", "HeliFire (set 2)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )