Browse Source

Emulator: Fix PPU clocks and LCD offsets

master
Riyyi 2 years ago
parent
commit
5e6972e4da
  1. 4
      src/loader.cpp
  2. 10
      src/ppu.cpp

4
src/loader.cpp

@ -43,9 +43,9 @@ void Loader::init()
{
destroy();
Emu::the().init(8000000);
Emu::the().init(4000000);
auto cpu = std::make_shared<CPU>(8000000);
auto cpu = std::make_shared<CPU>(4000000);
auto ppu = std::make_shared<PPU>(4000000);
Emu::the().addProcessingUnit("CPU", cpu);

10
src/ppu.cpp

@ -48,7 +48,7 @@ void PPU::update()
case State::OAMSearch:
// OAM logic goes here..
if (m_clocks_into_frame % 20 == 0) {
if (m_clocks_into_frame % 80 == 0) {
m_state = State::PixelTransfer;
}
break;
@ -64,26 +64,26 @@ void PPU::update()
case State::HBlank:
// H-Blank logic goes here..
if (m_clocks_into_frame % (20 + 43 + 51) == 0) {
if (m_clocks_into_frame % (80 + 172 + 204) == 0) {
m_lcd_y_coordinate++;
if (m_lcd_y_coordinate == 144) {
m_state = State::VBlank;
}
else {
m_state = State::OAMSearch;
}
m_lcd_y_coordinate++;
}
break;
case State::VBlank:
// V-Blank logic goes here..
if (m_clocks_into_frame % (20 + 43 + 51) == 0) {
if (m_clocks_into_frame % (80 + 172 + 204) == 0) {
m_lcd_y_coordinate++;
if (m_lcd_y_coordinate == 154) {
m_lcd_y_coordinate = 0;
m_clocks_into_frame = 0;
m_state = State::OAMSearch;
}
m_lcd_y_coordinate++;
}
break;

Loading…
Cancel
Save