diff --git a/BizHawk.Client.EmuHawk/Global.cs b/BizHawk.Client.EmuHawk/Global.cs
new file mode 100644
index 0000000000..ad2d44fa78
--- /dev/null
+++ b/BizHawk.Client.EmuHawk/Global.cs
@@ -0,0 +1,145 @@
+using BizHawk.Emulation.Common;
+using BizHawk.Emulation.Cores.Nintendo.Gameboy;
+using BizHawk.Emulation.Cores.Sega.MasterSystem;
+using BizHawk.Emulation.DiscSystem;
+
+namespace BizHawk.Client.Common
+{
+ public static class Global
+ {
+ public static IEmulator Emulator;
+ public static CoreComm CoreComm;
+ public static Config Config;
+ public static GameInfo Game;
+ public static CheatCollection CheatList;
+ public static FirmwareManager FirmwareManager;
+ public static Rewinder Rewinder;
+
+ public static MovieSession MovieSession = new MovieSession();
+
+ ///
+ /// whether throttling is force-disabled by use of fast forward
+ ///
+ public static bool ForceNoThrottle;
+
+ public static Controller NullControls;
+ public static AutofireController AutofireNullControls;
+
+ //the movie will be spliced inbetween these if it is present
+ public static CopyControllerAdapter MovieInputSourceAdapter = new CopyControllerAdapter();
+ public static CopyControllerAdapter MovieOutputHardpoint = new CopyControllerAdapter();
+ public static MultitrackRewiringControllerAdapter MultitrackRewiringAdapter = new MultitrackRewiringControllerAdapter();
+
+ //dont take my word for it, since the final word is actually in RewireInputChain, but here is a guide...
+ //user -> Input -> ActiveController -> UDLR -> StickyXORPlayerInputAdapter -> TurboAdapter(TBD) -> Lua(?TBD?) -> ..
+ //.. -> MultitrackRewiringControllerAdapter -> MovieInputSourceAdapter -> (MovieSession) -> MovieOutputAdapter -> ControllerOutput(1) -> Game
+ //(1)->Input Display
+
+ //the original source controller, bound to the user, sort of the "input" port for the chain, i think
+ public static Controller ActiveController;
+
+ //rapid fire version on the user controller, has its own key bindings and is OR'ed against ActiveController
+ public static AutofireController AutoFireController;
+
+ //the "output" port for the controller chain.
+ public static CopyControllerAdapter ControllerOutput = new CopyControllerAdapter();
+
+ public static DiscHopper DiscHopper = new DiscHopper();
+
+ public static UD_LR_ControllerAdapter UD_LR_ControllerAdapter = new UD_LR_ControllerAdapter();
+
+ public static AutoFireStickyXorAdapter AutofireStickyXORAdapter = new AutoFireStickyXorAdapter();
+
+ ///
+ /// provides an opportunity to mutate the player's input in an autohold style
+ ///
+ public static StickyXorAdapter StickyXORAdapter = new StickyXorAdapter();
+
+ ///
+ /// Used to AND to another controller, used for Joypad.Set()
+ ///
+ public static OverrideAdaptor LuaAndAdaptor = new OverrideAdaptor();
+
+ ///
+ /// fire off one-frame logical button clicks here. useful for things like ti-83 virtual pad and reset buttons
+ ///
+ public static ClickyVirtualPadController ClickyVirtualPadController = new ClickyVirtualPadController();
+
+ public static SimpleController MovieOutputController = new SimpleController();
+
+ public static Controller ClientControls;
+
+ // Input state which has been estine for game controller inputs are coalesce here
+ // This relies on a client specific implementation!
+ public static SimpleController ControllerInputCoalescer;
+
+ public static SystemInfo SystemInfo
+ {
+ get
+ {
+ switch(Global.Emulator.SystemId)
+ {
+ default:
+ case "NULL":
+ return SystemInfo.Null;
+ case "NES":
+ return SystemInfo.Nes;
+ case "INTV":
+ return SystemInfo.Intellivision;
+ case "SG":
+ return SystemInfo.SG;
+ case "SMS":
+ if ((Global.Emulator as SMS).IsGameGear)
+ {
+ return SystemInfo.GG;
+ }
+ else if ((Global.Emulator as SMS).IsSG1000)
+ {
+ return SystemInfo.SG;
+ }
+
+ return SystemInfo.SMS;
+ case "PCECD":
+ return SystemInfo.PCECD;
+ case "PCE":
+ return SystemInfo.PCE;
+ case "SGX":
+ return SystemInfo.SGX;
+ case "GEN":
+ return SystemInfo.Genesis;
+ case "TI83":
+ return SystemInfo.TI83;
+ case "SNES":
+ return SystemInfo.SNES;
+ case "GB":
+ if ((Global.Emulator as Gameboy).IsCGBMode())
+ {
+ return SystemInfo.GBC;
+ }
+
+ return SystemInfo.GB;
+ case "A26":
+ return SystemInfo.Atari2600;
+ case "A78":
+ return SystemInfo.Atari7800;
+ case "C64":
+ return SystemInfo.C64;
+ case "Coleco":
+ return SystemInfo.Coleco;
+ case "GBA":
+ return SystemInfo.GBA;
+ case "N64":
+ return SystemInfo.N64;
+ case "SAT":
+ return SystemInfo.Saturn;
+ case "DGB":
+ return SystemInfo.DualGB;
+ case "WSWAN":
+ return SystemInfo.WonderSwan;
+ case "LYNX":
+ return SystemInfo.Lynx;
+ }
+ }
+ }
+ }
+}
diff --git a/output/dll/7z.dll b/output/dll/7z.dll
new file mode 100644
index 0000000000..f08706fef8
Binary files /dev/null and b/output/dll/7z.dll differ