Пример #1
0
void Video::updateGraphics(const int &cycles, CPU &cpuTemp)
{
	setLCDStatus(cpuTemp);

	if (isLCDEnabled())
		_scanLineCounter -= cycles;
	else
		return;

	if (_scanLineCounter <= 0)
	{
		// time to move onto next scanline
		_memory->directModification(LY, _memory->read(LY) + 1);
		BYTE currentline = _memory->read(LY);

		_scanLineCounter = 456;

		// we have entered vertical blank period
		if (currentline == 144)
			cpuTemp.requestInterrupt(VBlank);

		// if gone past scanline 153 reset to 0
		else if (currentline > 153)
			_memory->directModification(LY, 0x00);

		// draw the current scanline 
		else if (currentline < 144)
			drawScanLine();
	}
}
Пример #2
0
void Lcd::advanceTransfer()
{
    if (lcdCycles >= 172)
    {
        setMode(HBlank);
        
        drawScanLine();
        incrementScanLine();
    }
}