bsnes - vs2015 can now be used to build

This commit is contained in:
zeromus 2015-06-18 03:09:08 +00:00
parent 2f21d4e506
commit b7bf0b38cc
4 changed files with 216 additions and 451 deletions

View File

@ -7,14 +7,20 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libsnes", "libsnes.vcxproj"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x86 = Debug|x86
Release|x86 = Release|x86
Debug-Compatibility|x86 = Debug-Compatibility|x86
Debug-Performance|x86 = Debug-Performance|x86
Release-Compatibility|x86 = Release-Compatibility|x86
Release-Performance|x86 = Release-Performance|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{488B77AD-58DF-4E01-9329-67B20D486860}.Debug|x86.ActiveCfg = Debug|Win32
{488B77AD-58DF-4E01-9329-67B20D486860}.Debug|x86.Build.0 = Debug|Win32
{488B77AD-58DF-4E01-9329-67B20D486860}.Release|x86.ActiveCfg = Release|Win32
{488B77AD-58DF-4E01-9329-67B20D486860}.Release|x86.Build.0 = Release|Win32
{488B77AD-58DF-4E01-9329-67B20D486860}.Debug-Compatibility|x86.ActiveCfg = Debug-Compatibility|Win32
{488B77AD-58DF-4E01-9329-67B20D486860}.Debug-Compatibility|x86.Build.0 = Debug-Compatibility|Win32
{488B77AD-58DF-4E01-9329-67B20D486860}.Debug-Performance|x86.ActiveCfg = Debug-Performance|Win32
{488B77AD-58DF-4E01-9329-67B20D486860}.Debug-Performance|x86.Build.0 = Debug-Performance|Win32
{488B77AD-58DF-4E01-9329-67B20D486860}.Release-Compatibility|x86.ActiveCfg = Release-Compatibility|Win32
{488B77AD-58DF-4E01-9329-67B20D486860}.Release-Compatibility|x86.Build.0 = Release-Compatibility|Win32
{488B77AD-58DF-4E01-9329-67B20D486860}.Release-Performance|x86.ActiveCfg = Release-Performance|Win32
{488B77AD-58DF-4E01-9329-67B20D486860}.Release-Performance|x86.Build.0 = Release-Performance|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View File

@ -1,12 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<Project InitialTargets="UNDUPOBJ" DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<ProjectConfiguration Include="Debug-Compatibility|Win32">
<Configuration>Debug-Compatibility</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<ProjectConfiguration Include="Debug-Performance|Win32">
<Configuration>Debug-Performance</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release-Compatibility|Win32">
<Configuration>Release-Compatibility</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release-Performance|Win32">
<Configuration>Release-Performance</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
@ -16,57 +24,141 @@
<TargetPlatformVersion>8.1</TargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-Performance|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v140_xp</PlatformToolset>
<CharacterSet>NotSet</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-Compatibility|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140_xp</PlatformToolset>
<CharacterSet>NotSet</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-Performance|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<PlatformToolset>v140_xp</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
<CharacterSet>NotSet</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-Compatibility|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140_xp</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>NotSet</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug-Performance|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug-Compatibility|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release-Performance|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release-Compatibility|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-Performance|Win32'">
<OutDir>..\..\output\dll</OutDir>
<TargetName>libsneshawk-32-performance</TargetName>
<IntDir>.obj\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug-Compatibility|Win32'">
<OutDir>..\..\output\dll</OutDir>
<TargetName>libsneshawk-32-compatibility</TargetName>
<IntDir>.obj\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-Compatibility|Win32'">
<TargetName>libsneshawk-32-compatibility</TargetName>
<OutDir>..\..\output\dll</OutDir>
<IntDir>.obj\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release-Performance|Win32'">
<TargetName>libsneshawk-32-performance</TargetName>
<OutDir>..\..\output\dll</OutDir>
<IntDir>.obj\$(Configuration)\</IntDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-Performance|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>false</SDLCheck>
<AdditionalIncludeDirectories>$(ProjectDir)../bsnes</AdditionalIncludeDirectories>
<PreprocessorDefinitions>HOOKS;PROFILE_PERFORMANCE;GAMEBOY;_MBCS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>HOOKS;BIZHAWK;PROFILE_PERFORMANCE;GAMEBOY;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<MinimalRebuild>false</MinimalRebuild>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-Compatibility|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<Optimization>Disabled</Optimization>
<SDLCheck>false</SDLCheck>
<AdditionalIncludeDirectories>$(ProjectDir)../bsnes</AdditionalIncludeDirectories>
<PreprocessorDefinitions>HOOKS;BIZHAWK;PROFILE_COMPATIBILITY;GAMEBOY;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<MinimalRebuild>false</MinimalRebuild>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-Performance|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>Full</Optimization>
<FunctionLevelLinking>false</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<SDLCheck>false</SDLCheck>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<AdditionalIncludeDirectories>$(ProjectDir)../bsnes</AdditionalIncludeDirectories>
<PreprocessorDefinitions>HOOKS;BIZHAWK;PROFILE_PERFORMANCE;GAMEBOY;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<DebugInformationFormat>None</DebugInformationFormat>
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<OmitFramePointers>true</OmitFramePointers>
<EnableEnhancedInstructionSet>StreamingSIMDExtensions</EnableEnhancedInstructionSet>
<FloatingPointModel>Fast</FloatingPointModel>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<SubSystem>Windows</SubSystem>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release-Compatibility|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>false</SDLCheck>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<AdditionalIncludeDirectories>$(ProjectDir)../bsnes</AdditionalIncludeDirectories>
<PreprocessorDefinitions>HOOKS;BIZHAWK;PROFILE_COMPATIBILITY;GAMEBOY;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<DebugInformationFormat>None</DebugInformationFormat>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<SubSystem>Windows</SubSystem>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
@ -91,10 +183,23 @@
<ClCompile Include="..\bsnes\gameboy\scheduler\scheduler.cpp" />
<ClCompile Include="..\bsnes\gameboy\system\system.cpp" />
<ClCompile Include="..\bsnes\gameboy\video\video.cpp" />
<ClCompile Include="..\bsnes\snes\alt\cpu\cpu.cpp" />
<ClCompile Include="..\bsnes\snes\alt\cpu\cpu.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug-Compatibility|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release-Compatibility|Win32'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\bsnes\snes\alt\dsp\dsp.cpp" />
<ClCompile Include="..\bsnes\snes\alt\ppu-performance\ppu.cpp" />
<ClCompile Include="..\bsnes\snes\alt\smp\smp.cpp" />
<ClCompile Include="..\bsnes\snes\alt\ppu-compatibility\ppu.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release-Performance|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug-Performance|Win32'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\bsnes\snes\alt\ppu-performance\ppu.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug-Compatibility|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release-Compatibility|Win32'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\bsnes\snes\alt\smp\smp.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug-Compatibility|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release-Compatibility|Win32'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\bsnes\snes\cartridge\cartridge.cpp" />
<ClCompile Include="..\bsnes\snes\cheat\cheat.cpp" />
<ClCompile Include="..\bsnes\snes\chip\armdsp\armdsp.cpp" />
@ -116,18 +221,31 @@
<ClCompile Include="..\bsnes\snes\controller\controller.cpp" />
<ClCompile Include="..\bsnes\snes\cpu\core\core.cpp" />
<ClCompile Include="..\bsnes\snes\cpu\cpu.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug-Performance|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug-Compatibility|Win32'">false</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release-Performance|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release-Compatibility|Win32'">false</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\bsnes\snes\dsp\dsp.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug-Performance|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug-Compatibility|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release-Performance|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release-Compatibility|Win32'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\bsnes\snes\interface\interface.cpp" />
<ClCompile Include="..\bsnes\snes\memory\memory.cpp" />
<ClCompile Include="..\bsnes\snes\ppu\ppu.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug-Performance|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug-Compatibility|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release-Performance|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release-Compatibility|Win32'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\bsnes\snes\smp\core\core.cpp" />
<ClCompile Include="..\bsnes\snes\smp\smp.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug-Performance|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug-Compatibility|Win32'">false</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release-Performance|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release-Compatibility|Win32'">false</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\bsnes\snes\system\system.cpp" />
<ClCompile Include="..\bsnes\target-libsnes\libsnes.cpp" />
@ -137,25 +255,56 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
<!-- thanks to http://stackoverflow.com/questions/841913/modify-msbuild-itemgroup-metadata -->
<!-- before building, let's modify all the ObjectFileNames according to a pattern which will eliminate the possibility of duplicate .obj names -->
<!-- ================ UNDUPOBJ ================ -->
<!-- relevant topics -->
<!-- http://stackoverflow.com/questions/3729515/visual-studio-2010-2008-cant-handle-source-files-with-identical-names-in-diff/26935613 -->
<!-- http://stackoverflow.com/questions/7033855/msvc10-mp-builds-not-multicore-across-folders-in-a-project -->
<!-- http://stackoverflow.com/questions/18304911/how-can-one-modify-an-itemdefinitiongroup-from-an-msbuild-target -->
<!-- other maybe related info -->
<!-- http://stackoverflow.com/questions/841913/modify-msbuild-itemgroup-metadata -->
<UsingTask TaskName="UNDUPOBJ_TASK" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
<ParameterGroup>
<OutputDir ParameterType="System.String" Required="true" />
<ItemList ParameterType="Microsoft.Build.Framework.ITaskItem[]" Required="true" />
<OutputItemList ParameterType="Microsoft.Build.Framework.ITaskItem[]" Output="true" />
</ParameterGroup>
<Task>
<Code><![CDATA[
//general outline: for each item (in ClCompile) assign it to a subdirectory of $(IntDir) by allocating subdirectories 0,1,2, etc., as needed to prevent duplicate filenames from clobbering each other
//this minimizes the number of batches that need to be run, since each subdirectory will necessarily be in a distinct batch due to /Fo specifying that output subdirectory
var assignmentMap = new Dictionary<string,int>();
foreach( var item in ItemList )
{
var filename = item.GetMetadata("Filename");
//assign reused filenames to increasing numbers
//assign previously unused filenames to 0
int assignment = 0;
if(assignmentMap.TryGetValue(filename, out assignment))
assignmentMap[filename] = ++assignment;
else
assignmentMap[filename] = 0;
var thisFileOutdir = Path.Combine(OutputDir,assignment.ToString()) + "/"; //take care it ends in / so /Fo knows it's a directory and not a filename
item.SetMetadata( "ObjectFileName", thisFileOutdir );
}
OutputItemList = ItemList;
ItemList = new Microsoft.Build.Framework.ITaskItem[0];
]]></Code>
</Task>
</UsingTask>
<Target Name="UNDUPOBJ">
<Message Text="UNDUPOBJ 1: Adjusting ObjectFileName on all ClCompile targets" Importance="low" />
<!-- For diagnostics, print each thing we're operating on -->
<Message Text="UNDUPOBJ 2: ABOUT TO FIX: %(ClCompile.Identity) with obj path %(ClCompile.ObjectFileName)" Importance="low" />
<!-- Now, patch the ClCompile objects with a better ObjectFileName -->
<!-- A project which depended on a special and particular name for a handful of object files could add metadata to them in the vcxproj and we could exclude those items here -->
<!-- Another idea which I have achieved (but may be less reliable for other users, so it isn't done here) is to leave the directory structure semi-intact and have the obj build in a hierarchy under the IntDir -->
<!-- for example, myproj/src/a/x.cpp and myproj/src/b/x.cpp build to myproj/Debug/a/x.obj and myproj/Debug/b/xobj -->
<!-- TODO - would something other than Identity be best here? FileName? Etc.? Probably. But Identity has the advantage of removing personal information (build path) from the obj path -->
<!-- see stackoverflow topics for discussion on why we need to do some loopy copying stuff here -->
<ItemGroup>
<ClCompile>
<!-- selectively erase or replace characters in %(Identity) other than A-Za-z0-9 while converting backslashes to underscores -->
<ObjectFileName>$(IntDir)$([System.Text.RegularExpressions.Regex]::Replace('%(Identity)','[^A-Za-z0-9\\]','').Replace("\","_") ).obj</ObjectFileName>
</ClCompile>
<ClCompileCopy Include="@(ClCompile)" />
<ClCompile Remove="@(ClCompile)" />
</ItemGroup>
<!-- For diagnostics, print the results -->
<Message Text="UNDUPOBJ 3: %(ClCompile.Identity) obj path set to %(ClCompile.ObjectFileName)" Importance="low" />
<UNDUPOBJ_TASK OutputDir="$(IntDir)" ItemList="@(ClCompileCopy)" OutputItemList="@(ClCompile)">
<Output ItemName="ClCompile" TaskParameter="OutputItemList" />
</UNDUPOBJ_TASK>
</Target>
<!-- UNDUPOBJ -->
<!-- ================ UNDUPOBJ ================ -->
</Project>

View File

@ -145,6 +145,12 @@
<Filter Include="snes\cpu\core">
<UniqueIdentifier>{be676f5c-dcb3-4a39-911c-4e102dfa25d8}</UniqueIdentifier>
</Filter>
<Filter Include="snes\alt\ppu-compatibility">
<UniqueIdentifier>{ebb8bc23-969e-4273-bada-413a29d6af3e}</UniqueIdentifier>
</Filter>
<Filter Include="snes\smp\core">
<UniqueIdentifier>{f06ef20e-c749-4f16-81d3-f88d96b659bc}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\bsnes\base\base.hpp">
@ -308,5 +314,11 @@
<ClCompile Include="..\bsnes\snes\cpu\core\core.cpp">
<Filter>snes\cpu\core</Filter>
</ClCompile>
<ClCompile Include="..\bsnes\snes\alt\ppu-compatibility\ppu.cpp">
<Filter>snes\alt\ppu-compatibility</Filter>
</ClCompile>
<ClCompile Include="..\bsnes\snes\smp\core\core.cpp">
<Filter>snes\smp\core</Filter>
</ClCompile>
</ItemGroup>
</Project>

View File

@ -1,402 +0,0 @@
Index: gameboy/system/system.hpp
===================================================================
--- gameboy/system/system.hpp (revision 9394)
+++ gameboy/system/system.hpp (working copy)
@@ -11,9 +11,9 @@
GameBoyColor,
};
readonly<Revision> revision;
- inline bool dmg() const { return revision == Revision::GameBoy; }
- inline bool sgb() const { return revision == Revision::SuperGameBoy; }
- inline bool cgb() const { return revision == Revision::GameBoyColor; }
+ inline bool dmg() const { return (Revision)revision == Revision::GameBoy; }
+ inline bool sgb() const { return (Revision)revision == Revision::SuperGameBoy; }
+ inline bool cgb() const { return (Revision)revision == Revision::GameBoyColor; }
struct BootROM {
static const uint8 dmg[ 256];
Index: nall/bit.hpp
===================================================================
--- nall/bit.hpp (revision 9394)
+++ nall/bit.hpp (working copy)
@@ -10,20 +10,24 @@
template<unsigned bits>
constexpr inline uintmax_t uclip(const uintmax_t x) {
- enum : uintmax_t { b = 1ull << (bits - 1), m = b * 2 - 1 };
- return (x & m);
+ //enum : uintmax_t { b = 1ull << (bits - 1), m = b * 2 - 1 }; //test
+ //return (x & m); //test
+ return (x & ((uintmax_t)(((uintmax_t)(1ull << (bits - 1))) * 2 - 1)));
}
template<unsigned bits>
constexpr inline intmax_t sclamp(const intmax_t x) {
- enum : intmax_t { b = 1ull << (bits - 1), m = b - 1 };
- return (x > m) ? m : (x < -b) ? -b : x;
+ //enum : intmax_t { b = 1ull << (bits - 1), m = b - 1 }; //test
+ //(intmax_t)(1ull << (bits - 1)) //b
+ //(((intmax_t)(1ull << (bits - 1))) - 1) //m
+ //return (x > m) ? m : (x < -b) ? -b : x; //test
+ return (x > (((intmax_t)(1ull << (bits - 1))) - 1)) ? (((intmax_t)(1ull << (bits - 1))) - 1) : (x < -((intmax_t)(1ull << (bits - 1)))) ? -((intmax_t)(1ull << (bits - 1))) : x; //test
}
template<unsigned bits>
constexpr inline intmax_t sclip(const intmax_t x) {
- enum : uintmax_t { b = 1ull << (bits - 1), m = b * 2 - 1 };
- return ((x & m) ^ b) - b;
+ //enum : uintmax_t { b = 1ull << (bits - 1), m = b * 2 - 1 }; //test
+ return ((x & ((uintmax_t)(((uintmax_t)(1ull << (bits - 1))) * 2 - 1))) ^ ((uintmax_t)(1ull << (bits - 1)))) - ((uintmax_t)(1ull << (bits - 1)));
}
namespace bit {
Index: nall/dsp/resample/average.hpp
===================================================================
--- nall/dsp/resample/average.hpp (revision 9394)
+++ nall/dsp/resample/average.hpp (working copy)
@@ -50,7 +50,8 @@
void ResampleAverage::sampleLinear() {
while(fraction <= 1.0) {
- real channel[dsp.settings.channels];
+ //real channel[dsp.settings.channels]; //test
+ real channel[2];
for(unsigned n = 0; n < dsp.settings.channels; n++) {
real a = dsp.buffer.read(n, -1);
Index: nall/dsp/resample/cosine.hpp
===================================================================
--- nall/dsp/resample/cosine.hpp (revision 9394)
+++ nall/dsp/resample/cosine.hpp (working copy)
@@ -21,8 +21,10 @@
void ResampleCosine::sample() {
while(fraction <= 1.0) {
- real channel[dsp.settings.channels];
+ //real channel[dsp.settings.channels]; //test
+ real channel[2];
+
for(unsigned n = 0; n < dsp.settings.channels; n++) {
real a = dsp.buffer.read(n, -1);
real b = dsp.buffer.read(n, -0);
Index: nall/dsp/resample/cubic.hpp
===================================================================
--- nall/dsp/resample/cubic.hpp (revision 9394)
+++ nall/dsp/resample/cubic.hpp (working copy)
@@ -21,7 +21,8 @@
void ResampleCubic::sample() {
while(fraction <= 1.0) {
- real channel[dsp.settings.channels];
+ //real channel[dsp.settings.channels]; //test
+ real channel[2]; //test
for(unsigned n = 0; n < dsp.settings.channels; n++) {
real a = dsp.buffer.read(n, -3);
Index: nall/dsp/resample/hermite.hpp
===================================================================
--- nall/dsp/resample/hermite.hpp (revision 9394)
+++ nall/dsp/resample/hermite.hpp (working copy)
@@ -21,7 +21,8 @@
void ResampleHermite::sample() {
while(fraction <= 1.0) {
- real channel[dsp.settings.channels];
+ //real channel[dsp.settings.channels]; //test
+ real channel[2];
for(unsigned n = 0; n < dsp.settings.channels; n++) {
real a = dsp.buffer.read(n, -3);
Index: nall/dsp/resample/lib/sinc.hpp
===================================================================
--- nall/dsp/resample/lib/sinc.hpp (revision 9394)
+++ nall/dsp/resample/lib/sinc.hpp (working copy)
@@ -4,6 +4,8 @@
typedef float resample_coeff_t; // note: sizeof(resample_coeff_t) must be == to a power of 2, and not larger than 16
typedef float resample_samp_t;
+#include <string>
+#include <vector>
// ...but don't comment this single RESAMPLE_SSEREGPARM define out when disabling SSE.
#define RESAMPLE_SSEREGPARM
Index: nall/dsp/resample/linear.hpp
===================================================================
--- nall/dsp/resample/linear.hpp (revision 9394)
+++ nall/dsp/resample/linear.hpp (working copy)
@@ -21,7 +21,8 @@
void ResampleLinear::sample() {
while(fraction <= 1.0) {
- real channel[dsp.settings.channels];
+ //real channel[dsp.settings.channels]; //TEST
+ real channel[2];
for(unsigned n = 0; n < dsp.settings.channels; n++) {
real a = dsp.buffer.read(n, -1);
Index: nall/dsp/resample/nearest.hpp
===================================================================
--- nall/dsp/resample/nearest.hpp (revision 9394)
+++ nall/dsp/resample/nearest.hpp (working copy)
@@ -21,7 +21,8 @@
void ResampleNearest::sample() {
while(fraction <= 1.0) {
- real channel[dsp.settings.channels];
+ //real channel[dsp.settings.channels]; //test
+ real channel[2];
for(unsigned n = 0; n < dsp.settings.channels; n++) {
real a = dsp.buffer.read(n, -1);
Index: nall/file.hpp
===================================================================
--- nall/file.hpp (revision 9394)
+++ nall/file.hpp (working copy)
@@ -176,7 +176,8 @@
struct __stat64 data;
_wstat64(utf16_t(filename), &data);
#endif
- return S_ISREG(data.st_mode) ? data.st_size : 0u;
+ //return S_ISREG(data.st_mode) ? data.st_size : 0u; //TEST
+ return data.st_size;
}
static time_t timestamp(const string &filename, file::time mode = file::time::create) {
Index: nall/platform.hpp
===================================================================
--- nall/platform.hpp (revision 9394)
+++ nall/platform.hpp (working copy)
@@ -8,6 +8,10 @@
#include <nall/windows/utf8.hpp>
#endif
+#ifdef _MSC_VER
+#define _USE_MATH_DEFINES 1
+#endif
+
//=========================
//standard platform headers
//=========================
@@ -29,10 +33,13 @@
#if defined(_WIN32)
#include <io.h>
#include <direct.h>
- #include <shlobj.h>
+ //#include <shlobj.h> //bizhawk chokes?
#include <wchar.h>
#undef interface
#define dllexport __declspec(dllexport)
+ //bad things happen without these here
+ #include <string>
+ #include <vector>
#else
#include <unistd.h>
#include <pwd.h>
@@ -100,23 +107,27 @@
}
inline char* userpath(char *path) {
- wchar_t fp[_MAX_PATH] = L"";
- SHGetFolderPathW(0, CSIDL_APPDATA | CSIDL_FLAG_CREATE, 0, 0, fp);
- strcpy(path, nall::utf8_t(fp));
- for(unsigned n = 0; path[n]; n++) if(path[n] == '\\') path[n] = '/';
- unsigned length = strlen(path);
- if(path[length] != '/') strcpy(path + length, "/");
- return path;
+ //TODO BIZHAWK
+ return nullptr;
+ //wchar_t fp[_MAX_PATH] = L"";
+ //SHGetFolderPathW(0, CSIDL_APPDATA | CSIDL_FLAG_CREATE, 0, 0, fp);
+ //strcpy(path, nall::utf8_t(fp));
+ //for(unsigned n = 0; path[n]; n++) if(path[n] == '\\') path[n] = '/';
+ //unsigned length = strlen(path);
+ //if(path[length] != '/') strcpy(path + length, "/");
+ //return path;
}
inline char* getcwd(char *path) {
- wchar_t fp[_MAX_PATH] = L"";
- _wgetcwd(fp, _MAX_PATH);
- strcpy(path, nall::utf8_t(fp));
- for(unsigned n = 0; path[n]; n++) if(path[n] == '\\') path[n] = '/';
- unsigned length = strlen(path);
- if(path[length] != '/') strcpy(path + length, "/");
- return path;
+ //TODO BIZHAWK
+ return nullptr;
+ //wchar_t fp[_MAX_PATH] = L"";
+ //_wgetcwd(fp, _MAX_PATH);
+ //strcpy(path, nall::utf8_t(fp));
+ //for(unsigned n = 0; path[n]; n++) if(path[n] == '\\') path[n] = '/';
+ //unsigned length = strlen(path);
+ //if(path[length] != '/') strcpy(path + length, "/");
+ //return path;
}
#else
//realpath() already exists
Index: nall/property.hpp
===================================================================
--- nall/property.hpp (revision 9394)
+++ nall/property.hpp (working copy)
@@ -56,17 +56,17 @@
const T* operator->() const { return &value; }
const T& operator()() const { return value; }
operator const T&() const { return value; }
- private:
+ //private:
T* operator->() { return &value; }
operator T&() { return value; }
const T& operator=(const T& value_) { return value = value_; }
T value;
- friend class traits<C>::type;
+ //friend class traits<C>::type;
};
template<typename T> struct writeonly {
void operator=(const T& value_) { value = value_; }
- private:
+ //private:
const T* operator->() const { return &value; }
const T& operator()() const { return value; }
operator const T&() const { return value; }
@@ -73,7 +73,7 @@
T* operator->() { return &value; }
operator T&() { return value; }
T value;
- friend class traits<C>::type;
+ //friend class traits<C>::type;
};
template<typename T> struct readwrite {
Index: nall/string/utility.hpp
===================================================================
--- nall/string/utility.hpp (revision 9394)
+++ nall/string/utility.hpp (working copy)
@@ -1,5 +1,7 @@
#ifdef NALL_STRING_INTERNAL_HPP
+#include <malloc.h>
+
namespace nall {
template<bool Insensitive>
@@ -164,7 +166,7 @@
buffer[size] = 0;
unsigned length = (length_ == 0 ? size : length_);
- char result[length + 1];
+ char* result = (char*)alloca(length + 1);
memset(result, padding, length);
result[length] = 0;
@@ -209,7 +211,7 @@
} while(value);
unsigned length = (length_ == 0 ? size : length_);
- char result[length + 1];
+ char *result = (char*)alloca(length + 1);
memset(result, padding, length);
result[length] = 0;
Index: snes/cartridge/markup.cpp
===================================================================
--- snes/cartridge/markup.cpp (revision 9394)
+++ snes/cartridge/markup.cpp (working copy)
@@ -108,7 +108,7 @@
void Cartridge::parse_markup_icd2(XML::Node &root) {
#if defined(GAMEBOY)
if(root.exists() == false) return;
- if(mode != Mode::SuperGameBoy) return;
+ if(mode.value != Mode::SuperGameBoy) return;
icd2.revision = max(1, numeral(root["revision"].data));
@@ -241,7 +241,8 @@
if(!sha256.empty()) {
//XML file specified SHA256 sum for program. Verify file matches the hash.
fp.seek(0);
- uint8_t data[filesize];
+ //uint8_t data[filesize]; //test
+ uint8_t *data = (uint8_t*)alloca(filesize);
fp.read(data, filesize);
if(sha256 != nall::sha256(data, filesize)) {
@@ -367,7 +368,7 @@
void Cartridge::parse_markup_bsx(XML::Node &root) {
if(root.exists() == false) return;
- if(mode != Mode::BsxSlotted && mode != Mode::Bsx) return;
+ if(mode.value != Mode::BsxSlotted && mode.value != Mode::Bsx) return;
has_bsx_slot = true;
for(auto &node : root["slot"]) {
@@ -394,7 +395,7 @@
void Cartridge::parse_markup_sufamiturbo(XML::Node &root) {
if(root.exists() == false) return;
- if(mode != Mode::SufamiTurbo) return;
+ if(mode.value != Mode::SufamiTurbo) return;
for(auto &slot : root) {
if(slot.name != "slot") continue;
Index: snes/chip/armdsp/registers.hpp
===================================================================
--- snes/chip/armdsp/registers.hpp (revision 9394)
+++ snes/chip/armdsp/registers.hpp (working copy)
@@ -93,6 +93,7 @@
Register& operator=(uint32 n) {
data = n;
if(write) write();
+ return *this; //test - what?
}
Register& operator+=(uint32 n) { return operator=(data + n); }
Index: snes/chip/icd2/interface/interface.cpp
===================================================================
--- snes/chip/icd2/interface/interface.cpp (revision 9394)
+++ snes/chip/icd2/interface/interface.cpp (working copy)
@@ -112,7 +112,7 @@
return 0;
}
-void* ICD2::allocSharedMemory(const char* memtype, size_t amt, int initialByte) { SNES::interface()->allocSharedMemory(memtype, amt, initialByte); }
+void* ICD2::allocSharedMemory(const char* memtype, size_t amt, int initialByte) { return SNES::interface()->allocSharedMemory(memtype, amt, initialByte); }
void ICD2::freeSharedMemory(void* ptr) { SNES::interface()->freeSharedMemory(ptr); }
#endif
Index: snes/system/system.cpp
===================================================================
--- snes/system/system.cpp (revision 9394)
+++ snes/system/system.cpp (working copy)
@@ -155,7 +155,7 @@
region = config.region;
expansion = config.expansion_port;
- if(region == Region::Autodetect) {
+ if(region.value == Region::Autodetect) {
region = (cartridge.region() == Cartridge::Region::NTSC ? Region::NTSC : Region::PAL);
}
Index: target-libsnes/libsnes_pwrap.cpp
===================================================================
--- target-libsnes/libsnes_pwrap.cpp (revision 9394)
+++ target-libsnes/libsnes_pwrap.cpp (working copy)
@@ -854,6 +854,7 @@
case eMessage_QUERY_peek_cpu_regs:
{
//watch it! the size of this struct is important!
+ #pragma pack(push,1)
struct {
u32 pc;
u16 a,x,y,z,s,d,vector; //7x
@@ -860,7 +861,8 @@
u8 p, nothing;
u32 aa,rd;
u8 sp, dp, db, mdr;
- } __attribute__((__packed__)) cpuregs;
+ } cpuregs;
+ #pragma pack(pop)
cpuregs.pc = (u32)SNES::cpu.regs.pc;
cpuregs.a = SNES::cpu.regs.a;