static void DrvFMIRQHandler(int, int nStatus) { if (nStatus) { M6809SetIRQ(M6809_FIRQ_LINE, M6809_IRQSTATUS_ACK); } else { M6809SetIRQ(M6809_FIRQ_LINE, M6809_IRQSTATUS_NONE); } }
void RenegadeWriteByte(unsigned short Address, unsigned char Data) { switch (Address) { case 0x3800: { DrvScrollX[0] = Data; return; } case 0x3801: { DrvScrollX[1] = Data; return; } case 0x3802: { DrvSoundLatch = Data; M6809Open(0); M6809SetIRQ(M6809_IRQ_LINE, M6809_IRQSTATUS_AUTO); M6809Close(); return; } case 0x3803: { // flipscreen return; } case 0x3804: { mcu_w(Data); return; } case 0x3805: { DrvRomBank = Data & 1; m6502MapMemory(DrvM6502Rom + 0x8000 + (DrvRomBank * 0x4000), 0x4000, 0x7fff, M6502_ROM); return; } case 0x3806: { // nop return; } case 0x3807: { // coin counter return; } default: { bprintf(PRINT_NORMAL, _T("M6502 Write Byte %04X, %02X\n"), Address, Data); } } }
static int DrvFrame() { if (DrvReset) { DrvDoReset(); } ZetNewFrame(); { memset (DrvInputs, 0xff, 3); for (int i = 0; i < 8; i++) { DrvInputs[0] ^= (DrvJoy1[i] & 1) << i; DrvInputs[1] ^= (DrvJoy2[i] & 1) << i; DrvInputs[2] ^= (DrvJoy3[i] & 1) << i; } // Clear opposites if ((DrvInputs[1] & 0x03) == 0) DrvInputs[1] |= 0x03; if ((DrvInputs[1] & 0x0c) == 0) DrvInputs[1] |= 0x0c; if ((DrvInputs[2] & 0x03) == 0) DrvInputs[1] |= 0x03; if ((DrvInputs[2] & 0x0c) == 0) DrvInputs[1] |= 0x0c; } int nInterleave = 100; int nSoundBufferPos = 0; int nCyclesTotal[2] = { 3072000 / 60, 3072000 / 60 }; M6809Open(0); ZetOpen(0); for (int i = 0; i < nInterleave; i++) { M6809Run(nCyclesTotal[0] / nInterleave); BurnTimerUpdate(i * (nCyclesTotal[1] / nInterleave)); if (pBurnSoundOut) { int nSegmentLength = nBurnSoundLen - nSoundBufferPos; short* pSoundBuf = pBurnSoundOut + (nSoundBufferPos << 1); BurnYM2203Update(pSoundBuf, nSegmentLength); nSoundBufferPos += nSegmentLength; } } BurnTimerEndFrame(nCyclesTotal[1]); if (*irq_enable) M6809SetIRQ(0, M6809_IRQSTATUS_AUTO); if (pBurnSoundOut) { int nSegmentLength = nBurnSoundLen - nSoundBufferPos; short* pSoundBuf = pBurnSoundOut + (nSoundBufferPos << 1); if (nSegmentLength) { BurnYM2203Update(pSoundBuf, nSegmentLength); } } ZetClose(); M6809Close(); if (pBurnDraw) { DrvDraw(); } return 0; }