diff --git a/bsnes/Makefile b/bsnes/Makefile
index da0794e7..b82a6065 100755
--- a/bsnes/Makefile
+++ b/bsnes/Makefile
@@ -1,6 +1,6 @@
include nall/Makefile
snes := snes
-profile := accuracy
+profile := performance
ui := qt
# compiler
@@ -64,6 +64,7 @@ ifeq ($(platform),x)
install -D -m 755 out/bsnes-$(profile) $(DESTDIR)$(prefix)/bin/bsnes-$(profile)
install -D -m 644 qt/data/bsnes.png $(DESTDIR)$(prefix)/share/pixmaps/bsnes.png
install -D -m 644 qt/data/bsnes.desktop $(DESTDIR)$(prefix)/share/applications/bsnes.desktop
+ gconftool-2 --type bool --set /desktop/gnome/interface/menus_have_icons true
endif
uninstall:
diff --git a/bsnes/qt/base/main.cpp b/bsnes/qt/base/main.cpp
index 4ac11bc1..8fdf33e8 100755
--- a/bsnes/qt/base/main.cpp
+++ b/bsnes/qt/base/main.cpp
@@ -18,34 +18,26 @@ MainWindow::MainWindow() {
system = menuBar->addMenu("&System");
system_load = system->addAction("Load &Cartridge ...");
- system_load->setIcon(QIcon(":/16x16/document-open.png"));
system_loadSpecial = system->addMenu("Load &Special");
- system_loadSpecial->setIcon(QIcon(":/16x16/document-open.png"));
system_loadSpecial_bsxSlotted = system_loadSpecial->addAction("Load BS-X &Slotted Cartridge ...");
- system_loadSpecial_bsxSlotted->setIcon(QIcon(":/16x16/document-open.png"));
system_loadSpecial_bsx = system_loadSpecial->addAction("Load &BS-X Cartridge ...");
- system_loadSpecial_bsx->setIcon(QIcon(":/16x16/document-open.png"));
system_loadSpecial_sufamiTurbo = system_loadSpecial->addAction("Load Sufami &Turbo Cartridge ...");
- system_loadSpecial_sufamiTurbo->setIcon(QIcon(":/16x16/document-open.png"));
system_loadSpecial_superGameBoy = system_loadSpecial->addAction("Load Super &Game Boy Cartridge ...");
- system_loadSpecial_superGameBoy->setIcon(QIcon(":/16x16/document-open.png"));
system->addSeparator();
system->addAction(system_power = new CheckAction("&Power", 0));
system_reset = system->addAction("&Reset");
- system_reset->setIcon(QIcon(":/16x16/view-refresh.png"));
system->addSeparator();
system_port1 = system->addMenu("Controller Port &1");
- system_port1->setIcon(QIcon(":/16x16/input-gaming.png"));
system_port1->addAction(system_port1_none = new RadioAction("&None", 0));
system_port1->addAction(system_port1_gamepad = new RadioAction("&Gamepad", 0));
system_port1->addAction(system_port1_asciipad = new RadioAction("&asciiPad", 0));
@@ -53,7 +45,6 @@ MainWindow::MainWindow() {
system_port1->addAction(system_port1_mouse = new RadioAction("&Mouse", 0));
system_port2 = system->addMenu("Controller Port &2");
- system_port2->setIcon(QIcon(":/16x16/input-gaming.png"));
system_port2->addAction(system_port2_none = new RadioAction("&None", 0));
system_port2->addAction(system_port2_gamepad = new RadioAction("&Gamepad", 0));
system_port2->addAction(system_port2_asciipad = new RadioAction("&asciiPad", 0));
@@ -68,13 +59,11 @@ MainWindow::MainWindow() {
#endif
system_exit = system->addAction("E&xit");
- system_exit->setIcon(QIcon(":/16x16/process-stop.png"));
system_exit->setMenuRole(QAction::QuitRole);
settings = menuBar->addMenu("S&ettings");
settings_videoMode = settings->addMenu("Video &Mode");
- settings_videoMode->setIcon(QIcon(":/16x16/video-display.png"));
settings_videoMode->addAction(settings_videoMode_1x = new RadioAction("Scale &1x", 0));
@@ -103,10 +92,8 @@ MainWindow::MainWindow() {
if(filter.opened()) {
settings_videoFilter = settings->addMenu("Video &Filter");
- settings_videoFilter->setIcon(QIcon(":/16x16/image-x-generic.png"));
settings_videoFilter_configure = settings_videoFilter->addAction("&Configure Active Filter ...");
- settings_videoFilter_configure->setIcon(QIcon(":/16x16/preferences-desktop.png"));
settings_videoFilter->addSeparator();
settings_videoFilter->addAction(settings_videoFilter_none = new RadioAction("&None", 0));
@@ -130,7 +117,6 @@ MainWindow::MainWindow() {
settings->addSeparator();
settings_emulationSpeed = settings->addMenu("Emulation &Speed");
- settings_emulationSpeed->setIcon(QIcon(":/16x16/appointment-new.png"));
settings_emulationSpeed->addAction(settings_emulationSpeed_slowest = new RadioAction("Slowest", 0));
@@ -149,28 +135,21 @@ MainWindow::MainWindow() {
settings_emulationSpeed->addAction(settings_emulationSpeed_syncAudio = new CheckAction("Sync &Audio", 0));
settings_configuration = settings->addAction("&Configuration ...");
- settings_configuration->setIcon(QIcon(":/16x16/preferences-desktop.png"));
settings_configuration->setMenuRole(QAction::PreferencesRole);
tools = menuBar->addMenu("&Tools");
tools_movies = tools->addMenu("&Movies");
- tools_movies->setIcon(QIcon(":/16x16/applications-multimedia.png"));
tools_movies_play = tools_movies->addAction("Play Movie ...");
- tools_movies_play->setIcon(QIcon(":/16x16/media-playback-start.png"));
tools_movies_stop = tools_movies->addAction("Stop");
- tools_movies_stop->setIcon(QIcon(":/16x16/media-playback-stop.png"));
tools_movies_recordFromPowerOn = tools_movies->addAction("Record Movie (and restart system)");
- tools_movies_recordFromPowerOn->setIcon(QIcon(":/16x16/media-record.png"));
tools_movies_recordFromHere = tools_movies->addAction("Record Movie (starting from here)");
- tools_movies_recordFromHere->setIcon(QIcon(":/16x16/media-record.png"));
tools_captureScreenshot = tools->addAction("&Capture Screenshot");
- tools_captureScreenshot->setIcon(QIcon(":/16x16/image-x-generic.png"));
tools->addSeparator();
@@ -193,16 +172,12 @@ MainWindow::MainWindow() {
tools->addSeparator();
tools_cheatEditor = tools->addAction("Cheat &Editor ...");
- tools_cheatEditor->setIcon(QIcon(":/16x16/accessories-text-editor.png"));
tools_cheatFinder = tools->addAction("Cheat &Finder ...");
- tools_cheatFinder->setIcon(QIcon(":/16x16/system-search.png"));
tools_stateManager = tools->addAction("&State Manager ...");
- tools_stateManager->setIcon(QIcon(":/16x16/system-file-manager.png"));
tools_debugger = tools->addAction("&Debugger ...");
- tools_debugger->setIcon(QIcon(":/16x16/utilities-terminal.png"));
#if !defined(DEBUGGER)
tools_debugger->setVisible(false);
#endif
@@ -210,17 +185,14 @@ MainWindow::MainWindow() {
help = menuBar->addMenu("&Help");
help_documentation = help->addAction("&Documentation ...");
- help_documentation->setIcon(QIcon(":/16x16/text-x-generic.png"));
help_license = help->addAction("&License ...");
- help_license->setIcon(QIcon(":/16x16/text-x-generic.png"));
#if !defined(PLATFORM_OSX)
help->addSeparator();
#endif
help_about = help->addAction("&About ...");
- help_about->setIcon(QIcon(":/16x16/help-browser.png"));
help_about->setMenuRole(QAction::AboutRole);
//canvas
diff --git a/bsnes/qt/data/icons-16x16/accessories-text-editor.png b/bsnes/qt/data/icons-16x16/accessories-text-editor.png
deleted file mode 100755
index 188e1c12..00000000
Binary files a/bsnes/qt/data/icons-16x16/accessories-text-editor.png and /dev/null differ
diff --git a/bsnes/qt/data/icons-16x16/applications-multimedia.png b/bsnes/qt/data/icons-16x16/applications-multimedia.png
deleted file mode 100755
index 3e4ced5b..00000000
Binary files a/bsnes/qt/data/icons-16x16/applications-multimedia.png and /dev/null differ
diff --git a/bsnes/qt/data/icons-16x16/appointment-new.png b/bsnes/qt/data/icons-16x16/appointment-new.png
deleted file mode 100755
index 18b7c678..00000000
Binary files a/bsnes/qt/data/icons-16x16/appointment-new.png and /dev/null differ
diff --git a/bsnes/qt/data/icons-16x16/audio-volume-high.png b/bsnes/qt/data/icons-16x16/audio-volume-high.png
deleted file mode 100755
index ec8f00b4..00000000
Binary files a/bsnes/qt/data/icons-16x16/audio-volume-high.png and /dev/null differ
diff --git a/bsnes/qt/data/icons-16x16/document-open.png b/bsnes/qt/data/icons-16x16/document-open.png
deleted file mode 100755
index ab940462..00000000
Binary files a/bsnes/qt/data/icons-16x16/document-open.png and /dev/null differ
diff --git a/bsnes/qt/data/icons-16x16/emblem-system.png b/bsnes/qt/data/icons-16x16/emblem-system.png
deleted file mode 100755
index 259ed26d..00000000
Binary files a/bsnes/qt/data/icons-16x16/emblem-system.png and /dev/null differ
diff --git a/bsnes/qt/data/icons-16x16/folder.png b/bsnes/qt/data/icons-16x16/folder.png
deleted file mode 100755
index 65bd0bbd..00000000
Binary files a/bsnes/qt/data/icons-16x16/folder.png and /dev/null differ
diff --git a/bsnes/qt/data/icons-16x16/help-browser.png b/bsnes/qt/data/icons-16x16/help-browser.png
deleted file mode 100755
index f25fc3fb..00000000
Binary files a/bsnes/qt/data/icons-16x16/help-browser.png and /dev/null differ
diff --git a/bsnes/qt/data/icons-16x16/image-x-generic.png b/bsnes/qt/data/icons-16x16/image-x-generic.png
deleted file mode 100755
index 68da5027..00000000
Binary files a/bsnes/qt/data/icons-16x16/image-x-generic.png and /dev/null differ
diff --git a/bsnes/qt/data/icons-16x16/input-gaming.png b/bsnes/qt/data/icons-16x16/input-gaming.png
deleted file mode 100755
index 9d040ee8..00000000
Binary files a/bsnes/qt/data/icons-16x16/input-gaming.png and /dev/null differ
diff --git a/bsnes/qt/data/icons-16x16/media-playback-start.png b/bsnes/qt/data/icons-16x16/media-playback-start.png
deleted file mode 100755
index a7de0feb..00000000
Binary files a/bsnes/qt/data/icons-16x16/media-playback-start.png and /dev/null differ
diff --git a/bsnes/qt/data/icons-16x16/media-playback-stop.png b/bsnes/qt/data/icons-16x16/media-playback-stop.png
deleted file mode 100755
index ede2815e..00000000
Binary files a/bsnes/qt/data/icons-16x16/media-playback-stop.png and /dev/null differ
diff --git a/bsnes/qt/data/icons-16x16/media-record.png b/bsnes/qt/data/icons-16x16/media-record.png
deleted file mode 100755
index 2f66cdeb..00000000
Binary files a/bsnes/qt/data/icons-16x16/media-record.png and /dev/null differ
diff --git a/bsnes/qt/data/icons-16x16/preferences-desktop.png b/bsnes/qt/data/icons-16x16/preferences-desktop.png
deleted file mode 100755
index 68f916c9..00000000
Binary files a/bsnes/qt/data/icons-16x16/preferences-desktop.png and /dev/null differ
diff --git a/bsnes/qt/data/icons-16x16/preferences-system.png b/bsnes/qt/data/icons-16x16/preferences-system.png
deleted file mode 100755
index 9460dfc7..00000000
Binary files a/bsnes/qt/data/icons-16x16/preferences-system.png and /dev/null differ
diff --git a/bsnes/qt/data/icons-16x16/process-stop.png b/bsnes/qt/data/icons-16x16/process-stop.png
deleted file mode 100755
index ab6808fb..00000000
Binary files a/bsnes/qt/data/icons-16x16/process-stop.png and /dev/null differ
diff --git a/bsnes/qt/data/icons-16x16/system-file-manager.png b/bsnes/qt/data/icons-16x16/system-file-manager.png
deleted file mode 100755
index 60cade46..00000000
Binary files a/bsnes/qt/data/icons-16x16/system-file-manager.png and /dev/null differ
diff --git a/bsnes/qt/data/icons-16x16/system-search.png b/bsnes/qt/data/icons-16x16/system-search.png
deleted file mode 100755
index fd7f0b07..00000000
Binary files a/bsnes/qt/data/icons-16x16/system-search.png and /dev/null differ
diff --git a/bsnes/qt/data/icons-16x16/text-x-generic.png b/bsnes/qt/data/icons-16x16/text-x-generic.png
deleted file mode 100755
index 2d7f2d60..00000000
Binary files a/bsnes/qt/data/icons-16x16/text-x-generic.png and /dev/null differ
diff --git a/bsnes/qt/data/icons-16x16/utilities-terminal.png b/bsnes/qt/data/icons-16x16/utilities-terminal.png
deleted file mode 100755
index c5b797a7..00000000
Binary files a/bsnes/qt/data/icons-16x16/utilities-terminal.png and /dev/null differ
diff --git a/bsnes/qt/data/icons-16x16/video-display.png b/bsnes/qt/data/icons-16x16/video-display.png
deleted file mode 100755
index 226881fd..00000000
Binary files a/bsnes/qt/data/icons-16x16/video-display.png and /dev/null differ
diff --git a/bsnes/qt/data/icons-16x16/view-refresh.png b/bsnes/qt/data/icons-16x16/view-refresh.png
deleted file mode 100755
index 3fd71d6e..00000000
Binary files a/bsnes/qt/data/icons-16x16/view-refresh.png and /dev/null differ
diff --git a/bsnes/qt/debugger/debugger.cpp b/bsnes/qt/debugger/debugger.cpp
index ee6f8781..21eadcf0 100755
--- a/bsnes/qt/debugger/debugger.cpp
+++ b/bsnes/qt/debugger/debugger.cpp
@@ -12,7 +12,6 @@ Debugger *debugger;
#include "tools/memory.cpp"
#include "tools/properties.cpp"
-#include "ppu/layer-toggle.cpp"
#include "ppu/vram-viewer.cpp"
#include "ppu/oam-viewer.cpp"
#include "ppu/cgram-viewer.cpp"
@@ -40,7 +39,6 @@ Debugger::Debugger() {
menu_tools_propertiesViewer = menu_tools->addAction("Properties Viewer ...");
menu_ppu = menu->addMenu("S-PPU");
- menu_ppu_layerToggle = menu_ppu->addAction("Layer Toggle ...");
menu_ppu_vramViewer = menu_ppu->addAction("Video RAM Viewer ...");
menu_ppu_oamViewer = menu_ppu->addAction("Sprite Viewer ...");
menu_ppu_cgramViewer = menu_ppu->addAction("Palette Viewer ...");
@@ -98,7 +96,6 @@ Debugger::Debugger() {
breakpointEditor = new BreakpointEditor;
memoryEditor = new MemoryEditor;
propertiesViewer = new PropertiesViewer;
- layerToggle = new LayerToggle;
vramViewer = new VramViewer;
oamViewer = new OamViewer;
cgramViewer = new CgramViewer;
@@ -109,7 +106,6 @@ Debugger::Debugger() {
connect(menu_tools_memory, SIGNAL(triggered()), memoryEditor, SLOT(show()));
connect(menu_tools_propertiesViewer, SIGNAL(triggered()), propertiesViewer, SLOT(show()));
- connect(menu_ppu_layerToggle, SIGNAL(triggered()), layerToggle, SLOT(show()));
connect(menu_ppu_vramViewer, SIGNAL(triggered()), vramViewer, SLOT(show()));
connect(menu_ppu_oamViewer, SIGNAL(triggered()), oamViewer, SLOT(show()));
connect(menu_ppu_cgramViewer, SIGNAL(triggered()), cgramViewer, SLOT(show()));
diff --git a/bsnes/qt/debugger/debugger.moc.hpp b/bsnes/qt/debugger/debugger.moc.hpp
index c4e8ca44..e2b97e90 100755
--- a/bsnes/qt/debugger/debugger.moc.hpp
+++ b/bsnes/qt/debugger/debugger.moc.hpp
@@ -9,7 +9,6 @@ public:
QAction *menu_tools_memory;
QAction *menu_tools_propertiesViewer;
QMenu *menu_ppu;
- QAction *menu_ppu_layerToggle;
QAction *menu_ppu_vramViewer;
QAction *menu_ppu_oamViewer;
QAction *menu_ppu_cgramViewer;
diff --git a/bsnes/qt/debugger/ppu/layer-toggle.cpp b/bsnes/qt/debugger/ppu/layer-toggle.cpp
deleted file mode 100755
index 136b5b5d..00000000
--- a/bsnes/qt/debugger/ppu/layer-toggle.cpp
+++ /dev/null
@@ -1,107 +0,0 @@
-#include "layer-toggle.moc"
-LayerToggle *layerToggle;
-
-LayerToggle::LayerToggle() {
- setObjectName("layer-toggle");
- setWindowTitle("S-PPU Layer Toggle");
- setGeometryString(&config().geometry.layerToggle);
- application.windowList.append(this);
-
- layout = new QGridLayout;
- layout->setSizeConstraint(QLayout::SetFixedSize);
- layout->setMargin(Style::WindowMargin);
- layout->setHorizontalSpacing(Style::WidgetSpacing);
- layout->setVerticalSpacing(0);
- setLayout(layout);
-
- bg1Label = new QLabel("BG1:");
- layout->addWidget(bg1Label, 0, 0);
-
- bg1pri0 = new QCheckBox("Priority 0");
- bg1pri0->setChecked(true);
- layout->addWidget(bg1pri0, 0, 1);
-
- bg1pri1 = new QCheckBox("Priority 1");
- bg1pri1->setChecked(true);
- layout->addWidget(bg1pri1, 0, 2);
-
- bg2Label = new QLabel("BG2:");
- layout->addWidget(bg2Label, 1, 0);
-
- bg2pri0 = new QCheckBox("Priority 0");
- bg2pri0->setChecked(true);
- layout->addWidget(bg2pri0, 1, 1);
-
- bg2pri1 = new QCheckBox("Priority 1");
- bg2pri1->setChecked(true);
- layout->addWidget(bg2pri1, 1, 2);
-
- bg3Label = new QLabel("BG3:");
- layout->addWidget(bg3Label, 2, 0);
-
- bg3pri0 = new QCheckBox("Priority 0");
- bg3pri0->setChecked(true);
- layout->addWidget(bg3pri0, 2, 1);
-
- bg3pri1 = new QCheckBox("Priority 1");
- bg3pri1->setChecked(true);
- layout->addWidget(bg3pri1, 2, 2);
-
- bg4Label = new QLabel("BG4:");
- layout->addWidget(bg4Label, 3, 0);
-
- bg4pri0 = new QCheckBox("Priority 0");
- bg4pri0->setChecked(true);
- layout->addWidget(bg4pri0, 3, 1);
-
- bg4pri1 = new QCheckBox("Priority 1");
- bg4pri1->setChecked(true);
- layout->addWidget(bg4pri1, 3, 2);
-
- oamLabel = new QLabel("OAM:");
- layout->addWidget(oamLabel, 4, 0);
-
- oampri0 = new QCheckBox("Priority 0");
- oampri0->setChecked(true);
- layout->addWidget(oampri0, 4, 1);
-
- oampri1 = new QCheckBox("Priority 1");
- oampri1->setChecked(true);
- layout->addWidget(oampri1, 4, 2);
-
- oampri2 = new QCheckBox("Priority 2");
- oampri2->setChecked(true);
- layout->addWidget(oampri2, 4, 3);
-
- oampri3 = new QCheckBox("Priority 3");
- oampri3->setChecked(true);
- layout->addWidget(oampri3, 4, 4);
-
- connect(bg1pri0, SIGNAL(stateChanged(int)), this, SLOT(toggleLayer()));
- connect(bg1pri1, SIGNAL(stateChanged(int)), this, SLOT(toggleLayer()));
- connect(bg2pri0, SIGNAL(stateChanged(int)), this, SLOT(toggleLayer()));
- connect(bg2pri1, SIGNAL(stateChanged(int)), this, SLOT(toggleLayer()));
- connect(bg3pri0, SIGNAL(stateChanged(int)), this, SLOT(toggleLayer()));
- connect(bg3pri1, SIGNAL(stateChanged(int)), this, SLOT(toggleLayer()));
- connect(bg4pri0, SIGNAL(stateChanged(int)), this, SLOT(toggleLayer()));
- connect(bg4pri1, SIGNAL(stateChanged(int)), this, SLOT(toggleLayer()));
- connect(oampri0, SIGNAL(stateChanged(int)), this, SLOT(toggleLayer()));
- connect(oampri1, SIGNAL(stateChanged(int)), this, SLOT(toggleLayer()));
- connect(oampri2, SIGNAL(stateChanged(int)), this, SLOT(toggleLayer()));
- connect(oampri3, SIGNAL(stateChanged(int)), this, SLOT(toggleLayer()));
-}
-
-void LayerToggle::toggleLayer() {
- if(sender() == bg1pri0) SNES::ppu.bg1_enabled[0] = bg1pri0->isChecked();
- if(sender() == bg1pri1) SNES::ppu.bg1_enabled[1] = bg1pri1->isChecked();
- if(sender() == bg2pri0) SNES::ppu.bg2_enabled[0] = bg2pri0->isChecked();
- if(sender() == bg2pri1) SNES::ppu.bg2_enabled[1] = bg2pri1->isChecked();
- if(sender() == bg3pri0) SNES::ppu.bg3_enabled[0] = bg3pri0->isChecked();
- if(sender() == bg3pri1) SNES::ppu.bg3_enabled[1] = bg3pri1->isChecked();
- if(sender() == bg4pri0) SNES::ppu.bg4_enabled[0] = bg4pri0->isChecked();
- if(sender() == bg4pri1) SNES::ppu.bg4_enabled[1] = bg4pri1->isChecked();
- if(sender() == oampri0) SNES::ppu.oam_enabled[0] = oampri0->isChecked();
- if(sender() == oampri1) SNES::ppu.oam_enabled[1] = oampri1->isChecked();
- if(sender() == oampri2) SNES::ppu.oam_enabled[2] = oampri2->isChecked();
- if(sender() == oampri3) SNES::ppu.oam_enabled[3] = oampri3->isChecked();
-}
diff --git a/bsnes/qt/debugger/ppu/layer-toggle.moc.hpp b/bsnes/qt/debugger/ppu/layer-toggle.moc.hpp
deleted file mode 100755
index 81b0bde4..00000000
--- a/bsnes/qt/debugger/ppu/layer-toggle.moc.hpp
+++ /dev/null
@@ -1,30 +0,0 @@
-class LayerToggle : public Window {
- Q_OBJECT
-
-public:
- QGridLayout *layout;
- QLabel *bg1Label;
- QCheckBox *bg1pri0;
- QCheckBox *bg1pri1;
- QLabel *bg2Label;
- QCheckBox *bg2pri0;
- QCheckBox *bg2pri1;
- QLabel *bg3Label;
- QCheckBox *bg3pri0;
- QCheckBox *bg3pri1;
- QLabel *bg4Label;
- QCheckBox *bg4pri0;
- QCheckBox *bg4pri1;
- QLabel *oamLabel;
- QCheckBox *oampri0;
- QCheckBox *oampri1;
- QCheckBox *oampri2;
- QCheckBox *oampri3;
-
- LayerToggle();
-
-public slots:
- void toggleLayer();
-};
-
-extern LayerToggle *layerToggle;
diff --git a/bsnes/qt/resource/resource.qrc b/bsnes/qt/resource/resource.qrc
index 95acae4c..02b0fc36 100755
--- a/bsnes/qt/resource/resource.qrc
+++ b/bsnes/qt/resource/resource.qrc
@@ -12,29 +12,7 @@
../data/icons-16x16/item-radio-on.png
../data/icons-16x16/item-radio-off.png
- ../data/icons-16x16/accessories-text-editor.png
- ../data/icons-16x16/applications-multimedia.png
- ../data/icons-16x16/appointment-new.png
- ../data/icons-16x16/audio-volume-high.png
- ../data/icons-16x16/document-open.png
- ../data/icons-16x16/emblem-system.png
- ../data/icons-16x16/folder.png
../data/icons-16x16/folder-new.png
../data/icons-16x16/go-up.png
- ../data/icons-16x16/help-browser.png
- ../data/icons-16x16/image-x-generic.png
- ../data/icons-16x16/input-gaming.png
- ../data/icons-16x16/media-playback-start.png
- ../data/icons-16x16/media-playback-stop.png
- ../data/icons-16x16/media-record.png
- ../data/icons-16x16/preferences-desktop.png
- ../data/icons-16x16/preferences-system.png
- ../data/icons-16x16/process-stop.png
- ../data/icons-16x16/system-file-manager.png
- ../data/icons-16x16/system-search.png
- ../data/icons-16x16/text-x-generic.png
- ../data/icons-16x16/utilities-terminal.png
- ../data/icons-16x16/video-display.png
- ../data/icons-16x16/view-refresh.png
diff --git a/bsnes/qt/settings/profile.cpp b/bsnes/qt/settings/profile.cpp
index 6df07922..fd1dc8e4 100755
--- a/bsnes/qt/settings/profile.cpp
+++ b/bsnes/qt/settings/profile.cpp
@@ -17,13 +17,7 @@ ProfileSettingsWindow::ProfileSettingsWindow() {
layout->addSpacing(Style::WidgetSpacing);
profileAccuracy = new QRadioButton("Accuracy");
- profileAccuracy->setStyleSheet(
- "font-weight: bold;"
- "font-size: 12pt;"
- #if !defined(PLATFORM_WIN)
- "background: qlineargradient(x1: 0, y1: 0, x2: 1, y2: 0, stop: 0 rgba(255, 0, 0, 48), stop: 1 rgba(255, 0, 0, 0));"
- #endif
- );
+ profileAccuracy->setStyleSheet("font-weight: bold; font-size: 12pt;");
layout->addWidget(profileAccuracy);
profileAccuracyInfo = new QLabel(
@@ -36,13 +30,7 @@ ProfileSettingsWindow::ProfileSettingsWindow() {
layout->addSpacing(Style::WidgetSpacing);
profileCompatibility = new QRadioButton("Compatibility");
- profileCompatibility->setStyleSheet(
- "font-weight: bold;"
- "font-size: 12pt;"
- #if !defined(PLATFORM_WIN)
- "background: qlineargradient(x1: 0, y1: 0, x2: 1, y2: 0, stop: 0 rgba(0, 0, 255, 48), stop: 1 rgba(0, 0, 255, 0));"
- #endif
- );
+ profileCompatibility->setStyleSheet("font-weight: bold; font-size: 12pt;");
layout->addWidget(profileCompatibility);
profileCompatibilityInfo = new QLabel(
@@ -55,13 +43,7 @@ ProfileSettingsWindow::ProfileSettingsWindow() {
layout->addSpacing(Style::WidgetSpacing);
profilePerformance = new QRadioButton("Performance");
- profilePerformance->setStyleSheet(
- "font-weight: bold;"
- "font-size: 12pt;"
- #if !defined(PLATFORM_WIN)
- "background: qlineargradient(x1: 0, y1: 0, x2: 1, y2: 0, stop: 0 rgba(0, 255, 0, 48), stop: 1 rgba(0, 255, 0, 0));"
- #endif
- );
+ profilePerformance->setStyleSheet("font-weight: bold; font-size: 12pt;");
layout->addWidget(profilePerformance);
profilePerformanceInfo = new QLabel(
diff --git a/bsnes/qt/settings/settings.cpp b/bsnes/qt/settings/settings.cpp
index ef67685b..a80f9faf 100755
--- a/bsnes/qt/settings/settings.cpp
+++ b/bsnes/qt/settings/settings.cpp
@@ -60,11 +60,11 @@ SettingsWindow::SettingsWindow() {
advancedArea->setWidgetResizable(true);
tab = new QTabWidget;
- tab->addTab(profileArea, QIcon(":/16x16/emblem-system.png"), "Profile");
- tab->addTab(videoArea, QIcon(":/16x16/video-display.png"), "Video");
- tab->addTab(audioArea, QIcon(":/16x16/audio-volume-high.png"), "Audio");
- tab->addTab(inputArea, QIcon(":/16x16/input-gaming.png"), "Input");
- tab->addTab(pathArea, QIcon(":/16x16/folder.png"), "Paths");
- tab->addTab(advancedArea, QIcon(":/16x16/preferences-system.png"), "Advanced");
+ tab->addTab(profileArea, "Profile");
+ tab->addTab(videoArea, "Video");
+ tab->addTab(audioArea, "Audio");
+ tab->addTab(inputArea, "Input");
+ tab->addTab(pathArea, "Paths");
+ tab->addTab(advancedArea, "Advanced");
layout->addWidget(tab);
}
diff --git a/bsnes/qt/tools/effecttoggle.cpp b/bsnes/qt/tools/effecttoggle.cpp
new file mode 100755
index 00000000..cec7ee60
--- /dev/null
+++ b/bsnes/qt/tools/effecttoggle.cpp
@@ -0,0 +1,151 @@
+#include "effecttoggle.moc"
+EffectToggleWindow *effectToggleWindow;
+
+EffectToggleWindow::EffectToggleWindow() {
+ layout = new QVBoxLayout;
+ layout->setAlignment(Qt::AlignTop);
+ layout->setMargin(Style::WindowMargin);
+ layout->setSpacing(Style::WidgetSpacing);
+ setLayout(layout);
+
+ ppuLabel = new QLabel("S-PPU (Video)");
+ layout->addWidget(ppuLabel);
+
+ ppuLayout = new QGridLayout;
+ ppuLayout->setAlignment(Qt::AlignLeft);
+ layout->addLayout(ppuLayout);
+
+ bg1pri0 = new QCheckBox("BG1 Priority 0");
+ bg1pri0->setChecked(true);
+ ppuLayout->addWidget(bg1pri0, 0, 0);
+
+ bg1pri1 = new QCheckBox("BG1 Priority 1");
+ bg1pri1->setChecked(true);
+ ppuLayout->addWidget(bg1pri1, 0, 1);
+
+ bg2pri0 = new QCheckBox("BG2 Priority 0");
+ bg2pri0->setChecked(true);
+ ppuLayout->addWidget(bg2pri0, 1, 0);
+
+ bg2pri1 = new QCheckBox("BG2 Priority 1");
+ bg2pri1->setChecked(true);
+ ppuLayout->addWidget(bg2pri1, 1, 1);
+
+ bg3pri0 = new QCheckBox("BG3 Priority 0");
+ bg3pri0->setChecked(true);
+ ppuLayout->addWidget(bg3pri0, 2, 0);
+
+ bg3pri1 = new QCheckBox("BG3 Priority 1");
+ bg3pri1->setChecked(true);
+ ppuLayout->addWidget(bg3pri1, 2, 1);
+
+ bg4pri0 = new QCheckBox("BG4 Priority 0");
+ bg4pri0->setChecked(true);
+ ppuLayout->addWidget(bg4pri0, 3, 0);
+
+ bg4pri1 = new QCheckBox("BG4 Priority 1");
+ bg4pri1->setChecked(true);
+ ppuLayout->addWidget(bg4pri1, 3, 1);
+
+ oampri0 = new QCheckBox("OAM Priority 0");
+ oampri0->setChecked(true);
+ ppuLayout->addWidget(oampri0, 4, 0);
+
+ oampri1 = new QCheckBox("OAM Priority 1");
+ oampri1->setChecked(true);
+ ppuLayout->addWidget(oampri1, 4, 1);
+
+ oampri2 = new QCheckBox("OAM Priority 2");
+ oampri2->setChecked(true);
+ ppuLayout->addWidget(oampri2, 4, 2);
+
+ oampri3 = new QCheckBox("OAM Priority 3");
+ oampri3->setChecked(true);
+ ppuLayout->addWidget(oampri3, 4, 3);
+
+ dspLabel = new QLabel("S-DSP (Audio)");
+ layout->addWidget(dspLabel);
+
+ dspLayout = new QGridLayout;
+ dspLayout->setAlignment(Qt::AlignLeft);
+ layout->addLayout(dspLayout);
+
+ channel0 = new QCheckBox("Channel 0");
+ channel0->setChecked(true);
+ dspLayout->addWidget(channel0, 0, 0);
+
+ channel1 = new QCheckBox("Channel 1");
+ channel1->setChecked(true);
+ dspLayout->addWidget(channel1, 0, 1);
+
+ channel2 = new QCheckBox("Channel 2");
+ channel2->setChecked(true);
+ dspLayout->addWidget(channel2, 0, 2);
+
+ channel3 = new QCheckBox("Channel 3");
+ channel3->setChecked(true);
+ dspLayout->addWidget(channel3, 0, 3);
+
+ channel4 = new QCheckBox("Channel 4");
+ channel4->setChecked(true);
+ dspLayout->addWidget(channel4, 1, 0);
+
+ channel5 = new QCheckBox("Channel 5");
+ channel5->setChecked(true);
+ dspLayout->addWidget(channel5, 1, 1);
+
+ channel6 = new QCheckBox("Channel 6");
+ channel6->setChecked(true);
+ dspLayout->addWidget(channel6, 1, 2);
+
+ channel7 = new QCheckBox("Channel 7");
+ channel7->setChecked(true);
+ dspLayout->addWidget(channel7, 1, 3);
+
+ connect(bg1pri0, SIGNAL(stateChanged(int)), this, SLOT(synchronize()));
+ connect(bg1pri1, SIGNAL(stateChanged(int)), this, SLOT(synchronize()));
+ connect(bg2pri0, SIGNAL(stateChanged(int)), this, SLOT(synchronize()));
+ connect(bg2pri1, SIGNAL(stateChanged(int)), this, SLOT(synchronize()));
+ connect(bg3pri0, SIGNAL(stateChanged(int)), this, SLOT(synchronize()));
+ connect(bg3pri1, SIGNAL(stateChanged(int)), this, SLOT(synchronize()));
+ connect(bg4pri0, SIGNAL(stateChanged(int)), this, SLOT(synchronize()));
+ connect(bg4pri1, SIGNAL(stateChanged(int)), this, SLOT(synchronize()));
+ connect(oampri0, SIGNAL(stateChanged(int)), this, SLOT(synchronize()));
+ connect(oampri1, SIGNAL(stateChanged(int)), this, SLOT(synchronize()));
+ connect(oampri2, SIGNAL(stateChanged(int)), this, SLOT(synchronize()));
+ connect(oampri3, SIGNAL(stateChanged(int)), this, SLOT(synchronize()));
+ connect(channel0, SIGNAL(stateChanged(int)), this, SLOT(synchronize()));
+ connect(channel1, SIGNAL(stateChanged(int)), this, SLOT(synchronize()));
+ connect(channel2, SIGNAL(stateChanged(int)), this, SLOT(synchronize()));
+ connect(channel3, SIGNAL(stateChanged(int)), this, SLOT(synchronize()));
+ connect(channel4, SIGNAL(stateChanged(int)), this, SLOT(synchronize()));
+ connect(channel5, SIGNAL(stateChanged(int)), this, SLOT(synchronize()));
+ connect(channel6, SIGNAL(stateChanged(int)), this, SLOT(synchronize()));
+ connect(channel7, SIGNAL(stateChanged(int)), this, SLOT(synchronize()));
+}
+
+void EffectToggleWindow::synchronize() {
+ #if defined(PROFILE_COMPATIBILITY) || defined(PROFILE_PERFORMANCE)
+ SNES::ppu.layer_enable(0, 0, bg1pri0->isChecked());
+ SNES::ppu.layer_enable(0, 1, bg1pri1->isChecked());
+ SNES::ppu.layer_enable(1, 0, bg2pri0->isChecked());
+ SNES::ppu.layer_enable(1, 1, bg2pri1->isChecked());
+ SNES::ppu.layer_enable(2, 0, bg3pri0->isChecked());
+ SNES::ppu.layer_enable(2, 1, bg3pri1->isChecked());
+ SNES::ppu.layer_enable(3, 0, bg4pri0->isChecked());
+ SNES::ppu.layer_enable(3, 1, bg4pri1->isChecked());
+ SNES::ppu.layer_enable(4, 0, oampri0->isChecked());
+ SNES::ppu.layer_enable(4, 1, oampri1->isChecked());
+ SNES::ppu.layer_enable(4, 2, oampri2->isChecked());
+ SNES::ppu.layer_enable(4, 3, oampri3->isChecked());
+
+ SNES::dsp.channel_enable(0, channel0->isChecked());
+ SNES::dsp.channel_enable(1, channel1->isChecked());
+ SNES::dsp.channel_enable(2, channel2->isChecked());
+ SNES::dsp.channel_enable(3, channel3->isChecked());
+ SNES::dsp.channel_enable(4, channel4->isChecked());
+ SNES::dsp.channel_enable(5, channel5->isChecked());
+ SNES::dsp.channel_enable(6, channel6->isChecked());
+ SNES::dsp.channel_enable(7, channel7->isChecked());
+ #endif
+}
diff --git a/bsnes/qt/tools/effecttoggle.moc.hpp b/bsnes/qt/tools/effecttoggle.moc.hpp
new file mode 100755
index 00000000..cd27ff10
--- /dev/null
+++ b/bsnes/qt/tools/effecttoggle.moc.hpp
@@ -0,0 +1,37 @@
+class EffectToggleWindow : public QWidget {
+ Q_OBJECT
+
+public:
+ QVBoxLayout *layout;
+ QLabel *ppuLabel;
+ QGridLayout *ppuLayout;
+ QCheckBox *bg1pri0;
+ QCheckBox *bg1pri1;
+ QCheckBox *bg2pri0;
+ QCheckBox *bg2pri1;
+ QCheckBox *bg3pri0;
+ QCheckBox *bg3pri1;
+ QCheckBox *bg4pri0;
+ QCheckBox *bg4pri1;
+ QCheckBox *oampri0;
+ QCheckBox *oampri1;
+ QCheckBox *oampri2;
+ QCheckBox *oampri3;
+ QLabel *dspLabel;
+ QGridLayout *dspLayout;
+ QCheckBox *channel0;
+ QCheckBox *channel1;
+ QCheckBox *channel2;
+ QCheckBox *channel3;
+ QCheckBox *channel4;
+ QCheckBox *channel5;
+ QCheckBox *channel6;
+ QCheckBox *channel7;
+
+ EffectToggleWindow();
+
+public slots:
+ void synchronize();
+};
+
+extern EffectToggleWindow *effectToggleWindow;
diff --git a/bsnes/qt/tools/tools.cpp b/bsnes/qt/tools/tools.cpp
index e1723263..61564c08 100755
--- a/bsnes/qt/tools/tools.cpp
+++ b/bsnes/qt/tools/tools.cpp
@@ -6,6 +6,7 @@ ToolsWindow *toolsWindow;
#include "cheateditor.cpp"
#include "cheatfinder.cpp"
#include "statemanager.cpp"
+#include "effecttoggle.cpp"
ToolsWindow::ToolsWindow() {
setObjectName("tools-window");
@@ -22,6 +23,7 @@ ToolsWindow::ToolsWindow() {
cheatEditorWindow = new CheatEditorWindow;
cheatFinderWindow = new CheatFinderWindow;
stateManagerWindow = new StateManagerWindow;
+ effectToggleWindow = new EffectToggleWindow;
cheatEditorArea = new QScrollArea;
cheatEditorArea->setWidget(cheatEditorWindow);
@@ -38,9 +40,17 @@ ToolsWindow::ToolsWindow() {
stateManagerArea->setFrameStyle(0);
stateManagerArea->setWidgetResizable(true);
+ effectToggleArea = new QScrollArea;
+ effectToggleArea->setWidget(effectToggleWindow);
+ effectToggleArea->setFrameStyle(0);
+ effectToggleArea->setWidgetResizable(true);
+
tab = new QTabWidget;
- tab->addTab(cheatEditorArea, QIcon(":/16x16/accessories-text-editor.png"), "Cheat Editor");
- tab->addTab(cheatFinderArea, QIcon(":/16x16/system-search.png"), "Cheat Finder");
- tab->addTab(stateManagerArea, QIcon(":/16x16/system-file-manager.png"), "State Manager");
+ tab->addTab(cheatEditorArea, "Cheat Editor");
+ tab->addTab(cheatFinderArea, "Cheat Finder");
+ tab->addTab(stateManagerArea, "State Manager");
+ #if defined(PROFILE_COMPATIBILITY) || defined(PROFILE_PERFORMANCE)
+ tab->addTab(effectToggleArea, "Effect Toggle");
+ #endif
layout->addWidget(tab);
}
diff --git a/bsnes/qt/tools/tools.moc.hpp b/bsnes/qt/tools/tools.moc.hpp
index 597869da..593adc45 100755
--- a/bsnes/qt/tools/tools.moc.hpp
+++ b/bsnes/qt/tools/tools.moc.hpp
@@ -7,6 +7,7 @@ public:
QScrollArea *cheatEditorArea;
QScrollArea *cheatFinderArea;
QScrollArea *stateManagerArea;
+ QScrollArea *effectToggleArea;
ToolsWindow();
diff --git a/bsnes/qt/ui-base.hpp b/bsnes/qt/ui-base.hpp
index 9ca2d625..ba91c1e3 100755
--- a/bsnes/qt/ui-base.hpp
+++ b/bsnes/qt/ui-base.hpp
@@ -47,7 +47,6 @@ using namespace ruby;
#include "debugger/tools/memory.moc.hpp"
#include "debugger/tools/properties.moc.hpp"
- #include "debugger/ppu/layer-toggle.moc.hpp"
#include "debugger/ppu/vram-viewer.moc.hpp"
#include "debugger/ppu/oam-viewer.moc.hpp"
#include "debugger/ppu/cgram-viewer.moc.hpp"
@@ -76,6 +75,7 @@ using namespace ruby;
#include "tools/cheateditor.moc.hpp"
#include "tools/cheatfinder.moc.hpp"
#include "tools/statemanager.moc.hpp"
+#include "tools/effecttoggle.moc.hpp"
#include "utility/utility.hpp"
diff --git a/bsnes/snes/alt/dsp/dsp.cpp b/bsnes/snes/alt/dsp/dsp.cpp
index b93d9a6f..a5ea8956 100755
--- a/bsnes/snes/alt/dsp/dsp.cpp
+++ b/bsnes/snes/alt/dsp/dsp.cpp
@@ -50,4 +50,17 @@ void DSP::reset() {
spc_dsp.set_output(samplebuffer, 8192);
}
+void DSP::channel_enable(unsigned channel, bool enable) {
+ channel_enabled[channel & 7] = enable;
+ unsigned mask = 0;
+ for(unsigned i = 0; i < 8; i++) {
+ if(channel_enabled[i] == false) mask |= 1 << i;
+ }
+ spc_dsp.mute_voices(mask);
+}
+
+DSP::DSP() {
+ for(unsigned i = 0; i < 8; i++) channel_enabled[i] = true;
+}
+
}
diff --git a/bsnes/snes/alt/dsp/dsp.hpp b/bsnes/snes/alt/dsp/dsp.hpp
index 1d3d234c..29cab585 100755
--- a/bsnes/snes/alt/dsp/dsp.hpp
+++ b/bsnes/snes/alt/dsp/dsp.hpp
@@ -13,12 +13,16 @@ public:
void power();
void reset();
+ void channel_enable(unsigned channel, bool enable);
+
void serialize(serializer&);
bool property(unsigned id, string &name, string &value) { return false; }
+ DSP();
private:
SPC_DSP spc_dsp;
int16 samplebuffer[8192];
+ bool channel_enabled[8];
};
extern DSP dsp;
diff --git a/bsnes/snes/alt/ppu-new/background/background.cpp b/bsnes/snes/alt/ppu-new/background/background.cpp
index 4795920d..41603aa2 100755
--- a/bsnes/snes/alt/ppu-new/background/background.cpp
+++ b/bsnes/snes/alt/ppu-new/background/background.cpp
@@ -76,6 +76,10 @@ void PPU::Background::render() {
if(regs.sub_enable) window.render(1);
if(regs.mode == Mode::Mode7) return render_mode7();
+ unsigned priority0 = (priority0_enable ? regs.priority0 : 0);
+ unsigned priority1 = (priority1_enable ? regs.priority1 : 0);
+ if(priority0 + priority1 == 0) return;
+
unsigned mosaic_hcounter = 1;
unsigned mosaic_palette = 0;
unsigned mosaic_priority = 0;
@@ -114,7 +118,7 @@ void PPU::Background::render() {
tile_num = get_tile(hoffset, voffset);
mirror_y = tile_num & 0x8000;
mirror_x = tile_num & 0x4000;
- tile_pri = tile_num & 0x2000 ? regs.priority1 : regs.priority0;
+ tile_pri = tile_num & 0x2000 ? priority1 : priority0;
pal_num = (tile_num >> 10) & 7;
pal_index = (bgpal_index + (pal_num << pal_size)) & 0xff;
@@ -158,6 +162,9 @@ void PPU::Background::render() {
}
PPU::Background::Background(PPU &self, unsigned id) : self(self), id(id) {
+ priority0_enable = true;
+ priority1_enable = true;
+
opt_valid_bit = (id == ID::BG1 ? 0x2000 : id == ID::BG2 ? 0x4000 : 0x0000);
mosaic_table = new uint16*[16];
diff --git a/bsnes/snes/alt/ppu-new/background/background.hpp b/bsnes/snes/alt/ppu-new/background/background.hpp
index f4923f71..3712e923 100755
--- a/bsnes/snes/alt/ppu-new/background/background.hpp
+++ b/bsnes/snes/alt/ppu-new/background/background.hpp
@@ -4,6 +4,9 @@ class Background {
struct ScreenSize { enum { Size32x32, Size32x64, Size64x32, Size64x64 }; };
struct TileSize { enum { Size8x8, Size16x16 }; };
+ bool priority0_enable;
+ bool priority1_enable;
+
struct Regs {
unsigned mode;
unsigned priority0;
diff --git a/bsnes/snes/alt/ppu-new/background/mode7.cpp b/bsnes/snes/alt/ppu-new/background/mode7.cpp
index e83b1139..026c4dae 100755
--- a/bsnes/snes/alt/ppu-new/background/mode7.cpp
+++ b/bsnes/snes/alt/ppu-new/background/mode7.cpp
@@ -27,6 +27,10 @@ void PPU::Background::render_mode7() {
mosaic_y = mosaic_table[self.bg1.regs.mosaic];
}
+ unsigned priority0 = (priority0_enable ? regs.priority0 : 0);
+ unsigned priority1 = (priority1_enable ? regs.priority1 : 0);
+ if(priority0 + priority1 == 0) return;
+
signed psx = ((a * Clip(hofs - cx)) & ~63) + ((b * Clip(vofs - cy)) & ~63) + ((b * mosaic_y[y]) & ~63) + (cx << 8);
signed psy = ((c * Clip(hofs - cx)) & ~63) + ((d * Clip(vofs - cy)) & ~63) + ((d * mosaic_y[y]) & ~63) + (cy << 8);
for(signed x = 0; x < 256; x++) {
@@ -75,9 +79,9 @@ void PPU::Background::render_mode7() {
unsigned priority;
if(id == ID::BG1) {
- priority = regs.priority0;
+ priority = priority0;
} else {
- priority = (palette & 0x80 ? regs.priority1 : regs.priority0);
+ priority = (palette & 0x80 ? priority1 : priority0);
palette &= 0x7f;
}
diff --git a/bsnes/snes/alt/ppu-new/debugger/debugger.hpp b/bsnes/snes/alt/ppu-new/debugger/debugger.hpp
index d2e3d913..9ce6a4e6 100755
--- a/bsnes/snes/alt/ppu-new/debugger/debugger.hpp
+++ b/bsnes/snes/alt/ppu-new/debugger/debugger.hpp
@@ -1,10 +1,4 @@
class PPUDebugger : public PPU, public ChipDebugger {
public:
bool property(unsigned id, string &name, string &value);
-
- bool bg1_enabled[2];
- bool bg2_enabled[2];
- bool bg3_enabled[2];
- bool bg4_enabled[2];
- bool oam_enabled[4];
};
diff --git a/bsnes/snes/alt/ppu-new/ppu.cpp b/bsnes/snes/alt/ppu-new/ppu.cpp
index bdf6d6d2..da1b539d 100755
--- a/bsnes/snes/alt/ppu-new/ppu.cpp
+++ b/bsnes/snes/alt/ppu-new/ppu.cpp
@@ -96,6 +96,23 @@ void PPU::reset() {
mmio_reset();
}
+void PPU::layer_enable(unsigned layer, unsigned priority, bool enable) {
+ switch(layer * 4 + priority) {
+ case 0: bg1.priority0_enable = enable; break;
+ case 1: bg1.priority1_enable = enable; break;
+ case 4: bg2.priority0_enable = enable; break;
+ case 5: bg2.priority1_enable = enable; break;
+ case 8: bg3.priority0_enable = enable; break;
+ case 9: bg3.priority1_enable = enable; break;
+ case 12: bg4.priority0_enable = enable; break;
+ case 13: bg4.priority1_enable = enable; break;
+ case 16: oam.priority0_enable = enable; break;
+ case 17: oam.priority1_enable = enable; break;
+ case 18: oam.priority2_enable = enable; break;
+ case 19: oam.priority3_enable = enable; break;
+ }
+}
+
PPU::PPU() :
cache(*this),
bg1(*this, Background::ID::BG1),
diff --git a/bsnes/snes/alt/ppu-new/ppu.hpp b/bsnes/snes/alt/ppu-new/ppu.hpp
index 63d6cc77..79eb37f2 100755
--- a/bsnes/snes/alt/ppu-new/ppu.hpp
+++ b/bsnes/snes/alt/ppu-new/ppu.hpp
@@ -15,6 +15,8 @@ public:
void scanline();
void frame();
+ void layer_enable(unsigned layer, unsigned priority, bool enable);
+
void serialize(serializer&);
PPU();
~PPU();
diff --git a/bsnes/snes/alt/ppu-new/sprite/sprite.cpp b/bsnes/snes/alt/ppu-new/sprite/sprite.cpp
index 40450d2c..222739cd 100755
--- a/bsnes/snes/alt/ppu-new/sprite/sprite.cpp
+++ b/bsnes/snes/alt/ppu-new/sprite/sprite.cpp
@@ -163,7 +163,13 @@ void PPU::Sprite::render() {
if(regs.main_enable) window.render(0);
if(regs.sub_enable) window.render(1);
- const unsigned priority_table[] = { regs.priority0, regs.priority1, regs.priority2, regs.priority3 };
+ unsigned priority0 = (priority0_enable ? regs.priority0 : 0);
+ unsigned priority1 = (priority1_enable ? regs.priority1 : 0);
+ unsigned priority2 = (priority2_enable ? regs.priority2 : 0);
+ unsigned priority3 = (priority3_enable ? regs.priority3 : 0);
+ if(priority0 + priority1 + priority2 + priority3 == 0) return;
+ const unsigned priority_table[] = { priority0, priority1, priority2, priority3 };
+
for(unsigned x = 0; x < 256; x++) {
if(output.priority[x] == 0xff) continue;
unsigned priority = priority_table[output.priority[x]];
@@ -175,6 +181,10 @@ void PPU::Sprite::render() {
}
PPU::Sprite::Sprite(PPU &self) : self(self) {
+ priority0_enable = true;
+ priority1_enable = true;
+ priority2_enable = true;
+ priority3_enable = true;
}
#endif
diff --git a/bsnes/snes/alt/ppu-new/sprite/sprite.hpp b/bsnes/snes/alt/ppu-new/sprite/sprite.hpp
index 279386f7..6229ec4a 100755
--- a/bsnes/snes/alt/ppu-new/sprite/sprite.hpp
+++ b/bsnes/snes/alt/ppu-new/sprite/sprite.hpp
@@ -1,4 +1,9 @@
class Sprite {
+ bool priority0_enable;
+ bool priority1_enable;
+ bool priority2_enable;
+ bool priority3_enable;
+
struct Regs {
unsigned priority0;
unsigned priority1;
diff --git a/bsnes/snes/alt/ppu/debugger/debugger.cpp b/bsnes/snes/alt/ppu/debugger/debugger.cpp
index 3d8958e8..a67455e5 100755
--- a/bsnes/snes/alt/ppu/debugger/debugger.cpp
+++ b/bsnes/snes/alt/ppu/debugger/debugger.cpp
@@ -1,7 +1,5 @@
#ifdef PPU_CPP
-#include "render.cpp"
-
uint8 PPUDebugger::vram_mmio_read(uint16 addr) {
uint8 data = PPU::vram_mmio_read(addr);
debugger.breakpoint_test(Debugger::Breakpoint::Source::VRAM, Debugger::Breakpoint::Mode::Read, addr, data);
@@ -36,11 +34,6 @@ void PPUDebugger::cgram_mmio_write(uint16 addr, uint8 data) {
}
PPUDebugger::PPUDebugger() {
- bg1_enabled[0] = bg1_enabled[1] = true;
- bg2_enabled[0] = bg2_enabled[1] = true;
- bg3_enabled[0] = bg3_enabled[1] = true;
- bg4_enabled[0] = bg4_enabled[1] = true;
- oam_enabled[0] = oam_enabled[1] = oam_enabled[2] = oam_enabled[3] = true;
}
bool PPUDebugger::property(unsigned id, string &name, string &value) {
diff --git a/bsnes/snes/alt/ppu/debugger/debugger.hpp b/bsnes/snes/alt/ppu/debugger/debugger.hpp
index 528704d2..f4ef8f51 100755
--- a/bsnes/snes/alt/ppu/debugger/debugger.hpp
+++ b/bsnes/snes/alt/ppu/debugger/debugger.hpp
@@ -2,12 +2,6 @@ class PPUDebugger : public PPU, public ChipDebugger {
public:
bool property(unsigned id, string &name, string &value);
- bool bg1_enabled[2];
- bool bg2_enabled[2];
- bool bg3_enabled[2];
- bool bg4_enabled[2];
- bool oam_enabled[4];
-
uint8 vram_mmio_read(uint16 addr);
void vram_mmio_write(uint16 addr, uint8 data);
@@ -17,14 +11,5 @@ public:
uint8 cgram_mmio_read(uint16 addr);
void cgram_mmio_write(uint16 addr, uint8 data);
- void render_line_mode0();
- void render_line_mode1();
- void render_line_mode2();
- void render_line_mode3();
- void render_line_mode4();
- void render_line_mode5();
- void render_line_mode6();
- void render_line_mode7();
-
PPUDebugger();
};
diff --git a/bsnes/snes/alt/ppu/debugger/render.cpp b/bsnes/snes/alt/ppu/debugger/render.cpp
deleted file mode 100755
index f6a999e1..00000000
--- a/bsnes/snes/alt/ppu/debugger/render.cpp
+++ /dev/null
@@ -1,194 +0,0 @@
-#ifdef PPU_CPP
-
-//render_line_modeN():
-//modified to support layer disable; accomplished by setting priority to zero
-//a priority of zero won't override the back layer, effectively nullifying it
-//for speed, rendering loop is skipped entirely if all priorities are disabled
-//
-//note: render_line_(bg|oam|mode7) cannot be virtualized as they are templates
-
-void PPUDebugger::render_line_mode0() {
- unsigned pri0, pri1, pri2, pri3;
-
- pri0 = bg1_enabled[0] ? 8 : 0;
- pri1 = bg1_enabled[1] ? 11 : 0;
- if(pri0 | pri1) PPU::render_line_bg<0, BG1, COLORDEPTH_4>(pri0, pri1);
-
- pri0 = bg2_enabled[0] ? 7 : 0;
- pri1 = bg2_enabled[1] ? 10 : 0;
- if(pri0 | pri1) PPU::render_line_bg<0, BG2, COLORDEPTH_4>(pri0, pri1);
-
- pri0 = bg3_enabled[0] ? 2 : 0;
- pri1 = bg3_enabled[1] ? 5 : 0;
- if(pri0 | pri1) PPU::render_line_bg<0, BG3, COLORDEPTH_4>(pri0, pri1);
-
- pri0 = bg4_enabled[0] ? 1 : 0;
- pri1 = bg4_enabled[1] ? 4 : 0;
- if(pri0 | pri1) PPU::render_line_bg<0, BG4, COLORDEPTH_4>(pri0, pri1);
-
- pri0 = oam_enabled[0] ? 3 : 0;
- pri1 = oam_enabled[1] ? 6 : 0;
- pri2 = oam_enabled[2] ? 9 : 0;
- pri3 = oam_enabled[3] ? 12 : 0;
- if(pri0 | pri1 | pri2 | pri3) PPU::render_line_oam(pri0, pri1, pri2, pri3);
-}
-
-void PPUDebugger::render_line_mode1() {
- unsigned pri0, pri1, pri2, pri3;
-
- if(regs.bg3_priority) {
- pri0 = bg1_enabled[0] ? 5 : 0;
- pri1 = bg1_enabled[1] ? 8 : 0;
- if(pri0 | pri1) PPU::render_line_bg<1, BG1, COLORDEPTH_16>(pri0, pri1);
-
- pri0 = bg2_enabled[0] ? 4 : 0;
- pri1 = bg2_enabled[1] ? 7 : 0;
- if(pri0 | pri1) PPU::render_line_bg<1, BG2, COLORDEPTH_16>(pri0, pri1);
-
- pri0 = bg3_enabled[0] ? 1 : 0;
- pri1 = bg3_enabled[1] ? 10 : 0;
- if(pri0 | pri1) PPU::render_line_bg<1, BG3, COLORDEPTH_4>(pri0, pri1);
-
- pri0 = oam_enabled[0] ? 2 : 0;
- pri1 = oam_enabled[1] ? 3 : 0;
- pri2 = oam_enabled[2] ? 6 : 0;
- pri3 = oam_enabled[3] ? 9 : 0;
- if(pri0 | pri1 | pri2 | pri3) PPU::render_line_oam(pri0, pri1, pri2, pri3);
- } else {
- pri0 = bg1_enabled[0] ? 6 : 0;
- pri1 = bg1_enabled[1] ? 9 : 0;
- if(pri0 | pri1) PPU::render_line_bg<1, BG1, COLORDEPTH_16>(pri0, pri1);
-
- pri0 = bg2_enabled[0] ? 5 : 0;
- pri1 = bg2_enabled[1] ? 8 : 0;
- if(pri0 | pri1) PPU::render_line_bg<1, BG2, COLORDEPTH_16>(pri0, pri1);
-
- pri0 = bg3_enabled[0] ? 1 : 0;
- pri1 = bg3_enabled[1] ? 3 : 0;
- if(pri0 | pri1) PPU::render_line_bg<1, BG3, COLORDEPTH_4>(pri0, pri1);
-
- pri0 = oam_enabled[0] ? 2 : 0;
- pri1 = oam_enabled[1] ? 4 : 0;
- pri2 = oam_enabled[2] ? 7 : 0;
- pri3 = oam_enabled[3] ? 10 : 0;
- PPU::render_line_oam(pri0, pri1, pri2, pri3);
- }
-}
-
-void PPUDebugger::render_line_mode2() {
- unsigned pri0, pri1, pri2, pri3;
-
- pri0 = bg1_enabled[0] ? 3 : 0;
- pri1 = bg1_enabled[1] ? 7 : 0;
- if(pri0 | pri1) PPU::render_line_bg<2, BG1, COLORDEPTH_16>(pri0, pri1);
-
- pri0 = bg2_enabled[0] ? 1 : 0;
- pri1 = bg2_enabled[1] ? 5 : 0;
- if(pri0 | pri1) PPU::render_line_bg<2, BG2, COLORDEPTH_16>(pri0, pri1);
-
- pri0 = oam_enabled[0] ? 2 : 0;
- pri1 = oam_enabled[1] ? 4 : 0;
- pri2 = oam_enabled[2] ? 6 : 0;
- pri3 = oam_enabled[3] ? 8 : 0;
- if(pri0 | pri1 | pri2 | pri3) PPU::render_line_oam(pri0, pri1, pri2, pri3);
-}
-
-void PPUDebugger::render_line_mode3() {
- unsigned pri0, pri1, pri2, pri3;
-
- pri0 = bg1_enabled[0] ? 3 : 0;
- pri1 = bg1_enabled[1] ? 7 : 0;
- if(pri0 | pri1) PPU::render_line_bg<3, BG1, COLORDEPTH_256>(pri0, pri1);
-
- pri0 = bg2_enabled[0] ? 1 : 0;
- pri1 = bg2_enabled[1] ? 5 : 0;
- if(pri0 | pri1) PPU::render_line_bg<3, BG2, COLORDEPTH_16>(pri0, pri1);
-
- pri0 = oam_enabled[0] ? 2 : 0;
- pri1 = oam_enabled[1] ? 4 : 0;
- pri2 = oam_enabled[2] ? 6 : 0;
- pri3 = oam_enabled[3] ? 8 : 0;
- if(pri0 | pri1 | pri2 | pri3) PPU::render_line_oam(pri0, pri1, pri2, pri3);
-}
-
-void PPUDebugger::render_line_mode4() {
- unsigned pri0, pri1, pri2, pri3;
-
- pri0 = bg1_enabled[0] ? 3 : 0;
- pri1 = bg1_enabled[1] ? 7 : 0;
- if(pri0 | pri1) PPU::render_line_bg<4, BG1, COLORDEPTH_256>(pri0, pri1);
-
- pri0 = bg2_enabled[0] ? 1 : 0;
- pri1 = bg2_enabled[1] ? 5 : 0;
- if(pri0 | pri1) PPU::render_line_bg<4, BG2, COLORDEPTH_4>(pri0, pri1);
-
- pri0 = oam_enabled[0] ? 2 : 0;
- pri1 = oam_enabled[1] ? 4 : 0;
- pri2 = oam_enabled[2] ? 6 : 0;
- pri3 = oam_enabled[3] ? 8 : 0;
- if(pri0 | pri1 | pri2 | pri3) PPU::render_line_oam(pri0, pri1, pri2, pri3);
-}
-
-void PPUDebugger::render_line_mode5() {
- unsigned pri0, pri1, pri2, pri3;
-
- pri0 = bg1_enabled[0] ? 3 : 0;
- pri1 = bg1_enabled[1] ? 7 : 0;
- if(pri0 | pri1) PPU::render_line_bg<5, BG1, COLORDEPTH_16>(pri0, pri1);
-
- pri0 = bg2_enabled[0] ? 1 : 0;
- pri1 = bg2_enabled[1] ? 5 : 0;
- if(pri0 | pri1) PPU::render_line_bg<5, BG2, COLORDEPTH_4>(pri0, pri1);
-
- pri0 = oam_enabled[0] ? 2 : 0;
- pri1 = oam_enabled[1] ? 4 : 0;
- pri2 = oam_enabled[2] ? 6 : 0;
- pri3 = oam_enabled[3] ? 8 : 0;
- if(pri0 | pri1 | pri2 | pri3) PPU::render_line_oam(pri0, pri1, pri2, pri3);
-}
-
-void PPUDebugger::render_line_mode6() {
- unsigned pri0, pri1, pri2, pri3;
-
- pri0 = bg1_enabled[0] ? 2 : 0;
- pri1 = bg1_enabled[1] ? 5 : 0;
- if(pri0 | pri1) PPU::render_line_bg<6, BG1, COLORDEPTH_16>(pri0, pri1);
-
- pri0 = oam_enabled[0] ? 1 : 0;
- pri1 = oam_enabled[1] ? 3 : 0;
- pri2 = oam_enabled[2] ? 4 : 0;
- pri3 = oam_enabled[3] ? 6 : 0;
- if(pri0 | pri1 | pri2 | pri3) PPU::render_line_oam(pri0, pri1, pri2, pri3);
-}
-
-void PPUDebugger::render_line_mode7() {
- unsigned pri0, pri1, pri2, pri3;
-
- if(regs.mode7_extbg == false) {
- pri0 = bg1_enabled[0] ? 2 : 0;
- pri1 = bg1_enabled[1] ? 2 : 0;
- if(pri0 | pri1) PPU::render_line_mode7(pri0, pri1);
-
- pri0 = oam_enabled[0] ? 1 : 0;
- pri1 = oam_enabled[1] ? 3 : 0;
- pri2 = oam_enabled[2] ? 4 : 0;
- pri3 = oam_enabled[3] ? 5 : 0;
- if(pri0 | pri1 | pri2 | pri3) PPU::render_line_oam(pri0, pri1, pri2, pri3);
- } else {
- pri0 = bg1_enabled[0] ? 3 : 0;
- pri1 = bg1_enabled[1] ? 3 : 0;
- if(pri0 | pri1) PPU::render_line_mode7(pri0, pri1);
-
- pri0 = bg2_enabled[0] ? 1 : 0;
- pri1 = bg2_enabled[1] ? 5 : 0;
- if(pri0 | pri1) PPU::render_line_mode7(pri0, pri1);
-
- pri0 = oam_enabled[0] ? 2 : 0;
- pri1 = oam_enabled[1] ? 4 : 0;
- pri2 = oam_enabled[2] ? 6 : 0;
- pri3 = oam_enabled[3] ? 7 : 0;
- PPU::render_line_oam(pri0, pri1, pri2, pri3);
- }
-}
-
-#endif
diff --git a/bsnes/snes/alt/ppu/ppu.cpp b/bsnes/snes/alt/ppu/ppu.cpp
index 15e283c6..5bc92246 100755
--- a/bsnes/snes/alt/ppu/ppu.cpp
+++ b/bsnes/snes/alt/ppu/ppu.cpp
@@ -365,6 +365,23 @@ void PPU::reset() {
regs.bg_y[3] = 0;
}
+void PPU::layer_enable(unsigned layer, unsigned priority, bool enable) {
+ switch(layer * 4 + priority) {
+ case 0: layer_enabled[BG1][0] = enable; break;
+ case 1: layer_enabled[BG1][1] = enable; break;
+ case 4: layer_enabled[BG2][0] = enable; break;
+ case 5: layer_enabled[BG2][1] = enable; break;
+ case 8: layer_enabled[BG3][0] = enable; break;
+ case 9: layer_enabled[BG3][1] = enable; break;
+ case 12: layer_enabled[BG4][0] = enable; break;
+ case 13: layer_enabled[BG4][1] = enable; break;
+ case 16: layer_enabled[OAM][0] = enable; break;
+ case 17: layer_enabled[OAM][1] = enable; break;
+ case 18: layer_enabled[OAM][2] = enable; break;
+ case 19: layer_enabled[OAM][3] = enable; break;
+ }
+}
+
PPU::PPU() {
surface = new uint16[512 * 512];
output = surface + 16 * 512;
@@ -390,6 +407,19 @@ PPU::PPU() {
}
}
}
+
+ layer_enabled[BG1][0] = true;
+ layer_enabled[BG1][1] = true;
+ layer_enabled[BG2][0] = true;
+ layer_enabled[BG2][1] = true;
+ layer_enabled[BG3][0] = true;
+ layer_enabled[BG3][1] = true;
+ layer_enabled[BG4][0] = true;
+ layer_enabled[BG4][1] = true;
+ layer_enabled[OAM][0] = true;
+ layer_enabled[OAM][1] = true;
+ layer_enabled[OAM][2] = true;
+ layer_enabled[OAM][3] = true;
}
PPU::~PPU() {
diff --git a/bsnes/snes/alt/ppu/ppu.hpp b/bsnes/snes/alt/ppu/ppu.hpp
index b51f6245..0a01b045 100755
--- a/bsnes/snes/alt/ppu/ppu.hpp
+++ b/bsnes/snes/alt/ppu/ppu.hpp
@@ -59,6 +59,9 @@ public:
void power();
void reset();
+ bool layer_enabled[5][4];
+ void layer_enable(unsigned layer, unsigned priority, bool enable);
+
void serialize(serializer&);
PPU();
~PPU();
diff --git a/bsnes/snes/alt/ppu/render/bg.cpp b/bsnes/snes/alt/ppu/render/bg.cpp
index 56434c6e..3b661644 100755
--- a/bsnes/snes/alt/ppu/render/bg.cpp
+++ b/bsnes/snes/alt/ppu/render/bg.cpp
@@ -53,6 +53,10 @@ uint16 PPU::bg_get_tile(uint16 x, uint16 y) {
template
void PPU::render_line_bg(uint8 pri0_pos, uint8 pri1_pos) {
+ if(layer_enabled[bg][0] == false) pri0_pos = 0;
+ if(layer_enabled[bg][1] == false) pri1_pos = 0;
+ if(pri0_pos + pri1_pos == 0) return;
+
if(regs.bg_enabled[bg] == false && regs.bgsub_enabled[bg] == false) return;
const bool bg_enabled = regs.bg_enabled[bg];
diff --git a/bsnes/snes/alt/ppu/render/mode7.cpp b/bsnes/snes/alt/ppu/render/mode7.cpp
index 95194922..b233efc8 100755
--- a/bsnes/snes/alt/ppu/render/mode7.cpp
+++ b/bsnes/snes/alt/ppu/render/mode7.cpp
@@ -14,6 +14,10 @@
template
void PPU::render_line_mode7(uint8 pri0_pos, uint8 pri1_pos) {
+ if(layer_enabled[bg][0] == false) pri0_pos = 0;
+ if(layer_enabled[bg][1] == false) pri1_pos = 0;
+ if(pri0_pos + pri1_pos == 0) return;
+
if(regs.bg_enabled[bg] == false && regs.bgsub_enabled[bg] == false) return;
int32 px, py;
diff --git a/bsnes/snes/alt/ppu/render/oam.cpp b/bsnes/snes/alt/ppu/render/oam.cpp
index 52d6e1fe..42544a02 100755
--- a/bsnes/snes/alt/ppu/render/oam.cpp
+++ b/bsnes/snes/alt/ppu/render/oam.cpp
@@ -201,6 +201,12 @@ void PPU::render_line_oam_rto() {
}
void PPU::render_line_oam(uint8 pri0_pos, uint8 pri1_pos, uint8 pri2_pos, uint8 pri3_pos) {
+ if(layer_enabled[OAM][0] == false) pri0_pos = 0;
+ if(layer_enabled[OAM][1] == false) pri1_pos = 0;
+ if(layer_enabled[OAM][2] == false) pri2_pos = 0;
+ if(layer_enabled[OAM][3] == false) pri3_pos = 0;
+ if(pri0_pos + pri1_pos + pri2_pos + pri3_pos == 0) return;
+
if(regs.bg_enabled[OAM] == false && regs.bgsub_enabled[OAM] == false) return;
for(unsigned s = 0; s < 34; s++) {
diff --git a/bsnes/snes/alt/ppu/render/render.hpp b/bsnes/snes/alt/ppu/render/render.hpp
index e3dfc37d..91438009 100755
--- a/bsnes/snes/alt/ppu/render/render.hpp
+++ b/bsnes/snes/alt/ppu/render/render.hpp
@@ -1,12 +1,12 @@
//render.cpp
-debugvirtual inline void render_line_mode0();
-debugvirtual inline void render_line_mode1();
-debugvirtual inline void render_line_mode2();
-debugvirtual inline void render_line_mode3();
-debugvirtual inline void render_line_mode4();
-debugvirtual inline void render_line_mode5();
-debugvirtual inline void render_line_mode6();
-debugvirtual inline void render_line_mode7();
+inline void render_line_mode0();
+inline void render_line_mode1();
+inline void render_line_mode2();
+inline void render_line_mode3();
+inline void render_line_mode4();
+inline void render_line_mode5();
+inline void render_line_mode6();
+inline void render_line_mode7();
//cache.cpp
enum { COLORDEPTH_4 = 0, COLORDEPTH_16 = 1, COLORDEPTH_256 = 2 };
diff --git a/bsnes/snes/ppu/debugger/debugger.hpp b/bsnes/snes/ppu/debugger/debugger.hpp
index d2e3d913..9ce6a4e6 100755
--- a/bsnes/snes/ppu/debugger/debugger.hpp
+++ b/bsnes/snes/ppu/debugger/debugger.hpp
@@ -1,10 +1,4 @@
class PPUDebugger : public PPU, public ChipDebugger {
public:
bool property(unsigned id, string &name, string &value);
-
- bool bg1_enabled[2];
- bool bg2_enabled[2];
- bool bg3_enabled[2];
- bool bg4_enabled[2];
- bool oam_enabled[4];
};
diff --git a/bsnes/snes/snes.hpp b/bsnes/snes/snes.hpp
index 53b13f38..2baa94c2 100755
--- a/bsnes/snes/snes.hpp
+++ b/bsnes/snes/snes.hpp
@@ -1,7 +1,7 @@
namespace SNES {
namespace Info {
static const char Name[] = "bsnes";
- static const char Version[] = "068.14";
+ static const char Version[] = "068.15";
static const unsigned SerializerVersion = 13;
}
}