Always trigger FINISH and SIGNAL from END.

This commit is contained in:
Unknown W. Brackets 2013-04-03 08:15:49 -07:00
parent cd246d27c3
commit 15cb005a60
2 changed files with 5 additions and 8 deletions

View File

@ -58,7 +58,7 @@ public:
gpu->InterruptStart();
u32 cmd = Memory::ReadUnchecked_U32(intrdata.pc) >> 24;
u32 cmd = Memory::ReadUnchecked_U32(intrdata.pc - 4) >> 24;
int subintr = intrdata.subIntrBase | (cmd == GE_CMD_FINISH ? PSP_GE_SUBINTR_FINISH : PSP_GE_SUBINTR_SIGNAL);
SubIntrHandler* handler = get(subintr);

View File

@ -267,14 +267,8 @@ void GPUCommon::ExecuteOp(u32 op, u32 diff) {
break;
case GE_CMD_SIGNAL:
// Processed in GE_END.
break;
case GE_CMD_FINISH:
currentList->subIntrToken = data & 0xFFFF;
UpdateCycles(currentList->pc);
if (interruptsEnabled_)
__GeTriggerInterrupt(currentList->id, currentList->pc, currentList->subIntrBase, currentList->subIntrToken);
// Processed in GE_END.
break;
case GE_CMD_END:
@ -322,6 +316,9 @@ void GPUCommon::ExecuteOp(u32 op, u32 diff) {
case GE_CMD_FINISH:
currentList->status = PSP_GE_LIST_DONE;
finished = true;
currentList->subIntrToken = prev & 0xFFFF;
if (interruptsEnabled_)
__GeTriggerInterrupt(currentList->id, currentList->pc, currentList->subIntrBase, currentList->subIntrToken);
break;
default:
DEBUG_LOG(G3D,"Ah, not finished: %06x", prev & 0xFFFFFF);