Exemple #1
0
static void UpdateIFR(SY6522_AY8910* pMB)
{
	pMB->sy6522.IFR &= 0x7F;

	if(pMB->sy6522.IFR & pMB->sy6522.IER & 0x7F)
		pMB->sy6522.IFR |= 0x80;

	// Now update the IRQ signal from all 6522s
	// . OR-sum of all active TIMER1, TIMER2 & SPEECH sources (from all 6522s)
	UINT bIRQ = 0;
	for(UINT i=0; i<NUM_SY6522; i++)
		bIRQ |= g_MB[i].sy6522.IFR & 0x80;

	// NB. Mockingboard generates IRQ on both 6522s:
	// . SSI263's IRQ (A/!R) is routed via the 2nd 6522 (at $Cx80) and must generate a 6502 IRQ (not NMI)
	// . SC-01's IRQ (A/!R) is also routed via a (2nd?) 6522
	// Phasor's SSI263 appears to be wired directly to the 6502's IRQ (ie. not via a 6522)
	// . I assume Phasor's 6522s just generate 6502 IRQs (not NMIs)

	if (bIRQ)
	{
	    CpuIrqAssert(IS_6522);
	}
	else
	{
	    CpuIrqDeassert(IS_6522);
	}
}
static void UpdateIFR(SY6522_AY8910* pMB)
{
    pMB->sy6522.IFR &= 0x7F;

    if(pMB->sy6522.IFR & pMB->sy6522.IER & 0x7F)
        pMB->sy6522.IFR |= 0x80;

    // Now update the IRQ signal from all 6522s
    // . OR-sum of all active TIMER1, TIMER2 & SPEECH sources (from all 6522s)
    UINT bIRQ = 0;
    for(UINT i=0; i<NUM_SY6522; i++)
        bIRQ |= g_MB[i].sy6522.IFR & 0x80;

    if (bIRQ)
        if (pMB->nAY8910Number & 1)
            CpuNmiAssert(IS_6522);
        else
            CpuIrqAssert(IS_6522);
    else if (pMB->nAY8910Number & 1)
        CpuNmiDeassert(IS_6522);
    else
        CpuIrqDeassert(IS_6522);
}