void NES_FrameExec()
{
static DWORD nScreenNum = -1;
nScreenNum++;
int i;
CClientDC dc(&(((CMainFrame *)AfxGetApp()->m_pMainWnd)->m_wndView));
PPU.RanderBottomBG(ScreenBit);
// Scanline 0
if (Nes_RenderMethod < POST_RENDER)
{
CPU.ExecOnBaseCycle(NesCfg->ScanlineCycles);
PPU.FrameStart();
PPU.ScanlineNext();
PPU.ScanlineStart();
}
else
{
CPU.ExecOnBaseCycle(NesCfg->HDrawCycles);
PPU.FrameStart();
PPU.ScanlineNext();
CPU.ExecOnBaseCycle(FETCH_CYCLES * 32);
PPU.ScanlineStart();
CPU.ExecOnBaseCycle(FETCH_CYCLES * 10 + NesCfg->ScanlineEndCycles);
}
for (i = 1; i < 240; i++)
{
if (Nes_RenderMethod < POST_RENDER)
{
if (Nes_RenderMethod == POST_ALL_RENDER)
CPU.ExecOnBaseCycle(NesCfg->ScanlineCycles);
PPU.ScanLine(ScreenBit, i);
PPU.ScanlineNext();
if (Nes_RenderMethod == PRE_ALL_RENDER)
CPU.ExecOnBaseCycle(NesCfg->ScanlineCycles);
PPU.ScanlineStart();
}
else
{
if (Nes_RenderMethod == POST_RENDER)
CPU.ExecOnBaseCycle(NesCfg->HDrawCycles);
PPU.ScanLine(ScreenBit, i);
if (Nes_RenderMethod == PRE_RENDER)
CPU.ExecOnBaseCycle(NesCfg->HDrawCycles);
PPU.ScanlineNext();
CPU.ExecOnBaseCycle(FETCH_CYCLES * 32);
PPU.ScanlineStart();
CPU.ExecOnBaseCycle(FETCH_CYCLES * 10+NesCfg->ScanlineEndCycles);
}
}
::StretchDIBits(dc.m_hDC, 0, 0, 256, 224, 0, 8, 256, 224,
ScreenBit, pBmpInfo, DIB_RGB_COLORS, SRCCOPY);
CPU.ExecOnBaseCycle(NesCfg->HDrawCycles);
CPU.ExecOnBaseCycle(NesCfg->HBlankCycles);
PPU.VBlankStart();
if (PPU.m_REG[0] & PPU_VBLANK_BIT )
CPU.NMI();
CPU.ExecOnBaseCycle(NesCfg->HDrawCycles);
CPU.ExecOnBaseCycle(NesCfg->HBlankCycles);
for (i = 242; i < NesCfg->TotalScanlines - 1; i++)
{
CPU.ExecOnBaseCycle(NesCfg->HDrawCycles);
CPU.ExecOnBaseCycle(NesCfg->HBlankCycles);
}
PPU.VBlankEnd();
CPU.ExecOnBaseCycle(NesCfg->HDrawCycles);
CPU.ExecOnBaseCycle(NesCfg->HBlankCycles);
}
{
static DWORD nScreenNum = -1;
nScreenNum++;
int i;
CClientDC dc(&(((CMainFrame *)AfxGetApp()->m_pMainWnd)->m_wndView));
PPU.RanderBottomBG(ScreenBit);
// Scanline 0
if (Nes_RenderMethod < POST_RENDER)
{
CPU.ExecOnBaseCycle(NesCfg->ScanlineCycles);
PPU.FrameStart();
PPU.ScanlineNext();
PPU.ScanlineStart();
}
else
{
CPU.ExecOnBaseCycle(NesCfg->HDrawCycles);
PPU.FrameStart();
PPU.ScanlineNext();
CPU.ExecOnBaseCycle(FETCH_CYCLES * 32);
PPU.ScanlineStart();
CPU.ExecOnBaseCycle(FETCH_CYCLES * 10 + NesCfg->ScanlineEndCycles);
}
for (i = 1; i < 240; i++)
{
if (Nes_RenderMethod < POST_RENDER)
{
if (Nes_RenderMethod == POST_ALL_RENDER)
CPU.ExecOnBaseCycle(NesCfg->ScanlineCycles);
PPU.ScanLine(ScreenBit, i);
PPU.ScanlineNext();
if (Nes_RenderMethod == PRE_ALL_RENDER)
CPU.ExecOnBaseCycle(NesCfg->ScanlineCycles);
PPU.ScanlineStart();
}
else
{
if (Nes_RenderMethod == POST_RENDER)
CPU.ExecOnBaseCycle(NesCfg->HDrawCycles);
PPU.ScanLine(ScreenBit, i);
if (Nes_RenderMethod == PRE_RENDER)
CPU.ExecOnBaseCycle(NesCfg->HDrawCycles);
PPU.ScanlineNext();
CPU.ExecOnBaseCycle(FETCH_CYCLES * 32);
PPU.ScanlineStart();
CPU.ExecOnBaseCycle(FETCH_CYCLES * 10+NesCfg->ScanlineEndCycles);
}
}
::StretchDIBits(dc.m_hDC, 0, 0, 256, 224, 0, 8, 256, 224,
ScreenBit, pBmpInfo, DIB_RGB_COLORS, SRCCOPY);
CPU.ExecOnBaseCycle(NesCfg->HDrawCycles);
CPU.ExecOnBaseCycle(NesCfg->HBlankCycles);
PPU.VBlankStart();
if (PPU.m_REG[0] & PPU_VBLANK_BIT )
CPU.NMI();
CPU.ExecOnBaseCycle(NesCfg->HDrawCycles);
CPU.ExecOnBaseCycle(NesCfg->HBlankCycles);
for (i = 242; i < NesCfg->TotalScanlines - 1; i++)
{
CPU.ExecOnBaseCycle(NesCfg->HDrawCycles);
CPU.ExecOnBaseCycle(NesCfg->HBlankCycles);
}
PPU.VBlankEnd();
CPU.ExecOnBaseCycle(NesCfg->HDrawCycles);
CPU.ExecOnBaseCycle(NesCfg->HBlankCycles);
}











