static void DrvIRQCallback(int, int nStatus) { if (nStatus) Sh2SetIRQLine(12, SH2_IRQSTATUS_AUTO); else Sh2SetIRQLine(12, SH2_IRQSTATUS_NONE); }
static int DrvFrame() { int nInterleave = 10; int nSoundBufferPos = 0; if (DrvReset) DrvDoReset(); DrvMakeInputs(); nCyclesTotal[0] = 28638000 / 60; nCyclesDone[0] = 0; for (int i = 0; i < nInterleave; i++) { int nCurrentCPU, nNext; nCurrentCPU = 0; Sh2Open(0); nNext = (i + 1) * nCyclesTotal[nCurrentCPU] / nInterleave; nCyclesSegment = nNext - nCyclesDone[nCurrentCPU]; nCyclesDone[nCurrentCPU] += Sh2Run(nCyclesSegment); if (i == 5) Sh2SetIRQLine(1, SH2_IRQSTATUS_AUTO); if (i == 9) Sh2SetIRQLine(5, SH2_IRQSTATUS_AUTO); Sh2Close(); } if (pBurnDraw) DrvDraw(); return 0; }
static int DrvFrame() { if (DrvReset) { DrvDoReset(); } Sh2NewFrame(); { DrvInputs = ~0x60 | (DrvDips[0] & 0x60); for (int i = 0; i < 32; i++) { DrvInputs ^= (DrvJoy1[i] & 1) << i; } } BurnTimerEndFrame(28636350 / 60); Sh2SetIRQLine(4, SH2_IRQSTATUS_AUTO); if (pBurnSoundOut) { BurnYMF278BUpdate(nBurnSoundLen); } if (pBurnDraw) { PsikyoshDraw(); } memcpy (DrvSprBuf, DrvSprRAM, 0x4000); return 0; }
void __fastcall ps5_write_byte(unsigned int address, unsigned char data) { address &= 0xc7ffffff; if ((address & 0xfffffe00) == 0x4050000) { address ^= 3; DrvZoomRAM[address & 0x1ff] = data; return; } if ((address & 0xffffffe0) == 0x405ffe0) { address ^= 3; DrvVidRegs[address & 0x1f] = data; DrvZoomRAM[address & 0xffff] = data; if ((address & 0x1c) == 0x10) { graphics_bank(); } return; } switch (address) { case 0x405ffdd: if (!(data & 0xc0)) Sh2SetIRQLine(4, SH2_IRQSTATUS_NONE); return; case 0x3100000: case 0x3100002: case 0x3100004: case 0x3100006: BurnYMF278BSelectRegister((address >> 1) & 3, data); return; case 0x3100001: case 0x3100003: case 0x3100005: case 0x3100007: BurnYMF278BWriteRegister((address >> 1) & 3, data); return; case 0x3000004: EEPROMWrite((data & 0x40), (data & 0x80), (data & 0x20)); return; } }