diff --git a/gfx/video_crt_win.c b/gfx/video_crt_win.c
new file mode 100644
index 0000000000..6aff3170d2
--- /dev/null
+++ b/gfx/video_crt_win.c
@@ -0,0 +1,139 @@
+/* CRT SwitchRes Core
+ * Copyright (C) 2018 Ben Templeman.
+ *
+ * RetroArch - A frontend for libretro.
+ * Copyright (C) 2010-2014 - Hans-Kristian Arntzen
+ * Copyright (C) 2011-2017 - Daniel De Matteis
+ *
+ * RetroArch is free software: you can redistribute it and/or modify it under the terms
+ * of the GNU General Public License as published by the Free Software Found-
+ * ation, either version 3 of the License, or (at your option) any later version.
+ *
+ * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with RetroArch.
+ * If not, see .
+*/
+#include
+#include
+#include
+#include
+
+#include "video_crt_switch.h"
+
+
+void switch_res(int width, int height, int f_restore)
+{ /* windows function to swith resolutions */
+
+ DEVMODE curDevmode;
+ DEVMODE devmode;
+ DWORD flags = 0;
+ int iModeNum;
+ int depth = 0;
+ int freq;
+ if (f_restore == 0)
+ {
+ freq = ra_set_core_hz;
+ }
+ else
+ {
+ freq = 0;
+ }
+
+ EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &curDevmode);
+
+ if (width == curDevmode.dmPelsWidth)
+ {
+ width = 0; /* used to stop superresolution bug */
+ }
+
+ if (width == 0)
+ {
+ width = curDevmode.dmPelsWidth;
+ }
+ if (height == 0)
+ {
+ height = curDevmode.dmPelsHeight;
+ }
+ if (depth == 0)
+ {
+ depth = curDevmode.dmBitsPerPel;
+ }
+ if (freq == 0)
+ {
+ freq = curDevmode.dmDisplayFrequency;
+ }
+
+ for (iModeNum = 0; ; iModeNum++)
+ {
+ if (EnumDisplaySettings(NULL, iModeNum, &devmode))
+ {
+
+ if (devmode.dmPelsWidth != width)
+ {
+ continue;
+ }
+
+ if (devmode.dmPelsHeight != height)
+ {
+ continue;
+ }
+
+
+ if (devmode.dmBitsPerPel != depth)
+ {
+ continue;
+ }
+
+
+ if (devmode.dmDisplayFrequency != freq)
+ {
+ continue;
+ }
+
+
+ devmode.dmFields |= DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL | DM_DISPLAYFREQUENCY;
+ LONG res = ChangeDisplaySettings(&devmode, CDS_TEST);
+
+ switch (res)
+ {
+ case DISP_CHANGE_SUCCESSFUL:
+ res = ChangeDisplaySettings(&devmode, flags);
+ switch (res)
+ {
+ case DISP_CHANGE_SUCCESSFUL:
+ return;
+
+ case DISP_CHANGE_NOTUPDATED:
+
+ return;
+
+ default:
+
+ break;
+ }
+ break;
+
+ case DISP_CHANGE_RESTART:
+
+ break;
+
+ default:
+
+ break;
+ }
+ }
+ else
+ {
+ break;
+ }
+ }
+
+}
+
+void video_restore()
+{
+ switch_res(orig_width, orig_height,1);
+}
diff --git a/gfx/video_crt_win.h b/gfx/video_crt_win.h
new file mode 100644
index 0000000000..83a27d47d2
--- /dev/null
+++ b/gfx/video_crt_win.h
@@ -0,0 +1,21 @@
+/* CRT SwitchRes Core
+ * Copyright (C) 2018 Ben Templeman.
+ *
+ * RetroArch - A frontend for libretro.
+ * Copyright (C) 2010-2014 - Hans-Kristian Arntzen
+ * Copyright (C) 2011-2017 - Daniel De Matteis
+ *
+ * RetroArch is free software: you can redistribute it and/or modify it under the terms
+ * of the GNU General Public License as published by the Free Software Found-
+ * ation, either version 3 of the License, or (at your option) any later version.
+ *
+ * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with RetroArch.
+ * If not, see .
+*/
+
+void switch_res(int width, int height, int f_restore);
+void video_restore();
\ No newline at end of file