diff --git a/.gitmodules b/.gitmodules
index c0e5ff063..bfb466842 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -10,7 +10,3 @@
[submodule "import/XbSymbolDatabase"]
path = import/XbSymbolDatabase
url = https://github.com/Cxbx-Reloaded/XbSymbolDatabase.git
-[submodule "SDL-mirror"]
- path = import/SDL-mirror
- url = https://github.com/spurious/SDL-mirror
- branch = release-2.0.8
diff --git a/build/win32/Cxbx.sln b/build/win32/Cxbx.sln
index bbb26e36f..e9955397a 100644
--- a/build/win32/Cxbx.sln
+++ b/build/win32/Cxbx.sln
@@ -26,18 +26,11 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "XbSymbolDatabase", "..\..\i
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CxbxVSBC", "CxbxVSBC.vcxproj", "{EFA81330-D410-4232-9A0C-1D8B91B6FFFF}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SDL2", "..\..\import\SDL-mirror\VisualC\SDL\SDL.vcxproj", "{81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SDL2main", "..\..\import\SDL-mirror\VisualC\SDLmain\SDLmain.vcxproj", "{DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}"
-EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug_Direct3D9|Any CPU = Debug_Direct3D9|Any CPU
Debug_Direct3D9|Win32 = Debug_Direct3D9|Win32
Debug_Direct3D9|x64 = Debug_Direct3D9|x64
- Debug_USB_Packets|Any CPU = Debug_USB_Packets|Any CPU
- Debug_USB_Packets|Win32 = Debug_USB_Packets|Win32
- Debug_USB_Packets|x64 = Debug_USB_Packets|x64
Debug|Any CPU = Debug|Any CPU
Debug|Win32 = Debug|Win32
Debug|x64 = Debug|x64
@@ -50,11 +43,6 @@ Global
{E7A72D3D-5810-4078-A243-348B59726365}.Debug_Direct3D9|Win32.ActiveCfg = Debug_Direct3D9|Win32
{E7A72D3D-5810-4078-A243-348B59726365}.Debug_Direct3D9|Win32.Build.0 = Debug_Direct3D9|Win32
{E7A72D3D-5810-4078-A243-348B59726365}.Debug_Direct3D9|x64.ActiveCfg = Debug|Win32
- {E7A72D3D-5810-4078-A243-348B59726365}.Debug_USB_Packets|Any CPU.ActiveCfg = Debug_USB_Packets|Win32
- {E7A72D3D-5810-4078-A243-348B59726365}.Debug_USB_Packets|Any CPU.Build.0 = Debug_USB_Packets|Win32
- {E7A72D3D-5810-4078-A243-348B59726365}.Debug_USB_Packets|Win32.ActiveCfg = Debug_USB_Packets|Win32
- {E7A72D3D-5810-4078-A243-348B59726365}.Debug_USB_Packets|Win32.Build.0 = Debug_USB_Packets|Win32
- {E7A72D3D-5810-4078-A243-348B59726365}.Debug_USB_Packets|x64.ActiveCfg = Debug|Win32
{E7A72D3D-5810-4078-A243-348B59726365}.Debug|Any CPU.ActiveCfg = Debug|Win32
{E7A72D3D-5810-4078-A243-348B59726365}.Debug|Win32.ActiveCfg = Debug|Win32
{E7A72D3D-5810-4078-A243-348B59726365}.Debug|Win32.Build.0 = Debug|Win32
@@ -68,12 +56,6 @@ Global
{CD2DDE93-B45E-4D11-876D-D0056C3DD407}.Debug_Direct3D9|Win32.Build.0 = Debug|Win32
{CD2DDE93-B45E-4D11-876D-D0056C3DD407}.Debug_Direct3D9|x64.ActiveCfg = Debug|x64
{CD2DDE93-B45E-4D11-876D-D0056C3DD407}.Debug_Direct3D9|x64.Build.0 = Debug|x64
- {CD2DDE93-B45E-4D11-876D-D0056C3DD407}.Debug_USB_Packets|Any CPU.ActiveCfg = Debug|Win32
- {CD2DDE93-B45E-4D11-876D-D0056C3DD407}.Debug_USB_Packets|Any CPU.Build.0 = Debug|Win32
- {CD2DDE93-B45E-4D11-876D-D0056C3DD407}.Debug_USB_Packets|Win32.ActiveCfg = Debug|Win32
- {CD2DDE93-B45E-4D11-876D-D0056C3DD407}.Debug_USB_Packets|Win32.Build.0 = Debug|Win32
- {CD2DDE93-B45E-4D11-876D-D0056C3DD407}.Debug_USB_Packets|x64.ActiveCfg = Debug|x64
- {CD2DDE93-B45E-4D11-876D-D0056C3DD407}.Debug_USB_Packets|x64.Build.0 = Debug|x64
{CD2DDE93-B45E-4D11-876D-D0056C3DD407}.Debug|Any CPU.ActiveCfg = Debug|Win32
{CD2DDE93-B45E-4D11-876D-D0056C3DD407}.Debug|Win32.ActiveCfg = Debug|Win32
{CD2DDE93-B45E-4D11-876D-D0056C3DD407}.Debug|Win32.Build.0 = Debug|Win32
@@ -89,11 +71,6 @@ Global
{4A68E962-3805-4376-99D3-0AC59E9BEE69}.Debug_Direct3D9|Win32.ActiveCfg = Debug|Any CPU
{4A68E962-3805-4376-99D3-0AC59E9BEE69}.Debug_Direct3D9|x64.ActiveCfg = Debug|Any CPU
{4A68E962-3805-4376-99D3-0AC59E9BEE69}.Debug_Direct3D9|x64.Build.0 = Debug|Any CPU
- {4A68E962-3805-4376-99D3-0AC59E9BEE69}.Debug_USB_Packets|Any CPU.ActiveCfg = Debug|Any CPU
- {4A68E962-3805-4376-99D3-0AC59E9BEE69}.Debug_USB_Packets|Any CPU.Build.0 = Debug|Any CPU
- {4A68E962-3805-4376-99D3-0AC59E9BEE69}.Debug_USB_Packets|Win32.ActiveCfg = Debug|Any CPU
- {4A68E962-3805-4376-99D3-0AC59E9BEE69}.Debug_USB_Packets|x64.ActiveCfg = Debug|Any CPU
- {4A68E962-3805-4376-99D3-0AC59E9BEE69}.Debug_USB_Packets|x64.Build.0 = Debug|Any CPU
{4A68E962-3805-4376-99D3-0AC59E9BEE69}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4A68E962-3805-4376-99D3-0AC59E9BEE69}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4A68E962-3805-4376-99D3-0AC59E9BEE69}.Debug|Win32.ActiveCfg = Debug|Any CPU
@@ -109,11 +86,6 @@ Global
{9131B025-5019-4DEE-84A3-86D2703A81C0}.Debug_Direct3D9|Win32.ActiveCfg = Debug|Any CPU
{9131B025-5019-4DEE-84A3-86D2703A81C0}.Debug_Direct3D9|x64.ActiveCfg = Debug|Any CPU
{9131B025-5019-4DEE-84A3-86D2703A81C0}.Debug_Direct3D9|x64.Build.0 = Debug|Any CPU
- {9131B025-5019-4DEE-84A3-86D2703A81C0}.Debug_USB_Packets|Any CPU.ActiveCfg = Debug|Any CPU
- {9131B025-5019-4DEE-84A3-86D2703A81C0}.Debug_USB_Packets|Any CPU.Build.0 = Debug|Any CPU
- {9131B025-5019-4DEE-84A3-86D2703A81C0}.Debug_USB_Packets|Win32.ActiveCfg = Debug|Any CPU
- {9131B025-5019-4DEE-84A3-86D2703A81C0}.Debug_USB_Packets|x64.ActiveCfg = Debug|Any CPU
- {9131B025-5019-4DEE-84A3-86D2703A81C0}.Debug_USB_Packets|x64.Build.0 = Debug|Any CPU
{9131B025-5019-4DEE-84A3-86D2703A81C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9131B025-5019-4DEE-84A3-86D2703A81C0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9131B025-5019-4DEE-84A3-86D2703A81C0}.Debug|Win32.ActiveCfg = Debug|Any CPU
@@ -129,11 +101,6 @@ Global
{2171C0E8-4915-49B9-AC23-A484FA08C126}.Debug_Direct3D9|Win32.Build.0 = Debug|Win32
{2171C0E8-4915-49B9-AC23-A484FA08C126}.Debug_Direct3D9|x64.ActiveCfg = Debug|x64
{2171C0E8-4915-49B9-AC23-A484FA08C126}.Debug_Direct3D9|x64.Build.0 = Debug|x64
- {2171C0E8-4915-49B9-AC23-A484FA08C126}.Debug_USB_Packets|Any CPU.ActiveCfg = Debug|Win32
- {2171C0E8-4915-49B9-AC23-A484FA08C126}.Debug_USB_Packets|Win32.ActiveCfg = Debug|Win32
- {2171C0E8-4915-49B9-AC23-A484FA08C126}.Debug_USB_Packets|Win32.Build.0 = Debug|Win32
- {2171C0E8-4915-49B9-AC23-A484FA08C126}.Debug_USB_Packets|x64.ActiveCfg = Debug|x64
- {2171C0E8-4915-49B9-AC23-A484FA08C126}.Debug_USB_Packets|x64.Build.0 = Debug|x64
{2171C0E8-4915-49B9-AC23-A484FA08C126}.Debug|Any CPU.ActiveCfg = Debug|Win32
{2171C0E8-4915-49B9-AC23-A484FA08C126}.Debug|Win32.ActiveCfg = Debug|Win32
{2171C0E8-4915-49B9-AC23-A484FA08C126}.Debug|Win32.Build.0 = Debug|Win32
@@ -148,12 +115,6 @@ Global
{B8D9AFC2-B38F-4714-846D-8A2754F076C9}.Debug_Direct3D9|Win32.ActiveCfg = Debug|Win32
{B8D9AFC2-B38F-4714-846D-8A2754F076C9}.Debug_Direct3D9|Win32.Build.0 = Debug|Win32
{B8D9AFC2-B38F-4714-846D-8A2754F076C9}.Debug_Direct3D9|x64.ActiveCfg = Debug|Win32
- {B8D9AFC2-B38F-4714-846D-8A2754F076C9}.Debug_USB_Packets|Any CPU.ActiveCfg = Release|x64
- {B8D9AFC2-B38F-4714-846D-8A2754F076C9}.Debug_USB_Packets|Any CPU.Build.0 = Release|x64
- {B8D9AFC2-B38F-4714-846D-8A2754F076C9}.Debug_USB_Packets|Win32.ActiveCfg = Debug|Win32
- {B8D9AFC2-B38F-4714-846D-8A2754F076C9}.Debug_USB_Packets|Win32.Build.0 = Debug|Win32
- {B8D9AFC2-B38F-4714-846D-8A2754F076C9}.Debug_USB_Packets|x64.ActiveCfg = Debug|x64
- {B8D9AFC2-B38F-4714-846D-8A2754F076C9}.Debug_USB_Packets|x64.Build.0 = Debug|x64
{B8D9AFC2-B38F-4714-846D-8A2754F076C9}.Debug|Any CPU.ActiveCfg = Debug|Win32
{B8D9AFC2-B38F-4714-846D-8A2754F076C9}.Debug|Win32.ActiveCfg = Debug|Win32
{B8D9AFC2-B38F-4714-846D-8A2754F076C9}.Debug|Win32.Build.0 = Debug|Win32
@@ -168,12 +129,6 @@ Global
{EFA81330-D410-4232-9A0C-1D8B91B6FFFF}.Debug_Direct3D9|Win32.Build.0 = Debug|Win32
{EFA81330-D410-4232-9A0C-1D8B91B6FFFF}.Debug_Direct3D9|x64.ActiveCfg = Debug|x64
{EFA81330-D410-4232-9A0C-1D8B91B6FFFF}.Debug_Direct3D9|x64.Build.0 = Debug|x64
- {EFA81330-D410-4232-9A0C-1D8B91B6FFFF}.Debug_USB_Packets|Any CPU.ActiveCfg = Release|Win32
- {EFA81330-D410-4232-9A0C-1D8B91B6FFFF}.Debug_USB_Packets|Any CPU.Build.0 = Release|Win32
- {EFA81330-D410-4232-9A0C-1D8B91B6FFFF}.Debug_USB_Packets|Win32.ActiveCfg = Debug|Win32
- {EFA81330-D410-4232-9A0C-1D8B91B6FFFF}.Debug_USB_Packets|Win32.Build.0 = Debug|Win32
- {EFA81330-D410-4232-9A0C-1D8B91B6FFFF}.Debug_USB_Packets|x64.ActiveCfg = Debug|x64
- {EFA81330-D410-4232-9A0C-1D8B91B6FFFF}.Debug_USB_Packets|x64.Build.0 = Debug|x64
{EFA81330-D410-4232-9A0C-1D8B91B6FFFF}.Debug|Any CPU.ActiveCfg = Debug|Win32
{EFA81330-D410-4232-9A0C-1D8B91B6FFFF}.Debug|Win32.ActiveCfg = Debug|Win32
{EFA81330-D410-4232-9A0C-1D8B91B6FFFF}.Debug|Win32.Build.0 = Debug|Win32
@@ -184,50 +139,6 @@ Global
{EFA81330-D410-4232-9A0C-1D8B91B6FFFF}.Release|Win32.Build.0 = Release|Win32
{EFA81330-D410-4232-9A0C-1D8B91B6FFFF}.Release|x64.ActiveCfg = Release|x64
{EFA81330-D410-4232-9A0C-1D8B91B6FFFF}.Release|x64.Build.0 = Release|x64
- {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug_Direct3D9|Any CPU.ActiveCfg = Release|x64
- {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug_Direct3D9|Any CPU.Build.0 = Release|x64
- {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug_Direct3D9|Win32.ActiveCfg = Debug|Win32
- {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug_Direct3D9|Win32.Build.0 = Debug|Win32
- {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug_Direct3D9|x64.ActiveCfg = Debug|x64
- {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug_Direct3D9|x64.Build.0 = Debug|x64
- {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug_USB_Packets|Any CPU.ActiveCfg = Release|x64
- {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug_USB_Packets|Any CPU.Build.0 = Release|x64
- {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug_USB_Packets|Win32.ActiveCfg = Debug|Win32
- {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug_USB_Packets|Win32.Build.0 = Debug|Win32
- {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug_USB_Packets|x64.ActiveCfg = Debug|x64
- {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug_USB_Packets|x64.Build.0 = Debug|x64
- {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug|Any CPU.ActiveCfg = Debug|Win32
- {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug|Win32.ActiveCfg = Debug|Win32
- {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug|Win32.Build.0 = Debug|Win32
- {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug|x64.ActiveCfg = Debug|x64
- {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Debug|x64.Build.0 = Debug|x64
- {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Release|Any CPU.ActiveCfg = Release|Win32
- {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Release|Win32.ActiveCfg = Release|Win32
- {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Release|Win32.Build.0 = Release|Win32
- {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Release|x64.ActiveCfg = Release|x64
- {81CE8DAF-EBB2-4761-8E45-B71ABCCA8C68}.Release|x64.Build.0 = Release|x64
- {DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Debug_Direct3D9|Any CPU.ActiveCfg = Release|x64
- {DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Debug_Direct3D9|Any CPU.Build.0 = Release|x64
- {DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Debug_Direct3D9|Win32.ActiveCfg = Debug|Win32
- {DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Debug_Direct3D9|Win32.Build.0 = Debug|Win32
- {DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Debug_Direct3D9|x64.ActiveCfg = Debug|x64
- {DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Debug_Direct3D9|x64.Build.0 = Debug|x64
- {DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Debug_USB_Packets|Any CPU.ActiveCfg = Release|x64
- {DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Debug_USB_Packets|Any CPU.Build.0 = Release|x64
- {DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Debug_USB_Packets|Win32.ActiveCfg = Debug|Win32
- {DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Debug_USB_Packets|Win32.Build.0 = Debug|Win32
- {DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Debug_USB_Packets|x64.ActiveCfg = Debug|x64
- {DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Debug_USB_Packets|x64.Build.0 = Debug|x64
- {DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Debug|Any CPU.ActiveCfg = Debug|Win32
- {DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Debug|Win32.ActiveCfg = Debug|Win32
- {DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Debug|Win32.Build.0 = Debug|Win32
- {DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Debug|x64.ActiveCfg = Debug|x64
- {DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Debug|x64.Build.0 = Debug|x64
- {DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Release|Any CPU.ActiveCfg = Release|Win32
- {DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Release|Win32.ActiveCfg = Release|Win32
- {DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Release|Win32.Build.0 = Release|Win32
- {DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Release|x64.ActiveCfg = Release|x64
- {DA956FD3-E142-46F2-9DD5-C78BEBB56B7A}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/build/win32/Cxbx.vcxproj b/build/win32/Cxbx.vcxproj
index 2f63af725..8537ca598 100644
--- a/build/win32/Cxbx.vcxproj
+++ b/build/win32/Cxbx.vcxproj
@@ -5,10 +5,6 @@
Debug_Direct3D9
Win32
-
- Debug_USB_Packets
- Win32
-
Debug
Win32
@@ -36,12 +32,6 @@
MultiByte
$(DefaultPlatformToolset)
-
- Application
- false
- MultiByte
- $(DefaultPlatformToolset)
-
Application
false
@@ -59,10 +49,6 @@
-
-
-
-
@@ -71,26 +57,20 @@
<_ProjectFileVersion>10.0.40219.1
false
- false
false
false
AllRules.ruleset
- AllRules.ruleset
AllRules.ruleset
-
-
AllRules.ruleset
..\..\import\DirectX8\include;$(IncludePath)
- ..\..\import\DirectX8\include;$(IncludePath)
..\..\import\DirectX9\include;$(IncludePath)
..\..\import\DirectX8\lib;$(LibraryPath)
- ..\..\import\DirectX8\lib;$(LibraryPath)
$(LibraryPath)
..\..\import\DirectX8\include;$(IncludePath)
..\..\import\DirectX8\lib;$(LibraryPath)
@@ -100,11 +80,6 @@
$(Configuration)\$(ProjectName)\
-
- Build
-
- $(Configuration)\$(ProjectName)
-
Build
@@ -144,7 +119,7 @@
Include\Win32\Cxbx;%(AdditionalIncludeDirectories)
- legacy_stdio_definitions.lib;d3d8.lib;dinput8.lib;dxguid.lib;odbc32.lib;odbccp32.lib;Shlwapi.lib;dxerr8.lib;ws2_32.lib;dsound.lib;winmm.lib;ddraw.lib;d3dx8.lib;dbghelp.lib;comctl32.lib;XINPUT9_1_0.LIB;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)
+ legacy_stdio_definitions.lib;d3d8.lib;dinput8.lib;dxguid.lib;odbc32.lib;odbccp32.lib;Shlwapi.lib;dxerr8.lib;ws2_32.lib;dsound.lib;winmm.lib;ddraw.lib;d3dx8.lib;dbghelp.lib;comctl32.lib;XINPUT9_1_0.LIB;%(AdditionalDependencies)
true
$(Configuration)\;..\..\import\distorm\lib\Win32\;..\..\import\glew-2.0.0\lib\Release\Win32\;%(AdditionalLibraryDirectories)
libcmt;%(IgnoreSpecificDefaultLibraries)
@@ -175,67 +150,6 @@
Generate version header
-
-
- _DEBUG;%(PreprocessorDefinitions)
- true
- true
- Win32
- .\..\..\bin\debug/Cxbx.tlb
-
-
-
-
- Disabled
- ..\..\src\Common;..\..\src;..\..\src\Common\Win32;%(AdditionalIncludeDirectories);..\..\import\OpenXDK\include;..\..\import\distorm\include;..\..\import\glew-2.0.0\include;..\..\import\subhook\;..\..\import\SDL-mirror\include
- NOMINMAX;_WIN32_WINNT=0x0601;WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;DEBUG_PACKET;DEBUG_ISOCH;%(PreprocessorDefinitions)
- EnableFastChecks
- MultiThreadedDebugDLL
- false
- Level3
- true
- ProgramDatabase
- true
- StreamingSIMDExtensions2
- true
-
-
- _DEBUG;%(PreprocessorDefinitions)
- 0x0409
- Include\Win32\Cxbx;%(AdditionalIncludeDirectories)
-
-
- legacy_stdio_definitions.lib;d3d8.lib;dinput8.lib;dxguid.lib;odbc32.lib;odbccp32.lib;Shlwapi.lib;dxerr8.lib;ws2_32.lib;dsound.lib;winmm.lib;ddraw.lib;d3dx8.lib;dbghelp.lib;comctl32.lib;XINPUT9_1_0.LIB;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)
- true
- $(Configuration)\;..\..\import\distorm\lib\Win32\;..\..\import\glew-2.0.0\lib\Release\Win32\;%(AdditionalLibraryDirectories)
- msvcrt;%(IgnoreSpecificDefaultLibraries)
- true
- true
- Windows
- false
-
-
- MachineX86
- false
- 0x10000
- true
- true
-
-
- true
-
-
- copy $(SolutionDir)..\..\import\glew-2.0.0\bin\Release\Win32\glew32.dll $(TargetDir)
-
-
-
-
-
-
- CALL "$(SolutionDir)Version.bat" "$(SolutionDir)..\..\src\Version.h"
- Generate version header
-
-
_DEBUG;%(PreprocessorDefinitions)
@@ -265,7 +179,7 @@
Include\Win32\Cxbx;%(AdditionalIncludeDirectories)
- legacy_stdio_definitions.lib;d3d8.lib;dinput8.lib;dxguid.lib;odbc32.lib;odbccp32.lib;Shlwapi.lib;dxerr8.lib;ws2_32.lib;dsound.lib;winmm.lib;ddraw.lib;d3dx8.lib;dbghelp.lib;comctl32.lib;XINPUT9_1_0.LIB;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)
+ legacy_stdio_definitions.lib;d3d8.lib;dinput8.lib;dxguid.lib;odbc32.lib;odbccp32.lib;Shlwapi.lib;dxerr8.lib;ws2_32.lib;dsound.lib;winmm.lib;ddraw.lib;d3dx8.lib;dbghelp.lib;comctl32.lib;XINPUT9_1_0.LIB;%(AdditionalDependencies)
true
$(Configuration)\;..\..\import\distorm\lib\Win32\;..\..\import\glew-2.0.0\lib\Release\Win32\;%(AdditionalLibraryDirectories)
libcmt;%(IgnoreSpecificDefaultLibraries)
@@ -334,7 +248,7 @@
Include\Win32\Cxbx;%(AdditionalIncludeDirectories)
- legacy_stdio_definitions.lib;d3d8.lib;dinput8.lib;dxguid.lib;odbc32.lib;odbccp32.lib;Shlwapi.lib;dxerr8.lib;ws2_32.lib;dsound.lib;winmm.lib;ddraw.lib;d3dx8.lib;dbghelp.lib;comctl32.lib;XINPUT9_1_0.LIB;SDL2.lib;SDL2main.lib;%(AdditionalDependencies)
+ legacy_stdio_definitions.lib;d3d8.lib;dinput8.lib;dxguid.lib;odbc32.lib;odbccp32.lib;Shlwapi.lib;dxerr8.lib;ws2_32.lib;dsound.lib;winmm.lib;ddraw.lib;d3dx8.lib;dbghelp.lib;comctl32.lib;XINPUT9_1_0.LIB;%(AdditionalDependencies)
true
$(Configuration)\;..\..\import\distorm\lib\Win32\;..\..\import\glew-2.0.0\lib\Release\Win32\;%(AdditionalLibraryDirectories)
libcmt;%(IgnoreSpecificDefaultLibraries)
@@ -502,10 +416,8 @@
%(PreprocessorDefinitions)
- %(PreprocessorDefinitions)
%(PreprocessorDefinitions)
\cxbx\git\cxbx-ds\resource;%(AdditionalIncludeDirectories)
- \cxbx\git\cxbx-ds\resource;%(AdditionalIncludeDirectories)
\cxbx\git\cxbx-ds\resource;%(AdditionalIncludeDirectories)
%(PreprocessorDefinitions)
\cxbx\git\cxbx-ds\resource;%(AdditionalIncludeDirectories)
@@ -527,11 +439,9 @@
%(AdditionalIncludeDirectories)
- %(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(PreprocessorDefinitions)
- %(PreprocessorDefinitions)
%(PreprocessorDefinitions)
%(PreprocessorDefinitions)
@@ -539,143 +449,115 @@
%(AdditionalIncludeDirectories)
- %(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(PreprocessorDefinitions)
- %(PreprocessorDefinitions)
%(PreprocessorDefinitions)
%(PreprocessorDefinitions)
false
%(AdditionalIncludeDirectories)
- %(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(PreprocessorDefinitions)
- %(PreprocessorDefinitions)
%(PreprocessorDefinitions)
%(PreprocessorDefinitions)
%(AdditionalIncludeDirectories)
- %(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(PreprocessorDefinitions)
- %(PreprocessorDefinitions)
%(PreprocessorDefinitions)
%(PreprocessorDefinitions)
%(AdditionalIncludeDirectories)
- %(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(PreprocessorDefinitions)
- %(PreprocessorDefinitions)
%(PreprocessorDefinitions)
%(PreprocessorDefinitions)
%(AdditionalIncludeDirectories)
- %(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(PreprocessorDefinitions)
- %(PreprocessorDefinitions)
%(PreprocessorDefinitions)
%(PreprocessorDefinitions)
%(AdditionalIncludeDirectories)
- %(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(PreprocessorDefinitions)
- %(PreprocessorDefinitions)
%(PreprocessorDefinitions)
%(PreprocessorDefinitions)
%(AdditionalIncludeDirectories)
- %(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(PreprocessorDefinitions)
- %(PreprocessorDefinitions)
%(PreprocessorDefinitions)
%(PreprocessorDefinitions)
%(AdditionalIncludeDirectories)
- %(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(PreprocessorDefinitions)
- %(PreprocessorDefinitions)
%(PreprocessorDefinitions)
%(PreprocessorDefinitions)
%(AdditionalIncludeDirectories)
- %(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(PreprocessorDefinitions)
- %(PreprocessorDefinitions)
%(PreprocessorDefinitions)
%(PreprocessorDefinitions)
%(AdditionalIncludeDirectories)
- %(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(PreprocessorDefinitions)
- %(PreprocessorDefinitions)
%(PreprocessorDefinitions)
%(PreprocessorDefinitions)
%(AdditionalIncludeDirectories)
- %(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(PreprocessorDefinitions)
- %(PreprocessorDefinitions)
%(PreprocessorDefinitions)
%(PreprocessorDefinitions)
%(AdditionalIncludeDirectories)
- %(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(PreprocessorDefinitions)
- %(PreprocessorDefinitions)
%(PreprocessorDefinitions)
%(PreprocessorDefinitions)
%(AdditionalIncludeDirectories)
- %(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(PreprocessorDefinitions)
- %(PreprocessorDefinitions)
%(PreprocessorDefinitions)
%(PreprocessorDefinitions)
%(AdditionalIncludeDirectories)
- %(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(PreprocessorDefinitions)
- %(PreprocessorDefinitions)
%(PreprocessorDefinitions)
%(PreprocessorDefinitions)
@@ -699,11 +581,9 @@
%(AdditionalIncludeDirectories)
- %(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(PreprocessorDefinitions)
- %(PreprocessorDefinitions)
%(PreprocessorDefinitions)
%(PreprocessorDefinitions)
@@ -713,32 +593,26 @@
%(AdditionalIncludeDirectories)
- %(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(PreprocessorDefinitions)
- %(PreprocessorDefinitions)
%(PreprocessorDefinitions)
%(PreprocessorDefinitions)
%(AdditionalIncludeDirectories)
- %(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(PreprocessorDefinitions)
- %(PreprocessorDefinitions)
%(PreprocessorDefinitions)
%(PreprocessorDefinitions)
%(AdditionalIncludeDirectories)
- %(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(PreprocessorDefinitions)
- %(PreprocessorDefinitions)
%(PreprocessorDefinitions)
%(PreprocessorDefinitions)
@@ -747,21 +621,17 @@
%(AdditionalIncludeDirectories)
- %(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(PreprocessorDefinitions)
- %(PreprocessorDefinitions)
%(PreprocessorDefinitions)
%(PreprocessorDefinitions)
%(AdditionalIncludeDirectories)
- %(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(PreprocessorDefinitions)
- %(PreprocessorDefinitions)
%(PreprocessorDefinitions)
%(PreprocessorDefinitions)
@@ -770,11 +640,9 @@
%(AdditionalIncludeDirectories)
- %(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(PreprocessorDefinitions)
- %(PreprocessorDefinitions)
%(PreprocessorDefinitions)
%(PreprocessorDefinitions)
@@ -785,10 +653,8 @@
%(AdditionalIncludeDirectories)
- %(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(PreprocessorDefinitions)
- %(PreprocessorDefinitions)
%(PreprocessorDefinitions)
%(AdditionalIncludeDirectories)
%(PreprocessorDefinitions)
@@ -796,30 +662,24 @@
%(AdditionalIncludeDirectories)
- %(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(PreprocessorDefinitions)
- %(PreprocessorDefinitions)
%(PreprocessorDefinitions)
%(AdditionalIncludeDirectories)
%(PreprocessorDefinitions)
%(AdditionalIncludeDirectories)
- %(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(PreprocessorDefinitions)
- %(PreprocessorDefinitions)
%(PreprocessorDefinitions)
%(AdditionalIncludeDirectories)
%(PreprocessorDefinitions)
%(AdditionalIncludeDirectories)
- %(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(PreprocessorDefinitions)
- %(PreprocessorDefinitions)
%(PreprocessorDefinitions)
%(AdditionalIncludeDirectories)
%(PreprocessorDefinitions)
@@ -827,60 +687,48 @@
%(AdditionalIncludeDirectories)
- %(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(PreprocessorDefinitions)
- %(PreprocessorDefinitions)
%(PreprocessorDefinitions)
%(AdditionalIncludeDirectories)
%(PreprocessorDefinitions)
%(AdditionalIncludeDirectories)
- %(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(PreprocessorDefinitions)
- %(PreprocessorDefinitions)
%(PreprocessorDefinitions)
%(AdditionalIncludeDirectories)
%(PreprocessorDefinitions)
%(AdditionalIncludeDirectories)
- %(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(PreprocessorDefinitions)
- %(PreprocessorDefinitions)
%(PreprocessorDefinitions)
%(AdditionalIncludeDirectories)
%(PreprocessorDefinitions)
%(AdditionalIncludeDirectories)
- %(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(PreprocessorDefinitions)
- %(PreprocessorDefinitions)
%(PreprocessorDefinitions)
%(AdditionalIncludeDirectories)
%(PreprocessorDefinitions)
%(AdditionalIncludeDirectories)
- %(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(PreprocessorDefinitions)
- %(PreprocessorDefinitions)
%(PreprocessorDefinitions)
%(AdditionalIncludeDirectories)
%(PreprocessorDefinitions)
%(AdditionalIncludeDirectories)
- %(AdditionalIncludeDirectories)
%(AdditionalIncludeDirectories)
%(PreprocessorDefinitions)
- %(PreprocessorDefinitions)
%(PreprocessorDefinitions)
%(AdditionalIncludeDirectories)
%(PreprocessorDefinitions)
diff --git a/import/SDL-mirror b/import/SDL-mirror
deleted file mode 160000
index ef5bf55e8..000000000
--- a/import/SDL-mirror
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit ef5bf55e83c9d0ccf7a02bc2b08b0d6e46e1b6ef
diff --git a/resource/Cxbx.rc b/resource/Cxbx.rc
index 8e3d5f3e4..cefc315d6 100644
--- a/resource/Cxbx.rc
+++ b/resource/Cxbx.rc
@@ -485,7 +485,7 @@ BEGIN
POPUP "&LLE (Experimental)", 65535,MFT_STRING,MFS_ENABLED
BEGIN
MENUITEM "LLE &GPU", ID_EMULATION_LLE_GPU,MFT_STRING,MFS_ENABLED
- MENUITEM "LLE &USB", ID_EMULATION_LLE_USB,MFT_STRING,MFS_ENABLED
+ //MENUITEM "LLE &USB", ID_EMULATION_LLE_USB,MFT_STRING,MFS_ENABLED // Reenable this when LLE USB actually works
END
POPUP "Hacks", 65535,MFT_STRING,MFS_ENABLED
BEGIN
diff --git a/src/Common/Input/InputConfig.cpp b/src/Common/Input/InputConfig.cpp
index e6bc626dd..d74095ea6 100644
--- a/src/Common/Input/InputConfig.cpp
+++ b/src/Common/Input/InputConfig.cpp
@@ -33,7 +33,7 @@
// * All rights reserved
// *
// ******************************************************************
-
+#if 0 // Reenable this when LLE USB actually works
#define _XBOXKRNL_DEFEXTRN_
// prevent name collisions
@@ -483,3 +483,4 @@ SDL2Devices* InputDeviceManager::FindDeviceFromXboxPort(int port)
}
return nullptr;
}
+#endif
diff --git a/src/Common/Input/InputConfig.h b/src/Common/Input/InputConfig.h
index 1d6a28e1d..0f204c401 100644
--- a/src/Common/Input/InputConfig.h
+++ b/src/Common/Input/InputConfig.h
@@ -36,7 +36,7 @@
#ifndef INPUTCONFIG_H_
#define INPUTCONFIG_H_
-
+#if 0 // Reenable this when LLE USB actually works
#include
#include
#include "SDL.h"
@@ -124,5 +124,5 @@ class InputDeviceManager
};
extern InputDeviceManager* g_InputDeviceManager;
-
+#endif
#endif
diff --git a/src/Common/Input/SDL2_Device.cpp b/src/Common/Input/SDL2_Device.cpp
index ff481e46d..978c5294d 100644
--- a/src/Common/Input/SDL2_Device.cpp
+++ b/src/Common/Input/SDL2_Device.cpp
@@ -34,6 +34,7 @@
// *
// ******************************************************************
+#if 0 // Reenable this when LLE USB actually works
#include "SDL2_Device.h"
#include
@@ -216,3 +217,5 @@ bool SDL2Devices::ReadButtonState(uint16_t* wButtons, uint8_t* bAnalogButtons, i
}
return false;
}
+
+#endif
diff --git a/src/Common/Input/SDL2_Device.h b/src/Common/Input/SDL2_Device.h
index d5bf68d8e..ee666d9a1 100644
--- a/src/Common/Input/SDL2_Device.h
+++ b/src/Common/Input/SDL2_Device.h
@@ -36,7 +36,7 @@
#ifndef SDL2DEVICE_H_
#define SDL2DEVICE_H_
-
+#if 0 // Reenable this when LLE USB actually works
#include "InputConfig.h"
@@ -119,5 +119,5 @@ class SDL2Devices
// indicates that the button state has been updated since the last time it was read
std::atomic_bool bStateDirty;
};
-
+#endif
#endif
diff --git a/src/Cxbx/ResCxbx.h b/src/Cxbx/ResCxbx.h
index 9f0ab17dd..7b5f220aa 100644
--- a/src/Cxbx/ResCxbx.h
+++ b/src/Cxbx/ResCxbx.h
@@ -244,7 +244,7 @@
#define ID_EMULATION_LLE_APU 40039
#define ID_EMULATION_LLE_GPU 40040
#define ID_EMULATION_LLE_JIT 40041
-#define ID_EMULATION_LLE_USB 40042
+//#define ID_EMULATION_LLE_USB 40042 // Reenable this when LLE USB actually works
#define ID_SETTINGS_CONFIG_CONTROLLER 40046
#define ID_SETTINGS_CONFIG_VIDEO 40047
#define ID_SETTINGS_CONFIG_AUDIO 40048
diff --git a/src/Cxbx/WndMain.cpp b/src/Cxbx/WndMain.cpp
index 6fea5f356..68bb051e5 100644
--- a/src/Cxbx/WndMain.cpp
+++ b/src/Cxbx/WndMain.cpp
@@ -1465,14 +1465,14 @@ LRESULT CALLBACK WndMain::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP
RefreshMenus();
}
break;
-
+#if 0 // Reenable this when LLE USB actually works
case ID_EMULATION_LLE_USB:
{
m_FlagsLLE = m_FlagsLLE ^ LLE_USB;
RefreshMenus();
}
break;
-
+#endif
case ID_EMULATION_START:
if (m_Xbe != nullptr)
{
@@ -1937,8 +1937,8 @@ void WndMain::RefreshMenus()
chk_flag = (m_FlagsLLE & LLE_GPU) ? MF_CHECKED : MF_UNCHECKED;
CheckMenuItem(settings_menu, ID_EMULATION_LLE_GPU, chk_flag);
- chk_flag = (m_FlagsLLE & LLE_USB) ? MF_CHECKED : MF_UNCHECKED;
- CheckMenuItem(settings_menu, ID_EMULATION_LLE_USB, chk_flag);
+ //chk_flag = (m_FlagsLLE & LLE_USB) ? MF_CHECKED : MF_UNCHECKED; // Reenable this when LLE USB actually works
+ //CheckMenuItem(settings_menu, ID_EMULATION_LLE_USB, chk_flag);
chk_flag = (m_DisablePixelShaders) ? MF_CHECKED : MF_UNCHECKED;
CheckMenuItem(settings_menu, ID_HACKS_DISABLEPIXELSHADERS, chk_flag);
@@ -2609,7 +2609,7 @@ void WndMain::DrawLedBitmap(HWND hwnd, bool bdefault)
if (FlagsLLE == 0) {
sprintf(flagString, "HLE");
}
- else if ((FlagsLLE & LLE_GPU) != 0) {
+ else if ((FlagsLLE & LLE_GPU) == 0) {
strcat(flagString, " HLE");
}
}
diff --git a/src/CxbxKrnl/CxbxKrnl.cpp b/src/CxbxKrnl/CxbxKrnl.cpp
index 32199f36d..ffd2103bf 100644
--- a/src/CxbxKrnl/CxbxKrnl.cpp
+++ b/src/CxbxKrnl/CxbxKrnl.cpp
@@ -1301,7 +1301,7 @@ __declspec(noreturn) void CxbxKrnlInit
g_EmuShared->GetFlagsLLE(&CxbxLLE_Flags);
bLLE_APU = (CxbxLLE_Flags & LLE_APU) > 0;
bLLE_GPU = (CxbxLLE_Flags & LLE_GPU) > 0;
- bLLE_USB = (CxbxLLE_Flags & LLE_USB) > 0;
+ //bLLE_USB = (CxbxLLE_Flags & LLE_USB) > 0; // Reenable this when LLE USB actually works
bLLE_JIT = (CxbxLLE_Flags & LLE_JIT) > 0;
}
@@ -1465,6 +1465,7 @@ __declspec(noreturn) void CxbxKrnlInit
InitXboxHardware(HardwareModel::Revision1_5); // TODO : Make configurable
if (bLLE_USB) {
+#if 0 // Reenable this when LLE USB actually works
int ret;
g_InputDeviceManager = new InputDeviceManager;
ret = g_InputDeviceManager->EnumSdl2Devices();
@@ -1473,6 +1474,7 @@ __declspec(noreturn) void CxbxKrnlInit
// Temporary: the device type and bindings should be read from emushared, for now always assume one xbox controller
g_InputDeviceManager->ConnectDeviceToXbox(1, MS_CONTROLLER_DUKE);
}
+#endif
}
// Now the hardware devices exist, couple the EEPROM buffer to it's device
diff --git a/src/CxbxKrnl/HLEIntercept.cpp b/src/CxbxKrnl/HLEIntercept.cpp
index 07f0a456b..6cfb73d1c 100644
--- a/src/CxbxKrnl/HLEIntercept.cpp
+++ b/src/CxbxKrnl/HLEIntercept.cpp
@@ -350,13 +350,14 @@ void EmuUpdateLLEStatus(uint32_t XbLibScan)
FlagsLLE ^= LLE_APU;
EmuOutputMessage(XB_OUTPUT_MESSAGE_INFO, "Fallback to LLE APU.");
}
-
+#if 0 // Reenable this when LLE USB actually works
if ((FlagsLLE & LLE_USB) == false
&& (XbLibScan & XbSymbolLib_XAPILIB) == 0) {
bLLE_USB = true;
FlagsLLE ^= LLE_USB;
EmuOutputMessage(XB_OUTPUT_MESSAGE_INFO, "Fallback to LLE USB.");
- }
+ }
+#endif
g_EmuShared->SetFlagsLLE(&FlagsLLE);
}
diff --git a/src/CxbxKrnl/Timer.cpp b/src/CxbxKrnl/Timer.cpp
index 31e87d2a8..4f7a9f642 100644
--- a/src/CxbxKrnl/Timer.cpp
+++ b/src/CxbxKrnl/Timer.cpp
@@ -114,7 +114,8 @@ void ClockThread(TimerObject* Timer)
return;
}
NewExpireTime = GetNextExpireTime(Timer);
- }
+ }
+ Sleep(1); // prevent burning the cpu
}
}
diff --git a/src/devices/usb/Hub.cpp b/src/devices/usb/Hub.cpp
index d8aa787e2..5fedab005 100644
--- a/src/devices/usb/Hub.cpp
+++ b/src/devices/usb/Hub.cpp
@@ -46,7 +46,7 @@ namespace xboxkrnl
#include "Hub.h"
#include "CxbxKrnl\EmuKrnl.h" // For EmuWarning
-#define LOG_STR_HUB "Hub"
+#define LOG_STR_HUB "Hub:"
#define NUM_PORTS 8
@@ -86,6 +86,9 @@ namespace xboxkrnl
#define PORT_C_RESET 20
+// Acknowledgment: XQEMU (GPLv2)
+
+
// To avoid including Xbox.h
extern USBDevice* g_USB0;
@@ -372,7 +375,7 @@ void Hub::UsbHub_HandleControl(XboxDeviceState* dev, USBPacket* p,
goto fail;
}
port = &m_HubState->ports[n];
- DbgPrintf("%s: %s GetPortStatus -> Address 0x%X, wIndex %d, wPortStatus %d, wPortChange %d\n",
+ DbgPrintf("%s %s GetPortStatus -> Address 0x%X, wIndex %d, wPortStatus %d, wPortChange %d\n",
LOG_STR_HUB, __func__, m_HubState->dev.Addr, index, port->wPortStatus, port->wPortChange);
data[0] = port->wPortStatus;
data[1] = port->wPortStatus >> 8;
@@ -397,7 +400,7 @@ void Hub::UsbHub_HandleControl(XboxDeviceState* dev, USBPacket* p,
USBHubPort* port;
XboxDeviceState* dev;
- DbgPrintf("%s: %s SetPortFeature -> Address 0x%X, wIndex %d, Feature %s\n",
+ DbgPrintf("%s %s SetPortFeature -> Address 0x%X, wIndex %d, Feature %s\n",
LOG_STR_HUB, __func__, m_HubState->dev.Addr, index, GetFeatureName(value));
if (n >= NUM_PORTS) {
@@ -435,7 +438,7 @@ void Hub::UsbHub_HandleControl(XboxDeviceState* dev, USBPacket* p,
unsigned int n = index - 1;
USBHubPort *port;
- DbgPrintf("%s: %s ClearPortFeature -> Address 0x%X, wIndex %d, Feature %s\n",
+ DbgPrintf("%s %s ClearPortFeature -> Address 0x%X, wIndex %d, Feature %s\n",
LOG_STR_HUB, __func__, m_HubState->dev.Addr, index, GetFeatureName(value));
if (n >= NUM_PORTS) {
@@ -522,7 +525,7 @@ void Hub::UsbHub_HandleData(XboxDeviceState* dev, USBPacket* p)
p->Status = USB_RET_BABBLE;
return;
}
- DbgPrintf("%s: %s Address 0x%X, Status %d\n", LOG_STR_HUB, __func__, m_HubState->dev.Addr, status);
+ DbgPrintf("%s %s Address 0x%X, Status %d\n", LOG_STR_HUB, __func__, m_HubState->dev.Addr, status);
for (i = 0; i < n; i++) {
buf[i] = status >> (8 * i);
}
diff --git a/src/devices/usb/OHCI.cpp b/src/devices/usb/OHCI.cpp
index 880d18262..21577f015 100644
--- a/src/devices/usb/OHCI.cpp
+++ b/src/devices/usb/OHCI.cpp
@@ -46,7 +46,11 @@ namespace xboxkrnl
#include "CxbxKrnl\EmuKrnl.h" // For HalSystemInterrupt
#include "CxbxCommon.h"
-#define LOG_STR_OHCI "Ohci"
+#define LOG_STR_OHCI "Ohci:"
+
+/* Define these two if you want to dump usb packets */
+//#define DEBUG_ISOCH
+//#define DEBUG_PACKET
/* These macros are used to access the bits of the various registers */
// HcControl
@@ -197,14 +201,7 @@ namespace xboxkrnl
#define OHCI_OFFSET_MASK 0xFFF
-// Temporary output (useful for debugging LLE USB)
-#define DEBUG
-
-#ifdef DEBUG
-
-#define TestOut printf
-
-#endif // DEBUG
+// Acknowledgment: XQEMU (GPLv2)
OHCI::OHCI(USBDevice* UsbObj)
@@ -247,13 +244,10 @@ void OHCI::OHCI_FrameBoundaryWorker()
OHCI_HCCA hcca;
while (m_bFrameTime) { Sleep(1); }
- m_bFrameTime = true;
-
- TestOut("Frame processing started\n");
- TestOut("HcControl: 0x%X, HcFmNumber: 0x%X, HcInterruptStatus: 0x%X\n", m_Registers.HcControl, m_Registers.HcFmNumber, m_Registers.HcInterruptStatus);
+ m_bFrameTime = true;
if (OHCI_ReadHCCA(m_Registers.HcHCCA, &hcca)) {
- EmuWarning("%s: HCCA read error at physical address 0x%X", m_Registers.HcHCCA, LOG_STR_OHCI);
+ EmuWarning("%s HCCA read error at physical address 0x%X", m_Registers.HcHCCA, LOG_STR_OHCI);
OHCI_FatalError();
m_bFrameTime = false;
return;
@@ -283,13 +277,11 @@ void OHCI::OHCI_FrameBoundaryWorker()
m_bFrameTime = false;
return;
}
-
- TestOut("HcFmRemaining: 0x%X, HcFmInterval: 0x%X - before\n", m_Registers.HcFmRemaining, m_Registers.HcFmInterval);
+
// From the standard: "This bit is loaded from the FrameIntervalToggle field of
// HcFmInterval whenever FrameRemaining reaches 0."
m_Registers.HcFmRemaining = (m_Registers.HcFmInterval & OHCI_FMI_FIT) == 0 ?
- m_Registers.HcFmRemaining & ~OHCI_FMR_FRT : m_Registers.HcFmRemaining | OHCI_FMR_FRT;
- TestOut("HcFmRemaining: 0x%X, HcFmInterval: 0x%X - after\n", m_Registers.HcFmRemaining, m_Registers.HcFmInterval);
+ m_Registers.HcFmRemaining & ~OHCI_FMR_FRT : m_Registers.HcFmRemaining | OHCI_FMR_FRT;
// Increment frame number
m_Registers.HcFmNumber = (m_Registers.HcFmNumber + 1) & 0xFFFF; // prevent overflow
@@ -299,7 +291,7 @@ void OHCI::OHCI_FrameBoundaryWorker()
if (!m_Registers.HcDoneHead) {
// From the standard: "This is set to zero whenever HC writes the content of this
// register to HCCA. It also sets the WritebackDoneHead of HcInterruptStatus."
- CxbxKrnlCleanup("%s: HcDoneHead is zero but WritebackDoneHead interrupt is not set!\n", LOG_STR_OHCI);
+ CxbxKrnlCleanup("%s HcDoneHead is zero but WritebackDoneHead interrupt is not set!\n", LOG_STR_OHCI);
}
if (m_Registers.HcInterrupt & m_Registers.HcInterruptStatus) {
@@ -326,13 +318,10 @@ void OHCI::OHCI_FrameBoundaryWorker()
// Writeback HCCA
if (OHCI_WriteHCCA(m_Registers.HcHCCA, &hcca)) {
- EmuWarning("%s: HCCA write error at physical address 0x%X", LOG_STR_OHCI, m_Registers.HcHCCA);
+ EmuWarning("%s HCCA write error at physical address 0x%X", LOG_STR_OHCI, m_Registers.HcHCCA);
OHCI_FatalError();
}
- TestOut("Frame processing ended\n");
- TestOut("HcControl: 0x%X, HcFmNumber: 0x%X, HcInterruptStatus: 0x%X\n", m_Registers.HcControl, m_Registers.HcFmNumber, m_Registers.HcInterruptStatus);
-
m_bFrameTime = false;
}
@@ -344,8 +333,7 @@ void OHCI::OHCI_FatalError()
OHCI_SetInterrupt(OHCI_INTR_UE);
OHCI_BusStop();
- DbgPrintf("%s: an unrecoverable error occoured!\n", LOG_STR_OHCI);
- TestOut("Fatal error");
+ DbgPrintf("%s an unrecoverable error occoured!\n", LOG_STR_OHCI);
}
bool OHCI::OHCI_ReadHCCA(xbaddr Paddr, OHCI_HCCA* Hcca)
@@ -546,7 +534,7 @@ int OHCI::OHCI_ServiceEDlist(xbaddr Head, int Completion)
for (current = Head; current; current = next_ed) {
if (OHCI_ReadED(current, &ed)) {
- EmuWarning("%s: ED read error at physical address 0x%X", LOG_STR_OHCI, current);
+ EmuWarning("%s ED read error at physical address 0x%X", LOG_STR_OHCI, current);
OHCI_FatalError();
return 0;
}
@@ -623,12 +611,12 @@ int OHCI::OHCI_ServiceTD(OHCI_ED* Ed)
addr = Ed->HeadP & OHCI_DPTR_MASK;
// See if this TD has already been submitted to the device
completion = (addr == m_AsyncTD);
- if (completion && !m_AsyncComplete) { // ??
+ if (completion && !m_AsyncComplete) {
DbgPrintf("Skipping async TD\n");
return 1;
}
if (OHCI_ReadTD(addr, &td)) {
- EmuWarning("%s: TD read error at physical address 0x%X", LOG_STR_OHCI, addr);
+ EmuWarning("%s TD read error at physical address 0x%X", LOG_STR_OHCI, addr);
OHCI_FatalError();
return 0;
}
@@ -676,7 +664,7 @@ int OHCI::OHCI_ServiceTD(OHCI_ED* Ed)
pid = USB_TOKEN_SETUP;
break;
default:
- EmuWarning("%s: bad direction", LOG_STR_OHCI);
+ EmuWarning("%s bad direction", LOG_STR_OHCI);
return 1;
}
@@ -728,7 +716,7 @@ int OHCI::OHCI_ServiceTD(OHCI_ED* Ed)
// From XQEMU: "??? The hardware should allow one active packet per endpoint.
// We only allow one active packet per controller. This should be sufficient
// as long as devices respond in a timely manner."
- DbgPrintf("%s: too many pending packets\n", LOG_STR_OHCI);
+ DbgPrintf("%s too many pending packets\n", LOG_STR_OHCI);
return 1;
}
dev = OHCI_FindDevice(OHCI_BM(Ed->Flags, ED_FA));
@@ -802,29 +790,29 @@ int OHCI::OHCI_ServiceTD(OHCI_ED* Ed)
}
else {
if (ret >= 0) {
- DbgPrintf("%s: Underrun\n", LOG_STR_OHCI);
+ DbgPrintf("%s Underrun\n", LOG_STR_OHCI);
OHCI_SET_BM(td.Flags, TD_CC, OHCI_CC_DATAUNDERRUN);
}
else {
switch (ret) {
case USB_RET_IOERROR:
case USB_RET_NODEV:
- DbgPrintf("%s: Received DEV ERROR\n", LOG_STR_OHCI);
+ DbgPrintf("%s Received DEV ERROR\n", LOG_STR_OHCI);
OHCI_SET_BM(td.Flags, TD_CC, OHCI_CC_DEVICENOTRESPONDING);
break;
case USB_RET_NAK:
- DbgPrintf("%s: Received NAK\n", LOG_STR_OHCI);
+ DbgPrintf("%s Received NAK\n", LOG_STR_OHCI);
return 1;
case USB_RET_STALL:
- DbgPrintf("%s: Received STALL\n", LOG_STR_OHCI);
+ DbgPrintf("%s Received STALL\n", LOG_STR_OHCI);
OHCI_SET_BM(td.Flags, TD_CC, OHCI_CC_STALL);
break;
case USB_RET_BABBLE:
- DbgPrintf("%s: Received BABBLE\n", LOG_STR_OHCI);
+ DbgPrintf("%s Received BABBLE\n", LOG_STR_OHCI);
OHCI_SET_BM(td.Flags, TD_CC, OHCI_CC_DATAOVERRUN);
break;
default:
- DbgPrintf("%s: Bad device response %d\n", LOG_STR_OHCI, ret);
+ DbgPrintf("%s Bad device response %d\n", LOG_STR_OHCI, ret);
OHCI_SET_BM(td.Flags, TD_CC, OHCI_CC_UNDEXPETEDPID);
OHCI_SET_BM(td.Flags, TD_EC, 3);
}
@@ -921,16 +909,15 @@ void OHCI::OHCI_StateReset()
OHCI_StopEndpoints();
- DbgPrintf("%s: Reset mode event.\n", LOG_STR_OHCI);
+ DbgPrintf("%s Reset mode event.\n", LOG_STR_OHCI);
}
void OHCI::OHCI_BusStart()
{
// Create the EOF timer. Let's try a factor of 50 (1 virtual ms -> 50 real ms)
- m_pEOFtimer = Timer_Create(OHCI_FrameBoundaryWrapper, this, 100);
- TestOut("Bus start.\n");
+ m_pEOFtimer = Timer_Create(OHCI_FrameBoundaryWrapper, this, 100);
- DbgPrintf("%s: Operational mode event\n", LOG_STR_OHCI);
+ DbgPrintf("%s Operational mode event\n", LOG_STR_OHCI);
// SOF event
OHCI_SOF(true);
@@ -942,16 +929,13 @@ void OHCI::OHCI_BusStop()
// Delete existing EOF timer
Timer_Exit(m_pEOFtimer);
}
- m_pEOFtimer = nullptr;
- TestOut("Bus stop\n");
+ m_pEOFtimer = nullptr;
}
void OHCI::OHCI_SOF(bool bCreate)
{
// set current SOF time
- m_SOFtime = GetTime_NS(m_pEOFtimer);
-
- TestOut("OHCI_SOF -> m_SOFtime is 0x%X\n", m_SOFtime);
+ m_SOFtime = GetTime_NS(m_pEOFtimer);
// make timer expire at SOF + 1 virtual ms from now
if (bCreate) {
@@ -965,9 +949,7 @@ void OHCI::OHCI_ChangeState(uint32_t Value)
{
uint32_t OldState = m_Registers.HcControl & OHCI_CTL_HCFS;
m_Registers.HcControl = Value;
- uint32_t NewState = m_Registers.HcControl & OHCI_CTL_HCFS;
-
- TestOut("OldState 0x%X\n", OldState);
+ uint32_t NewState = m_Registers.HcControl & OHCI_CTL_HCFS;
// no state change
if (OldState == NewState) {
@@ -977,28 +959,24 @@ void OHCI::OHCI_ChangeState(uint32_t Value)
switch (NewState)
{
case Operational:
- OHCI_BusStart();
- TestOut("NewState Operational\n");
+ OHCI_BusStart();
break;
case Suspend:
OHCI_BusStop();
- DbgPrintf("%s: Suspend mode event\n", LOG_STR_OHCI);
- TestOut("NewState Suspend\n");
+ DbgPrintf("%s Suspend mode event\n", LOG_STR_OHCI);
break;
case Resume:
- DbgPrintf("%s: Resume mode event\n", LOG_STR_OHCI);
- TestOut("NewState Resume\n");
+ DbgPrintf("%s Resume mode event\n", LOG_STR_OHCI);
break;
case Reset:
- OHCI_StateReset();
- TestOut("NewState Reset\n");
+ OHCI_StateReset();
break;
default:
- EmuWarning("%s: Unknown USB mode!", LOG_STR_OHCI);
+ EmuWarning("%s Unknown USB mode!", LOG_STR_OHCI);
}
}
@@ -1017,136 +995,112 @@ uint32_t OHCI::OHCI_ReadRegister(xbaddr Addr)
if (Addr & 3) {
// The standard allows only aligned reads to the registers
- DbgPrintf("%s: Unaligned read. Ignoring.\n", LOG_STR_OHCI);
+ DbgPrintf("%s Unaligned read. Ignoring.\n", LOG_STR_OHCI);
return ret;
}
else {
switch (Addr >> 2) // read the register
{
case 0: // HcRevision
- ret = m_Registers.HcRevision;
- TestOut("m_Registers.HcRevision: 0x%X\n", m_Registers.HcRevision);
+ ret = m_Registers.HcRevision;
break;
case 1: // HcControl
- ret = m_Registers.HcControl;
- TestOut("m_Registers.HcControl: 0x%X\n", m_Registers.HcControl);
+ ret = m_Registers.HcControl;
break;
case 2: // HcCommandStatus
- ret = m_Registers.HcCommandStatus;
- TestOut("m_Registers.HcCommandStatus: 0x%X\n", m_Registers.HcCommandStatus);
+ ret = m_Registers.HcCommandStatus;
break;
case 3: // HcInterruptStatus
- ret = m_Registers.HcInterruptStatus;
- TestOut("m_Registers.HcInterruptStatus: 0x%X\n", m_Registers.HcInterruptStatus);
+ ret = m_Registers.HcInterruptStatus;
break;
case 4: // HcInterruptEnable
case 5: // HcInterruptDisable
- ret = m_Registers.HcInterrupt;
- TestOut("m_Registers.HcInterrupt: 0x%X\n", m_Registers.HcInterrupt);
+ ret = m_Registers.HcInterrupt;
break;
case 6: // HcHCCA
- ret = m_Registers.HcHCCA;
- TestOut("m_Registers.HcHCCA: 0x%X\n", m_Registers.HcHCCA);
+ ret = m_Registers.HcHCCA;
break;
case 7: // HcPeriodCurrentED
- ret = m_Registers.HcPeriodCurrentED;
- TestOut("m_Registers.HcPeriodCurrentED: 0x%X\n", m_Registers.HcPeriodCurrentED);
+ ret = m_Registers.HcPeriodCurrentED;
break;
case 8: // HcControlHeadED
- ret = m_Registers.HcControlHeadED;
- TestOut("m_Registers.HcControlHeadED: 0x%X\n", m_Registers.HcControlHeadED);
+ ret = m_Registers.HcControlHeadED;
break;
case 9: // HcControlCurrentED
- ret = m_Registers.HcControlCurrentED;
- TestOut("m_Registers.HcControlCurrentED: 0x%X\n", m_Registers.HcControlCurrentED);
+ ret = m_Registers.HcControlCurrentED;
break;
case 10: // HcBulkHeadED
- ret = m_Registers.HcBulkHeadED;
- TestOut("m_Registers.HcBulkHeadED: 0x%X\n", m_Registers.HcBulkHeadED);
+ ret = m_Registers.HcBulkHeadED;
break;
case 11: // HcBulkCurrentED
- ret = m_Registers.HcBulkCurrentED;
- TestOut("m_Registers.HcBulkCurrentED: 0x%X\n", m_Registers.HcBulkCurrentED);
+ ret = m_Registers.HcBulkCurrentED;
break;
case 12: // HcDoneHead
- ret = m_Registers.HcDoneHead;
- TestOut("m_Registers.HcDoneHead: 0x%X\n", m_Registers.HcDoneHead);
+ ret = m_Registers.HcDoneHead;
break;
case 13: // HcFmInterval
- ret = m_Registers.HcFmInterval;
- TestOut("m_Registers.HcFmInterval: 0x%X\n", m_Registers.HcFmInterval);
+ ret = m_Registers.HcFmInterval;
break;
case 14: // HcFmRemaining
- ret = OHCI_GetFrameRemaining();
- TestOut("m_Registers.HcFmRemaining: 0x%X\n", m_Registers.HcFmRemaining);
+ ret = OHCI_GetFrameRemaining();
break;
case 15: // HcFmNumber
- ret = m_Registers.HcFmNumber;
- TestOut("m_Registers.HcFmNumber: 0x%X\n", m_Registers.HcFmNumber);
+ ret = m_Registers.HcFmNumber;
break;
case 16: // HcPeriodicStart
- ret = m_Registers.HcPeriodicStart;
- TestOut("m_Registers.HcPeriodicStart: 0x%X\n", m_Registers.HcPeriodicStart);
+ ret = m_Registers.HcPeriodicStart;
break;
case 17: // HcLSThreshold
- ret = m_Registers.HcLSThreshold;
- TestOut("m_Registers.HcLSThreshold: 0x%X\n", m_Registers.HcLSThreshold);
+ ret = m_Registers.HcLSThreshold;
break;
case 18: // HcRhDescriptorA
- ret = m_Registers.HcRhDescriptorA;
- TestOut("m_Registers.HcRhDescriptorA: 0x%X\n", m_Registers.HcRhDescriptorA);
+ ret = m_Registers.HcRhDescriptorA;
break;
case 19: // HcRhDescriptorB
- ret = m_Registers.HcRhDescriptorB;
- TestOut("m_Registers.HcRhDescriptorB: 0x%X\n", m_Registers.HcRhDescriptorB);
+ ret = m_Registers.HcRhDescriptorB;
break;
case 20: // HcRhStatus
- ret = m_Registers.HcRhStatus;
- TestOut("m_Registers.HcRhStatus: 0x%X\n", m_Registers.HcRhStatus);
+ ret = m_Registers.HcRhStatus;
break;
// Always report that the port power is on since the Xbox cannot switch off the electrical current to it
case 21: // RhPort 0
- ret = m_Registers.RhPort[0].HcRhPortStatus | OHCI_PORT_PPS;
- TestOut("m_Registers.RhPort[0].HcRhPortStatus: 0x%X\n", ret);
+ ret = m_Registers.RhPort[0].HcRhPortStatus | OHCI_PORT_PPS;
break;
case 22: // RhPort 1
- ret = m_Registers.RhPort[1].HcRhPortStatus | OHCI_PORT_PPS;
- TestOut("m_Registers.RhPort[1].HcRhPortStatus: 0x%X\n", ret);
+ ret = m_Registers.RhPort[1].HcRhPortStatus | OHCI_PORT_PPS;
break;
case 23:
ret = m_Registers.RhPort[2].HcRhPortStatus | OHCI_PORT_PPS;
- TestOut("m_Registers.RhPort[2].HcRhPortStatus: 0x%X\n", ret);
break;
case 24:
ret = m_Registers.RhPort[3].HcRhPortStatus | OHCI_PORT_PPS;
- TestOut("m_Registers.RhPort[3].HcRhPortStatus: 0x%X\n", ret);
break;
default:
- EmuWarning("%s: Read register operation with bad offset %u. Ignoring.", LOG_STR_OHCI, Addr >> 2);
+ EmuWarning("%s Read register operation with bad offset %u. Ignoring.", LOG_STR_OHCI, Addr >> 2);
}
return ret;
}
@@ -1156,27 +1110,23 @@ void OHCI::OHCI_WriteRegister(xbaddr Addr, uint32_t Value)
{
if (Addr & 3) {
// The standard allows only aligned writes to the registers
- DbgPrintf("%s: Unaligned write. Ignoring.\n", LOG_STR_OHCI);
+ DbgPrintf("%s Unaligned write. Ignoring.\n", LOG_STR_OHCI);
return;
}
else {
switch (Addr >> 2)
{
case 0: // HcRevision
- // This register is read-only
- TestOut("W m_Registers.HcRevision: 0x%X\n", Value);
+ // This register is read-only
break;
- case 1: // HcControl
- TestOut("W m_Registers.HcControl: 0x%X\n", Value);
- OHCI_ChangeState(Value);
- TestOut("W m_Registers.HcControl: 0x%X\n", m_Registers.HcControl);
+ case 1: // HcControl
+ OHCI_ChangeState(Value);
break;
case 2: // HcCommandStatus
{
- // SOC is read-only
- TestOut("W m_Registers.HcCommandStatus: 0x%X\n", Value);
+ // SOC is read-only
Value &= ~OHCI_STATUS_SOC;
// From the standard: "The Host Controller must ensure that bits written as 1 become set
@@ -1186,150 +1136,110 @@ void OHCI::OHCI_WriteRegister(xbaddr Addr, uint32_t Value)
if (m_Registers.HcCommandStatus & OHCI_STATUS_HCR) {
// Do a hardware reset
OHCI_StateReset();
- }
- TestOut("W m_Registers.HcCommandStatus: 0x%X\n", m_Registers.HcCommandStatus);
+ }
}
break;
- case 3: // HcInterruptStatus
- TestOut("W m_Registers.HcInterruptStatus: 0x%X\n", Value);
+ case 3: // HcInterruptStatus
m_Registers.HcInterruptStatus &= ~Value;
- OHCI_UpdateInterrupt();
- TestOut("W m_Registers.HcInterruptStatus: 0x%X\n", m_Registers.HcInterruptStatus);
+ OHCI_UpdateInterrupt();
break;
- case 4: // HcInterruptEnable
- TestOut("W m_Registers.HcInterruptEnable: 0x%X\n", Value);
+ case 4: // HcInterruptEnable
m_Registers.HcInterrupt |= Value;
- OHCI_UpdateInterrupt();
- TestOut("W m_Registers.HcInterruptEnable: 0x%X\n", m_Registers.HcInterrupt);
+ OHCI_UpdateInterrupt();
break;
- case 5: // HcInterruptDisable
- TestOut("W m_Registers.HcInterruptDisable: 0x%X\n", Value);
+ case 5: // HcInterruptDisable
m_Registers.HcInterrupt &= ~Value;
- OHCI_UpdateInterrupt();
- TestOut("W m_Registers.HcInterruptDisable: 0x%X\n", m_Registers.HcInterrupt);
+ OHCI_UpdateInterrupt();
break;
case 6: // HcHCCA
- // The standard says the minimum alignment is 256 bytes and so bits 0 through 7 are always zero
- TestOut("W m_Registers.HcHCCA: 0x%X\n", Value);
- m_Registers.HcHCCA = Value & OHCI_HCCA_MASK;
- TestOut("W m_Registers.HcHCCA: 0x%X\n", m_Registers.HcHCCA);
+ // The standard says the minimum alignment is 256 bytes and so bits 0 through 7 are always zero
+ m_Registers.HcHCCA = Value & OHCI_HCCA_MASK;
break;
case 7: // HcPeriodCurrentED
- // This register is read-only
- TestOut("W m_Registers.HcPeriodCurrentED: 0x%X\n", Value);
+ // This register is read-only
break;
- case 8: // HcControlHeadED
- TestOut("W m_Registers.HcControlHeadED: 0x%X\n", Value);
- m_Registers.HcControlHeadED = Value & OHCI_DPTR_MASK;
- TestOut("W m_Registers.HcControlHeadED: 0x%X\n", m_Registers.HcControlHeadED);
+ case 8: // HcControlHeadED
+ m_Registers.HcControlHeadED = Value & OHCI_DPTR_MASK;
break;
- case 9: // HcControlCurrentED
- TestOut("W m_Registers.HcControlCurrentED: 0x%X\n", Value);
- m_Registers.HcControlCurrentED = Value & OHCI_DPTR_MASK;
- TestOut("W m_Registers.HcControlCurrentED: 0x%X\n", m_Registers.HcControlCurrentED);
+ case 9: // HcControlCurrentED
+ m_Registers.HcControlCurrentED = Value & OHCI_DPTR_MASK;
break;
- case 10: // HcBulkHeadED
- TestOut("W m_Registers.HcBulkHeadED: 0x%X\n", Value);
- m_Registers.HcBulkHeadED = Value & OHCI_DPTR_MASK;
- TestOut("W m_Registers.HcBulkHeadED: 0x%X\n", m_Registers.HcBulkHeadED);
+ case 10: // HcBulkHeadED
+ m_Registers.HcBulkHeadED = Value & OHCI_DPTR_MASK;
break;
- case 11: // HcBulkCurrentED
- TestOut("W m_Registers.HcBulkCurrentED: 0x%X\n", Value);
- m_Registers.HcBulkCurrentED = Value & OHCI_DPTR_MASK;
- TestOut("W m_Registers.HcBulkCurrentED: 0x%X\n", m_Registers.HcBulkCurrentED);
+ case 11: // HcBulkCurrentED
+ m_Registers.HcBulkCurrentED = Value & OHCI_DPTR_MASK;
break;
- case 12: // HcDoneHead
- TestOut("W m_Registers.HcDoneHead: 0x%X\n", Value);
+ case 12: // HcDoneHead
// This register is read-only
break;
case 13: // HcFmInterval
- {
- TestOut("W m_Registers.HcFmInterval: 0x%X\n", Value);
+ {
if ((Value & OHCI_FMI_FI) != (m_Registers.HcFmInterval & OHCI_FMI_FI)) {
- DbgPrintf("%s: Changing frame interval duration. New value is %u\n", LOG_STR_OHCI, Value & OHCI_FMI_FI);
+ DbgPrintf("%s Changing frame interval duration. New value is %u\n", LOG_STR_OHCI, Value & OHCI_FMI_FI);
}
- m_Registers.HcFmInterval = Value & ~0xC000;
- TestOut("W m_Registers.HcFmInterval: 0x%X\n", m_Registers.HcFmInterval);
+ m_Registers.HcFmInterval = Value & ~0xC000;
}
break;
case 14: // HcFmRemaining
- // This register is read-only
- TestOut("W m_Registers.HcFmRemaining: 0x%X\n", Value);
+ // This register is read-only
break;
case 15: // HcFmNumber
- // This register is read-only
- TestOut("W m_Registers.HcFmNumber: 0x%X\n", Value);
+ // This register is read-only
break;
- case 16: // HcPeriodicStart
- TestOut("W m_Registers.HcPeriodicStart: 0x%X\n", Value);
- m_Registers.HcPeriodicStart = Value & 0x3FFF;
- TestOut("W m_Registers.HcPeriodicStart: 0x%X\n", m_Registers.HcPeriodicStart);
+ case 16: // HcPeriodicStart
+ m_Registers.HcPeriodicStart = Value & 0x3FFF;
break;
- case 17: // HcLSThreshold
- TestOut("W m_Registers.HcLSThreshold: 0x%X\n", Value);
- m_Registers.HcLSThreshold = Value & 0xFFF;
- TestOut("W m_Registers.HcLSThreshold: 0x%X\n", m_Registers.HcLSThreshold);
+ case 17: // HcLSThreshold
+ m_Registers.HcLSThreshold = Value & 0xFFF;
break;
- case 18: // HcRhDescriptorA
- TestOut("W m_Registers.HcRhDescriptorA: 0x%X\n", Value);
+ case 18: // HcRhDescriptorA
m_Registers.HcRhDescriptorA &= ~OHCI_RHA_RW_MASK;
- m_Registers.HcRhDescriptorA |= Value & OHCI_RHA_RW_MASK; // ??
- TestOut("W m_Registers.HcRhDescriptorA: 0x%X\n", m_Registers.HcRhDescriptorA);
+ m_Registers.HcRhDescriptorA |= Value & OHCI_RHA_RW_MASK; // ??
break;
- case 19: // HcRhDescriptorB
- TestOut("W m_Registers.HcRhDescriptorB: 0x%X\n", Value);
+ case 19: // HcRhDescriptorB
// Don't do anything, the attached devices are all removable and PowerSwitchingMode is always 0
break;
- case 20: // HcRhStatus
- TestOut("W m_Registers.HcRhStatus: 0x%X\n", Value);
- OHCI_SetHubStatus(Value);
- TestOut("W m_Registers.HcRhStatus: 0x%X\n", m_Registers.HcRhStatus);
+ case 20: // HcRhStatus
+ OHCI_SetHubStatus(Value);
break;
- case 21: // RhPort 0
- TestOut("W m_Registers.RhPort 0: 0x%X\n", Value);
- OHCI_PortSetStatus(0, Value);
- TestOut("W m_Registers.RhPort 0: 0x%X\n", m_Registers.RhPort[0].HcRhPortStatus);
+ case 21: // RhPort 0
+ OHCI_PortSetStatus(0, Value);
break;
- case 22: // RhPort 1
- TestOut("W m_Registers.RhPort 1: 0x%X\n", Value);
- OHCI_PortSetStatus(1, Value);
- TestOut("W m_Registers.RhPort 1: 0x%X\n", m_Registers.RhPort[1].HcRhPortStatus);
+ case 22: // RhPort 1
+ OHCI_PortSetStatus(1, Value);
break;
- case 23: // RhPort 2
- TestOut("W m_Registers.RhPort 2: 0x%X\n", Value);
+ case 23: // RhPort 2
OHCI_PortSetStatus(2, Value);
- TestOut("W m_Registers.RhPort 2: 0x%X\n", m_Registers.RhPort[2].HcRhPortStatus);
break;
- case 24: // RhPort 3
- TestOut("W m_Registers.RhPort 3: 0x%X\n", Value);
+ case 24: // RhPort 3
OHCI_PortSetStatus(3, Value);
- TestOut("W m_Registers.RhPort 3: 0x%X\n", m_Registers.RhPort[3].HcRhPortStatus);
break;
default:
- EmuWarning("%s: Write register operation with bad offset %u. Ignoring.", LOG_STR_OHCI, Addr >> 2);
+ EmuWarning("%s Write register operation with bad offset %u. Ignoring.", LOG_STR_OHCI, Addr >> 2);
}
}
}
@@ -1338,8 +1248,7 @@ void OHCI::OHCI_UpdateInterrupt()
{
if ((m_Registers.HcInterrupt & OHCI_INTR_MIE) && (m_Registers.HcInterruptStatus & m_Registers.HcInterrupt)) {
HalSystemInterrupts[1].Assert(false);
- HalSystemInterrupts[1].Assert(true);
- TestOut("Fired interrupt -> m_Registers.HcInterruptStatus is 0x%X\n", m_Registers.HcInterruptStatus);
+ HalSystemInterrupts[1].Assert(true);
}
}
@@ -1406,7 +1315,7 @@ void OHCI::OHCI_SetHubStatus(uint32_t Value)
for (i = 0; i < 4; i++) {
OHCI_PortPower(i, 0);
}
- DbgPrintf("%s: powered down all ports\n", LOG_STR_OHCI);
+ DbgPrintf("%s powered down all ports\n", LOG_STR_OHCI);
}
if (Value & OHCI_RHS_LPSC) {
@@ -1415,7 +1324,7 @@ void OHCI::OHCI_SetHubStatus(uint32_t Value)
for (i = 0; i < 4; i++) {
OHCI_PortPower(i, 1);
}
- DbgPrintf("%s: powered up all ports\n", LOG_STR_OHCI);
+ DbgPrintf("%s powered up all ports\n", LOG_STR_OHCI);
}
if (Value & OHCI_RHS_DRWE) {
@@ -1464,11 +1373,11 @@ void OHCI::OHCI_PortSetStatus(int PortNum, uint32_t Value)
OHCI_PortSetIfConnected(PortNum, Value & OHCI_PORT_PES);
if (OHCI_PortSetIfConnected(PortNum, Value & OHCI_PORT_PSS)) {
- DbgPrintf("%s: port %d: SUSPEND\n", LOG_STR_OHCI, PortNum);
+ DbgPrintf("%s port %d: SUSPEND\n", LOG_STR_OHCI, PortNum);
}
if (OHCI_PortSetIfConnected(PortNum, Value & OHCI_PORT_PRS)) {
- DbgPrintf("%s: port %d: RESET\n", LOG_STR_OHCI, PortNum);
+ DbgPrintf("%s port %d: RESET\n", LOG_STR_OHCI, PortNum);
m_UsbDevice->USB_DeviceReset(port->UsbPort.Dev);
port->HcRhPortStatus &= ~OHCI_PORT_PRS;
// ??? Should this also set OHCI_PORT_PESC
@@ -1520,9 +1429,7 @@ int OHCI::OHCI_PortSetIfConnected(int i, uint32_t Value)
void OHCI::OHCI_Detach(USBPort* Port)
{
OHCIPort* port = &m_Registers.RhPort[Port->PortIndex];
- uint32_t old_state = port->HcRhPortStatus;
-
- TestOut("OHCI_Detach\n");
+ uint32_t old_state = port->HcRhPortStatus;
OHCI_AsyncCancelDevice(Port->Dev);
@@ -1538,7 +1445,7 @@ void OHCI::OHCI_Detach(USBPort* Port)
port->HcRhPortStatus |= OHCI_PORT_PESC;
}
- DbgPrintf("%s: Detached port %d\n", LOG_STR_OHCI, Port->PortIndex);
+ DbgPrintf("%s Detached port %d\n", LOG_STR_OHCI, Port->PortIndex);
if (old_state != port->HcRhPortStatus) {
OHCI_SetInterrupt(OHCI_INTR_RHSC);
@@ -1548,9 +1455,7 @@ void OHCI::OHCI_Detach(USBPort* Port)
void OHCI::OHCI_Attach(USBPort* Port)
{
OHCIPort* port = &m_Registers.RhPort[Port->PortIndex];
- uint32_t old_state = port->HcRhPortStatus;
-
- TestOut("OHCI_Attach\n");
+ uint32_t old_state = port->HcRhPortStatus;
// set connect status
port->HcRhPortStatus |= OHCI_PORT_CCS | OHCI_PORT_CSC;
@@ -1568,7 +1473,7 @@ void OHCI::OHCI_Attach(USBPort* Port)
OHCI_SetInterrupt(OHCI_INTR_RD);
}
- DbgPrintf("%s: Attached port %d\n", LOG_STR_OHCI, Port->PortIndex);
+ DbgPrintf("%s Attached port %d\n", LOG_STR_OHCI, Port->PortIndex);
if (old_state != port->HcRhPortStatus) {
OHCI_SetInterrupt(OHCI_INTR_RHSC);
@@ -1576,25 +1481,23 @@ void OHCI::OHCI_Attach(USBPort* Port)
}
void OHCI::OHCI_ChildDetach(XboxDeviceState* child)
-{
- TestOut("OHCI_ChildDetach\n");
+{
OHCI_AsyncCancelDevice(child);
}
void OHCI::OHCI_Wakeup(USBPort* port1)
{
- TestOut("OHCI_Wakeup\n");
OHCIPort* port = &m_Registers.RhPort[port1->PortIndex];
uint32_t intr = 0;
if (port->HcRhPortStatus & OHCI_PORT_PSS) {
- DbgPrintf("%s: port %d: wakeup\n", LOG_STR_OHCI, port1->PortIndex);
+ DbgPrintf("%s port %d: wakeup\n", LOG_STR_OHCI, port1->PortIndex);
port->HcRhPortStatus |= OHCI_PORT_PSSC;
port->HcRhPortStatus &= ~OHCI_PORT_PSS;
intr = OHCI_INTR_RHSC;
}
// Note that the controller can be suspended even if this port is not
if ((m_Registers.HcControl & OHCI_CTL_HCFS) == Suspend) {
- DbgPrintf("%s: remote-wakeup: SUSPEND->RESUME\n", LOG_STR_OHCI);
+ DbgPrintf("%s remote-wakeup: SUSPEND->RESUME\n", LOG_STR_OHCI);
// From the standard: "The only interrupts possible in the USBSUSPEND state are ResumeDetected (the
// Host Controller will have changed the HostControllerFunctionalState to the USBRESUME state)
// and OwnershipChange."
@@ -1629,7 +1532,7 @@ void OHCI::OHCI_ProcessLists(int completion)
// Only process the control list if it is enabled (HcControl) and has available TD's (HcCommandStatus)
if ((m_Registers.HcControl & OHCI_CTL_CLE) && (m_Registers.HcCommandStatus & OHCI_STATUS_CLF)) {
if (m_Registers.HcControlCurrentED && m_Registers.HcControlCurrentED != m_Registers.HcControlHeadED) {
- DbgPrintf("%s: head 0x%X, current 0x%X\n",
+ DbgPrintf("%s head 0x%X, current 0x%X\n",
LOG_STR_OHCI, m_Registers.HcControlHeadED, m_Registers.HcControlCurrentED);
}
if (!OHCI_ServiceEDlist(m_Registers.HcControlHeadED, completion)) {
@@ -1670,7 +1573,7 @@ int OHCI::OHCI_ServiceIsoTD(OHCI_ED* ed, int completion)
addr = ed->HeadP & OHCI_DPTR_MASK;
if (OHCI_ReadIsoTD(addr, &iso_td)) {
- DbgPrintf("%s: ISO_TD read error at physical address 0x%X\n", LOG_STR_OHCI, addr);
+ DbgPrintf("%s ISO_TD read error at physical address 0x%X\n", LOG_STR_OHCI, addr);
OHCI_FatalError();
return 0;
}
@@ -1701,13 +1604,13 @@ int OHCI::OHCI_ServiceIsoTD(OHCI_ED* ed, int completion)
if (relative_frame_number < 0) {
// From the standard: "If the relative frame number is negative, then the current frame is earlier than the 0th frame
// of the Isochronous TD and the Host Controller advances to the next ED."
- DbgPrintf("%s: ISO_TD R=%d < 0\n", LOG_STR_OHCI, relative_frame_number);
+ DbgPrintf("%s ISO_TD R=%d < 0\n", LOG_STR_OHCI, relative_frame_number);
return 1;
}
else if (relative_frame_number > frame_count) {
// From the standard: "If the relative frame number is greater than
// FrameCount, then the Isochronous TD has expired and a error condition exists."
- DbgPrintf("%s: ISO_TD R=%d > FC=%d\n", LOG_STR_OHCI, relative_frame_number, frame_count);
+ DbgPrintf("%s ISO_TD R=%d > FC=%d\n", LOG_STR_OHCI, relative_frame_number, frame_count);
OHCI_SET_BM(iso_td.Flags, TD_CC, OHCI_CC_DATAOVERRUN);
ed->HeadP &= ~OHCI_DPTR_MASK;
ed->HeadP |= (iso_td.NextTD & OHCI_DPTR_MASK);
@@ -1748,12 +1651,12 @@ int OHCI::OHCI_ServiceIsoTD(OHCI_ED* ed, int completion)
pid = USB_TOKEN_SETUP;
break;
default:
- EmuWarning("%s: Bad direction %d", LOG_STR_OHCI, dir);
+ EmuWarning("%s Bad direction %d", LOG_STR_OHCI, dir);
return 1;
}
if (!iso_td.BufferPage0 || !iso_td.BufferEnd) {
- DbgPrintf("%s: ISO_TD bp 0x%.8X be 0x%.8X\n", LOG_STR_OHCI, iso_td.BufferPage0, iso_td.BufferEnd);
+ DbgPrintf("%s ISO_TD bp 0x%.8X be 0x%.8X\n", LOG_STR_OHCI, iso_td.BufferPage0, iso_td.BufferEnd);
return 1;
}
@@ -1771,12 +1674,12 @@ int OHCI::OHCI_ServiceIsoTD(OHCI_ED* ed, int completion)
if (!(OHCI_BM(start_offset, TD_PSW_CC) & 0xE) ||
((relative_frame_number < frame_count) &&
!(OHCI_BM(next_offset, TD_PSW_CC) & 0xE))) {
- DbgPrintf("%s: ISO_TD cc != not accessed 0x%.8x 0x%.8x\n", LOG_STR_OHCI, start_offset, next_offset);
+ DbgPrintf("%s ISO_TD cc != not accessed 0x%.8x 0x%.8x\n", LOG_STR_OHCI, start_offset, next_offset);
return 1;
}
if ((relative_frame_number < frame_count) && (start_offset > next_offset)) {
- printf("%s: ISO_TD start_offset=0x%.8x > next_offset=0x%.8x\n", LOG_STR_OHCI, start_offset, next_offset);
+ printf("%s ISO_TD start_offset=0x%.8x > next_offset=0x%.8x\n", LOG_STR_OHCI, start_offset, next_offset);
return 1;
}
@@ -1874,12 +1777,12 @@ int OHCI::OHCI_ServiceIsoTD(OHCI_ED* ed, int completion)
else {
// Handle the error condition
if (ret > static_cast(len)) { // Sequence Error
- DbgPrintf("%s: DataOverrun %d > %zu\n", LOG_STR_OHCI, ret, len);
+ DbgPrintf("%s DataOverrun %d > %zu\n", LOG_STR_OHCI, ret, len);
OHCI_SET_BM(iso_td.Offset[relative_frame_number], TD_PSW_CC, OHCI_CC_DATAOVERRUN);
OHCI_SET_BM(iso_td.Offset[relative_frame_number], TD_PSW_SIZE, len);
}
else if (ret >= 0) { // Sequence Error
- DbgPrintf("%s: DataUnderrun %d\n", LOG_STR_OHCI, ret);
+ DbgPrintf("%s DataUnderrun %d\n", LOG_STR_OHCI, ret);
OHCI_SET_BM(iso_td.Offset[relative_frame_number], TD_PSW_CC, OHCI_CC_DATAUNDERRUN);
}
else {
@@ -1891,12 +1794,12 @@ int OHCI::OHCI_ServiceIsoTD(OHCI_ED* ed, int completion)
break;
case USB_RET_NAK: // NAK and STALL
case USB_RET_STALL:
- DbgPrintf("%s: got NAK/STALL %d\n", LOG_STR_OHCI, ret);
+ DbgPrintf("%s got NAK/STALL %d\n", LOG_STR_OHCI, ret);
OHCI_SET_BM(iso_td.Offset[relative_frame_number], TD_PSW_CC, OHCI_CC_STALL);
OHCI_SET_BM(iso_td.Offset[relative_frame_number], TD_PSW_SIZE, 0);
break;
default: // Unknown Error
- DbgPrintf("%s: Bad device response %d\n", LOG_STR_OHCI, ret);
+ DbgPrintf("%s Bad device response %d\n", LOG_STR_OHCI, ret);
OHCI_SET_BM(iso_td.Offset[relative_frame_number], TD_PSW_CC, OHCI_CC_UNDEXPETEDPID);
break;
}
diff --git a/src/devices/usb/OHCI.h b/src/devices/usb/OHCI.h
index 1734df856..22ea569fd 100644
--- a/src/devices/usb/OHCI.h
+++ b/src/devices/usb/OHCI.h
@@ -178,8 +178,8 @@ class OHCI
int m_DoneCount;
// the address of the pending TD
xbaddr m_AsyncTD = xbnull;
- // ergo720: I think it signals that a TD has been processed completely
- bool m_AsyncComplete = 0;
+ // indicates if there is s a pending asynchronous packet to process
+ int m_AsyncComplete = 0;
// EOF callback wrapper
static void OHCI_FrameBoundaryWrapper(void* pVoid);
diff --git a/src/devices/usb/USBDevice.cpp b/src/devices/usb/USBDevice.cpp
index 91da0c401..37958332a 100644
--- a/src/devices/usb/USBDevice.cpp
+++ b/src/devices/usb/USBDevice.cpp
@@ -55,6 +55,9 @@ namespace xboxkrnl
#define SETUP_STATE_ACK 3
#define SETUP_STATE_PARAM 4
+
+// Acknowledgment: XQEMU (GPLv2)
+
void USBDevice::Init(unsigned int address)
{
@@ -203,10 +206,9 @@ void USBDevice::USB_PacketSetup(USBPacket* p, int Pid, USBEndpoint* Ep, unsigned
p->Stream = Stream;
p->Status = USB_RET_SUCCESS;
p->ActualLength = 0;
- p->Parameter = 0;
+ p->Parameter = 0ULL;
p->ShortNotOK = ShortNotOK;
p->IntReq = IntReq;
- p->Combined = nullptr;
IoVecReset(&p->IoVec);
p->State = USB_PACKET_SETUP;
}
@@ -505,7 +507,7 @@ void USBDevice::DoTokenOut(XboxDeviceState* s, USBPacket* p)
void USBDevice::USB_PacketCopy(USBPacket* p, void* ptr, size_t bytes)
{
- IOVector* iov = p->Combined ? &p->Combined->IoVec : &p->IoVec;
+ IOVector* iov = &p->IoVec;
assert(p->ActualLength >= 0);
assert(p->ActualLength + bytes <= iov->Size);
diff --git a/src/devices/usb/UsbCommon.h b/src/devices/usb/UsbCommon.h
index 3efe6135e..d9c1eb295 100644
--- a/src/devices/usb/UsbCommon.h
+++ b/src/devices/usb/UsbCommon.h
@@ -205,7 +205,7 @@ struct USBDescIface {
uint8_t ndesc; // number of device-specific class descriptors (if any)
USBDescOther* descs; // pointer to the extra class descriptors
- const USBDescEndpoint* eps; // endpoints supported by this interface
+ const USBDescEndpoint* eps; // endpoints supported by this interface
};
/*
@@ -415,12 +415,6 @@ struct XboxDeviceState {
const USBDescIface* Ifaces[USB_MAX_INTERFACES]; // interface in use
};
-struct USBCombinedPacket {
- USBPacket* First;
- QTAILQ_HEAD(packets_head, USBPacket) Packets;
- IOVector IoVec;
-};
-
/* Structure used to hold information about an active USB packet */
struct USBPacket {
int Pid; // Packet ID (used to identify the type of packet that is being sent)
@@ -435,9 +429,7 @@ struct USBPacket {
int ActualLength; // number of bytes actually written to DataBuffer
// Internal use by the USB layer
USBPacketState State;
- USBCombinedPacket* Combined;
QTAILQ_ENTRY(USBPacket) Queue;
- QTAILQ_ENTRY(USBPacket) CombinedEntry;
};
struct USBPortOps {
diff --git a/src/devices/usb/XidGamepad.cpp b/src/devices/usb/XidGamepad.cpp
index 9ca3292fe..0ce592a28 100644
--- a/src/devices/usb/XidGamepad.cpp
+++ b/src/devices/usb/XidGamepad.cpp
@@ -56,7 +56,11 @@ namespace xboxkrnl
#define HID_GET_REPORT 0x01
#define HID_SET_REPORT 0x09
-#define XID_GET_CAPABILITIES 0x01
+#define XID_GET_CAPABILITIES 0x01
+
+
+// Acknowledgment: XQEMU (GPLv2)
+
// To avoid including Xbox.h
extern USBDevice* g_USB0;
@@ -351,6 +355,7 @@ void XidGamepad::UsbXid_HandleControl(XboxDeviceState* dev, USBPacket* p,
// If the buffer has the correct length the full input data is transferred."
if (value == 0x0100) {
if (length <= m_XidState->in_state.bLength) {
+#if 0 // Reenable this when LLE USB actually works
SDL2Devices* controller = g_InputDeviceManager->FindDeviceFromXboxPort(m_Port);
if (controller != nullptr) {
controller->ReadButtonState(&m_XidState->in_state.wButtons, m_XidState->in_state.bAnalogButtons,
@@ -363,6 +368,7 @@ void XidGamepad::UsbXid_HandleControl(XboxDeviceState* dev, USBPacket* p,
p->Status = USB_RET_STALL;
assert(0);
}
+#endif
std::memcpy(data, &m_XidState->in_state, m_XidState->in_state.bLength);
p->ActualLength = length;
}
@@ -478,6 +484,7 @@ void XidGamepad::UsbXid_HandleData(XboxDeviceState* dev, USBPacket* p)
switch (p->Pid) {
case USB_TOKEN_IN: {
if (p->Endpoint->Num == 2) {
+#if 0 // Reenable this when LLE USB actually works
SDL2Devices* controller = g_InputDeviceManager->FindDeviceFromXboxPort(m_Port);
if (controller != nullptr) {
bool ret;
@@ -488,8 +495,10 @@ void XidGamepad::UsbXid_HandleData(XboxDeviceState* dev, USBPacket* p)
m_UsbDev->USB_PacketCopy(p, &m_XidState->in_state, m_XidState->in_state.bLength);
}
else {
+#endif
p->Status = USB_RET_NAK;
}
+#if 0 // Reenable this when LLE USB actually works
}
else {
p->Status = USB_RET_STALL;
@@ -499,6 +508,7 @@ void XidGamepad::UsbXid_HandleData(XboxDeviceState* dev, USBPacket* p)
else {
assert(0);
}
+#endif
break;
}