mirror of https://github.com/PCSX2/pcsx2.git
wxgui: sync with trunk (boooring)
git-svn-id: http://pcsx2.googlecode.com/svn/branches/wxgui@1660 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
commit
e25db2a0ba
|
@ -0,0 +1,21 @@
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ImportGroup Label="PropertySheets" />
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<_PropertySheetDisplayName>pthreads</_PropertySheetDisplayName>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup>
|
||||||
|
<Link>
|
||||||
|
<AdditionalDependencies>ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
</Link>
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalIncludeDirectories>.\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>PTW32_BUILD;__CLEANUP_SEH;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
|
<PrecompiledHeaderFile>ptw32pch.h</PrecompiledHeaderFile>
|
||||||
|
<ExceptionHandling>Async</ExceptionHandling>
|
||||||
|
</ClCompile>
|
||||||
|
<Lib />
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup />
|
||||||
|
</Project>
|
|
@ -0,0 +1,150 @@
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="4.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="Devel|Win32">
|
||||||
|
<Configuration>Devel</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectName>w32pthreads</ProjectName>
|
||||||
|
<ProjectGUID>{26511268-2902-4997-8421-ECD7055F9E28}</ProjectGUID>
|
||||||
|
<RootNamespace>pthreads</RootNamespace>
|
||||||
|
<Keyword>Win32Proj</Keyword>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets">
|
||||||
|
<Import Project="$(LocalAppData)\Microsoft\VisualStudio\10.0\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(LocalAppData)\Microsoft\VisualStudio\10.0\Microsoft.Cpp.$(Platform).user.props')" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<Import Project="..\..\common\vsprops\common.props" />
|
||||||
|
<Import Project="..\..\common\vsprops\debug.props" />
|
||||||
|
<Import Project="pthreads.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<Import Project="..\..\common\vsprops\common.props" />
|
||||||
|
<Import Project="..\..\common\vsprops\release.props" />
|
||||||
|
<Import Project="pthreads.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">
|
||||||
|
<Import Project="..\..\common\vsprops\common.props" />
|
||||||
|
<Import Project="..\..\common\vsprops\devel.props" />
|
||||||
|
<Import Project="pthreads.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<_ProjectFileVersion>10.0.20506.1</_ProjectFileVersion>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<PrecompiledHeader>
|
||||||
|
</PrecompiledHeader>
|
||||||
|
<CompileAs>CompileAsC</CompileAs>
|
||||||
|
</ClCompile>
|
||||||
|
<Link />
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<PrecompiledHeader>
|
||||||
|
</PrecompiledHeader>
|
||||||
|
<CompileAs>CompileAsC</CompileAs>
|
||||||
|
</ClCompile>
|
||||||
|
<Link />
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<PrecompiledHeader>
|
||||||
|
</PrecompiledHeader>
|
||||||
|
<CompileAs>CompileAsC</CompileAs>
|
||||||
|
</ClCompile>
|
||||||
|
<Link />
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="attr.c" />
|
||||||
|
<ClCompile Include="barrier.c" />
|
||||||
|
<ClCompile Include="cancel.c" />
|
||||||
|
<ClCompile Include="cleanup.c" />
|
||||||
|
<ClCompile Include="condvar.c">
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">true</ExcludedFromBuild>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="create.c" />
|
||||||
|
<ClCompile Include="dll.c" />
|
||||||
|
<ClCompile Include="errno.c" />
|
||||||
|
<ClCompile Include="exit.c" />
|
||||||
|
<ClCompile Include="fork.c" />
|
||||||
|
<ClCompile Include="global.c" />
|
||||||
|
<ClCompile Include="misc.c" />
|
||||||
|
<ClCompile Include="mutex.c" />
|
||||||
|
<ClCompile Include="nonportable.c" />
|
||||||
|
<ClCompile Include="private.c" />
|
||||||
|
<ClCompile Include="ptw32pch.c">
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">ptw32pch.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)ptw32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">ptw32pch.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)ptw32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">Create</PrecompiledHeader>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">ptw32pch.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">$(IntDir)ptw32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="rwlock.c">
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">true</ExcludedFromBuild>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="sched.c" />
|
||||||
|
<ClCompile Include="semaphore.c" />
|
||||||
|
<ClCompile Include="signal.c" />
|
||||||
|
<ClCompile Include="spin.c" />
|
||||||
|
<ClCompile Include="sync.c" />
|
||||||
|
<ClCompile Include="tsd.c" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="ANNOUNCE" />
|
||||||
|
<None Include="BUGS" />
|
||||||
|
<None Include="CONTRIBUTORS" />
|
||||||
|
<None Include="COPYING" />
|
||||||
|
<None Include="FAQ" />
|
||||||
|
<None Include="MAINTAINERS" />
|
||||||
|
<None Include="NEWS" />
|
||||||
|
<None Include="PCSX2.txt" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="config.h" />
|
||||||
|
<ClInclude Include="include\implement.h" />
|
||||||
|
<ClInclude Include="include\need_errno.h" />
|
||||||
|
<ClInclude Include="include\pthread.h" />
|
||||||
|
<ClInclude Include="include\sched.h" />
|
||||||
|
<ClInclude Include="include\semaphore.h" />
|
||||||
|
<ClInclude Include="ptw32pch.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
|
@ -0,0 +1,137 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="Docs">
|
||||||
|
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||||
|
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Header Files">
|
||||||
|
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||||
|
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Source Files">
|
||||||
|
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||||
|
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="attr.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="barrier.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="cancel.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="cleanup.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="condvar.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="create.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="dll.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="errno.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="exit.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="fork.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="global.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="misc.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="mutex.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="nonportable.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="private.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="ptw32pch.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="rwlock.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="sched.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="semaphore.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="signal.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="spin.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="sync.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="tsd.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="ANNOUNCE">
|
||||||
|
<Filter>Docs</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="BUGS">
|
||||||
|
<Filter>Docs</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="CONTRIBUTORS">
|
||||||
|
<Filter>Docs</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="COPYING">
|
||||||
|
<Filter>Docs</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="FAQ">
|
||||||
|
<Filter>Docs</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="MAINTAINERS">
|
||||||
|
<Filter>Docs</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="NEWS">
|
||||||
|
<Filter>Docs</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="PCSX2.txt">
|
||||||
|
<Filter>Docs</Filter>
|
||||||
|
</None>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="config.h">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="include\implement.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="include\need_errno.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="include\pthread.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="include\sched.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="include\semaphore.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="ptw32pch.h">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
|
@ -0,0 +1,97 @@
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="4.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="Devel|Win32">
|
||||||
|
<Configuration>Devel</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectGUID>{2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}</ProjectGUID>
|
||||||
|
<RootNamespace>zlib</RootNamespace>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets">
|
||||||
|
<Import Project="$(LocalAppData)\Microsoft\VisualStudio\10.0\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(LocalAppData)\Microsoft\VisualStudio\10.0\Microsoft.Cpp.$(Platform).user.props')" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<Import Project="..\..\common\vsprops\common.props" />
|
||||||
|
<Import Project="..\..\common\vsprops\debug.props" />
|
||||||
|
<Import Project="..\..\common\vsprops\lib.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<Import Project="..\..\common\vsprops\common.props" />
|
||||||
|
<Import Project="..\..\common\vsprops\release.props" />
|
||||||
|
<Import Project="..\..\common\vsprops\lib.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">
|
||||||
|
<Import Project="..\..\common\vsprops\common.props" />
|
||||||
|
<Import Project="..\..\common\vsprops\devel.props" />
|
||||||
|
<Import Project="..\..\common\vsprops\lib.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<_ProjectFileVersion>10.0.20506.1</_ProjectFileVersion>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<ClCompile />
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<ClCompile />
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">
|
||||||
|
<ClCompile />
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="crc32.h" />
|
||||||
|
<ClInclude Include="deflate.h" />
|
||||||
|
<ClInclude Include="inffast.h" />
|
||||||
|
<ClInclude Include="inffixed.h" />
|
||||||
|
<ClInclude Include="inflate.h" />
|
||||||
|
<ClInclude Include="inftrees.h" />
|
||||||
|
<ClInclude Include="trees.h" />
|
||||||
|
<ClInclude Include="zconf.h" />
|
||||||
|
<ClInclude Include="zlib.h" />
|
||||||
|
<ClInclude Include="zutil.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="adler32.c" />
|
||||||
|
<ClCompile Include="compress.c" />
|
||||||
|
<ClCompile Include="crc32.c" />
|
||||||
|
<ClCompile Include="deflate.c" />
|
||||||
|
<ClCompile Include="gzio.c" />
|
||||||
|
<ClCompile Include="infback.c" />
|
||||||
|
<ClCompile Include="inffast.c" />
|
||||||
|
<ClCompile Include="inflate.c" />
|
||||||
|
<ClCompile Include="inftrees.c" />
|
||||||
|
<ClCompile Include="trees.c" />
|
||||||
|
<ClCompile Include="uncompr.c" />
|
||||||
|
<ClCompile Include="zutil.c" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
|
@ -0,0 +1,87 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="Header Files">
|
||||||
|
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||||
|
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Resource Files">
|
||||||
|
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||||
|
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Source Files">
|
||||||
|
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||||
|
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="crc32.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="deflate.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="inffast.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="inffixed.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="inflate.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="inftrees.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="trees.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="zconf.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="zlib.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="zutil.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="adler32.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="compress.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="crc32.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="deflate.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="gzio.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="infback.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="inffast.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="inflate.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="inftrees.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="trees.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="uncompr.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="zutil.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
|
@ -1,12 +1,12 @@
|
||||||
-- clean_msvc.cmd
|
:: clean_msvc.cmd
|
||||||
--
|
::
|
||||||
-- This batch file cleans up some files that MSVC's Clean/Rebuild commands tend to miss.
|
:: This batch file cleans up some files that MSVC's Clean/Rebuild commands tend to miss.
|
||||||
-- In particular the .ilk and .pdb files are known to get corrupted and cause all sorts of odd
|
:: In particular the .ilk and .pdb files are known to get corrupted and cause all sorts of odd
|
||||||
-- linker errors, and the .ncb files can also get corrupted and cause intellisense breakges.
|
:: linker errors, and the .ncb files can also get corrupted and cause intellisense breakges.
|
||||||
--
|
::
|
||||||
-- Safety: This tool should be pretty safe. None of the files it deletes are important. That
|
:: Safety: This tool should be pretty safe. None of the files it deletes are important. That
|
||||||
-- is, they're all files MSVC just rebuilds automatically next time you run/recompile. But even
|
:: is, they're all files MSVC just rebuilds automatically next time you run/recompile. But even
|
||||||
-- so, don't go running this batch file in your root c:\ folder. It's probably not a wise action.
|
:: so, don't go running this batch file in your root c:\ folder. It's probably not a wise action.
|
||||||
-- Enjoy. :)
|
:: Enjoy. :)
|
||||||
|
|
||||||
del /s *.ncb;*.ilk;*.pdb;*.bsc;*.sbr
|
del /s *.ncb;*.ilk;*.pdb;*.bsc;*.sbr
|
|
@ -92,7 +92,7 @@ class xImpl_iMul : public ImplMulDivBase<G3Type_iMUL,0x59>
|
||||||
{
|
{
|
||||||
xOpWrite0F( (sizeof(ImmType) == 2) ? 0x66 : 0, is_s8( imm8 ) ? 0x6b : 0x69, param1, param2 );
|
xOpWrite0F( (sizeof(ImmType) == 2) ? 0x66 : 0, is_s8( imm8 ) ? 0x6b : 0x69, param1, param2 );
|
||||||
if( is_s8( imm8 ) )
|
if( is_s8( imm8 ) )
|
||||||
xWrite8( imm8 );
|
xWrite8( (u8)imm8 );
|
||||||
else
|
else
|
||||||
xWrite<ImmType>( imm8 );
|
xWrite<ImmType>( imm8 );
|
||||||
}
|
}
|
||||||
|
|
|
@ -95,7 +95,7 @@ static void SetSingleAffinity()
|
||||||
if( availProcCpus & (1<<i) ) break;
|
if( availProcCpus & (1<<i) ) break;
|
||||||
}
|
}
|
||||||
|
|
||||||
HANDLE s_threadId = GetCurrentThread();
|
s_threadId = GetCurrentThread();
|
||||||
s_oldmask = SetThreadAffinityMask( s_threadId, (1UL<<i) );
|
s_oldmask = SetThreadAffinityMask( s_threadId, (1UL<<i) );
|
||||||
|
|
||||||
if( s_oldmask == ERROR_INVALID_PARAMETER )
|
if( s_oldmask == ERROR_INVALID_PARAMETER )
|
||||||
|
|
|
@ -0,0 +1,43 @@
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ImportGroup Label="PropertySheets" />
|
||||||
|
<PropertyGroup Label="UserMacros">
|
||||||
|
<SSEtype>
|
||||||
|
</SSEtype>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<_PropertySheetDisplayName>common</_PropertySheetDisplayName>
|
||||||
|
<OutDir>$(SolutionDir)bin\$(PcsxSubsection)</OutDir>
|
||||||
|
<IntDir>$(Platform)\$(Configuration)\</IntDir>
|
||||||
|
<TargetName>$(ProjectName)</TargetName>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup>
|
||||||
|
<ClCompile>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
|
<RuntimeTypeInfo>false</RuntimeTypeInfo>
|
||||||
|
<StructMemberAlignment>16Bytes</StructMemberAlignment>
|
||||||
|
<DisableSpecificWarnings>4512;4996</DisableSpecificWarnings>
|
||||||
|
<AdditionalIncludeDirectories>"$(SolutionDir)3rdparty";"$(SolutionDir)3rdparty\w32pthreads\include";"$(SolutionDir)common\include";%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>WIN32;_WIN32;_WIN32;__WIN32__;_WINDOWS;ENABLE_NLS;PACKAGE="pcsx2";TIXML_USE_STL;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<RandomizedBaseAddress>false</RandomizedBaseAddress>
|
||||||
|
<AdditionalLibraryDirectories>"$(SolutionDir)deps\$(Platform)\$(Configuration)";%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
<ImportLibrary>$(SolutionDir)deps\$(Platform)\$(Configuration)\$(ProjectName).lib</ImportLibrary>
|
||||||
|
</Link>
|
||||||
|
<ResourceCompile>
|
||||||
|
<AdditionalIncludeDirectories>$(SolutionDir)common\include</AdditionalIncludeDirectories>
|
||||||
|
</ResourceCompile>
|
||||||
|
<Manifest />
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<BuildMacro Include="SSEtype">
|
||||||
|
<Value>$(SSEtype)</Value>
|
||||||
|
</BuildMacro>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
|
@ -0,0 +1,17 @@
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ImportGroup Label="PropertySheets" />
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<_PropertySheetDisplayName>debug</_PropertySheetDisplayName>
|
||||||
|
<LinkIncremental>true</LinkIncremental>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup>
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<PreprocessorDefinitions>PCSX2_DEBUG;PCSX2_DEVBUILD;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||||
|
<BufferSecurityCheck>true</BufferSecurityCheck>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup />
|
||||||
|
</Project>
|
|
@ -0,0 +1,23 @@
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ImportGroup Label="PropertySheets" />
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<_PropertySheetDisplayName>devel</_PropertySheetDisplayName>
|
||||||
|
<LinkIncremental>true</LinkIncremental>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup>
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>MaxSpeed</Optimization>
|
||||||
|
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
|
||||||
|
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||||
|
<PreprocessorDefinitions>PCSX2_DEVBUILD;NDEBUG;_SECURE_SCL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<StringPooling>true</StringPooling>
|
||||||
|
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||||
|
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||||
|
<FloatingPointModel>Fast</FloatingPointModel>
|
||||||
|
<FloatingPointExceptions>false</FloatingPointExceptions>
|
||||||
|
</ClCompile>
|
||||||
|
<Link />
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup />
|
||||||
|
</Project>
|
|
@ -0,0 +1,18 @@
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ImportGroup Label="PropertySheets" />
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<_PropertySheetDisplayName>lib</_PropertySheetDisplayName>
|
||||||
|
<OutDir>$(SolutionDir)deps\$(Platform)\$(Configuration)\</OutDir>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup>
|
||||||
|
<Link>
|
||||||
|
<ImportLibrary>
|
||||||
|
</ImportLibrary>
|
||||||
|
</Link>
|
||||||
|
<ClCompile>
|
||||||
|
<PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup />
|
||||||
|
</Project>
|
|
@ -0,0 +1,18 @@
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ImportGroup Label="PropertySheets" />
|
||||||
|
<PropertyGroup Label="UserMacros">
|
||||||
|
<PcsxSubsection>plugins\</PcsxSubsection>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<_PropertySheetDisplayName>plugin</_PropertySheetDisplayName>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup>
|
||||||
|
<Link>
|
||||||
|
<ImportLibrary>
|
||||||
|
</ImportLibrary>
|
||||||
|
</Link>
|
||||||
|
<ClCompile>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup />
|
||||||
|
</Project>
|
|
@ -1,4 +1,6 @@
|
||||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ImportGroup Label="PropertySheets" />
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<_PropertySheetDisplayName>release</_PropertySheetDisplayName>
|
<_PropertySheetDisplayName>release</_PropertySheetDisplayName>
|
||||||
<LinkIncremental>false</LinkIncremental>
|
<LinkIncremental>false</LinkIncremental>
|
||||||
|
@ -7,7 +9,6 @@
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<Optimization>MaxSpeed</Optimization>
|
<Optimization>MaxSpeed</Optimization>
|
||||||
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
|
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
|
||||||
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||||
<OmitFramePointers>true</OmitFramePointers>
|
<OmitFramePointers>true</OmitFramePointers>
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
@ -15,10 +16,16 @@
|
||||||
<StringPooling>true</StringPooling>
|
<StringPooling>true</StringPooling>
|
||||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||||
|
<FloatingPointModel>Fast</FloatingPointModel>
|
||||||
|
<FloatingPointExceptions>false</FloatingPointExceptions>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
</Link>
|
</Link>
|
||||||
|
<Lib>
|
||||||
|
<LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>
|
||||||
|
</Lib>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup />
|
||||||
</Project>
|
</Project>
|
|
@ -3,7 +3,7 @@
|
||||||
<SSEtype>SSSE3</SSEtype>
|
<SSEtype>SSSE3</SSEtype>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<_PropertySheetDisplayName>sse3</_PropertySheetDisplayName>
|
<_PropertySheetDisplayName>ssse3</_PropertySheetDisplayName>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemDefinitionGroup>
|
<ItemDefinitionGroup>
|
||||||
<ClCompile>
|
<ClCompile>
|
|
@ -1101,8 +1101,9 @@ static void cdvdWrite04(u8 rt) { // NCOMMAND
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case N_CD_READ: // CdRead
|
case N_CD_READ: // CdRead
|
||||||
cdvd.SeekToSector = *(uint*)(cdvd.Param+0);
|
// Assign the seek to sector based on cdvd.Param[0]-[3], and the number of sectors based on cdvd.Param[4]-[7].
|
||||||
cdvd.nSectors = *(int*)(cdvd.Param+4);
|
cdvd.SeekToSector = *(u32*) (cdvd.Param+0);
|
||||||
|
cdvd.nSectors = *(u32*)(cdvd.Param+4);
|
||||||
cdvd.RetryCnt = (cdvd.Param[8] == 0) ? 0x100 : cdvd.Param[8];
|
cdvd.RetryCnt = (cdvd.Param[8] == 0) ? 0x100 : cdvd.Param[8];
|
||||||
cdvd.SpindlCtrl = cdvd.Param[9];
|
cdvd.SpindlCtrl = cdvd.Param[9];
|
||||||
cdvd.Speed = 24;
|
cdvd.Speed = 24;
|
||||||
|
@ -1136,8 +1137,9 @@ static void cdvdWrite04(u8 rt) { // NCOMMAND
|
||||||
|
|
||||||
case N_CD_READ_CDDA: // CdReadCDDA
|
case N_CD_READ_CDDA: // CdReadCDDA
|
||||||
case N_CD_READ_XCDDA: // CdReadXCDDA
|
case N_CD_READ_XCDDA: // CdReadXCDDA
|
||||||
cdvd.SeekToSector = *(int*)(cdvd.Param+0);
|
// Assign the seek to sector based on cdvd.Param[0]-[3], and the number of sectors based on cdvd.Param[4]-[7].
|
||||||
cdvd.nSectors = *(int*)(cdvd.Param+4);
|
cdvd.SeekToSector = *(u32*) (cdvd.Param+0);
|
||||||
|
cdvd.nSectors = *(u32*)(cdvd.Param+4);
|
||||||
|
|
||||||
if (cdvd.Param[8] == 0)
|
if (cdvd.Param[8] == 0)
|
||||||
cdvd.RetryCnt = 0x100;
|
cdvd.RetryCnt = 0x100;
|
||||||
|
@ -1182,8 +1184,9 @@ static void cdvdWrite04(u8 rt) { // NCOMMAND
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case N_DVD_READ: // DvdRead
|
case N_DVD_READ: // DvdRead
|
||||||
cdvd.SeekToSector = *(int*)(cdvd.Param+0);
|
// Assign the seek to sector based on cdvd.Param[0]-[3], and the number of sectors based on cdvd.Param[4]-[7].
|
||||||
cdvd.nSectors = *(int*)(cdvd.Param+4);
|
cdvd.SeekToSector = *(u32*) (cdvd.Param+0);
|
||||||
|
cdvd.nSectors = *(u32*)(cdvd.Param+4);
|
||||||
|
|
||||||
if (cdvd.Param[8] == 0)
|
if (cdvd.Param[8] == 0)
|
||||||
cdvd.RetryCnt = 0x100;
|
cdvd.RetryCnt = 0x100;
|
||||||
|
|
|
@ -476,7 +476,7 @@ s32 CALLBACK NODISCdummyS32()
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CALLBACK NODISCnewDiskCB(void(CALLBACK*)())
|
void CALLBACK NODISCnewDiskCB(__unused void (*callback)())
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -387,7 +387,7 @@ void CALLBACK ISOnewDiskCB(void(CALLBACK*)())
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
wxString ISOgetUniqueFilename()
|
wxString ISOgetUniqueFilename(__unused void (*callback)())
|
||||||
{
|
{
|
||||||
return Path::GetFilenameWithoutExt(wxString::FromAscii(isoFileName));
|
return Path::GetFilenameWithoutExt(wxString::FromAscii(isoFileName));
|
||||||
}
|
}
|
||||||
|
|
|
@ -137,6 +137,11 @@ struct Elf32_Rel {
|
||||||
char args[256]="ez.m2v"; //to be accessed by other files
|
char args[256]="ez.m2v"; //to be accessed by other files
|
||||||
uptr args_ptr; //a big value; in fact, it is an address
|
uptr args_ptr; //a big value; in fact, it is an address
|
||||||
|
|
||||||
|
static bool isEmpty(int addr)
|
||||||
|
{
|
||||||
|
return ((PS2MEM_BASE[addr] == 0) || (PS2MEM_BASE[addr] == 32));
|
||||||
|
}
|
||||||
|
|
||||||
//in a0 is passed the address of the command line args,
|
//in a0 is passed the address of the command line args,
|
||||||
//i.e. a pointer to an area like this:
|
//i.e. a pointer to an area like this:
|
||||||
//+00 unknown/unused
|
//+00 unknown/unused
|
||||||
|
@ -148,19 +153,30 @@ uptr args_ptr; //a big value; in fact, it is an address
|
||||||
//+08+4*argc the program name(first param) <--
|
//+08+4*argc the program name(first param) <--
|
||||||
//+08+4*argc+strlen(argv[0]+1) the rest of params; i.e. a copy of 'args'
|
//+08+4*argc+strlen(argv[0]+1) the rest of params; i.e. a copy of 'args'
|
||||||
// see above 'char args[256];'
|
// see above 'char args[256];'
|
||||||
|
|
||||||
|
// The results of this function will normally be that it finds an arg at 13 chars, and another at 0.
|
||||||
|
// It'd probably be easier to 0 out all 256 chars, split args, copy all the arguments in, and note
|
||||||
|
// the locations of each split... --arcum42
|
||||||
|
|
||||||
static uint parseCommandLine( const wxString& filename )
|
static uint parseCommandLine( const wxString& filename )
|
||||||
{
|
{
|
||||||
if ( ( args_ptr != 0xFFFFFFFF ) && ( args_ptr > 264 ) )
|
if ( ( args_ptr != 0xFFFFFFFF ) && ( args_ptr > (4 + 4 + 256) ) )
|
||||||
{ // 4 + 4 + 256
|
{
|
||||||
const char *p;
|
const char *p;
|
||||||
int argc;
|
int argc, i, ret = 0;
|
||||||
int i;
|
u32 args_end;
|
||||||
|
|
||||||
args_ptr -= 256;
|
args_ptr -= 256;
|
||||||
|
|
||||||
args[ 255 ] = 0;
|
args[ 255 ] = 0;
|
||||||
memcpy( &PS2MEM_BASE[ args_ptr ], args, 256 ); //params 1, 2, etc copied
|
|
||||||
|
// Copy the parameters into the section of memory at args_ptr,
|
||||||
|
// then zero out anything past the end of args till 256 chars is reached.
|
||||||
|
memcpy( &PS2MEM_BASE[ args_ptr ], args, 256 );
|
||||||
memset( &PS2MEM_BASE[ args_ptr + strlen( args ) ], 0, 256 - strlen( args ) );
|
memset( &PS2MEM_BASE[ args_ptr + strlen( args ) ], 0, 256 - strlen( args ) );
|
||||||
|
args_end = args_ptr + strlen( args );
|
||||||
|
|
||||||
|
// Set p to just the filename, no path.
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
p = strrchr( filename, '\\' );
|
p = strrchr( filename, '\\' );
|
||||||
#else //linux
|
#else //linux
|
||||||
|
@ -172,45 +188,52 @@ static uint parseCommandLine( const wxString& filename )
|
||||||
else
|
else
|
||||||
p = filename;
|
p = filename;
|
||||||
|
|
||||||
|
|
||||||
args_ptr -= strlen( p ) + 1;
|
args_ptr -= strlen( p ) + 1;
|
||||||
|
|
||||||
strcpy( (char*)&PS2MEM_BASE[ args_ptr ], p ); //fill param 0; i.e. name of the program
|
//fill param 0; i.e. name of the program
|
||||||
|
strcpy( (char*)&PS2MEM_BASE[ args_ptr ], p );
|
||||||
|
|
||||||
for ( i = strlen( p ) + 1 + 256, argc = 0; i > 0; i-- )
|
// Start from the end of where we wrote to, not including all the zero'd out area.
|
||||||
|
for ( i = args_end - args_ptr + 1, argc = 0; i > 0; i-- )
|
||||||
{
|
{
|
||||||
while (i && ((PS2MEM_BASE[ args_ptr + i ] == 0) || (PS2MEM_BASE[ args_ptr + i ] == 32)))
|
while (i && isEmpty(args_ptr + i )) { i--; }
|
||||||
{ i--; }
|
|
||||||
|
|
||||||
|
// If the last char is a space, set it to 0.
|
||||||
if ( PS2MEM_BASE[ args_ptr + i + 1 ] == ' ') PS2MEM_BASE[ args_ptr + i + 1 ] = 0;
|
if ( PS2MEM_BASE[ args_ptr + i + 1 ] == ' ') PS2MEM_BASE[ args_ptr + i + 1 ] = 0;
|
||||||
|
|
||||||
while (i && (PS2MEM_BASE[ args_ptr + i ] != 0) && (PS2MEM_BASE[ args_ptr + i] != 32))
|
while (i && !isEmpty(args_ptr + i )) { i--; }
|
||||||
{ i--; }
|
|
||||||
|
|
||||||
if ((PS2MEM_BASE[ args_ptr + i ] != 0) && (PS2MEM_BASE[ args_ptr + i ] != 32))
|
// Now that we've gone back a word, increase the number of arguments,
|
||||||
{ //i==0
|
// and mark the location of the argument.
|
||||||
|
if (!isEmpty(args_ptr + i )) // i <= 0
|
||||||
|
{
|
||||||
|
// If the spot we are on is not a space or null , use it.
|
||||||
argc++;
|
argc++;
|
||||||
|
ret = args_ptr - 4 - 4 - argc * 4;
|
||||||
|
|
||||||
if ( args_ptr - 4 - 4 - argc * 4 < 0 ) // fixme - Should this be cast to a signed int?
|
if (ret < 0 ) return 0;
|
||||||
return 0;
|
|
||||||
|
|
||||||
((u32*)PS2MEM_BASE)[ args_ptr / 4 - argc ] = args_ptr + i;
|
((u32*)PS2MEM_BASE)[ args_ptr / 4 - argc ] = args_ptr + i;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( ( PS2MEM_BASE[ args_ptr + i + 1 ] != 0 ) && ( PS2MEM_BASE[ args_ptr + i + 1 ] != 32 ) )
|
if (!isEmpty(args_ptr + i + 1))
|
||||||
{
|
{
|
||||||
|
// Otherwise, use the next character .
|
||||||
argc++;
|
argc++;
|
||||||
if ( args_ptr - 4 - 4 - argc * 4 < 0 ) // fixme - Should this be cast to a signed int?
|
ret = args_ptr - 4 - 4 - argc * 4;
|
||||||
return 0;
|
|
||||||
|
|
||||||
|
if (ret < 0 ) return 0;
|
||||||
((u32*)PS2MEM_BASE)[ args_ptr / 4 - argc ] = args_ptr + i + 1;
|
((u32*)PS2MEM_BASE)[ args_ptr / 4 - argc ] = args_ptr + i + 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Pass the number of arguments, and if we have arguments.
|
||||||
((u32*)PS2MEM_BASE)[ args_ptr /4 - argc - 1 ] = argc; //how many args
|
((u32*)PS2MEM_BASE)[ args_ptr /4 - argc - 1 ] = argc; //how many args
|
||||||
((u32*)PS2MEM_BASE)[ args_ptr /4 - argc - 2 ] = ( argc > 0); //have args? //not used, cannot be filled at all
|
((u32*)PS2MEM_BASE)[ args_ptr /4 - argc - 2 ] = ( argc > 0); //have args? //not used, cannot be filled at all
|
||||||
|
|
||||||
return ( args_ptr - argc * 4 - 8 );
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -495,8 +518,11 @@ u32 loadElfCRC( const char* filename )
|
||||||
TocEntry toc;
|
TocEntry toc;
|
||||||
|
|
||||||
IsoFS_init( );
|
IsoFS_init( );
|
||||||
if ( IsoFS_findFile( filename + strlen( "cdromN:" ), &toc ) == -1 )
|
|
||||||
return 0;
|
Console::Status("loadElfCRC: %s", params filename);
|
||||||
|
|
||||||
|
int mylen = strlen( "cdromN:" );
|
||||||
|
if ( IsoFS_findFile( filename + mylen, &toc ) == -1 ) return 0;
|
||||||
|
|
||||||
DevCon::Status( "loadElfFile: %d bytes", params toc.fileSize );
|
DevCon::Status( "loadElfFile: %d bytes", params toc.fileSize );
|
||||||
u32 crcval = ElfObject( wxString::FromAscii( filename ), toc.fileSize ).GetCRC();
|
u32 crcval = ElfObject( wxString::FromAscii( filename ), toc.fileSize ).GetCRC();
|
||||||
|
@ -528,13 +554,13 @@ void loadElfFile(const wxString& filename)
|
||||||
|
|
||||||
if( !filename.StartsWith( L"cdrom0:" ) && !filename.StartsWith( L"cdrom1:" ) )
|
if( !filename.StartsWith( L"cdrom0:" ) && !filename.StartsWith( L"cdrom1:" ) )
|
||||||
{
|
{
|
||||||
// Loading from a file (or non-cd image)
|
DevCon::WriteLn("Loading from a file (or non-cd image)");
|
||||||
|
|
||||||
elfsize = Path::GetFileSize( filename );
|
elfsize = Path::GetFileSize( filename );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Loading from a CD rom or CD image.
|
DevCon::WriteLn("Loading from a CD rom or CD image");
|
||||||
useCdvdSource = true;
|
useCdvdSource = true;
|
||||||
TocEntry toc;
|
TocEntry toc;
|
||||||
IsoFS_init( );
|
IsoFS_init( );
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
#include "Counters.h"
|
#include "Counters.h"
|
||||||
|
|
||||||
#include "VifDma.h"
|
#include "VifDma.h"
|
||||||
|
#include "Tags.h"
|
||||||
|
|
||||||
using std::min;
|
using std::min;
|
||||||
|
|
||||||
|
@ -43,8 +44,7 @@ static int gifstate = GIF_STATE_READY;
|
||||||
|
|
||||||
//static u64 s_gstag = 0; // used for querying the last tag
|
//static u64 s_gstag = 0; // used for querying the last tag
|
||||||
|
|
||||||
// This should be a bool, as should the return value of hwDmacSrcChainWithStack.
|
// This should be a bool. Next time I feel like breaking the save state, it will be. --arcum42
|
||||||
// Next time I feel like breaking the save state, it will be. --arcum42
|
|
||||||
static int gspath3done = 0;
|
static int gspath3done = 0;
|
||||||
|
|
||||||
static u32 gscycles = 0, prevcycles = 0, mfifocycles = 0;
|
static u32 gscycles = 0, prevcycles = 0, mfifocycles = 0;
|
||||||
|
@ -65,7 +65,7 @@ __forceinline void gsInterrupt()
|
||||||
{
|
{
|
||||||
GIF_LOG("gsInterrupt: %8.8x", cpuRegs.cycle);
|
GIF_LOG("gsInterrupt: %8.8x", cpuRegs.cycle);
|
||||||
|
|
||||||
if ((gif->chcr & 0x100) == 0)
|
if (!(CHCR::STR(gif)))
|
||||||
{
|
{
|
||||||
//Console::WriteLn("Eh? why are you still interrupting! chcr %x, qwc %x, done = %x", params gif->chcr, gif->qwc, done);
|
//Console::WriteLn("Eh? why are you still interrupting! chcr %x, qwc %x, done = %x", params gif->chcr, gif->qwc, done);
|
||||||
return;
|
return;
|
||||||
|
@ -94,7 +94,7 @@ __forceinline void gsInterrupt()
|
||||||
|
|
||||||
gspath3done = 0;
|
gspath3done = 0;
|
||||||
gscycles = 0;
|
gscycles = 0;
|
||||||
gif->chcr &= ~0x100;
|
CHCR::clearSTR(gif);
|
||||||
vif1Regs->stat &= ~VIF1_STAT_VGW;
|
vif1Regs->stat &= ~VIF1_STAT_VGW;
|
||||||
|
|
||||||
psHu32(GIF_STAT)&= ~(GIF_STAT_APATH3 | GIF_STAT_OPH); // OPH=0 | APATH=0
|
psHu32(GIF_STAT)&= ~(GIF_STAT_APATH3 | GIF_STAT_OPH); // OPH=0 | APATH=0
|
||||||
|
@ -132,7 +132,6 @@ static u32 WRITERING_DMA(u32 *pMem, u32 qwc)
|
||||||
|
|
||||||
int _GIFchain()
|
int _GIFchain()
|
||||||
{
|
{
|
||||||
//u32 qwc = ((psHu32(GIF_MODE) & 0x4) || vif1Regs->mskpath3) ? min(8, (int)gif->qwc) : min( gifsplit, (int)gif->qwc );
|
|
||||||
u32 qwc = min( gifsplit, (int)gif->qwc );
|
u32 qwc = min( gifsplit, (int)gif->qwc );
|
||||||
u32 *pMem;
|
u32 *pMem;
|
||||||
|
|
||||||
|
@ -161,7 +160,7 @@ static __forceinline void GIFchain()
|
||||||
|
|
||||||
static __forceinline bool checkTieBit(u32* &ptag)
|
static __forceinline bool checkTieBit(u32* &ptag)
|
||||||
{
|
{
|
||||||
if ((gif->chcr & 0x80) && (ptag[0] >> 31)) //Check TIE bit of CHCR and IRQ bit of tag
|
if ((CHCR::TIE(gif)) && (Tag::IRQ(ptag))) //Check TIE bit of CHCR and IRQ bit of tag
|
||||||
{
|
{
|
||||||
GIF_LOG("dmaIrq Set");
|
GIF_LOG("dmaIrq Set");
|
||||||
gspath3done = 1;
|
gspath3done = 1;
|
||||||
|
@ -175,19 +174,13 @@ static __forceinline bool ReadTag(u32* &ptag, u32 &id)
|
||||||
{
|
{
|
||||||
ptag = (u32*)dmaGetAddr(gif->tadr); //Set memory pointer to TADR
|
ptag = (u32*)dmaGetAddr(gif->tadr); //Set memory pointer to TADR
|
||||||
|
|
||||||
if (ptag == NULL) //Is ptag empty?
|
// If this messes things up, uncommenting the "Safe" will set it back to the way it was.
|
||||||
{
|
if (!(Tag::/*Safe*/Transfer("Gif", gif, ptag))) return false;
|
||||||
//If yes, set BEIS (BUSERR) in DMAC_STAT register
|
|
||||||
psHu32(DMAC_STAT)|= DMAC_STAT_BEIS;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
gscycles+=2; // Add 1 cycles from the QW read for the tag
|
|
||||||
gif->chcr = ( gif->chcr & 0xFFFF ) | ((*ptag) & 0xFFFF0000); //Transfer upper part of tag to CHCR bits 31-15
|
|
||||||
|
|
||||||
id = (ptag[0] >> 28) & 0x7; //ID for DmaChain copied from bit 28 of the tag
|
|
||||||
gif->qwc = (u16)ptag[0]; //QWC set to lower 16bits of the tag
|
|
||||||
gif->madr = ptag[1]; //MADR = ADDR field
|
gif->madr = ptag[1]; //MADR = ADDR field
|
||||||
|
|
||||||
|
id = Tag::Id(ptag); //ID for DmaChain copied from bit 28 of the tag
|
||||||
|
gscycles+=2; // Add 1 cycles from the QW read for the tag
|
||||||
|
|
||||||
gspath3done = hwDmacSrcChainWithStack(gif, id);
|
gspath3done = hwDmacSrcChainWithStack(gif, id);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -195,11 +188,11 @@ static __forceinline bool ReadTag(u32* &ptag, u32 &id)
|
||||||
static __forceinline void ReadTag2(u32* &ptag)
|
static __forceinline void ReadTag2(u32* &ptag)
|
||||||
{
|
{
|
||||||
ptag = (u32*)dmaGetAddr(gif->tadr); //Set memory pointer to TADR
|
ptag = (u32*)dmaGetAddr(gif->tadr); //Set memory pointer to TADR
|
||||||
gif->qwc = (u16)ptag[0]; //QWC set to lower 16bits of the tag
|
|
||||||
gif->chcr = ( gif->chcr & 0xFFFF ) | ( (*ptag) & 0xFFFF0000 ); //Transfer upper part of tag to CHCR bits 31-15
|
Tag::UnsafeTransfer(gif, ptag);
|
||||||
gif->madr = ptag[1];
|
gif->madr = ptag[1];
|
||||||
|
|
||||||
gspath3done = hwDmacSrcChainWithStack(gif, (ptag[0] >> 28) & 0x7);
|
gspath3done = hwDmacSrcChainWithStack(gif, Tag::Id(ptag));
|
||||||
}
|
}
|
||||||
|
|
||||||
void GIFdma()
|
void GIFdma()
|
||||||
|
@ -245,7 +238,8 @@ void GIFdma()
|
||||||
{
|
{
|
||||||
if (gif->qwc == 0)
|
if (gif->qwc == 0)
|
||||||
{
|
{
|
||||||
if ((gif->chcr & 0x10c) == 0x104)
|
//if ((gif->chcr & 0x10c) == 0x104)
|
||||||
|
if ((CHCR::MOD(gif) == CHAIN_MODE) && CHCR::STR(gif))
|
||||||
{
|
{
|
||||||
if (!ReadTag(ptag, id)) return;
|
if (!ReadTag(ptag, id)) return;
|
||||||
GIF_LOG("PTH3 MASK gifdmaChain %8.8x_%8.8x size=%d, id=%d, addr=%lx", ptag[1], ptag[0], gif->qwc, id, gif->madr);
|
GIF_LOG("PTH3 MASK gifdmaChain %8.8x_%8.8x size=%d, id=%d, addr=%lx", ptag[1], ptag[0], gif->qwc, id, gif->madr);
|
||||||
|
@ -268,10 +262,10 @@ void GIFdma()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Transfer Dn_QWC from Dn_MADR to GIF
|
// Transfer Dn_QWC from Dn_MADR to GIF
|
||||||
if (((gif->chcr & 0xc) == 0) || (gif->qwc > 0)) // Normal Mode
|
if ((CHCR::MOD(gif) == NORMAL_MODE) || (gif->qwc > 0)) // Normal Mode
|
||||||
{
|
{
|
||||||
|
|
||||||
if (((psHu32(DMAC_CTRL) & 0xC0) == 0x80) && ((gif->chcr & 0xc) == 0))
|
if (((psHu32(DMAC_CTRL) & 0xC0) == 0x80) && (CHCR::MOD(gif) == NORMAL_MODE))
|
||||||
{
|
{
|
||||||
Console::WriteLn("DMA Stall Control on GIF normal");
|
Console::WriteLn("DMA Stall Control on GIF normal");
|
||||||
}
|
}
|
||||||
|
@ -281,7 +275,8 @@ void GIFdma()
|
||||||
CPU_INT(2, gscycles * BIAS);
|
CPU_INT(2, gscycles * BIAS);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (((gif->chcr & 0xc) == 0x4) && (gspath3done == 0)) // Chain Mode
|
|
||||||
|
if ((CHCR::MOD(gif) == CHAIN_MODE) && (gspath3done == 0)) // Chain Mode
|
||||||
{
|
{
|
||||||
if (!ReadTag(ptag, id)) return;
|
if (!ReadTag(ptag, id)) return;
|
||||||
GIF_LOG("gifdmaChain %8.8x_%8.8x size=%d, id=%d, addr=%lx", ptag[1], ptag[0], gif->qwc, id, gif->madr);
|
GIF_LOG("gifdmaChain %8.8x_%8.8x size=%d, id=%d, addr=%lx", ptag[1], ptag[0], gif->qwc, id, gif->madr);
|
||||||
|
@ -310,11 +305,11 @@ void GIFdma()
|
||||||
if ((gspath3done == 0) && (gif->qwc == 0))
|
if ((gspath3done == 0) && (gif->qwc == 0))
|
||||||
{
|
{
|
||||||
ptag = (u32*)dmaGetAddr(gif->tadr); //Set memory pointer to TADR
|
ptag = (u32*)dmaGetAddr(gif->tadr); //Set memory pointer to TADR
|
||||||
gif->qwc = (u16)ptag[0]; //QWC set to lower 16bits of the tag
|
|
||||||
gif->chcr = ( gif->chcr & 0xFFFF ) | ( (*ptag) & 0xFFFF0000 ); //Transfer upper part of tag to CHCR bits 31-15
|
Tag::UnsafeTransfer(gif, ptag);
|
||||||
gif->madr = ptag[1];
|
gif->madr = ptag[1];
|
||||||
|
|
||||||
gspath3done = hwDmacSrcChainWithStack(gif, (ptag[0] >> 28) & 0x7);
|
gspath3done = hwDmacSrcChainWithStack(gif, Tag::Id(ptag));
|
||||||
|
|
||||||
checkTieBit(ptag);
|
checkTieBit(ptag);
|
||||||
|
|
||||||
|
@ -347,7 +342,7 @@ void dmaGIF()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((gif->qwc == 0) && ((gif->chcr & 0xc) != 0))
|
if ((gif->qwc == 0) && ((CHCR::MOD(gif) != NORMAL_MODE)))
|
||||||
{
|
{
|
||||||
u32 *ptag;
|
u32 *ptag;
|
||||||
|
|
||||||
|
@ -379,7 +374,7 @@ static __forceinline int mfifoGIFrbTransfer()
|
||||||
// fixme - I don't think these should use WRITERING_DMA, since our source
|
// fixme - I don't think these should use WRITERING_DMA, since our source
|
||||||
// isn't the DmaGetAddr(gif->madr) address that WRITERING_DMA expects.
|
// isn't the DmaGetAddr(gif->madr) address that WRITERING_DMA expects.
|
||||||
|
|
||||||
/* it does, so first copy 's1' bytes from 'addr' to 'data' */
|
/* it does (wrap around), so first copy 's1' bytes from 'addr' to 'data' */
|
||||||
src = (u32*)PSM(gif->madr);
|
src = (u32*)PSM(gif->madr);
|
||||||
if (src == NULL) return -1;
|
if (src == NULL) return -1;
|
||||||
s1 = WRITERING_DMA(src, s1);
|
s1 = WRITERING_DMA(src, s1);
|
||||||
|
@ -400,8 +395,7 @@ static __forceinline int mfifoGIFrbTransfer()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* it doesn't, so just transfer 'qwc*16' words
|
/* it doesn't, so just transfer 'qwc*16' words from 'gif->madr' to GS */
|
||||||
from 'gif->madr' to GS */
|
|
||||||
src = (u32*)PSM(gif->madr);
|
src = (u32*)PSM(gif->madr);
|
||||||
if (src == NULL) return -1;
|
if (src == NULL) return -1;
|
||||||
|
|
||||||
|
@ -443,8 +437,8 @@ void mfifoGIFtransfer(int qwc)
|
||||||
u32 *ptag;
|
u32 *ptag;
|
||||||
int id;
|
int id;
|
||||||
u32 temp = 0;
|
u32 temp = 0;
|
||||||
mfifocycles = 0;
|
|
||||||
|
|
||||||
|
mfifocycles = 0;
|
||||||
gifmfifoirq = false;
|
gifmfifoirq = false;
|
||||||
|
|
||||||
if(qwc > 0 )
|
if(qwc > 0 )
|
||||||
|
@ -469,50 +463,50 @@ void mfifoGIFtransfer(int qwc)
|
||||||
gif->tadr = psHu32(DMAC_RBOR) + (gif->tadr & psHu32(DMAC_RBSR));
|
gif->tadr = psHu32(DMAC_RBOR) + (gif->tadr & psHu32(DMAC_RBSR));
|
||||||
ptag = (u32*)dmaGetAddr(gif->tadr);
|
ptag = (u32*)dmaGetAddr(gif->tadr);
|
||||||
|
|
||||||
id = (ptag[0] >> 28) & 0x7;
|
Tag::UnsafeTransfer(gif, ptag);
|
||||||
gif->qwc = (ptag[0] & 0xffff);
|
|
||||||
gif->madr = ptag[1];
|
gif->madr = ptag[1];
|
||||||
|
id =Tag::Id(ptag);
|
||||||
mfifocycles += 2;
|
mfifocycles += 2;
|
||||||
|
|
||||||
gif->chcr = ( gif->chcr & 0xFFFF ) | ( (*ptag) & 0xFFFF0000 );
|
|
||||||
GIF_LOG("dmaChain %8.8x_%8.8x size=%d, id=%d, madr=%lx, tadr=%lx mfifo qwc = %x spr0 madr = %x",
|
GIF_LOG("dmaChain %8.8x_%8.8x size=%d, id=%d, madr=%lx, tadr=%lx mfifo qwc = %x spr0 madr = %x",
|
||||||
ptag[1], ptag[0], gif->qwc, id, gif->madr, gif->tadr, gifqwc, spr0->madr);
|
ptag[1], ptag[0], gif->qwc, id, gif->madr, gif->tadr, gifqwc, spr0->madr);
|
||||||
|
|
||||||
gifqwc--;
|
gifqwc--;
|
||||||
switch (id)
|
switch (id)
|
||||||
{
|
{
|
||||||
case 0: // Refe - Transfer Packet According to ADDR field
|
case TAG_REFE: // Refe - Transfer Packet According to ADDR field
|
||||||
gif->tadr = psHu32(DMAC_RBOR) + ((gif->tadr + 16) & psHu32(DMAC_RBSR));
|
gif->tadr = psHu32(DMAC_RBOR) + ((gif->tadr + 16) & psHu32(DMAC_RBSR));
|
||||||
gifstate = GIF_STATE_DONE; //End Transfer
|
gifstate = GIF_STATE_DONE; //End Transfer
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1: // CNT - Transfer QWC following the tag.
|
case TAG_CNT: // CNT - Transfer QWC following the tag.
|
||||||
gif->madr = psHu32(DMAC_RBOR) + ((gif->tadr + 16) & psHu32(DMAC_RBSR)); //Set MADR to QW after Tag
|
gif->madr = psHu32(DMAC_RBOR) + ((gif->tadr + 16) & psHu32(DMAC_RBSR)); //Set MADR to QW after Tag
|
||||||
gif->tadr = psHu32(DMAC_RBOR) + ((gif->madr + (gif->qwc << 4)) & psHu32(DMAC_RBSR)); //Set TADR to QW following the data
|
gif->tadr = psHu32(DMAC_RBOR) + ((gif->madr + (gif->qwc << 4)) & psHu32(DMAC_RBSR)); //Set TADR to QW following the data
|
||||||
gifstate = GIF_STATE_READY;
|
gifstate = GIF_STATE_READY;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2: // Next - Transfer QWC following tag. TADR = ADDR
|
case TAG_NEXT: // Next - Transfer QWC following tag. TADR = ADDR
|
||||||
temp = gif->madr; //Temporarily Store ADDR
|
temp = gif->madr; //Temporarily Store ADDR
|
||||||
gif->madr = psHu32(DMAC_RBOR) + ((gif->tadr + 16) & psHu32(DMAC_RBSR)); //Set MADR to QW following the tag
|
gif->madr = psHu32(DMAC_RBOR) + ((gif->tadr + 16) & psHu32(DMAC_RBSR)); //Set MADR to QW following the tag
|
||||||
gif->tadr = temp; //Copy temporarily stored ADDR to Tag
|
gif->tadr = temp; //Copy temporarily stored ADDR to Tag
|
||||||
gifstate = GIF_STATE_READY;
|
gifstate = GIF_STATE_READY;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3: // Ref - Transfer QWC from ADDR field
|
case TAG_REF: // Ref - Transfer QWC from ADDR field
|
||||||
case 4: // Refs - Transfer QWC from ADDR field (Stall Control)
|
case TAG_REFS: // Refs - Transfer QWC from ADDR field (Stall Control)
|
||||||
gif->tadr = psHu32(DMAC_RBOR) + ((gif->tadr + 16) & psHu32(DMAC_RBSR)); //Set TADR to next tag
|
gif->tadr = psHu32(DMAC_RBOR) + ((gif->tadr + 16) & psHu32(DMAC_RBSR)); //Set TADR to next tag
|
||||||
gifstate = GIF_STATE_READY;
|
gifstate = GIF_STATE_READY;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 7: // End - Transfer QWC following the tag
|
case TAG_END: // End - Transfer QWC following the tag
|
||||||
gif->madr = psHu32(DMAC_RBOR) + ((gif->tadr + 16) & psHu32(DMAC_RBSR)); //Set MADR to data following the tag
|
gif->madr = psHu32(DMAC_RBOR) + ((gif->tadr + 16) & psHu32(DMAC_RBSR)); //Set MADR to data following the tag
|
||||||
gif->tadr = psHu32(DMAC_RBOR) + ((gif->madr + (gif->qwc << 4)) & psHu32(DMAC_RBSR)); //Set TADR to QW following the data
|
gif->tadr = psHu32(DMAC_RBOR) + ((gif->madr + (gif->qwc << 4)) & psHu32(DMAC_RBSR)); //Set TADR to QW following the data
|
||||||
gifstate = GIF_STATE_DONE; //End Transfer
|
gifstate = GIF_STATE_DONE; //End Transfer
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((gif->chcr & 0x80) && (ptag[0] >> 31))
|
if ((CHCR::TIE(gif)) && (Tag::IRQ(ptag)))
|
||||||
{
|
{
|
||||||
SPR_LOG("dmaIrq Set");
|
SPR_LOG("dmaIrq Set");
|
||||||
gifstate = GIF_STATE_DONE;
|
gifstate = GIF_STATE_DONE;
|
||||||
|
@ -540,13 +534,13 @@ void gifMFIFOInterrupt()
|
||||||
mfifocycles = 0;
|
mfifocycles = 0;
|
||||||
if (Path3progress == STOPPED_MODE) psHu32(GIF_STAT)&= ~(GIF_STAT_APATH3 | GIF_STAT_OPH); // OPH=0 | APATH=0
|
if (Path3progress == STOPPED_MODE) psHu32(GIF_STAT)&= ~(GIF_STAT_APATH3 | GIF_STAT_OPH); // OPH=0 | APATH=0
|
||||||
|
|
||||||
if ((spr0->chcr & 0x100) && (spr0->qwc == 0))
|
if ((CHCR::STR(spr0)) && (spr0->qwc == 0))
|
||||||
{
|
{
|
||||||
spr0->chcr &= ~0x100;
|
CHCR::clearSTR(spr0);
|
||||||
hwDmacIrq(DMAC_FROM_SPR);
|
hwDmacIrq(DMAC_FROM_SPR);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(gif->chcr & 0x100))
|
if (!(CHCR::STR(gif)))
|
||||||
{
|
{
|
||||||
Console::WriteLn("WTF GIFMFIFO");
|
Console::WriteLn("WTF GIFMFIFO");
|
||||||
cpuRegs.interrupt &= ~(1 << 11);
|
cpuRegs.interrupt &= ~(1 << 11);
|
||||||
|
@ -592,7 +586,7 @@ void gifMFIFOInterrupt()
|
||||||
psHu32(GIF_STAT)&= ~0x1F000000; // QFC=0
|
psHu32(GIF_STAT)&= ~0x1F000000; // QFC=0
|
||||||
|
|
||||||
vif1Regs->stat &= ~VIF1_STAT_VGW;
|
vif1Regs->stat &= ~VIF1_STAT_VGW;
|
||||||
gif->chcr &= ~0x100;
|
CHCR::clearSTR(gif);
|
||||||
gifstate = GIF_STATE_READY;
|
gifstate = GIF_STATE_READY;
|
||||||
hwDmacIrq(DMAC_GIF);
|
hwDmacIrq(DMAC_GIF);
|
||||||
clearFIFOstuff(false);
|
clearFIFOstuff(false);
|
||||||
|
|
60
pcsx2/Hw.cpp
60
pcsx2/Hw.cpp
|
@ -32,6 +32,7 @@
|
||||||
#include "VifDma.h"
|
#include "VifDma.h"
|
||||||
#include "SPR.h"
|
#include "SPR.h"
|
||||||
#include "Sif.h"
|
#include "Sif.h"
|
||||||
|
#include "Tags.h"
|
||||||
|
|
||||||
using namespace R5900;
|
using namespace R5900;
|
||||||
|
|
||||||
|
@ -150,68 +151,83 @@ bool hwMFIFOWrite(u32 addr, u8 *data, u32 size) {
|
||||||
|
|
||||||
bool hwDmacSrcChainWithStack(DMACh *dma, int id) {
|
bool hwDmacSrcChainWithStack(DMACh *dma, int id) {
|
||||||
switch (id) {
|
switch (id) {
|
||||||
case 0: // Refe - Transfer Packet According to ADDR field
|
case TAG_REFE: // Refe - Transfer Packet According to ADDR field
|
||||||
return true; //End Transfer
|
return true; //End Transfer
|
||||||
|
|
||||||
case 1: // CNT - Transfer QWC following the tag.
|
case TAG_CNT: // CNT - Transfer QWC following the tag.
|
||||||
dma->madr = dma->tadr + 16; //Set MADR to QW after Tag
|
dma->madr = dma->tadr + 16; //Set MADR to QW after Tag
|
||||||
dma->tadr = dma->madr + (dma->qwc << 4); //Set TADR to QW following the data
|
dma->tadr = dma->madr + (dma->qwc << 4); //Set TADR to QW following the data
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
case 2: // Next - Transfer QWC following tag. TADR = ADDR
|
case TAG_NEXT: // Next - Transfer QWC following tag. TADR = ADDR
|
||||||
{
|
{
|
||||||
u32 temp = dma->madr; //Temporarily Store ADDR
|
u32 temp = dma->madr; //Temporarily Store ADDR
|
||||||
dma->madr = dma->tadr + 16; //Set MADR to QW following the tag
|
dma->madr = dma->tadr + 16; //Set MADR to QW following the tag
|
||||||
dma->tadr = temp; //Copy temporarily stored ADDR to Tag
|
dma->tadr = temp; //Copy temporarily stored ADDR to Tag
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
case 3: // Ref - Transfer QWC from ADDR field
|
case TAG_REF: // Ref - Transfer QWC from ADDR field
|
||||||
case 4: // Refs - Transfer QWC from ADDR field (Stall Control)
|
case TAG_REFS: // Refs - Transfer QWC from ADDR field (Stall Control)
|
||||||
dma->tadr += 16; //Set TADR to next tag
|
dma->tadr += 16; //Set TADR to next tag
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
case 5: // Call - Transfer QWC following the tag, save succeeding tag
|
case TAG_CALL: // Call - Transfer QWC following the tag, save succeeding tag
|
||||||
{
|
{
|
||||||
u32 temp = dma->madr; //Temporarily Store ADDR
|
u32 temp = dma->madr; //Temporarily Store ADDR
|
||||||
|
|
||||||
dma->madr = dma->tadr + 16; //Set MADR to data following the tag
|
dma->madr = dma->tadr + 16; //Set MADR to data following the tag
|
||||||
|
|
||||||
if ((dma->chcr & 0x30) == 0x0) { //Check if ASR0 is empty
|
switch(CHCR::ASP(dma))
|
||||||
|
{
|
||||||
|
case 0: { //Check if ASR0 is empty
|
||||||
dma->asr0 = dma->madr + (dma->qwc << 4); //If yes store Succeeding tag
|
dma->asr0 = dma->madr + (dma->qwc << 4); //If yes store Succeeding tag
|
||||||
dma->chcr = (dma->chcr & 0xffffffcf) | 0x10; //1 Address in call stack
|
dma->chcr = (dma->chcr & 0xffffffcf) | 0x10; //1 Address in call stack
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
else if((dma->chcr & 0x30) == 0x10){
|
case 1: {
|
||||||
dma->chcr = (dma->chcr & 0xffffffcf) | 0x20; //2 Addresses in call stack
|
dma->chcr = (dma->chcr & 0xffffffcf) | 0x20; //2 Addresses in call stack
|
||||||
dma->asr1 = dma->madr + (dma->qwc << 4); //If no store Succeeding tag in ASR1
|
dma->asr1 = dma->madr + (dma->qwc << 4); //If no store Succeeding tag in ASR1
|
||||||
}else {
|
break;
|
||||||
|
}
|
||||||
|
default: {
|
||||||
Console::Notice("Call Stack Overflow (report if it fixes/breaks anything)");
|
Console::Notice("Call Stack Overflow (report if it fixes/breaks anything)");
|
||||||
return true; //Return done
|
return true; //Return done
|
||||||
}
|
}
|
||||||
|
}
|
||||||
dma->tadr = temp; //Set TADR to temporarily stored ADDR
|
dma->tadr = temp; //Set TADR to temporarily stored ADDR
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
case 6: // Ret - Transfer QWC following the tag, load next tag
|
case TAG_RET: // Ret - Transfer QWC following the tag, load next tag
|
||||||
dma->madr = dma->tadr + 16; //Set MADR to data following the tag
|
dma->madr = dma->tadr + 16; //Set MADR to data following the tag
|
||||||
|
switch(CHCR::ASP(dma))
|
||||||
if ((dma->chcr & 0x30) == 0x20) { //If ASR1 is NOT equal to 0 (Contains address)
|
{
|
||||||
|
case 2: { //If ASR1 is NOT equal to 0 (Contains address)
|
||||||
dma->chcr = (dma->chcr & 0xffffffcf) | 0x10; //1 Address left in call stack
|
dma->chcr = (dma->chcr & 0xffffffcf) | 0x10; //1 Address left in call stack
|
||||||
dma->tadr = dma->asr1; //Read ASR1 as next tag
|
dma->tadr = dma->asr1; //Read ASR1 as next tag
|
||||||
dma->asr1 = 0; //Clear ASR1
|
dma->asr1 = 0; //Clear ASR1
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
else { //If ASR1 is empty (No address held)
|
//If ASR1 is empty (No address held)
|
||||||
if((dma->chcr & 0x30) == 0x10) { //Check if ASR0 is NOT equal to 0 (Contains address)
|
case 1:{ //Check if ASR0 is NOT equal to 0 (Contains address)
|
||||||
dma->chcr = (dma->chcr & 0xffffffcf); //No addresses left in call stack
|
dma->chcr = (dma->chcr & 0xffffffcf); //No addresses left in call stack
|
||||||
dma->tadr = dma->asr0; //Read ASR0 as next tag
|
dma->tadr = dma->asr0; //Read ASR0 as next tag
|
||||||
dma->asr0 = 0; //Clear ASR0
|
dma->asr0 = 0; //Clear ASR0
|
||||||
} else { //Else if ASR1 and ASR0 are empty
|
break;
|
||||||
|
}
|
||||||
|
case 0: { //Else if ASR1 and ASR0 are empty
|
||||||
|
//dma->tadr += 16; //Clear tag address - Kills Klonoa 2
|
||||||
|
return true; //End Transfer
|
||||||
|
}
|
||||||
|
default: { //Else if ASR1 and ASR0 are messed up
|
||||||
|
//Console::Error("TAG_RET: ASR 1 & 0 == 1. This shouldn't happen!");
|
||||||
//dma->tadr += 16; //Clear tag address - Kills Klonoa 2
|
//dma->tadr += 16; //Clear tag address - Kills Klonoa 2
|
||||||
return true; //End Transfer
|
return true; //End Transfer
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
case 7: // End - Transfer QWC following the tag
|
case TAG_END: // End - Transfer QWC following the tag
|
||||||
dma->madr = dma->tadr + 16; //Set MADR to data following the tag
|
dma->madr = dma->tadr + 16; //Set MADR to data following the tag
|
||||||
//Dont Increment tadr, breaks Soul Calibur II and III
|
//Dont Increment tadr, breaks Soul Calibur II and III
|
||||||
return true; //End Transfer
|
return true; //End Transfer
|
||||||
|
@ -224,26 +240,26 @@ bool hwDmacSrcChain(DMACh *dma, int id) {
|
||||||
u32 temp;
|
u32 temp;
|
||||||
|
|
||||||
switch (id) {
|
switch (id) {
|
||||||
case 0: // Refe - Transfer Packet According to ADDR field
|
case TAG_REFE: // Refe - Transfer Packet According to ADDR field
|
||||||
return true; //End Transfer
|
return true; //End Transfer
|
||||||
|
|
||||||
case 1: // CNT - Transfer QWC following the tag.
|
case TAG_CNT: // CNT - Transfer QWC following the tag.
|
||||||
dma->madr = dma->tadr + 16; //Set MADR to QW after Tag
|
dma->madr = dma->tadr + 16; //Set MADR to QW after Tag
|
||||||
dma->tadr = dma->madr + (dma->qwc << 4); //Set TADR to QW following the data
|
dma->tadr = dma->madr + (dma->qwc << 4); //Set TADR to QW following the data
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
case 2: // Next - Transfer QWC following tag. TADR = ADDR
|
case TAG_NEXT: // Next - Transfer QWC following tag. TADR = ADDR
|
||||||
temp = dma->madr; //Temporarily Store ADDR
|
temp = dma->madr; //Temporarily Store ADDR
|
||||||
dma->madr = dma->tadr + 16; //Set MADR to QW following the tag
|
dma->madr = dma->tadr + 16; //Set MADR to QW following the tag
|
||||||
dma->tadr = temp; //Copy temporarily stored ADDR to Tag
|
dma->tadr = temp; //Copy temporarily stored ADDR to Tag
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
case 3: // Ref - Transfer QWC from ADDR field
|
case TAG_REF: // Ref - Transfer QWC from ADDR field
|
||||||
case 4: // Refs - Transfer QWC from ADDR field (Stall Control)
|
case TAG_REFS: // Refs - Transfer QWC from ADDR field (Stall Control)
|
||||||
dma->tadr += 16; //Set TADR to next tag
|
dma->tadr += 16; //Set TADR to next tag
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
case 7: // End - Transfer QWC following the tag
|
case TAG_END: // End - Transfer QWC following the tag
|
||||||
dma->madr = dma->tadr + 16; //Set MADR to data following the tag
|
dma->madr = dma->tadr + 16; //Set MADR to data following the tag
|
||||||
//Dont Increment tadr, breaks Soul Calibur II and III
|
//Dont Increment tadr, breaks Soul Calibur II and III
|
||||||
return true; //End Transfer
|
return true; //End Transfer
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
#include "coroutine.h"
|
#include "coroutine.h"
|
||||||
|
|
||||||
#include "Vif.h"
|
#include "Vif.h"
|
||||||
|
#include "Tags.h"
|
||||||
|
|
||||||
using namespace std; // for min / max
|
using namespace std; // for min / max
|
||||||
|
|
||||||
|
@ -36,7 +37,7 @@ using namespace std; // for min / max
|
||||||
//#define IPU_INT0_FROM() CPU_INT( DMAC_FROM_IPU, 0 )
|
//#define IPU_INT0_FROM() CPU_INT( DMAC_FROM_IPU, 0 )
|
||||||
|
|
||||||
// IPU Inline'd IRQs : Calls the IPU interrupt handlers directly instead of
|
// IPU Inline'd IRQs : Calls the IPU interrupt handlers directly instead of
|
||||||
// feeding them through the EE's branch test. (see IPU.H for details)
|
// feeding them through the EE's branch test. (see IPU.h for details)
|
||||||
|
|
||||||
#ifdef IPU_INLINE_IRQS
|
#ifdef IPU_INLINE_IRQS
|
||||||
# define IPU_INT_TO( cycles ) ipu1Interrupt()
|
# define IPU_INT_TO( cycles ) ipu1Interrupt()
|
||||||
|
@ -117,7 +118,7 @@ extern "C"
|
||||||
PCSX2_ALIGNED16(u8 _readbits[80]); //local buffer (ring buffer)
|
PCSX2_ALIGNED16(u8 _readbits[80]); //local buffer (ring buffer)
|
||||||
u8* readbits = _readbits; // always can decrement by one 1qw
|
u8* readbits = _readbits; // always can decrement by one 1qw
|
||||||
|
|
||||||
#define SATURATE_4BITS(val) ((val)>15 ? 15 : (val))
|
//#define SATURATE_4BITS(val) ((val)>15 ? 15 : (val))
|
||||||
|
|
||||||
__forceinline void IPUProcessInterrupt()
|
__forceinline void IPUProcessInterrupt()
|
||||||
{
|
{
|
||||||
|
@ -317,21 +318,20 @@ __forceinline u64 ipuRead64(u32 mem)
|
||||||
void ipuSoftReset()
|
void ipuSoftReset()
|
||||||
{
|
{
|
||||||
mpeg2_init();
|
mpeg2_init();
|
||||||
|
|
||||||
FIFOto_clear();
|
FIFOto_clear();
|
||||||
memzero_obj(fifo_output);
|
FIFOfrom_clear();
|
||||||
FOwritepos = 0;
|
|
||||||
FOreadpos = 0;
|
|
||||||
coded_block_pattern = 0;
|
coded_block_pattern = 0;
|
||||||
|
|
||||||
ipuRegs->ctrl._u32 = 0;
|
ipuRegs->ctrl._u32 = 0;
|
||||||
|
ipuRegs->top = 0;
|
||||||
|
ipuCurCmd = 0xffffffff;
|
||||||
|
|
||||||
g_BP.BP = 0;
|
g_BP.BP = 0;
|
||||||
g_BP.IFC = 0;
|
|
||||||
g_BP.FP = 0;
|
g_BP.FP = 0;
|
||||||
g_BP.bufferhasnew = 0;
|
g_BP.bufferhasnew = 0;
|
||||||
ipuRegs->top = 0;
|
|
||||||
g_nCmdIndex = 0;
|
g_nCmdIndex = 0;
|
||||||
ipuCurCmd = 0xffffffff;
|
|
||||||
g_nCmdPos[0] = 0;
|
g_nCmdPos[0] = 0;
|
||||||
g_nCmdPos[1] = 0;
|
g_nCmdPos[1] = 0;
|
||||||
}
|
}
|
||||||
|
@ -404,10 +404,10 @@ __forceinline void ipuWrite64(u32 mem, u64 value)
|
||||||
static void ipuBCLR(u32 val)
|
static void ipuBCLR(u32 val)
|
||||||
{
|
{
|
||||||
FIFOto_clear();
|
FIFOto_clear();
|
||||||
|
|
||||||
g_BP.BP = val & 0x7F;
|
g_BP.BP = val & 0x7F;
|
||||||
g_BP.FP = 0;
|
g_BP.FP = 0;
|
||||||
g_BP.bufferhasnew = 0;
|
g_BP.bufferhasnew = 0;
|
||||||
g_BP.IFC = 0;
|
|
||||||
ipuRegs->ctrl.BUSY = 0;
|
ipuRegs->ctrl.BUSY = 0;
|
||||||
ipuRegs->cmd.BUSY = 0;
|
ipuRegs->cmd.BUSY = 0;
|
||||||
memzero_ptr<80>(readbits);
|
memzero_ptr<80>(readbits);
|
||||||
|
@ -811,7 +811,7 @@ void IPUCMD_WRITE(u32 val)
|
||||||
|
|
||||||
case SCE_IPU_FDEC:
|
case SCE_IPU_FDEC:
|
||||||
IPU_LOG("IPU FDEC command. Skip 0x%X bits, FIFO 0x%X qwords, BP 0x%X, FP %d, CHCR 0x%x, %x",
|
IPU_LOG("IPU FDEC command. Skip 0x%X bits, FIFO 0x%X qwords, BP 0x%X, FP %d, CHCR 0x%x, %x",
|
||||||
val & 0x3f, g_BP.IFC, (int)g_BP.BP, g_BP.FP, ((DMACh*)&PS2MEM_HW[0xb400])->chcr, cpuRegs.pc);
|
val & 0x3f, g_BP.IFC, (int)g_BP.BP, g_BP.FP, ipu1dma->chcr, cpuRegs.pc);
|
||||||
g_BP.BP += val & 0x3F;
|
g_BP.BP += val & 0x3F;
|
||||||
if (ipuFDEC(val)) return;
|
if (ipuFDEC(val)) return;
|
||||||
ipuRegs->cmd.BUSY = 0x80000000;
|
ipuRegs->cmd.BUSY = 0x80000000;
|
||||||
|
@ -840,7 +840,7 @@ void IPUCMD_WRITE(u32 val)
|
||||||
|
|
||||||
if (ipuCSC(ipuRegs->cmd.DATA))
|
if (ipuCSC(ipuRegs->cmd.DATA))
|
||||||
{
|
{
|
||||||
if (ipu0dma->qwc > 0 && (ipu0dma->chcr & 0x100)) IPU_INT0_FROM();
|
if (ipu0dma->qwc > 0 && (CHCR::STR(ipu0dma))) IPU_INT0_FROM();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -855,7 +855,7 @@ void IPUCMD_WRITE(u32 val)
|
||||||
if (ipuIDEC(val))
|
if (ipuIDEC(val))
|
||||||
{
|
{
|
||||||
// idec done, ipu0 done too
|
// idec done, ipu0 done too
|
||||||
if (ipu0dma->qwc > 0 && (ipu0dma->chcr & 0x100)) IPU_INT0_FROM();
|
if (ipu0dma->qwc > 0 && (CHCR::STR(ipu0dma))) IPU_INT0_FROM();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ipuRegs->topbusy = 0x80000000;
|
ipuRegs->topbusy = 0x80000000;
|
||||||
|
@ -867,7 +867,7 @@ void IPUCMD_WRITE(u32 val)
|
||||||
case SCE_IPU_BDEC:
|
case SCE_IPU_BDEC:
|
||||||
if (ipuBDEC(val))
|
if (ipuBDEC(val))
|
||||||
{
|
{
|
||||||
if (ipu0dma->qwc > 0 && (ipu0dma->chcr & 0x100)) IPU_INT0_FROM();
|
if (ipu0dma->qwc > 0 && (CHCR::STR(ipu0dma))) IPU_INT0_FROM();
|
||||||
if (ipuRegs->ctrl.SCD || ipuRegs->ctrl.ECD) hwIntcIrq(INTC_IPU);
|
if (ipuRegs->ctrl.SCD || ipuRegs->ctrl.ECD) hwIntcIrq(INTC_IPU);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -931,7 +931,7 @@ void IPUWorker()
|
||||||
hwIntcIrq(INTC_IPU);
|
hwIntcIrq(INTC_IPU);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if ((ipu0dma->qwc > 0) && (ipu0dma->chcr & 0x100)) IPU_INT0_FROM();
|
if ((ipu0dma->qwc > 0) && (CHCR::STR(ipu0dma))) IPU_INT0_FROM();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SCE_IPU_PACK:
|
case SCE_IPU_PACK:
|
||||||
|
@ -957,7 +957,7 @@ void IPUWorker()
|
||||||
ipuCurCmd = 0xffffffff;
|
ipuCurCmd = 0xffffffff;
|
||||||
|
|
||||||
// CHECK!: IPU0dma remains when IDEC is done, so we need to clear it
|
// CHECK!: IPU0dma remains when IDEC is done, so we need to clear it
|
||||||
if ((ipu0dma->qwc > 0) && (ipu0dma->chcr & 0x100)) IPU_INT0_FROM();
|
if ((ipu0dma->qwc > 0) && (CHCR::STR(ipu0dma))) IPU_INT0_FROM();
|
||||||
s_routine = NULL;
|
s_routine = NULL;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -974,7 +974,7 @@ void IPUWorker()
|
||||||
ipuRegs->cmd.BUSY = 0;
|
ipuRegs->cmd.BUSY = 0;
|
||||||
ipuCurCmd = 0xffffffff;
|
ipuCurCmd = 0xffffffff;
|
||||||
|
|
||||||
if ((ipu0dma->qwc > 0) && (ipu0dma->chcr & 0x100)) IPU_INT0_FROM();
|
if ((ipu0dma->qwc > 0) && (CHCR::STR(ipu0dma))) IPU_INT0_FROM();
|
||||||
s_routine = NULL;
|
s_routine = NULL;
|
||||||
if (ipuRegs->ctrl.SCD || ipuRegs->ctrl.ECD) hwIntcIrq(INTC_IPU);
|
if (ipuRegs->ctrl.SCD || ipuRegs->ctrl.ECD) hwIntcIrq(INTC_IPU);
|
||||||
return;
|
return;
|
||||||
|
@ -1328,19 +1328,18 @@ int FIFOto_read(void *value)
|
||||||
// wait until enough data
|
// wait until enough data
|
||||||
if (g_BP.IFC == 0)
|
if (g_BP.IFC == 0)
|
||||||
{
|
{
|
||||||
|
// This is the only spot that wants a return value for IPU1dma.
|
||||||
if (IPU1dma() == 0) return 0;
|
if (IPU1dma() == 0) return 0;
|
||||||
assert(g_BP.IFC > 0);
|
assert(g_BP.IFC > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// transfer 1 qword, split into two transfers
|
// transfer 1 qword, split into two transfers
|
||||||
((u32*)value)[0] = fifo_input[FIreadpos];
|
for (int i = 0; i <= 3; i++)
|
||||||
fifo_input[FIreadpos] = 0;
|
{
|
||||||
((u32*)value)[1] = fifo_input[FIreadpos+1];
|
((u32*)value)[i] = fifo_input[FIreadpos + i];
|
||||||
fifo_input[FIreadpos+1] = 0;
|
fifo_input[FIreadpos + i] = 0;
|
||||||
((u32*)value)[2] = fifo_input[FIreadpos+2];
|
}
|
||||||
fifo_input[FIreadpos+2] = 0;
|
|
||||||
((u32*)value)[3] = fifo_input[FIreadpos+3];
|
|
||||||
fifo_input[FIreadpos+3] = 0;
|
|
||||||
FIreadpos = (FIreadpos + 4) & 31;
|
FIreadpos = (FIreadpos + 4) & 31;
|
||||||
g_BP.IFC--;
|
g_BP.IFC--;
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -1356,10 +1355,10 @@ int FIFOto_write(u32* pMem, int size)
|
||||||
|
|
||||||
while (transsize-- > 0)
|
while (transsize-- > 0)
|
||||||
{
|
{
|
||||||
fifo_input[FIwritepos] = pMem[0];
|
for (int i = 0; i <= 3; i++)
|
||||||
fifo_input[FIwritepos+1] = pMem[1];
|
{
|
||||||
fifo_input[FIwritepos+2] = pMem[2];
|
fifo_input[FIwritepos + i] = pMem[i];
|
||||||
fifo_input[FIwritepos+3] = pMem[3];
|
}
|
||||||
FIwritepos = (FIwritepos + 4) & 31;
|
FIwritepos = (FIwritepos + 4) & 31;
|
||||||
pMem += 4;
|
pMem += 4;
|
||||||
}
|
}
|
||||||
|
@ -1367,11 +1366,12 @@ int FIFOto_write(u32* pMem, int size)
|
||||||
return firsttrans;
|
return firsttrans;
|
||||||
}
|
}
|
||||||
|
|
||||||
static __forceinline bool IPU1chain(u32* &pMem, int &totalqwc)
|
static __forceinline bool IPU1chain(int &totalqwc)
|
||||||
{
|
{
|
||||||
if (ipu1dma->qwc > 0)
|
if (ipu1dma->qwc > 0)
|
||||||
{
|
{
|
||||||
int qwc = ipu1dma->qwc;
|
int qwc = ipu1dma->qwc;
|
||||||
|
u32 *pMem;
|
||||||
|
|
||||||
pMem = (u32*)dmaGetAddr(ipu1dma->madr);
|
pMem = (u32*)dmaGetAddr(ipu1dma->madr);
|
||||||
|
|
||||||
|
@ -1395,15 +1395,16 @@ static __forceinline bool IPU1chain(u32* &pMem, int &totalqwc)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Remind me to give this a better name. --arcum42
|
||||||
static __forceinline bool IncreaseTadr(u32 tag)
|
static __forceinline bool IncreaseTadr(u32 tag)
|
||||||
{
|
{
|
||||||
switch (tag & 0x70000000)
|
switch (Tag::Id(tag))
|
||||||
{
|
{
|
||||||
case 0x00000000:
|
case TAG_REFE: // refe
|
||||||
ipu1dma->tadr += 16;
|
ipu1dma->tadr += 16;
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
case 0x70000000:
|
case TAG_END: // end
|
||||||
ipu1dma->tadr = ipu1dma->madr;
|
ipu1dma->tadr = ipu1dma->madr;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -1412,33 +1413,77 @@ static __forceinline bool IncreaseTadr(u32 tag)
|
||||||
|
|
||||||
extern void gsInterrupt();
|
extern void gsInterrupt();
|
||||||
|
|
||||||
int IPU1dma()
|
static __forceinline bool ipuDmacSrcChain(DMACh *tag, u32 *ptag)
|
||||||
{
|
{
|
||||||
u32 *ptag, *pMem;
|
switch (Tag::Id(ptag))
|
||||||
bool done = FALSE;
|
{
|
||||||
int ipu1cycles = 0;
|
case TAG_REFE: // refe
|
||||||
int totalqwc = 0;
|
// do not change tadr
|
||||||
|
tag->madr = ptag[1];
|
||||||
|
return true;
|
||||||
|
break;
|
||||||
|
|
||||||
assert(!(ipu1dma->chcr & 0x40));
|
case TAG_CNT: // cnt
|
||||||
|
tag->madr = tag->tadr + 16;
|
||||||
|
// Set the taddr to the next tag
|
||||||
|
tag->tadr += 16 + (tag->qwc << 4);
|
||||||
|
break;
|
||||||
|
|
||||||
if (!(ipu1dma->chcr & 0x100) || (cpuRegs.interrupt & (1 << DMAC_TO_IPU))) return 0;
|
case TAG_NEXT: // next
|
||||||
|
tag->madr = tag->tadr + 16;
|
||||||
|
tag->tadr = ptag[1];
|
||||||
|
break;
|
||||||
|
|
||||||
assert(!(g_nDMATransfer & IPU_DMA_TIE1));
|
case TAG_REF: // ref
|
||||||
|
tag->madr = ptag[1];
|
||||||
|
tag->tadr += 16;
|
||||||
|
break;
|
||||||
|
|
||||||
//We need to make sure GIF has flushed before sending IPU data, it seems to REALLY screw FFX videos
|
case TAG_END: // end
|
||||||
while(gif->chcr & 0x100 && vif1Regs->mskpath3 == 0)
|
// do not change tadr
|
||||||
|
tag->madr = tag->tadr + 16;
|
||||||
|
return true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
Console::Error("IPU ERROR: different transfer mode!, Please report to PCSX2 Team");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
static __forceinline void flushGIF()
|
||||||
|
{
|
||||||
|
while(CHCR::STR(gif) && (vif1Regs->mskpath3 == 0))
|
||||||
{
|
{
|
||||||
GIF_LOG("Flushing gif chcr %x tadr %x madr %x qwc %x", gif->chcr, gif->tadr, gif->madr, gif->qwc);
|
GIF_LOG("Flushing gif chcr %x tadr %x madr %x qwc %x", gif->chcr, gif->tadr, gif->madr, gif->qwc);
|
||||||
gsInterrupt();
|
gsInterrupt();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int IPU1dma()
|
||||||
|
{
|
||||||
|
u32 *ptag;
|
||||||
|
bool done = false;
|
||||||
|
int ipu1cycles = 0, totalqwc = 0;
|
||||||
|
|
||||||
|
assert(!(CHCR::TTE(ipu1dma)));
|
||||||
|
|
||||||
|
if (!(CHCR::STR(ipu1dma)) || (cpuRegs.interrupt & (1 << DMAC_TO_IPU))) return 0;
|
||||||
|
|
||||||
|
assert(!(g_nDMATransfer & IPU_DMA_TIE1));
|
||||||
|
|
||||||
|
//We need to make sure GIF has flushed before sending IPU data, it seems to REALLY screw FFX videos
|
||||||
|
flushGIF();
|
||||||
|
|
||||||
// in kh, qwc == 0 when dma_actv1 is set
|
// in kh, qwc == 0 when dma_actv1 is set
|
||||||
if ((g_nDMATransfer & IPU_DMA_ACTV1) && ipu1dma->qwc > 0)
|
if ((g_nDMATransfer & IPU_DMA_ACTV1) && ipu1dma->qwc > 0)
|
||||||
{
|
{
|
||||||
if (IPU1chain(pMem, totalqwc)) return totalqwc;
|
if (IPU1chain(totalqwc)) return totalqwc;
|
||||||
|
|
||||||
//Check TIE bit of CHCR and IRQ bit of tag
|
//Check TIE bit of CHCR and IRQ bit of tag
|
||||||
if ((ipu1dma->chcr & 0x80) && (g_nDMATransfer & IPU_DMA_DOTIE1))
|
if (CHCR::TIE(ipu1dma) && (g_nDMATransfer & IPU_DMA_DOTIE1))
|
||||||
{
|
{
|
||||||
Console::WriteLn("IPU1 TIE");
|
Console::WriteLn("IPU1 TIE");
|
||||||
|
|
||||||
|
@ -1448,22 +1493,24 @@ int IPU1dma()
|
||||||
return totalqwc;
|
return totalqwc;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(ipu1dma->chcr & 0xc))
|
if (CHCR::MOD(ipu1dma) == NORMAL_MODE) // If mode is normal mode.
|
||||||
{
|
{
|
||||||
IPU_INT_TO(totalqwc * BIAS);
|
IPU_INT_TO(totalqwc * BIAS);
|
||||||
return totalqwc;
|
return totalqwc;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
// Chain mode.
|
||||||
u32 tag = ipu1dma->chcr; // upper bits describe current tag
|
u32 tag = ipu1dma->chcr; // upper bits describe current tag
|
||||||
|
|
||||||
if ((ipu1dma->chcr & 0x80) && (tag & 0x80000000))
|
if (CHCR::TIE(ipu1dma) && Tag::IRQ(tag))
|
||||||
{
|
{
|
||||||
ptag = (u32*)dmaGetAddr(ipu1dma->tadr);
|
ptag = (u32*)dmaGetAddr(ipu1dma->tadr);
|
||||||
|
|
||||||
IncreaseTadr(tag);
|
IncreaseTadr(tag);
|
||||||
|
|
||||||
ipu1dma->chcr = (ipu1dma->chcr & 0xFFFF) | ((*ptag) & 0xFFFF0000);
|
Tag::UpperTransfer(ipu1dma, ptag);
|
||||||
|
|
||||||
IPU_LOG("IPU dmaIrq Set");
|
IPU_LOG("IPU dmaIrq Set");
|
||||||
IPU_INT_TO(totalqwc * BIAS);
|
IPU_INT_TO(totalqwc * BIAS);
|
||||||
g_nDMATransfer |= IPU_DMA_TIE1;
|
g_nDMATransfer |= IPU_DMA_TIE1;
|
||||||
|
@ -1480,7 +1527,8 @@ int IPU1dma()
|
||||||
g_nDMATransfer &= ~(IPU_DMA_ACTV1 | IPU_DMA_DOTIE1);
|
g_nDMATransfer &= ~(IPU_DMA_ACTV1 | IPU_DMA_DOTIE1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (((ipu1dma->chcr & 0xc) == 0) && (ipu1dma->qwc == 0)) // Normal Mode
|
// Normal Mode & qwc is finished
|
||||||
|
if ((CHCR::MOD(ipu1dma) == NORMAL_MODE) && (ipu1dma->qwc == 0))
|
||||||
{
|
{
|
||||||
//Console::WriteLn("ipu1 normal empty qwc?");
|
//Console::WriteLn("ipu1 normal empty qwc?");
|
||||||
return totalqwc;
|
return totalqwc;
|
||||||
|
@ -1492,7 +1540,7 @@ int IPU1dma()
|
||||||
IPU_LOG("dmaIPU1 Normal size=%d, addr=%lx, fifosize=%x",
|
IPU_LOG("dmaIPU1 Normal size=%d, addr=%lx, fifosize=%x",
|
||||||
ipu1dma->qwc, ipu1dma->madr, 8 - g_BP.IFC);
|
ipu1dma->qwc, ipu1dma->madr, 8 - g_BP.IFC);
|
||||||
|
|
||||||
if (!IPU1chain(pMem, totalqwc)) IPU_INT_TO((ipu1cycles + totalqwc) * BIAS);
|
if (!IPU1chain(totalqwc)) IPU_INT_TO((ipu1cycles + totalqwc) * BIAS);
|
||||||
|
|
||||||
return totalqwc;
|
return totalqwc;
|
||||||
}
|
}
|
||||||
|
@ -1500,70 +1548,31 @@ int IPU1dma()
|
||||||
{
|
{
|
||||||
// Chain Mode & ipu1dma->qwc is 0
|
// Chain Mode & ipu1dma->qwc is 0
|
||||||
ptag = (u32*)dmaGetAddr(ipu1dma->tadr); //Set memory pointer to TADR
|
ptag = (u32*)dmaGetAddr(ipu1dma->tadr); //Set memory pointer to TADR
|
||||||
if (ptag == NULL) //Is ptag empty?
|
|
||||||
{
|
// Transfer the tag.
|
||||||
Console::Error("IPU1 BUSERR");
|
if (!(Tag::Transfer("IPU1", ipu1dma, ptag))) return totalqwc;
|
||||||
ipu1dma->chcr = (ipu1dma->chcr & 0xFFFF) | ((*ptag) & 0xFFFF0000); //Transfer upper part of tag to CHCR bits 31-15
|
|
||||||
psHu32(DMAC_STAT) |= DMAC_STAT_BEIS; //If yes, set BEIS (BUSERR) in DMAC_STAT register
|
|
||||||
return totalqwc;
|
|
||||||
}
|
|
||||||
|
|
||||||
ipu1cycles += 1; // Add 1 cycles from the QW read for the tag
|
ipu1cycles += 1; // Add 1 cycles from the QW read for the tag
|
||||||
|
|
||||||
ipu1dma->chcr = (ipu1dma->chcr & 0xFFFF) | ((*ptag) & 0xFFFF0000); //Transfer upper part of tag to CHCR bits 31-15
|
done = ipuDmacSrcChain(ipu1dma, ptag);
|
||||||
ipu1dma->qwc = (u16)ptag[0]; //QWC set to lower 16bits of the tag
|
|
||||||
|
|
||||||
switch (ptag[0] & 0x70000000)
|
|
||||||
{
|
|
||||||
case 0x00000000: // refe
|
|
||||||
// do not change tadr
|
|
||||||
ipu1dma->madr = ptag[1];
|
|
||||||
done = TRUE;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x10000000: // cnt
|
|
||||||
ipu1dma->madr = ipu1dma->tadr + 16;
|
|
||||||
// Set the taddr to the next tag
|
|
||||||
ipu1dma->tadr += 16 + (ipu1dma->qwc << 4);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x20000000: // next
|
|
||||||
ipu1dma->madr = ipu1dma->tadr + 16;
|
|
||||||
ipu1dma->tadr = ptag[1];
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x30000000: // ref
|
|
||||||
ipu1dma->madr = ptag[1];
|
|
||||||
ipu1dma->tadr += 16;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x70000000: // end
|
|
||||||
// do not change tadr
|
|
||||||
ipu1dma->madr = ipu1dma->tadr + 16;
|
|
||||||
done = TRUE;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
Console::Error("IPU ERROR: different transfer mode!, Please report to PCSX2 Team");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
IPU_LOG("dmaIPU1 dmaChain %8.8x_%8.8x size=%d, addr=%lx, fifosize=%x",
|
IPU_LOG("dmaIPU1 dmaChain %8.8x_%8.8x size=%d, addr=%lx, fifosize=%x",
|
||||||
ptag[1], ptag[0], ipu1dma->qwc, ipu1dma->madr, 8 - g_BP.IFC);
|
ptag[1], ptag[0], ipu1dma->qwc, ipu1dma->madr, 8 - g_BP.IFC);
|
||||||
|
|
||||||
if ((ipu1dma->chcr & 0x80) && ptag[0] & 0x80000000)
|
|
||||||
|
if (CHCR::TIE(ipu1dma) && Tag::IRQ(ptag))
|
||||||
g_nDMATransfer |= IPU_DMA_DOTIE1;
|
g_nDMATransfer |= IPU_DMA_DOTIE1;
|
||||||
else
|
else
|
||||||
g_nDMATransfer &= ~IPU_DMA_DOTIE1;
|
g_nDMATransfer &= ~IPU_DMA_DOTIE1;
|
||||||
|
|
||||||
if (ipu1dma->qwc == 0)
|
if (ipu1dma->qwc == 0)
|
||||||
{
|
{
|
||||||
//if ((ipu1dma->chcr & 0x80) && (ptag[0] & 0x80000000)) //Check TIE bit of CHCR and IRQ bit of tag
|
//Check TIE bit of CHCR and IRQ bit of tag
|
||||||
if (g_nDMATransfer & IPU_DMA_DOTIE1)
|
if (g_nDMATransfer & IPU_DMA_DOTIE1)
|
||||||
{
|
{
|
||||||
Console::WriteLn("IPU1 TIE");
|
Console::WriteLn("IPU1 TIE");
|
||||||
|
|
||||||
if (IPU1chain(pMem, totalqwc)) return totalqwc;
|
if (IPU1chain(totalqwc)) return totalqwc;
|
||||||
|
|
||||||
if (done)
|
if (done)
|
||||||
{
|
{
|
||||||
|
@ -1571,7 +1580,8 @@ int IPU1dma()
|
||||||
|
|
||||||
IncreaseTadr(ptag[0]);
|
IncreaseTadr(ptag[0]);
|
||||||
|
|
||||||
ipu1dma->chcr = (ipu1dma->chcr & 0xFFFF) | ((*ptag) & 0xFFFF0000);
|
// Transfer the last of ptag into chcr.
|
||||||
|
Tag::UpperTransfer(ipu1dma, ptag);
|
||||||
}
|
}
|
||||||
|
|
||||||
IPU_INT_TO(ipu1cycles + totalqwc * BIAS); // Should it be (ipu1cycles + totalqwc) * BIAS?
|
IPU_INT_TO(ipu1cycles + totalqwc * BIAS); // Should it be (ipu1cycles + totalqwc) * BIAS?
|
||||||
|
@ -1582,14 +1592,14 @@ int IPU1dma()
|
||||||
{
|
{
|
||||||
//Britney Dance beat does a blank NEXT tag, for some odd reason the fix doesnt work if after IPU1Chain O_o
|
//Britney Dance beat does a blank NEXT tag, for some odd reason the fix doesnt work if after IPU1Chain O_o
|
||||||
if (!done) IPU1dma();
|
if (!done) IPU1dma();
|
||||||
if (IPU1chain(pMem, totalqwc)) return totalqwc;
|
if (IPU1chain(totalqwc)) return totalqwc;
|
||||||
}
|
}
|
||||||
|
|
||||||
IncreaseTadr(ptag[0]);
|
IncreaseTadr(ptag[0]);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (IPU1chain(pMem, totalqwc)) return totalqwc;
|
if (IPU1chain(totalqwc)) return totalqwc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1597,6 +1607,13 @@ int IPU1dma()
|
||||||
return totalqwc;
|
return totalqwc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FIFOfrom_clear()
|
||||||
|
{
|
||||||
|
memzero_obj(fifo_output);
|
||||||
|
ipuRegs->ctrl.OFC = 0;
|
||||||
|
FOreadpos = 0;
|
||||||
|
FOwritepos = 0;
|
||||||
|
}
|
||||||
|
|
||||||
int FIFOfrom_write(const u32 *value, int size)
|
int FIFOfrom_write(const u32 *value, int size)
|
||||||
{
|
{
|
||||||
|
@ -1609,10 +1626,10 @@ int FIFOfrom_write(const u32 *value, int size)
|
||||||
|
|
||||||
while (transsize-- > 0)
|
while (transsize-- > 0)
|
||||||
{
|
{
|
||||||
fifo_output[FOwritepos] = ((u32*)value)[0];
|
for (int i = 0; i <= 3; i++)
|
||||||
fifo_output[FOwritepos+1] = ((u32*)value)[1];
|
{
|
||||||
fifo_output[FOwritepos+2] = ((u32*)value)[2];
|
fifo_output[FOwritepos + i] = ((u32*)value)[i];
|
||||||
fifo_output[FOwritepos+3] = ((u32*)value)[3];
|
}
|
||||||
FOwritepos = (FOwritepos + 4) & 31;
|
FOwritepos = (FOwritepos + 4) & 31;
|
||||||
value += 4;
|
value += 4;
|
||||||
}
|
}
|
||||||
|
@ -1627,14 +1644,11 @@ int FIFOfrom_write(const u32 *value, int size)
|
||||||
static __forceinline void _FIFOfrom_readsingle(void *value)
|
static __forceinline void _FIFOfrom_readsingle(void *value)
|
||||||
{
|
{
|
||||||
// transfer 1 qword, split into two transfers
|
// transfer 1 qword, split into two transfers
|
||||||
((u32*)value)[0] = fifo_output[FOreadpos];
|
for (int i = 0; i <= 3; i++)
|
||||||
fifo_output[FOreadpos] = 0;
|
{
|
||||||
((u32*)value)[1] = fifo_output[FOreadpos+1];
|
((u32*)value)[i] = fifo_output[FOreadpos + i];
|
||||||
fifo_output[FOreadpos+1] = 0;
|
fifo_output[FOreadpos + i] = 0;
|
||||||
((u32*)value)[2] = fifo_output[FOreadpos+2];
|
}
|
||||||
fifo_output[FOreadpos+2] = 0;
|
|
||||||
((u32*)value)[3] = fifo_output[FOreadpos+3];
|
|
||||||
fifo_output[FOreadpos+3] = 0;
|
|
||||||
FOreadpos = (FOreadpos + 4) & 31;
|
FOreadpos = (FOreadpos + 4) & 31;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1658,17 +1672,15 @@ void FIFOfrom_read(void *value, int size)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int IPU0dma()
|
int IPU0dma()
|
||||||
{
|
{
|
||||||
int readsize;
|
int readsize;
|
||||||
void* pMem;
|
void* pMem;
|
||||||
|
|
||||||
if ((!(ipu0dma->chcr & 0x100) || (cpuRegs.interrupt & (1 << DMAC_FROM_IPU))) || (ipu0dma->qwc == 0))
|
if ((!(CHCR::STR(ipu0dma)) || (cpuRegs.interrupt & (1 << DMAC_FROM_IPU))) || (ipu0dma->qwc == 0))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
assert(!(ipu0dma->chcr&0x40));
|
assert(!(CHCR::TTE(ipu0dma)));
|
||||||
|
|
||||||
IPU_LOG("dmaIPU0 chcr = %lx, madr = %lx, qwc = %lx",
|
IPU_LOG("dmaIPU0 chcr = %lx, madr = %lx, qwc = %lx",
|
||||||
ipu0dma->chcr, ipu0dma->madr, ipu0dma->qwc);
|
ipu0dma->chcr, ipu0dma->madr, ipu0dma->qwc);
|
||||||
|
@ -1727,14 +1739,14 @@ void ipu0Interrupt()
|
||||||
{
|
{
|
||||||
// gif
|
// gif
|
||||||
g_nDMATransfer &= ~IPU_DMA_GIFSTALL;
|
g_nDMATransfer &= ~IPU_DMA_GIFSTALL;
|
||||||
if (((DMACh*)&PS2MEM_HW[0xA000])->chcr & 0x100) GIFdma();
|
if (CHCR::STR(gif)) GIFdma();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g_nDMATransfer & IPU_DMA_VIFSTALL)
|
if (g_nDMATransfer & IPU_DMA_VIFSTALL)
|
||||||
{
|
{
|
||||||
// vif
|
// vif
|
||||||
g_nDMATransfer &= ~IPU_DMA_VIFSTALL;
|
g_nDMATransfer &= ~IPU_DMA_VIFSTALL;
|
||||||
if (((DMACh*)&PS2MEM_HW[0x9000])->chcr & 0x100)dmaVIF1();
|
if (CHCR::STR(vif1ch)) dmaVIF1();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g_nDMATransfer & IPU_DMA_TIE0)
|
if (g_nDMATransfer & IPU_DMA_TIE0)
|
||||||
|
@ -1742,7 +1754,7 @@ void ipu0Interrupt()
|
||||||
g_nDMATransfer &= ~IPU_DMA_TIE0;
|
g_nDMATransfer &= ~IPU_DMA_TIE0;
|
||||||
}
|
}
|
||||||
|
|
||||||
ipu0dma->chcr &= ~0x100;
|
CHCR::clearSTR(ipu0dma);
|
||||||
|
|
||||||
hwDmacIrq(DMAC_FROM_IPU);
|
hwDmacIrq(DMAC_FROM_IPU);
|
||||||
}
|
}
|
||||||
|
@ -1760,7 +1772,7 @@ IPU_FORCEINLINE void ipu1Interrupt()
|
||||||
if (g_nDMATransfer & IPU_DMA_TIE1)
|
if (g_nDMATransfer & IPU_DMA_TIE1)
|
||||||
g_nDMATransfer &= ~IPU_DMA_TIE1;
|
g_nDMATransfer &= ~IPU_DMA_TIE1;
|
||||||
else
|
else
|
||||||
ipu1dma->chcr &= ~0x100;
|
CHCR::clearSTR(ipu1dma);
|
||||||
|
|
||||||
hwDmacIrq(DMAC_TO_IPU);
|
hwDmacIrq(DMAC_TO_IPU);
|
||||||
}
|
}
|
||||||
|
|
|
@ -233,14 +233,11 @@ extern u8* g_pIPU0Pointer;
|
||||||
PCSX2_ALIGNED16(extern macroblock_rgb32 rgb32);
|
PCSX2_ALIGNED16(extern macroblock_rgb32 rgb32);
|
||||||
PCSX2_ALIGNED16(extern macroblock_8 mb8);
|
PCSX2_ALIGNED16(extern macroblock_8 mb8);
|
||||||
|
|
||||||
void dmaIPU0();
|
extern int ipuInit();
|
||||||
void dmaIPU1();
|
extern void ipuReset();
|
||||||
|
extern void ipuShutdown();
|
||||||
int ipuInit();
|
extern int ipuFreeze(gzFile f, int Mode);
|
||||||
void ipuReset();
|
extern bool ipuCanFreeze();
|
||||||
void ipuShutdown();
|
|
||||||
int ipuFreeze(gzFile f, int Mode);
|
|
||||||
bool ipuCanFreeze();
|
|
||||||
|
|
||||||
|
|
||||||
extern u32 ipuRead32(u32 mem);
|
extern u32 ipuRead32(u32 mem);
|
||||||
|
@ -248,11 +245,6 @@ extern u64 ipuRead64(u32 mem);
|
||||||
extern void ipuWrite32(u32 mem,u32 value);
|
extern void ipuWrite32(u32 mem,u32 value);
|
||||||
extern void ipuWrite64(u32 mem,u64 value);
|
extern void ipuWrite64(u32 mem,u64 value);
|
||||||
|
|
||||||
int ipuConstRead32(u32 x86reg, u32 mem);
|
|
||||||
void ipuConstRead64(u32 mem, int mmreg);
|
|
||||||
void ipuConstWrite32(u32 mem, int mmreg);
|
|
||||||
void ipuConstWrite64(u32 mem, int mmreg);
|
|
||||||
|
|
||||||
extern void IPUCMD_WRITE(u32 val);
|
extern void IPUCMD_WRITE(u32 val);
|
||||||
extern void ipuSoftReset();
|
extern void ipuSoftReset();
|
||||||
extern void IPUProcessInterrupt();
|
extern void IPUProcessInterrupt();
|
||||||
|
@ -273,5 +265,6 @@ void FIFOfrom_read(void *value,int size);
|
||||||
int FIFOto_read(void *value);
|
int FIFOto_read(void *value);
|
||||||
int FIFOto_write(u32* pMem, int size);
|
int FIFOto_write(u32* pMem, int size);
|
||||||
void FIFOto_clear();
|
void FIFOto_clear();
|
||||||
|
void FIFOfrom_clear();
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -204,6 +204,7 @@ mtgsThreadObject::mtgsThreadObject() :
|
||||||
|
|
||||||
void mtgsThreadObject::Start()
|
void mtgsThreadObject::Start()
|
||||||
{
|
{
|
||||||
|
m_post_InitDone.Reset();
|
||||||
PersistentThread::Start();
|
PersistentThread::Start();
|
||||||
|
|
||||||
// Wait for the thread to finish initialization (it runs GSopen, which can take
|
// Wait for the thread to finish initialization (it runs GSopen, which can take
|
||||||
|
|
|
@ -22,7 +22,7 @@ RAM
|
||||||
---
|
---
|
||||||
0x00100000-0x01ffffff this is the physical address for the ram.its cached there
|
0x00100000-0x01ffffff this is the physical address for the ram.its cached there
|
||||||
0x20100000-0x21ffffff uncached
|
0x20100000-0x21ffffff uncached
|
||||||
0x30100000-0x31ffffff uncached & acceleretade
|
0x30100000-0x31ffffff uncached & accelerated
|
||||||
0xa0000000-0xa1ffffff MIRROR might...???
|
0xa0000000-0xa1ffffff MIRROR might...???
|
||||||
0x80000000-0x81ffffff MIRROR might... ????
|
0x80000000-0x81ffffff MIRROR might... ????
|
||||||
|
|
||||||
|
|
|
@ -46,6 +46,26 @@ public:
|
||||||
static u64 GetCRC( uint mcdId );
|
static u64 GetCRC( uint mcdId );
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct superblock
|
||||||
|
{
|
||||||
|
char magic[28]; // 0x00
|
||||||
|
char version[12]; // 0x1c
|
||||||
|
u16 page_len; // 0x28
|
||||||
|
u16 pages_per_cluster; // 0x2a
|
||||||
|
u16 pages_per_block; // 0x2c
|
||||||
|
u16 unused; // 0x2e
|
||||||
|
u32 clusters_per_card; // 0x30
|
||||||
|
u32 alloc_offset; // 0x34
|
||||||
|
u32 alloc_end; // 0x38
|
||||||
|
u32 rootdir_cluster; // 0x3c
|
||||||
|
u32 backup_block1; // 0x40
|
||||||
|
u32 backup_block2; // 0x44
|
||||||
|
u32 ifc_list[32]; // 0x50
|
||||||
|
u32 bad_block_list[32]; // 0xd0
|
||||||
|
u8 card_type; // 0x150
|
||||||
|
u8 card_flags; // 0x151
|
||||||
|
};
|
||||||
|
|
||||||
#if 0 // unused code?
|
#if 0 // unused code?
|
||||||
struct McdBlock
|
struct McdBlock
|
||||||
{
|
{
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
#include "SPR.h"
|
#include "SPR.h"
|
||||||
#include "iR5900.h"
|
#include "iR5900.h"
|
||||||
#include "VUmicro.h"
|
#include "VUmicro.h"
|
||||||
|
#include "Tags.h"
|
||||||
|
|
||||||
extern void mfifoGIFtransfer(int);
|
extern void mfifoGIFtransfer(int);
|
||||||
|
|
||||||
|
@ -139,13 +140,15 @@ static __forceinline void _dmaSPR0()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Transfer Dn_QWC from SPR to Dn_MADR
|
// Transfer Dn_QWC from SPR to Dn_MADR
|
||||||
if ((spr0->chcr & 0xc) == 0x0) // Normal Mode
|
switch(CHCR::MOD(spr0))
|
||||||
|
{
|
||||||
|
case NORMAL_MODE:
|
||||||
{
|
{
|
||||||
SPR0chain();
|
SPR0chain();
|
||||||
spr0finished = 1;
|
spr0finished = 1;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if ((spr0->chcr & 0xc) == 0x4)
|
case CHAIN_MODE:
|
||||||
{
|
{
|
||||||
u32 *ptag;
|
u32 *ptag;
|
||||||
int id;
|
int id;
|
||||||
|
@ -161,11 +164,9 @@ static __forceinline void _dmaSPR0()
|
||||||
ptag = (u32*) & PS2MEM_SCRATCH[spr0->sadr & 0x3fff];
|
ptag = (u32*) & PS2MEM_SCRATCH[spr0->sadr & 0x3fff];
|
||||||
spr0->sadr += 16;
|
spr0->sadr += 16;
|
||||||
|
|
||||||
// Transfer dma tag if tte is set
|
Tag::UnsafeTransfer(spr0, ptag);
|
||||||
spr0->chcr = (spr0->chcr & 0xFFFF) | ((*ptag) & 0xFFFF0000); //Transfer upper part of tag to CHCR bits 31-15
|
id = Tag::Id(ptag);
|
||||||
|
|
||||||
id = (ptag[0] >> 28) & 0x7; //ID for DmaChain copied from bit 28 of the tag
|
|
||||||
spr0->qwc = (u16)ptag[0]; //QWC set to lower 16bits of the tag
|
|
||||||
spr0->madr = ptag[1]; //MADR = ADDR field
|
spr0->madr = ptag[1]; //MADR = ADDR field
|
||||||
|
|
||||||
SPR_LOG("spr0 dmaChain %8.8x_%8.8x size=%d, id=%d, addr=%lx spr=%lx",
|
SPR_LOG("spr0 dmaChain %8.8x_%8.8x size=%d, id=%d, addr=%lx spr=%lx",
|
||||||
|
@ -178,20 +179,20 @@ static __forceinline void _dmaSPR0()
|
||||||
|
|
||||||
switch (id)
|
switch (id)
|
||||||
{
|
{
|
||||||
case 0: // CNTS - Transfer QWC following the tag (Stall Control)
|
case TAG_CNTS: // CNTS - Transfer QWC following the tag (Stall Control)
|
||||||
if ((psHu32(DMAC_CTRL) & 0x30) == 0x20) psHu32(DMAC_STADR) = spr0->madr + (spr0->qwc * 16); //Copy MADR to DMAC_STADR stall addr register
|
if ((psHu32(DMAC_CTRL) & 0x30) == 0x20) psHu32(DMAC_STADR) = spr0->madr + (spr0->qwc * 16); //Copy MADR to DMAC_STADR stall addr register
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1: // CNT - Transfer QWC following the tag.
|
case TAG_CNT: // CNT - Transfer QWC following the tag.
|
||||||
done = FALSE;
|
done = FALSE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 7: // End - Transfer QWC following the tag
|
case TAG_END: // End - Transfer QWC following the tag
|
||||||
done = TRUE;
|
done = TRUE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
SPR0chain();
|
SPR0chain();
|
||||||
if (spr0->chcr & 0x80 && ptag[0] >> 31) //Check TIE bit of CHCR and IRQ bit of tag
|
if (CHCR::TIE(spr0) && Tag::IRQ(ptag)) //Check TIE bit of CHCR and IRQ bit of tag
|
||||||
{
|
{
|
||||||
//Console::WriteLn("SPR0 TIE");
|
//Console::WriteLn("SPR0 TIE");
|
||||||
done = TRUE;
|
done = TRUE;
|
||||||
|
@ -207,10 +208,14 @@ static __forceinline void _dmaSPR0()
|
||||||
}
|
}
|
||||||
SPR_LOG("spr0 dmaChain complete %8.8x_%8.8x size=%d, id=%d, addr=%lx spr=%lx",
|
SPR_LOG("spr0 dmaChain complete %8.8x_%8.8x size=%d, id=%d, addr=%lx spr=%lx",
|
||||||
ptag[1], ptag[0], spr0->qwc, id, spr0->madr);
|
ptag[1], ptag[0], spr0->qwc, id, spr0->madr);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
else // Interleave Mode
|
//case INTERLEAVE_MODE:
|
||||||
|
default:
|
||||||
{
|
{
|
||||||
_SPR0interleave();
|
_SPR0interleave();
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -227,7 +232,7 @@ void SPRFROMinterrupt()
|
||||||
//Console::WriteLn("mfifoGIFtransfer %x madr %x, tadr %x", params gif->chcr, gif->madr, gif->tadr);
|
//Console::WriteLn("mfifoGIFtransfer %x madr %x, tadr %x", params gif->chcr, gif->madr, gif->tadr);
|
||||||
mfifoGIFtransfer(mfifotransferred);
|
mfifoGIFtransfer(mfifotransferred);
|
||||||
mfifotransferred = 0;
|
mfifotransferred = 0;
|
||||||
if(gif->chcr & 0x100)return;
|
if (CHCR::STR(gif)) return;
|
||||||
}
|
}
|
||||||
else if ((psHu32(DMAC_CTRL) & 0xC) == 0x8) // VIF1 MFIFO
|
else if ((psHu32(DMAC_CTRL) & 0xC) == 0x8) // VIF1 MFIFO
|
||||||
{
|
{
|
||||||
|
@ -236,11 +241,11 @@ void SPRFROMinterrupt()
|
||||||
//Console::WriteLn("mfifoVIF1transfer %x madr %x, tadr %x", params vif1ch->chcr, vif1ch->madr, vif1ch->tadr);
|
//Console::WriteLn("mfifoVIF1transfer %x madr %x, tadr %x", params vif1ch->chcr, vif1ch->madr, vif1ch->tadr);
|
||||||
mfifoVIF1transfer(mfifotransferred);
|
mfifoVIF1transfer(mfifotransferred);
|
||||||
mfifotransferred = 0;
|
mfifotransferred = 0;
|
||||||
if(vif1ch->chcr & 0x100)return;
|
if (CHCR::STR(vif1ch)) return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (spr0finished == 0) return;
|
if (spr0finished == 0) return;
|
||||||
spr0->chcr &= ~0x100;
|
CHCR::clearSTR(spr0);
|
||||||
hwDmacIrq(DMAC_FROM_SPR);
|
hwDmacIrq(DMAC_FROM_SPR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -250,7 +255,7 @@ void dmaSPR0() // fromSPR
|
||||||
SPR_LOG("dmaSPR0 chcr = %lx, madr = %lx, qwc = %lx, sadr = %lx",
|
SPR_LOG("dmaSPR0 chcr = %lx, madr = %lx, qwc = %lx, sadr = %lx",
|
||||||
spr0->chcr, spr0->madr, spr0->qwc, spr0->sadr);
|
spr0->chcr, spr0->madr, spr0->qwc, spr0->sadr);
|
||||||
|
|
||||||
if ((spr0->chcr & 0xc) == 0x4 && spr0->qwc == 0)
|
if ((CHCR::MOD(spr0) == CHAIN_MODE) && spr0->qwc == 0)
|
||||||
{
|
{
|
||||||
u32 *ptag;
|
u32 *ptag;
|
||||||
ptag = (u32*) & PS2MEM_SCRATCH[spr0->sadr & 0x3fff]; //Set memory pointer to SADR
|
ptag = (u32*) & PS2MEM_SCRATCH[spr0->sadr & 0x3fff]; //Set memory pointer to SADR
|
||||||
|
@ -319,7 +324,9 @@ void _SPR1interleave()
|
||||||
|
|
||||||
void _dmaSPR1() // toSPR work function
|
void _dmaSPR1() // toSPR work function
|
||||||
{
|
{
|
||||||
if ((spr1->chcr & 0xc) == 0) // Normal Mode
|
switch(CHCR::MOD(spr1))
|
||||||
|
{
|
||||||
|
case NORMAL_MODE:
|
||||||
{
|
{
|
||||||
//int cycles = 0;
|
//int cycles = 0;
|
||||||
// Transfer Dn_QWC from Dn_MADR to SPR1
|
// Transfer Dn_QWC from Dn_MADR to SPR1
|
||||||
|
@ -327,7 +334,7 @@ void _dmaSPR1() // toSPR work function
|
||||||
spr1finished = 1;
|
spr1finished = 1;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if ((spr1->chcr & 0xc) == 0x4)
|
case CHAIN_MODE:
|
||||||
{
|
{
|
||||||
u32 *ptag;
|
u32 *ptag;
|
||||||
int id;
|
int id;
|
||||||
|
@ -343,23 +350,18 @@ void _dmaSPR1() // toSPR work function
|
||||||
// Chain Mode
|
// Chain Mode
|
||||||
|
|
||||||
ptag = (u32*)dmaGetAddr(spr1->tadr); //Set memory pointer to TADR
|
ptag = (u32*)dmaGetAddr(spr1->tadr); //Set memory pointer to TADR
|
||||||
if (ptag == NULL) //Is ptag empty?
|
|
||||||
|
if (!(Tag::Transfer("SPR1 Tag", spr1, ptag)))
|
||||||
{
|
{
|
||||||
Console::WriteLn("SPR1 Tag BUSERR");
|
|
||||||
spr1->chcr = (spr1->chcr & 0xFFFF) | ((*ptag) & 0xFFFF0000); //Transfer upper part of tag to CHCR bits 31-15
|
|
||||||
psHu32(DMAC_STAT) |= DMAC_STAT_BEIS; //If yes, set BEIS (BUSERR) in DMAC_STAT register
|
|
||||||
done = TRUE;
|
done = TRUE;
|
||||||
spr1finished = (done) ? 1: 0;
|
spr1finished = (done) ? 1: 0;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
spr1->chcr = (spr1->chcr & 0xFFFF) | ((*ptag) & 0xFFFF0000); //Transfer upper part of tag to CHCR bits 31-15
|
|
||||||
|
|
||||||
id = (ptag[0] >> 28) & 0x7; //ID for DmaChain copied from bit 28 of the tag
|
id = Tag::Id(ptag);
|
||||||
spr1->qwc = (u16)ptag[0]; //QWC set to lower 16bits of the tag until SPR1chain is called in a few lines.
|
|
||||||
spr1->madr = ptag[1]; //MADR = ADDR field
|
spr1->madr = ptag[1]; //MADR = ADDR field
|
||||||
|
|
||||||
// Transfer dma tag if tte is set
|
// Transfer dma tag if tte is set
|
||||||
if (spr1->chcr & 0x40)
|
if (CHCR::TTE(spr1))
|
||||||
{
|
{
|
||||||
SPR_LOG("SPR TTE: %x_%x\n", ptag[3], ptag[2]);
|
SPR_LOG("SPR TTE: %x_%x\n", ptag[3], ptag[2]);
|
||||||
SPR1transfer(ptag, 4); //Transfer Tag
|
SPR1transfer(ptag, 4); //Transfer Tag
|
||||||
|
@ -371,7 +373,7 @@ void _dmaSPR1() // toSPR work function
|
||||||
done = (hwDmacSrcChain(spr1, id) == 1);
|
done = (hwDmacSrcChain(spr1, id) == 1);
|
||||||
SPR1chain(); //Transfers the data set by the switch
|
SPR1chain(); //Transfers the data set by the switch
|
||||||
|
|
||||||
if (spr1->chcr & 0x80 && ptag[0] >> 31) //Check TIE bit of CHCR and IRQ bit of tag
|
if (CHCR::TIE(spr1) && Tag::IRQ(ptag)) //Check TIE bit of CHCR and IRQ bit of tag
|
||||||
{
|
{
|
||||||
SPR_LOG("dmaIrq Set");
|
SPR_LOG("dmaIrq Set");
|
||||||
|
|
||||||
|
@ -385,10 +387,14 @@ void _dmaSPR1() // toSPR work function
|
||||||
ptag = (u32*)dmaGetAddr(spr1->tadr); //Set memory pointer to TADR
|
ptag = (u32*)dmaGetAddr(spr1->tadr); //Set memory pointer to TADR
|
||||||
CPU_INT(9, (((u16)ptag[0]) / BIAS));// the lower 16 bits of the tag / BIAS);
|
CPU_INT(9, (((u16)ptag[0]) / BIAS));// the lower 16 bits of the tag / BIAS);
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
else // Interleave Mode
|
//case INTERLEAVE_MODE:
|
||||||
|
default:
|
||||||
{
|
{
|
||||||
_SPR1interleave();
|
_SPR1interleave();
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -400,7 +406,7 @@ void dmaSPR1() // toSPR
|
||||||
spr1->chcr, spr1->madr, spr1->qwc,
|
spr1->chcr, spr1->madr, spr1->qwc,
|
||||||
spr1->tadr, spr1->sadr);
|
spr1->tadr, spr1->sadr);
|
||||||
|
|
||||||
if (((spr1->chcr & 0xc) == 0x4) && (spr1->qwc == 0))
|
if ((CHCR::MOD(spr1) == CHAIN_MODE) && (spr1->qwc == 0))
|
||||||
{
|
{
|
||||||
u32 *ptag;
|
u32 *ptag;
|
||||||
ptag = (u32*)dmaGetAddr(spr1->tadr); //Set memory pointer to TADR
|
ptag = (u32*)dmaGetAddr(spr1->tadr); //Set memory pointer to TADR
|
||||||
|
@ -417,7 +423,7 @@ void SPRTOinterrupt()
|
||||||
{
|
{
|
||||||
_dmaSPR1();
|
_dmaSPR1();
|
||||||
if (spr1finished == 0) return;
|
if (spr1finished == 0) return;
|
||||||
spr1->chcr &= ~0x100;
|
CHCR::clearSTR(spr1);
|
||||||
hwDmacIrq(DMAC_TO_SPR);
|
hwDmacIrq(DMAC_TO_SPR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
|
|
||||||
#include "IopCommon.h"
|
#include "IopCommon.h"
|
||||||
#include "Sifcmd.h"
|
#include "Sifcmd.h"
|
||||||
|
#include "Tags.h"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
|
@ -139,6 +140,7 @@ __forceinline void SIF0Dma()
|
||||||
if (sif0.counter == 0) // If there's no more to transfer
|
if (sif0.counter == 0) // If there's no more to transfer
|
||||||
{
|
{
|
||||||
// Note.. add normal mode here
|
// Note.. add normal mode here
|
||||||
|
// The if statement doesn't seem to match the description...
|
||||||
if (sif0.sifData.data & 0xC0000000) // If NORMAL mode or end of CHAIN, or interrupt then stop DMA
|
if (sif0.sifData.data & 0xC0000000) // If NORMAL mode or end of CHAIN, or interrupt then stop DMA
|
||||||
{
|
{
|
||||||
SIF_LOG(" IOP SIF Stopped");
|
SIF_LOG(" IOP SIF Stopped");
|
||||||
|
@ -152,7 +154,7 @@ __forceinline void SIF0Dma()
|
||||||
PSX_INT(IopEvt_SIF0, psxCycles);
|
PSX_INT(IopEvt_SIF0, psxCycles);
|
||||||
|
|
||||||
sif0.sifData.data = 0;
|
sif0.sifData.data = 0;
|
||||||
done = TRUE;
|
done = true;
|
||||||
}
|
}
|
||||||
else // Chain mode
|
else // Chain mode
|
||||||
{
|
{
|
||||||
|
@ -172,7 +174,7 @@ __forceinline void SIF0Dma()
|
||||||
SIF_LOG(" END");
|
SIF_LOG(" END");
|
||||||
else
|
else
|
||||||
SIF_LOG(" CNT %08X, %08X", sif0.sifData.data, sif0.sifData.words);
|
SIF_LOG(" CNT %08X, %08X", sif0.sifData.data, sif0.sifData.words);
|
||||||
done = FALSE;
|
done = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else // There's some data ready to transfer into the fifo..
|
else // There's some data ready to transfer into the fifo..
|
||||||
|
@ -219,7 +221,8 @@ __forceinline void SIF0Dma()
|
||||||
|
|
||||||
if (sif0dma->qwc == 0)
|
if (sif0dma->qwc == 0)
|
||||||
{
|
{
|
||||||
if (((sif0dma->chcr & 0x80000080) == 0x80000080) || (sif0.end)) // Stop on tag IRQ or END
|
// Stop if TIE & the IRQ are set, or at the end. (I'll try to convert this to use the tags code later.)
|
||||||
|
if (((sif0dma->chcr & 0x80000080) == 0x80000080) || (sif0.end))
|
||||||
{
|
{
|
||||||
if (sif0.end)
|
if (sif0.end)
|
||||||
SIF_LOG(" EE SIF end");
|
SIF_LOG(" EE SIF end");
|
||||||
|
@ -228,7 +231,7 @@ __forceinline void SIF0Dma()
|
||||||
|
|
||||||
eesifbusy[0] = 0;
|
eesifbusy[0] = 0;
|
||||||
CPU_INT(5, cycles*BIAS);
|
CPU_INT(5, cycles*BIAS);
|
||||||
done = TRUE;
|
done = true;
|
||||||
}
|
}
|
||||||
else if (sif0.fifoSize >= 4) // Read a tag
|
else if (sif0.fifoSize >= 4) // Read a tag
|
||||||
{
|
{
|
||||||
|
@ -242,11 +245,12 @@ __forceinline void SIF0Dma()
|
||||||
|
|
||||||
SIF_LOG(" EE SIF dest chain tag madr:%08X qwc:%04X id:%X irq:%d(%08X_%08X)", sif0dma->madr, sif0dma->qwc, (tag[0] >> 28)&3, (tag[0] >> 31)&1, tag[1], tag[0]);
|
SIF_LOG(" EE SIF dest chain tag madr:%08X qwc:%04X id:%X irq:%d(%08X_%08X)", sif0dma->madr, sif0dma->qwc, (tag[0] >> 28)&3, (tag[0] >> 31)&1, tag[1], tag[0]);
|
||||||
|
|
||||||
|
// (tag[0] >> 28) & 3? Surely this is supposed to be (tag[0] >> 28) & 7? --arcum42
|
||||||
if ((psHu32(DMAC_CTRL) & 0x30) != 0 && ((tag[0] >> 28) & 3) == 0)
|
if ((psHu32(DMAC_CTRL) & 0x30) != 0 && ((tag[0] >> 28) & 3) == 0)
|
||||||
psHu32(DMAC_STADR) = sif0dma->madr + (sif0dma->qwc * 16);
|
psHu32(DMAC_STADR) = sif0dma->madr + (sif0dma->qwc * 16);
|
||||||
sif0.chain = 1;
|
sif0.chain = 1;
|
||||||
if (tag[0] & 0x40000000) sif0.end = 1;
|
if (tag[0] & 0x40000000) sif0.end = 1;
|
||||||
done = FALSE;
|
done = false;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -257,7 +261,6 @@ __forceinline void SIF0Dma()
|
||||||
|
|
||||||
__forceinline void SIF1Dma()
|
__forceinline void SIF1Dma()
|
||||||
{
|
{
|
||||||
int id;
|
|
||||||
u32 *ptag;
|
u32 *ptag;
|
||||||
bool done = FALSE;
|
bool done = FALSE;
|
||||||
int cycles = 0, psxCycles = 0;
|
int cycles = 0, psxCycles = 0;
|
||||||
|
@ -271,12 +274,12 @@ __forceinline void SIF1Dma()
|
||||||
|
|
||||||
if (sif1dma->qwc == 0) // If there's no more to transfer
|
if (sif1dma->qwc == 0) // If there's no more to transfer
|
||||||
{
|
{
|
||||||
if ((sif1dma->chcr & 0xc) == 0 || sif1.end) // If NORMAL mode or end of CHAIN then stop DMA
|
if ((CHCR::MOD(sif1dma) == NORMAL_MODE) || sif1.end) // If NORMAL mode or end of CHAIN then stop DMA
|
||||||
{
|
{
|
||||||
// Stop & signal interrupts on EE
|
// Stop & signal interrupts on EE
|
||||||
SIF_LOG("EE SIF1 End %x", sif1.end);
|
SIF_LOG("EE SIF1 End %x", sif1.end);
|
||||||
eesifbusy[1] = 0;
|
eesifbusy[1] = 0;
|
||||||
done = TRUE;
|
done = true;
|
||||||
CPU_INT(6, cycles*BIAS);
|
CPU_INT(6, cycles*BIAS);
|
||||||
sif1.chain = 0;
|
sif1.chain = 0;
|
||||||
sif1.end = 0;
|
sif1.end = 0;
|
||||||
|
@ -284,7 +287,7 @@ __forceinline void SIF1Dma()
|
||||||
else // Chain mode
|
else // Chain mode
|
||||||
{
|
{
|
||||||
// Process DMA tag at sif1dma->tadr
|
// Process DMA tag at sif1dma->tadr
|
||||||
done = FALSE;
|
done = false;
|
||||||
ptag = _dmaGetAddr(sif1dma, sif1dma->tadr, 6);
|
ptag = _dmaGetAddr(sif1dma, sif1dma->tadr, 6);
|
||||||
if (ptag == NULL) return;
|
if (ptag == NULL) return;
|
||||||
|
|
||||||
|
@ -294,44 +297,43 @@ __forceinline void SIF1Dma()
|
||||||
sif1dma->chcr = (sif1dma->chcr & 0xFFFF) | ((*ptag) & 0xFFFF0000); // Copy the tag
|
sif1dma->chcr = (sif1dma->chcr & 0xFFFF) | ((*ptag) & 0xFFFF0000); // Copy the tag
|
||||||
sif1dma->qwc = (u16)ptag[0];
|
sif1dma->qwc = (u16)ptag[0];
|
||||||
|
|
||||||
if (sif1dma->chcr & 0x40)
|
if (CHCR::TTE(sif1dma))
|
||||||
{
|
{
|
||||||
Console::WriteLn("SIF1 TTE");
|
Console::WriteLn("SIF1 TTE");
|
||||||
SIF1write(ptag + 2, 2);
|
SIF1write(ptag + 2, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
sif1.chain = 1;
|
sif1.chain = 1;
|
||||||
id = (ptag[0] >> 28) & 0x7;
|
|
||||||
|
|
||||||
switch (id)
|
switch (Tag::Id(ptag))
|
||||||
{
|
{
|
||||||
case 0: // refe
|
case TAG_REFE: // refe
|
||||||
SIF_LOG(" REFE %08X", ptag[1]);
|
SIF_LOG(" REFE %08X", ptag[1]);
|
||||||
sif1.end = 1;
|
sif1.end = 1;
|
||||||
sif1dma->madr = ptag[1];
|
sif1dma->madr = ptag[1];
|
||||||
sif1dma->tadr += 16;
|
sif1dma->tadr += 16;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1: // cnt
|
case TAG_CNT: // cnt
|
||||||
SIF_LOG(" CNT");
|
SIF_LOG(" CNT");
|
||||||
sif1dma->madr = sif1dma->tadr + 16;
|
sif1dma->madr = sif1dma->tadr + 16;
|
||||||
sif1dma->tadr = sif1dma->madr + (sif1dma->qwc << 4);
|
sif1dma->tadr = sif1dma->madr + (sif1dma->qwc << 4);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2: // next
|
case TAG_NEXT: // next
|
||||||
SIF_LOG(" NEXT %08X", ptag[1]);
|
SIF_LOG(" NEXT %08X", ptag[1]);
|
||||||
sif1dma->madr = sif1dma->tadr + 16;
|
sif1dma->madr = sif1dma->tadr + 16;
|
||||||
sif1dma->tadr = ptag[1];
|
sif1dma->tadr = ptag[1];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3: // ref
|
case TAG_REF: // ref
|
||||||
case 4: // refs
|
case TAG_REFS: // refs
|
||||||
SIF_LOG(" REF %08X", ptag[1]);
|
SIF_LOG(" REF %08X", ptag[1]);
|
||||||
sif1dma->madr = ptag[1];
|
sif1dma->madr = ptag[1];
|
||||||
sif1dma->tadr += 16;
|
sif1dma->tadr += 16;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 7: // end
|
case TAG_END: // end
|
||||||
SIF_LOG(" END");
|
SIF_LOG(" END");
|
||||||
sif1.end = 1;
|
sif1.end = 1;
|
||||||
sif1dma->madr = sif1dma->tadr + 16;
|
sif1dma->madr = sif1dma->tadr + 16;
|
||||||
|
@ -341,7 +343,7 @@ __forceinline void SIF1Dma()
|
||||||
default:
|
default:
|
||||||
Console::WriteLn("Bad addr1 source chain");
|
Console::WriteLn("Bad addr1 source chain");
|
||||||
}
|
}
|
||||||
if ((sif1dma->chcr & 0x80) && (ptag[0] >> 31))
|
if ((CHCR::TIE(sif1dma)) && (Tag::IRQ(ptag)))
|
||||||
{
|
{
|
||||||
Console::WriteLn("SIF1 TIE");
|
Console::WriteLn("SIF1 TIE");
|
||||||
sif1.end = 1;
|
sif1.end = 1;
|
||||||
|
@ -373,7 +375,7 @@ __forceinline void SIF1Dma()
|
||||||
{
|
{
|
||||||
int size = sif1.counter;
|
int size = sif1.counter;
|
||||||
|
|
||||||
if (size > 0) // If we're reading something continue to do so
|
if (size > 0) // If we're reading something, continue to do so.
|
||||||
{
|
{
|
||||||
int readSize = size;
|
int readSize = size;
|
||||||
|
|
||||||
|
@ -400,7 +402,7 @@ __forceinline void SIF1Dma()
|
||||||
iopsifbusy[1] = 0;
|
iopsifbusy[1] = 0;
|
||||||
PSX_INT(IopEvt_SIF1, psxCycles);
|
PSX_INT(IopEvt_SIF1, psxCycles);
|
||||||
sif1.tagMode = 0;
|
sif1.tagMode = 0;
|
||||||
done = TRUE;
|
done = true;
|
||||||
}
|
}
|
||||||
else if (sif1.fifoSize >= 4) // Read a tag
|
else if (sif1.fifoSize >= 4) // Read a tag
|
||||||
{
|
{
|
||||||
|
@ -410,7 +412,7 @@ __forceinline void SIF1Dma()
|
||||||
HW_DMA10_MADR = d.data & 0xffffff;
|
HW_DMA10_MADR = d.data & 0xffffff;
|
||||||
sif1.counter = d.words;
|
sif1.counter = d.words;
|
||||||
sif1.tagMode = (d.data >> 24) & 0xFF;
|
sif1.tagMode = (d.data >> 24) & 0xFF;
|
||||||
done = FALSE;
|
done = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -432,14 +434,14 @@ __forceinline void sif1Interrupt()
|
||||||
|
|
||||||
__forceinline void EEsif0Interrupt()
|
__forceinline void EEsif0Interrupt()
|
||||||
{
|
{
|
||||||
sif0dma->chcr &= ~0x100;
|
|
||||||
hwDmacIrq(DMAC_SIF0);
|
hwDmacIrq(DMAC_SIF0);
|
||||||
|
CHCR::clearSTR(sif0dma);
|
||||||
}
|
}
|
||||||
|
|
||||||
__forceinline void EEsif1Interrupt()
|
__forceinline void EEsif1Interrupt()
|
||||||
{
|
{
|
||||||
hwDmacIrq(DMAC_SIF1);
|
hwDmacIrq(DMAC_SIF1);
|
||||||
sif1dma->chcr &= ~0x100;
|
CHCR::clearSTR(sif1dma);
|
||||||
}
|
}
|
||||||
|
|
||||||
__forceinline void dmaSIF0()
|
__forceinline void dmaSIF0()
|
||||||
|
@ -494,7 +496,7 @@ __forceinline void dmaSIF2()
|
||||||
SIF_LOG("dmaSIF2 chcr = %lx, madr = %lx, qwc = %lx",
|
SIF_LOG("dmaSIF2 chcr = %lx, madr = %lx, qwc = %lx",
|
||||||
sif2dma->chcr, sif2dma->madr, sif2dma->qwc);
|
sif2dma->chcr, sif2dma->madr, sif2dma->qwc);
|
||||||
|
|
||||||
sif2dma->chcr &= ~0x100;
|
CHCR::clearSTR(sif2dma);
|
||||||
hwDmacIrq(DMAC_SIF2);
|
hwDmacIrq(DMAC_SIF2);
|
||||||
Console::WriteLn("*PCSX2*: dmaSIF2");
|
Console::WriteLn("*PCSX2*: dmaSIF2");
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,312 @@
|
||||||
|
/* Pcsx2 - Pc Ps2 Emulator
|
||||||
|
* Copyright (C) 2002-2009 Pcsx2 Team
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
// This is meant to be a collection of generic functions dealing with tags.
|
||||||
|
// I kept seeing the same code over and over with different structure names
|
||||||
|
// and the same members, and figured it'd be a good spot to use templates...
|
||||||
|
|
||||||
|
// Actually, looks like I didn't need templates after all... :)
|
||||||
|
|
||||||
|
enum mfd_type
|
||||||
|
{
|
||||||
|
NO_MFD,
|
||||||
|
MFD_RESERVED,
|
||||||
|
MFD_VIF1,
|
||||||
|
MFD_GIF
|
||||||
|
};
|
||||||
|
|
||||||
|
enum sts_type
|
||||||
|
{
|
||||||
|
NO_STS,
|
||||||
|
STS_SIF0,
|
||||||
|
STS_fromSPR,
|
||||||
|
STS_fromIPU
|
||||||
|
};
|
||||||
|
|
||||||
|
enum std_type
|
||||||
|
{
|
||||||
|
NO_STD,
|
||||||
|
STD_VIF1,
|
||||||
|
STD_GIF,
|
||||||
|
STD_SIF1
|
||||||
|
};
|
||||||
|
|
||||||
|
enum d_ctrl_flags
|
||||||
|
{
|
||||||
|
CTRL_DMAE = 0x1, // 0/1 - disables/enables all DMAs
|
||||||
|
CTRL_RELE = 0x2, // 0/1 - cycle stealing off/on
|
||||||
|
CTRL_MFD = 0xC, // Memory FIFO drain channel (mfd_type)
|
||||||
|
CTRL_STS = 0x30, // Stall Control source channel (sts type)
|
||||||
|
CTRL_STD = 0xC0, // Stall Controll drain channel (std_type)
|
||||||
|
CTRL_RCYC = 0x100 // Release cycle (8/16/32/64/128/256)
|
||||||
|
// When cycle stealing is on, the release cycle sets the period to release
|
||||||
|
// the bus to EE.
|
||||||
|
};
|
||||||
|
|
||||||
|
enum pce_values
|
||||||
|
{
|
||||||
|
PCE_NOTHING = 0,
|
||||||
|
PCE_RESERVED,
|
||||||
|
PCE_DISABLED,
|
||||||
|
PCE_ENABLED
|
||||||
|
};
|
||||||
|
|
||||||
|
enum tag_id
|
||||||
|
{
|
||||||
|
TAG_CNTS = 0,
|
||||||
|
TAG_REFE = 0, // Transfer Packet According to ADDR field, clear STR, and end
|
||||||
|
TAG_CNT, // Transfer QWC following the tag.
|
||||||
|
TAG_NEXT, // Transfer QWC following tag. TADR = ADDR
|
||||||
|
TAG_REF, // Transfer QWC from ADDR field
|
||||||
|
TAG_REFS, // Transfer QWC from ADDR field (Stall Control)
|
||||||
|
TAG_CALL, // Transfer QWC following the tag, save succeeding tag
|
||||||
|
TAG_RET, // Transfer QWC following the tag, load next tag
|
||||||
|
TAG_END // Transfer QWC following the tag
|
||||||
|
};
|
||||||
|
|
||||||
|
enum chcr_flags
|
||||||
|
{
|
||||||
|
CHCR_DIR = 0x1, // Direction: 0 - to memory, 1 - from memory. VIF1 & SIF2 only.
|
||||||
|
CHCR_MOD1 = 0x4,
|
||||||
|
CHCR_MOD2 = 0x8,
|
||||||
|
CHCR_MOD = 0xC, // MOD1 & MOD2; Holds which of the Transfer modes above is used.
|
||||||
|
CHCR_ASP1 = 0x10,
|
||||||
|
CHCR_ASP2 = 0x20,
|
||||||
|
CHCR_ASP = 0x30, // ASP1 & ASP2; Address stack pointer. 0, 1, or 2 addresses.
|
||||||
|
CHCR_TTE = 0x40, // Tag Transfer Enable. 0 - Diable / 1 - Enable.
|
||||||
|
CHCR_TIE = 0x80, // Tag Interrupt Enable. 0 - Diable / 1 - Enable.
|
||||||
|
CHCR_STR = 0x100 // Start. 0 while stopping DMA, 1 while it's running.
|
||||||
|
};
|
||||||
|
|
||||||
|
enum TransferMode
|
||||||
|
{
|
||||||
|
NORMAL_MODE = 0,
|
||||||
|
CHAIN_MODE,
|
||||||
|
INTERLEAVE_MODE,
|
||||||
|
UNDEFINED_MODE
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace Tag
|
||||||
|
{
|
||||||
|
// Transfer functions,
|
||||||
|
static __forceinline void UpperTransfer(DMACh *tag, u32* ptag)
|
||||||
|
{
|
||||||
|
// Transfer upper part of tag to CHCR bits 31-15
|
||||||
|
tag->chcr = (tag->chcr & 0xFFFF) | ((*ptag) & 0xFFFF0000);
|
||||||
|
}
|
||||||
|
|
||||||
|
static __forceinline void LowerTransfer(DMACh *tag, u32* ptag)
|
||||||
|
{
|
||||||
|
//QWC set to lower 16bits of the tag
|
||||||
|
tag->qwc = (u16)ptag[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
static __forceinline bool Transfer(const char *s, DMACh *tag, u32* ptag)
|
||||||
|
{
|
||||||
|
if (ptag == NULL) // Is ptag empty?
|
||||||
|
{
|
||||||
|
Console::Error("%s BUSERR", params s);
|
||||||
|
UpperTransfer(tag, ptag);
|
||||||
|
|
||||||
|
// Set BEIS (BUSERR) in DMAC_STAT register
|
||||||
|
psHu32(DMAC_STAT) |= DMAC_STAT_BEIS;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
UpperTransfer(tag, ptag);
|
||||||
|
LowerTransfer(tag, ptag);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*// Not sure if I'll need this one.
|
||||||
|
static __forceinline bool SafeTransfer(const char *s, DMACh *tag, u32* ptag)
|
||||||
|
{
|
||||||
|
if (ptag == NULL) // Is ptag empty?
|
||||||
|
{
|
||||||
|
Console::Error("%s BUSERR", params s);
|
||||||
|
|
||||||
|
// Set BEIS (BUSERR) in DMAC_STAT register
|
||||||
|
psHu32(DMAC_STAT) |= DMAC_STAT_BEIS;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
UpperTransfer(tag, ptag);
|
||||||
|
LowerTransfer(tag, ptag);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}*/
|
||||||
|
|
||||||
|
static __forceinline void UnsafeTransfer(DMACh *tag, u32* ptag)
|
||||||
|
{
|
||||||
|
UpperTransfer(tag, ptag);
|
||||||
|
LowerTransfer(tag, ptag);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Untested
|
||||||
|
static __forceinline u16 QWC(u32 *tag)
|
||||||
|
{
|
||||||
|
return (tag[0] & 0xffff);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Untested
|
||||||
|
static __forceinline pce_values PCE(u32 *tag)
|
||||||
|
{
|
||||||
|
return (pce_values)((tag[0] >> 22) & 0x3);
|
||||||
|
}
|
||||||
|
|
||||||
|
static __forceinline tag_id Id(u32* tag)
|
||||||
|
{
|
||||||
|
return (tag_id)((tag[0] >> 28) & 0x7);
|
||||||
|
}
|
||||||
|
|
||||||
|
static __forceinline tag_id Id(u32 tag)
|
||||||
|
{
|
||||||
|
return (tag_id)((tag >> 28) & 0x7);
|
||||||
|
}
|
||||||
|
|
||||||
|
static __forceinline bool IRQ(u32 *tag)
|
||||||
|
{
|
||||||
|
return !!(tag[0] >> 31);
|
||||||
|
}
|
||||||
|
|
||||||
|
static __forceinline bool IRQ(u32 tag)
|
||||||
|
{
|
||||||
|
return !!(tag >> 31);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace CHCR
|
||||||
|
{
|
||||||
|
// Query the flags in the channel control register.
|
||||||
|
static __forceinline bool STR(DMACh *tag) { return !!(tag->chcr & CHCR_STR); }
|
||||||
|
static __forceinline bool TIE(DMACh *tag) { return !!(tag->chcr & CHCR_TIE); }
|
||||||
|
static __forceinline bool TTE(DMACh *tag) { return !!(tag->chcr & CHCR_TTE); }
|
||||||
|
static __forceinline u8 DIR(DMACh *tag) { return (tag->chcr & CHCR_DIR); }
|
||||||
|
|
||||||
|
static __forceinline TransferMode MOD(DMACh *tag)
|
||||||
|
{
|
||||||
|
return (TransferMode)((tag->chcr & CHCR_MOD) >> 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
static __forceinline u8 ASP(DMACh *tag)
|
||||||
|
{
|
||||||
|
|
||||||
|
return (TransferMode)((tag->chcr & CHCR_ASP) >> 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clear the individual flags.
|
||||||
|
static __forceinline void clearSTR(DMACh *tag) { tag->chcr &= ~CHCR_STR; }
|
||||||
|
static __forceinline void clearTIE(DMACh *tag) { tag->chcr &= ~CHCR_TIE; }
|
||||||
|
static __forceinline void clearTTE(DMACh *tag) { tag->chcr &= ~CHCR_TTE; }
|
||||||
|
static __forceinline void clearDIR(DMACh *tag) { tag->chcr &= ~CHCR_DIR; }
|
||||||
|
|
||||||
|
// Set them.
|
||||||
|
static __forceinline void setSTR(DMACh *tag) { tag->chcr |= CHCR_STR; }
|
||||||
|
static __forceinline void setTIE(DMACh *tag) { tag->chcr |= CHCR_TIE; }
|
||||||
|
static __forceinline void setTTE(DMACh *tag) { tag->chcr |= CHCR_TTE; }
|
||||||
|
static __forceinline void setDIR(DMACh *tag) { tag->chcr |= CHCR_DIR; }
|
||||||
|
|
||||||
|
static __forceinline void setMOD(DMACh *tag, TransferMode mode)
|
||||||
|
{
|
||||||
|
if (mode & (1 << 0))
|
||||||
|
tag->chcr |= CHCR_MOD1;
|
||||||
|
else
|
||||||
|
tag->chcr &= CHCR_MOD1;
|
||||||
|
|
||||||
|
if (mode & (1 << 1))
|
||||||
|
tag->chcr |= CHCR_MOD2;
|
||||||
|
else
|
||||||
|
tag->chcr &= CHCR_MOD2;
|
||||||
|
}
|
||||||
|
|
||||||
|
static __forceinline void setASP(DMACh *tag, u8 num)
|
||||||
|
{
|
||||||
|
if (num & (1 << 0))
|
||||||
|
tag->chcr |= CHCR_ASP1;
|
||||||
|
else
|
||||||
|
tag->chcr &= CHCR_ASP2;
|
||||||
|
|
||||||
|
if (num & (1 << 1))
|
||||||
|
tag->chcr |= CHCR_ASP1;
|
||||||
|
else
|
||||||
|
tag->chcr &= CHCR_ASP2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Print information about a chcr tag.
|
||||||
|
static __forceinline void Print(const char* s, DMACh *tag)
|
||||||
|
{
|
||||||
|
u8 num_addr = ASP(tag);
|
||||||
|
TransferMode mode = MOD(tag);
|
||||||
|
|
||||||
|
Console::Write("%s chcr %s mem: ", params s, (DIR(tag)) ? "from" : "to");
|
||||||
|
|
||||||
|
if (mode == NORMAL_MODE)
|
||||||
|
Console::Write(" normal mode; ");
|
||||||
|
else if (mode == CHAIN_MODE)
|
||||||
|
Console::Write(" chain mode; ");
|
||||||
|
else if (mode == INTERLEAVE_MODE)
|
||||||
|
Console::Write(" interleave mode; ");
|
||||||
|
else
|
||||||
|
Console::Write(" ?? mode; ");
|
||||||
|
|
||||||
|
if (num_addr != 0) Console::Write("ASP = %d;", params num_addr);
|
||||||
|
if (TTE(tag)) Console::Write("TTE;");
|
||||||
|
if (TIE(tag)) Console::Write("TIE;");
|
||||||
|
if (STR(tag)) Console::Write(" (DMA started)."); else Console::Write(" (DMA stopped).");
|
||||||
|
Console::WriteLn("");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace QWC
|
||||||
|
{
|
||||||
|
static __forceinline bool Empty(DMACh *tag)
|
||||||
|
{
|
||||||
|
return (tag->qwc == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static __forceinline void Clear(DMACh *tag)
|
||||||
|
{
|
||||||
|
tag->qwc = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace D_CTRL
|
||||||
|
{
|
||||||
|
static __forceinline bool DMAE() { return !!(psHu32(DMAC_CTRL) & CTRL_DMAE); }
|
||||||
|
static __forceinline bool RELE() { return !!(psHu32(DMAC_CTRL) & CTRL_RELE); }
|
||||||
|
static __forceinline mfd_type MFD()
|
||||||
|
{
|
||||||
|
return (mfd_type)((psHu32(DMAC_CTRL) & CTRL_MFD) >> 2);
|
||||||
|
}
|
||||||
|
static __forceinline sts_type STS()
|
||||||
|
{
|
||||||
|
return (sts_type)((psHu32(DMAC_CTRL) & CTRL_STS) >> 4);
|
||||||
|
}
|
||||||
|
static __forceinline std_type STD()
|
||||||
|
{
|
||||||
|
return (std_type)((psHu32(DMAC_CTRL) & CTRL_STD) >> 6);
|
||||||
|
}
|
||||||
|
static __forceinline int RCLC()
|
||||||
|
{
|
||||||
|
return ((((psHu32(DMAC_CTRL) & CTRL_RCYC) >> 3) + 1) * 8);
|
||||||
|
}
|
||||||
|
}
|
|
@ -24,6 +24,7 @@
|
||||||
#include "VUmicro.h"
|
#include "VUmicro.h"
|
||||||
#include "Vif.h"
|
#include "Vif.h"
|
||||||
#include "VifDma.h"
|
#include "VifDma.h"
|
||||||
|
#include "Tags.h"
|
||||||
|
|
||||||
VIFregisters *vifRegs;
|
VIFregisters *vifRegs;
|
||||||
u32* vifRow = NULL;
|
u32* vifRow = NULL;
|
||||||
|
@ -452,7 +453,7 @@ void mfifoVIF1transfer(int qwc)
|
||||||
{
|
{
|
||||||
ptag = (u32*)dmaGetAddr(vif1ch->tadr);
|
ptag = (u32*)dmaGetAddr(vif1ch->tadr);
|
||||||
|
|
||||||
if (vif1ch->chcr & 0x40)
|
if (CHCR::TTE(vif1ch))
|
||||||
{
|
{
|
||||||
if (vif1.stallontag)
|
if (vif1.stallontag)
|
||||||
ret = VIF1transfer(ptag + (2 + vif1.irqoffset), 2 - vif1.irqoffset, 1); //Transfer Tag on Stall
|
ret = VIF1transfer(ptag + (2 + vif1.irqoffset), 2 - vif1.irqoffset, 1); //Transfer Tag on Stall
|
||||||
|
@ -467,30 +468,29 @@ void mfifoVIF1transfer(int qwc)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
id = (ptag[0] >> 28) & 0x7;
|
Tag::UnsafeTransfer(vif1ch, ptag);
|
||||||
vif1ch->qwc = (ptag[0] & 0xffff);
|
|
||||||
vif1ch->madr = ptag[1];
|
|
||||||
|
|
||||||
vif1ch->chcr = (vif1ch->chcr & 0xFFFF) | ((*ptag) & 0xFFFF0000);
|
vif1ch->madr = ptag[1];
|
||||||
|
id =Tag::Id(ptag);
|
||||||
|
vifqwc--;
|
||||||
|
|
||||||
SPR_LOG("dmaChain %8.8x_%8.8x size=%d, id=%d, madr=%lx, tadr=%lx mfifo qwc = %x spr0 madr = %x",
|
SPR_LOG("dmaChain %8.8x_%8.8x size=%d, id=%d, madr=%lx, tadr=%lx mfifo qwc = %x spr0 madr = %x",
|
||||||
ptag[1], ptag[0], vif1ch->qwc, id, vif1ch->madr, vif1ch->tadr, vifqwc, spr0->madr);
|
ptag[1], ptag[0], vif1ch->qwc, id, vif1ch->madr, vif1ch->tadr, vifqwc, spr0->madr);
|
||||||
vifqwc--;
|
|
||||||
|
|
||||||
switch (id)
|
switch (id)
|
||||||
{
|
{
|
||||||
case 0: // Refe - Transfer Packet According to ADDR field
|
case TAG_REFE: // Refe - Transfer Packet According to ADDR field
|
||||||
vif1ch->tadr = psHu32(DMAC_RBOR) + ((vif1ch->tadr + 16) & psHu32(DMAC_RBSR));
|
vif1ch->tadr = psHu32(DMAC_RBOR) + ((vif1ch->tadr + 16) & psHu32(DMAC_RBSR));
|
||||||
vif1.done = true; //End Transfer
|
vif1.done = true; //End Transfer
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1: // CNT - Transfer QWC following the tag.
|
case TAG_CNT: // CNT - Transfer QWC following the tag.
|
||||||
vif1ch->madr = psHu32(DMAC_RBOR) + ((vif1ch->tadr + 16) & psHu32(DMAC_RBSR)); //Set MADR to QW after Tag
|
vif1ch->madr = psHu32(DMAC_RBOR) + ((vif1ch->tadr + 16) & psHu32(DMAC_RBSR)); //Set MADR to QW after Tag
|
||||||
vif1ch->tadr = psHu32(DMAC_RBOR) + ((vif1ch->madr + (vif1ch->qwc << 4)) & psHu32(DMAC_RBSR)); //Set TADR to QW following the data
|
vif1ch->tadr = psHu32(DMAC_RBOR) + ((vif1ch->madr + (vif1ch->qwc << 4)) & psHu32(DMAC_RBSR)); //Set TADR to QW following the data
|
||||||
vif1.done = false;
|
vif1.done = false;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2: // Next - Transfer QWC following tag. TADR = ADDR
|
case TAG_NEXT: // Next - Transfer QWC following tag. TADR = ADDR
|
||||||
{
|
{
|
||||||
int temp = vif1ch->madr; //Temporarily Store ADDR
|
int temp = vif1ch->madr; //Temporarily Store ADDR
|
||||||
vif1ch->madr = psHu32(DMAC_RBOR) + ((vif1ch->tadr + 16) & psHu32(DMAC_RBSR)); //Set MADR to QW following the tag
|
vif1ch->madr = psHu32(DMAC_RBOR) + ((vif1ch->tadr + 16) & psHu32(DMAC_RBSR)); //Set MADR to QW following the tag
|
||||||
|
@ -500,20 +500,20 @@ void mfifoVIF1transfer(int qwc)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case 3: // Ref - Transfer QWC from ADDR field
|
case TAG_REF: // Ref - Transfer QWC from ADDR field
|
||||||
case 4: // Refs - Transfer QWC from ADDR field (Stall Control)
|
case TAG_REFS: // Refs - Transfer QWC from ADDR field (Stall Control)
|
||||||
vif1ch->tadr = psHu32(DMAC_RBOR) + ((vif1ch->tadr + 16) & psHu32(DMAC_RBSR)); //Set TADR to next tag
|
vif1ch->tadr = psHu32(DMAC_RBOR) + ((vif1ch->tadr + 16) & psHu32(DMAC_RBSR)); //Set TADR to next tag
|
||||||
vif1.done = false;
|
vif1.done = false;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 7: // End - Transfer QWC following the tag
|
case TAG_END: // End - Transfer QWC following the tag
|
||||||
vif1ch->madr = psHu32(DMAC_RBOR) + ((vif1ch->tadr + 16) & psHu32(DMAC_RBSR)); //Set MADR to data following the tag
|
vif1ch->madr = psHu32(DMAC_RBOR) + ((vif1ch->tadr + 16) & psHu32(DMAC_RBSR)); //Set MADR to data following the tag
|
||||||
vif1ch->tadr = psHu32(DMAC_RBOR) + ((vif1ch->madr + (vif1ch->qwc << 4)) & psHu32(DMAC_RBSR)); //Set TADR to QW following the data
|
vif1ch->tadr = psHu32(DMAC_RBOR) + ((vif1ch->madr + (vif1ch->qwc << 4)) & psHu32(DMAC_RBSR)); //Set TADR to QW following the data
|
||||||
vif1.done = true; //End Transfer
|
vif1.done = true; //End Transfer
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((vif1ch->chcr & 0x80) && (ptag[0] >> 31))
|
if ((CHCR::TIE(vif1ch)) && (Tag::IRQ(ptag)))
|
||||||
{
|
{
|
||||||
VIF_LOG("dmaIrq Set");
|
VIF_LOG("dmaIrq Set");
|
||||||
vif1.done = true;
|
vif1.done = true;
|
||||||
|
@ -533,25 +533,24 @@ void vifMFIFOInterrupt()
|
||||||
|
|
||||||
if ((vif1Regs->stat & VIF1_STAT_VGW))
|
if ((vif1Regs->stat & VIF1_STAT_VGW))
|
||||||
{
|
{
|
||||||
if(gif->chcr & 0x100)
|
if (CHCR::STR(gif))
|
||||||
{
|
{
|
||||||
CPU_INT(10, 16);
|
CPU_INT(10, 16);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else vif1Regs->stat &= ~VIF1_STAT_VGW;
|
else
|
||||||
|
{
|
||||||
|
vif1Regs->stat &= ~VIF1_STAT_VGW;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if((spr0->chcr & 0x100) && spr0->qwc == 0)
|
if ((CHCR::STR(spr0)) && (spr0->qwc == 0))
|
||||||
{
|
{
|
||||||
spr0->chcr &= ~0x100;
|
CHCR::clearSTR(spr0);
|
||||||
hwDmacIrq(DMAC_FROM_SPR);
|
hwDmacIrq(DMAC_FROM_SPR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (vif1.irq && vif1.tag.size == 0)
|
if (vif1.irq && vif1.tag.size == 0)
|
||||||
{
|
{
|
||||||
vif1Regs->stat |= VIF1_STAT_INT;
|
vif1Regs->stat |= VIF1_STAT_INT;
|
||||||
|
@ -560,7 +559,7 @@ void vifMFIFOInterrupt()
|
||||||
if (vif1Regs->stat & (VIF1_STAT_VSS | VIF1_STAT_VIS | VIF1_STAT_VFS))
|
if (vif1Regs->stat & (VIF1_STAT_VSS | VIF1_STAT_VIS | VIF1_STAT_VFS))
|
||||||
{
|
{
|
||||||
vif1Regs->stat &= ~0x1F000000; // FQC=0
|
vif1Regs->stat &= ~0x1F000000; // FQC=0
|
||||||
vif1ch->chcr &= ~0x100;
|
CHCR::clearSTR(vif1ch);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -607,7 +606,7 @@ void vifMFIFOInterrupt()
|
||||||
|
|
||||||
vif1.done = 1;
|
vif1.done = 1;
|
||||||
g_vifCycles = 0;
|
g_vifCycles = 0;
|
||||||
vif1ch->chcr &= ~0x100;
|
CHCR::clearSTR(vif1ch);
|
||||||
hwDmacIrq(DMAC_VIF1);
|
hwDmacIrq(DMAC_VIF1);
|
||||||
VIF_LOG("vif mfifo dma end");
|
VIF_LOG("vif mfifo dma end");
|
||||||
|
|
||||||
|
|
124
pcsx2/VifDma.cpp
124
pcsx2/VifDma.cpp
|
@ -23,6 +23,7 @@
|
||||||
#include "VUmicro.h"
|
#include "VUmicro.h"
|
||||||
#include "GS.h"
|
#include "GS.h"
|
||||||
#include "VifDma.h"
|
#include "VifDma.h"
|
||||||
|
#include "Tags.h"
|
||||||
|
|
||||||
#include <xmmintrin.h>
|
#include <xmmintrin.h>
|
||||||
#include <emmintrin.h>
|
#include <emmintrin.h>
|
||||||
|
@ -425,23 +426,19 @@ static int VIFalign(u32 *data, vifCode *v, unsigned int size, const unsigned int
|
||||||
{
|
{
|
||||||
vif->tag.addr += (((vifRegs->cycle.cl - vifRegs->cycle.wl) << 2) + ((4 - ft->qsize) + unpacksize)) * 4;
|
vif->tag.addr += (((vifRegs->cycle.cl - vifRegs->cycle.wl) << 2) + ((4 - ft->qsize) + unpacksize)) * 4;
|
||||||
dest += ((vifRegs->cycle.cl - vifRegs->cycle.wl) << 2) + (4 - ft->qsize) + unpacksize;
|
dest += ((vifRegs->cycle.cl - vifRegs->cycle.wl) << 2) + (4 - ft->qsize) + unpacksize;
|
||||||
if(vif->tag.addr >= (u32)(VIFdmanum ? 0x4000 : 0x1000))
|
|
||||||
{
|
|
||||||
vif->tag.addr &= (u32)(VIFdmanum ? 0x3fff : 0xfff);
|
|
||||||
dest = (u32*)(VU->Mem + v->addr);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
vif->tag.addr += ((4 - ft->qsize) + unpacksize) * 4;
|
vif->tag.addr += ((4 - ft->qsize) + unpacksize) * 4;
|
||||||
dest += (4 - ft->qsize) + unpacksize;
|
dest += (4 - ft->qsize) + unpacksize;
|
||||||
|
}
|
||||||
|
|
||||||
if (vif->tag.addr >= (u32)(VIFdmanum ? 0x4000 : 0x1000))
|
if (vif->tag.addr >= (u32)(VIFdmanum ? 0x4000 : 0x1000))
|
||||||
{
|
{
|
||||||
vif->tag.addr &= (u32)(VIFdmanum ? 0x3fff : 0xfff);
|
vif->tag.addr &= (u32)(VIFdmanum ? 0x3fff : 0xfff);
|
||||||
dest = (u32*)(VU->Mem + v->addr);
|
dest = (u32*)(VU->Mem + v->addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
cdata += unpacksize * ft->dsize;
|
cdata += unpacksize * ft->dsize;
|
||||||
vif->cl = 0;
|
vif->cl = 0;
|
||||||
VIFUNPACK_LOG("Aligning packet done size = %d offset %d addr %x", size, vifRegs->offset, vif->tag.addr);
|
VIFUNPACK_LOG("Aligning packet done size = %d offset %d addr %x", size, vifRegs->offset, vif->tag.addr);
|
||||||
|
@ -452,11 +449,13 @@ static int VIFalign(u32 *data, vifCode *v, unsigned int size, const unsigned int
|
||||||
{
|
{
|
||||||
vif->tag.addr += ((4 - ft->qsize) + unpacksize) * 4;
|
vif->tag.addr += ((4 - ft->qsize) + unpacksize) * 4;
|
||||||
dest += (4 - ft->qsize) + unpacksize;
|
dest += (4 - ft->qsize) + unpacksize;
|
||||||
|
|
||||||
if (vif->tag.addr >= (u32)(VIFdmanum ? 0x4000 : 0x1000))
|
if (vif->tag.addr >= (u32)(VIFdmanum ? 0x4000 : 0x1000))
|
||||||
{
|
{
|
||||||
vif->tag.addr &= (u32)(VIFdmanum ? 0x3fff : 0xfff);
|
vif->tag.addr &= (u32)(VIFdmanum ? 0x3fff : 0xfff);
|
||||||
dest = (u32*)(VU->Mem + v->addr);
|
dest = (u32*)(VU->Mem + v->addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
cdata += unpacksize * ft->dsize;
|
cdata += unpacksize * ft->dsize;
|
||||||
VIFUNPACK_LOG("Aligning packet done size = %d offset %d addr %x", size, vifRegs->offset, vif->tag.addr);
|
VIFUNPACK_LOG("Aligning packet done size = %d offset %d addr %x", size, vifRegs->offset, vif->tag.addr);
|
||||||
}
|
}
|
||||||
|
@ -498,6 +497,8 @@ static int VIFalign(u32 *data, vifCode *v, unsigned int size, const unsigned int
|
||||||
dest += 4;
|
dest += 4;
|
||||||
vif->tag.addr += 16;
|
vif->tag.addr += 16;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Hurrah for the 4th occurrance of this piece of code in this function...
|
||||||
if (vif->tag.addr >= (u32)(VIFdmanum ? 0x4000 : 0x1000))
|
if (vif->tag.addr >= (u32)(VIFdmanum ? 0x4000 : 0x1000))
|
||||||
{
|
{
|
||||||
vif->tag.addr &= (u32)(VIFdmanum ? 0x3fff : 0xfff);
|
vif->tag.addr &= (u32)(VIFdmanum ? 0x3fff : 0xfff);
|
||||||
|
@ -629,7 +630,7 @@ static void VIFunpack(u32 *data, vifCode *v, unsigned int size, const unsigned i
|
||||||
((memlimit + (vifRegs->cycle.cl - vifRegs->cycle.wl) * 16) == tempsize) ||
|
((memlimit + (vifRegs->cycle.cl - vifRegs->cycle.wl) * 16) == tempsize) ||
|
||||||
(tempsize == memlimit)))
|
(tempsize == memlimit)))
|
||||||
{
|
{
|
||||||
//Its a red herring! so ignore it! SSE unpacks will be much quicker
|
//It's a red herring, so ignore it! SSE unpacks will be much quicker.
|
||||||
tempsize = 0;
|
tempsize = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -985,6 +986,7 @@ static int __fastcall Vif0TransNull(u32 *data) // Shouldnt go here
|
||||||
vif0.cmd = 0;
|
vif0.cmd = 0;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __fastcall Vif0TransSTMask(u32 *data) // STMASK
|
static int __fastcall Vif0TransSTMask(u32 *data) // STMASK
|
||||||
{
|
{
|
||||||
SetNewMask(g_vif0Masks, g_vif0HasMask3, data[0], vif0Regs->mask);
|
SetNewMask(g_vif0Masks, g_vif0HasMask3, data[0], vif0Regs->mask);
|
||||||
|
@ -1372,30 +1374,24 @@ int _chainVIF0()
|
||||||
int id, ret;
|
int id, ret;
|
||||||
|
|
||||||
vif0ptag = (u32*)dmaGetAddr(vif0ch->tadr); //Set memory pointer to TADR
|
vif0ptag = (u32*)dmaGetAddr(vif0ch->tadr); //Set memory pointer to TADR
|
||||||
if (vif0ptag == NULL) //Is vif0ptag empty?
|
|
||||||
{
|
|
||||||
Console::Error("Vif0 Tag BUSERR");
|
|
||||||
vif0ch->chcr = (vif0ch->chcr & 0xFFFF) | ((*vif0ptag) & 0xFFFF0000); //Transfer upper part of tag to CHCR bits 31-15
|
|
||||||
psHu32(DMAC_STAT) |= DMAC_STAT_BEIS; //If yes, set BEIS (BUSERR) in DMAC_STAT register
|
|
||||||
return -1; //Return -1 as an error has occurred
|
|
||||||
}
|
|
||||||
|
|
||||||
id = (vif0ptag[0] >> 28) & 0x7; //ID for DmaChain copied from bit 28 of the tag
|
if (!(Tag::Transfer("Vif0 Tag", vif0ch, vif0ptag))) return -1;
|
||||||
vif0ch->qwc = (u16)vif0ptag[0]; //QWC set to lower 16bits of the tag
|
|
||||||
vif0ch->madr = vif0ptag[1]; // MADR = ADDR field
|
vif0ch->madr = vif0ptag[1]; // MADR = ADDR field
|
||||||
g_vifCycles += 1; // Add 1 g_vifCycles from the QW read for the tag
|
id = Tag::Id(vif0ptag); // ID for DmaChain copied from bit 28 of the tag
|
||||||
|
g_vifCycles += 1; // Increase the QW read for the tag
|
||||||
|
|
||||||
VIF_LOG("dmaChain %8.8x_%8.8x size=%d, id=%d, madr=%lx, tadr=%lx",
|
VIF_LOG("dmaChain %8.8x_%8.8x size=%d, id=%d, madr=%lx, tadr=%lx",
|
||||||
vif0ptag[1], vif0ptag[0], vif0ch->qwc, id, vif0ch->madr, vif0ch->tadr);
|
vif0ptag[1], vif0ptag[0], vif0ch->qwc, id, vif0ch->madr, vif0ch->tadr);
|
||||||
|
|
||||||
vif0ch->chcr = (vif0ch->chcr & 0xFFFF) | ((*vif0ptag) & 0xFFFF0000); //Transfer upper part of tag to CHCR bits 31-15
|
|
||||||
// Transfer dma tag if tte is set
|
// Transfer dma tag if tte is set
|
||||||
|
if (CHCR::TTE(vif0ch))
|
||||||
if (vif0ch->chcr & 0x40)
|
|
||||||
{
|
{
|
||||||
if (vif0.vifstalled)
|
if (vif0.vifstalled)
|
||||||
ret = VIF0transfer(vif0ptag + (2 + vif0.irqoffset), 2 - vif0.irqoffset, 1); //Transfer Tag on stall
|
ret = VIF0transfer(vif0ptag + (2 + vif0.irqoffset), 2 - vif0.irqoffset, 1); //Transfer Tag on stall
|
||||||
else
|
else
|
||||||
ret = VIF0transfer(vif0ptag + 2, 2, 1); //Transfer Tag
|
ret = VIF0transfer(vif0ptag + 2, 2, 1); //Transfer Tag
|
||||||
|
|
||||||
if (ret == -1) return -1; //There has been an error
|
if (ret == -1) return -1; //There has been an error
|
||||||
if (ret == -2) return -2; //IRQ set by VIFTransfer
|
if (ret == -2) return -2; //IRQ set by VIFTransfer
|
||||||
}
|
}
|
||||||
|
@ -1407,7 +1403,7 @@ int _chainVIF0()
|
||||||
|
|
||||||
ret = _VIF0chain(); //Transfers the data set by the switch
|
ret = _VIF0chain(); //Transfers the data set by the switch
|
||||||
|
|
||||||
if ((vif0ch->chcr & 0x80) && (vif0ptag[0] >> 31)) //Check TIE bit of CHCR and IRQ bit of tag
|
if (CHCR::TIE(vif0ch) && Tag::IRQ(vif0ptag)) //Check TIE bit of CHCR and IRQ bit of tag
|
||||||
{
|
{
|
||||||
VIF_LOG("dmaIrq Set\n");
|
VIF_LOG("dmaIrq Set\n");
|
||||||
|
|
||||||
|
@ -1430,7 +1426,7 @@ void vif0Interrupt()
|
||||||
if (vif0Regs->stat & (VIF0_STAT_VSS | VIF0_STAT_VIS | VIF0_STAT_VFS))
|
if (vif0Regs->stat & (VIF0_STAT_VSS | VIF0_STAT_VIS | VIF0_STAT_VFS))
|
||||||
{
|
{
|
||||||
vif0Regs->stat &= ~0xF000000; // FQC=0
|
vif0Regs->stat &= ~0xF000000; // FQC=0
|
||||||
vif0ch->chcr &= ~0x100;
|
CHCR::clearSTR(vif0ch);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1446,9 +1442,9 @@ void vif0Interrupt()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((vif0ch->chcr & 0x100) == 0) Console::WriteLn("Vif0 running when CHCR = %x", params vif0ch->chcr);
|
if (!CHCR::STR(vif0ch)) Console::WriteLn("Vif0 running when CHCR = %x", params vif0ch->chcr);
|
||||||
|
|
||||||
if ((vif0ch->chcr & 0x4) && (!vif0.done) && (!vif0.vifstalled))
|
if ((CHCR::MOD(vif0ch) == CHAIN_MODE) && (!vif0.done) && (!vif0.vifstalled))
|
||||||
{
|
{
|
||||||
|
|
||||||
if (!(psHu32(DMAC_CTRL) & 0x1))
|
if (!(psHu32(DMAC_CTRL) & 0x1))
|
||||||
|
@ -1469,7 +1465,7 @@ void vif0Interrupt()
|
||||||
if (vif0ch->qwc > 0) Console::WriteLn("VIF0 Ending with QWC left");
|
if (vif0ch->qwc > 0) Console::WriteLn("VIF0 Ending with QWC left");
|
||||||
if (vif0.cmd != 0) Console::WriteLn("vif0.cmd still set %x", params vif0.cmd);
|
if (vif0.cmd != 0) Console::WriteLn("vif0.cmd still set %x", params vif0.cmd);
|
||||||
|
|
||||||
vif0ch->chcr &= ~0x100;
|
CHCR::clearSTR(vif0ch);
|
||||||
hwDmacIrq(DMAC_VIF0);
|
hwDmacIrq(DMAC_VIF0);
|
||||||
vif0Regs->stat &= ~0xF000000; // FQC=0
|
vif0Regs->stat &= ~0xF000000; // FQC=0
|
||||||
}
|
}
|
||||||
|
@ -1612,7 +1608,7 @@ void vif0Write32(u32 mem, u32 value)
|
||||||
else
|
else
|
||||||
_VIF0chain();
|
_VIF0chain();
|
||||||
|
|
||||||
vif0ch->chcr |= 0x100;
|
CHCR::setSTR(vif0ch);
|
||||||
CPU_INT(0, g_vifCycles); // Gets the timing right - Flatout
|
CPU_INT(0, g_vifCycles); // Gets the timing right - Flatout
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1658,7 +1654,7 @@ void vif0Reset()
|
||||||
memzero_obj(*vif0Regs);
|
memzero_obj(*vif0Regs);
|
||||||
SetNewMask(g_vif0Masks, g_vif0HasMask3, 0, 0xffffffff);
|
SetNewMask(g_vif0Masks, g_vif0HasMask3, 0, 0xffffffff);
|
||||||
psHu64(VIF0_FIFO) = 0;
|
psHu64(VIF0_FIFO) = 0;
|
||||||
psHu64(0x10004008) = 0; // VIF0_FIFO + 8
|
psHu64(VIF0_FIFO + 8) = 0;
|
||||||
vif0Regs->stat &= ~VIF0_STAT_VPS;
|
vif0Regs->stat &= ~VIF0_STAT_VPS;
|
||||||
vif0.done = true;
|
vif0.done = true;
|
||||||
vif0Regs->stat &= ~0xF000000; // FQC=0
|
vif0Regs->stat &= ~0xF000000; // FQC=0
|
||||||
|
@ -1866,7 +1862,7 @@ static int __fastcall Vif1TransDirectHL(u32 *data)
|
||||||
|
|
||||||
if ((vif1.cmd & 0x7f) == 0x51)
|
if ((vif1.cmd & 0x7f) == 0x51)
|
||||||
{
|
{
|
||||||
if (gif->chcr & 0x100 && (!vif1Regs->mskpath3 && (Path3progress == IMAGE_MODE))) //PATH3 is in image mode, so wait for end of transfer
|
if (CHCR::STR(gif) && (!vif1Regs->mskpath3 && (Path3progress == IMAGE_MODE))) //PATH3 is in image mode, so wait for end of transfer
|
||||||
{
|
{
|
||||||
vif1Regs->stat |= VIF1_STAT_VGW;
|
vif1Regs->stat |= VIF1_STAT_VGW;
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1948,8 +1944,7 @@ static int __fastcall Vif1TransUnpack(u32 *data)
|
||||||
if (vif1.vifpacketsize < vif1.tag.size)
|
if (vif1.vifpacketsize < vif1.tag.size)
|
||||||
{
|
{
|
||||||
int ret = vif1.tag.size;
|
int ret = vif1.tag.size;
|
||||||
/* size is less that the total size, transfer is
|
/* size is less that the total size, transfer is 'in pieces' */
|
||||||
'in pieces' */
|
|
||||||
if(vif1Regs->offset != 0 || vif1.cl != 0)
|
if(vif1Regs->offset != 0 || vif1.cl != 0)
|
||||||
{
|
{
|
||||||
vif1.tag.size -= vif1.vifpacketsize - VIFalign(data, &vif1.tag, vif1.vifpacketsize, VIF1dmanum);
|
vif1.tag.size -= vif1.vifpacketsize - VIFalign(data, &vif1.tag, vif1.vifpacketsize, VIF1dmanum);
|
||||||
|
@ -2060,7 +2055,7 @@ void Vif1MskPath3() // MSKPATH3
|
||||||
}
|
}
|
||||||
static void Vif1CMDMskPath3() // MSKPATH3
|
static void Vif1CMDMskPath3() // MSKPATH3
|
||||||
{
|
{
|
||||||
if(vif1ch->chcr & 0x100)
|
if (CHCR::STR(vif1ch))
|
||||||
{
|
{
|
||||||
schedulepath3msk = 0x10 | ((vif1Regs->code >> 15) & 0x1);
|
schedulepath3msk = 0x10 | ((vif1Regs->code >> 15) & 0x1);
|
||||||
vif1.vifstalled = true;
|
vif1.vifstalled = true;
|
||||||
|
@ -2088,7 +2083,7 @@ static void Vif1CMDFlush() // FLUSH/E/A
|
||||||
if ((vif1.cmd & 0x7f) == 0x13)
|
if ((vif1.cmd & 0x7f) == 0x13)
|
||||||
{
|
{
|
||||||
// Gif is already transferring so wait for it.
|
// Gif is already transferring so wait for it.
|
||||||
if (((Path3progress != STOPPED_MODE) || !vif1Regs->mskpath3) && gif->chcr & 0x100)
|
if (((Path3progress != STOPPED_MODE) || !vif1Regs->mskpath3) && CHCR::STR(gif))
|
||||||
{
|
{
|
||||||
vif1Regs->stat |= VIF1_STAT_VGW;
|
vif1Regs->stat |= VIF1_STAT_VGW;
|
||||||
CPU_INT(2, 4);
|
CPU_INT(2, 4);
|
||||||
|
@ -2223,7 +2218,9 @@ int VIF1transfer(u32 *data, int size, int istag)
|
||||||
ret = Vif1TransTLB[vif1.cmd](data);
|
ret = Vif1TransTLB[vif1.cmd](data);
|
||||||
data += ret;
|
data += ret;
|
||||||
vif1.vifpacketsize -= ret;
|
vif1.vifpacketsize -= ret;
|
||||||
if (vif1.cmd == 0) vif1Regs->stat &= ~VIF1_STAT_VPS_T; //We are once again waiting for a new vifcode as the command has cleared
|
|
||||||
|
//We are once again waiting for a new vifcode as the command has cleared
|
||||||
|
if (vif1.cmd == 0) vif1Regs->stat &= ~VIF1_STAT_VPS_T;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2290,8 +2287,7 @@ int VIF1transfer(u32 *data, int size, int istag)
|
||||||
|
|
||||||
if (((vif1Regs->code >> 24) & 0x7f) != 0x7) vif1Regs->stat |= VIF1_STAT_VIS; // Note: commenting this out fixes WALL-E
|
if (((vif1Regs->code >> 24) & 0x7f) != 0x7) vif1Regs->stat |= VIF1_STAT_VIS; // Note: commenting this out fixes WALL-E
|
||||||
|
|
||||||
if (vif1ch->qwc == 0 && (vif1.irqoffset == 0 || istag == 1))
|
if (vif1ch->qwc == 0 && (vif1.irqoffset == 0 || istag == 1)) vif1.inprogress &= ~0x1;
|
||||||
vif1.inprogress &= ~0x1;
|
|
||||||
|
|
||||||
// spiderman doesn't break on qw boundaries
|
// spiderman doesn't break on qw boundaries
|
||||||
if (istag) return -2;
|
if (istag) return -2;
|
||||||
|
@ -2321,8 +2317,7 @@ int VIF1transfer(u32 *data, int size, int istag)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (vif1ch->qwc == 0 && (vif1.irqoffset == 0 || istag == 1))
|
if (vif1ch->qwc == 0 && (vif1.irqoffset == 0 || istag == 1)) vif1.inprogress &= ~0x1;
|
||||||
vif1.inprogress &= ~0x1;
|
|
||||||
|
|
||||||
return vif1.vifstalled ? -2 : 0;
|
return vif1.vifstalled ? -2 : 0;
|
||||||
}
|
}
|
||||||
|
@ -2393,7 +2388,7 @@ int _VIF1chain()
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vif1.dmamode == VIF_NORMAL_MEM_MODE)
|
if (vif1.dmamode == VIF_NORMAL_FROM_MEM_MODE)
|
||||||
{
|
{
|
||||||
vif1TransferFromMemory();
|
vif1TransferFromMemory();
|
||||||
vif1.inprogress = 0;
|
vif1.inprogress = 0;
|
||||||
|
@ -2429,8 +2424,8 @@ __forceinline void vif1SetupTransfer()
|
||||||
{
|
{
|
||||||
switch (vif1.dmamode)
|
switch (vif1.dmamode)
|
||||||
{
|
{
|
||||||
case VIF_NORMAL_MODE: //Normal
|
case VIF_NORMAL_TO_MEM_MODE: // Normal
|
||||||
case VIF_NORMAL_MEM_MODE: //Normal (From memory)
|
case VIF_NORMAL_FROM_MEM_MODE: // Normal (From memory)
|
||||||
vif1.inprogress = 1;
|
vif1.inprogress = 1;
|
||||||
vif1.done = true;
|
vif1.done = true;
|
||||||
g_vifCycles = 2;
|
g_vifCycles = 2;
|
||||||
|
@ -2441,21 +2436,12 @@ __forceinline void vif1SetupTransfer()
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
vif1ptag = (u32*)dmaGetAddr(vif1ch->tadr); //Set memory pointer to TADR
|
vif1ptag = (u32*)dmaGetAddr(vif1ch->tadr); //Set memory pointer to TADR
|
||||||
if (vif1ptag == NULL) //Is vif0ptag empty?
|
|
||||||
{
|
|
||||||
Console::Error("Vif1 Tag BUSERR");
|
|
||||||
vif1ch->chcr = (vif1ch->chcr & 0xFFFF) | ((*vif1ptag) & 0xFFFF0000); //Transfer upper part of tag to CHCR bits 31-15
|
|
||||||
psHu32(DMAC_STAT) |= DMAC_STAT_BEIS; //If yes, set BEIS (BUSERR) in DMAC_STAT register
|
|
||||||
return; //Return -1 as an error has occurred
|
|
||||||
}
|
|
||||||
|
|
||||||
id = (vif1ptag[0] >> 28) & 0x7; //ID for DmaChain copied from bit 28 of the tag
|
if (!(Tag::Transfer("Vif1 Tag", vif1ch, vif1ptag))) return;
|
||||||
|
|
||||||
vif1ch->qwc = (u16)vif1ptag[0]; //QWC set to lower 16bits of the tag
|
|
||||||
vif1ch->madr = vif1ptag[1]; //MADR = ADDR field
|
vif1ch->madr = vif1ptag[1]; //MADR = ADDR field
|
||||||
vif1ch->chcr = (vif1ch->chcr & 0xFFFF) | ((*vif1ptag) & 0xFFFF0000); //Transfer upper part of tag to CHCR bits 31-15
|
|
||||||
|
|
||||||
g_vifCycles += 1; // Add 1 g_vifCycles from the QW read for the tag
|
g_vifCycles += 1; // Add 1 g_vifCycles from the QW read for the tag
|
||||||
|
id = Tag::Id(vif1ptag); //ID for DmaChain copied from bit 28 of the tag
|
||||||
|
|
||||||
// Transfer dma tag if tte is set
|
// Transfer dma tag if tte is set
|
||||||
|
|
||||||
|
@ -2475,7 +2461,7 @@ __forceinline void vif1SetupTransfer()
|
||||||
|
|
||||||
vif1.inprogress = 1;
|
vif1.inprogress = 1;
|
||||||
|
|
||||||
if (vif1ch->chcr & 0x40)
|
if (CHCR::TTE(vif1ch))
|
||||||
{
|
{
|
||||||
|
|
||||||
if (vif1.vifstalled)
|
if (vif1.vifstalled)
|
||||||
|
@ -2493,7 +2479,8 @@ __forceinline void vif1SetupTransfer()
|
||||||
vif1.irqoffset = 0;
|
vif1.irqoffset = 0;
|
||||||
vif1.done |= hwDmacSrcChainWithStack(vif1ch, id);
|
vif1.done |= hwDmacSrcChainWithStack(vif1ch, id);
|
||||||
|
|
||||||
if ((vif1ch->chcr & 0x80) && (vif1ptag[0] >> 31)) //Check TIE bit of CHCR and IRQ bit of tag
|
//Check TIE bit of CHCR and IRQ bit of tag
|
||||||
|
if ((CHCR::TIE(vif1ch)) && (Tag::IRQ(vif1ptag)))
|
||||||
{
|
{
|
||||||
VIF_LOG("dmaIrq Set");
|
VIF_LOG("dmaIrq Set");
|
||||||
|
|
||||||
|
@ -2514,7 +2501,7 @@ __forceinline void vif1Interrupt()
|
||||||
|
|
||||||
if((vif1Regs->stat & VIF1_STAT_VGW))
|
if((vif1Regs->stat & VIF1_STAT_VGW))
|
||||||
{
|
{
|
||||||
if(gif->chcr & 0x100)
|
if (CHCR::STR(gif))
|
||||||
{
|
{
|
||||||
CPU_INT(1, gif->qwc * BIAS);
|
CPU_INT(1, gif->qwc * BIAS);
|
||||||
return;
|
return;
|
||||||
|
@ -2523,7 +2510,7 @@ __forceinline void vif1Interrupt()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((vif1ch->chcr & 0x100) == 0) Console::WriteLn("Vif1 running when CHCR == %x", params vif1ch->chcr);
|
if (!(CHCR::STR(vif1ch))) Console::WriteLn("Vif1 running when CHCR == %x", params vif1ch->chcr);
|
||||||
|
|
||||||
if (vif1.irq && vif1.tag.size == 0)
|
if (vif1.irq && vif1.tag.size == 0)
|
||||||
{
|
{
|
||||||
|
@ -2535,7 +2522,7 @@ __forceinline void vif1Interrupt()
|
||||||
vif1Regs->stat &= ~0x1F000000; // FQC=0
|
vif1Regs->stat &= ~0x1F000000; // FQC=0
|
||||||
|
|
||||||
// One game doesnt like vif stalling at end, cant remember what. Spiderman isnt keen on it tho
|
// One game doesnt like vif stalling at end, cant remember what. Spiderman isnt keen on it tho
|
||||||
vif1ch->chcr &= ~0x100;
|
CHCR::clearSTR(vif1ch);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if ((vif1ch->qwc > 0) || (vif1.irqoffset > 0))
|
else if ((vif1ch->qwc > 0) || (vif1.irqoffset > 0))
|
||||||
|
@ -2580,7 +2567,7 @@ __forceinline void vif1Interrupt()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
vif1Regs->stat &= ~VIF1_STAT_VPS; //Vif goes idle as the stall happened between commands;
|
vif1Regs->stat &= ~VIF1_STAT_VPS; //Vif goes idle as the stall happened between commands;
|
||||||
vif1ch->chcr &= ~0x100;
|
CHCR::clearSTR(vif1ch);
|
||||||
g_vifCycles = 0;
|
g_vifCycles = 0;
|
||||||
hwDmacIrq(DMAC_VIF1);
|
hwDmacIrq(DMAC_VIF1);
|
||||||
|
|
||||||
|
@ -2588,7 +2575,7 @@ __forceinline void vif1Interrupt()
|
||||||
//Games effected by setting, Fatal Frame, KH2, Shox, Crash N Burn, GT3/4 possibly
|
//Games effected by setting, Fatal Frame, KH2, Shox, Crash N Burn, GT3/4 possibly
|
||||||
//Im guessing due to the full gs fifo before the reverse? (Refraction)
|
//Im guessing due to the full gs fifo before the reverse? (Refraction)
|
||||||
//Note also this is only the condition for reverse fifo mode, normal direction clears it as normal
|
//Note also this is only the condition for reverse fifo mode, normal direction clears it as normal
|
||||||
if(!vif1Regs->mskpath3 || (vif1ch->chcr & 0x1))vif1Regs->stat &= ~0x1F000000; // FQC=0
|
if (!vif1Regs->mskpath3 || (CHCR::DIR(vif1ch))) vif1Regs->stat &= ~0x1F000000; // FQC=0
|
||||||
}
|
}
|
||||||
|
|
||||||
void dmaVIF1()
|
void dmaVIF1()
|
||||||
|
@ -2604,7 +2591,8 @@ void dmaVIF1()
|
||||||
if (((psHu32(DMAC_CTRL) & 0xC) == 0x8)) // VIF MFIFO
|
if (((psHu32(DMAC_CTRL) & 0xC) == 0x8)) // VIF MFIFO
|
||||||
{
|
{
|
||||||
//Console::WriteLn("VIFMFIFO\n");
|
//Console::WriteLn("VIFMFIFO\n");
|
||||||
if (!(vif1ch->chcr & 0x4)) Console::WriteLn("MFIFO mode != Chain! %x", params vif1ch->chcr);
|
// Test changed because the Final Fantasy 12 opening somehow has the tag in *Undefined* mode, which is not in the documentation that I saw.
|
||||||
|
if (CHCR::MOD(vif1ch) == NORMAL_MODE) Console::WriteLn("MFIFO mode is normal (which isn't normal here)! %x", params vif1ch->chcr);
|
||||||
vifMFIFOInterrupt();
|
vifMFIFOInterrupt();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -2616,23 +2604,23 @@ void dmaVIF1()
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!(vif1ch->chcr & 0x4) || vif1ch->qwc > 0) // Normal Mode
|
if ((CHCR::MOD(vif1ch) == NORMAL_MODE) || vif1ch->qwc > 0) // Normal Mode
|
||||||
{
|
{
|
||||||
|
|
||||||
if ((psHu32(DMAC_CTRL) & 0xC0) == 0x40)
|
if ((psHu32(DMAC_CTRL) & 0xC0) == 0x40)
|
||||||
Console::WriteLn("DMA Stall Control on VIF1 normal");
|
Console::WriteLn("DMA Stall Control on VIF1 normal");
|
||||||
|
|
||||||
if ((vif1ch->chcr & 0x1)) // to Memory
|
if ((CHCR::DIR(vif1ch))) // to Memory
|
||||||
vif1.dmamode = VIF_NORMAL_MODE;
|
vif1.dmamode = VIF_NORMAL_TO_MEM_MODE;
|
||||||
else
|
else
|
||||||
vif1.dmamode = VIF_NORMAL_MEM_MODE;
|
vif1.dmamode = VIF_NORMAL_FROM_MEM_MODE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
vif1.dmamode = VIF_CHAIN_MODE;
|
vif1.dmamode = VIF_CHAIN_MODE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(vif1.dmamode != VIF_NORMAL_MEM_MODE)
|
if (vif1.dmamode != VIF_NORMAL_FROM_MEM_MODE)
|
||||||
vif1Regs->stat |= 0x10000000; // FQC=16
|
vif1Regs->stat |= 0x10000000; // FQC=16
|
||||||
else
|
else
|
||||||
vif1Regs->stat |= min((u16)16, vif1ch->qwc) << 24; // FQC=16
|
vif1Regs->stat |= min((u16)16, vif1ch->qwc) << 24; // FQC=16
|
||||||
|
@ -2664,14 +2652,16 @@ void vif1Write32(u32 mem, u32 value)
|
||||||
cpuRegs.interrupt &= ~((1 << 1) | (1 << 10)); //Stop all vif1 DMA's
|
cpuRegs.interrupt &= ~((1 << 1) | (1 << 10)); //Stop all vif1 DMA's
|
||||||
vif1ch->qwc = 0; //?
|
vif1ch->qwc = 0; //?
|
||||||
psHu64(VIF1_FIFO) = 0;
|
psHu64(VIF1_FIFO) = 0;
|
||||||
psHu64(0x10005008) = 0; // VIF1_FIFO + 8
|
psHu64(VIF1_FIFO + 8) = 0;
|
||||||
vif1.done = true;
|
vif1.done = true;
|
||||||
|
|
||||||
if(vif1Regs->mskpath3)
|
if(vif1Regs->mskpath3)
|
||||||
{
|
{
|
||||||
vif1Regs->mskpath3 = 0;
|
vif1Regs->mskpath3 = 0;
|
||||||
psHu32(GIF_STAT) &= ~0x2;
|
psHu32(GIF_STAT) &= ~0x2;
|
||||||
if(gif->chcr & 0x100) CPU_INT(2, 4);
|
if (CHCR::STR(gif)) CPU_INT(2, 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
vif1Regs->err = 0;
|
vif1Regs->err = 0;
|
||||||
vif1.inprogress = 0;
|
vif1.inprogress = 0;
|
||||||
vif1Regs->stat &= ~(0x1F800000 | VIF1_STAT_INT | VIF1_STAT_VSS | VIF1_STAT_VIS | VIF1_STAT_VFS | VIF1_STAT_VPS); // FQC=0
|
vif1Regs->stat &= ~(0x1F800000 | VIF1_STAT_INT | VIF1_STAT_VSS | VIF1_STAT_VIS | VIF1_STAT_VFS | VIF1_STAT_VPS); // FQC=0
|
||||||
|
@ -2728,7 +2718,7 @@ void vif1Write32(u32 mem, u32 value)
|
||||||
// Gets the timing right - Flatout
|
// Gets the timing right - Flatout
|
||||||
CPU_INT(1, vif1ch->qwc * BIAS);
|
CPU_INT(1, vif1ch->qwc * BIAS);
|
||||||
}
|
}
|
||||||
vif1ch->chcr |= 0x100;
|
CHCR::setSTR(vif1ch);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,8 +20,8 @@
|
||||||
|
|
||||||
enum VifModes
|
enum VifModes
|
||||||
{
|
{
|
||||||
VIF_NORMAL_MODE = 0,
|
VIF_NORMAL_TO_MEM_MODE = 0,
|
||||||
VIF_NORMAL_MEM_MODE = 1,
|
VIF_NORMAL_FROM_MEM_MODE = 1,
|
||||||
VIF_CHAIN_MODE = 2
|
VIF_CHAIN_MODE = 2
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ImportGroup Label="PropertySheets" />
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<_PropertySheetDisplayName>pcsx2</_PropertySheetDisplayName>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup>
|
||||||
|
<ClCompile>
|
||||||
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
|
<PrecompiledHeaderFile>PrecompiledHeader.h</PrecompiledHeaderFile>
|
||||||
|
<AdditionalIncludeDirectories>..;../..;../libs;../../x86;../../IPU;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<ExceptionHandling>Async</ExceptionHandling>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalLibraryDirectories>..\libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
<AdditionalDependencies>gnu_gettext.lib;w32pthreads.lib;zlib.lib;comctl32.lib;ws2_32.lib;winmm.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
</Link>
|
||||||
|
<PreBuildEvent>
|
||||||
|
<Command>"$(SolutionDir)common\vsprops\preBuild.cmd" "$(ProjectDir)..\.."</Command>
|
||||||
|
</PreBuildEvent>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup />
|
||||||
|
</Project>
|
|
@ -0,0 +1,758 @@
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="4.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="Devel|Win32">
|
||||||
|
<Configuration>Devel</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectName>pcsx2</ProjectName>
|
||||||
|
<ProjectGUID>{1CEFD830-2B76-4596-A4EE-BCD7280A60BD}</ProjectGUID>
|
||||||
|
<RootNamespace>pcsx2</RootNamespace>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
<Import Project="$(VCINSTALLDIR)\VCProjectDefaults\masm.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets">
|
||||||
|
<Import Project="$(LocalAppData)\Microsoft\VisualStudio\10.0\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(LocalAppData)\Microsoft\VisualStudio\10.0\Microsoft.Cpp.$(Platform).user.props')" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<Import Project="..\..\..\common\vsprops\common.props" />
|
||||||
|
<Import Project="..\..\..\common\vsprops\debug.props" />
|
||||||
|
<Import Project="pcsx2.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">
|
||||||
|
<Import Project="..\..\..\common\vsprops\common.props" />
|
||||||
|
<Import Project="..\..\..\common\vsprops\devel.props" />
|
||||||
|
<Import Project="pcsx2.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<Import Project="..\..\..\common\vsprops\common.props" />
|
||||||
|
<Import Project="..\..\..\common\vsprops\release.props" />
|
||||||
|
<Import Project="pcsx2.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<_ProjectFileVersion>10.0.20506.1</_ProjectFileVersion>
|
||||||
|
<TargetName Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">$(ProjectName)-dev</TargetName>
|
||||||
|
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)-dbg</TargetName>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<Midl>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
</Link>
|
||||||
|
<Link />
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">
|
||||||
|
<Midl>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
</Link>
|
||||||
|
<Link />
|
||||||
|
<Link />
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<Midl>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
</Link>
|
||||||
|
<Link />
|
||||||
|
<Link />
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\..\AlignedMalloc.cpp" />
|
||||||
|
<ClCompile Include="..\..\Cache.cpp" />
|
||||||
|
<ClCompile Include="..\..\CDVD\CdRom.cpp" />
|
||||||
|
<ClCompile Include="..\..\CDVD\CDVD.cpp" />
|
||||||
|
<ClCompile Include="..\..\CDVD\CDVDaccess.cpp" />
|
||||||
|
<ClCompile Include="..\..\CDVD\CDVDisoReader.cpp" />
|
||||||
|
<ClCompile Include="..\..\CDVD\IsoFileFormats.cpp" />
|
||||||
|
<ClCompile Include="..\..\CDVD\IsoFileTools.cpp" />
|
||||||
|
<ClCompile Include="..\..\CDVD\IsoFSdrv.cpp" />
|
||||||
|
<ClCompile Include="..\..\CDVD\IsoFStools.cpp" />
|
||||||
|
<ClCompile Include="..\..\Console.cpp" />
|
||||||
|
<ClCompile Include="..\..\COP0.cpp" />
|
||||||
|
<ClCompile Include="..\..\COP2.cpp" />
|
||||||
|
<ClCompile Include="..\..\Counters.cpp" />
|
||||||
|
<ClCompile Include="..\..\DebugTools\DisR3000A.cpp" />
|
||||||
|
<ClCompile Include="..\..\DebugTools\DisR3000asm.cpp" />
|
||||||
|
<ClCompile Include="..\..\DebugTools\DisR5900.cpp" />
|
||||||
|
<ClCompile Include="..\..\DebugTools\DisR5900asm.cpp" />
|
||||||
|
<ClCompile Include="..\..\DebugTools\DisVU0Micro.cpp" />
|
||||||
|
<ClCompile Include="..\..\DebugTools\DisVU1Micro.cpp" />
|
||||||
|
<ClCompile Include="..\..\Dump.cpp" />
|
||||||
|
<ClCompile Include="..\..\Elfheader.cpp" />
|
||||||
|
<ClCompile Include="..\..\FiFo.cpp" />
|
||||||
|
<ClCompile Include="..\..\FPU.cpp" />
|
||||||
|
<ClCompile Include="..\..\Gif.cpp" />
|
||||||
|
<ClCompile Include="..\..\GS.cpp" />
|
||||||
|
<ClCompile Include="..\..\HashTools.cpp" />
|
||||||
|
<ClCompile Include="..\..\Hw.cpp" />
|
||||||
|
<ClCompile Include="..\..\HwRead.cpp" />
|
||||||
|
<ClCompile Include="..\..\HwWrite.cpp" />
|
||||||
|
<ClCompile Include="..\..\Interpreter.cpp" />
|
||||||
|
<ClCompile Include="..\..\IopBios.cpp" />
|
||||||
|
<ClCompile Include="..\..\IopCounters.cpp" />
|
||||||
|
<ClCompile Include="..\..\IopDma.cpp" />
|
||||||
|
<ClCompile Include="..\..\IopHw.cpp" />
|
||||||
|
<ClCompile Include="..\..\IopMem.cpp" />
|
||||||
|
<ClCompile Include="..\..\IopSio2.cpp" />
|
||||||
|
<ClCompile Include="..\..\IPU\coroutine.cpp" />
|
||||||
|
<ClCompile Include="..\..\Ipu\IPU.cpp" />
|
||||||
|
<ClCompile Include="..\..\Ipu\mpeg2lib\Idct.cpp" />
|
||||||
|
<ClCompile Include="..\..\Ipu\mpeg2lib\Mpeg.cpp" />
|
||||||
|
<ClCompile Include="..\..\Ipu\yuv2rgb.cpp" />
|
||||||
|
<ClCompile Include="..\..\Linux\AboutDlg.cpp">
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\Linux\AdvancedDlg.cpp">
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\Linux\ConfigDlg.cpp">
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\Linux\CpuDlg.cpp">
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\Linux\DebugDlg.cpp">
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\Linux\HacksDlg.cpp">
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\Linux\LnxConsole.cpp">
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\Linux\LnxMain.cpp">
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\Linux\LnxMisc.cpp">
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\Linux\LnxSysExec.cpp">
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\Linux\LnxThreads.cpp">
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\Linux\Pref.cpp">
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">true</ExcludedFromBuild>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\Memory.cpp" />
|
||||||
|
<ClCompile Include="..\..\MemoryCard.cpp" />
|
||||||
|
<ClCompile Include="..\..\Misc.cpp" />
|
||||||
|
<ClCompile Include="..\..\MMI.cpp" />
|
||||||
|
<ClCompile Include="..\..\MTGS.cpp" />
|
||||||
|
<ClCompile Include="..\..\Patch.cpp" />
|
||||||
|
<ClCompile Include="..\..\PathUtils.cpp" />
|
||||||
|
<ClCompile Include="..\..\Plugins.cpp" />
|
||||||
|
<ClCompile Include="..\..\PrecompiledHeader.cpp">
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">Create</PrecompiledHeader>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\ps2\Iop\IopHwRead.cpp" />
|
||||||
|
<ClCompile Include="..\..\ps2\Iop\IopHwWrite.cpp" />
|
||||||
|
<ClCompile Include="..\..\R3000A.cpp" />
|
||||||
|
<ClCompile Include="..\..\R3000AInterpreter.cpp" />
|
||||||
|
<ClCompile Include="..\..\R3000AOpcodeTables.cpp" />
|
||||||
|
<ClCompile Include="..\..\R5900.cpp" />
|
||||||
|
<ClCompile Include="..\..\R5900OpcodeImpl.cpp" />
|
||||||
|
<ClCompile Include="..\..\R5900OpcodeTables.cpp" />
|
||||||
|
<ClCompile Include="..\..\rdebug\deci2.cpp" />
|
||||||
|
<ClCompile Include="..\..\rdebug\deci2_dbgp.cpp" />
|
||||||
|
<ClCompile Include="..\..\rdebug\deci2_dcmp.cpp" />
|
||||||
|
<ClCompile Include="..\..\rdebug\deci2_iloadp.cpp" />
|
||||||
|
<ClCompile Include="..\..\rdebug\deci2_netmp.cpp" />
|
||||||
|
<ClCompile Include="..\..\rdebug\deci2_ttyp.cpp" />
|
||||||
|
<ClCompile Include="..\..\RecoverySystem.cpp" />
|
||||||
|
<ClCompile Include="..\..\Saveslots.cpp" />
|
||||||
|
<ClCompile Include="..\..\SaveState.cpp" />
|
||||||
|
<ClCompile Include="..\..\Sif.cpp" />
|
||||||
|
<ClCompile Include="..\..\Sio.cpp" />
|
||||||
|
<ClCompile Include="..\..\SourceLog.cpp" />
|
||||||
|
<ClCompile Include="..\..\SPR.cpp" />
|
||||||
|
<ClCompile Include="..\..\Stats.cpp" />
|
||||||
|
<ClCompile Include="..\..\System.cpp" />
|
||||||
|
<ClCompile Include="..\..\ThreadTools.cpp" />
|
||||||
|
<ClCompile Include="..\..\tinyxml\tinystr.cpp">
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">NotUsing</PrecompiledHeader>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">
|
||||||
|
</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">
|
||||||
|
</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
</PrecompiledHeaderOutputFile>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\tinyxml\tinyxml.cpp">
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">NotUsing</PrecompiledHeader>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">
|
||||||
|
</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">
|
||||||
|
</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
</PrecompiledHeaderOutputFile>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\tinyxml\tinyxmlerror.cpp">
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">NotUsing</PrecompiledHeader>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">
|
||||||
|
</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">
|
||||||
|
</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
</PrecompiledHeaderOutputFile>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\tinyxml\tinyxmlparser.cpp">
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">NotUsing</PrecompiledHeader>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">
|
||||||
|
</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">
|
||||||
|
</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
</PrecompiledHeaderOutputFile>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\Vif.cpp" />
|
||||||
|
<ClCompile Include="..\..\VifDma.cpp" />
|
||||||
|
<ClCompile Include="..\..\vssprintf.cpp" />
|
||||||
|
<ClCompile Include="..\..\vtlb.cpp" />
|
||||||
|
<ClCompile Include="..\..\VU0.cpp" />
|
||||||
|
<ClCompile Include="..\..\VU0micro.cpp" />
|
||||||
|
<ClCompile Include="..\..\VU0microInterp.cpp" />
|
||||||
|
<ClCompile Include="..\..\VU1micro.cpp" />
|
||||||
|
<ClCompile Include="..\..\VU1microInterp.cpp" />
|
||||||
|
<ClCompile Include="..\..\VUflags.cpp" />
|
||||||
|
<ClCompile Include="..\..\VUmicroMem.cpp" />
|
||||||
|
<ClCompile Include="..\..\VUops.cpp" />
|
||||||
|
<ClCompile Include="..\..\x86\BaseblockEx.cpp" />
|
||||||
|
<ClCompile Include="..\..\x86\fast_routines.cpp" />
|
||||||
|
<ClCompile Include="..\..\x86\iCOP0.cpp" />
|
||||||
|
<ClCompile Include="..\..\x86\iCOP2.cpp" />
|
||||||
|
<ClCompile Include="..\..\x86\iCore.cpp" />
|
||||||
|
<ClCompile Include="..\..\x86\iFPU.cpp" />
|
||||||
|
<ClCompile Include="..\..\x86\iFPUd.cpp" />
|
||||||
|
<ClCompile Include="..\..\x86\iMMI.cpp" />
|
||||||
|
<ClCompile Include="..\..\x86\iR3000A.cpp" />
|
||||||
|
<ClCompile Include="..\..\x86\iR3000Atables.cpp" />
|
||||||
|
<ClCompile Include="..\..\x86\iR5900Misc.cpp" />
|
||||||
|
<ClCompile Include="..\..\x86\ir5900tables.cpp" />
|
||||||
|
<ClCompile Include="..\..\x86\iVif.cpp" />
|
||||||
|
<ClCompile Include="..\..\x86\iVU0micro.cpp" />
|
||||||
|
<ClCompile Include="..\..\x86\iVU1micro.cpp" />
|
||||||
|
<ClCompile Include="..\..\x86\ix86-32\iCore-32.cpp" />
|
||||||
|
<ClCompile Include="..\..\x86\ix86-32\iR5900-32.cpp" />
|
||||||
|
<ClCompile Include="..\..\x86\ix86-32\iR5900Arit.cpp" />
|
||||||
|
<ClCompile Include="..\..\x86\ix86-32\iR5900AritImm.cpp" />
|
||||||
|
<ClCompile Include="..\..\x86\ix86-32\iR5900Branch.cpp" />
|
||||||
|
<ClCompile Include="..\..\x86\ix86-32\iR5900Jump.cpp" />
|
||||||
|
<ClCompile Include="..\..\x86\ix86-32\iR5900LoadStore.cpp" />
|
||||||
|
<ClCompile Include="..\..\x86\ix86-32\iR5900Move.cpp" />
|
||||||
|
<ClCompile Include="..\..\x86\ix86-32\iR5900MultDiv.cpp" />
|
||||||
|
<ClCompile Include="..\..\x86\ix86-32\iR5900Shift.cpp" />
|
||||||
|
<ClCompile Include="..\..\x86\ix86-32\iR5900Templates.cpp" />
|
||||||
|
<ClCompile Include="..\..\x86\ix86-32\recVTLB.cpp" />
|
||||||
|
<ClCompile Include="..\..\x86\ix86\ix86.cpp" />
|
||||||
|
<ClCompile Include="..\..\x86\ix86\ix86_3dnow.cpp" />
|
||||||
|
<ClCompile Include="..\..\x86\ix86\ix86_cpudetect.cpp" />
|
||||||
|
<ClCompile Include="..\..\x86\ix86\ix86_fpu.cpp" />
|
||||||
|
<ClCompile Include="..\..\x86\ix86\ix86_jmp.cpp" />
|
||||||
|
<ClCompile Include="..\..\x86\ix86\ix86_legacy.cpp" />
|
||||||
|
<ClCompile Include="..\..\x86\ix86\ix86_legacy_sse.cpp" />
|
||||||
|
<ClCompile Include="..\..\x86\ix86\ix86_simd.cpp" />
|
||||||
|
<ClCompile Include="..\..\x86\ix86\ix86_tools.cpp" />
|
||||||
|
<ClCompile Include="..\..\x86\microVU.cpp" />
|
||||||
|
<ClCompile Include="..\..\x86\sVU_Lower.cpp" />
|
||||||
|
<ClCompile Include="..\..\x86\sVU_Micro.cpp" />
|
||||||
|
<ClCompile Include="..\..\x86\sVU_Upper.cpp" />
|
||||||
|
<ClCompile Include="..\..\x86\sVU_zerorec.cpp" />
|
||||||
|
<ClCompile Include="..\..\xmlpatchloader.cpp">
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">NotUsing</PrecompiledHeader>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">
|
||||||
|
</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">
|
||||||
|
</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
</PrecompiledHeaderOutputFile>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\AboutDlg.cpp">
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\AdvancedDlg.cpp">
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\cheats\browser.cpp">
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">..\Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\cheats\cheats.cpp">
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">..\Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\ConfigDlg.cpp">
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\CpuDlg.cpp">
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\Debugger.cpp">
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\DebugMemory.cpp">
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\Debugreg.cpp">
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\HacksDlg.cpp">
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\Hyperlinks.cpp">
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\ini.cpp">
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\McdConfigDlg.cpp">
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\McdManagerDlg.cpp">
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">true</ExcludedFromBuild>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\PatchBrowser.cpp">
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\RDebugger.cpp">
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\SamplProf.cpp">
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\WinCompressNTFS.cpp">
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\WinConsole.cpp">
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\WindowsPCH.cpp">
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">Create</PrecompiledHeader>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\WinMain.cpp">
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<BufferSecurityCheck Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">false</BufferSecurityCheck>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<BufferSecurityCheck Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</BufferSecurityCheck>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\WinMisc.cpp">
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\WinSysExec.cpp">
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<BufferSecurityCheck Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">false</BufferSecurityCheck>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<BufferSecurityCheck Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</BufferSecurityCheck>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\WinThreads.cpp">
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Devel|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Win32.h</PrecompiledHeaderFile>
|
||||||
|
<PrecompiledHeaderOutputFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)win32.pch</PrecompiledHeaderOutputFile>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<CustomBuild Include="..\..\CDVD\CDVDisoReader.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\..\..\common\include\Pcsx2Config.h" />
|
||||||
|
<ClInclude Include="..\..\Cache.h" />
|
||||||
|
<ClInclude Include="..\..\CDVD\CdRom.h" />
|
||||||
|
<ClInclude Include="..\..\CDVD\CDVD.h" />
|
||||||
|
<ClInclude Include="..\..\CDVD\CDVDaccess.h" />
|
||||||
|
<ClInclude Include="..\..\CDVD\CDVD_internal.h" />
|
||||||
|
<ClInclude Include="..\..\CDVD\IsoFileFormats.h" />
|
||||||
|
<ClInclude Include="..\..\CDVD\IsoFileTools.h" />
|
||||||
|
<ClInclude Include="..\..\CDVD\IsoFScdvd.h" />
|
||||||
|
<ClInclude Include="..\..\CDVD\IsoFSdrv.h" />
|
||||||
|
<ClInclude Include="..\..\CDVD\IsoFStools.h" />
|
||||||
|
<ClInclude Include="..\..\Common.h" />
|
||||||
|
<ClInclude Include="..\..\Counters.h" />
|
||||||
|
<ClInclude Include="..\..\DebugTools\Debug.h" />
|
||||||
|
<ClInclude Include="..\..\DebugTools\DisASM.h" />
|
||||||
|
<ClInclude Include="..\..\DebugTools\DisVUmicro.h" />
|
||||||
|
<ClInclude Include="..\..\DebugTools\DisVUops.h" />
|
||||||
|
<ClInclude Include="..\..\Dump.h" />
|
||||||
|
<ClInclude Include="..\..\Elfheader.h" />
|
||||||
|
<ClInclude Include="..\..\Exceptions.h" />
|
||||||
|
<ClInclude Include="..\..\GS.h" />
|
||||||
|
<ClInclude Include="..\..\HashMap.h" />
|
||||||
|
<ClInclude Include="..\..\HostGui.h" />
|
||||||
|
<ClInclude Include="..\..\Hw.h" />
|
||||||
|
<ClInclude Include="..\..\IopBios.h" />
|
||||||
|
<ClInclude Include="..\..\IopBios2.h" />
|
||||||
|
<ClInclude Include="..\..\IopCommon.h" />
|
||||||
|
<ClInclude Include="..\..\IopCounters.h" />
|
||||||
|
<ClInclude Include="..\..\IopDma.h" />
|
||||||
|
<ClInclude Include="..\..\IopHw.h" />
|
||||||
|
<ClInclude Include="..\..\IopMem.h" />
|
||||||
|
<ClInclude Include="..\..\IopSio2.h" />
|
||||||
|
<ClInclude Include="..\..\IPU\coroutine.h" />
|
||||||
|
<ClInclude Include="..\..\Ipu\IPU.h" />
|
||||||
|
<ClInclude Include="..\..\Ipu\mpeg2lib\Mpeg.h" />
|
||||||
|
<ClInclude Include="..\..\Ipu\mpeg2lib\Vlc.h" />
|
||||||
|
<ClInclude Include="..\..\Ipu\yuv2rgb.h" />
|
||||||
|
<ClInclude Include="..\..\Linux\ConfigDlg.h" />
|
||||||
|
<ClInclude Include="..\..\Linux\DebugDlg.h" />
|
||||||
|
<ClInclude Include="..\..\Linux\LnxMain.h" />
|
||||||
|
<ClInclude Include="..\..\Linux\LnxSysExec.h" />
|
||||||
|
<ClInclude Include="..\..\Linux\memzero.h" />
|
||||||
|
<ClInclude Include="..\..\MemcpyFast.h" />
|
||||||
|
<ClInclude Include="..\..\Memory.h" />
|
||||||
|
<ClInclude Include="..\..\MemoryCard.h" />
|
||||||
|
<ClInclude Include="..\..\MemoryTypes.h" />
|
||||||
|
<ClInclude Include="..\..\Misc.h" />
|
||||||
|
<ClInclude Include="..\..\NakedAsm.h" />
|
||||||
|
<ClInclude Include="..\..\Patch.h" />
|
||||||
|
<ClInclude Include="..\..\Paths.h" />
|
||||||
|
<ClInclude Include="..\..\Plugins.h" />
|
||||||
|
<ClInclude Include="..\..\PrecompiledHeader.h" />
|
||||||
|
<ClInclude Include="..\..\ps2\Iop\IopHw_Internal.h" />
|
||||||
|
<ClInclude Include="..\..\R3000A.h" />
|
||||||
|
<ClInclude Include="..\..\R5900.h" />
|
||||||
|
<ClInclude Include="..\..\R5900Exceptions.h" />
|
||||||
|
<ClInclude Include="..\..\R5900OpcodeTables.h" />
|
||||||
|
<ClInclude Include="..\..\rdebug\deci2.h" />
|
||||||
|
<ClInclude Include="..\..\rdebug\deci2_dbgp.h" />
|
||||||
|
<ClInclude Include="..\..\rdebug\deci2_dcmp.h" />
|
||||||
|
<ClInclude Include="..\..\rdebug\deci2_drfp.h" />
|
||||||
|
<ClInclude Include="..\..\rdebug\deci2_iloadp.h" />
|
||||||
|
<ClInclude Include="..\..\rdebug\deci2_netmp.h" />
|
||||||
|
<ClInclude Include="..\..\rdebug\deci2_ttyp.h" />
|
||||||
|
<ClInclude Include="..\..\RedtapeWindows.h" />
|
||||||
|
<ClInclude Include="..\..\SafeArray.h" />
|
||||||
|
<ClInclude Include="..\..\SamplProf.h" />
|
||||||
|
<ClInclude Include="..\..\SaveState.h" />
|
||||||
|
<ClInclude Include="..\..\Sif.h" />
|
||||||
|
<ClInclude Include="..\..\Sifcmd.h" />
|
||||||
|
<ClInclude Include="..\..\Sio.h" />
|
||||||
|
<ClInclude Include="..\..\sio_internal.h" />
|
||||||
|
<ClInclude Include="..\..\SPR.h" />
|
||||||
|
<ClInclude Include="..\..\Stats.h" />
|
||||||
|
<ClInclude Include="..\..\StringUtils.h" />
|
||||||
|
<ClInclude Include="..\..\System.h" />
|
||||||
|
<ClInclude Include="..\..\Tags.h" />
|
||||||
|
<ClInclude Include="..\..\Threading.h" />
|
||||||
|
<ClInclude Include="..\..\tinyxml\tinystr.h" />
|
||||||
|
<ClInclude Include="..\..\tinyxml\tinyxml.h" />
|
||||||
|
<ClInclude Include="..\..\Vif.h" />
|
||||||
|
<ClInclude Include="..\..\VifDma.h" />
|
||||||
|
<ClInclude Include="..\..\vtlb.h" />
|
||||||
|
<ClInclude Include="..\..\VU.h" />
|
||||||
|
<ClInclude Include="..\..\VUflags.h" />
|
||||||
|
<ClInclude Include="..\..\VUmicro.h" />
|
||||||
|
<ClInclude Include="..\..\VUops.h" />
|
||||||
|
<ClInclude Include="..\..\x86\BaseblockEx.h" />
|
||||||
|
<ClInclude Include="..\..\x86\iCOP0.h" />
|
||||||
|
<ClInclude Include="..\..\x86\iCore.h" />
|
||||||
|
<ClInclude Include="..\..\x86\iFPU.h" />
|
||||||
|
<ClInclude Include="..\..\x86\iMMI.h" />
|
||||||
|
<ClInclude Include="..\..\x86\iR3000A.h" />
|
||||||
|
<ClInclude Include="..\..\x86\iR5900.h" />
|
||||||
|
<ClInclude Include="..\..\x86\iR5900Arit.h" />
|
||||||
|
<ClInclude Include="..\..\x86\iR5900AritImm.h" />
|
||||||
|
<ClInclude Include="..\..\x86\iR5900Branch.h" />
|
||||||
|
<ClInclude Include="..\..\x86\iR5900Jump.h" />
|
||||||
|
<ClInclude Include="..\..\x86\iR5900LoadStore.h" />
|
||||||
|
<ClInclude Include="..\..\x86\iR5900Move.h" />
|
||||||
|
<ClInclude Include="..\..\x86\iR5900MultDiv.h" />
|
||||||
|
<ClInclude Include="..\..\x86\iR5900Shift.h" />
|
||||||
|
<ClInclude Include="..\..\x86\ix86\implement\dwshift.h" />
|
||||||
|
<ClInclude Include="..\..\x86\ix86\implement\group1.h" />
|
||||||
|
<ClInclude Include="..\..\x86\ix86\implement\group2.h" />
|
||||||
|
<ClInclude Include="..\..\x86\ix86\implement\group3.h" />
|
||||||
|
<ClInclude Include="..\..\x86\ix86\implement\incdec.h" />
|
||||||
|
<ClInclude Include="..\..\x86\ix86\implement\jmpcall.h" />
|
||||||
|
<ClInclude Include="..\..\x86\ix86\implement\movs.h" />
|
||||||
|
<ClInclude Include="..\..\x86\ix86\implement\test.h" />
|
||||||
|
<ClInclude Include="..\..\x86\ix86\implement\xchg.h" />
|
||||||
|
<ClInclude Include="..\..\x86\ix86\implement\xmm\arithmetic.h" />
|
||||||
|
<ClInclude Include="..\..\x86\ix86\implement\xmm\basehelpers.h" />
|
||||||
|
<ClInclude Include="..\..\x86\ix86\implement\xmm\comparisons.h" />
|
||||||
|
<ClInclude Include="..\..\x86\ix86\implement\xmm\moremovs.h" />
|
||||||
|
<ClInclude Include="..\..\x86\ix86\implement\xmm\shufflepack.h" />
|
||||||
|
<ClInclude Include="..\..\x86\ix86\ix86.h" />
|
||||||
|
<ClInclude Include="..\..\x86\ix86\ix86_instructions.h" />
|
||||||
|
<ClInclude Include="..\..\x86\ix86\ix86_internal.h" />
|
||||||
|
<ClInclude Include="..\..\x86\ix86\ix86_legacy_instructions.h" />
|
||||||
|
<ClInclude Include="..\..\x86\ix86\ix86_legacy_internal.h" />
|
||||||
|
<ClInclude Include="..\..\x86\ix86\ix86_legacy_types.h" />
|
||||||
|
<ClInclude Include="..\..\x86\ix86\ix86_sse_helpers.h" />
|
||||||
|
<ClInclude Include="..\..\x86\ix86\ix86_types.h" />
|
||||||
|
<ClInclude Include="..\..\x86\microVU.h" />
|
||||||
|
<ClInclude Include="..\..\x86\microVU_IR.h" />
|
||||||
|
<ClInclude Include="..\..\x86\microVU_Misc.h" />
|
||||||
|
<ClInclude Include="..\..\x86\sVU_Debug.h" />
|
||||||
|
<ClInclude Include="..\..\x86\sVU_Micro.h" />
|
||||||
|
<ClInclude Include="..\..\x86\sVU_zerorec.h" />
|
||||||
|
<ClInclude Include="..\AboutDlg.h" />
|
||||||
|
<ClInclude Include="..\cheats\cheats.h" />
|
||||||
|
<ClInclude Include="..\Debugger.h" />
|
||||||
|
<ClInclude Include="..\Hyperlinks.h" />
|
||||||
|
<ClInclude Include="..\McdsDlg.h" />
|
||||||
|
<ClInclude Include="..\memzero.h" />
|
||||||
|
<ClInclude Include="..\RDebugger.h" />
|
||||||
|
<ClInclude Include="..\resource.h" />
|
||||||
|
<ClInclude Include="..\Win32.h" />
|
||||||
|
<ClInclude Include="..\WinDebugResource.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="..\..\Docs\ChangeLog.txt" />
|
||||||
|
<None Include="..\..\Docs\devblog.txt" />
|
||||||
|
<None Include="..\..\Docs\License.txt" />
|
||||||
|
<None Include="..\..\Docs\PCSX2 FAQ 0.9.6.rtf" />
|
||||||
|
<None Include="..\..\Docs\PCSX2 readme 0.9.6.rtf" />
|
||||||
|
<None Include="..\..\Ipu\idct_mmx.obj" />
|
||||||
|
<None Include="..\..\pcsxAbout.bmp" />
|
||||||
|
<None Include="..\..\x86\aMicroVU.S" />
|
||||||
|
<None Include="..\..\x86\aR3000A.S" />
|
||||||
|
<None Include="..\..\x86\aVif.S" />
|
||||||
|
<None Include="..\..\x86\aVUzerorec.S" />
|
||||||
|
<None Include="..\..\x86\fast_routines.S" />
|
||||||
|
<None Include="..\..\x86\ix86-32\aR5900-32.S" />
|
||||||
|
<None Include="..\..\x86\ix86\ix86_inlines.inl" />
|
||||||
|
<None Include="..\..\x86\microVU_Alloc.inl" />
|
||||||
|
<None Include="..\..\x86\microVU_Analyze.inl" />
|
||||||
|
<None Include="..\..\x86\microVU_Branch.inl" />
|
||||||
|
<None Include="..\..\x86\microVU_Compile.inl" />
|
||||||
|
<None Include="..\..\x86\microVU_Execute.inl" />
|
||||||
|
<None Include="..\..\x86\microVU_Flags.inl" />
|
||||||
|
<None Include="..\..\x86\microVU_Log.inl" />
|
||||||
|
<None Include="..\..\x86\microVU_Lower.inl" />
|
||||||
|
<None Include="..\..\x86\microVU_Misc.inl" />
|
||||||
|
<None Include="..\..\x86\microVU_Tables.inl" />
|
||||||
|
<None Include="..\..\x86\microVU_Upper.inl" />
|
||||||
|
<None Include="..\Cdrom02.ico" />
|
||||||
|
<None Include="..\ps2_silver.bmp" />
|
||||||
|
<None Include="..\uninstall.ico" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<MASM Include="..\..\x86\ix86-32\aVif_proc-32.asm" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ResourceCompile Include="..\debugger.rc" />
|
||||||
|
<ResourceCompile Include="..\pcsx2.rc" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
<Import Project="$(VCINSTALLDIR)\VCProjectDefaults\masm.targets" />
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
File diff suppressed because it is too large
Load Diff
|
@ -214,7 +214,7 @@
|
||||||
PreprocessorDefinitions="NDEBUG;wxUSE_UNICODE=1"
|
PreprocessorDefinitions="NDEBUG;wxUSE_UNICODE=1"
|
||||||
ExceptionHandling="2"
|
ExceptionHandling="2"
|
||||||
EnableEnhancedInstructionSet="0"
|
EnableEnhancedInstructionSet="0"
|
||||||
UsePrecompiledHeader="2"
|
UsePrecompiledHeader="0"
|
||||||
PrecompiledHeaderThrough="PrecompiledHeader.h"
|
PrecompiledHeaderThrough="PrecompiledHeader.h"
|
||||||
PrecompiledHeaderFile="$(IntDir)\$(TargetName).pch"
|
PrecompiledHeaderFile="$(IntDir)\$(TargetName).pch"
|
||||||
CompileAs="2"
|
CompileAs="2"
|
||||||
|
@ -1482,6 +1482,10 @@
|
||||||
RelativePath="..\..\x86\microVU_Analyze.inl"
|
RelativePath="..\..\x86\microVU_Analyze.inl"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\x86\microVU_Branch.inl"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\x86\microVU_Compile.inl"
|
RelativePath="..\..\x86\microVU_Compile.inl"
|
||||||
>
|
>
|
||||||
|
|
|
@ -207,13 +207,13 @@ microVUt(void) mVUvsyncUpdate(mV) {
|
||||||
mVU->prog.prog[i].used = 0;
|
mVU->prog.prog[i].used = 0;
|
||||||
mVU->prog.prog[i].frame = mVU->prog.curFrame;
|
mVU->prog.prog[i].frame = mVU->prog.curFrame;
|
||||||
}
|
}
|
||||||
if((mVU->prog.curFrame - mVU->prog.prog[i].frame) >= (360 * 10)) {
|
else if (((mVU->prog.curFrame - mVU->prog.prog[i].frame) >= (360 * 10)) && (i != mVU->prog.cur)) {
|
||||||
mVU->prog.total--;
|
mVU->prog.total--;
|
||||||
if (!mVU->index) mVUclearProg<0>(i);
|
if (!mVU->index) mVUclearProg<0>(i);
|
||||||
else mVUclearProg<1>(i);
|
else mVUclearProg<1>(i);
|
||||||
DevCon::Status("microVU%d: Killing Dead Program [%03d]", params mVU->index, i+1);
|
DevCon::Status("microVU%d: Killing Dead Program [%03d]", params mVU->index, i+1);
|
||||||
}
|
}
|
||||||
else if (!mVU->prog.prog[i].isOld && ((mVU->prog.curFrame - mVU->prog.prog[i].frame) >= (30 * 1))) {
|
else if (((mVU->prog.curFrame - mVU->prog.prog[i].frame) >= (30 * 1)) && !mVU->prog.prog[i].isOld) {
|
||||||
mVU->prog.prog[i].isOld = 1;
|
mVU->prog.prog[i].isOld = 1;
|
||||||
//DevCon::Status("microVU%d: Aging Old Program [%03d]", params mVU->index, i+1);
|
//DevCon::Status("microVU%d: Aging Old Program [%03d]", params mVU->index, i+1);
|
||||||
}
|
}
|
||||||
|
@ -268,6 +268,7 @@ microVUf(int) mVUsearchProg() {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
mVU->prog.prog[mVU->prog.cur].used = 1;
|
mVU->prog.prog[mVU->prog.cur].used = 1;
|
||||||
|
mVU->prog.prog[mVU->prog.cur].isOld = 0;
|
||||||
return 1; // If !cleared, then we're still on the same program as last-time ;)
|
return 1; // If !cleared, then we're still on the same program as last-time ;)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -88,7 +88,9 @@ public:
|
||||||
&& (linkI->block->pState.vi15 == pState->vi15)
|
&& (linkI->block->pState.vi15 == pState->vi15)
|
||||||
&& (linkI->block->pState.flags == pState->flags)
|
&& (linkI->block->pState.flags == pState->flags)
|
||||||
&& (linkI->block->pState.xgkick == pState->xgkick)
|
&& (linkI->block->pState.xgkick == pState->xgkick)
|
||||||
&& !(linkI->block->pState.needExactMatch & 0xf0f)) { return linkI->block; }
|
&& (linkI->block->pState.viBackUp == pState->viBackUp)
|
||||||
|
&& (linkI->block->pState.blockType == pState->blockType)
|
||||||
|
&& !(linkI->block->pState.needExactMatch & 5)) { return linkI->block; }
|
||||||
linkI = linkI->next;
|
linkI = linkI->next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -157,6 +159,8 @@ struct microVU {
|
||||||
u32 VIbackup; // Holds a backup of a VI reg if modified before a branch
|
u32 VIbackup; // Holds a backup of a VI reg if modified before a branch
|
||||||
u32 VIxgkick; // Holds a backup of a VI reg used for xgkick-delays
|
u32 VIxgkick; // Holds a backup of a VI reg used for xgkick-delays
|
||||||
u32 branch; // Holds branch compare result (IBxx) OR Holds address to Jump to (JALR/JR)
|
u32 branch; // Holds branch compare result (IBxx) OR Holds address to Jump to (JALR/JR)
|
||||||
|
u32 badBranch; // For Branches in Branch Delay Slots, holds Address the first Branch went to + 8
|
||||||
|
u32 evilBranch; // For Branches in Branch Delay Slots, holds Address to Jump to
|
||||||
u32 p; // Holds current P instance index
|
u32 p; // Holds current P instance index
|
||||||
u32 q; // Holds current Q instance index
|
u32 q; // Holds current Q instance index
|
||||||
u32 totalCycles; // Total Cycles that mVU is expected to run for
|
u32 totalCycles; // Total Cycles that mVU is expected to run for
|
||||||
|
@ -206,5 +210,6 @@ typedef void (__fastcall *mVUrecCall)(u32, u32);
|
||||||
#include "microVU_Lower.inl"
|
#include "microVU_Lower.inl"
|
||||||
#include "microVU_Tables.inl"
|
#include "microVU_Tables.inl"
|
||||||
#include "microVU_Flags.inl"
|
#include "microVU_Flags.inl"
|
||||||
|
#include "microVU_Branch.inl"
|
||||||
#include "microVU_Compile.inl"
|
#include "microVU_Compile.inl"
|
||||||
#include "microVU_Execute.inl"
|
#include "microVU_Execute.inl"
|
||||||
|
|
|
@ -117,12 +117,6 @@ microVUt(void) mVUallocVIb(mV, int GPRreg, int _reg_) {
|
||||||
// I/P/Q Reg Allocators
|
// I/P/Q Reg Allocators
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
|
|
||||||
microVUt(void) getIreg(mV, int reg, bool modXYZW) {
|
|
||||||
SSE_MOVSS_M32_to_XMM(reg, (uptr)&mVU->regs->VI[REG_I].UL);
|
|
||||||
if (CHECK_VU_EXTRA_OVERFLOW) mVUclamp2(reg, -1, 8);
|
|
||||||
if (!((_XYZW_SS && modXYZW) || (_X_Y_Z_W == 8))) { mVUunpack_xyzw(reg, reg, 0); }
|
|
||||||
}
|
|
||||||
|
|
||||||
microVUt(void) getPreg(mV, int reg) {
|
microVUt(void) getPreg(mV, int reg) {
|
||||||
mVUunpack_xyzw(reg, xmmPQ, (2 + mVUinfo.readP));
|
mVUunpack_xyzw(reg, xmmPQ, (2 + mVUinfo.readP));
|
||||||
/*if (CHECK_VU_EXTRA_OVERFLOW) mVUclamp2(reg, xmmT1, 15);*/
|
/*if (CHECK_VU_EXTRA_OVERFLOW) mVUclamp2(reg, xmmT1, 15);*/
|
||||||
|
|
|
@ -297,7 +297,7 @@ microVUt(void) mVUanalyzeSflag(mV, int It) {
|
||||||
mVUsFlagHack = 0; // Don't Optimize Out Status Flags for this block
|
mVUsFlagHack = 0; // Don't Optimize Out Status Flags for this block
|
||||||
mVUinfo.swapOps = 1;
|
mVUinfo.swapOps = 1;
|
||||||
flagSet(mVU, 0);
|
flagSet(mVU, 0);
|
||||||
if (mVUcount < 4) { mVUpBlock->pState.needExactMatch |= 0xf; }
|
if (mVUcount < 4) { mVUpBlock->pState.needExactMatch |= 1; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -318,7 +318,7 @@ microVUt(void) mVUanalyzeMflag(mV, int Is, int It) {
|
||||||
else { // Need set _doMac for 4 previous Ops (need to do all 4 because stalls could change the result needed)
|
else { // Need set _doMac for 4 previous Ops (need to do all 4 because stalls could change the result needed)
|
||||||
mVUinfo.swapOps = 1;
|
mVUinfo.swapOps = 1;
|
||||||
flagSet(mVU, 1);
|
flagSet(mVU, 1);
|
||||||
if (mVUcount < 4) { mVUpBlock->pState.needExactMatch |= 0xf << 4; }
|
if (mVUcount < 4) { mVUpBlock->pState.needExactMatch |= 2; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -329,7 +329,7 @@ microVUt(void) mVUanalyzeMflag(mV, int Is, int It) {
|
||||||
microVUt(void) mVUanalyzeCflag(mV, int It) {
|
microVUt(void) mVUanalyzeCflag(mV, int It) {
|
||||||
mVUinfo.swapOps = 1;
|
mVUinfo.swapOps = 1;
|
||||||
mVUlow.readFlags = 1;
|
mVUlow.readFlags = 1;
|
||||||
if (mVUcount < 4) { mVUpBlock->pState.needExactMatch |= 0xf << 8; }
|
if (mVUcount < 4) { mVUpBlock->pState.needExactMatch |= 4; }
|
||||||
analyzeVIreg2(It, mVUlow.VI_write, 1);
|
analyzeVIreg2(It, mVUlow.VI_write, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -356,10 +356,17 @@ microVUt(void) mVUanalyzeXGkick(mV, int Fs, int xCycles) {
|
||||||
microVUt(void) analyzeBranchVI(mV, int xReg, bool &infoVar) {
|
microVUt(void) analyzeBranchVI(mV, int xReg, bool &infoVar) {
|
||||||
if (!xReg) return;
|
if (!xReg) return;
|
||||||
int i;
|
int i;
|
||||||
int iEnd = aMin(5, mVUcount);
|
int iEnd = aMin(5, (mVUcount+1));
|
||||||
int bPC = iPC;
|
int bPC = iPC;
|
||||||
incPC2(-2);
|
incPC2(-2);
|
||||||
for (i = 0; i < iEnd; i++) {
|
for (i = 0; i < iEnd; i++) {
|
||||||
|
if ((i == mVUcount) && (i < 5)) {
|
||||||
|
if (mVUpBlock->pState.viBackUp == xReg) {
|
||||||
|
infoVar = 1;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
if ((mVUlow.VI_write.reg == xReg) && mVUlow.VI_write.used) {
|
if ((mVUlow.VI_write.reg == xReg) && mVUlow.VI_write.used) {
|
||||||
if (mVUlow.readFlags || i == 5) break;
|
if (mVUlow.readFlags || i == 5) break;
|
||||||
if (i == 0) { incPC2(-2); continue; }
|
if (i == 0) { incPC2(-2); continue; }
|
||||||
|
@ -370,32 +377,60 @@ microVUt(void) analyzeBranchVI(mV, int xReg, bool &infoVar) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (i) {
|
if (i) {
|
||||||
|
if (!infoVar) {
|
||||||
incPC2(2);
|
incPC2(2);
|
||||||
mVUlow.backupVI = 1;
|
mVUlow.backupVI = 1;
|
||||||
iPC = bPC;
|
|
||||||
infoVar = 1;
|
infoVar = 1;
|
||||||
|
}
|
||||||
|
iPC = bPC;
|
||||||
DevCon::Status("microVU%d: Branch VI-Delay (%d) [%04x]", params getIndex, i, xPC);
|
DevCon::Status("microVU%d: Branch VI-Delay (%d) [%04x]", params getIndex, i, xPC);
|
||||||
}
|
}
|
||||||
iPC = bPC;
|
else iPC = bPC;
|
||||||
}
|
}
|
||||||
|
|
||||||
microVUt(void) mVUanalyzeBranch1(mV, int Is) {
|
// Branch in Branch Delay-Slots
|
||||||
|
microVUt(int) mVUbranchCheck(mV) {
|
||||||
|
if (!mVUcount) return 0;
|
||||||
|
incPC(-2);
|
||||||
|
if (mVUlow.branch) {
|
||||||
|
mVUlow.badBranch = 1;
|
||||||
|
incPC(2);
|
||||||
|
mVUlow.evilBranch = 1;
|
||||||
|
mVUregs.blockType = 2;
|
||||||
|
DevCon::Status("microVU%d Warning: Branch in Branch delay slot! [%04x]", params mVU->index, xPC);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
incPC(2);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
microVUt(void) mVUanalyzeCondBranch1(mV, int Is) {
|
||||||
analyzeVIreg1(Is, mVUlow.VI_read[0]);
|
analyzeVIreg1(Is, mVUlow.VI_read[0]);
|
||||||
if (!mVUstall) {
|
if (!mVUstall && !mVUbranchCheck(mVU)) {
|
||||||
analyzeBranchVI(mVU, Is, mVUlow.memReadIs);
|
analyzeBranchVI(mVU, Is, mVUlow.memReadIs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
microVUt(void) mVUanalyzeBranch2(mV, int Is, int It) {
|
microVUt(void) mVUanalyzeCondBranch2(mV, int Is, int It) {
|
||||||
analyzeVIreg1(Is, mVUlow.VI_read[0]);
|
analyzeVIreg1(Is, mVUlow.VI_read[0]);
|
||||||
analyzeVIreg1(It, mVUlow.VI_read[1]);
|
analyzeVIreg1(It, mVUlow.VI_read[1]);
|
||||||
if (!mVUstall) {
|
if (!mVUstall && !mVUbranchCheck(mVU)) {
|
||||||
analyzeBranchVI(mVU, Is, mVUlow.memReadIs);
|
analyzeBranchVI(mVU, Is, mVUlow.memReadIs);
|
||||||
analyzeBranchVI(mVU, It, mVUlow.memReadIt);
|
analyzeBranchVI(mVU, It, mVUlow.memReadIt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
microVUt(void) mVUanalyzeNormBranch(mV, int It, bool isBAL) {
|
||||||
|
mVUbranchCheck(mVU);
|
||||||
|
if (isBAL) {
|
||||||
|
analyzeVIreg2(It, mVUlow.VI_write, 1);
|
||||||
|
setConstReg(It, bSaveAddr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
microVUt(void) mVUanalyzeJump(mV, int Is, int It, bool isJALR) {
|
microVUt(void) mVUanalyzeJump(mV, int Is, int It, bool isJALR) {
|
||||||
|
mVUbranchCheck(mVU);
|
||||||
|
mVUlow.branch = (isJALR) ? 10 : 9;
|
||||||
if (mVUconstReg[Is].isValid && !CHECK_VU_CONSTHACK) {
|
if (mVUconstReg[Is].isValid && !CHECK_VU_CONSTHACK) {
|
||||||
mVUlow.constJump.isValid = 1;
|
mVUlow.constJump.isValid = 1;
|
||||||
mVUlow.constJump.regValue = mVUconstReg[Is].regValue;
|
mVUlow.constJump.regValue = mVUconstReg[Is].regValue;
|
||||||
|
|
|
@ -0,0 +1,194 @@
|
||||||
|
/* Pcsx2 - Pc Ps2 Emulator
|
||||||
|
* Copyright (C) 2009 Pcsx2 Team
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
microVUt(void) mVUincCycles(mV, int x);
|
||||||
|
microVUr(void*) mVUcompile(microVU* mVU, u32 startPC, uptr pState);
|
||||||
|
|
||||||
|
#define blockCreate(addr) { if (!mVUblocks[addr]) mVUblocks[addr] = new microBlockManager(); }
|
||||||
|
#define sI ((mVUpBlock->pState.needExactMatch & 1) ? 3 : ((mVUpBlock->pState.flags >> 0) & 3))
|
||||||
|
#define cI ((mVUpBlock->pState.needExactMatch & 4) ? 3 : ((mVUpBlock->pState.flags >> 2) & 3))
|
||||||
|
|
||||||
|
microVUt(void) mVUendProgram(mV, microFlagCycles* mFC, int isEbit) {
|
||||||
|
|
||||||
|
int fStatus = (isEbit) ? findFlagInst(mFC->xStatus, 0x7fffffff) : sI;
|
||||||
|
int fMac = (isEbit) ? findFlagInst(mFC->xMac, 0x7fffffff) : 0;
|
||||||
|
int fClip = (isEbit) ? findFlagInst(mFC->xClip, 0x7fffffff) : cI;
|
||||||
|
int qInst = 0;
|
||||||
|
int pInst = 0;
|
||||||
|
mVU->regAlloc->flushAll();
|
||||||
|
|
||||||
|
if (isEbit) {
|
||||||
|
mVUprint("mVUcompile ebit");
|
||||||
|
memset(&mVUinfo, 0, sizeof(mVUinfo));
|
||||||
|
memset(&mVUregsTemp, 0, sizeof(mVUregsTemp));
|
||||||
|
mVUincCycles(mVU, 100); // Ensures Valid P/Q instances (And sets all cycle data to 0)
|
||||||
|
mVUcycles -= 100;
|
||||||
|
qInst = mVU->q;
|
||||||
|
pInst = mVU->p;
|
||||||
|
if (mVUinfo.doDivFlag) {
|
||||||
|
sFLAG.doFlag = 1;
|
||||||
|
sFLAG.write = fStatus;
|
||||||
|
mVUdivSet(mVU);
|
||||||
|
}
|
||||||
|
if (mVUinfo.doXGKICK) { mVU_XGKICK_DELAY(mVU, 1); }
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save P/Q Regs
|
||||||
|
if (qInst) { SSE2_PSHUFD_XMM_to_XMM(xmmPQ, xmmPQ, 0xe5); }
|
||||||
|
SSE_MOVSS_XMM_to_M32((uptr)&mVU->regs->VI[REG_Q].UL, xmmPQ);
|
||||||
|
if (isVU1) {
|
||||||
|
SSE2_PSHUFD_XMM_to_XMM(xmmPQ, xmmPQ, pInst ? 3 : 2);
|
||||||
|
SSE_MOVSS_XMM_to_M32((uptr)&mVU->regs->VI[REG_P].UL, xmmPQ);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save Flag Instances
|
||||||
|
mVUallocSFLAGc(gprT1, gprT2, fStatus);
|
||||||
|
MOV32RtoM((uptr)&mVU->regs->VI[REG_STATUS_FLAG].UL, gprT1);
|
||||||
|
mVUallocMFLAGa(mVU, gprT1, fMac);
|
||||||
|
mVUallocCFLAGa(mVU, gprT2, fClip);
|
||||||
|
MOV32RtoM((uptr)&mVU->regs->VI[REG_MAC_FLAG].UL, gprT1);
|
||||||
|
MOV32RtoM((uptr)&mVU->regs->VI[REG_CLIP_FLAG].UL, gprT2);
|
||||||
|
|
||||||
|
if (isEbit || isVU1) { // Clear 'is busy' Flags
|
||||||
|
AND32ItoM((uptr)&VU0.VI[REG_VPU_STAT].UL, (isVU1 ? ~0x100 : ~0x001)); // VBS0/VBS1 flag
|
||||||
|
AND32ItoM((uptr)&mVU->regs->vifRegs->stat, ~0x4); // Clear VU 'is busy' signal for vif
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isEbit != 2) { // Save PC, and Jump to Exit Point
|
||||||
|
MOV32ItoM((uptr)&mVU->regs->VI[REG_TPC].UL, xPC);
|
||||||
|
JMP32((uptr)mVU->exitFunct - ((uptr)x86Ptr + 5));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Recompiles Code for Proper Flags and Q/P regs on Block Linkings
|
||||||
|
microVUt(void) mVUsetupBranch(mV, microFlagCycles& mFC) {
|
||||||
|
|
||||||
|
mVU->regAlloc->flushAll(); // Flush Allocated Regs
|
||||||
|
mVUsetupFlags(mVU, mFC); // Shuffle Flag Instances
|
||||||
|
|
||||||
|
// Shuffle P/Q regs since every block starts at instance #0
|
||||||
|
if (mVU->p || mVU->q) { SSE2_PSHUFD_XMM_to_XMM(xmmPQ, xmmPQ, shufflePQ); }
|
||||||
|
}
|
||||||
|
|
||||||
|
void normBranchCompile(microVU* mVU, u32 branchPC) {
|
||||||
|
using namespace x86Emitter;
|
||||||
|
microBlock* pBlock;
|
||||||
|
blockCreate(branchPC/8);
|
||||||
|
pBlock = mVUblocks[branchPC/8]->search((microRegInfo*)&mVUregs);
|
||||||
|
if (pBlock) { xJMP(pBlock->x86ptrStart); }
|
||||||
|
else { mVUcompile(mVU, branchPC, (uptr)&mVUregs); }
|
||||||
|
}
|
||||||
|
|
||||||
|
void normJumpCompile(mV, microFlagCycles& mFC, bool isEvilJump) {
|
||||||
|
using namespace x86Emitter;
|
||||||
|
memcpy_fast(&mVUpBlock->pStateEnd, &mVUregs, sizeof(microRegInfo));
|
||||||
|
mVUsetupBranch(mVU, mFC);
|
||||||
|
mVUbackupRegs(mVU);
|
||||||
|
|
||||||
|
if (isEvilJump) MOV32MtoR(gprT2, (uptr)&mVU->evilBranch);
|
||||||
|
else MOV32MtoR(gprT2, (uptr)&mVU->branch);
|
||||||
|
MOV32ItoR(gprR, (u32)&mVUpBlock->pStateEnd);
|
||||||
|
|
||||||
|
if (!mVU->index) xCALL(mVUcompileJIT<0>); //(u32 startPC, uptr pState)
|
||||||
|
else xCALL(mVUcompileJIT<1>);
|
||||||
|
|
||||||
|
mVUrestoreRegs(mVU);
|
||||||
|
JMPR(gprT1); // Jump to rec-code address
|
||||||
|
}
|
||||||
|
|
||||||
|
void normBranch(mV, microFlagCycles& mFC) {
|
||||||
|
|
||||||
|
// E-bit Branch
|
||||||
|
if (mVUup.eBit) { iPC = branchAddr/4; mVUendProgram(mVU, &mFC, 1); return; }
|
||||||
|
|
||||||
|
// Normal Branch
|
||||||
|
mVUsetupBranch(mVU, mFC);
|
||||||
|
normBranchCompile(mVU, branchAddr);
|
||||||
|
}
|
||||||
|
|
||||||
|
void condBranch(mV, microFlagCycles& mFC, int JMPcc) {
|
||||||
|
using namespace x86Emitter;
|
||||||
|
mVUsetupBranch(mVU, mFC);
|
||||||
|
xCMP(ptr16[&mVU->branch], 0);
|
||||||
|
incPC(3);
|
||||||
|
if (mVUup.eBit) { // Conditional Branch With E-Bit Set
|
||||||
|
mVUendProgram(mVU, &mFC, 2);
|
||||||
|
xForwardJump8 eJMP((JccComparisonType)JMPcc);
|
||||||
|
incPC(1); // Set PC to First instruction of Non-Taken Side
|
||||||
|
xMOV(ptr32[&mVU->regs->VI[REG_TPC].UL], xPC);
|
||||||
|
xJMP(mVU->exitFunct);
|
||||||
|
eJMP.SetTarget();
|
||||||
|
incPC(-4); // Go Back to Branch Opcode to get branchAddr
|
||||||
|
iPC = branchAddr/4;
|
||||||
|
xMOV(ptr32[&mVU->regs->VI[REG_TPC].UL], xPC);
|
||||||
|
xJMP(mVU->exitFunct);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else { // Normal Conditional Branch
|
||||||
|
microBlock* bBlock;
|
||||||
|
incPC2(1); // Check if Branch Non-Taken Side has already been recompiled
|
||||||
|
blockCreate(iPC/2);
|
||||||
|
bBlock = mVUblocks[iPC/2]->search((microRegInfo*)&mVUregs);
|
||||||
|
incPC2(-1);
|
||||||
|
if (bBlock) { // Branch non-taken has already been compiled
|
||||||
|
xJcc(xInvertCond((JccComparisonType)JMPcc), bBlock->x86ptrStart);
|
||||||
|
incPC(-3); // Go back to branch opcode (to get branch imm addr)
|
||||||
|
normBranchCompile(mVU, branchAddr);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
s32* ajmp = xJcc32((JccComparisonType)JMPcc);
|
||||||
|
u32 bPC = iPC; // mVUcompile can modify iPC, mVUpBlock, and mVUregs so back them up
|
||||||
|
microBlock* pBlock = mVUpBlock;
|
||||||
|
memcpy_fast(&pBlock->pStateEnd, &mVUregs, sizeof(microRegInfo));
|
||||||
|
|
||||||
|
incPC2(1); // Get PC for branch not-taken
|
||||||
|
mVUcompile(mVU, xPC, (uptr)&mVUregs);
|
||||||
|
|
||||||
|
iPC = bPC;
|
||||||
|
incPC(-3); // Go back to branch opcode (to get branch imm addr)
|
||||||
|
uptr jumpAddr = (uptr)mVUblockFetch(mVU, branchAddr, (uptr)&pBlock->pStateEnd);
|
||||||
|
*ajmp = (jumpAddr - ((uptr)ajmp + 4));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void normJump(mV, microFlagCycles& mFC) {
|
||||||
|
using namespace x86Emitter;
|
||||||
|
|
||||||
|
if (mVUlow.constJump.isValid) { // Jump Address is Constant
|
||||||
|
if (mVUup.eBit) { // E-bit Jump
|
||||||
|
iPC = (mVUlow.constJump.regValue*2)&(mVU->progSize-1);
|
||||||
|
mVUendProgram(mVU, &mFC, 1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
int jumpAddr = (mVUlow.constJump.regValue*8)&(mVU->microMemSize-8);
|
||||||
|
mVUsetupBranch(mVU, mFC);
|
||||||
|
normBranchCompile(mVU, jumpAddr);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mVUup.eBit) { // E-bit Jump
|
||||||
|
mVUendProgram(mVU, &mFC, 2);
|
||||||
|
MOV32MtoR(gprT1, (uptr)&mVU->branch);
|
||||||
|
MOV32RtoM((uptr)&mVU->regs->VI[REG_TPC].UL, gprT1);
|
||||||
|
xJMP(mVU->exitFunct);
|
||||||
|
}
|
||||||
|
else normJumpCompile(mVU, mFC, 0);
|
||||||
|
}
|
|
@ -22,23 +22,6 @@
|
||||||
// Helper Macros
|
// Helper Macros
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
|
|
||||||
#define branchCase(JMPcond) branchCaseFunct(mVU, bBlock, xStatus, xMac, xClip, xCycles, ajmp, JMPcond); break
|
|
||||||
|
|
||||||
#define branchWarning() { \
|
|
||||||
if (mVUbranch) { \
|
|
||||||
Console::Error("microVU%d Warning: Branch in E-bit/Branch delay slot! [%04x]", params mVU->index, xPC); \
|
|
||||||
mVUlow.isNOP = 1; \
|
|
||||||
} \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define startLoop() { \
|
|
||||||
if (curI & _Mbit_) { Console::Status("microVU%d: M-bit set!", params getIndex); } \
|
|
||||||
if (curI & _Dbit_) { DevCon::Status ("microVU%d: D-bit set!", params getIndex); } \
|
|
||||||
if (curI & _Tbit_) { DevCon::Status ("microVU%d: T-bit set!", params getIndex); } \
|
|
||||||
memset(&mVUinfo, 0, sizeof(mVUinfo)); \
|
|
||||||
memset(&mVUregsTemp, 0, sizeof(mVUregsTemp)); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define calcCycles(reg, x) { reg = ((reg > x) ? (reg - x) : 0); }
|
#define calcCycles(reg, x) { reg = ((reg > x) ? (reg - x) : 0); }
|
||||||
#define optimizeReg(rState) { rState = (rState==1) ? 0 : rState; }
|
#define optimizeReg(rState) { rState = (rState==1) ? 0 : rState; }
|
||||||
#define tCycles(dest, src) { dest = aMax(dest, src); }
|
#define tCycles(dest, src) { dest = aMax(dest, src); }
|
||||||
|
@ -46,48 +29,11 @@
|
||||||
#define incQ() { mVU->q = (mVU->q+1) & 1; }
|
#define incQ() { mVU->q = (mVU->q+1) & 1; }
|
||||||
#define doUpperOp() { mVUopU(mVU, 1); mVUdivSet(mVU); }
|
#define doUpperOp() { mVUopU(mVU, 1); mVUdivSet(mVU); }
|
||||||
#define doLowerOp() { incPC(-1); mVUopL(mVU, 1); incPC(1); }
|
#define doLowerOp() { incPC(-1); mVUopL(mVU, 1); incPC(1); }
|
||||||
#define blockCreate(addr) { if (!mVUblocks[addr]) mVUblocks[addr] = new microBlockManager(); }
|
|
||||||
|
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
// Helper Functions
|
// Helper Functions
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
|
|
||||||
microVUt(void) doSwapOp(mV) {
|
|
||||||
if (mVUinfo.backupVF && !mVUlow.noWriteVF) {
|
|
||||||
DevCon::Status("microVU%d: Backing Up VF Reg [%04x]", params getIndex, xPC);
|
|
||||||
int t1 = mVU->regAlloc->allocReg(mVUlow.VF_write.reg);
|
|
||||||
int t2 = mVU->regAlloc->allocReg();
|
|
||||||
SSE_MOVAPS_XMM_to_XMM(t2, t1);
|
|
||||||
mVU->regAlloc->clearNeeded(t1);
|
|
||||||
mVUopL(mVU, 1);
|
|
||||||
t1 = mVU->regAlloc->allocReg(mVUlow.VF_write.reg, mVUlow.VF_write.reg, 0xf, 0);
|
|
||||||
SSE_XORPS_XMM_to_XMM(t2, t1);
|
|
||||||
SSE_XORPS_XMM_to_XMM(t1, t2);
|
|
||||||
SSE_XORPS_XMM_to_XMM(t2, t1);
|
|
||||||
mVU->regAlloc->clearNeeded(t1);
|
|
||||||
incPC(1);
|
|
||||||
doUpperOp();
|
|
||||||
t1 = mVU->regAlloc->allocReg(-1, mVUlow.VF_write.reg, 0xf);
|
|
||||||
SSE_MOVAPS_XMM_to_XMM(t1, t2);
|
|
||||||
mVU->regAlloc->clearNeeded(t1);
|
|
||||||
mVU->regAlloc->clearNeeded(t2);
|
|
||||||
}
|
|
||||||
else { mVUopL(mVU, 1); incPC(1); doUpperOp(); }
|
|
||||||
}
|
|
||||||
|
|
||||||
microVUt(void) doIbit(mV) {
|
|
||||||
if (mVUup.iBit) {
|
|
||||||
incPC(-1);
|
|
||||||
if (CHECK_VU_OVERFLOW && ((curI & 0x7fffffff) >= 0x7f800000)) {
|
|
||||||
Console::Status("microVU%d: Clamping I Reg", params mVU->index);
|
|
||||||
int tempI = (0x80000000 & curI) | 0x7f7fffff; // Clamp I Reg
|
|
||||||
MOV32ItoM((uptr)&mVU->regs->VI[REG_I].UL, tempI);
|
|
||||||
}
|
|
||||||
else MOV32ItoM((uptr)&mVU->regs->VI[REG_I].UL, curI);
|
|
||||||
incPC(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Used by mVUsetupRange
|
// Used by mVUsetupRange
|
||||||
microVUt(void) mVUcheckIsSame(mV) {
|
microVUt(void) mVUcheckIsSame(mV) {
|
||||||
|
|
||||||
|
@ -163,6 +109,88 @@ microVUt(void) mVUsetupRange(mV, s32 pc, bool isStartPC) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
microVUt(void) startLoop(mV) {
|
||||||
|
if (curI & _Mbit_) { Console::Status("microVU%d: M-bit set!", params getIndex); }
|
||||||
|
if (curI & _Dbit_) { DevCon::Status ("microVU%d: D-bit set!", params getIndex); }
|
||||||
|
if (curI & _Tbit_) { DevCon::Status ("microVU%d: T-bit set!", params getIndex); }
|
||||||
|
memset(&mVUinfo, 0, sizeof(mVUinfo));
|
||||||
|
memset(&mVUregsTemp, 0, sizeof(mVUregsTemp));
|
||||||
|
}
|
||||||
|
|
||||||
|
microVUt(void) doIbit(mV) {
|
||||||
|
if (mVUup.iBit) {
|
||||||
|
incPC(-1);
|
||||||
|
u32 tempI;
|
||||||
|
mVU->regAlloc->clearRegVF(33);
|
||||||
|
|
||||||
|
if (CHECK_VU_OVERFLOW && ((curI & 0x7fffffff) >= 0x7f800000)) {
|
||||||
|
Console::Status("microVU%d: Clamping I Reg", params mVU->index);
|
||||||
|
tempI = (0x80000000 & curI) | 0x7f7fffff; // Clamp I Reg
|
||||||
|
}
|
||||||
|
else tempI = curI;
|
||||||
|
|
||||||
|
MOV32ItoM((uptr)&mVU->regs->VI[REG_I].UL, tempI);
|
||||||
|
incPC(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
microVUt(void) doSwapOp(mV) {
|
||||||
|
if (mVUinfo.backupVF && !mVUlow.noWriteVF) {
|
||||||
|
DevCon::Status("microVU%d: Backing Up VF Reg [%04x]", params getIndex, xPC);
|
||||||
|
int t1 = mVU->regAlloc->allocReg(mVUlow.VF_write.reg);
|
||||||
|
int t2 = mVU->regAlloc->allocReg();
|
||||||
|
SSE_MOVAPS_XMM_to_XMM(t2, t1);
|
||||||
|
mVU->regAlloc->clearNeeded(t1);
|
||||||
|
mVUopL(mVU, 1);
|
||||||
|
t1 = mVU->regAlloc->allocReg(mVUlow.VF_write.reg, mVUlow.VF_write.reg, 0xf, 0);
|
||||||
|
SSE_XORPS_XMM_to_XMM(t2, t1);
|
||||||
|
SSE_XORPS_XMM_to_XMM(t1, t2);
|
||||||
|
SSE_XORPS_XMM_to_XMM(t2, t1);
|
||||||
|
mVU->regAlloc->clearNeeded(t1);
|
||||||
|
incPC(1);
|
||||||
|
doUpperOp();
|
||||||
|
t1 = mVU->regAlloc->allocReg(-1, mVUlow.VF_write.reg, 0xf);
|
||||||
|
SSE_MOVAPS_XMM_to_XMM(t1, t2);
|
||||||
|
mVU->regAlloc->clearNeeded(t1);
|
||||||
|
mVU->regAlloc->clearNeeded(t2);
|
||||||
|
}
|
||||||
|
else { mVUopL(mVU, 1); incPC(1); doUpperOp(); }
|
||||||
|
}
|
||||||
|
|
||||||
|
microVUt(void) branchWarning(mV) {
|
||||||
|
incPC(-2);
|
||||||
|
if (mVUup.eBit && mVUbranch) {
|
||||||
|
incPC(2);
|
||||||
|
Console::Error("microVU%d Warning: Branch in E-bit delay slot! [%04x]", params mVU->index, xPC);
|
||||||
|
mVUlow.isNOP = 1;
|
||||||
|
}
|
||||||
|
else incPC(2);
|
||||||
|
if (mVUinfo.isBdelay) { // Check if VI Reg Written to on Branch Delay Slot Instruction
|
||||||
|
if (mVUlow.VI_write.reg && mVUlow.VI_write.used && !mVUlow.readFlags) {
|
||||||
|
mVUlow.backupVI = 1;
|
||||||
|
mVUregs.viBackUp = mVUlow.VI_write.reg;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
microVUt(void) eBitPass1(mV, int& branch) {
|
||||||
|
if (mVUregs.blockType != 1) {
|
||||||
|
branch = 1;
|
||||||
|
mVUup.eBit = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
microVUt(void) eBitWarning(mV) {
|
||||||
|
if (mVUpBlock->pState.blockType == 1) Console::Error("microVU%d Warning: Branch, E-bit, Branch! [%04x]", params mVU->index, xPC);
|
||||||
|
if (mVUpBlock->pState.blockType == 2) Console::Error("microVU%d Warning: Branch, Branch, Branch! [%04x]", params mVU->index, xPC);
|
||||||
|
incPC(2);
|
||||||
|
if (curI & _Ebit_) {
|
||||||
|
DevCon::Status("microVU%d: E-bit in Branch delay slot! [%04x]", params mVU->index, xPC);
|
||||||
|
mVUregs.blockType = 1;
|
||||||
|
}
|
||||||
|
incPC(-2);
|
||||||
|
}
|
||||||
|
|
||||||
// Optimizes the End Pipeline State Removing Unnecessary Info
|
// Optimizes the End Pipeline State Removing Unnecessary Info
|
||||||
microVUt(void) mVUoptimizePipeState(mV) {
|
microVUt(void) mVUoptimizePipeState(mV) {
|
||||||
for (int i = 0; i < 32; i++) {
|
for (int i = 0; i < 32; i++) {
|
||||||
|
@ -174,21 +202,9 @@ microVUt(void) mVUoptimizePipeState(mV) {
|
||||||
for (int i = 0; i < 16; i++) {
|
for (int i = 0; i < 16; i++) {
|
||||||
optimizeReg(mVUregs.VI[i]);
|
optimizeReg(mVUregs.VI[i]);
|
||||||
}
|
}
|
||||||
mVUregs.r = 0;
|
if (mVUregs.q) { optimizeReg(mVUregs.q); if (!mVUregs.q) { incQ(); } }
|
||||||
}
|
if (mVUregs.p) { optimizeReg(mVUregs.p); if (!mVUregs.p) { incP(); } }
|
||||||
|
mVUregs.r = 0; // There are no stalls on the R-reg, so its Safe to discard info
|
||||||
// Recompiles Code for Proper Flags and Q/P regs on Block Linkings
|
|
||||||
microVUt(void) mVUsetupBranch(mV, int* xStatus, int* xMac, int* xClip, int xCycles) {
|
|
||||||
mVUprint("mVUsetupBranch");
|
|
||||||
|
|
||||||
// Flush Allocated Regs
|
|
||||||
mVU->regAlloc->flushAll();
|
|
||||||
|
|
||||||
// Shuffle Flag Instances
|
|
||||||
mVUsetupFlags(mVU, xStatus, xMac, xClip, xCycles);
|
|
||||||
|
|
||||||
// Shuffle P/Q regs since every block starts at instance #0
|
|
||||||
if (mVU->p || mVU->q) { SSE2_PSHUFD_XMM_to_XMM(xmmPQ, xmmPQ, shufflePQ); }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
microVUt(void) mVUincCycles(mV, int x) {
|
microVUt(void) mVUincCycles(mV, int x) {
|
||||||
|
@ -209,7 +225,7 @@ microVUt(void) mVUincCycles(mV, int x) {
|
||||||
}
|
}
|
||||||
if (mVUregs.p) {
|
if (mVUregs.p) {
|
||||||
calcCycles(mVUregs.p, x);
|
calcCycles(mVUregs.p, x);
|
||||||
if (!mVUregs.p || (mVUregs.p && mVUregsTemp.p)) { incP(); }
|
if (!mVUregs.p || mVUregsTemp.p) { incP(); }
|
||||||
}
|
}
|
||||||
if (mVUregs.xgkick) {
|
if (mVUregs.xgkick) {
|
||||||
calcCycles(mVUregs.xgkick, x);
|
calcCycles(mVUregs.xgkick, x);
|
||||||
|
@ -263,88 +279,8 @@ microVUt(void) mVUsetCycles(mV) {
|
||||||
tCycles(mVUregs.xgkick, mVUregsTemp.xgkick);
|
tCycles(mVUregs.xgkick, mVUregsTemp.xgkick);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define sI ((mVUpBlock->pState.needExactMatch & 0x000f) ? 0 : ((mVUpBlock->pState.flags >> 0) & 3))
|
void __fastcall mVUwarning0(mV) { Console::Error("microVU0 Warning: Exiting from Possible Infinite Loop [%04x] [%x]", params xPC, mVU->prog.cur); }
|
||||||
#define cI ((mVUpBlock->pState.needExactMatch & 0x0f00) ? 0 : ((mVUpBlock->pState.flags >> 2) & 3))
|
void __fastcall mVUwarning1(mV) { Console::Error("microVU1 Warning: Exiting from Possible Infinite Loop [%04x] [%x]", params xPC, mVU->prog.cur); }
|
||||||
|
|
||||||
microVUt(void) mVUendProgram(mV, int isEbit, int* xStatus, int* xMac, int* xClip) {
|
|
||||||
|
|
||||||
int fStatus = (isEbit) ? findFlagInst(xStatus, 0x7fffffff) : sI;
|
|
||||||
int fMac = (isEbit) ? findFlagInst(xMac, 0x7fffffff) : 0;
|
|
||||||
int fClip = (isEbit) ? findFlagInst(xClip, 0x7fffffff) : cI;
|
|
||||||
int qInst = 0;
|
|
||||||
int pInst = 0;
|
|
||||||
mVU->regAlloc->flushAll();
|
|
||||||
|
|
||||||
if (isEbit) {
|
|
||||||
mVUprint("mVUcompile ebit");
|
|
||||||
memset(&mVUinfo, 0, sizeof(mVUinfo));
|
|
||||||
mVUincCycles(mVU, 100); // Ensures Valid P/Q instances (And sets all cycle data to 0)
|
|
||||||
mVUcycles -= 100;
|
|
||||||
qInst = mVU->q;
|
|
||||||
pInst = mVU->p;
|
|
||||||
if (mVUinfo.doDivFlag) {
|
|
||||||
sFLAG.doFlag = 1;
|
|
||||||
sFLAG.write = fStatus;
|
|
||||||
mVUdivSet(mVU);
|
|
||||||
}
|
|
||||||
if (mVUinfo.doXGKICK) { mVU_XGKICK_DELAY(mVU, 1); }
|
|
||||||
}
|
|
||||||
|
|
||||||
// Save P/Q Regs
|
|
||||||
if (qInst) { SSE2_PSHUFD_XMM_to_XMM(xmmPQ, xmmPQ, 0xe5); }
|
|
||||||
SSE_MOVSS_XMM_to_M32((uptr)&mVU->regs->VI[REG_Q].UL, xmmPQ);
|
|
||||||
if (isVU1) {
|
|
||||||
SSE2_PSHUFD_XMM_to_XMM(xmmPQ, xmmPQ, pInst ? 3 : 2);
|
|
||||||
SSE_MOVSS_XMM_to_M32((uptr)&mVU->regs->VI[REG_P].UL, xmmPQ);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Save Flag Instances
|
|
||||||
mVUallocSFLAGc(gprT1, gprT2, fStatus);
|
|
||||||
MOV32RtoM((uptr)&mVU->regs->VI[REG_STATUS_FLAG].UL, gprT1);
|
|
||||||
mVUallocMFLAGa(mVU, gprT1, fMac);
|
|
||||||
mVUallocCFLAGa(mVU, gprT2, fClip);
|
|
||||||
MOV32RtoM((uptr)&mVU->regs->VI[REG_MAC_FLAG].UL, gprT1);
|
|
||||||
MOV32RtoM((uptr)&mVU->regs->VI[REG_CLIP_FLAG].UL, gprT2);
|
|
||||||
|
|
||||||
if (isEbit || isVU1) { // Clear 'is busy' Flags
|
|
||||||
AND32ItoM((uptr)&VU0.VI[REG_VPU_STAT].UL, (isVU1 ? ~0x100 : ~0x001)); // VBS0/VBS1 flag
|
|
||||||
AND32ItoM((uptr)&mVU->regs->vifRegs->stat, ~0x4); // Clear VU 'is busy' signal for vif
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isEbit != 2) { // Save PC, and Jump to Exit Point
|
|
||||||
MOV32ItoM((uptr)&mVU->regs->VI[REG_TPC].UL, xPC);
|
|
||||||
JMP32((uptr)mVU->exitFunct - ((uptr)x86Ptr + 5));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void branchCaseFunct(mV, microBlock* &bBlock, int* xStatus, int* xMac, int* xClip, int &xCycles, s32* &ajmp, int JMPcc) {
|
|
||||||
using namespace x86Emitter;
|
|
||||||
mVUsetupBranch(mVU, xStatus, xMac, xClip, xCycles);
|
|
||||||
xCMP(ptr16[&mVU->branch], 0);
|
|
||||||
if (mVUup.eBit) { // Conditional Branch With E-Bit Set
|
|
||||||
mVUendProgram(mVU, 2, xStatus, xMac, xClip);
|
|
||||||
xForwardJump8 eJMP((JccComparisonType)JMPcc);
|
|
||||||
incPC(1); // Set PC to First instruction of Non-Taken Side
|
|
||||||
xMOV(ptr32[&mVU->regs->VI[REG_TPC].UL], xPC);
|
|
||||||
xJMP(mVU->exitFunct);
|
|
||||||
eJMP.SetTarget();
|
|
||||||
incPC(-4); // Go Back to Branch Opcode to get branchAddr
|
|
||||||
iPC = branchAddr/4;
|
|
||||||
xMOV(ptr32[&mVU->regs->VI[REG_TPC].UL], xPC);
|
|
||||||
xJMP(mVU->exitFunct);
|
|
||||||
}
|
|
||||||
else { // Normal Conditional Branch
|
|
||||||
incPC2(1); // Check if Branch Non-Taken Side has already been recompiled
|
|
||||||
blockCreate(iPC/2);
|
|
||||||
bBlock = mVUblocks[iPC/2]->search((microRegInfo*)&mVUregs);
|
|
||||||
incPC2(-1);
|
|
||||||
if (bBlock) { xJcc( xInvertCond((JccComparisonType)JMPcc), bBlock->x86ptrStart ); }
|
|
||||||
else { ajmp = xJcc32((JccComparisonType)JMPcc); }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void __fastcall mVUwarning0(u32 PC) { Console::Error("microVU0 Warning: Exiting from Possible Infinite Loop [%04x]", params PC); }
|
|
||||||
void __fastcall mVUwarning1(u32 PC) { Console::Error("microVU1 Warning: Exiting from Possible Infinite Loop [%04x]", params PC); }
|
|
||||||
void __fastcall mVUprintPC1(u32 PC) { Console::Write("Block PC [%04x] ", params PC); }
|
void __fastcall mVUprintPC1(u32 PC) { Console::Write("Block PC [%04x] ", params PC); }
|
||||||
void __fastcall mVUprintPC2(u32 PC) { Console::Write("[%04x]\n", params PC); }
|
void __fastcall mVUprintPC2(u32 PC) { Console::Write("[%04x]\n", params PC); }
|
||||||
|
|
||||||
|
@ -352,16 +288,19 @@ microVUt(void) mVUtestCycles(mV) {
|
||||||
iPC = mVUstartPC;
|
iPC = mVUstartPC;
|
||||||
mVUdebugNOW(0);
|
mVUdebugNOW(0);
|
||||||
SUB32ItoM((uptr)&mVU->cycles, mVUcycles);
|
SUB32ItoM((uptr)&mVU->cycles, mVUcycles);
|
||||||
|
if (IsDevBuild || !isVU1) {
|
||||||
u32* jmp32 = JG32(0);
|
u32* jmp32 = JG32(0);
|
||||||
MOV32ItoR(gprT2, xPC);
|
MOV32ItoR(gprT2, (uptr)mVU);
|
||||||
if (isVU1) CALLFunc((uptr)mVUwarning1);
|
if (isVU1) CALLFunc((uptr)mVUwarning1);
|
||||||
//else CALLFunc((uptr)mVUwarning0); // VU0 is allowed early exit for COP2 Interlock Simulation
|
//else CALLFunc((uptr)mVUwarning0); // VU0 is allowed early exit for COP2 Interlock Simulation
|
||||||
MOV32ItoR(gprR, Roffset); // Restore gprR
|
MOV32ItoR(gprR, Roffset); // Restore gprR
|
||||||
mVUendProgram(mVU, 0, NULL, NULL, NULL);
|
mVUendProgram(mVU, NULL, 0);
|
||||||
x86SetJ32(jmp32);
|
x86SetJ32(jmp32);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
microVUt(void) mVUinitConstValues(mV) {
|
// Initialize VI Constants (vi15 propagates through blocks)
|
||||||
|
microVUt(void) mVUinitConstValues(microVU* mVU) {
|
||||||
for (int i = 0; i < 16; i++) {
|
for (int i = 0; i < 16; i++) {
|
||||||
mVUconstReg[i].isValid = 0;
|
mVUconstReg[i].isValid = 0;
|
||||||
mVUconstReg[i].regValue = 0;
|
mVUconstReg[i].regValue = 0;
|
||||||
|
@ -370,6 +309,25 @@ microVUt(void) mVUinitConstValues(mV) {
|
||||||
mVUconstReg[15].regValue = mVUconstReg[15].isValid ? (mVUregs.vi15&0xffff) : 0;
|
mVUconstReg[15].regValue = mVUconstReg[15].isValid ? (mVUregs.vi15&0xffff) : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Initialize Variables
|
||||||
|
microVUt(void) mVUinitFirstPass(microVU* mVU, uptr pState, u8* thisPtr) {
|
||||||
|
mVUstartPC = iPC; // Block Start PC
|
||||||
|
mVUbranch = 0; // Branch Type
|
||||||
|
mVUcount = 0; // Number of instructions ran
|
||||||
|
mVUcycles = 0; // Skips "M" phase, and starts counting cycles at "T" stage
|
||||||
|
mVU->p = 0; // All blocks start at p index #0
|
||||||
|
mVU->q = 0; // All blocks start at q index #0
|
||||||
|
memcpy_fast(&mVUregs, (microRegInfo*)pState, sizeof(microRegInfo)); // Loads up Pipeline State Info
|
||||||
|
mVUblock.x86ptrStart = thisPtr;
|
||||||
|
mVUpBlock = mVUblocks[mVUstartPC/2]->add(&mVUblock); // Add this block to block manager
|
||||||
|
mVUregs.blockType = 0;
|
||||||
|
mVUregs.viBackUp = 0;
|
||||||
|
mVUregs.flags = 0;
|
||||||
|
mVUregs.needExactMatch = 0;
|
||||||
|
mVUsFlagHack = CHECK_VU_FLAGHACK;
|
||||||
|
mVUinitConstValues(mVU);
|
||||||
|
}
|
||||||
|
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
// Recompiler
|
// Recompiler
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
|
@ -377,41 +335,22 @@ microVUt(void) mVUinitConstValues(mV) {
|
||||||
microVUr(void*) mVUcompile(microVU* mVU, u32 startPC, uptr pState) {
|
microVUr(void*) mVUcompile(microVU* mVU, u32 startPC, uptr pState) {
|
||||||
|
|
||||||
using namespace x86Emitter;
|
using namespace x86Emitter;
|
||||||
microBlock* pBlock = NULL;
|
microFlagCycles mFC;
|
||||||
u8* thisPtr = x86Ptr;
|
u8* thisPtr = x86Ptr;
|
||||||
const u32 endCount = (mVU->microMemSize / 8) - 1;
|
const u32 endCount = (((microRegInfo*)pState)->blockType) ? 1 : (mVU->microMemSize / 8);
|
||||||
|
|
||||||
// Setup Program Bounds/Range
|
|
||||||
mVUsetupRange(mVU, startPC, 1);
|
|
||||||
|
|
||||||
// Reset regAlloc
|
|
||||||
mVU->regAlloc->reset();
|
|
||||||
|
|
||||||
// First Pass
|
// First Pass
|
||||||
iPC = startPC / 4;
|
iPC = startPC / 4;
|
||||||
setCode();
|
mVUsetupRange(mVU, startPC, 1); // Setup Program Bounds/Range
|
||||||
mVUbranch = 0;
|
mVU->regAlloc->reset(); // Reset regAlloc
|
||||||
mVUstartPC = iPC;
|
mVUinitFirstPass(mVU, pState, thisPtr);
|
||||||
mVUcount = 0;
|
|
||||||
mVUcycles = 0; // Skips "M" phase, and starts counting cycles at "T" stage
|
|
||||||
mVU->p = 0; // All blocks start at p index #0
|
|
||||||
mVU->q = 0; // All blocks start at q index #0
|
|
||||||
memcpy_fast(&mVUregs, (microRegInfo*)pState, sizeof(microRegInfo)); // Loads up Pipeline State Info
|
|
||||||
mVUblock.x86ptrStart = thisPtr;
|
|
||||||
pBlock = mVUblocks[startPC/8]->add(&mVUblock); // Add this block to block manager
|
|
||||||
mVUpBlock = pBlock;
|
|
||||||
mVUregs.flags = 0;
|
|
||||||
mVUflagInfo = 0;
|
|
||||||
mVUsFlagHack = CHECK_VU_FLAGHACK;
|
|
||||||
|
|
||||||
mVUinitConstValues(mVU);
|
|
||||||
|
|
||||||
for (int branch = 0; mVUcount < endCount; mVUcount++) {
|
for (int branch = 0; mVUcount < endCount; mVUcount++) {
|
||||||
incPC(1);
|
incPC(1);
|
||||||
startLoop();
|
startLoop(mVU);
|
||||||
mVUincCycles(mVU, 1);
|
mVUincCycles(mVU, 1);
|
||||||
mVUopU(mVU, 0);
|
mVUopU(mVU, 0);
|
||||||
if (curI & _Ebit_) { branch = 1; mVUup.eBit = 1; }
|
if (curI & _Ebit_) { eBitPass1(mVU, branch); }
|
||||||
if (curI & _DTbit_) { branch = 4; }
|
if (curI & _DTbit_) { branch = 4; }
|
||||||
if (curI & _Mbit_) { mVUup.mBit = 1; }
|
if (curI & _Mbit_) { mVUup.mBit = 1; }
|
||||||
if (curI & _Ibit_) { mVUlow.isNOP = 1; mVUup.iBit = 1; }
|
if (curI & _Ibit_) { mVUlow.isNOP = 1; mVUup.iBit = 1; }
|
||||||
|
@ -421,29 +360,25 @@ microVUr(void*) mVUcompile(microVU* mVU, u32 startPC, uptr pState) {
|
||||||
mVUinfo.writeQ = !mVU->q;
|
mVUinfo.writeQ = !mVU->q;
|
||||||
mVUinfo.readP = mVU->p;
|
mVUinfo.readP = mVU->p;
|
||||||
mVUinfo.writeP = !mVU->p;
|
mVUinfo.writeP = !mVU->p;
|
||||||
if (branch >= 2) { mVUinfo.isEOB = 1; if (branch == 3) { mVUinfo.isBdelay = 1; } mVUcount++; branchWarning(); break; }
|
if (branch >= 2) { mVUinfo.isEOB = 1; if (branch == 3) { mVUinfo.isBdelay = 1; } mVUcount++; branchWarning(mVU); break; }
|
||||||
else if (branch == 1) { branch = 2; }
|
else if (branch == 1) { branch = 2; }
|
||||||
if (mVUbranch) { mVUsetFlagInfo(mVU); branch = 3; mVUbranch = 0; }
|
if (mVUbranch) { mVUsetFlagInfo(mVU); eBitWarning(mVU); branch = 3; mVUbranch = 0; }
|
||||||
incPC(1);
|
incPC(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sets Up Flag instances
|
|
||||||
int xStatus[4], xMac[4], xClip[4];
|
|
||||||
int xCycles = mVUsetFlags(mVU, xStatus, xMac, xClip);
|
|
||||||
mVUtestCycles(mVU);
|
|
||||||
|
|
||||||
// Fix up vi15 const info for propagation through blocks
|
// Fix up vi15 const info for propagation through blocks
|
||||||
mVUregs.vi15 = (mVUconstReg[15].isValid && !CHECK_VU_CONSTHACK) ? ((1<<31) | (mVUconstReg[15].regValue&0xffff)) : 0;
|
mVUregs.vi15 = (mVUconstReg[15].isValid && !CHECK_VU_CONSTHACK) ? ((1<<31) | (mVUconstReg[15].regValue&0xffff)) : 0;
|
||||||
|
|
||||||
// Optimize the End Pipeline State for nicer Block Linking
|
mVUsetFlags(mVU, mFC); // Sets Up Flag instances
|
||||||
mVUoptimizePipeState(mVU);
|
mVUoptimizePipeState(mVU); // Optimize the End Pipeline State for nicer Block Linking
|
||||||
|
mVUtestCycles(mVU); // Update VU Cycles and Exit Early if Necessary
|
||||||
|
|
||||||
// Second Pass
|
// Second Pass
|
||||||
iPC = mVUstartPC;
|
iPC = mVUstartPC;
|
||||||
setCode();
|
setCode();
|
||||||
mVUbranch = 0;
|
mVUbranch = 0;
|
||||||
uint x;
|
u32 x = 0;
|
||||||
for (x = 0; x < endCount; x++) {
|
for (; x < endCount; x++) {
|
||||||
if (mVUinfo.isEOB) { x = 0xffff; }
|
if (mVUinfo.isEOB) { x = 0xffff; }
|
||||||
if (mVUup.mBit) { OR32ItoM((uptr)&mVU->regs->flags, VUFLAG_MFLAGSET); }
|
if (mVUup.mBit) { OR32ItoM((uptr)&mVU->regs->flags, VUFLAG_MFLAGSET); }
|
||||||
if (mVUlow.isNOP) { incPC(1); doUpperOp(); doIbit(mVU); }
|
if (mVUlow.isNOP) { incPC(1); doUpperOp(); doIbit(mVU); }
|
||||||
|
@ -451,111 +386,29 @@ microVUr(void*) mVUcompile(microVU* mVU, u32 startPC, uptr pState) {
|
||||||
else { doSwapOp(mVU); }
|
else { doSwapOp(mVU); }
|
||||||
if (mVUinfo.doXGKICK) { mVU_XGKICK_DELAY(mVU, 1); }
|
if (mVUinfo.doXGKICK) { mVU_XGKICK_DELAY(mVU, 1); }
|
||||||
if (!doRegAlloc) { mVU->regAlloc->flushAll(); }
|
if (!doRegAlloc) { mVU->regAlloc->flushAll(); }
|
||||||
|
if (isEvilBlock) { mVUsetupRange(mVU, xPC, 0); normJumpCompile(mVU, mFC, 1); return thisPtr; }
|
||||||
if (!mVUinfo.isBdelay) { incPC(1); }
|
else if (!mVUinfo.isBdelay) { incPC(1); }
|
||||||
else {
|
else {
|
||||||
microBlock* bBlock = NULL;
|
|
||||||
s32* ajmp = 0;
|
|
||||||
mVUsetupRange(mVU, xPC, 0);
|
mVUsetupRange(mVU, xPC, 0);
|
||||||
mVUdebugNOW(1);
|
mVUdebugNOW(1);
|
||||||
|
incPC(-3); // Go back to branch opcode
|
||||||
switch (mVUbranch) {
|
switch (mVUlow.branch) {
|
||||||
case 3: branchCase(Jcc_Equal); // IBEQ
|
case 1: case 2: normBranch(mVU, mFC); return thisPtr; // B/BAL
|
||||||
case 4: branchCase(Jcc_GreaterOrEqual); // IBGEZ
|
case 9: case 10: normJump (mVU, mFC); return thisPtr; // JR/JALR
|
||||||
case 5: branchCase(Jcc_Greater); // IBGTZ
|
case 3: condBranch(mVU, mFC, Jcc_Equal); return thisPtr; // IBEQ
|
||||||
case 6: branchCase(Jcc_LessOrEqual); // IBLEQ
|
case 4: condBranch(mVU, mFC, Jcc_GreaterOrEqual); return thisPtr; // IBGEZ
|
||||||
case 7: branchCase(Jcc_Less); // IBLTZ
|
case 5: condBranch(mVU, mFC, Jcc_Greater); return thisPtr; // IBGTZ
|
||||||
case 8: branchCase(Jcc_NotEqual); // IBNEQ
|
case 6: condBranch(mVU, mFC, Jcc_LessOrEqual); return thisPtr; // IBLEQ
|
||||||
case 1: case 2: // B/BAL
|
case 7: condBranch(mVU, mFC, Jcc_Less); return thisPtr; // IBLTZ
|
||||||
|
case 8: condBranch(mVU, mFC, Jcc_NotEqual); return thisPtr; // IBNEQ
|
||||||
mVUprint("mVUcompile B/BAL");
|
|
||||||
incPC(-3); // Go back to branch opcode (to get branch imm addr)
|
|
||||||
|
|
||||||
if (mVUup.eBit) { iPC = branchAddr/4; mVUendProgram(mVU, 1, xStatus, xMac, xClip); } // E-bit Branch
|
|
||||||
mVUsetupBranch(mVU, xStatus, xMac, xClip, xCycles);
|
|
||||||
|
|
||||||
// Check if branch-block has already been compiled
|
|
||||||
blockCreate(branchAddr/8);
|
|
||||||
pBlock = mVUblocks[branchAddr/8]->search((microRegInfo*)&mVUregs);
|
|
||||||
if (pBlock) { xJMP(pBlock->x86ptrStart); }
|
|
||||||
else { mVUcompile(mVU, branchAddr, (uptr)&mVUregs); }
|
|
||||||
return thisPtr;
|
|
||||||
case 9: case 10: // JR/JALR
|
|
||||||
|
|
||||||
mVUprint("mVUcompile JR/JALR");
|
|
||||||
incPC(-3); // Go back to jump opcode
|
|
||||||
|
|
||||||
if (mVUlow.constJump.isValid) {
|
|
||||||
if (mVUup.eBit) { // E-bit Jump
|
|
||||||
iPC = (mVUlow.constJump.regValue*2)&(mVU->progSize-1);
|
|
||||||
mVUendProgram(mVU, 1, xStatus, xMac, xClip);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
int jumpAddr = (mVUlow.constJump.regValue*8)&(mVU->microMemSize-8);
|
|
||||||
mVUsetupBranch(mVU, xStatus, xMac, xClip, xCycles);
|
|
||||||
// Check if jump-to-block has already been compiled
|
|
||||||
blockCreate(jumpAddr/8);
|
|
||||||
pBlock = mVUblocks[jumpAddr/8]->search((microRegInfo*)&mVUregs);
|
|
||||||
if (pBlock) { xJMP(pBlock->x86ptrStart); }
|
|
||||||
else { mVUcompile(mVU, jumpAddr, (uptr)&mVUregs); }
|
|
||||||
}
|
|
||||||
return thisPtr;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mVUup.eBit) { // E-bit Jump
|
|
||||||
mVUendProgram(mVU, 2, xStatus, xMac, xClip);
|
|
||||||
MOV32MtoR(gprT1, (uptr)&mVU->branch);
|
|
||||||
MOV32RtoM((uptr)&mVU->regs->VI[REG_TPC].UL, gprT1);
|
|
||||||
xJMP(mVU->exitFunct);
|
|
||||||
return thisPtr;
|
|
||||||
}
|
|
||||||
|
|
||||||
memcpy_fast(&pBlock->pStateEnd, &mVUregs, sizeof(microRegInfo));
|
|
||||||
mVUsetupBranch(mVU, xStatus, xMac, xClip, xCycles);
|
|
||||||
|
|
||||||
mVUbackupRegs(mVU);
|
|
||||||
MOV32MtoR(gprT2, (uptr)&mVU->branch); // Get startPC (ECX first argument for __fastcall)
|
|
||||||
MOV32ItoR(gprR, (u32)&pBlock->pStateEnd); // Get pState (EDX second argument for __fastcall)
|
|
||||||
|
|
||||||
if (!mVU->index) xCALL(mVUcompileJIT<0>); //(u32 startPC, uptr pState)
|
|
||||||
else xCALL(mVUcompileJIT<1>);
|
|
||||||
mVUrestoreRegs(mVU);
|
|
||||||
JMPR(gprT1); // Jump to rec-code address
|
|
||||||
return thisPtr;
|
|
||||||
}
|
|
||||||
// Conditional Branches
|
|
||||||
mVUprint("mVUcompile conditional branch");
|
|
||||||
if (mVUup.eBit) return thisPtr; // Handled in Branch Case
|
|
||||||
if (bBlock) { // Branch non-taken has already been compiled
|
|
||||||
incPC(-3); // Go back to branch opcode (to get branch imm addr)
|
|
||||||
|
|
||||||
// Check if branch-block has already been compiled
|
|
||||||
blockCreate(branchAddr/8);
|
|
||||||
pBlock = mVUblocks[branchAddr/8]->search((microRegInfo*)&mVUregs);
|
|
||||||
if (pBlock) { xJMP( pBlock->x86ptrStart ); }
|
|
||||||
else { mVUblockFetch(mVU, branchAddr, (uptr)&mVUregs); }
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
uptr jumpAddr;
|
|
||||||
u32 bPC = iPC; // mVUcompile can modify iPC and mVUregs so back them up
|
|
||||||
memcpy_fast(&pBlock->pStateEnd, &mVUregs, sizeof(microRegInfo));
|
|
||||||
|
|
||||||
incPC2(1); // Get PC for branch not-taken
|
|
||||||
mVUcompile(mVU, xPC, (uptr)&mVUregs);
|
|
||||||
|
|
||||||
iPC = bPC;
|
|
||||||
incPC(-3); // Go back to branch opcode (to get branch imm addr)
|
|
||||||
jumpAddr = (uptr)mVUblockFetch(mVU, branchAddr, (uptr)&pBlock->pStateEnd);
|
|
||||||
*ajmp = (jumpAddr - ((uptr)ajmp + 4));
|
|
||||||
}
|
|
||||||
return thisPtr;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (x == endCount) { Console::Error("microVU%d: Possible infinite compiling loop!", params mVU->index); }
|
}
|
||||||
|
if ((x == endCount) && (x!=1)) { Console::Error("microVU%d: Possible infinite compiling loop!", params mVU->index); }
|
||||||
|
|
||||||
// E-bit End
|
// E-bit End
|
||||||
mVUsetupRange(mVU, xPC-8, 0);
|
mVUsetupRange(mVU, xPC-8, 0);
|
||||||
mVUendProgram(mVU, 1, xStatus, xMac, xClip);
|
mVUendProgram(mVU, &mFC, 1);
|
||||||
return thisPtr;
|
return thisPtr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -576,4 +429,3 @@ microVUt(void*) mVUblockFetch(microVU* mVU, u32 startPC, uptr pState) {
|
||||||
microVUx(void*) __fastcall mVUcompileJIT(u32 startPC, uptr pState) {
|
microVUx(void*) __fastcall mVUcompileJIT(u32 startPC, uptr pState) {
|
||||||
return mVUblockFetch(mVUx, startPC, pState);
|
return mVUblockFetch(mVUx, startPC, pState);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -77,7 +77,7 @@ int sortFlag(int* fFlag, int* bFlag, int cycles) {
|
||||||
#define sFlagCond ((sFLAG.doFlag && !mVUsFlagHack) || mVUlow.isFSSET || mVUinfo.doDivFlag)
|
#define sFlagCond ((sFLAG.doFlag && !mVUsFlagHack) || mVUlow.isFSSET || mVUinfo.doDivFlag)
|
||||||
|
|
||||||
// Note: Flag handling is 'very' complex, it requires full knowledge of how microVU recs work, so don't touch!
|
// Note: Flag handling is 'very' complex, it requires full knowledge of how microVU recs work, so don't touch!
|
||||||
microVUt(int) mVUsetFlags(mV, int* xStatus, int* xMac, int* xClip) {
|
microVUt(void) mVUsetFlags(mV, microFlagCycles& mFC) {
|
||||||
|
|
||||||
int endPC = iPC;
|
int endPC = iPC;
|
||||||
u32 aCount = 1; // Amount of instructions needed to get valid mac flag instances for block linking
|
u32 aCount = 1; // Amount of instructions needed to get valid mac flag instances for block linking
|
||||||
|
@ -95,31 +95,31 @@ microVUt(int) mVUsetFlags(mV, int* xStatus, int* xMac, int* xClip) {
|
||||||
// Status/Mac Flags Setup Code
|
// Status/Mac Flags Setup Code
|
||||||
int xS = 0, xM = 0, xC = 0;
|
int xS = 0, xM = 0, xC = 0;
|
||||||
for (int i = 0; i < 4; i++) {
|
for (int i = 0; i < 4; i++) {
|
||||||
xStatus[i] = i;
|
mFC.xStatus[i] = i;
|
||||||
xMac [i] = i;
|
mFC.xMac [i] = i;
|
||||||
xClip [i] = i;
|
mFC.xClip [i] = i;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(mVUpBlock->pState.needExactMatch & 0x00f)) {
|
if (!(mVUpBlock->pState.needExactMatch & 1)) {
|
||||||
xS = (mVUpBlock->pState.flags >> 0) & 3;
|
xS = (mVUpBlock->pState.flags >> 0) & 3;
|
||||||
xStatus[0] = -1; xStatus[1] = -1;
|
mFC.xStatus[0] = -1; mFC.xStatus[1] = -1;
|
||||||
xStatus[2] = -1; xStatus[3] = -1;
|
mFC.xStatus[2] = -1; mFC.xStatus[3] = -1;
|
||||||
xStatus[(xS-1)&3] = 0;
|
mFC.xStatus[(xS-1)&3] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(mVUpBlock->pState.needExactMatch & 0xf00)) {
|
if (!(mVUpBlock->pState.needExactMatch & 4)) {
|
||||||
xC = (mVUpBlock->pState.flags >> 2) & 3;
|
xC = (mVUpBlock->pState.flags >> 2) & 3;
|
||||||
xClip[0] = -1; xClip[1] = -1;
|
mFC.xClip[0] = -1; mFC.xClip[1] = -1;
|
||||||
xClip[2] = -1; xClip[3] = -1;
|
mFC.xClip[2] = -1; mFC.xClip[3] = -1;
|
||||||
xClip[(xC-1)&3] = 0;
|
mFC.xClip[(xC-1)&3] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(mVUpBlock->pState.needExactMatch & 0x0f0)) {
|
if (!(mVUpBlock->pState.needExactMatch & 2)) {
|
||||||
xMac[0] = -1; xMac[1] = -1;
|
mFC.xMac[0] = -1; mFC.xMac[1] = -1;
|
||||||
xMac[2] = -1; xMac[3] = -1;
|
mFC.xMac[2] = -1; mFC.xMac[3] = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int cycles = 0;
|
mFC.cycles = 0;
|
||||||
u32 xCount = mVUcount; // Backup count
|
u32 xCount = mVUcount; // Backup count
|
||||||
iPC = mVUstartPC;
|
iPC = mVUstartPC;
|
||||||
for (mVUcount = 0; mVUcount < xCount; mVUcount++) {
|
for (mVUcount = 0; mVUcount < xCount; mVUcount++) {
|
||||||
|
@ -129,11 +129,11 @@ microVUt(int) mVUsetFlags(mV, int* xStatus, int* xMac, int* xClip) {
|
||||||
}
|
}
|
||||||
else mVUstatusFlagOp(mVU);
|
else mVUstatusFlagOp(mVU);
|
||||||
}
|
}
|
||||||
cycles += mVUstall;
|
mFC.cycles += mVUstall;
|
||||||
|
|
||||||
sFLAG.read = findFlagInst(xStatus, cycles);
|
sFLAG.read = findFlagInst(mFC.xStatus, mFC.cycles);
|
||||||
mFLAG.read = findFlagInst(xMac, cycles);
|
mFLAG.read = findFlagInst(mFC.xMac, mFC.cycles);
|
||||||
cFLAG.read = findFlagInst(xClip, cycles);
|
cFLAG.read = findFlagInst(mFC.xClip, mFC.cycles);
|
||||||
|
|
||||||
sFLAG.write = xS;
|
sFLAG.write = xS;
|
||||||
mFLAG.write = xM;
|
mFLAG.write = xM;
|
||||||
|
@ -143,16 +143,16 @@ microVUt(int) mVUsetFlags(mV, int* xStatus, int* xMac, int* xClip) {
|
||||||
mFLAG.lastWrite = (xM-1) & 3;
|
mFLAG.lastWrite = (xM-1) & 3;
|
||||||
cFLAG.lastWrite = (xC-1) & 3;
|
cFLAG.lastWrite = (xC-1) & 3;
|
||||||
|
|
||||||
if (sFlagCond) { xStatus[xS] = cycles + 4; xS = (xS+1) & 3; }
|
if (sFlagCond) { mFC.xStatus[xS] = mFC.cycles + 4; xS = (xS+1) & 3; }
|
||||||
if (mFLAG.doFlag) { xMac [xM] = cycles + 4; xM = (xM+1) & 3; }
|
if (mFLAG.doFlag) { mFC.xMac [xM] = mFC.cycles + 4; xM = (xM+1) & 3; }
|
||||||
if (cFLAG.doFlag) { xClip [xC] = cycles + 4; xC = (xC+1) & 3; }
|
if (cFLAG.doFlag) { mFC.xClip [xC] = mFC.cycles + 4; xC = (xC+1) & 3; }
|
||||||
|
|
||||||
cycles++;
|
mFC.cycles++;
|
||||||
incPC2(2);
|
incPC2(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
mVUregs.flags = ((__Clip) ? 0 : (xC << 2)) | ((__Status) ? 0 : xS);
|
mVUregs.flags = ((__Clip) ? 0 : (xC << 2)) | ((__Status) ? 0 : xS);
|
||||||
return cycles;
|
iPC = endPC;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define getFlagReg1(x) ((x == 3) ? gprF3 : ((x == 2) ? gprF2 : ((x == 1) ? gprF1 : gprF0)))
|
#define getFlagReg1(x) ((x == 3) ? gprF3 : ((x == 2) ? gprF2 : ((x == 1) ? gprF1 : gprF0)))
|
||||||
|
@ -163,11 +163,11 @@ microVUt(int) mVUsetFlags(mV, int* xStatus, int* xMac, int* xClip) {
|
||||||
#define shuffleClip ((bClip[3]<<6)|(bClip[2]<<4)|(bClip[1]<<2)|bClip[0])
|
#define shuffleClip ((bClip[3]<<6)|(bClip[2]<<4)|(bClip[1]<<2)|bClip[0])
|
||||||
|
|
||||||
// Recompiles Code for Proper Flags on Block Linkings
|
// Recompiles Code for Proper Flags on Block Linkings
|
||||||
microVUt(void) mVUsetupFlags(mV, int* xStatus, int* xMac, int* xClip, int cycles) {
|
microVUt(void) mVUsetupFlags(mV, microFlagCycles& mFC) {
|
||||||
|
|
||||||
if (__Status) {
|
if (__Status) {
|
||||||
int bStatus[4];
|
int bStatus[4];
|
||||||
int sortRegs = sortFlag(xStatus, bStatus, cycles);
|
int sortRegs = sortFlag(mFC.xStatus, bStatus, mFC.cycles);
|
||||||
// DevCon::Status("sortRegs = %d", params sortRegs);
|
// DevCon::Status("sortRegs = %d", params sortRegs);
|
||||||
// Note: Emitter will optimize out mov(reg1, reg1) cases...
|
// Note: Emitter will optimize out mov(reg1, reg1) cases...
|
||||||
if (sortRegs == 1) {
|
if (sortRegs == 1) {
|
||||||
|
@ -206,7 +206,7 @@ microVUt(void) mVUsetupFlags(mV, int* xStatus, int* xMac, int* xClip, int cycles
|
||||||
|
|
||||||
if (__Mac) {
|
if (__Mac) {
|
||||||
int bMac[4];
|
int bMac[4];
|
||||||
sortFlag(xMac, bMac, cycles);
|
sortFlag(mFC.xMac, bMac, mFC.cycles);
|
||||||
SSE_MOVAPS_M128_to_XMM(xmmT1, (uptr)mVU->macFlag);
|
SSE_MOVAPS_M128_to_XMM(xmmT1, (uptr)mVU->macFlag);
|
||||||
SSE_SHUFPS_XMM_to_XMM (xmmT1, xmmT1, shuffleMac);
|
SSE_SHUFPS_XMM_to_XMM (xmmT1, xmmT1, shuffleMac);
|
||||||
SSE_MOVAPS_XMM_to_M128((uptr)mVU->macFlag, xmmT1);
|
SSE_MOVAPS_XMM_to_M128((uptr)mVU->macFlag, xmmT1);
|
||||||
|
@ -214,7 +214,7 @@ microVUt(void) mVUsetupFlags(mV, int* xStatus, int* xMac, int* xClip, int cycles
|
||||||
|
|
||||||
if (__Clip) {
|
if (__Clip) {
|
||||||
int bClip[4];
|
int bClip[4];
|
||||||
sortFlag(xClip, bClip, cycles);
|
sortFlag(mFC.xClip, bClip, mFC.cycles);
|
||||||
SSE_MOVAPS_M128_to_XMM(xmmT2, (uptr)mVU->clipFlag);
|
SSE_MOVAPS_M128_to_XMM(xmmT2, (uptr)mVU->clipFlag);
|
||||||
SSE_SHUFPS_XMM_to_XMM (xmmT2, xmmT2, shuffleClip);
|
SSE_SHUFPS_XMM_to_XMM (xmmT2, xmmT2, shuffleClip);
|
||||||
SSE_MOVAPS_XMM_to_M128((uptr)mVU->clipFlag, xmmT2);
|
SSE_MOVAPS_XMM_to_M128((uptr)mVU->clipFlag, xmmT2);
|
||||||
|
@ -248,7 +248,7 @@ void mVUflagPass(mV, u32 startPC, u32 xCount) {
|
||||||
if (mVUbranch) { branch = ((mVUbranch>8)?(5):((mVUbranch<3)?3:4)); aBranchAddr = branchAddr; mVUbranch = 0; }
|
if (mVUbranch) { branch = ((mVUbranch>8)?(5):((mVUbranch<3)?3:4)); aBranchAddr = branchAddr; mVUbranch = 0; }
|
||||||
incPC(1);
|
incPC(1);
|
||||||
}
|
}
|
||||||
if (mVUcount < 4) { mVUflagInfo |= 0xfff; }
|
if (mVUcount < 4) { mVUregs.needExactMatch |= 0x7; }
|
||||||
iPC = oldPC;
|
iPC = oldPC;
|
||||||
mVUcount = oldCount;
|
mVUcount = oldCount;
|
||||||
mVUbranch = oldBranch;
|
mVUbranch = oldBranch;
|
||||||
|
@ -263,18 +263,18 @@ void mVUflagPass(mV, u32 startPC, u32 xCount) {
|
||||||
microVUt(void) mVUsetFlagInfo(mV) {
|
microVUt(void) mVUsetFlagInfo(mV) {
|
||||||
branchType1 { incPC(-1); mVUflagPass(mVU, branchAddr, 4); incPC(1); }
|
branchType1 { incPC(-1); mVUflagPass(mVU, branchAddr, 4); incPC(1); }
|
||||||
branchType2 {
|
branchType2 {
|
||||||
if (!mVUlow.constJump.isValid) { mVUflagInfo |= 0xfff; }
|
if (!mVUlow.constJump.isValid) { mVUregs.needExactMatch |= 0x7; }
|
||||||
else { mVUflagPass(mVU, (mVUlow.constJump.regValue*8)&(mVU->microMemSize-8), 4); }
|
else { mVUflagPass(mVU, (mVUlow.constJump.regValue*8)&(mVU->microMemSize-8), 4); }
|
||||||
}
|
}
|
||||||
branchType3 {
|
branchType3 {
|
||||||
incPC(-1);
|
incPC(-1);
|
||||||
mVUflagPass(mVU, branchAddr, 4);
|
mVUflagPass(mVU, branchAddr, 4);
|
||||||
int backupFlagInfo = mVUflagInfo;
|
int backupFlagInfo = mVUregs.needExactMatch;
|
||||||
mVUflagInfo = 0;
|
mVUregs.needExactMatch = 0;
|
||||||
incPC(4); // Branch Not Taken
|
incPC(4); // Branch Not Taken
|
||||||
mVUflagPass(mVU, xPC, 4);
|
mVUflagPass(mVU, xPC, 4);
|
||||||
incPC(-3);
|
incPC(-3);
|
||||||
mVUflagInfo |= backupFlagInfo;
|
mVUregs.needExactMatch |= backupFlagInfo;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -34,16 +34,18 @@ union regInfo {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
__declspec(align(16)) struct microRegInfo { // Ordered for Faster Compares
|
__declspec(align(16)) struct microRegInfo { // Ordered for Faster Compares
|
||||||
u32 needExactMatch; // If set, block needs an exact match of pipeline state
|
|
||||||
u32 vi15; // Constant Prop Info for vi15 (only valid if sign-bit set)
|
u32 vi15; // Constant Prop Info for vi15 (only valid if sign-bit set)
|
||||||
|
u8 needExactMatch; // If set, block needs an exact match of pipeline state
|
||||||
u8 q;
|
u8 q;
|
||||||
u8 p;
|
u8 p;
|
||||||
u8 r;
|
u8 r;
|
||||||
u8 xgkick;
|
u8 xgkick;
|
||||||
|
u8 viBackUp;
|
||||||
u8 VI[16];
|
u8 VI[16];
|
||||||
regInfo VF[32];
|
regInfo VF[32];
|
||||||
u8 flags; // clip x2 :: status x2
|
u8 flags; // clip x2 :: status x2
|
||||||
u8 padding[3]; // 160 bytes
|
u8 blockType; // 0 = Normal; 1,2 = Compile one instruction (E-bit/Branch Ending)
|
||||||
|
u8 padding[5]; // 160 bytes
|
||||||
#if defined(_MSC_VER)
|
#if defined(_MSC_VER)
|
||||||
};
|
};
|
||||||
#else
|
#else
|
||||||
|
@ -105,6 +107,8 @@ struct microLowerOp {
|
||||||
microVIreg VI_read[2]; // VI regs read by this instruction
|
microVIreg VI_read[2]; // VI regs read by this instruction
|
||||||
microConstInfo constJump; // Constant Reg Info for JR/JARL instructions
|
microConstInfo constJump; // Constant Reg Info for JR/JARL instructions
|
||||||
u32 branch; // Branch Type (0 = Not a Branch, 1 = B. 2 = BAL, 3~8 = Conditional Branches, 9 = JALR, 10 = JR)
|
u32 branch; // Branch Type (0 = Not a Branch, 1 = B. 2 = BAL, 3~8 = Conditional Branches, 9 = JALR, 10 = JR)
|
||||||
|
bool badBranch; // This instruction is a Branch who has another branch in its Delay Slot
|
||||||
|
bool evilBranch;// This instruction is a Branch in a Branch Delay Slot (Instruction after badBranch)
|
||||||
bool isNOP; // This instruction is a NOP
|
bool isNOP; // This instruction is a NOP
|
||||||
bool isFSSET; // This instruction is a FSSET
|
bool isFSSET; // This instruction is a FSSET
|
||||||
bool noWriteVF; // Don't write back the result of a lower op to VF reg if upper op writes to same reg (or if VF = 0)
|
bool noWriteVF; // Don't write back the result of a lower op to VF reg if upper op writes to same reg (or if VF = 0)
|
||||||
|
@ -122,6 +126,13 @@ struct microFlagInst {
|
||||||
u8 read; // Points to the instance that should be read by a lower instruction (t-stage read)
|
u8 read; // Points to the instance that should be read by a lower instruction (t-stage read)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct microFlagCycles {
|
||||||
|
int xStatus[4];
|
||||||
|
int xMac[4];
|
||||||
|
int xClip[4];
|
||||||
|
int cycles;
|
||||||
|
};
|
||||||
|
|
||||||
struct microOp {
|
struct microOp {
|
||||||
u8 stall; // Info on how much current instruction stalled
|
u8 stall; // Info on how much current instruction stalled
|
||||||
bool isEOB; // Cur Instruction is last instruction in block (End of Block)
|
bool isEOB; // Cur Instruction is last instruction in block (End of Block)
|
||||||
|
@ -163,9 +174,10 @@ struct microIR {
|
||||||
void mVUmergeRegs(int dest, int src, int xyzw, bool modXYZW);
|
void mVUmergeRegs(int dest, int src, int xyzw, bool modXYZW);
|
||||||
void mVUsaveReg(int reg, uptr offset, int xyzw, bool modXYZW);
|
void mVUsaveReg(int reg, uptr offset, int xyzw, bool modXYZW);
|
||||||
void mVUloadReg(int reg, uptr offset, int xyzw);
|
void mVUloadReg(int reg, uptr offset, int xyzw);
|
||||||
|
void mVUloadIreg(int reg, int xyzw, VURegs* vuRegs);
|
||||||
|
|
||||||
struct microXMM {
|
struct microXMM {
|
||||||
int reg; // VF Reg Number Stored (-1 = Temp; 0 = vf0 and will not be written back; 32 = ACC)
|
int reg; // VF Reg Number Stored (-1 = Temp; 0 = vf0 and will not be written back; 32 = ACC; 33 = I reg)
|
||||||
int xyzw; // xyzw to write back (0 = Don't write back anything AND cached vfReg has all vectors valid)
|
int xyzw; // xyzw to write back (0 = Don't write back anything AND cached vfReg has all vectors valid)
|
||||||
int count; // Count of when last used
|
int count; // Count of when last used
|
||||||
bool isNeeded; // Is needed for current instruction
|
bool isNeeded; // Is needed for current instruction
|
||||||
|
@ -221,9 +233,15 @@ public:
|
||||||
xmmReg[reg].xyzw = 0;
|
xmmReg[reg].xyzw = 0;
|
||||||
xmmReg[reg].isNeeded = 0;
|
xmmReg[reg].isNeeded = 0;
|
||||||
}
|
}
|
||||||
|
void clearRegVF(int VFreg) {
|
||||||
|
for (int i = 0; i < xmmTotal; i++) {
|
||||||
|
if (xmmReg[i].reg == VFreg) clearReg(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
void writeBackReg(int reg, bool invalidateRegs = 1) {
|
void writeBackReg(int reg, bool invalidateRegs = 1) {
|
||||||
if ((xmmReg[reg].reg > 0) && xmmReg[reg].xyzw) { // Reg was modified and not Temp or vf0
|
if ((xmmReg[reg].reg > 0) && xmmReg[reg].xyzw) { // Reg was modified and not Temp or vf0
|
||||||
if (xmmReg[reg].reg == 32) mVUsaveReg(reg, (uptr)&vuRegs->ACC.UL[0], xmmReg[reg].xyzw, 1);
|
if (xmmReg[reg].reg == 33) SSE_MOVSS_XMM_to_M32((uptr)&vuRegs->VI[REG_I].UL, reg);
|
||||||
|
else if (xmmReg[reg].reg == 32) mVUsaveReg(reg, (uptr)&vuRegs->ACC.UL[0], xmmReg[reg].xyzw, 1);
|
||||||
else mVUsaveReg(reg, (uptr)&vuRegs->VF[xmmReg[reg].reg].UL[0], xmmReg[reg].xyzw, 1);
|
else mVUsaveReg(reg, (uptr)&vuRegs->VF[xmmReg[reg].reg].UL[0], xmmReg[reg].xyzw, 1);
|
||||||
if (invalidateRegs) {
|
if (invalidateRegs) {
|
||||||
for (int i = 0; i < xmmTotal; i++) {
|
for (int i = 0; i < xmmTotal; i++) {
|
||||||
|
@ -307,13 +325,15 @@ public:
|
||||||
|
|
||||||
if (vfWriteReg >= 0) { // Reg Will Be Modified (allow partial reg loading)
|
if (vfWriteReg >= 0) { // Reg Will Be Modified (allow partial reg loading)
|
||||||
if ((vfLoadReg == 0) && !(xyzw & 1)) { SSE2_PXOR_XMM_to_XMM(x, x); }
|
if ((vfLoadReg == 0) && !(xyzw & 1)) { SSE2_PXOR_XMM_to_XMM(x, x); }
|
||||||
|
else if (vfLoadReg == 33) mVUloadIreg(x, xyzw, vuRegs);
|
||||||
else if (vfLoadReg == 32) mVUloadReg (x, (uptr)&vuRegs->ACC.UL[0], xyzw);
|
else if (vfLoadReg == 32) mVUloadReg (x, (uptr)&vuRegs->ACC.UL[0], xyzw);
|
||||||
else if (vfLoadReg >= 0) mVUloadReg (x, (uptr)&vuRegs->VF[vfLoadReg].UL[0], xyzw);
|
else if (vfLoadReg >= 0) mVUloadReg (x, (uptr)&vuRegs->VF[vfLoadReg].UL[0], xyzw);
|
||||||
xmmReg[x].reg = vfWriteReg;
|
xmmReg[x].reg = vfWriteReg;
|
||||||
xmmReg[x].xyzw = xyzw;
|
xmmReg[x].xyzw = xyzw;
|
||||||
}
|
}
|
||||||
else { // Reg Will Not Be Modified (always load full reg for caching)
|
else { // Reg Will Not Be Modified (always load full reg for caching)
|
||||||
if (vfLoadReg == 32) SSE_MOVAPS_M128_to_XMM(x, (uptr)&vuRegs->ACC.UL[0]);
|
if (vfLoadReg == 33) mVUloadIreg(x, 0xf, vuRegs);
|
||||||
|
else if (vfLoadReg == 32) SSE_MOVAPS_M128_to_XMM(x, (uptr)&vuRegs->ACC.UL[0]);
|
||||||
else if (vfLoadReg >= 0) SSE_MOVAPS_M128_to_XMM(x, (uptr)&vuRegs->VF[vfLoadReg].UL[0]);
|
else if (vfLoadReg >= 0) SSE_MOVAPS_M128_to_XMM(x, (uptr)&vuRegs->VF[vfLoadReg].UL[0]);
|
||||||
xmmReg[x].reg = vfLoadReg;
|
xmmReg[x].reg = vfLoadReg;
|
||||||
xmmReg[x].xyzw = 0;
|
xmmReg[x].xyzw = 0;
|
||||||
|
|
|
@ -458,7 +458,7 @@ mVUop(mVU_FCAND) {
|
||||||
mVUallocVIb(mVU, gprT1, 1);
|
mVUallocVIb(mVU, gprT1, 1);
|
||||||
}
|
}
|
||||||
pass3 { mVUlog("FCAND vi01, $%x", _Imm24_); }
|
pass3 { mVUlog("FCAND vi01, $%x", _Imm24_); }
|
||||||
pass4 { mVUflagInfo |= 0xf << 8; }
|
pass4 { mVUregs.needExactMatch |= 4; }
|
||||||
}
|
}
|
||||||
|
|
||||||
mVUop(mVU_FCEQ) {
|
mVUop(mVU_FCEQ) {
|
||||||
|
@ -471,7 +471,7 @@ mVUop(mVU_FCEQ) {
|
||||||
mVUallocVIb(mVU, gprT1, 1);
|
mVUallocVIb(mVU, gprT1, 1);
|
||||||
}
|
}
|
||||||
pass3 { mVUlog("FCEQ vi01, $%x", _Imm24_); }
|
pass3 { mVUlog("FCEQ vi01, $%x", _Imm24_); }
|
||||||
pass4 { mVUflagInfo |= 0xf << 8; }
|
pass4 { mVUregs.needExactMatch |= 4; }
|
||||||
}
|
}
|
||||||
|
|
||||||
mVUop(mVU_FCGET) {
|
mVUop(mVU_FCGET) {
|
||||||
|
@ -482,7 +482,7 @@ mVUop(mVU_FCGET) {
|
||||||
mVUallocVIb(mVU, gprT1, _It_);
|
mVUallocVIb(mVU, gprT1, _It_);
|
||||||
}
|
}
|
||||||
pass3 { mVUlog("FCGET vi%02d", _Ft_); }
|
pass3 { mVUlog("FCGET vi%02d", _Ft_); }
|
||||||
pass4 { mVUflagInfo |= 0xf << 8; }
|
pass4 { mVUregs.needExactMatch |= 4; }
|
||||||
}
|
}
|
||||||
|
|
||||||
mVUop(mVU_FCOR) {
|
mVUop(mVU_FCOR) {
|
||||||
|
@ -495,7 +495,7 @@ mVUop(mVU_FCOR) {
|
||||||
mVUallocVIb(mVU, gprT1, 1);
|
mVUallocVIb(mVU, gprT1, 1);
|
||||||
}
|
}
|
||||||
pass3 { mVUlog("FCOR vi01, $%x", _Imm24_); }
|
pass3 { mVUlog("FCOR vi01, $%x", _Imm24_); }
|
||||||
pass4 { mVUflagInfo |= 0xf << 8; }
|
pass4 { mVUregs.needExactMatch |= 4; }
|
||||||
}
|
}
|
||||||
|
|
||||||
mVUop(mVU_FCSET) {
|
mVUop(mVU_FCSET) {
|
||||||
|
@ -520,7 +520,7 @@ mVUop(mVU_FMAND) {
|
||||||
mVUallocVIb(mVU, gprT1, _It_);
|
mVUallocVIb(mVU, gprT1, _It_);
|
||||||
}
|
}
|
||||||
pass3 { mVUlog("FMAND vi%02d, vi%02d", _Ft_, _Fs_); }
|
pass3 { mVUlog("FMAND vi%02d, vi%02d", _Ft_, _Fs_); }
|
||||||
pass4 { mVUflagInfo |= 0xf << 4; }
|
pass4 { mVUregs.needExactMatch |= 2; }
|
||||||
}
|
}
|
||||||
|
|
||||||
mVUop(mVU_FMEQ) {
|
mVUop(mVU_FMEQ) {
|
||||||
|
@ -534,7 +534,7 @@ mVUop(mVU_FMEQ) {
|
||||||
mVUallocVIb(mVU, gprT1, _It_);
|
mVUallocVIb(mVU, gprT1, _It_);
|
||||||
}
|
}
|
||||||
pass3 { mVUlog("FMEQ vi%02d, vi%02d", _Ft_, _Fs_); }
|
pass3 { mVUlog("FMEQ vi%02d, vi%02d", _Ft_, _Fs_); }
|
||||||
pass4 { mVUflagInfo |= 0xf << 4; }
|
pass4 { mVUregs.needExactMatch |= 2; }
|
||||||
}
|
}
|
||||||
|
|
||||||
mVUop(mVU_FMOR) {
|
mVUop(mVU_FMOR) {
|
||||||
|
@ -546,7 +546,7 @@ mVUop(mVU_FMOR) {
|
||||||
mVUallocVIb(mVU, gprT1, _It_);
|
mVUallocVIb(mVU, gprT1, _It_);
|
||||||
}
|
}
|
||||||
pass3 { mVUlog("FMOR vi%02d, vi%02d", _Ft_, _Fs_); }
|
pass3 { mVUlog("FMOR vi%02d, vi%02d", _Ft_, _Fs_); }
|
||||||
pass4 { mVUflagInfo |= 0xf << 4; }
|
pass4 { mVUregs.needExactMatch |= 2; }
|
||||||
}
|
}
|
||||||
|
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
|
@ -561,7 +561,7 @@ mVUop(mVU_FSAND) {
|
||||||
mVUallocVIb(mVU, gprT1, _It_);
|
mVUallocVIb(mVU, gprT1, _It_);
|
||||||
}
|
}
|
||||||
pass3 { mVUlog("FSAND vi%02d, $%x", _Ft_, _Imm12_); }
|
pass3 { mVUlog("FSAND vi%02d, $%x", _Ft_, _Imm12_); }
|
||||||
pass4 { mVUflagInfo |= 0xf; }
|
pass4 { mVUregs.needExactMatch |= 1; }
|
||||||
}
|
}
|
||||||
|
|
||||||
mVUop(mVU_FSOR) {
|
mVUop(mVU_FSOR) {
|
||||||
|
@ -572,7 +572,7 @@ mVUop(mVU_FSOR) {
|
||||||
mVUallocVIb(mVU, gprT1, _It_);
|
mVUallocVIb(mVU, gprT1, _It_);
|
||||||
}
|
}
|
||||||
pass3 { mVUlog("FSOR vi%02d, $%x", _Ft_, _Imm12_); }
|
pass3 { mVUlog("FSOR vi%02d, $%x", _Ft_, _Imm12_); }
|
||||||
pass4 { mVUflagInfo |= 0xf; }
|
pass4 { mVUregs.needExactMatch |= 1; }
|
||||||
}
|
}
|
||||||
|
|
||||||
mVUop(mVU_FSEQ) {
|
mVUop(mVU_FSEQ) {
|
||||||
|
@ -604,7 +604,7 @@ mVUop(mVU_FSEQ) {
|
||||||
mVUallocVIb(mVU, gprT1, _It_);
|
mVUallocVIb(mVU, gprT1, _It_);
|
||||||
}
|
}
|
||||||
pass3 { mVUlog("FSEQ vi%02d, $%x", _Ft_, _Imm12_); }
|
pass3 { mVUlog("FSEQ vi%02d, $%x", _Ft_, _Imm12_); }
|
||||||
pass4 { mVUflagInfo |= 0xf; }
|
pass4 { mVUregs.needExactMatch |= 1; }
|
||||||
}
|
}
|
||||||
|
|
||||||
mVUop(mVU_FSSET) {
|
mVUop(mVU_FSSET) {
|
||||||
|
@ -1149,109 +1149,166 @@ mVUop(mVU_XGKICK) {
|
||||||
// Branches/Jumps
|
// Branches/Jumps
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
|
|
||||||
#define setBranchA(x, _x_) { \
|
void setBranchA(mP, int x, int _x_) {
|
||||||
pass1 { if (_Imm11_ == 1 && !_x_) { mVUlow.isNOP = 1; return; } mVUbranch = x; } \
|
pass1 {
|
||||||
pass2 { if (_Imm11_ == 1 && !_x_) { return; } mVUbranch = x; } \
|
if (_Imm11_ == 1 && !_x_) { mVUlow.isNOP = 1; return; }
|
||||||
pass3 { mVUbranch = x; } \
|
mVUbranch = x;
|
||||||
pass4 { if (_Imm11_ == 1 && !_x_) { return; } mVUbranch = x; } \
|
mVUlow.branch = x;
|
||||||
|
}
|
||||||
|
pass2 { if (_Imm11_ == 1 && !_x_) { return; } mVUbranch = x; }
|
||||||
|
pass3 { mVUbranch = x; }
|
||||||
|
pass4 { if (_Imm11_ == 1 && !_x_) { return; } mVUbranch = x; }
|
||||||
|
}
|
||||||
|
|
||||||
|
void condEvilBranch(mV, int JMPcc) {
|
||||||
|
using namespace x86Emitter;
|
||||||
|
if (mVUlow.badBranch) {
|
||||||
|
xMOV(ptr32[&mVU->branch], eax);
|
||||||
|
xMOV(ptr32[&mVU->badBranch], branchAddrN);
|
||||||
|
xCMP(ax, 0);
|
||||||
|
xForwardJump8 cJMP((JccComparisonType)JMPcc);
|
||||||
|
incPC(4); // Branch Not Taken
|
||||||
|
xMOV(ptr32[&mVU->badBranch], xPC);
|
||||||
|
incPC(-4);
|
||||||
|
cJMP.SetTarget();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
xMOV(ptr32[&mVU->evilBranch], branchAddr);
|
||||||
|
xCMP(ax, 0);
|
||||||
|
xForwardJump8 cJMP((JccComparisonType)JMPcc);
|
||||||
|
xMOV(eax, ptr32[&mVU->badBranch]); // Branch Not Taken
|
||||||
|
xMOV(ptr32[&mVU->evilBranch], eax);
|
||||||
|
cJMP.SetTarget();
|
||||||
}
|
}
|
||||||
|
|
||||||
mVUop(mVU_B) {
|
mVUop(mVU_B) {
|
||||||
setBranchA(1, 0);
|
setBranchA(mX, 1, 0);
|
||||||
|
pass1 { mVUanalyzeNormBranch(mVU, 0, 0); }
|
||||||
|
pass2 {
|
||||||
|
if (mVUlow.badBranch) { MOV32ItoM((uptr)&mVU->badBranch, branchAddrN); }
|
||||||
|
if (mVUlow.evilBranch) { MOV32ItoM((uptr)&mVU->evilBranch, branchAddr); }
|
||||||
|
}
|
||||||
pass3 { mVUlog("B [<a href=\"#addr%04x\">%04x</a>]", branchAddr, branchAddr); }
|
pass3 { mVUlog("B [<a href=\"#addr%04x\">%04x</a>]", branchAddr, branchAddr); }
|
||||||
}
|
}
|
||||||
|
|
||||||
mVUop(mVU_BAL) {
|
mVUop(mVU_BAL) {
|
||||||
setBranchA(2, _It_);
|
setBranchA(mX, 2, _It_);
|
||||||
pass1 { analyzeVIreg2(_It_, mVUlow.VI_write, 1); setConstReg(_It_, bSaveAddr); }
|
pass1 { mVUanalyzeNormBranch(mVU, _It_, 1); }
|
||||||
pass2 {
|
pass2 {
|
||||||
MOV32ItoR(gprT1, bSaveAddr);
|
MOV32ItoR(gprT1, bSaveAddr);
|
||||||
mVUallocVIb(mVU, gprT1, _It_);
|
mVUallocVIb(mVU, gprT1, _It_);
|
||||||
|
if (mVUlow.badBranch) { MOV32ItoM((uptr)&mVU->badBranch, branchAddrN); }
|
||||||
|
if (mVUlow.evilBranch) { MOV32ItoM((uptr)&mVU->evilBranch, branchAddr); }
|
||||||
}
|
}
|
||||||
pass3 { mVUlog("BAL vi%02d [<a href=\"#addr%04x\">%04x</a>]", _Ft_, branchAddr, branchAddr); }
|
pass3 { mVUlog("BAL vi%02d [<a href=\"#addr%04x\">%04x</a>]", _Ft_, branchAddr, branchAddr); }
|
||||||
}
|
}
|
||||||
|
|
||||||
mVUop(mVU_IBEQ) {
|
mVUop(mVU_IBEQ) {
|
||||||
setBranchA(3, 0);
|
using namespace x86Emitter;
|
||||||
pass1 { mVUanalyzeBranch2(mVU, _Is_, _It_); }
|
setBranchA(mX, 3, 0);
|
||||||
|
pass1 { mVUanalyzeCondBranch2(mVU, _Is_, _It_); }
|
||||||
pass2 {
|
pass2 {
|
||||||
if (mVUlow.memReadIs) MOV32MtoR(gprT1, (uptr)&mVU->VIbackup);
|
if (mVUlow.memReadIs) MOV32MtoR(gprT1, (uptr)&mVU->VIbackup);
|
||||||
else mVUallocVIa(mVU, gprT1, _Is_);
|
else mVUallocVIa(mVU, gprT1, _Is_);
|
||||||
|
|
||||||
if (mVUlow.memReadIt) XOR32MtoR(gprT1, (uptr)&mVU->VIbackup);
|
if (mVUlow.memReadIt) XOR32MtoR(gprT1, (uptr)&mVU->VIbackup);
|
||||||
else { mVUallocVIa(mVU, gprT2, _It_); XOR32RtoR(gprT1, gprT2); }
|
else { mVUallocVIa(mVU, gprT2, _It_); XOR32RtoR(gprT1, gprT2); }
|
||||||
MOV32RtoM((uptr)&mVU->branch, gprT1);
|
|
||||||
|
if (!(isBadOrEvil)) MOV32RtoM((uptr)&mVU->branch, gprT1);
|
||||||
|
else condEvilBranch(mVU, Jcc_Equal);
|
||||||
}
|
}
|
||||||
pass3 { mVUlog("IBEQ vi%02d, vi%02d [<a href=\"#addr%04x\">%04x</a>]", _Ft_, _Fs_, branchAddr, branchAddr); }
|
pass3 { mVUlog("IBEQ vi%02d, vi%02d [<a href=\"#addr%04x\">%04x</a>]", _Ft_, _Fs_, branchAddr, branchAddr); }
|
||||||
}
|
}
|
||||||
|
|
||||||
mVUop(mVU_IBGEZ) {
|
mVUop(mVU_IBGEZ) {
|
||||||
setBranchA(4, 0);
|
using namespace x86Emitter;
|
||||||
pass1 { mVUanalyzeBranch1(mVU, _Is_); }
|
setBranchA(mX, 4, 0);
|
||||||
|
pass1 { mVUanalyzeCondBranch1(mVU, _Is_); }
|
||||||
pass2 {
|
pass2 {
|
||||||
if (mVUlow.memReadIs) MOV32MtoR(gprT1, (uptr)&mVU->VIbackup);
|
if (mVUlow.memReadIs) MOV32MtoR(gprT1, (uptr)&mVU->VIbackup);
|
||||||
else mVUallocVIa(mVU, gprT1, _Is_);
|
else mVUallocVIa(mVU, gprT1, _Is_);
|
||||||
MOV32RtoM((uptr)&mVU->branch, gprT1);
|
if (!(isBadOrEvil)) MOV32RtoM((uptr)&mVU->branch, gprT1);
|
||||||
|
else condEvilBranch(mVU, Jcc_GreaterOrEqual);
|
||||||
}
|
}
|
||||||
pass3 { mVUlog("IBGEZ vi%02d [<a href=\"#addr%04x\">%04x</a>]", _Fs_, branchAddr, branchAddr); }
|
pass3 { mVUlog("IBGEZ vi%02d [<a href=\"#addr%04x\">%04x</a>]", _Fs_, branchAddr, branchAddr); }
|
||||||
}
|
}
|
||||||
|
|
||||||
mVUop(mVU_IBGTZ) {
|
mVUop(mVU_IBGTZ) {
|
||||||
setBranchA(5, 0);
|
using namespace x86Emitter;
|
||||||
pass1 { mVUanalyzeBranch1(mVU, _Is_); }
|
setBranchA(mX, 5, 0);
|
||||||
|
pass1 { mVUanalyzeCondBranch1(mVU, _Is_); }
|
||||||
pass2 {
|
pass2 {
|
||||||
if (mVUlow.memReadIs) MOV32MtoR(gprT1, (uptr)&mVU->VIbackup);
|
if (mVUlow.memReadIs) MOV32MtoR(gprT1, (uptr)&mVU->VIbackup);
|
||||||
else mVUallocVIa(mVU, gprT1, _Is_);
|
else mVUallocVIa(mVU, gprT1, _Is_);
|
||||||
MOV32RtoM((uptr)&mVU->branch, gprT1);
|
if (!(isBadOrEvil)) MOV32RtoM((uptr)&mVU->branch, gprT1);
|
||||||
|
else condEvilBranch(mVU, Jcc_Greater);
|
||||||
}
|
}
|
||||||
pass3 { mVUlog("IBGTZ vi%02d [<a href=\"#addr%04x\">%04x</a>]", _Fs_, branchAddr, branchAddr); }
|
pass3 { mVUlog("IBGTZ vi%02d [<a href=\"#addr%04x\">%04x</a>]", _Fs_, branchAddr, branchAddr); }
|
||||||
}
|
}
|
||||||
|
|
||||||
mVUop(mVU_IBLEZ) {
|
mVUop(mVU_IBLEZ) {
|
||||||
setBranchA(6, 0);
|
using namespace x86Emitter;
|
||||||
pass1 { mVUanalyzeBranch1(mVU, _Is_); }
|
setBranchA(mX, 6, 0);
|
||||||
|
pass1 { mVUanalyzeCondBranch1(mVU, _Is_); }
|
||||||
pass2 {
|
pass2 {
|
||||||
if (mVUlow.memReadIs) MOV32MtoR(gprT1, (uptr)&mVU->VIbackup);
|
if (mVUlow.memReadIs) MOV32MtoR(gprT1, (uptr)&mVU->VIbackup);
|
||||||
else mVUallocVIa(mVU, gprT1, _Is_);
|
else mVUallocVIa(mVU, gprT1, _Is_);
|
||||||
MOV32RtoM((uptr)&mVU->branch, gprT1);
|
if (!(isBadOrEvil)) MOV32RtoM((uptr)&mVU->branch, gprT1);
|
||||||
|
else condEvilBranch(mVU, Jcc_LessOrEqual);
|
||||||
}
|
}
|
||||||
pass3 { mVUlog("IBLEZ vi%02d [<a href=\"#addr%04x\">%04x</a>]", _Fs_, branchAddr, branchAddr); }
|
pass3 { mVUlog("IBLEZ vi%02d [<a href=\"#addr%04x\">%04x</a>]", _Fs_, branchAddr, branchAddr); }
|
||||||
}
|
}
|
||||||
|
|
||||||
mVUop(mVU_IBLTZ) {
|
mVUop(mVU_IBLTZ) {
|
||||||
setBranchA(7, 0);
|
using namespace x86Emitter;
|
||||||
pass1 { mVUanalyzeBranch1(mVU, _Is_); }
|
setBranchA(mX, 7, 0);
|
||||||
|
pass1 { mVUanalyzeCondBranch1(mVU, _Is_); }
|
||||||
pass2 {
|
pass2 {
|
||||||
if (mVUlow.memReadIs) MOV32MtoR(gprT1, (uptr)&mVU->VIbackup);
|
if (mVUlow.memReadIs) MOV32MtoR(gprT1, (uptr)&mVU->VIbackup);
|
||||||
else mVUallocVIa(mVU, gprT1, _Is_);
|
else mVUallocVIa(mVU, gprT1, _Is_);
|
||||||
MOV32RtoM((uptr)&mVU->branch, gprT1);
|
if (!(isBadOrEvil)) MOV32RtoM((uptr)&mVU->branch, gprT1);
|
||||||
|
else condEvilBranch(mVU, Jcc_Less);
|
||||||
}
|
}
|
||||||
pass3 { mVUlog("IBLTZ vi%02d [<a href=\"#addr%04x\">%04x</a>]", _Fs_, branchAddr, branchAddr); }
|
pass3 { mVUlog("IBLTZ vi%02d [<a href=\"#addr%04x\">%04x</a>]", _Fs_, branchAddr, branchAddr); }
|
||||||
}
|
}
|
||||||
|
|
||||||
mVUop(mVU_IBNE) {
|
mVUop(mVU_IBNE) {
|
||||||
setBranchA(8, 0);
|
using namespace x86Emitter;
|
||||||
pass1 { mVUanalyzeBranch2(mVU, _Is_, _It_); }
|
setBranchA(mX, 8, 0);
|
||||||
|
pass1 { mVUanalyzeCondBranch2(mVU, _Is_, _It_); }
|
||||||
pass2 {
|
pass2 {
|
||||||
if (mVUlow.memReadIs) MOV32MtoR(gprT1, (uptr)&mVU->VIbackup);
|
if (mVUlow.memReadIs) MOV32MtoR(gprT1, (uptr)&mVU->VIbackup);
|
||||||
else mVUallocVIa(mVU, gprT1, _Is_);
|
else mVUallocVIa(mVU, gprT1, _Is_);
|
||||||
|
|
||||||
if (mVUlow.memReadIt) XOR32MtoR(gprT1, (uptr)&mVU->VIbackup);
|
if (mVUlow.memReadIt) XOR32MtoR(gprT1, (uptr)&mVU->VIbackup);
|
||||||
else { mVUallocVIa(mVU, gprT2, _It_); XOR32RtoR(gprT1, gprT2); }
|
else { mVUallocVIa(mVU, gprT2, _It_); XOR32RtoR(gprT1, gprT2); }
|
||||||
MOV32RtoM((uptr)&mVU->branch, gprT1);
|
|
||||||
|
if (!(isBadOrEvil)) MOV32RtoM((uptr)&mVU->branch, gprT1);
|
||||||
|
else condEvilBranch(mVU, Jcc_NotEqual);
|
||||||
}
|
}
|
||||||
pass3 { mVUlog("IBNE vi%02d, vi%02d [<a href=\"#addr%04x\">%04x</a>]", _Ft_, _Fs_, branchAddr, branchAddr); }
|
pass3 { mVUlog("IBNE vi%02d, vi%02d [<a href=\"#addr%04x\">%04x</a>]", _Ft_, _Fs_, branchAddr, branchAddr); }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void normJumpPass2(mV) {
|
||||||
|
if (!mVUlow.constJump.isValid || mVUlow.evilBranch) {
|
||||||
|
mVUallocVIa(mVU, gprT1, _Is_);
|
||||||
|
SHL32ItoR(gprT1, 3);
|
||||||
|
AND32ItoR(gprT1, mVU->microMemSize - 8);
|
||||||
|
MOV32RtoM((uptr)&mVU->branch, gprT1);
|
||||||
|
if (!mVUlow.evilBranch) MOV32RtoM((uptr)&mVU->branch, gprT1);
|
||||||
|
else MOV32RtoM((uptr)&mVU->evilBranch, gprT1);
|
||||||
|
if (mVUlow.badBranch) {
|
||||||
|
ADD32ItoR(gprT1, 8);
|
||||||
|
AND32ItoR(gprT1, mVU->microMemSize - 8);
|
||||||
|
MOV32RtoM((uptr)&mVU->badBranch, gprT1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
mVUop(mVU_JR) {
|
mVUop(mVU_JR) {
|
||||||
mVUbranch = 9;
|
mVUbranch = 9;
|
||||||
pass1 { mVUanalyzeJump(mVU, _Is_, 0, 0); }
|
pass1 { mVUanalyzeJump(mVU, _Is_, 0, 0); }
|
||||||
pass2 {
|
pass2 { normJumpPass2(mVU); }
|
||||||
if (!mVUlow.constJump.isValid) {
|
|
||||||
mVUallocVIa(mVU, gprT1, _Is_);
|
|
||||||
SHL32ItoR(gprT1, 3);
|
|
||||||
AND32ItoR(gprT1, mVU->microMemSize - 8);
|
|
||||||
MOV32RtoM((uptr)&mVU->branch, gprT1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
pass3 { mVUlog("JR [vi%02d]", _Fs_); }
|
pass3 { mVUlog("JR [vi%02d]", _Fs_); }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1259,12 +1316,7 @@ mVUop(mVU_JALR) {
|
||||||
mVUbranch = 10;
|
mVUbranch = 10;
|
||||||
pass1 { mVUanalyzeJump(mVU, _Is_, _It_, 1); }
|
pass1 { mVUanalyzeJump(mVU, _Is_, _It_, 1); }
|
||||||
pass2 {
|
pass2 {
|
||||||
if (!mVUlow.constJump.isValid) {
|
normJumpPass2(mVU);
|
||||||
mVUallocVIa(mVU, gprT1, _Is_);
|
|
||||||
SHL32ItoR(gprT1, 3);
|
|
||||||
AND32ItoR(gprT1, mVU->microMemSize - 8);
|
|
||||||
MOV32RtoM((uptr)&mVU->branch, gprT1);
|
|
||||||
}
|
|
||||||
MOV32ItoR(gprT1, bSaveAddr);
|
MOV32ItoR(gprT1, bSaveAddr);
|
||||||
mVUallocVIb(mVU, gprT1, _It_);
|
mVUallocVIb(mVU, gprT1, _It_);
|
||||||
}
|
}
|
||||||
|
|
|
@ -84,6 +84,7 @@ declareAllVariables
|
||||||
#define _XYZW_SS (_X+_Y+_Z+_W==1)
|
#define _XYZW_SS (_X+_Y+_Z+_W==1)
|
||||||
#define _XYZW_SS2 (_XYZW_SS && (_X_Y_Z_W != 8))
|
#define _XYZW_SS2 (_XYZW_SS && (_X_Y_Z_W != 8))
|
||||||
#define _XYZW_PS (_X_Y_Z_W == 0xf)
|
#define _XYZW_PS (_X_Y_Z_W == 0xf)
|
||||||
|
#define _XYZWss(x) ((x==8) || (x==4) || (x==2) || (x==1))
|
||||||
|
|
||||||
#define _bc_ (mVU->code & 0x3)
|
#define _bc_ (mVU->code & 0x3)
|
||||||
#define _bc_x ((mVU->code & 0x3) == 0)
|
#define _bc_x ((mVU->code & 0x3) == 0)
|
||||||
|
@ -204,8 +205,9 @@ typedef u32 (__fastcall *mVUCall)(void*, void*);
|
||||||
#define sFLAG mVUinfo.sFlag
|
#define sFLAG mVUinfo.sFlag
|
||||||
#define mFLAG mVUinfo.mFlag
|
#define mFLAG mVUinfo.mFlag
|
||||||
#define cFLAG mVUinfo.cFlag
|
#define cFLAG mVUinfo.cFlag
|
||||||
#define mVUflagInfo mVUregs.needExactMatch
|
|
||||||
#define mVUrange mVUcurProg.ranges.range[mVUcurProg.ranges.total]
|
#define mVUrange mVUcurProg.ranges.range[mVUcurProg.ranges.total]
|
||||||
|
#define isEvilBlock (mVUpBlock->pState.blockType == 2)
|
||||||
|
#define isBadOrEvil (mVUlow.badBranch || mVUlow.evilBranch)
|
||||||
#define xPC ((iPC / 2) * 8)
|
#define xPC ((iPC / 2) * 8)
|
||||||
#define curI ((u32*)mVU->regs->Micro)[iPC] //mVUcurProg.data[iPC]
|
#define curI ((u32*)mVU->regs->Micro)[iPC] //mVUcurProg.data[iPC]
|
||||||
#define setCode() { mVU->code = curI; }
|
#define setCode() { mVU->code = curI; }
|
||||||
|
@ -213,6 +215,7 @@ typedef u32 (__fastcall *mVUCall)(void*, void*);
|
||||||
#define incPC2(x) { iPC = ((iPC + x) & (mVU->progSize-1)); }
|
#define incPC2(x) { iPC = ((iPC + x) & (mVU->progSize-1)); }
|
||||||
#define bSaveAddr (((xPC + 16) & (mVU->microMemSize-8)) / 8)
|
#define bSaveAddr (((xPC + 16) & (mVU->microMemSize-8)) / 8)
|
||||||
#define branchAddr ((xPC + 8 + (_Imm11_ * 8)) & (mVU->microMemSize-8))
|
#define branchAddr ((xPC + 8 + (_Imm11_ * 8)) & (mVU->microMemSize-8))
|
||||||
|
#define branchAddrN ((xPC + 16 + (_Imm11_ * 8)) & (mVU->microMemSize-8))
|
||||||
#define shufflePQ (((mVU->p) ? 0xb0 : 0xe0) | ((mVU->q) ? 0x01 : 0x04))
|
#define shufflePQ (((mVU->p) ? 0xb0 : 0xe0) | ((mVU->q) ? 0x01 : 0x04))
|
||||||
#define cmpOffset(x) ((u8*)&(((u8*)x)[mVUprogI.ranges.range[i][0]]))
|
#define cmpOffset(x) ((u8*)&(((u8*)x)[mVUprogI.ranges.range[i][0]]))
|
||||||
#define Rmem (uptr)&mVU->regs->VI[REG_R].UL
|
#define Rmem (uptr)&mVU->regs->VI[REG_R].UL
|
||||||
|
@ -221,9 +224,9 @@ typedef u32 (__fastcall *mVUCall)(void*, void*);
|
||||||
#define shuffleSS(x) ((x==1)?(0x27):((x==2)?(0xc6):((x==4)?(0xe1):(0xe4))))
|
#define shuffleSS(x) ((x==1)?(0x27):((x==2)?(0xc6):((x==4)?(0xe1):(0xe4))))
|
||||||
|
|
||||||
// Flag Info
|
// Flag Info
|
||||||
#define __Status (mVUflagInfo & (0xf<<0))
|
#define __Status (mVUregs.needExactMatch & 1)
|
||||||
#define __Mac (mVUflagInfo & (0xf<<4))
|
#define __Mac (mVUregs.needExactMatch & 2)
|
||||||
#define __Clip (mVUflagInfo & (0xf<<8))
|
#define __Clip (mVUregs.needExactMatch & 4)
|
||||||
|
|
||||||
// Pass 3 Helper Macros
|
// Pass 3 Helper Macros
|
||||||
#define _Fsf_String ((_Fsf_ == 3) ? "w" : ((_Fsf_ == 2) ? "z" : ((_Fsf_ == 1) ? "y" : "x")))
|
#define _Fsf_String ((_Fsf_ == 3) ? "w" : ((_Fsf_ == 2) ? "z" : ((_Fsf_ == 1) ? "y" : "x")))
|
||||||
|
|
|
@ -39,8 +39,10 @@ void mVUclamp1(int reg, int regT1, int xyzw) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Used for Operand Clamping
|
// Used for Operand Clamping
|
||||||
void mVUclamp2(int reg, int regT1, int xyzw) {
|
void mVUclamp2(microVU* mVU, int reg, int regT1, int xyzw) {
|
||||||
if (CHECK_VU_SIGN_OVERFLOW && (regT1 >= 0)) {
|
if (CHECK_VU_SIGN_OVERFLOW) {
|
||||||
|
int regT1b = 0;
|
||||||
|
if (regT1 < 0) { regT1 = mVU->regAlloc->allocReg(); regT1b = 1; }
|
||||||
switch (xyzw) {
|
switch (xyzw) {
|
||||||
case 1: case 2: case 4: case 8:
|
case 1: case 2: case 4: case 8:
|
||||||
SSE_MOVSS_XMM_to_XMM (regT1, reg);
|
SSE_MOVSS_XMM_to_XMM (regT1, reg);
|
||||||
|
@ -57,6 +59,7 @@ void mVUclamp2(int reg, int regT1, int xyzw) {
|
||||||
SSE_ORPS_XMM_to_XMM (reg, regT1);
|
SSE_ORPS_XMM_to_XMM (reg, regT1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if (regT1b) mVU->regAlloc->clearNeeded(regT1);
|
||||||
}
|
}
|
||||||
else mVUclamp1(reg, regT1, xyzw);
|
else mVUclamp1(reg, regT1, xyzw);
|
||||||
}
|
}
|
||||||
|
@ -94,6 +97,11 @@ void mVUloadReg2(int reg, int gprReg, uptr offset, int xyzw) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void mVUloadIreg(int reg, int xyzw, VURegs* vuRegs) {
|
||||||
|
SSE_MOVSS_M32_to_XMM(reg, (uptr)&vuRegs->VI[REG_I].UL);
|
||||||
|
if (!_XYZWss(xyzw)) SSE_SHUFPS_XMM_to_XMM(reg, reg, 0);
|
||||||
|
}
|
||||||
|
|
||||||
// Modifies the Source Reg!
|
// Modifies the Source Reg!
|
||||||
void mVUsaveReg(int reg, uptr offset, int xyzw, bool modXYZW) {
|
void mVUsaveReg(int reg, uptr offset, int xyzw, bool modXYZW) {
|
||||||
/*SSE_MOVAPS_M128_to_XMM(xmmT2, offset);
|
/*SSE_MOVAPS_M128_to_XMM(xmmT2, offset);
|
||||||
|
@ -350,7 +358,7 @@ void MIN_MAX_PS(microVU* mVU, int to, int from, int t1, int t2, bool min) {
|
||||||
if (t2b) mVU->regAlloc->clearNeeded(t2);
|
if (t2b) mVU->regAlloc->clearNeeded(t2);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Warning: Modifies from's upper 3 vectors, and t1
|
// Warning: Modifies to's upper 3 vectors, and t1
|
||||||
void MIN_MAX_SS(mV, int to, int from, int t1, bool min) {
|
void MIN_MAX_SS(mV, int to, int from, int t1, bool min) {
|
||||||
bool t1b = 0;
|
bool t1b = 0;
|
||||||
if (t1 < 0) { t1 = mVU->regAlloc->allocReg(); t1b = 1; }
|
if (t1 < 0) { t1 = mVU->regAlloc->allocReg(); t1b = 1; }
|
||||||
|
|
|
@ -131,7 +131,7 @@ void setupFtReg(microVU* mVU, int& Ft, int& tempFt, int opCase) {
|
||||||
mVU->regAlloc->clearNeeded(tempFt);
|
mVU->regAlloc->clearNeeded(tempFt);
|
||||||
tempFt = Ft;
|
tempFt = Ft;
|
||||||
}
|
}
|
||||||
opCase3 { Ft = mVU->regAlloc->allocReg(); tempFt = Ft; getIreg(mVU, Ft, 1); }
|
opCase3 { Ft = mVU->regAlloc->allocReg(33, 0, _X_Y_Z_W); tempFt = Ft; }
|
||||||
opCase4 {
|
opCase4 {
|
||||||
if (_XYZW_SS && !mVUinfo.readQ) { Ft = xmmPQ; tempFt = -1; }
|
if (_XYZW_SS && !mVUinfo.readQ) { Ft = xmmPQ; tempFt = -1; }
|
||||||
else { Ft = mVU->regAlloc->allocReg(); tempFt = Ft; getQreg(Ft, mVUinfo.readQ); }
|
else { Ft = mVU->regAlloc->allocReg(); tempFt = Ft; getQreg(Ft, mVUinfo.readQ); }
|
||||||
|
@ -152,9 +152,9 @@ void mVU_FMACa(microVU* mVU, int recPass, int opCase, int opType, bool isACC, co
|
||||||
}
|
}
|
||||||
else { Fs = mVU->regAlloc->allocReg(_Fs_, _Fd_, _X_Y_Z_W); }
|
else { Fs = mVU->regAlloc->allocReg(_Fs_, _Fd_, _X_Y_Z_W); }
|
||||||
|
|
||||||
opCase1 { if((opType == 2) && _XYZW_PS) { mVUclamp1(Ft, -1, _X_Y_Z_W); } } // Clamp Needed for Ice Age 3 (VU0)
|
opCase1 { if((opType == 2) && _XYZW_PS) { mVUclamp2(mVU, Ft, -1, _X_Y_Z_W); } } // Clamp Needed for Ice Age 3 (VU0)
|
||||||
opCase1 { if((opType == 2) && _XYZW_PS) { mVUclamp1(Fs, -1, _X_Y_Z_W); } } // Clamp Needed for Ice Age 3 (VU0)
|
opCase1 { if((opType == 2) && _XYZW_PS) { mVUclamp2(mVU, Fs, -1, _X_Y_Z_W); } } // Clamp Needed for Ice Age 3 (VU0)
|
||||||
opCase2 { if (opType == 2) { mVUclamp1(Fs, -1, _X_Y_Z_W); } } // Clamp Needed for alot of games (TOTA, DoM, etc...)
|
opCase2 { if (opType == 2) { mVUclamp2(mVU, Fs, -1, _X_Y_Z_W); } } // Clamp Needed for alot of games (TOTA, DoM, etc...)
|
||||||
|
|
||||||
if (_XYZW_SS) SSE_SS[opType](mVU, Fs, Ft, -1, -1);
|
if (_XYZW_SS) SSE_SS[opType](mVU, Fs, Ft, -1, -1);
|
||||||
else SSE_PS[opType](mVU, Fs, Ft, -1, -1);
|
else SSE_PS[opType](mVU, Fs, Ft, -1, -1);
|
||||||
|
@ -185,7 +185,7 @@ void mVU_FMACb(microVU* mVU, int recPass, int opCase, int opType, const char* op
|
||||||
ACC = mVU->regAlloc->allocReg(32, 32, 0xf, 0);
|
ACC = mVU->regAlloc->allocReg(32, 32, 0xf, 0);
|
||||||
|
|
||||||
if (_XYZW_SS2) { SSE2_PSHUFD_XMM_to_XMM(ACC, ACC, shuffleSS(_X_Y_Z_W)); }
|
if (_XYZW_SS2) { SSE2_PSHUFD_XMM_to_XMM(ACC, ACC, shuffleSS(_X_Y_Z_W)); }
|
||||||
opCase2 { mVUclamp1(Fs, -1, _X_Y_Z_W); } // Clamp Needed for alot of games (TOTA, DoM, etc...)
|
opCase2 { mVUclamp2(mVU, Fs, -1, _X_Y_Z_W); } // Clamp Needed for alot of games (TOTA, DoM, etc...)
|
||||||
|
|
||||||
if (_XYZW_SS) SSE_SS[2](mVU, Fs, Ft, -1, -1);
|
if (_XYZW_SS) SSE_SS[2](mVU, Fs, Ft, -1, -1);
|
||||||
else SSE_PS[2](mVU, Fs, Ft, -1, -1);
|
else SSE_PS[2](mVU, Fs, Ft, -1, -1);
|
||||||
|
@ -223,7 +223,7 @@ void mVU_FMACc(microVU* mVU, int recPass, int opCase, const char* opName) {
|
||||||
Fs = mVU->regAlloc->allocReg(_Fs_, _Fd_, _X_Y_Z_W);
|
Fs = mVU->regAlloc->allocReg(_Fs_, _Fd_, _X_Y_Z_W);
|
||||||
|
|
||||||
if (_XYZW_SS2) { SSE2_PSHUFD_XMM_to_XMM(ACC, ACC, shuffleSS(_X_Y_Z_W)); }
|
if (_XYZW_SS2) { SSE2_PSHUFD_XMM_to_XMM(ACC, ACC, shuffleSS(_X_Y_Z_W)); }
|
||||||
opCase2 { mVUclamp1(Fs, -1, _X_Y_Z_W); } // Clamp Needed for alot of games (TOTA, DoM, etc...)
|
opCase2 { mVUclamp2(mVU, Fs, -1, _X_Y_Z_W); } // Clamp Needed for alot of games (TOTA, DoM, etc...)
|
||||||
|
|
||||||
if (_XYZW_SS) { SSE_SS[2](mVU, Fs, Ft, -1, -1); SSE_SS[0](mVU, Fs, ACC, tempFt, -1); }
|
if (_XYZW_SS) { SSE_SS[2](mVU, Fs, Ft, -1, -1); SSE_SS[0](mVU, Fs, ACC, tempFt, -1); }
|
||||||
else { SSE_PS[2](mVU, Fs, Ft, -1, -1); SSE_PS[0](mVU, Fs, ACC, tempFt, -1); }
|
else { SSE_PS[2](mVU, Fs, Ft, -1, -1); SSE_PS[0](mVU, Fs, ACC, tempFt, -1); }
|
||||||
|
|
|
@ -0,0 +1,113 @@
|
||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 11.00
|
||||||
|
# Visual Studio 10
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pcsx2", "pcsx2\windows\VCprojects\pcsx2.vcxproj", "{1CEFD830-2B76-4596-A4EE-BCD7280A60BD}"
|
||||||
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
{26511268-2902-4997-8421-ECD7055F9E28} = {26511268-2902-4997-8421-ECD7055F9E28}
|
||||||
|
{2F6C0388-20CB-4242-9F6C-A6EBB6A83F47} = {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}
|
||||||
|
EndProjectSection
|
||||||
|
EndProject
|
||||||
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "3rdparty", "3rdparty", "{A306AA7F-A984-407A-A37D-3275979368C4}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlib", "3rdparty\zlib\zlib.vcxproj", "{2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "w32pthreads", "3rdparty\w32pthreads\pthreads.vcxproj", "{26511268-2902-4997-8421-ECD7055F9E28}"
|
||||||
|
EndProject
|
||||||
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "plugins", "plugins", "{10757E7A-E2B8-4FD3-9194-71331BF36D13}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CDVDolio", "plugins\CDVDolio\cdvd.vcxproj", "{FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GSdx", "plugins\GSdx\GSdx.vcxproj", "{18E42F6F-3A62-41EE-B42F-79366C4F1E95}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xpad", "plugins\xpad\xpad.vcxproj", "{6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}"
|
||||||
|
EndProject
|
||||||
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Common", "Common", "{06C9589C-DFD3-4CE8-B69A-32208C2767B2}"
|
||||||
|
ProjectSection(SolutionItems) = preProject
|
||||||
|
common\include\afxresmw.h = common\include\afxresmw.h
|
||||||
|
common\include\Pcsx2Api.h = common\include\Pcsx2Api.h
|
||||||
|
common\include\Pcsx2Config.h = common\include\Pcsx2Config.h
|
||||||
|
common\include\Pcsx2Defs.h = common\include\Pcsx2Defs.h
|
||||||
|
common\include\Pcsx2Types.h = common\include\Pcsx2Types.h
|
||||||
|
EndProjectSection
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Win32 = Debug|Win32
|
||||||
|
Devel|Win32 = Devel|Win32
|
||||||
|
Release SSE2|Win32 = Release SSE2|Win32
|
||||||
|
Release SSE4|Win32 = Release SSE4|Win32
|
||||||
|
Release SSSE3|Win32 = Release SSSE3|Win32
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Devel|Win32.ActiveCfg = Devel|Win32
|
||||||
|
{1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Devel|Win32.Build.0 = Devel|Win32
|
||||||
|
{1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release SSE2|Win32.ActiveCfg = Release|Win32
|
||||||
|
{1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release SSE2|Win32.Build.0 = Release|Win32
|
||||||
|
{1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release SSE4|Win32.ActiveCfg = Release|Win32
|
||||||
|
{1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release SSE4|Win32.Build.0 = Release|Win32
|
||||||
|
{1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release SSSE3|Win32.ActiveCfg = Release|Win32
|
||||||
|
{1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release SSSE3|Win32.Build.0 = Release|Win32
|
||||||
|
{2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Devel|Win32.ActiveCfg = Devel|Win32
|
||||||
|
{2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Devel|Win32.Build.0 = Devel|Win32
|
||||||
|
{2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release SSE2|Win32.ActiveCfg = Release|Win32
|
||||||
|
{2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release SSE2|Win32.Build.0 = Release|Win32
|
||||||
|
{2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release SSE4|Win32.ActiveCfg = Release|Win32
|
||||||
|
{2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release SSE4|Win32.Build.0 = Release|Win32
|
||||||
|
{2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release SSSE3|Win32.ActiveCfg = Release|Win32
|
||||||
|
{2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release SSSE3|Win32.Build.0 = Release|Win32
|
||||||
|
{26511268-2902-4997-8421-ECD7055F9E28}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{26511268-2902-4997-8421-ECD7055F9E28}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{26511268-2902-4997-8421-ECD7055F9E28}.Devel|Win32.ActiveCfg = Devel|Win32
|
||||||
|
{26511268-2902-4997-8421-ECD7055F9E28}.Devel|Win32.Build.0 = Devel|Win32
|
||||||
|
{26511268-2902-4997-8421-ECD7055F9E28}.Release SSE2|Win32.ActiveCfg = Release|Win32
|
||||||
|
{26511268-2902-4997-8421-ECD7055F9E28}.Release SSE2|Win32.Build.0 = Release|Win32
|
||||||
|
{26511268-2902-4997-8421-ECD7055F9E28}.Release SSE4|Win32.ActiveCfg = Release|Win32
|
||||||
|
{26511268-2902-4997-8421-ECD7055F9E28}.Release SSE4|Win32.Build.0 = Release|Win32
|
||||||
|
{26511268-2902-4997-8421-ECD7055F9E28}.Release SSSE3|Win32.ActiveCfg = Release|Win32
|
||||||
|
{26511268-2902-4997-8421-ECD7055F9E28}.Release SSSE3|Win32.Build.0 = Release|Win32
|
||||||
|
{FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Devel|Win32.ActiveCfg = Release|Win32
|
||||||
|
{FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Devel|Win32.Build.0 = Release|Win32
|
||||||
|
{FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Release SSE2|Win32.ActiveCfg = Release|Win32
|
||||||
|
{FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Release SSE2|Win32.Build.0 = Release|Win32
|
||||||
|
{FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Release SSE4|Win32.ActiveCfg = Release|Win32
|
||||||
|
{FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Release SSE4|Win32.Build.0 = Release|Win32
|
||||||
|
{FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Release SSSE3|Win32.ActiveCfg = Release|Win32
|
||||||
|
{FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Release SSSE3|Win32.Build.0 = Release|Win32
|
||||||
|
{18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug|Win32.ActiveCfg = Debug SSE2|Win32
|
||||||
|
{18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug|Win32.Build.0 = Debug SSE2|Win32
|
||||||
|
{18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Devel|Win32.ActiveCfg = Release SSE2|Win32
|
||||||
|
{18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Devel|Win32.Build.0 = Release SSE2|Win32
|
||||||
|
{18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSE2|Win32.ActiveCfg = Release SSE2|Win32
|
||||||
|
{18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSE2|Win32.Build.0 = Release SSE2|Win32
|
||||||
|
{18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSE4|Win32.ActiveCfg = Release SSE4|Win32
|
||||||
|
{18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSE4|Win32.Build.0 = Release SSE4|Win32
|
||||||
|
{18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSSE3|Win32.ActiveCfg = Release SSSE3|Win32
|
||||||
|
{18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSSE3|Win32.Build.0 = Release SSSE3|Win32
|
||||||
|
{6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Devel|Win32.ActiveCfg = Release|Win32
|
||||||
|
{6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Devel|Win32.Build.0 = Release|Win32
|
||||||
|
{6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release SSE2|Win32.ActiveCfg = Release|Win32
|
||||||
|
{6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release SSE2|Win32.Build.0 = Release|Win32
|
||||||
|
{6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release SSE4|Win32.ActiveCfg = Release|Win32
|
||||||
|
{6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release SSE4|Win32.Build.0 = Release|Win32
|
||||||
|
{6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release SSSE3|Win32.ActiveCfg = Release|Win32
|
||||||
|
{6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release SSSE3|Win32.Build.0 = Release|Win32
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(NestedProjects) = preSolution
|
||||||
|
{2F6C0388-20CB-4242-9F6C-A6EBB6A83F47} = {A306AA7F-A984-407A-A37D-3275979368C4}
|
||||||
|
{26511268-2902-4997-8421-ECD7055F9E28} = {A306AA7F-A984-407A-A37D-3275979368C4}
|
||||||
|
{FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB} = {10757E7A-E2B8-4FD3-9194-71331BF36D13}
|
||||||
|
{18E42F6F-3A62-41EE-B42F-79366C4F1E95} = {10757E7A-E2B8-4FD3-9194-71331BF36D13}
|
||||||
|
{6F3C4136-5801-4EBC-AC6E-37DF6FAB150A} = {10757E7A-E2B8-4FD3-9194-71331BF36D13}
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
|
@ -0,0 +1,13 @@
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ImportGroup Label="PropertySheets" />
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<_PropertySheetDisplayName>cdvd</_PropertySheetDisplayName>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup>
|
||||||
|
<PreBuildEvent>
|
||||||
|
<Command>"$(SolutionDir)common\vsprops\preBuild.cmd" "$(ProjectDir)."</Command>
|
||||||
|
</PreBuildEvent>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup />
|
||||||
|
</Project>
|
|
@ -0,0 +1,104 @@
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="4.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="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectName>CDVDolio</ProjectName>
|
||||||
|
<ProjectGUID>{FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}</ProjectGUID>
|
||||||
|
<RootNamespace>cdvd</RootNamespace>
|
||||||
|
<Keyword>Win32Proj</Keyword>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<UseOfMfc>false</UseOfMfc>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<UseOfMfc>false</UseOfMfc>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets">
|
||||||
|
<Import Project="$(LocalAppData)\Microsoft\VisualStudio\10.0\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(LocalAppData)\Microsoft\VisualStudio\10.0\Microsoft.Cpp.$(Platform).user.props')" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<Import Project="..\..\common\vsprops\plugin.props" />
|
||||||
|
<Import Project="..\..\common\vsprops\common.props" />
|
||||||
|
<Import Project="..\..\common\vsprops\debug.props" />
|
||||||
|
<Import Project="cdvd.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<Import Project="..\..\common\vsprops\plugin.props" />
|
||||||
|
<Import Project="..\..\common\vsprops\common.props" />
|
||||||
|
<Import Project="..\..\common\vsprops\release.props" />
|
||||||
|
<Import Project="cdvd.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<_ProjectFileVersion>10.0.20506.1</_ProjectFileVersion>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<ModuleDefinitionFile>.\cdvd.def</ModuleDefinitionFile>
|
||||||
|
<DelayLoadDLLs>%(DelayLoadDLLs)</DelayLoadDLLs>
|
||||||
|
<DataExecutionPrevention>
|
||||||
|
</DataExecutionPrevention>
|
||||||
|
<TargetMachine>MachineX86</TargetMachine>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<ModuleDefinitionFile>.\cdvd.def</ModuleDefinitionFile>
|
||||||
|
<DelayLoadDLLs>%(DelayLoadDLLs)</DelayLoadDLLs>
|
||||||
|
<DataExecutionPrevention>
|
||||||
|
</DataExecutionPrevention>
|
||||||
|
<TargetMachine>MachineX86</TargetMachine>
|
||||||
|
</Link>
|
||||||
|
<PreBuildEvent />
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="cdvd.cpp" />
|
||||||
|
<ClCompile Include="CDVDDialog.cpp" />
|
||||||
|
<ClCompile Include="SettingsDlg.cpp" />
|
||||||
|
<ClCompile Include="stdafx.cpp">
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ResourceCompile Include="cdvd.rc" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="cdvd.def" />
|
||||||
|
<None Include="res\cdvd.rc2" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="cdvd.h" />
|
||||||
|
<ClInclude Include="CDVDDialog.h" />
|
||||||
|
<ClInclude Include="resource.h" />
|
||||||
|
<ClInclude Include="SettingsDlg.h" />
|
||||||
|
<ClInclude Include="stdafx.h" />
|
||||||
|
<ClInclude Include="svnrev.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
|
@ -1,582 +0,0 @@
|
||||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<ItemGroup Label="ProjectConfigurations">
|
|
||||||
<ProjectConfiguration Include="Debug SSE2|Win32">
|
|
||||||
<Configuration>Debug SSE2</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Debug SSE2|Win32">
|
|
||||||
<Configuration>Debug SSE2</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Debug SSE2|x64">
|
|
||||||
<Configuration>Debug SSE2</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Debug SSE2|x64">
|
|
||||||
<Configuration>Debug SSE2</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Debug SSE4|Win32">
|
|
||||||
<Configuration>Debug SSE4</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Debug SSE4|Win32">
|
|
||||||
<Configuration>Debug SSE4</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Debug SSE4|x64">
|
|
||||||
<Configuration>Debug SSE4</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Debug SSE4|x64">
|
|
||||||
<Configuration>Debug SSE4</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Debug SSSE3|Win32">
|
|
||||||
<Configuration>Debug SSSE3</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Debug SSSE3|Win32">
|
|
||||||
<Configuration>Debug SSSE3</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Debug SSSE3|x64">
|
|
||||||
<Configuration>Debug SSSE3</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Debug SSSE3|x64">
|
|
||||||
<Configuration>Debug SSSE3</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Debug|Win32">
|
|
||||||
<Configuration>Debug</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Debug|Win32">
|
|
||||||
<Configuration>Debug</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Debug|x64">
|
|
||||||
<Configuration>Debug</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Debug|x64">
|
|
||||||
<Configuration>Debug</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release SSE2|Win32">
|
|
||||||
<Configuration>Release SSE2</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release SSE2|Win32">
|
|
||||||
<Configuration>Release SSE2</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release SSE2|x64">
|
|
||||||
<Configuration>Release SSE2</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release SSE2|x64">
|
|
||||||
<Configuration>Release SSE2</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release SSE4|Win32">
|
|
||||||
<Configuration>Release SSE4</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release SSE4|Win32">
|
|
||||||
<Configuration>Release SSE4</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release SSE4|x64">
|
|
||||||
<Configuration>Release SSE4</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release SSE4|x64">
|
|
||||||
<Configuration>Release SSE4</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release SSSE3|Win32">
|
|
||||||
<Configuration>Release SSSE3</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release SSSE3|Win32">
|
|
||||||
<Configuration>Release SSSE3</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release SSSE3|x64">
|
|
||||||
<Configuration>Release SSSE3</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release SSSE3|x64">
|
|
||||||
<Configuration>Release SSSE3</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release|Win32">
|
|
||||||
<Configuration>Release</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release|Win32">
|
|
||||||
<Configuration>Release</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release|x64">
|
|
||||||
<Configuration>Release</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release|x64">
|
|
||||||
<Configuration>Release</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
</ItemGroup>
|
|
||||||
<PropertyGroup Label="Globals">
|
|
||||||
<ProjectName>CDVDolio</ProjectName>
|
|
||||||
<ProjectGUID>{FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}</ProjectGUID>
|
|
||||||
<RootNamespace>cdvd</RootNamespace>
|
|
||||||
<Keyword>Win32Proj</Keyword>
|
|
||||||
</PropertyGroup>
|
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<UseOfMfc>false</UseOfMfc>
|
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<UseOfMfc>false</UseOfMfc>
|
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|X64'">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<UseOfMfc>Static</UseOfMfc>
|
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|X64'">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<UseOfMfc>Static</UseOfMfc>
|
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug SSE2|Win32'">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<UseOfMfc>false</UseOfMfc>
|
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug SSE2|X64'">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<UseOfMfc>Static</UseOfMfc>
|
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
|
||||||
<WholeProgramOptimization>false</WholeProgramOptimization>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release SSE2|Win32'">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<UseOfMfc>false</UseOfMfc>
|
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release SSE2|X64'">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<UseOfMfc>Static</UseOfMfc>
|
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release SSSE3|Win32'">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<UseOfMfc>false</UseOfMfc>
|
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release SSSE3|X64'">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<UseOfMfc>Static</UseOfMfc>
|
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug SSSE3|Win32'">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<UseOfMfc>false</UseOfMfc>
|
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug SSSE3|X64'">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<UseOfMfc>Static</UseOfMfc>
|
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug SSE4|Win32'">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<UseOfMfc>false</UseOfMfc>
|
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug SSE4|X64'">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<UseOfMfc>Static</UseOfMfc>
|
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release SSE4|Win32'">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<UseOfMfc>false</UseOfMfc>
|
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release SSE4|X64'">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<UseOfMfc>Static</UseOfMfc>
|
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
</PropertyGroup>
|
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
|
||||||
<ImportGroup Label="ExtensionSettings">
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Label="PropertySheets">
|
|
||||||
<Import Project="$(LocalAppData)\Microsoft\VisualStudio\10.0\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(LocalAppData)\Microsoft\VisualStudio\10.0\Microsoft.Cpp.$(Platform).user.props')" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
|
||||||
<Import Project="vsprops\common.props" Condition="exists('.\vsprops\common.props')" />
|
|
||||||
<Import Project="vsprops\ProjectRootDir.props" Condition="exists('.\vsprops\ProjectRootDir.props')" />
|
|
||||||
<Import Project="..\..\common\vsprops\BaseProperties.props" Condition="exists('..\..\common\vsprops\BaseProperties.props')" />
|
|
||||||
<Import Project="vsprops\debug.props" Condition="exists('.\vsprops\debug.props')" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|X64'">
|
|
||||||
<Import Project="vsprops\common.props" Condition="exists('.\vsprops\common.props')" />
|
|
||||||
<Import Project="vsprops\ProjectRootDir.props" Condition="exists('.\vsprops\ProjectRootDir.props')" />
|
|
||||||
<Import Project="..\..\common\vsprops\BaseProperties.props" Condition="exists('..\..\common\vsprops\BaseProperties.props')" />
|
|
||||||
<Import Project="vsprops\debug.props" Condition="exists('.\vsprops\debug.props')" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
|
||||||
<Import Project="vsprops\common.props" Condition="exists('.\vsprops\common.props')" />
|
|
||||||
<Import Project="vsprops\ProjectRootDir.props" Condition="exists('.\vsprops\ProjectRootDir.props')" />
|
|
||||||
<Import Project="..\..\common\vsprops\BaseProperties.props" Condition="exists('..\..\common\vsprops\BaseProperties.props')" />
|
|
||||||
<Import Project="vsprops\release.props" Condition="exists('.\vsprops\release.props')" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|X64'">
|
|
||||||
<Import Project="vsprops\common.props" Condition="exists('.\vsprops\common.props')" />
|
|
||||||
<Import Project="vsprops\ProjectRootDir.props" Condition="exists('.\vsprops\ProjectRootDir.props')" />
|
|
||||||
<Import Project="..\..\common\vsprops\BaseProperties.props" Condition="exists('..\..\common\vsprops\BaseProperties.props')" />
|
|
||||||
<Import Project="vsprops\release.props" Condition="exists('.\vsprops\release.props')" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug SSE2|Win32'">
|
|
||||||
<Import Project="vsprops\common.props" Condition="exists('.\vsprops\common.props')" />
|
|
||||||
<Import Project="vsprops\ProjectRootDir.props" Condition="exists('.\vsprops\ProjectRootDir.props')" />
|
|
||||||
<Import Project="..\..\common\vsprops\BaseProperties.props" Condition="exists('..\..\common\vsprops\BaseProperties.props')" />
|
|
||||||
<Import Project="vsprops\debug.props" Condition="exists('.\vsprops\debug.props')" />
|
|
||||||
<Import Project="vsprops\sse2.props" Condition="exists('.\vsprops\sse2.props')" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug SSE2|X64'">
|
|
||||||
<Import Project="vsprops\common.props" Condition="exists('.\vsprops\common.props')" />
|
|
||||||
<Import Project="vsprops\ProjectRootDir.props" Condition="exists('.\vsprops\ProjectRootDir.props')" />
|
|
||||||
<Import Project="..\..\common\vsprops\BaseProperties.props" Condition="exists('..\..\common\vsprops\BaseProperties.props')" />
|
|
||||||
<Import Project="vsprops\debug.props" Condition="exists('.\vsprops\debug.props')" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release SSE2|Win32'">
|
|
||||||
<Import Project="vsprops\common.props" Condition="exists('.\vsprops\common.props')" />
|
|
||||||
<Import Project="vsprops\ProjectRootDir.props" Condition="exists('.\vsprops\ProjectRootDir.props')" />
|
|
||||||
<Import Project="..\..\common\vsprops\BaseProperties.props" Condition="exists('..\..\common\vsprops\BaseProperties.props')" />
|
|
||||||
<Import Project="vsprops\release.props" Condition="exists('.\vsprops\release.props')" />
|
|
||||||
<Import Project="vsprops\sse2.props" Condition="exists('.\vsprops\sse2.props')" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release SSE2|X64'">
|
|
||||||
<Import Project="vsprops\common.props" Condition="exists('.\vsprops\common.props')" />
|
|
||||||
<Import Project="vsprops\ProjectRootDir.props" Condition="exists('.\vsprops\ProjectRootDir.props')" />
|
|
||||||
<Import Project="..\..\common\vsprops\BaseProperties.props" Condition="exists('..\..\common\vsprops\BaseProperties.props')" />
|
|
||||||
<Import Project="vsprops\release.props" Condition="exists('.\vsprops\release.props')" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release SSSE3|Win32'">
|
|
||||||
<Import Project="vsprops\common.props" Condition="exists('.\vsprops\common.props')" />
|
|
||||||
<Import Project="vsprops\ProjectRootDir.props" Condition="exists('.\vsprops\ProjectRootDir.props')" />
|
|
||||||
<Import Project="..\..\common\vsprops\BaseProperties.props" Condition="exists('..\..\common\vsprops\BaseProperties.props')" />
|
|
||||||
<Import Project="vsprops\release.props" Condition="exists('.\vsprops\release.props')" />
|
|
||||||
<Import Project="vsprops\sse2.props" Condition="exists('.\vsprops\sse2.props')" />
|
|
||||||
<Import Project="vsprops\ssse3.props" Condition="exists('.\vsprops\ssse3.props')" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release SSSE3|X64'">
|
|
||||||
<Import Project="vsprops\common.props" Condition="exists('.\vsprops\common.props')" />
|
|
||||||
<Import Project="vsprops\ProjectRootDir.props" Condition="exists('.\vsprops\ProjectRootDir.props')" />
|
|
||||||
<Import Project="..\..\common\vsprops\BaseProperties.props" Condition="exists('..\..\common\vsprops\BaseProperties.props')" />
|
|
||||||
<Import Project="vsprops\release.props" Condition="exists('.\vsprops\release.props')" />
|
|
||||||
<Import Project="vsprops\ssse3.props" Condition="exists('.\vsprops\ssse3.props')" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug SSSE3|Win32'">
|
|
||||||
<Import Project="vsprops\common.props" Condition="exists('.\vsprops\common.props')" />
|
|
||||||
<Import Project="vsprops\ProjectRootDir.props" Condition="exists('.\vsprops\ProjectRootDir.props')" />
|
|
||||||
<Import Project="..\..\common\vsprops\BaseProperties.props" Condition="exists('..\..\common\vsprops\BaseProperties.props')" />
|
|
||||||
<Import Project="vsprops\debug.props" Condition="exists('.\vsprops\debug.props')" />
|
|
||||||
<Import Project="vsprops\sse2.props" Condition="exists('.\vsprops\sse2.props')" />
|
|
||||||
<Import Project="vsprops\ssse3.props" Condition="exists('.\vsprops\ssse3.props')" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug SSSE3|X64'">
|
|
||||||
<Import Project="vsprops\common.props" Condition="exists('.\vsprops\common.props')" />
|
|
||||||
<Import Project="vsprops\ProjectRootDir.props" Condition="exists('.\vsprops\ProjectRootDir.props')" />
|
|
||||||
<Import Project="..\..\common\vsprops\BaseProperties.props" Condition="exists('..\..\common\vsprops\BaseProperties.props')" />
|
|
||||||
<Import Project="vsprops\debug.props" Condition="exists('.\vsprops\debug.props')" />
|
|
||||||
<Import Project="vsprops\ssse3.props" Condition="exists('.\vsprops\ssse3.props')" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug SSE4|Win32'">
|
|
||||||
<Import Project="vsprops\common.props" Condition="exists('.\vsprops\common.props')" />
|
|
||||||
<Import Project="vsprops\ProjectRootDir.props" Condition="exists('.\vsprops\ProjectRootDir.props')" />
|
|
||||||
<Import Project="..\..\common\vsprops\BaseProperties.props" Condition="exists('..\..\common\vsprops\BaseProperties.props')" />
|
|
||||||
<Import Project="vsprops\debug.props" Condition="exists('.\vsprops\debug.props')" />
|
|
||||||
<Import Project="vsprops\sse2.props" Condition="exists('.\vsprops\sse2.props')" />
|
|
||||||
<Import Project="vsprops\sse4.props" Condition="exists('.\vsprops\sse4.props')" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug SSE4|X64'">
|
|
||||||
<Import Project="vsprops\common.props" Condition="exists('.\vsprops\common.props')" />
|
|
||||||
<Import Project="vsprops\ProjectRootDir.props" Condition="exists('.\vsprops\ProjectRootDir.props')" />
|
|
||||||
<Import Project="..\..\common\vsprops\BaseProperties.props" Condition="exists('..\..\common\vsprops\BaseProperties.props')" />
|
|
||||||
<Import Project="vsprops\debug.props" Condition="exists('.\vsprops\debug.props')" />
|
|
||||||
<Import Project="vsprops\sse4.props" Condition="exists('.\vsprops\sse4.props')" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release SSE4|Win32'">
|
|
||||||
<Import Project="vsprops\common.props" Condition="exists('.\vsprops\common.props')" />
|
|
||||||
<Import Project="vsprops\ProjectRootDir.props" Condition="exists('.\vsprops\ProjectRootDir.props')" />
|
|
||||||
<Import Project="..\..\common\vsprops\BaseProperties.props" Condition="exists('..\..\common\vsprops\BaseProperties.props')" />
|
|
||||||
<Import Project="vsprops\release.props" Condition="exists('.\vsprops\release.props')" />
|
|
||||||
<Import Project="vsprops\sse2.props" Condition="exists('.\vsprops\sse2.props')" />
|
|
||||||
<Import Project="vsprops\sse4.props" Condition="exists('.\vsprops\sse4.props')" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release SSE4|X64'">
|
|
||||||
<Import Project="vsprops\common.props" Condition="exists('.\vsprops\common.props')" />
|
|
||||||
<Import Project="vsprops\ProjectRootDir.props" Condition="exists('.\vsprops\ProjectRootDir.props')" />
|
|
||||||
<Import Project="..\..\common\vsprops\BaseProperties.props" Condition="exists('..\..\common\vsprops\BaseProperties.props')" />
|
|
||||||
<Import Project="vsprops\release.props" Condition="exists('.\vsprops\release.props')" />
|
|
||||||
<Import Project="vsprops\sse4.props" Condition="exists('.\vsprops\sse4.props')" />
|
|
||||||
</ImportGroup>
|
|
||||||
<PropertyGroup Label="UserMacros" />
|
|
||||||
<PropertyGroup>
|
|
||||||
<_ProjectFileVersion>10.0.20506.1</_ProjectFileVersion>
|
|
||||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug SSE4|Win32'">$(Configuration)\</IntDir>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
|
||||||
<ClCompile>
|
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<ModuleDefinitionFile>.\cdvd.def</ModuleDefinitionFile>
|
|
||||||
<DelayLoadDLLs>%(DelayLoadDLLs)</DelayLoadDLLs>
|
|
||||||
<DataExecutionPrevention>
|
|
||||||
</DataExecutionPrevention>
|
|
||||||
<TargetMachine>MachineX86</TargetMachine>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|X64'">
|
|
||||||
<Midl>
|
|
||||||
<TargetEnvironment>X64</TargetEnvironment>
|
|
||||||
</Midl>
|
|
||||||
<ClCompile>
|
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<ModuleDefinitionFile>
|
|
||||||
</ModuleDefinitionFile>
|
|
||||||
<DataExecutionPrevention>
|
|
||||||
</DataExecutionPrevention>
|
|
||||||
<TargetMachine>MachineX64</TargetMachine>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
|
||||||
<ClCompile>
|
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<ModuleDefinitionFile>.\cdvd.def</ModuleDefinitionFile>
|
|
||||||
<DelayLoadDLLs>%(DelayLoadDLLs)</DelayLoadDLLs>
|
|
||||||
<DataExecutionPrevention>
|
|
||||||
</DataExecutionPrevention>
|
|
||||||
<TargetMachine>MachineX86</TargetMachine>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|X64'">
|
|
||||||
<Midl>
|
|
||||||
<TargetEnvironment>X64</TargetEnvironment>
|
|
||||||
</Midl>
|
|
||||||
<ClCompile>
|
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<ModuleDefinitionFile>
|
|
||||||
</ModuleDefinitionFile>
|
|
||||||
<DataExecutionPrevention>
|
|
||||||
</DataExecutionPrevention>
|
|
||||||
<TargetMachine>MachineX64</TargetMachine>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug SSE2|Win32'">
|
|
||||||
<ClCompile>
|
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<ModuleDefinitionFile>.\cdvd.def</ModuleDefinitionFile>
|
|
||||||
<DelayLoadDLLs>%(DelayLoadDLLs)</DelayLoadDLLs>
|
|
||||||
<DataExecutionPrevention>
|
|
||||||
</DataExecutionPrevention>
|
|
||||||
<TargetMachine>MachineX86</TargetMachine>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug SSE2|X64'">
|
|
||||||
<ClCompile>
|
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<DataExecutionPrevention>
|
|
||||||
</DataExecutionPrevention>
|
|
||||||
<TargetMachine>MachineX64</TargetMachine>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release SSE2|Win32'">
|
|
||||||
<ClCompile>
|
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<ModuleDefinitionFile>.\cdvd.def</ModuleDefinitionFile>
|
|
||||||
<DelayLoadDLLs>%(DelayLoadDLLs)</DelayLoadDLLs>
|
|
||||||
<DataExecutionPrevention>
|
|
||||||
</DataExecutionPrevention>
|
|
||||||
<TargetMachine>MachineX86</TargetMachine>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release SSE2|X64'">
|
|
||||||
<ClCompile>
|
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<DataExecutionPrevention>
|
|
||||||
</DataExecutionPrevention>
|
|
||||||
<TargetMachine>MachineX64</TargetMachine>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release SSSE3|Win32'">
|
|
||||||
<ClCompile>
|
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<ModuleDefinitionFile>.\cdvd.def</ModuleDefinitionFile>
|
|
||||||
<DelayLoadDLLs>%(DelayLoadDLLs)</DelayLoadDLLs>
|
|
||||||
<DataExecutionPrevention>
|
|
||||||
</DataExecutionPrevention>
|
|
||||||
<TargetMachine>MachineX86</TargetMachine>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release SSSE3|X64'">
|
|
||||||
<ClCompile>
|
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<DataExecutionPrevention>
|
|
||||||
</DataExecutionPrevention>
|
|
||||||
<TargetMachine>MachineX64</TargetMachine>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug SSSE3|Win32'">
|
|
||||||
<ClCompile>
|
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<ModuleDefinitionFile>.\cdvd.def</ModuleDefinitionFile>
|
|
||||||
<DelayLoadDLLs>%(DelayLoadDLLs)</DelayLoadDLLs>
|
|
||||||
<DataExecutionPrevention>
|
|
||||||
</DataExecutionPrevention>
|
|
||||||
<TargetMachine>MachineX86</TargetMachine>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug SSSE3|X64'">
|
|
||||||
<ClCompile>
|
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<DataExecutionPrevention>
|
|
||||||
</DataExecutionPrevention>
|
|
||||||
<TargetMachine>MachineX64</TargetMachine>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug SSE4|Win32'">
|
|
||||||
<ClCompile>
|
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<ModuleDefinitionFile>.\cdvd.def</ModuleDefinitionFile>
|
|
||||||
<DelayLoadDLLs>%(DelayLoadDLLs)</DelayLoadDLLs>
|
|
||||||
<DataExecutionPrevention>
|
|
||||||
</DataExecutionPrevention>
|
|
||||||
<TargetMachine>MachineX86</TargetMachine>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug SSE4|X64'">
|
|
||||||
<Midl>
|
|
||||||
<TargetEnvironment>X64</TargetEnvironment>
|
|
||||||
</Midl>
|
|
||||||
<ClCompile>
|
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<DataExecutionPrevention>
|
|
||||||
</DataExecutionPrevention>
|
|
||||||
<TargetMachine>MachineX64</TargetMachine>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release SSE4|Win32'">
|
|
||||||
<ClCompile>
|
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<ModuleDefinitionFile>.\cdvd.def</ModuleDefinitionFile>
|
|
||||||
<DelayLoadDLLs>%(DelayLoadDLLs)</DelayLoadDLLs>
|
|
||||||
<DataExecutionPrevention>
|
|
||||||
</DataExecutionPrevention>
|
|
||||||
<TargetMachine>MachineX86</TargetMachine>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release SSE4|X64'">
|
|
||||||
<Midl>
|
|
||||||
<TargetEnvironment>X64</TargetEnvironment>
|
|
||||||
</Midl>
|
|
||||||
<ClCompile>
|
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<DataExecutionPrevention>
|
|
||||||
</DataExecutionPrevention>
|
|
||||||
<TargetMachine>MachineX64</TargetMachine>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ClCompile Include="cdvd.cpp" />
|
|
||||||
<ClCompile Include="CDVDDialog.cpp" />
|
|
||||||
<ClCompile Include="SettingsDlg.cpp" />
|
|
||||||
<ClCompile Include="stdafx.cpp">
|
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|X64'">Create</PrecompiledHeader>
|
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
|
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|X64'">Create</PrecompiledHeader>
|
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug SSE2|Win32'">Create</PrecompiledHeader>
|
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug SSE2|X64'">Create</PrecompiledHeader>
|
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release SSE2|Win32'">Create</PrecompiledHeader>
|
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release SSE2|X64'">Create</PrecompiledHeader>
|
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release SSSE3|Win32'">Create</PrecompiledHeader>
|
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release SSSE3|X64'">Create</PrecompiledHeader>
|
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug SSSE3|Win32'">Create</PrecompiledHeader>
|
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug SSSE3|X64'">Create</PrecompiledHeader>
|
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug SSE4|Win32'">Create</PrecompiledHeader>
|
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug SSE4|X64'">Create</PrecompiledHeader>
|
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release SSE4|Win32'">Create</PrecompiledHeader>
|
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release SSE4|X64'">Create</PrecompiledHeader>
|
|
||||||
</ClCompile>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ResourceCompile Include="cdvd.rc" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<None Include="cdvd.def" />
|
|
||||||
<None Include="res\cdvd.rc2" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ClInclude Include="cdvd.h" />
|
|
||||||
<ClInclude Include="CDVDDialog.h" />
|
|
||||||
<ClInclude Include="resource.h" />
|
|
||||||
<ClInclude Include="SettingsDlg.h" />
|
|
||||||
<ClInclude Include="stdafx.h" />
|
|
||||||
<ClInclude Include="svnrev.h" />
|
|
||||||
</ItemGroup>
|
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
|
||||||
<ImportGroup Label="ExtensionTargets">
|
|
||||||
</ImportGroup>
|
|
||||||
</Project>
|
|
|
@ -1,6 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<PropertyGroup>
|
|
||||||
<Globals_RESOURCE_FILE>cdvd.rc</Globals_RESOURCE_FILE>
|
|
||||||
</PropertyGroup>
|
|
||||||
</Project>
|
|
|
@ -1,25 +0,0 @@
|
||||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<PropertyGroup Label="UserMacros">
|
|
||||||
<ProjectRootDir>$(ProjectDir).</ProjectRootDir>
|
|
||||||
<SvnRootDir>$(ProjectRootDir)\..\..</SvnRootDir>
|
|
||||||
<SvnCommonDir>$(SvnRootDir)\common</SvnCommonDir>
|
|
||||||
<PcsxSubsection>plugins</PcsxSubsection>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup>
|
|
||||||
<_PropertySheetDisplayName>ProjectRootDir</_PropertySheetDisplayName>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<BuildMacro Include="ProjectRootDir">
|
|
||||||
<Value>$(ProjectRootDir)</Value>
|
|
||||||
</BuildMacro>
|
|
||||||
<BuildMacro Include="SvnRootDir">
|
|
||||||
<Value>$(SvnRootDir)</Value>
|
|
||||||
</BuildMacro>
|
|
||||||
<BuildMacro Include="SvnCommonDir">
|
|
||||||
<Value>$(SvnCommonDir)</Value>
|
|
||||||
</BuildMacro>
|
|
||||||
<BuildMacro Include="PcsxSubsection">
|
|
||||||
<Value>$(PcsxSubsection)</Value>
|
|
||||||
</BuildMacro>
|
|
||||||
</ItemGroup>
|
|
||||||
</Project>
|
|
|
@ -1,27 +0,0 @@
|
||||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<PropertyGroup>
|
|
||||||
<_PropertySheetDisplayName>common</_PropertySheetDisplayName>
|
|
||||||
<OutDir>..\..\bin\plugins\</OutDir>
|
|
||||||
<IntDir>$(PlatformName)\$(Configuration)\</IntDir>
|
|
||||||
<TargetName>$(ProjectName)</TargetName>
|
|
||||||
<TargetExt>.dll</TargetExt>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemDefinitionGroup>
|
|
||||||
<ClCompile>
|
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
|
||||||
<PreprocessorDefinitions>WIN32;_WINDOWS;_WIN32_WINNT=0x500;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<FloatingPointModel>Fast</FloatingPointModel>
|
|
||||||
<RuntimeTypeInfo>false</RuntimeTypeInfo>
|
|
||||||
<WarningLevel>Level4</WarningLevel>
|
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
|
||||||
<DisableSpecificWarnings>4995;4324;%(DisableSpecificWarnings)</DisableSpecificWarnings>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<AdditionalDependencies>d3d10.lib;d3dx10.lib;d3d9.lib;d3dx9.lib;ddraw.lib;dxguid.lib;winmm.lib;strmiids.lib;xinput.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
|
||||||
<DelayLoadDLLs>d3d9.dll;d3dx9_40.dll;d3d10.dll;d3dx10_40.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
|
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
|
||||||
<SubSystem>Windows</SubSystem>
|
|
||||||
<RandomizedBaseAddress>false</RandomizedBaseAddress>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
</Project>
|
|
|
@ -1,15 +0,0 @@
|
||||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<PropertyGroup>
|
|
||||||
<_PropertySheetDisplayName>debug</_PropertySheetDisplayName>
|
|
||||||
<LinkIncremental>true</LinkIncremental>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemDefinitionGroup>
|
|
||||||
<ClCompile>
|
|
||||||
<Optimization>Disabled</Optimization>
|
|
||||||
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<MinimalRebuild>true</MinimalRebuild>
|
|
||||||
<BasicRuntimeChecks>StackFrameRuntimeCheck</BasicRuntimeChecks>
|
|
||||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
|
||||||
</ClCompile>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
</Project>
|
|
|
@ -1,11 +0,0 @@
|
||||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<PropertyGroup>
|
|
||||||
<_PropertySheetDisplayName>sse3</_PropertySheetDisplayName>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemDefinitionGroup>
|
|
||||||
<ClCompile>
|
|
||||||
<EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
|
|
||||||
<PreprocessorDefinitions>_M_SSE=0x301;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
</ClCompile>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
</Project>
|
|
|
@ -289,6 +289,18 @@ EXPORT_C GSirqCallback(void (*irq)())
|
||||||
s_irq = irq;
|
s_irq = irq;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EXPORT_C_(int) GSsetupRecording(int start, void* data)
|
||||||
|
{
|
||||||
|
GSKeyEventData e;
|
||||||
|
|
||||||
|
e.type = KEYPRESS;
|
||||||
|
e.key = VK_F12;
|
||||||
|
|
||||||
|
s_gs->KeyEvent(&e, start & 1);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
EXPORT_C GSsetGameCRC(uint32 crc, int options)
|
EXPORT_C GSsetGameCRC(uint32 crc, int options)
|
||||||
{
|
{
|
||||||
s_gs->SetGameCRC(crc, options);
|
s_gs->SetGameCRC(crc, options);
|
||||||
|
|
|
@ -375,7 +375,7 @@ void GSRenderer::VSync(int field)
|
||||||
|
|
||||||
if(offscreen->Map(m))
|
if(offscreen->Map(m))
|
||||||
{
|
{
|
||||||
m_capture.DeliverFrame(m.bits, m.pitch, m_dev->IsRBSwapped());
|
m_capture.DeliverFrame(m.bits, m.pitch, !m_dev->IsRBSwapped());
|
||||||
|
|
||||||
offscreen->Unmap();
|
offscreen->Unmap();
|
||||||
}
|
}
|
||||||
|
@ -403,7 +403,7 @@ bool GSRenderer::MakeSnapshot(const string& path)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GSRenderer::KeyEvent(GSKeyEventData* e)
|
void GSRenderer::KeyEvent(GSKeyEventData* e, int param)
|
||||||
{
|
{
|
||||||
if(e->type == KEYPRESS)
|
if(e->type == KEYPRESS)
|
||||||
{
|
{
|
||||||
|
@ -423,8 +423,8 @@ void GSRenderer::KeyEvent(GSKeyEventData* e)
|
||||||
m_shader = (m_shader + 3 + step) % 3;
|
m_shader = (m_shader + 3 + step) % 3;
|
||||||
return;
|
return;
|
||||||
case VK_F12:
|
case VK_F12:
|
||||||
if(m_capture.IsCapturing()) m_capture.EndCapture();
|
if(param) m_capture.BeginCapture(GetFPS());
|
||||||
else m_capture.BeginCapture(GetFPS());
|
else m_capture.EndCapture();
|
||||||
return;
|
return;
|
||||||
case VK_DELETE:
|
case VK_DELETE:
|
||||||
m_aa1 = !m_aa1;
|
m_aa1 = !m_aa1;
|
||||||
|
|
|
@ -76,8 +76,7 @@ public:
|
||||||
virtual bool Create(const string& title, int w, int h);
|
virtual bool Create(const string& title, int w, int h);
|
||||||
virtual void VSync(int field);
|
virtual void VSync(int field);
|
||||||
virtual bool MakeSnapshot(const string& path);
|
virtual bool MakeSnapshot(const string& path);
|
||||||
virtual void KeyEvent(GSKeyEventData* e);
|
virtual void KeyEvent(GSKeyEventData* e, int param = 0);
|
||||||
|
|
||||||
virtual bool CanUpscale()
|
virtual bool CanUpscale()
|
||||||
{
|
{
|
||||||
return !m_nativeres && m_regs->PMODE.EN != 0; // upscale ratio depends on the display size, with no output it may not be set correctly (ps2 logo to game transition)
|
return !m_nativeres && m_regs->PMODE.EN != 0; // upscale ratio depends on the display size, with no output it may not be set correctly (ps2 logo to game transition)
|
||||||
|
|
|
@ -31,6 +31,8 @@ class GSRendererDX : public GSRendererHW<Vertex>
|
||||||
GSVector2 m_pixelcenter;
|
GSVector2 m_pixelcenter;
|
||||||
bool m_logz;
|
bool m_logz;
|
||||||
bool m_fba;
|
bool m_fba;
|
||||||
|
int m_pixoff_x;
|
||||||
|
int m_pixoff_y;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
int m_topology;
|
int m_topology;
|
||||||
|
@ -47,6 +49,8 @@ public:
|
||||||
{
|
{
|
||||||
m_logz = !!theApp.GetConfig("logz", 0);
|
m_logz = !!theApp.GetConfig("logz", 0);
|
||||||
m_fba = !!theApp.GetConfig("fba", 1);
|
m_fba = !!theApp.GetConfig("fba", 1);
|
||||||
|
m_pixoff_x = theApp.GetConfig("pixoff_x", 0);
|
||||||
|
m_pixoff_y = theApp.GetConfig("pixoff_y", 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual ~GSRendererDX()
|
virtual ~GSRendererDX()
|
||||||
|
@ -90,22 +94,24 @@ public:
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
om_dssel.ztst = ZTST_ALWAYS;
|
om_dssel.ztst = ZTST_ALWAYS;
|
||||||
om_dssel.zwe = 0;
|
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
om_dssel.zte = context->TEST.ZTE;
|
if(context->FRAME.PSM != PSM_PSMCT24)
|
||||||
om_dssel.ztst = context->TEST.ZTST;
|
{
|
||||||
om_dssel.zwe = !context->ZBUF.ZMSK;
|
om_dssel.date = context->TEST.DATE;
|
||||||
*/
|
}
|
||||||
om_dssel.date = context->FRAME.PSM != PSM_PSMCT24 ? context->TEST.DATE : 0;
|
|
||||||
om_dssel.fba = m_fba ? context->FBA.FBA : 0;
|
if(m_fba)
|
||||||
|
{
|
||||||
|
om_dssel.fba = context->FBA.FBA;
|
||||||
|
}
|
||||||
|
|
||||||
GSTextureFX::OMBlendSelector om_bsel;
|
GSTextureFX::OMBlendSelector om_bsel;
|
||||||
|
|
||||||
om_bsel.abe = !IsOpaque();
|
if(!IsOpaque())
|
||||||
|
|
||||||
if(om_bsel.abe)
|
|
||||||
{
|
{
|
||||||
|
om_bsel.abe = PRIM->ABE || PRIM->AA1 && m_vt.m_primclass == GS_LINE_CLASS;
|
||||||
|
|
||||||
om_bsel.a = context->ALPHA.A;
|
om_bsel.a = context->ALPHA.A;
|
||||||
om_bsel.b = context->ALPHA.B;
|
om_bsel.b = context->ALPHA.B;
|
||||||
om_bsel.c = context->ALPHA.C;
|
om_bsel.c = context->ALPHA.C;
|
||||||
|
@ -165,8 +171,8 @@ public:
|
||||||
|
|
||||||
float sx = 2.0f * rt->GetScale().x / (rt->GetWidth() << 4);
|
float sx = 2.0f * rt->GetScale().x / (rt->GetWidth() << 4);
|
||||||
float sy = 2.0f * rt->GetScale().y / (rt->GetHeight() << 4);
|
float sy = 2.0f * rt->GetScale().y / (rt->GetHeight() << 4);
|
||||||
float ox = (float)(int)context->XYOFFSET.OFX;
|
float ox = (float)(int)context->XYOFFSET.OFX + m_pixoff_x;
|
||||||
float oy = (float)(int)context->XYOFFSET.OFY;
|
float oy = (float)(int)context->XYOFFSET.OFY + m_pixoff_y;
|
||||||
float ox2 = 2.0f * m_pixelcenter.x / rt->GetWidth();
|
float ox2 = 2.0f * m_pixelcenter.x / rt->GetWidth();
|
||||||
float oy2 = 2.0f * m_pixelcenter.y / rt->GetHeight();
|
float oy2 = 2.0f * m_pixelcenter.y / rt->GetHeight();
|
||||||
|
|
||||||
|
|
|
@ -392,9 +392,9 @@ void GSRendererSW::GetScanlineParam(GSScanlineParam& p, GS_PRIM_CLASS primclass)
|
||||||
p.sel.pabe = 1;
|
p.sel.pabe = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(PRIM->AA1 && (primclass == GS_LINE_CLASS || primclass == GS_TRIANGLE_CLASS))
|
if(m_aa1 && PRIM->AA1 && (primclass == GS_LINE_CLASS || primclass == GS_TRIANGLE_CLASS))
|
||||||
{
|
{
|
||||||
p.sel.aa1 = m_aa1 ? 1 : 0;
|
p.sel.aa1 = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -100,12 +100,55 @@ bool GSUtil::HasCompatibleBits(uint32 spsm, uint32 dpsm)
|
||||||
|
|
||||||
bool GSUtil::CheckDirectX()
|
bool GSUtil::CheckDirectX()
|
||||||
{
|
{
|
||||||
if(HINSTANCE hDll = LoadLibrary(format("d3dx9_%d.dll", D3DX_SDK_VERSION).c_str()))
|
OSVERSIONINFOEX version;
|
||||||
|
memset(&version, 0, sizeof(version));
|
||||||
|
version.dwOSVersionInfoSize = sizeof(version);
|
||||||
|
|
||||||
|
if(GetVersionEx((OSVERSIONINFO*)&version))
|
||||||
|
{
|
||||||
|
printf("Windows %d.%d.%d",
|
||||||
|
version.dwMajorVersion,
|
||||||
|
version.dwMinorVersion,
|
||||||
|
version.dwBuildNumber);
|
||||||
|
|
||||||
|
if(version.wServicePackMajor > 0)
|
||||||
|
{
|
||||||
|
printf(" (%s %d.%d)",
|
||||||
|
version.szCSDVersion,
|
||||||
|
version.wServicePackMajor,
|
||||||
|
version.wServicePackMinor);
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
if(IDirect3D9* d3d = Direct3DCreate9(D3D_SDK_VERSION))
|
||||||
|
{
|
||||||
|
D3DADAPTER_IDENTIFIER9 id;
|
||||||
|
|
||||||
|
if(S_OK == d3d->GetAdapterIdentifier(D3DADAPTER_DEFAULT, 0, &id))
|
||||||
|
{
|
||||||
|
printf("%s (%d.%d.%d.%d)\n",
|
||||||
|
id.Description,
|
||||||
|
id.DriverVersion.HighPart >> 16,
|
||||||
|
id.DriverVersion.HighPart & 0xffff,
|
||||||
|
id.DriverVersion.LowPart >> 16,
|
||||||
|
id.DriverVersion.LowPart & 0xffff);
|
||||||
|
}
|
||||||
|
|
||||||
|
d3d->Release();
|
||||||
|
}
|
||||||
|
|
||||||
|
string d3dx9_dll = format("d3dx9_%d.dll", D3DX_SDK_VERSION);
|
||||||
|
|
||||||
|
if(HINSTANCE hDll = LoadLibrary(d3dx9_dll.c_str()))
|
||||||
{
|
{
|
||||||
FreeLibrary(hDll);
|
FreeLibrary(hDll);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
printf("Cannot find %s\n", d3dx9_dll.c_str());
|
||||||
|
|
||||||
if(MessageBox(NULL, "You need to update directx, would you like to do it now?", "GSdx", MB_YESNO) == IDYES)
|
if(MessageBox(NULL, "You need to update directx, would you like to do it now?", "GSdx", MB_YESNO) == IDYES)
|
||||||
{
|
{
|
||||||
const char* url = "http://www.microsoft.com/downloads/details.aspx?FamilyId=2DA43D38-DB71-4C1B-BC6A-9B6652CD92A3";
|
const char* url = "http://www.microsoft.com/downloads/details.aspx?FamilyId=2DA43D38-DB71-4C1B-BC6A-9B6652CD92A3";
|
||||||
|
|
|
@ -29,6 +29,7 @@ EXPORTS
|
||||||
GSreadFIFO
|
GSreadFIFO
|
||||||
GSreadFIFO2
|
GSreadFIFO2
|
||||||
GSirqCallback
|
GSirqCallback
|
||||||
|
GSsetupRecording
|
||||||
GSsetGameCRC
|
GSsetGameCRC
|
||||||
GSsetFrameSkip
|
GSsetFrameSkip
|
||||||
GSsetFrameLimit
|
GSsetFrameLimit
|
||||||
|
|
|
@ -1,33 +1,24 @@
|
||||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<_PropertySheetDisplayName>common</_PropertySheetDisplayName>
|
<_PropertySheetDisplayName>GSdx</_PropertySheetDisplayName>
|
||||||
<OutDir>$(SolutionDir)bin\$(PcsxSubsection)\</OutDir>
|
|
||||||
<IntDir>$(PlatformName)\$(Configuration)\</IntDir>
|
|
||||||
<TargetName>$(ProjectName)-$(SSEtype)</TargetName>
|
<TargetName>$(ProjectName)-$(SSEtype)</TargetName>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemDefinitionGroup>
|
<ItemDefinitionGroup>
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
|
||||||
<PreprocessorDefinitions>WIN32;_WINDOWS;_WIN32_WINNT=0x500;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<FloatingPointModel>Fast</FloatingPointModel>
|
|
||||||
<RuntimeTypeInfo>false</RuntimeTypeInfo>
|
|
||||||
<WarningLevel>Level4</WarningLevel>
|
<WarningLevel>Level4</WarningLevel>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
|
||||||
<DisableSpecificWarnings>4995;4324;%(DisableSpecificWarnings)</DisableSpecificWarnings>
|
<DisableSpecificWarnings>4995;4324;%(DisableSpecificWarnings)</DisableSpecificWarnings>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<AdditionalDependencies>JITProfiling.lib;d3d11_beta.lib;d3dx11.lib;d3d10.lib;d3d10_1.lib;d3dx10.lib;d3d9.lib;d3dx9.lib;ddraw.lib;dxguid.lib;winmm.lib;strmiids.lib;xinput.lib;cg.lib;cgGL.lib;glut32.lib;glew32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>JITProfiling.lib;d3d11_beta.lib;d3dx11.lib;d3d10.lib;d3d10_1.lib;d3dx10.lib;d3d9.lib;d3dx9.lib;ddraw.lib;dxguid.lib;winmm.lib;strmiids.lib;xinput.lib;cg.lib;cgGL.lib;glut32.lib;glew32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<AdditionalLibraryDirectories>./vtune;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>./vtune;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
<DelayLoadDLLs>d3d9.dll;d3dx9_41.dll;d3d10.dll;d3d10_1.dll;d3dx10_41.dll;d3d11.dll;d3d11_beta.dll;d3dx11_41.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
|
<DelayLoadDLLs>d3d9.dll;d3dx9_41.dll;d3d10.dll;d3d10_1.dll;d3dx10_41.dll;d3d11.dll;d3d11_beta.dll;d3dx11_41.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
|
||||||
<SubSystem>Windows</SubSystem>
|
|
||||||
<RandomizedBaseAddress>false</RandomizedBaseAddress>
|
|
||||||
</Link>
|
</Link>
|
||||||
<PostBuildEvent>
|
<PostBuildEvent>
|
||||||
<Command>.\postBuild.cmd "$(TargetPath)" "$(TargetName)" $(TargetExt) $(PcsxSubsection)</Command>
|
<Command>
|
||||||
|
</Command>
|
||||||
</PostBuildEvent>
|
</PostBuildEvent>
|
||||||
<PreBuildEvent>
|
<PreBuildEvent>
|
||||||
<Command>"$(SvnCommonDir)\vsprops\preBuild.cmd" "$(ProjectRootDir)"</Command>
|
<Command>"$(SolutionDir)common\vsprops\preBuild.cmd" "$(ProjectDir)."</Command>
|
||||||
</PreBuildEvent>
|
</PreBuildEvent>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
</Project>
|
</Project>
|
|
@ -15,10 +15,10 @@
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
// Hungarian resources
|
// Hungarian resources
|
||||||
|
|
||||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_HUN)
|
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT
|
LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT
|
||||||
#pragma code_page(1250)
|
#pragma code_page(1252)
|
||||||
#endif //_WIN32
|
#endif //_WIN32
|
||||||
|
|
||||||
#ifdef APSTUDIO_INVOKED
|
#ifdef APSTUDIO_INVOKED
|
||||||
|
@ -40,34 +40,22 @@ END
|
||||||
|
|
||||||
3 TEXTINCLUDE
|
3 TEXTINCLUDE
|
||||||
BEGIN
|
BEGIN
|
||||||
"#define _AFX_NO_SPLITTER_RESOURCES\r\n"
|
|
||||||
"#define _AFX_NO_OLE_RESOURCES\r\n"
|
|
||||||
"#define _AFX_NO_TRACKER_RESOURCES\r\n"
|
|
||||||
"#define _AFX_NO_PROPERTY_RESOURCES\r\n"
|
|
||||||
"\r\n"
|
"\r\n"
|
||||||
"#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r\n"
|
|
||||||
"LANGUAGE 9, 1\r\n"
|
|
||||||
"#pragma code_page(1252)\r\n"
|
|
||||||
"#include ""res\\GSdx.rc2"" // non-Microsoft Visual C++ edited resources\r\n"
|
|
||||||
"#include ""afxres.rc"" // Standard components\r\n"
|
|
||||||
"#endif\r\n"
|
|
||||||
"\0"
|
"\0"
|
||||||
END
|
END
|
||||||
|
|
||||||
#endif // APSTUDIO_INVOKED
|
#endif // APSTUDIO_INVOKED
|
||||||
|
|
||||||
#endif // Hungarian resources
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
// English (U.S.) resources
|
//
|
||||||
|
// RCDATA
|
||||||
|
//
|
||||||
|
|
||||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
|
IDR_CONVERT_FX RCDATA "res\\convert.fx"
|
||||||
#ifdef _WIN32
|
IDR_TFX_FX RCDATA "res\\tfx.fx"
|
||||||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
IDR_MERGE_FX RCDATA "res\\merge.fx"
|
||||||
#pragma code_page(1252)
|
IDR_INTERLACE_FX RCDATA "res\\interlace.fx"
|
||||||
#endif //_WIN32
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
|
@ -252,17 +240,7 @@ END
|
||||||
//
|
//
|
||||||
// Generated from the TEXTINCLUDE 3 resource.
|
// Generated from the TEXTINCLUDE 3 resource.
|
||||||
//
|
//
|
||||||
#define _AFX_NO_SPLITTER_RESOURCES
|
|
||||||
#define _AFX_NO_OLE_RESOURCES
|
|
||||||
#define _AFX_NO_TRACKER_RESOURCES
|
|
||||||
#define _AFX_NO_PROPERTY_RESOURCES
|
|
||||||
|
|
||||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
|
|
||||||
LANGUAGE 9, 1
|
|
||||||
#pragma code_page(1252)
|
|
||||||
#include "res\GSdx.rc2" // non-Microsoft Visual C++ edited resources
|
|
||||||
#include "afxres.rc" // Standard components
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
#endif // not APSTUDIO_INVOKED
|
#endif // not APSTUDIO_INVOKED
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -676,9 +676,6 @@
|
||||||
<None Include="res\convert.fx">
|
<None Include="res\convert.fx">
|
||||||
<Filter>Shaders</Filter>
|
<Filter>Shaders</Filter>
|
||||||
</None>
|
</None>
|
||||||
<None Include="res\GSdx.rc2">
|
|
||||||
<Filter>Resource Files</Filter>
|
|
||||||
</None>
|
|
||||||
<None Include="res\interlace.fx">
|
<None Include="res\interlace.fx">
|
||||||
<Filter>Shaders</Filter>
|
<Filter>Shaders</Filter>
|
||||||
</None>
|
</None>
|
|
@ -1,18 +0,0 @@
|
||||||
//
|
|
||||||
// GSdx.RC2 - resources Microsoft Visual C++ does not edit directly
|
|
||||||
//
|
|
||||||
|
|
||||||
#ifdef APSTUDIO_INVOKED
|
|
||||||
#error this file is not editable by Microsoft Visual C++
|
|
||||||
#endif //APSTUDIO_INVOKED
|
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
|
||||||
// Add manually edited resources here...
|
|
||||||
|
|
||||||
IDR_CONVERT_FX RCDATA "res\\convert.fx"
|
|
||||||
IDR_TFX_FX RCDATA "res\\tfx.fx"
|
|
||||||
IDR_MERGE_FX RCDATA "res\\merge.fx"
|
|
||||||
IDR_INTERLACE_FX RCDATA "res\\interlace.fx"
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
|
|
@ -1,25 +0,0 @@
|
||||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<PropertyGroup Label="UserMacros">
|
|
||||||
<ProjectRootDir>$(ProjectDir).</ProjectRootDir>
|
|
||||||
<SvnRootDir>$(ProjectRootDir)\..\..</SvnRootDir>
|
|
||||||
<SvnCommonDir>$(SvnRootDir)\common</SvnCommonDir>
|
|
||||||
<PcsxSubsection>plugins</PcsxSubsection>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup>
|
|
||||||
<_PropertySheetDisplayName>ProjectRootDir</_PropertySheetDisplayName>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<BuildMacro Include="ProjectRootDir">
|
|
||||||
<Value>$(ProjectRootDir)</Value>
|
|
||||||
</BuildMacro>
|
|
||||||
<BuildMacro Include="SvnRootDir">
|
|
||||||
<Value>$(SvnRootDir)</Value>
|
|
||||||
</BuildMacro>
|
|
||||||
<BuildMacro Include="SvnCommonDir">
|
|
||||||
<Value>$(SvnCommonDir)</Value>
|
|
||||||
</BuildMacro>
|
|
||||||
<BuildMacro Include="PcsxSubsection">
|
|
||||||
<Value>$(PcsxSubsection)</Value>
|
|
||||||
</BuildMacro>
|
|
||||||
</ItemGroup>
|
|
||||||
</Project>
|
|
|
@ -1,15 +0,0 @@
|
||||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<PropertyGroup>
|
|
||||||
<_PropertySheetDisplayName>debug</_PropertySheetDisplayName>
|
|
||||||
<LinkIncremental>true</LinkIncremental>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemDefinitionGroup>
|
|
||||||
<ClCompile>
|
|
||||||
<Optimization>Disabled</Optimization>
|
|
||||||
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<MinimalRebuild>true</MinimalRebuild>
|
|
||||||
<BasicRuntimeChecks>StackFrameRuntimeCheck</BasicRuntimeChecks>
|
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
|
||||||
</ClCompile>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
</Project>
|
|
|
@ -1,23 +0,0 @@
|
||||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<PropertyGroup>
|
|
||||||
<_PropertySheetDisplayName>release</_PropertySheetDisplayName>
|
|
||||||
<LinkIncremental>false</LinkIncremental>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemDefinitionGroup>
|
|
||||||
<ClCompile>
|
|
||||||
<Optimization>MaxSpeed</Optimization>
|
|
||||||
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
|
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
|
||||||
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
|
||||||
<OmitFramePointers>true</OmitFramePointers>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
<PreprocessorDefinitions>NDEBUG;_SECURE_SCL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<StringPooling>true</StringPooling>
|
|
||||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
|
||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
</Project>
|
|
|
@ -130,7 +130,11 @@ void SetLogSliderVal(HWND hWnd, int id, HWND hWndText, int val) {
|
||||||
|
|
||||||
void RefreshEnabledDevices(int updateDeviceList) {
|
void RefreshEnabledDevices(int updateDeviceList) {
|
||||||
// Clears all device state.
|
// Clears all device state.
|
||||||
if (updateDeviceList) EnumDevices();
|
static int lastXInputState = -1;
|
||||||
|
if (updateDeviceList || lastXInputState != config.gameApis.xInput) {
|
||||||
|
EnumDevices(config.gameApis.xInput);
|
||||||
|
lastXInputState = config.gameApis.xInput;
|
||||||
|
}
|
||||||
|
|
||||||
for (int i=0; i<dm->numDevices; i++) {
|
for (int i=0; i<dm->numDevices; i++) {
|
||||||
Device *dev = dm->devices[i];
|
Device *dev = dm->devices[i];
|
||||||
|
@ -1094,11 +1098,16 @@ int CreateEffectBinding(Device *dev, wchar_t *effectID, unsigned int port, unsig
|
||||||
if (port > 1 || slot>3 || motor > 1 || !dev->numFFEffectTypes) {
|
if (port > 1 || slot>3 || motor > 1 || !dev->numFFEffectTypes) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (!effectID) {
|
ForceFeedbackEffectType *eff = 0;
|
||||||
effectID = dev->ffEffectTypes[0].effectID;
|
if (effectID) {
|
||||||
|
eff = dev->GetForcefeedbackEffect(effectID);
|
||||||
|
}
|
||||||
|
if (!eff) {
|
||||||
|
eff = dev->ffEffectTypes;
|
||||||
|
}
|
||||||
|
if (!eff) {
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
ForceFeedbackEffectType *eff = dev->GetForcefeedbackEffect(effectID);
|
|
||||||
if (!eff) return -1;
|
|
||||||
int effectIndex = eff - dev->ffEffectTypes;
|
int effectIndex = eff - dev->ffEffectTypes;
|
||||||
dev->pads[port][slot].ffBindings = (ForceFeedbackBinding*) realloc(dev->pads[port][slot].ffBindings, (dev->pads[port][slot].numFFBindings+1) * sizeof(ForceFeedbackBinding));
|
dev->pads[port][slot].ffBindings = (ForceFeedbackBinding*) realloc(dev->pads[port][slot].ffBindings, (dev->pads[port][slot].numFFBindings+1) * sizeof(ForceFeedbackBinding));
|
||||||
int newIndex = dev->pads[port][slot].numFFBindings;
|
int newIndex = dev->pads[port][slot].numFFBindings;
|
||||||
|
@ -1404,7 +1413,14 @@ INT_PTR CALLBACK DialogProc(HWND hWnd, unsigned int msg, WPARAM wParam, LPARAM l
|
||||||
if (index < (unsigned int) dm->numDevices) {
|
if (index < (unsigned int) dm->numDevices) {
|
||||||
Device *dev = dm->devices[index];
|
Device *dev = dm->devices[index];
|
||||||
ForceFeedbackBinding *b;
|
ForceFeedbackBinding *b;
|
||||||
int count = CreateEffectBinding(dev, 0, port, slot, cmd-ID_BIG_MOTOR, &b);
|
wchar_t *effectID = 0;
|
||||||
|
if (dev->api == DI) {
|
||||||
|
// Constant effect.
|
||||||
|
if (cmd == ID_BIG_MOTOR) effectID = L"13541C20-8E33-11D0-9AD0-00A0C9A06E35";
|
||||||
|
// Square.
|
||||||
|
else effectID = L"13541C22-8E33-11D0-9AD0-00A0C9A06E35";
|
||||||
|
}
|
||||||
|
int count = CreateEffectBinding(dev, effectID, port, slot, cmd-ID_BIG_MOTOR, &b);
|
||||||
if (b) {
|
if (b) {
|
||||||
int needSet = 1;
|
int needSet = 1;
|
||||||
if (dev->api == XINPUT && dev->numFFAxes == 2) {
|
if (dev->api == XINPUT && dev->numFFAxes == 2) {
|
||||||
|
@ -1418,7 +1434,6 @@ INT_PTR CALLBACK DialogProc(HWND hWnd, unsigned int msg, WPARAM wParam, LPARAM l
|
||||||
}
|
}
|
||||||
else if (dev->api == DI) {
|
else if (dev->api == DI) {
|
||||||
int bigIndex=0, littleIndex=0;
|
int bigIndex=0, littleIndex=0;
|
||||||
int constantEffect = 0, squareEffect = 0;
|
|
||||||
int j;
|
int j;
|
||||||
for (j=0; j<dev->numFFAxes; j++) {
|
for (j=0; j<dev->numFFAxes; j++) {
|
||||||
// DI object instance. 0 is x-axis, 1 is y-axis.
|
// DI object instance. 0 is x-axis, 1 is y-axis.
|
||||||
|
@ -1430,20 +1445,14 @@ INT_PTR CALLBACK DialogProc(HWND hWnd, unsigned int msg, WPARAM wParam, LPARAM l
|
||||||
littleIndex = j;
|
littleIndex = j;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (j=0; j<dev->numFFEffectTypes; j++) {
|
|
||||||
if (!wcsicmp(L"13541C20-8E33-11D0-9AD0-00A0C9A06E35", dev->ffEffectTypes[j].effectID)) constantEffect = j;
|
|
||||||
if (!wcsicmp(L"13541C22-8E33-11D0-9AD0-00A0C9A06E35", dev->ffEffectTypes[j].effectID)) squareEffect = j;
|
|
||||||
}
|
|
||||||
needSet = 0;
|
needSet = 0;
|
||||||
if (cmd == ID_BIG_MOTOR) {
|
if (cmd == ID_BIG_MOTOR) {
|
||||||
b->axes[bigIndex].force = BASE_SENSITIVITY;
|
b->axes[bigIndex].force = BASE_SENSITIVITY;
|
||||||
b->axes[littleIndex].force = 1;
|
b->axes[littleIndex].force = 1;
|
||||||
b->effectIndex = constantEffect;
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
b->axes[bigIndex].force = 1;
|
b->axes[bigIndex].force = 1;
|
||||||
b->axes[littleIndex].force = BASE_SENSITIVITY;
|
b->axes[littleIndex].force = BASE_SENSITIVITY;
|
||||||
b->effectIndex = squareEffect;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (needSet) {
|
if (needSet) {
|
||||||
|
@ -1695,7 +1704,7 @@ INT_PTR CALLBACK GeneralDialogProc(HWND hWnd, unsigned int msg, WPARAM wParam, L
|
||||||
selected = 0;
|
selected = 0;
|
||||||
ListView_SetExtendedListViewStyleEx(hWndList, LVS_EX_FULLROWSELECT|LVS_EX_DOUBLEBUFFER, LVS_EX_FULLROWSELECT|LVS_EX_DOUBLEBUFFER);
|
ListView_SetExtendedListViewStyleEx(hWndList, LVS_EX_FULLROWSELECT|LVS_EX_DOUBLEBUFFER, LVS_EX_FULLROWSELECT|LVS_EX_DOUBLEBUFFER);
|
||||||
SendMessage(hWndList, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_FULLROWSELECT);
|
SendMessage(hWndList, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_FULLROWSELECT);
|
||||||
SendMessage(hWndCombo, CB_ADDSTRING, 0, (LPARAM) L"Disabled");
|
SendMessage(hWndCombo, CB_ADDSTRING, 0, (LPARAM) L"Unplugged");
|
||||||
SendMessage(hWndCombo, CB_ADDSTRING, 0, (LPARAM) L"Dualshock 2");
|
SendMessage(hWndCombo, CB_ADDSTRING, 0, (LPARAM) L"Dualshock 2");
|
||||||
SendMessage(hWndCombo, CB_ADDSTRING, 0, (LPARAM) L"Guitar");
|
SendMessage(hWndCombo, CB_ADDSTRING, 0, (LPARAM) L"Guitar");
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
#include "RawInput.h"
|
#include "RawInput.h"
|
||||||
#include "XInput.h"
|
#include "XInput.h"
|
||||||
|
|
||||||
void EnumDevices() {
|
void EnumDevices(int hideDXXinput) {
|
||||||
// Needed for enumeration of some device types.
|
// Needed for enumeration of some device types.
|
||||||
dm->ReleaseInput();
|
dm->ReleaseInput();
|
||||||
InputDeviceManager *oldDm = dm;
|
InputDeviceManager *oldDm = dm;
|
||||||
|
@ -17,7 +17,7 @@ void EnumDevices() {
|
||||||
EnumWindowsMessagingDevices();
|
EnumWindowsMessagingDevices();
|
||||||
EnumRawInputDevices();
|
EnumRawInputDevices();
|
||||||
EnumXInputDevices();
|
EnumXInputDevices();
|
||||||
EnumDirectInputDevices();
|
EnumDirectInputDevices(hideDXXinput);
|
||||||
|
|
||||||
dm->CopyBindings(oldDm->numDevices, oldDm->devices);
|
dm->CopyBindings(oldDm->numDevices, oldDm->devices);
|
||||||
|
|
||||||
|
|
|
@ -9,5 +9,5 @@ struct InitInfo {
|
||||||
HWND hWndButton;
|
HWND hWndButton;
|
||||||
};
|
};
|
||||||
|
|
||||||
void EnumDevices();
|
void EnumDevices(int hideDXXinput);
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,16 @@
|
||||||
#include "PS2Etypes.h"
|
#include "PS2Etypes.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
// All for getting GUIDs of XInput devices....
|
||||||
|
#include <wbemidl.h>
|
||||||
|
#include <oleauto.h>
|
||||||
|
// MS's code imports wmsstd.h, thus requiring the entire windows
|
||||||
|
// media SDK also be installed for a simple macro. This is
|
||||||
|
// simpler and less silly.
|
||||||
|
#ifndef SAFE_RELEASE
|
||||||
|
#define SAFE_RELEASE(p) { if(p) { (p)->Release(); (p)=NULL; } }
|
||||||
|
#endif
|
||||||
|
|
||||||
// Aka htons, without the winsock dependency.
|
// Aka htons, without the winsock dependency.
|
||||||
inline static u16 flipShort(u16 s) {
|
inline static u16 flipShort(u16 s) {
|
||||||
return (s>>8) | (s<<8);
|
return (s>>8) | (s<<8);
|
||||||
|
@ -440,10 +450,126 @@ BOOL CALLBACK EnumDeviceObjectsCallback (LPCDIDEVICEOBJECTINSTANCE lpddoi, LPVOI
|
||||||
return DIENUM_CONTINUE;
|
return DIENUM_CONTINUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Evil code from MS's site. If only they'd just made a way to get
|
||||||
|
// an XInput device's GUID directly in the first place...
|
||||||
|
BOOL IsXInputDevice( const GUID* pGuidProductFromDirectInput )
|
||||||
|
{
|
||||||
|
IWbemLocator* pIWbemLocator = NULL;
|
||||||
|
IEnumWbemClassObject* pEnumDevices = NULL;
|
||||||
|
IWbemClassObject* pDevices[20] = {0};
|
||||||
|
IWbemServices* pIWbemServices = NULL;
|
||||||
|
BSTR bstrNamespace = NULL;
|
||||||
|
BSTR bstrDeviceID = NULL;
|
||||||
|
BSTR bstrClassName = NULL;
|
||||||
|
DWORD uReturned = 0;
|
||||||
|
bool bIsXinputDevice= false;
|
||||||
|
UINT iDevice = 0;
|
||||||
|
VARIANT var;
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
|
// CoInit if needed
|
||||||
|
hr = CoInitialize(NULL);
|
||||||
|
bool bCleanupCOM = SUCCEEDED(hr);
|
||||||
|
|
||||||
|
// Create WMI
|
||||||
|
hr = CoCreateInstance( __uuidof(WbemLocator),
|
||||||
|
NULL,
|
||||||
|
CLSCTX_INPROC_SERVER,
|
||||||
|
__uuidof(IWbemLocator),
|
||||||
|
(LPVOID*) &pIWbemLocator);
|
||||||
|
if( FAILED(hr) || pIWbemLocator == NULL )
|
||||||
|
goto LCleanup;
|
||||||
|
|
||||||
|
bstrNamespace = SysAllocString( L"\\\\.\\root\\cimv2" );if( bstrNamespace == NULL ) goto LCleanup;
|
||||||
|
bstrClassName = SysAllocString( L"Win32_PNPEntity" ); if( bstrClassName == NULL ) goto LCleanup;
|
||||||
|
bstrDeviceID = SysAllocString( L"DeviceID" ); if( bstrDeviceID == NULL ) goto LCleanup;
|
||||||
|
|
||||||
|
// Connect to WMI
|
||||||
|
hr = pIWbemLocator->ConnectServer( bstrNamespace, NULL, NULL, 0L,
|
||||||
|
0L, NULL, NULL, &pIWbemServices );
|
||||||
|
if( FAILED(hr) || pIWbemServices == NULL )
|
||||||
|
goto LCleanup;
|
||||||
|
|
||||||
|
// Switch security level to IMPERSONATE.
|
||||||
|
CoSetProxyBlanket( pIWbemServices, RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE, NULL,
|
||||||
|
RPC_C_AUTHN_LEVEL_CALL, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE );
|
||||||
|
|
||||||
|
hr = pIWbemServices->CreateInstanceEnum( bstrClassName, 0, NULL, &pEnumDevices );
|
||||||
|
if( FAILED(hr) || pEnumDevices == NULL )
|
||||||
|
goto LCleanup;
|
||||||
|
|
||||||
|
// Loop over all devices
|
||||||
|
for( ;; )
|
||||||
|
{
|
||||||
|
// Get 20 at a time
|
||||||
|
hr = pEnumDevices->Next( 10000, 20, pDevices, &uReturned );
|
||||||
|
if( FAILED(hr) )
|
||||||
|
goto LCleanup;
|
||||||
|
if( uReturned == 0 )
|
||||||
|
break;
|
||||||
|
|
||||||
|
for( iDevice=0; iDevice<uReturned; iDevice++ )
|
||||||
|
{
|
||||||
|
// For each device, get its device ID
|
||||||
|
hr = pDevices[iDevice]->Get( bstrDeviceID, 0L, &var, NULL, NULL );
|
||||||
|
if( SUCCEEDED( hr ) && var.vt == VT_BSTR && var.bstrVal != NULL )
|
||||||
|
{
|
||||||
|
// Check if the device ID contains "IG_". If it does, then it's an XInput device
|
||||||
|
// This information can not be found from DirectInput
|
||||||
|
if( wcsstr( var.bstrVal, L"IG_" ) )
|
||||||
|
{
|
||||||
|
// If it does, then get the VID/PID from var.bstrVal
|
||||||
|
DWORD dwPid = 0, dwVid = 0;
|
||||||
|
WCHAR* strVid = wcsstr( var.bstrVal, L"VID_" );
|
||||||
|
if( strVid && swscanf( strVid, L"VID_%4X", &dwVid ) != 1 )
|
||||||
|
dwVid = 0;
|
||||||
|
WCHAR* strPid = wcsstr( var.bstrVal, L"PID_" );
|
||||||
|
if( strPid && swscanf( strPid, L"PID_%4X", &dwPid ) != 1 )
|
||||||
|
dwPid = 0;
|
||||||
|
|
||||||
|
// Compare the VID/PID to the DInput device
|
||||||
|
DWORD dwVidPid = MAKELONG( dwVid, dwPid );
|
||||||
|
if( dwVidPid == pGuidProductFromDirectInput->Data1 )
|
||||||
|
{
|
||||||
|
bIsXinputDevice = true;
|
||||||
|
goto LCleanup;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
SAFE_RELEASE( pDevices[iDevice] );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LCleanup:
|
||||||
|
if(bstrNamespace)
|
||||||
|
SysFreeString(bstrNamespace);
|
||||||
|
if(bstrDeviceID)
|
||||||
|
SysFreeString(bstrDeviceID);
|
||||||
|
if(bstrClassName)
|
||||||
|
SysFreeString(bstrClassName);
|
||||||
|
for( iDevice=0; iDevice<20; iDevice++ )
|
||||||
|
SAFE_RELEASE( pDevices[iDevice] );
|
||||||
|
SAFE_RELEASE( pEnumDevices );
|
||||||
|
SAFE_RELEASE( pIWbemLocator );
|
||||||
|
SAFE_RELEASE( pIWbemServices );
|
||||||
|
|
||||||
|
if( bCleanupCOM )
|
||||||
|
CoUninitialize();
|
||||||
|
|
||||||
|
return bIsXinputDevice;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
struct DeviceEnumInfo {
|
||||||
|
IDirectInput8 *di8;
|
||||||
|
int ignoreXInput;
|
||||||
|
};
|
||||||
|
|
||||||
BOOL CALLBACK EnumCallback (LPCDIDEVICEINSTANCE lpddi, LPVOID pvRef) {
|
BOOL CALLBACK EnumCallback (LPCDIDEVICEINSTANCE lpddi, LPVOID pvRef) {
|
||||||
IDirectInput8* di8 = (IDirectInput8*)pvRef;
|
IDirectInput8* di8 = ((DeviceEnumInfo*)pvRef)->di8;
|
||||||
const wchar_t *name;
|
const wchar_t *name;
|
||||||
wchar_t temp[40];
|
wchar_t temp[40];
|
||||||
|
//if (((DeviceEnumInfo*)pvRef)->ignoreXInput && lpddi->
|
||||||
if (lpddi->tszInstanceName[0]) {
|
if (lpddi->tszInstanceName[0]) {
|
||||||
name = lpddi->tszInstanceName;
|
name = lpddi->tszInstanceName;
|
||||||
}
|
}
|
||||||
|
@ -476,11 +602,13 @@ BOOL CALLBACK EnumCallback (LPCDIDEVICEINSTANCE lpddi, LPVOID pvRef) {
|
||||||
return DIENUM_CONTINUE;
|
return DIENUM_CONTINUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void EnumDirectInputDevices() {
|
void EnumDirectInputDevices(int ignoreXInput) {
|
||||||
IDirectInput8* di8 = GetDirectInput();
|
DeviceEnumInfo enumInfo;
|
||||||
if (!di8) return;
|
enumInfo.di8 = GetDirectInput();
|
||||||
|
if (!enumInfo.di8) return;
|
||||||
|
enumInfo.ignoreXInput = ignoreXInput;
|
||||||
di8d.deviceCount = 0;
|
di8d.deviceCount = 0;
|
||||||
di8->EnumDevices(DI8DEVCLASS_ALL, EnumCallback, di8, DIEDFL_ATTACHEDONLY);
|
enumInfo.di8->EnumDevices(DI8DEVCLASS_ALL, EnumCallback, &enumInfo, DIEDFL_ATTACHEDONLY);
|
||||||
ReleaseDirectInput();
|
ReleaseDirectInput();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
#include "InputManager.h"
|
#include "InputManager.h"
|
||||||
|
|
||||||
void EnumDirectInputDevices();
|
void EnumDirectInputDevices(int ignoreXInput);
|
||||||
|
|
|
@ -112,15 +112,27 @@ void Device::AddFFAxis(const wchar_t *displayName, int id) {
|
||||||
ffAxes[numFFAxes].id = id;
|
ffAxes[numFFAxes].id = id;
|
||||||
ffAxes[numFFAxes].displayName = wcsdup(displayName);
|
ffAxes[numFFAxes].displayName = wcsdup(displayName);
|
||||||
numFFAxes++;
|
numFFAxes++;
|
||||||
|
int bindingsExist = 0;
|
||||||
for (int port=0; port<2; port++) {
|
for (int port=0; port<2; port++) {
|
||||||
for (int slot=0; slot<4; slot++) {
|
for (int slot=0; slot<4; slot++) {
|
||||||
for (int i=0; i<pads[port][slot].numFFBindings; i++) {
|
for (int i=0; i<pads[port][slot].numFFBindings; i++) {
|
||||||
ForceFeedbackBinding *b = pads[port][slot].ffBindings+i;
|
ForceFeedbackBinding *b = pads[port][slot].ffBindings+i;
|
||||||
b->axes = (AxisEffectInfo*) realloc(b->axes, sizeof(AxisEffectInfo) * (numFFAxes));
|
b->axes = (AxisEffectInfo*) realloc(b->axes, sizeof(AxisEffectInfo) * (numFFAxes));
|
||||||
memset(b->axes + (numFFAxes-1), 0, sizeof(AxisEffectInfo));
|
memset(b->axes + (numFFAxes-1), 0, sizeof(AxisEffectInfo));
|
||||||
|
bindingsExist = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Generally the case when not loading a binding file.
|
||||||
|
if (!bindingsExist) {
|
||||||
|
int i = numFFAxes-1;
|
||||||
|
ForceFeedbackAxis temp = ffAxes[i];
|
||||||
|
while (i && temp.id < ffAxes[i-1].id) {
|
||||||
|
ffAxes[i] = ffAxes[i-1];
|
||||||
|
i--;
|
||||||
|
}
|
||||||
|
ffAxes[i] = temp;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Device::AllocState() {
|
void Device::AllocState() {
|
||||||
|
|
|
@ -969,20 +969,20 @@ u8 CALLBACK PADpoll(u8 value) {
|
||||||
|
|
||||||
u8 b1 = 0xFF, b2 = 0xFF;
|
u8 b1 = 0xFF, b2 = 0xFF;
|
||||||
for (i = 0; i<4; i++) {
|
for (i = 0; i<4; i++) {
|
||||||
b1 -= (sum->buttons[i]>=128) << i;
|
b1 -= (sum->buttons[i]>=0xF0) << i;
|
||||||
}
|
}
|
||||||
for (i = 0; i<8; i++) {
|
for (i = 0; i<8; i++) {
|
||||||
b2 -= (sum->buttons[i+4]>=128) << i;
|
b2 -= (sum->buttons[i+4]>=0xF0) << i;
|
||||||
}
|
}
|
||||||
if (config.padConfigs[query.port][query.slot].type == GuitarPad && !config.GH2) {
|
if (config.padConfigs[query.port][query.slot].type == GuitarPad && !config.GH2) {
|
||||||
sum->sticks[0].horiz = -255;
|
sum->sticks[0].horiz = -255;
|
||||||
// Not sure about this. Forces wammy to be from 0 to 0x7F.
|
// Not sure about this. Forces wammy to be from 0 to 0x7F.
|
||||||
// if (sum->sticks[2].vert > 0) sum->sticks[2].vert = 0;
|
// if (sum->sticks[2].vert > 0) sum->sticks[2].vert = 0;
|
||||||
}
|
}
|
||||||
b1 -= ((sum->sticks[0].vert<=-128) << 4);
|
b1 -= ((sum->sticks[0].vert<=-0xF0) << 4);
|
||||||
b1 -= ((sum->sticks[0].horiz>=128) << 5);
|
b1 -= ((sum->sticks[0].horiz>=0xF0) << 5);
|
||||||
b1 -= ((sum->sticks[0].vert>=128) << 6);
|
b1 -= ((sum->sticks[0].vert>=0xF0) << 6);
|
||||||
b1 -= ((sum->sticks[0].horiz<=-128) << 7);
|
b1 -= ((sum->sticks[0].horiz<=-0xF0) << 7);
|
||||||
query.response[3] = b1;
|
query.response[3] = b1;
|
||||||
query.response[4] = b2;
|
query.response[4] = b2;
|
||||||
|
|
||||||
|
|
|
@ -227,7 +227,7 @@ BEGIN
|
||||||
CONTROL "Port 1 Multitap",IDC_MULTITAP1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,152,63,10
|
CONTROL "Port 1 Multitap",IDC_MULTITAP1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,152,63,10
|
||||||
CONTROL "Port 2 Multitap",IDC_MULTITAP2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,164,63,10
|
CONTROL "Port 2 Multitap",IDC_MULTITAP2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,164,63,10
|
||||||
CONTROL "",IDC_PAD_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | WS_TABSTOP,81,151,183,50,WS_EX_CLIENTEDGE
|
CONTROL "",IDC_PAD_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | WS_TABSTOP,81,151,183,50,WS_EX_CLIENTEDGE
|
||||||
COMBOBOX IDC_PAD_TYPE,270,152,140,41,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
COMBOBOX IDC_PAD_TYPE,270,152,140,41,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||||
CONTROL "Use analog mode whenever possible",IDC_ANALOG_START1,
|
CONTROL "Use analog mode whenever possible",IDC_ANALOG_START1,
|
||||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,270,169,132,10
|
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,270,169,132,10
|
||||||
GROUPBOX "Device Diagnostics",IDC_STATIC,7,211,201,99
|
GROUPBOX "Device Diagnostics",IDC_STATIC,7,211,201,99
|
||||||
|
|
|
@ -425,7 +425,7 @@ void a52_imdct_init (uint32_t mm_accel)
|
||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
fprintf (stderr, "No accelerated IMDCT transform found\n");
|
//fprintf (stderr, "No accelerated IMDCT transform found\n");
|
||||||
ifft128 = ifft128_c;
|
ifft128 = ifft128_c;
|
||||||
ifft64 = ifft64_c;
|
ifft64 = ifft64_c;
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,6 +38,7 @@
|
||||||
#include <shellapi.h>
|
#include <shellapi.h>
|
||||||
#include <atlbase.h>
|
#include <atlbase.h>
|
||||||
#include <xinput.h>
|
#include <xinput.h>
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
// stdc
|
// stdc
|
||||||
|
|
||||||
|
|
|
@ -1,25 +0,0 @@
|
||||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<PropertyGroup Label="UserMacros">
|
|
||||||
<ProjectRootDir>$(ProjectDir).</ProjectRootDir>
|
|
||||||
<SvnRootDir>$(ProjectRootDir)\..\..</SvnRootDir>
|
|
||||||
<SvnCommonDir>$(SvnRootDir)\common</SvnCommonDir>
|
|
||||||
<PcsxSubsection>plugins</PcsxSubsection>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup>
|
|
||||||
<_PropertySheetDisplayName>ProjectRootDir</_PropertySheetDisplayName>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<BuildMacro Include="ProjectRootDir">
|
|
||||||
<Value>$(ProjectRootDir)</Value>
|
|
||||||
</BuildMacro>
|
|
||||||
<BuildMacro Include="SvnRootDir">
|
|
||||||
<Value>$(SvnRootDir)</Value>
|
|
||||||
</BuildMacro>
|
|
||||||
<BuildMacro Include="SvnCommonDir">
|
|
||||||
<Value>$(SvnCommonDir)</Value>
|
|
||||||
</BuildMacro>
|
|
||||||
<BuildMacro Include="PcsxSubsection">
|
|
||||||
<Value>$(PcsxSubsection)</Value>
|
|
||||||
</BuildMacro>
|
|
||||||
</ItemGroup>
|
|
||||||
</Project>
|
|
|
@ -1,27 +0,0 @@
|
||||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<PropertyGroup>
|
|
||||||
<_PropertySheetDisplayName>common</_PropertySheetDisplayName>
|
|
||||||
<OutDir>..\..\bin\plugins\</OutDir>
|
|
||||||
<IntDir>$(PlatformName)\$(Configuration)\</IntDir>
|
|
||||||
<TargetName>$(ProjectName)</TargetName>
|
|
||||||
<TargetExt>.dll</TargetExt>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemDefinitionGroup>
|
|
||||||
<ClCompile>
|
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
|
||||||
<PreprocessorDefinitions>WIN32;_WINDOWS;_WIN32_WINNT=0x500;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<FloatingPointModel>Fast</FloatingPointModel>
|
|
||||||
<RuntimeTypeInfo>false</RuntimeTypeInfo>
|
|
||||||
<WarningLevel>Level4</WarningLevel>
|
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
|
||||||
<DisableSpecificWarnings>4995;4324;%(DisableSpecificWarnings)</DisableSpecificWarnings>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<AdditionalDependencies>d3d10.lib;d3dx10.lib;d3d9.lib;d3dx9.lib;ddraw.lib;dxguid.lib;winmm.lib;strmiids.lib;xinput.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
|
||||||
<DelayLoadDLLs>d3d9.dll;d3dx9_40.dll;d3d10.dll;d3dx10_40.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
|
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
|
||||||
<SubSystem>Windows</SubSystem>
|
|
||||||
<RandomizedBaseAddress>false</RandomizedBaseAddress>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
</Project>
|
|
|
@ -1,15 +0,0 @@
|
||||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<PropertyGroup>
|
|
||||||
<_PropertySheetDisplayName>debug</_PropertySheetDisplayName>
|
|
||||||
<LinkIncremental>true</LinkIncremental>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemDefinitionGroup>
|
|
||||||
<ClCompile>
|
|
||||||
<Optimization>Disabled</Optimization>
|
|
||||||
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<MinimalRebuild>true</MinimalRebuild>
|
|
||||||
<BasicRuntimeChecks>StackFrameRuntimeCheck</BasicRuntimeChecks>
|
|
||||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
|
||||||
</ClCompile>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
</Project>
|
|
|
@ -1,24 +0,0 @@
|
||||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<PropertyGroup>
|
|
||||||
<_PropertySheetDisplayName>release</_PropertySheetDisplayName>
|
|
||||||
<LinkIncremental>false</LinkIncremental>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemDefinitionGroup>
|
|
||||||
<ClCompile>
|
|
||||||
<Optimization>MaxSpeed</Optimization>
|
|
||||||
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
|
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
|
||||||
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
|
||||||
<OmitFramePointers>true</OmitFramePointers>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
<PreprocessorDefinitions>NDEBUG;_SECURE_SCL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<StringPooling>true</StringPooling>
|
|
||||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
|
||||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
|
||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
</Project>
|
|
|
@ -1,11 +0,0 @@
|
||||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<PropertyGroup>
|
|
||||||
<_PropertySheetDisplayName>sse2</_PropertySheetDisplayName>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemDefinitionGroup>
|
|
||||||
<ClCompile>
|
|
||||||
<EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
|
|
||||||
<PreprocessorDefinitions>_M_SSE=0x200;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
</ClCompile>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
</Project>
|
|
|
@ -1,11 +0,0 @@
|
||||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<PropertyGroup>
|
|
||||||
<_PropertySheetDisplayName>sse4</_PropertySheetDisplayName>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemDefinitionGroup>
|
|
||||||
<ClCompile>
|
|
||||||
<PreprocessorDefinitions>_M_SSE=0x401;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
|
|
||||||
</ClCompile>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
</Project>
|
|
|
@ -1,11 +0,0 @@
|
||||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<PropertyGroup>
|
|
||||||
<_PropertySheetDisplayName>sse3</_PropertySheetDisplayName>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemDefinitionGroup>
|
|
||||||
<ClCompile>
|
|
||||||
<EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
|
|
||||||
<PreprocessorDefinitions>_M_SSE=0x301;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
</ClCompile>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
</Project>
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ImportGroup Label="PropertySheets" />
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<_PropertySheetDisplayName>xpad</_PropertySheetDisplayName>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup>
|
||||||
|
<Link>
|
||||||
|
<AdditionalDependencies>xinput.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
</Link>
|
||||||
|
<PreBuildEvent>
|
||||||
|
<Command>"$(SolutionDir)common\vsprops\preBuild.cmd" "$(ProjectDir)."</Command>
|
||||||
|
</PreBuildEvent>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup />
|
||||||
|
</Project>
|
|
@ -0,0 +1,103 @@
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="4.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="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectName>xpad</ProjectName>
|
||||||
|
<ProjectGUID>{6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}</ProjectGUID>
|
||||||
|
<RootNamespace>xpad</RootNamespace>
|
||||||
|
<Keyword>Win32Proj</Keyword>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<UseOfMfc>false</UseOfMfc>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<UseOfMfc>false</UseOfMfc>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets">
|
||||||
|
<Import Project="$(LocalAppData)\Microsoft\VisualStudio\10.0\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(LocalAppData)\Microsoft\VisualStudio\10.0\Microsoft.Cpp.$(Platform).user.props')" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<Import Project="..\..\common\vsprops\plugin.props" />
|
||||||
|
<Import Project="..\..\common\vsprops\common.props" />
|
||||||
|
<Import Project="..\..\common\vsprops\debug.props" />
|
||||||
|
<Import Project="xpad.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<Import Project="..\..\common\vsprops\plugin.props" />
|
||||||
|
<Import Project="..\..\common\vsprops\common.props" />
|
||||||
|
<Import Project="..\..\common\vsprops\release.props" />
|
||||||
|
<Import Project="xpad.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<_ProjectFileVersion>10.0.20506.1</_ProjectFileVersion>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<ModuleDefinitionFile>.\xpad.def</ModuleDefinitionFile>
|
||||||
|
<DelayLoadDLLs>%(DelayLoadDLLs)</DelayLoadDLLs>
|
||||||
|
<DataExecutionPrevention>
|
||||||
|
</DataExecutionPrevention>
|
||||||
|
<TargetMachine>MachineX86</TargetMachine>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<ModuleDefinitionFile>.\xpad.def</ModuleDefinitionFile>
|
||||||
|
<DelayLoadDLLs>%(DelayLoadDLLs)</DelayLoadDLLs>
|
||||||
|
<DataExecutionPrevention>
|
||||||
|
</DataExecutionPrevention>
|
||||||
|
<TargetMachine>MachineX86</TargetMachine>
|
||||||
|
</Link>
|
||||||
|
<PreBuildEvent>
|
||||||
|
<Message>
|
||||||
|
</Message>
|
||||||
|
</PreBuildEvent>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="stdafx.cpp">
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="xpad.cpp" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="resource.h" />
|
||||||
|
<ClInclude Include="stdafx.h" />
|
||||||
|
<ClInclude Include="svnrev.h" />
|
||||||
|
<ClInclude Include="xpad.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ResourceCompile Include="xpad.rc" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="res\xpad.rc2" />
|
||||||
|
<None Include="xpad.def" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
|
@ -1,577 +0,0 @@
|
||||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<ItemGroup Label="ProjectConfigurations">
|
|
||||||
<ProjectConfiguration Include="Debug SSE2|Win32">
|
|
||||||
<Configuration>Debug SSE2</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Debug SSE2|Win32">
|
|
||||||
<Configuration>Debug SSE2</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Debug SSE2|x64">
|
|
||||||
<Configuration>Debug SSE2</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Debug SSE2|x64">
|
|
||||||
<Configuration>Debug SSE2</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Debug SSE4|Win32">
|
|
||||||
<Configuration>Debug SSE4</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Debug SSE4|Win32">
|
|
||||||
<Configuration>Debug SSE4</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Debug SSE4|x64">
|
|
||||||
<Configuration>Debug SSE4</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Debug SSE4|x64">
|
|
||||||
<Configuration>Debug SSE4</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Debug SSSE3|Win32">
|
|
||||||
<Configuration>Debug SSSE3</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Debug SSSE3|Win32">
|
|
||||||
<Configuration>Debug SSSE3</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Debug SSSE3|x64">
|
|
||||||
<Configuration>Debug SSSE3</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Debug SSSE3|x64">
|
|
||||||
<Configuration>Debug SSSE3</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Debug|Win32">
|
|
||||||
<Configuration>Debug</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Debug|Win32">
|
|
||||||
<Configuration>Debug</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Debug|x64">
|
|
||||||
<Configuration>Debug</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Debug|x64">
|
|
||||||
<Configuration>Debug</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release SSE2|Win32">
|
|
||||||
<Configuration>Release SSE2</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release SSE2|Win32">
|
|
||||||
<Configuration>Release SSE2</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release SSE2|x64">
|
|
||||||
<Configuration>Release SSE2</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release SSE2|x64">
|
|
||||||
<Configuration>Release SSE2</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release SSE4|Win32">
|
|
||||||
<Configuration>Release SSE4</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release SSE4|Win32">
|
|
||||||
<Configuration>Release SSE4</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release SSE4|x64">
|
|
||||||
<Configuration>Release SSE4</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release SSE4|x64">
|
|
||||||
<Configuration>Release SSE4</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release SSSE3|Win32">
|
|
||||||
<Configuration>Release SSSE3</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release SSSE3|Win32">
|
|
||||||
<Configuration>Release SSSE3</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release SSSE3|x64">
|
|
||||||
<Configuration>Release SSSE3</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release SSSE3|x64">
|
|
||||||
<Configuration>Release SSSE3</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release|Win32">
|
|
||||||
<Configuration>Release</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release|Win32">
|
|
||||||
<Configuration>Release</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release|x64">
|
|
||||||
<Configuration>Release</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release|x64">
|
|
||||||
<Configuration>Release</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
</ItemGroup>
|
|
||||||
<PropertyGroup Label="Globals">
|
|
||||||
<ProjectName>xpad</ProjectName>
|
|
||||||
<ProjectGUID>{6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}</ProjectGUID>
|
|
||||||
<RootNamespace>xpad</RootNamespace>
|
|
||||||
<Keyword>Win32Proj</Keyword>
|
|
||||||
</PropertyGroup>
|
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<UseOfMfc>false</UseOfMfc>
|
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<UseOfMfc>false</UseOfMfc>
|
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|X64'">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<UseOfMfc>Static</UseOfMfc>
|
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|X64'">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<UseOfMfc>Static</UseOfMfc>
|
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug SSE2|Win32'">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<UseOfMfc>false</UseOfMfc>
|
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug SSE2|X64'">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<UseOfMfc>Static</UseOfMfc>
|
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
|
||||||
<WholeProgramOptimization>false</WholeProgramOptimization>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release SSE2|Win32'">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<UseOfMfc>false</UseOfMfc>
|
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release SSE2|X64'">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<UseOfMfc>Static</UseOfMfc>
|
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release SSSE3|Win32'">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<UseOfMfc>false</UseOfMfc>
|
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release SSSE3|X64'">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<UseOfMfc>Static</UseOfMfc>
|
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug SSSE3|Win32'">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<UseOfMfc>false</UseOfMfc>
|
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug SSSE3|X64'">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<UseOfMfc>Static</UseOfMfc>
|
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug SSE4|Win32'">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<UseOfMfc>false</UseOfMfc>
|
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug SSE4|X64'">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<UseOfMfc>Static</UseOfMfc>
|
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release SSE4|Win32'">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<UseOfMfc>false</UseOfMfc>
|
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release SSE4|X64'">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<UseOfMfc>Static</UseOfMfc>
|
|
||||||
<CharacterSet>MultiByte</CharacterSet>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
</PropertyGroup>
|
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
|
||||||
<ImportGroup Label="ExtensionSettings">
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Label="PropertySheets">
|
|
||||||
<Import Project="$(LocalAppData)\Microsoft\VisualStudio\10.0\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(LocalAppData)\Microsoft\VisualStudio\10.0\Microsoft.Cpp.$(Platform).user.props')" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
|
||||||
<Import Project="vsprops\common.props" Condition="exists('.\vsprops\common.props')" />
|
|
||||||
<Import Project="vsprops\ProjectRootDir.props" Condition="exists('.\vsprops\ProjectRootDir.props')" />
|
|
||||||
<Import Project="..\..\common\vsprops\BaseProperties.props" Condition="exists('..\..\common\vsprops\BaseProperties.props')" />
|
|
||||||
<Import Project="vsprops\debug.props" Condition="exists('.\vsprops\debug.props')" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|X64'">
|
|
||||||
<Import Project="vsprops\common.props" Condition="exists('.\vsprops\common.props')" />
|
|
||||||
<Import Project="vsprops\ProjectRootDir.props" Condition="exists('.\vsprops\ProjectRootDir.props')" />
|
|
||||||
<Import Project="..\..\common\vsprops\BaseProperties.props" Condition="exists('..\..\common\vsprops\BaseProperties.props')" />
|
|
||||||
<Import Project="vsprops\debug.props" Condition="exists('.\vsprops\debug.props')" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
|
||||||
<Import Project="vsprops\common.props" Condition="exists('.\vsprops\common.props')" />
|
|
||||||
<Import Project="vsprops\ProjectRootDir.props" Condition="exists('.\vsprops\ProjectRootDir.props')" />
|
|
||||||
<Import Project="..\..\common\vsprops\BaseProperties.props" Condition="exists('..\..\common\vsprops\BaseProperties.props')" />
|
|
||||||
<Import Project="vsprops\release.props" Condition="exists('.\vsprops\release.props')" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|X64'">
|
|
||||||
<Import Project="vsprops\common.props" Condition="exists('.\vsprops\common.props')" />
|
|
||||||
<Import Project="vsprops\ProjectRootDir.props" Condition="exists('.\vsprops\ProjectRootDir.props')" />
|
|
||||||
<Import Project="..\..\common\vsprops\BaseProperties.props" Condition="exists('..\..\common\vsprops\BaseProperties.props')" />
|
|
||||||
<Import Project="vsprops\release.props" Condition="exists('.\vsprops\release.props')" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug SSE2|Win32'">
|
|
||||||
<Import Project="vsprops\common.props" Condition="exists('.\vsprops\common.props')" />
|
|
||||||
<Import Project="vsprops\ProjectRootDir.props" Condition="exists('.\vsprops\ProjectRootDir.props')" />
|
|
||||||
<Import Project="..\..\common\vsprops\BaseProperties.props" Condition="exists('..\..\common\vsprops\BaseProperties.props')" />
|
|
||||||
<Import Project="vsprops\debug.props" Condition="exists('.\vsprops\debug.props')" />
|
|
||||||
<Import Project="vsprops\sse2.props" Condition="exists('.\vsprops\sse2.props')" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug SSE2|X64'">
|
|
||||||
<Import Project="vsprops\common.props" Condition="exists('.\vsprops\common.props')" />
|
|
||||||
<Import Project="vsprops\ProjectRootDir.props" Condition="exists('.\vsprops\ProjectRootDir.props')" />
|
|
||||||
<Import Project="..\..\common\vsprops\BaseProperties.props" Condition="exists('..\..\common\vsprops\BaseProperties.props')" />
|
|
||||||
<Import Project="vsprops\debug.props" Condition="exists('.\vsprops\debug.props')" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release SSE2|Win32'">
|
|
||||||
<Import Project="vsprops\common.props" Condition="exists('.\vsprops\common.props')" />
|
|
||||||
<Import Project="vsprops\ProjectRootDir.props" Condition="exists('.\vsprops\ProjectRootDir.props')" />
|
|
||||||
<Import Project="..\..\common\vsprops\BaseProperties.props" Condition="exists('..\..\common\vsprops\BaseProperties.props')" />
|
|
||||||
<Import Project="vsprops\release.props" Condition="exists('.\vsprops\release.props')" />
|
|
||||||
<Import Project="vsprops\sse2.props" Condition="exists('.\vsprops\sse2.props')" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release SSE2|X64'">
|
|
||||||
<Import Project="vsprops\common.props" Condition="exists('.\vsprops\common.props')" />
|
|
||||||
<Import Project="vsprops\ProjectRootDir.props" Condition="exists('.\vsprops\ProjectRootDir.props')" />
|
|
||||||
<Import Project="..\..\common\vsprops\BaseProperties.props" Condition="exists('..\..\common\vsprops\BaseProperties.props')" />
|
|
||||||
<Import Project="vsprops\release.props" Condition="exists('.\vsprops\release.props')" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release SSSE3|Win32'">
|
|
||||||
<Import Project="vsprops\common.props" Condition="exists('.\vsprops\common.props')" />
|
|
||||||
<Import Project="vsprops\ProjectRootDir.props" Condition="exists('.\vsprops\ProjectRootDir.props')" />
|
|
||||||
<Import Project="..\..\common\vsprops\BaseProperties.props" Condition="exists('..\..\common\vsprops\BaseProperties.props')" />
|
|
||||||
<Import Project="vsprops\release.props" Condition="exists('.\vsprops\release.props')" />
|
|
||||||
<Import Project="vsprops\sse2.props" Condition="exists('.\vsprops\sse2.props')" />
|
|
||||||
<Import Project="vsprops\ssse3.props" Condition="exists('.\vsprops\ssse3.props')" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release SSSE3|X64'">
|
|
||||||
<Import Project="vsprops\common.props" Condition="exists('.\vsprops\common.props')" />
|
|
||||||
<Import Project="vsprops\ProjectRootDir.props" Condition="exists('.\vsprops\ProjectRootDir.props')" />
|
|
||||||
<Import Project="..\..\common\vsprops\BaseProperties.props" Condition="exists('..\..\common\vsprops\BaseProperties.props')" />
|
|
||||||
<Import Project="vsprops\release.props" Condition="exists('.\vsprops\release.props')" />
|
|
||||||
<Import Project="vsprops\ssse3.props" Condition="exists('.\vsprops\ssse3.props')" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug SSSE3|Win32'">
|
|
||||||
<Import Project="vsprops\common.props" Condition="exists('.\vsprops\common.props')" />
|
|
||||||
<Import Project="vsprops\ProjectRootDir.props" Condition="exists('.\vsprops\ProjectRootDir.props')" />
|
|
||||||
<Import Project="..\..\common\vsprops\BaseProperties.props" Condition="exists('..\..\common\vsprops\BaseProperties.props')" />
|
|
||||||
<Import Project="vsprops\debug.props" Condition="exists('.\vsprops\debug.props')" />
|
|
||||||
<Import Project="vsprops\sse2.props" Condition="exists('.\vsprops\sse2.props')" />
|
|
||||||
<Import Project="vsprops\ssse3.props" Condition="exists('.\vsprops\ssse3.props')" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug SSSE3|X64'">
|
|
||||||
<Import Project="vsprops\common.props" Condition="exists('.\vsprops\common.props')" />
|
|
||||||
<Import Project="vsprops\ProjectRootDir.props" Condition="exists('.\vsprops\ProjectRootDir.props')" />
|
|
||||||
<Import Project="..\..\common\vsprops\BaseProperties.props" Condition="exists('..\..\common\vsprops\BaseProperties.props')" />
|
|
||||||
<Import Project="vsprops\debug.props" Condition="exists('.\vsprops\debug.props')" />
|
|
||||||
<Import Project="vsprops\ssse3.props" Condition="exists('.\vsprops\ssse3.props')" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug SSE4|Win32'">
|
|
||||||
<Import Project="vsprops\common.props" Condition="exists('.\vsprops\common.props')" />
|
|
||||||
<Import Project="vsprops\ProjectRootDir.props" Condition="exists('.\vsprops\ProjectRootDir.props')" />
|
|
||||||
<Import Project="..\..\common\vsprops\BaseProperties.props" Condition="exists('..\..\common\vsprops\BaseProperties.props')" />
|
|
||||||
<Import Project="vsprops\debug.props" Condition="exists('.\vsprops\debug.props')" />
|
|
||||||
<Import Project="vsprops\sse2.props" Condition="exists('.\vsprops\sse2.props')" />
|
|
||||||
<Import Project="vsprops\sse4.props" Condition="exists('.\vsprops\sse4.props')" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug SSE4|X64'">
|
|
||||||
<Import Project="vsprops\common.props" Condition="exists('.\vsprops\common.props')" />
|
|
||||||
<Import Project="vsprops\ProjectRootDir.props" Condition="exists('.\vsprops\ProjectRootDir.props')" />
|
|
||||||
<Import Project="..\..\common\vsprops\BaseProperties.props" Condition="exists('..\..\common\vsprops\BaseProperties.props')" />
|
|
||||||
<Import Project="vsprops\debug.props" Condition="exists('.\vsprops\debug.props')" />
|
|
||||||
<Import Project="vsprops\sse4.props" Condition="exists('.\vsprops\sse4.props')" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release SSE4|Win32'">
|
|
||||||
<Import Project="vsprops\common.props" Condition="exists('.\vsprops\common.props')" />
|
|
||||||
<Import Project="vsprops\ProjectRootDir.props" Condition="exists('.\vsprops\ProjectRootDir.props')" />
|
|
||||||
<Import Project="..\..\common\vsprops\BaseProperties.props" Condition="exists('..\..\common\vsprops\BaseProperties.props')" />
|
|
||||||
<Import Project="vsprops\release.props" Condition="exists('.\vsprops\release.props')" />
|
|
||||||
<Import Project="vsprops\sse2.props" Condition="exists('.\vsprops\sse2.props')" />
|
|
||||||
<Import Project="vsprops\sse4.props" Condition="exists('.\vsprops\sse4.props')" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release SSE4|X64'">
|
|
||||||
<Import Project="vsprops\common.props" Condition="exists('.\vsprops\common.props')" />
|
|
||||||
<Import Project="vsprops\ProjectRootDir.props" Condition="exists('.\vsprops\ProjectRootDir.props')" />
|
|
||||||
<Import Project="..\..\common\vsprops\BaseProperties.props" Condition="exists('..\..\common\vsprops\BaseProperties.props')" />
|
|
||||||
<Import Project="vsprops\release.props" Condition="exists('.\vsprops\release.props')" />
|
|
||||||
<Import Project="vsprops\sse4.props" Condition="exists('.\vsprops\sse4.props')" />
|
|
||||||
</ImportGroup>
|
|
||||||
<PropertyGroup Label="UserMacros" />
|
|
||||||
<PropertyGroup>
|
|
||||||
<_ProjectFileVersion>10.0.20506.1</_ProjectFileVersion>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
|
||||||
<ClCompile>
|
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<ModuleDefinitionFile>.\xpad.def</ModuleDefinitionFile>
|
|
||||||
<DelayLoadDLLs>%(DelayLoadDLLs)</DelayLoadDLLs>
|
|
||||||
<DataExecutionPrevention>
|
|
||||||
</DataExecutionPrevention>
|
|
||||||
<TargetMachine>MachineX86</TargetMachine>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|X64'">
|
|
||||||
<Midl>
|
|
||||||
<TargetEnvironment>X64</TargetEnvironment>
|
|
||||||
</Midl>
|
|
||||||
<ClCompile>
|
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<ModuleDefinitionFile>
|
|
||||||
</ModuleDefinitionFile>
|
|
||||||
<DataExecutionPrevention>
|
|
||||||
</DataExecutionPrevention>
|
|
||||||
<TargetMachine>MachineX64</TargetMachine>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
|
||||||
<ClCompile>
|
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<ModuleDefinitionFile>.\xpad.def</ModuleDefinitionFile>
|
|
||||||
<DelayLoadDLLs>%(DelayLoadDLLs)</DelayLoadDLLs>
|
|
||||||
<DataExecutionPrevention>
|
|
||||||
</DataExecutionPrevention>
|
|
||||||
<TargetMachine>MachineX86</TargetMachine>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|X64'">
|
|
||||||
<Midl>
|
|
||||||
<TargetEnvironment>X64</TargetEnvironment>
|
|
||||||
</Midl>
|
|
||||||
<ClCompile>
|
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<ModuleDefinitionFile>
|
|
||||||
</ModuleDefinitionFile>
|
|
||||||
<DataExecutionPrevention>
|
|
||||||
</DataExecutionPrevention>
|
|
||||||
<TargetMachine>MachineX64</TargetMachine>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug SSE2|Win32'">
|
|
||||||
<ClCompile>
|
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<ModuleDefinitionFile>.\xpad.def</ModuleDefinitionFile>
|
|
||||||
<DelayLoadDLLs>%(DelayLoadDLLs)</DelayLoadDLLs>
|
|
||||||
<DataExecutionPrevention>
|
|
||||||
</DataExecutionPrevention>
|
|
||||||
<TargetMachine>MachineX86</TargetMachine>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug SSE2|X64'">
|
|
||||||
<ClCompile>
|
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<DataExecutionPrevention>
|
|
||||||
</DataExecutionPrevention>
|
|
||||||
<TargetMachine>MachineX64</TargetMachine>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release SSE2|Win32'">
|
|
||||||
<ClCompile>
|
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<ModuleDefinitionFile>.\xpad.def</ModuleDefinitionFile>
|
|
||||||
<DelayLoadDLLs>%(DelayLoadDLLs)</DelayLoadDLLs>
|
|
||||||
<DataExecutionPrevention>
|
|
||||||
</DataExecutionPrevention>
|
|
||||||
<TargetMachine>MachineX86</TargetMachine>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release SSE2|X64'">
|
|
||||||
<ClCompile>
|
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<DataExecutionPrevention>
|
|
||||||
</DataExecutionPrevention>
|
|
||||||
<TargetMachine>MachineX64</TargetMachine>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release SSSE3|Win32'">
|
|
||||||
<ClCompile>
|
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<ModuleDefinitionFile>.\xpad.def</ModuleDefinitionFile>
|
|
||||||
<DelayLoadDLLs>%(DelayLoadDLLs)</DelayLoadDLLs>
|
|
||||||
<DataExecutionPrevention>
|
|
||||||
</DataExecutionPrevention>
|
|
||||||
<TargetMachine>MachineX86</TargetMachine>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release SSSE3|X64'">
|
|
||||||
<ClCompile>
|
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<DataExecutionPrevention>
|
|
||||||
</DataExecutionPrevention>
|
|
||||||
<TargetMachine>MachineX64</TargetMachine>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug SSSE3|Win32'">
|
|
||||||
<ClCompile>
|
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<ModuleDefinitionFile>.\xpad.def</ModuleDefinitionFile>
|
|
||||||
<DelayLoadDLLs>%(DelayLoadDLLs)</DelayLoadDLLs>
|
|
||||||
<DataExecutionPrevention>
|
|
||||||
</DataExecutionPrevention>
|
|
||||||
<TargetMachine>MachineX86</TargetMachine>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug SSSE3|X64'">
|
|
||||||
<ClCompile>
|
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<DataExecutionPrevention>
|
|
||||||
</DataExecutionPrevention>
|
|
||||||
<TargetMachine>MachineX64</TargetMachine>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug SSE4|Win32'">
|
|
||||||
<ClCompile>
|
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<ModuleDefinitionFile>.\xpad.def</ModuleDefinitionFile>
|
|
||||||
<DelayLoadDLLs>%(DelayLoadDLLs)</DelayLoadDLLs>
|
|
||||||
<DataExecutionPrevention>
|
|
||||||
</DataExecutionPrevention>
|
|
||||||
<TargetMachine>MachineX86</TargetMachine>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug SSE4|X64'">
|
|
||||||
<Midl>
|
|
||||||
<TargetEnvironment>X64</TargetEnvironment>
|
|
||||||
</Midl>
|
|
||||||
<ClCompile>
|
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<DataExecutionPrevention>
|
|
||||||
</DataExecutionPrevention>
|
|
||||||
<TargetMachine>MachineX64</TargetMachine>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release SSE4|Win32'">
|
|
||||||
<ClCompile>
|
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<ModuleDefinitionFile>.\xpad.def</ModuleDefinitionFile>
|
|
||||||
<DelayLoadDLLs>%(DelayLoadDLLs)</DelayLoadDLLs>
|
|
||||||
<DataExecutionPrevention>
|
|
||||||
</DataExecutionPrevention>
|
|
||||||
<TargetMachine>MachineX86</TargetMachine>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release SSE4|X64'">
|
|
||||||
<Midl>
|
|
||||||
<TargetEnvironment>X64</TargetEnvironment>
|
|
||||||
</Midl>
|
|
||||||
<ClCompile>
|
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<DataExecutionPrevention>
|
|
||||||
</DataExecutionPrevention>
|
|
||||||
<TargetMachine>MachineX64</TargetMachine>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ClCompile Include="stdafx.cpp">
|
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|X64'">Create</PrecompiledHeader>
|
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
|
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|X64'">Create</PrecompiledHeader>
|
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug SSE2|Win32'">Create</PrecompiledHeader>
|
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug SSE2|X64'">Create</PrecompiledHeader>
|
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release SSE2|Win32'">Create</PrecompiledHeader>
|
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release SSE2|X64'">Create</PrecompiledHeader>
|
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release SSSE3|Win32'">Create</PrecompiledHeader>
|
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release SSSE3|X64'">Create</PrecompiledHeader>
|
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug SSSE3|Win32'">Create</PrecompiledHeader>
|
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug SSSE3|X64'">Create</PrecompiledHeader>
|
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug SSE4|Win32'">Create</PrecompiledHeader>
|
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug SSE4|X64'">Create</PrecompiledHeader>
|
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release SSE4|Win32'">Create</PrecompiledHeader>
|
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release SSE4|X64'">Create</PrecompiledHeader>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="xpad.cpp" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ClInclude Include="resource.h" />
|
|
||||||
<ClInclude Include="stdafx.h" />
|
|
||||||
<ClInclude Include="svnrev.h" />
|
|
||||||
<ClInclude Include="xpad.h" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ResourceCompile Include="xpad.rc" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<None Include="res\xpad.rc2" />
|
|
||||||
<None Include="xpad.def" />
|
|
||||||
</ItemGroup>
|
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
|
||||||
<ImportGroup Label="ExtensionTargets">
|
|
||||||
</ImportGroup>
|
|
||||||
</Project>
|
|
|
@ -1,6 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<PropertyGroup>
|
|
||||||
<Globals_RESOURCE_FILE>xpad.rc</Globals_RESOURCE_FILE>
|
|
||||||
</PropertyGroup>
|
|
||||||
</Project>
|
|
Loading…
Reference in New Issue