Emulator: Switch to pixel FIFO
This commit is contained in:
+13
-14
@@ -57,8 +57,7 @@ void PPU::update()
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case State::PixelTransfer:
|
case State::PixelTransfer:
|
||||||
// PixelTransfer logic goes here..
|
pixelFifo();
|
||||||
m_lcd_x_coordinate++;
|
|
||||||
|
|
||||||
if (m_lcd_x_coordinate == 160) {
|
if (m_lcd_x_coordinate == 160) {
|
||||||
m_lcd_x_coordinate = 0;
|
m_lcd_x_coordinate = 0;
|
||||||
@@ -110,20 +109,20 @@ void PPU::render()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// Tile map
|
// // Tile map
|
||||||
uint32_t tile_map_size = 32 * 32; // 1 KiB
|
// uint32_t tile_map_size = 32 * 32; // 1 KiB
|
||||||
uint32_t bg_tile_map_address = (lcd_control & LCDC::BGTileMapArea) ? 0x9c00 : 0x9800;
|
// uint32_t bg_tile_map_address = (lcd_control & LCDC::BGTileMapArea) ? 0x9c00 : 0x9800;
|
||||||
// uint32_t window_tile_map_address = (lcd_control & LCDC::WindowTileMapArea) ? 0x9c00 : 0x9800;
|
// // uint32_t window_tile_map_address = (lcd_control & LCDC::WindowTileMapArea) ? 0x9c00 : 0x9800;
|
||||||
|
|
||||||
// Tile data
|
// // Tile data
|
||||||
// uint32_t tile_data_size = 4096; // 4KiB / 16B = 256 tiles
|
// // uint32_t tile_data_size = 4096; // 4KiB / 16B = 256 tiles
|
||||||
bool tile_data_mode = lcd_control & LCDC::BGandWindowTileDataArea;
|
// bool tile_data_mode = lcd_control & LCDC::BGandWindowTileDataArea;
|
||||||
uint32_t tile_data_address = (tile_data_mode) ? 0x8000 : 0x8800;
|
// uint32_t tile_data_address = (tile_data_mode) ? 0x8000 : 0x8800;
|
||||||
|
|
||||||
for (uint32_t i = 0; i < tile_map_size; ++i) {
|
// for (uint32_t i = 0; i < tile_map_size; ++i) {
|
||||||
uint8_t tile_index = Emu::the().readMemory(bg_tile_map_address + i);
|
// uint8_t tile_index = Emu::the().readMemory(bg_tile_map_address + i);
|
||||||
drawTile((i % 32) * TILE_WIDTH, (i / 32) * TILE_HEIGHT, tile_data_address + (tile_index * TILE_SIZE));
|
// // drawTile((i % 32) * TILE_WIDTH, (i / 32) * TILE_HEIGHT, tile_data_address + (tile_index * TILE_SIZE));
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
auto& scene = Inferno::Application::the().scene();
|
auto& scene = Inferno::Application::the().scene();
|
||||||
|
|||||||
Reference in New Issue
Block a user