diff --git a/controls.cpp b/controls.cpp
index 878c809f..d31040fa 100644
--- a/controls.cpp
+++ b/controls.cpp
@@ -265,6 +265,7 @@ static const int ptrspeeds[4] = { 1, 1, 4, 8 };
S(ToggleBG1), \
S(ToggleBG2), \
S(ToggleBG3), \
+ S(ToggleBackdrop), \
S(ToggleEmuTurbo), \
S(ToggleSprites), \
S(ToggleTransparency) \
@@ -2360,6 +2361,26 @@ void S9xApplyCommand (s9xcommand_t cmd, int16 data1, int16 data2)
S9xSetInfoString("All sound channels on");
break;
+ case ToggleBackdrop:
+ switch (Settings.ForcedBackdrop)
+ {
+ case 0:
+ Settings.ForcedBackdrop = 0xf81f;
+ break;
+ case 0xf81f:
+ Settings.ForcedBackdrop = 0x07e0;
+ break;
+ case 0x07e0:
+ Settings.ForcedBackdrop = 0x07ff;
+ break;
+ default:
+ Settings.ForcedBackdrop = 0;
+ break;
+ }
+ sprintf(buf, "Setting backdrop to 0x%04x", Settings.ForcedBackdrop);
+ S9xSetInfoString(buf);
+ break;
+
case ToggleBG0:
Settings.BG_Forced ^= 1;
DisplayStateChange("BG#0", !(Settings.BG_Forced & 1));
diff --git a/gfx.cpp b/gfx.cpp
index 6303aed2..fbeee33f 100644
--- a/gfx.cpp
+++ b/gfx.cpp
@@ -51,6 +51,7 @@ bool8 S9xGraphicsInit (void)
IPPU.OBJChanged = TRUE;
Settings.BG_Forced = 0;
+ Settings.ForcedBackdrop = 0;
S9xFixColourBrightness();
S9xBuildDirectColourMaps();
diff --git a/gtk/src/gtk_control.cpp b/gtk/src/gtk_control.cpp
index 259d1771..e2053a76 100644
--- a/gtk/src/gtk_control.cpp
+++ b/gtk/src/gtk_control.cpp
@@ -62,7 +62,7 @@ const BindingLink b_links[] =
{ "b_bg_layer_2", "ToggleBG2" },
{ "b_bg_layer_3", "ToggleBG3" },
{ "b_sprites", "ToggleSprites" },
- { "b_bg_layering_hack", "BGLayeringHack" },
+ { "toggle_backdrop", "ToggleBackdrop" },
{ "b_screenshot", "Screenshot" },
{ "b_fullscreen", "GTK_fullscreen" },
{ "b_state_save_current", "GTK_state_save_current" },
diff --git a/gtk/src/snes9x.ui b/gtk/src/snes9x.ui
index 98acdc08..f2896492 100644
--- a/gtk/src/snes9x.ui
+++ b/gtk/src/snes9x.ui
@@ -7198,7 +7198,7 @@
True
False
0
- BG layering hack
+ Toggle forced backdrop color
5
@@ -7324,7 +7324,7 @@
-