65816 core working in 6502 emulation mode

This commit is contained in:
Sour 2019-02-11 19:18:47 -05:00
commit 8ad76f6c31
15 changed files with 3151 additions and 0 deletions

5
.editorconfig Normal file
View file

@ -0,0 +1,5 @@
root = true
[*]
indent_style = tab
indent_size = 3

63
.gitattributes vendored Normal file
View file

@ -0,0 +1,63 @@
###############################################################################
# Set default behavior to automatically normalize line endings.
###############################################################################
* text=auto
###############################################################################
# Set default behavior for command prompt diff.
#
# This is need for earlier builds of msysgit that does not have it on by
# default for csharp files.
# Note: This is only used by command line
###############################################################################
#*.cs diff=csharp
###############################################################################
# Set the merge driver for project and solution files
#
# Merging from the command prompt will add diff markers to the files if there
# are conflicts (Merging from VS is not affected by the settings below, in VS
# the diff markers are never inserted). Diff markers may cause the following
# file extensions to fail to load in VS. An alternative would be to treat
# these files as binary and thus will always conflict and require user
# intervention with every merge. To do so, just uncomment the entries below
###############################################################################
#*.sln merge=binary
#*.csproj merge=binary
#*.vbproj merge=binary
#*.vcxproj merge=binary
#*.vcproj merge=binary
#*.dbproj merge=binary
#*.fsproj merge=binary
#*.lsproj merge=binary
#*.wixproj merge=binary
#*.modelproj merge=binary
#*.sqlproj merge=binary
#*.wwaproj merge=binary
###############################################################################
# behavior for image files
#
# image files are treated as binary by default.
###############################################################################
#*.jpg binary
#*.png binary
#*.gif binary
###############################################################################
# diff behavior for common document formats
#
# Convert binary document formats to text before diffing them. This feature
# is only available from the command line. Turn it on by uncommenting the
# entries below.
###############################################################################
#*.doc diff=astextplain
#*.DOC diff=astextplain
#*.docx diff=astextplain
#*.DOCX diff=astextplain
#*.dot diff=astextplain
#*.DOT diff=astextplain
#*.pdf diff=astextplain
#*.PDF diff=astextplain
#*.rtf diff=astextplain
#*.RTF diff=astextplain

197
.gitignore vendored Normal file
View file

@ -0,0 +1,197 @@
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
# User-specific files
*.suo
*.user
*.sln.docstates
.vs/*
# Build results
[Dd]ebug/
[Rr]elease/
x64/
build/
[Bb]in/
[Oo]bj/
[Oo]bj.x86/
[Oo]bj.x64/
# Enable "build/" folder in the NuGet Packages folder since NuGet packages use it for MSBuild targets
!packages/*/build/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
*_i.c
*_p.c
*.ilk
*.meta
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.log
*.scc
# Libretro build files
*.o
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opensdf
*.sdf
*.cachefile
# Visual Studio profiler
*.psess
*.vsp
*.vspx
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# NCrunch
*.ncrunch*
.*crunch*.local.xml
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.Publish.xml
# NuGet Packages Directory
## TODO: If you have NuGet Package Restore enabled, uncomment the next line
#packages/
# Windows Azure Build Output
csx
*.build.csdef
# Windows Store app package directory
AppPackages/
# Others
sql/
*.Cache
ClientBin/
[Ss]tyle[Cc]op.*
~$*
*~
*.dbmdl
*.[Pp]ublish.xml
*.pfx
*.publishsettings
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file to a newer
# Visual Studio version. Backup files are not needed, because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
# SQL Server files
App_Data/*.mdf
App_Data/*.ldf
#LightSwitch generated files
GeneratedArtifacts/
_Pvt_Extensions/
ModelManifest.xml
# =========================
# Windows detritus
# =========================
# Windows image file caches
Thumbs.db
ehthumbs.db
# Folder config file
Desktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Mac desktop service store files
.DS_Store
*.nes
*.sav
*.svs
*.trt
*.rar
*.VC.opendb
*.VC.db
*.VC.db-wal
*.VC.db-shm
Docs/docs/
Docs/*.exe
PGOHelper/PGOMesenHome
*.profraw
*.profdata
packages/*
!Libretro/hakchi/bin
Dependencies/*
GUI.NET/*
Windows/*
Linux/*
Libretro/*
Docs/*
SevenZip/*
Lua/*
TestHelper/*
UpdateHelper/*
Utilities/*
PGOHelper/*
DependencyPacker/*
InteropDLL/*

528
Core/Core.vcxproj Normal file
View file

@ -0,0 +1,528 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Libretro|Win32">
<Configuration>Libretro</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Libretro|x64">
<Configuration>Libretro</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="PGO Optimize|Win32">
<Configuration>PGO Optimize</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="PGO Optimize|x64">
<Configuration>PGO Optimize</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="PGO Profile|Win32">
<Configuration>PGO Profile</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="PGO Profile|x64">
<Configuration>PGO Profile</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<ItemGroup>
<ClInclude Include="Cpu.h" />
<ClInclude Include="CpuTypes.h" />
<ClInclude Include="stdafx.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="Cpu.cpp" />
<ClCompile Include="main.cpp" />
<ClCompile Include="stdafx.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='PGO Profile|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Libretro|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='PGO Optimize|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='PGO Profile|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Libretro|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='PGO Optimize|x64'">Create</PrecompiledHeader>
</ClCompile>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{78FEF1A1-6DF1-4CBB-A373-AE6FA7CE5CE0}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>Core</RootNamespace>
<ProjectName>Core</ProjectName>
<WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v141</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Libretro|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v141</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='PGO Profile|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v141</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='PGO Optimize|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v141</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v141</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Libretro|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v141</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='PGO Profile|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v141</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='PGO Optimize|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v141</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" 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|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Libretro|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='PGO Profile|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='PGO Optimize|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Libretro|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='PGO Profile|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='PGO Optimize|x64'" 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 Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
<IncludePath>$(IncludePath)</IncludePath>
<LibraryPath>$(LibraryPath)</LibraryPath>
<OutDir>$(SolutionDir)\bin\$(PlatformTarget)\$(Configuration)\</OutDir>
<IntDir>obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
<IncludePath>$(IncludePath)</IncludePath>
<LibraryPath>$(LibraryPath)</LibraryPath>
<OutDir>$(SolutionDir)\bin\$(PlatformTarget)\$(Configuration)\</OutDir>
<IntDir>obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(SolutionDir)\bin\$(PlatformTarget)\$(Configuration)\</OutDir>
<IntDir>obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Libretro|Win32'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(SolutionDir)\bin\$(PlatformTarget)\$(Configuration)\</OutDir>
<IntDir>obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='PGO Profile|Win32'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(SolutionDir)\bin\$(PlatformTarget)\$(Configuration)\</OutDir>
<IntDir>obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='PGO Optimize|Win32'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(SolutionDir)\bin\$(PlatformTarget)\PGO Profile\</OutDir>
<IntDir>obj\$(Platform)\PGO Profile\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(SolutionDir)\bin\$(PlatformTarget)\$(Configuration)\</OutDir>
<IntDir>obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Libretro|x64'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(SolutionDir)\bin\$(PlatformTarget)\$(Configuration)\</OutDir>
<IntDir>obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='PGO Profile|x64'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(SolutionDir)\bin\$(PlatformTarget)\$(Configuration)\</OutDir>
<IntDir>obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='PGO Optimize|x64'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(SolutionDir)\bin\$(PlatformTarget)\PGO Profile\</OutDir>
<IntDir>obj\$(Platform)\PGO Profile\</IntDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<InlineFunctionExpansion />
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
<CallingConvention>Cdecl</CallingConvention>
<AdditionalIncludeDirectories>
</AdditionalIncludeDirectories>
<StructMemberAlignment>Default</StructMemberAlignment>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<DisableLanguageExtensions>true</DisableLanguageExtensions>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<MinimalRebuild>false</MinimalRebuild>
<ShowIncludes>
</ShowIncludes>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<Profile>
</Profile>
<OptimizeReferences>
</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<InlineFunctionExpansion>
</InlineFunctionExpansion>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
<CallingConvention>Cdecl</CallingConvention>
<AdditionalIncludeDirectories>
</AdditionalIncludeDirectories>
<StructMemberAlignment>Default</StructMemberAlignment>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<DisableLanguageExtensions>true</DisableLanguageExtensions>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<MinimalRebuild>false</MinimalRebuild>
<ShowIncludes>
</ShowIncludes>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<Profile>
</Profile>
<OptimizeReferences>
</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>Use</PrecompiledHeader>
<Optimization>Full</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
<OmitFramePointers>true</OmitFramePointers>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<AdditionalIncludeDirectories>
</AdditionalIncludeDirectories>
<StructMemberAlignment>Default</StructMemberAlignment>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<DisableLanguageExtensions>true</DisableLanguageExtensions>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<ShowIncludes>
</ShowIncludes>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Libretro|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>Use</PrecompiledHeader>
<Optimization>Full</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>LIBRETRO;WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
<OmitFramePointers>true</OmitFramePointers>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<AdditionalIncludeDirectories>
</AdditionalIncludeDirectories>
<StructMemberAlignment>Default</StructMemberAlignment>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<DisableLanguageExtensions>true</DisableLanguageExtensions>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<ShowIncludes>
</ShowIncludes>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='PGO Profile|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>Use</PrecompiledHeader>
<Optimization>Full</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
<OmitFramePointers>true</OmitFramePointers>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<AdditionalIncludeDirectories>
</AdditionalIncludeDirectories>
<StructMemberAlignment>Default</StructMemberAlignment>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<DisableLanguageExtensions>true</DisableLanguageExtensions>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<ShowIncludes>
</ShowIncludes>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='PGO Optimize|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>Use</PrecompiledHeader>
<Optimization>Full</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
<OmitFramePointers>true</OmitFramePointers>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<AdditionalIncludeDirectories>
</AdditionalIncludeDirectories>
<StructMemberAlignment>Default</StructMemberAlignment>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<DisableLanguageExtensions>true</DisableLanguageExtensions>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<ShowIncludes>
</ShowIncludes>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>Use</PrecompiledHeader>
<Optimization>Full</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>false</SDLCheck>
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
<OmitFramePointers>true</OmitFramePointers>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<AdditionalIncludeDirectories>
</AdditionalIncludeDirectories>
<StructMemberAlignment>Default</StructMemberAlignment>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<DisableLanguageExtensions>true</DisableLanguageExtensions>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<ShowIncludes>
</ShowIncludes>
<BufferSecurityCheck>
</BufferSecurityCheck>
<ControlFlowGuard>false</ControlFlowGuard>
<RuntimeTypeInfo>
</RuntimeTypeInfo>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Libretro|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>Use</PrecompiledHeader>
<Optimization>Full</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>LIBRETRO;WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>false</SDLCheck>
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
<OmitFramePointers>true</OmitFramePointers>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<AdditionalIncludeDirectories>
</AdditionalIncludeDirectories>
<StructMemberAlignment>Default</StructMemberAlignment>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<DisableLanguageExtensions>true</DisableLanguageExtensions>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<ShowIncludes>
</ShowIncludes>
<BufferSecurityCheck>
</BufferSecurityCheck>
<ControlFlowGuard>false</ControlFlowGuard>
<RuntimeTypeInfo>
</RuntimeTypeInfo>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='PGO Profile|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>Use</PrecompiledHeader>
<Optimization>Full</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<InlineFunctionExpansion>Disabled</InlineFunctionExpansion>
<OmitFramePointers>true</OmitFramePointers>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<AdditionalIncludeDirectories>
</AdditionalIncludeDirectories>
<StructMemberAlignment>Default</StructMemberAlignment>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<DisableLanguageExtensions>true</DisableLanguageExtensions>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<ShowIncludes>
</ShowIncludes>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='PGO Optimize|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>Use</PrecompiledHeader>
<Optimization>Full</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
<OmitFramePointers>true</OmitFramePointers>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<AdditionalIncludeDirectories>
</AdditionalIncludeDirectories>
<StructMemberAlignment>Default</StructMemberAlignment>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<DisableLanguageExtensions>true</DisableLanguageExtensions>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<ShowIncludes>
</ShowIncludes>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

13
Core/Core.vcxproj.filters Normal file
View file

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ClInclude Include="Cpu.h" />
<ClInclude Include="stdafx.h" />
<ClInclude Include="CpuTypes.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="stdafx.cpp" />
<ClCompile Include="Cpu.cpp" />
<ClCompile Include="main.cpp" />
</ItemGroup>
</Project>

1292
Core/Cpu.cpp Normal file

File diff suppressed because it is too large Load diff

232
Core/Cpu.h Normal file
View file

@ -0,0 +1,232 @@
#pragma once
#include "stdafx.h"
#include "CpuTypes.h"
class Cpu
{
public:
uint64_t opCount = 0;
uint16_t GetPc() { return _state.PC; }
private:
static constexpr uint32_t NmiVector = 0x00FFFA;
static constexpr uint32_t ResetVector = 0x00FFFC;
static constexpr uint32_t IrqVector = 0x00FFFE;
static constexpr uint32_t AbortVector = 0x00FFE8;
static constexpr uint32_t BreakVector = 0x00FFE6;
static constexpr uint32_t CoprocessorVector = 0x00FFE4;
static constexpr uint16_t LegacyNmiVector = 0xFFFA;
static constexpr uint32_t LegacyBreakVector = 0xFFFE;
static constexpr uint32_t LegacyCoprocessorVector = 0x00FFF4;
typedef void(Cpu::*Func)();
CpuState _state;
AddrMode _instAddrMode;
uint32_t _operand;
uint8_t *_memory;
Func _opTable[256];
AddrMode _addrMode[256];
uint32_t GetBank();
uint32_t GetProgramAddress();
uint16_t GetDirectAddress(uint8_t baseAddress, uint16_t offset = 0, bool allowEmulationMode = true);
uint32_t GetDataAddress(uint16_t addr);
uint8_t GetOpCode();
void DummyRead();
uint8_t ReadOperandByte();
uint16_t ReadOperandWord();
uint32_t ReadOperandLong();
uint32_t FetchEffectiveAddress();
void SetRegister(uint8_t &reg, uint8_t value);
void SetRegister(uint16_t &reg, uint16_t value, bool eightBitMode);
void SetZeroNegativeFlags(uint16_t value);
void SetZeroNegativeFlags(uint8_t value);
void ClearFlags(uint8_t flags);
void SetFlags(uint8_t flags);
bool CheckFlag(uint8_t flag);
uint8_t ReadCode(uint16_t addr, MemoryOperationType type);
uint8_t ReadData(uint32_t addr, MemoryOperationType type = MemoryOperationType::Read);
uint16_t ReadDataWord(uint32_t addr, MemoryOperationType type = MemoryOperationType::Read);
uint32_t ReadDataLong(uint32_t addr, MemoryOperationType type = MemoryOperationType::Read);
void Write(uint32_t addr, uint8_t value, MemoryOperationType type = MemoryOperationType::Write);
void WriteWord(uint32_t addr, uint16_t value, MemoryOperationType type = MemoryOperationType::Write);
uint8_t GetByteValue();
uint16_t GetWordValue();
void PushByte(uint8_t value);
uint8_t PopByte();
void PushWord(uint16_t value);
uint16_t PopWord();
//Add/substract instructions
void Add8(uint8_t value);
void Add16(uint16_t value);
void ADC();
void Sub8(uint8_t value);
void Sub16(uint16_t value);
void SBC();
//Branch instructions
void BCC();
void BCS();
void BEQ();
void BMI();
void BNE();
void BPL();
void BRA();
void BRL();
void BVC();
void BVS();
void BranchRelative(bool branch);
//Set/clear flag instructions
void CLC();
void CLD();
void CLI();
void CLV();
void SEC();
void SED();
void SEI();
void REP();
void SEP();
//Increment/decrement instructions
void DEX();
void DEY();
void INX();
void INY();
void DEC();
void INC();
void IncDecReg(uint16_t & reg, int8_t offset);
void IncDec(int8_t offset);
//Compare instructions
void Compare(uint16_t reg, bool eightBitMode);
void CMP();
void CPX();
void CPY();
//Jump instructions
void JML();
void JMP();
void JSL();
void JSR();
void RTI();
void RTL();
void RTS();
//Interrupts
void ProcessInterrupt(uint16_t vector);
void BRK();
void COP();
//Bitwise operations
void AND();
void EOR();
void ORA();
template<typename T> T ShiftLeft(T value);
template<typename T> T RollLeft(T value);
template<typename T> T ShiftRight(T value);
template<typename T> T RollRight(T value);
//Shift operations
void ASL();
void LSR();
void ROL();
void ROR();
//Move operations
void MVN();
void MVP();
//Push/pull instructions
void PEA();
void PEI();
void PER();
void PHB();
void PHD();
void PHK();
void PHP();
void PLB();
void PLD();
void PLP();
void PHA();
void PHX();
void PHY();
void PLA();
void PLX();
void PLY();
void PushRegister(uint16_t reg, bool eightBitMode);
void PullRegister(uint16_t &reg, bool eightBitMode);
//Store/load instructions
void LoadRegister(uint16_t &reg, bool eightBitMode);
void StoreRegister(uint16_t val, bool eightBitMode);
void LDA();
void LDX();
void LDY();
void STA();
void STX();
void STY();
void STZ();
//Test bits
template<typename T> void TestBits(T value);
void BIT();
void TRB();
void TSB();
//Transfer registers
void TAX();
void TAY();
void TCD();
void TCS();
void TDC();
void TSC();
void TSX();
void TXA();
void TXS();
void TXY();
void TYA();
void TYX();
void XBA();
void XCE();
//No operation
void NOP();
void WDM();
//Misc.
void STP();
void WAI();
public:
Cpu(uint8_t* memory, bool enableLogging);
~Cpu();
void Reset();
void Exec();
};

92
Core/CpuTypes.h Normal file
View file

@ -0,0 +1,92 @@
#pragma once
#include "stdafx.h"
struct CpuState
{
uint64_t CycleCount;
uint16_t A;
uint16_t X;
uint16_t Y;
/* 16-bit stack pointer */
uint16_t SP;
/* 16-bit Direct Register provides an address offset for all instructions using direct addressing */
uint16_t D;
/* 16-bit Program Counter */
uint16_t PC;
/* 8-bit Program Bank Register holds the bank address for all instruction fetches. */
uint8_t K;
/* 8-bit Data Bank Register holds the bank address for memory transfers. The 24-bit address
is composed of the 16-bit instruction effective address and the 8-bit Data Bank address */
uint8_t DBR;
/* 8-bit status flags */
uint8_t PS;
/* 6502 emulation mode */
bool EmulationMode;
};
namespace ProcFlags
{
enum ProcFlags : uint8_t
{
Carry = 0x01,
Zero = 0x02,
IrqDisable = 0x04,
Decimal = 0x08,
/* Use 8-bit operations on indexes */
IndexMode8 = 0x10,
/* Use 8-bit operations on memory accesses and accumulator */
MemoryMode8 = 0x20,
Overflow = 0x40,
Negative = 0x80
};
}
enum class AddrMode
{
Abs,
AbsIdxXInd, //JMP/JSR only
AbsIdxX,
AbsIdxY,
AbsInd, //JMP only
AbsIndLng, //JMP only (unofficial)
AbsLngIdxX,
AbsLng,
Acc,
BlkMov,
DirIdxIndX,
DirIdxX,
DirIdxY,
DirIndIdxY,
DirIndLngIdxY,
DirIndLng,
DirInd,
Dir,
Imm,
Imp,
RelLng,
Rel,
Stk,
StkRel,
StkRelIndIdxY
};
enum class MemoryOperationType
{
Read = 0,
Write = 1,
ExecOpCode = 2,
ExecOperand = 3,
DummyRead = 5,
DummyWrite = 6
};

37
Core/main.cpp Normal file
View file

@ -0,0 +1,37 @@
#include "stdafx.h"
#include "Cpu.h"
#include "../Utilities/Timer.h"
int main()
{
uint8_t* memory = new uint8_t[0x1000000];
memset(memory, 0, 0x1000000);
ifstream testRom("..\\bin\\x64\\Debug\\6502_functional_test_v2.bin", ios::binary);
if(testRom) {
testRom.read((char*)memory+0x400, 0x10000);
}
shared_ptr<Cpu> cpu(new Cpu(memory, false));
Timer timer;
while(cpu->GetPc() != 0x32E9) {
cpu->Exec();
}
std::cout << "Time: " << std::to_string(timer.GetElapsedMS()) << std::endl;
std::cout << "OP Count: " << std::to_string(cpu->opCount) << std::endl;
std::cout << "OP/sec: " << std::to_string(cpu->opCount * 1000 / timer.GetElapsedMS()) << std::endl;
/*
memset(memory, 0, 0x1000000);
ifstream testRom2("..\\bin\\x64\\Debug\\65C02_extended_opcodes_test.bin", ios::binary);
if(testRom2) {
testRom2.read((char*)memory, 0x10000);
}
cpu.reset(new Cpu(memory, true));
timer.Reset();
while(true) {
cpu->Exec();
}
*/
while(true);
}

1
Core/stdafx.cpp Normal file
View file

@ -0,0 +1 @@
#include "stdafx.h"

50
Core/stdafx.h Normal file
View file

@ -0,0 +1,50 @@
#pragma once
#include <stdio.h>
#include <string.h>
#include <stdint.h>
#include <memory>
#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
#include <cctype>
#include <memory>
#include <vector>
#include <array>
#include <sstream>
#include <list>
#include <atomic>
#include "../Utilities/UTF8Util.h"
#ifdef __clang__
#define __forceinline __attribute__((always_inline))
#else
#ifdef __GNUC__
#define __forceinline
#endif
#endif
using std::vector;
using std::shared_ptr;
using std::unique_ptr;
using std::weak_ptr;
using std::ios;
using std::istream;
using std::ostream;
using std::stringstream;
using utf8::ifstream;
using utf8::ofstream;
using std::list;
using std::max;
using std::string;
using std::atomic_flag;
using std::atomic;
#ifdef _DEBUG
#pragma comment(lib, "C:\\Code\\Mesen-S\\bin\\x64\\Debug\\Utilities.lib")
#else
#pragma comment(lib, "C:\\Code\\Mesen-S\\bin\\x64\\Release\\Utilities.lib")
#endif

385
Mesen-S.sln Normal file
View file

@ -0,0 +1,385 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27130.2036
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Core", "Core\Core.vcxproj", "{78FEF1A1-6DF1-4CBB-A373-AE6FA7CE5CE0}"
ProjectSection(ProjectDependencies) = postProject
{B5330148-E8C7-46BA-B54E-69BE59EA337D} = {B5330148-E8C7-46BA-B54E-69BE59EA337D}
{B609E0A0-5050-4871-91D6-E760633BCDD1} = {B609E0A0-5050-4871-91D6-E760633BCDD1}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Utilities", "Utilities\Utilities.vcxproj", "{B5330148-E8C7-46BA-B54E-69BE59EA337D}"
ProjectSection(ProjectDependencies) = postProject
{52C4BA3A-E699-4305-B23F-C9083FD07AB6} = {52C4BA3A-E699-4305-B23F-C9083FD07AB6}
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GUI.NET", "GUI.NET\GUI.NET.csproj", "{08D83A7E-52A9-451E-A53A-1A7946F8BB77}"
ProjectSection(ProjectDependencies) = postProject
{36ABBF1C-66E1-4577-828A-619A2EF0DAE9} = {36ABBF1C-66E1-4577-828A-619A2EF0DAE9}
{AABB5225-3A49-47FF-8A48-031673CADCE9} = {AABB5225-3A49-47FF-8A48-031673CADCE9}
{37749BB2-FA78-4EC9-8990-5628FC0BBA19} = {37749BB2-FA78-4EC9-8990-5628FC0BBA19}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Windows", "Windows\Windows.vcxproj", "{7761E790-B42C-4179-8550-8365FF9EB23E}"
ProjectSection(ProjectDependencies) = postProject
{B5330148-E8C7-46BA-B54E-69BE59EA337D} = {B5330148-E8C7-46BA-B54E-69BE59EA337D}
{78FEF1A1-6DF1-4CBB-A373-AE6FA7CE5CE0} = {78FEF1A1-6DF1-4CBB-A373-AE6FA7CE5CE0}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "InteropDLL", "InteropDLL\InteropDLL.vcxproj", "{37749BB2-FA78-4EC9-8990-5628FC0BBA19}"
ProjectSection(ProjectDependencies) = postProject
{B5330148-E8C7-46BA-B54E-69BE59EA337D} = {B5330148-E8C7-46BA-B54E-69BE59EA337D}
{7761E790-B42C-4179-8550-8365FF9EB23E} = {7761E790-B42C-4179-8550-8365FF9EB23E}
{B609E0A0-5050-4871-91D6-E760633BCDD1} = {B609E0A0-5050-4871-91D6-E760633BCDD1}
{78FEF1A1-6DF1-4CBB-A373-AE6FA7CE5CE0} = {78FEF1A1-6DF1-4CBB-A373-AE6FA7CE5CE0}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PGOHelper", "PGOHelper\PGOHelper.vcxproj", "{38D74EE1-5276-4D24-AABC-104B912A27D2}"
ProjectSection(ProjectDependencies) = postProject
{37749BB2-FA78-4EC9-8990-5628FC0BBA19} = {37749BB2-FA78-4EC9-8990-5628FC0BBA19}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestHelper", "TestHelper\TestHelper.vcxproj", "{2A607369-8B5D-494A-9E40-C5DC8D821AA3}"
ProjectSection(ProjectDependencies) = postProject
{37749BB2-FA78-4EC9-8990-5628FC0BBA19} = {37749BB2-FA78-4EC9-8990-5628FC0BBA19}
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DependencyPacker", "DependencyPacker\DependencyPacker.csproj", "{AABB5225-3A49-47FF-8A48-031673CADCE9}"
ProjectSection(ProjectDependencies) = postProject
{37749BB2-FA78-4EC9-8990-5628FC0BBA19} = {37749BB2-FA78-4EC9-8990-5628FC0BBA19}
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UpdateHelper", "UpdateHelper\UpdateHelper.csproj", "{36ABBF1C-66E1-4577-828A-619A2EF0DAE9}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SevenZip", "SevenZip\SevenZip.vcxproj", "{52C4BA3A-E699-4305-B23F-C9083FD07AB6}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Lua", "Lua\Lua.vcxproj", "{B609E0A0-5050-4871-91D6-E760633BCDD1}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Libretro", "Libretro\Libretro.vcxproj", "{4432139E-528B-44DE-961C-B37CD5E92E0E}"
ProjectSection(ProjectDependencies) = postProject
{B5330148-E8C7-46BA-B54E-69BE59EA337D} = {B5330148-E8C7-46BA-B54E-69BE59EA337D}
{78FEF1A1-6DF1-4CBB-A373-AE6FA7CE5CE0} = {78FEF1A1-6DF1-4CBB-A373-AE6FA7CE5CE0}
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Libretro|Any CPU = Libretro|Any CPU
Libretro|x64 = Libretro|x64
Libretro|x86 = Libretro|x86
PGO Optimize|Any CPU = PGO Optimize|Any CPU
PGO Optimize|x64 = PGO Optimize|x64
PGO Optimize|x86 = PGO Optimize|x86
PGO Profile|Any CPU = PGO Profile|Any CPU
PGO Profile|x64 = PGO Profile|x64
PGO Profile|x86 = PGO Profile|x86
Release|Any CPU = Release|Any CPU
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{78FEF1A1-6DF1-4CBB-A373-AE6FA7CE5CE0}.Debug|Any CPU.ActiveCfg = Debug|Win32
{78FEF1A1-6DF1-4CBB-A373-AE6FA7CE5CE0}.Debug|x64.ActiveCfg = Debug|x64
{78FEF1A1-6DF1-4CBB-A373-AE6FA7CE5CE0}.Debug|x64.Build.0 = Debug|x64
{78FEF1A1-6DF1-4CBB-A373-AE6FA7CE5CE0}.Debug|x86.ActiveCfg = Debug|Win32
{78FEF1A1-6DF1-4CBB-A373-AE6FA7CE5CE0}.Debug|x86.Build.0 = Debug|Win32
{78FEF1A1-6DF1-4CBB-A373-AE6FA7CE5CE0}.Libretro|Any CPU.ActiveCfg = Libretro|Win32
{78FEF1A1-6DF1-4CBB-A373-AE6FA7CE5CE0}.Libretro|x64.ActiveCfg = Libretro|x64
{78FEF1A1-6DF1-4CBB-A373-AE6FA7CE5CE0}.Libretro|x64.Build.0 = Libretro|x64
{78FEF1A1-6DF1-4CBB-A373-AE6FA7CE5CE0}.Libretro|x86.ActiveCfg = Libretro|Win32
{78FEF1A1-6DF1-4CBB-A373-AE6FA7CE5CE0}.Libretro|x86.Build.0 = Libretro|Win32
{78FEF1A1-6DF1-4CBB-A373-AE6FA7CE5CE0}.PGO Optimize|Any CPU.ActiveCfg = PGO Optimize|Win32
{78FEF1A1-6DF1-4CBB-A373-AE6FA7CE5CE0}.PGO Optimize|x64.ActiveCfg = PGO Optimize|x64
{78FEF1A1-6DF1-4CBB-A373-AE6FA7CE5CE0}.PGO Optimize|x64.Build.0 = PGO Optimize|x64
{78FEF1A1-6DF1-4CBB-A373-AE6FA7CE5CE0}.PGO Optimize|x86.ActiveCfg = PGO Optimize|Win32
{78FEF1A1-6DF1-4CBB-A373-AE6FA7CE5CE0}.PGO Optimize|x86.Build.0 = PGO Optimize|Win32
{78FEF1A1-6DF1-4CBB-A373-AE6FA7CE5CE0}.PGO Profile|Any CPU.ActiveCfg = PGO Profile|Win32
{78FEF1A1-6DF1-4CBB-A373-AE6FA7CE5CE0}.PGO Profile|x64.ActiveCfg = PGO Profile|x64
{78FEF1A1-6DF1-4CBB-A373-AE6FA7CE5CE0}.PGO Profile|x64.Build.0 = PGO Profile|x64
{78FEF1A1-6DF1-4CBB-A373-AE6FA7CE5CE0}.PGO Profile|x86.ActiveCfg = PGO Profile|Win32
{78FEF1A1-6DF1-4CBB-A373-AE6FA7CE5CE0}.PGO Profile|x86.Build.0 = PGO Profile|Win32
{78FEF1A1-6DF1-4CBB-A373-AE6FA7CE5CE0}.Release|Any CPU.ActiveCfg = Release|Win32
{78FEF1A1-6DF1-4CBB-A373-AE6FA7CE5CE0}.Release|x64.ActiveCfg = Release|x64
{78FEF1A1-6DF1-4CBB-A373-AE6FA7CE5CE0}.Release|x64.Build.0 = Release|x64
{78FEF1A1-6DF1-4CBB-A373-AE6FA7CE5CE0}.Release|x86.ActiveCfg = Release|Win32
{78FEF1A1-6DF1-4CBB-A373-AE6FA7CE5CE0}.Release|x86.Build.0 = Release|Win32
{B5330148-E8C7-46BA-B54E-69BE59EA337D}.Debug|Any CPU.ActiveCfg = Debug|Win32
{B5330148-E8C7-46BA-B54E-69BE59EA337D}.Debug|x64.ActiveCfg = Debug|x64
{B5330148-E8C7-46BA-B54E-69BE59EA337D}.Debug|x64.Build.0 = Debug|x64
{B5330148-E8C7-46BA-B54E-69BE59EA337D}.Debug|x86.ActiveCfg = Debug|Win32
{B5330148-E8C7-46BA-B54E-69BE59EA337D}.Debug|x86.Build.0 = Debug|Win32
{B5330148-E8C7-46BA-B54E-69BE59EA337D}.Libretro|Any CPU.ActiveCfg = Libretro|Win32
{B5330148-E8C7-46BA-B54E-69BE59EA337D}.Libretro|x64.ActiveCfg = Libretro|x64
{B5330148-E8C7-46BA-B54E-69BE59EA337D}.Libretro|x64.Build.0 = Libretro|x64
{B5330148-E8C7-46BA-B54E-69BE59EA337D}.Libretro|x86.ActiveCfg = Libretro|Win32
{B5330148-E8C7-46BA-B54E-69BE59EA337D}.Libretro|x86.Build.0 = Libretro|Win32
{B5330148-E8C7-46BA-B54E-69BE59EA337D}.PGO Optimize|Any CPU.ActiveCfg = PGO Optimize|Win32
{B5330148-E8C7-46BA-B54E-69BE59EA337D}.PGO Optimize|x64.ActiveCfg = PGO Optimize|x64
{B5330148-E8C7-46BA-B54E-69BE59EA337D}.PGO Optimize|x64.Build.0 = PGO Optimize|x64
{B5330148-E8C7-46BA-B54E-69BE59EA337D}.PGO Optimize|x86.ActiveCfg = PGO Optimize|Win32
{B5330148-E8C7-46BA-B54E-69BE59EA337D}.PGO Optimize|x86.Build.0 = PGO Optimize|Win32
{B5330148-E8C7-46BA-B54E-69BE59EA337D}.PGO Profile|Any CPU.ActiveCfg = PGO Profile|Win32
{B5330148-E8C7-46BA-B54E-69BE59EA337D}.PGO Profile|x64.ActiveCfg = PGO Profile|x64
{B5330148-E8C7-46BA-B54E-69BE59EA337D}.PGO Profile|x64.Build.0 = PGO Profile|x64
{B5330148-E8C7-46BA-B54E-69BE59EA337D}.PGO Profile|x86.ActiveCfg = PGO Profile|Win32
{B5330148-E8C7-46BA-B54E-69BE59EA337D}.PGO Profile|x86.Build.0 = PGO Profile|Win32
{B5330148-E8C7-46BA-B54E-69BE59EA337D}.Release|Any CPU.ActiveCfg = Release|Win32
{B5330148-E8C7-46BA-B54E-69BE59EA337D}.Release|x64.ActiveCfg = Release|x64
{B5330148-E8C7-46BA-B54E-69BE59EA337D}.Release|x64.Build.0 = Release|x64
{B5330148-E8C7-46BA-B54E-69BE59EA337D}.Release|x86.ActiveCfg = Release|Win32
{B5330148-E8C7-46BA-B54E-69BE59EA337D}.Release|x86.Build.0 = Release|Win32
{08D83A7E-52A9-451E-A53A-1A7946F8BB77}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{08D83A7E-52A9-451E-A53A-1A7946F8BB77}.Debug|Any CPU.Build.0 = Debug|Any CPU
{08D83A7E-52A9-451E-A53A-1A7946F8BB77}.Debug|x64.ActiveCfg = Debug|x64
{08D83A7E-52A9-451E-A53A-1A7946F8BB77}.Debug|x64.Build.0 = Debug|x64
{08D83A7E-52A9-451E-A53A-1A7946F8BB77}.Debug|x86.ActiveCfg = Debug|x86
{08D83A7E-52A9-451E-A53A-1A7946F8BB77}.Debug|x86.Build.0 = Debug|x86
{08D83A7E-52A9-451E-A53A-1A7946F8BB77}.Libretro|Any CPU.ActiveCfg = Libretro|Any CPU
{08D83A7E-52A9-451E-A53A-1A7946F8BB77}.Libretro|Any CPU.Build.0 = Libretro|Any CPU
{08D83A7E-52A9-451E-A53A-1A7946F8BB77}.Libretro|x64.ActiveCfg = Libretro|x64
{08D83A7E-52A9-451E-A53A-1A7946F8BB77}.Libretro|x86.ActiveCfg = Libretro|x86
{08D83A7E-52A9-451E-A53A-1A7946F8BB77}.PGO Optimize|Any CPU.ActiveCfg = PGO Optimize|Any CPU
{08D83A7E-52A9-451E-A53A-1A7946F8BB77}.PGO Optimize|Any CPU.Build.0 = PGO Optimize|Any CPU
{08D83A7E-52A9-451E-A53A-1A7946F8BB77}.PGO Optimize|x64.ActiveCfg = PGO Optimize|x64
{08D83A7E-52A9-451E-A53A-1A7946F8BB77}.PGO Optimize|x64.Build.0 = PGO Optimize|x64
{08D83A7E-52A9-451E-A53A-1A7946F8BB77}.PGO Optimize|x86.ActiveCfg = PGO Optimize|x86
{08D83A7E-52A9-451E-A53A-1A7946F8BB77}.PGO Optimize|x86.Build.0 = PGO Optimize|x86
{08D83A7E-52A9-451E-A53A-1A7946F8BB77}.PGO Profile|Any CPU.ActiveCfg = PGO Profile|Any CPU
{08D83A7E-52A9-451E-A53A-1A7946F8BB77}.PGO Profile|Any CPU.Build.0 = PGO Profile|Any CPU
{08D83A7E-52A9-451E-A53A-1A7946F8BB77}.PGO Profile|x64.ActiveCfg = PGO Profile|x64
{08D83A7E-52A9-451E-A53A-1A7946F8BB77}.PGO Profile|x64.Build.0 = PGO Profile|x64
{08D83A7E-52A9-451E-A53A-1A7946F8BB77}.PGO Profile|x86.ActiveCfg = PGO Profile|x86
{08D83A7E-52A9-451E-A53A-1A7946F8BB77}.PGO Profile|x86.Build.0 = PGO Profile|x86
{08D83A7E-52A9-451E-A53A-1A7946F8BB77}.Release|Any CPU.ActiveCfg = Release|Any CPU
{08D83A7E-52A9-451E-A53A-1A7946F8BB77}.Release|Any CPU.Build.0 = Release|Any CPU
{08D83A7E-52A9-451E-A53A-1A7946F8BB77}.Release|x64.ActiveCfg = Release|x64
{08D83A7E-52A9-451E-A53A-1A7946F8BB77}.Release|x64.Build.0 = Release|x64
{08D83A7E-52A9-451E-A53A-1A7946F8BB77}.Release|x86.ActiveCfg = Release|x86
{08D83A7E-52A9-451E-A53A-1A7946F8BB77}.Release|x86.Build.0 = Release|x86
{7761E790-B42C-4179-8550-8365FF9EB23E}.Debug|Any CPU.ActiveCfg = Debug|Win32
{7761E790-B42C-4179-8550-8365FF9EB23E}.Debug|x64.ActiveCfg = Debug|x64
{7761E790-B42C-4179-8550-8365FF9EB23E}.Debug|x64.Build.0 = Debug|x64
{7761E790-B42C-4179-8550-8365FF9EB23E}.Debug|x86.ActiveCfg = Debug|Win32
{7761E790-B42C-4179-8550-8365FF9EB23E}.Debug|x86.Build.0 = Debug|Win32
{7761E790-B42C-4179-8550-8365FF9EB23E}.Libretro|Any CPU.ActiveCfg = Libretro|Win32
{7761E790-B42C-4179-8550-8365FF9EB23E}.Libretro|x64.ActiveCfg = Libretro|x64
{7761E790-B42C-4179-8550-8365FF9EB23E}.Libretro|x86.ActiveCfg = Libretro|Win32
{7761E790-B42C-4179-8550-8365FF9EB23E}.PGO Optimize|Any CPU.ActiveCfg = PGO Optimize|Win32
{7761E790-B42C-4179-8550-8365FF9EB23E}.PGO Optimize|x64.ActiveCfg = PGO Optimize|x64
{7761E790-B42C-4179-8550-8365FF9EB23E}.PGO Optimize|x64.Build.0 = PGO Optimize|x64
{7761E790-B42C-4179-8550-8365FF9EB23E}.PGO Optimize|x86.ActiveCfg = PGO Optimize|Win32
{7761E790-B42C-4179-8550-8365FF9EB23E}.PGO Optimize|x86.Build.0 = PGO Optimize|Win32
{7761E790-B42C-4179-8550-8365FF9EB23E}.PGO Profile|Any CPU.ActiveCfg = PGO Profile|Win32
{7761E790-B42C-4179-8550-8365FF9EB23E}.PGO Profile|x64.ActiveCfg = PGO Profile|x64
{7761E790-B42C-4179-8550-8365FF9EB23E}.PGO Profile|x64.Build.0 = PGO Profile|x64
{7761E790-B42C-4179-8550-8365FF9EB23E}.PGO Profile|x86.ActiveCfg = PGO Profile|Win32
{7761E790-B42C-4179-8550-8365FF9EB23E}.PGO Profile|x86.Build.0 = PGO Profile|Win32
{7761E790-B42C-4179-8550-8365FF9EB23E}.Release|Any CPU.ActiveCfg = Release|Win32
{7761E790-B42C-4179-8550-8365FF9EB23E}.Release|x64.ActiveCfg = Release|x64
{7761E790-B42C-4179-8550-8365FF9EB23E}.Release|x64.Build.0 = Release|x64
{7761E790-B42C-4179-8550-8365FF9EB23E}.Release|x86.ActiveCfg = Release|Win32
{7761E790-B42C-4179-8550-8365FF9EB23E}.Release|x86.Build.0 = Release|Win32
{37749BB2-FA78-4EC9-8990-5628FC0BBA19}.Debug|Any CPU.ActiveCfg = Debug|Win32
{37749BB2-FA78-4EC9-8990-5628FC0BBA19}.Debug|x64.ActiveCfg = Debug|x64
{37749BB2-FA78-4EC9-8990-5628FC0BBA19}.Debug|x64.Build.0 = Debug|x64
{37749BB2-FA78-4EC9-8990-5628FC0BBA19}.Debug|x86.ActiveCfg = Debug|Win32
{37749BB2-FA78-4EC9-8990-5628FC0BBA19}.Debug|x86.Build.0 = Debug|Win32
{37749BB2-FA78-4EC9-8990-5628FC0BBA19}.Libretro|Any CPU.ActiveCfg = Libretro|Win32
{37749BB2-FA78-4EC9-8990-5628FC0BBA19}.Libretro|x64.ActiveCfg = Libretro|x64
{37749BB2-FA78-4EC9-8990-5628FC0BBA19}.Libretro|x86.ActiveCfg = Libretro|Win32
{37749BB2-FA78-4EC9-8990-5628FC0BBA19}.PGO Optimize|Any CPU.ActiveCfg = PGO Optimize|Win32
{37749BB2-FA78-4EC9-8990-5628FC0BBA19}.PGO Optimize|x64.ActiveCfg = PGO Optimize|x64
{37749BB2-FA78-4EC9-8990-5628FC0BBA19}.PGO Optimize|x64.Build.0 = PGO Optimize|x64
{37749BB2-FA78-4EC9-8990-5628FC0BBA19}.PGO Optimize|x86.ActiveCfg = PGO Optimize|Win32
{37749BB2-FA78-4EC9-8990-5628FC0BBA19}.PGO Optimize|x86.Build.0 = PGO Optimize|Win32
{37749BB2-FA78-4EC9-8990-5628FC0BBA19}.PGO Profile|Any CPU.ActiveCfg = PGO Profile|Win32
{37749BB2-FA78-4EC9-8990-5628FC0BBA19}.PGO Profile|x64.ActiveCfg = PGO Profile|x64
{37749BB2-FA78-4EC9-8990-5628FC0BBA19}.PGO Profile|x64.Build.0 = PGO Profile|x64
{37749BB2-FA78-4EC9-8990-5628FC0BBA19}.PGO Profile|x86.ActiveCfg = PGO Profile|Win32
{37749BB2-FA78-4EC9-8990-5628FC0BBA19}.PGO Profile|x86.Build.0 = PGO Profile|Win32
{37749BB2-FA78-4EC9-8990-5628FC0BBA19}.Release|Any CPU.ActiveCfg = Release|Win32
{37749BB2-FA78-4EC9-8990-5628FC0BBA19}.Release|x64.ActiveCfg = Release|x64
{37749BB2-FA78-4EC9-8990-5628FC0BBA19}.Release|x64.Build.0 = Release|x64
{37749BB2-FA78-4EC9-8990-5628FC0BBA19}.Release|x86.ActiveCfg = Release|Win32
{37749BB2-FA78-4EC9-8990-5628FC0BBA19}.Release|x86.Build.0 = Release|Win32
{38D74EE1-5276-4D24-AABC-104B912A27D2}.Debug|Any CPU.ActiveCfg = Debug|Win32
{38D74EE1-5276-4D24-AABC-104B912A27D2}.Debug|x64.ActiveCfg = Debug|x64
{38D74EE1-5276-4D24-AABC-104B912A27D2}.Debug|x64.Build.0 = Debug|x64
{38D74EE1-5276-4D24-AABC-104B912A27D2}.Debug|x86.ActiveCfg = Debug|Win32
{38D74EE1-5276-4D24-AABC-104B912A27D2}.Debug|x86.Build.0 = Debug|Win32
{38D74EE1-5276-4D24-AABC-104B912A27D2}.Libretro|Any CPU.ActiveCfg = Libretro|Win32
{38D74EE1-5276-4D24-AABC-104B912A27D2}.Libretro|x64.ActiveCfg = Libretro|x64
{38D74EE1-5276-4D24-AABC-104B912A27D2}.Libretro|x86.ActiveCfg = Libretro|Win32
{38D74EE1-5276-4D24-AABC-104B912A27D2}.PGO Optimize|Any CPU.ActiveCfg = PGO Optimize|Win32
{38D74EE1-5276-4D24-AABC-104B912A27D2}.PGO Optimize|x64.ActiveCfg = PGO Optimize|x64
{38D74EE1-5276-4D24-AABC-104B912A27D2}.PGO Optimize|x64.Build.0 = PGO Optimize|x64
{38D74EE1-5276-4D24-AABC-104B912A27D2}.PGO Optimize|x86.ActiveCfg = PGO Optimize|Win32
{38D74EE1-5276-4D24-AABC-104B912A27D2}.PGO Optimize|x86.Build.0 = PGO Optimize|Win32
{38D74EE1-5276-4D24-AABC-104B912A27D2}.PGO Profile|Any CPU.ActiveCfg = PGO Profile|Win32
{38D74EE1-5276-4D24-AABC-104B912A27D2}.PGO Profile|x64.ActiveCfg = PGO Profile|x64
{38D74EE1-5276-4D24-AABC-104B912A27D2}.PGO Profile|x64.Build.0 = PGO Profile|x64
{38D74EE1-5276-4D24-AABC-104B912A27D2}.PGO Profile|x86.ActiveCfg = PGO Profile|Win32
{38D74EE1-5276-4D24-AABC-104B912A27D2}.PGO Profile|x86.Build.0 = PGO Profile|Win32
{38D74EE1-5276-4D24-AABC-104B912A27D2}.Release|Any CPU.ActiveCfg = Release|Win32
{38D74EE1-5276-4D24-AABC-104B912A27D2}.Release|x64.ActiveCfg = Release|x64
{38D74EE1-5276-4D24-AABC-104B912A27D2}.Release|x64.Build.0 = Release|x64
{38D74EE1-5276-4D24-AABC-104B912A27D2}.Release|x86.ActiveCfg = Release|Win32
{38D74EE1-5276-4D24-AABC-104B912A27D2}.Release|x86.Build.0 = Release|Win32
{2A607369-8B5D-494A-9E40-C5DC8D821AA3}.Debug|Any CPU.ActiveCfg = Debug|Win32
{2A607369-8B5D-494A-9E40-C5DC8D821AA3}.Debug|x64.ActiveCfg = Debug|x64
{2A607369-8B5D-494A-9E40-C5DC8D821AA3}.Debug|x64.Build.0 = Debug|x64
{2A607369-8B5D-494A-9E40-C5DC8D821AA3}.Debug|x86.ActiveCfg = Debug|Win32
{2A607369-8B5D-494A-9E40-C5DC8D821AA3}.Debug|x86.Build.0 = Debug|Win32
{2A607369-8B5D-494A-9E40-C5DC8D821AA3}.Libretro|Any CPU.ActiveCfg = Libretro|Win32
{2A607369-8B5D-494A-9E40-C5DC8D821AA3}.Libretro|x64.ActiveCfg = Libretro|x64
{2A607369-8B5D-494A-9E40-C5DC8D821AA3}.Libretro|x86.ActiveCfg = Libretro|Win32
{2A607369-8B5D-494A-9E40-C5DC8D821AA3}.PGO Optimize|Any CPU.ActiveCfg = PGO Optimize|Win32
{2A607369-8B5D-494A-9E40-C5DC8D821AA3}.PGO Optimize|x64.ActiveCfg = PGO Optimize|x64
{2A607369-8B5D-494A-9E40-C5DC8D821AA3}.PGO Optimize|x64.Build.0 = PGO Optimize|x64
{2A607369-8B5D-494A-9E40-C5DC8D821AA3}.PGO Optimize|x86.ActiveCfg = PGO Optimize|Win32
{2A607369-8B5D-494A-9E40-C5DC8D821AA3}.PGO Optimize|x86.Build.0 = PGO Optimize|Win32
{2A607369-8B5D-494A-9E40-C5DC8D821AA3}.PGO Profile|Any CPU.ActiveCfg = PGO Profile|Win32
{2A607369-8B5D-494A-9E40-C5DC8D821AA3}.PGO Profile|x64.ActiveCfg = PGO Profile|x64
{2A607369-8B5D-494A-9E40-C5DC8D821AA3}.PGO Profile|x64.Build.0 = PGO Profile|x64
{2A607369-8B5D-494A-9E40-C5DC8D821AA3}.PGO Profile|x86.ActiveCfg = PGO Profile|Win32
{2A607369-8B5D-494A-9E40-C5DC8D821AA3}.PGO Profile|x86.Build.0 = PGO Profile|Win32
{2A607369-8B5D-494A-9E40-C5DC8D821AA3}.Release|Any CPU.ActiveCfg = Release|Win32
{2A607369-8B5D-494A-9E40-C5DC8D821AA3}.Release|x64.ActiveCfg = Release|x64
{2A607369-8B5D-494A-9E40-C5DC8D821AA3}.Release|x64.Build.0 = Release|x64
{2A607369-8B5D-494A-9E40-C5DC8D821AA3}.Release|x86.ActiveCfg = Release|Win32
{2A607369-8B5D-494A-9E40-C5DC8D821AA3}.Release|x86.Build.0 = Release|Win32
{AABB5225-3A49-47FF-8A48-031673CADCE9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AABB5225-3A49-47FF-8A48-031673CADCE9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AABB5225-3A49-47FF-8A48-031673CADCE9}.Debug|x64.ActiveCfg = Debug|x64
{AABB5225-3A49-47FF-8A48-031673CADCE9}.Debug|x64.Build.0 = Debug|x64
{AABB5225-3A49-47FF-8A48-031673CADCE9}.Debug|x86.ActiveCfg = Debug|x86
{AABB5225-3A49-47FF-8A48-031673CADCE9}.Debug|x86.Build.0 = Debug|x86
{AABB5225-3A49-47FF-8A48-031673CADCE9}.Libretro|Any CPU.ActiveCfg = Libretro|Any CPU
{AABB5225-3A49-47FF-8A48-031673CADCE9}.Libretro|Any CPU.Build.0 = Libretro|Any CPU
{AABB5225-3A49-47FF-8A48-031673CADCE9}.Libretro|x64.ActiveCfg = Libretro|x64
{AABB5225-3A49-47FF-8A48-031673CADCE9}.Libretro|x86.ActiveCfg = Libretro|x86
{AABB5225-3A49-47FF-8A48-031673CADCE9}.PGO Optimize|Any CPU.ActiveCfg = PGO Optimize|Any CPU
{AABB5225-3A49-47FF-8A48-031673CADCE9}.PGO Optimize|Any CPU.Build.0 = PGO Optimize|Any CPU
{AABB5225-3A49-47FF-8A48-031673CADCE9}.PGO Optimize|x64.ActiveCfg = PGO Optimize|x64
{AABB5225-3A49-47FF-8A48-031673CADCE9}.PGO Optimize|x64.Build.0 = PGO Optimize|x64
{AABB5225-3A49-47FF-8A48-031673CADCE9}.PGO Optimize|x86.ActiveCfg = PGO Optimize|x86
{AABB5225-3A49-47FF-8A48-031673CADCE9}.PGO Optimize|x86.Build.0 = PGO Optimize|x86
{AABB5225-3A49-47FF-8A48-031673CADCE9}.PGO Profile|Any CPU.ActiveCfg = PGO Profile|Any CPU
{AABB5225-3A49-47FF-8A48-031673CADCE9}.PGO Profile|Any CPU.Build.0 = PGO Profile|Any CPU
{AABB5225-3A49-47FF-8A48-031673CADCE9}.PGO Profile|x64.ActiveCfg = PGO Profile|x64
{AABB5225-3A49-47FF-8A48-031673CADCE9}.PGO Profile|x64.Build.0 = PGO Profile|x64
{AABB5225-3A49-47FF-8A48-031673CADCE9}.PGO Profile|x86.ActiveCfg = PGO Profile|x86
{AABB5225-3A49-47FF-8A48-031673CADCE9}.PGO Profile|x86.Build.0 = PGO Profile|x86
{AABB5225-3A49-47FF-8A48-031673CADCE9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AABB5225-3A49-47FF-8A48-031673CADCE9}.Release|Any CPU.Build.0 = Release|Any CPU
{AABB5225-3A49-47FF-8A48-031673CADCE9}.Release|x64.ActiveCfg = Release|x64
{AABB5225-3A49-47FF-8A48-031673CADCE9}.Release|x64.Build.0 = Release|x64
{AABB5225-3A49-47FF-8A48-031673CADCE9}.Release|x86.ActiveCfg = Release|x86
{AABB5225-3A49-47FF-8A48-031673CADCE9}.Release|x86.Build.0 = Release|x86
{36ABBF1C-66E1-4577-828A-619A2EF0DAE9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{36ABBF1C-66E1-4577-828A-619A2EF0DAE9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{36ABBF1C-66E1-4577-828A-619A2EF0DAE9}.Debug|x64.ActiveCfg = Debug|x64
{36ABBF1C-66E1-4577-828A-619A2EF0DAE9}.Debug|x64.Build.0 = Debug|x64
{36ABBF1C-66E1-4577-828A-619A2EF0DAE9}.Debug|x86.ActiveCfg = Debug|x86
{36ABBF1C-66E1-4577-828A-619A2EF0DAE9}.Debug|x86.Build.0 = Debug|x86
{36ABBF1C-66E1-4577-828A-619A2EF0DAE9}.Libretro|Any CPU.ActiveCfg = Libretro|Any CPU
{36ABBF1C-66E1-4577-828A-619A2EF0DAE9}.Libretro|Any CPU.Build.0 = Libretro|Any CPU
{36ABBF1C-66E1-4577-828A-619A2EF0DAE9}.Libretro|x64.ActiveCfg = Libretro|x64
{36ABBF1C-66E1-4577-828A-619A2EF0DAE9}.Libretro|x86.ActiveCfg = Libretro|x86
{36ABBF1C-66E1-4577-828A-619A2EF0DAE9}.PGO Optimize|Any CPU.ActiveCfg = PGO Optimize|Any CPU
{36ABBF1C-66E1-4577-828A-619A2EF0DAE9}.PGO Optimize|Any CPU.Build.0 = PGO Optimize|Any CPU
{36ABBF1C-66E1-4577-828A-619A2EF0DAE9}.PGO Optimize|x64.ActiveCfg = PGO Optimize|x64
{36ABBF1C-66E1-4577-828A-619A2EF0DAE9}.PGO Optimize|x64.Build.0 = PGO Optimize|x64
{36ABBF1C-66E1-4577-828A-619A2EF0DAE9}.PGO Optimize|x86.ActiveCfg = PGO Optimize|x86
{36ABBF1C-66E1-4577-828A-619A2EF0DAE9}.PGO Optimize|x86.Build.0 = PGO Optimize|x86
{36ABBF1C-66E1-4577-828A-619A2EF0DAE9}.PGO Profile|Any CPU.ActiveCfg = PGO Profile|Any CPU
{36ABBF1C-66E1-4577-828A-619A2EF0DAE9}.PGO Profile|Any CPU.Build.0 = PGO Profile|Any CPU
{36ABBF1C-66E1-4577-828A-619A2EF0DAE9}.PGO Profile|x64.ActiveCfg = PGO Profile|x64
{36ABBF1C-66E1-4577-828A-619A2EF0DAE9}.PGO Profile|x64.Build.0 = PGO Profile|x64
{36ABBF1C-66E1-4577-828A-619A2EF0DAE9}.PGO Profile|x86.ActiveCfg = PGO Profile|x86
{36ABBF1C-66E1-4577-828A-619A2EF0DAE9}.PGO Profile|x86.Build.0 = PGO Profile|x86
{36ABBF1C-66E1-4577-828A-619A2EF0DAE9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{36ABBF1C-66E1-4577-828A-619A2EF0DAE9}.Release|Any CPU.Build.0 = Release|Any CPU
{36ABBF1C-66E1-4577-828A-619A2EF0DAE9}.Release|x64.ActiveCfg = Release|x64
{36ABBF1C-66E1-4577-828A-619A2EF0DAE9}.Release|x64.Build.0 = Release|x64
{36ABBF1C-66E1-4577-828A-619A2EF0DAE9}.Release|x86.ActiveCfg = Release|x86
{36ABBF1C-66E1-4577-828A-619A2EF0DAE9}.Release|x86.Build.0 = Release|x86
{52C4BA3A-E699-4305-B23F-C9083FD07AB6}.Debug|Any CPU.ActiveCfg = Debug|Win32
{52C4BA3A-E699-4305-B23F-C9083FD07AB6}.Debug|x64.ActiveCfg = Debug|x64
{52C4BA3A-E699-4305-B23F-C9083FD07AB6}.Debug|x64.Build.0 = Debug|x64
{52C4BA3A-E699-4305-B23F-C9083FD07AB6}.Debug|x86.ActiveCfg = Debug|Win32
{52C4BA3A-E699-4305-B23F-C9083FD07AB6}.Debug|x86.Build.0 = Debug|Win32
{52C4BA3A-E699-4305-B23F-C9083FD07AB6}.Libretro|Any CPU.ActiveCfg = Libretro|Win32
{52C4BA3A-E699-4305-B23F-C9083FD07AB6}.Libretro|x64.ActiveCfg = Libretro|x64
{52C4BA3A-E699-4305-B23F-C9083FD07AB6}.Libretro|x64.Build.0 = Libretro|x64
{52C4BA3A-E699-4305-B23F-C9083FD07AB6}.Libretro|x86.ActiveCfg = Libretro|Win32
{52C4BA3A-E699-4305-B23F-C9083FD07AB6}.Libretro|x86.Build.0 = Libretro|Win32
{52C4BA3A-E699-4305-B23F-C9083FD07AB6}.PGO Optimize|Any CPU.ActiveCfg = PGO Optimize|Win32
{52C4BA3A-E699-4305-B23F-C9083FD07AB6}.PGO Optimize|x64.ActiveCfg = PGO Optimize|x64
{52C4BA3A-E699-4305-B23F-C9083FD07AB6}.PGO Optimize|x64.Build.0 = PGO Optimize|x64
{52C4BA3A-E699-4305-B23F-C9083FD07AB6}.PGO Optimize|x86.ActiveCfg = PGO Optimize|Win32
{52C4BA3A-E699-4305-B23F-C9083FD07AB6}.PGO Optimize|x86.Build.0 = PGO Optimize|Win32
{52C4BA3A-E699-4305-B23F-C9083FD07AB6}.PGO Profile|Any CPU.ActiveCfg = PGO Profile|Win32
{52C4BA3A-E699-4305-B23F-C9083FD07AB6}.PGO Profile|x64.ActiveCfg = PGO Profile|x64
{52C4BA3A-E699-4305-B23F-C9083FD07AB6}.PGO Profile|x64.Build.0 = PGO Profile|x64
{52C4BA3A-E699-4305-B23F-C9083FD07AB6}.PGO Profile|x86.ActiveCfg = PGO Profile|Win32
{52C4BA3A-E699-4305-B23F-C9083FD07AB6}.PGO Profile|x86.Build.0 = PGO Profile|Win32
{52C4BA3A-E699-4305-B23F-C9083FD07AB6}.Release|Any CPU.ActiveCfg = Release|Win32
{52C4BA3A-E699-4305-B23F-C9083FD07AB6}.Release|x64.ActiveCfg = Release|x64
{52C4BA3A-E699-4305-B23F-C9083FD07AB6}.Release|x64.Build.0 = Release|x64
{52C4BA3A-E699-4305-B23F-C9083FD07AB6}.Release|x86.ActiveCfg = Release|Win32
{52C4BA3A-E699-4305-B23F-C9083FD07AB6}.Release|x86.Build.0 = Release|Win32
{B609E0A0-5050-4871-91D6-E760633BCDD1}.Debug|Any CPU.ActiveCfg = Debug|Win32
{B609E0A0-5050-4871-91D6-E760633BCDD1}.Debug|x64.ActiveCfg = Debug|x64
{B609E0A0-5050-4871-91D6-E760633BCDD1}.Debug|x64.Build.0 = Debug|x64
{B609E0A0-5050-4871-91D6-E760633BCDD1}.Debug|x86.ActiveCfg = Debug|Win32
{B609E0A0-5050-4871-91D6-E760633BCDD1}.Debug|x86.Build.0 = Debug|Win32
{B609E0A0-5050-4871-91D6-E760633BCDD1}.Libretro|Any CPU.ActiveCfg = Libretro|Win32
{B609E0A0-5050-4871-91D6-E760633BCDD1}.Libretro|x64.ActiveCfg = Libretro|x64
{B609E0A0-5050-4871-91D6-E760633BCDD1}.Libretro|x86.ActiveCfg = Libretro|Win32
{B609E0A0-5050-4871-91D6-E760633BCDD1}.PGO Optimize|Any CPU.ActiveCfg = PGO Optimize|Win32
{B609E0A0-5050-4871-91D6-E760633BCDD1}.PGO Optimize|x64.ActiveCfg = PGO Optimize|x64
{B609E0A0-5050-4871-91D6-E760633BCDD1}.PGO Optimize|x64.Build.0 = PGO Optimize|x64
{B609E0A0-5050-4871-91D6-E760633BCDD1}.PGO Optimize|x86.ActiveCfg = PGO Optimize|Win32
{B609E0A0-5050-4871-91D6-E760633BCDD1}.PGO Optimize|x86.Build.0 = PGO Optimize|Win32
{B609E0A0-5050-4871-91D6-E760633BCDD1}.PGO Profile|Any CPU.ActiveCfg = PGO Profile|Win32
{B609E0A0-5050-4871-91D6-E760633BCDD1}.PGO Profile|x64.ActiveCfg = PGO Profile|x64
{B609E0A0-5050-4871-91D6-E760633BCDD1}.PGO Profile|x64.Build.0 = PGO Profile|x64
{B609E0A0-5050-4871-91D6-E760633BCDD1}.PGO Profile|x86.ActiveCfg = PGO Profile|Win32
{B609E0A0-5050-4871-91D6-E760633BCDD1}.PGO Profile|x86.Build.0 = PGO Profile|Win32
{B609E0A0-5050-4871-91D6-E760633BCDD1}.Release|Any CPU.ActiveCfg = Release|Win32
{B609E0A0-5050-4871-91D6-E760633BCDD1}.Release|x64.ActiveCfg = Release|x64
{B609E0A0-5050-4871-91D6-E760633BCDD1}.Release|x64.Build.0 = Release|x64
{B609E0A0-5050-4871-91D6-E760633BCDD1}.Release|x86.ActiveCfg = Release|Win32
{B609E0A0-5050-4871-91D6-E760633BCDD1}.Release|x86.Build.0 = Release|Win32
{4432139E-528B-44DE-961C-B37CD5E92E0E}.Debug|Any CPU.ActiveCfg = Debug|Win32
{4432139E-528B-44DE-961C-B37CD5E92E0E}.Debug|x64.ActiveCfg = Debug|x64
{4432139E-528B-44DE-961C-B37CD5E92E0E}.Debug|x86.ActiveCfg = Debug|Win32
{4432139E-528B-44DE-961C-B37CD5E92E0E}.Libretro|Any CPU.ActiveCfg = Libretro|Win32
{4432139E-528B-44DE-961C-B37CD5E92E0E}.Libretro|x64.ActiveCfg = Libretro|x64
{4432139E-528B-44DE-961C-B37CD5E92E0E}.Libretro|x64.Build.0 = Libretro|x64
{4432139E-528B-44DE-961C-B37CD5E92E0E}.Libretro|x86.ActiveCfg = Libretro|Win32
{4432139E-528B-44DE-961C-B37CD5E92E0E}.Libretro|x86.Build.0 = Libretro|Win32
{4432139E-528B-44DE-961C-B37CD5E92E0E}.PGO Optimize|Any CPU.ActiveCfg = Release|x64
{4432139E-528B-44DE-961C-B37CD5E92E0E}.PGO Optimize|x64.ActiveCfg = Release|x64
{4432139E-528B-44DE-961C-B37CD5E92E0E}.PGO Optimize|x86.ActiveCfg = Release|Win32
{4432139E-528B-44DE-961C-B37CD5E92E0E}.PGO Profile|Any CPU.ActiveCfg = Release|x64
{4432139E-528B-44DE-961C-B37CD5E92E0E}.PGO Profile|x64.ActiveCfg = Release|x64
{4432139E-528B-44DE-961C-B37CD5E92E0E}.PGO Profile|x86.ActiveCfg = Release|Win32
{4432139E-528B-44DE-961C-B37CD5E92E0E}.Release|Any CPU.ActiveCfg = Release|Win32
{4432139E-528B-44DE-961C-B37CD5E92E0E}.Release|x64.ActiveCfg = Release|x64
{4432139E-528B-44DE-961C-B37CD5E92E0E}.Release|x86.ActiveCfg = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {26BA923A-ECE6-4040-8BA4-C9B43DE004B4}
EndGlobalSection
GlobalSection(Performance) = preSolution
HasPerformanceSessions = true
EndGlobalSection
EndGlobal

17
build.sh Normal file
View file

@ -0,0 +1,17 @@
#!/bin/sh
#This is a build script used for official releases which does not build the UI
#Read the makefile and use "make" to build Mesen normally
if [ "$1" = libretro ]; then
MESENPLATFORM=x64 make clean
LTO=true MESENPLATFORM=x64 make libretro -j 16
MESENPLATFORM=x86 make clean
LTO=true MESENPLATFORM=x86 make libretro -j 16
else
MESENPLATFORM=x64 BUILDTARGET=core ./buildPGO.sh
MESENPLATFORM=x86 BUILDTARGET=core ./buildPGO.sh
cp ./InteropDLL/obj.x64/libMesenCore.x64.dll ./bin/Any\ CPU/PGO\ Profile/Dependencies
cp ./InteropDLL/obj.x86/libMesenCore.x86.dll ./bin/Any\ CPU/PGO\ Profile/Dependencies
fi

66
buildPGO.sh Normal file
View file

@ -0,0 +1,66 @@
#!/bin/sh
# This build is used to compile an instrumented version of the binary, run it, and then optimize the binary with the profiling data.
# LTO is also enabled by default by this script.
# On clang, this results in a +60% speed boost compared to using just "make" (w/o LTO)
#
# Rom files must be copied to the PGOHelper/PGOGames folder beforehand - all *.nes files in that folder will be executed as part of the profiling process.
# Using a variety of roms is recommended (e.g different mappers, etc.)
#
# You can run this script via make:
# For clang, run "make pgo"
# For GCC, run "USE_GCC=true make pgo"
#
# Note: While GCC runs through this script just fine, the runtime performance is pretty terrible (something must be wrong with the way this is built)
#
# This will produce the following binary: bin/x64/Release/Mesen.exe
if [ "$MESENPLATFORM" = x86 ]; then
PLAT="x86"
else
PLAT="x64"
fi
if [ "$BUILDTARGET" = libretro ]; then
TARG="libretro"
else
TARG="core"
fi
OBJ="PGOHelper/obj.${PLAT}/"
FLAGS="LTO=true MESENPLATFORM=${PLAT}"
eval ${FLAGS} make clean
#create instrumented binary
eval ${FLAGS} PGO=profile make ${TARG} -j 16
eval ${FLAGS} PGO=profile make pgohelper -B
eval cp bin/pgohelperlib.so ${OBJ}
#run the instrumented binary
cd ${OBJ}
./pgohelper
cd ..
if [ "$USE_GCC" != true ]; then
#clang-specific steps to convert the profiling data and clean the files
llvm-profdata merge -output=pgo.profdata pgo.profraw
cd ..
eval ${FLAGS} make clean
else
cd ..
fi
if [ "$BUILDTARGET" = "" ]; then
TARG=""
fi
#rebuild using the profiling data to optimize
eval ${FLAGS} PGO=optimize make ${TARG} -j 16 -B
if [ "$USE_GCC" != true ]; then
rm PGOHelper/pgo.profdata
rm PGOHelper/pgo.profraw
else
rm ./*.gcda
fi

173
makefile Normal file
View file

@ -0,0 +1,173 @@
#Welcome to what must be the most terrible makefile ever (but hey, it works)
#Both clang & gcc work fine - clang seems to output faster code
#The only external dependency is SDL2 - everything else is pretty standard.
#Run "make" to build, "make run" to run
#----------------------
#Platform Configuration
#----------------------
#To specify whether you want to build for x86 or x64:
#"MESENPLATFORM=x86 make" or "MESENPLATFORM=x64 make"
#Default is x64
#-----------------------
# Link Time Optimization
#-----------------------
#LTO is supported for clang and gcc (but only seems to help for clang?)
#LTO gives a 25-30% performance boost, so use it whenever you can
#Usage: LTO=true make
MESENFLAGS=
libretro : MESENFLAGS=-D LIBRETRO
ifeq ($(USE_GCC),true)
CPPC=g++
CC=gcc
PROFILE_GEN_FLAG=-fprofile-generate
PROFILE_USE_FLAG=-fprofile-use
else
CPPC=clang++
CC=clang
PROFILE_GEN_FLAG = -fprofile-instr-generate=$(CURDIR)/PGOHelper/pgo.profraw
PROFILE_USE_FLAG = -fprofile-instr-use=$(CURDIR)/PGOHelper/pgo.profdata
endif
GCCOPTIONS=-fPIC -Wall --std=c++14 -O3 $(MESENFLAGS)
CCOPTIONS=-fPIC -Wall -O3 $(MESENFLAGS)
ifeq ($(MESENPLATFORM),x86)
MESENPLATFORM=x86
GCCOPTIONS += -m32
CCOPTIONS += -m32
else
MESENPLATFORM=x64
GCCOPTIONS += -m64
CCOPTIONS += -m64
endif
ifeq ($(LTO),true)
CCOPTIONS += -flto
GCCOPTIONS += -flto
endif
ifeq ($(PGO),profile)
CCOPTIONS += ${PROFILE_GEN_FLAG}
GCCOPTIONS += ${PROFILE_GEN_FLAG}
endif
ifeq ($(PGO),optimize)
CCOPTIONS += ${PROFILE_USE_FLAG}
GCCOPTIONS += ${PROFILE_USE_FLAG}
endif
OBJFOLDER=obj.$(MESENPLATFORM)
SHAREDLIB=libMesenCore.$(MESENPLATFORM).dll
LIBRETROLIB=mesen_libretro.$(MESENPLATFORM).so
RELEASEFOLDER=bin/$(MESENPLATFORM)/Release
COREOBJ=$(patsubst Core/%.cpp,Core/$(OBJFOLDER)/%.o,$(wildcard Core/*.cpp))
UTILOBJ=$(patsubst Utilities/%.cpp,Utilities/$(OBJFOLDER)/%.o,$(wildcard Utilities/*.cpp)) $(patsubst Utilities/HQX/%.cpp,Utilities/$(OBJFOLDER)/%.o,$(wildcard Utilities/HQX/*.cpp)) $(patsubst Utilities/xBRZ/%.cpp,Utilities/$(OBJFOLDER)/%.o,$(wildcard Utilities/xBRZ/*.cpp)) $(patsubst Utilities/KreedSaiEagle/%.cpp,Utilities/$(OBJFOLDER)/%.o,$(wildcard Utilities/KreedSaiEagle/*.cpp)) $(patsubst Utilities/Scale2x/%.cpp,Utilities/$(OBJFOLDER)/%.o,$(wildcard Utilities/Scale2x/*.cpp))
LINUXOBJ=$(patsubst Linux/%.cpp,Linux/$(OBJFOLDER)/%.o,$(wildcard Linux/*.cpp))
SEVENZIPOBJ=$(patsubst SevenZip/%.c,SevenZip/$(OBJFOLDER)/%.o,$(wildcard SevenZip/*.c))
LUAOBJ=$(patsubst Lua/%.c,Lua/$(OBJFOLDER)/%.o,$(wildcard Lua/*.c))
ifeq ($(SYSTEM_LIBEVDEV), true)
LIBEVDEVLIB=$(shell pkg-config --libs libevdev)
LIBEVDEVINC=$(shell pkg-config --cflags libevdev)
else
LIBEVDEVOBJ=$(patsubst Linux/libevdev/%.c,Linux/$(OBJFOLDER)/%.o,$(wildcard Linux/libevdev/*.c))
LIBEVDEVINC=-I../
endif
SDL2LIB=$(shell sdl2-config --libs)
SDL2INC=$(shell sdl2-config --cflags)
FSLIB=-lstdc++fs
all: ui
ui: InteropDLL/$(OBJFOLDER)/$(SHAREDLIB)
mkdir -p $(RELEASEFOLDER)/Dependencies
rm -fr $(RELEASEFOLDER)/Dependencies/*
cd UpdateHelper && msbuild /property:Configuration="Release" /property:Platform="AnyCPU"
cp "bin/Any CPU/Release/MesenUpdater.exe" $(RELEASEFOLDER)/Dependencies/
cp -r GUI.NET/Dependencies/* $(RELEASEFOLDER)/Dependencies/
cp InteropDLL/$(OBJFOLDER)/$(SHAREDLIB) $(RELEASEFOLDER)/Dependencies/$(SHAREDLIB)
cd $(RELEASEFOLDER)/Dependencies && zip -r ../Dependencies.zip *
cd GUI.NET && msbuild /property:Configuration="Release" /property:Platform="$(MESENPLATFORM)" /property:PreBuildEvent="" '/property:DefineConstants="HIDETESTMENU;DISABLEAUTOUPDATE"' /property:CodeAnalysisRuleSet=""
libretro: Libretro/$(OBJFOLDER)/$(LIBRETROLIB)
mkdir -p bin
cp ./Libretro/$(OBJFOLDER)/$(LIBRETROLIB) ./bin/
core: InteropDLL/$(OBJFOLDER)/$(SHAREDLIB)
runtests:
cd TestHelper/$(OBJFOLDER) && ./testhelper
rungametests:
cd TestHelper/$(OBJFOLDER) && ./testhelper ~/Mesen/TestGames
testhelper: InteropDLL/$(OBJFOLDER)/$(SHAREDLIB)
mkdir -p TestHelper/$(OBJFOLDER)
$(CPPC) $(GCCOPTIONS) -Wl,-z,defs -o testhelper TestHelper/*.cpp InteropDLL/ConsoleWrapper.cpp $(SEVENZIPOBJ) $(LUAOBJ) $(LINUXOBJ) $(LIBEVDEVOBJ) $(UTILOBJ) $(COREOBJ) -pthread $(FSLIB) $(SDL2LIB) $(LIBEVDEVLIB)
mv testhelper TestHelper/$(OBJFOLDER)
pgohelper:
mkdir -p PGOHelper/$(OBJFOLDER) && cd PGOHelper/$(OBJFOLDER) && $(CPPC) $(GCCOPTIONS) -Wl,-z,defs -o pgohelper ../PGOHelper.cpp ../../bin/pgohelperlib.so -pthread $(FSLIB) $(SDL2LIB) $(LIBEVDEVLIB)
SevenZip/$(OBJFOLDER)/%.o: SevenZip/%.c
mkdir -p SevenZip/$(OBJFOLDER) && cd SevenZip/$(OBJFOLDER) && $(CC) $(CCOPTIONS) -c $(patsubst SevenZip/%, ../%, $<)
Lua/$(OBJFOLDER)/%.o: Lua/%.c
mkdir -p Lua/$(OBJFOLDER) && cd Lua/$(OBJFOLDER) && $(CC) $(CCOPTIONS) -c $(patsubst Lua/%, ../%, $<)
Utilities/$(OBJFOLDER)/%.o: Utilities/%.cpp
mkdir -p Utilities/$(OBJFOLDER) && cd Utilities/$(OBJFOLDER) && $(CPPC) $(GCCOPTIONS) -c $(patsubst Utilities/%, ../%, $<)
Utilities/$(OBJFOLDER)/%.o: Utilities/HQX/%.cpp
mkdir -p Utilities/$(OBJFOLDER) && cd Utilities/$(OBJFOLDER) && $(CPPC) $(GCCOPTIONS) -c $(patsubst Utilities/%, ../%, $<)
Utilities/$(OBJFOLDER)/%.o: Utilities/xBRZ/%.cpp
mkdir -p Utilities/$(OBJFOLDER) && cd Utilities/$(OBJFOLDER) && $(CPPC) $(GCCOPTIONS) -c $(patsubst Utilities/%, ../%, $<)
Utilities/$(OBJFOLDER)/%.o: Utilities/KreedSaiEagle/%.cpp
mkdir -p Utilities/$(OBJFOLDER) && cd Utilities/$(OBJFOLDER) && $(CPPC) $(GCCOPTIONS) -c $(patsubst Utilities/%, ../%, $<)
Utilities/$(OBJFOLDER)/%.o: Utilities/Scale2x/%.cpp
mkdir -p Utilities/$(OBJFOLDER) && cd Utilities/$(OBJFOLDER) && $(CPPC) $(GCCOPTIONS) -c $(patsubst Utilities/%, ../%, $<)
Core/$(OBJFOLDER)/%.o: Core/%.cpp
mkdir -p Core/$(OBJFOLDER) && cd Core/$(OBJFOLDER) && $(CPPC) $(GCCOPTIONS) -c $(patsubst Core/%, ../%, $<)
Linux/$(OBJFOLDER)/%.o: Linux/%.cpp
mkdir -p Linux/$(OBJFOLDER) && cd Linux/$(OBJFOLDER) && $(CPPC) $(GCCOPTIONS) -c $(patsubst Linux/%, ../%, $<) $(SDL2INC) $(LIBEVDEVINC)
Linux/$(OBJFOLDER)/%.o: Linux/libevdev/%.c
mkdir -p Linux/$(OBJFOLDER) && cd Linux/$(OBJFOLDER) && $(CC) $(CCOPTIONS) -c $(patsubst Linux/%, ../%, $<)
InteropDLL/$(OBJFOLDER)/$(SHAREDLIB): $(SEVENZIPOBJ) $(LUAOBJ) $(UTILOBJ) $(COREOBJ) $(LIBEVDEVOBJ) $(LINUXOBJ) InteropDLL/ConsoleWrapper.cpp InteropDLL/DebugWrapper.cpp
mkdir -p InteropDLL/$(OBJFOLDER)
$(CPPC) $(GCCOPTIONS) -Wl,-z,defs -shared -o $(SHAREDLIB) InteropDLL/*.cpp $(SEVENZIPOBJ) $(LUAOBJ) $(LINUXOBJ) $(LIBEVDEVOBJ) $(UTILOBJ) $(COREOBJ) $(SDL2INC) -pthread $(FSLIB) $(SDL2LIB) $(LIBEVDEVLIB)
cp $(SHAREDLIB) bin/pgohelperlib.so
mv $(SHAREDLIB) InteropDLL/$(OBJFOLDER)
Libretro/$(OBJFOLDER)/$(LIBRETROLIB): $(SEVENZIPOBJ) $(UTILOBJ) $(COREOBJ) $(LUAOBJ) Libretro/libretro.cpp
mkdir -p Libretro/$(OBJFOLDER)
$(CPPC) $(GCCOPTIONS) -Wl,-z,defs -shared -o $(LIBRETROLIB) Libretro/*.cpp $(SEVENZIPOBJ) $(UTILOBJ) $(COREOBJ) $(LUAOBJ) -pthread $(FSLIB)
cp $(LIBRETROLIB) bin/pgohelperlib.so
mv $(LIBRETROLIB) Libretro/$(OBJFOLDER)
pgo:
./buildPGO.sh
official:
./build.sh
debug:
MONO_LOG_LEVEL=debug mono $(RELEASEFOLDER)/Mesen.exe
run:
mono $(RELEASEFOLDER)/Mesen.exe
clean:
rm -rf Lua/$(OBJFOLDER)
rm -rf SevenZip/$(OBJFOLDER)
rm -rf Utilities/$(OBJFOLDER)
rm -rf Core/$(OBJFOLDER)
rm -rf Linux/$(OBJFOLDER)
rm -rf InteropDLL/$(OBJFOLDER)
rm -rf Libretro/$(OBJFOLDER)
rm -rf TestHelper/$(OBJFOLDER)
rm -rf PGOHelper/$(OBJFOLDER)
rm -rf $(RELEASEFOLDER)