Merge pull request #151 from gm-matthew/sound-irq

Sound IRQs are acknowledged by writing to MIDI data port
This commit is contained in:
dukeeeey 2024-05-20 19:31:25 +01:00 committed by GitHub
commit 976f0208dc
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -1418,8 +1418,11 @@ void CModel3::Write8(UINT32 addr, UINT8 data)
// Sound Board // Sound Board
case 0x08: case 0x08:
//printf("PPC: %08X=%02X * (PC=%08X, LR=%08X)\n", addr, data, ppc_get_pc(), ppc_get_lr()); //printf("PPC: %08X=%02X * (PC=%08X, LR=%08X)\n", addr, data, ppc_get_pc(), ppc_get_lr());
if ((addr&0xF) == 0) // MIDI data port if ((addr & 0xF) == 0) // MIDI data port
{
SoundBoard.WriteMIDIPort(data); SoundBoard.WriteMIDIPort(data);
IRQ.Deassert(0x40);
}
else if ((addr&0xF) == 4) // MIDI control port else if ((addr&0xF) == 4) // MIDI control port
midiCtrlPort = data; midiCtrlPort = data;
break; break;
@ -2133,9 +2136,7 @@ void CModel3::RunMainBoardFrame(void)
// Process MIDI interrupt // Process MIDI interrupt
IRQ.Assert(0x40); IRQ.Assert(0x40);
ppc_execute(200); // give PowerPC time to acknowledge IR ppc_execute(400); // give PowerPC time to acknowledge IR
IRQ.Deassert(0x40);
ppc_execute(200); // acknowledge that IRQ was deasserted (TODO: is this really needed?)
dispCycles -= 400; dispCycles -= 400;
++irqCount; ++irqCount;