screen(0),
oldscreen(0), newscreen(0),
display_mode(NORMAL),
+ background_enabled(true), window_enabled(true), sprites_enabled(true),
cycles_until_next_update(0)
{
oldscreen = new u8[160*144];
int line_base = 160*LY;
// Draw the background
- if (check_bit(LCDC, 0)) // is BG display active?
+ if (background_enabled && check_bit(LCDC, 0)) // is BG display active?
{
u16 tile_map_addr = check_bit(LCDC,3) ? 0x1C00 : 0x1800;
u16 tile_data_addr = check_bit(LCDC,4) ? 0x0000 : 0x0800;
//logger.trace("LCDC=0x", std::hex, LCDC, " LY=", LY, " WY=", WY);
// Draw the window
- if (check_bit(LCDC, 5) && LY > WY && LY < 144) // is BG display active?
+ if (window_enabled && check_bit(LCDC, 5) && LY > WY && LY < 144) // is BG display active?
{
u16 tile_map_addr = check_bit(LCDC,6) ? 0x1C00 : 0x1800;
u16 tile_data_addr = check_bit(LCDC,4) ? 0x0000 : 0x0800;
}
// ------- SPRITES
- if (check_bit(LCDC, 1))
+ if (sprites_enabled && check_bit(LCDC, 1))
{
int sprite_size = (LCDC & 0x4) >> 2;
std::vector<Sprite> v;
viewDisassemblyWindow = new QAction(tr("&Disassembly window"), this);
viewStatusWindow = new QAction(tr("&Status window"), this);
viewDisassemblyWindow->setCheckable(true);
- viewStatusWindow->setCheckable(true);
viewDisassemblyWindow->setChecked(true);
+ viewStatusWindow->setCheckable(true);
viewStatusWindow->setChecked(true);
scalingGroup = new QActionGroup(this);
scalingScale2X = new QAction(tr("Scale&2X"), scalingGroup);
scalingNone->setCheckable(true);
scalingQImage->setCheckable(true);
- scalingScale2X->setCheckable(true);
scalingQImage->setChecked(true);
+ scalingScale2X->setCheckable(true);
+ debugVideoDrawBackground = new QAction(tr("Draw background"), this);
+ debugVideoDrawWindow = new QAction(tr("Draw window"), this);
+ debugVideoDrawSprites = new QAction(tr("Draw sprites"), this);
+ debugVideoDrawBackground->setCheckable(true);
+ debugVideoDrawBackground->setChecked(true);
+ debugVideoDrawWindow->setCheckable(true);
+ debugVideoDrawWindow->setChecked(true);
+ debugVideoDrawSprites->setCheckable(true);
+ debugVideoDrawSprites->setChecked(true);
loadROM->setShortcut(QKeySequence(tr("Ctrl+O", "File|Load ROM...")));
emulatorCont->setShortcut(QKeySequence(tr("F5", "Emulator|Go")));
connect(scalingNone, SIGNAL(triggered()), this, SLOT(onScalingNone()));
connect(scalingQImage, SIGNAL(triggered()), this, SLOT(onScalingQImage()));
connect(scalingScale2X, SIGNAL(triggered()), this, SLOT(onScalingScale2X()));
+ connect(debugVideoDrawBackground, SIGNAL(triggered()), this, SLOT(onDebugVideoDrawBackground()));
+ connect(debugVideoDrawWindow, SIGNAL(triggered()), this, SLOT(onDebugVideoDrawWindow()));
+ connect(debugVideoDrawSprites, SIGNAL(triggered()), this, SLOT(onDebugVideoDrawSprites()));
}
QMenu *debug;
debug = menuBar()->addMenu(tr("&Debug"));
debug->addAction(emulatorStep);
+ QMenu *debugVideo = debug->addMenu(tr("&Video"));
+ debugVideo->addAction(debugVideoDrawBackground);
+ debugVideo->addAction(debugVideoDrawWindow);
+ debugVideo->addAction(debugVideoDrawSprites);
connect(quit, SIGNAL(triggered()), qApp, SLOT(quit()));
connect(loadROM, SIGNAL(triggered()), this, SLOT(onLoadROM()));
}
}
+void QtBoiMainWindow::onDebugVideoDrawBackground()
+{
+ emuThread->gb.video.draw_background(debugVideoDrawBackground->isChecked());
+}
+
+void QtBoiMainWindow::onDebugVideoDrawWindow()
+{
+ emuThread->gb.video.draw_window(debugVideoDrawWindow->isChecked());
+}
+
+void QtBoiMainWindow::onDebugVideoDrawSprites()
+{
+ emuThread->gb.video.draw_sprites(debugVideoDrawSprites->isChecked());
+}