Merge branch 'master' into master
This commit is contained in:
commit
d3834fff49
|
@ -71,3 +71,5 @@ ExternalCoreProjects/Virtu/bin/*.*
|
||||||
|
|
||||||
**/StyleCop.Cache
|
**/StyleCop.Cache
|
||||||
libsnes/vs2015/libsnes.VC.db
|
libsnes/vs2015/libsnes.VC.db
|
||||||
|
waterbox/**/*.wbx
|
||||||
|
waterbox/**/*.wbx.in
|
||||||
|
|
|
@ -7,3 +7,7 @@
|
||||||
[submodule "libmupen64plus/mupen64plus-rsp-cxd4"]
|
[submodule "libmupen64plus/mupen64plus-rsp-cxd4"]
|
||||||
path = libmupen64plus/mupen64plus-rsp-cxd4
|
path = libmupen64plus/mupen64plus-rsp-cxd4
|
||||||
url = https://github.com/TASVideos/mupen64plus-rsp-cxd4.git
|
url = https://github.com/TASVideos/mupen64plus-rsp-cxd4.git
|
||||||
|
[submodule "waterbox/snes9x"]
|
||||||
|
path = waterbox/snes9x
|
||||||
|
url = https://github.com/TASVideos/snes9x.git
|
||||||
|
branch = bizsnes
|
||||||
|
|
|
@ -508,19 +508,110 @@
|
||||||
"P1 C": "Z, J1 B4, X1 Y",
|
"P1 C": "Z, J1 B4, X1 Y",
|
||||||
"P1 L": "Q, J1 B5, X1 LeftShoulder",
|
"P1 L": "Q, J1 B5, X1 LeftShoulder",
|
||||||
"P1 R": "W, J1 B6, X1 RightShoulder",
|
"P1 R": "W, J1 B6, X1 RightShoulder",
|
||||||
"P2 Up": "",
|
"P1 Mouse Left": "WMouse L",
|
||||||
"P2 Down": "",
|
"P1 Mouse Center": "WMouse M",
|
||||||
"P2 Left": "",
|
"P1 Mouse Right": "WMouse R",
|
||||||
"P2 Right": "",
|
"P1 Escape": "Escape",
|
||||||
"P2 Start": "",
|
"P1 F1": "F1",
|
||||||
"P2 Z": "",
|
"P1 F2": "F2",
|
||||||
"P2 Y": "",
|
"P1 F3": "F3",
|
||||||
"P2 X": "",
|
"P1 F4": "F4",
|
||||||
"P2 C": "",
|
"P1 F5": "F5",
|
||||||
"P2 B": "",
|
"P1 F6": "F6",
|
||||||
"P2 A": "",
|
"P1 F7": "F7",
|
||||||
"P2 L": "",
|
"P1 F8": "F8",
|
||||||
"P2 R": ""
|
"P1 F9": "F9",
|
||||||
|
"P1 F10": "F10",
|
||||||
|
"P1 F11": "F11",
|
||||||
|
"P1 F12": "F12",
|
||||||
|
"P1 Grave`": "Grave",
|
||||||
|
"P1 1(One)": "D1",
|
||||||
|
"P1 2": "D2",
|
||||||
|
"P1 3": "D3",
|
||||||
|
"P1 4": "D4",
|
||||||
|
"P1 5": "D5",
|
||||||
|
"P1 6": "D6",
|
||||||
|
"P1 7": "D7",
|
||||||
|
"P1 8": "D8",
|
||||||
|
"P1 9": "D9",
|
||||||
|
"P1 0(Zero)": "D0",
|
||||||
|
"P1 Minus-": "Minus",
|
||||||
|
"P1 Equals=": "Equals",
|
||||||
|
"P1 Backslash\\": "Backslash",
|
||||||
|
"P1 Backspace": "Backspace",
|
||||||
|
"P1 Tab": "Tab",
|
||||||
|
"P1 Q": "Q",
|
||||||
|
"P1 W": "W",
|
||||||
|
"P1 E": "E",
|
||||||
|
"P1 R(Key)": "R",
|
||||||
|
"P1 T": "T",
|
||||||
|
"P1 Y(Key)": "Y",
|
||||||
|
"P1 U": "U",
|
||||||
|
"P1 I": "I",
|
||||||
|
"P1 O": "O",
|
||||||
|
"P1 P": "P",
|
||||||
|
"P1 LeftBracket[": "LeftBracket",
|
||||||
|
"P1 RightBracket]": "RightBracket",
|
||||||
|
"P1 Enter": "Return",
|
||||||
|
"P1 CapsLock": "CapsLock",
|
||||||
|
"P1 A(Key)": "A",
|
||||||
|
"P1 S": "S",
|
||||||
|
"P1 D": "D",
|
||||||
|
"P1 F": "F",
|
||||||
|
"P1 G": "G",
|
||||||
|
"P1 H": "H",
|
||||||
|
"P1 J": "J",
|
||||||
|
"P1 K": "K",
|
||||||
|
"P1 L(Key)": "L",
|
||||||
|
"P1 Semicolon;": "Semicolon",
|
||||||
|
"P1 Quote'": "Apostrophe",
|
||||||
|
"P1 LeftShift": "LeftShift",
|
||||||
|
"P1 Z(Key)": "Z",
|
||||||
|
"P1 X(Key)": "X",
|
||||||
|
"P1 C(Key)": "C",
|
||||||
|
"P1 V": "V",
|
||||||
|
"P1 B(Key)": "B",
|
||||||
|
"P1 N": "N",
|
||||||
|
"P1 M": "M",
|
||||||
|
"P1 Comma,": "Comma",
|
||||||
|
"P1 Period.": "Period",
|
||||||
|
"P1 Slash/": "Slash",
|
||||||
|
"P1 RightShift": "RightShift",
|
||||||
|
"P1 LeftCtrl": "LeftControl",
|
||||||
|
"P1 LeftAlt": "LeftAlt",
|
||||||
|
"P1 Space": "Space",
|
||||||
|
"P1 RightAlt": "RightAlt",
|
||||||
|
"P1 RightCtrl": "RightControl",
|
||||||
|
"P1 PrintScreen": "",
|
||||||
|
"P1 ScrollLock": "ScrollLock",
|
||||||
|
"P1 Pause": "Pause",
|
||||||
|
"P1 Insert": "Insert",
|
||||||
|
"P1 Delete": "Delete",
|
||||||
|
"P1 Home": "Home",
|
||||||
|
"P1 End": "End",
|
||||||
|
"P1 PageUp": "PageUp",
|
||||||
|
"P1 PageDown": "PageDown",
|
||||||
|
"P1 Up": "UpArrow",
|
||||||
|
"P1 Down": "DownArrow",
|
||||||
|
"P1 CursorLeft": "LeftArrow",
|
||||||
|
"P1 Right": "RightArrow",
|
||||||
|
"P1 NumLock": "NumberLock",
|
||||||
|
"P1 KeypadSlash(Divide)": "NumberPadSlash",
|
||||||
|
"P1 KeypadAsterisk(Multiply)": "NumberPadStar",
|
||||||
|
"P1 KeypadMinus": "NumberPadMinus",
|
||||||
|
"P1 KeypadHome/7": "NumberPad7",
|
||||||
|
"P1 KeypadUp/8": "NumberPad8",
|
||||||
|
"P1 KeypadPageup/9": "NumberPad9",
|
||||||
|
"P1 KeypadPlus": "NumberPadPlus",
|
||||||
|
"P1 KeypadLeft/4": "NumberPad4",
|
||||||
|
"P1 KeypadCenter/5": "NumberPad5",
|
||||||
|
"P1 KeypadRight/6": "NumberPad6",
|
||||||
|
"P1 KeypadEnd/1": "NumberPad1",
|
||||||
|
"P1 KeypadDown/2": "NumberPad2",
|
||||||
|
"P1 KeypadPagedown/3": "NumberPad3",
|
||||||
|
"P1 KeypadEnter": "NumberPadEnter",
|
||||||
|
"P1 KeypadInsert/0": "NumberPad0",
|
||||||
|
"P1 KeypadDelete": "NumberPadPeriod"
|
||||||
},
|
},
|
||||||
"PC Engine Controller": {
|
"PC Engine Controller": {
|
||||||
"Reset": "",
|
"Reset": "",
|
||||||
|
@ -854,6 +945,33 @@
|
||||||
"Caps Lock": "CapsLock",
|
"Caps Lock": "CapsLock",
|
||||||
"Previous Disk": "",
|
"Previous Disk": "",
|
||||||
"Next Disk": ""
|
"Next Disk": ""
|
||||||
|
},
|
||||||
|
"VirtualBoy Controller": {
|
||||||
|
"L_Up": "UpArrow, X1 DpadUp, X1 LStickUp",
|
||||||
|
"L_Down": "DownArrow, X1 DpadDown, X1 LStickDown",
|
||||||
|
"L_Left": "LeftArrow, X1 DpadLeft, X1 LStickLeft",
|
||||||
|
"L_Right": "RightArrow, X1 DpadRight, X1 LStickRight",
|
||||||
|
"R_Up": "NumberPad8, X1 RStickUp",
|
||||||
|
"R_Down": "NumberPad2, X1 RStickDown",
|
||||||
|
"R_Left": "NumberPad4, X1 RStickLeft",
|
||||||
|
"R_Right": "NumberPad6, X1 RStickRight",
|
||||||
|
"B": "Z, X1 X",
|
||||||
|
"A": "X, X1 A",
|
||||||
|
"R": "W, X1 LeftShoulder",
|
||||||
|
"L": "E, X1 RightShoulder",
|
||||||
|
"Select": "Space, X1 Back",
|
||||||
|
"Start": "Return, X1 Start",
|
||||||
|
"Power": ""
|
||||||
|
},
|
||||||
|
"NeoGeo Portable Controller": {
|
||||||
|
"Up": "UpArrow, X1 DpadUp, X1 LStickUp",
|
||||||
|
"Down": "DownArrow, X1 DpadDown, X1 LStickDown",
|
||||||
|
"Left": "LeftArrow, X1 DpadLeft, X1 LStickLeft",
|
||||||
|
"Right": "RightArrow, X1 DpadRight, X1 LStickRight",
|
||||||
|
"B": "Z, J1 B1, X1 X",
|
||||||
|
"A": "X, J1 B2, X1 A",
|
||||||
|
"Option": "Return, J1 B10, X1 Start",
|
||||||
|
"Power": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"AllTrollersAutoFire": {
|
"AllTrollersAutoFire": {
|
||||||
|
@ -1100,6 +1218,33 @@
|
||||||
"Caps Lock": "",
|
"Caps Lock": "",
|
||||||
"Previous Disk": "",
|
"Previous Disk": "",
|
||||||
"Next Disk": ""
|
"Next Disk": ""
|
||||||
|
},
|
||||||
|
"VirtualBoy Controller": {
|
||||||
|
"L_Up": "",
|
||||||
|
"L_Down": "",
|
||||||
|
"L_Left": "",
|
||||||
|
"L_Right": "",
|
||||||
|
"R_Up": "",
|
||||||
|
"R_Down": "",
|
||||||
|
"R_Left": "",
|
||||||
|
"R_Right": "",
|
||||||
|
"B": "",
|
||||||
|
"A": "",
|
||||||
|
"R": "",
|
||||||
|
"L": "",
|
||||||
|
"Select": "",
|
||||||
|
"Start": "",
|
||||||
|
"Power": ""
|
||||||
|
},
|
||||||
|
"NeoGeo Portable Controller": {
|
||||||
|
"Up": "",
|
||||||
|
"Down": "",
|
||||||
|
"Left": "",
|
||||||
|
"Right": "",
|
||||||
|
"B": "",
|
||||||
|
"A": "",
|
||||||
|
"Option": "",
|
||||||
|
"Power": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"AllTrollersAnalog": {
|
"AllTrollersAnalog": {
|
||||||
|
@ -1286,6 +1431,70 @@
|
||||||
"Mult": 1.0,
|
"Mult": 1.0,
|
||||||
"Deadzone": 0.1
|
"Deadzone": 0.1
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"VirtualBoy Controller": {},
|
||||||
|
"NeoGeo Portable Controller": {},
|
||||||
|
"Saturn Controller": {
|
||||||
|
"P1 Right Stick Horizontal": {
|
||||||
|
"Value": "X1 RightThumbX",
|
||||||
|
"Mult": 1.0,
|
||||||
|
"Deadzone": 0.1
|
||||||
|
},
|
||||||
|
"P1 Right Stick Vertical": {
|
||||||
|
"Value": "",
|
||||||
|
"Mult": 1.0,
|
||||||
|
"Deadzone": 0.1
|
||||||
|
},
|
||||||
|
"P1 Right Throttle": {
|
||||||
|
"Value": "X1 RightThumbY",
|
||||||
|
"Mult": 1.0,
|
||||||
|
"Deadzone": 0.1
|
||||||
|
},
|
||||||
|
"P1 Left Stick Horizontal": {
|
||||||
|
"Value": "X1 LeftThumbX",
|
||||||
|
"Mult": 1.0,
|
||||||
|
"Deadzone": 0.1
|
||||||
|
},
|
||||||
|
"P1 Left Stick Vertical": {
|
||||||
|
"Value": "X1 LeftThumbY",
|
||||||
|
"Mult": 1.0,
|
||||||
|
"Deadzone": 0.1
|
||||||
|
},
|
||||||
|
"P1 Left Throttle": {
|
||||||
|
"Value": "",
|
||||||
|
"Mult": 1.0,
|
||||||
|
"Deadzone": 0.1
|
||||||
|
},
|
||||||
|
"P1 Wheel": {
|
||||||
|
"Value": "X1 LeftThumbX",
|
||||||
|
"Mult": 1.0,
|
||||||
|
"Deadzone": 0.1
|
||||||
|
},
|
||||||
|
"P1 Stick Horizontal": {
|
||||||
|
"Value": "X1 LeftThumbX",
|
||||||
|
"Mult": 1.0,
|
||||||
|
"Deadzone": 0.1
|
||||||
|
},
|
||||||
|
"P1 Stick Vertical": {
|
||||||
|
"Value": "X1 LeftThumbY",
|
||||||
|
"Mult": 1.0,
|
||||||
|
"Deadzone": 0.1
|
||||||
|
},
|
||||||
|
"P1 Throttle": {
|
||||||
|
"Value": "X1 RightThumbX",
|
||||||
|
"Mult": 1.0,
|
||||||
|
"Deadzone": 0.1
|
||||||
|
},
|
||||||
|
"P1 X": {
|
||||||
|
"Value": "WMouse X",
|
||||||
|
"Mult": 1.0,
|
||||||
|
"Deadzone": 0.1
|
||||||
|
},
|
||||||
|
"P1 Y": {
|
||||||
|
"Value": "WMouse Y",
|
||||||
|
"Mult": 1.0,
|
||||||
|
"Deadzone": 0.1
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -81,7 +81,7 @@ A9FC2E46A38FD51EBDC25F6F261925F7CB6754F7 G Aladdin (Japan) SNES
|
||||||
DB4C5AE21420AA79F4519B542B03962A9293464D G Aladdin (Spain) SNES
|
DB4C5AE21420AA79F4519B542B03962A9293464D G Aladdin (Spain) SNES
|
||||||
48DDA773437CD755C31D2422F1DFD3A3FD6EE76B G Aladdin (USA) (Beta) SNES
|
48DDA773437CD755C31D2422F1DFD3A3FD6EE76B G Aladdin (USA) (Beta) SNES
|
||||||
BD5FEA18CE7456CC0231A39473927D8EA9C6589B G Aladdin (USA) SNES
|
BD5FEA18CE7456CC0231A39473927D8EA9C6589B G Aladdin (USA) SNES
|
||||||
A1A682F723573254046A8AF06B92FE408FC4207A G Albert Odyssey (Japan) (BS) SNES
|
A1A682F723573254046A8AF06B92FE408FC4207A B Albert Odyssey (Japan) (BS) SNES
|
||||||
525AC489230002E2E9294846154D962EF9A2B941 G Albert Odyssey (Japan) SNES
|
525AC489230002E2E9294846154D962EF9A2B941 G Albert Odyssey (Japan) SNES
|
||||||
B3B78710000D467DC0304EFA0245D2CF7AE23D88 G Albert Odyssey 2 - Jashin no Taidou (Japan) SNES
|
B3B78710000D467DC0304EFA0245D2CF7AE23D88 G Albert Odyssey 2 - Jashin no Taidou (Japan) SNES
|
||||||
DAC852EA9FF3141DE5DC6377307B16811F607008 G Alcahest (Japan) SNES
|
DAC852EA9FF3141DE5DC6377307B16811F607008 G Alcahest (Japan) SNES
|
||||||
|
@ -3517,4 +3517,12 @@ F650083142D9F3EB2BF1B315B44D18077743FE17 G Zool no Yume Bouken (Japan) SNES
|
||||||
051C767B843FC4112E0B06C2F81B65ABBAC9E7FC G Zoop (USA) SNES
|
051C767B843FC4112E0B06C2F81B65ABBAC9E7FC G Zoop (USA) SNES
|
||||||
21286747D360C03E3BF86CD4504508CE55DEFF8F G Zootto Mahjong! (Japan) (NP) SNES
|
21286747D360C03E3BF86CD4504508CE55DEFF8F G Zootto Mahjong! (Japan) (NP) SNES
|
||||||
2EE76761E023F0C51FBBF4797C175A7C752E788C G Zootto Mahjong! - Event Version (Japan) (BS) SNES
|
2EE76761E023F0C51FBBF4797C175A7C752E788C G Zootto Mahjong! - Event Version (Japan) (BS) SNES
|
||||||
8EC66C5DCDA3392C27BC532A06D726783C3A1565 G Zootto Mahjong! - Preview Ban (Japan) (BS) SNES
|
8EC66C5DCDA3392C27BC532A06D726783C3A1565 G Zootto Mahjong! - Preview Ban (Japan) (BS) SNES
|
||||||
|
|
||||||
|
;Junk
|
||||||
|
3064E664D34859649B67559F0ED0C2FFD6948031 B ActRaiser 2 (U) [b1] SNES
|
||||||
|
BD0C52940A96BF470AB383100A1EA0390B145453 B Addams Family, The - Pugsley's Scavenger Hunt (Beta) [b2] SNES
|
||||||
|
378D60AEA423F97DAF8314ADCD932F2E1B75A0DC B Addams Family, The - Pugsley's Scavenger Hunt (E) [t1] SNES
|
||||||
|
75CF0949C6D35FFA5856A11B3449F674038CD7DF B Aerobiz (U) [b1] SNES
|
||||||
|
CAAAC55BB9450BE2A1827DA1DA81807EC0941906 B Aladdin (Beta) [h1+C] SNES
|
||||||
|
4AA6D9BA00F80BC2D22ECE4EF9753864380A2B9D B Aladdin (Beta) [h3] SNES
|
|
@ -1,8 +1,8 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
|
||||||
<DebugSymbols>true</DebugSymbols>
|
<DebugSymbols>true</DebugSymbols>
|
||||||
<OutputPath>..\output64\dll\</OutputPath>
|
<OutputPath>..\output\dll\</OutputPath>
|
||||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
<DebugType>full</DebugType>
|
<DebugType>full</DebugType>
|
||||||
<PlatformTarget>x64</PlatformTarget>
|
<PlatformTarget>x64</PlatformTarget>
|
||||||
|
@ -13,21 +13,22 @@
|
||||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||||
<CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
|
<CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
|
||||||
<CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
|
<CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
|
||||||
|
<Prefer32Bit>false</Prefer32Bit>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
|
||||||
<OutputPath>..\output64\dll\</OutputPath>
|
<OutputPath>..\output\dll\</OutputPath>
|
||||||
<DefineConstants>TRACE</DefineConstants>
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
<Optimize>true</Optimize>
|
<Optimize>true</Optimize>
|
||||||
<DebugType>pdbonly</DebugType>
|
<DebugType>pdbonly</DebugType>
|
||||||
<PlatformTarget>x64</PlatformTarget>
|
<PlatformTarget>x64</PlatformTarget>
|
||||||
<CodeAnalysisLogFile>..\output\dll\BizHawk.Client.ApiHawk.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
|
|
||||||
<CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
|
<CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
|
||||||
<CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
|
<CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
|
||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||||
<CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
|
<CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
|
||||||
<CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
|
<CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
|
||||||
<DocumentationFile>..\output64\dll\BizHawk.Client.ApiHawk.XML</DocumentationFile>
|
<DocumentationFile>..\output\dll\BizHawk.Client.ApiHawk.XML</DocumentationFile>
|
||||||
|
<Prefer32Bit>false</Prefer32Bit>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
|
@ -38,51 +39,9 @@
|
||||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
<RootNamespace>BizHawk.Client.ApiHawk</RootNamespace>
|
<RootNamespace>BizHawk.Client.ApiHawk</RootNamespace>
|
||||||
<AssemblyName>BizHawk.Client.ApiHawk</AssemblyName>
|
<AssemblyName>BizHawk.Client.ApiHawk</AssemblyName>
|
||||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
|
||||||
<FileAlignment>512</FileAlignment>
|
<FileAlignment>512</FileAlignment>
|
||||||
</PropertyGroup>
|
<TargetFrameworkProfile />
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
|
||||||
<DebugSymbols>true</DebugSymbols>
|
|
||||||
<DebugType>full</DebugType>
|
|
||||||
<Optimize>false</Optimize>
|
|
||||||
<OutputPath>bin\Debug\</OutputPath>
|
|
||||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<WarningLevel>4</WarningLevel>
|
|
||||||
<PlatformTarget>x86</PlatformTarget>
|
|
||||||
<DocumentationFile>
|
|
||||||
</DocumentationFile>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
|
||||||
<DebugType>pdbonly</DebugType>
|
|
||||||
<Optimize>true</Optimize>
|
|
||||||
<OutputPath>bin\Release\</OutputPath>
|
|
||||||
<DefineConstants>TRACE</DefineConstants>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<WarningLevel>4</WarningLevel>
|
|
||||||
<DocumentationFile>
|
|
||||||
</DocumentationFile>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
|
|
||||||
<DebugSymbols>true</DebugSymbols>
|
|
||||||
<OutputPath>..\output\dll\</OutputPath>
|
|
||||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
|
||||||
<DebugType>full</DebugType>
|
|
||||||
<PlatformTarget>x86</PlatformTarget>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
|
||||||
<DocumentationFile>
|
|
||||||
</DocumentationFile>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
|
|
||||||
<OutputPath>..\output\dll\</OutputPath>
|
|
||||||
<DefineConstants>TRACE</DefineConstants>
|
|
||||||
<Optimize>true</Optimize>
|
|
||||||
<DebugType>pdbonly</DebugType>
|
|
||||||
<PlatformTarget>x86</PlatformTarget>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
|
||||||
<DocumentationFile>..\output\dll\BizHawk.Client.ApiHawk.XML</DocumentationFile>
|
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
|
|
|
@ -99,6 +99,13 @@ namespace BizHawk.Client.ApiHawk
|
||||||
case "WSWAN":
|
case "WSWAN":
|
||||||
return CoreSystem.WonderSwan;
|
return CoreSystem.WonderSwan;
|
||||||
|
|
||||||
|
case "VB":
|
||||||
|
case "NGP":
|
||||||
|
case "DNGP":
|
||||||
|
case "O2":
|
||||||
|
case "SGB":
|
||||||
|
return 0; // like I give a shit
|
||||||
|
|
||||||
default:
|
default:
|
||||||
throw new IndexOutOfRangeException(string.Format("{0} is missing in convert list", value));
|
throw new IndexOutOfRangeException(string.Format("{0} is missing in convert list", value));
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,8 @@
|
||||||
PSP,
|
PSP,
|
||||||
Playstation,
|
Playstation,
|
||||||
WonderSwan,
|
WonderSwan,
|
||||||
Libretro
|
Libretro,
|
||||||
|
VirtualBoy,
|
||||||
|
NeoGeoPocket
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -324,9 +324,10 @@ namespace BizHawk.Client.Common
|
||||||
|
|
||||||
public BinaryStateSaver(string path, bool notamovie = true) // notamovie is hack, really should have separate something
|
public BinaryStateSaver(string path, bool notamovie = true) // notamovie is hack, really should have separate something
|
||||||
{
|
{
|
||||||
_zip = new IonicZipWriter(path, notamovie ? Global.Config.SaveStateCompressionLevelNormal : Global.Config.MovieCompressionLevel);
|
////_zip = new IonicZipWriter(path, notamovie ? Global.Config.SaveStateCompressionLevelNormal : Global.Config.MovieCompressionLevel);
|
||||||
////_zip = new SharpZipWriter(path, Global.Config.SaveStateCompressionLevelNormal);
|
////_zip = new SharpZipWriter(path, Global.Config.SaveStateCompressionLevelNormal);
|
||||||
////_zip = new SevenZipWriter(path, Global.Config.SaveStateCompressionLevelNormal);
|
////_zip = new SevenZipWriter(path, Global.Config.SaveStateCompressionLevelNormal);
|
||||||
|
_zip = new FrameworkZipWriter(path, notamovie ? Global.Config.SaveStateCompressionLevelNormal : Global.Config.MovieCompressionLevel);
|
||||||
|
|
||||||
if (notamovie)
|
if (notamovie)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
|
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
|
||||||
|
@ -10,38 +10,17 @@
|
||||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
<RootNamespace>BizHawk.Client.Common</RootNamespace>
|
<RootNamespace>BizHawk.Client.Common</RootNamespace>
|
||||||
<AssemblyName>BizHawk.Client.Common</AssemblyName>
|
<AssemblyName>BizHawk.Client.Common</AssemblyName>
|
||||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
|
||||||
<FileAlignment>512</FileAlignment>
|
<FileAlignment>512</FileAlignment>
|
||||||
</PropertyGroup>
|
<TargetFrameworkProfile />
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
|
|
||||||
<DebugSymbols>true</DebugSymbols>
|
|
||||||
<DebugType>full</DebugType>
|
|
||||||
<Optimize>false</Optimize>
|
|
||||||
<OutputPath>..\output\dll\</OutputPath>
|
|
||||||
<DefineConstants>TRACE;DEBUG;DOTNET20;UNMANAGED;COMPRESS;WINDOWS</DefineConstants>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<WarningLevel>4</WarningLevel>
|
|
||||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
|
||||||
<PlatformTarget>x86</PlatformTarget>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
|
|
||||||
<DebugType>pdbonly</DebugType>
|
|
||||||
<Optimize>true</Optimize>
|
|
||||||
<OutputPath>..\output\dll\</OutputPath>
|
|
||||||
<DefineConstants>TRACE;DOTNET20;UNMANAGED;COMPRESS;WINDOWS</DefineConstants>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<WarningLevel>4</WarningLevel>
|
|
||||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
|
||||||
<PlatformTarget>x86</PlatformTarget>
|
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
|
||||||
<DebugSymbols>true</DebugSymbols>
|
<DebugSymbols>true</DebugSymbols>
|
||||||
<OutputPath>..\output64\dll\</OutputPath>
|
<OutputPath>..\output\dll\</OutputPath>
|
||||||
<DefineConstants>TRACE;DEBUG;DOTNET20;UNMANAGED;COMPRESS;WINDOWS</DefineConstants>
|
<DefineConstants>TRACE;DEBUG;DOTNET20;UNMANAGED;COMPRESS;WINDOWS</DefineConstants>
|
||||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||||
<DebugType>full</DebugType>
|
<DebugType>full</DebugType>
|
||||||
<PlatformTarget>x64</PlatformTarget>
|
<PlatformTarget>x64</PlatformTarget>
|
||||||
<CodeAnalysisLogFile>..\output\dll\BizHawk.Client.Common.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
|
|
||||||
<CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
|
<CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
|
||||||
<CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
|
<CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
|
||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
@ -51,15 +30,15 @@
|
||||||
<CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
|
<CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
|
||||||
<CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
|
<CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
|
||||||
<CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
|
<CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
|
||||||
|
<Prefer32Bit>false</Prefer32Bit>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
|
||||||
<OutputPath>..\output64\dll\</OutputPath>
|
<OutputPath>..\output\dll\</OutputPath>
|
||||||
<DefineConstants>TRACE;DOTNET20;UNMANAGED;COMPRESS;WINDOWS</DefineConstants>
|
<DefineConstants>TRACE;DOTNET20;UNMANAGED;COMPRESS;WINDOWS</DefineConstants>
|
||||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||||
<Optimize>true</Optimize>
|
<Optimize>true</Optimize>
|
||||||
<DebugType>pdbonly</DebugType>
|
<DebugType>pdbonly</DebugType>
|
||||||
<PlatformTarget>x64</PlatformTarget>
|
<PlatformTarget>x64</PlatformTarget>
|
||||||
<CodeAnalysisLogFile>..\output\dll\BizHawk.Client.Common.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
|
|
||||||
<CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
|
<CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
|
||||||
<CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
|
<CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
|
||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
@ -69,6 +48,7 @@
|
||||||
<CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
|
<CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
|
||||||
<CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
|
<CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
|
||||||
<CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
|
<CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
|
||||||
|
<Prefer32Bit>false</Prefer32Bit>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="ICSharpCode.SharpZipLib">
|
<Reference Include="ICSharpCode.SharpZipLib">
|
||||||
|
@ -87,6 +67,7 @@
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
<Reference Include="System.Core" />
|
<Reference Include="System.Core" />
|
||||||
<Reference Include="System.Drawing" />
|
<Reference Include="System.Drawing" />
|
||||||
|
<Reference Include="System.IO.Compression" />
|
||||||
<Reference Include="System.Xml.Linq" />
|
<Reference Include="System.Xml.Linq" />
|
||||||
<Reference Include="System.Data.DataSetExtensions" />
|
<Reference Include="System.Data.DataSetExtensions" />
|
||||||
<Reference Include="Microsoft.CSharp" />
|
<Reference Include="Microsoft.CSharp" />
|
||||||
|
@ -151,6 +132,8 @@
|
||||||
<Compile Include="ExceptionClasses.cs" />
|
<Compile Include="ExceptionClasses.cs" />
|
||||||
<Compile Include="Extensions.cs" />
|
<Compile Include="Extensions.cs" />
|
||||||
<Compile Include="FirmwareManager.cs" />
|
<Compile Include="FirmwareManager.cs" />
|
||||||
|
<Compile Include="FrameworkFastZipWriter.cs" />
|
||||||
|
<Compile Include="FrameworkZipWriter.cs" />
|
||||||
<Compile Include="Global.cs" />
|
<Compile Include="Global.cs" />
|
||||||
<Compile Include="inputAdapters\AutoPattern.cs" />
|
<Compile Include="inputAdapters\AutoPattern.cs" />
|
||||||
<Compile Include="inputAdapters\BitwiseAdapters.cs" />
|
<Compile Include="inputAdapters\BitwiseAdapters.cs" />
|
||||||
|
@ -191,6 +174,8 @@
|
||||||
<Compile Include="lua\LuaMemoryBase.cs" />
|
<Compile Include="lua\LuaMemoryBase.cs" />
|
||||||
<Compile Include="lua\LuaSandbox.cs" />
|
<Compile Include="lua\LuaSandbox.cs" />
|
||||||
<Compile Include="lua\NamedLuaFunction.cs" />
|
<Compile Include="lua\NamedLuaFunction.cs" />
|
||||||
|
<Compile Include="miniz\LibMiniz.cs" />
|
||||||
|
<Compile Include="miniz\MinizZipWriter.cs" />
|
||||||
<Compile Include="movie\bk2\Bk2ControllerAdapter.cs" />
|
<Compile Include="movie\bk2\Bk2ControllerAdapter.cs" />
|
||||||
<Compile Include="movie\bk2\Bk2Header.cs" />
|
<Compile Include="movie\bk2\Bk2Header.cs" />
|
||||||
<Compile Include="movie\bk2\Bk2LogEntryGenerator.cs" />
|
<Compile Include="movie\bk2\Bk2LogEntryGenerator.cs" />
|
||||||
|
|
|
@ -0,0 +1,296 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.IO.Compression;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace BizHawk.Client.Common
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// this almost works, but it loses all of its speed advantages over FrameworkZipWriter from slow CRC calculation.
|
||||||
|
/// </summary>
|
||||||
|
public class FrameworkFastZipWriter : IZipWriter
|
||||||
|
{
|
||||||
|
private Stream _output;
|
||||||
|
private readonly CompressionLevel _level;
|
||||||
|
|
||||||
|
private byte[] _localHeader;
|
||||||
|
private List<byte[]> _endBlobs = new List<byte[]>();
|
||||||
|
private byte[] _fileHeaderTemplate;
|
||||||
|
private int _numEntries;
|
||||||
|
private bool _disposed;
|
||||||
|
|
||||||
|
private class CRC32Stream : Stream
|
||||||
|
{
|
||||||
|
// Lookup table for speed.
|
||||||
|
private static readonly uint[] Crc32Table;
|
||||||
|
|
||||||
|
static CRC32Stream()
|
||||||
|
{
|
||||||
|
Crc32Table = new uint[256];
|
||||||
|
for (uint i = 0; i < 256; ++i)
|
||||||
|
{
|
||||||
|
uint crc = i;
|
||||||
|
for (int j = 8; j > 0; --j)
|
||||||
|
{
|
||||||
|
if ((crc & 1) == 1)
|
||||||
|
{
|
||||||
|
crc = (crc >> 1) ^ 0xEDB88320;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
crc >>= 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Crc32Table[i] = crc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private uint _crc = 0xffffffff;
|
||||||
|
private int _count = 0;
|
||||||
|
private Stream _baseStream;
|
||||||
|
|
||||||
|
public int Size => _count;
|
||||||
|
public uint Crc => ~_crc;
|
||||||
|
|
||||||
|
public CRC32Stream(Stream baseStream)
|
||||||
|
{
|
||||||
|
_baseStream = baseStream;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CalculateByte(byte b)
|
||||||
|
{
|
||||||
|
_crc = (_crc >> 8) ^ Crc32Table[b ^ (_crc & 0xff)];
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Write(byte[] buffer, int offset, int count)
|
||||||
|
{
|
||||||
|
for (int i = offset; i < offset + count; i++)
|
||||||
|
{
|
||||||
|
CalculateByte(buffer[i]);
|
||||||
|
}
|
||||||
|
_count += count;
|
||||||
|
_baseStream.Write(buffer, offset, count);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void WriteByte(byte value)
|
||||||
|
{
|
||||||
|
CalculateByte(value);
|
||||||
|
_count++;
|
||||||
|
_baseStream.WriteByte(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Flush()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override long Seek(long offset, SeekOrigin origin)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void SetLength(long value)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override int Read(byte[] buffer, int offset, int count)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool CanRead => false;
|
||||||
|
|
||||||
|
public override bool CanSeek => false;
|
||||||
|
|
||||||
|
public override bool CanWrite => true;
|
||||||
|
|
||||||
|
public override long Length
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override long Position
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public FrameworkFastZipWriter(string path, int compressionlevel)
|
||||||
|
{
|
||||||
|
_output = new FileStream(path, FileMode.Create, FileAccess.Write);
|
||||||
|
if (compressionlevel == 0)
|
||||||
|
throw new NotImplementedException();
|
||||||
|
//_level = CompressionLevel.NoCompression;
|
||||||
|
else if (compressionlevel < 5)
|
||||||
|
_level = CompressionLevel.Fastest;
|
||||||
|
else
|
||||||
|
_level = CompressionLevel.Optimal;
|
||||||
|
|
||||||
|
var dt = DateTime.Now;
|
||||||
|
var mtime = dt.Second >> 1
|
||||||
|
| dt.Minute << 5
|
||||||
|
| dt.Hour << 11;
|
||||||
|
var mdate = dt.Day
|
||||||
|
| dt.Month << 5
|
||||||
|
| (dt.Year - 1980) << 9;
|
||||||
|
|
||||||
|
var modifiedDate = new byte[]
|
||||||
|
{
|
||||||
|
(byte)(mtime & 0xff),
|
||||||
|
(byte)(mtime >> 8),
|
||||||
|
(byte)(mdate & 0xff),
|
||||||
|
(byte)(mdate >> 8)
|
||||||
|
};
|
||||||
|
|
||||||
|
_localHeader = new byte[]
|
||||||
|
{
|
||||||
|
0x50, 0x4b, 0x03, 0x04, // signature
|
||||||
|
0x14, 0x00, // version
|
||||||
|
0x08, 0x00, // flags: has data descriptor
|
||||||
|
0x08, 0x00, // method: deflate
|
||||||
|
modifiedDate[0], modifiedDate[1], // mod time
|
||||||
|
modifiedDate[2], modifiedDate[3], // mod date
|
||||||
|
0x00, 0x00, 0x00, 0x00, // crc32
|
||||||
|
0x00, 0x00, 0x00, 0x00, // compressed size
|
||||||
|
0x00, 0x00, 0x00, 0x00, // uncompressed size
|
||||||
|
0x00, 0x00, // filename length
|
||||||
|
0x00, 0x00, // extra field length
|
||||||
|
};
|
||||||
|
|
||||||
|
_fileHeaderTemplate = new byte[]
|
||||||
|
{
|
||||||
|
0x50, 0x4b, 0x01, 0x02, // signature
|
||||||
|
0x17, 0x03, // ??
|
||||||
|
0x14, 0x00, // version
|
||||||
|
0x08, 0x00, // flags: has data descriptor
|
||||||
|
0x08, 0x00, // method: deflate
|
||||||
|
modifiedDate[0], modifiedDate[1], // mod time
|
||||||
|
modifiedDate[2], modifiedDate[3], // mod date
|
||||||
|
0x00, 0x00, 0x00, 0x00, // crc32
|
||||||
|
0x00, 0x00, 0x00, 0x00, // compressed size
|
||||||
|
0x00, 0x00, 0x00, 0x00, // uncompressed size
|
||||||
|
0x00, 0x00, // filename length
|
||||||
|
0x00, 0x00, // extra field length
|
||||||
|
0x00, 0x00, // file comment length
|
||||||
|
0x00, 0x00, // disk #,
|
||||||
|
0x00, 0x00, // internal attributes
|
||||||
|
0x00, 0x00, 0x00, 0x00, // external attributes
|
||||||
|
0x00, 0x00, 0x00, 0x00, // local header offset
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
if (!_disposed)
|
||||||
|
{
|
||||||
|
WriteFooter();
|
||||||
|
_output.Dispose();
|
||||||
|
_output = null;
|
||||||
|
_disposed = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void WriteItem(string name, Action<Stream> callback)
|
||||||
|
{
|
||||||
|
var nameb = Encoding.ASCII.GetBytes(name);
|
||||||
|
_localHeader[26] = (byte)nameb.Length;
|
||||||
|
_localHeader[27] = (byte)(nameb.Length >> 8);
|
||||||
|
|
||||||
|
var localHeaderOffset = (int)(_output.Position);
|
||||||
|
|
||||||
|
_output.Write(_localHeader, 0, _localHeader.Length);
|
||||||
|
_output.Write(nameb, 0, nameb.Length);
|
||||||
|
|
||||||
|
var fileStart = (int)(_output.Position);
|
||||||
|
|
||||||
|
var s2 = new DeflateStream(_output, _level, true);
|
||||||
|
var s3 = new CRC32Stream(s2);
|
||||||
|
callback(s3);
|
||||||
|
s2.Flush();
|
||||||
|
|
||||||
|
var fileEnd = (int)(_output.Position);
|
||||||
|
|
||||||
|
var crc = s3.Crc;
|
||||||
|
var compressedSize = fileEnd - fileStart;
|
||||||
|
var uncompressedSize = s3.Size;
|
||||||
|
var descriptor = new byte[]
|
||||||
|
{
|
||||||
|
(byte)crc,
|
||||||
|
(byte)(crc >> 8),
|
||||||
|
(byte)(crc >> 16),
|
||||||
|
(byte)(crc >> 24),
|
||||||
|
(byte)compressedSize,
|
||||||
|
(byte)(compressedSize >> 8),
|
||||||
|
(byte)(compressedSize >> 16),
|
||||||
|
(byte)(compressedSize >> 24),
|
||||||
|
(byte)uncompressedSize,
|
||||||
|
(byte)(uncompressedSize >> 8),
|
||||||
|
(byte)(uncompressedSize >> 16),
|
||||||
|
(byte)(uncompressedSize >> 24)
|
||||||
|
};
|
||||||
|
_output.Write(descriptor, 0, descriptor.Length);
|
||||||
|
|
||||||
|
var fileHeader = (byte[])_fileHeaderTemplate.Clone();
|
||||||
|
|
||||||
|
fileHeader[28] = (byte)nameb.Length;
|
||||||
|
fileHeader[29] = (byte)(nameb.Length >> 8);
|
||||||
|
Array.Copy(descriptor, 0, fileHeader, 16, 12);
|
||||||
|
fileHeader[42] = (byte)localHeaderOffset;
|
||||||
|
fileHeader[43] = (byte)(localHeaderOffset >> 8);
|
||||||
|
fileHeader[44] = (byte)(localHeaderOffset >> 16);
|
||||||
|
fileHeader[45] = (byte)(localHeaderOffset >> 24);
|
||||||
|
|
||||||
|
_endBlobs.Add(fileHeader);
|
||||||
|
_endBlobs.Add(nameb);
|
||||||
|
_numEntries++;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void WriteFooter()
|
||||||
|
{
|
||||||
|
var centralHeaderOffset = (int)(_output.Position);
|
||||||
|
|
||||||
|
foreach (var blob in _endBlobs)
|
||||||
|
_output.Write(blob, 0, blob.Length);
|
||||||
|
|
||||||
|
var centralHeaderEnd = (int)(_output.Position);
|
||||||
|
|
||||||
|
var centralHeaderSize = centralHeaderEnd - centralHeaderOffset;
|
||||||
|
|
||||||
|
var footer = new byte[]
|
||||||
|
{
|
||||||
|
0x50, 0x4b, 0x05, 0x06, // signature
|
||||||
|
0x00, 0x00, // disk number
|
||||||
|
0x00, 0x00, // central record disk number
|
||||||
|
(byte)_numEntries, (byte)(_numEntries >> 8), // number of entries on disk
|
||||||
|
(byte)_numEntries, (byte)(_numEntries >> 8), // number of entries total
|
||||||
|
(byte)centralHeaderSize,
|
||||||
|
(byte)(centralHeaderSize >> 8),
|
||||||
|
(byte)(centralHeaderSize >> 16),
|
||||||
|
(byte)(centralHeaderSize >> 24), // central directory size
|
||||||
|
(byte)centralHeaderOffset,
|
||||||
|
(byte)(centralHeaderOffset >> 8),
|
||||||
|
(byte)(centralHeaderOffset >> 16),
|
||||||
|
(byte)(centralHeaderOffset >> 24), // central directory offset
|
||||||
|
0x07, 0x00, // comment length
|
||||||
|
0x42, 0x69, 0x7a, 0x48, 0x61, 0x77, 0x6b // comment
|
||||||
|
};
|
||||||
|
|
||||||
|
_output.Write(footer, 0, footer.Length);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,44 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.IO.Compression;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace BizHawk.Client.Common
|
||||||
|
{
|
||||||
|
public class FrameworkZipWriter : IZipWriter
|
||||||
|
{
|
||||||
|
private ZipArchive _archive;
|
||||||
|
private readonly CompressionLevel _level;
|
||||||
|
|
||||||
|
public FrameworkZipWriter(string path, int compressionlevel)
|
||||||
|
{
|
||||||
|
_archive = new ZipArchive(new FileStream(path, FileMode.Create, FileAccess.Write),
|
||||||
|
ZipArchiveMode.Create, false);
|
||||||
|
if (compressionlevel == 0)
|
||||||
|
_level = CompressionLevel.NoCompression;
|
||||||
|
else if (compressionlevel < 5)
|
||||||
|
_level = CompressionLevel.Fastest;
|
||||||
|
else
|
||||||
|
_level = CompressionLevel.Optimal;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void WriteItem(string name, Action<Stream> callback)
|
||||||
|
{
|
||||||
|
using (var stream = _archive.CreateEntry(name, _level).Open())
|
||||||
|
{
|
||||||
|
callback(stream);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
if (_archive != null)
|
||||||
|
{
|
||||||
|
_archive.Dispose();
|
||||||
|
_archive = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,7 +1,7 @@
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
using BizHawk.Emulation.Common;
|
using BizHawk.Emulation.Common;
|
||||||
using BizHawk.Emulation.Cores.Nintendo.Gameboy;
|
using BizHawk.Emulation.Cores.Consoles.Nintendo.Gameboy;
|
||||||
using BizHawk.Emulation.Cores.Sega.MasterSystem;
|
using BizHawk.Emulation.Cores.Sega.MasterSystem;
|
||||||
|
|
||||||
// ReSharper disable StyleCop.SA1401
|
// ReSharper disable StyleCop.SA1401
|
||||||
|
@ -112,7 +112,7 @@ namespace BizHawk.Client.Common
|
||||||
case "SNES":
|
case "SNES":
|
||||||
return SystemInfo.SNES;
|
return SystemInfo.SNES;
|
||||||
case "GB":
|
case "GB":
|
||||||
if ((Emulator as Gameboy).IsCGBMode())
|
if ((Emulator as IGameboyCommon).IsCGBMode())
|
||||||
{
|
{
|
||||||
return SystemInfo.GBC;
|
return SystemInfo.GBC;
|
||||||
}
|
}
|
||||||
|
@ -144,6 +144,10 @@ namespace BizHawk.Client.Common
|
||||||
return SystemInfo.AppleII;
|
return SystemInfo.AppleII;
|
||||||
case "Libretro":
|
case "Libretro":
|
||||||
return SystemInfo.Libretro;
|
return SystemInfo.Libretro;
|
||||||
|
case "VB":
|
||||||
|
return SystemInfo.VirtualBoy;
|
||||||
|
case "NGP":
|
||||||
|
return SystemInfo.NeoGeoPocket;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ using BizHawk.Common.StringExtensions;
|
||||||
using BizHawk.Emulation.Common;
|
using BizHawk.Emulation.Common;
|
||||||
using BizHawk.Emulation.Common.IEmulatorExtensions;
|
using BizHawk.Emulation.Common.IEmulatorExtensions;
|
||||||
using BizHawk.Emulation.Cores.Nintendo.SNES;
|
using BizHawk.Emulation.Cores.Nintendo.SNES;
|
||||||
|
using BizHawk.Emulation.Cores.Nintendo.SNES9X;
|
||||||
|
|
||||||
namespace BizHawk.Client.Common
|
namespace BizHawk.Client.Common
|
||||||
{
|
{
|
||||||
|
@ -355,6 +356,11 @@ namespace BizHawk.Client.Common
|
||||||
name += "." + Global.Emulator.Attributes().CoreName;
|
name += "." + Global.Emulator.Attributes().CoreName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Global.Emulator is Snes9x) // Keep snes9x savestate away from libsnes, we want to not be too tedious so bsnes names will just have the profile name not the core name
|
||||||
|
{
|
||||||
|
name += "." + Global.Emulator.Attributes().CoreName;
|
||||||
|
}
|
||||||
|
|
||||||
// Bsnes profiles have incompatible savestates so save the profile name
|
// Bsnes profiles have incompatible savestates so save the profile name
|
||||||
if (Global.Emulator is LibsnesCore)
|
if (Global.Emulator is LibsnesCore)
|
||||||
{
|
{
|
||||||
|
|
|
@ -22,6 +22,7 @@ using BizHawk.Emulation.Cores.Sony.PSX;
|
||||||
using BizHawk.Emulation.DiscSystem;
|
using BizHawk.Emulation.DiscSystem;
|
||||||
|
|
||||||
using GPGX64 = BizHawk.Emulation.Cores.Consoles.Sega.gpgx64;
|
using GPGX64 = BizHawk.Emulation.Cores.Consoles.Sega.gpgx64;
|
||||||
|
using BizHawk.Emulation.Cores.Consoles.Sega.Saturn;
|
||||||
|
|
||||||
namespace BizHawk.Client.Common
|
namespace BizHawk.Client.Common
|
||||||
{
|
{
|
||||||
|
@ -487,7 +488,15 @@ namespace BizHawk.Client.Common
|
||||||
case DiscType.TurboCD:
|
case DiscType.TurboCD:
|
||||||
case DiscType.UnknownCDFS:
|
case DiscType.UnknownCDFS:
|
||||||
case DiscType.UnknownFormat:
|
case DiscType.UnknownFormat:
|
||||||
game.System = "PCECD";
|
if (PreferredPlatformIsDefined(ext))
|
||||||
|
{
|
||||||
|
game.System = Global.Config.PreferredPlatformsForExtensions[ext];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
game.System = "PCECD";
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -508,7 +517,9 @@ namespace BizHawk.Client.Common
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case "SAT":
|
case "SAT":
|
||||||
nextEmulator = new Yabause(nextComm, disc, GetCoreSyncSettings<Yabause>());
|
//nextEmulator = new Yabause(nextComm, disc, GetCoreSyncSettings<Yabause>());
|
||||||
|
nextEmulator = new Saturnus(nextComm, new[] { disc }, Deterministic,
|
||||||
|
(Saturnus.Settings)GetCoreSettings<Saturnus>(), (Saturnus.SyncSettings)GetCoreSyncSettings<Saturnus>());
|
||||||
break;
|
break;
|
||||||
case "PSP":
|
case "PSP":
|
||||||
nextEmulator = new PSP(nextComm, file.Name);
|
nextEmulator = new PSP(nextComm, file.Name);
|
||||||
|
@ -771,7 +782,7 @@ namespace BizHawk.Client.Common
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case "SNES":
|
case "SNES":
|
||||||
if (Global.Config.SNES_InSnes9x && VersionInfo.DeveloperBuild)
|
if (Global.Config.SNES_InSnes9x)
|
||||||
{
|
{
|
||||||
core = CoreInventory.Instance["SNES", "Snes9x"];
|
core = CoreInventory.Instance["SNES", "Snes9x"];
|
||||||
}
|
}
|
||||||
|
@ -823,6 +834,7 @@ namespace BizHawk.Client.Common
|
||||||
case "GBC":
|
case "GBC":
|
||||||
if (!Global.Config.GB_AsSGB)
|
if (!Global.Config.GB_AsSGB)
|
||||||
{
|
{
|
||||||
|
//core = CoreInventory.Instance["GB", "Pizza Boy"];
|
||||||
core = CoreInventory.Instance["GB", "Gambatte"];
|
core = CoreInventory.Instance["GB", "Gambatte"];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -201,10 +201,6 @@ namespace BizHawk.Client.Common
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
bl.Dispose();
|
bl.Dispose();
|
||||||
|
@ -212,41 +208,9 @@ namespace BizHawk.Client.Common
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else // text mode
|
else
|
||||||
{
|
{
|
||||||
if (Global.MovieSession.HandleMovieLoadState(path))
|
return false;
|
||||||
{
|
|
||||||
using (var reader = new StreamReader(path))
|
|
||||||
{
|
|
||||||
core.LoadStateText(reader);
|
|
||||||
|
|
||||||
while (true)
|
|
||||||
{
|
|
||||||
var str = reader.ReadLine();
|
|
||||||
if (str == null)
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (str.Trim() == "")
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
var args = str.Split(' ');
|
|
||||||
if (args[0] == "Framebuffer" && Global.Emulator.HasVideoProvider())
|
|
||||||
{
|
|
||||||
Global.Emulator.AsVideoProvider().GetVideoBuffer().ReadFromHex(args[1]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -174,10 +174,20 @@ namespace BizHawk.Client.Common
|
||||||
public static SystemInfo TI83 { get; } = new SystemInfo("TI - 83", CoreSystem.TI83, 1);
|
public static SystemInfo TI83 { get; } = new SystemInfo("TI - 83", CoreSystem.TI83, 1);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the <see cref="SystemInfo"/> instance for TI-83
|
/// Gets the <see cref="SystemInfo"/> instance for Wonderswan
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static SystemInfo WonderSwan { get; } = new SystemInfo("WonderSwan", CoreSystem.WonderSwan, 1);
|
public static SystemInfo WonderSwan { get; } = new SystemInfo("WonderSwan", CoreSystem.WonderSwan, 1);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the <see cref="SystemInfo"/> instance for Virtual Boy
|
||||||
|
/// </summary>
|
||||||
|
public static SystemInfo VirtualBoy { get; } = new SystemInfo("Virtual Boy", CoreSystem.VirtualBoy, 1);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the <see cref="SystemInfo"/> instance for TI-83
|
||||||
|
/// </summary>
|
||||||
|
public static SystemInfo NeoGeoPocket { get; } = new SystemInfo("Neo-Geo Pocket", CoreSystem.NeoGeoPocket, 1);
|
||||||
|
|
||||||
#endregion Get SystemInfo
|
#endregion Get SystemInfo
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -46,6 +46,7 @@ namespace BizHawk.Client.Common
|
||||||
{ ".rom", "" },
|
{ ".rom", "" },
|
||||||
{ ".iso", "" },
|
{ ".iso", "" },
|
||||||
{ ".img", "" },
|
{ ".img", "" },
|
||||||
|
{ ".cue", "" }
|
||||||
};
|
};
|
||||||
|
|
||||||
// Path Settings ************************************/
|
// Path Settings ************************************/
|
||||||
|
@ -217,7 +218,7 @@ namespace BizHawk.Client.Common
|
||||||
|
|
||||||
// Savestate settings
|
// Savestate settings
|
||||||
public SaveStateTypeE SaveStateType = SaveStateTypeE.Default;
|
public SaveStateTypeE SaveStateType = SaveStateTypeE.Default;
|
||||||
public const int DefaultSaveStateCompressionLevelNormal = 0;
|
public const int DefaultSaveStateCompressionLevelNormal = 1;
|
||||||
public int SaveStateCompressionLevelNormal = DefaultSaveStateCompressionLevelNormal;
|
public int SaveStateCompressionLevelNormal = DefaultSaveStateCompressionLevelNormal;
|
||||||
public const int DefaultSaveStateCompressionLevelRewind = 0; // this isnt actually used yet
|
public const int DefaultSaveStateCompressionLevelRewind = 0; // this isnt actually used yet
|
||||||
public int SaveStateCompressionLevelRewind = DefaultSaveStateCompressionLevelRewind; // this isnt actually used yet
|
public int SaveStateCompressionLevelRewind = DefaultSaveStateCompressionLevelRewind; // this isnt actually used yet
|
||||||
|
@ -398,6 +399,7 @@ namespace BizHawk.Client.Common
|
||||||
public string AVICodecToken = "";
|
public string AVICodecToken = "";
|
||||||
public int GifWriterFrameskip = 3;
|
public int GifWriterFrameskip = 3;
|
||||||
public int GifWriterDelay = -1;
|
public int GifWriterDelay = -1;
|
||||||
|
public bool VideoWriterAudioSync = true;
|
||||||
|
|
||||||
#region emulation core settings
|
#region emulation core settings
|
||||||
|
|
||||||
|
@ -535,8 +537,8 @@ namespace BizHawk.Client.Common
|
||||||
// it hasn't been absorbed into the new system
|
// it hasn't been absorbed into the new system
|
||||||
public bool GB_AsSGB = false;
|
public bool GB_AsSGB = false;
|
||||||
public bool NES_InQuickNES = true;
|
public bool NES_InQuickNES = true;
|
||||||
public bool SNES_InSnes9x = false;
|
public bool SNES_InSnes9x = true;
|
||||||
public bool GBA_UsemGBA = false;
|
public bool GBA_UsemGBA = true;
|
||||||
public bool A78_UseEmu7800 = true;
|
public bool A78_UseEmu7800 = true;
|
||||||
public bool CoreForcingViaGameDB = true;
|
public bool CoreForcingViaGameDB = true;
|
||||||
public string LibretroCore;
|
public string LibretroCore;
|
||||||
|
|
|
@ -344,6 +344,20 @@ namespace BizHawk.Client.Common
|
||||||
new PathEntry { System = "Libretro", SystemDisplayName = "Libretro", Type = "Save RAM", Path = Path.Combine(".", "SaveRAM"), Ordinal = 4 },
|
new PathEntry { System = "Libretro", SystemDisplayName = "Libretro", Type = "Save RAM", Path = Path.Combine(".", "SaveRAM"), Ordinal = 4 },
|
||||||
new PathEntry { System = "Libretro", SystemDisplayName = "Libretro", Type = "Screenshots", Path = Path.Combine(".", "Screenshots"), Ordinal = 5 },
|
new PathEntry { System = "Libretro", SystemDisplayName = "Libretro", Type = "Screenshots", Path = Path.Combine(".", "Screenshots"), Ordinal = 5 },
|
||||||
new PathEntry { System = "Libretro", SystemDisplayName = "Libretro", Type = "Cheats", Path = Path.Combine(".", "Cheats"), Ordinal = 6 },
|
new PathEntry { System = "Libretro", SystemDisplayName = "Libretro", Type = "Cheats", Path = Path.Combine(".", "Cheats"), Ordinal = 6 },
|
||||||
|
|
||||||
|
new PathEntry { System = "VB", SystemDisplayName = "VB", Type = "Base", Path = Path.Combine(".", "VB"), Ordinal = 0 },
|
||||||
|
new PathEntry { System = "VB", SystemDisplayName = "VB", Type = "ROM", Path = ".", Ordinal = 1 },
|
||||||
|
new PathEntry { System = "VB", SystemDisplayName = "VB", Type = "Savestates", Path = Path.Combine(".", "State"), Ordinal = 2 },
|
||||||
|
new PathEntry { System = "VB", SystemDisplayName = "VB", Type = "Save RAM", Path = Path.Combine(".", "SaveRAM"), Ordinal = 3 },
|
||||||
|
new PathEntry { System = "VB", SystemDisplayName = "VB", Type = "Screenshots", Path = Path.Combine(".", "Screenshots"), Ordinal = 4 },
|
||||||
|
new PathEntry { System = "VB", SystemDisplayName = "VB", Type = "Cheats", Path = Path.Combine(".", "Cheats"), Ordinal = 5 },
|
||||||
|
|
||||||
|
new PathEntry { System = "NGP", SystemDisplayName = "NGP", Type = "Base", Path = Path.Combine(".", "NGP"), Ordinal = 0 },
|
||||||
|
new PathEntry { System = "NGP", SystemDisplayName = "NGP", Type = "ROM", Path = ".", Ordinal = 1 },
|
||||||
|
new PathEntry { System = "NGP", SystemDisplayName = "NGP", Type = "Savestates", Path = Path.Combine(".", "State"), Ordinal = 2 },
|
||||||
|
new PathEntry { System = "NGP", SystemDisplayName = "NGP", Type = "Save RAM", Path = Path.Combine(".", "SaveRAM"), Ordinal = 3 },
|
||||||
|
new PathEntry { System = "NGP", SystemDisplayName = "NGP", Type = "Screenshots", Path = Path.Combine(".", "Screenshots"), Ordinal = 4 },
|
||||||
|
new PathEntry { System = "NGP", SystemDisplayName = "NGP", Type = "Cheats", Path = Path.Combine(".", "Cheats"), Ordinal = 5 },
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -135,11 +135,11 @@ namespace BizHawk.Client.Common
|
||||||
|
|
||||||
private bool N64CoreTypeDynarec()
|
private bool N64CoreTypeDynarec()
|
||||||
{
|
{
|
||||||
if ((Emulator as N64)?.GetSyncSettings().Core == N64SyncSettings.CoreType.Dynarec)
|
//if ((Emulator as N64)?.GetSyncSettings().Core == N64SyncSettings.CoreType.Dynarec)
|
||||||
{
|
//{
|
||||||
Log("N64 Error: Memory callbacks are not implemented for Dynamic Recompiler core type\nUse Interpreter or Pure Interpreter\n");
|
// Log("N64 Error: Memory callbacks are not implemented for Dynamic Recompiler core type\nUse Interpreter or Pure Interpreter\n");
|
||||||
return true;
|
// return true;
|
||||||
}
|
//}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,53 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace BizHawk.Client.Common.Miniz
|
||||||
|
{
|
||||||
|
public static class LibMiniz
|
||||||
|
{
|
||||||
|
private const string DllName = "libminiz.dll";
|
||||||
|
private const CallingConvention CC = CallingConvention.Cdecl;
|
||||||
|
|
||||||
|
public enum mz_zip_flags : uint
|
||||||
|
{
|
||||||
|
MZ_ZIP_FLAG_CASE_SENSITIVE = 0x0100,
|
||||||
|
MZ_ZIP_FLAG_IGNORE_PATH = 0x0200,
|
||||||
|
MZ_ZIP_FLAG_COMPRESSED_DATA = 0x0400,
|
||||||
|
MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY = 0x0800
|
||||||
|
};
|
||||||
|
|
||||||
|
enum mz_compression_level : uint
|
||||||
|
{
|
||||||
|
MZ_NO_COMPRESSION = 0,
|
||||||
|
MZ_BEST_SPEED = 1,
|
||||||
|
MZ_BEST_COMPRESSION = 9,
|
||||||
|
MZ_UBER_COMPRESSION = 10,
|
||||||
|
MZ_DEFAULT_LEVEL = 6,
|
||||||
|
MZ_DEFAULT_COMPRESSION = unchecked((uint)-1)
|
||||||
|
};
|
||||||
|
|
||||||
|
[DllImport(DllName, CallingConvention = CC)]
|
||||||
|
public static extern bool mz_zip_writer_init_file(IntPtr pZip, string pFilename, long size_to_reserve_at_beginning);
|
||||||
|
|
||||||
|
// Adds the contents of a memory buffer to an archive. These functions record the current local time into the archive.
|
||||||
|
// To add a directory entry, call this method with an archive name ending in a forwardslash with empty buffer.
|
||||||
|
// level_and_flags - compression level (0-10, see MZ_BEST_SPEED, MZ_BEST_COMPRESSION, etc.) logically OR'd with zero or more mz_zip_flags, or just set to MZ_DEFAULT_COMPRESSION.
|
||||||
|
[DllImport(DllName, CallingConvention = CC)]
|
||||||
|
public static extern bool mz_zip_writer_add_mem(IntPtr pZip, string pArchive_name, byte[] pBuf, ulong buf_size, uint level_and_flags);
|
||||||
|
|
||||||
|
// Finalizes the archive by writing the central directory records followed by the end of central directory record.
|
||||||
|
// After an archive is finalized, the only valid call on the mz_zip_archive struct is mz_zip_writer_end().
|
||||||
|
// An archive must be manually finalized by calling this function for it to be valid.
|
||||||
|
[DllImport(DllName, CallingConvention = CC)]
|
||||||
|
public static extern bool mz_zip_writer_finalize_archive(IntPtr pZip);
|
||||||
|
|
||||||
|
// Ends archive writing, freeing all allocations, and closing the output file if mz_zip_writer_init_file() was used.
|
||||||
|
// Note for the archive to be valid, it must have been finalized before ending.
|
||||||
|
[DllImport(DllName, CallingConvention = CC)]
|
||||||
|
public static extern bool mz_zip_writer_end(IntPtr pZip);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,68 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace BizHawk.Client.Common.Miniz
|
||||||
|
{
|
||||||
|
public class MinizZipWriter : IZipWriter
|
||||||
|
{
|
||||||
|
private IntPtr _zip;
|
||||||
|
private uint _flags;
|
||||||
|
private static readonly byte[] _shitcock = new byte[32 * 1024 * 1024];
|
||||||
|
|
||||||
|
public MinizZipWriter(string path, int compressionlevel)
|
||||||
|
{
|
||||||
|
_zip = Marshal.AllocHGlobal(128);
|
||||||
|
unsafe
|
||||||
|
{
|
||||||
|
var p = (int*)_zip;
|
||||||
|
for (int i = 0; i < 32; i++)
|
||||||
|
p[i] = 0;
|
||||||
|
}
|
||||||
|
if (!LibMiniz.mz_zip_writer_init_file(_zip, path, 0))
|
||||||
|
{
|
||||||
|
Marshal.FreeHGlobal(_zip);
|
||||||
|
_zip = IntPtr.Zero;
|
||||||
|
throw new InvalidOperationException("mz_zip_writer_init_file returned FALSE");
|
||||||
|
}
|
||||||
|
_flags = (uint)compressionlevel;
|
||||||
|
}
|
||||||
|
|
||||||
|
void IDisposable.Dispose()
|
||||||
|
{
|
||||||
|
Dispose();
|
||||||
|
GC.SuppressFinalize(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
~MinizZipWriter()
|
||||||
|
{
|
||||||
|
Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Dispose()
|
||||||
|
{
|
||||||
|
if (_zip != IntPtr.Zero)
|
||||||
|
{
|
||||||
|
if (LibMiniz.mz_zip_writer_finalize_archive(_zip))
|
||||||
|
LibMiniz.mz_zip_writer_end(_zip);
|
||||||
|
Marshal.FreeHGlobal(_zip);
|
||||||
|
_zip = IntPtr.Zero;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void WriteItem(string name, Action<Stream> callback)
|
||||||
|
{
|
||||||
|
lock (_shitcock)
|
||||||
|
{
|
||||||
|
var ms = new MemoryStream(_shitcock);
|
||||||
|
callback(ms);
|
||||||
|
if (!LibMiniz.mz_zip_writer_add_mem(_zip, name, _shitcock /*ms.GetBuffer()*/, (ulong)ms.Position, _flags))
|
||||||
|
throw new InvalidOperationException("mz_zip_writer_add_mem returned FALSE");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -33,7 +33,7 @@ namespace BizHawk.Client.Common
|
||||||
["SG"] = (3579545 / 262.0 / 228.0), // 59.9227434043
|
["SG"] = (3579545 / 262.0 / 228.0), // 59.9227434043
|
||||||
["SG_PAL"] = (3546893 / 313.0 / 228.0), // 49.7014320946
|
["SG_PAL"] = (3546893 / 313.0 / 228.0), // 49.7014320946
|
||||||
["NGP"] = (6144000.0 / (515 * 198)), // 60.2530155928
|
["NGP"] = (6144000.0 / (515 * 198)), // 60.2530155928
|
||||||
["VBOY"] = (20000000.0 / (259 * 384 * 4)), // 50.2734877735
|
["VB"] = (20000000.0 / (259 * 384 * 4)), // 50.2734877735
|
||||||
["Lynx"] = 16000000.0 / (16 * 105 * 159), // 59.89817310572028
|
["Lynx"] = 16000000.0 / (16 * 105 * 159), // 59.89817310572028
|
||||||
["WSWAN"] = (3072000.0 / (159 * 256)), // 75.4716981132
|
["WSWAN"] = (3072000.0 / (159 * 256)), // 75.4716981132
|
||||||
["GB"] = 262144.0 / 4389.0, // 59.7275005696
|
["GB"] = 262144.0 / 4389.0, // 59.7275005696
|
||||||
|
|
|
@ -10,10 +10,18 @@ namespace BizHawk.Client.Common
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
var key = button.Replace("Key ", "");
|
var key = button.Replace("Key ", "");
|
||||||
if (key.StartsWith("P") && key.Length > 1 && key[1] >= '0' && key[1] <= '9')
|
if (key.StartsWith("P"))
|
||||||
{
|
{
|
||||||
key = key.Substring(3);
|
if (key.Length > 2 && key[1] == '1' && key[2] >= '0' && key[1] <= '9') // Hack to support 10-20 controllers, TODO: regex this thing instead
|
||||||
|
{
|
||||||
|
key = key.Substring(4);
|
||||||
|
}
|
||||||
|
else if (key.Length > 1 && key[1] >= '0' && key[1] <= '9')
|
||||||
|
{
|
||||||
|
key = key.Substring(3);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (_systemOverrides.ContainsKey(Global.Emulator.SystemId) && _systemOverrides[Global.Emulator.SystemId].ContainsKey(key))
|
if (_systemOverrides.ContainsKey(Global.Emulator.SystemId) && _systemOverrides[Global.Emulator.SystemId].ContainsKey(key))
|
||||||
{
|
{
|
||||||
|
@ -293,6 +301,10 @@ namespace BizHawk.Client.Common
|
||||||
["Option 1"] = '1',
|
["Option 1"] = '1',
|
||||||
["Option 2"] = '2'
|
["Option 2"] = '2'
|
||||||
},
|
},
|
||||||
|
["NGP"] = new Dictionary<string, char>
|
||||||
|
{
|
||||||
|
["Option"] = 'O'
|
||||||
|
},
|
||||||
["AppleII"] = new Dictionary<string, char>
|
["AppleII"] = new Dictionary<string, char>
|
||||||
{
|
{
|
||||||
["Tab"] = 't' ,
|
["Tab"] = 't' ,
|
||||||
|
@ -332,6 +344,17 @@ namespace BizHawk.Client.Common
|
||||||
["Red"] = 'R',
|
["Red"] = 'R',
|
||||||
["Blue"] = 'B',
|
["Blue"] = 'B',
|
||||||
["Purple"] = 'P'
|
["Purple"] = 'P'
|
||||||
|
},
|
||||||
|
["VB"] = new Dictionary<string, char>
|
||||||
|
{
|
||||||
|
["L_Up"] = 'U',
|
||||||
|
["L_Down"] = 'D',
|
||||||
|
["L_Left"] = 'L',
|
||||||
|
["L_Right"] = 'R',
|
||||||
|
["R_Up"] = 'u',
|
||||||
|
["R_Down"] = 'd',
|
||||||
|
["R_Left"] = 'l',
|
||||||
|
["R_Right"] = 'r',
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,7 @@ using BizHawk.Emulation.Common;
|
||||||
using BizHawk.Client.Common.MovieConversionExtensions;
|
using BizHawk.Client.Common.MovieConversionExtensions;
|
||||||
|
|
||||||
using BizHawk.Emulation.Cores.Nintendo.SNES;
|
using BizHawk.Emulation.Cores.Nintendo.SNES;
|
||||||
|
using BizHawk.Emulation.Cores.Nintendo.SNES9X;
|
||||||
|
|
||||||
namespace BizHawk.Client.Common
|
namespace BizHawk.Client.Common
|
||||||
{
|
{
|
||||||
|
@ -1490,8 +1491,9 @@ namespace BizHawk.Client.Common
|
||||||
|
|
||||||
m.Header[HeaderKeys.PLATFORM] = platform;
|
m.Header[HeaderKeys.PLATFORM] = platform;
|
||||||
|
|
||||||
var ss = new LibsnesCore.SnesSyncSettings { Profile = "Compatibility" };
|
var ss = new LibsnesCore.SnesSyncSettings();
|
||||||
m.SyncSettingsJson = ConfigService.SaveWithType(ss);
|
m.SyncSettingsJson = ConfigService.SaveWithType(ss);
|
||||||
|
Global.Config.SNES_InSnes9x = true; // This could be annoying to a user if they don't notice we set this preference, but the alternative is for the movie import to fail to load the movie
|
||||||
|
|
||||||
return m;
|
return m;
|
||||||
}
|
}
|
||||||
|
@ -2324,9 +2326,9 @@ namespace BizHawk.Client.Common
|
||||||
r.Close();
|
r.Close();
|
||||||
fs.Close();
|
fs.Close();
|
||||||
|
|
||||||
var ss = new LibsnesCore.SnesSyncSettings { Profile = "Compatibility" };
|
var ss = new Snes9x.SyncSettings();
|
||||||
m.SyncSettingsJson = ConfigService.SaveWithType(ss);
|
m.SyncSettingsJson = ConfigService.SaveWithType(ss);
|
||||||
|
Global.Config.SNES_InSnes9x = true; // This could be annoying to a user if they don't notice we set this preference, but the alternative is for the movie import to fail to load the movie
|
||||||
return m;
|
return m;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -80,8 +80,6 @@ namespace BizHawk.Client.Common
|
||||||
|
|
||||||
public void Uninitialize()
|
public void Uninitialize()
|
||||||
{
|
{
|
||||||
Clear();
|
|
||||||
|
|
||||||
if (_rewindThread != null)
|
if (_rewindThread != null)
|
||||||
{
|
{
|
||||||
_rewindThread.Dispose();
|
_rewindThread.Dispose();
|
||||||
|
@ -94,6 +92,8 @@ namespace BizHawk.Client.Common
|
||||||
_rewindBuffer = null;
|
_rewindBuffer = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Clear();
|
||||||
|
|
||||||
RewindEnabled = false;
|
RewindEnabled = false;
|
||||||
RewindFrequency = 0;
|
RewindFrequency = 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,15 +1,14 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<StartupObject />
|
<StartupObject />
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
|
||||||
<DebugSymbols>true</DebugSymbols>
|
<DebugSymbols>true</DebugSymbols>
|
||||||
<OutputPath>..\output64\</OutputPath>
|
<OutputPath>..\output\</OutputPath>
|
||||||
<DefineConstants>TRACE;DEBUG;WINDOWS</DefineConstants>
|
<DefineConstants>TRACE;DEBUG;WINDOWS</DefineConstants>
|
||||||
<DebugType>full</DebugType>
|
<DebugType>full</DebugType>
|
||||||
<PlatformTarget>x64</PlatformTarget>
|
<PlatformTarget>x64</PlatformTarget>
|
||||||
<CodeAnalysisLogFile>..\output\BizHawk.Client.DBMan.exe.CodeAnalysisLog.xml</CodeAnalysisLogFile>
|
|
||||||
<CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
|
<CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
|
||||||
<CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
|
<CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
|
||||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||||
|
@ -18,14 +17,14 @@
|
||||||
<CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
|
<CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
|
||||||
<CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
|
<CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
|
||||||
<CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
|
<CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
|
||||||
|
<Prefer32Bit>false</Prefer32Bit>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
|
||||||
<OutputPath>..\output64\</OutputPath>
|
<OutputPath>..\output\</OutputPath>
|
||||||
<DefineConstants>TRACE;WINDOWS</DefineConstants>
|
<DefineConstants>TRACE;WINDOWS</DefineConstants>
|
||||||
<Optimize>true</Optimize>
|
<Optimize>true</Optimize>
|
||||||
<DebugType>pdbonly</DebugType>
|
<DebugType>pdbonly</DebugType>
|
||||||
<PlatformTarget>x64</PlatformTarget>
|
<PlatformTarget>x64</PlatformTarget>
|
||||||
<CodeAnalysisLogFile>..\output\BizHawk.Client.DBMan.exe.CodeAnalysisLog.xml</CodeAnalysisLogFile>
|
|
||||||
<CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
|
<CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
|
||||||
<CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
|
<CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
|
||||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||||
|
@ -33,6 +32,7 @@
|
||||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||||
<CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
|
<CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
|
||||||
<CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
|
<CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
|
||||||
|
<Prefer32Bit>false</Prefer32Bit>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
|
@ -43,31 +43,10 @@
|
||||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
<RootNamespace>BizHawk.Client.DBMan</RootNamespace>
|
<RootNamespace>BizHawk.Client.DBMan</RootNamespace>
|
||||||
<AssemblyName>BizHawk.Client.DBMan</AssemblyName>
|
<AssemblyName>BizHawk.Client.DBMan</AssemblyName>
|
||||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
|
||||||
<FileAlignment>512</FileAlignment>
|
<FileAlignment>512</FileAlignment>
|
||||||
<TargetFrameworkProfile />
|
<TargetFrameworkProfile />
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
|
|
||||||
<PlatformTarget>x86</PlatformTarget>
|
|
||||||
<DebugSymbols>true</DebugSymbols>
|
|
||||||
<DebugType>full</DebugType>
|
|
||||||
<Optimize>false</Optimize>
|
|
||||||
<OutputPath>..\output\</OutputPath>
|
|
||||||
<DefineConstants>TRACE;DEBUG;WINDOWS</DefineConstants>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<WarningLevel>4</WarningLevel>
|
|
||||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
|
|
||||||
<PlatformTarget>x86</PlatformTarget>
|
|
||||||
<DebugType>pdbonly</DebugType>
|
|
||||||
<Optimize>true</Optimize>
|
|
||||||
<OutputPath>..\output\</OutputPath>
|
|
||||||
<DefineConstants>TRACE;WINDOWS</DefineConstants>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<WarningLevel>4</WarningLevel>
|
|
||||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="CSharp-SQLite">
|
<Reference Include="CSharp-SQLite">
|
||||||
<HintPath>.\CSharp-SQLite.dll</HintPath>
|
<HintPath>.\CSharp-SQLite.dll</HintPath>
|
||||||
|
@ -138,11 +117,11 @@
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
Other similar extension points exist, see Microsoft.Common.targets.
|
Other similar extension points exist, see Microsoft.Common.targets.
|
||||||
<Target Name="BeforeBuild">
|
<Target Name="BeforeBuild">
|
||||||
</Target>
|
</Target>
|
||||||
<Target Name="AfterBuild">
|
<Target Name="AfterBuild">
|
||||||
</Target>
|
</Target>
|
||||||
-->
|
-->
|
||||||
</Project>
|
</Project>
|
|
@ -1,7 +1,7 @@
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
// <auto-generated>
|
// <auto-generated>
|
||||||
// This code was generated by a tool.
|
// This code was generated by a tool.
|
||||||
// Runtime Version:4.0.30319.18034
|
// Runtime Version:4.0.30319.42000
|
||||||
//
|
//
|
||||||
// Changes to this file may cause incorrect behavior and will be lost if
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
// the code is regenerated.
|
// the code is regenerated.
|
||||||
|
@ -12,7 +12,7 @@ namespace BizHawk.Client.DBMan.Properties {
|
||||||
|
|
||||||
|
|
||||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")]
|
||||||
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
|
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
|
||||||
|
|
||||||
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
<?xml version="1.0"?>
|
<?xml version="1.0"?>
|
||||||
<configuration>
|
<configuration>
|
||||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
|
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1"/></startup></configuration>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
|
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
|
||||||
|
@ -10,7 +10,7 @@
|
||||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
<RootNamespace>BizHawk.Client.DiscoHawk</RootNamespace>
|
<RootNamespace>BizHawk.Client.DiscoHawk</RootNamespace>
|
||||||
<AssemblyName>DiscoHawk</AssemblyName>
|
<AssemblyName>DiscoHawk</AssemblyName>
|
||||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
|
||||||
<FileAlignment>512</FileAlignment>
|
<FileAlignment>512</FileAlignment>
|
||||||
<FileUpgradeFlags>
|
<FileUpgradeFlags>
|
||||||
</FileUpgradeFlags>
|
</FileUpgradeFlags>
|
||||||
|
@ -33,30 +33,6 @@
|
||||||
<BootstrapperEnabled>true</BootstrapperEnabled>
|
<BootstrapperEnabled>true</BootstrapperEnabled>
|
||||||
<TargetFrameworkProfile />
|
<TargetFrameworkProfile />
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
|
|
||||||
<DebugSymbols>true</DebugSymbols>
|
|
||||||
<DebugType>full</DebugType>
|
|
||||||
<Optimize>false</Optimize>
|
|
||||||
<OutputPath>..\output\</OutputPath>
|
|
||||||
<DefineConstants>TRACE;DEBUG;WINDOWS</DefineConstants>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<WarningLevel>4</WarningLevel>
|
|
||||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
|
||||||
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
|
|
||||||
<PlatformTarget>x86</PlatformTarget>
|
|
||||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
|
|
||||||
<DebugType>pdbonly</DebugType>
|
|
||||||
<Optimize>true</Optimize>
|
|
||||||
<OutputPath>..\output\</OutputPath>
|
|
||||||
<DefineConstants>TRACE;WINDOWS</DefineConstants>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<WarningLevel>4</WarningLevel>
|
|
||||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
|
||||||
<PlatformTarget>x86</PlatformTarget>
|
|
||||||
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<NoWin32Manifest>true</NoWin32Manifest>
|
<NoWin32Manifest>true</NoWin32Manifest>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
@ -68,12 +44,11 @@
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
|
||||||
<DebugSymbols>true</DebugSymbols>
|
<DebugSymbols>true</DebugSymbols>
|
||||||
<OutputPath>..\output64\</OutputPath>
|
<OutputPath>..\output\</OutputPath>
|
||||||
<DefineConstants>TRACE;DEBUG;WINDOWS</DefineConstants>
|
<DefineConstants>TRACE;DEBUG;WINDOWS</DefineConstants>
|
||||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||||
<DebugType>full</DebugType>
|
<DebugType>full</DebugType>
|
||||||
<PlatformTarget>x64</PlatformTarget>
|
<PlatformTarget>x64</PlatformTarget>
|
||||||
<CodeAnalysisLogFile>..\output\DiscoHawk.exe.CodeAnalysisLog.xml</CodeAnalysisLogFile>
|
|
||||||
<CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
|
<CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
|
||||||
<CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
|
<CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
|
||||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||||
|
@ -84,14 +59,14 @@
|
||||||
<CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
|
<CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
|
||||||
<CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
|
<CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
|
||||||
<CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
|
<CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
|
||||||
|
<Prefer32Bit>false</Prefer32Bit>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
|
||||||
<OutputPath>..\output64\</OutputPath>
|
<OutputPath>..\output\</OutputPath>
|
||||||
<DefineConstants>TRACE;WINDOWS</DefineConstants>
|
<DefineConstants>TRACE;WINDOWS</DefineConstants>
|
||||||
<Optimize>true</Optimize>
|
<Optimize>true</Optimize>
|
||||||
<DebugType>pdbonly</DebugType>
|
<DebugType>pdbonly</DebugType>
|
||||||
<PlatformTarget>x64</PlatformTarget>
|
<PlatformTarget>x64</PlatformTarget>
|
||||||
<CodeAnalysisLogFile>..\output\DiscoHawk.exe.CodeAnalysisLog.xml</CodeAnalysisLogFile>
|
|
||||||
<CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
|
<CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
|
||||||
<CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
|
<CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
|
||||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||||
|
@ -102,6 +77,7 @@
|
||||||
<CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
|
<CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
|
||||||
<CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
|
<CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
|
||||||
<CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
|
<CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
|
||||||
|
<Prefer32Bit>false</Prefer32Bit>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
|
@ -193,6 +169,9 @@
|
||||||
<Name>BizHawk.Emulation.DiscSystem</Name>
|
<Name>BizHawk.Emulation.DiscSystem</Name>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="app.config" />
|
||||||
|
</ItemGroup>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<PreBuildEvent Condition=" '$(OS)' == 'Windows_NT' ">"$(SolutionDir)subwcrev.bat" "$(ProjectDir)"</PreBuildEvent>
|
<PreBuildEvent Condition=" '$(OS)' == 'Windows_NT' ">"$(SolutionDir)subwcrev.bat" "$(ProjectDir)"</PreBuildEvent>
|
||||||
<PreBuildEvent Condition=" '$(OS)' != 'Windows_NT' ">"$(SolutionDir)subwcrev.sh" "$(ProjectDir)"</PreBuildEvent>
|
<PreBuildEvent Condition=" '$(OS)' != 'Windows_NT' ">"$(SolutionDir)subwcrev.sh" "$(ProjectDir)"</PreBuildEvent>
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<configuration>
|
||||||
|
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1"/></startup></configuration>
|
|
@ -12,9 +12,11 @@ namespace BizHawk.Client.EmuHawk
|
||||||
{
|
{
|
||||||
private Bitmap _bmp;
|
private Bitmap _bmp;
|
||||||
|
|
||||||
public BmpVideoProvider(Bitmap bmp)
|
public BmpVideoProvider(Bitmap bmp, int vsyncnum, int vsyncden)
|
||||||
{
|
{
|
||||||
_bmp = bmp;
|
_bmp = bmp;
|
||||||
|
VsyncNumerator = vsyncnum;
|
||||||
|
VsyncDenominator = vsyncden;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
|
@ -50,14 +52,8 @@ namespace BizHawk.Client.EmuHawk
|
||||||
|
|
||||||
public int BackgroundColor => 0;
|
public int BackgroundColor => 0;
|
||||||
|
|
||||||
public int VsyncNumerator
|
public int VsyncNumerator { get; private set; }
|
||||||
{
|
|
||||||
get { throw new InvalidOperationException(); }
|
|
||||||
}
|
|
||||||
|
|
||||||
public int VsyncDenominator
|
public int VsyncDenominator { get; private set; }
|
||||||
{
|
|
||||||
get { throw new InvalidOperationException(); }
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,7 +47,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
/// <param name="list">list of IVideoWriters to choose from</param>
|
/// <param name="list">list of IVideoWriters to choose from</param>
|
||||||
/// <param name="owner">parent window</param>
|
/// <param name="owner">parent window</param>
|
||||||
/// <returns>user choice, or null on Cancel\Close\invalid</returns>
|
/// <returns>user choice, or null on Cancel\Close\invalid</returns>
|
||||||
public static IVideoWriter DoVideoWriterChoserDlg(IEnumerable<VideoWriterInfo> list, IWin32Window owner, out int resizew, out int resizeh, out bool pad, out bool audiosync)
|
public static IVideoWriter DoVideoWriterChoserDlg(IEnumerable<VideoWriterInfo> list, IWin32Window owner, out int resizew, out int resizeh, out bool pad, ref bool audiosync)
|
||||||
{
|
{
|
||||||
VideoWriterChooserForm dlg = new VideoWriterChooserForm
|
VideoWriterChooserForm dlg = new VideoWriterChooserForm
|
||||||
{
|
{
|
||||||
|
@ -76,6 +76,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
c.Enabled = false;
|
c.Enabled = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dlg.checkBoxASync.Checked = audiosync;
|
||||||
DialogResult result = dlg.ShowDialog(owner);
|
DialogResult result = dlg.ShowDialog(owner);
|
||||||
|
|
||||||
IVideoWriter ret;
|
IVideoWriter ret;
|
||||||
|
|
|
@ -35,7 +35,7 @@
|
||||||
this.label3 = new System.Windows.Forms.Label();
|
this.label3 = new System.Windows.Forms.Label();
|
||||||
this.label4 = new System.Windows.Forms.Label();
|
this.label4 = new System.Windows.Forms.Label();
|
||||||
this.CoreInfoPanel = new System.Windows.Forms.Panel();
|
this.CoreInfoPanel = new System.Windows.Forms.Panel();
|
||||||
this.textBox1 = new System.Windows.Forms.TextBox();
|
//this.textBox1 = new System.Windows.Forms.TextBox();
|
||||||
this.VersionLabel = new System.Windows.Forms.Label();
|
this.VersionLabel = new System.Windows.Forms.Label();
|
||||||
this.btnCopyHash = new System.Windows.Forms.Button();
|
this.btnCopyHash = new System.Windows.Forms.Button();
|
||||||
this.linkLabel2 = new System.Windows.Forms.LinkLabel();
|
this.linkLabel2 = new System.Windows.Forms.LinkLabel();
|
||||||
|
@ -109,19 +109,6 @@
|
||||||
this.CoreInfoPanel.Name = "CoreInfoPanel";
|
this.CoreInfoPanel.Name = "CoreInfoPanel";
|
||||||
this.CoreInfoPanel.Size = new System.Drawing.Size(423, 259);
|
this.CoreInfoPanel.Size = new System.Drawing.Size(423, 259);
|
||||||
this.CoreInfoPanel.TabIndex = 14;
|
this.CoreInfoPanel.TabIndex = 14;
|
||||||
//
|
|
||||||
// textBox1
|
|
||||||
//
|
|
||||||
this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
|
|
||||||
| System.Windows.Forms.AnchorStyles.Right)));
|
|
||||||
this.textBox1.Location = new System.Drawing.Point(13, 462);
|
|
||||||
this.textBox1.Multiline = true;
|
|
||||||
this.textBox1.Name = "textBox1";
|
|
||||||
this.textBox1.ReadOnly = true;
|
|
||||||
this.textBox1.Size = new System.Drawing.Size(423, 33);
|
|
||||||
this.textBox1.TabIndex = 16;
|
|
||||||
this.textBox1.Text = "jabo_direct3d8_patched.dll is distributed with the special permission of the auth" +
|
|
||||||
"or.";
|
|
||||||
//
|
//
|
||||||
// VersionLabel
|
// VersionLabel
|
||||||
//
|
//
|
||||||
|
@ -189,7 +176,7 @@
|
||||||
this.Controls.Add(this.linkLabel3);
|
this.Controls.Add(this.linkLabel3);
|
||||||
this.Controls.Add(this.linkLabel2);
|
this.Controls.Add(this.linkLabel2);
|
||||||
this.Controls.Add(this.btnCopyHash);
|
this.Controls.Add(this.btnCopyHash);
|
||||||
this.Controls.Add(this.textBox1);
|
//this.Controls.Add(this.textBox1);
|
||||||
this.Controls.Add(this.CoreInfoPanel);
|
this.Controls.Add(this.CoreInfoPanel);
|
||||||
this.Controls.Add(this.VersionLabel);
|
this.Controls.Add(this.VersionLabel);
|
||||||
this.Controls.Add(this.label4);
|
this.Controls.Add(this.label4);
|
||||||
|
@ -217,7 +204,7 @@
|
||||||
private System.Windows.Forms.Label label3;
|
private System.Windows.Forms.Label label3;
|
||||||
private System.Windows.Forms.Label label4;
|
private System.Windows.Forms.Label label4;
|
||||||
private System.Windows.Forms.Panel CoreInfoPanel;
|
private System.Windows.Forms.Panel CoreInfoPanel;
|
||||||
private System.Windows.Forms.TextBox textBox1;
|
//private System.Windows.Forms.TextBox textBox1;
|
||||||
private System.Windows.Forms.Label VersionLabel;
|
private System.Windows.Forms.Label VersionLabel;
|
||||||
private System.Windows.Forms.Button btnCopyHash;
|
private System.Windows.Forms.Button btnCopyHash;
|
||||||
private System.Windows.Forms.LinkLabel linkLabel2;
|
private System.Windows.Forms.LinkLabel linkLabel2;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
|
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
|
||||||
|
@ -10,7 +10,7 @@
|
||||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
<RootNamespace>BizHawk.Client.EmuHawk</RootNamespace>
|
<RootNamespace>BizHawk.Client.EmuHawk</RootNamespace>
|
||||||
<AssemblyName>EmuHawk</AssemblyName>
|
<AssemblyName>EmuHawk</AssemblyName>
|
||||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
|
||||||
<FileAlignment>512</FileAlignment>
|
<FileAlignment>512</FileAlignment>
|
||||||
<StartupObject>BizHawk.Client.EmuHawk.Program</StartupObject>
|
<StartupObject>BizHawk.Client.EmuHawk.Program</StartupObject>
|
||||||
<IsWebBootstrapper>false</IsWebBootstrapper>
|
<IsWebBootstrapper>false</IsWebBootstrapper>
|
||||||
|
@ -36,42 +36,16 @@
|
||||||
<UseApplicationTrust>false</UseApplicationTrust>
|
<UseApplicationTrust>false</UseApplicationTrust>
|
||||||
<BootstrapperEnabled>true</BootstrapperEnabled>
|
<BootstrapperEnabled>true</BootstrapperEnabled>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
|
|
||||||
<DebugSymbols>true</DebugSymbols>
|
|
||||||
<DebugType>full</DebugType>
|
|
||||||
<Optimize>false</Optimize>
|
|
||||||
<OutputPath>..\output\</OutputPath>
|
|
||||||
<DefineConstants>$(DefineConstants);DEBUG</DefineConstants>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<WarningLevel>4</WarningLevel>
|
|
||||||
<PlatformTarget>x86</PlatformTarget>
|
|
||||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
|
||||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
|
||||||
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
|
|
||||||
<DebugType>pdbonly</DebugType>
|
|
||||||
<Optimize>true</Optimize>
|
|
||||||
<OutputPath>..\output\</OutputPath>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<WarningLevel>4</WarningLevel>
|
|
||||||
<PlatformTarget>x86</PlatformTarget>
|
|
||||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
|
||||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
|
||||||
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
|
|
||||||
<DefineConstants>WINDOWS</DefineConstants>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<NoWin32Manifest>true</NoWin32Manifest>
|
<NoWin32Manifest>true</NoWin32Manifest>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
|
||||||
<DebugSymbols>true</DebugSymbols>
|
<DebugSymbols>true</DebugSymbols>
|
||||||
<OutputPath>..\output64\</OutputPath>
|
<OutputPath>..\output\</OutputPath>
|
||||||
<DefineConstants>WINDOWS;DEBUG</DefineConstants>
|
<DefineConstants>WINDOWS;DEBUG</DefineConstants>
|
||||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||||
<DebugType>full</DebugType>
|
<DebugType>full</DebugType>
|
||||||
<PlatformTarget>x64</PlatformTarget>
|
<PlatformTarget>x64</PlatformTarget>
|
||||||
<CodeAnalysisLogFile>..\output\EmuHawk.exe.CodeAnalysisLog.xml</CodeAnalysisLogFile>
|
|
||||||
<CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
|
<CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
|
||||||
<CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
|
<CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
|
||||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||||
|
@ -82,15 +56,15 @@
|
||||||
<CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
|
<CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
|
||||||
<CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
|
<CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
|
||||||
<CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
|
<CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
|
||||||
|
<Prefer32Bit>false</Prefer32Bit>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
|
||||||
<OutputPath>..\output64\</OutputPath>
|
<OutputPath>..\output\</OutputPath>
|
||||||
<DefineConstants>WINDOWS</DefineConstants>
|
<DefineConstants>WINDOWS</DefineConstants>
|
||||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||||
<Optimize>true</Optimize>
|
<Optimize>true</Optimize>
|
||||||
<DebugType>pdbonly</DebugType>
|
<DebugType>pdbonly</DebugType>
|
||||||
<PlatformTarget>x64</PlatformTarget>
|
<PlatformTarget>x64</PlatformTarget>
|
||||||
<CodeAnalysisLogFile>..\output\EmuHawk.exe.CodeAnalysisLog.xml</CodeAnalysisLogFile>
|
|
||||||
<CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
|
<CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
|
||||||
<CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
|
<CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
|
||||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||||
|
@ -101,6 +75,7 @@
|
||||||
<CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
|
<CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
|
||||||
<CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
|
<CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
|
||||||
<CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
|
<CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
|
||||||
|
<Prefer32Bit>false</Prefer32Bit>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="GongShell">
|
<Reference Include="GongShell">
|
||||||
|
@ -408,12 +383,6 @@
|
||||||
<Compile Include="config\N64\N64VideoPluginconfig.Designer.cs">
|
<Compile Include="config\N64\N64VideoPluginconfig.Designer.cs">
|
||||||
<DependentUpon>N64VideoPluginconfig.cs</DependentUpon>
|
<DependentUpon>N64VideoPluginconfig.cs</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="config\N64\NewN64PluginSettings.cs">
|
|
||||||
<SubType>Form</SubType>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="config\N64\NewN64PluginSettings.Designer.cs">
|
|
||||||
<DependentUpon>NewN64PluginSettings.cs</DependentUpon>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="config\NES\DataTableDictionaryBind.cs" />
|
<Compile Include="config\NES\DataTableDictionaryBind.cs" />
|
||||||
<Compile Include="config\NES\NesControllerSettings.cs">
|
<Compile Include="config\NES\NesControllerSettings.cs">
|
||||||
<SubType>Form</SubType>
|
<SubType>Form</SubType>
|
||||||
|
@ -1215,6 +1184,7 @@
|
||||||
<Compile Include="tools\VirtualPads\schema\GenSchema.cs" />
|
<Compile Include="tools\VirtualPads\schema\GenSchema.cs" />
|
||||||
<Compile Include="tools\VirtualPads\schema\IntvSchema.cs" />
|
<Compile Include="tools\VirtualPads\schema\IntvSchema.cs" />
|
||||||
<Compile Include="tools\VirtualPads\schema\LynxSchema.cs" />
|
<Compile Include="tools\VirtualPads\schema\LynxSchema.cs" />
|
||||||
|
<Compile Include="tools\VirtualPads\schema\NgpSchema.cs" />
|
||||||
<Compile Include="tools\VirtualPads\schema\PSXSchema.cs" />
|
<Compile Include="tools\VirtualPads\schema\PSXSchema.cs" />
|
||||||
<Compile Include="tools\VirtualPads\schema\SatSchema.cs" />
|
<Compile Include="tools\VirtualPads\schema\SatSchema.cs" />
|
||||||
<Compile Include="tools\VirtualPads\schema\IVirtualPadSchema.cs" />
|
<Compile Include="tools\VirtualPads\schema\IVirtualPadSchema.cs" />
|
||||||
|
@ -1225,6 +1195,7 @@
|
||||||
<Compile Include="tools\VirtualPads\schema\SchemaAttributes.cs" />
|
<Compile Include="tools\VirtualPads\schema\SchemaAttributes.cs" />
|
||||||
<Compile Include="tools\VirtualPads\schema\SmsSchema.cs" />
|
<Compile Include="tools\VirtualPads\schema\SmsSchema.cs" />
|
||||||
<Compile Include="tools\VirtualPads\schema\SnesSchema.cs" />
|
<Compile Include="tools\VirtualPads\schema\SnesSchema.cs" />
|
||||||
|
<Compile Include="tools\VirtualPads\schema\VirtualBoySchema.cs" />
|
||||||
<Compile Include="tools\VirtualPads\schema\WonderSwanSchema.cs" />
|
<Compile Include="tools\VirtualPads\schema\WonderSwanSchema.cs" />
|
||||||
<Compile Include="tools\VirtualPads\VirtualPad.cs">
|
<Compile Include="tools\VirtualPads\VirtualPad.cs">
|
||||||
<SubType>UserControl</SubType>
|
<SubType>UserControl</SubType>
|
||||||
|
@ -1363,9 +1334,6 @@
|
||||||
<EmbeddedResource Include="config\N64\N64VideoPluginconfig.resx">
|
<EmbeddedResource Include="config\N64\N64VideoPluginconfig.resx">
|
||||||
<DependentUpon>N64VideoPluginconfig.cs</DependentUpon>
|
<DependentUpon>N64VideoPluginconfig.cs</DependentUpon>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
<EmbeddedResource Include="config\N64\NewN64PluginSettings.resx">
|
|
||||||
<DependentUpon>NewN64PluginSettings.cs</DependentUpon>
|
|
||||||
</EmbeddedResource>
|
|
||||||
<EmbeddedResource Include="config\NES\NesControllerSettings.resx">
|
<EmbeddedResource Include="config\NES\NesControllerSettings.resx">
|
||||||
<DependentUpon>NesControllerSettings.cs</DependentUpon>
|
<DependentUpon>NesControllerSettings.cs</DependentUpon>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
|
@ -1783,6 +1751,7 @@
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<None Include="app.config" />
|
||||||
<None Include="images\FindHS.png" />
|
<None Include="images\FindHS.png" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
@ -2109,6 +2078,7 @@
|
||||||
<None Include="images\LightOn.png" />
|
<None Include="images\LightOn.png" />
|
||||||
<None Include="images\Both.png" />
|
<None Include="images\Both.png" />
|
||||||
<None Include="config\ControllerImages\A78Joystick.png" />
|
<None Include="config\ControllerImages\A78Joystick.png" />
|
||||||
|
<None Include="config\ControllerImages\VBoyController.png" />
|
||||||
<None Include="config\ControllerImages\IntVController.png" />
|
<None Include="config\ControllerImages\IntVController.png" />
|
||||||
<None Include="config\ControllerImages\Lynx.png" />
|
<None Include="config\ControllerImages\Lynx.png" />
|
||||||
<Content Include="config\ControllerImages\N64.png" />
|
<Content Include="config\ControllerImages\N64.png" />
|
||||||
|
@ -2137,6 +2107,7 @@
|
||||||
<None Include="images\ENE.png" />
|
<None Include="images\ENE.png" />
|
||||||
<None Include="images\ESE.png" />
|
<None Include="images\ESE.png" />
|
||||||
<None Include="images\5757344.png" />
|
<None Include="images\5757344.png" />
|
||||||
|
<None Include="images\ControllerImages\NGPController.png" />
|
||||||
<Content Include="images\logo.ico" />
|
<Content Include="images\logo.ico" />
|
||||||
<None Include="images\Paste.png" />
|
<None Include="images\Paste.png" />
|
||||||
<None Include="images\reboot.png" />
|
<None Include="images\reboot.png" />
|
||||||
|
|
|
@ -302,7 +302,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
out IntPtr ppavi,
|
out IntPtr ppavi,
|
||||||
ref AVISTREAMINFOW psi);
|
ref AVISTREAMINFOW psi);
|
||||||
|
|
||||||
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
public struct AVICOMPRESSOPTIONS
|
public struct AVICOMPRESSOPTIONS
|
||||||
{
|
{
|
||||||
public int fccType;
|
public int fccType;
|
||||||
|
@ -573,4 +573,4 @@ namespace BizHawk.Client.EmuHawk
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,10 +36,6 @@ namespace BizHawk.Client.EmuHawk.CoreExtensions
|
||||||
{
|
{
|
||||||
return Properties.Resources.bsnes;
|
return Properties.Resources.bsnes;
|
||||||
}
|
}
|
||||||
else if (core is Yabause)
|
|
||||||
{
|
|
||||||
return Properties.Resources.yabause;
|
|
||||||
}
|
|
||||||
else if (core is Atari7800)
|
else if (core is Atari7800)
|
||||||
{
|
{
|
||||||
return Properties.Resources.emu7800;
|
return Properties.Resources.emu7800;
|
||||||
|
@ -73,11 +69,6 @@ namespace BizHawk.Client.EmuHawk.CoreExtensions
|
||||||
var str = (!attributes.Released ? "(Experimental) " : "") +
|
var str = (!attributes.Released ? "(Experimental) " : "") +
|
||||||
attributes.CoreName;
|
attributes.CoreName;
|
||||||
|
|
||||||
if (core is LibsnesCore)
|
|
||||||
{
|
|
||||||
str += " (" + ((LibsnesCore)core).CurrentProfile + ")";
|
|
||||||
}
|
|
||||||
|
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -183,14 +183,19 @@
|
||||||
this.InputOverHkMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
this.InputOverHkMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.HkOverInputMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
this.HkOverInputMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.CoresSubMenu = new System.Windows.Forms.ToolStripMenuItem();
|
this.CoresSubMenu = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.GBInSGBMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
this.NesCoreSubMenu = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.NesInQuickNESMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
this.QuicknesCoreMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
this.NesCoreMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.CoreSNESSubMenu = new System.Windows.Forms.ToolStripMenuItem();
|
this.CoreSNESSubMenu = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.CorebsnesPerformanceMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
|
||||||
this.CorebsnesCompatibilityMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
|
||||||
this.CorebsnesAccuracyMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
|
||||||
this.Coresnes9xMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
this.Coresnes9xMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.gBAWithMGBAToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
this.CorebsnesMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
this.GbaCoreSubMenu = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
this.VbaNextCoreMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
this.MgbaCoreMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
this.Atari7800CoreSubMenu = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
this.Emu7800CoreMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
this.Atari7800HawkCoreMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
this.GBInSGBMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.toolStripMenuItem16 = new System.Windows.Forms.ToolStripSeparator();
|
this.toolStripMenuItem16 = new System.Windows.Forms.ToolStripSeparator();
|
||||||
this.allowGameDBCoreOverridesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
this.allowGameDBCoreOverridesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.toolStripSeparator8 = new System.Windows.Forms.ToolStripSeparator();
|
this.toolStripSeparator8 = new System.Windows.Forms.ToolStripSeparator();
|
||||||
|
@ -312,15 +317,6 @@
|
||||||
this.PSXDiscControlsMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
this.PSXDiscControlsMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.PSXHashDiscsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
this.PSXHashDiscsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.SNESSubMenu = new System.Windows.Forms.ToolStripMenuItem();
|
this.SNESSubMenu = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.SNESDisplayMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
|
||||||
this.SnesBg1MenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
|
||||||
this.SnesBg2MenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
|
||||||
this.SnesBg3MenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
|
||||||
this.SnesBg4MenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
|
||||||
this.SnesObj1MenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
|
||||||
this.SnesObj2MenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
|
||||||
this.SnesObj3MenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
|
||||||
this.SnesObj4MenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
|
||||||
this.SNESControllerConfigurationMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
this.SNESControllerConfigurationMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.toolStripSeparator18 = new System.Windows.Forms.ToolStripSeparator();
|
this.toolStripSeparator18 = new System.Windows.Forms.ToolStripSeparator();
|
||||||
this.SnesGfxDebuggerMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
this.SnesGfxDebuggerMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
@ -359,6 +355,12 @@
|
||||||
this.C64SettingsMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
this.C64SettingsMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.IntvSubMenu = new System.Windows.Forms.ToolStripMenuItem();
|
this.IntvSubMenu = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.IntVControllerSettingsMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
this.IntVControllerSettingsMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
this.sNESToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
this.preferencesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
this.virtualBoyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
this.preferencesToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
this.neoGeoPocketToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
this.preferencesToolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.HelpSubMenu = new System.Windows.Forms.ToolStripMenuItem();
|
this.HelpSubMenu = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.OnlineHelpMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
this.OnlineHelpMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.ForumsMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
this.ForumsMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
@ -426,9 +428,6 @@
|
||||||
this.SavestateTypeDefaultContextMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
this.SavestateTypeDefaultContextMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.SavestateBinaryContextMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
this.SavestateBinaryContextMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.SavestateTextContextMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
this.SavestateTextContextMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.CoreSelectionContextSubMenu = new System.Windows.Forms.ToolStripMenuItem();
|
|
||||||
this.GBInSGBContextMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
|
||||||
this.NesInQuickNESContextMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
|
||||||
this.toolStripSeparator37 = new System.Windows.Forms.ToolStripSeparator();
|
this.toolStripSeparator37 = new System.Windows.Forms.ToolStripSeparator();
|
||||||
this.toolStripMenuItem66 = new System.Windows.Forms.ToolStripMenuItem();
|
this.toolStripMenuItem66 = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.toolStripMenuItem67 = new System.Windows.Forms.ToolStripMenuItem();
|
this.toolStripMenuItem67 = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
@ -438,7 +437,6 @@
|
||||||
this.ShowMenuContextMenuSeparator = new System.Windows.Forms.ToolStripSeparator();
|
this.ShowMenuContextMenuSeparator = new System.Windows.Forms.ToolStripSeparator();
|
||||||
this.ShowMenuContextMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
this.ShowMenuContextMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.timerMouseIdle = new System.Windows.Forms.Timer(this.components);
|
this.timerMouseIdle = new System.Windows.Forms.Timer(this.components);
|
||||||
this.Atari7800WithEmu7800MenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
|
||||||
this.MainformMenu.SuspendLayout();
|
this.MainformMenu.SuspendLayout();
|
||||||
this.MainStatusBar.SuspendLayout();
|
this.MainStatusBar.SuspendLayout();
|
||||||
this.MainFormContextMenu.SuspendLayout();
|
this.MainFormContextMenu.SuspendLayout();
|
||||||
|
@ -472,11 +470,14 @@
|
||||||
this.AppleSubMenu,
|
this.AppleSubMenu,
|
||||||
this.C64SubMenu,
|
this.C64SubMenu,
|
||||||
this.IntvSubMenu,
|
this.IntvSubMenu,
|
||||||
|
this.sNESToolStripMenuItem,
|
||||||
|
this.virtualBoyToolStripMenuItem,
|
||||||
|
this.neoGeoPocketToolStripMenuItem,
|
||||||
this.HelpSubMenu});
|
this.HelpSubMenu});
|
||||||
this.MainformMenu.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.Flow;
|
this.MainformMenu.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.Flow;
|
||||||
this.MainformMenu.Location = new System.Drawing.Point(0, 0);
|
this.MainformMenu.Location = new System.Drawing.Point(0, 0);
|
||||||
this.MainformMenu.Name = "MainformMenu";
|
this.MainformMenu.Name = "MainformMenu";
|
||||||
this.MainformMenu.Size = new System.Drawing.Size(470, 61);
|
this.MainformMenu.Size = new System.Drawing.Size(470, 80);
|
||||||
this.MainformMenu.TabIndex = 0;
|
this.MainformMenu.TabIndex = 0;
|
||||||
this.MainformMenu.Text = "menuStrip1";
|
this.MainformMenu.Text = "menuStrip1";
|
||||||
this.MainformMenu.MenuActivate += new System.EventHandler(this.MainformMenu_MenuActivate);
|
this.MainformMenu.MenuActivate += new System.EventHandler(this.MainformMenu_MenuActivate);
|
||||||
|
@ -1794,11 +1795,11 @@
|
||||||
// CoresSubMenu
|
// CoresSubMenu
|
||||||
//
|
//
|
||||||
this.CoresSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
this.CoresSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||||
this.GBInSGBMenuItem,
|
this.NesCoreSubMenu,
|
||||||
this.NesInQuickNESMenuItem,
|
|
||||||
this.CoreSNESSubMenu,
|
this.CoreSNESSubMenu,
|
||||||
this.gBAWithMGBAToolStripMenuItem,
|
this.GbaCoreSubMenu,
|
||||||
this.Atari7800WithEmu7800MenuItem,
|
this.Atari7800CoreSubMenu,
|
||||||
|
this.GBInSGBMenuItem,
|
||||||
this.toolStripMenuItem16,
|
this.toolStripMenuItem16,
|
||||||
this.allowGameDBCoreOverridesToolStripMenuItem,
|
this.allowGameDBCoreOverridesToolStripMenuItem,
|
||||||
this.toolStripSeparator8,
|
this.toolStripSeparator8,
|
||||||
|
@ -1809,6 +1810,100 @@
|
||||||
this.CoresSubMenu.Text = "Cores";
|
this.CoresSubMenu.Text = "Cores";
|
||||||
this.CoresSubMenu.DropDownOpened += new System.EventHandler(this.CoresSubMenu_DropDownOpened);
|
this.CoresSubMenu.DropDownOpened += new System.EventHandler(this.CoresSubMenu_DropDownOpened);
|
||||||
//
|
//
|
||||||
|
// NesCoreSubMenu
|
||||||
|
//
|
||||||
|
this.NesCoreSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||||
|
this.QuicknesCoreMenuItem,
|
||||||
|
this.NesCoreMenuItem});
|
||||||
|
this.NesCoreSubMenu.Name = "NesCoreSubMenu";
|
||||||
|
this.NesCoreSubMenu.Size = new System.Drawing.Size(239, 22);
|
||||||
|
this.NesCoreSubMenu.Text = "NES";
|
||||||
|
this.NesCoreSubMenu.DropDownOpened += new System.EventHandler(this.NesCoreSubMenu_DropDownOpened);
|
||||||
|
//
|
||||||
|
// QuicknesCoreMenuItem
|
||||||
|
//
|
||||||
|
this.QuicknesCoreMenuItem.Name = "QuicknesCoreMenuItem";
|
||||||
|
this.QuicknesCoreMenuItem.Size = new System.Drawing.Size(152, 22);
|
||||||
|
this.QuicknesCoreMenuItem.Text = "QuickNES";
|
||||||
|
//
|
||||||
|
// NesCoreMenuItem
|
||||||
|
//
|
||||||
|
this.NesCoreMenuItem.Name = "NesCoreMenuItem";
|
||||||
|
this.NesCoreMenuItem.Size = new System.Drawing.Size(152, 22);
|
||||||
|
this.NesCoreMenuItem.Text = "NesHawk";
|
||||||
|
//
|
||||||
|
// CoreSNESSubMenu
|
||||||
|
//
|
||||||
|
this.CoreSNESSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||||
|
this.Coresnes9xMenuItem,
|
||||||
|
this.CorebsnesMenuItem});
|
||||||
|
this.CoreSNESSubMenu.Name = "CoreSNESSubMenu";
|
||||||
|
this.CoreSNESSubMenu.Size = new System.Drawing.Size(239, 22);
|
||||||
|
this.CoreSNESSubMenu.Text = "SNES";
|
||||||
|
this.CoreSNESSubMenu.DropDownOpened += new System.EventHandler(this.CoreSNESSubMenu_DropDownOpened);
|
||||||
|
//
|
||||||
|
// Coresnes9xMenuItem
|
||||||
|
//
|
||||||
|
this.Coresnes9xMenuItem.Name = "Coresnes9xMenuItem";
|
||||||
|
this.Coresnes9xMenuItem.Size = new System.Drawing.Size(152, 22);
|
||||||
|
this.Coresnes9xMenuItem.Text = "Snes9x";
|
||||||
|
this.Coresnes9xMenuItem.Click += new System.EventHandler(this.CoreSnesToggle_Click);
|
||||||
|
//
|
||||||
|
// CorebsnesMenuItem
|
||||||
|
//
|
||||||
|
this.CorebsnesMenuItem.Name = "CorebsnesMenuItem";
|
||||||
|
this.CorebsnesMenuItem.Size = new System.Drawing.Size(152, 22);
|
||||||
|
this.CorebsnesMenuItem.Text = "BSNES";
|
||||||
|
this.CorebsnesMenuItem.Click += new System.EventHandler(this.CoreSnesToggle_Click);
|
||||||
|
//
|
||||||
|
// GbaCoreSubMenu
|
||||||
|
//
|
||||||
|
this.GbaCoreSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||||
|
this.VbaNextCoreMenuItem,
|
||||||
|
this.MgbaCoreMenuItem});
|
||||||
|
this.GbaCoreSubMenu.Name = "GbaCoreSubMenu";
|
||||||
|
this.GbaCoreSubMenu.Size = new System.Drawing.Size(239, 22);
|
||||||
|
this.GbaCoreSubMenu.Text = "GBA";
|
||||||
|
this.GbaCoreSubMenu.DropDownOpened += new System.EventHandler(this.GbaCoreSubMenu_DropDownOpened);
|
||||||
|
//
|
||||||
|
// VbaNextCoreMenuItem
|
||||||
|
//
|
||||||
|
this.VbaNextCoreMenuItem.Name = "VbaNextCoreMenuItem";
|
||||||
|
this.VbaNextCoreMenuItem.Size = new System.Drawing.Size(152, 22);
|
||||||
|
this.VbaNextCoreMenuItem.Text = "VBA-Next";
|
||||||
|
this.VbaNextCoreMenuItem.Click += new System.EventHandler(this.GbaCorePick_Click);
|
||||||
|
//
|
||||||
|
// MgbaCoreMenuItem
|
||||||
|
//
|
||||||
|
this.MgbaCoreMenuItem.Name = "MgbaCoreMenuItem";
|
||||||
|
this.MgbaCoreMenuItem.Size = new System.Drawing.Size(152, 22);
|
||||||
|
this.MgbaCoreMenuItem.Text = "mGBA";
|
||||||
|
this.MgbaCoreMenuItem.Click += new System.EventHandler(this.GbaCorePick_Click);
|
||||||
|
//
|
||||||
|
// Atari7800CoreSubMenu
|
||||||
|
//
|
||||||
|
this.Atari7800CoreSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||||
|
this.Emu7800CoreMenuItem,
|
||||||
|
this.Atari7800HawkCoreMenuItem});
|
||||||
|
this.Atari7800CoreSubMenu.Name = "Atari7800CoreSubMenu";
|
||||||
|
this.Atari7800CoreSubMenu.Size = new System.Drawing.Size(239, 22);
|
||||||
|
this.Atari7800CoreSubMenu.Text = "Atari 7800";
|
||||||
|
this.Atari7800CoreSubMenu.DropDownOpened += new System.EventHandler(this.Atari7800CoreSubMenu_DropDownOpened);
|
||||||
|
//
|
||||||
|
// Emu7800CoreMenuItem
|
||||||
|
//
|
||||||
|
this.Emu7800CoreMenuItem.Name = "Emu7800CoreMenuItem";
|
||||||
|
this.Emu7800CoreMenuItem.Size = new System.Drawing.Size(153, 22);
|
||||||
|
this.Emu7800CoreMenuItem.Text = "EMU7800";
|
||||||
|
this.Emu7800CoreMenuItem.Click += new System.EventHandler(this.Atari7800CorePick_Click);
|
||||||
|
//
|
||||||
|
// Atari7800HawkCoreMenuItem
|
||||||
|
//
|
||||||
|
this.Atari7800HawkCoreMenuItem.Name = "Atari7800HawkCoreMenuItem";
|
||||||
|
this.Atari7800HawkCoreMenuItem.Size = new System.Drawing.Size(153, 22);
|
||||||
|
this.Atari7800HawkCoreMenuItem.Text = "Atari7800Hawk";
|
||||||
|
this.Atari7800HawkCoreMenuItem.Click += new System.EventHandler(this.Atari7800CorePick_Click);
|
||||||
|
//
|
||||||
// GBInSGBMenuItem
|
// GBInSGBMenuItem
|
||||||
//
|
//
|
||||||
this.GBInSGBMenuItem.Name = "GBInSGBMenuItem";
|
this.GBInSGBMenuItem.Name = "GBInSGBMenuItem";
|
||||||
|
@ -1816,60 +1911,6 @@
|
||||||
this.GBInSGBMenuItem.Text = "GB in SGB";
|
this.GBInSGBMenuItem.Text = "GB in SGB";
|
||||||
this.GBInSGBMenuItem.Click += new System.EventHandler(this.GbInSgbMenuItem_Click);
|
this.GBInSGBMenuItem.Click += new System.EventHandler(this.GbInSgbMenuItem_Click);
|
||||||
//
|
//
|
||||||
// NesInQuickNESMenuItem
|
|
||||||
//
|
|
||||||
this.NesInQuickNESMenuItem.Name = "NesInQuickNESMenuItem";
|
|
||||||
this.NesInQuickNESMenuItem.Size = new System.Drawing.Size(239, 22);
|
|
||||||
this.NesInQuickNESMenuItem.Text = "NES with QuickNES";
|
|
||||||
this.NesInQuickNESMenuItem.Click += new System.EventHandler(this.NesInQuickNESMenuItem_Click);
|
|
||||||
//
|
|
||||||
// CoreSNESSubMenu
|
|
||||||
//
|
|
||||||
this.CoreSNESSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
|
||||||
this.CorebsnesPerformanceMenuItem,
|
|
||||||
this.CorebsnesCompatibilityMenuItem,
|
|
||||||
this.CorebsnesAccuracyMenuItem,
|
|
||||||
this.Coresnes9xMenuItem});
|
|
||||||
this.CoreSNESSubMenu.Name = "CoreSNESSubMenu";
|
|
||||||
this.CoreSNESSubMenu.Size = new System.Drawing.Size(239, 22);
|
|
||||||
this.CoreSNESSubMenu.Text = "SNES";
|
|
||||||
this.CoreSNESSubMenu.DropDownOpened += new System.EventHandler(this.CoreSNESSubMenu_DropDownOpened);
|
|
||||||
//
|
|
||||||
// CorebsnesPerformanceMenuItem
|
|
||||||
//
|
|
||||||
this.CorebsnesPerformanceMenuItem.Name = "CorebsnesPerformanceMenuItem";
|
|
||||||
this.CorebsnesPerformanceMenuItem.Size = new System.Drawing.Size(177, 22);
|
|
||||||
this.CorebsnesPerformanceMenuItem.Text = "bsnes performance";
|
|
||||||
this.CorebsnesPerformanceMenuItem.Click += new System.EventHandler(this.CorebsnesPerformanceMenuItem_Click);
|
|
||||||
//
|
|
||||||
// CorebsnesCompatibilityMenuItem
|
|
||||||
//
|
|
||||||
this.CorebsnesCompatibilityMenuItem.Name = "CorebsnesCompatibilityMenuItem";
|
|
||||||
this.CorebsnesCompatibilityMenuItem.Size = new System.Drawing.Size(177, 22);
|
|
||||||
this.CorebsnesCompatibilityMenuItem.Text = "bsnes compatibility";
|
|
||||||
this.CorebsnesCompatibilityMenuItem.Click += new System.EventHandler(this.CorebsnesCompatibilityMenuItem_Click);
|
|
||||||
//
|
|
||||||
// CorebsnesAccuracyMenuItem
|
|
||||||
//
|
|
||||||
this.CorebsnesAccuracyMenuItem.Enabled = false;
|
|
||||||
this.CorebsnesAccuracyMenuItem.Name = "CorebsnesAccuracyMenuItem";
|
|
||||||
this.CorebsnesAccuracyMenuItem.Size = new System.Drawing.Size(177, 22);
|
|
||||||
this.CorebsnesAccuracyMenuItem.Text = "bsnes accuracy";
|
|
||||||
//
|
|
||||||
// Coresnes9xMenuItem
|
|
||||||
//
|
|
||||||
this.Coresnes9xMenuItem.Name = "Coresnes9xMenuItem";
|
|
||||||
this.Coresnes9xMenuItem.Size = new System.Drawing.Size(177, 22);
|
|
||||||
this.Coresnes9xMenuItem.Text = "Snes9x";
|
|
||||||
this.Coresnes9xMenuItem.Click += new System.EventHandler(this.CoreSnes9xMenuItem_Click);
|
|
||||||
//
|
|
||||||
// gBAWithMGBAToolStripMenuItem
|
|
||||||
//
|
|
||||||
this.gBAWithMGBAToolStripMenuItem.Name = "gBAWithMGBAToolStripMenuItem";
|
|
||||||
this.gBAWithMGBAToolStripMenuItem.Size = new System.Drawing.Size(239, 22);
|
|
||||||
this.gBAWithMGBAToolStripMenuItem.Text = "GBA with mGBA";
|
|
||||||
this.gBAWithMGBAToolStripMenuItem.Click += new System.EventHandler(this.GbaWithmGBAMenuItem_Click);
|
|
||||||
//
|
|
||||||
// toolStripMenuItem16
|
// toolStripMenuItem16
|
||||||
//
|
//
|
||||||
this.toolStripMenuItem16.Name = "toolStripMenuItem16";
|
this.toolStripMenuItem16.Name = "toolStripMenuItem16";
|
||||||
|
@ -2510,7 +2551,7 @@
|
||||||
//
|
//
|
||||||
this.SMSenableBIOSToolStripMenuItem.Name = "SMSenableBIOSToolStripMenuItem";
|
this.SMSenableBIOSToolStripMenuItem.Name = "SMSenableBIOSToolStripMenuItem";
|
||||||
this.SMSenableBIOSToolStripMenuItem.Size = new System.Drawing.Size(241, 22);
|
this.SMSenableBIOSToolStripMenuItem.Size = new System.Drawing.Size(241, 22);
|
||||||
this.SMSenableBIOSToolStripMenuItem.Text = "Enable BIOS";
|
this.SMSenableBIOSToolStripMenuItem.Text = "Enable BIOS (Must be Enabled for TAS)";
|
||||||
this.SMSenableBIOSToolStripMenuItem.Click += new System.EventHandler(this.SmsBiosMenuItem_Click);
|
this.SMSenableBIOSToolStripMenuItem.Click += new System.EventHandler(this.SmsBiosMenuItem_Click);
|
||||||
//
|
//
|
||||||
// SMSEnableFMChipMenuItem
|
// SMSEnableFMChipMenuItem
|
||||||
|
@ -2819,7 +2860,6 @@
|
||||||
// SNESSubMenu
|
// SNESSubMenu
|
||||||
//
|
//
|
||||||
this.SNESSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
this.SNESSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||||
this.SNESDisplayMenuItem,
|
|
||||||
this.SNESControllerConfigurationMenuItem,
|
this.SNESControllerConfigurationMenuItem,
|
||||||
this.toolStripSeparator18,
|
this.toolStripSeparator18,
|
||||||
this.SnesGfxDebuggerMenuItem,
|
this.SnesGfxDebuggerMenuItem,
|
||||||
|
@ -2831,78 +2871,6 @@
|
||||||
this.SNESSubMenu.Text = "&SNES";
|
this.SNESSubMenu.Text = "&SNES";
|
||||||
this.SNESSubMenu.DropDownOpened += new System.EventHandler(this.SNESSubMenu_DropDownOpened);
|
this.SNESSubMenu.DropDownOpened += new System.EventHandler(this.SNESSubMenu_DropDownOpened);
|
||||||
//
|
//
|
||||||
// SNESDisplayMenuItem
|
|
||||||
//
|
|
||||||
this.SNESDisplayMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
|
||||||
this.SnesBg1MenuItem,
|
|
||||||
this.SnesBg2MenuItem,
|
|
||||||
this.SnesBg3MenuItem,
|
|
||||||
this.SnesBg4MenuItem,
|
|
||||||
this.SnesObj1MenuItem,
|
|
||||||
this.SnesObj2MenuItem,
|
|
||||||
this.SnesObj3MenuItem,
|
|
||||||
this.SnesObj4MenuItem});
|
|
||||||
this.SNESDisplayMenuItem.Name = "SNESDisplayMenuItem";
|
|
||||||
this.SNESDisplayMenuItem.Size = new System.Drawing.Size(233, 22);
|
|
||||||
this.SNESDisplayMenuItem.Text = "Display";
|
|
||||||
this.SNESDisplayMenuItem.DropDownOpened += new System.EventHandler(this.SNESDisplayMenuItem_DropDownOpened);
|
|
||||||
//
|
|
||||||
// SnesBg1MenuItem
|
|
||||||
//
|
|
||||||
this.SnesBg1MenuItem.Name = "SnesBg1MenuItem";
|
|
||||||
this.SnesBg1MenuItem.Size = new System.Drawing.Size(103, 22);
|
|
||||||
this.SnesBg1MenuItem.Text = "BG 1";
|
|
||||||
this.SnesBg1MenuItem.Click += new System.EventHandler(this.SnesBg1MenuItem_Click);
|
|
||||||
//
|
|
||||||
// SnesBg2MenuItem
|
|
||||||
//
|
|
||||||
this.SnesBg2MenuItem.Name = "SnesBg2MenuItem";
|
|
||||||
this.SnesBg2MenuItem.Size = new System.Drawing.Size(103, 22);
|
|
||||||
this.SnesBg2MenuItem.Text = "BG 2";
|
|
||||||
this.SnesBg2MenuItem.Click += new System.EventHandler(this.SnesBg2MenuItem_Click);
|
|
||||||
//
|
|
||||||
// SnesBg3MenuItem
|
|
||||||
//
|
|
||||||
this.SnesBg3MenuItem.Name = "SnesBg3MenuItem";
|
|
||||||
this.SnesBg3MenuItem.Size = new System.Drawing.Size(103, 22);
|
|
||||||
this.SnesBg3MenuItem.Text = "BG 3";
|
|
||||||
this.SnesBg3MenuItem.Click += new System.EventHandler(this.SnesBg3MenuItem_Click);
|
|
||||||
//
|
|
||||||
// SnesBg4MenuItem
|
|
||||||
//
|
|
||||||
this.SnesBg4MenuItem.Name = "SnesBg4MenuItem";
|
|
||||||
this.SnesBg4MenuItem.Size = new System.Drawing.Size(103, 22);
|
|
||||||
this.SnesBg4MenuItem.Text = "BG 4";
|
|
||||||
this.SnesBg4MenuItem.Click += new System.EventHandler(this.SnesBg4MenuItem_Click);
|
|
||||||
//
|
|
||||||
// SnesObj1MenuItem
|
|
||||||
//
|
|
||||||
this.SnesObj1MenuItem.Name = "SnesObj1MenuItem";
|
|
||||||
this.SnesObj1MenuItem.Size = new System.Drawing.Size(103, 22);
|
|
||||||
this.SnesObj1MenuItem.Text = "OBJ 1";
|
|
||||||
this.SnesObj1MenuItem.Click += new System.EventHandler(this.SnesObj1MenuItem_Click);
|
|
||||||
//
|
|
||||||
// SnesObj2MenuItem
|
|
||||||
//
|
|
||||||
this.SnesObj2MenuItem.Name = "SnesObj2MenuItem";
|
|
||||||
this.SnesObj2MenuItem.Size = new System.Drawing.Size(103, 22);
|
|
||||||
this.SnesObj2MenuItem.Text = "OBJ 2";
|
|
||||||
this.SnesObj2MenuItem.Click += new System.EventHandler(this.SnesObj2MenuItem_Click);
|
|
||||||
//
|
|
||||||
// SnesObj3MenuItem
|
|
||||||
//
|
|
||||||
this.SnesObj3MenuItem.Name = "SnesObj3MenuItem";
|
|
||||||
this.SnesObj3MenuItem.Size = new System.Drawing.Size(103, 22);
|
|
||||||
this.SnesObj3MenuItem.Text = "OBJ 3";
|
|
||||||
this.SnesObj3MenuItem.Click += new System.EventHandler(this.SnesObj3MenuItem_Click);
|
|
||||||
//
|
|
||||||
// SnesObj4MenuItem
|
|
||||||
//
|
|
||||||
this.SnesObj4MenuItem.Name = "SnesObj4MenuItem";
|
|
||||||
this.SnesObj4MenuItem.Size = new System.Drawing.Size(103, 22);
|
|
||||||
this.SnesObj4MenuItem.Text = "OBJ 4";
|
|
||||||
this.SnesObj4MenuItem.Click += new System.EventHandler(this.SnesObj4MenuItem_Click);
|
|
||||||
//
|
|
||||||
// SNESControllerConfigurationMenuItem
|
// SNESControllerConfigurationMenuItem
|
||||||
//
|
//
|
||||||
this.SNESControllerConfigurationMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.GameController;
|
this.SNESControllerConfigurationMenuItem.Image = global::BizHawk.Client.EmuHawk.Properties.Resources.GameController;
|
||||||
|
@ -3193,6 +3161,51 @@
|
||||||
this.IntVControllerSettingsMenuItem.Text = "Controller Settings...";
|
this.IntVControllerSettingsMenuItem.Text = "Controller Settings...";
|
||||||
this.IntVControllerSettingsMenuItem.Click += new System.EventHandler(this.IntVControllerSettingsMenuItem_Click);
|
this.IntVControllerSettingsMenuItem.Click += new System.EventHandler(this.IntVControllerSettingsMenuItem_Click);
|
||||||
//
|
//
|
||||||
|
// sNESToolStripMenuItem
|
||||||
|
//
|
||||||
|
this.sNESToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||||
|
this.preferencesToolStripMenuItem});
|
||||||
|
this.sNESToolStripMenuItem.Name = "sNESToolStripMenuItem";
|
||||||
|
this.sNESToolStripMenuItem.Size = new System.Drawing.Size(46, 19);
|
||||||
|
this.sNESToolStripMenuItem.Text = "&SNES";
|
||||||
|
//
|
||||||
|
// preferencesToolStripMenuItem
|
||||||
|
//
|
||||||
|
this.preferencesToolStripMenuItem.Name = "preferencesToolStripMenuItem";
|
||||||
|
this.preferencesToolStripMenuItem.Size = new System.Drawing.Size(144, 22);
|
||||||
|
this.preferencesToolStripMenuItem.Text = "Preferences...";
|
||||||
|
this.preferencesToolStripMenuItem.Click += new System.EventHandler(this.preferencesToolStripMenuItem_Click);
|
||||||
|
//
|
||||||
|
// virtualBoyToolStripMenuItem
|
||||||
|
//
|
||||||
|
this.virtualBoyToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||||
|
this.preferencesToolStripMenuItem1});
|
||||||
|
this.virtualBoyToolStripMenuItem.Name = "virtualBoyToolStripMenuItem";
|
||||||
|
this.virtualBoyToolStripMenuItem.Size = new System.Drawing.Size(73, 19);
|
||||||
|
this.virtualBoyToolStripMenuItem.Text = "&VirtualBoy";
|
||||||
|
//
|
||||||
|
// preferencesToolStripMenuItem1
|
||||||
|
//
|
||||||
|
this.preferencesToolStripMenuItem1.Name = "preferencesToolStripMenuItem1";
|
||||||
|
this.preferencesToolStripMenuItem1.Size = new System.Drawing.Size(144, 22);
|
||||||
|
this.preferencesToolStripMenuItem1.Text = "Preferences...";
|
||||||
|
this.preferencesToolStripMenuItem1.Click += new System.EventHandler(this.preferencesToolStripMenuItem1_Click);
|
||||||
|
//
|
||||||
|
// neoGeoPocketToolStripMenuItem
|
||||||
|
//
|
||||||
|
this.neoGeoPocketToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||||
|
this.preferencesToolStripMenuItem2});
|
||||||
|
this.neoGeoPocketToolStripMenuItem.Name = "neoGeoPocketToolStripMenuItem";
|
||||||
|
this.neoGeoPocketToolStripMenuItem.Size = new System.Drawing.Size(101, 19);
|
||||||
|
this.neoGeoPocketToolStripMenuItem.Text = "&NeoGeo Pocket";
|
||||||
|
//
|
||||||
|
// preferencesToolStripMenuItem2
|
||||||
|
//
|
||||||
|
this.preferencesToolStripMenuItem2.Name = "preferencesToolStripMenuItem2";
|
||||||
|
this.preferencesToolStripMenuItem2.Size = new System.Drawing.Size(144, 22);
|
||||||
|
this.preferencesToolStripMenuItem2.Text = "Preferences...";
|
||||||
|
this.preferencesToolStripMenuItem2.Click += new System.EventHandler(this.preferencesToolStripMenuItem2_Click);
|
||||||
|
//
|
||||||
// HelpSubMenu
|
// HelpSubMenu
|
||||||
//
|
//
|
||||||
this.HelpSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
this.HelpSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||||
|
@ -3509,7 +3522,7 @@
|
||||||
this.ShowMenuContextMenuSeparator,
|
this.ShowMenuContextMenuSeparator,
|
||||||
this.ShowMenuContextMenuItem});
|
this.ShowMenuContextMenuItem});
|
||||||
this.MainFormContextMenu.Name = "contextMenuStrip1";
|
this.MainFormContextMenu.Name = "contextMenuStrip1";
|
||||||
this.MainFormContextMenu.Size = new System.Drawing.Size(217, 490);
|
this.MainFormContextMenu.Size = new System.Drawing.Size(217, 512);
|
||||||
this.MainFormContextMenu.Closing += new System.Windows.Forms.ToolStripDropDownClosingEventHandler(this.MainFormContextMenu_Closing);
|
this.MainFormContextMenu.Closing += new System.Windows.Forms.ToolStripDropDownClosingEventHandler(this.MainFormContextMenu_Closing);
|
||||||
this.MainFormContextMenu.Opening += new System.ComponentModel.CancelEventHandler(this.MainFormContextMenu_Opening);
|
this.MainFormContextMenu.Opening += new System.ComponentModel.CancelEventHandler(this.MainFormContextMenu_Opening);
|
||||||
//
|
//
|
||||||
|
@ -3668,7 +3681,6 @@
|
||||||
this.customizeToolStripMenuItem,
|
this.customizeToolStripMenuItem,
|
||||||
this.toolStripSeparator30,
|
this.toolStripSeparator30,
|
||||||
this.SavestateTypeContextSubMenu,
|
this.SavestateTypeContextSubMenu,
|
||||||
this.CoreSelectionContextSubMenu,
|
|
||||||
this.toolStripSeparator37,
|
this.toolStripSeparator37,
|
||||||
this.toolStripMenuItem66,
|
this.toolStripMenuItem66,
|
||||||
this.toolStripMenuItem67});
|
this.toolStripMenuItem67});
|
||||||
|
@ -3796,30 +3808,6 @@
|
||||||
this.SavestateTextContextMenuItem.Size = new System.Drawing.Size(112, 22);
|
this.SavestateTextContextMenuItem.Size = new System.Drawing.Size(112, 22);
|
||||||
this.SavestateTextContextMenuItem.Text = "&Text";
|
this.SavestateTextContextMenuItem.Text = "&Text";
|
||||||
//
|
//
|
||||||
// CoreSelectionContextSubMenu
|
|
||||||
//
|
|
||||||
this.CoreSelectionContextSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
|
||||||
this.GBInSGBContextMenuItem,
|
|
||||||
this.NesInQuickNESContextMenuItem});
|
|
||||||
this.CoreSelectionContextSubMenu.Name = "CoreSelectionContextSubMenu";
|
|
||||||
this.CoreSelectionContextSubMenu.Size = new System.Drawing.Size(159, 22);
|
|
||||||
this.CoreSelectionContextSubMenu.Text = "Core Selection";
|
|
||||||
this.CoreSelectionContextSubMenu.DropDownOpened += new System.EventHandler(this.CoreSelectionContextSubMenu_DropDownOpened);
|
|
||||||
//
|
|
||||||
// GBInSGBContextMenuItem
|
|
||||||
//
|
|
||||||
this.GBInSGBContextMenuItem.Name = "GBInSGBContextMenuItem";
|
|
||||||
this.GBInSGBContextMenuItem.Size = new System.Drawing.Size(163, 22);
|
|
||||||
this.GBInSGBContextMenuItem.Text = "GB in SGB";
|
|
||||||
this.GBInSGBContextMenuItem.Click += new System.EventHandler(this.GbInSgbMenuItem_Click);
|
|
||||||
//
|
|
||||||
// NesInQuickNESContextMenuItem
|
|
||||||
//
|
|
||||||
this.NesInQuickNESContextMenuItem.Name = "NesInQuickNESContextMenuItem";
|
|
||||||
this.NesInQuickNESContextMenuItem.Size = new System.Drawing.Size(163, 22);
|
|
||||||
this.NesInQuickNESContextMenuItem.Text = "NES in QuickNES";
|
|
||||||
this.NesInQuickNESContextMenuItem.Click += new System.EventHandler(this.NesInQuickNESMenuItem_Click);
|
|
||||||
//
|
|
||||||
// toolStripSeparator37
|
// toolStripSeparator37
|
||||||
//
|
//
|
||||||
this.toolStripSeparator37.Name = "toolStripSeparator37";
|
this.toolStripSeparator37.Name = "toolStripSeparator37";
|
||||||
|
@ -3882,13 +3870,6 @@
|
||||||
this.timerMouseIdle.Interval = 2000;
|
this.timerMouseIdle.Interval = 2000;
|
||||||
this.timerMouseIdle.Tick += new System.EventHandler(this.TimerMouseIdle_Tick);
|
this.timerMouseIdle.Tick += new System.EventHandler(this.TimerMouseIdle_Tick);
|
||||||
//
|
//
|
||||||
// Atari7800WithEmu7800MenuItem
|
|
||||||
//
|
|
||||||
this.Atari7800WithEmu7800MenuItem.Name = "Atari7800WithEmu7800MenuItem";
|
|
||||||
this.Atari7800WithEmu7800MenuItem.Size = new System.Drawing.Size(239, 22);
|
|
||||||
this.Atari7800WithEmu7800MenuItem.Text = "Atari 7800 with Emu7800";
|
|
||||||
this.Atari7800WithEmu7800MenuItem.Click += new System.EventHandler(this.Atari7800WithEmu7800MenuItem_Click);
|
|
||||||
//
|
|
||||||
// MainForm
|
// MainForm
|
||||||
//
|
//
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
|
||||||
|
@ -4121,15 +4102,6 @@
|
||||||
private System.Windows.Forms.ToolStripMenuItem SNESSubMenu;
|
private System.Windows.Forms.ToolStripMenuItem SNESSubMenu;
|
||||||
private System.Windows.Forms.ToolStripMenuItem SnesGfxDebuggerMenuItem;
|
private System.Windows.Forms.ToolStripMenuItem SnesGfxDebuggerMenuItem;
|
||||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator18;
|
private System.Windows.Forms.ToolStripSeparator toolStripSeparator18;
|
||||||
private System.Windows.Forms.ToolStripMenuItem SNESDisplayMenuItem;
|
|
||||||
private System.Windows.Forms.ToolStripMenuItem SnesBg1MenuItem;
|
|
||||||
private System.Windows.Forms.ToolStripMenuItem SnesBg2MenuItem;
|
|
||||||
private System.Windows.Forms.ToolStripMenuItem SnesBg3MenuItem;
|
|
||||||
private System.Windows.Forms.ToolStripMenuItem SnesBg4MenuItem;
|
|
||||||
private System.Windows.Forms.ToolStripMenuItem SnesObj1MenuItem;
|
|
||||||
private System.Windows.Forms.ToolStripMenuItem SnesObj2MenuItem;
|
|
||||||
private System.Windows.Forms.ToolStripMenuItem SnesObj3MenuItem;
|
|
||||||
private System.Windows.Forms.ToolStripMenuItem SnesObj4MenuItem;
|
|
||||||
private System.Windows.Forms.ToolStripMenuItem HardResetMenuItem;
|
private System.Windows.Forms.ToolStripMenuItem HardResetMenuItem;
|
||||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator19;
|
private System.Windows.Forms.ToolStripSeparator toolStripSeparator19;
|
||||||
private System.Windows.Forms.ToolStripMenuItem CaptureOSDMenuItem;
|
private System.Windows.Forms.ToolStripMenuItem CaptureOSDMenuItem;
|
||||||
|
@ -4191,7 +4163,6 @@
|
||||||
private System.Windows.Forms.ToolStripMenuItem MovieSettingsMenuItem;
|
private System.Windows.Forms.ToolStripMenuItem MovieSettingsMenuItem;
|
||||||
private System.Windows.Forms.ToolStripMenuItem CoresSubMenu;
|
private System.Windows.Forms.ToolStripMenuItem CoresSubMenu;
|
||||||
private System.Windows.Forms.ToolStripMenuItem GBInSGBMenuItem;
|
private System.Windows.Forms.ToolStripMenuItem GBInSGBMenuItem;
|
||||||
private System.Windows.Forms.ToolStripMenuItem NesInQuickNESMenuItem;
|
|
||||||
private System.Windows.Forms.ToolStripMenuItem batchRunnerToolStripMenuItem;
|
private System.Windows.Forms.ToolStripMenuItem batchRunnerToolStripMenuItem;
|
||||||
private System.Windows.Forms.ToolStripMenuItem DisplayConfigMenuItem;
|
private System.Windows.Forms.ToolStripMenuItem DisplayConfigMenuItem;
|
||||||
private System.Windows.Forms.ToolStripMenuItem PCEtileViewerToolStripMenuItem;
|
private System.Windows.Forms.ToolStripMenuItem PCEtileViewerToolStripMenuItem;
|
||||||
|
@ -4226,9 +4197,6 @@
|
||||||
private System.Windows.Forms.ToolStripMenuItem SavestateTypeDefaultContextMenuItem;
|
private System.Windows.Forms.ToolStripMenuItem SavestateTypeDefaultContextMenuItem;
|
||||||
private System.Windows.Forms.ToolStripMenuItem SavestateBinaryContextMenuItem;
|
private System.Windows.Forms.ToolStripMenuItem SavestateBinaryContextMenuItem;
|
||||||
private System.Windows.Forms.ToolStripMenuItem SavestateTextContextMenuItem;
|
private System.Windows.Forms.ToolStripMenuItem SavestateTextContextMenuItem;
|
||||||
private System.Windows.Forms.ToolStripMenuItem CoreSelectionContextSubMenu;
|
|
||||||
private System.Windows.Forms.ToolStripMenuItem GBInSGBContextMenuItem;
|
|
||||||
private System.Windows.Forms.ToolStripMenuItem NesInQuickNESContextMenuItem;
|
|
||||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator37;
|
private System.Windows.Forms.ToolStripSeparator toolStripSeparator37;
|
||||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem66;
|
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem66;
|
||||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem67;
|
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem67;
|
||||||
|
@ -4286,7 +4254,6 @@
|
||||||
private System.Windows.Forms.ToolStripMenuItem GBACoreSelectionSubMenu;
|
private System.Windows.Forms.ToolStripMenuItem GBACoreSelectionSubMenu;
|
||||||
private System.Windows.Forms.ToolStripMenuItem GBAmGBAMenuItem;
|
private System.Windows.Forms.ToolStripMenuItem GBAmGBAMenuItem;
|
||||||
private System.Windows.Forms.ToolStripMenuItem GBAVBANextMenuItem;
|
private System.Windows.Forms.ToolStripMenuItem GBAVBANextMenuItem;
|
||||||
private System.Windows.Forms.ToolStripMenuItem gBAWithMGBAToolStripMenuItem;
|
|
||||||
private System.Windows.Forms.ToolStripMenuItem settingsToolStripMenuItem1;
|
private System.Windows.Forms.ToolStripMenuItem settingsToolStripMenuItem1;
|
||||||
private System.Windows.Forms.ToolStripMenuItem PSXHashDiscsToolStripMenuItem;
|
private System.Windows.Forms.ToolStripMenuItem PSXHashDiscsToolStripMenuItem;
|
||||||
private System.Windows.Forms.Timer timerMouseIdle;
|
private System.Windows.Forms.Timer timerMouseIdle;
|
||||||
|
@ -4326,10 +4293,8 @@
|
||||||
private System.Windows.Forms.ToolStripMenuItem VSServiceSwitchMenuItem;
|
private System.Windows.Forms.ToolStripMenuItem VSServiceSwitchMenuItem;
|
||||||
private System.Windows.Forms.ToolStripMenuItem VSSettingsMenuItem;
|
private System.Windows.Forms.ToolStripMenuItem VSSettingsMenuItem;
|
||||||
private System.Windows.Forms.ToolStripMenuItem CoreSNESSubMenu;
|
private System.Windows.Forms.ToolStripMenuItem CoreSNESSubMenu;
|
||||||
private System.Windows.Forms.ToolStripMenuItem CorebsnesPerformanceMenuItem;
|
private System.Windows.Forms.ToolStripMenuItem CorebsnesMenuItem;
|
||||||
private System.Windows.Forms.ToolStripMenuItem CorebsnesCompatibilityMenuItem;
|
|
||||||
private System.Windows.Forms.ToolStripMenuItem Coresnes9xMenuItem;
|
private System.Windows.Forms.ToolStripMenuItem Coresnes9xMenuItem;
|
||||||
private System.Windows.Forms.ToolStripMenuItem CorebsnesAccuracyMenuItem;
|
|
||||||
private System.Windows.Forms.ToolStripMenuItem allowGameDBCoreOverridesToolStripMenuItem;
|
private System.Windows.Forms.ToolStripMenuItem allowGameDBCoreOverridesToolStripMenuItem;
|
||||||
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem16;
|
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem16;
|
||||||
private System.Windows.Forms.ToolStripMenuItem IntvSubMenu;
|
private System.Windows.Forms.ToolStripMenuItem IntvSubMenu;
|
||||||
|
@ -4338,6 +4303,20 @@
|
||||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator35;
|
private System.Windows.Forms.ToolStripSeparator toolStripSeparator35;
|
||||||
private System.Windows.Forms.ToolStripMenuItem C64DisksSubMenu;
|
private System.Windows.Forms.ToolStripMenuItem C64DisksSubMenu;
|
||||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator36;
|
private System.Windows.Forms.ToolStripSeparator toolStripSeparator36;
|
||||||
private System.Windows.Forms.ToolStripMenuItem Atari7800WithEmu7800MenuItem;
|
private System.Windows.Forms.ToolStripMenuItem sNESToolStripMenuItem;
|
||||||
|
private System.Windows.Forms.ToolStripMenuItem preferencesToolStripMenuItem;
|
||||||
|
private System.Windows.Forms.ToolStripMenuItem virtualBoyToolStripMenuItem;
|
||||||
|
private System.Windows.Forms.ToolStripMenuItem preferencesToolStripMenuItem1;
|
||||||
|
private System.Windows.Forms.ToolStripMenuItem neoGeoPocketToolStripMenuItem;
|
||||||
|
private System.Windows.Forms.ToolStripMenuItem preferencesToolStripMenuItem2;
|
||||||
|
private System.Windows.Forms.ToolStripMenuItem NesCoreSubMenu;
|
||||||
|
private System.Windows.Forms.ToolStripMenuItem QuicknesCoreMenuItem;
|
||||||
|
private System.Windows.Forms.ToolStripMenuItem NesCoreMenuItem;
|
||||||
|
private System.Windows.Forms.ToolStripMenuItem GbaCoreSubMenu;
|
||||||
|
private System.Windows.Forms.ToolStripMenuItem VbaNextCoreMenuItem;
|
||||||
|
private System.Windows.Forms.ToolStripMenuItem MgbaCoreMenuItem;
|
||||||
|
private System.Windows.Forms.ToolStripMenuItem Atari7800CoreSubMenu;
|
||||||
|
private System.Windows.Forms.ToolStripMenuItem Emu7800CoreMenuItem;
|
||||||
|
private System.Windows.Forms.ToolStripMenuItem Atari7800HawkCoreMenuItem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -473,34 +473,29 @@ namespace BizHawk.Client.EmuHawk
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (Emulator is LibsnesCore)
|
else if (Emulator is Snes9x)
|
||||||
{
|
{
|
||||||
var snes = (LibsnesCore)Emulator;
|
var box = new MsgBox(
|
||||||
if (snes.CurrentProfile == "Performance")
|
"While the Snes9x core is faster, it is not nearly as accurate as bsnes. \nIt is recommended that you switch to the bsnes core for movie recording\nSwitch to bsnes?",
|
||||||
|
"Accuracy Warning",
|
||||||
|
MessageBoxIcon.Warning);
|
||||||
|
|
||||||
|
box.SetButtons(
|
||||||
|
new[] { "Switch", "Cancel" },
|
||||||
|
new[] { DialogResult.Yes, DialogResult.Cancel });
|
||||||
|
|
||||||
|
box.MaximumSize = new Size(475, 350);
|
||||||
|
box.SetMessageToAutoSize();
|
||||||
|
var result = box.ShowDialog();
|
||||||
|
|
||||||
|
if (result == DialogResult.Yes)
|
||||||
{
|
{
|
||||||
var box = new MsgBox(
|
Global.Config.SNES_InSnes9x = false;
|
||||||
"While the performance core is faster, it is not stable enough for movie recording\n\nSwitch to Compatibility?",
|
RebootCore();
|
||||||
"Stability Warning",
|
}
|
||||||
MessageBoxIcon.Warning);
|
else if (result == DialogResult.Cancel)
|
||||||
|
{
|
||||||
box.SetButtons(
|
return;
|
||||||
new[] { "Switch", "Cancel" },
|
|
||||||
new[] { DialogResult.Yes, DialogResult.Cancel });
|
|
||||||
|
|
||||||
box.MaximumSize = new Size(450, 350);
|
|
||||||
box.SetMessageToAutoSize();
|
|
||||||
var result = box.ShowDialog();
|
|
||||||
|
|
||||||
if (result == DialogResult.Yes)
|
|
||||||
{
|
|
||||||
var ss = snes.GetSyncSettings();
|
|
||||||
ss.Profile = "Compatibility";
|
|
||||||
snes.PutSyncSettings(ss);
|
|
||||||
}
|
|
||||||
else if (result == DialogResult.Cancel)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1189,94 +1184,82 @@ namespace BizHawk.Client.EmuHawk
|
||||||
UpdateKeyPriorityIcon();
|
UpdateKeyPriorityIcon();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void GbInSgbMenuItem_Click(object sender, EventArgs e)
|
private void CoresSubMenu_DropDownOpened(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
Global.Config.GB_AsSGB ^= true;
|
Atari7800CoreSubMenu.Visible = VersionInfo.DeveloperBuild;
|
||||||
|
GBInSGBMenuItem.Checked = Global.Config.GB_AsSGB;
|
||||||
if (!Emulator.IsNull())
|
|
||||||
{
|
|
||||||
FlagNeedsReboot();
|
allowGameDBCoreOverridesToolStripMenuItem.Checked = Global.Config.CoreForcingViaGameDB;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void NesInQuickNESMenuItem_Click(object sender, EventArgs e)
|
private void NesCoreSubMenu_DropDownOpened(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
QuicknesCoreMenuItem.Checked = Global.Config.NES_InQuickNES;
|
||||||
|
NesCoreMenuItem.Checked = !Global.Config.NES_InQuickNES;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void NesCorePick_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
Global.Config.NES_InQuickNES ^= true;
|
Global.Config.NES_InQuickNES ^= true;
|
||||||
|
|
||||||
if (!Emulator.IsNull())
|
if (Emulator.SystemId == "NES")
|
||||||
{
|
{
|
||||||
FlagNeedsReboot();
|
FlagNeedsReboot();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void CoresSubMenu_DropDownOpened(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
Atari7800WithEmu7800MenuItem.Visible = VersionInfo.DeveloperBuild; // Don't expose Atari7800Hawk in releases yet
|
|
||||||
GBInSGBMenuItem.Checked = Global.Config.GB_AsSGB;
|
|
||||||
NesInQuickNESMenuItem.Checked = Global.Config.NES_InQuickNES;
|
|
||||||
gBAWithMGBAToolStripMenuItem.Checked = Global.Config.GBA_UsemGBA;
|
|
||||||
Atari7800WithEmu7800MenuItem.Checked = Global.Config.A78_UseEmu7800;
|
|
||||||
allowGameDBCoreOverridesToolStripMenuItem.Checked = Global.Config.CoreForcingViaGameDB;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void CoreSNESSubMenu_DropDownOpened(object sender, EventArgs e)
|
private void CoreSNESSubMenu_DropDownOpened(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
Coresnes9xMenuItem.Checked = Global.Config.SNES_InSnes9x;
|
Coresnes9xMenuItem.Checked = Global.Config.SNES_InSnes9x;
|
||||||
Coresnes9xMenuItem.Visible = VersionInfo.DeveloperBuild;
|
CorebsnesMenuItem.Checked = !Global.Config.SNES_InSnes9x;
|
||||||
|
|
||||||
LibsnesCore.SnesSyncSettings sss = (LibsnesCore.SnesSyncSettings)Global.Config.GetCoreSyncSettings<LibsnesCore>()
|
|
||||||
?? new LibsnesCore.SnesSyncSettings();
|
|
||||||
|
|
||||||
CorebsnesPerformanceMenuItem.Checked = sss.Profile == "Performance";
|
|
||||||
CorebsnesCompatibilityMenuItem.Checked = sss.Profile == "Compatibility";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void CorebsnesPerformanceMenuItem_Click(object sender, EventArgs e)
|
private void CoreSnesToggle_Click(object sender, EventArgs e)
|
||||||
{
|
|
||||||
LibsnesCore.SnesSyncSettings sss = (LibsnesCore.SnesSyncSettings)Global.Config.GetCoreSyncSettings<LibsnesCore>()
|
|
||||||
?? new LibsnesCore.SnesSyncSettings();
|
|
||||||
|
|
||||||
string orig = sss.Profile;
|
|
||||||
|
|
||||||
sss.Profile = "Performance";
|
|
||||||
Global.Config.PutCoreSyncSettings<LibsnesCore>(sss);
|
|
||||||
|
|
||||||
if (Emulator is LibsnesCore && orig != sss.Profile)
|
|
||||||
{
|
|
||||||
FlagNeedsReboot();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void CorebsnesCompatibilityMenuItem_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
LibsnesCore.SnesSyncSettings sss = (LibsnesCore.SnesSyncSettings)Global.Config.GetCoreSyncSettings<LibsnesCore>()
|
|
||||||
?? new LibsnesCore.SnesSyncSettings();
|
|
||||||
|
|
||||||
string orig = sss.Profile;
|
|
||||||
|
|
||||||
sss.Profile = "Compatibility";
|
|
||||||
Global.Config.PutCoreSyncSettings<LibsnesCore>(sss);
|
|
||||||
|
|
||||||
if (Emulator is LibsnesCore && orig != sss.Profile)
|
|
||||||
{
|
|
||||||
FlagNeedsReboot();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void CoreSnes9xMenuItem_Click(object sender, EventArgs e)
|
|
||||||
{
|
{
|
||||||
Global.Config.SNES_InSnes9x ^= true;
|
Global.Config.SNES_InSnes9x ^= true;
|
||||||
|
|
||||||
if (Emulator is Snes9x || Emulator is LibsnesCore)
|
if (Emulator.SystemId == "SNES")
|
||||||
{
|
{
|
||||||
FlagNeedsReboot();
|
FlagNeedsReboot();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Atari7800WithEmu7800MenuItem_Click(object sender, EventArgs e)
|
private void GbaCoreSubMenu_DropDownOpened(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
VbaNextCoreMenuItem.Checked = Global.Config.GBA_UsemGBA;
|
||||||
|
MgbaCoreMenuItem.Checked = !Global.Config.GBA_UsemGBA;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void GbaCorePick_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
Global.Config.GBA_UsemGBA ^= true;
|
||||||
|
if (Emulator.SystemId == "GBA")
|
||||||
|
{
|
||||||
|
FlagNeedsReboot();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Atari7800CoreSubMenu_DropDownOpened(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
Emu7800CoreMenuItem.Checked = Global.Config.A78_UseEmu7800;
|
||||||
|
Atari7800HawkCoreMenuItem.Checked = !Global.Config.A78_UseEmu7800;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Atari7800CorePick_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
Global.Config.A78_UseEmu7800 ^= true;
|
Global.Config.A78_UseEmu7800 ^= true;
|
||||||
if (Emulator is A7800Hawk || Emulator is Atari7800)
|
if (Emulator.SystemId == "A78")
|
||||||
|
{
|
||||||
|
FlagNeedsReboot();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void GbInSgbMenuItem_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
Global.Config.GB_AsSGB ^= true;
|
||||||
|
|
||||||
|
if (!Emulator.IsNull())
|
||||||
{
|
{
|
||||||
FlagNeedsReboot();
|
FlagNeedsReboot();
|
||||||
}
|
}
|
||||||
|
@ -2106,71 +2089,6 @@ namespace BizHawk.Client.EmuHawk
|
||||||
SNESControllerConfigurationMenuItem.Enabled = !Global.MovieSession.Movie.IsActive;
|
SNESControllerConfigurationMenuItem.Enabled = !Global.MovieSession.Movie.IsActive;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SNESDisplayMenuItem_DropDownOpened(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
var s = ((LibsnesCore)Emulator).GetSettings();
|
|
||||||
|
|
||||||
SnesBg1MenuItem.Checked = s.ShowBG1_1;
|
|
||||||
SnesBg2MenuItem.Checked = s.ShowBG2_1;
|
|
||||||
SnesBg3MenuItem.Checked = s.ShowBG3_1;
|
|
||||||
SnesBg4MenuItem.Checked = s.ShowBG4_1;
|
|
||||||
|
|
||||||
SnesObj1MenuItem.Checked = s.ShowOBJ_0;
|
|
||||||
SnesObj2MenuItem.Checked = s.ShowOBJ_1;
|
|
||||||
SnesObj3MenuItem.Checked = s.ShowOBJ_2;
|
|
||||||
SnesObj4MenuItem.Checked = s.ShowOBJ_3;
|
|
||||||
|
|
||||||
SnesBg1MenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Toggle BG 1"].Bindings;
|
|
||||||
SnesBg2MenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Toggle BG 2"].Bindings;
|
|
||||||
SnesBg3MenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Toggle BG 3"].Bindings;
|
|
||||||
SnesBg4MenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Toggle BG 4"].Bindings;
|
|
||||||
|
|
||||||
SnesObj1MenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Toggle OBJ 1"].Bindings;
|
|
||||||
SnesObj2MenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Toggle OBJ 2"].Bindings;
|
|
||||||
SnesObj3MenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Toggle OBJ 3"].Bindings;
|
|
||||||
SnesObj4MenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Toggle OBJ 4"].Bindings;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void SnesBg1MenuItem_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
SNES_ToggleBG1();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void SnesBg2MenuItem_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
SNES_ToggleBG2();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void SnesBg3MenuItem_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
SNES_ToggleBG3();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void SnesBg4MenuItem_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
SNES_ToggleBG4();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void SnesObj1MenuItem_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
SNES_ToggleObj1();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void SnesObj2MenuItem_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
SNES_ToggleObj2();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void SnesObj3MenuItem_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
SNES_ToggleOBJ3();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void SnesObj4MenuItem_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
SNES_ToggleOBJ4();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void SNESControllerConfigurationMenuItem_Click(object sender, EventArgs e)
|
private void SNESControllerConfigurationMenuItem_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
new SNESControllerSettings().ShowDialog();
|
new SNESControllerSettings().ShowDialog();
|
||||||
|
@ -2630,12 +2548,6 @@ namespace BizHawk.Client.EmuHawk
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void CoreSelectionContextSubMenu_DropDownOpened(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
GBInSGBContextMenuItem.Checked = Global.Config.GB_AsSGB;
|
|
||||||
NesInQuickNESContextMenuItem.Checked = Global.Config.NES_InQuickNES;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void LoadLastRomContextMenuItem_Click(object sender, EventArgs e)
|
private void LoadLastRomContextMenuItem_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
LoadRomFromRecent(Global.Config.RecentRoms.MostRecent);
|
LoadRomFromRecent(Global.Config.RecentRoms.MostRecent);
|
||||||
|
|
|
@ -611,28 +611,28 @@ namespace BizHawk.Client.EmuHawk
|
||||||
|
|
||||||
// SNES
|
// SNES
|
||||||
case "Toggle BG 1":
|
case "Toggle BG 1":
|
||||||
SNES_ToggleBG1();
|
SNES_ToggleBg(1);
|
||||||
break;
|
break;
|
||||||
case "Toggle BG 2":
|
case "Toggle BG 2":
|
||||||
SNES_ToggleBG2();
|
SNES_ToggleBg(2);
|
||||||
break;
|
break;
|
||||||
case "Toggle BG 3":
|
case "Toggle BG 3":
|
||||||
SNES_ToggleBG3();
|
SNES_ToggleBg(3);
|
||||||
break;
|
break;
|
||||||
case "Toggle BG 4":
|
case "Toggle BG 4":
|
||||||
SNES_ToggleBG4();
|
SNES_ToggleBg(4);
|
||||||
break;
|
break;
|
||||||
case "Toggle OBJ 1":
|
case "Toggle OBJ 1":
|
||||||
SNES_ToggleObj1();
|
SNES_ToggleObj(1);
|
||||||
break;
|
break;
|
||||||
case "Toggle OBJ 2":
|
case "Toggle OBJ 2":
|
||||||
SNES_ToggleObj2();
|
SNES_ToggleObj(2);
|
||||||
break;
|
break;
|
||||||
case "Toggle OBJ 3":
|
case "Toggle OBJ 3":
|
||||||
SNES_ToggleOBJ3();
|
SNES_ToggleObj(3);
|
||||||
break;
|
break;
|
||||||
case "Toggle OBJ 4":
|
case "Toggle OBJ 4":
|
||||||
SNES_ToggleOBJ4();
|
SNES_ToggleObj(4);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// GB
|
// GB
|
||||||
|
|
|
@ -30,6 +30,8 @@ using BizHawk.Client.EmuHawk.ToolExtensions;
|
||||||
using BizHawk.Client.EmuHawk.CoreExtensions;
|
using BizHawk.Client.EmuHawk.CoreExtensions;
|
||||||
using BizHawk.Client.ApiHawk;
|
using BizHawk.Client.ApiHawk;
|
||||||
using BizHawk.Emulation.Common.Base_Implementations;
|
using BizHawk.Emulation.Common.Base_Implementations;
|
||||||
|
using BizHawk.Emulation.Cores.Nintendo.SNES9X;
|
||||||
|
using BizHawk.Emulation.Cores.Consoles.SNK;
|
||||||
|
|
||||||
namespace BizHawk.Client.EmuHawk
|
namespace BizHawk.Client.EmuHawk
|
||||||
{
|
{
|
||||||
|
@ -665,7 +667,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
public bool IsSeeking => PauseOnFrame.HasValue;
|
public bool IsSeeking => PauseOnFrame.HasValue;
|
||||||
|
|
||||||
private bool IsTurboSeeking => PauseOnFrame.HasValue && Global.Config.TurboSeek;
|
private bool IsTurboSeeking => PauseOnFrame.HasValue && Global.Config.TurboSeek;
|
||||||
|
|
||||||
private bool IsTurboing => Global.ClientControls["Turbo"] || IsTurboSeeking;
|
private bool IsTurboing => Global.ClientControls["Turbo"] || IsTurboSeeking;
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -1257,173 +1259,122 @@ namespace BizHawk.Client.EmuHawk
|
||||||
|
|
||||||
private LibsnesCore AsSNES => Emulator as LibsnesCore;
|
private LibsnesCore AsSNES => Emulator as LibsnesCore;
|
||||||
|
|
||||||
// TODO: Clean Me!
|
private void SNES_ToggleBg(int layer)
|
||||||
private void SNES_ToggleBG1(bool? setto = null)
|
|
||||||
{
|
{
|
||||||
if (!(Emulator is LibsnesCore))
|
if (!(Emulator is LibsnesCore) && !(Emulator is Snes9x))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var s = AsSNES.GetSettings();
|
if (layer < 1 || layer > 4)
|
||||||
if (setto.HasValue)
|
|
||||||
{
|
{
|
||||||
s.ShowBG1_1 = s.ShowBG1_0 = setto.Value;
|
return;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
s.ShowBG1_1 = s.ShowBG1_0 ^= true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
AsSNES.PutSettings(s);
|
bool result = false;
|
||||||
GlobalWin.OSD.AddMessage(s.ShowBG1_1 ? "BG 1 Layer On" : "BG 1 Layer Off");
|
if (Emulator is LibsnesCore)
|
||||||
|
{
|
||||||
|
var s = ((LibsnesCore)Emulator).GetSettings();
|
||||||
|
switch (layer)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
result = s.ShowBG1_0 = s.ShowBG1_1 ^= true;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
result = s.ShowBG2_0 = s.ShowBG2_1 ^= true;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
result = s.ShowBG3_0 = s.ShowBG3_1 ^= true;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
result = s.ShowBG4_0 = s.ShowBG4_1 ^= true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
((LibsnesCore)Emulator).PutSettings(s);
|
||||||
|
}
|
||||||
|
else if (Emulator is Snes9x)
|
||||||
|
{
|
||||||
|
var s = ((Snes9x)Emulator).GetSettings();
|
||||||
|
switch (layer)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
result = s.ShowBg0 ^= true;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
result = s.ShowBg1 ^= true;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
result = s.ShowBg2 ^= true;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
result = s.ShowBg3 ^= true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
((Snes9x)Emulator).PutSettings(s);
|
||||||
|
}
|
||||||
|
|
||||||
|
GlobalWin.OSD.AddMessage($"BG {layer} Layer " + (result ? "On" : "Off"));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SNES_ToggleBG2(bool? setto = null)
|
private void SNES_ToggleObj(int layer)
|
||||||
{
|
{
|
||||||
if (!(Emulator is LibsnesCore))
|
if (!(Emulator is LibsnesCore) && !(Emulator is Snes9x))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var s = AsSNES.GetSettings();
|
if (layer < 1 || layer > 4)
|
||||||
if (setto.HasValue)
|
|
||||||
{
|
|
||||||
s.ShowBG2_1 = s.ShowBG2_0 = setto.Value;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
s.ShowBG2_1 = s.ShowBG2_0 ^= true;
|
|
||||||
}
|
|
||||||
|
|
||||||
AsSNES.PutSettings(s);
|
|
||||||
GlobalWin.OSD.AddMessage(s.ShowBG2_1 ? "BG 2 Layer On" : "BG 2 Layer Off");
|
|
||||||
}
|
|
||||||
|
|
||||||
private void SNES_ToggleBG3(bool? setto = null)
|
|
||||||
{
|
|
||||||
if (!(Emulator is LibsnesCore))
|
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var s = AsSNES.GetSettings();
|
bool result = false;
|
||||||
if (setto.HasValue)
|
if (Emulator is LibsnesCore)
|
||||||
{
|
{
|
||||||
s.ShowBG3_1 = s.ShowBG3_0 = setto.Value;
|
var s = ((LibsnesCore)Emulator).GetSettings();
|
||||||
}
|
switch (layer)
|
||||||
else
|
{
|
||||||
{
|
case 1:
|
||||||
s.ShowBG3_1 = s.ShowBG3_0 ^= true;
|
result = s.ShowOBJ_0 ^= true;
|
||||||
}
|
break;
|
||||||
|
case 2:
|
||||||
|
result = s.ShowOBJ_1 ^= true;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
result = s.ShowOBJ_2 ^= true;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
result = s.ShowOBJ_3 ^= true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
AsSNES.PutSettings(s);
|
((LibsnesCore)Emulator).PutSettings(s);
|
||||||
GlobalWin.OSD.AddMessage(s.ShowBG3_1 ? "BG 3 Layer On" : "BG 3 Layer Off");
|
GlobalWin.OSD.AddMessage($"Obj {layer} Layer " + (result ? "On" : "Off"));
|
||||||
}
|
|
||||||
|
|
||||||
private void SNES_ToggleBG4(bool? setto = null)
|
|
||||||
{
|
|
||||||
if (!(Emulator is LibsnesCore))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
else if (Emulator is Snes9x)
|
||||||
var s = AsSNES.GetSettings();
|
|
||||||
if (setto.HasValue)
|
|
||||||
{
|
{
|
||||||
s.ShowBG4_1 = s.ShowBG4_0 = setto.Value;
|
var s = ((Snes9x)Emulator).GetSettings();
|
||||||
}
|
switch (layer)
|
||||||
else
|
{
|
||||||
{
|
case 1:
|
||||||
s.ShowBG4_1 = s.ShowBG4_0 ^= true;
|
result = s.ShowSprites0 ^= true;
|
||||||
}
|
break;
|
||||||
|
case 2:
|
||||||
|
result = s.ShowSprites1 ^= true;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
result = s.ShowSprites2 ^= true;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
result = s.ShowSprites3 ^= true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
AsSNES.PutSettings(s);
|
((Snes9x)Emulator).PutSettings(s);
|
||||||
GlobalWin.OSD.AddMessage(s.ShowBG4_1 ? "BG 4 Layer On" : "BG 4 Layer Off");
|
GlobalWin.OSD.AddMessage($"Sprite {layer} Layer " + (result ? "On" : "Off"));
|
||||||
}
|
|
||||||
|
|
||||||
private void SNES_ToggleObj1(bool? setto = null)
|
|
||||||
{
|
|
||||||
if (!(Emulator is LibsnesCore))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var s = AsSNES.GetSettings();
|
|
||||||
if (setto.HasValue)
|
|
||||||
{
|
|
||||||
s.ShowOBJ_0 = setto.Value;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
s.ShowOBJ_0 ^= true;
|
|
||||||
}
|
|
||||||
|
|
||||||
AsSNES.PutSettings(s);
|
|
||||||
GlobalWin.OSD.AddMessage(s.ShowOBJ_0 ? "OBJ 1 Layer On" : "OBJ 1 Layer Off");
|
|
||||||
}
|
|
||||||
|
|
||||||
private void SNES_ToggleObj2(bool? setto = null)
|
|
||||||
{
|
|
||||||
if (!(Emulator is LibsnesCore))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var s = AsSNES.GetSettings();
|
|
||||||
if (setto.HasValue)
|
|
||||||
{
|
|
||||||
s.ShowOBJ_1 = setto.Value;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
s.ShowOBJ_1 ^= true;
|
|
||||||
}
|
|
||||||
|
|
||||||
AsSNES.PutSettings(s);
|
|
||||||
GlobalWin.OSD.AddMessage(s.ShowOBJ_1 ? "OBJ 2 Layer On" : "OBJ 2 Layer Off");
|
|
||||||
}
|
|
||||||
|
|
||||||
private void SNES_ToggleOBJ3(bool? setto = null)
|
|
||||||
{
|
|
||||||
if (!(Emulator is LibsnesCore))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var s = AsSNES.GetSettings();
|
|
||||||
if (setto.HasValue)
|
|
||||||
{
|
|
||||||
s.ShowOBJ_2 = setto.Value;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
s.ShowOBJ_2 ^= true;
|
|
||||||
}
|
|
||||||
|
|
||||||
AsSNES.PutSettings(s);
|
|
||||||
GlobalWin.OSD.AddMessage(s.ShowOBJ_2 ? "OBJ 3 Layer On" : "OBJ 3 Layer Off");
|
|
||||||
}
|
|
||||||
|
|
||||||
private void SNES_ToggleOBJ4(bool? setto = null)
|
|
||||||
{
|
|
||||||
if (!(Emulator is LibsnesCore))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var s = AsSNES.GetSettings();
|
|
||||||
if (setto.HasValue)
|
|
||||||
{
|
|
||||||
s.ShowOBJ_3 = setto.Value;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
s.ShowOBJ_3 ^= true;
|
|
||||||
}
|
|
||||||
|
|
||||||
AsSNES.PutSettings(s);
|
|
||||||
GlobalWin.OSD.AddMessage(s.ShowOBJ_3 ? "OBJ 4 Layer On" : "OBJ 4 Layer Off");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool RunLibretroCoreChooser()
|
public bool RunLibretroCoreChooser()
|
||||||
|
@ -1685,7 +1636,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
|
|
||||||
// GBA meteor core might not know how big the saveram ought to be, so just send it the whole file
|
// GBA meteor core might not know how big the saveram ought to be, so just send it the whole file
|
||||||
// GBA vba-next core will try to eat anything, regardless of size
|
// GBA vba-next core will try to eat anything, regardless of size
|
||||||
if (Emulator is VBANext || Emulator is MGBAHawk)
|
if (Emulator is VBANext || Emulator is MGBAHawk || Emulator is NeoGeoPort)
|
||||||
{
|
{
|
||||||
sram = File.ReadAllBytes(PathManager.SaveRamPath(Global.Game));
|
sram = File.ReadAllBytes(PathManager.SaveRamPath(Global.Game));
|
||||||
}
|
}
|
||||||
|
@ -1749,7 +1700,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
{
|
{
|
||||||
writer.Write(saveram, 0, saveram.Length);
|
writer.Write(saveram, 0, saveram.Length);
|
||||||
}
|
}
|
||||||
|
|
||||||
writer.Close();
|
writer.Close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1797,6 +1748,9 @@ namespace BizHawk.Client.EmuHawk
|
||||||
AppleSubMenu.Visible = false;
|
AppleSubMenu.Visible = false;
|
||||||
C64SubMenu.Visible = false;
|
C64SubMenu.Visible = false;
|
||||||
IntvSubMenu.Visible = false;
|
IntvSubMenu.Visible = false;
|
||||||
|
virtualBoyToolStripMenuItem.Visible = false;
|
||||||
|
sNESToolStripMenuItem.Visible = false;
|
||||||
|
neoGeoPocketToolStripMenuItem.Visible = false;
|
||||||
|
|
||||||
switch (system)
|
switch (system)
|
||||||
{
|
{
|
||||||
|
@ -1844,17 +1798,15 @@ namespace BizHawk.Client.EmuHawk
|
||||||
break;
|
break;
|
||||||
case "SNES":
|
case "SNES":
|
||||||
case "SGB":
|
case "SGB":
|
||||||
// TODO: fix SNES9x here
|
|
||||||
if (Emulator is LibsnesCore)
|
if (Emulator is LibsnesCore)
|
||||||
{
|
{
|
||||||
SNESSubMenu.Text = ((LibsnesCore)Emulator).IsSGB ? "&SGB" : "&SNES";
|
SNESSubMenu.Text = ((LibsnesCore)Emulator).IsSGB ? "&SGB" : "&SNES";
|
||||||
SNESSubMenu.Visible = true;
|
SNESSubMenu.Visible = true;
|
||||||
}
|
}
|
||||||
else
|
else if (Emulator is Snes9x)
|
||||||
{
|
{
|
||||||
SNESSubMenu.Visible = false;
|
sNESToolStripMenuItem.Visible = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case "Coleco":
|
case "Coleco":
|
||||||
ColecoSubMenu.Visible = true;
|
ColecoSubMenu.Visible = true;
|
||||||
|
@ -1880,6 +1832,12 @@ namespace BizHawk.Client.EmuHawk
|
||||||
case "INTV":
|
case "INTV":
|
||||||
IntvSubMenu.Visible = true;
|
IntvSubMenu.Visible = true;
|
||||||
break;
|
break;
|
||||||
|
case "VB":
|
||||||
|
virtualBoyToolStripMenuItem.Visible = true;
|
||||||
|
break;
|
||||||
|
case "NGP":
|
||||||
|
neoGeoPocketToolStripMenuItem.Visible = true;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2123,7 +2081,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
if (VersionInfo.DeveloperBuild)
|
if (VersionInfo.DeveloperBuild)
|
||||||
{
|
{
|
||||||
return FormatFilter(
|
return FormatFilter(
|
||||||
"Rom Files", "*.nes;*.fds;*.unf;*.sms;*.gg;*.sg;*.pce;*.sgx;*.bin;*.smd;*.rom;*.a26;*.a78;*.lnx;*.m3u;*.cue;*.ccd;*.exe;*.gb;*.gbc;*.gba;*.gen;*.md;*.col;*.int;*.smc;*.sfc;*.prg;*.d64;*.g64;*.crt;*.tap;*.sgb;*.xml;*.z64;*.v64;*.n64;*.ws;*.wsc;*.dsk;*.do;*.po;*.psf;*.minipsf;*.nsf;%ARCH%",
|
"Rom Files", "*.nes;*.fds;*.unf;*.sms;*.gg;*.sg;*.pce;*.sgx;*.bin;*.smd;*.rom;*.a26;*.a78;*.lnx;*.m3u;*.cue;*.ccd;*.exe;*.gb;*.gbc;*.gba;*.gen;*.md;*.col;*.int;*.smc;*.sfc;*.prg;*.d64;*.g64;*.crt;*.tap;*.sgb;*.xml;*.z64;*.v64;*.n64;*.ws;*.wsc;*.dsk;*.do;*.po;*.vb;*.ngp;*.ngc;*.psf;*.minipsf;*.nsf;%ARCH%",
|
||||||
"Music Files", "*.psf;*.minipsf;*.sid;*.nsf",
|
"Music Files", "*.psf;*.minipsf;*.sid;*.nsf",
|
||||||
"Disc Images", "*.cue;*.ccd;*.m3u",
|
"Disc Images", "*.cue;*.ccd;*.m3u",
|
||||||
"NES", "*.nes;*.fds;*.unf;*.nsf;%ARCH%",
|
"NES", "*.nes;*.fds;*.unf;*.nsf;%ARCH%",
|
||||||
|
@ -2149,11 +2107,13 @@ namespace BizHawk.Client.EmuHawk
|
||||||
"Nintendo 64", "*.z64;*.v64;*.n64",
|
"Nintendo 64", "*.z64;*.v64;*.n64",
|
||||||
"WonderSwan", "*.ws;*.wsc;%ARCH%",
|
"WonderSwan", "*.ws;*.wsc;%ARCH%",
|
||||||
"Apple II", "*.dsk;*.do;*.po;%ARCH%",
|
"Apple II", "*.dsk;*.do;*.po;%ARCH%",
|
||||||
|
"Virtual Boy", "*.vb;%ARCH%",
|
||||||
|
"Neo Geo Pocket", "*.ngp;*.ngc;%ARCH%",
|
||||||
"All Files", "*.*");
|
"All Files", "*.*");
|
||||||
}
|
}
|
||||||
|
|
||||||
return FormatFilter(
|
return FormatFilter(
|
||||||
"Rom Files", "*.nes;*.fds;*.unf;*.sms;*.gg;*.sg;*.gb;*.gbc;*.gba;*.pce;*.sgx;*.bin;*.smd;*.gen;*.md;*.smc;*.sfc;*.a26;*.a78;*.lnx;*.col;*.int;*.rom;*.m3u;*.cue;*.ccd;*.sgb;*.z64;*.v64;*.n64;*.ws;*.wsc;*.xml;*.dsk;*.do;*.po;*.psf;*.prg;*.d64;*.g64;*.minipsf;*.nsf;%ARCH%",
|
"Rom Files", "*.nes;*.fds;*.unf;*.sms;*.gg;*.sg;*.gb;*.gbc;*.gba;*.pce;*.sgx;*.bin;*.smd;*.gen;*.md;*.smc;*.sfc;*.a26;*.a78;*.lnx;*.col;*.int;*.rom;*.m3u;*.cue;*.ccd;*.sgb;*.z64;*.v64;*.n64;*.ws;*.wsc;*.xml;*.dsk;*.do;*.po;*.psf;*.ngp;*.ngc;*.prg;*.d64;*.g64;*.minipsf;*.nsf;%ARCH%",
|
||||||
"Disc Images", "*.cue;*.ccd;*.m3u",
|
"Disc Images", "*.cue;*.ccd;*.m3u",
|
||||||
"NES", "*.nes;*.fds;*.unf;*.nsf;%ARCH%",
|
"NES", "*.nes;*.fds;*.unf;*.nsf;%ARCH%",
|
||||||
"Super NES", "*.smc;*.sfc;*.xml;%ARCH%",
|
"Super NES", "*.smc;*.sfc;*.xml;%ARCH%",
|
||||||
|
@ -2175,6 +2135,8 @@ namespace BizHawk.Client.EmuHawk
|
||||||
"Genesis", "*.gen;*.md;*.smd;*.bin;*.cue;*.ccd;%ARCH%",
|
"Genesis", "*.gen;*.md;*.smd;*.bin;*.cue;*.ccd;%ARCH%",
|
||||||
"WonderSwan", "*.ws;*.wsc;%ARCH%",
|
"WonderSwan", "*.ws;*.wsc;%ARCH%",
|
||||||
"Apple II", "*.dsk;*.do;*.po;%ARCH%",
|
"Apple II", "*.dsk;*.do;*.po;%ARCH%",
|
||||||
|
"Virtual Boy", "*.vb;%ARCH%",
|
||||||
|
"Neo Geo Pocket", "*.ngp;*.ngc;%ARCH%",
|
||||||
"Commodore 64", "*.prg; *.d64, *.g64; *.crt; *.tap;%ARCH%",
|
"Commodore 64", "*.prg; *.d64, *.g64; *.crt; *.tap;%ARCH%",
|
||||||
"All Files", "*.*");
|
"All Files", "*.*");
|
||||||
}
|
}
|
||||||
|
@ -3158,6 +3120,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
videowritername = Global.Config.VideoWriter;
|
videowritername = Global.Config.VideoWriter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_dumpaudiosync = Global.Config.VideoWriterAudioSync;
|
||||||
if (unattended && !string.IsNullOrEmpty(videowritername))
|
if (unattended && !string.IsNullOrEmpty(videowritername))
|
||||||
{
|
{
|
||||||
aw = VideoWriterInventory.GetVideoWriter(videowritername);
|
aw = VideoWriterInventory.GetVideoWriter(videowritername);
|
||||||
|
@ -3165,7 +3128,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
aw = VideoWriterChooserForm.DoVideoWriterChoserDlg(VideoWriterInventory.GetAllWriters(), this,
|
aw = VideoWriterChooserForm.DoVideoWriterChoserDlg(VideoWriterInventory.GetAllWriters(), this,
|
||||||
out _avwriterResizew, out _avwriterResizeh, out _avwriterpad, out _dumpaudiosync);
|
out _avwriterResizew, out _avwriterResizeh, out _avwriterpad, ref _dumpaudiosync);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (aw == null)
|
if (aw == null)
|
||||||
|
@ -3402,7 +3365,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
output = new BmpVideoProvider(bmpout);
|
output = new BmpVideoProvider(bmpout, _currentVideoProvider.VsyncNumerator, _currentVideoProvider.VsyncDenominator);
|
||||||
disposableOutput = (IDisposable)output;
|
disposableOutput = (IDisposable)output;
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
|
@ -3538,7 +3501,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
public IOpenAdvanced OpenAdvanced { get; set; }
|
public IOpenAdvanced OpenAdvanced { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
private LoadRomArgs _currentLoadRomArgs;
|
private LoadRomArgs _currentLoadRomArgs;
|
||||||
|
|
||||||
// Still needs a good bit of refactoring
|
// Still needs a good bit of refactoring
|
||||||
public bool LoadRom(string path, LoadRomArgs args)
|
public bool LoadRom(string path, LoadRomArgs args)
|
||||||
|
@ -4293,6 +4256,21 @@ namespace BizHawk.Client.EmuHawk
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void preferencesToolStripMenuItem1_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
GenericCoreConfig.DoDialog(this, "VirtualBoy Settings");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void preferencesToolStripMenuItem_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
GenericCoreConfig.DoDialog(this, "Snes9x Settings");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void preferencesToolStripMenuItem2_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
GenericCoreConfig.DoDialog(this, "NeoPop Settings");
|
||||||
|
}
|
||||||
|
|
||||||
private bool Rewind(ref bool runFrame, long currentTimestamp, out bool returnToRecording)
|
private bool Rewind(ref bool runFrame, long currentTimestamp, out bool returnToRecording)
|
||||||
{
|
{
|
||||||
var isRewinding = false;
|
var isRewinding = false;
|
||||||
|
|
|
@ -69,11 +69,33 @@ namespace BizHawk.Client.EmuHawk.Properties {
|
||||||
return ((System.Drawing.Bitmap)(obj));
|
return ((System.Drawing.Bitmap)(obj));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
internal static System.Drawing.Bitmap add {
|
internal static System.Drawing.Bitmap VBoyController {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("VBoyController", resourceCulture);
|
||||||
|
return ((System.Drawing.Bitmap)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||||
|
/// </summary>
|
||||||
|
internal static System.Drawing.Bitmap NGPController
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
object obj = ResourceManager.GetObject("NGPController", resourceCulture);
|
||||||
|
return ((System.Drawing.Bitmap)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||||
|
/// </summary>
|
||||||
|
internal static System.Drawing.Bitmap add {
|
||||||
get {
|
get {
|
||||||
object obj = ResourceManager.GetObject("add", resourceCulture);
|
object obj = ResourceManager.GetObject("add", resourceCulture);
|
||||||
return ((System.Drawing.Bitmap)(obj));
|
return ((System.Drawing.Bitmap)(obj));
|
||||||
|
|
|
@ -142,6 +142,9 @@
|
||||||
<data name="A78Joystick" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
<data name="A78Joystick" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
<value>..\images\ControllerImages\A78Joystick.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
<value>..\images\ControllerImages\A78Joystick.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="VBoyController" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\images\ControllerImages\VBoyController.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
<data name="cdlogger" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
<data name="cdlogger" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
<value>..\images\cdlogger.ico;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
<value>..\images\cdlogger.ico;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
</data>
|
</data>
|
||||||
|
@ -1557,4 +1560,7 @@
|
||||||
<data name="WSW" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
<data name="WSW" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
<value>..\images\WSW.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
<value>..\images\WSW.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="NGPController" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\images\ControllerImages\NGPController.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
|
@ -0,0 +1,3 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<configuration>
|
||||||
|
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1"/></startup></configuration>
|
|
@ -14,7 +14,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
{
|
{
|
||||||
public partial class ControllerConfig : Form
|
public partial class ControllerConfig : Form
|
||||||
{
|
{
|
||||||
private const int MAXPLAYERS = 8;
|
private const int MaxPlayers = 12;
|
||||||
private static readonly Dictionary<string, Bitmap> ControllerImages = new Dictionary<string, Bitmap>();
|
private static readonly Dictionary<string, Bitmap> ControllerImages = new Dictionary<string, Bitmap>();
|
||||||
private readonly ControllerDefinition _theDefinition;
|
private readonly ControllerDefinition _theDefinition;
|
||||||
|
|
||||||
|
@ -45,6 +45,8 @@ namespace BizHawk.Client.EmuHawk
|
||||||
ControllerImages.Add("PSX Gamepad Controller", Properties.Resources.PSX_Original_Controller);
|
ControllerImages.Add("PSX Gamepad Controller", Properties.Resources.PSX_Original_Controller);
|
||||||
ControllerImages.Add("PSX DualShock Controller", Properties.Resources.psx_dualshock);
|
ControllerImages.Add("PSX DualShock Controller", Properties.Resources.psx_dualshock);
|
||||||
ControllerImages.Add("Apple IIe Keyboard", Properties.Resources.AppleIIKeyboard);
|
ControllerImages.Add("Apple IIe Keyboard", Properties.Resources.AppleIIKeyboard);
|
||||||
|
ControllerImages.Add("VirtualBoy Controller", Properties.Resources.VBoyController);
|
||||||
|
ControllerImages.Add("NeoGeo Portable Controller", Properties.Resources.NGPController);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -107,7 +109,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
}
|
}
|
||||||
|
|
||||||
// split the list of all settings into buckets by player number
|
// split the list of all settings into buckets by player number
|
||||||
var buckets = new List<string>[MAXPLAYERS + 1];
|
var buckets = new List<string>[MaxPlayers + 1];
|
||||||
var categoryBuckets = new WorkingDictionary<string, List<string>>();
|
var categoryBuckets = new WorkingDictionary<string, List<string>>();
|
||||||
for (var i = 0; i < buckets.Length; i++)
|
for (var i = 0; i < buckets.Length; i++)
|
||||||
{
|
{
|
||||||
|
@ -120,7 +122,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
foreach (var button in controllerButtons)
|
foreach (var button in controllerButtons)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
for (i = 1; i <= MAXPLAYERS; i++)
|
for (i = MaxPlayers; i > 0; i--)
|
||||||
{
|
{
|
||||||
if (button.StartsWith("P" + i))
|
if (button.StartsWith("P" + i))
|
||||||
{
|
{
|
||||||
|
@ -128,14 +130,19 @@ namespace BizHawk.Client.EmuHawk
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i > MAXPLAYERS) // couldn't find
|
if (i > MaxPlayers) // couldn't find
|
||||||
{
|
{
|
||||||
i = 0;
|
i = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (categoryLabels.ContainsKey(button))
|
if (categoryLabels.ContainsKey(button))
|
||||||
|
{
|
||||||
categoryBuckets[categoryLabels[button]].Add(button);
|
categoryBuckets[categoryLabels[button]].Add(button);
|
||||||
else buckets[i].Add(button);
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
buckets[i].Add(button);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (buckets[0].Count == controllerButtons.Count)
|
if (buckets[0].Count == controllerButtons.Count)
|
||||||
|
@ -149,7 +156,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
var tt = new TabControl { Dock = DockStyle.Fill };
|
var tt = new TabControl { Dock = DockStyle.Fill };
|
||||||
dest.Controls.Add(tt);
|
dest.Controls.Add(tt);
|
||||||
int pageidx = 0;
|
int pageidx = 0;
|
||||||
for (int i = 1; i <= MAXPLAYERS; i++)
|
for (int i = 1; i <= MaxPlayers; i++)
|
||||||
{
|
{
|
||||||
if (buckets[i].Count > 0)
|
if (buckets[i].Count > 0)
|
||||||
{
|
{
|
||||||
|
|
|
@ -28,7 +28,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
if (PlatformDropdown.SelectedIndex > 0)
|
if (PlatformDropdown.SelectedIndex > 0)
|
||||||
{
|
{
|
||||||
return _availableSystems
|
return _availableSystems
|
||||||
.First(x => x.SystemId == PlatformDropdown.SelectedItem.ToString()).FullName;
|
.First(x => x.FullName == PlatformDropdown.SelectedItem.ToString()).SystemId;
|
||||||
}
|
}
|
||||||
|
|
||||||
return "";
|
return "";
|
||||||
|
|
|
@ -74,7 +74,8 @@
|
||||||
this.propertyGrid1.PropertySort = System.Windows.Forms.PropertySort.NoSort;
|
this.propertyGrid1.PropertySort = System.Windows.Forms.PropertySort.NoSort;
|
||||||
this.propertyGrid1.Size = new System.Drawing.Size(306, 299);
|
this.propertyGrid1.Size = new System.Drawing.Size(306, 299);
|
||||||
this.propertyGrid1.TabIndex = 0;
|
this.propertyGrid1.TabIndex = 0;
|
||||||
this.propertyGrid1.ToolbarVisible = false;
|
this.propertyGrid1.ToolbarVisible = false;
|
||||||
|
this.propertyGrid1.PropertyValueChanged += new System.Windows.Forms.PropertyValueChangedEventHandler(this.propertyGrid1_PropertyValueChanged);
|
||||||
//
|
//
|
||||||
// tabPage2
|
// tabPage2
|
||||||
//
|
//
|
||||||
|
@ -152,7 +153,6 @@
|
||||||
this.tabPage1.ResumeLayout(false);
|
this.tabPage1.ResumeLayout(false);
|
||||||
this.tabPage2.ResumeLayout(false);
|
this.tabPage2.ResumeLayout(false);
|
||||||
this.ResumeLayout(false);
|
this.ResumeLayout(false);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
|
@ -10,6 +10,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
private object _s;
|
private object _s;
|
||||||
private object _ss;
|
private object _ss;
|
||||||
private bool _syncsettingschanged;
|
private bool _syncsettingschanged;
|
||||||
|
bool settingschanged = false;
|
||||||
|
|
||||||
private GenericCoreConfig(bool ignoresettings, bool ignoresyncsettings)
|
private GenericCoreConfig(bool ignoresettings, bool ignoresyncsettings)
|
||||||
{
|
{
|
||||||
|
@ -58,10 +59,9 @@ namespace BizHawk.Client.EmuHawk
|
||||||
|
|
||||||
private void OkBtn_Click(object sender, EventArgs e)
|
private void OkBtn_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
var settable = new SettingsAdapter(Global.Emulator);
|
if (_s != null && settingschanged)
|
||||||
if (_s != null && settable.HasSettings)
|
|
||||||
{
|
{
|
||||||
settable.PutSettings(_s);
|
GlobalWin.MainForm.PutCoreSettings(_s);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_ss != null && _syncsettingschanged)
|
if (_ss != null && _syncsettingschanged)
|
||||||
|
@ -114,5 +114,10 @@ namespace BizHawk.Client.EmuHawk
|
||||||
_syncsettingschanged = true;
|
_syncsettingschanged = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void propertyGrid1_PropertyValueChanged(object s, PropertyValueChangedEventArgs e)
|
||||||
|
{
|
||||||
|
settingschanged = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -33,22 +33,6 @@ namespace BizHawk.Client.EmuHawk
|
||||||
"Custom"
|
"Custom"
|
||||||
};
|
};
|
||||||
|
|
||||||
private static readonly string[] ValidResolutionsJabo =
|
|
||||||
{
|
|
||||||
"320 x 240",
|
|
||||||
"400 x 300",
|
|
||||||
"512 x 384",
|
|
||||||
"640 x 480",
|
|
||||||
"800 x 600",
|
|
||||||
"1024 x 768",
|
|
||||||
"1152 x 864",
|
|
||||||
"1280 x 960",
|
|
||||||
"1600 x 1200",
|
|
||||||
"848 x 480",
|
|
||||||
"1024 x 576",
|
|
||||||
"1380 x 768"
|
|
||||||
};
|
|
||||||
|
|
||||||
private bool _programmaticallyChangingPluginComboBox = false;
|
private bool _programmaticallyChangingPluginComboBox = false;
|
||||||
|
|
||||||
public N64VideoPluginconfig()
|
public N64VideoPluginconfig()
|
||||||
|
@ -149,41 +133,11 @@ namespace BizHawk.Client.EmuHawk
|
||||||
case "Glide64mk2":
|
case "Glide64mk2":
|
||||||
_ss.VideoPlugin = PluginType.GlideMk2;
|
_ss.VideoPlugin = PluginType.GlideMk2;
|
||||||
break;
|
break;
|
||||||
case "Jabo 1.6.1":
|
|
||||||
_ss.VideoPlugin = PluginType.Jabo;
|
|
||||||
break;
|
|
||||||
case "GLideN64":
|
case "GLideN64":
|
||||||
_ss.VideoPlugin = PluginType.GLideN64;
|
_ss.VideoPlugin = PluginType.GLideN64;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Jabo
|
|
||||||
_ss.JaboPlugin.UseDefaultHacks = JaboUseForGameCheckbox.Checked;
|
|
||||||
|
|
||||||
_ss.JaboPlugin.clear_mode = JaboClearModeDropDown.SelectedItem
|
|
||||||
.ToString()
|
|
||||||
.GetEnumFromDescription<N64SyncSettings.N64JaboPluginSettings.Direct3DClearMode>();
|
|
||||||
|
|
||||||
_ss.JaboPlugin.anisotropic_level = JaboAnisotropicFilteringLevelDropdown.SelectedItem
|
|
||||||
.ToString()
|
|
||||||
.GetEnumFromDescription<N64SyncSettings.N64JaboPluginSettings.ANISOTROPIC_FILTERING_LEVEL>();
|
|
||||||
|
|
||||||
_ss.JaboPlugin.antialiasing_level = JaboAntialiasingLevelDropdown.SelectedItem
|
|
||||||
.ToString()
|
|
||||||
.GetEnumFromDescription<N64SyncSettings.N64JaboPluginSettings.ANTIALIASING_LEVEL>();
|
|
||||||
|
|
||||||
_ss.JaboPlugin.brightness = (int)JaboBrightnessBox.Value;
|
|
||||||
_ss.JaboPlugin.super2xsal = JaboSuper2xsalCheckbox.Checked;
|
|
||||||
_ss.JaboPlugin.texture_filter = JaboTextureFilterCheckbox.Checked;
|
|
||||||
_ss.JaboPlugin.adjust_aspect_ratio = JaboAdjustAspectRatioCheckbox.Checked;
|
|
||||||
_ss.JaboPlugin.legacy_pixel_pipeline = JaboLegacyPixelPipelineCheckbox.Checked;
|
|
||||||
_ss.JaboPlugin.alpha_blending = JaboAlphaBlendingCheckbox.Checked;
|
|
||||||
_ss.JaboPlugin.direct3d_transformation_pipeline = JaboDirect3DPipelineCheckbox.Checked;
|
|
||||||
_ss.JaboPlugin.z_compare = JaboZCompareCheckbox.Checked;
|
|
||||||
_ss.JaboPlugin.copy_framebuffer = JaboCopyFrameBufferCheckbox.Checked;
|
|
||||||
_ss.JaboPlugin.resolution_width = JaboResolutionWidthBox.ToRawInt().Value;
|
|
||||||
_ss.JaboPlugin.resolution_height = JaboResolutionHeightBox.ToRawInt().Value;
|
|
||||||
|
|
||||||
// Rice
|
// Rice
|
||||||
_ss.RicePlugin.NormalAlphaBlender = RiceNormalAlphaBlender_CB.Checked;
|
_ss.RicePlugin.NormalAlphaBlender = RiceNormalAlphaBlender_CB.Checked;
|
||||||
_ss.RicePlugin.FastTextureLoading = RiceFastTextureLoading_CB.Checked;
|
_ss.RicePlugin.FastTextureLoading = RiceFastTextureLoading_CB.Checked;
|
||||||
|
@ -540,9 +494,6 @@ namespace BizHawk.Client.EmuHawk
|
||||||
case PluginType.Rice:
|
case PluginType.Rice:
|
||||||
PluginComboBox.Text = "Rice";
|
PluginComboBox.Text = "Rice";
|
||||||
break;
|
break;
|
||||||
case PluginType.Jabo:
|
|
||||||
PluginComboBox.Text = "Jabo 1.6.1";
|
|
||||||
break;
|
|
||||||
case PluginType.GLideN64:
|
case PluginType.GLideN64:
|
||||||
PluginComboBox.Text = "GLideN64";
|
PluginComboBox.Text = "GLideN64";
|
||||||
break;
|
break;
|
||||||
|
@ -566,29 +517,6 @@ namespace BizHawk.Client.EmuHawk
|
||||||
ShowCustomVideoResolutionControls();
|
ShowCustomVideoResolutionControls();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Jabo
|
|
||||||
JaboUseForGameCheckbox.Checked = _ss.JaboPlugin.UseDefaultHacks;
|
|
||||||
JaboClearModeDropDown
|
|
||||||
.PopulateFromEnum<N64SyncSettings.N64JaboPluginSettings.Direct3DClearMode>(_ss.JaboPlugin.clear_mode);
|
|
||||||
JaboResolutionWidthBox.Text = _ss.JaboPlugin.resolution_width.ToString();
|
|
||||||
JaboResolutionHeightBox.Text = _ss.JaboPlugin.resolution_height.ToString();
|
|
||||||
|
|
||||||
JaboUpdateHacksSection();
|
|
||||||
|
|
||||||
JaboAnisotropicFilteringLevelDropdown
|
|
||||||
.PopulateFromEnum<N64SyncSettings.N64JaboPluginSettings.ANISOTROPIC_FILTERING_LEVEL>(_ss.JaboPlugin.anisotropic_level);
|
|
||||||
JaboAntialiasingLevelDropdown
|
|
||||||
.PopulateFromEnum<N64SyncSettings.N64JaboPluginSettings.ANTIALIASING_LEVEL>(_ss.JaboPlugin.antialiasing_level);
|
|
||||||
JaboBrightnessBox.Value = _ss.JaboPlugin.brightness;
|
|
||||||
JaboSuper2xsalCheckbox.Checked = _ss.JaboPlugin.super2xsal;
|
|
||||||
JaboTextureFilterCheckbox.Checked = _ss.JaboPlugin.texture_filter;
|
|
||||||
JaboAdjustAspectRatioCheckbox.Checked = _ss.JaboPlugin.adjust_aspect_ratio;
|
|
||||||
JaboLegacyPixelPipelineCheckbox.Checked = _ss.JaboPlugin.legacy_pixel_pipeline;
|
|
||||||
JaboAlphaBlendingCheckbox.Checked = _ss.JaboPlugin.alpha_blending;
|
|
||||||
JaboDirect3DPipelineCheckbox.Checked = _ss.JaboPlugin.direct3d_transformation_pipeline;
|
|
||||||
JaboZCompareCheckbox.Checked = _ss.JaboPlugin.z_compare;
|
|
||||||
JaboCopyFrameBufferCheckbox.Checked = _ss.JaboPlugin.copy_framebuffer;
|
|
||||||
|
|
||||||
// Rice
|
// Rice
|
||||||
RiceNormalAlphaBlender_CB.Checked = _ss.RicePlugin.NormalAlphaBlender;
|
RiceNormalAlphaBlender_CB.Checked = _ss.RicePlugin.NormalAlphaBlender;
|
||||||
RiceFastTextureLoading_CB.Checked = _ss.RicePlugin.FastTextureLoading;
|
RiceFastTextureLoading_CB.Checked = _ss.RicePlugin.FastTextureLoading;
|
||||||
|
@ -1223,18 +1151,10 @@ namespace BizHawk.Client.EmuHawk
|
||||||
oldSizeY = int.Parse(VideoResolutionYTextBox.Text);
|
oldSizeY = int.Parse(VideoResolutionYTextBox.Text);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PluginComboBox.Text == "Jabo 1.6.1")
|
|
||||||
{
|
// Change resolution list to the rest
|
||||||
// Change resolution list to jabo
|
VideoResolutionComboBox.Items.Clear();
|
||||||
VideoResolutionComboBox.Items.Clear();
|
VideoResolutionComboBox.Items.AddRange(ValidResolutions);
|
||||||
VideoResolutionComboBox.Items.AddRange(ValidResolutionsJabo);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Change resolution list to the rest
|
|
||||||
VideoResolutionComboBox.Items.Clear();
|
|
||||||
VideoResolutionComboBox.Items.AddRange(ValidResolutions);
|
|
||||||
}
|
|
||||||
|
|
||||||
// If the given resolution is in the table, pick it.
|
// If the given resolution is in the table, pick it.
|
||||||
// Otherwise find a best fit
|
// Otherwise find a best fit
|
||||||
|
@ -1272,15 +1192,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
|
|
||||||
if (bestFit < 0)
|
if (bestFit < 0)
|
||||||
{
|
{
|
||||||
if (PluginComboBox.Text == "Jabo 1.6.1")
|
VideoResolutionComboBox.SelectedIndex = VideoResolutionComboBox.Items.Count - 1;
|
||||||
{
|
|
||||||
// Pick 8 to avoid picking the widescreen resolutions
|
|
||||||
VideoResolutionComboBox.SelectedIndex = 8;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
VideoResolutionComboBox.SelectedIndex = VideoResolutionComboBox.Items.Count - 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1289,26 +1201,6 @@ namespace BizHawk.Client.EmuHawk
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void JaboUseForGameCheckbox_CheckedChanged(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
JaboPerGameHacksGroupBox.Controls
|
|
||||||
.OfType<Control>()
|
|
||||||
.ToList()
|
|
||||||
.ForEach(c => c.Enabled = !JaboUseForGameCheckbox.Checked);
|
|
||||||
|
|
||||||
JaboUpdateHacksSection();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void JaboUpdateHacksSection()
|
|
||||||
{
|
|
||||||
if (JaboUseForGameCheckbox.Checked)
|
|
||||||
{
|
|
||||||
JaboResolutionWidthBox.Text = GetIntFromDB("Jabo_Resolution_Width", -1).ToString();
|
|
||||||
JaboResolutionHeightBox.Text = GetIntFromDB("Jabo_Resolution_Height", -1).ToString();
|
|
||||||
JaboClearModeDropDown.SelectedItem = ((N64SyncSettings.N64JaboPluginSettings.Direct3DClearMode)GetIntFromDB("Jabo_Clear_Frame", 0)).GetDescription();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void VideoResolutionComboBox_SelectedIndexChanged(object sender, EventArgs e)
|
private void VideoResolutionComboBox_SelectedIndexChanged(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if (VideoResolutionComboBox.Text == "Custom")
|
if (VideoResolutionComboBox.Text == "Custom")
|
||||||
|
|
|
@ -1,402 +0,0 @@
|
||||||
namespace BizHawk.Client.EmuHawk
|
|
||||||
{
|
|
||||||
partial class NewN64PluginSettings
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Required designer variable.
|
|
||||||
/// </summary>
|
|
||||||
private System.ComponentModel.IContainer components = null;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Clean up any resources being used.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
|
||||||
protected override void Dispose(bool disposing)
|
|
||||||
{
|
|
||||||
if (disposing && (components != null))
|
|
||||||
{
|
|
||||||
components.Dispose();
|
|
||||||
}
|
|
||||||
base.Dispose(disposing);
|
|
||||||
}
|
|
||||||
|
|
||||||
#region Windows Form Designer generated code
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Required method for Designer support - do not modify
|
|
||||||
/// the contents of this method with the code editor.
|
|
||||||
/// </summary>
|
|
||||||
private void InitializeComponent()
|
|
||||||
{
|
|
||||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(NewN64PluginSettings));
|
|
||||||
this.PluginTabs = new System.Windows.Forms.TabControl();
|
|
||||||
this.GlobalTab = new System.Windows.Forms.TabPage();
|
|
||||||
this.VideoResolutionYTextBox = new System.Windows.Forms.TextBox();
|
|
||||||
this.LabelVideoResolutionY = new System.Windows.Forms.Label();
|
|
||||||
this.VideoResolutionXTextBox = new System.Windows.Forms.TextBox();
|
|
||||||
this.LabelVideoResolutionX = new System.Windows.Forms.Label();
|
|
||||||
this.label49 = new System.Windows.Forms.Label();
|
|
||||||
this.RspTypeDropdown = new System.Windows.Forms.ComboBox();
|
|
||||||
this.label48 = new System.Windows.Forms.Label();
|
|
||||||
this.CoreTypeDropdown = new System.Windows.Forms.ComboBox();
|
|
||||||
this.label2 = new System.Windows.Forms.Label();
|
|
||||||
this.VideoResolutionComboBox = new System.Windows.Forms.ComboBox();
|
|
||||||
this.PluginComboBox = new System.Windows.Forms.ComboBox();
|
|
||||||
this.label1 = new System.Windows.Forms.Label();
|
|
||||||
this.RiceTab = new System.Windows.Forms.TabPage();
|
|
||||||
this.RicePropertyGrid = new System.Windows.Forms.PropertyGrid();
|
|
||||||
this.Glide64mk2 = new System.Windows.Forms.TabPage();
|
|
||||||
this.Glidemk2PropertyGrid = new System.Windows.Forms.PropertyGrid();
|
|
||||||
this.Glide64Tab = new System.Windows.Forms.TabPage();
|
|
||||||
this.GlidePropertyGrid = new System.Windows.Forms.PropertyGrid();
|
|
||||||
this.JaboTab = new System.Windows.Forms.TabPage();
|
|
||||||
this.JaboPropertyGrid = new System.Windows.Forms.PropertyGrid();
|
|
||||||
this.SaveBtn = new System.Windows.Forms.Button();
|
|
||||||
this.CancelBtn = new System.Windows.Forms.Button();
|
|
||||||
this.PluginTabs.SuspendLayout();
|
|
||||||
this.GlobalTab.SuspendLayout();
|
|
||||||
this.RiceTab.SuspendLayout();
|
|
||||||
this.Glide64mk2.SuspendLayout();
|
|
||||||
this.Glide64Tab.SuspendLayout();
|
|
||||||
this.JaboTab.SuspendLayout();
|
|
||||||
this.SuspendLayout();
|
|
||||||
//
|
|
||||||
// PluginTabs
|
|
||||||
//
|
|
||||||
this.PluginTabs.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
|
||||||
| System.Windows.Forms.AnchorStyles.Left)
|
|
||||||
| System.Windows.Forms.AnchorStyles.Right)));
|
|
||||||
this.PluginTabs.Controls.Add(this.GlobalTab);
|
|
||||||
this.PluginTabs.Controls.Add(this.RiceTab);
|
|
||||||
this.PluginTabs.Controls.Add(this.Glide64mk2);
|
|
||||||
this.PluginTabs.Controls.Add(this.Glide64Tab);
|
|
||||||
this.PluginTabs.Controls.Add(this.JaboTab);
|
|
||||||
this.PluginTabs.Location = new System.Drawing.Point(12, 12);
|
|
||||||
this.PluginTabs.Name = "PluginTabs";
|
|
||||||
this.PluginTabs.SelectedIndex = 0;
|
|
||||||
this.PluginTabs.Size = new System.Drawing.Size(580, 468);
|
|
||||||
this.PluginTabs.TabIndex = 0;
|
|
||||||
//
|
|
||||||
// GlobalTab
|
|
||||||
//
|
|
||||||
this.GlobalTab.Controls.Add(this.VideoResolutionYTextBox);
|
|
||||||
this.GlobalTab.Controls.Add(this.LabelVideoResolutionY);
|
|
||||||
this.GlobalTab.Controls.Add(this.VideoResolutionXTextBox);
|
|
||||||
this.GlobalTab.Controls.Add(this.LabelVideoResolutionX);
|
|
||||||
this.GlobalTab.Controls.Add(this.label49);
|
|
||||||
this.GlobalTab.Controls.Add(this.RspTypeDropdown);
|
|
||||||
this.GlobalTab.Controls.Add(this.label48);
|
|
||||||
this.GlobalTab.Controls.Add(this.CoreTypeDropdown);
|
|
||||||
this.GlobalTab.Controls.Add(this.label2);
|
|
||||||
this.GlobalTab.Controls.Add(this.VideoResolutionComboBox);
|
|
||||||
this.GlobalTab.Controls.Add(this.PluginComboBox);
|
|
||||||
this.GlobalTab.Controls.Add(this.label1);
|
|
||||||
this.GlobalTab.Location = new System.Drawing.Point(4, 22);
|
|
||||||
this.GlobalTab.Name = "GlobalTab";
|
|
||||||
this.GlobalTab.Padding = new System.Windows.Forms.Padding(3);
|
|
||||||
this.GlobalTab.Size = new System.Drawing.Size(572, 442);
|
|
||||||
this.GlobalTab.TabIndex = 0;
|
|
||||||
this.GlobalTab.Text = "Global";
|
|
||||||
this.GlobalTab.UseVisualStyleBackColor = true;
|
|
||||||
//
|
|
||||||
// VideoResolutionYTextBox
|
|
||||||
//
|
|
||||||
this.VideoResolutionYTextBox.Location = new System.Drawing.Point(494, 91);
|
|
||||||
this.VideoResolutionYTextBox.MaxLength = 5;
|
|
||||||
this.VideoResolutionYTextBox.Name = "VideoResolutionYTextBox";
|
|
||||||
this.VideoResolutionYTextBox.Size = new System.Drawing.Size(35, 20);
|
|
||||||
this.VideoResolutionYTextBox.TabIndex = 108;
|
|
||||||
this.VideoResolutionYTextBox.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
|
|
||||||
this.VideoResolutionYTextBox.Visible = false;
|
|
||||||
//
|
|
||||||
// LabelVideoResolutionY
|
|
||||||
//
|
|
||||||
this.LabelVideoResolutionY.AutoSize = true;
|
|
||||||
this.LabelVideoResolutionY.Location = new System.Drawing.Point(447, 94);
|
|
||||||
this.LabelVideoResolutionY.Name = "LabelVideoResolutionY";
|
|
||||||
this.LabelVideoResolutionY.Size = new System.Drawing.Size(41, 13);
|
|
||||||
this.LabelVideoResolutionY.TabIndex = 107;
|
|
||||||
this.LabelVideoResolutionY.Text = "Height:";
|
|
||||||
this.LabelVideoResolutionY.Visible = false;
|
|
||||||
//
|
|
||||||
// VideoResolutionXTextBox
|
|
||||||
//
|
|
||||||
this.VideoResolutionXTextBox.Location = new System.Drawing.Point(402, 91);
|
|
||||||
this.VideoResolutionXTextBox.MaxLength = 5;
|
|
||||||
this.VideoResolutionXTextBox.Name = "VideoResolutionXTextBox";
|
|
||||||
this.VideoResolutionXTextBox.Size = new System.Drawing.Size(35, 20);
|
|
||||||
this.VideoResolutionXTextBox.TabIndex = 28;
|
|
||||||
this.VideoResolutionXTextBox.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
|
|
||||||
this.VideoResolutionXTextBox.Visible = false;
|
|
||||||
//
|
|
||||||
// LabelVideoResolutionX
|
|
||||||
//
|
|
||||||
this.LabelVideoResolutionX.AutoSize = true;
|
|
||||||
this.LabelVideoResolutionX.Location = new System.Drawing.Point(358, 94);
|
|
||||||
this.LabelVideoResolutionX.Name = "LabelVideoResolutionX";
|
|
||||||
this.LabelVideoResolutionX.Size = new System.Drawing.Size(38, 13);
|
|
||||||
this.LabelVideoResolutionX.TabIndex = 27;
|
|
||||||
this.LabelVideoResolutionX.Text = "Width:";
|
|
||||||
this.LabelVideoResolutionX.Visible = false;
|
|
||||||
//
|
|
||||||
// label49
|
|
||||||
//
|
|
||||||
this.label49.AutoSize = true;
|
|
||||||
this.label49.Location = new System.Drawing.Point(213, 13);
|
|
||||||
this.label49.Name = "label49";
|
|
||||||
this.label49.Size = new System.Drawing.Size(58, 13);
|
|
||||||
this.label49.TabIndex = 26;
|
|
||||||
this.label49.Text = "Rsp Plugin";
|
|
||||||
//
|
|
||||||
// RspTypeDropdown
|
|
||||||
//
|
|
||||||
this.RspTypeDropdown.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
|
||||||
this.RspTypeDropdown.FormattingEnabled = true;
|
|
||||||
this.RspTypeDropdown.Items.AddRange(new object[] {
|
|
||||||
"Pure Interpreter",
|
|
||||||
"Interpreter",
|
|
||||||
"DynaRec"});
|
|
||||||
this.RspTypeDropdown.Location = new System.Drawing.Point(216, 29);
|
|
||||||
this.RspTypeDropdown.Name = "RspTypeDropdown";
|
|
||||||
this.RspTypeDropdown.Size = new System.Drawing.Size(136, 21);
|
|
||||||
this.RspTypeDropdown.TabIndex = 25;
|
|
||||||
//
|
|
||||||
// label48
|
|
||||||
//
|
|
||||||
this.label48.AutoSize = true;
|
|
||||||
this.label48.Location = new System.Drawing.Point(17, 13);
|
|
||||||
this.label48.Name = "label48";
|
|
||||||
this.label48.Size = new System.Drawing.Size(56, 13);
|
|
||||||
this.label48.TabIndex = 24;
|
|
||||||
this.label48.Text = "Core Type";
|
|
||||||
//
|
|
||||||
// CoreTypeDropdown
|
|
||||||
//
|
|
||||||
this.CoreTypeDropdown.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
|
||||||
this.CoreTypeDropdown.FormattingEnabled = true;
|
|
||||||
this.CoreTypeDropdown.Items.AddRange(new object[] {
|
|
||||||
"Pure Interpreter",
|
|
||||||
"Interpreter",
|
|
||||||
"DynaRec"});
|
|
||||||
this.CoreTypeDropdown.Location = new System.Drawing.Point(20, 29);
|
|
||||||
this.CoreTypeDropdown.Name = "CoreTypeDropdown";
|
|
||||||
this.CoreTypeDropdown.Size = new System.Drawing.Size(136, 21);
|
|
||||||
this.CoreTypeDropdown.TabIndex = 19;
|
|
||||||
//
|
|
||||||
// label2
|
|
||||||
//
|
|
||||||
this.label2.AutoSize = true;
|
|
||||||
this.label2.Location = new System.Drawing.Point(213, 75);
|
|
||||||
this.label2.Name = "label2";
|
|
||||||
this.label2.Size = new System.Drawing.Size(87, 13);
|
|
||||||
this.label2.TabIndex = 23;
|
|
||||||
this.label2.Text = "Video Resolution";
|
|
||||||
//
|
|
||||||
// VideoResolutionComboBox
|
|
||||||
//
|
|
||||||
this.VideoResolutionComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
|
||||||
this.VideoResolutionComboBox.FormattingEnabled = true;
|
|
||||||
this.VideoResolutionComboBox.Items.AddRange(new object[] {
|
|
||||||
"320 x 240",
|
|
||||||
"400 x 300",
|
|
||||||
"480 x 360",
|
|
||||||
"512 x 384",
|
|
||||||
"640 x 480",
|
|
||||||
"800 x 600",
|
|
||||||
"1024 x 768",
|
|
||||||
"1152 x 864",
|
|
||||||
"1280 x 960",
|
|
||||||
"1400 x 1050",
|
|
||||||
"1600 x 1200",
|
|
||||||
"1920 x 1440",
|
|
||||||
"2048 x 1536",
|
|
||||||
"Custom"});
|
|
||||||
this.VideoResolutionComboBox.Location = new System.Drawing.Point(216, 91);
|
|
||||||
this.VideoResolutionComboBox.Name = "VideoResolutionComboBox";
|
|
||||||
this.VideoResolutionComboBox.Size = new System.Drawing.Size(136, 21);
|
|
||||||
this.VideoResolutionComboBox.TabIndex = 22;
|
|
||||||
this.VideoResolutionComboBox.SelectedIndexChanged += new System.EventHandler(this.VideoResolutionComboBox_SelectedIndexChanged);
|
|
||||||
//
|
|
||||||
// PluginComboBox
|
|
||||||
//
|
|
||||||
this.PluginComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
|
||||||
this.PluginComboBox.FormattingEnabled = true;
|
|
||||||
this.PluginComboBox.Items.AddRange(new object[] {
|
|
||||||
"Rice",
|
|
||||||
"Glide64",
|
|
||||||
"Glide64mk2",
|
|
||||||
"Jabo 1.6.1"});
|
|
||||||
this.PluginComboBox.Location = new System.Drawing.Point(20, 91);
|
|
||||||
this.PluginComboBox.Name = "PluginComboBox";
|
|
||||||
this.PluginComboBox.Size = new System.Drawing.Size(136, 21);
|
|
||||||
this.PluginComboBox.TabIndex = 21;
|
|
||||||
//
|
|
||||||
// label1
|
|
||||||
//
|
|
||||||
this.label1.AutoSize = true;
|
|
||||||
this.label1.Location = new System.Drawing.Point(17, 75);
|
|
||||||
this.label1.Name = "label1";
|
|
||||||
this.label1.Size = new System.Drawing.Size(99, 13);
|
|
||||||
this.label1.TabIndex = 20;
|
|
||||||
this.label1.Text = "Active Video Plugin";
|
|
||||||
//
|
|
||||||
// RiceTab
|
|
||||||
//
|
|
||||||
this.RiceTab.Controls.Add(this.RicePropertyGrid);
|
|
||||||
this.RiceTab.Location = new System.Drawing.Point(4, 22);
|
|
||||||
this.RiceTab.Name = "RiceTab";
|
|
||||||
this.RiceTab.Padding = new System.Windows.Forms.Padding(3);
|
|
||||||
this.RiceTab.Size = new System.Drawing.Size(572, 442);
|
|
||||||
this.RiceTab.TabIndex = 1;
|
|
||||||
this.RiceTab.Text = "Rice";
|
|
||||||
this.RiceTab.UseVisualStyleBackColor = true;
|
|
||||||
//
|
|
||||||
// RicePropertyGrid
|
|
||||||
//
|
|
||||||
this.RicePropertyGrid.CategoryForeColor = System.Drawing.SystemColors.InactiveCaptionText;
|
|
||||||
this.RicePropertyGrid.Dock = System.Windows.Forms.DockStyle.Fill;
|
|
||||||
this.RicePropertyGrid.Location = new System.Drawing.Point(3, 3);
|
|
||||||
this.RicePropertyGrid.Name = "RicePropertyGrid";
|
|
||||||
this.RicePropertyGrid.PropertySort = System.Windows.Forms.PropertySort.NoSort;
|
|
||||||
this.RicePropertyGrid.Size = new System.Drawing.Size(566, 436);
|
|
||||||
this.RicePropertyGrid.TabIndex = 1;
|
|
||||||
this.RicePropertyGrid.ToolbarVisible = false;
|
|
||||||
//
|
|
||||||
// Glide64mk2
|
|
||||||
//
|
|
||||||
this.Glide64mk2.Controls.Add(this.Glidemk2PropertyGrid);
|
|
||||||
this.Glide64mk2.Location = new System.Drawing.Point(4, 22);
|
|
||||||
this.Glide64mk2.Name = "Glide64mk2";
|
|
||||||
this.Glide64mk2.Size = new System.Drawing.Size(572, 442);
|
|
||||||
this.Glide64mk2.TabIndex = 3;
|
|
||||||
this.Glide64mk2.Text = "Glide64mk2";
|
|
||||||
this.Glide64mk2.UseVisualStyleBackColor = true;
|
|
||||||
//
|
|
||||||
// Glidemk2PropertyGrid
|
|
||||||
//
|
|
||||||
this.Glidemk2PropertyGrid.CategoryForeColor = System.Drawing.SystemColors.InactiveCaptionText;
|
|
||||||
this.Glidemk2PropertyGrid.Dock = System.Windows.Forms.DockStyle.Fill;
|
|
||||||
this.Glidemk2PropertyGrid.Location = new System.Drawing.Point(0, 0);
|
|
||||||
this.Glidemk2PropertyGrid.Name = "Glidemk2PropertyGrid";
|
|
||||||
this.Glidemk2PropertyGrid.PropertySort = System.Windows.Forms.PropertySort.NoSort;
|
|
||||||
this.Glidemk2PropertyGrid.Size = new System.Drawing.Size(572, 442);
|
|
||||||
this.Glidemk2PropertyGrid.TabIndex = 2;
|
|
||||||
this.Glidemk2PropertyGrid.ToolbarVisible = false;
|
|
||||||
//
|
|
||||||
// Glide64Tab
|
|
||||||
//
|
|
||||||
this.Glide64Tab.Controls.Add(this.GlidePropertyGrid);
|
|
||||||
this.Glide64Tab.Location = new System.Drawing.Point(4, 22);
|
|
||||||
this.Glide64Tab.Name = "Glide64Tab";
|
|
||||||
this.Glide64Tab.Size = new System.Drawing.Size(572, 442);
|
|
||||||
this.Glide64Tab.TabIndex = 2;
|
|
||||||
this.Glide64Tab.Text = "Glide64";
|
|
||||||
this.Glide64Tab.UseVisualStyleBackColor = true;
|
|
||||||
//
|
|
||||||
// GlidePropertyGrid
|
|
||||||
//
|
|
||||||
this.GlidePropertyGrid.CategoryForeColor = System.Drawing.SystemColors.InactiveCaptionText;
|
|
||||||
this.GlidePropertyGrid.Dock = System.Windows.Forms.DockStyle.Fill;
|
|
||||||
this.GlidePropertyGrid.Location = new System.Drawing.Point(0, 0);
|
|
||||||
this.GlidePropertyGrid.Name = "GlidePropertyGrid";
|
|
||||||
this.GlidePropertyGrid.PropertySort = System.Windows.Forms.PropertySort.NoSort;
|
|
||||||
this.GlidePropertyGrid.Size = new System.Drawing.Size(572, 442);
|
|
||||||
this.GlidePropertyGrid.TabIndex = 3;
|
|
||||||
this.GlidePropertyGrid.ToolbarVisible = false;
|
|
||||||
//
|
|
||||||
// JaboTab
|
|
||||||
//
|
|
||||||
this.JaboTab.Controls.Add(this.JaboPropertyGrid);
|
|
||||||
this.JaboTab.Location = new System.Drawing.Point(4, 22);
|
|
||||||
this.JaboTab.Name = "JaboTab";
|
|
||||||
this.JaboTab.Size = new System.Drawing.Size(572, 442);
|
|
||||||
this.JaboTab.TabIndex = 4;
|
|
||||||
this.JaboTab.Text = "Jabo";
|
|
||||||
this.JaboTab.UseVisualStyleBackColor = true;
|
|
||||||
//
|
|
||||||
// JaboPropertyGrid
|
|
||||||
//
|
|
||||||
this.JaboPropertyGrid.CategoryForeColor = System.Drawing.SystemColors.InactiveCaptionText;
|
|
||||||
this.JaboPropertyGrid.Dock = System.Windows.Forms.DockStyle.Fill;
|
|
||||||
this.JaboPropertyGrid.Location = new System.Drawing.Point(0, 0);
|
|
||||||
this.JaboPropertyGrid.Name = "JaboPropertyGrid";
|
|
||||||
this.JaboPropertyGrid.PropertySort = System.Windows.Forms.PropertySort.NoSort;
|
|
||||||
this.JaboPropertyGrid.Size = new System.Drawing.Size(572, 442);
|
|
||||||
this.JaboPropertyGrid.TabIndex = 3;
|
|
||||||
this.JaboPropertyGrid.ToolbarVisible = false;
|
|
||||||
//
|
|
||||||
// SaveBtn
|
|
||||||
//
|
|
||||||
this.SaveBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
|
||||||
this.SaveBtn.Location = new System.Drawing.Point(466, 486);
|
|
||||||
this.SaveBtn.Name = "SaveBtn";
|
|
||||||
this.SaveBtn.Size = new System.Drawing.Size(60, 23);
|
|
||||||
this.SaveBtn.TabIndex = 101;
|
|
||||||
this.SaveBtn.Text = "Save";
|
|
||||||
this.SaveBtn.UseVisualStyleBackColor = true;
|
|
||||||
this.SaveBtn.Click += new System.EventHandler(this.SaveBtn_Click);
|
|
||||||
//
|
|
||||||
// CancelBtn
|
|
||||||
//
|
|
||||||
this.CancelBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
|
||||||
this.CancelBtn.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
|
||||||
this.CancelBtn.Location = new System.Drawing.Point(532, 486);
|
|
||||||
this.CancelBtn.Name = "CancelBtn";
|
|
||||||
this.CancelBtn.Size = new System.Drawing.Size(60, 23);
|
|
||||||
this.CancelBtn.TabIndex = 106;
|
|
||||||
this.CancelBtn.Text = "Cancel";
|
|
||||||
this.CancelBtn.UseVisualStyleBackColor = true;
|
|
||||||
this.CancelBtn.Click += new System.EventHandler(this.CancelBtn_Click);
|
|
||||||
//
|
|
||||||
// NewN64PluginSettings
|
|
||||||
//
|
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
|
||||||
this.ClientSize = new System.Drawing.Size(604, 521);
|
|
||||||
this.Controls.Add(this.CancelBtn);
|
|
||||||
this.Controls.Add(this.SaveBtn);
|
|
||||||
this.Controls.Add(this.PluginTabs);
|
|
||||||
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
|
||||||
this.Name = "NewN64PluginSettings";
|
|
||||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
|
|
||||||
this.Text = "New Plugin Settings";
|
|
||||||
this.Load += new System.EventHandler(this.NewN64PluginSettings_Load);
|
|
||||||
this.PluginTabs.ResumeLayout(false);
|
|
||||||
this.GlobalTab.ResumeLayout(false);
|
|
||||||
this.GlobalTab.PerformLayout();
|
|
||||||
this.RiceTab.ResumeLayout(false);
|
|
||||||
this.Glide64mk2.ResumeLayout(false);
|
|
||||||
this.Glide64Tab.ResumeLayout(false);
|
|
||||||
this.JaboTab.ResumeLayout(false);
|
|
||||||
this.ResumeLayout(false);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
private System.Windows.Forms.TabControl PluginTabs;
|
|
||||||
private System.Windows.Forms.TabPage GlobalTab;
|
|
||||||
private System.Windows.Forms.TabPage RiceTab;
|
|
||||||
private System.Windows.Forms.Button SaveBtn;
|
|
||||||
private System.Windows.Forms.Button CancelBtn;
|
|
||||||
private System.Windows.Forms.TabPage Glide64Tab;
|
|
||||||
private System.Windows.Forms.TabPage Glide64mk2;
|
|
||||||
private System.Windows.Forms.TabPage JaboTab;
|
|
||||||
private System.Windows.Forms.Label label49;
|
|
||||||
private System.Windows.Forms.ComboBox RspTypeDropdown;
|
|
||||||
private System.Windows.Forms.Label label48;
|
|
||||||
private System.Windows.Forms.ComboBox CoreTypeDropdown;
|
|
||||||
private System.Windows.Forms.Label label2;
|
|
||||||
private System.Windows.Forms.ComboBox VideoResolutionComboBox;
|
|
||||||
private System.Windows.Forms.ComboBox PluginComboBox;
|
|
||||||
private System.Windows.Forms.Label label1;
|
|
||||||
private System.Windows.Forms.PropertyGrid RicePropertyGrid;
|
|
||||||
private System.Windows.Forms.PropertyGrid Glidemk2PropertyGrid;
|
|
||||||
private System.Windows.Forms.PropertyGrid GlidePropertyGrid;
|
|
||||||
private System.Windows.Forms.PropertyGrid JaboPropertyGrid;
|
|
||||||
private System.Windows.Forms.Label LabelVideoResolutionX;
|
|
||||||
private System.Windows.Forms.TextBox VideoResolutionXTextBox;
|
|
||||||
private System.Windows.Forms.Label LabelVideoResolutionY;
|
|
||||||
private System.Windows.Forms.TextBox VideoResolutionYTextBox;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,182 +0,0 @@
|
||||||
using System;
|
|
||||||
using System.Windows.Forms;
|
|
||||||
|
|
||||||
using BizHawk.Common.StringExtensions;
|
|
||||||
using BizHawk.Common.ReflectionExtensions;
|
|
||||||
using BizHawk.Emulation.Cores.Nintendo.N64;
|
|
||||||
using BizHawk.Client.Common;
|
|
||||||
using BizHawk.Client.EmuHawk.WinFormExtensions;
|
|
||||||
|
|
||||||
namespace BizHawk.Client.EmuHawk
|
|
||||||
{
|
|
||||||
public partial class NewN64PluginSettings : Form
|
|
||||||
{
|
|
||||||
private N64Settings _s;
|
|
||||||
private N64SyncSettings _ss;
|
|
||||||
|
|
||||||
public NewN64PluginSettings()
|
|
||||||
{
|
|
||||||
InitializeComponent();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void CancelBtn_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
DialogResult = DialogResult.Cancel;
|
|
||||||
Close();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void SaveBtn_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
if (VideoResolutionComboBox.Text != "Custom")
|
|
||||||
{
|
|
||||||
var videoSettings = VideoResolutionComboBox.SelectedItem.ToString();
|
|
||||||
var strArr = videoSettings.Split('x');
|
|
||||||
_s.VideoSizeX = int.Parse(strArr[0].Trim());
|
|
||||||
_s.VideoSizeY = int.Parse(strArr[1].Trim());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_s.VideoSizeX =
|
|
||||||
VideoResolutionXTextBox.Text.IsUnsigned() ?
|
|
||||||
int.Parse(VideoResolutionXTextBox.Text) : 320;
|
|
||||||
|
|
||||||
_s.VideoSizeY =
|
|
||||||
VideoResolutionYTextBox.Text.IsUnsigned() ?
|
|
||||||
int.Parse(VideoResolutionYTextBox.Text) : 240;
|
|
||||||
}
|
|
||||||
|
|
||||||
_ss.Core = CoreTypeDropdown.SelectedItem
|
|
||||||
.ToString()
|
|
||||||
.GetEnumFromDescription<N64SyncSettings.CoreType>();
|
|
||||||
|
|
||||||
_ss.Rsp = RspTypeDropdown.SelectedItem
|
|
||||||
.ToString()
|
|
||||||
.GetEnumFromDescription<N64SyncSettings.RspType>();
|
|
||||||
|
|
||||||
_ss.VideoPlugin = PluginComboBox.SelectedItem
|
|
||||||
.ToString()
|
|
||||||
.GetEnumFromDescription<PluginType>();
|
|
||||||
|
|
||||||
PutSettings(_s);
|
|
||||||
PutSyncSettings(_ss);
|
|
||||||
|
|
||||||
DialogResult = DialogResult.OK;
|
|
||||||
Close();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void NewN64PluginSettings_Load(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
_s = GetSettings();
|
|
||||||
_ss = GetSyncSettings();
|
|
||||||
|
|
||||||
CoreTypeDropdown.PopulateFromEnum<N64SyncSettings.CoreType>(_ss.Core);
|
|
||||||
RspTypeDropdown.PopulateFromEnum<N64SyncSettings.RspType>(_ss.Rsp);
|
|
||||||
PluginComboBox.PopulateFromEnum<PluginType>(_ss.VideoPlugin);
|
|
||||||
|
|
||||||
VideoResolutionXTextBox.Text = _s.VideoSizeX.ToString();
|
|
||||||
VideoResolutionYTextBox.Text = _s.VideoSizeY.ToString();
|
|
||||||
|
|
||||||
var videoSetting = _s.VideoSizeX
|
|
||||||
+ " x "
|
|
||||||
+ _s.VideoSizeY;
|
|
||||||
|
|
||||||
var index = VideoResolutionComboBox.Items.IndexOf(videoSetting);
|
|
||||||
if (index >= 0)
|
|
||||||
{
|
|
||||||
VideoResolutionComboBox.SelectedIndex = index;
|
|
||||||
}
|
|
||||||
else if (PluginComboBox.SelectedIndex != 4)
|
|
||||||
{
|
|
||||||
VideoResolutionComboBox.SelectedIndex = 13;
|
|
||||||
ShowCustomVideoResolutionControls();
|
|
||||||
}
|
|
||||||
|
|
||||||
RicePropertyGrid.SelectedObject = _ss.RicePlugin;
|
|
||||||
Glidemk2PropertyGrid.SelectedObject = _ss.Glide64mk2Plugin;
|
|
||||||
GlidePropertyGrid.SelectedObject = _ss.GlidePlugin;
|
|
||||||
JaboPropertyGrid.SelectedObject = _ss.JaboPlugin;
|
|
||||||
}
|
|
||||||
|
|
||||||
#region Setting Get/Set
|
|
||||||
|
|
||||||
private static N64SyncSettings GetSyncSettings()
|
|
||||||
{
|
|
||||||
if (Global.Emulator is N64)
|
|
||||||
{
|
|
||||||
return ((N64)Global.Emulator).GetSyncSettings();
|
|
||||||
}
|
|
||||||
|
|
||||||
return (N64SyncSettings)Global.Config.GetCoreSyncSettings<N64>()
|
|
||||||
?? new N64SyncSettings();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static N64Settings GetSettings()
|
|
||||||
{
|
|
||||||
if (Global.Emulator is N64)
|
|
||||||
{
|
|
||||||
return ((N64)Global.Emulator).GetSettings();
|
|
||||||
}
|
|
||||||
|
|
||||||
return (N64Settings)Global.Config.GetCoreSettings<N64>()
|
|
||||||
?? new N64Settings();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void PutSyncSettings(N64SyncSettings s)
|
|
||||||
{
|
|
||||||
if (Global.Emulator is N64)
|
|
||||||
{
|
|
||||||
GlobalWin.MainForm.PutCoreSyncSettings(s);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Global.Config.PutCoreSyncSettings<N64>(s);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void PutSettings(N64Settings s)
|
|
||||||
{
|
|
||||||
if (Global.Emulator is N64)
|
|
||||||
{
|
|
||||||
GlobalWin.MainForm.PutCoreSettings(s);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Global.Config.PutCoreSettings<N64>(s);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
private void VideoResolutionComboBox_SelectedIndexChanged(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
if (VideoResolutionComboBox.Text == "Custom")
|
|
||||||
{
|
|
||||||
ShowCustomVideoResolutionControls();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
HideCustomVideoResolutionControls();
|
|
||||||
var newResolution = VideoResolutionComboBox.SelectedItem.ToString();
|
|
||||||
var strArr = newResolution.Split('x');
|
|
||||||
VideoResolutionXTextBox.Text = strArr[0].Trim();
|
|
||||||
VideoResolutionYTextBox.Text = strArr[1].Trim();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void ShowCustomVideoResolutionControls()
|
|
||||||
{
|
|
||||||
LabelVideoResolutionX.Visible = true;
|
|
||||||
LabelVideoResolutionY.Visible = true;
|
|
||||||
VideoResolutionXTextBox.Visible = true;
|
|
||||||
VideoResolutionYTextBox.Visible = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void HideCustomVideoResolutionControls()
|
|
||||||
{
|
|
||||||
LabelVideoResolutionX.Visible = false;
|
|
||||||
LabelVideoResolutionY.Visible = false;
|
|
||||||
VideoResolutionXTextBox.Visible = false;
|
|
||||||
VideoResolutionYTextBox.Visible = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
File diff suppressed because it is too large
Load Diff
|
@ -87,19 +87,13 @@ namespace BizHawk.Client.EmuHawk
|
||||||
// N64
|
// N64
|
||||||
var n64Settings = GetSyncSettings<N64, N64SyncSettings>();
|
var n64Settings = GetSyncSettings<N64, N64SyncSettings>();
|
||||||
n64Settings.Rsp = N64SyncSettings.RspType.Rsp_Hle;
|
n64Settings.Rsp = N64SyncSettings.RspType.Rsp_Hle;
|
||||||
n64Settings.Core = N64SyncSettings.CoreType.Dynarec;
|
//n64Settings.Core = N64SyncSettings.CoreType.Dynarec;
|
||||||
|
n64Settings.Core = N64SyncSettings.CoreType.Interpret;
|
||||||
Global.Config.N64UseCircularAnalogConstraint = true;
|
Global.Config.N64UseCircularAnalogConstraint = true;
|
||||||
PutSyncSettings<N64>(n64Settings);
|
PutSyncSettings<N64>(n64Settings);
|
||||||
|
|
||||||
// SNES
|
// SNES
|
||||||
var snesSettings = GetSyncSettings<LibsnesCore, LibsnesCore.SnesSyncSettings>();
|
Global.Config.SNES_InSnes9x = true;
|
||||||
snesSettings.Profile = "Performance";
|
|
||||||
PutSyncSettings<LibsnesCore>(snesSettings);
|
|
||||||
|
|
||||||
// Saturn
|
|
||||||
var saturnSettings = GetSyncSettings<Yabause, Yabause.SaturnSyncSettings>();
|
|
||||||
saturnSettings.SkipBios = false;
|
|
||||||
PutSyncSettings<Yabause>(saturnSettings);
|
|
||||||
|
|
||||||
// Genesis
|
// Genesis
|
||||||
var genesisSettings = GetSyncSettings<GPGX, GPGX.GPGXSyncSettings>();
|
var genesisSettings = GetSyncSettings<GPGX, GPGX.GPGXSyncSettings>();
|
||||||
|
@ -108,7 +102,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
|
|
||||||
// SMS
|
// SMS
|
||||||
var smsSettings = GetSyncSettings<SMS, SMS.SMSSyncSettings>();
|
var smsSettings = GetSyncSettings<SMS, SMS.SMSSyncSettings>();
|
||||||
smsSettings.UseBIOS = false;
|
smsSettings.UseBIOS = true;
|
||||||
PutSyncSettings<SMS>(smsSettings);
|
PutSyncSettings<SMS>(smsSettings);
|
||||||
|
|
||||||
// Coleco
|
// Coleco
|
||||||
|
@ -142,20 +136,12 @@ namespace BizHawk.Client.EmuHawk
|
||||||
|
|
||||||
// N64
|
// N64
|
||||||
var n64Settings = GetSyncSettings<N64, N64SyncSettings>();
|
var n64Settings = GetSyncSettings<N64, N64SyncSettings>();
|
||||||
n64Settings.Rsp = N64SyncSettings.RspType.Rsp_Z64_hlevideo;
|
|
||||||
n64Settings.Core = N64SyncSettings.CoreType.Pure_Interpret;
|
n64Settings.Core = N64SyncSettings.CoreType.Pure_Interpret;
|
||||||
Global.Config.N64UseCircularAnalogConstraint = true;
|
Global.Config.N64UseCircularAnalogConstraint = true;
|
||||||
PutSyncSettings<N64>(n64Settings);
|
PutSyncSettings<N64>(n64Settings);
|
||||||
|
|
||||||
// SNES
|
// SNES
|
||||||
var snesSettings = GetSyncSettings<LibsnesCore, LibsnesCore.SnesSyncSettings>();
|
Global.Config.SNES_InSnes9x = false;
|
||||||
snesSettings.Profile = "Compatibility";
|
|
||||||
PutSyncSettings<LibsnesCore>(snesSettings);
|
|
||||||
|
|
||||||
// Saturn
|
|
||||||
var saturnSettings = GetSyncSettings<Yabause, Yabause.SaturnSyncSettings>();
|
|
||||||
saturnSettings.SkipBios = false;
|
|
||||||
PutSyncSettings<Yabause>(saturnSettings);
|
|
||||||
|
|
||||||
// Genesis
|
// Genesis
|
||||||
var genesisSettings = GetSyncSettings<GPGX, GPGX.GPGXSyncSettings>();
|
var genesisSettings = GetSyncSettings<GPGX, GPGX.GPGXSyncSettings>();
|
||||||
|
@ -164,7 +150,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
|
|
||||||
// SMS
|
// SMS
|
||||||
var smsSettings = GetSyncSettings<SMS, SMS.SMSSyncSettings>();
|
var smsSettings = GetSyncSettings<SMS, SMS.SMSSyncSettings>();
|
||||||
smsSettings.UseBIOS = false;
|
smsSettings.UseBIOS = true;
|
||||||
PutSyncSettings<SMS>(smsSettings);
|
PutSyncSettings<SMS>(smsSettings);
|
||||||
|
|
||||||
// Coleco
|
// Coleco
|
||||||
|
@ -201,20 +187,12 @@ namespace BizHawk.Client.EmuHawk
|
||||||
|
|
||||||
// N64
|
// N64
|
||||||
var n64Settings = GetSyncSettings<N64, N64SyncSettings>();
|
var n64Settings = GetSyncSettings<N64, N64SyncSettings>();
|
||||||
n64Settings.Rsp = N64SyncSettings.RspType.Rsp_Z64_hlevideo;
|
|
||||||
n64Settings.Core = N64SyncSettings.CoreType.Pure_Interpret;
|
n64Settings.Core = N64SyncSettings.CoreType.Pure_Interpret;
|
||||||
Global.Config.N64UseCircularAnalogConstraint = false;
|
Global.Config.N64UseCircularAnalogConstraint = false;
|
||||||
PutSyncSettings<N64>(n64Settings);
|
PutSyncSettings<N64>(n64Settings);
|
||||||
|
|
||||||
// SNES
|
// SNES
|
||||||
var snesSettings = GetSyncSettings<LibsnesCore, LibsnesCore.SnesSyncSettings>();
|
Global.Config.SNES_InSnes9x = false;
|
||||||
snesSettings.Profile = "Compatibility";
|
|
||||||
PutSyncSettings<LibsnesCore>(snesSettings);
|
|
||||||
|
|
||||||
// Saturn
|
|
||||||
var saturnSettings = GetSyncSettings<Yabause, Yabause.SaturnSyncSettings>();
|
|
||||||
saturnSettings.SkipBios = true;
|
|
||||||
PutSyncSettings<Yabause>(saturnSettings);
|
|
||||||
|
|
||||||
// Genesis
|
// Genesis
|
||||||
var genesisSettings = GetSyncSettings<GPGX, GPGX.GPGXSyncSettings>();
|
var genesisSettings = GetSyncSettings<GPGX, GPGX.GPGXSyncSettings>();
|
||||||
|
@ -223,7 +201,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
|
|
||||||
// SMS
|
// SMS
|
||||||
var smsSettings = GetSyncSettings<SMS, SMS.SMSSyncSettings>();
|
var smsSettings = GetSyncSettings<SMS, SMS.SMSSyncSettings>();
|
||||||
smsSettings.UseBIOS = false;
|
smsSettings.UseBIOS = true;
|
||||||
PutSyncSettings<SMS>(smsSettings);
|
PutSyncSettings<SMS>(smsSettings);
|
||||||
|
|
||||||
// Coleco
|
// Coleco
|
||||||
|
@ -266,14 +244,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
PutSyncSettings<N64>(n64Settings);
|
PutSyncSettings<N64>(n64Settings);
|
||||||
|
|
||||||
// SNES
|
// SNES
|
||||||
var snesSettings = GetSyncSettings<LibsnesCore, LibsnesCore.SnesSyncSettings>();
|
Global.Config.SNES_InSnes9x = false;
|
||||||
snesSettings.Profile = "Compatibility";
|
|
||||||
PutSyncSettings<LibsnesCore>(snesSettings);
|
|
||||||
|
|
||||||
// Saturn
|
|
||||||
var saturnSettings = GetSyncSettings<Yabause, Yabause.SaturnSyncSettings>();
|
|
||||||
saturnSettings.SkipBios = true;
|
|
||||||
PutSyncSettings<Yabause>(saturnSettings);
|
|
||||||
|
|
||||||
// Genesis
|
// Genesis
|
||||||
var genesisSettings = GetSyncSettings<GPGX, GPGX.GPGXSyncSettings>();
|
var genesisSettings = GetSyncSettings<GPGX, GPGX.GPGXSyncSettings>();
|
||||||
|
@ -282,7 +253,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
|
|
||||||
// SMS
|
// SMS
|
||||||
var smsSettings = GetSyncSettings<SMS, SMS.SMSSyncSettings>();
|
var smsSettings = GetSyncSettings<SMS, SMS.SMSSyncSettings>();
|
||||||
smsSettings.UseBIOS = false;
|
smsSettings.UseBIOS = true;
|
||||||
PutSyncSettings<SMS>(smsSettings);
|
PutSyncSettings<SMS>(smsSettings);
|
||||||
|
|
||||||
// Coleco
|
// Coleco
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -36,7 +36,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
DiskBufferCheckbox.Checked = Global.Config.Rewind_OnDisk;
|
DiskBufferCheckbox.Checked = Global.Config.Rewind_OnDisk;
|
||||||
RewindIsThreadedCheckbox.Checked = Global.Config.Rewind_IsThreaded;
|
RewindIsThreadedCheckbox.Checked = Global.Config.Rewind_IsThreaded;
|
||||||
_stateSize = Global.Emulator.AsStatable().SaveStateBinary().Length;
|
_stateSize = Global.Emulator.AsStatable().SaveStateBinary().Length;
|
||||||
BufferSizeUpDown.Value = Global.Config.Rewind_BufferSize;
|
BufferSizeUpDown.Value = Math.Max(Global.Config.Rewind_BufferSize, BufferSizeUpDown.Minimum);
|
||||||
|
|
||||||
_mediumStateSize = Global.Config.Rewind_MediumStateSize;
|
_mediumStateSize = Global.Config.Rewind_MediumStateSize;
|
||||||
_largeStateSize = Global.Config.Rewind_LargeStateSize;
|
_largeStateSize = Global.Config.Rewind_LargeStateSize;
|
||||||
|
|
|
@ -28,191 +28,213 @@
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private void InitializeComponent()
|
private void InitializeComponent()
|
||||||
{
|
{
|
||||||
this.btnOk = new System.Windows.Forms.Button();
|
this.btnOk = new System.Windows.Forms.Button();
|
||||||
this.btnCancel = new System.Windows.Forms.Button();
|
this.btnCancel = new System.Windows.Forms.Button();
|
||||||
this.rbCompatibility = new System.Windows.Forms.RadioButton();
|
this.cbDoubleSize = new System.Windows.Forms.CheckBox();
|
||||||
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
this.lblDoubleSize = new System.Windows.Forms.Label();
|
||||||
this.label2 = new System.Windows.Forms.Label();
|
this.radioButton1 = new System.Windows.Forms.RadioButton();
|
||||||
this.rbAccuracy = new System.Windows.Forms.RadioButton();
|
this.cbCropSGBFrame = new System.Windows.Forms.CheckBox();
|
||||||
this.rbPerformance = new System.Windows.Forms.RadioButton();
|
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
||||||
this.cbDoubleSize = new System.Windows.Forms.CheckBox();
|
this.Obj1Checkbox = new System.Windows.Forms.CheckBox();
|
||||||
this.lblDoubleSize = new System.Windows.Forms.Label();
|
this.Obj2Checkbox = new System.Windows.Forms.CheckBox();
|
||||||
this.cbForceDeterminism = new System.Windows.Forms.CheckBox();
|
this.Obj3Checkbox = new System.Windows.Forms.CheckBox();
|
||||||
this.label3 = new System.Windows.Forms.Label();
|
this.Obj4Checkbox = new System.Windows.Forms.CheckBox();
|
||||||
this.radioButton1 = new System.Windows.Forms.RadioButton();
|
this.Bg1Checkbox = new System.Windows.Forms.CheckBox();
|
||||||
this.cbCropSGBFrame = new System.Windows.Forms.CheckBox();
|
this.Bg2Checkbox = new System.Windows.Forms.CheckBox();
|
||||||
this.groupBox1.SuspendLayout();
|
this.Bg3Checkbox = new System.Windows.Forms.CheckBox();
|
||||||
this.SuspendLayout();
|
this.Bg4Checkbox = new System.Windows.Forms.CheckBox();
|
||||||
//
|
this.groupBox1.SuspendLayout();
|
||||||
// btnOk
|
this.SuspendLayout();
|
||||||
//
|
//
|
||||||
this.btnOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
// btnOk
|
||||||
this.btnOk.Location = new System.Drawing.Point(136, 308);
|
//
|
||||||
this.btnOk.Name = "btnOk";
|
this.btnOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
this.btnOk.Size = new System.Drawing.Size(75, 23);
|
this.btnOk.Location = new System.Drawing.Point(136, 288);
|
||||||
this.btnOk.TabIndex = 0;
|
this.btnOk.Name = "btnOk";
|
||||||
this.btnOk.Text = "OK";
|
this.btnOk.Size = new System.Drawing.Size(75, 23);
|
||||||
this.btnOk.UseVisualStyleBackColor = true;
|
this.btnOk.TabIndex = 0;
|
||||||
this.btnOk.Click += new System.EventHandler(this.BtnOk_Click);
|
this.btnOk.Text = "OK";
|
||||||
//
|
this.btnOk.UseVisualStyleBackColor = true;
|
||||||
// btnCancel
|
this.btnOk.Click += new System.EventHandler(this.BtnOk_Click);
|
||||||
//
|
//
|
||||||
this.btnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
// btnCancel
|
||||||
this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
//
|
||||||
this.btnCancel.Location = new System.Drawing.Point(217, 308);
|
this.btnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
this.btnCancel.Name = "btnCancel";
|
this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||||
this.btnCancel.Size = new System.Drawing.Size(75, 23);
|
this.btnCancel.Location = new System.Drawing.Point(217, 288);
|
||||||
this.btnCancel.TabIndex = 1;
|
this.btnCancel.Name = "btnCancel";
|
||||||
this.btnCancel.Text = "Cancel";
|
this.btnCancel.Size = new System.Drawing.Size(75, 23);
|
||||||
this.btnCancel.UseVisualStyleBackColor = true;
|
this.btnCancel.TabIndex = 1;
|
||||||
this.btnCancel.Click += new System.EventHandler(this.BtnCancel_Click);
|
this.btnCancel.Text = "Cancel";
|
||||||
//
|
this.btnCancel.UseVisualStyleBackColor = true;
|
||||||
// rbCompatibility
|
this.btnCancel.Click += new System.EventHandler(this.BtnCancel_Click);
|
||||||
//
|
//
|
||||||
this.rbCompatibility.AutoSize = true;
|
// cbDoubleSize
|
||||||
this.rbCompatibility.Location = new System.Drawing.Point(6, 19);
|
//
|
||||||
this.rbCompatibility.Name = "rbCompatibility";
|
this.cbDoubleSize.AutoSize = true;
|
||||||
this.rbCompatibility.Size = new System.Drawing.Size(202, 17);
|
this.cbDoubleSize.Location = new System.Drawing.Point(18, 20);
|
||||||
this.rbCompatibility.TabIndex = 2;
|
this.cbDoubleSize.Name = "cbDoubleSize";
|
||||||
this.rbCompatibility.TabStop = true;
|
this.cbDoubleSize.Size = new System.Drawing.Size(178, 17);
|
||||||
this.rbCompatibility.Text = "Compatibility (more debug tools work!)";
|
this.cbDoubleSize.TabIndex = 6;
|
||||||
this.rbCompatibility.UseVisualStyleBackColor = true;
|
this.cbDoubleSize.Text = "Always Double-Size Framebuffer";
|
||||||
//
|
this.cbDoubleSize.UseVisualStyleBackColor = true;
|
||||||
// groupBox1
|
this.cbDoubleSize.CheckedChanged += new System.EventHandler(this.CbDoubleSize_CheckedChanged);
|
||||||
//
|
//
|
||||||
this.groupBox1.Controls.Add(this.radioButton1);
|
// lblDoubleSize
|
||||||
this.groupBox1.Controls.Add(this.label2);
|
//
|
||||||
this.groupBox1.Controls.Add(this.rbAccuracy);
|
this.lblDoubleSize.Location = new System.Drawing.Point(36, 41);
|
||||||
this.groupBox1.Controls.Add(this.rbPerformance);
|
this.lblDoubleSize.Name = "lblDoubleSize";
|
||||||
this.groupBox1.Controls.Add(this.rbCompatibility);
|
this.lblDoubleSize.Size = new System.Drawing.Size(254, 57);
|
||||||
this.groupBox1.Location = new System.Drawing.Point(12, 12);
|
this.lblDoubleSize.TabIndex = 7;
|
||||||
this.groupBox1.Name = "groupBox1";
|
this.lblDoubleSize.Text = "Some games are changing the resolution constantly (e.g. SD3) so this option can f" +
|
||||||
this.groupBox1.Size = new System.Drawing.Size(277, 108);
|
|
||||||
this.groupBox1.TabIndex = 3;
|
|
||||||
this.groupBox1.TabStop = false;
|
|
||||||
this.groupBox1.Text = "Core Selection";
|
|
||||||
//
|
|
||||||
// label2
|
|
||||||
//
|
|
||||||
this.label2.Location = new System.Drawing.Point(72, 85);
|
|
||||||
this.label2.Name = "label2";
|
|
||||||
this.label2.Size = new System.Drawing.Size(136, 21);
|
|
||||||
this.label2.TabIndex = 8;
|
|
||||||
this.label2.Text = "NOT SUPPORTED YET!";
|
|
||||||
//
|
|
||||||
// rbAccuracy
|
|
||||||
//
|
|
||||||
this.rbAccuracy.AutoSize = true;
|
|
||||||
this.rbAccuracy.Enabled = false;
|
|
||||||
this.rbAccuracy.Location = new System.Drawing.Point(6, 65);
|
|
||||||
this.rbAccuracy.Name = "rbAccuracy";
|
|
||||||
this.rbAccuracy.Size = new System.Drawing.Size(224, 17);
|
|
||||||
this.rbAccuracy.TabIndex = 4;
|
|
||||||
this.rbAccuracy.TabStop = true;
|
|
||||||
this.rbAccuracy.Text = "Accuracy (only to fix bugs in Compatibility!)";
|
|
||||||
this.rbAccuracy.UseVisualStyleBackColor = true;
|
|
||||||
this.rbAccuracy.CheckedChanged += new System.EventHandler(this.RbAccuracy_CheckedChanged);
|
|
||||||
//
|
|
||||||
// rbPerformance
|
|
||||||
//
|
|
||||||
this.rbPerformance.AutoSize = true;
|
|
||||||
this.rbPerformance.Location = new System.Drawing.Point(6, 42);
|
|
||||||
this.rbPerformance.Name = "rbPerformance";
|
|
||||||
this.rbPerformance.Size = new System.Drawing.Size(202, 17);
|
|
||||||
this.rbPerformance.TabIndex = 3;
|
|
||||||
this.rbPerformance.TabStop = true;
|
|
||||||
this.rbPerformance.Text = "Performance (only for casual gaming!)";
|
|
||||||
this.rbPerformance.UseVisualStyleBackColor = true;
|
|
||||||
//
|
|
||||||
// cbDoubleSize
|
|
||||||
//
|
|
||||||
this.cbDoubleSize.AutoSize = true;
|
|
||||||
this.cbDoubleSize.Location = new System.Drawing.Point(18, 130);
|
|
||||||
this.cbDoubleSize.Name = "cbDoubleSize";
|
|
||||||
this.cbDoubleSize.Size = new System.Drawing.Size(178, 17);
|
|
||||||
this.cbDoubleSize.TabIndex = 6;
|
|
||||||
this.cbDoubleSize.Text = "Always Double-Size Framebuffer";
|
|
||||||
this.cbDoubleSize.UseVisualStyleBackColor = true;
|
|
||||||
this.cbDoubleSize.CheckedChanged += new System.EventHandler(this.CbDoubleSize_CheckedChanged);
|
|
||||||
//
|
|
||||||
// lblDoubleSize
|
|
||||||
//
|
|
||||||
this.lblDoubleSize.Location = new System.Drawing.Point(36, 151);
|
|
||||||
this.lblDoubleSize.Name = "lblDoubleSize";
|
|
||||||
this.lblDoubleSize.Size = new System.Drawing.Size(254, 57);
|
|
||||||
this.lblDoubleSize.TabIndex = 7;
|
|
||||||
this.lblDoubleSize.Text = "Some games are changing the resolution constantly (e.g. SD3) so this option can f" +
|
|
||||||
"orce the SNES output to stay double-size always. NOTE: The Accuracy core runs as" +
|
"orce the SNES output to stay double-size always. NOTE: The Accuracy core runs as" +
|
||||||
" if this is selected.\r\n";
|
" if this is selected.\r\n";
|
||||||
//
|
//
|
||||||
// cbForceDeterminism
|
// radioButton1
|
||||||
//
|
//
|
||||||
this.cbForceDeterminism.AutoSize = true;
|
this.radioButton1.AutoSize = true;
|
||||||
this.cbForceDeterminism.Location = new System.Drawing.Point(15, 234);
|
this.radioButton1.Location = new System.Drawing.Point(37, 46);
|
||||||
this.cbForceDeterminism.Name = "cbForceDeterminism";
|
this.radioButton1.Name = "radioButton1";
|
||||||
this.cbForceDeterminism.Size = new System.Drawing.Size(113, 17);
|
this.radioButton1.Size = new System.Drawing.Size(202, 17);
|
||||||
this.cbForceDeterminism.TabIndex = 8;
|
this.radioButton1.TabIndex = 9;
|
||||||
this.cbForceDeterminism.Text = "Force Determinism";
|
this.radioButton1.TabStop = true;
|
||||||
this.cbForceDeterminism.UseVisualStyleBackColor = true;
|
this.radioButton1.Text = "Performance (only for casual gaming!)";
|
||||||
this.cbForceDeterminism.CheckedChanged += new System.EventHandler(this.CbForceDeterminism_CheckedChanged);
|
this.radioButton1.UseVisualStyleBackColor = true;
|
||||||
//
|
//
|
||||||
// label3
|
// cbCropSGBFrame
|
||||||
//
|
//
|
||||||
this.label3.Location = new System.Drawing.Point(34, 258);
|
this.cbCropSGBFrame.AutoSize = true;
|
||||||
this.label3.Name = "label3";
|
this.cbCropSGBFrame.Location = new System.Drawing.Point(15, 110);
|
||||||
this.label3.Size = new System.Drawing.Size(251, 41);
|
this.cbCropSGBFrame.Name = "cbCropSGBFrame";
|
||||||
this.label3.TabIndex = 9;
|
this.cbCropSGBFrame.Size = new System.Drawing.Size(105, 17);
|
||||||
this.label3.Text = "Guarantee deterministic emulation by savestating every frame. Don\'t TAS without i" +
|
this.cbCropSGBFrame.TabIndex = 10;
|
||||||
"t! Only ~75% of runs sync without it, but speed boost is ~30%.";
|
this.cbCropSGBFrame.Text = "Crop SGB Frame";
|
||||||
//
|
this.cbCropSGBFrame.UseVisualStyleBackColor = true;
|
||||||
// radioButton1
|
//
|
||||||
//
|
// groupBox1
|
||||||
this.radioButton1.AutoSize = true;
|
//
|
||||||
this.radioButton1.Location = new System.Drawing.Point(37, 46);
|
this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||||
this.radioButton1.Name = "radioButton1";
|
| System.Windows.Forms.AnchorStyles.Left)
|
||||||
this.radioButton1.Size = new System.Drawing.Size(202, 17);
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
this.radioButton1.TabIndex = 9;
|
this.groupBox1.Controls.Add(this.Bg4Checkbox);
|
||||||
this.radioButton1.TabStop = true;
|
this.groupBox1.Controls.Add(this.Bg3Checkbox);
|
||||||
this.radioButton1.Text = "Performance (only for casual gaming!)";
|
this.groupBox1.Controls.Add(this.Bg2Checkbox);
|
||||||
this.radioButton1.UseVisualStyleBackColor = true;
|
this.groupBox1.Controls.Add(this.Bg1Checkbox);
|
||||||
//
|
this.groupBox1.Controls.Add(this.Obj4Checkbox);
|
||||||
// cbCropSGBFrame
|
this.groupBox1.Controls.Add(this.Obj3Checkbox);
|
||||||
//
|
this.groupBox1.Controls.Add(this.Obj2Checkbox);
|
||||||
this.cbCropSGBFrame.AutoSize = true;
|
this.groupBox1.Controls.Add(this.Obj1Checkbox);
|
||||||
this.cbCropSGBFrame.Location = new System.Drawing.Point(15, 211);
|
this.groupBox1.Location = new System.Drawing.Point(18, 142);
|
||||||
this.cbCropSGBFrame.Name = "cbCropSGBFrame";
|
this.groupBox1.Name = "groupBox1";
|
||||||
this.cbCropSGBFrame.Size = new System.Drawing.Size(105, 17);
|
this.groupBox1.Size = new System.Drawing.Size(274, 140);
|
||||||
this.cbCropSGBFrame.TabIndex = 10;
|
this.groupBox1.TabIndex = 11;
|
||||||
this.cbCropSGBFrame.Text = "Crop SGB Frame";
|
this.groupBox1.TabStop = false;
|
||||||
this.cbCropSGBFrame.UseVisualStyleBackColor = true;
|
this.groupBox1.Text = "Display";
|
||||||
//
|
//
|
||||||
// SNESOptions
|
// Obj1Checkbox
|
||||||
//
|
//
|
||||||
this.AcceptButton = this.btnOk;
|
this.Obj1Checkbox.AutoSize = true;
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
this.Obj1Checkbox.Location = new System.Drawing.Point(21, 29);
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
this.Obj1Checkbox.Name = "Obj1Checkbox";
|
||||||
this.CancelButton = this.btnCancel;
|
this.Obj1Checkbox.Size = new System.Drawing.Size(55, 17);
|
||||||
this.ClientSize = new System.Drawing.Size(304, 343);
|
this.Obj1Checkbox.TabIndex = 0;
|
||||||
this.Controls.Add(this.cbCropSGBFrame);
|
this.Obj1Checkbox.Text = "OBJ 1";
|
||||||
this.Controls.Add(this.label3);
|
this.Obj1Checkbox.UseVisualStyleBackColor = true;
|
||||||
this.Controls.Add(this.cbForceDeterminism);
|
//
|
||||||
this.Controls.Add(this.lblDoubleSize);
|
// Obj2Checkbox
|
||||||
this.Controls.Add(this.cbDoubleSize);
|
//
|
||||||
this.Controls.Add(this.groupBox1);
|
this.Obj2Checkbox.AutoSize = true;
|
||||||
this.Controls.Add(this.btnCancel);
|
this.Obj2Checkbox.Location = new System.Drawing.Point(22, 52);
|
||||||
this.Controls.Add(this.btnOk);
|
this.Obj2Checkbox.Name = "Obj2Checkbox";
|
||||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
|
this.Obj2Checkbox.Size = new System.Drawing.Size(55, 17);
|
||||||
this.MaximizeBox = false;
|
this.Obj2Checkbox.TabIndex = 1;
|
||||||
this.MinimizeBox = false;
|
this.Obj2Checkbox.Text = "OBJ 2";
|
||||||
this.Name = "SNESOptions";
|
this.Obj2Checkbox.UseVisualStyleBackColor = true;
|
||||||
this.ShowIcon = false;
|
//
|
||||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
|
// Obj3Checkbox
|
||||||
this.Text = "SNES Options";
|
//
|
||||||
this.Load += new System.EventHandler(this.SNESOptions_Load);
|
this.Obj3Checkbox.AutoSize = true;
|
||||||
this.groupBox1.ResumeLayout(false);
|
this.Obj3Checkbox.Location = new System.Drawing.Point(21, 75);
|
||||||
this.groupBox1.PerformLayout();
|
this.Obj3Checkbox.Name = "Obj3Checkbox";
|
||||||
this.ResumeLayout(false);
|
this.Obj3Checkbox.Size = new System.Drawing.Size(55, 17);
|
||||||
this.PerformLayout();
|
this.Obj3Checkbox.TabIndex = 2;
|
||||||
|
this.Obj3Checkbox.Text = "OBJ 3";
|
||||||
|
this.Obj3Checkbox.UseVisualStyleBackColor = true;
|
||||||
|
//
|
||||||
|
// Obj4Checkbox
|
||||||
|
//
|
||||||
|
this.Obj4Checkbox.AutoSize = true;
|
||||||
|
this.Obj4Checkbox.Location = new System.Drawing.Point(21, 98);
|
||||||
|
this.Obj4Checkbox.Name = "Obj4Checkbox";
|
||||||
|
this.Obj4Checkbox.Size = new System.Drawing.Size(55, 17);
|
||||||
|
this.Obj4Checkbox.TabIndex = 3;
|
||||||
|
this.Obj4Checkbox.Text = "OBJ 4";
|
||||||
|
this.Obj4Checkbox.UseVisualStyleBackColor = true;
|
||||||
|
//
|
||||||
|
// Bg1Checkbox
|
||||||
|
//
|
||||||
|
this.Bg1Checkbox.AutoSize = true;
|
||||||
|
this.Bg1Checkbox.Location = new System.Drawing.Point(150, 29);
|
||||||
|
this.Bg1Checkbox.Name = "Bg1Checkbox";
|
||||||
|
this.Bg1Checkbox.Size = new System.Drawing.Size(50, 17);
|
||||||
|
this.Bg1Checkbox.TabIndex = 4;
|
||||||
|
this.Bg1Checkbox.Text = "BG 1";
|
||||||
|
this.Bg1Checkbox.UseVisualStyleBackColor = true;
|
||||||
|
//
|
||||||
|
// Bg2Checkbox
|
||||||
|
//
|
||||||
|
this.Bg2Checkbox.AutoSize = true;
|
||||||
|
this.Bg2Checkbox.Location = new System.Drawing.Point(150, 52);
|
||||||
|
this.Bg2Checkbox.Name = "Bg2Checkbox";
|
||||||
|
this.Bg2Checkbox.Size = new System.Drawing.Size(50, 17);
|
||||||
|
this.Bg2Checkbox.TabIndex = 5;
|
||||||
|
this.Bg2Checkbox.Text = "BG 2";
|
||||||
|
this.Bg2Checkbox.UseVisualStyleBackColor = true;
|
||||||
|
//
|
||||||
|
// Bg3Checkbox
|
||||||
|
//
|
||||||
|
this.Bg3Checkbox.AutoSize = true;
|
||||||
|
this.Bg3Checkbox.Location = new System.Drawing.Point(150, 75);
|
||||||
|
this.Bg3Checkbox.Name = "Bg3Checkbox";
|
||||||
|
this.Bg3Checkbox.Size = new System.Drawing.Size(50, 17);
|
||||||
|
this.Bg3Checkbox.TabIndex = 6;
|
||||||
|
this.Bg3Checkbox.Text = "BG 3";
|
||||||
|
this.Bg3Checkbox.UseVisualStyleBackColor = true;
|
||||||
|
//
|
||||||
|
// Bg4Checkbox
|
||||||
|
//
|
||||||
|
this.Bg4Checkbox.AutoSize = true;
|
||||||
|
this.Bg4Checkbox.Location = new System.Drawing.Point(150, 98);
|
||||||
|
this.Bg4Checkbox.Name = "Bg4Checkbox";
|
||||||
|
this.Bg4Checkbox.Size = new System.Drawing.Size(50, 17);
|
||||||
|
this.Bg4Checkbox.TabIndex = 7;
|
||||||
|
this.Bg4Checkbox.Text = "BG 4";
|
||||||
|
this.Bg4Checkbox.UseVisualStyleBackColor = true;
|
||||||
|
//
|
||||||
|
// SNESOptions
|
||||||
|
//
|
||||||
|
this.AcceptButton = this.btnOk;
|
||||||
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
|
this.CancelButton = this.btnCancel;
|
||||||
|
this.ClientSize = new System.Drawing.Size(304, 323);
|
||||||
|
this.Controls.Add(this.groupBox1);
|
||||||
|
this.Controls.Add(this.cbCropSGBFrame);
|
||||||
|
this.Controls.Add(this.lblDoubleSize);
|
||||||
|
this.Controls.Add(this.cbDoubleSize);
|
||||||
|
this.Controls.Add(this.btnCancel);
|
||||||
|
this.Controls.Add(this.btnOk);
|
||||||
|
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
|
||||||
|
this.MaximizeBox = false;
|
||||||
|
this.MinimizeBox = false;
|
||||||
|
this.Name = "SNESOptions";
|
||||||
|
this.ShowIcon = false;
|
||||||
|
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
|
||||||
|
this.Text = "BSNES Options";
|
||||||
|
this.groupBox1.ResumeLayout(false);
|
||||||
|
this.groupBox1.PerformLayout();
|
||||||
|
this.ResumeLayout(false);
|
||||||
|
this.PerformLayout();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -220,16 +242,18 @@
|
||||||
|
|
||||||
private System.Windows.Forms.Button btnOk;
|
private System.Windows.Forms.Button btnOk;
|
||||||
private System.Windows.Forms.Button btnCancel;
|
private System.Windows.Forms.Button btnCancel;
|
||||||
private System.Windows.Forms.RadioButton rbCompatibility;
|
|
||||||
private System.Windows.Forms.GroupBox groupBox1;
|
|
||||||
private System.Windows.Forms.RadioButton rbPerformance;
|
|
||||||
private System.Windows.Forms.CheckBox cbDoubleSize;
|
private System.Windows.Forms.CheckBox cbDoubleSize;
|
||||||
private System.Windows.Forms.Label lblDoubleSize;
|
private System.Windows.Forms.Label lblDoubleSize;
|
||||||
private System.Windows.Forms.RadioButton rbAccuracy;
|
|
||||||
private System.Windows.Forms.Label label2;
|
|
||||||
private System.Windows.Forms.CheckBox cbForceDeterminism;
|
|
||||||
private System.Windows.Forms.Label label3;
|
|
||||||
private System.Windows.Forms.RadioButton radioButton1;
|
private System.Windows.Forms.RadioButton radioButton1;
|
||||||
private System.Windows.Forms.CheckBox cbCropSGBFrame;
|
private System.Windows.Forms.CheckBox cbCropSGBFrame;
|
||||||
|
private System.Windows.Forms.GroupBox groupBox1;
|
||||||
|
private System.Windows.Forms.CheckBox Bg4Checkbox;
|
||||||
|
private System.Windows.Forms.CheckBox Bg3Checkbox;
|
||||||
|
private System.Windows.Forms.CheckBox Bg2Checkbox;
|
||||||
|
private System.Windows.Forms.CheckBox Bg1Checkbox;
|
||||||
|
private System.Windows.Forms.CheckBox Obj4Checkbox;
|
||||||
|
private System.Windows.Forms.CheckBox Obj3Checkbox;
|
||||||
|
private System.Windows.Forms.CheckBox Obj2Checkbox;
|
||||||
|
private System.Windows.Forms.CheckBox Obj1Checkbox;
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -22,58 +22,36 @@ namespace BizHawk.Client.EmuHawk
|
||||||
var dlg = new SNESOptions
|
var dlg = new SNESOptions
|
||||||
{
|
{
|
||||||
AlwaysDoubleSize = s.AlwaysDoubleSize,
|
AlwaysDoubleSize = s.AlwaysDoubleSize,
|
||||||
ForceDeterminism = s.ForceDeterminism,
|
|
||||||
CropSGBFrame = s.CropSGBFrame,
|
CropSGBFrame = s.CropSGBFrame,
|
||||||
Profile = ss.Profile
|
ShowObj1 = s.ShowOBJ_0,
|
||||||
|
ShowObj2 = s.ShowOBJ_1,
|
||||||
|
ShowObj3 = s.ShowOBJ_2,
|
||||||
|
ShowObj4 = s.ShowOBJ_3,
|
||||||
|
ShowBg1 = s.ShowBG1_0,
|
||||||
|
ShowBg2 = s.ShowBG2_0,
|
||||||
|
ShowBg3 = s.ShowBG3_0,
|
||||||
|
ShowBg4 = s.ShowBG4_0
|
||||||
};
|
};
|
||||||
|
|
||||||
var result = dlg.ShowDialog(owner);
|
var result = dlg.ShowDialog(owner);
|
||||||
if (result == DialogResult.OK)
|
if (result == DialogResult.OK)
|
||||||
{
|
{
|
||||||
s.AlwaysDoubleSize = dlg.AlwaysDoubleSize;
|
s.AlwaysDoubleSize = dlg.AlwaysDoubleSize;
|
||||||
s.ForceDeterminism = dlg.ForceDeterminism;
|
|
||||||
s.CropSGBFrame = dlg.CropSGBFrame;
|
s.CropSGBFrame = dlg.CropSGBFrame;
|
||||||
ss.Profile = dlg.Profile;
|
s.ShowOBJ_0 = dlg.ShowObj1;
|
||||||
|
s.ShowOBJ_1 = dlg.ShowObj2;
|
||||||
|
s.ShowOBJ_2 = dlg.ShowObj3;
|
||||||
|
s.ShowOBJ_3 = dlg.ShowObj4;
|
||||||
|
s.ShowBG1_0 = s.ShowBG1_1 = dlg.ShowBg1;
|
||||||
|
s.ShowBG2_0 = s.ShowBG2_1 = dlg.ShowBg2;
|
||||||
|
s.ShowBG3_0 = s.ShowBG3_1 = dlg.ShowBg3;
|
||||||
|
s.ShowBG4_0 = s.ShowBG4_1 = dlg.ShowBg4;
|
||||||
|
|
||||||
GlobalWin.MainForm.PutCoreSettings(s);
|
GlobalWin.MainForm.PutCoreSettings(s);
|
||||||
GlobalWin.MainForm.PutCoreSyncSettings(ss);
|
GlobalWin.MainForm.PutCoreSyncSettings(ss);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SNESOptions_Load(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
rbAccuracy.Visible = label2.Visible = VersionInfo.DeveloperBuild;
|
|
||||||
}
|
|
||||||
|
|
||||||
private string Profile
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (rbCompatibility.Checked)
|
|
||||||
{
|
|
||||||
return "Compatibility";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rbPerformance.Checked)
|
|
||||||
{
|
|
||||||
return "Performance";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rbAccuracy.Checked)
|
|
||||||
{
|
|
||||||
return "Accuracy";
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new InvalidOperationException();
|
|
||||||
}
|
|
||||||
|
|
||||||
set
|
|
||||||
{
|
|
||||||
rbCompatibility.Checked = value == "Compatibility";
|
|
||||||
rbPerformance.Checked = value == "Performance";
|
|
||||||
rbAccuracy.Checked = value == "Accuracy";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private bool AlwaysDoubleSize
|
private bool AlwaysDoubleSize
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
|
@ -88,32 +66,29 @@ namespace BizHawk.Client.EmuHawk
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool ForceDeterminism
|
|
||||||
{
|
|
||||||
get { return cbForceDeterminism.Checked; }
|
|
||||||
set { cbForceDeterminism.Checked = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
private bool CropSGBFrame
|
private bool CropSGBFrame
|
||||||
{
|
{
|
||||||
get { return cbCropSGBFrame.Checked; }
|
get { return cbCropSGBFrame.Checked; }
|
||||||
set { cbCropSGBFrame.Checked = value; }
|
set { cbCropSGBFrame.Checked = value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
void RefreshDoubleSizeOption()
|
private bool ShowObj1 { get { return Obj1Checkbox.Checked; } set { Obj1Checkbox.Checked = value; } }
|
||||||
|
private bool ShowObj2 { get { return Obj2Checkbox.Checked; } set { Obj2Checkbox.Checked = value; } }
|
||||||
|
private bool ShowObj3 { get { return Obj3Checkbox.Checked; } set { Obj3Checkbox.Checked = value; } }
|
||||||
|
private bool ShowObj4 { get { return Obj4Checkbox.Checked; } set { Obj4Checkbox.Checked = value; } }
|
||||||
|
|
||||||
|
private bool ShowBg1 { get { return Bg1Checkbox.Checked; } set { Bg1Checkbox.Checked = value; } }
|
||||||
|
private bool ShowBg2 { get { return Bg2Checkbox.Checked; } set { Bg2Checkbox.Checked = value; } }
|
||||||
|
private bool ShowBg3 { get { return Bg3Checkbox.Checked; } set { Bg3Checkbox.Checked = value; } }
|
||||||
|
private bool ShowBg4 { get { return Bg4Checkbox.Checked; } set { Bg4Checkbox.Checked = value; } }
|
||||||
|
|
||||||
|
private void RefreshDoubleSizeOption()
|
||||||
{
|
{
|
||||||
_suppressDoubleSize = true;
|
_suppressDoubleSize = true;
|
||||||
cbDoubleSize.Checked = !cbDoubleSize.Enabled || _userDoubleSizeOption;
|
cbDoubleSize.Checked = !cbDoubleSize.Enabled || _userDoubleSizeOption;
|
||||||
_suppressDoubleSize = false;
|
_suppressDoubleSize = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void RbAccuracy_CheckedChanged(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
cbDoubleSize.Enabled = !rbAccuracy.Checked;
|
|
||||||
lblDoubleSize.ForeColor = cbDoubleSize.Enabled ? System.Drawing.SystemColors.ControlText : System.Drawing.SystemColors.GrayText;
|
|
||||||
RefreshDoubleSizeOption();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void CbDoubleSize_CheckedChanged(object sender, EventArgs e)
|
private void CbDoubleSize_CheckedChanged(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if (_suppressDoubleSize)
|
if (_suppressDoubleSize)
|
||||||
|
@ -124,10 +99,6 @@ namespace BizHawk.Client.EmuHawk
|
||||||
_userDoubleSizeOption = cbDoubleSize.Checked;
|
_userDoubleSizeOption = cbDoubleSize.Checked;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void CbForceDeterminism_CheckedChanged(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
private void BtnOk_Click(object sender, EventArgs e)
|
private void BtnOk_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
DialogResult = DialogResult.OK;
|
DialogResult = DialogResult.OK;
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 78 KiB |
Binary file not shown.
After Width: | Height: | Size: 38 KiB |
|
@ -7,9 +7,10 @@ using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using BizHawk.Client.Common;
|
using BizHawk.Client.Common;
|
||||||
using BizHawk.Emulation.Cores.Consoles.Sega.gpgx;
|
|
||||||
using System.Drawing.Imaging;
|
using System.Drawing.Imaging;
|
||||||
using BizHawk.Emulation.Common;
|
using BizHawk.Emulation.Common;
|
||||||
|
using BizHawk.Emulation.Cores.Consoles.Sega.gpgx64;
|
||||||
|
using BizHawk.Common;
|
||||||
|
|
||||||
namespace BizHawk.Client.EmuHawk
|
namespace BizHawk.Client.EmuHawk
|
||||||
{
|
{
|
||||||
|
@ -18,7 +19,8 @@ namespace BizHawk.Client.EmuHawk
|
||||||
[RequiredService]
|
[RequiredService]
|
||||||
private GPGX Emu { get; set; }
|
private GPGX Emu { get; set; }
|
||||||
|
|
||||||
private LibGPGX.VDPView View = new LibGPGX.VDPView();
|
private GPGX.VDPView View;
|
||||||
|
|
||||||
int palindex = 0;
|
int palindex = 0;
|
||||||
|
|
||||||
protected override System.Drawing.Point ScrollToControl(System.Windows.Forms.Control activeControl)
|
protected override System.Drawing.Point ScrollToControl(System.Windows.Forms.Control activeControl)
|
||||||
|
@ -81,7 +83,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
bv.Refresh();
|
bv.Refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
unsafe void DrawPalettes(int *pal)
|
unsafe void DrawPalettes(int* pal)
|
||||||
{
|
{
|
||||||
var lockdata = bmpViewPal.BMP.LockBits(new Rectangle(0, 0, 16, 4), ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb);
|
var lockdata = bmpViewPal.BMP.LockBits(new Rectangle(0, 0, 16, 4), ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb);
|
||||||
int pitch = lockdata.Stride / sizeof(int);
|
int pitch = lockdata.Stride / sizeof(int);
|
||||||
|
@ -121,23 +123,24 @@ namespace BizHawk.Client.EmuHawk
|
||||||
|
|
||||||
public void NewUpdate(ToolFormUpdateType type) { }
|
public void NewUpdate(ToolFormUpdateType type) { }
|
||||||
|
|
||||||
public void UpdateValues()
|
public unsafe void UpdateValues()
|
||||||
{
|
{
|
||||||
if (Emu == null)
|
if (Emu == null)
|
||||||
return;
|
return;
|
||||||
Emu.UpdateVDPViewContext(View);
|
|
||||||
unsafe
|
using ((View = Emu.UpdateVDPViewContext()).EnterExit())
|
||||||
{
|
{
|
||||||
int* pal = (int*)View.ColorCache;
|
int* pal = (int*)View.ColorCache;
|
||||||
//for (int i = 0; i < 0x40; i++)
|
//for (int i = 0; i < 0x40; i++)
|
||||||
// pal[i] |= unchecked((int)0xff000000);
|
// pal[i] |= unchecked((int)0xff000000);
|
||||||
DrawPalettes(pal);
|
DrawPalettes(pal);
|
||||||
DrawTiles();
|
DrawTiles();
|
||||||
ushort *VRAMNT = (ushort*)View.VRAM;
|
ushort* VRAMNT = (ushort*)View.VRAM;
|
||||||
byte *tiles = (byte*)View.PatternCache;
|
byte* tiles = (byte*)View.PatternCache;
|
||||||
DrawNameTable(View.NTA, VRAMNT, tiles, pal, bmpViewNTA);
|
DrawNameTable(View.NTA, VRAMNT, tiles, pal, bmpViewNTA);
|
||||||
DrawNameTable(View.NTB, VRAMNT, tiles, pal, bmpViewNTB);
|
DrawNameTable(View.NTB, VRAMNT, tiles, pal, bmpViewNTB);
|
||||||
DrawNameTable(View.NTW, VRAMNT, tiles, pal, bmpViewNTW);
|
DrawNameTable(View.NTW, VRAMNT, tiles, pal, bmpViewNTW);
|
||||||
|
View = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -8,7 +8,7 @@ using System.ComponentModel;
|
||||||
|
|
||||||
using BizHawk.Emulation.Common;
|
using BizHawk.Emulation.Common;
|
||||||
using BizHawk.Emulation.Common.IEmulatorExtensions;
|
using BizHawk.Emulation.Common.IEmulatorExtensions;
|
||||||
using BizHawk.Emulation.Cores.Nintendo.SNES;
|
using BizHawk.Emulation.Cores.Nintendo.SNES9X;
|
||||||
|
|
||||||
using BizHawk.Client.Common;
|
using BizHawk.Client.Common;
|
||||||
using BizHawk.Client.Common.MovieConversionExtensions;
|
using BizHawk.Client.Common.MovieConversionExtensions;
|
||||||
|
@ -300,39 +300,33 @@ namespace BizHawk.Client.EmuHawk
|
||||||
Mainform.PauseOnFrame = null;
|
Mainform.PauseOnFrame = null;
|
||||||
Mainform.PauseEmulator();
|
Mainform.PauseEmulator();
|
||||||
|
|
||||||
// Start Scenario 0: bsnes in performance mode (copied from RecordMovieMenuItem_Click())
|
// Start Scenario 0: snes9x needs a nag (copied from RecordMovieMenuItem_Click())
|
||||||
if (Emulator is LibsnesCore)
|
if (Emulator is Snes9x)
|
||||||
{
|
{
|
||||||
var snes = (LibsnesCore)Emulator;
|
var box = new CustomControls.MsgBox(
|
||||||
if (snes.CurrentProfile == "Performance")
|
"While the Snes9x core is faster, it is not nearly as accurate as bsnes. \nIt is recommended that you switch to the bsnes core for movie recording\nSwitch to bsnes?",
|
||||||
|
"Accuracy Warning",
|
||||||
|
MessageBoxIcon.Warning);
|
||||||
|
|
||||||
|
box.SetButtons(
|
||||||
|
new[] { "Switch", "Cancel" },
|
||||||
|
new[] { DialogResult.Yes, DialogResult.Cancel });
|
||||||
|
|
||||||
|
box.MaximumSize = new Size(475, 350);
|
||||||
|
box.SetMessageToAutoSize();
|
||||||
|
var result = box.ShowDialog();
|
||||||
|
|
||||||
|
if (result == DialogResult.Yes)
|
||||||
{
|
{
|
||||||
var box = new CustomControls.MsgBox(
|
Global.Config.SNES_InSnes9x = false;
|
||||||
"While the performance core is faster, it is not stable enough for movie recording\n\nSwitch to Compatibility?",
|
Mainform.RebootCore();
|
||||||
"Stability Warning",
|
}
|
||||||
MessageBoxIcon.Warning);
|
else if (result == DialogResult.Cancel)
|
||||||
|
{
|
||||||
box.SetButtons(
|
return false;
|
||||||
new[] { "Switch", "Cancel" },
|
|
||||||
new[] { DialogResult.Yes, DialogResult.Cancel });
|
|
||||||
|
|
||||||
box.MaximumSize = new Size(450, 350);
|
|
||||||
box.SetMessageToAutoSize();
|
|
||||||
var result = box.ShowDialog();
|
|
||||||
|
|
||||||
if (result == DialogResult.Yes)
|
|
||||||
{
|
|
||||||
var ss = snes.GetSyncSettings();
|
|
||||||
ss.Profile = "Compatibility";
|
|
||||||
snes.PutSyncSettings(ss);
|
|
||||||
Mainform.RebootCore();
|
|
||||||
}
|
|
||||||
else if (result == DialogResult.Cancel)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Start Scenario 1: A regular movie is active
|
// Start Scenario 1: A regular movie is active
|
||||||
if (Global.MovieSession.Movie.IsActive && !(Global.MovieSession.Movie is TasMovie))
|
if (Global.MovieSession.Movie.IsActive && !(Global.MovieSession.Movie is TasMovie))
|
||||||
{
|
{
|
||||||
|
|
|
@ -84,6 +84,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
PadBox.Controls.Add(new VirtualPadAnalogStick
|
PadBox.Controls.Add(new VirtualPadAnalogStick
|
||||||
{
|
{
|
||||||
Name = button.Name,
|
Name = button.Name,
|
||||||
|
SecondaryName = button.SecondaryNames.Any() ? button.SecondaryNames[0] : "",
|
||||||
Location = UIHelper.Scale(button.Location),
|
Location = UIHelper.Scale(button.Location),
|
||||||
Size = UIHelper.Scale(new Size(180 + 79, 200 + 9)),
|
Size = UIHelper.Scale(new Size(180 + 79, 200 + 9)),
|
||||||
RangeX = new float[] { button.MinValue, button.MidValue, button.MaxValue },
|
RangeX = new float[] { button.MinValue, button.MidValue, button.MaxValue },
|
||||||
|
|
|
@ -40,12 +40,16 @@ namespace BizHawk.Client.EmuHawk
|
||||||
public float[] RangeX = new float[] { -128f, 0.0f, 127f };
|
public float[] RangeX = new float[] { -128f, 0.0f, 127f };
|
||||||
public float[] RangeY = new float[] { -128f, 0.0f, 127f };
|
public float[] RangeY = new float[] { -128f, 0.0f, 127f };
|
||||||
|
|
||||||
|
public string SecondaryName { get; set; }
|
||||||
|
|
||||||
|
|
||||||
private void VirtualPadAnalogStick_Load(object sender, EventArgs e)
|
private void VirtualPadAnalogStick_Load(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
AnalogStick.Name = Name;
|
AnalogStick.Name = Name;
|
||||||
AnalogStick.XName = Name;
|
AnalogStick.XName = Name;
|
||||||
AnalogStick.YName = Name.Replace("X", "Y"); // TODO: allow schema to dictate this but this is a convenient default
|
AnalogStick.YName = !string.IsNullOrEmpty(SecondaryName)
|
||||||
|
? SecondaryName
|
||||||
|
: Name.Replace("X", "Y"); // Fallback
|
||||||
AnalogStick.SetRangeX(RangeX);
|
AnalogStick.SetRangeX(RangeX);
|
||||||
AnalogStick.SetRangeY(RangeY);
|
AnalogStick.SetRangeY(RangeY);
|
||||||
|
|
||||||
|
@ -228,7 +232,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
manualR.ValueChanged -= polarNumericChangedEventHandler;
|
manualR.ValueChanged -= polarNumericChangedEventHandler;
|
||||||
manualTheta.ValueChanged -= polarNumericChangedEventHandler;
|
manualTheta.ValueChanged -= polarNumericChangedEventHandler;
|
||||||
|
|
||||||
manualR.Value = (decimal)Math.Sqrt(Math.Pow(AnalogStick.X - rangeAverageX, 2) + Math.Pow(AnalogStick.Y - rangeAverageY, 2));
|
manualR.Value = Math.Min(manualR.Value, (decimal)Math.Sqrt(Math.Pow(AnalogStick.X - rangeAverageX, 2) + Math.Pow(AnalogStick.Y - rangeAverageY, 2)));
|
||||||
manualTheta.Value = (decimal)(Math.Atan2(AnalogStick.Y - rangeAverageY, AnalogStick.X - rangeAverageX) * (180 / Math.PI));
|
manualTheta.Value = (decimal)(Math.Atan2(AnalogStick.Y - rangeAverageY, AnalogStick.X - rangeAverageX) * (180 / Math.PI));
|
||||||
|
|
||||||
manualR.ValueChanged += polarNumericChangedEventHandler;
|
manualR.ValueChanged += polarNumericChangedEventHandler;
|
||||||
|
|
|
@ -0,0 +1,102 @@
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Drawing;
|
||||||
|
|
||||||
|
using BizHawk.Emulation.Common;
|
||||||
|
|
||||||
|
namespace BizHawk.Client.EmuHawk
|
||||||
|
{
|
||||||
|
[SchemaAttributes("NGP")]
|
||||||
|
public class NgpSchema : IVirtualPadSchema
|
||||||
|
{
|
||||||
|
public IEnumerable<PadSchema> GetPadSchemas(IEmulator core)
|
||||||
|
{
|
||||||
|
yield return StandardController();
|
||||||
|
yield return ConsoleButtons();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static PadSchema StandardController()
|
||||||
|
{
|
||||||
|
return new PadSchema
|
||||||
|
{
|
||||||
|
IsConsole = false,
|
||||||
|
DefaultSize = new Size(174, 79),
|
||||||
|
Buttons = new[]
|
||||||
|
{
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "Up",
|
||||||
|
DisplayName = "",
|
||||||
|
Icon = Properties.Resources.BlueUp,
|
||||||
|
Location = new Point(14, 12),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "Down",
|
||||||
|
DisplayName = "",
|
||||||
|
Icon = Properties.Resources.BlueDown,
|
||||||
|
Location = new Point(14, 56),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "Left",
|
||||||
|
DisplayName = "",
|
||||||
|
Icon = Properties.Resources.Back,
|
||||||
|
Location = new Point(2, 34),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "Right",
|
||||||
|
DisplayName = "",
|
||||||
|
Icon = Properties.Resources.Forward,
|
||||||
|
Location = new Point(24, 34),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "B",
|
||||||
|
DisplayName = "B",
|
||||||
|
Location = new Point(74, 34),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "A",
|
||||||
|
DisplayName = "A",
|
||||||
|
Location = new Point(98, 34),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "Option",
|
||||||
|
DisplayName = "O",
|
||||||
|
Location = new Point(146, 12),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private static PadSchema ConsoleButtons()
|
||||||
|
{
|
||||||
|
return new PadSchema
|
||||||
|
{
|
||||||
|
DisplayName = "Console",
|
||||||
|
IsConsole = true,
|
||||||
|
DefaultSize = new Size(75, 50),
|
||||||
|
Buttons = new[]
|
||||||
|
{
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "Power",
|
||||||
|
DisplayName = "Power",
|
||||||
|
Location = new Point(10, 15),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,7 +1,10 @@
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
using BizHawk.Emulation.Common;
|
using BizHawk.Emulation.Common;
|
||||||
|
using BizHawk.Emulation.Cores.Consoles.Sega.Saturn;
|
||||||
|
|
||||||
namespace BizHawk.Client.EmuHawk
|
namespace BizHawk.Client.EmuHawk
|
||||||
{
|
{
|
||||||
|
@ -10,9 +13,56 @@ namespace BizHawk.Client.EmuHawk
|
||||||
{
|
{
|
||||||
public IEnumerable<PadSchema> GetPadSchemas(IEmulator core)
|
public IEnumerable<PadSchema> GetPadSchemas(IEmulator core)
|
||||||
{
|
{
|
||||||
yield return StandardController(1);
|
var ss = ((Saturnus)core).GetSyncSettings();
|
||||||
yield return StandardController(2);
|
|
||||||
yield return ConsoleButtons();
|
int totalPorts = (ss.Port1Multitap ? 6 : 1) + (ss.Port2Multitap ? 6 : 1);
|
||||||
|
|
||||||
|
var padSchemas = new SaturnusControllerDeck.Device[]
|
||||||
|
{
|
||||||
|
ss.Port1,
|
||||||
|
ss.Port2,
|
||||||
|
ss.Port3,
|
||||||
|
ss.Port4,
|
||||||
|
ss.Port5,
|
||||||
|
ss.Port6,
|
||||||
|
ss.Port7,
|
||||||
|
ss.Port8,
|
||||||
|
ss.Port9,
|
||||||
|
ss.Port10,
|
||||||
|
ss.Port11,
|
||||||
|
ss.Port12
|
||||||
|
}.Take(totalPorts)
|
||||||
|
.Where(p => p != SaturnusControllerDeck.Device.None)
|
||||||
|
.Select((p, i) => GenerateSchemaForPort(p, i + 1))
|
||||||
|
.Where(s => s != null)
|
||||||
|
.Concat(new[] { ConsoleButtons() });
|
||||||
|
|
||||||
|
return padSchemas;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static PadSchema GenerateSchemaForPort(SaturnusControllerDeck.Device device, int controllerNum)
|
||||||
|
{
|
||||||
|
switch (device)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
case SaturnusControllerDeck.Device.None:
|
||||||
|
return null;
|
||||||
|
case SaturnusControllerDeck.Device.Gamepad:
|
||||||
|
return StandardController(controllerNum);
|
||||||
|
case SaturnusControllerDeck.Device.ThreeDeePad:
|
||||||
|
return ThreeDeeController(controllerNum);
|
||||||
|
case SaturnusControllerDeck.Device.Mouse:
|
||||||
|
return Mouse(controllerNum);
|
||||||
|
case SaturnusControllerDeck.Device.Wheel:
|
||||||
|
return Wheel(controllerNum);
|
||||||
|
case SaturnusControllerDeck.Device.Mission:
|
||||||
|
return MissionControl(controllerNum);
|
||||||
|
case SaturnusControllerDeck.Device.DualMission:
|
||||||
|
return DualMissionControl(controllerNum);
|
||||||
|
case SaturnusControllerDeck.Device.Keyboard:
|
||||||
|
MessageBox.Show("This peripheral is not supported yet");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static PadSchema StandardController(int controller)
|
private static PadSchema StandardController(int controller)
|
||||||
|
@ -20,7 +70,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
return new PadSchema
|
return new PadSchema
|
||||||
{
|
{
|
||||||
IsConsole = false,
|
IsConsole = false,
|
||||||
DefaultSize = new Size(212, 90),
|
DefaultSize = new Size(500, 500),
|
||||||
Buttons = new[]
|
Buttons = new[]
|
||||||
{
|
{
|
||||||
new PadSchema.ButtonSchema
|
new PadSchema.ButtonSchema
|
||||||
|
@ -122,6 +172,435 @@ namespace BizHawk.Client.EmuHawk
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static PadSchema ThreeDeeController(int controller)
|
||||||
|
{
|
||||||
|
return new PadSchema
|
||||||
|
{
|
||||||
|
IsConsole = false,
|
||||||
|
DefaultSize = new Size(458, 285),
|
||||||
|
Buttons = new[]
|
||||||
|
{
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "P" + controller + " Up",
|
||||||
|
DisplayName = "",
|
||||||
|
Icon = Properties.Resources.BlueUp,
|
||||||
|
Location = new Point(290, 77),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "P" + controller + " Down",
|
||||||
|
DisplayName = "",
|
||||||
|
Icon = Properties.Resources.BlueDown,
|
||||||
|
Location = new Point(290, 121),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "P" + controller + " Left",
|
||||||
|
DisplayName = "",
|
||||||
|
Icon = Properties.Resources.Back,
|
||||||
|
Location = new Point(278, 99),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "P" + controller + " Right",
|
||||||
|
DisplayName = "",
|
||||||
|
Icon = Properties.Resources.Forward,
|
||||||
|
Location = new Point(300, 99),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "P" + controller + " Start",
|
||||||
|
DisplayName = "S",
|
||||||
|
Location = new Point(334, 112),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "P" + controller + " A",
|
||||||
|
DisplayName = "A",
|
||||||
|
Location = new Point(366, 123),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "P" + controller + " B",
|
||||||
|
DisplayName = "B",
|
||||||
|
Location = new Point(390, 113),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "P" + controller + " C",
|
||||||
|
DisplayName = "C",
|
||||||
|
Location = new Point(414, 103),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "P" + controller + " X",
|
||||||
|
DisplayName = "X",
|
||||||
|
Location = new Point(366, 100),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "P" + controller + " Y",
|
||||||
|
DisplayName = "Y",
|
||||||
|
Location = new Point(390, 90),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "P" + controller + " Z",
|
||||||
|
DisplayName = "Z",
|
||||||
|
Location = new Point(414, 80),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = $"P{controller} Stick Horizontal",
|
||||||
|
SecondaryNames = new[] { $"P{controller} StickVertical" },
|
||||||
|
MinValue = 0,
|
||||||
|
MidValue = 127,
|
||||||
|
MaxValue = 255,
|
||||||
|
MinValueSec = 0,
|
||||||
|
MidValueSec = 127,
|
||||||
|
MaxValueSec = 255,
|
||||||
|
DisplayName = "",
|
||||||
|
Location = new Point(6, 74),
|
||||||
|
Type = PadSchema.PadInputType.AnalogStick
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = $"P{controller} Left Shoulder",
|
||||||
|
DisplayName = "L",
|
||||||
|
Location = new Point(8, 12),
|
||||||
|
Type = PadSchema.PadInputType.FloatSingle,
|
||||||
|
TargetSize = new Size(128, 55),
|
||||||
|
MinValue = 0,
|
||||||
|
MaxValue = 255,
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = $"P{controller} Right Shoulder",
|
||||||
|
DisplayName = "L",
|
||||||
|
Location = new Point(328, 12),
|
||||||
|
Type = PadSchema.PadInputType.FloatSingle,
|
||||||
|
TargetSize = new Size(128, 55),
|
||||||
|
MinValue = 0,
|
||||||
|
MaxValue = 255,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private static PadSchema Mouse(int controller)
|
||||||
|
{
|
||||||
|
return new PadSchema
|
||||||
|
{
|
||||||
|
DisplayName = "Mouse",
|
||||||
|
IsConsole = false,
|
||||||
|
DefaultSize = new Size(375, 320),
|
||||||
|
Buttons = new[]
|
||||||
|
{
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = $"P{controller} X",
|
||||||
|
SecondaryNames = new[] { $"P{controller} Y" },
|
||||||
|
Location = new Point(14, 17),
|
||||||
|
Type = PadSchema.PadInputType.TargetedPair,
|
||||||
|
TargetSize = new Size(256, 256)
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "P" + controller + " Mouse Left",
|
||||||
|
DisplayName = "Left",
|
||||||
|
Location = new Point(300, 17),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "P" + controller + " Mouse Center",
|
||||||
|
DisplayName = "Center",
|
||||||
|
Location = new Point(300, 47),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "P" + controller + " Mouse Right",
|
||||||
|
DisplayName = "Right",
|
||||||
|
Location = new Point(300, 77),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "P" + controller + " Start",
|
||||||
|
DisplayName = "Start",
|
||||||
|
Location = new Point(300, 107),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private static PadSchema Wheel(int controller)
|
||||||
|
{
|
||||||
|
return new PadSchema
|
||||||
|
{
|
||||||
|
DisplayName = "Wheel",
|
||||||
|
IsConsole = false,
|
||||||
|
DefaultSize = new Size(325, 100),
|
||||||
|
Buttons = new[]
|
||||||
|
{
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = $"P{controller} Wheel",
|
||||||
|
DisplayName = "Wheel",
|
||||||
|
Location = new Point(8, 12),
|
||||||
|
Type = PadSchema.PadInputType.FloatSingle,
|
||||||
|
TargetSize = new Size(128, 55),
|
||||||
|
MinValue = 0,
|
||||||
|
MaxValue = 255,
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "P" + controller + " Up",
|
||||||
|
DisplayName = "",
|
||||||
|
Icon = Properties.Resources.BlueUp,
|
||||||
|
Location = new Point(150, 20),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "P" + controller + " Down",
|
||||||
|
DisplayName = "",
|
||||||
|
Icon = Properties.Resources.BlueDown,
|
||||||
|
Location = new Point(150, 43),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "P" + controller + " A",
|
||||||
|
DisplayName = "A",
|
||||||
|
Location = new Point(180, 63),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "P" + controller + " B",
|
||||||
|
DisplayName = "B",
|
||||||
|
Location = new Point(204, 53),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "P" + controller + " C",
|
||||||
|
DisplayName = "C",
|
||||||
|
Location = new Point(228, 43),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "P" + controller + " X",
|
||||||
|
DisplayName = "X",
|
||||||
|
Location = new Point(180, 40),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "P" + controller + " Y",
|
||||||
|
DisplayName = "Y",
|
||||||
|
Location = new Point(204, 30),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "P" + controller + " Z",
|
||||||
|
DisplayName = "Z",
|
||||||
|
Location = new Point(228, 20),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "P" + controller + " Start",
|
||||||
|
DisplayName = "Start",
|
||||||
|
Location = new Point(268, 20),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private static PadSchema MissionControl(int controller)
|
||||||
|
{
|
||||||
|
return new PadSchema
|
||||||
|
{
|
||||||
|
DisplayName = "Mission",
|
||||||
|
IsConsole = false,
|
||||||
|
DefaultSize = new Size(445, 230),
|
||||||
|
Buttons = new[]
|
||||||
|
{
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "P" + controller + " Start",
|
||||||
|
DisplayName = "Start",
|
||||||
|
Location = new Point(45, 15),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "P" + controller + " L",
|
||||||
|
DisplayName = "L",
|
||||||
|
Location = new Point(5, 58),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "P" + controller + " R",
|
||||||
|
DisplayName = "R",
|
||||||
|
Location = new Point(105, 58),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "P" + controller + " X",
|
||||||
|
DisplayName = "X",
|
||||||
|
Location = new Point(30, 43),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "P" + controller + " Y",
|
||||||
|
DisplayName = "Y",
|
||||||
|
Location = new Point(55, 43),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "P" + controller + " Z",
|
||||||
|
DisplayName = "Z",
|
||||||
|
Location = new Point(80, 43),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "P" + controller + " A",
|
||||||
|
DisplayName = "A",
|
||||||
|
Location = new Point(30, 70),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "P" + controller + " B",
|
||||||
|
DisplayName = "B",
|
||||||
|
Location = new Point(55, 70),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "P" + controller + " C",
|
||||||
|
DisplayName = "C",
|
||||||
|
Location = new Point(80, 70),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = $"P{controller} Stick Horizontal",
|
||||||
|
SecondaryNames = new[] { $"P{controller} Stick Vertical" },
|
||||||
|
MinValue = 0,
|
||||||
|
MidValue = 127,
|
||||||
|
MaxValue = 255,
|
||||||
|
MinValueSec = 0,
|
||||||
|
MidValueSec = 127,
|
||||||
|
MaxValueSec = 255,
|
||||||
|
DisplayName = "",
|
||||||
|
Location = new Point(185, 13),
|
||||||
|
Type = PadSchema.PadInputType.AnalogStick
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "P" + controller + " Throttle",
|
||||||
|
DisplayName = "Throttle",
|
||||||
|
Location = new Point(135, 13),
|
||||||
|
Type = PadSchema.PadInputType.FloatSingle,
|
||||||
|
TargetSize = new Size(64, 178),
|
||||||
|
MinValue = 0,
|
||||||
|
MaxValue = 255,
|
||||||
|
Orientation = Orientation.Vertical
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private static PadSchema DualMissionControl(int controller)
|
||||||
|
{
|
||||||
|
return new PadSchema
|
||||||
|
{
|
||||||
|
DisplayName = "Dual Mission",
|
||||||
|
IsConsole = false,
|
||||||
|
DefaultSize = new Size(680, 230),
|
||||||
|
Buttons = new[]
|
||||||
|
{
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = $"P{controller} Left Stick Horizontal",
|
||||||
|
SecondaryNames = new[] { $"P{controller} Left Stick Vertical" },
|
||||||
|
MinValue = 0,
|
||||||
|
MidValue = 127,
|
||||||
|
MaxValue = 255,
|
||||||
|
MinValueSec = 0,
|
||||||
|
MidValueSec = 127,
|
||||||
|
MaxValueSec = 255,
|
||||||
|
DisplayName = "",
|
||||||
|
Location = new Point(58, 13),
|
||||||
|
Type = PadSchema.PadInputType.AnalogStick
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "P" + controller + " Left Throttle",
|
||||||
|
DisplayName = "Throttle",
|
||||||
|
Location = new Point(8, 13),
|
||||||
|
Type = PadSchema.PadInputType.FloatSingle,
|
||||||
|
TargetSize = new Size(64, 178),
|
||||||
|
MinValue = 0,
|
||||||
|
MaxValue = 255,
|
||||||
|
Orientation = Orientation.Vertical
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = $"P{controller} Right Stick Horizontal",
|
||||||
|
SecondaryNames = new[] { $"P{controller} Right StickVertical" },
|
||||||
|
MinValue = 0,
|
||||||
|
MidValue = 127,
|
||||||
|
MaxValue = 255,
|
||||||
|
MinValueSec = 0,
|
||||||
|
MidValueSec = 127,
|
||||||
|
MaxValueSec = 255,
|
||||||
|
DisplayName = "",
|
||||||
|
Location = new Point(400, 13),
|
||||||
|
Type = PadSchema.PadInputType.AnalogStick
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "P" + controller + " Right Throttle",
|
||||||
|
DisplayName = "Throttle",
|
||||||
|
Location = new Point(350, 13),
|
||||||
|
Type = PadSchema.PadInputType.FloatSingle,
|
||||||
|
TargetSize = new Size(64, 178),
|
||||||
|
MinValue = 0,
|
||||||
|
MaxValue = 255,
|
||||||
|
Orientation = Orientation.Vertical
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
private static PadSchema ConsoleButtons()
|
private static PadSchema ConsoleButtons()
|
||||||
{
|
{
|
||||||
return new PadSchema
|
return new PadSchema
|
||||||
|
|
|
@ -3,6 +3,7 @@ using System.Drawing;
|
||||||
|
|
||||||
using BizHawk.Emulation.Common;
|
using BizHawk.Emulation.Common;
|
||||||
using BizHawk.Emulation.Cores.Nintendo.SNES;
|
using BizHawk.Emulation.Cores.Nintendo.SNES;
|
||||||
|
using BizHawk.Emulation.Cores.Nintendo.SNES9X;
|
||||||
|
|
||||||
namespace BizHawk.Client.EmuHawk
|
namespace BizHawk.Client.EmuHawk
|
||||||
{
|
{
|
||||||
|
@ -10,6 +11,49 @@ namespace BizHawk.Client.EmuHawk
|
||||||
public class SnesSchema : IVirtualPadSchema
|
public class SnesSchema : IVirtualPadSchema
|
||||||
{
|
{
|
||||||
public IEnumerable<PadSchema> GetPadSchemas(IEmulator core)
|
public IEnumerable<PadSchema> GetPadSchemas(IEmulator core)
|
||||||
|
{
|
||||||
|
if (core is LibsnesCore)
|
||||||
|
{
|
||||||
|
return GetBsnesPadSchemas(core);
|
||||||
|
}
|
||||||
|
|
||||||
|
return GetSnes9xPadSchemas(core);
|
||||||
|
}
|
||||||
|
private IEnumerable<PadSchema> GetSnes9xPadSchemas(IEmulator core)
|
||||||
|
{
|
||||||
|
// Only standard controller is supported on the left port
|
||||||
|
yield return StandardController(1);
|
||||||
|
|
||||||
|
Snes9x.SyncSettings syncSettings = ((Snes9x)core).GetSyncSettings();
|
||||||
|
LibSnes9x.RightPortDevice rightPort = syncSettings.RightPort;
|
||||||
|
|
||||||
|
switch (rightPort)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
case LibSnes9x.RightPortDevice.Joypad:
|
||||||
|
yield return StandardController(2);
|
||||||
|
break;
|
||||||
|
case LibSnes9x.RightPortDevice.Justifier:
|
||||||
|
yield return Justifier(2);
|
||||||
|
break;
|
||||||
|
case LibSnes9x.RightPortDevice.Mouse:
|
||||||
|
yield return Mouse(2);
|
||||||
|
break;
|
||||||
|
case LibSnes9x.RightPortDevice.Multitap:
|
||||||
|
yield return StandardController(2);
|
||||||
|
yield return StandardController(3);
|
||||||
|
yield return StandardController(4);
|
||||||
|
yield return StandardController(5);
|
||||||
|
break;
|
||||||
|
case LibSnes9x.RightPortDevice.SuperScope:
|
||||||
|
yield return SuperScope(2);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
yield return ConsoleButtons();
|
||||||
|
}
|
||||||
|
|
||||||
|
private IEnumerable<PadSchema> GetBsnesPadSchemas(IEmulator core)
|
||||||
{
|
{
|
||||||
var syncsettings = ((LibsnesCore)core).GetSyncSettings();
|
var syncsettings = ((LibsnesCore)core).GetSyncSettings();
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,155 @@
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Drawing;
|
||||||
|
|
||||||
|
using BizHawk.Emulation.Common;
|
||||||
|
|
||||||
|
namespace BizHawk.Client.EmuHawk
|
||||||
|
{
|
||||||
|
[SchemaAttributes("VB")]
|
||||||
|
public class VirtualBoySchema : IVirtualPadSchema
|
||||||
|
{
|
||||||
|
public IEnumerable<PadSchema> GetPadSchemas(IEmulator core)
|
||||||
|
{
|
||||||
|
yield return StandardController();
|
||||||
|
yield return ConsoleButtons();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static PadSchema StandardController()
|
||||||
|
{
|
||||||
|
return new PadSchema
|
||||||
|
{
|
||||||
|
IsConsole = false,
|
||||||
|
DefaultSize = new Size(222, 103),
|
||||||
|
Buttons = new[]
|
||||||
|
{
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "L_Up",
|
||||||
|
DisplayName = "",
|
||||||
|
Icon = Properties.Resources.BlueUp,
|
||||||
|
Location = new Point(14, 36),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "L_Down",
|
||||||
|
DisplayName = "",
|
||||||
|
Icon = Properties.Resources.BlueDown,
|
||||||
|
Location = new Point(14, 80),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "L_Left",
|
||||||
|
DisplayName = "",
|
||||||
|
Icon = Properties.Resources.Back,
|
||||||
|
Location = new Point(2, 58),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "L_Right",
|
||||||
|
DisplayName = "",
|
||||||
|
Icon = Properties.Resources.Forward,
|
||||||
|
Location = new Point(24, 58),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "B",
|
||||||
|
DisplayName = "B",
|
||||||
|
Location = new Point(122, 58),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "A",
|
||||||
|
DisplayName = "A",
|
||||||
|
Location = new Point(146, 58),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "Select",
|
||||||
|
DisplayName = "s",
|
||||||
|
Location = new Point(52, 58),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "Start",
|
||||||
|
DisplayName = "S",
|
||||||
|
Location = new Point(74, 58),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "R_Up",
|
||||||
|
DisplayName = "",
|
||||||
|
Icon = Properties.Resources.BlueUp,
|
||||||
|
Location = new Point(188, 36),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "R_Down",
|
||||||
|
DisplayName = "",
|
||||||
|
Icon = Properties.Resources.BlueDown,
|
||||||
|
Location = new Point(188, 80),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "R_Left",
|
||||||
|
DisplayName = "",
|
||||||
|
Icon = Properties.Resources.Back,
|
||||||
|
Location = new Point(176, 58),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "R_Right",
|
||||||
|
DisplayName = "",
|
||||||
|
Icon = Properties.Resources.Forward,
|
||||||
|
Location = new Point(198, 58),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "L",
|
||||||
|
DisplayName = "L",
|
||||||
|
Location = new Point(24, 8),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "R",
|
||||||
|
DisplayName = "R",
|
||||||
|
Location = new Point(176, 8),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
},
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private static PadSchema ConsoleButtons()
|
||||||
|
{
|
||||||
|
return new PadSchema
|
||||||
|
{
|
||||||
|
DisplayName = "Console",
|
||||||
|
IsConsole = true,
|
||||||
|
DefaultSize = new Size(75, 50),
|
||||||
|
Buttons = new[]
|
||||||
|
{
|
||||||
|
new PadSchema.ButtonSchema
|
||||||
|
{
|
||||||
|
Name = "Power",
|
||||||
|
DisplayName = "Power",
|
||||||
|
Location = new Point(10, 15),
|
||||||
|
Type = PadSchema.PadInputType.Boolean
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<configuration>
|
<configuration>
|
||||||
<startup>
|
<startup>
|
||||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
|
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1"/>
|
||||||
</startup>
|
</startup>
|
||||||
</configuration>
|
</configuration>
|
||||||
|
|
|
@ -1,28 +1,27 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
|
||||||
<DebugSymbols>true</DebugSymbols>
|
<DebugSymbols>true</DebugSymbols>
|
||||||
<OutputPath>..\output64\</OutputPath>
|
<OutputPath>..\output\</OutputPath>
|
||||||
<DefineConstants>TRACE;DEBUG;WINDOWS</DefineConstants>
|
<DefineConstants>TRACE;DEBUG;WINDOWS</DefineConstants>
|
||||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||||
<DebugType>full</DebugType>
|
<DebugType>full</DebugType>
|
||||||
<PlatformTarget>x64</PlatformTarget>
|
<PlatformTarget>x64</PlatformTarget>
|
||||||
<CodeAnalysisLogFile>..\output\MultiHawk.exe.CodeAnalysisLog.xml</CodeAnalysisLogFile>
|
|
||||||
<CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
|
<CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
|
||||||
<CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
|
<CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
|
||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||||
<CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
|
<CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
|
||||||
<CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
|
<CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
|
||||||
|
<Prefer32Bit>false</Prefer32Bit>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
|
||||||
<OutputPath>..\output64\</OutputPath>
|
<OutputPath>..\output\</OutputPath>
|
||||||
<DefineConstants>TRACE;WINDOWS</DefineConstants>
|
<DefineConstants>TRACE;WINDOWS</DefineConstants>
|
||||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||||
<Optimize>true</Optimize>
|
<Optimize>true</Optimize>
|
||||||
<DebugType>pdbonly</DebugType>
|
<DebugType>pdbonly</DebugType>
|
||||||
<PlatformTarget>x64</PlatformTarget>
|
<PlatformTarget>x64</PlatformTarget>
|
||||||
<CodeAnalysisLogFile>..\output\MultiHawk.exe.CodeAnalysisLog.xml</CodeAnalysisLogFile>
|
|
||||||
<CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
|
<CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
|
||||||
<CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
|
<CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
|
||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
@ -31,6 +30,7 @@
|
||||||
<CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets>
|
<CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets>
|
||||||
<CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
|
<CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
|
||||||
<CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
|
<CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
|
||||||
|
<Prefer32Bit>false</Prefer32Bit>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
|
@ -41,31 +41,10 @@
|
||||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
<RootNamespace>BizHawk.Client.MultiHawk</RootNamespace>
|
<RootNamespace>BizHawk.Client.MultiHawk</RootNamespace>
|
||||||
<AssemblyName>MultiHawk</AssemblyName>
|
<AssemblyName>MultiHawk</AssemblyName>
|
||||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
|
||||||
<FileAlignment>512</FileAlignment>
|
<FileAlignment>512</FileAlignment>
|
||||||
<TargetFrameworkProfile />
|
<TargetFrameworkProfile />
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
|
|
||||||
<PlatformTarget>x86</PlatformTarget>
|
|
||||||
<DebugSymbols>true</DebugSymbols>
|
|
||||||
<DebugType>full</DebugType>
|
|
||||||
<Optimize>false</Optimize>
|
|
||||||
<OutputPath>..\output\</OutputPath>
|
|
||||||
<DefineConstants>TRACE;DEBUG;WINDOWS</DefineConstants>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<WarningLevel>4</WarningLevel>
|
|
||||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
|
|
||||||
<PlatformTarget>x86</PlatformTarget>
|
|
||||||
<DebugType>pdbonly</DebugType>
|
|
||||||
<Optimize>true</Optimize>
|
|
||||||
<OutputPath>..\output\</OutputPath>
|
|
||||||
<DefineConstants>TRACE;WINDOWS</DefineConstants>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<WarningLevel>4</WarningLevel>
|
|
||||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="Microsoft.VisualBasic" />
|
<Reference Include="Microsoft.VisualBasic" />
|
||||||
<Reference Include="Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
<Reference Include="Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||||
|
@ -269,11 +248,11 @@
|
||||||
<None Include="images\restart.png" />
|
<None Include="images\restart.png" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
Other similar extension points exist, see Microsoft.Common.targets.
|
Other similar extension points exist, see Microsoft.Common.targets.
|
||||||
<Target Name="BeforeBuild">
|
<Target Name="BeforeBuild">
|
||||||
</Target>
|
</Target>
|
||||||
<Target Name="AfterBuild">
|
<Target Name="AfterBuild">
|
||||||
</Target>
|
</Target>
|
||||||
-->
|
-->
|
||||||
</Project>
|
</Project>
|
|
@ -1,7 +1,7 @@
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
// <auto-generated>
|
// <auto-generated>
|
||||||
// This code was generated by a tool.
|
// This code was generated by a tool.
|
||||||
// Runtime Version:4.0.30319.34209
|
// Runtime Version:4.0.30319.42000
|
||||||
//
|
//
|
||||||
// Changes to this file may cause incorrect behavior and will be lost if
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
// the code is regenerated.
|
// the code is regenerated.
|
||||||
|
@ -12,7 +12,7 @@ namespace BizHawk.Client.MultiHawk.Properties {
|
||||||
|
|
||||||
|
|
||||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "12.0.0.0")]
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")]
|
||||||
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
|
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
|
||||||
|
|
||||||
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
|
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
|
||||||
|
@ -10,38 +10,17 @@
|
||||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
<RootNamespace>BizHawk.Common</RootNamespace>
|
<RootNamespace>BizHawk.Common</RootNamespace>
|
||||||
<AssemblyName>BizHawk.Common</AssemblyName>
|
<AssemblyName>BizHawk.Common</AssemblyName>
|
||||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
|
||||||
<FileAlignment>512</FileAlignment>
|
<FileAlignment>512</FileAlignment>
|
||||||
</PropertyGroup>
|
<TargetFrameworkProfile />
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
|
|
||||||
<DebugSymbols>true</DebugSymbols>
|
|
||||||
<DebugType>full</DebugType>
|
|
||||||
<Optimize>false</Optimize>
|
|
||||||
<OutputPath>..\output\dll\</OutputPath>
|
|
||||||
<DefineConstants>TRACE;DEBUG;WINDOWS</DefineConstants>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<WarningLevel>4</WarningLevel>
|
|
||||||
<PlatformTarget>x86</PlatformTarget>
|
|
||||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
|
|
||||||
<DebugType>pdbonly</DebugType>
|
|
||||||
<Optimize>true</Optimize>
|
|
||||||
<OutputPath>..\output\dll\</OutputPath>
|
|
||||||
<DefineConstants>TRACE;WINDOWS</DefineConstants>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<WarningLevel>4</WarningLevel>
|
|
||||||
<PlatformTarget>x86</PlatformTarget>
|
|
||||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
|
||||||
<DebugSymbols>true</DebugSymbols>
|
<DebugSymbols>true</DebugSymbols>
|
||||||
<OutputPath>..\output64\dll\</OutputPath>
|
<OutputPath>..\output\dll\</OutputPath>
|
||||||
<DefineConstants>TRACE;DEBUG;WINDOWS</DefineConstants>
|
<DefineConstants>TRACE;DEBUG;WINDOWS</DefineConstants>
|
||||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||||
<DebugType>full</DebugType>
|
<DebugType>full</DebugType>
|
||||||
<PlatformTarget>x64</PlatformTarget>
|
<PlatformTarget>x64</PlatformTarget>
|
||||||
<CodeAnalysisLogFile>..\output\dll\BizHawk.Common.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
|
|
||||||
<CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
|
<CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
|
||||||
<CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
|
<CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
|
||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
@ -51,15 +30,15 @@
|
||||||
<CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
|
<CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
|
||||||
<CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
|
<CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
|
||||||
<CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
|
<CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
|
||||||
|
<Prefer32Bit>false</Prefer32Bit>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
|
||||||
<OutputPath>..\output64\dll\</OutputPath>
|
<OutputPath>..\output\dll\</OutputPath>
|
||||||
<DefineConstants>TRACE;WINDOWS</DefineConstants>
|
<DefineConstants>TRACE;WINDOWS</DefineConstants>
|
||||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||||
<Optimize>true</Optimize>
|
<Optimize>true</Optimize>
|
||||||
<DebugType>pdbonly</DebugType>
|
<DebugType>pdbonly</DebugType>
|
||||||
<PlatformTarget>x64</PlatformTarget>
|
<PlatformTarget>x64</PlatformTarget>
|
||||||
<CodeAnalysisLogFile>..\output\dll\BizHawk.Common.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
|
|
||||||
<CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
|
<CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
|
||||||
<CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
|
<CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
|
||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
@ -69,9 +48,11 @@
|
||||||
<CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
|
<CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
|
||||||
<CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
|
<CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
|
||||||
<CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
|
<CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
|
||||||
|
<Prefer32Bit>false</Prefer32Bit>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.ComponentModel.DataAnnotations" />
|
||||||
<Reference Include="System.Core" />
|
<Reference Include="System.Core" />
|
||||||
<Reference Include="System.Xml.Linq" />
|
<Reference Include="System.Xml.Linq" />
|
||||||
<Reference Include="System.Data.DataSetExtensions" />
|
<Reference Include="System.Data.DataSetExtensions" />
|
||||||
|
@ -90,12 +71,18 @@
|
||||||
<Compile Include="BinaryQuickSerializer.cs" />
|
<Compile Include="BinaryQuickSerializer.cs" />
|
||||||
<Compile Include="Bit.cs" />
|
<Compile Include="Bit.cs" />
|
||||||
<Compile Include="BitReverse.cs" />
|
<Compile Include="BitReverse.cs" />
|
||||||
|
<Compile Include="BizInvoke\BizExvoker.cs" />
|
||||||
<Compile Include="BizInvoke\BizInvoker.cs" />
|
<Compile Include="BizInvoke\BizInvoker.cs" />
|
||||||
|
<Compile Include="BizInvoke\BizInvokeUtilities.cs" />
|
||||||
|
<Compile Include="BizInvoke\CallingConventionAdapter.cs" />
|
||||||
<Compile Include="BizInvoke\DynamicLibraryImportResolver.cs" />
|
<Compile Include="BizInvoke\DynamicLibraryImportResolver.cs" />
|
||||||
|
<Compile Include="BizInvoke\MemoryBlock.cs" />
|
||||||
|
<Compile Include="BizInvoke\WaterboxUtils.cs" />
|
||||||
<Compile Include="Buffer.cs" />
|
<Compile Include="Buffer.cs" />
|
||||||
<Compile Include="Colors.cs" />
|
<Compile Include="Colors.cs" />
|
||||||
<Compile Include="CustomCollections.cs" />
|
<Compile Include="CustomCollections.cs" />
|
||||||
<Compile Include="DeepEquality.cs" />
|
<Compile Include="DeepEquality.cs" />
|
||||||
|
<Compile Include="DescribableEnumConverter.cs" />
|
||||||
<Compile Include="Extensions\BufferExtensions.cs" />
|
<Compile Include="Extensions\BufferExtensions.cs" />
|
||||||
<Compile Include="Extensions\CollectionExtensions.cs" />
|
<Compile Include="Extensions\CollectionExtensions.cs" />
|
||||||
<Compile Include="Extensions\IOExtensions.cs" />
|
<Compile Include="Extensions\IOExtensions.cs" />
|
||||||
|
|
|
@ -0,0 +1,150 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Reflection.Emit;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace BizHawk.Common.BizInvoke
|
||||||
|
{
|
||||||
|
public static class BizExvoker
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// the assembly that all delegate types are placed in
|
||||||
|
/// </summary>
|
||||||
|
private static readonly AssemblyBuilder ImplAssemblyBuilder;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// the module that all delegate types are placed in
|
||||||
|
/// </summary>
|
||||||
|
private static readonly ModuleBuilder ImplModuleBuilder;
|
||||||
|
|
||||||
|
static BizExvoker()
|
||||||
|
{
|
||||||
|
var aname = new AssemblyName("BizExvokeProxyAssembly");
|
||||||
|
ImplAssemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(aname, AssemblyBuilderAccess.Run);
|
||||||
|
ImplModuleBuilder = ImplAssemblyBuilder.DefineDynamicModule("BizExvokerModule");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// holds the delegate types for a type
|
||||||
|
/// </summary>
|
||||||
|
private class DelegateStorage
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// the type that this storage was made for
|
||||||
|
/// </summary>
|
||||||
|
public Type OriginalType { get; }
|
||||||
|
/// <summary>
|
||||||
|
/// the type that the delegate types reside in
|
||||||
|
/// </summary>
|
||||||
|
public Type StorageType { get; }
|
||||||
|
|
||||||
|
public List<StoredDelegateInfo> DelegateTypes { get; } = new List<StoredDelegateInfo>();
|
||||||
|
|
||||||
|
public class StoredDelegateInfo
|
||||||
|
{
|
||||||
|
public MethodInfo Method { get; }
|
||||||
|
public Type DelegateType { get; }
|
||||||
|
public string EntryPointName { get; }
|
||||||
|
public StoredDelegateInfo(MethodInfo method, Type delegateType, string entryPointName)
|
||||||
|
{
|
||||||
|
Method = method;
|
||||||
|
DelegateType = delegateType;
|
||||||
|
EntryPointName = entryPointName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public DelegateStorage(Type type)
|
||||||
|
{
|
||||||
|
var methods = type.GetMethods(BindingFlags.Instance | BindingFlags.Public)
|
||||||
|
.Select(m => new
|
||||||
|
{
|
||||||
|
Info = m,
|
||||||
|
Attr = m.GetCustomAttributes(true).OfType<BizExportAttribute>().FirstOrDefault()
|
||||||
|
})
|
||||||
|
.Where(a => a.Attr != null)
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
var typeBuilder = ImplModuleBuilder.DefineType(
|
||||||
|
"Bizhawk.BizExvokeHolder" + type.Name, TypeAttributes.Class | TypeAttributes.Public | TypeAttributes.Sealed);
|
||||||
|
|
||||||
|
foreach (var a in methods)
|
||||||
|
{
|
||||||
|
MethodBuilder unused;
|
||||||
|
var delegateType = BizInvokeUtilities.CreateDelegateType(a.Info, a.Attr.CallingConvention, typeBuilder, out unused).CreateType();
|
||||||
|
DelegateTypes.Add(new StoredDelegateInfo(a.Info, delegateType, a.Attr.EntryPoint ?? a.Info.Name));
|
||||||
|
}
|
||||||
|
StorageType = typeBuilder.CreateType();
|
||||||
|
OriginalType = type;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class ExvokerImpl : IImportResolver
|
||||||
|
{
|
||||||
|
private readonly Dictionary<string, IntPtr> EntryPoints = new Dictionary<string, IntPtr>();
|
||||||
|
|
||||||
|
private readonly List<Delegate> Delegates = new List<Delegate>();
|
||||||
|
|
||||||
|
public ExvokerImpl(object o, DelegateStorage d, ICallingConventionAdapter a)
|
||||||
|
{
|
||||||
|
foreach (var sdt in d.DelegateTypes)
|
||||||
|
{
|
||||||
|
var del = Delegate.CreateDelegate(sdt.DelegateType, o, sdt.Method);
|
||||||
|
Delegates.Add(del); // prevent garbage collection of the delegate, which would invalidate the pointer
|
||||||
|
EntryPoints.Add(sdt.EntryPointName, a.GetFunctionPointerForDelegate(del));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public IntPtr Resolve(string entryPoint)
|
||||||
|
{
|
||||||
|
IntPtr ret;
|
||||||
|
EntryPoints.TryGetValue(entryPoint, out ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static readonly Dictionary<Type, DelegateStorage> Impls = new Dictionary<Type, DelegateStorage>();
|
||||||
|
|
||||||
|
|
||||||
|
public static IImportResolver GetExvoker(object o, ICallingConventionAdapter a)
|
||||||
|
{
|
||||||
|
DelegateStorage ds;
|
||||||
|
lock (Impls)
|
||||||
|
{
|
||||||
|
var type = o.GetType();
|
||||||
|
if (!Impls.TryGetValue(type, out ds))
|
||||||
|
{
|
||||||
|
ds = new DelegateStorage(type);
|
||||||
|
Impls.Add(type, ds);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return new ExvokerImpl(o, ds, a);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// mark an instance method to be exported by BizExvoker
|
||||||
|
/// </summary>
|
||||||
|
[AttributeUsage(AttributeTargets.Method)]
|
||||||
|
public class BizExportAttribute : Attribute
|
||||||
|
{
|
||||||
|
public CallingConvention CallingConvention { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the name of entry point; if not given, the method's name is used
|
||||||
|
/// </summary>
|
||||||
|
public string EntryPoint { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="BizImportAttribute"/> class.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="c">unmanaged calling convention</param>
|
||||||
|
public BizExportAttribute(CallingConvention c)
|
||||||
|
{
|
||||||
|
CallingConvention = c;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,91 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Reflection.Emit;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace BizHawk.Common.BizInvoke
|
||||||
|
{
|
||||||
|
public static class BizInvokeUtilities
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// create a delegate type to match a method type
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="method">the method to "clone"</param>
|
||||||
|
/// <param name="nativeCall">native calling convention to use</param>
|
||||||
|
/// <param name="enclosingType">the type to define this delegate type as a nested type on</param>
|
||||||
|
/// <param name="invokeMethod">the methodBuilder for the magic Invoke method on the resulting type</param>
|
||||||
|
/// <returns>the resulting typeBuilder</returns>
|
||||||
|
public static TypeBuilder CreateDelegateType(MethodInfo method, CallingConvention nativeCall, TypeBuilder enclosingType,
|
||||||
|
out MethodBuilder invokeMethod)
|
||||||
|
{
|
||||||
|
var paramInfos = method.GetParameters();
|
||||||
|
var paramTypes = paramInfos.Select(p => p.ParameterType).ToArray();
|
||||||
|
var returnType = method.ReturnType;
|
||||||
|
|
||||||
|
// create the delegate type
|
||||||
|
var delegateType = enclosingType.DefineNestedType(
|
||||||
|
"DelegateType" + method.Name,
|
||||||
|
TypeAttributes.Class | TypeAttributes.NestedPrivate | TypeAttributes.Sealed,
|
||||||
|
typeof(MulticastDelegate));
|
||||||
|
|
||||||
|
var delegateCtor = delegateType.DefineConstructor(
|
||||||
|
MethodAttributes.RTSpecialName | MethodAttributes.HideBySig | MethodAttributes.Public,
|
||||||
|
CallingConventions.Standard,
|
||||||
|
new[] { typeof(object), typeof(IntPtr) });
|
||||||
|
|
||||||
|
delegateCtor.SetImplementationFlags(MethodImplAttributes.Runtime | MethodImplAttributes.Managed);
|
||||||
|
|
||||||
|
var delegateInvoke = delegateType.DefineMethod(
|
||||||
|
"Invoke",
|
||||||
|
MethodAttributes.Public | MethodAttributes.HideBySig | MethodAttributes.NewSlot | MethodAttributes.Virtual,
|
||||||
|
returnType,
|
||||||
|
paramTypes);
|
||||||
|
|
||||||
|
// we have to project all of the attributes from the baseMethod to the delegateInvoke
|
||||||
|
// so for something like [Out], the interop engine will see it and use it
|
||||||
|
for (int i = 0; i < paramInfos.Length; i++)
|
||||||
|
{
|
||||||
|
var p = delegateInvoke.DefineParameter(i + 1, ParameterAttributes.None, paramInfos[i].Name);
|
||||||
|
foreach (var a in paramInfos[i].GetCustomAttributes(false))
|
||||||
|
{
|
||||||
|
p.SetCustomAttribute(GetAttributeBuilder(a));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
var p = delegateInvoke.DefineParameter(0, ParameterAttributes.Retval, method.ReturnParameter.Name);
|
||||||
|
foreach (var a in method.ReturnParameter.GetCustomAttributes(false))
|
||||||
|
{
|
||||||
|
p.SetCustomAttribute(GetAttributeBuilder(a));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
delegateInvoke.SetImplementationFlags(MethodImplAttributes.Runtime | MethodImplAttributes.Managed);
|
||||||
|
|
||||||
|
// add the [UnmanagedFunctionPointer] to the delegate so interop will know how to call it
|
||||||
|
var attr = new CustomAttributeBuilder(typeof(UnmanagedFunctionPointerAttribute).GetConstructor(new[] { typeof(CallingConvention) }), new object[] { nativeCall });
|
||||||
|
delegateType.SetCustomAttribute(attr);
|
||||||
|
|
||||||
|
invokeMethod = delegateInvoke;
|
||||||
|
return delegateType;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// get an attribute builder to clone an attribute to a delegate type
|
||||||
|
/// </summary>
|
||||||
|
private static CustomAttributeBuilder GetAttributeBuilder(object o)
|
||||||
|
{
|
||||||
|
// anything more clever we can do here?
|
||||||
|
var t = o.GetType();
|
||||||
|
if (t == typeof(OutAttribute) || t == typeof(InAttribute))
|
||||||
|
{
|
||||||
|
return new CustomAttributeBuilder(t.GetConstructor(Type.EmptyTypes), new object[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new InvalidOperationException("Unknown parameter attribute " + t.Name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,248 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace BizHawk.Common.BizInvoke
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// create interop delegates and function pointers for a particular calling convention
|
||||||
|
/// </summary>
|
||||||
|
public interface ICallingConventionAdapter
|
||||||
|
{
|
||||||
|
IntPtr GetFunctionPointerForDelegate(Delegate d);
|
||||||
|
IntPtr GetArrivalFunctionPointer(IntPtr p, ParameterInfo pp, object lifetime);
|
||||||
|
|
||||||
|
Delegate GetDelegateForFunctionPointer(IntPtr p, Type delegateType);
|
||||||
|
IntPtr GetDepartureFunctionPointer(IntPtr p, ParameterInfo pp, object lifetime);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class CallingConventionAdapterExtensions
|
||||||
|
{
|
||||||
|
public static T GetDelegateForFunctionPointer<T>(this ICallingConventionAdapter a, IntPtr p)
|
||||||
|
where T: class
|
||||||
|
{
|
||||||
|
return (T)(object)a.GetDelegateForFunctionPointer(p, typeof(T));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class ParameterInfo
|
||||||
|
{
|
||||||
|
public Type ReturnType { get; }
|
||||||
|
public IReadOnlyList<Type> ParameterTypes { get; }
|
||||||
|
|
||||||
|
public ParameterInfo(Type returnType, IEnumerable<Type> parameterTypes)
|
||||||
|
{
|
||||||
|
ReturnType = returnType;
|
||||||
|
ParameterTypes = parameterTypes.ToList().AsReadOnly();
|
||||||
|
}
|
||||||
|
|
||||||
|
public ParameterInfo(Type delegateType)
|
||||||
|
{
|
||||||
|
if (!typeof(Delegate).IsAssignableFrom(delegateType))
|
||||||
|
throw new InvalidOperationException("Must be a delegate type!");
|
||||||
|
var invoke = delegateType.GetMethod("Invoke");
|
||||||
|
ReturnType = invoke.ReturnType;
|
||||||
|
ParameterTypes = invoke.GetParameters().Select(p => p.ParameterType).ToList().AsReadOnly();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class CallingConventionAdapters
|
||||||
|
{
|
||||||
|
private class NativeConvention : ICallingConventionAdapter
|
||||||
|
{
|
||||||
|
public IntPtr GetArrivalFunctionPointer(IntPtr p, ParameterInfo pp, object lifetime)
|
||||||
|
{
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Delegate GetDelegateForFunctionPointer(IntPtr p, Type delegateType)
|
||||||
|
{
|
||||||
|
return Marshal.GetDelegateForFunctionPointer(p, delegateType);
|
||||||
|
}
|
||||||
|
|
||||||
|
public IntPtr GetDepartureFunctionPointer(IntPtr p, ParameterInfo pp, object lifetime)
|
||||||
|
{
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IntPtr GetFunctionPointerForDelegate(Delegate d)
|
||||||
|
{
|
||||||
|
return Marshal.GetFunctionPointerForDelegate(d);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// native (pass-through) calling convention
|
||||||
|
/// </summary>
|
||||||
|
public static ICallingConventionAdapter Native { get; } = new NativeConvention();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// convention appropriate for waterbox guests
|
||||||
|
/// </summary>
|
||||||
|
public static ICallingConventionAdapter Waterbox { get; } =
|
||||||
|
#if true
|
||||||
|
new NativeConvention();
|
||||||
|
#else
|
||||||
|
new SysVHostMsGuest();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
private class SysVHostMsGuest : ICallingConventionAdapter
|
||||||
|
{
|
||||||
|
private const ulong Placeholder = 0xdeadbeeffeedface;
|
||||||
|
private const byte Padding = 0x06;
|
||||||
|
private const int BlockSize = 256;
|
||||||
|
private static readonly byte[][] Depart =
|
||||||
|
{
|
||||||
|
new byte[] { 0x55, 0x48, 0x89, 0xe5, 0x48, 0x83, 0xec, 0x20, 0x48, 0xb8, 0xce, 0xfa, 0xed, 0xfe, 0xef, 0xbe, 0xad, 0xde, 0xff, 0xd0, 0xc9, 0xc3, },
|
||||||
|
new byte[] { 0x55, 0x48, 0x89, 0xe5, 0x48, 0x83, 0xec, 0x30, 0x48, 0x89, 0x7d, 0xf8, 0x48, 0x8b, 0x55, 0xf8, 0x48, 0xb8, 0xce, 0xfa, 0xed, 0xfe, 0xef, 0xbe, 0xad, 0xde, 0x48, 0x89, 0xd1, 0xff, 0xd0, 0xc9, 0xc3, },
|
||||||
|
new byte[] { 0x55, 0x48, 0x89, 0xe5, 0x48, 0x83, 0xec, 0x30, 0x48, 0x89, 0x7d, 0xf8, 0x48, 0x89, 0x75, 0xf0, 0x48, 0x8b, 0x55, 0xf0, 0x48, 0x8b, 0x4d, 0xf8, 0x48, 0xb8, 0xce, 0xfa, 0xed, 0xfe, 0xef, 0xbe, 0xad, 0xde, 0xff, 0xd0, 0xc9, 0xc3, },
|
||||||
|
new byte[] { 0x55, 0x48, 0x89, 0xe5, 0x48, 0x83, 0xec, 0x40, 0x48, 0x89, 0x7d, 0xf8, 0x48, 0x89, 0x75, 0xf0, 0x48, 0x89, 0x55, 0xe8, 0x48, 0x8b, 0x75, 0xe8, 0x48, 0x8b, 0x55, 0xf0, 0x48, 0x8b, 0x4d, 0xf8, 0x48, 0xb8, 0xce, 0xfa, 0xed, 0xfe, 0xef, 0xbe, 0xad, 0xde, 0x49, 0x89, 0xf0, 0xff, 0xd0, 0xc9, 0xc3, },
|
||||||
|
new byte[] { 0x55, 0x48, 0x89, 0xe5, 0x48, 0x83, 0xec, 0x40, 0x48, 0x89, 0x7d, 0xf8, 0x48, 0x89, 0x75, 0xf0, 0x48, 0x89, 0x55, 0xe8, 0x48, 0x89, 0x4d, 0xe0, 0x48, 0x8b, 0x7d, 0xe0, 0x48, 0x8b, 0x75, 0xe8, 0x48, 0x8b, 0x55, 0xf0, 0x48, 0x8b, 0x4d, 0xf8, 0x48, 0xb8, 0xce, 0xfa, 0xed, 0xfe, 0xef, 0xbe, 0xad, 0xde, 0x49, 0x89, 0xf9, 0x49, 0x89, 0xf0, 0xff, 0xd0, 0xc9, 0xc3, },
|
||||||
|
new byte[] { 0x55, 0x48, 0x89, 0xe5, 0x48, 0x83, 0xec, 0x60, 0x48, 0x89, 0x7d, 0xf8, 0x48, 0x89, 0x75, 0xf0, 0x48, 0x89, 0x55, 0xe8, 0x48, 0x89, 0x4d, 0xe0, 0x4c, 0x89, 0x45, 0xd8, 0x48, 0x8b, 0x7d, 0xe0, 0x48, 0x8b, 0x75, 0xe8, 0x48, 0x8b, 0x55, 0xf0, 0x48, 0x8b, 0x4d, 0xf8, 0x48, 0x8b, 0x45, 0xd8, 0x48, 0x89, 0x44, 0x24, 0x20, 0x48, 0xb8, 0xce, 0xfa, 0xed, 0xfe, 0xef, 0xbe, 0xad, 0xde, 0x49, 0x89, 0xf9, 0x49, 0x89, 0xf0, 0xff, 0xd0, 0xc9, 0xc3, },
|
||||||
|
new byte[] { 0x55, 0x48, 0x89, 0xe5, 0x48, 0x83, 0xec, 0x60, 0x48, 0x89, 0x7d, 0xf8, 0x48, 0x89, 0x75, 0xf0, 0x48, 0x89, 0x55, 0xe8, 0x48, 0x89, 0x4d, 0xe0, 0x4c, 0x89, 0x45, 0xd8, 0x4c, 0x89, 0x4d, 0xd0, 0x48, 0x8b, 0x7d, 0xe0, 0x48, 0x8b, 0x75, 0xe8, 0x48, 0x8b, 0x55, 0xf0, 0x48, 0x8b, 0x4d, 0xf8, 0x48, 0x8b, 0x45, 0xd0, 0x48, 0x89, 0x44, 0x24, 0x28, 0x48, 0x8b, 0x45, 0xd8, 0x48, 0x89, 0x44, 0x24, 0x20, 0x48, 0xb8, 0xce, 0xfa, 0xed, 0xfe, 0xef, 0xbe, 0xad, 0xde, 0x49, 0x89, 0xf9, 0x49, 0x89, 0xf0, 0xff, 0xd0, 0xc9, 0xc3, },
|
||||||
|
};
|
||||||
|
private static readonly byte[][] Arrive =
|
||||||
|
{
|
||||||
|
new byte[] { 0x55, 0x48, 0x89, 0xe5, 0x48, 0x83, 0xec, 0x20, 0x48, 0xb8, 0xce, 0xfa, 0xed, 0xfe, 0xef, 0xbe, 0xad, 0xde, 0xff, 0xd0, 0xc9, 0xc3, },
|
||||||
|
new byte[] { 0x55, 0x48, 0x89, 0xe5, 0x48, 0x83, 0xec, 0x30, 0x48, 0x89, 0x7d, 0xf8, 0x48, 0x8b, 0x55, 0xf8, 0x48, 0xb8, 0xce, 0xfa, 0xed, 0xfe, 0xef, 0xbe, 0xad, 0xde, 0x48, 0x89, 0xd1, 0xff, 0xd0, 0xc9, 0xc3, },
|
||||||
|
new byte[] { 0x55, 0x48, 0x89, 0xe5, 0x48, 0x83, 0xec, 0x30, 0x48, 0x89, 0x7d, 0xf8, 0x48, 0x89, 0x75, 0xf0, 0x48, 0x8b, 0x55, 0xf0, 0x48, 0x8b, 0x4d, 0xf8, 0x48, 0xb8, 0xce, 0xfa, 0xed, 0xfe, 0xef, 0xbe, 0xad, 0xde, 0xff, 0xd0, 0xc9, 0xc3, },
|
||||||
|
new byte[] { 0x55, 0x48, 0x89, 0xe5, 0x48, 0x83, 0xec, 0x40, 0x48, 0x89, 0x7d, 0xf8, 0x48, 0x89, 0x75, 0xf0, 0x48, 0x89, 0x55, 0xe8, 0x48, 0x8b, 0x75, 0xe8, 0x48, 0x8b, 0x55, 0xf0, 0x48, 0x8b, 0x4d, 0xf8, 0x48, 0xb8, 0xce, 0xfa, 0xed, 0xfe, 0xef, 0xbe, 0xad, 0xde, 0x49, 0x89, 0xf0, 0xff, 0xd0, 0xc9, 0xc3, },
|
||||||
|
new byte[] { 0x55, 0x48, 0x89, 0xe5, 0x48, 0x83, 0xec, 0x40, 0x48, 0x89, 0x7d, 0xf8, 0x48, 0x89, 0x75, 0xf0, 0x48, 0x89, 0x55, 0xe8, 0x48, 0x89, 0x4d, 0xe0, 0x48, 0x8b, 0x7d, 0xe0, 0x48, 0x8b, 0x75, 0xe8, 0x48, 0x8b, 0x55, 0xf0, 0x48, 0x8b, 0x4d, 0xf8, 0x48, 0xb8, 0xce, 0xfa, 0xed, 0xfe, 0xef, 0xbe, 0xad, 0xde, 0x49, 0x89, 0xf9, 0x49, 0x89, 0xf0, 0xff, 0xd0, 0xc9, 0xc3, },
|
||||||
|
new byte[] { 0x55, 0x48, 0x89, 0xe5, 0x48, 0x83, 0xec, 0x60, 0x48, 0x89, 0x7d, 0xf8, 0x48, 0x89, 0x75, 0xf0, 0x48, 0x89, 0x55, 0xe8, 0x48, 0x89, 0x4d, 0xe0, 0x4c, 0x89, 0x45, 0xd8, 0x48, 0x8b, 0x7d, 0xe0, 0x48, 0x8b, 0x75, 0xe8, 0x48, 0x8b, 0x55, 0xf0, 0x48, 0x8b, 0x4d, 0xf8, 0x48, 0x8b, 0x45, 0xd8, 0x48, 0x89, 0x44, 0x24, 0x20, 0x48, 0xb8, 0xce, 0xfa, 0xed, 0xfe, 0xef, 0xbe, 0xad, 0xde, 0x49, 0x89, 0xf9, 0x49, 0x89, 0xf0, 0xff, 0xd0, 0xc9, 0xc3, },
|
||||||
|
new byte[] { 0x55, 0x48, 0x89, 0xe5, 0x48, 0x83, 0xec, 0x60, 0x48, 0x89, 0x7d, 0xf8, 0x48, 0x89, 0x75, 0xf0, 0x48, 0x89, 0x55, 0xe8, 0x48, 0x89, 0x4d, 0xe0, 0x4c, 0x89, 0x45, 0xd8, 0x4c, 0x89, 0x4d, 0xd0, 0x48, 0x8b, 0x7d, 0xe0, 0x48, 0x8b, 0x75, 0xe8, 0x48, 0x8b, 0x55, 0xf0, 0x48, 0x8b, 0x4d, 0xf8, 0x48, 0x8b, 0x45, 0xd0, 0x48, 0x89, 0x44, 0x24, 0x28, 0x48, 0x8b, 0x45, 0xd8, 0x48, 0x89, 0x44, 0x24, 0x20, 0x48, 0xb8, 0xce, 0xfa, 0xed, 0xfe, 0xef, 0xbe, 0xad, 0xde, 0x49, 0x89, 0xf9, 0x49, 0x89, 0xf0, 0xff, 0xd0, 0xc9, 0xc3, },
|
||||||
|
};
|
||||||
|
|
||||||
|
private static readonly int[] DepartPlaceholderIndices;
|
||||||
|
private static readonly int[] ArrivePlaceholderIndices;
|
||||||
|
|
||||||
|
private static int FindPlaceholderIndex(byte[] data)
|
||||||
|
{
|
||||||
|
return Enumerable.Range(0, data.Length - 7)
|
||||||
|
.Single(i => BitConverter.ToUInt64(data, i) == Placeholder);
|
||||||
|
}
|
||||||
|
|
||||||
|
static SysVHostMsGuest()
|
||||||
|
{
|
||||||
|
DepartPlaceholderIndices = Depart.Select(FindPlaceholderIndex).ToArray();
|
||||||
|
ArrivePlaceholderIndices = Arrive.Select(FindPlaceholderIndex).ToArray();
|
||||||
|
if (Depart.Any(b => b.Length > BlockSize) || Arrive.Any(b => b.Length > BlockSize))
|
||||||
|
throw new InvalidOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
private readonly MemoryBlock _memory;
|
||||||
|
private readonly object _sync = new object();
|
||||||
|
private readonly WeakReference[] _refs;
|
||||||
|
|
||||||
|
public SysVHostMsGuest()
|
||||||
|
{
|
||||||
|
int size = 4 * 1024 * 1024;
|
||||||
|
_memory = new MemoryBlock((ulong)size);
|
||||||
|
_memory.Activate();
|
||||||
|
_refs = new WeakReference[size / BlockSize];
|
||||||
|
}
|
||||||
|
|
||||||
|
private int FindFreeIndex()
|
||||||
|
{
|
||||||
|
for (int i = 0; i < _refs.Length; i++)
|
||||||
|
{
|
||||||
|
if (_refs[i] == null || !_refs[i].IsAlive)
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
throw new InvalidOperationException("Out of Thunk memory");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void VerifyParameter(Type type)
|
||||||
|
{
|
||||||
|
if (type == typeof(float) || type == typeof(double))
|
||||||
|
throw new NotSupportedException("floating point not supported");
|
||||||
|
if (type == typeof(void) || type.IsPrimitive)
|
||||||
|
return;
|
||||||
|
if (type.IsByRef || type.IsClass)
|
||||||
|
return;
|
||||||
|
throw new NotSupportedException("Unknown type. Possibly supported?");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int VerifyDelegateSignature(ParameterInfo pp)
|
||||||
|
{
|
||||||
|
VerifyParameter(pp.ReturnType);
|
||||||
|
foreach (var ppp in pp.ParameterTypes)
|
||||||
|
VerifyParameter(ppp);
|
||||||
|
return pp.ParameterTypes.Count;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void WriteThunk(byte[] data, int placeholderIndex, IntPtr p, int index)
|
||||||
|
{
|
||||||
|
_memory.Protect(_memory.Start, _memory.Size, MemoryBlock.Protection.RW);
|
||||||
|
var ss = _memory.GetStream(_memory.Start + (ulong)index * BlockSize, BlockSize, true);
|
||||||
|
ss.Write(data, 0, data.Length);
|
||||||
|
for (int i = data.Length; i < BlockSize; i++)
|
||||||
|
ss.WriteByte(Padding);
|
||||||
|
ss.Position = placeholderIndex;
|
||||||
|
var bw = new BinaryWriter(ss);
|
||||||
|
bw.Write((long)p);
|
||||||
|
_memory.Protect(_memory.Start, _memory.Size, MemoryBlock.Protection.RX);
|
||||||
|
}
|
||||||
|
|
||||||
|
private IntPtr GetThunkAddress(int index)
|
||||||
|
{
|
||||||
|
return Z.US(_memory.Start + (ulong)index * BlockSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SetLifetime(int index, object lifetime)
|
||||||
|
{
|
||||||
|
if (_refs[index] == null)
|
||||||
|
_refs[index] = new WeakReference(lifetime);
|
||||||
|
else
|
||||||
|
_refs[index].Target = lifetime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IntPtr GetFunctionPointerForDelegate(Delegate d)
|
||||||
|
{
|
||||||
|
return GetArrivalFunctionPointer(
|
||||||
|
Marshal.GetFunctionPointerForDelegate(d), new ParameterInfo(d.GetType()), d);
|
||||||
|
}
|
||||||
|
|
||||||
|
public IntPtr GetArrivalFunctionPointer(IntPtr p, ParameterInfo pp, object lifetime)
|
||||||
|
{
|
||||||
|
lock (_sync)
|
||||||
|
{
|
||||||
|
var index = FindFreeIndex();
|
||||||
|
var count = VerifyDelegateSignature(pp);
|
||||||
|
WriteThunk(Arrive[count], ArrivePlaceholderIndices[count], p, index);
|
||||||
|
SetLifetime(index, lifetime);
|
||||||
|
return GetThunkAddress(index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Delegate GetDelegateForFunctionPointer(IntPtr p, Type delegateType)
|
||||||
|
{
|
||||||
|
lock (_sync)
|
||||||
|
{
|
||||||
|
var index = FindFreeIndex();
|
||||||
|
var count = VerifyDelegateSignature(new ParameterInfo(delegateType));
|
||||||
|
WriteThunk(Depart[count], DepartPlaceholderIndices[count], p, index);
|
||||||
|
var ret = Marshal.GetDelegateForFunctionPointer(GetThunkAddress(index), delegateType);
|
||||||
|
SetLifetime(index, ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public IntPtr GetDepartureFunctionPointer(IntPtr p, ParameterInfo pp, object lifetime)
|
||||||
|
{
|
||||||
|
lock (_sync)
|
||||||
|
{
|
||||||
|
var index = FindFreeIndex();
|
||||||
|
var count = VerifyDelegateSignature(pp);
|
||||||
|
WriteThunk(Depart[count], DepartPlaceholderIndices[count], p, index);
|
||||||
|
SetLifetime(index, lifetime);
|
||||||
|
return GetThunkAddress(index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -5,122 +5,45 @@ using System.Text;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
|
||||||
namespace BizHawk.Emulation.Cores
|
namespace BizHawk.Common.BizInvoke
|
||||||
{
|
{
|
||||||
public static class Z
|
|
||||||
{
|
|
||||||
public static IntPtr US(ulong l)
|
|
||||||
{
|
|
||||||
if (IntPtr.Size == 8)
|
|
||||||
return (IntPtr)(long)l;
|
|
||||||
else
|
|
||||||
return (IntPtr)(int)l;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static UIntPtr UU(ulong l)
|
|
||||||
{
|
|
||||||
if (UIntPtr.Size == 8)
|
|
||||||
return (UIntPtr)l;
|
|
||||||
else
|
|
||||||
return (UIntPtr)(uint)l;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static IntPtr SS(long l)
|
|
||||||
{
|
|
||||||
if (IntPtr.Size == 8)
|
|
||||||
return (IntPtr)l;
|
|
||||||
else
|
|
||||||
return (IntPtr)(int)l;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static UIntPtr SU(long l)
|
|
||||||
{
|
|
||||||
if (UIntPtr.Size == 8)
|
|
||||||
return (UIntPtr)(ulong)l;
|
|
||||||
else
|
|
||||||
return (UIntPtr)(uint)l;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public sealed class MemoryBlock : IDisposable
|
public sealed class MemoryBlock : IDisposable
|
||||||
{
|
{
|
||||||
/// <summary>
|
|
||||||
/// system page size
|
|
||||||
/// </summary>
|
|
||||||
public static int PageSize { get; private set;}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// bitshift corresponding to PageSize
|
|
||||||
/// </summary>
|
|
||||||
private static readonly int PageShift;
|
|
||||||
/// <summary>
|
|
||||||
/// bitmask corresponding to PageSize
|
|
||||||
/// </summary>
|
|
||||||
private static readonly ulong PageMask;
|
|
||||||
|
|
||||||
static MemoryBlock()
|
|
||||||
{
|
|
||||||
int p = PageSize = Environment.SystemPageSize;
|
|
||||||
while (p != 1)
|
|
||||||
{
|
|
||||||
p >>= 1;
|
|
||||||
PageShift++;
|
|
||||||
}
|
|
||||||
PageMask = (ulong)(PageSize - 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// true if addr is aligned
|
|
||||||
/// </summary>
|
|
||||||
private static bool Aligned(ulong addr)
|
|
||||||
{
|
|
||||||
return (addr & PageMask) == 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// align address down to previous page boundary
|
|
||||||
/// </summary>
|
|
||||||
private static ulong AlignDown(ulong addr)
|
|
||||||
{
|
|
||||||
return addr & ~PageMask;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// align address up to next page boundary
|
|
||||||
/// </summary>
|
|
||||||
private static ulong AlignUp(ulong addr)
|
|
||||||
{
|
|
||||||
return ((addr - 1) | PageMask) + 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// starting address of the memory block
|
/// starting address of the memory block
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public ulong Start { get; private set; }
|
public ulong Start { get; private set; }
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// total size of the memory block
|
/// total size of the memory block
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public ulong Size { get; private set; }
|
public ulong Size { get; private set; }
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// ending address of the memory block; equal to start + size
|
/// ending address of the memory block; equal to start + size
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public ulong End { get; private set; }
|
public ulong End { get; private set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// handle returned by CreateFileMapping
|
/// handle returned by CreateFileMapping
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private IntPtr _handle;
|
private IntPtr _handle;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// true if this is currently swapped in
|
/// true if this is currently swapped in
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool Active { get; private set; }
|
public bool Active { get; private set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// stores last set memory protection value for each page
|
/// stores last set memory protection value for each page
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private readonly Protection[] _pageData;
|
private readonly Protection[] _pageData;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// snapshot for XOR buffer
|
||||||
|
/// </summary>
|
||||||
|
private byte[] _snapshot;
|
||||||
|
|
||||||
|
public byte[] XorHash { get; private set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// get a page index within the block
|
/// get a page index within the block
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -129,17 +52,17 @@ namespace BizHawk.Emulation.Cores
|
||||||
if (addr < Start || addr >= End)
|
if (addr < Start || addr >= End)
|
||||||
throw new ArgumentOutOfRangeException();
|
throw new ArgumentOutOfRangeException();
|
||||||
|
|
||||||
return (int)((addr - Start) >> PageShift);
|
return (int)((addr - Start) >> WaterboxUtils.PageShift);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// get a start address for a page index within the block
|
/// get a start address for a page index within the block
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private ulong GetStartAddr(int page)
|
private ulong GetStartAddr(int page)
|
||||||
{
|
{
|
||||||
return ((ulong)page << PageShift) + Start;
|
return ((ulong)page << WaterboxUtils.PageShift) + Start;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// allocate size bytes at any address
|
/// allocate size bytes at any address
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -147,8 +70,8 @@ namespace BizHawk.Emulation.Cores
|
||||||
public MemoryBlock(ulong size)
|
public MemoryBlock(ulong size)
|
||||||
: this(0, size)
|
: this(0, size)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// allocate size bytes starting at a particular address
|
/// allocate size bytes starting at a particular address
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -156,11 +79,11 @@ namespace BizHawk.Emulation.Cores
|
||||||
/// <param name="size"></param>
|
/// <param name="size"></param>
|
||||||
public MemoryBlock(ulong start, ulong size)
|
public MemoryBlock(ulong start, ulong size)
|
||||||
{
|
{
|
||||||
if (!Aligned(start))
|
if (!WaterboxUtils.Aligned(start))
|
||||||
throw new ArgumentOutOfRangeException();
|
throw new ArgumentOutOfRangeException();
|
||||||
if (size == 0)
|
if (size == 0)
|
||||||
throw new ArgumentOutOfRangeException();
|
throw new ArgumentOutOfRangeException();
|
||||||
size = AlignUp(size);
|
size = WaterboxUtils.AlignUp(size);
|
||||||
|
|
||||||
_handle = Kernel32.CreateFileMapping(Kernel32.INVALID_HANDLE_VALUE, IntPtr.Zero,
|
_handle = Kernel32.CreateFileMapping(Kernel32.INVALID_HANDLE_VALUE, IntPtr.Zero,
|
||||||
Kernel32.FileMapProtection.PageExecuteReadWrite | Kernel32.FileMapProtection.SectionCommit, (uint)(size >> 32), (uint)size, null);
|
Kernel32.FileMapProtection.PageExecuteReadWrite | Kernel32.FileMapProtection.SectionCommit, (uint)(size >> 32), (uint)size, null);
|
||||||
|
@ -171,8 +94,8 @@ namespace BizHawk.Emulation.Cores
|
||||||
End = start + size;
|
End = start + size;
|
||||||
Size = size;
|
Size = size;
|
||||||
_pageData = new Protection[GetPage(End - 1) + 1];
|
_pageData = new Protection[GetPage(End - 1) + 1];
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// activate the memory block, swapping it in at the specified address
|
/// activate the memory block, swapping it in at the specified address
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -187,8 +110,8 @@ namespace BizHawk.Emulation.Cores
|
||||||
}
|
}
|
||||||
ProtectAll();
|
ProtectAll();
|
||||||
Active = true;
|
Active = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// deactivate the memory block, removing it from RAM but leaving it immediately available to swap back in
|
/// deactivate the memory block, removing it from RAM but leaving it immediately available to swap back in
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -199,16 +122,16 @@ namespace BizHawk.Emulation.Cores
|
||||||
if (!Kernel32.UnmapViewOfFile(Z.US(Start)))
|
if (!Kernel32.UnmapViewOfFile(Z.US(Start)))
|
||||||
throw new InvalidOperationException("UnmapViewOfFile() returned NULL");
|
throw new InvalidOperationException("UnmapViewOfFile() returned NULL");
|
||||||
Active = false;
|
Active = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Memory protection constant
|
/// Memory protection constant
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public enum Protection : byte
|
public enum Protection : byte
|
||||||
{
|
{
|
||||||
None, R, RW, RX
|
None, R, RW, RX
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Get a stream that can be used to read or write from part of the block. Does not check for or change Protect()!
|
/// Get a stream that can be used to read or write from part of the block. Does not check for or change Protect()!
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -216,11 +139,68 @@ namespace BizHawk.Emulation.Cores
|
||||||
{
|
{
|
||||||
if (start < Start)
|
if (start < Start)
|
||||||
throw new ArgumentOutOfRangeException(nameof(start));
|
throw new ArgumentOutOfRangeException(nameof(start));
|
||||||
|
|
||||||
if (start + length > End)
|
if (start + length > End)
|
||||||
throw new ArgumentOutOfRangeException(nameof(length));
|
throw new ArgumentOutOfRangeException(nameof(length));
|
||||||
|
|
||||||
return new MemoryViewStream(!writer, writer, (long)start, (long)length, this);
|
return new MemoryViewStream(!writer, writer, (long)start, (long)length, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// get a stream that can be used to read or write from part of the block.
|
||||||
|
/// both reads and writes will be XORed against an earlier recorded snapshot
|
||||||
|
/// </summary>
|
||||||
|
public Stream GetXorStream(ulong start, ulong length, bool writer)
|
||||||
|
{
|
||||||
|
if (start < Start)
|
||||||
|
throw new ArgumentOutOfRangeException(nameof(start));
|
||||||
|
if (start + length > End)
|
||||||
|
throw new ArgumentOutOfRangeException(nameof(length));
|
||||||
|
if (_snapshot == null)
|
||||||
|
throw new InvalidOperationException("No snapshot taken!");
|
||||||
|
|
||||||
|
return new MemoryViewXorStream(!writer, writer, (long)start, (long)length, this, _snapshot, (long)(start - Start));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// take a snapshot of the entire memory block's contents, for use in GetXorStream
|
||||||
|
/// </summary>
|
||||||
|
public void SaveXorSnapshot()
|
||||||
|
{
|
||||||
|
if (_snapshot != null)
|
||||||
|
throw new InvalidOperationException("Snapshot already taken");
|
||||||
|
if (!Active)
|
||||||
|
throw new InvalidOperationException("Not active");
|
||||||
|
|
||||||
|
// temporarily switch the entire block to `R`: in case some areas are unreadable, we don't want
|
||||||
|
// that to complicate things
|
||||||
|
Kernel32.MemoryProtection old;
|
||||||
|
if (!Kernel32.VirtualProtect(Z.UU(Start), Z.UU(Size), Kernel32.MemoryProtection.READONLY, out old))
|
||||||
|
throw new InvalidOperationException("VirtualProtect() returned FALSE!");
|
||||||
|
|
||||||
|
_snapshot = new byte[Size];
|
||||||
|
var ds = new MemoryStream(_snapshot, true);
|
||||||
|
var ss = GetStream(Start, Size, false);
|
||||||
|
ss.CopyTo(ds);
|
||||||
|
XorHash = WaterboxUtils.Hash(_snapshot);
|
||||||
|
|
||||||
|
ProtectAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// take a hash of the current full contents of the block, including unreadable areas
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public byte[] FullHash()
|
||||||
|
{
|
||||||
|
if (!Active)
|
||||||
|
throw new InvalidOperationException("Not active");
|
||||||
|
// temporarily switch the entire block to `R`
|
||||||
|
Kernel32.MemoryProtection old;
|
||||||
|
if (!Kernel32.VirtualProtect(Z.UU(Start), Z.UU(Size), Kernel32.MemoryProtection.READONLY, out old))
|
||||||
|
throw new InvalidOperationException("VirtualProtect() returned FALSE!");
|
||||||
|
var ret = WaterboxUtils.Hash(GetStream(Start, Size, false));
|
||||||
|
ProtectAll();
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Kernel32.MemoryProtection GetKernelMemoryProtectionValue(Protection prot)
|
private static Kernel32.MemoryProtection GetKernelMemoryProtectionValue(Protection prot)
|
||||||
|
@ -235,8 +215,8 @@ namespace BizHawk.Emulation.Cores
|
||||||
default: throw new ArgumentOutOfRangeException(nameof(prot));
|
default: throw new ArgumentOutOfRangeException(nameof(prot));
|
||||||
}
|
}
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// restore all recorded protections
|
/// restore all recorded protections
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -256,8 +236,8 @@ namespace BizHawk.Emulation.Cores
|
||||||
ps = i + 1;
|
ps = i + 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// set r/w/x protection on a portion of memory. rounded to encompassing pages
|
/// set r/w/x protection on a portion of memory. rounded to encompassing pages
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -270,14 +250,17 @@ namespace BizHawk.Emulation.Cores
|
||||||
|
|
||||||
var p = GetKernelMemoryProtectionValue(prot);
|
var p = GetKernelMemoryProtectionValue(prot);
|
||||||
for (int i = pstart; i <= pend; i++)
|
for (int i = pstart; i <= pend; i++)
|
||||||
_pageData[i] = prot; // also store the value for later use
|
_pageData[i] = prot; // also store the value for later use
|
||||||
|
|
||||||
if (Active) // it's legal to Protect() if we're not active; the information is just saved for the next activation
|
if (Active) // it's legal to Protect() if we're not active; the information is just saved for the next activation
|
||||||
{
|
{
|
||||||
// TODO: if using another OS's memory protection calls, they must give the same non-aligned behavior
|
var computedStart = WaterboxUtils.AlignDown(start);
|
||||||
// as VirtualProtect, or this must be changed
|
var computedEnd = WaterboxUtils.AlignUp(start + length);
|
||||||
|
var computedLength = computedEnd - computedStart;
|
||||||
|
|
||||||
Kernel32.MemoryProtection old;
|
Kernel32.MemoryProtection old;
|
||||||
if (!Kernel32.VirtualProtect(Z.UU(start), Z.UU(length), p, out old))
|
if (!Kernel32.VirtualProtect(Z.UU(computedStart),
|
||||||
|
Z.UU(computedLength), p, out old))
|
||||||
throw new InvalidOperationException("VirtualProtect() returned FALSE!");
|
throw new InvalidOperationException("VirtualProtect() returned FALSE!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -324,38 +307,39 @@ namespace BizHawk.Emulation.Cores
|
||||||
|
|
||||||
private MemoryBlock _owner;
|
private MemoryBlock _owner;
|
||||||
|
|
||||||
private bool _readable;
|
private readonly bool _readable;
|
||||||
private bool _writable;
|
private readonly bool _writable;
|
||||||
|
|
||||||
private long _length;
|
private long _length;
|
||||||
private long _pos;
|
private long _pos;
|
||||||
private long _ptr;
|
private readonly long _ptr;
|
||||||
|
|
||||||
public override bool CanRead { get { return _readable; } }
|
public override bool CanRead => _readable;
|
||||||
public override bool CanSeek { get { return true; } }
|
public override bool CanSeek => true;
|
||||||
public override bool CanWrite { get { return _writable; } }
|
public override bool CanWrite => _writable;
|
||||||
public override void Flush() { }
|
public override void Flush() { }
|
||||||
public override long Length { get { return _length; } }
|
public override long Length => _length;
|
||||||
|
|
||||||
public override long Position
|
public override long Position
|
||||||
{
|
{
|
||||||
get { return _pos; } set
|
get { return _pos; }
|
||||||
|
set
|
||||||
{
|
{
|
||||||
if (value < 0 || value > _length)
|
if (value < 0 || value > _length)
|
||||||
throw new ArgumentOutOfRangeException();
|
throw new ArgumentOutOfRangeException();
|
||||||
_pos = value;
|
_pos = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override int Read(byte[] buffer, int offset, int count)
|
public override int Read(byte[] buffer, int offset, int count)
|
||||||
{
|
{
|
||||||
if (!_readable)
|
if (!_readable)
|
||||||
throw new InvalidOperationException();
|
throw new InvalidOperationException();
|
||||||
if (count < 0 || count > buffer.Length)
|
if (count < 0 || count + offset > buffer.Length)
|
||||||
throw new ArgumentOutOfRangeException();
|
throw new ArgumentOutOfRangeException();
|
||||||
EnsureNotDisposed();
|
EnsureNotDisposed();
|
||||||
count = (int)Math.Min(count, _length - _pos);
|
count = (int)Math.Min(count, _length - _pos);
|
||||||
Marshal.Copy(Z.SS(_ptr + _pos), buffer, 0, count);
|
Marshal.Copy(Z.SS(_ptr + _pos), buffer, offset, count);
|
||||||
_pos += count;
|
_pos += count;
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
@ -367,7 +351,7 @@ namespace BizHawk.Emulation.Cores
|
||||||
{
|
{
|
||||||
default:
|
default:
|
||||||
case SeekOrigin.Begin:
|
case SeekOrigin.Begin:
|
||||||
newpos = 0;
|
newpos = offset;
|
||||||
break;
|
break;
|
||||||
case SeekOrigin.Current:
|
case SeekOrigin.Current:
|
||||||
newpos = _pos + offset;
|
newpos = _pos + offset;
|
||||||
|
@ -389,15 +373,73 @@ namespace BizHawk.Emulation.Cores
|
||||||
{
|
{
|
||||||
if (!_writable)
|
if (!_writable)
|
||||||
throw new InvalidOperationException();
|
throw new InvalidOperationException();
|
||||||
if (count < 0 || count > buffer.Length)
|
if (count < 0 || count + offset > buffer.Length)
|
||||||
|
throw new ArgumentOutOfRangeException();
|
||||||
|
if (count > _length - _pos)
|
||||||
throw new ArgumentOutOfRangeException();
|
throw new ArgumentOutOfRangeException();
|
||||||
EnsureNotDisposed();
|
EnsureNotDisposed();
|
||||||
count = (int)Math.Min(count, _length - _pos);
|
Marshal.Copy(buffer, offset, Z.SS(_ptr + _pos), count);
|
||||||
Marshal.Copy(buffer, 0, Z.SS(_ptr + _pos), count);
|
|
||||||
_pos += count;
|
_pos += count;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private class MemoryViewXorStream : MemoryViewStream
|
||||||
|
{
|
||||||
|
public MemoryViewXorStream(bool readable, bool writable, long ptr, long length, MemoryBlock owner,
|
||||||
|
byte[] initial, long offset)
|
||||||
|
: base(readable, writable, ptr, length, owner)
|
||||||
|
{
|
||||||
|
_initial = initial;
|
||||||
|
_offset = (int)offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// the initial data to XOR against for both reading and writing
|
||||||
|
/// </summary>
|
||||||
|
private readonly byte[] _initial;
|
||||||
|
/// <summary>
|
||||||
|
/// offset into the XOR data that this stream is representing
|
||||||
|
/// </summary>
|
||||||
|
private readonly int _offset;
|
||||||
|
|
||||||
|
public override int Read(byte[] buffer, int offset, int count)
|
||||||
|
{
|
||||||
|
int pos = (int)Position;
|
||||||
|
count = base.Read(buffer, offset, count);
|
||||||
|
XorTransform(_initial, _offset + pos, buffer, offset, count);
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Write(byte[] buffer, int offset, int count)
|
||||||
|
{
|
||||||
|
int pos = (int)Position;
|
||||||
|
if (count < 0 || count + offset > buffer.Length)
|
||||||
|
throw new ArgumentOutOfRangeException();
|
||||||
|
if (count > Length - pos)
|
||||||
|
throw new ArgumentOutOfRangeException();
|
||||||
|
// is mutating the buffer passed to Stream.Write kosher?
|
||||||
|
XorTransform(_initial, _offset + pos, buffer, offset, count);
|
||||||
|
base.Write(buffer, offset, count);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static unsafe void XorTransform(byte[] source, int sourceOffset, byte[] dest, int destOffset, int length)
|
||||||
|
{
|
||||||
|
// we don't do any bounds check because MemoryViewStream.Read and MemoryViewXorStream.Write already did it
|
||||||
|
|
||||||
|
// TODO: C compilers can make this pretty snappy, but can the C# jitter? Or do we need intrinsics
|
||||||
|
fixed (byte* _s = source, _d = dest)
|
||||||
|
{
|
||||||
|
byte* s = _s + sourceOffset;
|
||||||
|
byte* d = _d + destOffset;
|
||||||
|
byte* sEnd = s + length;
|
||||||
|
while (s < sEnd)
|
||||||
|
{
|
||||||
|
*d++ ^= *s++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static class Kernel32
|
private static class Kernel32
|
||||||
{
|
{
|
||||||
[DllImport("kernel32.dll", SetLastError = true)]
|
[DllImport("kernel32.dll", SetLastError = true)]
|
|
@ -0,0 +1,156 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Security.Cryptography;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace BizHawk.Common.BizInvoke
|
||||||
|
{
|
||||||
|
public static class WaterboxUtils
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// copy `len` bytes from `src` to `dest`
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="src"></param>
|
||||||
|
/// <param name="dst"></param>
|
||||||
|
/// <param name="len"></param>
|
||||||
|
public static void CopySome(Stream src, Stream dst, long len)
|
||||||
|
{
|
||||||
|
var buff = new byte[4096];
|
||||||
|
while (len > 0)
|
||||||
|
{
|
||||||
|
int r = src.Read(buff, 0, (int)Math.Min(len, 4096));
|
||||||
|
dst.Write(buff, 0, r);
|
||||||
|
len -= r;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static byte[] Hash(byte[] data)
|
||||||
|
{
|
||||||
|
using (var h = SHA1.Create())
|
||||||
|
{
|
||||||
|
return h.ComputeHash(data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static byte[] Hash(Stream s)
|
||||||
|
{
|
||||||
|
using (var h = SHA1.Create())
|
||||||
|
{
|
||||||
|
return h.ComputeHash(s);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static unsafe void ZeroMemory(IntPtr mem, long length)
|
||||||
|
{
|
||||||
|
byte* p = (byte*)mem;
|
||||||
|
byte* end = p + length;
|
||||||
|
while (p < end)
|
||||||
|
{
|
||||||
|
*p++ = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static long Timestamp()
|
||||||
|
{
|
||||||
|
return DateTime.UtcNow.Ticks;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// system page size
|
||||||
|
/// </summary>
|
||||||
|
public static int PageSize { get; private set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// bitshift corresponding to PageSize
|
||||||
|
/// </summary>
|
||||||
|
public static int PageShift { get; private set; }
|
||||||
|
/// <summary>
|
||||||
|
/// bitmask corresponding to PageSize
|
||||||
|
/// </summary>
|
||||||
|
public static ulong PageMask { get; private set; }
|
||||||
|
|
||||||
|
static WaterboxUtils()
|
||||||
|
{
|
||||||
|
int p = PageSize = Environment.SystemPageSize;
|
||||||
|
while (p != 1)
|
||||||
|
{
|
||||||
|
p >>= 1;
|
||||||
|
PageShift++;
|
||||||
|
}
|
||||||
|
PageMask = (ulong)(PageSize - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// true if addr is aligned
|
||||||
|
/// </summary>
|
||||||
|
public static bool Aligned(ulong addr)
|
||||||
|
{
|
||||||
|
return (addr & PageMask) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// align address down to previous page boundary
|
||||||
|
/// </summary>
|
||||||
|
public static ulong AlignDown(ulong addr)
|
||||||
|
{
|
||||||
|
return addr & ~PageMask;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// align address up to next page boundary
|
||||||
|
/// </summary>
|
||||||
|
public static ulong AlignUp(ulong addr)
|
||||||
|
{
|
||||||
|
return ((addr - 1) | PageMask) + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// return the minimum number of pages needed to hold size
|
||||||
|
/// </summary>
|
||||||
|
public static int PagesNeeded(ulong size)
|
||||||
|
{
|
||||||
|
return (int)((size + PageMask) >> PageShift);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// C# is annoying: arithmetic operators for native ints are not exposed.
|
||||||
|
// So we store them as long/ulong instead in many places, and use these helpers
|
||||||
|
// to convert to IntPtr when needed
|
||||||
|
|
||||||
|
public static class Z
|
||||||
|
{
|
||||||
|
public static IntPtr US(ulong l)
|
||||||
|
{
|
||||||
|
if (IntPtr.Size == 8)
|
||||||
|
return (IntPtr)(long)l;
|
||||||
|
else
|
||||||
|
return (IntPtr)(int)l;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static UIntPtr UU(ulong l)
|
||||||
|
{
|
||||||
|
if (UIntPtr.Size == 8)
|
||||||
|
return (UIntPtr)l;
|
||||||
|
else
|
||||||
|
return (UIntPtr)(uint)l;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IntPtr SS(long l)
|
||||||
|
{
|
||||||
|
if (IntPtr.Size == 8)
|
||||||
|
return (IntPtr)l;
|
||||||
|
else
|
||||||
|
return (IntPtr)(int)l;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static UIntPtr SU(long l)
|
||||||
|
{
|
||||||
|
if (UIntPtr.Size == 8)
|
||||||
|
return (UIntPtr)(ulong)l;
|
||||||
|
else
|
||||||
|
return (UIntPtr)(uint)l;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,75 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System.Globalization;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace BizHawk.Common
|
||||||
|
{
|
||||||
|
public class DescribableEnumConverter : EnumConverter
|
||||||
|
{
|
||||||
|
private Type enumType;
|
||||||
|
|
||||||
|
public DescribableEnumConverter(Type type) : base(type)
|
||||||
|
{
|
||||||
|
enumType = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool CanConvertTo(ITypeDescriptorContext context, Type destType)
|
||||||
|
{
|
||||||
|
return destType == typeof(string);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture,
|
||||||
|
object value, Type destType)
|
||||||
|
{
|
||||||
|
var fi = enumType.GetField(Enum.GetName(enumType, value));
|
||||||
|
var attr = (DisplayAttribute)fi.GetCustomAttribute(typeof(DisplayAttribute));
|
||||||
|
if (attr != null)
|
||||||
|
return attr.Name;
|
||||||
|
else
|
||||||
|
return value.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool CanConvertFrom(ITypeDescriptorContext context, Type srcType)
|
||||||
|
{
|
||||||
|
return srcType == typeof(string);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture,
|
||||||
|
object value)
|
||||||
|
{
|
||||||
|
foreach (var fi in enumType.GetFields(BindingFlags.Public | BindingFlags.Static))
|
||||||
|
{
|
||||||
|
var attr = (DisplayAttribute)fi.GetCustomAttribute(typeof(DisplayAttribute));
|
||||||
|
if (attr != null && attr.Name.Equals(value))
|
||||||
|
return Enum.Parse(enumType, fi.Name);
|
||||||
|
}
|
||||||
|
return Enum.Parse(enumType, (string)value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
|
||||||
|
{
|
||||||
|
var ret = new List<object>();
|
||||||
|
foreach (var fi in enumType.GetFields(BindingFlags.Public | BindingFlags.Static))
|
||||||
|
{
|
||||||
|
ret.Add(fi.GetValue(null));
|
||||||
|
}
|
||||||
|
return new StandardValuesCollection(ret);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -8,6 +8,7 @@ namespace BizHawk.Common.BufferExtensions
|
||||||
{
|
{
|
||||||
public static class BufferExtensions
|
public static class BufferExtensions
|
||||||
{
|
{
|
||||||
|
[Obsolete] // do we know of any situation where SaveAsHexFast doesn't work?
|
||||||
public static void SaveAsHex(this byte[] buffer, TextWriter writer)
|
public static void SaveAsHex(this byte[] buffer, TextWriter writer)
|
||||||
{
|
{
|
||||||
foreach (var b in buffer)
|
foreach (var b in buffer)
|
||||||
|
@ -39,6 +40,7 @@ namespace BizHawk.Common.BufferExtensions
|
||||||
writer.WriteLine();
|
writer.WriteLine();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Obsolete] // do we know of any situation where SaveAsHexFast doesn't work?
|
||||||
public static void SaveAsHex(this byte[] buffer, TextWriter writer, int length)
|
public static void SaveAsHex(this byte[] buffer, TextWriter writer, int length)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < length; i++)
|
for (int i = 0; i < length; i++)
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace BizHawk.Common
|
namespace BizHawk.Common
|
||||||
{
|
{
|
||||||
|
@ -12,6 +13,12 @@ namespace BizHawk.Common
|
||||||
|
|
||||||
public static class ImportResolverExtensions
|
public static class ImportResolverExtensions
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Resolve an entry point and throw an exception if that resolution is NULL
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="dll"></param>
|
||||||
|
/// <param name="entryPoint"></param>
|
||||||
|
/// <returns></returns>
|
||||||
public static IntPtr SafeResolve(this IImportResolver dll, string entryPoint)
|
public static IntPtr SafeResolve(this IImportResolver dll, string entryPoint)
|
||||||
{
|
{
|
||||||
var ret = dll.Resolve(entryPoint);
|
var ret = dll.Resolve(entryPoint);
|
||||||
|
@ -23,4 +30,32 @@ namespace BizHawk.Common
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// compose multiple ImportResolvers, where subsequent ones takes precedence over earlier ones
|
||||||
|
/// </summary>
|
||||||
|
public class PatchImportResolver : IImportResolver
|
||||||
|
{
|
||||||
|
private readonly List<IImportResolver> _resolvers = new List<IImportResolver>();
|
||||||
|
|
||||||
|
public PatchImportResolver(params IImportResolver[] rr)
|
||||||
|
{
|
||||||
|
Add(rr);
|
||||||
|
}
|
||||||
|
public void Add(params IImportResolver[] rr)
|
||||||
|
{
|
||||||
|
_resolvers.AddRange(rr);
|
||||||
|
}
|
||||||
|
|
||||||
|
public IntPtr Resolve(string entryPoint)
|
||||||
|
{
|
||||||
|
for (int i = _resolvers.Count - 1; i >= 0; i--)
|
||||||
|
{
|
||||||
|
var ret = _resolvers[i].Resolve(entryPoint);
|
||||||
|
if (ret != IntPtr.Zero)
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
return IntPtr.Zero;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,40 @@
|
||||||
namespace BizHawk.Common
|
using System;
|
||||||
|
|
||||||
|
namespace BizHawk.Common
|
||||||
{
|
{
|
||||||
public interface IMonitor
|
public interface IMonitor
|
||||||
{
|
{
|
||||||
void Enter();
|
void Enter();
|
||||||
void Exit();
|
void Exit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class MonitorExtensions
|
||||||
|
{
|
||||||
|
public static IDisposable EnterExit(this IMonitor m)
|
||||||
|
{
|
||||||
|
var ret = new EnterExitWrapper(m);
|
||||||
|
m.Enter();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
private class EnterExitWrapper : IDisposable
|
||||||
|
{
|
||||||
|
private readonly IMonitor _m;
|
||||||
|
private bool _disposed = false;
|
||||||
|
|
||||||
|
public EnterExitWrapper(IMonitor m)
|
||||||
|
{
|
||||||
|
_m = m;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
if (!_disposed)
|
||||||
|
{
|
||||||
|
_m.Exit();
|
||||||
|
_disposed = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -458,6 +458,14 @@ namespace BizHawk.Common
|
||||||
{
|
{
|
||||||
DeleteFileW(path + ":Zone.Identifier");
|
DeleteFileW(path + ":Zone.Identifier");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[DllImport("kernel32.dll")]
|
||||||
|
static extern bool IsDebuggerPresent();
|
||||||
|
|
||||||
|
public static bool IsDebuggerReallyPresent()
|
||||||
|
{
|
||||||
|
return IsDebuggerPresent();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -165,7 +165,8 @@ namespace BizHawk.Emulation.Common
|
||||||
List<string> list = new List<string>(FloatControls);
|
List<string> list = new List<string>(FloatControls);
|
||||||
list.AddRange(BoolButtons);
|
list.AddRange(BoolButtons);
|
||||||
|
|
||||||
List<string>[] ret = new List<string>[9];
|
// starts with console buttons, then each plasyer's buttons individually
|
||||||
|
List<string>[] ret = new List<string>[PlayerCount + 1];
|
||||||
for (int i = 0; i < ret.Length; i++)
|
for (int i = 0; i < ret.Length; i++)
|
||||||
{
|
{
|
||||||
ret[i] = new List<string>();
|
ret[i] = new List<string>();
|
||||||
|
@ -182,16 +183,18 @@ namespace BizHawk.Emulation.Common
|
||||||
|
|
||||||
public int PlayerNumber(string buttonName)
|
public int PlayerNumber(string buttonName)
|
||||||
{
|
{
|
||||||
int player = 0;
|
var match = PlayerRegex.Match(buttonName);
|
||||||
if (buttonName.Length > 3 && buttonName.StartsWith("P") && char.IsNumber(buttonName[1]))
|
if (match.Success)
|
||||||
{
|
{
|
||||||
player = buttonName[1] - '0';
|
return int.Parse(match.Groups[1].Value);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return player;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static readonly Regex PlayerRegex = new Regex("^P(\\d) ");
|
private static readonly Regex PlayerRegex = new Regex("^P(\\d+) ");
|
||||||
|
|
||||||
public int PlayerCount
|
public int PlayerCount
|
||||||
{
|
{
|
||||||
|
@ -199,9 +202,7 @@ namespace BizHawk.Emulation.Common
|
||||||
{
|
{
|
||||||
var allNames = FloatControls.Concat(BoolButtons).ToList();
|
var allNames = FloatControls.Concat(BoolButtons).ToList();
|
||||||
var player = allNames
|
var player = allNames
|
||||||
.Select(s => PlayerRegex.Match(s).Groups[1])
|
.Select(PlayerNumber)
|
||||||
.Where(group => group.Success)
|
|
||||||
.Select(group => group.Value[0] - '0')
|
|
||||||
.DefaultIfEmpty(0)
|
.DefaultIfEmpty(0)
|
||||||
.Max();
|
.Max();
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
using System;
|
using BizHawk.Common;
|
||||||
|
using System;
|
||||||
|
|
||||||
namespace BizHawk.Emulation.Common
|
namespace BizHawk.Emulation.Common
|
||||||
{
|
{
|
||||||
|
@ -9,7 +10,8 @@ namespace BizHawk.Emulation.Common
|
||||||
|
|
||||||
public Func<long, byte> Peek
|
public Func<long, byte> Peek
|
||||||
{
|
{
|
||||||
get { return _peek; } set { _peek = value; }
|
get { return _peek; }
|
||||||
|
set { _peek = value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public Action<long, byte> Poke
|
public Action<long, byte> Poke
|
||||||
|
@ -134,6 +136,60 @@ namespace BizHawk.Emulation.Common
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public unsafe class MemoryDomainIntPtrMonitor : MemoryDomain
|
||||||
|
{
|
||||||
|
public IntPtr Data { get; set; }
|
||||||
|
private readonly IMonitor _monitor;
|
||||||
|
|
||||||
|
public override byte PeekByte(long addr)
|
||||||
|
{
|
||||||
|
if ((ulong)addr < (ulong)Size)
|
||||||
|
{
|
||||||
|
using (_monitor.EnterExit())
|
||||||
|
{
|
||||||
|
return ((byte*)Data)[addr];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new ArgumentOutOfRangeException(nameof(addr));
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void PokeByte(long addr, byte val)
|
||||||
|
{
|
||||||
|
if (Writable)
|
||||||
|
{
|
||||||
|
if ((ulong)addr < (ulong)Size)
|
||||||
|
{
|
||||||
|
using (_monitor.EnterExit())
|
||||||
|
{
|
||||||
|
((byte*)Data)[addr] = val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw new ArgumentOutOfRangeException(nameof(addr));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetSize(long size)
|
||||||
|
{
|
||||||
|
Size = size;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MemoryDomainIntPtrMonitor(string name, Endian endian, IntPtr data, long size, bool writable, int wordSize,
|
||||||
|
IMonitor monitor)
|
||||||
|
{
|
||||||
|
Name = name;
|
||||||
|
EndianType = endian;
|
||||||
|
Data = data;
|
||||||
|
Size = size;
|
||||||
|
Writable = writable;
|
||||||
|
WordSize = wordSize;
|
||||||
|
_monitor = monitor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public unsafe class MemoryDomainIntPtrSwap16 : MemoryDomain
|
public unsafe class MemoryDomainIntPtrSwap16 : MemoryDomain
|
||||||
{
|
{
|
||||||
public IntPtr Data { get; set; }
|
public IntPtr Data { get; set; }
|
||||||
|
@ -173,4 +229,53 @@ namespace BizHawk.Emulation.Common
|
||||||
WordSize = 2;
|
WordSize = 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public unsafe class MemoryDomainIntPtrSwap16Monitor : MemoryDomain
|
||||||
|
{
|
||||||
|
public IntPtr Data { get; set; }
|
||||||
|
private readonly IMonitor _monitor;
|
||||||
|
|
||||||
|
public override byte PeekByte(long addr)
|
||||||
|
{
|
||||||
|
if ((ulong)addr < (ulong)Size)
|
||||||
|
{
|
||||||
|
using (_monitor.EnterExit())
|
||||||
|
{
|
||||||
|
return ((byte*)Data)[addr ^ 1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new ArgumentOutOfRangeException(nameof(addr));
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void PokeByte(long addr, byte val)
|
||||||
|
{
|
||||||
|
if (Writable)
|
||||||
|
{
|
||||||
|
if ((ulong)addr < (ulong)Size)
|
||||||
|
{
|
||||||
|
using (_monitor.EnterExit())
|
||||||
|
{
|
||||||
|
((byte*)Data)[addr ^ 1] = val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw new ArgumentOutOfRangeException(nameof(addr));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public MemoryDomainIntPtrSwap16Monitor(string name, Endian endian, IntPtr data, long size, bool writable,
|
||||||
|
IMonitor monitor)
|
||||||
|
{
|
||||||
|
Name = name;
|
||||||
|
EndianType = endian;
|
||||||
|
Data = data;
|
||||||
|
Size = size;
|
||||||
|
Writable = writable;
|
||||||
|
WordSize = 2;
|
||||||
|
_monitor = monitor;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
|
||||||
<DebugSymbols>true</DebugSymbols>
|
<DebugSymbols>true</DebugSymbols>
|
||||||
<OutputPath>..\output64\dll\</OutputPath>
|
<OutputPath>..\output\dll\</OutputPath>
|
||||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||||
<DebugType>full</DebugType>
|
<DebugType>full</DebugType>
|
||||||
|
@ -17,9 +17,10 @@
|
||||||
<CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
|
<CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
|
||||||
<CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
|
<CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
|
||||||
<CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
|
<CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
|
||||||
|
<Prefer32Bit>false</Prefer32Bit>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
|
||||||
<OutputPath>..\output64\dll\</OutputPath>
|
<OutputPath>..\output\dll\</OutputPath>
|
||||||
<DefineConstants>TRACE</DefineConstants>
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||||
<Optimize>true</Optimize>
|
<Optimize>true</Optimize>
|
||||||
|
@ -35,6 +36,7 @@
|
||||||
<CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
|
<CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
|
||||||
<CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
|
<CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
|
||||||
<CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
|
<CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
|
||||||
|
<Prefer32Bit>false</Prefer32Bit>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
|
@ -45,31 +47,10 @@
|
||||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
<RootNamespace>BizHawk.Emulation.Common</RootNamespace>
|
<RootNamespace>BizHawk.Emulation.Common</RootNamespace>
|
||||||
<AssemblyName>BizHawk.Emulation.Common</AssemblyName>
|
<AssemblyName>BizHawk.Emulation.Common</AssemblyName>
|
||||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
|
||||||
<FileAlignment>512</FileAlignment>
|
<FileAlignment>512</FileAlignment>
|
||||||
<TargetFrameworkProfile />
|
<TargetFrameworkProfile />
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
|
|
||||||
<DebugSymbols>true</DebugSymbols>
|
|
||||||
<DebugType>full</DebugType>
|
|
||||||
<Optimize>false</Optimize>
|
|
||||||
<OutputPath>..\output\dll\</OutputPath>
|
|
||||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<WarningLevel>4</WarningLevel>
|
|
||||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
|
||||||
<PlatformTarget>x86</PlatformTarget>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
|
|
||||||
<DebugType>pdbonly</DebugType>
|
|
||||||
<Optimize>true</Optimize>
|
|
||||||
<OutputPath>..\output\dll\</OutputPath>
|
|
||||||
<DefineConstants>TRACE</DefineConstants>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<WarningLevel>4</WarningLevel>
|
|
||||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
|
||||||
<PlatformTarget>x86</PlatformTarget>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
<Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
|
|
@ -331,6 +331,19 @@ namespace BizHawk.Emulation.Common
|
||||||
case ".DO":
|
case ".DO":
|
||||||
game.System = "AppleII";
|
game.System = "AppleII";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case ".VB":
|
||||||
|
game.System = "VB";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ".NGP":
|
||||||
|
case ".NGC":
|
||||||
|
game.System = "NGP";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ".O2":
|
||||||
|
game.System = "O2";
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
game.Name = Path.GetFileNameWithoutExtension(fileName)?.Replace('_', ' ');
|
game.Name = Path.GetFileNameWithoutExtension(fileName)?.Replace('_', ' ');
|
||||||
|
|
|
@ -30,6 +30,8 @@ namespace BizHawk.Emulation.Common
|
||||||
FirmwareAndOption("A3AF676991391A6DD716C79022D4947206B78164", 4096, "A78", "Bios_HSC", "7800highscore.bin", "Highscore Bios");
|
FirmwareAndOption("A3AF676991391A6DD716C79022D4947206B78164", 4096, "A78", "Bios_HSC", "7800highscore.bin", "Highscore Bios");
|
||||||
FirmwareAndOption("45BEDC4CBDEAC66C7DF59E9E599195C778D86A92", 8192, "Coleco", "Bios", "ColecoBios.bin", "Bios");
|
FirmwareAndOption("45BEDC4CBDEAC66C7DF59E9E599195C778D86A92", 8192, "Coleco", "Bios", "ColecoBios.bin", "Bios");
|
||||||
|
|
||||||
|
FirmwareAndOption("079a7ce93f3fd7d35e444b2fab16b1867c95e2c1", 66084, "SGB", "SPC", "sgb.spc", "Super Gameboy SPC");
|
||||||
|
|
||||||
var gbaNormal = File("300C20DF6731A33952DED8C436F7F186D25D3492", 16384, "gbabios.rom", "Bios (World)");
|
var gbaNormal = File("300C20DF6731A33952DED8C436F7F186D25D3492", 16384, "gbabios.rom", "Bios (World)");
|
||||||
var gbaJDebug = File("AA98A2AD32B86106340665D1222D7D973A1361C7", 16384, "gbabios.rom", "Bios (J Debug)");
|
var gbaJDebug = File("AA98A2AD32B86106340665D1222D7D973A1361C7", 16384, "gbabios.rom", "Bios (J Debug)");
|
||||||
Firmware("GBA", "Bios", "Bios");
|
Firmware("GBA", "Bios", "Bios");
|
||||||
|
@ -70,6 +72,8 @@ namespace BizHawk.Emulation.Common
|
||||||
Option("SAT", "E", ss_100a_ue);
|
Option("SAT", "E", ss_100a_ue);
|
||||||
Option("SAT", "E", ss_100_j);
|
Option("SAT", "E", ss_100_j);
|
||||||
Option("SAT", "E", ss_101_j);
|
Option("SAT", "E", ss_101_j);
|
||||||
|
FirmwareAndOption("a67cd4f550751f8b91de2b8b74528ab4e0c11c77", 2 * 1024 * 1024, "SAT", "KOF95", "kof95.bin", "King of Fighters cartridge");
|
||||||
|
Firmware("SAT", "ULTRAMAN", "Ultraman cartridge");
|
||||||
|
|
||||||
var ti83_102 = File("CE08F6A808701FC6672230A790167EE485157561", 262144, "ti83_102.rom", "TI-83 Rom v1.02"); // ?? is this size correct?
|
var ti83_102 = File("CE08F6A808701FC6672230A790167EE485157561", 262144, "ti83_102.rom", "TI-83 Rom v1.02"); // ?? is this size correct?
|
||||||
var ti83_103 = File("8399E384804D8D29866CAA4C8763D7A61946A467", 262144, "ti83_103.rom", "TI-83 Rom v1.03"); // ?? is this size correct?
|
var ti83_103 = File("8399E384804D8D29866CAA4C8763D7A61946A467", 262144, "ti83_103.rom", "TI-83 Rom v1.03"); // ?? is this size correct?
|
||||||
|
@ -198,6 +202,12 @@ namespace BizHawk.Emulation.Common
|
||||||
Firmware("AppleII", "DiskII", "DiskII.rom");
|
Firmware("AppleII", "DiskII", "DiskII.rom");
|
||||||
var appleII_DiskII = File("D4181C9F046AAFC3FB326B381BAAC809D9E38D16", 256, "DiskII.rom", "Disk II");
|
var appleII_DiskII = File("D4181C9F046AAFC3FB326B381BAAC809D9E38D16", 256, "DiskII.rom", "Disk II");
|
||||||
Option("AppleII", "DiskII", appleII_DiskII);
|
Option("AppleII", "DiskII", appleII_DiskII);
|
||||||
|
|
||||||
|
FirmwareAndOption("b2e1955d957a475de2411770452eff4ea19f4cee", 1024, "O2", "BIOS", "Odyssey2.bin", "Odyssey 2 Bios");
|
||||||
|
FirmwareAndOption("a6120aed50831c9c0d95dbdf707820f601d9452e", 1024, "O2", "BIOS-C52", "PhillipsC52.bin", "Phillips C52 Bios");
|
||||||
|
|
||||||
|
FirmwareAndOption("4ED31EC6B0B175BB109C0EB5FD3D193DA823339F", 256, "GB", "World", "GB_boot_ROM.gb", "Game Boy BIOS");
|
||||||
|
FirmwareAndOption("1293D68BF9643BC4F36954C1E80E38F39864528D", 2304, "GBC", "World", "GBC_boot_ROM.gb", "Game Boy Color BIOS");
|
||||||
}
|
}
|
||||||
|
|
||||||
// adds a defined firmware ID to the database
|
// adds a defined firmware ID to the database
|
||||||
|
@ -329,4 +339,4 @@ namespace BizHawk.Emulation.Common
|
||||||
return found.FirstOrDefault();
|
return found.FirstOrDefault();
|
||||||
}
|
}
|
||||||
} // static class FirmwareDatabase
|
} // static class FirmwareDatabase
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,13 +2,22 @@
|
||||||
|
|
||||||
namespace BizHawk.Emulation.Common
|
namespace BizHawk.Emulation.Common
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Binary save and load state only without any trappings. At the moment, an emulator core should not implement this directly
|
||||||
|
/// </summary>
|
||||||
|
public interface IBinaryStateable
|
||||||
|
{
|
||||||
|
void SaveStateBinary(BinaryWriter writer);
|
||||||
|
void LoadStateBinary(BinaryReader reader);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// This service manages the logic of sending and receiving savestates from the core
|
/// This service manages the logic of sending and receiving savestates from the core
|
||||||
/// If this service is available, client apps will expose features for making savestates and that utilize savestates (such as rewind))
|
/// If this service is available, client apps will expose features for making savestates and that utilize savestates (such as rewind))
|
||||||
/// If unavailable these options will not be exposed
|
/// If unavailable these options will not be exposed
|
||||||
/// Additionally many tools depend on savestates such as TAStudio, these will only be available if this service is implemented
|
/// Additionally many tools depend on savestates such as TAStudio, these will only be available if this service is implemented
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public interface IStatable : IEmulatorService
|
public interface IStatable : IBinaryStateable, IEmulatorService
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets a value indicating whether the core would rather give a binary savestate than a text one. Both must function regardless
|
/// Gets a value indicating whether the core would rather give a binary savestate than a text one. Both must function regardless
|
||||||
|
@ -18,9 +27,6 @@ namespace BizHawk.Emulation.Common
|
||||||
void SaveStateText(TextWriter writer);
|
void SaveStateText(TextWriter writer);
|
||||||
void LoadStateText(TextReader reader);
|
void LoadStateText(TextReader reader);
|
||||||
|
|
||||||
void SaveStateBinary(BinaryWriter writer);
|
|
||||||
void LoadStateBinary(BinaryReader reader);
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// save state binary to a byte buffer
|
/// save state binary to a byte buffer
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
|
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
|
||||||
|
@ -10,7 +10,7 @@
|
||||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
<RootNamespace>BizHawk.Emulation.Cores</RootNamespace>
|
<RootNamespace>BizHawk.Emulation.Cores</RootNamespace>
|
||||||
<AssemblyName>BizHawk.Emulation.Cores</AssemblyName>
|
<AssemblyName>BizHawk.Emulation.Cores</AssemblyName>
|
||||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
|
||||||
<FileAlignment>512</FileAlignment>
|
<FileAlignment>512</FileAlignment>
|
||||||
<FileUpgradeFlags>
|
<FileUpgradeFlags>
|
||||||
</FileUpgradeFlags>
|
</FileUpgradeFlags>
|
||||||
|
@ -33,39 +33,13 @@
|
||||||
<BootstrapperEnabled>true</BootstrapperEnabled>
|
<BootstrapperEnabled>true</BootstrapperEnabled>
|
||||||
<TargetFrameworkProfile />
|
<TargetFrameworkProfile />
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
|
|
||||||
<DebugSymbols>true</DebugSymbols>
|
|
||||||
<DebugType>full</DebugType>
|
|
||||||
<Optimize>false</Optimize>
|
|
||||||
<OutputPath>..\output\dll\</OutputPath>
|
|
||||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<WarningLevel>4</WarningLevel>
|
|
||||||
<PlatformTarget>x86</PlatformTarget>
|
|
||||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
|
||||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
|
||||||
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
|
|
||||||
<DebugType>pdbonly</DebugType>
|
|
||||||
<Optimize>true</Optimize>
|
|
||||||
<OutputPath>..\output\dll\</OutputPath>
|
|
||||||
<DefineConstants>TRACE;VS2010</DefineConstants>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<WarningLevel>4</WarningLevel>
|
|
||||||
<PlatformTarget>x86</PlatformTarget>
|
|
||||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
|
||||||
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
|
|
||||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
|
||||||
<DebugSymbols>true</DebugSymbols>
|
<DebugSymbols>true</DebugSymbols>
|
||||||
<OutputPath>..\output64\dll\</OutputPath>
|
<OutputPath>..\output\dll\</OutputPath>
|
||||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||||
<DebugType>full</DebugType>
|
<DebugType>full</DebugType>
|
||||||
<PlatformTarget>x64</PlatformTarget>
|
<PlatformTarget>x64</PlatformTarget>
|
||||||
<CodeAnalysisLogFile>..\output\dll\BizHawk.Emulation.Cores.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
|
|
||||||
<CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
|
<CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
|
||||||
<CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
|
<CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
|
||||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||||
|
@ -76,9 +50,10 @@
|
||||||
<CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
|
<CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
|
||||||
<CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
|
<CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
|
||||||
<CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
|
<CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
|
||||||
|
<Prefer32Bit>false</Prefer32Bit>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
|
||||||
<OutputPath>..\output64\dll\</OutputPath>
|
<OutputPath>..\output\dll\</OutputPath>
|
||||||
<DefineConstants>TRACE;VS2010</DefineConstants>
|
<DefineConstants>TRACE;VS2010</DefineConstants>
|
||||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||||
<Optimize>true</Optimize>
|
<Optimize>true</Optimize>
|
||||||
|
@ -95,6 +70,7 @@
|
||||||
<CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
|
<CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
|
||||||
<CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
|
<CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
|
||||||
<CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
|
<CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
|
||||||
|
<Prefer32Bit>false</Prefer32Bit>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="ELFSharp">
|
<Reference Include="ELFSharp">
|
||||||
|
@ -110,7 +86,11 @@
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<SpecificVersion>False</SpecificVersion>
|
||||||
<HintPath>..\References\OpenTK.dll</HintPath>
|
<HintPath>..\References\OpenTK.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="PeNet">
|
||||||
|
<HintPath>..\References\PeNet.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.ComponentModel.DataAnnotations" />
|
||||||
<Reference Include="System.Core">
|
<Reference Include="System.Core">
|
||||||
<RequiredTargetFramework>3.5</RequiredTargetFramework>
|
<RequiredTargetFramework>3.5</RequiredTargetFramework>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
@ -382,7 +362,7 @@
|
||||||
<Compile Include="Consoles\Atari\A7800Hawk\A7800Hawk.ISaveRam.cs">
|
<Compile Include="Consoles\Atari\A7800Hawk\A7800Hawk.ISaveRam.cs">
|
||||||
<DependentUpon>A7800Hawk.cs</DependentUpon>
|
<DependentUpon>A7800Hawk.cs</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="Consoles\Atari\A7800Hawk\A7800Hawk.ISettable.cs">
|
<Compile Include="Consoles\Atari\A7800Hawk\A7800Hawk.ISettable.cs">
|
||||||
<DependentUpon>A7800Hawk.cs</DependentUpon>
|
<DependentUpon>A7800Hawk.cs</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="Consoles\Atari\A7800Hawk\A7800HawkControllerDeck.cs" />
|
<Compile Include="Consoles\Atari\A7800Hawk\A7800HawkControllerDeck.cs" />
|
||||||
|
@ -495,6 +475,8 @@
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="Consoles\Intellivision\PSG.cs" />
|
<Compile Include="Consoles\Intellivision\PSG.cs" />
|
||||||
<Compile Include="Consoles\Intellivision\STIC.cs" />
|
<Compile Include="Consoles\Intellivision\STIC.cs" />
|
||||||
|
<Compile Include="Consoles\Magnavox\LibO2Em.cs" />
|
||||||
|
<Compile Include="Consoles\Magnavox\O2Em.cs" />
|
||||||
<Compile Include="Consoles\Nintendo\Gameboy\Gambatte.cs" />
|
<Compile Include="Consoles\Nintendo\Gameboy\Gambatte.cs" />
|
||||||
<Compile Include="Consoles\Nintendo\Gameboy\Gambatte.ICodeDataLog.cs">
|
<Compile Include="Consoles\Nintendo\Gameboy\Gambatte.ICodeDataLog.cs">
|
||||||
<DependentUpon>Gambatte.cs</DependentUpon>
|
<DependentUpon>Gambatte.cs</DependentUpon>
|
||||||
|
@ -559,7 +541,10 @@
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="Consoles\Nintendo\Gameboy\GBColors.cs" />
|
<Compile Include="Consoles\Nintendo\Gameboy\GBColors.cs" />
|
||||||
<Compile Include="Consoles\Nintendo\Gameboy\GBDisassembler.cs" />
|
<Compile Include="Consoles\Nintendo\Gameboy\GBDisassembler.cs" />
|
||||||
|
<Compile Include="Consoles\Nintendo\Gameboy\IGameboyCommon.cs" />
|
||||||
<Compile Include="Consoles\Nintendo\Gameboy\LibGambatte.cs" />
|
<Compile Include="Consoles\Nintendo\Gameboy\LibGambatte.cs" />
|
||||||
|
<Compile Include="Consoles\Nintendo\Gameboy\LibPizza.cs" />
|
||||||
|
<Compile Include="Consoles\Nintendo\Gameboy\Pizza.cs" />
|
||||||
<Compile Include="Consoles\Nintendo\GBA\ArmV4Disassembler.cs" />
|
<Compile Include="Consoles\Nintendo\GBA\ArmV4Disassembler.cs" />
|
||||||
<Compile Include="Consoles\Nintendo\GBA\GBA.cs" />
|
<Compile Include="Consoles\Nintendo\GBA\GBA.cs" />
|
||||||
<Compile Include="Consoles\Nintendo\GBA\IGBAGPUViewable.cs" />
|
<Compile Include="Consoles\Nintendo\GBA\IGBAGPUViewable.cs" />
|
||||||
|
@ -646,7 +631,6 @@
|
||||||
<Compile Include="Consoles\Nintendo\N64\N64SyncSettings.Controller.cs" />
|
<Compile Include="Consoles\Nintendo\N64\N64SyncSettings.Controller.cs" />
|
||||||
<Compile Include="Consoles\Nintendo\N64\N64SyncSettings.Glide.cs" />
|
<Compile Include="Consoles\Nintendo\N64\N64SyncSettings.Glide.cs" />
|
||||||
<Compile Include="Consoles\Nintendo\N64\N64SyncSettings.GlideMk2.cs" />
|
<Compile Include="Consoles\Nintendo\N64\N64SyncSettings.GlideMk2.cs" />
|
||||||
<Compile Include="Consoles\Nintendo\N64\N64SyncSettings.Jabo.cs" />
|
|
||||||
<Compile Include="Consoles\Nintendo\N64\N64SyncSettings.Rice.cs" />
|
<Compile Include="Consoles\Nintendo\N64\N64SyncSettings.Rice.cs" />
|
||||||
<Compile Include="Consoles\Nintendo\N64\NativeApi\mupen64plusAudioApi.cs" />
|
<Compile Include="Consoles\Nintendo\N64\NativeApi\mupen64plusAudioApi.cs" />
|
||||||
<Compile Include="Consoles\Nintendo\N64\NativeApi\mupen64plusCoreApi.cs" />
|
<Compile Include="Consoles\Nintendo\N64\NativeApi\mupen64plusCoreApi.cs" />
|
||||||
|
@ -1022,6 +1006,8 @@
|
||||||
<Compile Include="Consoles\Nintendo\SNES\ScanlineHookManager.cs" />
|
<Compile Include="Consoles\Nintendo\SNES\ScanlineHookManager.cs" />
|
||||||
<Compile Include="Consoles\Nintendo\SNES\SnesColors.cs" />
|
<Compile Include="Consoles\Nintendo\SNES\SnesColors.cs" />
|
||||||
<Compile Include="Consoles\Nintendo\SNES\SNESGraphicsDecoder.cs" />
|
<Compile Include="Consoles\Nintendo\SNES\SNESGraphicsDecoder.cs" />
|
||||||
|
<Compile Include="Consoles\Nintendo\VB\LibVirtualBoyee.cs" />
|
||||||
|
<Compile Include="Consoles\Nintendo\VB\VirtualBoyee.cs" />
|
||||||
<Compile Include="Consoles\PC Engine\ADPCM.cs" />
|
<Compile Include="Consoles\PC Engine\ADPCM.cs" />
|
||||||
<Compile Include="Consoles\PC Engine\MemoryMap.TurboCD.cs" />
|
<Compile Include="Consoles\PC Engine\MemoryMap.TurboCD.cs" />
|
||||||
<Compile Include="Consoles\PC Engine\MemoryMap.Populous.cs" />
|
<Compile Include="Consoles\PC Engine\MemoryMap.Populous.cs" />
|
||||||
|
@ -1143,29 +1129,9 @@
|
||||||
<Compile Include="Consoles\Sega\gpgx64\GPGXControlConverter.cs" />
|
<Compile Include="Consoles\Sega\gpgx64\GPGXControlConverter.cs" />
|
||||||
<Compile Include="Consoles\Sega\gpgx64\LibGPGX.cs" />
|
<Compile Include="Consoles\Sega\gpgx64\LibGPGX.cs" />
|
||||||
<Compile Include="Consoles\Sega\Saturn\FilePiping.cs" />
|
<Compile Include="Consoles\Sega\Saturn\FilePiping.cs" />
|
||||||
<Compile Include="Consoles\Sega\Saturn\LibYabause.cs" />
|
<Compile Include="Consoles\Sega\Saturn\LibSaturnus.cs" />
|
||||||
<Compile Include="Consoles\Sega\Saturn\Yabause.cs" />
|
<Compile Include="Consoles\Sega\Saturn\Saturnus.cs" />
|
||||||
<Compile Include="Consoles\Sega\Saturn\Yabause.IDriveLight.cs">
|
<Compile Include="Consoles\Sega\Saturn\SaturnusControllerDeck.cs" />
|
||||||
<DependentUpon>Yabause.cs</DependentUpon>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="Consoles\Sega\Saturn\Yabause.IInputPollable.cs">
|
|
||||||
<DependentUpon>Yabause.cs</DependentUpon>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="Consoles\Sega\Saturn\Yabause.IMemoryDomains.cs">
|
|
||||||
<DependentUpon>Yabause.cs</DependentUpon>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="Consoles\Sega\Saturn\Yabause.ISaveram.cs">
|
|
||||||
<DependentUpon>Yabause.cs</DependentUpon>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="Consoles\Sega\Saturn\Yabause.ISettable.cs">
|
|
||||||
<DependentUpon>Yabause.cs</DependentUpon>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="Consoles\Sega\Saturn\Yabause.IStatable.cs">
|
|
||||||
<DependentUpon>Yabause.cs</DependentUpon>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="Consoles\Sega\Saturn\Yabause.ITraceable.cs">
|
|
||||||
<DependentUpon>Yabause.cs</DependentUpon>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="Consoles\Sega\SMS\SMS.cs" />
|
<Compile Include="Consoles\Sega\SMS\SMS.cs" />
|
||||||
<Compile Include="Consoles\Sega\SMS\SMS.ICodeDataLogger.cs">
|
<Compile Include="Consoles\Sega\SMS\SMS.ICodeDataLogger.cs">
|
||||||
<DependentUpon>SMS.cs</DependentUpon>
|
<DependentUpon>SMS.cs</DependentUpon>
|
||||||
|
@ -1206,6 +1172,9 @@
|
||||||
<Compile Include="Consoles\Sega\SMS\VDP.ModeTMS.cs" />
|
<Compile Include="Consoles\Sega\SMS\VDP.ModeTMS.cs" />
|
||||||
<Compile Include="Consoles\Sega\SMS\VDP.Mode4.cs" />
|
<Compile Include="Consoles\Sega\SMS\VDP.Mode4.cs" />
|
||||||
<Compile Include="Consoles\Sega\SMS\VDP.Tables.cs" />
|
<Compile Include="Consoles\Sega\SMS\VDP.Tables.cs" />
|
||||||
|
<Compile Include="Consoles\SNK\DualNeoGeoPort.cs" />
|
||||||
|
<Compile Include="Consoles\SNK\LibNeoGeoPort.cs" />
|
||||||
|
<Compile Include="Consoles\SNK\NeoGeoPort.cs" />
|
||||||
<Compile Include="Consoles\Sony\PSP\PPSSPPDll.cs" />
|
<Compile Include="Consoles\Sony\PSP\PPSSPPDll.cs" />
|
||||||
<Compile Include="Consoles\Sony\PSP\PSP.cs" />
|
<Compile Include="Consoles\Sony\PSP\PSP.cs" />
|
||||||
<Compile Include="Consoles\Sony\PSX\Octoshock.cs">
|
<Compile Include="Consoles\Sony\PSX\Octoshock.cs">
|
||||||
|
@ -1284,7 +1253,10 @@
|
||||||
<Compile Include="CPUs\Z80\Registers.cs" />
|
<Compile Include="CPUs\Z80\Registers.cs" />
|
||||||
<Compile Include="CPUs\Z80\Tables.cs" />
|
<Compile Include="CPUs\Z80\Tables.cs" />
|
||||||
<Compile Include="CPUs\Z80\Z80A.cs" />
|
<Compile Include="CPUs\Z80\Z80A.cs" />
|
||||||
<Compile Include="ElfRunner.cs" />
|
<Compile Include="SideBySideVideo.cs" />
|
||||||
|
<Compile Include="Sound\DualSyncSound.cs" />
|
||||||
|
<Compile Include="Waterbox\CustomSaverammer.cs" />
|
||||||
|
<Compile Include="Waterbox\ElfRunner.cs" />
|
||||||
<Compile Include="FileID.cs" />
|
<Compile Include="FileID.cs" />
|
||||||
<Compile Include="Consoles\PC Engine\MemoryMap.cs" />
|
<Compile Include="Consoles\PC Engine\MemoryMap.cs" />
|
||||||
<Compile Include="Consoles\PC Engine\MemoryMap.SF2.cs" />
|
<Compile Include="Consoles\PC Engine\MemoryMap.SF2.cs" />
|
||||||
|
@ -1306,7 +1278,9 @@
|
||||||
<Compile Include="Libretro\LibretroCoreSettings.cs" />
|
<Compile Include="Libretro\LibretroCoreSettings.cs" />
|
||||||
<Compile Include="Libretro\LibretroCore_Description.cs" />
|
<Compile Include="Libretro\LibretroCore_Description.cs" />
|
||||||
<Compile Include="Libretro\LibretroCore_InputCallbacks.cs" />
|
<Compile Include="Libretro\LibretroCore_InputCallbacks.cs" />
|
||||||
<Compile Include="MemoryBlock.cs" />
|
<Compile Include="Waterbox\Heap.cs" />
|
||||||
|
<Compile Include="Waterbox\LibWaterboxCore.cs" />
|
||||||
|
<Compile Include="Waterbox\MapHeap.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
<Compile Include="Sound\CDAudio.cs" />
|
<Compile Include="Sound\CDAudio.cs" />
|
||||||
<Compile Include="Sound\HuC6280PSG.cs" />
|
<Compile Include="Sound\HuC6280PSG.cs" />
|
||||||
|
@ -1318,6 +1292,11 @@
|
||||||
<Compile Include="Sound\VRC6Alt.cs" />
|
<Compile Include="Sound\VRC6Alt.cs" />
|
||||||
<Compile Include="Sound\YM2413.cs" />
|
<Compile Include="Sound\YM2413.cs" />
|
||||||
<Compile Include="Sound\YM2612.cs" />
|
<Compile Include="Sound\YM2612.cs" />
|
||||||
|
<Compile Include="Waterbox\PeRunner.cs" />
|
||||||
|
<Compile Include="Waterbox\PeWrapper.cs" />
|
||||||
|
<Compile Include="Waterbox\Swappable.cs" />
|
||||||
|
<Compile Include="Waterbox\WaterboxCore.cs" />
|
||||||
|
<Compile Include="Waterbox\WaterboxUtils.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Content Include="Consoles\Coleco\docs\CV-Sound.txt" />
|
<Content Include="Consoles\Coleco\docs\CV-Sound.txt" />
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
using BizHawk.Common.BizInvoke;
|
||||||
|
using BizHawk.Emulation.Cores.Waterbox;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace BizHawk.Emulation.Cores.Consoles.Magnavox
|
||||||
|
{
|
||||||
|
public abstract class LibO2Em : LibWaterboxCore
|
||||||
|
{
|
||||||
|
[BizImport(CC)]
|
||||||
|
public abstract bool Init(byte[] rom, int romlen, byte[] bios, int bioslen);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,52 @@
|
||||||
|
using BizHawk.Emulation.Common;
|
||||||
|
using BizHawk.Emulation.Cores.Waterbox;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace BizHawk.Emulation.Cores.Consoles.Magnavox
|
||||||
|
{
|
||||||
|
[CoreAttributes("o2em", "", true, false, "", "", false)]
|
||||||
|
public class O2Em : WaterboxCore
|
||||||
|
{
|
||||||
|
private LibO2Em _core;
|
||||||
|
|
||||||
|
[CoreConstructor("O2")]
|
||||||
|
public O2Em(CoreComm comm, byte[] rom)
|
||||||
|
:base(comm, new Configuration
|
||||||
|
{
|
||||||
|
DefaultFpsNumerator = 60,
|
||||||
|
DefaultFpsDenominator = 1,
|
||||||
|
DefaultWidth = 320,
|
||||||
|
DefaultHeight = 240,
|
||||||
|
MaxSamples = 2048,
|
||||||
|
MaxWidth = 320,
|
||||||
|
MaxHeight = 240,
|
||||||
|
SystemId = "O2"
|
||||||
|
})
|
||||||
|
{
|
||||||
|
var bios = comm.CoreFileProvider.GetFirmware("O2", "BIOS", true);
|
||||||
|
_core = PreInit<LibO2Em>(new PeRunnerOptions
|
||||||
|
{
|
||||||
|
Filename = "o2em.wbx",
|
||||||
|
SbrkHeapSizeKB = 4 * 1024,
|
||||||
|
SealedHeapSizeKB = 4 * 1024,
|
||||||
|
InvisibleHeapSizeKB = 4 * 1024,
|
||||||
|
PlainHeapSizeKB = 4 * 1024,
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
if (!_core.Init(rom, rom.Length, bios, bios.Length))
|
||||||
|
throw new InvalidOperationException("Init() failed");
|
||||||
|
|
||||||
|
PostInit();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override LibWaterboxCore.FrameInfo FrameAdvancePrep(IController controller, bool render, bool rendersound)
|
||||||
|
{
|
||||||
|
return new LibWaterboxCore.FrameInfo();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -132,5 +132,12 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBA
|
||||||
|
|
||||||
[DllImport(dll, CallingConvention = cc)]
|
[DllImport(dll, CallingConvention = cc)]
|
||||||
public static extern void BizGetRegisters(IntPtr ctx, int[] dest);
|
public static extern void BizGetRegisters(IntPtr ctx, int[] dest);
|
||||||
|
|
||||||
|
[DllImport(dll, CallingConvention = cc)]
|
||||||
|
public static extern void BizWriteBus(IntPtr ctx, uint addr, byte val);
|
||||||
|
|
||||||
|
[DllImport(dll, CallingConvention = cc)]
|
||||||
|
public static extern byte BizReadBus(IntPtr ctx, uint addr);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,6 +34,28 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBA
|
||||||
mm.Add(_sram = new MemoryDomainIntPtr("SRAM", le, IntPtr.Zero, 0, true, 4)); // size will be fixed in wireup
|
mm.Add(_sram = new MemoryDomainIntPtr("SRAM", le, IntPtr.Zero, 0, true, 4)); // size will be fixed in wireup
|
||||||
mm.Add(_cwram = new MemoryDomainDelegate("Combined WRAM", (256 + 32) * 1024, le, null, null, 4));
|
mm.Add(_cwram = new MemoryDomainDelegate("Combined WRAM", (256 + 32) * 1024, le, null, null, 4));
|
||||||
|
|
||||||
|
mm.Add(new MemoryDomainDelegate("System Bus", 0x10000000, le,
|
||||||
|
delegate (long addr)
|
||||||
|
{
|
||||||
|
var a = (uint)addr;
|
||||||
|
if (a >= 0x10000000)
|
||||||
|
{
|
||||||
|
throw new ArgumentOutOfRangeException();
|
||||||
|
}
|
||||||
|
|
||||||
|
return LibmGBA.BizReadBus(_core, a);
|
||||||
|
},
|
||||||
|
delegate (long addr, byte val)
|
||||||
|
{
|
||||||
|
var a = (uint)addr;
|
||||||
|
if (a >= 0x10000000)
|
||||||
|
{
|
||||||
|
throw new ArgumentOutOfRangeException();
|
||||||
|
}
|
||||||
|
|
||||||
|
LibmGBA.BizWriteBus(_core, a, val);
|
||||||
|
}, 4));
|
||||||
|
|
||||||
_memoryDomains = new MemoryDomainList(mm);
|
_memoryDomains = new MemoryDomainList(mm);
|
||||||
WireMemoryDomainPointers();
|
WireMemoryDomainPointers();
|
||||||
}
|
}
|
||||||
|
@ -55,7 +77,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBA
|
||||||
|
|
||||||
// special combined ram memory domain
|
// special combined ram memory domain
|
||||||
_cwram.Peek =
|
_cwram.Peek =
|
||||||
delegate(long addr)
|
delegate (long addr)
|
||||||
{
|
{
|
||||||
if (addr < 0 || addr >= (256 + 32) * 1024)
|
if (addr < 0 || addr >= (256 + 32) * 1024)
|
||||||
{
|
{
|
||||||
|
@ -70,7 +92,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBA
|
||||||
return PeekWRAM(s.wram, addr);
|
return PeekWRAM(s.wram, addr);
|
||||||
};
|
};
|
||||||
_cwram.Poke =
|
_cwram.Poke =
|
||||||
delegate(long addr, byte val)
|
delegate (long addr, byte val)
|
||||||
{
|
{
|
||||||
if (addr < 0 || addr >= (256 + 32) * 1024)
|
if (addr < 0 || addr >= (256 + 32) * 1024)
|
||||||
{
|
{
|
||||||
|
|
|
@ -3,7 +3,7 @@ using BizHawk.Emulation.Common;
|
||||||
|
|
||||||
namespace BizHawk.Emulation.Cores.Nintendo.GBA
|
namespace BizHawk.Emulation.Cores.Nintendo.GBA
|
||||||
{
|
{
|
||||||
[CoreAttributes("mGBA", "endrift", true, true, "0.5.0", "https://mgba.io/", false)]
|
[CoreAttributes("mGBA", "endrift", true, true, "0.6.0 (24ab81f8db7745586cef246be8957ad272aded9b)", "https://mgba.io/", false)]
|
||||||
[ServiceNotApplicable(typeof(IDriveLight), typeof(IRegionable))]
|
[ServiceNotApplicable(typeof(IDriveLight), typeof(IRegionable))]
|
||||||
public partial class MGBAHawk : IEmulator, IVideoProvider, ISoundProvider, IGBAGPUViewable,
|
public partial class MGBAHawk : IEmulator, IVideoProvider, ISoundProvider, IGBAGPUViewable,
|
||||||
ISaveRam, IStatable, IInputPollable, ISettable<MGBAHawk.Settings, MGBAHawk.SyncSettings>,
|
ISaveRam, IStatable, IInputPollable, ISettable<MGBAHawk.Settings, MGBAHawk.SyncSettings>,
|
||||||
|
|
|
@ -95,8 +95,11 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy
|
||||||
{
|
{
|
||||||
if (GambatteState != IntPtr.Zero)
|
if (GambatteState != IntPtr.Zero)
|
||||||
{
|
{
|
||||||
|
Console.WriteLine("disposing");
|
||||||
LibGambatte.gambatte_destroy(GambatteState);
|
LibGambatte.gambatte_destroy(GambatteState);
|
||||||
|
Console.WriteLine("step2");
|
||||||
GambatteState = IntPtr.Zero;
|
GambatteState = IntPtr.Zero;
|
||||||
|
Console.WriteLine("disposed");
|
||||||
}
|
}
|
||||||
|
|
||||||
DisposeSound();
|
DisposeSound();
|
||||||
|
|
|
@ -80,6 +80,11 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy
|
||||||
|
|
||||||
public class GambatteSyncSettings
|
public class GambatteSyncSettings
|
||||||
{
|
{
|
||||||
|
[DisplayName("Enable BIOS: WARNING: File must exist!")]
|
||||||
|
[Description("Boots game using system BIOS. Should be used for TASing")]
|
||||||
|
[DefaultValue(false)]
|
||||||
|
public bool EnableBIOS { get; set; }
|
||||||
|
|
||||||
[DisplayName("Force DMG Mode")]
|
[DisplayName("Force DMG Mode")]
|
||||||
[Description("Force the game to run on DMG hardware, even if it's detected as a CGB game. Relevant for games that are \"CGB Enhanced\" but do not require CGB.")]
|
[Description("Force the game to run on DMG hardware, even if it's detected as a CGB game. Relevant for games that are \"CGB Enhanced\" but do not require CGB.")]
|
||||||
[DefaultValue(false)]
|
[DefaultValue(false)]
|
||||||
|
|
|
@ -1,116 +1,116 @@
|
||||||
using System;
|
using System;
|
||||||
using BizHawk.Emulation.Common;
|
using BizHawk.Emulation.Common;
|
||||||
|
|
||||||
namespace BizHawk.Emulation.Cores.Nintendo.Gameboy
|
namespace BizHawk.Emulation.Cores.Nintendo.Gameboy
|
||||||
{
|
{
|
||||||
public partial class Gameboy : ISoundProvider
|
public partial class Gameboy : ISoundProvider
|
||||||
{
|
{
|
||||||
public bool CanProvideAsync => false;
|
public bool CanProvideAsync => false;
|
||||||
|
|
||||||
public void DiscardSamples()
|
public void DiscardSamples()
|
||||||
{
|
{
|
||||||
_soundoutbuffcontains = 0;
|
_soundoutbuffcontains = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void GetSamplesSync(out short[] samples, out int nsamp)
|
public void GetSamplesSync(out short[] samples, out int nsamp)
|
||||||
{
|
{
|
||||||
samples = _soundoutbuff;
|
samples = _soundoutbuff;
|
||||||
nsamp = _soundoutbuffcontains;
|
nsamp = _soundoutbuffcontains;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetSyncMode(SyncSoundMode mode)
|
public void SetSyncMode(SyncSoundMode mode)
|
||||||
{
|
{
|
||||||
if (mode == SyncSoundMode.Async)
|
if (mode == SyncSoundMode.Async)
|
||||||
{
|
{
|
||||||
throw new NotSupportedException("Async mode is not supported.");
|
throw new NotSupportedException("Async mode is not supported.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public SyncSoundMode SyncMode => SyncSoundMode.Sync;
|
public SyncSoundMode SyncMode => SyncSoundMode.Sync;
|
||||||
|
|
||||||
public void GetSamplesAsync(short[] samples)
|
public void GetSamplesAsync(short[] samples)
|
||||||
{
|
{
|
||||||
throw new InvalidOperationException("Async mode is not supported.");
|
throw new InvalidOperationException("Async mode is not supported.");
|
||||||
}
|
}
|
||||||
|
|
||||||
internal bool Muted => _settings.Muted;
|
internal bool Muted => _settings.Muted;
|
||||||
|
|
||||||
// sample pairs before resampling
|
// sample pairs before resampling
|
||||||
private readonly short[] _soundbuff = new short[(35112 + 2064) * 2];
|
private readonly short[] _soundbuff = new short[(35112 + 2064) * 2];
|
||||||
|
|
||||||
private int _soundoutbuffcontains = 0;
|
private int _soundoutbuffcontains = 0;
|
||||||
|
|
||||||
private readonly short[] _soundoutbuff = new short[2048];
|
private readonly short[] _soundoutbuff = new short[2048];
|
||||||
|
|
||||||
private int _latchL = 0;
|
private int _latchL = 0;
|
||||||
private int _latchR = 0;
|
private int _latchR = 0;
|
||||||
|
|
||||||
private BlipBuffer _blipL, _blipR;
|
private BlipBuffer _blipL, _blipR;
|
||||||
private uint _blipAccumulate;
|
private uint _blipAccumulate;
|
||||||
|
|
||||||
private void ProcessSound(int nsamp)
|
private void ProcessSound(int nsamp)
|
||||||
{
|
{
|
||||||
for (uint i = 0; i < nsamp; i++)
|
for (uint i = 0; i < nsamp; i++)
|
||||||
{
|
{
|
||||||
int curr = _soundbuff[i * 2];
|
int curr = _soundbuff[i * 2];
|
||||||
|
|
||||||
if (curr != _latchL)
|
if (curr != _latchL)
|
||||||
{
|
{
|
||||||
int diff = _latchL - curr;
|
int diff = _latchL - curr;
|
||||||
_latchL = curr;
|
_latchL = curr;
|
||||||
_blipL.AddDelta(_blipAccumulate, diff);
|
_blipL.AddDelta(_blipAccumulate, diff >> 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
curr = _soundbuff[(i * 2) + 1];
|
curr = _soundbuff[(i * 2) + 1];
|
||||||
|
|
||||||
if (curr != _latchR)
|
if (curr != _latchR)
|
||||||
{
|
{
|
||||||
int diff = _latchR - curr;
|
int diff = _latchR - curr;
|
||||||
_latchR = curr;
|
_latchR = curr;
|
||||||
_blipR.AddDelta(_blipAccumulate, diff);
|
_blipR.AddDelta(_blipAccumulate, diff >> 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
_blipAccumulate++;
|
_blipAccumulate++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ProcessSoundEnd()
|
private void ProcessSoundEnd()
|
||||||
{
|
{
|
||||||
_blipL.EndFrame(_blipAccumulate);
|
_blipL.EndFrame(_blipAccumulate);
|
||||||
_blipR.EndFrame(_blipAccumulate);
|
_blipR.EndFrame(_blipAccumulate);
|
||||||
_blipAccumulate = 0;
|
_blipAccumulate = 0;
|
||||||
|
|
||||||
_soundoutbuffcontains = _blipL.SamplesAvailable();
|
_soundoutbuffcontains = _blipL.SamplesAvailable();
|
||||||
if (_soundoutbuffcontains != _blipR.SamplesAvailable())
|
if (_soundoutbuffcontains != _blipR.SamplesAvailable())
|
||||||
{
|
{
|
||||||
throw new InvalidOperationException("Audio processing error");
|
throw new InvalidOperationException("Audio processing error");
|
||||||
}
|
}
|
||||||
|
|
||||||
_blipL.ReadSamplesLeft(_soundoutbuff, _soundoutbuffcontains);
|
_blipL.ReadSamplesLeft(_soundoutbuff, _soundoutbuffcontains);
|
||||||
_blipR.ReadSamplesRight(_soundoutbuff, _soundoutbuffcontains);
|
_blipR.ReadSamplesRight(_soundoutbuff, _soundoutbuffcontains);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void InitSound()
|
private void InitSound()
|
||||||
{
|
{
|
||||||
_blipL = new BlipBuffer(1024);
|
_blipL = new BlipBuffer(1024);
|
||||||
_blipL.SetRates(TICKSPERSECOND, 44100);
|
_blipL.SetRates(TICKSPERSECOND, 44100);
|
||||||
_blipR = new BlipBuffer(1024);
|
_blipR = new BlipBuffer(1024);
|
||||||
_blipR.SetRates(TICKSPERSECOND, 44100);
|
_blipR.SetRates(TICKSPERSECOND, 44100);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void DisposeSound()
|
private void DisposeSound()
|
||||||
{
|
{
|
||||||
if (_blipL != null)
|
if (_blipL != null)
|
||||||
{
|
{
|
||||||
_blipL.Dispose();
|
_blipL.Dispose();
|
||||||
_blipL = null;
|
_blipL = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_blipR != null)
|
if (_blipR != null)
|
||||||
{
|
{
|
||||||
_blipR.Dispose();
|
_blipR.Dispose();
|
||||||
_blipR = null;
|
_blipR = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
using BizHawk.Common.BufferExtensions;
|
using BizHawk.Common.BufferExtensions;
|
||||||
using BizHawk.Emulation.Common;
|
using BizHawk.Emulation.Common;
|
||||||
|
using BizHawk.Emulation.Cores.Consoles.Nintendo.Gameboy;
|
||||||
|
|
||||||
namespace BizHawk.Emulation.Cores.Nintendo.Gameboy
|
namespace BizHawk.Emulation.Cores.Nintendo.Gameboy
|
||||||
{
|
{
|
||||||
|
@ -17,7 +18,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy
|
||||||
portedUrl: "http://gambatte.sourceforge.net/")]
|
portedUrl: "http://gambatte.sourceforge.net/")]
|
||||||
[ServiceNotApplicable(typeof(IDriveLight), typeof(IDriveLight))]
|
[ServiceNotApplicable(typeof(IDriveLight), typeof(IDriveLight))]
|
||||||
public partial class Gameboy : IEmulator, IVideoProvider, ISoundProvider, ISaveRam, IStatable, IInputPollable, ICodeDataLogger,
|
public partial class Gameboy : IEmulator, IVideoProvider, ISoundProvider, ISaveRam, IStatable, IInputPollable, ICodeDataLogger,
|
||||||
IBoardInfo, IDebuggable, ISettable<Gameboy.GambatteSettings, Gameboy.GambatteSyncSettings>
|
IBoardInfo, IDebuggable, ISettable<Gameboy.GambatteSettings, Gameboy.GambatteSyncSettings>,
|
||||||
|
IGameboyCommon
|
||||||
{
|
{
|
||||||
[CoreConstructor("GB", "GBC")]
|
[CoreConstructor("GB", "GBC")]
|
||||||
public Gameboy(CoreComm comm, GameInfo game, byte[] file, object settings, object syncSettings, bool deterministic)
|
public Gameboy(CoreComm comm, GameInfo game, byte[] file, object settings, object syncSettings, bool deterministic)
|
||||||
|
@ -50,6 +52,23 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy
|
||||||
throw new InvalidOperationException("gambatte_create() returned null???");
|
throw new InvalidOperationException("gambatte_create() returned null???");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Console.WriteLine(game.System);
|
||||||
|
|
||||||
|
byte[] BiosRom;
|
||||||
|
|
||||||
|
if (game.System == "GB")
|
||||||
|
{
|
||||||
|
BiosRom = new byte[256];
|
||||||
|
BiosRom = comm.CoreFileProvider.GetFirmware("GB", "World", false);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
BiosRom = new byte[2304];
|
||||||
|
BiosRom = comm.CoreFileProvider.GetFirmware("GBC", "World", false);
|
||||||
|
}
|
||||||
|
|
||||||
|
int bios_length = BiosRom == null ? 0 : BiosRom.Length;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
_syncSettings = (GambatteSyncSettings)syncSettings ?? new GambatteSyncSettings();
|
_syncSettings = (GambatteSyncSettings)syncSettings ?? new GambatteSyncSettings();
|
||||||
|
@ -64,6 +83,25 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy
|
||||||
if (_syncSettings.ForceDMG)
|
if (_syncSettings.ForceDMG)
|
||||||
{
|
{
|
||||||
flags |= LibGambatte.LoadFlags.FORCE_DMG;
|
flags |= LibGambatte.LoadFlags.FORCE_DMG;
|
||||||
|
|
||||||
|
// we need to change the BIOS to GB bios
|
||||||
|
if (game.System == "GBC")
|
||||||
|
{
|
||||||
|
BiosRom = null;
|
||||||
|
BiosRom = new byte[256];
|
||||||
|
BiosRom = comm.CoreFileProvider.GetFirmware("GB", "World", false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_syncSettings.EnableBIOS && BiosRom == null)
|
||||||
|
{
|
||||||
|
throw new MissingFirmwareException("Boot Rom not found");
|
||||||
|
}
|
||||||
|
|
||||||
|
// to disable BIOS loading into gambatte, just set bios_length to 0
|
||||||
|
if (!_syncSettings.EnableBIOS)
|
||||||
|
{
|
||||||
|
bios_length = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_syncSettings.GBACGB)
|
if (_syncSettings.GBACGB)
|
||||||
|
@ -76,7 +114,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy
|
||||||
flags |= LibGambatte.LoadFlags.MULTICART_COMPAT;
|
flags |= LibGambatte.LoadFlags.MULTICART_COMPAT;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (LibGambatte.gambatte_load(GambatteState, file, (uint)file.Length, GetCurrentTime(), flags) != 0)
|
if (LibGambatte.gambatte_load(GambatteState, file, (uint)file.Length, BiosRom, (uint)bios_length, GetCurrentTime(), flags) != 0)
|
||||||
{
|
{
|
||||||
throw new InvalidOperationException("gambatte_load() returned non-zero (is this not a gb or gbc rom?)");
|
throw new InvalidOperationException("gambatte_load() returned non-zero (is this not a gb or gbc rom?)");
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace BizHawk.Emulation.Cores.Consoles.Nintendo.Gameboy
|
||||||
|
{
|
||||||
|
public interface IGameboyCommon
|
||||||
|
{
|
||||||
|
bool IsCGBMode();
|
||||||
|
}
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue