Compare commits
No commits in common. "master" and "CI-ff4f4f0" have entirely different histories.
master
...
CI-ff4f4f0
|
@ -8,6 +8,7 @@ skip_commits:
|
|||
- .github/*
|
||||
- .github/*/*
|
||||
- .azure-pipelines.yml
|
||||
- .travis.yml
|
||||
- CONTRIBUTORS
|
||||
- COPYING
|
||||
- README.md
|
||||
|
@ -15,17 +16,13 @@ skip_commits:
|
|||
- setup.bat
|
||||
|
||||
init:
|
||||
- ps: |-
|
||||
echo "This CI isn't tested against master, and therefore, isn't guaranteed to work. Pull requests are welcome."
|
||||
echo "If it doesn't work and you'd rather not fix it, it's recommended to use GitHub Actions CI instead."
|
||||
Update-AppveyorBuild -Version "$env:appveyor_repo_commit"
|
||||
- ps: Update-AppveyorBuild -Version "$env:appveyor_repo_commit"
|
||||
|
||||
image: # If this is modified, please also update the build script
|
||||
- Visual Studio 2019
|
||||
|
||||
configuration: # The builds will be run in this order
|
||||
- Release
|
||||
- Debug
|
||||
|
||||
before_build:
|
||||
- |-
|
||||
|
@ -39,8 +36,8 @@ build_script:
|
|||
|
||||
on_success:
|
||||
- ps: |-
|
||||
If ($env:configuration -eq 'Release') {
|
||||
cmake --install . --config $env:configuration --prefix artifacts
|
||||
7z a "$env:configuration.zip" ./artifacts/bin/*
|
||||
Get-ChildItem .\*.zip | % { Push-AppveyorArtifact $_.FullName -FileName $_.Name }
|
||||
}
|
||||
cd bin\$env:configuration
|
||||
7z u "$env:configuration.zip" ..\..\..\COPYING ..\..\..\README.md
|
||||
7z u "$env:configuration.zip" Cxbx.exe glew32.dll subhook.dll SDL2.dll
|
||||
7z u "$env:configuration.zip" cxbxr-debugger.exe capstone.dll cs_x86.dll
|
||||
Get-ChildItem .\*.zip | % { Push-AppveyorArtifact $_.FullName -FileName $_.Name }
|
||||
|
|
|
@ -3,13 +3,18 @@ trigger:
|
|||
include:
|
||||
- '*'
|
||||
paths:
|
||||
exclude: # Azure Pipelines doesn't support recursive wildcards, see
|
||||
- '.github/*' # https://developercommunity.visualstudio.com/t/support-wildcards-in-trigger-path-filters-1/366363
|
||||
- '.github/*/*'
|
||||
- '*.bat'
|
||||
- '.appveyor.yml'
|
||||
- 'doc/*/*'
|
||||
- 'doc/*'
|
||||
exclude:
|
||||
- doc/*
|
||||
- doc/*/*
|
||||
- .github/*
|
||||
- .github/*/*
|
||||
- .appveyor.yml
|
||||
- .travis.yml
|
||||
- CONTRIBUTORS
|
||||
- COPYING
|
||||
- README.md
|
||||
- gen-msvc-project.bat
|
||||
- setup.bat
|
||||
|
||||
pr:
|
||||
branches:
|
||||
|
@ -17,44 +22,61 @@ pr:
|
|||
- '*'
|
||||
paths:
|
||||
exclude:
|
||||
- '.github/*'
|
||||
- '.github/*/*'
|
||||
- '*.bat'
|
||||
- '.appveyor.yml'
|
||||
- 'doc/*/*'
|
||||
- 'doc/*'
|
||||
- doc/*
|
||||
- doc/*/*
|
||||
- .github/*
|
||||
- .github/*/*
|
||||
- .appveyor.yml
|
||||
- .travis.yml
|
||||
- CONTRIBUTORS
|
||||
- COPYING
|
||||
- README.md
|
||||
- gen-msvc-project.bat
|
||||
- setup.bat
|
||||
|
||||
pool:
|
||||
vmImage: windows-latest
|
||||
strategy:
|
||||
matrix:
|
||||
Release:
|
||||
configuration: Release
|
||||
Debug:
|
||||
configuration: Debug
|
||||
jobs:
|
||||
- job:
|
||||
pool:
|
||||
vmImage: windows-latest
|
||||
strategy:
|
||||
matrix:
|
||||
Release:
|
||||
configuration: Release
|
||||
Debug:
|
||||
configuration: Debug
|
||||
|
||||
steps:
|
||||
- pwsh: |
|
||||
echo "This CI isn't tested against master, and therefore, isn't guaranteed to work. Pull requests are welcome."
|
||||
echo "If it doesn't work and you'd rather not fix it, it's recommended to use GitHub Actions CI instead."
|
||||
displayName: Third-Party CI Warning
|
||||
steps:
|
||||
- checkout: self
|
||||
submodules: recursive
|
||||
|
||||
- checkout: self
|
||||
submodules: recursive
|
||||
- script: |
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -G "Visual Studio 16 2019" -A Win32
|
||||
displayName: 'Before build'
|
||||
|
||||
- pwsh: cmake -B build -A Win32
|
||||
displayName: Before build
|
||||
- script: cmake --build . --config %configuration%
|
||||
workingDirectory: build
|
||||
displayName: 'Build'
|
||||
|
||||
- pwsh: cmake --build . --config $env:configuration
|
||||
workingDirectory: build
|
||||
displayName: Build
|
||||
- task: CopyFiles@2
|
||||
displayName: 'Copy files to $(Build.ArtifactStagingDirectory)'
|
||||
condition: and(succeeded(), eq(variables['Agent.JobName'], 'Release'))
|
||||
inputs:
|
||||
Contents: |
|
||||
COPYING
|
||||
README.md
|
||||
build\bin\$(configuration)\Cxbx.exe
|
||||
build\bin\$(configuration)\glew32.dll
|
||||
build\bin\$(configuration)\subhook.dll
|
||||
build\bin\$(configuration)\SDL2.dll
|
||||
build\bin\$(configuration)\cxbxr-debugger.exe
|
||||
build\bin\$(configuration)\capstone.dll
|
||||
build\bin\$(configuration)\cx_x86.dll
|
||||
TargetFolder: '$(Build.ArtifactStagingDirectory)'
|
||||
flattenFolders: true
|
||||
|
||||
- pwsh: cmake --install . --config $env:configuration --prefix $(Build.ArtifactStagingDirectory)
|
||||
workingDirectory: build
|
||||
condition: and(succeeded(), eq(variables['configuration'], 'Release'))
|
||||
displayName: Prepare artifacts
|
||||
|
||||
- publish: $(Build.ArtifactStagingDirectory)
|
||||
artifact: $(configuration)
|
||||
condition: and(succeeded(), eq(variables['configuration'], 'Release'))
|
||||
displayName: Publish artifacts
|
||||
- publish: $(Build.ArtifactStagingDirectory)
|
||||
artifact: $(configuration)
|
||||
condition: and(succeeded(), eq(variables['Agent.JobName'], 'Release'))
|
||||
displayName: Publish artifact(s)
|
||||
|
|
|
@ -1,3 +1,11 @@
|
|||
# Custom for Visual Studio
|
||||
*.cs diff=csharp
|
||||
*.sln merge=union
|
||||
*.csproj merge=union
|
||||
*.vbproj merge=union
|
||||
*.fsproj merge=union
|
||||
*.dbproj merge=union
|
||||
|
||||
# Standard to msysgit
|
||||
*.doc diff=astextplain
|
||||
*.DOC diff=astextplain
|
||||
|
@ -10,16 +18,5 @@
|
|||
*.rtf diff=astextplain
|
||||
*.RTF diff=astextplain
|
||||
|
||||
* text=auto
|
||||
|
||||
[Cc][Mm]ake[Ll]ists.txt text eol=lf
|
||||
*.bat text eol=lf
|
||||
*.c text eol=lf
|
||||
*.h text eol=lf
|
||||
*.cpp text eol=lf
|
||||
*.hpp text eol=lf
|
||||
*.unused-patches text eol=lf
|
||||
*.rc text eol=lf
|
||||
|
||||
# All module imports are vendor, remove them from linguist stats chart for accurate stats.
|
||||
import/* linguist-vendored
|
||||
[Cc][Mm]ake[Ll]ists.txt text=lf
|
||||
*.bat text=lf
|
||||
|
|
|
@ -8,38 +8,7 @@ assignees: ''
|
|||
---
|
||||
|
||||
<!--
|
||||
ISSUES NOT UTILIZING THE TEMPLATE BELOW WILL BE CLOSED!
|
||||
-->
|
||||
<!--
|
||||
Please read https://github.com/Cxbx-Reloaded/Cxbx-Reloaded/blob/master/README.md and https://github.com/Cxbx-Reloaded/Cxbx-Reloaded/wiki/Frequently-Asked-Questions-(FAQ) before opening an issue.
|
||||
Remember, the GitHub Issue Tracker is not the place to ask for support. You must use our forum on Discord https://discord.gg/26Xjx23 for that.
|
||||
Compatibility Reports should be submitted at the website: https://cxbx-reloaded.co.uk
|
||||
Otherwise, for any other emulation/general issues like crashes when a controller is connected, or regressions across several titles, feel free to report your issue here.
|
||||
-->
|
||||
|
||||
|
||||
## Quick summary
|
||||
<!--
|
||||
Please briefly describe what is not working correctly.
|
||||
-->
|
||||
|
||||
|
||||
## Details
|
||||
<!--
|
||||
Please describe the problem as accurately as possible.
|
||||
-->
|
||||
|
||||
|
||||
### System Configuration:
|
||||
<!--
|
||||
Please provide your system configuration
|
||||
-->
|
||||
* OS
|
||||
* CPU
|
||||
* GPU
|
||||
* etc.
|
||||
|
||||
### Additional Information (if any):
|
||||
<!--
|
||||
Anything else you deem to be important
|
||||
Questions can be asked on Discord: https://discord.gg/26Xjx23
|
||||
If this is an issue specifically related to one game, please report it at https://github.com/Cxbx-Reloaded/game-compatibility
|
||||
Any emulation/general issues like crashes when a controller is connected, or regressions across several titles can be reported here.
|
||||
-->
|
||||
|
|
|
@ -1,111 +0,0 @@
|
|||
# Labels are in alphabetical order.
|
||||
|
||||
cmake:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- 'CMake*'
|
||||
- '**/CMakeLists.txt'
|
||||
- '**/*.cmake'
|
||||
|
||||
cpu-emulation:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- 'src/devices/x86/**'
|
||||
|
||||
deployment:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- '*.yml'
|
||||
- '.github/workflows/CI.yml'
|
||||
|
||||
file-system:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- 'src/core/kernel/support/EmuFile*'
|
||||
|
||||
graphics:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- 'src/core/hle/D3D8/**'
|
||||
- 'src/core/hle/XGRAPHIC/**'
|
||||
- 'src/devices/video/**'
|
||||
- 'src/gui/*Video*'
|
||||
|
||||
HLE:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- 'src/core/hle/**'
|
||||
- 'src/core/kernel/**'
|
||||
|
||||
informational:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- '**/*Logging*'
|
||||
- '**/*Logging*/**'
|
||||
- '**/README.md'
|
||||
|
||||
input:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- 'src/common/input/**'
|
||||
- 'src/core/hle/XAPI/input/**'
|
||||
- 'src/devices/usb/**'
|
||||
- 'src/gui/controllers/**'
|
||||
- 'src/gui/*Input*'
|
||||
|
||||
kernel:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- 'src/core/kernel/**'
|
||||
|
||||
LLE:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- 'src/devices/**'
|
||||
|
||||
memory:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- 'src/core/kernel/memory-manager/**'
|
||||
|
||||
networking:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- 'src/core/hle/XONLINE/**'
|
||||
- 'src/devices/network/**'
|
||||
- 'src/gui/*Network*'
|
||||
|
||||
sound:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- 'src/common/audio/**'
|
||||
- 'src/core/hle/DSOUND/**'
|
||||
- 'src/core/hle/XACTENG/**'
|
||||
- 'src/devices/audio/**'
|
||||
- 'src/gui/*Audio*'
|
||||
|
||||
modules:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- 'import/**'
|
||||
|
||||
threading:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- 'src/core/kernel/support/EmuFS*'
|
||||
|
||||
timing:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- 'src/common/Timer*'
|
||||
|
||||
user interface:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- 'src/core/common/imgui/*'
|
||||
- 'src/gui/**'
|
||||
|
||||
xbdm:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- 'src/common/xbdm/**'
|
|
@ -3,79 +3,117 @@ name: GitHub CI
|
|||
on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- '.gitattributes'
|
||||
- '.github/*'
|
||||
- '.github/*_TEMPLATE/**'
|
||||
- '.gitignore'
|
||||
- '*.bat'
|
||||
- '*.yml'
|
||||
- 'doc/**'
|
||||
- '.github/CONTRIBUTING.md'
|
||||
- '.github/FUNDING.md'
|
||||
- '.github/ISSUE_TEMPLATE/*'
|
||||
- 'doc/*'
|
||||
- 'doc/*/*'
|
||||
- '.appveyor.yml'
|
||||
- '.azure-pipelines.yml'
|
||||
- '.travis.yml'
|
||||
- 'gen-msvc-project.bat'
|
||||
- 'setup.bat'
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- '.gitattributes'
|
||||
- '.github/*'
|
||||
- '.github/*_TEMPLATE/**'
|
||||
- '.gitignore'
|
||||
- '*.bat'
|
||||
- '*.yml'
|
||||
- 'doc/**'
|
||||
- '.github/CONTRIBUTING.md'
|
||||
- '.github/FUNDING.md'
|
||||
- '.github/ISSUE_TEMPLATE/*'
|
||||
- 'doc/*'
|
||||
- 'doc/*/*'
|
||||
- '.appveyor.yml'
|
||||
- '.azure-pipelines.yml'
|
||||
- '.travis.yml'
|
||||
- 'gen-msvc-project.bat'
|
||||
- 'setup.bat'
|
||||
|
||||
jobs:
|
||||
build-windows:
|
||||
name: Build (Windows, ${{ matrix.configuration }}, VS${{ matrix.vsver }}) # runner.os doesn't work here
|
||||
runs-on: windows-${{ matrix.vsver }}
|
||||
env:
|
||||
POWERSHELL_TELEMETRY_OPTOUT: 1
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
configuration: [Release, Debug]
|
||||
vsver: [2019]
|
||||
winver: [7]
|
||||
sdkver: [10.0.22621.0]
|
||||
vsver: [VS2019, VS2017]
|
||||
include:
|
||||
- vsver: VS2019
|
||||
os: windows-latest
|
||||
- vsver: VS2017 # TODO: Remove VS2017 once WINE supports VS2019 runtimes;
|
||||
os: windows-2016 # https://github.com/actions/virtual-environments/issues/68#issuecomment-602652021
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: Generate CMake files
|
||||
run: cmake -B build -A Win32,version=${{ matrix.sdkver }} -DCMAKE_SYSTEM_VERSION=${{ matrix.winver }} -DBUILD_CXBXR_DEBUGGER=ON
|
||||
- name: Generate cmake files
|
||||
run: |
|
||||
mkdir build && cd build
|
||||
cmake .. -A Win32
|
||||
- name: Build
|
||||
run: cmake --build build --config ${{ matrix.configuration }} -j $env:NUMBER_OF_PROCESSORS
|
||||
working-directory: build
|
||||
run: cmake --build . --config ${{ matrix.configuration }} -j $env:NUMBER_OF_PROCESSORS
|
||||
- name: Prepare artifacts
|
||||
if: matrix.configuration == 'Release'
|
||||
run: cmake --install build --config ${{ matrix.configuration }} --prefix artifacts
|
||||
- uses: actions/upload-artifact@v4
|
||||
run: |
|
||||
robocopy . artifacts COPYING README.md /r:0 /w:0
|
||||
robocopy build\bin\${{ matrix.configuration }} artifacts `
|
||||
Cxbx.exe glew32.dll subhook.dll SDL2.dll `
|
||||
cxbxr-debugger.exe capstone.dll cs_x86.dll /r:0 /w:0
|
||||
If ($LastExitCode -le 7) { $LastExitCode = 0 }
|
||||
- uses: actions/upload-artifact@v1
|
||||
if: matrix.configuration == 'Release'
|
||||
with:
|
||||
name: CxbxReloaded-${{ matrix.configuration }}-VS${{ matrix.vsver }}
|
||||
path: artifacts/bin
|
||||
if-no-files-found: error
|
||||
name: CxbxReloaded-${{ matrix.configuration }}-${{ matrix.vsver }}
|
||||
path: artifacts
|
||||
|
||||
release:
|
||||
if: |
|
||||
if: | # TODO: Remove develop once rebased
|
||||
github.event.action != 'pull_request' &&
|
||||
github.ref == 'refs/heads/master' &&
|
||||
(github.ref == 'refs/heads/develop' ||
|
||||
github.ref == 'refs/heads/master') &&
|
||||
github.repository == 'Cxbx-Reloaded/Cxbx-Reloaded'
|
||||
needs: build-windows
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
artifact_1: CxbxReloaded-Release-VS2019
|
||||
artifact_2: CxbxReloaded-Release-VS2017
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Download artifacts
|
||||
uses: actions/download-artifact@v4
|
||||
- uses: actions/checkout@v2
|
||||
- name: Download artifacts (1)
|
||||
uses: actions/download-artifact@v1
|
||||
with:
|
||||
path: artifacts
|
||||
- name: Re-zip artifacts
|
||||
id: zip
|
||||
run: |
|
||||
for artifact in artifacts/*; do
|
||||
7z a ${artifact}.zip "./${artifact}/*"
|
||||
if [ $(stat -c %s ${artifact}.zip) -le 100000 ]; then
|
||||
echo "Error: Archive ${artifact}.zip too small!"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
echo "tag_name=CI-${GITHUB_SHA::7}" >> "$GITHUB_OUTPUT"
|
||||
name: ${{ env.artifact_1 }}
|
||||
- name: Download artifacts (2)
|
||||
uses: actions/download-artifact@v1
|
||||
with:
|
||||
name: ${{ env.artifact_2 }}
|
||||
- name: Prepare artifacts for release
|
||||
run: | # download-artifact doesn't download a zip, so rezip it
|
||||
echo "::set-env name=short_commit_sha::$(git rev-parse --short HEAD)"
|
||||
7z a -mx1 "$env:artifact_1.zip" ".\$env:artifact_1\*"
|
||||
7z a -mx1 "$env:artifact_2.zip" ".\$env:artifact_2\*"
|
||||
- name: Create Release
|
||||
id: create_release
|
||||
uses: actions/create-release@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: gh release create ${{ steps.zip.outputs.tag_name }} artifacts/*.zip -p --target $GITHUB_SHA --title '${{ steps.zip.outputs.tag_name }}'
|
||||
with:
|
||||
tag_name: CI-${{ env.short_commit_sha }}
|
||||
release_name: CI-${{ env.short_commit_sha }}
|
||||
prerelease: true
|
||||
- name: Upload Release Asset (1)
|
||||
uses: actions/upload-release-asset@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
||||
asset_path: ${{ env.artifact_1 }}.zip
|
||||
asset_name: ${{ env.artifact_1 }}.zip
|
||||
asset_content_type: application/zip
|
||||
- name: Upload Release Asset (2)
|
||||
uses: actions/upload-release-asset@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
||||
asset_path: ${{ env.artifact_2 }}.zip
|
||||
asset_name: ${{ env.artifact_2 }}.zip
|
||||
asset_content_type: application/zip
|
||||
|
|
|
@ -1,16 +0,0 @@
|
|||
on:
|
||||
issues:
|
||||
types: opened
|
||||
|
||||
jobs:
|
||||
auto_close_issues:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
- name: Automatically close issues that don't follow the issue template
|
||||
uses: ergo720/auto-close-issues@v1
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
issue-close-message: "@${issue.user.login}: your issue has been automatically closed because it does not follow the issue template." # optional property
|
||||
closed-issues-label: "invalid" # optional property
|
|
@ -1,13 +0,0 @@
|
|||
name: Pull Request Manager
|
||||
|
||||
on: pull_request_target
|
||||
|
||||
jobs:
|
||||
pr_manager:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Labeler
|
||||
uses: actions/labeler@v5
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
sync-labels: true
|
|
@ -2,10 +2,6 @@
|
|||
[Bb]uild/
|
||||
[Bb]uild-*/
|
||||
|
||||
# CLion
|
||||
.idea/
|
||||
cmake-build-*/
|
||||
|
||||
# Visual Studio Cache
|
||||
.vs/
|
||||
|
||||
|
|
|
@ -1,49 +1,23 @@
|
|||
[submodule "import/subhook"]
|
||||
path = import/subhook
|
||||
url = https://github.com/Cxbx-Reloaded/subhook.git
|
||||
shallow = true
|
||||
url = https://github.com/Zeex/subhook.git
|
||||
[submodule "import/cs_x86"]
|
||||
path = import/cs_x86
|
||||
url = https://github.com/x1nixmzeng/cs_x86.git
|
||||
url = https://github.com/x1nixmzeng/cs_x86
|
||||
[submodule "import/XbSymbolDatabase"]
|
||||
path = import/XbSymbolDatabase
|
||||
url = https://github.com/Cxbx-Reloaded/XbSymbolDatabase.git
|
||||
url = https://github.com/Cxbx-Reloaded/XbSymbolDatabase
|
||||
[submodule "import/simpleini"]
|
||||
path = import/simpleini
|
||||
url = https://github.com/brofield/simpleini.git
|
||||
shallow = true
|
||||
url = https://github.com/brofield/simpleini
|
||||
[submodule "import/libtommath"]
|
||||
path = import/libtommath
|
||||
url = https://github.com/libtom/libtommath.git
|
||||
url = https://github.com/libtom/libtommath
|
||||
branch = master
|
||||
shallow = true
|
||||
[submodule "import/libtomcrypt"]
|
||||
path = import/libtomcrypt
|
||||
url = https://github.com/libtom/libtomcrypt.git
|
||||
url = https://github.com/libtom/libtomcrypt
|
||||
branch = master
|
||||
shallow = true
|
||||
[submodule "import/xxHash"]
|
||||
path = import/xxHash
|
||||
url = https://github.com/Cyan4973/xxHash.git
|
||||
branch = release
|
||||
shallow = true
|
||||
[submodule "import/imgui"]
|
||||
path = import/imgui
|
||||
url = https://github.com/ocornut/imgui.git
|
||||
shadow = true
|
||||
[submodule "import/SDL2"]
|
||||
path = import/SDL2
|
||||
url = https://github.com/libsdl-org/SDL
|
||||
shallow = true
|
||||
[submodule "import/libusb"]
|
||||
path = import/libusb
|
||||
url = https://github.com/Cxbx-Reloaded/libusb
|
||||
branch = deadlock_fix
|
||||
shallow = true
|
||||
[submodule "import/nv2a_vsh_cpu"]
|
||||
path = import/nv2a_vsh_cpu
|
||||
url = https://github.com/abaire/nv2a_vsh_cpu.git
|
||||
[submodule "import/mio"]
|
||||
path = import/mio
|
||||
url = https://github.com/mandreyel/mio.git
|
||||
shadow = true
|
||||
url = https://github.com/SDL-mirror/SDL
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
language: cpp
|
||||
|
||||
matrix:
|
||||
include:
|
||||
- os: windows
|
||||
env: configuration=Debug
|
||||
- os: windows
|
||||
env: configuration=Release
|
||||
|
||||
before_script:
|
||||
- if [ $TRAVIS_OS_NAME == 'windows' ]; then
|
||||
mkdir build;
|
||||
cd build;
|
||||
cmake .. -G "Visual Studio 15 2017" -A Win32;
|
||||
fi
|
||||
|
||||
script:
|
||||
- if [ $TRAVIS_OS_NAME == 'windows' ]; then
|
||||
cmake --build . --config $configuration;
|
||||
fi
|
269
CMakeLists.txt
|
@ -13,36 +13,48 @@ endif()
|
|||
|
||||
set(SUBHOOK_TESTS OFF)
|
||||
set(SUBHOOK_INSTALL OFF)
|
||||
add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/import/subhook" EXCLUDE_FROM_ALL)
|
||||
add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/import/subhook")
|
||||
|
||||
add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/import/XbSymbolDatabase")
|
||||
|
||||
# Not require since only include a header file
|
||||
#add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/import/simpleini")
|
||||
|
||||
add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/import/SDL2" EXCLUDE_FROM_ALL)
|
||||
add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/import/SDL2")
|
||||
|
||||
add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/import/mio" EXCLUDE_FROM_ALL)
|
||||
if(${CMAKE_GENERATOR} MATCHES "Visual Studio ([^9]|[9][0-9])")
|
||||
add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/import/cs_x86")
|
||||
endif()
|
||||
|
||||
# Cxbx-Reloaded projects
|
||||
set(CXBXR_ROOT_DIR ${CMAKE_CURRENT_LIST_DIR})
|
||||
|
||||
add_custom_target(misc-batch
|
||||
${CMAKE_COMMAND} -DTargetRunTimeDir=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$<CONFIG>
|
||||
-P ${CXBXR_ROOT_DIR}/projects/misc/batch.cmake
|
||||
WORKING_DIRECTORY ${CXBXR_ROOT_DIR}
|
||||
)
|
||||
|
||||
# Custom CMake projects since some import libraries doesn't have it.
|
||||
|
||||
add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/projects/libtom")
|
||||
|
||||
add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/projects/imgui")
|
||||
find_package(Git)
|
||||
|
||||
add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/projects/libusb")
|
||||
if(Git_FOUND)
|
||||
message("Git found: ${GIT_EXECUTABLE}")
|
||||
|
||||
set(nv2a_vsh_cpu_UNIT_TEST OFF)
|
||||
add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/import/nv2a_vsh_cpu" EXCLUDE_FROM_ALL)
|
||||
execute_process(
|
||||
COMMAND git describe --always --tags --first-parent
|
||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||
OUTPUT_VARIABLE _GIT_VERSION
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
|
||||
message("Git version: " ${_GIT_VERSION})
|
||||
else()
|
||||
set(_GIT_VERSION "unknown")
|
||||
endif()
|
||||
|
||||
# Appears to update whenever define has changed.
|
||||
configure_file(
|
||||
"${CXBXR_ROOT_DIR}/src/version.h.in" "${CXBXR_ROOT_DIR}/src/version.h" @ONLY
|
||||
NEWLINE_STYLE LF
|
||||
)
|
||||
|
||||
#add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/projects/vsbc")
|
||||
|
||||
# Split the files into group for which project is likely
|
||||
# going to be used for both header and source files.
|
||||
|
@ -54,52 +66,39 @@ add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/import/nv2a_vsh_cpu" EXCLUDE_FROM_AL
|
|||
|
||||
# Common (GUI and Emulator)
|
||||
file (GLOB CXBXR_HEADER_COMMON
|
||||
"${CXBXR_ROOT_DIR}/src/common/AddressRanges.h"
|
||||
"${CXBXR_ROOT_DIR}/src/common/crypto/EmuDes.h"
|
||||
"${CXBXR_ROOT_DIR}/src/common/crypto/EmuRsa.h"
|
||||
"${CXBXR_ROOT_DIR}/src/common/crypto/EmuSha.h"
|
||||
"${CXBXR_ROOT_DIR}/src/common/crypto/LibRc4.h"
|
||||
"${CXBXR_ROOT_DIR}/src/common/CxbxDebugger.h"
|
||||
"${CXBXR_ROOT_DIR}/src/common/cxbxr.hpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/EmuEEPROM.h"
|
||||
"${CXBXR_ROOT_DIR}/src/common/Error.h"
|
||||
"${CXBXR_ROOT_DIR}/src/common/FilePaths.hpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/input/DInputKeyboardCodes.h"
|
||||
"${CXBXR_ROOT_DIR}/src/common/input/DInputKeyboardMouse.h"
|
||||
"${CXBXR_ROOT_DIR}/src/common/input/layout_xbox_device.h"
|
||||
"${CXBXR_ROOT_DIR}/src/common/input/LibusbDevice.h"
|
||||
"${CXBXR_ROOT_DIR}/src/common/input/layout_xbox_controller.h"
|
||||
"${CXBXR_ROOT_DIR}/src/common/input/InputDevice.h"
|
||||
"${CXBXR_ROOT_DIR}/src/common/input/InputManager.h"
|
||||
"${CXBXR_ROOT_DIR}/src/common/input/SdlJoystick.h"
|
||||
"${CXBXR_ROOT_DIR}/src/common/input/XInputPad.h"
|
||||
"${CXBXR_ROOT_DIR}/src/common/input/RawDevice.h"
|
||||
"${CXBXR_ROOT_DIR}/src/common/IPCHybrid.hpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/Logging.h"
|
||||
"${CXBXR_ROOT_DIR}/src/common/ReservedMemory.h"
|
||||
"${CXBXR_ROOT_DIR}/src/common/Settings.hpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/util/cliConfig.hpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/util/cliConverter.hpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/Timer.h"
|
||||
"${CXBXR_ROOT_DIR}/src/common/util/CPUID.h"
|
||||
"${CXBXR_ROOT_DIR}/src/common/util/crc32c.h"
|
||||
"${CXBXR_ROOT_DIR}/src/common/util/CxbxUtil.h"
|
||||
"${CXBXR_ROOT_DIR}/src/common/util/std_extend.hpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/util/strConverter.hpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/win32/AlignPosfix1.h"
|
||||
"${CXBXR_ROOT_DIR}/src/common/win32/AlignPrefix1.h"
|
||||
"${CXBXR_ROOT_DIR}/src/common/win32/EmuShared.h"
|
||||
"${CXBXR_ROOT_DIR}/src/common/win32/Mutex.h"
|
||||
"${CXBXR_ROOT_DIR}/src/common/win32/Util.h"
|
||||
"${CXBXR_ROOT_DIR}/src/common/win32/WineEnv.h"
|
||||
"${CXBXR_ROOT_DIR}/src/common/win32/Threads.h"
|
||||
"${CXBXR_ROOT_DIR}/src/common/xbdm/CxbxXbdm.h"
|
||||
"${CXBXR_ROOT_DIR}/src/common/xbe/Xbe.h"
|
||||
"${CXBXR_ROOT_DIR}/src/common/xbe/XbePrinter.h"
|
||||
"${CXBXR_ROOT_DIR}/src/common/xbox/Logging.hpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/xbox/Types.hpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/xbox_types.h"
|
||||
"${CXBXR_ROOT_DIR}/src/common/xdvdfs-tools/buffered_io.h"
|
||||
"${CXBXR_ROOT_DIR}/src/common/xdvdfs-tools/xdvdfs.h"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/XbConvert.h"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/XbD3D8Types.h"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/XAPI/Xapi.h"
|
||||
"${CXBXR_ROOT_DIR}/src/core/kernel/exports/EmuKrnlLogging.h"
|
||||
"${CXBXR_ROOT_DIR}/src/Cxbx.h"
|
||||
"${CXBXR_ROOT_DIR}/src/CxbxVersion.h"
|
||||
"${CXBXR_ROOT_DIR}/src/version.h"
|
||||
|
@ -110,55 +109,33 @@ file (GLOB CXBXR_HEADER_GUIv1
|
|||
"${CXBXR_ROOT_DIR}/src/common/input/Button.h"
|
||||
"${CXBXR_ROOT_DIR}/src/common/input/EmuDevice.h"
|
||||
"${CXBXR_ROOT_DIR}/src/common/input/InputWindow.h"
|
||||
"${CXBXR_ROOT_DIR}/src/gui/input/DlgDukeControllerConfig.h"
|
||||
"${CXBXR_ROOT_DIR}/src/gui/input/DlgLibusbControllerConfig.h"
|
||||
"${CXBXR_ROOT_DIR}/src/gui/input/DlgLightgunConfig.h"
|
||||
"${CXBXR_ROOT_DIR}/src/gui/input/DlgSBControllerConfig.h"
|
||||
"${CXBXR_ROOT_DIR}/src/gui/DbgConsole.h"
|
||||
"${CXBXR_ROOT_DIR}/src/gui/DlgAbout.h"
|
||||
"${CXBXR_ROOT_DIR}/src/gui/DlgAudioConfig.h"
|
||||
"${CXBXR_ROOT_DIR}/src/gui/DlgInputConfig.h"
|
||||
"${CXBXR_ROOT_DIR}/src/gui/DlgDukeControllerConfig.h"
|
||||
"${CXBXR_ROOT_DIR}/src/gui/DlgEepromConfig.h"
|
||||
"${CXBXR_ROOT_DIR}/src/gui/DlgLoggingConfig.h"
|
||||
"${CXBXR_ROOT_DIR}/src/gui/DlgNetworkConfig.h"
|
||||
"${CXBXR_ROOT_DIR}/src/gui/DlgVideoConfig.h"
|
||||
"${CXBXR_ROOT_DIR}/src/gui/ResCxbx.h"
|
||||
"${CXBXR_ROOT_DIR}/src/gui/Wnd.h"
|
||||
"${CXBXR_ROOT_DIR}/src/gui/WndMain.h"
|
||||
)
|
||||
|
||||
# Emulator (module)
|
||||
file (GLOB CXBXR_HEADER_EMU_IMPORT
|
||||
"${CXBXR_ROOT_DIR}/import/imgui/backends/imgui_impl_dx9.h"
|
||||
"${CXBXR_ROOT_DIR}/import/imgui/backends/imgui_impl_opengl3.h"
|
||||
"${CXBXR_ROOT_DIR}/import/imgui/backends/imgui_impl_win32.h"
|
||||
)
|
||||
file (GLOB CXBXR_HEADER_EMU
|
||||
"${CXBXR_ROOT_DIR}/src/common/audio/converter.hpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/audio/XADPCM.h"
|
||||
"${CXBXR_ROOT_DIR}/src/common/Timer.h"
|
||||
"${CXBXR_ROOT_DIR}/src/common/util/gloffscreen/glextensions.h"
|
||||
"${CXBXR_ROOT_DIR}/src/common/util/gloffscreen/gloffscreen.h"
|
||||
"${CXBXR_ROOT_DIR}/src/common/win32/Threads.h"
|
||||
"${CXBXR_ROOT_DIR}/src/core/common/imgui/audio.hpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/common/imgui/ui.hpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/common/imgui/settings.h"
|
||||
"${CXBXR_ROOT_DIR}/src/core/common/imgui/video.hpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/common/video/RenderBase.hpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/Direct3D9/CxbxPixelShaderTemplate.hlsl"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/Direct3D9/CxbxVertexShaderTemplate.hlsl"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/Direct3D9/CxbxVertexShaderPassthrough.hlsl"
|
||||
"${CXBXR_ROOT_DIR}/src/common/XADPCM.h"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/Direct3D9/Direct3D9.h"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/Direct3D9/FixedFunctionPixelShader.hlsl"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/Direct3D9/FixedFunctionPixelShader.hlsli"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/Direct3D9/FixedFunctionVertexShader.hlsl"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/Direct3D9/FixedFunctionVertexShaderState.hlsli"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/Direct3D9/PixelShader.h"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/Direct3D9/Shader.h"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/Direct3D9/VertexShader.h"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/Direct3D9/VertexShaderCache.h"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/Direct3D9/VertexShaderSource.h"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/Direct3D9/WalkIndexBuffer.h"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/FixedFunctionState.h"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/ResourceTracker.h"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/XbConvert.h"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/XbD3D8Logging.h"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/XbD3D8Types.h"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/XbPixelShader.h"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/XbPushBuffer.h"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/XbState.h"
|
||||
|
@ -170,22 +147,21 @@ file (GLOB CXBXR_HEADER_EMU
|
|||
"${CXBXR_ROOT_DIR}/src/core/hle/DSOUND/DirectSound/DirectSoundInline.hpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/DSOUND/DirectSound/DirectSoundLogging.hpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/DSOUND/DirectSound/DSStream_PacketManager.hpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/DSOUND/XbDSoundFuncs.hpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/DSOUND/XbDSoundLogging.hpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/DSOUND/XbDSoundTypes.h"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/DSOUND/common/XbInternalStruct.hpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/Intercept.hpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/Patches.hpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/XACTENG/XactEng.h"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/XAPI/Xapi.h"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/XAPI/XapiCxbxr.h"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/XGRAPHIC/XGraphic.h"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/XONLINE/XOnline.h"
|
||||
"${CXBXR_ROOT_DIR}/src/core/kernel/common/strings.hpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/kernel/exports/EmuKrnlAvModes.h"
|
||||
"${CXBXR_ROOT_DIR}/src/core/kernel/exports/EmuKrnlKe.h"
|
||||
"${CXBXR_ROOT_DIR}/src/core/kernel/exports/EmuKrnlKi.h"
|
||||
"${CXBXR_ROOT_DIR}/src/core/kernel/exports/EmuKrnlPs.hpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/kernel/exports/EmuKrnlLogging.h"
|
||||
"${CXBXR_ROOT_DIR}/src/core/kernel/init/CxbxKrnl.h"
|
||||
"${CXBXR_ROOT_DIR}/src/core/kernel/init/KrnlPatches.hpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/kernel/memory-manager/PhysicalMemory.h"
|
||||
"${CXBXR_ROOT_DIR}/src/core/kernel/memory-manager/PoolManager.h"
|
||||
"${CXBXR_ROOT_DIR}/src/core/kernel/memory-manager/VMManager.h"
|
||||
|
@ -193,11 +169,9 @@ file (GLOB CXBXR_HEADER_EMU
|
|||
"${CXBXR_ROOT_DIR}/src/core/kernel/support/EmuFile.h"
|
||||
"${CXBXR_ROOT_DIR}/src/core/kernel/support/EmuFS.h"
|
||||
"${CXBXR_ROOT_DIR}/src/core/kernel/support/EmuNtDll.h"
|
||||
"${CXBXR_ROOT_DIR}/src/core/kernel/support/NativeHandle.h"
|
||||
"${CXBXR_ROOT_DIR}/src/core/kernel/support/PatchRdtsc.hpp"
|
||||
"${CXBXR_ROOT_DIR}/src/devices/ADM1032Device.h"
|
||||
"${CXBXR_ROOT_DIR}/src/devices/EEPROMDevice.h"
|
||||
"${CXBXR_ROOT_DIR}/src/devices/network/NVNetDevice.h"
|
||||
"${CXBXR_ROOT_DIR}/src/devices/EmuNVNet.h"
|
||||
"${CXBXR_ROOT_DIR}/src/devices/LED.h"
|
||||
"${CXBXR_ROOT_DIR}/src/devices/MCPXDevice.h"
|
||||
"${CXBXR_ROOT_DIR}/src/devices/PCIBus.h"
|
||||
|
@ -226,55 +200,38 @@ file (GLOB CXBXR_HEADER_EMU
|
|||
"${CXBXR_ROOT_DIR}/src/devices/Xbox.h"
|
||||
)
|
||||
|
||||
# filter hlsl files into its own list
|
||||
# excluding hlsli file(s)
|
||||
set(CXBXR_HEADER_HLSL ${CXBXR_HEADER_EMU})
|
||||
list(FILTER CXBXR_HEADER_HLSL INCLUDE REGEX ".*\\.hlsl$")
|
||||
|
||||
# Common (GUI and Emulator)
|
||||
file (GLOB CXBXR_SOURCE_COMMON
|
||||
"${CXBXR_ROOT_DIR}/src/common/AddressRanges.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/crypto/EmuDes.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/crypto/EmuRsa.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/crypto/EmuSha.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/crypto/LibRc4.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/CxbxDebugger.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/cxbxr.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/EmuEEPROM.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/Error.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/FilePaths.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/input/DInputKeyboardMouse.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/input/InputDevice.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/input/InputManager.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/input/LibusbDevice.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/input/SdlJoystick.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/input/XInputPad.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/input/RawDevice.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/Logging.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/Settings.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/util/cliConfig.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/util/cliConverter.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/Timer.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/util/crc32c.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/util/CxbxUtil.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/util/hasher.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/win32/EmuShared.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/win32/InlineFunc.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/win32/IPCWindows.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/win32/Mutex.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/win32/Util.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/win32/WineEnv.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/win32/Threads.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/xbdm/CxbxXbdm.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/xbe/Xbe.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/xbe/XbePrinter.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/xbox/Logging.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/xbox/Types.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/xdvdfs-tools/buffered_io.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/xdvdfs-tools/xdvdfs.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/XbConvert.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/XAPI/Xapi.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/kernel/exports/EmuKrnlLogging.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/kernel/exports/EmuKrnlXbox.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/kernel/exports/EmuKrnlXc.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/kernel/exports/EmuKrnlXe.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/CxbxVersion.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/gui/DbgConsole.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/HighPerformanceGraphicsEnabler.c"
|
||||
)
|
||||
|
||||
|
@ -283,13 +240,10 @@ file (GLOB CXBXR_SOURCE_GUIv1
|
|||
"${CXBXR_ROOT_DIR}/src/common/input/Button.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/input/EmuDevice.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/input/InputWindow.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/gui/input/DlgDukeControllerConfig.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/gui/input/DlgLibusbControllerConfig.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/gui/input/DlgLightgunConfig.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/gui/input/DlgSBControllerConfig.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/gui/DlgAbout.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/gui/DlgAudioConfig.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/gui/DlgInputConfig.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/gui/DlgDukeControllerConfig.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/gui/DlgEepromConfig.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/gui/DlgLoggingConfig.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/gui/DlgNetworkConfig.cpp"
|
||||
|
@ -304,33 +258,20 @@ file (GLOB CXBXR_SOURCE_GUIv1
|
|||
file (GLOB CXBXR_KRNL_CPP
|
||||
"${CXBXR_ROOT_DIR}/src/core/kernel/init/CxbxKrnl.cpp"
|
||||
)
|
||||
file (GLOB CXBXR_SOURCE_EMU_IMPORT
|
||||
"${CXBXR_ROOT_DIR}/import/imgui/backends/imgui_impl_dx9.cpp"
|
||||
"${CXBXR_ROOT_DIR}/import/imgui/backends/imgui_impl_opengl3.cpp"
|
||||
"${CXBXR_ROOT_DIR}/import/imgui/backends/imgui_impl_win32.cpp"
|
||||
)
|
||||
file (GLOB CXBXR_SOURCE_EMU
|
||||
"${CXBXR_KRNL_CPP}"
|
||||
"${CXBXR_ROOT_DIR}/src/common/Timer.cpp"
|
||||
"${CXBXR_ROOT_DIR}/HighPerformanceGraphicsEnabler.c"
|
||||
"${CXBXR_ROOT_DIR}/src/common/util/gloffscreen/glextensions.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/util/gloffscreen/gloffscreen_common.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/util/gloffscreen/gloffscreen_wgl.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/VerifyAddressRanges.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/win32/Threads.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/common/imgui/audio.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/common/imgui/ui.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/common/imgui/video.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/common/video/RenderBase.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/Direct3D9/Direct3D9.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/Direct3D9/PixelShader.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/Direct3D9/RenderStates.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/Direct3D9/Shader.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/Direct3D9/TextureStates.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/Direct3D9/VertexShader.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/Direct3D9/VertexShaderCache.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/Direct3D9/VertexShaderSource.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/Direct3D9/WalkIndexBuffer.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/FixedFunctionState.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/ResourceTracker.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/XbConvert.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/XbD3D8Logging.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/XbPixelShader.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/XbPushBuffer.cpp"
|
||||
|
@ -345,12 +286,10 @@ file (GLOB CXBXR_SOURCE_EMU
|
|||
"${CXBXR_ROOT_DIR}/src/core/hle/DSOUND/DirectSound/DSStream_PacketManager.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/DSOUND/DirectSound/XFileMediaObject.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/DSOUND/XbDSoundLogging.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/DSOUND/common/XbInternalDSVoice.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/DSOUND/common/XbInternalStruct.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/Intercept.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/JVS/JVS.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/Patches.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/XACTENG/XactEng.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/XAPI/Xapi.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/hle/XGRAPHIC/XGraphic.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/kernel/exports/EmuKrnl.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/kernel/exports/EmuKrnlAv.cpp"
|
||||
|
@ -362,12 +301,16 @@ file (GLOB CXBXR_SOURCE_EMU
|
|||
"${CXBXR_ROOT_DIR}/src/core/kernel/exports/EmuKrnlKd.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/kernel/exports/EmuKrnlKe.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/kernel/exports/EmuKrnlKi.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/kernel/exports/EmuKrnlLogging.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/kernel/exports/EmuKrnlMm.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/kernel/exports/EmuKrnlNt.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/kernel/exports/EmuKrnlOb.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/kernel/exports/EmuKrnlPhy.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/kernel/exports/EmuKrnlPs.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/kernel/exports/EmuKrnlRtl.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/kernel/exports/EmuKrnlXbox.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/kernel/exports/EmuKrnlXc.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/kernel/exports/EmuKrnlXe.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/kernel/exports/KernelThunk.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/kernel/memory-manager/PhysicalMemory.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/kernel/memory-manager/PoolManager.cpp"
|
||||
|
@ -376,13 +319,9 @@ file (GLOB CXBXR_SOURCE_EMU
|
|||
"${CXBXR_ROOT_DIR}/src/core/kernel/support/EmuFile.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/kernel/support/EmuFS.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/kernel/support/EmuNtDll.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/kernel/support/NativeHandle.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/core/kernel/support/PatchRdtsc.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/devices/ADM1032Device.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/devices/Chihiro/JvsIO.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/devices/Chihiro/MediaBoard.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/devices/EEPROMDevice.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/devices/network/NVNetDevice.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/devices/EmuNVNet.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/devices/MCPXDevice.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/devices/PCIBus.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/devices/PCIDevice.cpp"
|
||||
|
@ -393,8 +332,6 @@ file (GLOB CXBXR_SOURCE_EMU
|
|||
"${CXBXR_ROOT_DIR}/src/devices/usb/OHCI.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/devices/usb/USBDevice.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/devices/usb/XidGamepad.cpp"
|
||||
|
||||
#NOTE: These files are direct includes inside nv2a.cpp file. If we comment them out, we will have compile errors.
|
||||
#"${CXBXR_ROOT_DIR}/src/devices/video/EmuNV2A_DEBUG.cpp"
|
||||
#"${CXBXR_ROOT_DIR}/src/devices/video/EmuNV2A_PBUS.cpp"
|
||||
#"${CXBXR_ROOT_DIR}/src/devices/video/EmuNV2A_PCOUNTER.cpp"
|
||||
|
@ -416,7 +353,6 @@ file (GLOB CXBXR_SOURCE_EMU
|
|||
#"${CXBXR_ROOT_DIR}/src/devices/video/EmuNV2A_PVIDEO.cpp"
|
||||
#"${CXBXR_ROOT_DIR}/src/devices/video/EmuNV2A_PVPE.cpp"
|
||||
#"${CXBXR_ROOT_DIR}/src/devices/video/EmuNV2A_USER.cpp"
|
||||
|
||||
"${CXBXR_ROOT_DIR}/src/devices/video/nv2a.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/devices/video/nv2a_debug.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/devices/video/nv2a_psh.cpp"
|
||||
|
@ -426,84 +362,39 @@ file (GLOB CXBXR_SOURCE_EMU
|
|||
"${CXBXR_ROOT_DIR}/src/devices/video/swizzle.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/devices/x86/EmuX86.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/devices/Xbox.cpp"
|
||||
# Temporary usage for need ReserveAddressRanges func with cxbx.exe's emulation.
|
||||
"${CXBXR_ROOT_DIR}/src/common/ReserveAddressRanges.cpp"
|
||||
)
|
||||
|
||||
|
||||
option(BUILD_CXBXR_DEBUGGER "Build cxbxr-debugger tool (with cheat table support)")
|
||||
if(BUILD_CXBXR_DEBUGGER)
|
||||
message(DEPRECATION "The Cxbxr-Debugger tool will eventually be removed from the upstream branch.")
|
||||
endif()
|
||||
|
||||
add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/projects/cxbx")
|
||||
|
||||
add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/projects/cxbxr-ldr")
|
||||
|
||||
add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/projects/cxbxr-emu")
|
||||
|
||||
set(cxbxr_INSTALL_files "COPYING" "README.md")
|
||||
|
||||
# Cxbx-Reloaded project with third-party libraries
|
||||
set_target_properties(cxbx cxbxr-ldr cxbxr-emu misc-batch SDL2 subhook libXbSymbolDatabase libtommath libtomcrypt imgui libusb
|
||||
PROPERTIES FOLDER Cxbx-Reloaded
|
||||
)
|
||||
|
||||
set_target_properties(nv2a_vsh_emulator nv2a_vsh_disassembler nv2a_vsh_cpu
|
||||
PROPERTIES FOLDER Cxbx-Reloaded/nv2a_vsh
|
||||
)
|
||||
# Issues with compile (the same with develop branch) and
|
||||
# for some reason did not put the files into virtual folder?
|
||||
# Might need to put the list in the source folder for workaround fix.
|
||||
if(${CMAKE_GENERATOR} MATCHES "Visual Studio ([^9]|[9][0-9])")
|
||||
#add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/projects/debugger")
|
||||
add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/src/CxbxDebugger")
|
||||
endif()
|
||||
|
||||
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
||||
# Configure startup project
|
||||
set_property(DIRECTORY "${CMAKE_CURRENT_LIST_DIR}" PROPERTY VS_STARTUP_PROJECT cxbx)
|
||||
endif()
|
||||
|
||||
# Check if generator is Visual Studio then enable Cxbxr-Debugger project.
|
||||
# Since C# is currently supported with Visual Studio for now.
|
||||
if(${CMAKE_GENERATOR} MATCHES "Visual Studio ([^9]|[9][0-9])" AND BUILD_CXBXR_DEBUGGER)
|
||||
# Issues with compile (the same with develop branch) and
|
||||
# for some reason did not put the files into virtual folder?
|
||||
# Might need to put the list in the source folder for workaround fix.
|
||||
add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/src/CxbxDebugger")
|
||||
if(${CMAKE_GENERATOR} MATCHES "Visual Studio ([^9]|[9][0-9])")
|
||||
# Refuse to exclude due to install is not set to optional
|
||||
#set_target_properties(cstool
|
||||
# PROPERTIES EXCLUDE_FROM_ALL TRUE
|
||||
#)
|
||||
set_target_properties(Tests_cs_x86
|
||||
PROPERTIES EXCLUDE_FROM_ALL TRUE
|
||||
)
|
||||
|
||||
set_target_properties(Tests_cs_x86
|
||||
PROPERTIES EXCLUDE_FROM_ALL TRUE
|
||||
)
|
||||
|
||||
# Cxbx-Debugger project with third-party libraries
|
||||
set_target_properties(cxbxr-debugger cs_x86 Tests_cs_x86 capstone-shared
|
||||
PROPERTIES FOLDER Cxbx-Reloaded/debugger
|
||||
)
|
||||
# Cxbx-Debugger project with third-party libraries
|
||||
set_target_properties(cxbxr-debugger cs_x86 Tests_cs_x86 capstone-shared cstool
|
||||
PROPERTIES FOLDER Cxbx-Reloaded/debugger
|
||||
)
|
||||
endif()
|
||||
|
||||
install(FILES ${cxbxr_INSTALL_files}
|
||||
DESTINATION bin
|
||||
)
|
||||
|
||||
# Copy HLSL files to the output directory, which are loaded at runtime
|
||||
set(CXBXR_HLSL_FILES ${CXBXR_HEADER_EMU})
|
||||
list(FILTER CXBXR_HLSL_FILES INCLUDE REGEX ".*/src/core/hle/D3D8/Direct3D9/[^/]+\.hlsli?")
|
||||
add_custom_command(
|
||||
TARGET misc-batch POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$<CONFIG>/hlsl
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CXBXR_HLSL_FILES} "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$<CONFIG>/hlsl"
|
||||
# These files can be edited.
|
||||
# Create backup copies for convenience of restoring original shader behaviour.
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$<CONFIG>/hlsl/backup
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CXBXR_HLSL_FILES} "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$<CONFIG>/hlsl/backup"
|
||||
)
|
||||
install(DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$<CONFIG>/hlsl DESTINATION bin)
|
||||
|
||||
set(cxbxr_GLEW_DLL "${CMAKE_SOURCE_DIR}/import/glew-2.0.0/bin/Release/Win32/glew32.dll")
|
||||
|
||||
install(PROGRAMS ${cxbxr_GLEW_DLL}
|
||||
DESTINATION bin
|
||||
)
|
||||
|
||||
install(PROGRAMS $<TARGET_FILE_DIR:cxbx>/${CMAKE_SHARED_LIBRARY_PREFIX}subhook${CMAKE_SHARED_LIBRARY_SUFFIX}
|
||||
DESTINATION bin
|
||||
)
|
||||
|
||||
install(PROGRAMS $<TARGET_FILE_DIR:cxbx>/${CMAKE_SHARED_LIBRARY_PREFIX}SDL2${CMAKE_SHARED_LIBRARY_SUFFIX}
|
||||
DESTINATION bin
|
||||
# Cxbx-Reloaded project with third-party libraries
|
||||
set_target_properties(cxbx subhook XbSymbolDatabase libtommath libtomcrypt
|
||||
PROPERTIES FOLDER Cxbx-Reloaded
|
||||
)
|
||||
|
|
13
CONTRIBUTORS
|
@ -7,7 +7,7 @@ Cxbx was initiated by Caustik. Dxbx was initiated by shadowtj.
|
|||
|
||||
The following contributors are grouped per project and listed in alphabetical order,
|
||||
based on sources like https://github.com/Cxbx-Reloaded/Cxbx-Reloaded/graphs/contributors ,
|
||||
http://www.caustik.com/cxbx/about.htm , https://emulation.gametechwiki.com/index.php/Cxbx ,
|
||||
http://www.caustik.com/cxbx/about.htm , http://emulation.gametechwiki.com/index.php/Cxbx ,
|
||||
and https://github.com/PatrickvL/Dxbx/graphs/contributors .
|
||||
|
||||
|
||||
|
@ -34,7 +34,7 @@ Ernegien (Mike Davis)
|
|||
ergo720
|
||||
faha223 (Fred Hallock)
|
||||
Fisherman166
|
||||
gandalfthewhite19890404
|
||||
gandalfthewhite19890404
|
||||
gellis713
|
||||
ggKismet
|
||||
GXTX (wutno)
|
||||
|
@ -46,15 +46,14 @@ JayFoxRox (Jannik Vogel)
|
|||
literalmente-game
|
||||
Luca1991 (Luca D'Amico) [Luca91]
|
||||
LukeUsher (Luke Usher) [SoullessSentinel]
|
||||
Margen67
|
||||
Margen67
|
||||
NZJenkins
|
||||
PatrickvL (Patrick van Logchem)
|
||||
phire (Scott Mansell)
|
||||
RadWolfie
|
||||
revel8n
|
||||
Silent (CookiePLMonster)
|
||||
StrikerX3 (Ivan Roberto de Oliveira)
|
||||
TotalCaesar659
|
||||
TotalCaesar659
|
||||
Voxel9 (Voxel)
|
||||
x1nixmzeng
|
||||
|
||||
|
@ -62,7 +61,7 @@ x1nixmzeng
|
|||
Cxbx-Reloaded Supporters:
|
||||
|
||||
Cedric Wilson
|
||||
Cisco Martinez
|
||||
Cisco Martinez
|
||||
Cody Dale Barton
|
||||
Elijah Chondropoulos
|
||||
Jacob Kelly
|
||||
|
@ -73,7 +72,7 @@ Kenneth Edmonds
|
|||
Kyle Lenhardt
|
||||
Manny Calavera
|
||||
Mark Knasiak
|
||||
Marko V.
|
||||
Marko V.
|
||||
Matt Coady
|
||||
Roman Guivan
|
||||
Taylor Stock
|
||||
|
|
78
README.md
|
@ -1,57 +1,45 @@
|
|||
# Cxbx-Reloaded - Original Xbox Emulator
|
||||
[](https://github.com/Cxbx-Reloaded/Cxbx-Reloaded/blob/master/COPYING)
|
||||
[](https://github.com/Cxbx-Reloaded/Cxbx-Reloaded/actions?query=event%3Apush+workflow%3A%22GitHub+CI%22)
|
||||
[](https://img.shields.io/badge/License-GPL%20v2-blue.svg)
|
||||
[](https://github.com/Cxbx-Reloaded/Cxbx-Reloaded/actions?query=workflow%3A%22GitHub+CI%22)
|
||||
[](https://Cxbx-Reloaded.visualstudio.com/Cxbx-Reloaded/_build/latest?definitionId=7&branchName=develop)
|
||||
[](https://discord.gg/26Xjx23)
|
||||
|
||||
Cxbx-Reloaded is an emulator for running Microsoft Xbox (and eventually, Chihiro) games on Microsoft Windows and Wine.
|
||||
Cxbx-Reloaded is an emulator for running Microsoft Xbox (and eventually, Chihiro) games on Microsoft Windows.
|
||||
|
||||
## System Requirements
|
||||
### Minimum
|
||||
* OS: Windows 7+ x64, or x86-64 Linux with Wine. 32-bit is not supported.
|
||||
* MacOS with Wine is known not to work, and BSD-based systems are untested.
|
||||
* Also note that Wine is relatively unstable, and it might break compatibility with Cxbx-Reloaded at any time without warning.
|
||||
* OS: Windows 7+ x64. 32-bit is not supported.
|
||||
* GPU: Direct3D 9.0c with Pixel Shader Model 2.x, and Vertex Shader Model 3.0.
|
||||
|
||||
## Prerequisites
|
||||
### Windows
|
||||
* [32-bit (x86) Visual C++ 2022 Redistributable](https://aka.ms/vs/17/release/vc_redist.x86.exe)
|
||||
### Prerequisites
|
||||
* [32-bit (x86) Visual C++ 2019 Redistributable](https://aka.ms/vs/16/release/vc_redist.x86.exe)
|
||||
* [Npcap *(used for network emulation)*](https://nmap.org/npcap/#download)
|
||||
* Make sure to enable winpcap compatibility mode.
|
||||
* [WinUSB compliant driver](https://github.com/libusb/libusb/wiki/Windows#Driver_Installation)
|
||||
* *Optional, only needed for USB pass-through of original Xbox and Steel Battalion controllers.*
|
||||
|
||||
### Wine
|
||||
**Please use the latest stable release version of Wine. If it does not work for you, then roll back to Wine 7.0 which is the last known working version.**<br/>
|
||||
**There also exists this known [issue](https://github.com/Cxbx-Reloaded/Cxbx-Reloaded/issues/2314) which currently prevents savings in some games with the most recent Wine 6.8 and later versions.**
|
||||
* Winetricks
|
||||
* `vcrun2019`
|
||||
* Requires the latest winetricks script.
|
||||
* `d3dcompiler_47`
|
||||
* This may be subject to change.
|
||||
* Winpcap is built-in, no installation is required.
|
||||
* Make sure to enable winpcap compatibility mode!
|
||||
|
||||
## Automated Builds
|
||||
Cxbx-Reloaded doesn't currently have stable builds, but you can obtain pre-release builds from our official website's download page, or the links below:
|
||||
Cxbx-Reloaded doesn't currently have stable builds, but you can obtain pre-release builds from the Releases tab, or the links below:
|
||||
|
||||
* **[Release Builds](https://cxbx-reloaded.co.uk/download)**
|
||||
* **[Release Builds](https://github.com/Cxbx-Reloaded/Cxbx-Reloaded/releases)**
|
||||
* **WINE users will need to use `CxbxReloaded-Release-VS2017.zip` for it to run correctly.**
|
||||
* *[Full build history](https://github.com/Cxbx-Reloaded/Cxbx-Reloaded/actions?query=workflow%3A%22GitHub+CI%22)*
|
||||
|
||||
## Compatibility
|
||||
Cxbx-Reloaded has a [compatibility list](https://cxbx-reloaded.co.uk/compatibility).
|
||||
Cxbx-Reloaded has a [compatibility list](https://github.com/Cxbx-Reloaded/game-compatibility#cxbx-reloaded-game-compatibility-project).
|
||||
|
||||
If you would like to submit compatibility reports, please request permission in our Discord server.
|
||||
If you have something to report on a title, please create or update the issue for it there.
|
||||
|
||||
Please read the [Readme file](https://github.com/Cxbx-Reloaded/game-compatibility/blob/master/README.md) first!
|
||||
|
||||
## Bug Reports
|
||||
Game or software specific issues can be reported in the [compatibility website](https://cxbx-reloaded.co.uk/compatibility).
|
||||
Game or software specific issues can be reported in the [compatibility list](https://github.com/Cxbx-Reloaded/game-compatibility#cxbx-reloaded-game-compatibility-project).
|
||||
|
||||
For emulation issues that are not specific to any single piece of software, a bug report can be submitted at [the Cxbx-Reloaded issue tracker](https://github.com/Cxbx-Reloaded/Cxbx-Reloaded/issues).
|
||||
<!--Make sure to follow the issue template and that it contains:
|
||||
* The build tested with, error message displayed (if any)
|
||||
* **You can copy and paste any popup messages. However, please keep it clean by pasting and trimming down to only the message itself.**
|
||||
* Screenshots
|
||||
* Optional unless there are graphic bugs for reference.
|
||||
|
||||
**Failure to follow the template will auto close your ticket.**-->
|
||||
Make sure bug reports contain:
|
||||
* The build tested with, error message displayed (if any)
|
||||
* Screenshots
|
||||
* Xbe dump (created via `Edit > Dump Xbe Info To > File`)
|
||||
* Kernel Debug log (created when running a game with `View > Debug Output (Kernel) > File` selected).
|
||||
|
||||
## Additional information
|
||||
Cxbx-Reloaded has a [wiki](https://github.com/Cxbx-Reloaded/Cxbx-Reloaded/wiki) containing various subjects and background information.
|
||||
|
@ -63,18 +51,19 @@ We welcome contributions, large and small.
|
|||
|
||||
If you want to do some coding, be sure to read the [Developer notes](https://github.com/Cxbx-Reloaded/Cxbx-Reloaded/wiki/Developer-notes).
|
||||
|
||||
**IMPORTANT: Pull-Requests containing code derived from XQEMU will _not_ be approved until an agreement is reached to make work mutually beneficial. This includes updates to existing XQEMU derived code. We should not/will not become a hostile fork.**
|
||||
**IMPORTANT: Pull-Requests containing code derived from XQEMU will _not_ be approved until an agreement is reached to make work mutually beneficial. this includes updates to existing XQEMU derived code. We should not/will not become a hostile fork.**
|
||||
|
||||
Please contact us before you start working on something, so we can make sure your work is going to be accepted once finished.
|
||||
|
||||
### Main Prerequisites
|
||||
1. [Git for Windows](https://git-scm.com)
|
||||
2. [CMake](https://cmake.org)
|
||||
* Some IDEs already have CMake support, this is optional.
|
||||
* Some IDEs already have CMake support, so this is optional.
|
||||
|
||||
### Fetching the code
|
||||
1. Run the following command in the command line:
|
||||
<br>`git clone --recurse-submodules https://github.com/Cxbx-Reloaded/Cxbx-Reloaded.git`
|
||||
|
||||
`git clone --recurse-submodules https://github.com/Cxbx-Reloaded/Cxbx-Reloaded.git`
|
||||
* Please note the `--recurse-submodules` parameter. This is required to fetch submodules.
|
||||
* If Cxbx-Reloaded was checked out without submodules, they can be updated/fetched with the following command:
|
||||
|
||||
|
@ -83,13 +72,12 @@ Please contact us before you start working on something, so we can make sure you
|
|||
### Compiling
|
||||
|
||||
#### Windows
|
||||
Don't open `CMakeLists.txt` from Visual Studio, as it won't generate files in the `build` directory.
|
||||
**NOTE:** Don't open `CMakeLists.txt` from Visual Studio, as it won't generate files in the `build` directory.
|
||||
|
||||
##### Prerequisites
|
||||
1. [Visual Studio](https://visualstudio.microsoft.com/downloads/) 2022
|
||||
1. [Visual Studio](https://visualstudio.microsoft.com/downloads/) 2017 or later
|
||||
* C++ and C# desktop development
|
||||
* Windows Universal CRT SDK
|
||||
* Windows 11 SDK (10.0.22621.0) or later
|
||||
* C++ CMake tools for Windows
|
||||
* *Optional if CMake is installed*
|
||||
* [Microsoft Child Process Debugging Power Tool](https://marketplace.visualstudio.com/items?itemName=vsdbgplat.MicrosoftChildProcessDebuggingPowerTool)
|
||||
|
@ -97,11 +85,11 @@ Don't open `CMakeLists.txt` from Visual Studio, as it won't generate files in th
|
|||
##### Generate Visual Studio files
|
||||
1. If you don't have CMake installed, open `___ Native Tools Command Prompt for VS 20##`.
|
||||
2. `cd` to the Cxbx-Reloaded directory.
|
||||
3. Run the following command: `cmake -B build -G "Visual Studio 17 2022" -A Win32` \
|
||||
**NOTES**:
|
||||
* VS2022 17.0 or later is required.
|
||||
* To build the Cxbx-Reloaded Debugger tool, add the variable `-DBUILD_CXBXR_DEBUGGER=ON` to the above command.
|
||||
* _This debugger tool is deprecated and will be eventually removed, please use the Visual Studio debugger instead._
|
||||
3. Run these commands.
|
||||
1. `mkdir build & cd build`
|
||||
2. `cmake .. -G "Visual Studio 16 2019" -A Win32`
|
||||
* Visual Studio 2019 16.1 or later has CMake 3.14 bundled, and is required for the Visual Studio 2019 generator.
|
||||
* Use `cmake .. -G "Visual Studio 15 2017" -A Win32` for Visual Studio 2017.
|
||||
4. Open `Cxbx-Reloaded.sln` from the `build` directory.
|
||||
5. Select the Release configuration, then click Build.
|
||||
* Debug builds are **significantly slower, and only for developers**.
|
||||
|
@ -116,5 +104,3 @@ You can support [Luke Usher](https://github.com/LukeUsher), initiator of Cxbx-Re
|
|||
* All contributors to the original Cxbx and [Dxbx](https://github.com/PatrickvL/Dxbx) projects. Without them Cxbx-Reloaded would not exist at all.
|
||||
* [XQEMU](https://github.com/xqemu/xqemu) - While the majority of Cxbx-R is our own work (Kernel, HLE, etc), the NV2A LLE and NVNet implementation are primarily the work of the XQEMU developers.
|
||||
* [XboxDev](https://github.com/xboxdev) - Providing Xbox hardware research & useful tooling.
|
||||
* [XbSymbolDatabase](https://github.com/Cxbx-Reloaded/XbSymbolDatabase) - Providing support to detect symbols across XDK builds from reverse engineered retail titles.
|
||||
* [Xbox Kernel Test Suite](https://github.com/Cxbx-Reloaded/xbox_kernel_test_suite) - Making accurate tests on hardware to compare against cxbxr's kernel implementation.
|
||||
|
|
|
@ -47,9 +47,6 @@ GOTO :helpInfo
|
|||
)
|
||||
|
||||
:: Check second arg (Visual Studio version)
|
||||
IF "%2"=="2022" (
|
||||
SET msvc_compiler=Visual Studio 17 2022
|
||||
)
|
||||
IF "%2"=="2019" (
|
||||
SET msvc_compiler=Visual Studio 16 2019
|
||||
)
|
||||
|
@ -57,7 +54,7 @@ IF "%2"=="2017" (
|
|||
SET msvc_compiler=Visual Studio 15 2017
|
||||
)
|
||||
IF "%2"=="" (
|
||||
SET msvc_compiler=Visual Studio 16 2019
|
||||
SET msvc_compiler=Visual Studio 15 2017
|
||||
)
|
||||
IF NOT DEFINED msvc_compiler (
|
||||
GOTO :helpInfo
|
||||
|
@ -103,9 +100,8 @@ ECHO - ARM
|
|||
ECHO - ARM64
|
||||
ECHO ---
|
||||
ECHO arg2
|
||||
ECHO - 2022
|
||||
ECHO - 2019
|
||||
ECHO - 2017
|
||||
ECHO - 2019
|
||||
PAUSE
|
||||
GOTO :end
|
||||
|
||||
|
|
|
@ -12,41 +12,34 @@
|
|||
#ifndef XBOXKRNL_DBG_H
|
||||
#define XBOXKRNL_DBG_H
|
||||
|
||||
#include "types.h"
|
||||
|
||||
namespace xbox
|
||||
{
|
||||
|
||||
XBSYSAPI EXPORTNUM(5) void_xt NTAPI DbgBreakPoint();
|
||||
XBSYSAPI EXPORTNUM(6) void_xt NTAPI DbgBreakPointWithStatus
|
||||
XBSYSAPI EXPORTNUM(5) VOID NTAPI DbgBreakPoint();
|
||||
XBSYSAPI EXPORTNUM(6) VOID NTAPI DbgBreakPointWithStatus
|
||||
(
|
||||
IN ulong_xt Status
|
||||
IN ULONG Status
|
||||
);
|
||||
XBSYSAPI EXPORTNUM(7) ntstatus_xt NTAPI DbgLoadImageSymbols
|
||||
XBSYSAPI EXPORTNUM(7) NTSTATUS NTAPI DbgLoadImageSymbols
|
||||
(
|
||||
IN PANSI_STRING Name,
|
||||
IN PVOID Base,
|
||||
IN ulong_ptr_xt ProcessId
|
||||
IN ULONG_PTR ProcessId
|
||||
);
|
||||
XBSYSAPI EXPORTNUM(8) ulong_xt _cdecl DbgPrint
|
||||
XBSYSAPI EXPORTNUM(8) ULONG _cdecl DbgPrint
|
||||
(
|
||||
PCHAR Format, ...
|
||||
);
|
||||
XBSYSAPI EXPORTNUM(10) ulong_xt NTAPI DbgPrompt
|
||||
XBSYSAPI EXPORTNUM(10) ULONG NTAPI DbgPrompt
|
||||
(
|
||||
IN PCCH Prompt,
|
||||
OUT PCH Response,
|
||||
IN ulong_xt MaximumResponseLength
|
||||
IN ULONG MaximumResponseLength
|
||||
);
|
||||
XBSYSAPI EXPORTNUM(11) void_xt NTAPI DbgUnLoadImageSymbols
|
||||
XBSYSAPI EXPORTNUM(11) VOID NTAPI DbgUnLoadImageSymbols
|
||||
(
|
||||
IN PANSI_STRING Name,
|
||||
IN PVOID Base,
|
||||
IN ulong_ptr_xt ProcessId
|
||||
IN ULONG_PTR ProcessId
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
@ -12,17 +12,12 @@
|
|||
#ifndef XBOXKRNL_EX_H
|
||||
#define XBOXKRNL_EX_H
|
||||
|
||||
#include "types.h"
|
||||
|
||||
namespace xbox
|
||||
{
|
||||
|
||||
XBSYSAPI EXPORTNUM(12) void_xt NTAPI ExAcquireReadWriteLockExclusive
|
||||
XBSYSAPI EXPORTNUM(12) NTSTATUS NTAPI ExAcquireReadWriteLockExclusive
|
||||
(
|
||||
IN PERWLOCK ReadWriteLock
|
||||
);
|
||||
|
||||
XBSYSAPI EXPORTNUM(13) void_xt NTAPI ExAcquireReadWriteLockShared
|
||||
XBSYSAPI EXPORTNUM(13) NTSTATUS NTAPI ExAcquireReadWriteLockShared
|
||||
(
|
||||
IN PERWLOCK ReadWriteLock
|
||||
);
|
||||
|
@ -36,7 +31,7 @@ XBSYSAPI EXPORTNUM(13) void_xt NTAPI ExAcquireReadWriteLockShared
|
|||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(14) PVOID NTAPI ExAllocatePool
|
||||
(
|
||||
IN size_xt NumberOfBytes
|
||||
IN SIZE_T NumberOfBytes
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
|
@ -48,8 +43,8 @@ XBSYSAPI EXPORTNUM(14) PVOID NTAPI ExAllocatePool
|
|||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(15) PVOID NTAPI ExAllocatePoolWithTag
|
||||
(
|
||||
IN size_xt NumberOfBytes,
|
||||
IN ulong_xt Tag
|
||||
IN SIZE_T NumberOfBytes,
|
||||
IN ULONG Tag
|
||||
);
|
||||
|
||||
XBSYSAPI EXPORTNUM(16) OBJECT_TYPE ExEventObjectType;
|
||||
|
@ -61,7 +56,7 @@ XBSYSAPI EXPORTNUM(16) OBJECT_TYPE ExEventObjectType;
|
|||
// * Deallocates a block of pool memory
|
||||
// *
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(17) void_xt NTAPI ExFreePool
|
||||
XBSYSAPI EXPORTNUM(17) VOID NTAPI ExFreePool
|
||||
(
|
||||
IN PVOID P
|
||||
);
|
||||
|
@ -69,7 +64,7 @@ XBSYSAPI EXPORTNUM(17) void_xt NTAPI ExFreePool
|
|||
// ******************************************************************
|
||||
// * 0x0012 - ExInitializeReadWriteLock()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(18) void_xt NTAPI ExInitializeReadWriteLock
|
||||
XBSYSAPI EXPORTNUM(18) VOID NTAPI ExInitializeReadWriteLock
|
||||
(
|
||||
IN PERWLOCK ReadWriteLock
|
||||
);
|
||||
|
@ -83,14 +78,14 @@ XBSYSAPI EXPORTNUM(19) LARGE_INTEGER NTAPI ExInterlockedAddLargeInteger
|
|||
);
|
||||
|
||||
// Source:ReactOS
|
||||
XBSYSAPI EXPORTNUM(20) void_xt FASTCALL ExInterlockedAddLargeStatistic
|
||||
XBSYSAPI EXPORTNUM(20) VOID FASTCALL ExInterlockedAddLargeStatistic
|
||||
(
|
||||
IN PLARGE_INTEGER Addend,
|
||||
IN ulong_xt Increment
|
||||
IN ULONG Increment
|
||||
);
|
||||
|
||||
// Source:ReactOS
|
||||
XBSYSAPI EXPORTNUM(21) longlong_xt FASTCALL ExInterlockedCompareExchange64
|
||||
XBSYSAPI EXPORTNUM(21) LONGLONG FASTCALL ExInterlockedCompareExchange64
|
||||
(
|
||||
IN OUT PLONGLONG Destination,
|
||||
IN PLONGLONG Exchange,
|
||||
|
@ -102,7 +97,7 @@ XBSYSAPI EXPORTNUM(22) OBJECT_TYPE ExMutantObjectType;
|
|||
// ******************************************************************
|
||||
// * ExQueryPoolBlockSize
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(23) ulong_xt NTAPI ExQueryPoolBlockSize
|
||||
XBSYSAPI EXPORTNUM(23) ULONG NTAPI ExQueryPoolBlockSize
|
||||
(
|
||||
IN PVOID PoolBlock
|
||||
);
|
||||
|
@ -110,36 +105,36 @@ XBSYSAPI EXPORTNUM(23) ulong_xt NTAPI ExQueryPoolBlockSize
|
|||
// ******************************************************************
|
||||
// * 0x0018 - ExQueryNonVolatileSetting()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(24) ntstatus_xt NTAPI ExQueryNonVolatileSetting
|
||||
XBSYSAPI EXPORTNUM(24) NTSTATUS NTAPI ExQueryNonVolatileSetting
|
||||
(
|
||||
IN dword_xt ValueIndex,
|
||||
OUT dword_xt *Type,
|
||||
IN DWORD ValueIndex,
|
||||
OUT DWORD *Type,
|
||||
OUT PVOID Value,
|
||||
IN size_xt ValueLength,
|
||||
IN SIZE_T ValueLength,
|
||||
OUT PSIZE_T ResultLength OPTIONAL
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * ExReadWriteRefurbInfo
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(25) ntstatus_xt NTAPI ExReadWriteRefurbInfo
|
||||
XBSYSAPI EXPORTNUM(25) NTSTATUS NTAPI ExReadWriteRefurbInfo
|
||||
(
|
||||
IN OUT PXBOX_REFURB_INFO pRefurbInfo,
|
||||
IN ulong_xt dwBufferSize,
|
||||
IN boolean_xt bIsWriteMode
|
||||
IN ULONG dwBufferSize,
|
||||
IN BOOLEAN bIsWriteMode
|
||||
);
|
||||
|
||||
XBSYSAPI EXPORTNUM(26) void_xt NTAPI ExRaiseException
|
||||
XBSYSAPI EXPORTNUM(26) VOID NTAPI ExRaiseException
|
||||
(
|
||||
IN PEXCEPTION_RECORD ExceptionRecord
|
||||
);
|
||||
|
||||
XBSYSAPI EXPORTNUM(27) void_xt NTAPI ExRaiseStatus
|
||||
XBSYSAPI EXPORTNUM(27) VOID NTAPI ExRaiseStatus
|
||||
(
|
||||
IN ntstatus_xt Status
|
||||
IN NTSTATUS Status
|
||||
);
|
||||
|
||||
XBSYSAPI EXPORTNUM(28) void_xt NTAPI ExReleaseReadWriteLock
|
||||
XBSYSAPI EXPORTNUM(28) NTSTATUS NTAPI ExReleaseReadWriteLock
|
||||
(
|
||||
IN PERWLOCK ReadWriteLock
|
||||
);
|
||||
|
@ -147,12 +142,12 @@ XBSYSAPI EXPORTNUM(28) void_xt NTAPI ExReleaseReadWriteLock
|
|||
// ******************************************************************
|
||||
// * 0x001D - ExSaveNonVolatileSetting()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(29) ntstatus_xt NTAPI ExSaveNonVolatileSetting
|
||||
XBSYSAPI EXPORTNUM(29) NTSTATUS NTAPI ExSaveNonVolatileSetting
|
||||
(
|
||||
IN dword_xt ValueIndex,
|
||||
IN dword_xt Type,
|
||||
IN DWORD ValueIndex,
|
||||
IN DWORD Type,
|
||||
IN PVOID Value,
|
||||
IN size_xt ValueLength
|
||||
IN SIZE_T ValueLength
|
||||
);
|
||||
|
||||
XBSYSAPI EXPORTNUM(30) OBJECT_TYPE ExSemaphoreObjectType;
|
||||
|
@ -185,33 +180,33 @@ XBSYSAPI EXPORTNUM(34) PLIST_ENTRY FASTCALL ExfInterlockedRemoveHeadList
|
|||
IN PLIST_ENTRY ListHead
|
||||
);
|
||||
|
||||
XBSYSAPI EXPORTNUM(51) long_xt FASTCALL KRNL(InterlockedCompareExchange)
|
||||
XBSYSAPI EXPORTNUM(51) LONG FASTCALL KRNL(InterlockedCompareExchange)
|
||||
(
|
||||
IN OUT volatile PLONG Destination,
|
||||
IN long_xt Exchange,
|
||||
IN long_xt Comparand
|
||||
IN LONG Exchange,
|
||||
IN LONG Comparand
|
||||
);
|
||||
|
||||
XBSYSAPI EXPORTNUM(52) long_xt FASTCALL KRNL(InterlockedDecrement)
|
||||
XBSYSAPI EXPORTNUM(52) LONG FASTCALL KRNL(InterlockedDecrement)
|
||||
(
|
||||
IN OUT PLONG Addend
|
||||
);
|
||||
|
||||
XBSYSAPI EXPORTNUM(53) long_xt FASTCALL KRNL(InterlockedIncrement)
|
||||
XBSYSAPI EXPORTNUM(53) LONG FASTCALL KRNL(InterlockedIncrement)
|
||||
(
|
||||
IN OUT PLONG Addend
|
||||
);
|
||||
|
||||
XBSYSAPI EXPORTNUM(54) long_xt FASTCALL KRNL(InterlockedExchange)
|
||||
XBSYSAPI EXPORTNUM(54) LONG FASTCALL KRNL(InterlockedExchange)
|
||||
(
|
||||
IN volatile PLONG Destination,
|
||||
IN long_xt Value
|
||||
IN LONG Value
|
||||
);
|
||||
|
||||
XBSYSAPI EXPORTNUM(55) long_xt FASTCALL KRNL(InterlockedExchangeAdd)
|
||||
XBSYSAPI EXPORTNUM(55) LONG FASTCALL KRNL(InterlockedExchangeAdd)
|
||||
(
|
||||
IN volatile PLONG Addend,
|
||||
IN long_xt Value
|
||||
IN LONG Value
|
||||
);
|
||||
|
||||
// Dxbx Note : The Xbox1 SINGLE_LIST strucures are the same as in WinNT
|
||||
|
@ -231,8 +226,6 @@ XBSYSAPI EXPORTNUM(58) SLIST_ENTRY * FASTCALL KRNL(InterlockedPushEntrySList)
|
|||
IN PSLIST_ENTRY ListEntry
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
@ -12,21 +12,16 @@
|
|||
#ifndef XBOXKRNL_HAL_H
|
||||
#define XBOXKRNL_HAL_H
|
||||
|
||||
#include "types.h"
|
||||
|
||||
namespace xbox
|
||||
{
|
||||
|
||||
// ******************************************************************
|
||||
// * HalReadSMCTrayState
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(9) ntstatus_xt NTAPI HalReadSMCTrayState
|
||||
XBSYSAPI EXPORTNUM(9) VOID NTAPI HalReadSMCTrayState
|
||||
(
|
||||
dword_xt* State,
|
||||
dword_xt* Count
|
||||
DWORD* State,
|
||||
DWORD* Count
|
||||
);
|
||||
|
||||
XBSYSAPI EXPORTNUM(38) void_xt FASTCALL HalClearSoftwareInterrupt
|
||||
XBSYSAPI EXPORTNUM(38) VOID FASTCALL HalClearSoftwareInterrupt
|
||||
(
|
||||
KIRQL Request
|
||||
);
|
||||
|
@ -34,73 +29,73 @@ XBSYSAPI EXPORTNUM(38) void_xt FASTCALL HalClearSoftwareInterrupt
|
|||
// ******************************************************************
|
||||
// * 0x0027 - HalDisableSystemInterrupt()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(39) void_xt NTAPI HalDisableSystemInterrupt
|
||||
XBSYSAPI EXPORTNUM(39) VOID NTAPI HalDisableSystemInterrupt
|
||||
(
|
||||
IN ulong_xt BusInterruptLevel
|
||||
IN ULONG BusInterruptLevel
|
||||
);
|
||||
|
||||
XBSYSAPI EXPORTNUM(40) ulong_xt HalDiskCachePartitionCount;
|
||||
XBSYSAPI EXPORTNUM(40) ULONG HalDiskCachePartitionCount;
|
||||
XBSYSAPI EXPORTNUM(41) PANSI_STRING HalDiskModelNumber;
|
||||
XBSYSAPI EXPORTNUM(42) PANSI_STRING HalDiskSerialNumber;
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x002B - HalEnableSystemInterrupt()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(43) void_xt NTAPI HalEnableSystemInterrupt
|
||||
XBSYSAPI EXPORTNUM(43) VOID NTAPI HalEnableSystemInterrupt
|
||||
(
|
||||
IN ulong_xt BusInterruptLevel,
|
||||
IN ULONG BusInterruptLevel,
|
||||
IN KINTERRUPT_MODE InterruptMode
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * HalGetInterruptVector
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(44) ulong_xt NTAPI HalGetInterruptVector
|
||||
XBSYSAPI EXPORTNUM(44) ULONG NTAPI HalGetInterruptVector
|
||||
(
|
||||
IN ulong_xt BusInterruptLevel,
|
||||
IN ULONG BusInterruptLevel,
|
||||
OUT PKIRQL Irql
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * HalReadSMBusValue
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(45) ntstatus_xt NTAPI HalReadSMBusValue
|
||||
XBSYSAPI EXPORTNUM(45) NTSTATUS NTAPI HalReadSMBusValue
|
||||
(
|
||||
IN uchar_xt Address,
|
||||
IN uchar_xt Command,
|
||||
IN boolean_xt WriteWord,
|
||||
IN UCHAR Address,
|
||||
IN UCHAR Command,
|
||||
IN BOOLEAN WriteWord,
|
||||
OUT PULONG DataValue
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * HalReadWritePCISpace
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(46) void_xt NTAPI HalReadWritePCISpace
|
||||
XBSYSAPI EXPORTNUM(46) VOID NTAPI HalReadWritePCISpace
|
||||
(
|
||||
IN ulong_xt BusNumber,
|
||||
IN ulong_xt SlotNumber,
|
||||
IN ulong_xt RegisterNumber,
|
||||
IN ULONG BusNumber,
|
||||
IN ULONG SlotNumber,
|
||||
IN ULONG RegisterNumber,
|
||||
IN PVOID Buffer,
|
||||
IN ulong_xt Length,
|
||||
IN boolean_xt WritePCISpace
|
||||
IN ULONG Length,
|
||||
IN BOOLEAN WritePCISpace
|
||||
);
|
||||
|
||||
typedef void_xt (*PHAL_SHUTDOWN_NOTIFICATION)(
|
||||
typedef VOID (*PHAL_SHUTDOWN_NOTIFICATION)(
|
||||
IN struct _HAL_SHUTDOWN_REGISTRATION *ShutdownRegistration
|
||||
);
|
||||
|
||||
typedef struct _HAL_SHUTDOWN_REGISTRATION {
|
||||
PHAL_SHUTDOWN_NOTIFICATION NotificationRoutine;
|
||||
long_xt Priority;
|
||||
LONG Priority;
|
||||
LIST_ENTRY ListEntry;
|
||||
} HAL_SHUTDOWN_REGISTRATION, *PHAL_SHUTDOWN_REGISTRATION;
|
||||
|
||||
XBSYSAPI EXPORTNUM(47) void_xt NTAPI HalRegisterShutdownNotification(
|
||||
XBSYSAPI EXPORTNUM(47) VOID NTAPI HalRegisterShutdownNotification(
|
||||
IN PHAL_SHUTDOWN_REGISTRATION ShutdownRegistration,
|
||||
IN boolean_xt Register
|
||||
IN BOOLEAN Register
|
||||
);
|
||||
|
||||
XBSYSAPI EXPORTNUM(46) void_xt FASTCALL HalRequestSoftwareInterrupt
|
||||
XBSYSAPI EXPORTNUM(46) VOID FASTCALL HalRequestSoftwareInterrupt
|
||||
(
|
||||
IN KIRQL Request
|
||||
);
|
||||
|
@ -112,7 +107,7 @@ XBSYSAPI EXPORTNUM(46) void_xt FASTCALL HalRequestSoftwareInterrupt
|
|||
// * Reboot / Shutdown / Etc
|
||||
// *
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(49) void_xt DECLSPEC_NORETURN NTAPI HalReturnToFirmware
|
||||
XBSYSAPI EXPORTNUM(49) VOID DECLSPEC_NORETURN NTAPI HalReturnToFirmware
|
||||
(
|
||||
RETURN_FIRMWARE Routine
|
||||
);
|
||||
|
@ -120,98 +115,96 @@ XBSYSAPI EXPORTNUM(49) void_xt DECLSPEC_NORETURN NTAPI HalReturnToFirmware
|
|||
// ******************************************************************
|
||||
// * HalWriteSMBusValue
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(50) ntstatus_xt NTAPI HalWriteSMBusValue
|
||||
XBSYSAPI EXPORTNUM(50) NTSTATUS NTAPI HalWriteSMBusValue
|
||||
(
|
||||
uchar_xt Address,
|
||||
uchar_xt Command,
|
||||
boolean_xt WriteWord,
|
||||
ulong_xt DataValue
|
||||
UCHAR Address,
|
||||
UCHAR Command,
|
||||
BOOLEAN WriteWord,
|
||||
ULONG DataValue
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * READ_PORT_BUFFER_UCHAR
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(329) void_xt NTAPI READ_PORT_BUFFER_UCHAR
|
||||
XBSYSAPI EXPORTNUM(329) VOID NTAPI READ_PORT_BUFFER_UCHAR
|
||||
(
|
||||
IN dword_xt Port,
|
||||
IN PUCHAR Port,
|
||||
IN PUCHAR Buffer,
|
||||
IN ulong_xt Count
|
||||
IN ULONG Count
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * READ_PORT_BUFFER_USHORT
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(330) void_xt NTAPI READ_PORT_BUFFER_USHORT
|
||||
XBSYSAPI EXPORTNUM(330) VOID NTAPI READ_PORT_BUFFER_USHORT
|
||||
(
|
||||
IN dword_xt Port,
|
||||
IN PUSHORT Port,
|
||||
IN PUSHORT Buffer,
|
||||
IN ulong_xt Count
|
||||
IN ULONG Count
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * READ_PORT_BUFFER_ULONG
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(331) void_xt NTAPI READ_PORT_BUFFER_ULONG
|
||||
XBSYSAPI EXPORTNUM(331) VOID NTAPI READ_PORT_BUFFER_ULONG
|
||||
(
|
||||
IN dword_xt Port,
|
||||
IN PULONG Port,
|
||||
IN PULONG Buffer,
|
||||
IN ulong_xt Count
|
||||
IN ULONG Count
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * WRITE_PORT_BUFFER_UCHAR
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(332) void_xt NTAPI WRITE_PORT_BUFFER_UCHAR
|
||||
XBSYSAPI EXPORTNUM(332) VOID NTAPI WRITE_PORT_BUFFER_UCHAR
|
||||
(
|
||||
IN dword_xt Port,
|
||||
IN PUCHAR Port,
|
||||
IN PUCHAR Buffer,
|
||||
IN ulong_xt Count
|
||||
IN ULONG Count
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * WRITE_PORT_BUFFER_USHORT
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(333) void_xt NTAPI WRITE_PORT_BUFFER_USHORT
|
||||
XBSYSAPI EXPORTNUM(333) VOID NTAPI WRITE_PORT_BUFFER_USHORT
|
||||
(
|
||||
IN dword_xt Port,
|
||||
IN PUSHORT Port,
|
||||
IN PUSHORT Buffer,
|
||||
IN ulong_xt Count
|
||||
IN ULONG Count
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * WRITE_PORT_BUFFER_ULONG
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(334) void_xt NTAPI WRITE_PORT_BUFFER_ULONG
|
||||
XBSYSAPI EXPORTNUM(334) VOID NTAPI WRITE_PORT_BUFFER_ULONG
|
||||
(
|
||||
IN dword_xt Port,
|
||||
IN PULONG Port,
|
||||
IN PULONG Buffer,
|
||||
IN ulong_xt Count
|
||||
IN ULONG Count
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * HalBootSMCVideoMode
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(356) dword_xt HalBootSMCVideoMode;
|
||||
XBSYSAPI EXPORTNUM(356) DWORD HalBootSMCVideoMode;
|
||||
|
||||
XBSYSAPI EXPORTNUM(358) boolean_xt NTAPI HalIsResetOrShutdownPending
|
||||
XBSYSAPI EXPORTNUM(358) BOOLEAN NTAPI HalIsResetOrShutdownPending
|
||||
(
|
||||
);
|
||||
|
||||
XBSYSAPI EXPORTNUM(360) ntstatus_xt NTAPI HalInitiateShutdown
|
||||
XBSYSAPI EXPORTNUM(360) NTSTATUS NTAPI HalInitiateShutdown
|
||||
(
|
||||
);
|
||||
|
||||
XBSYSAPI EXPORTNUM(365) void_xt NTAPI HalEnableSecureTrayEject
|
||||
XBSYSAPI EXPORTNUM(365) VOID NTAPI HalEnableSecureTrayEject
|
||||
(
|
||||
);
|
||||
|
||||
XBSYSAPI EXPORTNUM(366) ntstatus_xt NTAPI HalWriteSMCScratchRegister
|
||||
XBSYSAPI EXPORTNUM(366) NTSTATUS NTAPI HalWriteSMCScratchRegister
|
||||
(
|
||||
IN dword_xt ScratchRegister
|
||||
IN DWORD ScratchRegister
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
@ -12,17 +12,12 @@
|
|||
#ifndef XBOXKRNL_IO_H
|
||||
#define XBOXKRNL_IO_H
|
||||
|
||||
#include "types.h"
|
||||
|
||||
namespace xbox
|
||||
{
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x003B - IoAllocateIrp()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(59) PVOID NTAPI IoAllocateIrp
|
||||
(
|
||||
IN cchar_xt StackSize
|
||||
IN CCHAR StackSize
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
|
@ -30,10 +25,10 @@ XBSYSAPI EXPORTNUM(59) PVOID NTAPI IoAllocateIrp
|
|||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(60) PVOID NTAPI IoBuildAsynchronousFsdRequest
|
||||
(
|
||||
IN ulong_xt MajorFunction,
|
||||
IN ULONG MajorFunction,
|
||||
IN PDEVICE_OBJECT DeviceObject,
|
||||
OUT PVOID Buffer OPTIONAL,
|
||||
IN ulong_xt Length,
|
||||
IN ULONG Length,
|
||||
OUT PLARGE_INTEGER StartingOffset OPTIONAL,
|
||||
OUT PIO_STATUS_BLOCK IoStatusBlock OPTIONAL
|
||||
);
|
||||
|
@ -43,13 +38,13 @@ XBSYSAPI EXPORTNUM(60) PVOID NTAPI IoBuildAsynchronousFsdRequest
|
|||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(61) PVOID NTAPI IoBuildDeviceIoControlRequest
|
||||
(
|
||||
IN ulong_xt IoControlCode,
|
||||
IN ULONG IoControlCode,
|
||||
IN PDEVICE_OBJECT DeviceObject,
|
||||
IN PVOID InputBuffer OPTIONAL,
|
||||
IN ulong_xt InputBufferLength,
|
||||
IN ULONG InputBufferLength,
|
||||
OUT PVOID OutputBuffer OPTIONAL,
|
||||
IN ulong_xt OutputBufferLength OPTIONAL,
|
||||
IN boolean_xt InternalDeviceIoControl,
|
||||
IN ULONG OutputBufferLength OPTIONAL,
|
||||
IN BOOLEAN InternalDeviceIoControl,
|
||||
IN PKEVENT Event,
|
||||
OUT PIO_STATUS_BLOCK IoStatusBlock OPTIONAL
|
||||
);
|
||||
|
@ -59,10 +54,10 @@ XBSYSAPI EXPORTNUM(61) PVOID NTAPI IoBuildDeviceIoControlRequest
|
|||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(62) PVOID NTAPI IoBuildSynchronousFsdRequest
|
||||
(
|
||||
IN ulong_xt MajorFunction,
|
||||
IN ULONG MajorFunction,
|
||||
IN PDEVICE_OBJECT DeviceObject,
|
||||
OUT PVOID Buffer OPTIONAL,
|
||||
IN ulong_xt Length,
|
||||
IN ULONG Length,
|
||||
OUT PLARGE_INTEGER StartingOffset OPTIONAL,
|
||||
IN PKEVENT Event,
|
||||
OUT PIO_STATUS_BLOCK IoStatusBlock
|
||||
|
@ -71,13 +66,13 @@ XBSYSAPI EXPORTNUM(62) PVOID NTAPI IoBuildSynchronousFsdRequest
|
|||
// ******************************************************************
|
||||
// * 0x003F - IoCheckShareAccess()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(63) ntstatus_xt NTAPI IoCheckShareAccess
|
||||
XBSYSAPI EXPORTNUM(63) NTSTATUS NTAPI IoCheckShareAccess
|
||||
(
|
||||
IN access_mask_xt DesiredAccess,
|
||||
IN ulong_xt DesiredShareAccess,
|
||||
IN ACCESS_MASK DesiredAccess,
|
||||
IN ULONG DesiredShareAccess,
|
||||
OUT PFILE_OBJECT FileObject,
|
||||
OUT PSHARE_ACCESS ShareAccess,
|
||||
IN boolean_xt Update
|
||||
IN BOOLEAN Update
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
|
@ -88,37 +83,37 @@ XBSYSAPI EXPORTNUM(64) OBJECT_TYPE IoCompletionObjectType;
|
|||
// ******************************************************************
|
||||
// * 0x0041 - IoCreateDevice()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(65) ntstatus_xt NTAPI IoCreateDevice
|
||||
XBSYSAPI EXPORTNUM(65) NTSTATUS NTAPI IoCreateDevice
|
||||
(
|
||||
IN PDRIVER_OBJECT DriverObject,
|
||||
IN ulong_xt DeviceExtensionSize,
|
||||
IN ULONG DeviceExtensionSize,
|
||||
IN PSTRING DeviceName OPTIONAL,
|
||||
IN ulong_xt DeviceType,
|
||||
IN boolean_xt Exclusive,
|
||||
IN ULONG DeviceType,
|
||||
IN BOOLEAN Exclusive,
|
||||
OUT PDEVICE_OBJECT* DeviceObject
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x0042 - IoCreateFile()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(66) ntstatus_xt NTAPI IoCreateFile
|
||||
XBSYSAPI EXPORTNUM(66) NTSTATUS NTAPI IoCreateFile
|
||||
(
|
||||
OUT PHANDLE FileHandle,
|
||||
IN access_mask_xt DesiredAccess,
|
||||
IN ACCESS_MASK DesiredAccess,
|
||||
IN POBJECT_ATTRIBUTES ObjectAttributes,
|
||||
OUT PIO_STATUS_BLOCK IoStatusBlock,
|
||||
IN PLARGE_INTEGER AllocationSize,
|
||||
IN ulong_xt FileAttributes,
|
||||
IN ulong_xt ShareAccess,
|
||||
IN ulong_xt Disposition,
|
||||
IN ulong_xt CreateOptions,
|
||||
IN ulong_xt Options
|
||||
IN ULONG FileAttributes,
|
||||
IN ULONG ShareAccess,
|
||||
IN ULONG Disposition,
|
||||
IN ULONG CreateOptions,
|
||||
IN ULONG Options
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x0043 - IoCreateSymbolicLink()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(67) ntstatus_xt NTAPI IoCreateSymbolicLink
|
||||
XBSYSAPI EXPORTNUM(67) NTSTATUS NTAPI IoCreateSymbolicLink
|
||||
(
|
||||
IN PSTRING SymbolicLinkName,
|
||||
IN PSTRING DeviceName
|
||||
|
@ -127,7 +122,7 @@ XBSYSAPI EXPORTNUM(67) ntstatus_xt NTAPI IoCreateSymbolicLink
|
|||
// ******************************************************************
|
||||
// * 0x0044 - IoDeleteDevice()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(68) void_xt NTAPI IoDeleteDevice
|
||||
XBSYSAPI EXPORTNUM(68) VOID NTAPI IoDeleteDevice
|
||||
(
|
||||
IN PDEVICE_OBJECT irql
|
||||
);
|
||||
|
@ -135,7 +130,7 @@ XBSYSAPI EXPORTNUM(68) void_xt NTAPI IoDeleteDevice
|
|||
// ******************************************************************
|
||||
// * 0x0045 - IoDeleteSymbolicLink()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(69) ntstatus_xt NTAPI IoDeleteSymbolicLink
|
||||
XBSYSAPI EXPORTNUM(69) NTSTATUS NTAPI IoDeleteSymbolicLink
|
||||
(
|
||||
IN PSTRING SymbolicLinkName
|
||||
);
|
||||
|
@ -153,7 +148,7 @@ XBSYSAPI EXPORTNUM(71) OBJECT_TYPE IoFileObjectType;
|
|||
// ******************************************************************
|
||||
// * 0x0048 - IoFreeIrp()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(72) void_xt NTAPI IoFreeIrp
|
||||
XBSYSAPI EXPORTNUM(72) VOID NTAPI IoFreeIrp
|
||||
(
|
||||
IN PIRP Irp
|
||||
);
|
||||
|
@ -164,14 +159,14 @@ XBSYSAPI EXPORTNUM(72) void_xt NTAPI IoFreeIrp
|
|||
XBSYSAPI EXPORTNUM(73) PVOID NTAPI IoInitializeIrp
|
||||
(
|
||||
IN PIRP Irp,
|
||||
IN ushort_xt PacketSize,
|
||||
IN cchar_xt StackSize
|
||||
IN USHORT PacketSize,
|
||||
IN CCHAR StackSize
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x004A - IoInvalidDeviceRequest()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(74) ntstatus_xt NTAPI IoInvalidDeviceRequest
|
||||
XBSYSAPI EXPORTNUM(74) NTSTATUS NTAPI IoInvalidDeviceRequest
|
||||
(
|
||||
IN PDEVICE_OBJECT DeviceObject,
|
||||
IN PIRP Irp
|
||||
|
@ -180,11 +175,11 @@ XBSYSAPI EXPORTNUM(74) ntstatus_xt NTAPI IoInvalidDeviceRequest
|
|||
// ******************************************************************
|
||||
// * 0x004B - IoQueryFileInformation()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(75) ntstatus_xt NTAPI IoQueryFileInformation
|
||||
XBSYSAPI EXPORTNUM(75) NTSTATUS NTAPI IoQueryFileInformation
|
||||
(
|
||||
IN PFILE_OBJECT FileObject,
|
||||
IN FILE_INFORMATION_CLASS FileInformationClass,
|
||||
IN ulong_xt Length,
|
||||
IN ULONG Length,
|
||||
OUT PVOID FileInformation,
|
||||
OUT PULONG ReturnedLength
|
||||
);
|
||||
|
@ -192,11 +187,11 @@ XBSYSAPI EXPORTNUM(75) ntstatus_xt NTAPI IoQueryFileInformation
|
|||
// ******************************************************************
|
||||
// * 0x004C - IoQueryVolumeInformation()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(76) ntstatus_xt NTAPI IoQueryVolumeInformation
|
||||
XBSYSAPI EXPORTNUM(76) NTSTATUS NTAPI IoQueryVolumeInformation
|
||||
(
|
||||
IN PFILE_OBJECT FileObject,
|
||||
IN FS_INFORMATION_CLASS FsInformationClass,
|
||||
IN ulong_xt Length,
|
||||
IN ULONG Length,
|
||||
OUT PVOID FsInformation,
|
||||
OUT PULONG ReturnedLength
|
||||
);
|
||||
|
@ -204,7 +199,7 @@ XBSYSAPI EXPORTNUM(76) ntstatus_xt NTAPI IoQueryVolumeInformation
|
|||
// ******************************************************************
|
||||
// * 0x004D - IoQueueThreadIrp()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(77) void_xt NTAPI IoQueueThreadIrp
|
||||
XBSYSAPI EXPORTNUM(77) VOID NTAPI IoQueueThreadIrp
|
||||
(
|
||||
IN PIRP Irp
|
||||
);
|
||||
|
@ -212,7 +207,7 @@ XBSYSAPI EXPORTNUM(77) void_xt NTAPI IoQueueThreadIrp
|
|||
// ******************************************************************
|
||||
// * 0x004E - IoRemoveShareAccess()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(78) void_xt NTAPI IoRemoveShareAccess
|
||||
XBSYSAPI EXPORTNUM(78) VOID NTAPI IoRemoveShareAccess
|
||||
(
|
||||
IN PFILE_OBJECT FileObject,
|
||||
IN PSHARE_ACCESS ShareAccess
|
||||
|
@ -221,22 +216,22 @@ XBSYSAPI EXPORTNUM(78) void_xt NTAPI IoRemoveShareAccess
|
|||
// ******************************************************************
|
||||
// * 0x004F - IoSetIoCompletion()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(79) ntstatus_xt NTAPI IoSetIoCompletion
|
||||
XBSYSAPI EXPORTNUM(79) NTSTATUS NTAPI IoSetIoCompletion
|
||||
(
|
||||
IN PKQUEUE IoCompletion,
|
||||
IN PVOID KeyContext,
|
||||
IN PVOID ApcContext,
|
||||
IN ntstatus_xt IoStatus,
|
||||
IN ulong_xt IoStatusInformation
|
||||
IN NTSTATUS IoStatus,
|
||||
IN ULONG IoStatusInformation
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x0050 - IoSetShareAccess()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(80) cchar_xt NTAPI IoSetShareAccess
|
||||
XBSYSAPI EXPORTNUM(80) CCHAR NTAPI IoSetShareAccess
|
||||
(
|
||||
IN ulong_xt DesiredAccess,
|
||||
IN ulong_xt DesiredShareAccess,
|
||||
IN ULONG DesiredAccess,
|
||||
IN ULONG DesiredShareAccess,
|
||||
IN PFILE_OBJECT FileObject,
|
||||
OUT PSHARE_ACCESS ShareAccess
|
||||
);
|
||||
|
@ -244,7 +239,7 @@ XBSYSAPI EXPORTNUM(80) cchar_xt NTAPI IoSetShareAccess
|
|||
// ******************************************************************
|
||||
// * 0x0051 - IoStartNextPacket()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(81) void_xt NTAPI IoStartNextPacket
|
||||
XBSYSAPI EXPORTNUM(81) VOID NTAPI IoStartNextPacket
|
||||
(
|
||||
IN PDEVICE_OBJECT DeviceObject
|
||||
);
|
||||
|
@ -252,16 +247,16 @@ XBSYSAPI EXPORTNUM(81) void_xt NTAPI IoStartNextPacket
|
|||
// ******************************************************************
|
||||
// * 0x0052 - IoStartNextPacketByKey()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(82) void_xt NTAPI IoStartNextPacketByKey
|
||||
XBSYSAPI EXPORTNUM(82) VOID NTAPI IoStartNextPacketByKey
|
||||
(
|
||||
IN PDEVICE_OBJECT DeviceObject,
|
||||
IN ulong_xt Key
|
||||
IN ULONG Key
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x0053 - IoStartPacket()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(83) void_xt NTAPI IoStartPacket
|
||||
XBSYSAPI EXPORTNUM(83) VOID NTAPI IoStartPacket
|
||||
(
|
||||
IN PDEVICE_OBJECT DeviceObject,
|
||||
IN PIRP Irp,
|
||||
|
@ -271,34 +266,34 @@ XBSYSAPI EXPORTNUM(83) void_xt NTAPI IoStartPacket
|
|||
// ******************************************************************
|
||||
// * 0x0054 - IoSynchronousDeviceIoControlRequest()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(84) ntstatus_xt NTAPI IoSynchronousDeviceIoControlRequest
|
||||
XBSYSAPI EXPORTNUM(84) NTSTATUS NTAPI IoSynchronousDeviceIoControlRequest
|
||||
(
|
||||
IN ulong_xt IoControlCode,
|
||||
IN ULONG IoControlCode,
|
||||
IN PDEVICE_OBJECT DeviceObject,
|
||||
IN PVOID InputBuffer OPTIONAL,
|
||||
IN ulong_xt InputBufferLength,
|
||||
IN ULONG InputBufferLength,
|
||||
OUT PVOID OutputBuffer OPTIONAL,
|
||||
IN ulong_xt OutputBufferLength,
|
||||
IN ULONG OutputBufferLength,
|
||||
OUT PULONG ReturnedOutputBufferLength OPTIONAL,
|
||||
IN boolean_xt InternalDeviceIoControl
|
||||
IN BOOLEAN InternalDeviceIoControl
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x0055 - IoSynchronousFsdRequest()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(85) ntstatus_xt NTAPI IoSynchronousFsdRequest
|
||||
XBSYSAPI EXPORTNUM(85) NTSTATUS NTAPI IoSynchronousFsdRequest
|
||||
(
|
||||
IN ulong_xt MajorFunction,
|
||||
IN ULONG MajorFunction,
|
||||
IN PDEVICE_OBJECT DeviceObject,
|
||||
OUT PVOID Buffer OPTIONAL,
|
||||
IN ulong_xt Length,
|
||||
IN ULONG Length,
|
||||
IN PLARGE_INTEGER StartingOffset OPTIONAL
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x0056 - IofCallDriver()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(86) ntstatus_xt FASTCALL IofCallDriver
|
||||
XBSYSAPI EXPORTNUM(86) NTSTATUS FASTCALL IofCallDriver
|
||||
(
|
||||
IN PDEVICE_OBJECT DeviceObject,
|
||||
IN PIRP Irp
|
||||
|
@ -307,16 +302,16 @@ XBSYSAPI EXPORTNUM(86) ntstatus_xt FASTCALL IofCallDriver
|
|||
// ******************************************************************
|
||||
// * 0x0057 - IofCompleteRequest()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(87) void_xt FASTCALL IofCompleteRequest
|
||||
XBSYSAPI EXPORTNUM(87) VOID FASTCALL IofCompleteRequest
|
||||
(
|
||||
IN PIRP Irp,
|
||||
IN cchar_xt PriorityBoost
|
||||
IN CCHAR PriorityBoost
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x005A - IoDismountVolume()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(90) ntstatus_xt NTAPI IoDismountVolume
|
||||
XBSYSAPI EXPORTNUM(90) NTSTATUS NTAPI IoDismountVolume
|
||||
(
|
||||
IN PDEVICE_OBJECT DeviceObject
|
||||
);
|
||||
|
@ -324,7 +319,7 @@ XBSYSAPI EXPORTNUM(90) ntstatus_xt NTAPI IoDismountVolume
|
|||
// ******************************************************************
|
||||
// * 0x005B - IoDismountVolumeByName()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(91) ntstatus_xt NTAPI IoDismountVolumeByName
|
||||
XBSYSAPI EXPORTNUM(91) NTSTATUS NTAPI IoDismountVolumeByName
|
||||
(
|
||||
IN PSTRING VolumeName
|
||||
);
|
||||
|
@ -332,13 +327,11 @@ XBSYSAPI EXPORTNUM(91) ntstatus_xt NTAPI IoDismountVolumeByName
|
|||
// ******************************************************************
|
||||
// * 0x0167 - IoMarkIrpMustComplete()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(359) cchar_xt NTAPI IoMarkIrpMustComplete
|
||||
XBSYSAPI EXPORTNUM(359) CCHAR NTAPI IoMarkIrpMustComplete
|
||||
(
|
||||
IN PIRP Irp
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
@ -12,15 +12,10 @@
|
|||
#ifndef KERNEL_H
|
||||
#define KERNEL_H
|
||||
|
||||
#include "types.h"
|
||||
|
||||
namespace xbox
|
||||
{
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x005C - KeAlertResumeThread()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(92) ntstatus_xt NTAPI KeAlertResumeThread
|
||||
XBSYSAPI EXPORTNUM(92) NTSTATUS NTAPI KeAlertResumeThread
|
||||
(
|
||||
IN HANDLE ThreadHandle,
|
||||
IN OUT PULONG PreviousSuspendCount
|
||||
|
@ -29,7 +24,7 @@ XBSYSAPI EXPORTNUM(92) ntstatus_xt NTAPI KeAlertResumeThread
|
|||
// ******************************************************************
|
||||
// * 0x005D - KeAlertThread()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(93) ntstatus_xt NTAPI KeAlertThread
|
||||
XBSYSAPI EXPORTNUM(93) NTSTATUS NTAPI KeAlertThread
|
||||
(
|
||||
IN HANDLE ThreadHandle
|
||||
);
|
||||
|
@ -37,7 +32,7 @@ XBSYSAPI EXPORTNUM(93) ntstatus_xt NTAPI KeAlertThread
|
|||
// ******************************************************************
|
||||
// * 0x005E - KeBoostPriorityThread()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(94) ntstatus_xt NTAPI KeBoostPriorityThread
|
||||
XBSYSAPI EXPORTNUM(94) NTSTATUS NTAPI KeBoostPriorityThread
|
||||
(
|
||||
IN PKTHREAD Thread,
|
||||
IN KPRIORITY Increment
|
||||
|
@ -46,17 +41,17 @@ XBSYSAPI EXPORTNUM(94) ntstatus_xt NTAPI KeBoostPriorityThread
|
|||
// ******************************************************************
|
||||
// * 0x005F - KeBugCheck()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(95) void_xt NTAPI KeBugCheck
|
||||
XBSYSAPI EXPORTNUM(95) VOID NTAPI KeBugCheck
|
||||
(
|
||||
IN ulong_xt BugCheckMode
|
||||
IN ULONG BugCheckMode
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x0060 - KeBugCheckEx()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(96) ntstatus_xt NTAPI KeBugCheckEx
|
||||
XBSYSAPI EXPORTNUM(96) NTSTATUS NTAPI KeBugCheckEx
|
||||
(
|
||||
IN dword_xt BugCheckCode,
|
||||
IN DWORD BugCheckCode,
|
||||
IN PVOID BugCheckParameter1,
|
||||
IN PVOID BugCheckParameter2,
|
||||
IN PVOID BugCheckParameter3,
|
||||
|
@ -66,7 +61,7 @@ XBSYSAPI EXPORTNUM(96) ntstatus_xt NTAPI KeBugCheckEx
|
|||
// ******************************************************************
|
||||
// * 0x0061 - KeCancelTimer()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(97) boolean_xt NTAPI KeCancelTimer
|
||||
XBSYSAPI EXPORTNUM(97) BOOLEAN NTAPI KeCancelTimer
|
||||
(
|
||||
IN PKTIMER
|
||||
);
|
||||
|
@ -74,7 +69,7 @@ XBSYSAPI EXPORTNUM(97) boolean_xt NTAPI KeCancelTimer
|
|||
// ******************************************************************
|
||||
// * 0x0062 - KeConnectInterrupt()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(98) boolean_xt NTAPI KeConnectInterrupt
|
||||
XBSYSAPI EXPORTNUM(98) BOOLEAN NTAPI KeConnectInterrupt
|
||||
(
|
||||
IN PKINTERRUPT InterruptObject
|
||||
);
|
||||
|
@ -82,17 +77,17 @@ XBSYSAPI EXPORTNUM(98) boolean_xt NTAPI KeConnectInterrupt
|
|||
// ******************************************************************
|
||||
// * 0x0063 - KeDelayExecutionThread()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(99) ntstatus_xt NTAPI KeDelayExecutionThread
|
||||
XBSYSAPI EXPORTNUM(99) NTSTATUS NTAPI KeDelayExecutionThread
|
||||
(
|
||||
IN KPROCESSOR_MODE WaitMode,
|
||||
IN boolean_xt Alertable,
|
||||
IN BOOLEAN Alertable,
|
||||
IN PLARGE_INTEGER Interval
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x0064 - KeDisconnectInterrupt()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(100) void_xt NTAPI KeDisconnectInterrupt
|
||||
XBSYSAPI EXPORTNUM(100) VOID NTAPI KeDisconnectInterrupt
|
||||
(
|
||||
IN PKINTERRUPT InterruptObject
|
||||
);
|
||||
|
@ -100,9 +95,9 @@ XBSYSAPI EXPORTNUM(100) void_xt NTAPI KeDisconnectInterrupt
|
|||
// ******************************************************************
|
||||
// * 0x0065 - KeEnterCriticalRegion()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(101) void_xt NTAPI KeEnterCriticalRegion
|
||||
XBSYSAPI EXPORTNUM(101) VOID NTAPI KeEnterCriticalRegion
|
||||
(
|
||||
void_xt
|
||||
VOID
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
|
@ -118,7 +113,7 @@ XBSYSAPI EXPORTNUM(104) PKTHREAD NTAPI KeGetCurrentThread(void);
|
|||
// ******************************************************************
|
||||
// * 0x0069 - KeInitializeApc()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(105) void_xt NTAPI KeInitializeApc
|
||||
XBSYSAPI EXPORTNUM(105) VOID NTAPI KeInitializeApc
|
||||
(
|
||||
IN PKAPC Apc,
|
||||
IN PKTHREAD Thread,
|
||||
|
@ -132,7 +127,7 @@ XBSYSAPI EXPORTNUM(105) void_xt NTAPI KeInitializeApc
|
|||
// ******************************************************************
|
||||
// * 0x006A - KeInitializeDeviceQueue()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(106) void_xt NTAPI KeInitializeDeviceQueue
|
||||
XBSYSAPI EXPORTNUM(106) VOID NTAPI KeInitializeDeviceQueue
|
||||
(
|
||||
OUT PKDEVICE_QUEUE DeviceQueue
|
||||
);
|
||||
|
@ -140,7 +135,7 @@ XBSYSAPI EXPORTNUM(106) void_xt NTAPI KeInitializeDeviceQueue
|
|||
// ******************************************************************
|
||||
// * 0x006B - KeInitializeDpc()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(107) void_xt NTAPI KeInitializeDpc
|
||||
XBSYSAPI EXPORTNUM(107) VOID NTAPI KeInitializeDpc
|
||||
(
|
||||
KDPC *Dpc,
|
||||
PKDEFERRED_ROUTINE DeferredRoutine,
|
||||
|
@ -150,90 +145,90 @@ XBSYSAPI EXPORTNUM(107) void_xt NTAPI KeInitializeDpc
|
|||
// ******************************************************************
|
||||
// * 0x006C - KeInitializeEvent()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(108) void_xt NTAPI KeInitializeEvent
|
||||
XBSYSAPI EXPORTNUM(108) VOID NTAPI KeInitializeEvent
|
||||
(
|
||||
IN PRKEVENT Event,
|
||||
IN EVENT_TYPE Type,
|
||||
IN boolean_xt SignalState
|
||||
IN BOOLEAN SignalState
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x006D - KeInitializeInterrupt()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(109) void_xt NTAPI KeInitializeInterrupt
|
||||
XBSYSAPI EXPORTNUM(109) VOID NTAPI KeInitializeInterrupt
|
||||
(
|
||||
OUT PKINTERRUPT Interrupt,
|
||||
IN PKSERVICE_ROUTINE ServiceRoutine,
|
||||
IN PVOID ServiceContext,
|
||||
IN ulong_xt Vector,
|
||||
IN ULONG Vector,
|
||||
IN KIRQL Irql,
|
||||
IN KINTERRUPT_MODE InterruptMode,
|
||||
IN boolean_xt ShareVector
|
||||
IN BOOLEAN ShareVector
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x006E - KeInitializeMutant()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(110) void_xt NTAPI KeInitializeMutant
|
||||
XBSYSAPI EXPORTNUM(110) VOID NTAPI KeInitializeMutant
|
||||
(
|
||||
IN PRKMUTANT Mutant,
|
||||
IN boolean_xt InitialOwner
|
||||
IN BOOLEAN InitialOwner
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x006F - KeInitializeQueue()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(111) void_xt NTAPI KeInitializeQueue
|
||||
XBSYSAPI EXPORTNUM(111) VOID NTAPI KeInitializeQueue
|
||||
(
|
||||
IN PKQUEUE Queue,
|
||||
IN ulong_xt Count OPTIONAL
|
||||
IN ULONG Count OPTIONAL
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x0070 - KeInitializeSemaphore()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(112) void_xt NTAPI KeInitializeSemaphore
|
||||
XBSYSAPI EXPORTNUM(112) VOID NTAPI KeInitializeSemaphore
|
||||
(
|
||||
IN PRKSEMAPHORE Semaphore,
|
||||
IN long_xt Count,
|
||||
IN long_xt Limit
|
||||
IN LONG Count,
|
||||
IN LONG Limit
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x0071 - KeInitializeTimerEx()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(113) void_xt NTAPI KeInitializeTimerEx
|
||||
XBSYSAPI EXPORTNUM(113) VOID NTAPI KeInitializeTimerEx
|
||||
(
|
||||
IN PKTIMER Timer,
|
||||
IN TIMER_TYPE Type
|
||||
);
|
||||
|
||||
XBSYSAPI EXPORTNUM(114) boolean_xt NTAPI KeInsertByKeyDeviceQueue
|
||||
XBSYSAPI EXPORTNUM(114) BOOLEAN NTAPI KeInsertByKeyDeviceQueue
|
||||
(
|
||||
IN PKDEVICE_QUEUE DeviceQueue,
|
||||
IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry,
|
||||
IN ulong_xt SortKey
|
||||
IN ULONG SortKey
|
||||
);
|
||||
|
||||
XBSYSAPI EXPORTNUM(115) boolean_xt NTAPI KeInsertDeviceQueue
|
||||
XBSYSAPI EXPORTNUM(115) BOOLEAN NTAPI KeInsertDeviceQueue
|
||||
(
|
||||
IN PKDEVICE_QUEUE DeviceQueue,
|
||||
IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
|
||||
);
|
||||
|
||||
XBSYSAPI EXPORTNUM(116) long_xt NTAPI KeInsertHeadQueue
|
||||
XBSYSAPI EXPORTNUM(116) LONG NTAPI KeInsertHeadQueue
|
||||
(
|
||||
IN PRKQUEUE Queue,
|
||||
IN PLIST_ENTRY Entry
|
||||
);
|
||||
|
||||
XBSYSAPI EXPORTNUM(117) long_xt NTAPI KeInsertQueue
|
||||
XBSYSAPI EXPORTNUM(117) LONG NTAPI KeInsertQueue
|
||||
(
|
||||
IN PRKQUEUE Queue,
|
||||
IN PLIST_ENTRY Entry
|
||||
);
|
||||
|
||||
XBSYSAPI EXPORTNUM(118) boolean_xt NTAPI KeInsertQueueApc
|
||||
XBSYSAPI EXPORTNUM(118) BOOLEAN NTAPI KeInsertQueueApc
|
||||
(
|
||||
IN PRKAPC Apc,
|
||||
IN PVOID SystemArgument1,
|
||||
|
@ -244,7 +239,7 @@ XBSYSAPI EXPORTNUM(118) boolean_xt NTAPI KeInsertQueueApc
|
|||
// ******************************************************************
|
||||
// * 0x0077 - KeInsertQueueDpc()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(119) boolean_xt NTAPI KeInsertQueueDpc
|
||||
XBSYSAPI EXPORTNUM(119) BOOLEAN NTAPI KeInsertQueueDpc
|
||||
(
|
||||
IN PKDPC Dpc,
|
||||
IN PVOID SystemArgument1,
|
||||
|
@ -259,24 +254,24 @@ XBSYSAPI EXPORTNUM(120) KSYSTEM_TIME KeInterruptTime;
|
|||
// ******************************************************************
|
||||
// * 0x0079 - KeIsExecutingDpc()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(121) boolean_xt NTAPI KeIsExecutingDpc();
|
||||
XBSYSAPI EXPORTNUM(121) BOOLEAN NTAPI KeIsExecutingDpc();
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x007A - KeLeaveCriticalRegion()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(122) void_xt NTAPI KeLeaveCriticalRegion
|
||||
XBSYSAPI EXPORTNUM(122) VOID NTAPI KeLeaveCriticalRegion
|
||||
(
|
||||
void_xt
|
||||
VOID
|
||||
);
|
||||
|
||||
XBSYSAPI EXPORTNUM(123) long_xt NTAPI KePulseEvent
|
||||
XBSYSAPI EXPORTNUM(123) LONG NTAPI KePulseEvent
|
||||
(
|
||||
IN PRKEVENT Event,
|
||||
IN KPRIORITY Increment,
|
||||
IN boolean_xt Wait
|
||||
IN BOOLEAN Wait
|
||||
);
|
||||
|
||||
XBSYSAPI EXPORTNUM(124) long_xt NTAPI KeQueryBasePriorityThread
|
||||
XBSYSAPI EXPORTNUM(124) LONG NTAPI KeQueryBasePriorityThread
|
||||
(
|
||||
IN PKTHREAD Thread
|
||||
);
|
||||
|
@ -284,22 +279,22 @@ XBSYSAPI EXPORTNUM(124) long_xt NTAPI KeQueryBasePriorityThread
|
|||
// ******************************************************************
|
||||
// * 0x007D - KeQueryInterruptTime()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(125) ulonglong_xt NTAPI KeQueryInterruptTime(void);
|
||||
XBSYSAPI EXPORTNUM(125) ULONGLONG NTAPI KeQueryInterruptTime(void);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x007E - KeQueryPerformanceCounter()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(126) ulonglong_xt NTAPI KeQueryPerformanceCounter(void);
|
||||
XBSYSAPI EXPORTNUM(126) ULONGLONG NTAPI KeQueryPerformanceCounter(void);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x007F - KeQueryPerformanceFrequency()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(127) ulonglong_xt NTAPI KeQueryPerformanceFrequency(void);
|
||||
XBSYSAPI EXPORTNUM(127) ULONGLONG NTAPI KeQueryPerformanceFrequency(void);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x0080 - KeQuerySystemTime()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(128) void_xt NTAPI KeQuerySystemTime
|
||||
XBSYSAPI EXPORTNUM(128) VOID NTAPI KeQuerySystemTime
|
||||
(
|
||||
PLARGE_INTEGER CurrentTime
|
||||
);
|
||||
|
@ -307,33 +302,33 @@ XBSYSAPI EXPORTNUM(128) void_xt NTAPI KeQuerySystemTime
|
|||
// ******************************************************************
|
||||
// * 0x0081 - KeRaiseIrqlToDpcLevel()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(129) uchar_xt NTAPI KeRaiseIrqlToDpcLevel();
|
||||
XBSYSAPI EXPORTNUM(129) UCHAR NTAPI KeRaiseIrqlToDpcLevel();
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x0082 - KeRaiseIrqlToSynchLevel()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(130) uchar_xt NTAPI KeRaiseIrqlToSynchLevel();
|
||||
XBSYSAPI EXPORTNUM(130) UCHAR NTAPI KeRaiseIrqlToSynchLevel();
|
||||
|
||||
XBSYSAPI EXPORTNUM(131) long_xt NTAPI KeReleaseMutant
|
||||
XBSYSAPI EXPORTNUM(131) LONG NTAPI KeReleaseMutant
|
||||
(
|
||||
IN PRKMUTANT Mutant,
|
||||
IN KPRIORITY Increment,
|
||||
IN boolean_xt Abandoned,
|
||||
IN boolean_xt Wait
|
||||
IN BOOLEAN Abandoned,
|
||||
IN BOOLEAN Wait
|
||||
);
|
||||
|
||||
XBSYSAPI EXPORTNUM(132) long_xt NTAPI KeReleaseSemaphore
|
||||
XBSYSAPI EXPORTNUM(132) LONG NTAPI KeReleaseSemaphore
|
||||
(
|
||||
IN PRKSEMAPHORE Semaphore,
|
||||
IN KPRIORITY Increment,
|
||||
IN long_xt Adjustment,
|
||||
IN boolean_xt Wait
|
||||
IN BOOLEAN Adjustment,
|
||||
IN BOOLEAN Wait
|
||||
);
|
||||
|
||||
XBSYSAPI EXPORTNUM(133) PKDEVICE_QUEUE_ENTRY NTAPI KeRemoveByKeyDeviceQueue
|
||||
(
|
||||
IN PKDEVICE_QUEUE DeviceQueue,
|
||||
IN ulong_xt SortKey
|
||||
IN ULONG SortKey
|
||||
);
|
||||
|
||||
XBSYSAPI EXPORTNUM(134) PKDEVICE_QUEUE_ENTRY NTAPI KeRemoveDeviceQueue
|
||||
|
@ -341,7 +336,7 @@ XBSYSAPI EXPORTNUM(134) PKDEVICE_QUEUE_ENTRY NTAPI KeRemoveDeviceQueue
|
|||
IN PKDEVICE_QUEUE DeviceQueue
|
||||
);
|
||||
|
||||
XBSYSAPI EXPORTNUM(135) boolean_xt NTAPI KeRemoveEntryDeviceQueue
|
||||
XBSYSAPI EXPORTNUM(135) BOOLEAN NTAPI KeRemoveEntryDeviceQueue
|
||||
(
|
||||
IN PKDEVICE_QUEUE DeviceQueue,
|
||||
IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
|
||||
|
@ -357,7 +352,7 @@ XBSYSAPI EXPORTNUM(136) PLIST_ENTRY NTAPI KeRemoveQueue
|
|||
// ******************************************************************
|
||||
// * 0x0089 - KeRemoveQueueDpc()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(137) boolean_xt NTAPI KeRemoveQueueDpc
|
||||
XBSYSAPI EXPORTNUM(137) BOOLEAN NTAPI KeRemoveQueueDpc
|
||||
(
|
||||
IN PKDPC Dpc
|
||||
);
|
||||
|
@ -365,7 +360,7 @@ XBSYSAPI EXPORTNUM(137) boolean_xt NTAPI KeRemoveQueueDpc
|
|||
// ******************************************************************
|
||||
// * 0x008A - KeResetEvent()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(138) long_xt NTAPI KeResetEvent
|
||||
XBSYSAPI EXPORTNUM(138) LONG NTAPI KeResetEvent
|
||||
(
|
||||
IN PRKEVENT Event
|
||||
);
|
||||
|
@ -373,7 +368,7 @@ XBSYSAPI EXPORTNUM(138) long_xt NTAPI KeResetEvent
|
|||
// ******************************************************************
|
||||
// * 0x008B - KeRestoreFloatingPointState()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(139) ntstatus_xt NTAPI KeRestoreFloatingPointState
|
||||
XBSYSAPI EXPORTNUM(139) NTSTATUS NTAPI KeRestoreFloatingPointState
|
||||
(
|
||||
IN PKFLOATING_SAVE PublicFloatSave
|
||||
);
|
||||
|
@ -381,7 +376,7 @@ XBSYSAPI EXPORTNUM(139) ntstatus_xt NTAPI KeRestoreFloatingPointState
|
|||
// ******************************************************************
|
||||
// * 0x008C - KeResumeThread()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(140) ulong_xt NTAPI KeResumeThread
|
||||
XBSYSAPI EXPORTNUM(140) ULONG NTAPI KeResumeThread
|
||||
(
|
||||
IN PKTHREAD Thread
|
||||
);
|
||||
|
@ -394,7 +389,7 @@ XBSYSAPI EXPORTNUM(141) PLIST_ENTRY NTAPI KeRundownQueue
|
|||
// ******************************************************************
|
||||
// * 0x008E - KeSaveFloatingPointState()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(142) ntstatus_xt NTAPI KeSaveFloatingPointState
|
||||
XBSYSAPI EXPORTNUM(142) NTSTATUS NTAPI KeSaveFloatingPointState
|
||||
(
|
||||
OUT PKFLOATING_SAVE PublicFloatSave
|
||||
);
|
||||
|
@ -402,29 +397,29 @@ XBSYSAPI EXPORTNUM(142) ntstatus_xt NTAPI KeSaveFloatingPointState
|
|||
// ******************************************************************
|
||||
// * 0x008F - KeSetBasePriorityThread()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(143) long_xt NTAPI KeSetBasePriorityThread
|
||||
XBSYSAPI EXPORTNUM(143) LONG NTAPI KeSetBasePriorityThread
|
||||
(
|
||||
IN PKTHREAD Thread,
|
||||
IN long_xt Priority
|
||||
IN LONG Priority
|
||||
);
|
||||
|
||||
XBSYSAPI EXPORTNUM(144) boolean_xt NTAPI KeSetDisableBoostThread
|
||||
XBSYSAPI EXPORTNUM(144) ULONG NTAPI KeSetDisableBoostThread
|
||||
(
|
||||
IN PKTHREAD Thread,
|
||||
IN boolean_xt Disable
|
||||
IN ULONG Disable
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x0091 - KeSetEvent()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(145) long_xt NTAPI KeSetEvent
|
||||
XBSYSAPI EXPORTNUM(145) LONG NTAPI KeSetEvent
|
||||
(
|
||||
IN PRKEVENT Event,
|
||||
IN KPRIORITY Increment,
|
||||
IN boolean_xt Wait
|
||||
IN BOOLEAN Wait
|
||||
);
|
||||
|
||||
XBSYSAPI EXPORTNUM(146) void_xt NTAPI KeSetEventBoostPriority
|
||||
XBSYSAPI EXPORTNUM(146) VOID NTAPI KeSetEventBoostPriority
|
||||
(
|
||||
IN PRKEVENT Event,
|
||||
IN PRKTHREAD *Thread
|
||||
|
@ -439,16 +434,16 @@ XBSYSAPI EXPORTNUM(147) KPRIORITY NTAPI KeSetPriorityProcess
|
|||
// ******************************************************************
|
||||
// * 0x0094 - KeSetPriorityThread()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(148) boolean_xt NTAPI KeSetPriorityThread
|
||||
XBSYSAPI EXPORTNUM(148) BOOLEAN NTAPI KeSetPriorityThread
|
||||
(
|
||||
IN PKTHREAD Thread,
|
||||
IN long_xt Priority
|
||||
IN LONG Priority
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x0095 - KeSetTimer()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(149) boolean_xt NTAPI KeSetTimer
|
||||
XBSYSAPI EXPORTNUM(149) BOOLEAN NTAPI KeSetTimer
|
||||
(
|
||||
IN PKTIMER Timer,
|
||||
IN LARGE_INTEGER DueTime,
|
||||
|
@ -458,26 +453,26 @@ XBSYSAPI EXPORTNUM(149) boolean_xt NTAPI KeSetTimer
|
|||
// ******************************************************************
|
||||
// * 0x0096 - KeSetTimerEx()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(150) boolean_xt NTAPI KeSetTimerEx
|
||||
XBSYSAPI EXPORTNUM(150) BOOLEAN NTAPI KeSetTimerEx
|
||||
(
|
||||
IN PKTIMER Timer,
|
||||
IN LARGE_INTEGER DueTime,
|
||||
IN long_xt Period OPTIONAL,
|
||||
IN LONG Period OPTIONAL,
|
||||
IN PKDPC Dpc OPTIONAL
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x0097 - KeStallExecutionProcessor()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(151) void_xt NTAPI KeStallExecutionProcessor
|
||||
XBSYSAPI EXPORTNUM(151) VOID NTAPI KeStallExecutionProcessor
|
||||
(
|
||||
IN ulong_xt MicroSeconds
|
||||
IN ULONG MicroSeconds
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x0098 - KeSuspendThread()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(152) ulong_xt NTAPI KeSuspendThread
|
||||
XBSYSAPI EXPORTNUM(152) ULONG NTAPI KeSuspendThread
|
||||
(
|
||||
IN PKTHREAD Thread
|
||||
);
|
||||
|
@ -485,7 +480,7 @@ XBSYSAPI EXPORTNUM(152) ulong_xt NTAPI KeSuspendThread
|
|||
// ******************************************************************
|
||||
// * 0x0099 - KeSynchronizeExecution()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(153) boolean_xt NTAPI KeSynchronizeExecution
|
||||
XBSYSAPI EXPORTNUM(153) BOOLEAN NTAPI KeSynchronizeExecution
|
||||
(
|
||||
IN PKINTERRUPT Interrupt,
|
||||
IN PKSYNCHRONIZE_ROUTINE SynchronizeRoutine,
|
||||
|
@ -500,7 +495,7 @@ XBSYSAPI EXPORTNUM(154) KSYSTEM_TIME KeSystemTime;
|
|||
// ******************************************************************
|
||||
// * 0x009B - KeTestAlertThread()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(155) boolean_xt NTAPI KeTestAlertThread
|
||||
XBSYSAPI EXPORTNUM(155) BOOLEAN NTAPI KeTestAlertThread
|
||||
(
|
||||
IN KPROCESSOR_MODE AlertMode
|
||||
);
|
||||
|
@ -508,24 +503,24 @@ XBSYSAPI EXPORTNUM(155) boolean_xt NTAPI KeTestAlertThread
|
|||
// ******************************************************************
|
||||
// * 0x009C - KeTickCount
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(156) volatile dword_xt KeTickCount;
|
||||
XBSYSAPI EXPORTNUM(156) volatile DWORD KeTickCount;
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x009D - KeTimeIncrement
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(157) ulong_xt KeTimeIncrement;
|
||||
XBSYSAPI EXPORTNUM(157) ULONG KeTimeIncrement;
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x009E - KeWaitForMultipleObjects()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(158) ntstatus_xt NTAPI KeWaitForMultipleObjects
|
||||
XBSYSAPI EXPORTNUM(158) NTSTATUS NTAPI KeWaitForMultipleObjects
|
||||
(
|
||||
IN ulong_xt Count,
|
||||
IN ULONG Count,
|
||||
IN PVOID Object[],
|
||||
IN WAIT_TYPE WaitType,
|
||||
IN KWAIT_REASON WaitReason,
|
||||
IN KPROCESSOR_MODE WaitMode,
|
||||
IN boolean_xt Alertable,
|
||||
IN BOOLEAN Alertable,
|
||||
IN PLARGE_INTEGER Timeout OPTIONAL,
|
||||
IN PKWAIT_BLOCK WaitBlockArray OPTIONAL
|
||||
);
|
||||
|
@ -533,17 +528,15 @@ XBSYSAPI EXPORTNUM(158) ntstatus_xt NTAPI KeWaitForMultipleObjects
|
|||
// ******************************************************************
|
||||
// * 0x009F - KeWaitForSingleObject()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(159) ntstatus_xt NTAPI KeWaitForSingleObject
|
||||
XBSYSAPI EXPORTNUM(159) NTSTATUS NTAPI KeWaitForSingleObject
|
||||
(
|
||||
IN PVOID Object,
|
||||
IN KWAIT_REASON WaitReason,
|
||||
IN KPROCESSOR_MODE WaitMode,
|
||||
IN boolean_xt Alertable,
|
||||
IN BOOLEAN Alertable,
|
||||
IN PLARGE_INTEGER Timeout OPTIONAL
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
@ -12,107 +12,7 @@
|
|||
#ifndef XBOXKRNL_MM_H
|
||||
#define XBOXKRNL_MM_H
|
||||
|
||||
#include "types.h"
|
||||
|
||||
namespace xbox
|
||||
{
|
||||
|
||||
typedef ulong_xt PFN;
|
||||
typedef ulong_xt PFN_COUNT;
|
||||
typedef ulong_xt PFN_NUMBER, *PPFN_NUMBER;
|
||||
|
||||
typedef struct _MMPFNFREE
|
||||
{
|
||||
ushort_xt PackedPfnFlink;
|
||||
ushort_xt PackedPfnBlink;
|
||||
} MMPFNFREE, *PMMPFNFREE;
|
||||
|
||||
typedef struct _MMPFNREGION
|
||||
{
|
||||
MMPFNFREE FreePagesByColor[32];
|
||||
PFN_COUNT AvailablePages;
|
||||
} MMPFNREGION, *PMMPFNREGION;
|
||||
|
||||
/* enum describing the usage type of the memory pages */
|
||||
typedef enum _PageType
|
||||
{
|
||||
UnknownType, // Used by the PFN database
|
||||
StackType, // Used by MmCreateKernelStack
|
||||
VirtualPageTableType, // Used by the pages holding the PTs that map the user memory (lower 2 GiB)
|
||||
SystemPageTableType, // Used by the pages holding the PTs that map the system memory
|
||||
PoolType, // Used by ExAllocatePoolWithTag
|
||||
VirtualMemoryType, // Used by NtAllocateVirtualMemory
|
||||
SystemMemoryType, // Used by MmAllocateSystemMemory
|
||||
ImageType, // Used to mark executable memory
|
||||
CacheType, // Used by the file cache related functions
|
||||
ContiguousType, // Used by MmAllocateContiguousMemoryEx and others
|
||||
DebuggerType, // xbdm-related
|
||||
COUNTtype // The size of the array containing the page usage per type
|
||||
} PageType;
|
||||
|
||||
/* The Xbox PTE, modelled around the Intel 386 PTE specification */
|
||||
typedef struct _XBOX_PTE
|
||||
{
|
||||
ulong_xt Valid : 1;
|
||||
ulong_xt Write : 1;
|
||||
ulong_xt Owner : 1;
|
||||
ulong_xt WriteThrough : 1;
|
||||
ulong_xt CacheDisable : 1;
|
||||
ulong_xt Accessed : 1;
|
||||
ulong_xt Dirty : 1;
|
||||
ulong_xt LargePage : 1;
|
||||
ulong_xt Global : 1;
|
||||
ulong_xt GuardOrEnd : 1; // software field used for our own purposes
|
||||
ulong_xt Persist : 1; // software field used for our own purposes
|
||||
ulong_xt Unused : 1; // software field used for our own purposes
|
||||
ulong_xt PFN : 20;
|
||||
} XBOX_PTE, *PXBOX_PTE;
|
||||
|
||||
|
||||
/* PTE as used by the memory manager */
|
||||
typedef union _MMPTE
|
||||
{
|
||||
ulong_xt Default;
|
||||
XBOX_PTE Hardware;
|
||||
} MMPTE, *PMMPTE;
|
||||
|
||||
typedef PFN_NUMBER (FASTCALL *PMMREMOVE_PAGE_ROUTINE) (
|
||||
IN PageType BusyType,
|
||||
IN PMMPTE TargetPte
|
||||
);
|
||||
|
||||
typedef struct _MMPTERANGE
|
||||
{
|
||||
MMPTE HeadPte;
|
||||
PMMPTE FirstCommittedPte;
|
||||
PMMPTE LastCommittedPte;
|
||||
PMMPTE LastReservedPte;
|
||||
PFN_COUNT *AvailablePages;
|
||||
PMMREMOVE_PAGE_ROUTINE RemovePageRoutine;
|
||||
} MMPTERANGE, *PMMPTERANGE;
|
||||
|
||||
typedef struct _MMADDRESS_NODE
|
||||
{
|
||||
ulong_ptr_xt StartingVpn;
|
||||
ulong_ptr_xt EndingVpn;
|
||||
struct _MMADDRESS_NODE *Parent;
|
||||
struct _MMADDRESS_NODE *LeftChild;
|
||||
struct _MMADDRESS_NODE *RightChild;
|
||||
} MMADDRESS_NODE, *PMMADDRESS_NODE;
|
||||
|
||||
typedef struct _MMGLOBALDATA
|
||||
{
|
||||
PMMPFNREGION RetailPfnRegion;
|
||||
PMMPTERANGE SystemPteRange;
|
||||
PULONG AvailablePages;
|
||||
PFN_COUNT *AllocatedPagesByUsage;
|
||||
PRTL_CRITICAL_SECTION AddressSpaceLock;
|
||||
PMMADDRESS_NODE *VadRoot;
|
||||
PMMADDRESS_NODE *VadHint;
|
||||
PMMADDRESS_NODE *VadFreeHint;
|
||||
} MMGLOBALDATA, *PMMGLOBALDATA;
|
||||
|
||||
XBSYSAPI EXPORTNUM(102) MMGLOBALDATA MmGlobalData;
|
||||
XBSYSAPI EXPORTNUM(102) PVOID MmGlobalData[8];
|
||||
|
||||
// ******************************************************************
|
||||
// * MmAllocateContiguousMemory
|
||||
|
@ -124,7 +24,7 @@ XBSYSAPI EXPORTNUM(102) MMGLOBALDATA MmGlobalData;
|
|||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(165) PVOID NTAPI MmAllocateContiguousMemory
|
||||
(
|
||||
IN ulong_xt NumberOfBytes
|
||||
IN ULONG NumberOfBytes
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
|
@ -132,11 +32,11 @@ XBSYSAPI EXPORTNUM(165) PVOID NTAPI MmAllocateContiguousMemory
|
|||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(166) PVOID NTAPI MmAllocateContiguousMemoryEx
|
||||
(
|
||||
IN ulong_xt NumberOfBytes,
|
||||
IN physical_address_xt LowestAcceptableAddress,
|
||||
IN physical_address_xt HighestAcceptableAddress,
|
||||
IN ulong_xt Alignment OPTIONAL,
|
||||
IN ulong_xt ProtectionType
|
||||
IN ULONG NumberOfBytes,
|
||||
IN PHYSICAL_ADDRESS LowestAcceptableAddress,
|
||||
IN PHYSICAL_ADDRESS HighestAcceptableAddress,
|
||||
IN ULONG Alignment OPTIONAL,
|
||||
IN ULONG ProtectionType
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
|
@ -144,8 +44,8 @@ XBSYSAPI EXPORTNUM(166) PVOID NTAPI MmAllocateContiguousMemoryEx
|
|||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(167) PVOID NTAPI MmAllocateSystemMemory
|
||||
(
|
||||
ulong_xt NumberOfBytes,
|
||||
ulong_xt Protect
|
||||
ULONG NumberOfBytes,
|
||||
ULONG Protect
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
|
@ -153,8 +53,8 @@ XBSYSAPI EXPORTNUM(167) PVOID NTAPI MmAllocateSystemMemory
|
|||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(168) PVOID NTAPI MmClaimGpuInstanceMemory
|
||||
(
|
||||
IN size_xt NumberOfBytes,
|
||||
OUT size_xt *NumberOfPaddingBytes
|
||||
IN SIZE_T NumberOfBytes,
|
||||
OUT SIZE_T *NumberOfPaddingBytes
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
|
@ -162,14 +62,14 @@ XBSYSAPI EXPORTNUM(168) PVOID NTAPI MmClaimGpuInstanceMemory
|
|||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(169) PVOID NTAPI MmCreateKernelStack
|
||||
(
|
||||
IN ulong_xt NumberOfBytes,
|
||||
IN boolean_xt DebuggerThread
|
||||
IN ULONG NumberOfBytes,
|
||||
IN BOOLEAN DebuggerThread
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * MmDeleteKernelStack
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(170) void_xt NTAPI MmDeleteKernelStack
|
||||
XBSYSAPI EXPORTNUM(170) VOID NTAPI MmDeleteKernelStack
|
||||
(
|
||||
IN PVOID StackBase,
|
||||
IN PVOID StackLimit
|
||||
|
@ -178,7 +78,7 @@ XBSYSAPI EXPORTNUM(170) void_xt NTAPI MmDeleteKernelStack
|
|||
// ******************************************************************
|
||||
// * MmFreeContiguousMemory
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(171) void_xt NTAPI MmFreeContiguousMemory
|
||||
XBSYSAPI EXPORTNUM(171) VOID NTAPI MmFreeContiguousMemory
|
||||
(
|
||||
IN PVOID BaseAddress
|
||||
);
|
||||
|
@ -186,16 +86,16 @@ XBSYSAPI EXPORTNUM(171) void_xt NTAPI MmFreeContiguousMemory
|
|||
// ******************************************************************
|
||||
// * MmFreeSystemMemory
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(172) ulong_xt NTAPI MmFreeSystemMemory
|
||||
XBSYSAPI EXPORTNUM(172) ULONG NTAPI MmFreeSystemMemory
|
||||
(
|
||||
PVOID BaseAddress,
|
||||
ulong_xt NumberOfBytes
|
||||
ULONG NumberOfBytes
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * MmGetPhysicalAddress
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(173) physical_address_xt NTAPI MmGetPhysicalAddress
|
||||
XBSYSAPI EXPORTNUM(173) PHYSICAL_ADDRESS NTAPI MmGetPhysicalAddress
|
||||
(
|
||||
IN PVOID BaseAddress
|
||||
);
|
||||
|
@ -203,7 +103,7 @@ XBSYSAPI EXPORTNUM(173) physical_address_xt NTAPI MmGetPhysicalAddress
|
|||
// ******************************************************************
|
||||
// * MmIsAddressValid
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(174) boolean_xt NTAPI MmIsAddressValid
|
||||
XBSYSAPI EXPORTNUM(174) BOOLEAN NTAPI MmIsAddressValid
|
||||
(
|
||||
IN PVOID VirtualAddress
|
||||
);
|
||||
|
@ -211,20 +111,20 @@ XBSYSAPI EXPORTNUM(174) boolean_xt NTAPI MmIsAddressValid
|
|||
// ******************************************************************
|
||||
// * MmLockUnlockBufferPages
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(175) void_xt NTAPI MmLockUnlockBufferPages
|
||||
XBSYSAPI EXPORTNUM(175) VOID NTAPI MmLockUnlockBufferPages
|
||||
(
|
||||
IN PVOID BaseAddress,
|
||||
IN size_xt NumberOfBytes,
|
||||
IN boolean_xt UnlockPages
|
||||
IN SIZE_T NumberOfBytes,
|
||||
IN BOOLEAN UnlockPages
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * MmLockUnlockPhysicalPage
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(176) void_xt NTAPI MmLockUnlockPhysicalPage
|
||||
XBSYSAPI EXPORTNUM(176) VOID NTAPI MmLockUnlockPhysicalPage
|
||||
(
|
||||
IN ulong_ptr_xt PhysicalAddress,
|
||||
IN boolean_xt UnlockPage
|
||||
IN ULONG_PTR PhysicalAddress,
|
||||
IN BOOLEAN UnlockPage
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
|
@ -232,25 +132,25 @@ XBSYSAPI EXPORTNUM(176) void_xt NTAPI MmLockUnlockPhysicalPage
|
|||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(177) PVOID NTAPI MmMapIoSpace
|
||||
(
|
||||
IN physical_address_xt PhysicalAddress,
|
||||
IN ulong_xt NumberOfBytes,
|
||||
IN ulong_xt ProtectionType
|
||||
IN PHYSICAL_ADDRESS PhysicalAddress,
|
||||
IN ULONG NumberOfBytes,
|
||||
IN ULONG ProtectionType
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * MmPersistContiguousMemory
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(178) void_xt NTAPI MmPersistContiguousMemory
|
||||
XBSYSAPI EXPORTNUM(178) VOID NTAPI MmPersistContiguousMemory
|
||||
(
|
||||
IN PVOID BaseAddress,
|
||||
IN ulong_xt NumberOfBytes,
|
||||
IN boolean_xt Persist
|
||||
IN ULONG NumberOfBytes,
|
||||
IN BOOLEAN Persist
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * MmQueryAddressProtect
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(179) ulong_xt NTAPI MmQueryAddressProtect
|
||||
XBSYSAPI EXPORTNUM(179) ULONG NTAPI MmQueryAddressProtect
|
||||
(
|
||||
IN PVOID VirtualAddress
|
||||
);
|
||||
|
@ -258,7 +158,7 @@ XBSYSAPI EXPORTNUM(179) ulong_xt NTAPI MmQueryAddressProtect
|
|||
// ******************************************************************
|
||||
// * MmQueryAllocationSize
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(180) ulong_xt NTAPI MmQueryAllocationSize
|
||||
XBSYSAPI EXPORTNUM(180) ULONG NTAPI MmQueryAllocationSize
|
||||
(
|
||||
IN PVOID BaseAddress
|
||||
);
|
||||
|
@ -266,7 +166,7 @@ XBSYSAPI EXPORTNUM(180) ulong_xt NTAPI MmQueryAllocationSize
|
|||
// ******************************************************************
|
||||
// * MmQueryStatistics
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(181) ntstatus_xt NTAPI MmQueryStatistics
|
||||
XBSYSAPI EXPORTNUM(181) NTSTATUS NTAPI MmQueryStatistics
|
||||
(
|
||||
OUT PMM_STATISTICS MemoryStatistics
|
||||
);
|
||||
|
@ -274,20 +174,20 @@ XBSYSAPI EXPORTNUM(181) ntstatus_xt NTAPI MmQueryStatistics
|
|||
// ******************************************************************
|
||||
// * MmSetAddressProtect
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(182) void_xt NTAPI MmSetAddressProtect
|
||||
XBSYSAPI EXPORTNUM(182) VOID NTAPI MmSetAddressProtect
|
||||
(
|
||||
IN PVOID BaseAddress,
|
||||
IN ulong_xt NumberOfBytes,
|
||||
IN ulong_xt NewProtect
|
||||
IN ULONG NumberOfBytes,
|
||||
IN ULONG NewProtect
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * MmUnmapIoSpace
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(183) void_xt NTAPI MmUnmapIoSpace
|
||||
XBSYSAPI EXPORTNUM(183) VOID NTAPI MmUnmapIoSpace
|
||||
(
|
||||
IN PVOID BaseAddress,
|
||||
IN ulong_xt NumberOfBytes
|
||||
IN ULONG NumberOfBytes
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
|
@ -295,28 +195,28 @@ XBSYSAPI EXPORTNUM(183) void_xt NTAPI MmUnmapIoSpace
|
|||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(374) PVOID NTAPI MmDbgAllocateMemory
|
||||
(
|
||||
IN ulong_xt NumberOfBytes,
|
||||
IN ulong_xt Protect
|
||||
IN ULONG NumberOfBytes,
|
||||
IN ULONG Protect
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * MmDbgFreeMemory
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(375) ulong_xt NTAPI MmDbgFreeMemory
|
||||
XBSYSAPI EXPORTNUM(375) ULONG NTAPI MmDbgFreeMemory
|
||||
(
|
||||
IN PVOID BaseAddress,
|
||||
IN ulong_xt NumberOfBytes
|
||||
IN ULONG NumberOfBytes
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * MmDbgQueryAvailablePages
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(376) ulong_xt NTAPI MmDbgQueryAvailablePages(void);
|
||||
XBSYSAPI EXPORTNUM(376) ULONG NTAPI MmDbgQueryAvailablePages(void);
|
||||
|
||||
// ******************************************************************
|
||||
// * MmDbgReleaseAddress
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(377) void_xt NTAPI MmDbgReleaseAddress
|
||||
XBSYSAPI EXPORTNUM(377) VOID NTAPI MmDbgReleaseAddress
|
||||
(
|
||||
IN PVOID VirtualAddress,
|
||||
IN PULONG Opaque
|
||||
|
@ -331,8 +231,6 @@ XBSYSAPI EXPORTNUM(378) PVOID NTAPI MmDbgWriteCheck
|
|||
IN PULONG Opaque
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
@ -12,31 +12,24 @@
|
|||
#ifndef XBOXKRNL_NT_H
|
||||
#define XBOXKRNL_NT_H
|
||||
|
||||
#include "types.h"
|
||||
|
||||
namespace xbox
|
||||
{
|
||||
|
||||
#define NtCurrentThread() ((HANDLE)-2)
|
||||
|
||||
#define X_MAXIMUM_WAIT_OBJECTS 64
|
||||
|
||||
// ******************************************************************
|
||||
// * NtAllocateVirtualMemory
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(184) ntstatus_xt NTAPI NtAllocateVirtualMemory
|
||||
XBSYSAPI EXPORTNUM(184) NTSTATUS NTAPI NtAllocateVirtualMemory
|
||||
(
|
||||
IN OUT PVOID *BaseAddress,
|
||||
IN ulong_xt ZeroBits,
|
||||
IN ULONG ZeroBits,
|
||||
IN OUT PULONG AllocationSize,
|
||||
IN dword_xt AllocationType,
|
||||
IN dword_xt Protect
|
||||
IN DWORD AllocationType,
|
||||
IN DWORD Protect
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x00B9 - NtCancelTimer()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(185) ntstatus_xt NTAPI NtCancelTimer
|
||||
XBSYSAPI EXPORTNUM(185) NTSTATUS NTAPI NtCancelTimer
|
||||
(
|
||||
IN HANDLE TimerHandle,
|
||||
OUT PBOOLEAN CurrentState OPTIONAL
|
||||
|
@ -45,7 +38,7 @@ XBSYSAPI EXPORTNUM(185) ntstatus_xt NTAPI NtCancelTimer
|
|||
// ******************************************************************
|
||||
// * NtClearEvent
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(186) ntstatus_xt NTAPI NtClearEvent
|
||||
XBSYSAPI EXPORTNUM(186) NTSTATUS NTAPI NtClearEvent
|
||||
(
|
||||
IN HANDLE EventHandle
|
||||
);
|
||||
|
@ -57,12 +50,12 @@ XBSYSAPI EXPORTNUM(186) ntstatus_xt NTAPI NtClearEvent
|
|||
// * Closes an object handle
|
||||
// *
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(187) ntstatus_xt NTAPI NtClose
|
||||
XBSYSAPI EXPORTNUM(187) NTSTATUS NTAPI NtClose
|
||||
(
|
||||
IN HANDLE Handle
|
||||
);
|
||||
|
||||
XBSYSAPI EXPORTNUM(188) ntstatus_xt NTAPI NtCreateDirectoryObject
|
||||
XBSYSAPI EXPORTNUM(188) NTSTATUS NTAPI NtCreateDirectoryObject
|
||||
(
|
||||
OUT PHANDLE DirectoryHandle,
|
||||
IN POBJECT_ATTRIBUTES ObjectAttributes
|
||||
|
@ -71,12 +64,12 @@ XBSYSAPI EXPORTNUM(188) ntstatus_xt NTAPI NtCreateDirectoryObject
|
|||
// ******************************************************************
|
||||
// * NtCreateEvent
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(189) ntstatus_xt NTAPI NtCreateEvent
|
||||
XBSYSAPI EXPORTNUM(189) NTSTATUS NTAPI NtCreateEvent
|
||||
(
|
||||
OUT PHANDLE EventHandle,
|
||||
IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
|
||||
IN EVENT_TYPE EventType,
|
||||
IN boolean_xt InitialState
|
||||
IN BOOLEAN InitialState
|
||||
);
|
||||
|
||||
|
||||
|
@ -90,52 +83,52 @@ XBSYSAPI EXPORTNUM(189) ntstatus_xt NTAPI NtCreateEvent
|
|||
// * a handle for the file object.
|
||||
// *
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(190) ntstatus_xt NTAPI NtCreateFile
|
||||
XBSYSAPI EXPORTNUM(190) NTSTATUS NTAPI NtCreateFile
|
||||
(
|
||||
OUT PHANDLE FileHandle,
|
||||
IN access_mask_xt DesiredAccess,
|
||||
IN ACCESS_MASK DesiredAccess,
|
||||
IN POBJECT_ATTRIBUTES ObjectAttributes,
|
||||
OUT PIO_STATUS_BLOCK IoStatusBlock,
|
||||
IN PLARGE_INTEGER AllocationSize OPTIONAL,
|
||||
IN ulong_xt FileAttributes,
|
||||
IN ulong_xt ShareAccess,
|
||||
IN ulong_xt CreateDisposition,
|
||||
IN ulong_xt CreateOptions
|
||||
IN ULONG FileAttributes,
|
||||
IN ULONG ShareAccess,
|
||||
IN ULONG CreateDisposition,
|
||||
IN ULONG CreateOptions
|
||||
);
|
||||
|
||||
XBSYSAPI EXPORTNUM(191) ntstatus_xt NTAPI NtCreateIoCompletion
|
||||
XBSYSAPI EXPORTNUM(191) NTSTATUS NTAPI NtCreateIoCompletion
|
||||
(
|
||||
OUT PHANDLE IoCompletionHandle,
|
||||
IN access_mask_xt DesiredAccess,
|
||||
IN ACCESS_MASK DesiredAccess,
|
||||
IN POBJECT_ATTRIBUTES ObjectAttributes,
|
||||
IN ulong_xt Count
|
||||
IN ULONG Count
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * NtCreateMutant
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(192) ntstatus_xt NTAPI NtCreateMutant
|
||||
XBSYSAPI EXPORTNUM(192) NTSTATUS NTAPI NtCreateMutant
|
||||
(
|
||||
OUT PHANDLE MutantHandle,
|
||||
IN POBJECT_ATTRIBUTES ObjectAttributes,
|
||||
IN boolean_xt InitialOwner
|
||||
IN BOOLEAN InitialOwner
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * NtCreateSemaphore
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(193) ntstatus_xt NTAPI NtCreateSemaphore
|
||||
XBSYSAPI EXPORTNUM(193) NTSTATUS NTAPI NtCreateSemaphore
|
||||
(
|
||||
OUT PHANDLE SemaphoreHandle,
|
||||
IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
|
||||
IN ulong_xt InitialCount,
|
||||
IN ulong_xt MaximumCount
|
||||
IN ULONG InitialCount,
|
||||
IN ULONG MaximumCount
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x00C2 - NtCreateTimer()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(194) ntstatus_xt NTAPI NtCreateTimer
|
||||
XBSYSAPI EXPORTNUM(194) NTSTATUS NTAPI NtCreateTimer
|
||||
(
|
||||
OUT PHANDLE TimerHandle,
|
||||
IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
|
||||
|
@ -145,7 +138,7 @@ XBSYSAPI EXPORTNUM(194) ntstatus_xt NTAPI NtCreateTimer
|
|||
// ******************************************************************
|
||||
// * 0x00C3 - NtDeleteFile()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(195) ntstatus_xt NTAPI NtDeleteFile
|
||||
XBSYSAPI EXPORTNUM(195) NTSTATUS NTAPI NtDeleteFile
|
||||
(
|
||||
IN POBJECT_ATTRIBUTES ObjectAttributes
|
||||
);
|
||||
|
@ -153,34 +146,34 @@ XBSYSAPI EXPORTNUM(195) ntstatus_xt NTAPI NtDeleteFile
|
|||
// ******************************************************************
|
||||
// * 0x00C4 - NtDeviceIoControlFile
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(196) ntstatus_xt NTAPI NtDeviceIoControlFile
|
||||
XBSYSAPI EXPORTNUM(196) NTSTATUS NTAPI NtDeviceIoControlFile
|
||||
(
|
||||
IN HANDLE FileHandle,
|
||||
IN HANDLE Event OPTIONAL,
|
||||
IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
|
||||
IN PVOID ApcContext OPTIONAL,
|
||||
OUT PIO_STATUS_BLOCK IoStatusBlock,
|
||||
IN ulong_xt IoControlCode,
|
||||
IN ULONG IoControlCode,
|
||||
IN PVOID InputBuffer OPTIONAL,
|
||||
IN ulong_xt InputBufferLength,
|
||||
IN ULONG InputBufferLength,
|
||||
OUT PVOID OutputBuffer OPTIONAL,
|
||||
IN ulong_xt OutputBufferLength
|
||||
IN ULONG OutputBufferLength
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * NtDuplicateObject
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(197) ntstatus_xt NTAPI NtDuplicateObject
|
||||
XBSYSAPI EXPORTNUM(197) NTSTATUS NTAPI NtDuplicateObject
|
||||
(
|
||||
PVOID SourceHandle,
|
||||
PVOID *TargetHandle,
|
||||
dword_xt Options
|
||||
DWORD Options
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * NtFlushBuffersFile
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(198) ntstatus_xt NTAPI NtFlushBuffersFile
|
||||
XBSYSAPI EXPORTNUM(198) NTSTATUS NTAPI NtFlushBuffersFile
|
||||
(
|
||||
PVOID FileHandle,
|
||||
OUT PIO_STATUS_BLOCK IoStatusBlock
|
||||
|
@ -189,31 +182,31 @@ XBSYSAPI EXPORTNUM(198) ntstatus_xt NTAPI NtFlushBuffersFile
|
|||
// ******************************************************************
|
||||
// * NtFreeVirtualMemory
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(199) ntstatus_xt NTAPI NtFreeVirtualMemory
|
||||
XBSYSAPI EXPORTNUM(199) NTSTATUS NTAPI NtFreeVirtualMemory
|
||||
(
|
||||
IN OUT PVOID *BaseAddress,
|
||||
IN OUT PULONG FreeSize,
|
||||
IN ulong_xt FreeType
|
||||
IN ULONG FreeType
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x00C8 - NtFsControlFile
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(200) ntstatus_xt NTAPI NtFsControlFile
|
||||
XBSYSAPI EXPORTNUM(200) NTSTATUS NTAPI NtFsControlFile
|
||||
(
|
||||
IN HANDLE FileHandle,
|
||||
IN HANDLE Event OPTIONAL,
|
||||
IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
|
||||
IN PVOID ApcContext OPTIONAL,
|
||||
OUT PIO_STATUS_BLOCK IoStatusBlock,
|
||||
IN ulong_xt FsControlCode,
|
||||
IN ULONG FsControlCode,
|
||||
IN PVOID InputBuffer OPTIONAL,
|
||||
IN ulong_xt InputBufferLength,
|
||||
IN ULONG InputBufferLength,
|
||||
OUT PVOID OutputBuffer OPTIONAL,
|
||||
IN ulong_xt OutputBufferLength
|
||||
IN ULONG OutputBufferLength
|
||||
);
|
||||
|
||||
XBSYSAPI EXPORTNUM(201) ntstatus_xt NTAPI NtOpenDirectoryObject
|
||||
XBSYSAPI EXPORTNUM(201) NTSTATUS NTAPI NtOpenDirectoryObject
|
||||
(
|
||||
OUT PHANDLE DirectoryHandle,
|
||||
IN POBJECT_ATTRIBUTES ObjectAttributes
|
||||
|
@ -222,25 +215,25 @@ XBSYSAPI EXPORTNUM(201) ntstatus_xt NTAPI NtOpenDirectoryObject
|
|||
// ******************************************************************
|
||||
// * NtOpenFile
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(202) ntstatus_xt NTAPI NtOpenFile
|
||||
XBSYSAPI EXPORTNUM(202) NTSTATUS NTAPI NtOpenFile
|
||||
(
|
||||
OUT PHANDLE FileHandle,
|
||||
IN access_mask_xt DesiredAccess,
|
||||
IN ACCESS_MASK DesiredAccess,
|
||||
IN POBJECT_ATTRIBUTES ObjectAttributes,
|
||||
OUT PIO_STATUS_BLOCK IoStatusBlock,
|
||||
IN ulong_xt ShareAccess,
|
||||
IN ulong_xt OpenOptions
|
||||
IN ULONG ShareAccess,
|
||||
IN ULONG OpenOptions
|
||||
);
|
||||
|
||||
XBSYSAPI EXPORTNUM(203) ntstatus_xt NTAPI NtOpenSymbolicLinkObject(
|
||||
XBSYSAPI EXPORTNUM(203) NTSTATUS NTAPI NtOpenSymbolicLinkObject(
|
||||
OUT PHANDLE LinkHandle,
|
||||
IN POBJECT_ATTRIBUTES ObjectAttributes
|
||||
);
|
||||
|
||||
XBSYSAPI EXPORTNUM(205) ntstatus_xt NTAPI NtProtectVirtualMemory(
|
||||
XBSYSAPI EXPORTNUM(205) NTSTATUS NTAPI NtProtectVirtualMemory(
|
||||
IN OUT PVOID *BaseAddress,
|
||||
IN OUT PSIZE_T RegionSize,
|
||||
IN ulong_xt NewProtect,
|
||||
IN ULONG NewProtect,
|
||||
OUT PULONG OldProtect
|
||||
);
|
||||
|
||||
|
@ -248,7 +241,7 @@ XBSYSAPI EXPORTNUM(205) ntstatus_xt NTAPI NtProtectVirtualMemory(
|
|||
// ******************************************************************
|
||||
// * NtPulseEvent
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(205) ntstatus_xt NTAPI NtPulseEvent
|
||||
XBSYSAPI EXPORTNUM(205) NTSTATUS NTAPI NtPulseEvent
|
||||
(
|
||||
IN HANDLE EventHandle,
|
||||
OUT PLONG PreviousState OPTIONAL
|
||||
|
@ -257,19 +250,19 @@ XBSYSAPI EXPORTNUM(205) ntstatus_xt NTAPI NtPulseEvent
|
|||
// ******************************************************************
|
||||
// * NtQueueApcThread
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(206) ntstatus_xt NTAPI NtQueueApcThread
|
||||
XBSYSAPI EXPORTNUM(206) NTSTATUS NTAPI NtQueueApcThread
|
||||
(
|
||||
IN HANDLE ThreadHandle,
|
||||
IN PIO_APC_ROUTINE ApcRoutine,
|
||||
IN PVOID ApcRoutineContext OPTIONAL,
|
||||
IN PIO_STATUS_BLOCK ApcStatusBlock OPTIONAL,
|
||||
IN PVOID ApcReserved OPTIONAL
|
||||
IN ULONG ApcReserved OPTIONAL
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * NtQueryDirectoryFile
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(207) ntstatus_xt NTAPI NtQueryDirectoryFile
|
||||
XBSYSAPI EXPORTNUM(207) NTSTATUS NTAPI NtQueryDirectoryFile
|
||||
(
|
||||
IN HANDLE FileHandle,
|
||||
IN HANDLE Event OPTIONAL,
|
||||
|
@ -277,20 +270,20 @@ XBSYSAPI EXPORTNUM(207) ntstatus_xt NTAPI NtQueryDirectoryFile
|
|||
IN PVOID ApcContext,
|
||||
OUT PIO_STATUS_BLOCK IoStatusBlock,
|
||||
OUT FILE_DIRECTORY_INFORMATION *FileInformation,
|
||||
IN ulong_xt Length,
|
||||
IN ULONG Length,
|
||||
IN FILE_INFORMATION_CLASS FileInformationClass,
|
||||
IN PSTRING FileMask,
|
||||
IN boolean_xt RestartScan
|
||||
IN BOOLEAN RestartScan
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x00D0 - NtQueryDirectoryObject
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(208) ntstatus_xt NTAPI NtQueryDirectoryObject(
|
||||
XBSYSAPI EXPORTNUM(208) NTSTATUS NTAPI NtQueryDirectoryObject(
|
||||
IN HANDLE DirectoryHandle,
|
||||
OUT PVOID Buffer,
|
||||
IN ulong_xt Length,
|
||||
IN boolean_xt RestartScan,
|
||||
IN ULONG Length,
|
||||
IN BOOLEAN RestartScan,
|
||||
IN OUT PULONG Context,
|
||||
OUT PULONG ReturnedLength OPTIONAL
|
||||
);
|
||||
|
@ -298,7 +291,7 @@ XBSYSAPI EXPORTNUM(208) ntstatus_xt NTAPI NtQueryDirectoryObject(
|
|||
// ******************************************************************
|
||||
// * 0x00D1 - NtQueryEvent()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(209) ntstatus_xt NTAPI NtQueryEvent
|
||||
XBSYSAPI EXPORTNUM(209) NTSTATUS NTAPI NtQueryEvent
|
||||
(
|
||||
IN HANDLE EventHandle,
|
||||
OUT PEVENT_BASIC_INFORMATION EventInformation
|
||||
|
@ -307,7 +300,7 @@ XBSYSAPI EXPORTNUM(209) ntstatus_xt NTAPI NtQueryEvent
|
|||
// ******************************************************************
|
||||
// * NtQueryFullAttributesFile
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(210) ntstatus_xt NTAPI NtQueryFullAttributesFile
|
||||
XBSYSAPI EXPORTNUM(210) NTSTATUS NTAPI NtQueryFullAttributesFile
|
||||
(
|
||||
IN POBJECT_ATTRIBUTES ObjectAttributes,
|
||||
OUT PFILE_NETWORK_OPEN_INFORMATION Attributes
|
||||
|
@ -320,19 +313,19 @@ XBSYSAPI EXPORTNUM(210) ntstatus_xt NTAPI NtQueryFullAttributesFile
|
|||
// * Return various kinds of information about a given file object.
|
||||
// *
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(211) ntstatus_xt NTAPI NtQueryInformationFile
|
||||
XBSYSAPI EXPORTNUM(211) NTSTATUS NTAPI NtQueryInformationFile
|
||||
(
|
||||
IN HANDLE FileHandle,
|
||||
OUT PIO_STATUS_BLOCK IoStatusBlock,
|
||||
OUT PVOID FileInformation,
|
||||
IN ulong_xt Length,
|
||||
IN ULONG Length,
|
||||
IN FILE_INFORMATION_CLASS FileInfo
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x00D4 - NtQueryIoCompletion
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(212) ntstatus_xt NTAPI NtQueryIoCompletion
|
||||
XBSYSAPI EXPORTNUM(212) NTSTATUS NTAPI NtQueryIoCompletion
|
||||
(
|
||||
IN HANDLE IoCompletionHandle,
|
||||
OUT PIO_COMPLETION_BASIC_INFORMATION IoCompletionInformation
|
||||
|
@ -341,7 +334,7 @@ XBSYSAPI EXPORTNUM(212) ntstatus_xt NTAPI NtQueryIoCompletion
|
|||
// ******************************************************************
|
||||
// * 0x00D5 - NtQueryMutant()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(213) ntstatus_xt NTAPI NtQueryMutant
|
||||
XBSYSAPI EXPORTNUM(213) NTSTATUS NTAPI NtQueryMutant
|
||||
(
|
||||
IN HANDLE MutantHandle,
|
||||
OUT PMUTANT_BASIC_INFORMATION MutantInformation
|
||||
|
@ -350,7 +343,7 @@ XBSYSAPI EXPORTNUM(213) ntstatus_xt NTAPI NtQueryMutant
|
|||
// ******************************************************************
|
||||
// * 0x00D6 - NtQuerySemaphore()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(214) ntstatus_xt NTAPI NtQuerySemaphore
|
||||
XBSYSAPI EXPORTNUM(214) NTSTATUS NTAPI NtQuerySemaphore
|
||||
(
|
||||
IN HANDLE SemaphoreHandle,
|
||||
OUT PSEMAPHORE_BASIC_INFORMATION SemaphoreInformation
|
||||
|
@ -359,7 +352,7 @@ XBSYSAPI EXPORTNUM(214) ntstatus_xt NTAPI NtQuerySemaphore
|
|||
// ******************************************************************
|
||||
// * 0x00D7 - NtQuerySymbolicLinkObject()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(215) ntstatus_xt NTAPI NtQuerySymbolicLinkObject
|
||||
XBSYSAPI EXPORTNUM(215) NTSTATUS NTAPI NtQuerySymbolicLinkObject
|
||||
(
|
||||
HANDLE LinkHandle,
|
||||
OUT PSTRING LinkTarget,
|
||||
|
@ -369,7 +362,7 @@ XBSYSAPI EXPORTNUM(215) ntstatus_xt NTAPI NtQuerySymbolicLinkObject
|
|||
// ******************************************************************
|
||||
// * 0x00D8 - NtQueryTimer()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(216) ntstatus_xt NTAPI NtQueryTimer
|
||||
XBSYSAPI EXPORTNUM(216) NTSTATUS NTAPI NtQueryTimer
|
||||
(
|
||||
IN HANDLE TimerHandle,
|
||||
OUT PTIMER_BASIC_INFORMATION TimerInformation
|
||||
|
@ -378,7 +371,7 @@ XBSYSAPI EXPORTNUM(216) ntstatus_xt NTAPI NtQueryTimer
|
|||
// ******************************************************************
|
||||
// * NtQueryVirtualMemory
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(217) ntstatus_xt NTAPI NtQueryVirtualMemory
|
||||
XBSYSAPI EXPORTNUM(217) NTSTATUS NTAPI NtQueryVirtualMemory
|
||||
(
|
||||
IN PVOID BaseAddress,
|
||||
OUT PMEMORY_BASIC_INFORMATION Buffer
|
||||
|
@ -387,12 +380,12 @@ XBSYSAPI EXPORTNUM(217) ntstatus_xt NTAPI NtQueryVirtualMemory
|
|||
// ******************************************************************
|
||||
// * NtQueryVolumeInformationFile
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(218) ntstatus_xt NTAPI NtQueryVolumeInformationFile
|
||||
XBSYSAPI EXPORTNUM(218) NTSTATUS NTAPI NtQueryVolumeInformationFile
|
||||
(
|
||||
IN HANDLE FileHandle,
|
||||
OUT PIO_STATUS_BLOCK IoStatusBlock,
|
||||
OUT PFILE_FS_SIZE_INFORMATION FileInformation,
|
||||
IN ulong_xt Length,
|
||||
IN ULONG Length,
|
||||
IN FS_INFORMATION_CLASS FileInformationClass
|
||||
);
|
||||
|
||||
|
@ -403,7 +396,7 @@ XBSYSAPI EXPORTNUM(218) ntstatus_xt NTAPI NtQueryVolumeInformationFile
|
|||
// * Read data from an opened file.
|
||||
// *
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(219) ntstatus_xt NTAPI NtReadFile
|
||||
XBSYSAPI EXPORTNUM(219) NTSTATUS NTAPI NtReadFile
|
||||
(
|
||||
IN HANDLE FileHandle, // TODO: correct paramters
|
||||
IN HANDLE Event OPTIONAL,
|
||||
|
@ -411,14 +404,14 @@ XBSYSAPI EXPORTNUM(219) ntstatus_xt NTAPI NtReadFile
|
|||
IN PVOID ApcContext,
|
||||
OUT PIO_STATUS_BLOCK IoStatusBlock,
|
||||
OUT PVOID Buffer,
|
||||
IN ulong_xt Length,
|
||||
IN ULONG Length,
|
||||
IN PLARGE_INTEGER ByteOffset OPTIONAL
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x00DC - NtReadFileScatter
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(220) ntstatus_xt NTAPI NtReadFileScatter
|
||||
XBSYSAPI EXPORTNUM(220) NTSTATUS NTAPI NtReadFileScatter
|
||||
(
|
||||
IN HANDLE FileHandle,
|
||||
IN HANDLE Event OPTIONAL,
|
||||
|
@ -426,14 +419,14 @@ XBSYSAPI EXPORTNUM(220) ntstatus_xt NTAPI NtReadFileScatter
|
|||
IN PVOID ApcContext OPTIONAL,
|
||||
OUT PIO_STATUS_BLOCK IoStatusBlock,
|
||||
IN PFILE_SEGMENT_ELEMENT SegmentArray,
|
||||
IN ulong_xt Length,
|
||||
IN ULONG Length,
|
||||
IN PLARGE_INTEGER ByteOffset OPTIONAL
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * NtReleaseMutant
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(221) ntstatus_xt NTAPI NtReleaseMutant
|
||||
XBSYSAPI EXPORTNUM(221) NTSTATUS NTAPI NtReleaseMutant
|
||||
(
|
||||
IN HANDLE MutantHandle,
|
||||
OUT PLONG PreviousCount
|
||||
|
@ -442,17 +435,17 @@ XBSYSAPI EXPORTNUM(221) ntstatus_xt NTAPI NtReleaseMutant
|
|||
// ******************************************************************
|
||||
// * NtReleaseSemaphore
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(222) ntstatus_xt NTAPI NtReleaseSemaphore
|
||||
XBSYSAPI EXPORTNUM(222) NTSTATUS NTAPI NtReleaseSemaphore
|
||||
(
|
||||
IN HANDLE SemaphoreHandle,
|
||||
IN ulong_xt ReleaseCount,
|
||||
IN ULONG ReleaseCount,
|
||||
OUT PULONG PreviousCount OPTIONAL
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x00DF - NtRemoveIoCompletion
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(223) ntstatus_xt NTAPI NtRemoveIoCompletion
|
||||
XBSYSAPI EXPORTNUM(223) NTSTATUS NTAPI NtRemoveIoCompletion
|
||||
(
|
||||
IN HANDLE IoCompletionHandle,
|
||||
OUT PVOID *KeyContext,
|
||||
|
@ -464,7 +457,7 @@ XBSYSAPI EXPORTNUM(223) ntstatus_xt NTAPI NtRemoveIoCompletion
|
|||
// ******************************************************************
|
||||
// * NtResumeThread
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(224) ntstatus_xt NTAPI NtResumeThread
|
||||
XBSYSAPI EXPORTNUM(224) NTSTATUS NTAPI NtResumeThread
|
||||
(
|
||||
IN HANDLE ThreadHandle,
|
||||
OUT PULONG PreviousSuspendCount
|
||||
|
@ -473,7 +466,7 @@ XBSYSAPI EXPORTNUM(224) ntstatus_xt NTAPI NtResumeThread
|
|||
// ******************************************************************
|
||||
// * NtSetEvent
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(225) ntstatus_xt NTAPI NtSetEvent
|
||||
XBSYSAPI EXPORTNUM(225) NTSTATUS NTAPI NtSetEvent
|
||||
(
|
||||
IN HANDLE EventHandle,
|
||||
OUT PLONG PreviousState
|
||||
|
@ -486,31 +479,31 @@ XBSYSAPI EXPORTNUM(225) ntstatus_xt NTAPI NtSetEvent
|
|||
// * Changes various kinds of information about a given file object.
|
||||
// *
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(226) ntstatus_xt NTAPI NtSetInformationFile
|
||||
XBSYSAPI EXPORTNUM(226) NTSTATUS NTAPI NtSetInformationFile
|
||||
(
|
||||
IN HANDLE FileHandle, // TODO: correct paramters
|
||||
OUT PIO_STATUS_BLOCK IoStatusBlock,
|
||||
IN PVOID FileInformation,
|
||||
IN ulong_xt Length,
|
||||
IN ULONG Length,
|
||||
IN FILE_INFORMATION_CLASS FileInformationClass
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x00E3 - NtSetIoCompletion
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(227) ntstatus_xt NTAPI NtSetIoCompletion
|
||||
XBSYSAPI EXPORTNUM(227) NTSTATUS NTAPI NtSetIoCompletion
|
||||
(
|
||||
IN HANDLE IoCompletionHandle,
|
||||
IN PVOID KeyContext,
|
||||
IN PVOID ApcContext,
|
||||
IN ntstatus_xt IoStatus,
|
||||
IN ulong_ptr_xt IoStatusInformation
|
||||
IN NTSTATUS IoStatus,
|
||||
IN ULONG_PTR IoStatusInformation
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * NtSetSystemTime
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(228) ntstatus_xt NTAPI NtSetSystemTime
|
||||
XBSYSAPI EXPORTNUM(228) NTSTATUS NTAPI NtSetSystemTime
|
||||
(
|
||||
IN PLARGE_INTEGER SystemTime,
|
||||
OUT PLARGE_INTEGER PreviousTime OPTIONAL
|
||||
|
@ -519,34 +512,34 @@ XBSYSAPI EXPORTNUM(228) ntstatus_xt NTAPI NtSetSystemTime
|
|||
// ******************************************************************
|
||||
// * 0x00E5 - NtSetTimerEx()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(229) ntstatus_xt NTAPI NtSetTimerEx
|
||||
XBSYSAPI EXPORTNUM(229) NTSTATUS NTAPI NtSetTimerEx
|
||||
(
|
||||
IN HANDLE TimerHandle,
|
||||
IN PLARGE_INTEGER DueTime,
|
||||
IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL,
|
||||
IN KPROCESSOR_MODE ApcMode,
|
||||
IN PVOID TimerContext OPTIONAL,
|
||||
IN boolean_xt WakeTimer,
|
||||
IN long_xt Period OPTIONAL,
|
||||
IN BOOLEAN WakeTimer,
|
||||
IN LONG Period OPTIONAL,
|
||||
OUT PBOOLEAN PreviousState OPTIONAL
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x00E6 - NtSignalAndWaitForSingleObjectEx
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(230) ntstatus_xt NTAPI NtSignalAndWaitForSingleObjectEx
|
||||
XBSYSAPI EXPORTNUM(230) NTSTATUS NTAPI NtSignalAndWaitForSingleObjectEx
|
||||
(
|
||||
IN HANDLE SignalHandle,
|
||||
IN HANDLE WaitHandle,
|
||||
IN KPROCESSOR_MODE WaitMode,
|
||||
IN boolean_xt Alertable,
|
||||
IN BOOLEAN Alertable,
|
||||
IN PLARGE_INTEGER Timeout OPTIONAL
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * NtSuspendThread
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(231) ntstatus_xt NTAPI NtSuspendThread
|
||||
XBSYSAPI EXPORTNUM(231) NTSTATUS NTAPI NtSuspendThread
|
||||
(
|
||||
IN HANDLE ThreadHandle,
|
||||
OUT PULONG PreviousSuspendCount OPTIONAL
|
||||
|
@ -555,11 +548,11 @@ XBSYSAPI EXPORTNUM(231) ntstatus_xt NTAPI NtSuspendThread
|
|||
// ******************************************************************
|
||||
// * NtUserIoApcDispatcher
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(232) void_xt NTAPI NtUserIoApcDispatcher
|
||||
XBSYSAPI EXPORTNUM(232) VOID NTAPI NtUserIoApcDispatcher
|
||||
(
|
||||
PVOID ApcContext,
|
||||
PIO_STATUS_BLOCK IoStatusBlock,
|
||||
ulong_xt Reserved
|
||||
ULONG Reserved
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
|
@ -571,34 +564,34 @@ XBSYSAPI EXPORTNUM(232) void_xt NTAPI NtUserIoApcDispatcher
|
|||
// * until the wait times out.
|
||||
// *
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(233) ntstatus_xt NTAPI NtWaitForSingleObject
|
||||
XBSYSAPI EXPORTNUM(233) NTSTATUS NTAPI NtWaitForSingleObject
|
||||
(
|
||||
IN HANDLE Handle,
|
||||
IN boolean_xt Alertable,
|
||||
IN BOOLEAN Alertable,
|
||||
IN PLARGE_INTEGER Timeout
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * NtWaitForSingleObjectEx
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(234) ntstatus_xt NTAPI NtWaitForSingleObjectEx
|
||||
XBSYSAPI EXPORTNUM(234) NTSTATUS NTAPI NtWaitForSingleObjectEx
|
||||
(
|
||||
IN HANDLE Handle,
|
||||
IN char_xt WaitMode,
|
||||
IN boolean_xt Alertable,
|
||||
IN CHAR WaitMode,
|
||||
IN BOOLEAN Alertable,
|
||||
IN PLARGE_INTEGER Timeout
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * NtWaitForMultipleObjectsEx
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(235) ntstatus_xt NTAPI NtWaitForMultipleObjectsEx
|
||||
XBSYSAPI EXPORTNUM(235) NTSTATUS NTAPI NtWaitForMultipleObjectsEx
|
||||
(
|
||||
IN ulong_xt Count,
|
||||
IN ULONG Count,
|
||||
IN HANDLE *Handles,
|
||||
IN WAIT_TYPE WaitType,
|
||||
IN char_xt WaitMode,
|
||||
IN boolean_xt Alertable,
|
||||
IN CHAR WaitMode,
|
||||
IN BOOLEAN Alertable,
|
||||
IN PLARGE_INTEGER Timeout
|
||||
);
|
||||
|
||||
|
@ -609,7 +602,7 @@ XBSYSAPI EXPORTNUM(235) ntstatus_xt NTAPI NtWaitForMultipleObjectsEx
|
|||
// * Write data to an opened file.
|
||||
// *
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(236) ntstatus_xt NTAPI NtWriteFile
|
||||
XBSYSAPI EXPORTNUM(236) NTSTATUS NTAPI NtWriteFile
|
||||
(
|
||||
IN HANDLE FileHandle,
|
||||
IN HANDLE Event,
|
||||
|
@ -617,14 +610,14 @@ XBSYSAPI EXPORTNUM(236) ntstatus_xt NTAPI NtWriteFile
|
|||
IN PVOID ApcContext OPTIONAL,
|
||||
OUT PIO_STATUS_BLOCK IoStatusBlock,
|
||||
IN PVOID Buffer,
|
||||
IN ulong_xt Length,
|
||||
IN ULONG Length,
|
||||
IN PLARGE_INTEGER ByteOffset OPTIONAL
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x00ED - NtWriteFileGather
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(237) ntstatus_xt NTAPI NtWriteFileGather
|
||||
XBSYSAPI EXPORTNUM(237) NTSTATUS NTAPI NtWriteFileGather
|
||||
(
|
||||
IN HANDLE FileHandle,
|
||||
IN HANDLE Event OPTIONAL,
|
||||
|
@ -632,16 +625,14 @@ XBSYSAPI EXPORTNUM(237) ntstatus_xt NTAPI NtWriteFileGather
|
|||
IN PVOID ApcContext OPTIONAL,
|
||||
OUT PIO_STATUS_BLOCK IoStatusBlock,
|
||||
IN PFILE_SEGMENT_ELEMENT SegmentArray,
|
||||
IN ulong_xt Length,
|
||||
IN ULONG Length,
|
||||
IN PLARGE_INTEGER ByteOffset OPTIONAL
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * NtYieldExecution
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(238) void_xt NTAPI NtYieldExecution(void);
|
||||
|
||||
}
|
||||
XBSYSAPI EXPORTNUM(238) VOID NTAPI NtYieldExecution(void);
|
||||
|
||||
#endif
|
||||
|
|
@ -1,239 +1,220 @@
|
|||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : ob.h
|
||||
// *
|
||||
// * note : XBox Kernel *Object Manager* Declarations
|
||||
// *
|
||||
// ******************************************************************
|
||||
#ifndef XBOXKRNL_OB_H
|
||||
#define XBOXKRNL_OB_H
|
||||
|
||||
#include "types.h"
|
||||
|
||||
namespace xbox
|
||||
{
|
||||
|
||||
#define OBJ_NAME_PATH_SEPARATOR ((char_xt)L'\\')
|
||||
|
||||
#define OB_NUMBER_HASH_BUCKETS 11
|
||||
typedef struct _OBJECT_DIRECTORY {
|
||||
struct _OBJECT_HEADER_NAME_INFO *HashBuckets[OB_NUMBER_HASH_BUCKETS];
|
||||
} OBJECT_DIRECTORY, *POBJECT_DIRECTORY;
|
||||
|
||||
typedef struct _OBJECT_SYMBOLIC_LINK {
|
||||
PVOID LinkTargetObject;
|
||||
OBJECT_STRING LinkTarget;
|
||||
} OBJECT_SYMBOLIC_LINK, *POBJECT_SYMBOLIC_LINK;
|
||||
|
||||
typedef struct _OBJECT_HEADER_NAME_INFO {
|
||||
struct _OBJECT_HEADER_NAME_INFO *ChainLink;
|
||||
struct _OBJECT_DIRECTORY *Directory;
|
||||
OBJECT_STRING Name;
|
||||
} OBJECT_HEADER_NAME_INFO, *POBJECT_HEADER_NAME_INFO;
|
||||
|
||||
#define ObDosDevicesDirectory() ((HANDLE)-3)
|
||||
#define ObWin32NamedObjectsDirectory() ((HANDLE)-4)
|
||||
|
||||
#define ObpIsFlagSet(flagset, flag) (((flagset) & (flag)) != 0)
|
||||
#define ObpIsFlagClear(flagset, flag) (((flagset) & (flag)) == 0)
|
||||
#define ObpEncodeFreeHandleLink(Link) (((ulong_ptr_xt)(Link)) | 1)
|
||||
#define ObpDecodeFreeHandleLink(Link) (((ulong_ptr_xt)(Link)) & (~1))
|
||||
#define ObpIsFreeHandleLink(Link) (((ulong_ptr_xt)(Link)) & 1)
|
||||
#define ObpGetTableByteOffsetFromHandle(Handle) (HandleToUlong(Handle) & (OB_HANDLES_PER_TABLE * sizeof(PVOID) - 1))
|
||||
#define ObpGetTableFromHandle(Handle) ObpObjectHandleTable.RootTable[HandleToUlong(Handle) >> (OB_HANDLES_PER_TABLE_SHIFT + 2)]
|
||||
#define ObpGetHandleContentsPointer(Handle) ((PVOID*)((PUCHAR)ObpGetTableFromHandle(Handle) + ObpGetTableByteOffsetFromHandle(Handle)))
|
||||
#define ObpMaskOffApplicationBits(Handle) ((HANDLE)(((ulong_ptr_xt)(Handle)) & ~(sizeof(ulong_xt) - 1)))
|
||||
|
||||
#define OB_FLAG_NAMED_OBJECT 0x01
|
||||
#define OB_FLAG_PERMANENT_OBJECT 0x02
|
||||
#define OB_FLAG_ATTACHED_OBJECT 0x04
|
||||
|
||||
#define OBJ_INHERIT 0x00000002L
|
||||
#define OBJ_PERMANENT 0x00000010L
|
||||
#define OBJ_EXCLUSIVE 0x00000020L
|
||||
#define OBJ_CASE_INSENSITIVE 0x00000040L
|
||||
#define OBJ_OPENIF 0x00000080L
|
||||
#define OBJ_OPENLINK 0x00000100L
|
||||
#define OBJ_KERNEL_HANDLE 0x00000200L
|
||||
#define OBJ_VALID_ATTRIBUTES 0x000003F2L
|
||||
|
||||
#define OBJECT_TO_OBJECT_HEADER(Object) CONTAINING_RECORD(Object, OBJECT_HEADER, Body)
|
||||
#define OBJECT_TO_OBJECT_HEADER_NAME_INFO(Object) ((POBJECT_HEADER_NAME_INFO)OBJECT_TO_OBJECT_HEADER(Object) - 1)
|
||||
#define OBJECT_HEADER_NAME_INFO_TO_OBJECT_HEADER(ObjectHeaderNameInfo) ((POBJECT_HEADER)((POBJECT_HEADER_NAME_INFO)(ObjectHeaderNameInfo)+1))
|
||||
#define OBJECT_HEADER_TO_OBJECT_HEADER_NAME_INFO(ObjectHeader) ((POBJECT_HEADER_NAME_INFO)(ObjectHeader)-1)
|
||||
#define OBJECT_HEADER_NAME_INFO_TO_OBJECT(ObjectHeaderNameInfo) (&OBJECT_HEADER_NAME_INFO_TO_OBJECT_HEADER(ObjectHeaderNameInfo)->Body)
|
||||
|
||||
HANDLE ObpCreateObjectHandle(PVOID Object);
|
||||
boolean_xt ObpCreatePermanentDirectoryObject(
|
||||
IN POBJECT_STRING DirectoryName OPTIONAL,
|
||||
OUT POBJECT_DIRECTORY *DirectoryObject
|
||||
);
|
||||
|
||||
ntstatus_xt ObpReferenceObjectByName(
|
||||
IN HANDLE RootDirectoryHandle,
|
||||
IN POBJECT_STRING ObjectName,
|
||||
IN ulong_xt Attributes,
|
||||
IN POBJECT_TYPE ObjectType,
|
||||
IN OUT PVOID ParseContext OPTIONAL,
|
||||
OUT PVOID *ReturnedObject
|
||||
);
|
||||
|
||||
// Avoid a conflict with the InitializeObjectAttributes macro imported by the windows headers
|
||||
#define X_InitializeObjectAttributes(p, n, a, r){\
|
||||
(p)->RootDirectory = r; \
|
||||
(p)->Attributes = a; \
|
||||
(p)->ObjectName = n; \
|
||||
}
|
||||
|
||||
boolean_xt ObInitSystem();
|
||||
boolean_xt ObpExtendObjectHandleTable();
|
||||
void_xt ObDissectName(OBJECT_STRING Path, POBJECT_STRING FirstName, POBJECT_STRING RemainingName);
|
||||
PVOID ObpGetObjectHandleContents(HANDLE Handle);
|
||||
PVOID ObpGetObjectHandleReference(HANDLE Handle);
|
||||
ulong_xt FASTCALL ObpComputeHashIndex(POBJECT_STRING ElementName);
|
||||
PVOID ObpDestroyObjectHandle(HANDLE Handle);
|
||||
void_xt ObpDetachNamedObject(PVOID Object, KIRQL OldIrql);
|
||||
ntstatus_xt ObpClose(HANDLE Handle);
|
||||
|
||||
boolean_xt ObpLookupElementNameInDirectory(
|
||||
IN POBJECT_DIRECTORY Directory,
|
||||
IN POBJECT_STRING ElementName,
|
||||
IN boolean_xt ResolveSymbolicLink,
|
||||
OUT PVOID *ReturnedObject
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x00EF - ObCreateObject()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(239) ntstatus_xt NTAPI ObCreateObject
|
||||
(
|
||||
IN POBJECT_TYPE ObjectType,
|
||||
IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
|
||||
IN ulong_xt ObjectBodySize,
|
||||
OUT PVOID *Object
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x00F0 - ObDirectoryObjectType
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(240) OBJECT_TYPE ObDirectoryObjectType;
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x00F1 - ObInsertObject()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(241) ntstatus_xt NTAPI ObInsertObject
|
||||
(
|
||||
IN PVOID Object,
|
||||
IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
|
||||
IN ulong_xt ObjectPointerBias,
|
||||
OUT PHANDLE Handle
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x00F2 - ObMakeTemporaryObject()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(242) void_xt NTAPI ObMakeTemporaryObject
|
||||
(
|
||||
IN PVOID Object
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x00F3 - ObOpenObjectByName()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(243) ntstatus_xt NTAPI ObOpenObjectByName
|
||||
(
|
||||
IN POBJECT_ATTRIBUTES ObjectAttributes,
|
||||
IN POBJECT_TYPE ObjectType,
|
||||
IN OUT PVOID ParseContext OPTIONAL,
|
||||
OUT PHANDLE Handle
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x00F4 - ObOpenObjectByPointer()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(244) ntstatus_xt NTAPI ObOpenObjectByPointer
|
||||
(
|
||||
IN PVOID Object,
|
||||
IN POBJECT_TYPE ObjectType,
|
||||
OUT PHANDLE Handle
|
||||
);
|
||||
|
||||
#define OB_HANDLES_PER_TABLE_SHIFT 6
|
||||
#define OB_HANDLES_PER_TABLE (1 << OB_HANDLES_PER_TABLE_SHIFT)
|
||||
#define OB_TABLES_PER_SEGMENT 8
|
||||
#define OB_HANDLES_PER_SEGMENT (OB_TABLES_PER_SEGMENT * OB_HANDLES_PER_TABLE)
|
||||
|
||||
typedef struct _OBJECT_HANDLE_TABLE {
|
||||
long_xt HandleCount;
|
||||
long_ptr_xt FirstFreeTableEntry;
|
||||
HANDLE NextHandleNeedingPool;
|
||||
PVOID **RootTable;
|
||||
PVOID *BuiltinRootTable[OB_TABLES_PER_SEGMENT];
|
||||
} OBJECT_HANDLE_TABLE, *POBJECT_HANDLE_TABLE;
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x00F5 - ObpObjectHandleTable
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(245) OBJECT_HANDLE_TABLE ObpObjectHandleTable;
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x00F6 - ObReferenceObjectByHandle()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(246) ntstatus_xt NTAPI ObReferenceObjectByHandle
|
||||
(
|
||||
IN HANDLE Handle,
|
||||
IN POBJECT_TYPE ObjectType OPTIONAL,
|
||||
OUT PVOID *ReturnedObject
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x00F7 - ObReferenceObjectByName()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(247) ntstatus_xt NTAPI ObReferenceObjectByName
|
||||
(
|
||||
IN POBJECT_STRING ObjectName,
|
||||
IN ulong_xt Attributes,
|
||||
IN POBJECT_TYPE ObjectType,
|
||||
IN OUT PVOID ParseContext OPTIONAL,
|
||||
OUT PVOID *Object
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x00F8 - ObReferenceObjectByPointer()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(248) ntstatus_xt NTAPI ObReferenceObjectByPointer
|
||||
(
|
||||
IN PVOID Object,
|
||||
IN POBJECT_TYPE ObjectType
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x00F9 - ObSymbolicLinkObjectType
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(249) OBJECT_TYPE ObSymbolicLinkObjectType;
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x00FA - ObfDereferenceObject()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(250) void_xt FASTCALL ObfDereferenceObject
|
||||
(
|
||||
IN PVOID Object
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x00FB - ObfReferenceObject()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(251) void_xt FASTCALL ObfReferenceObject
|
||||
(
|
||||
IN PVOID Object
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * proj : OpenXDK
|
||||
// *
|
||||
// * desc : Open Source XBox Development Kit
|
||||
// *
|
||||
// * file : ob.h
|
||||
// *
|
||||
// * note : XBox Kernel *Object Manager* Declarations
|
||||
// *
|
||||
// ******************************************************************
|
||||
#ifndef XBOXKRNL_OB_H
|
||||
#define XBOXKRNL_OB_H
|
||||
|
||||
#define OBJ_NAME_PATH_SEPARATOR ((CHAR)L'\\')
|
||||
|
||||
#define OB_NUMBER_HASH_BUCKETS 11
|
||||
typedef struct _OBJECT_DIRECTORY {
|
||||
struct _OBJECT_HEADER_NAME_INFO *HashBuckets[OB_NUMBER_HASH_BUCKETS];
|
||||
} OBJECT_DIRECTORY, *POBJECT_DIRECTORY;
|
||||
|
||||
typedef struct _OBJECT_SYMBOLIC_LINK {
|
||||
PVOID LinkTargetObject;
|
||||
OBJECT_STRING LinkTarget;
|
||||
} OBJECT_SYMBOLIC_LINK, *POBJECT_SYMBOLIC_LINK;
|
||||
|
||||
typedef struct _OBJECT_HEADER_NAME_INFO {
|
||||
struct _OBJECT_HEADER_NAME_INFO *ChainLink;
|
||||
struct _OBJECT_DIRECTORY *Directory;
|
||||
OBJECT_STRING Name;
|
||||
} OBJECT_HEADER_NAME_INFO, *POBJECT_HEADER_NAME_INFO;
|
||||
|
||||
#define ObDosDevicesDirectory() ((HANDLE)-3)
|
||||
#define ObWin32NamedObjectsDirectory() ((HANDLE)-4)
|
||||
|
||||
#define ObpIsFlagSet(flagset, flag) (((flagset) & (flag)) != 0)
|
||||
#define ObpIsFlagClear(flagset, flag) (((flagset) & (flag)) == 0)
|
||||
#define ObpEncodeFreeHandleLink(Link) (((ULONG_PTR)(Link)) | 1)
|
||||
#define ObpDecodeFreeHandleLink(Link) (((ULONG_PTR)(Link)) & (~1))
|
||||
#define ObpIsFreeHandleLink(Link) (((ULONG_PTR)(Link)) & 1)
|
||||
#define ObpGetTableByteOffsetFromHandle(Handle) (HandleToUlong(Handle) & (OB_HANDLES_PER_TABLE * sizeof(PVOID) - 1))
|
||||
#define ObpGetTableFromHandle(Handle) ObpObjectHandleTable.RootTable[HandleToUlong(Handle) >> (OB_HANDLES_PER_TABLE_SHIFT + 2)]
|
||||
#define ObpGetHandleContentsPointer(Handle) ((PVOID*)((PUCHAR)ObpGetTableFromHandle(Handle) + ObpGetTableByteOffsetFromHandle(Handle)))
|
||||
#define ObpMaskOffApplicationBits(Handle) ((HANDLE)(((ULONG_PTR)(Handle)) & ~(sizeof(ULONG) - 1)))
|
||||
|
||||
#define OB_FLAG_NAMED_OBJECT 0x01
|
||||
#define OB_FLAG_PERMANENT_OBJECT 0x02
|
||||
#define OB_FLAG_ATTACHED_OBJECT 0x04
|
||||
|
||||
#define OBJECT_TO_OBJECT_HEADER(Object) CONTAINING_RECORD(Object, OBJECT_HEADER, Body)
|
||||
#define OBJECT_TO_OBJECT_HEADER_NAME_INFO(Object) ((POBJECT_HEADER_NAME_INFO)OBJECT_TO_OBJECT_HEADER(Object) - 1)
|
||||
#define OBJECT_HEADER_NAME_INFO_TO_OBJECT_HEADER(ObjectHeaderNameInfo) ((POBJECT_HEADER)((POBJECT_HEADER_NAME_INFO)(ObjectHeaderNameInfo)+1))
|
||||
#define OBJECT_HEADER_TO_OBJECT_HEADER_NAME_INFO(ObjectHeader) ((POBJECT_HEADER_NAME_INFO)(ObjectHeader)-1)
|
||||
#define OBJECT_HEADER_NAME_INFO_TO_OBJECT(ObjectHeaderNameInfo) (&OBJECT_HEADER_NAME_INFO_TO_OBJECT_HEADER(ObjectHeaderNameInfo)->Body)
|
||||
|
||||
HANDLE ObpCreateObjectHandle(PVOID Object);
|
||||
BOOLEAN ObpCreatePermanentDirectoryObject(
|
||||
IN POBJECT_STRING DirectoryName OPTIONAL,
|
||||
OUT POBJECT_DIRECTORY *DirectoryObject
|
||||
);
|
||||
|
||||
NTSTATUS ObpReferenceObjectByName(
|
||||
IN HANDLE RootDirectoryHandle,
|
||||
IN POBJECT_STRING ObjectName,
|
||||
IN ULONG Attributes,
|
||||
IN POBJECT_TYPE ObjectType,
|
||||
IN OUT PVOID ParseContext OPTIONAL,
|
||||
OUT PVOID *ReturnedObject
|
||||
);
|
||||
|
||||
#define XB_InitializeObjectAttributes(p, n, a, r, s){\
|
||||
(p)->RootDirectory = r; \
|
||||
(p)->Attributes = a; \
|
||||
(p)->ObjectName = n; \
|
||||
}
|
||||
|
||||
BOOLEAN ObInitSystem();
|
||||
BOOLEAN ObpExtendObjectHandleTable();
|
||||
VOID ObDissectName(OBJECT_STRING Path, POBJECT_STRING FirstName, POBJECT_STRING RemainingName);
|
||||
PVOID ObpGetObjectHandleContents(HANDLE Handle);
|
||||
PVOID ObpGetObjectHandleReference(HANDLE Handle);
|
||||
ULONG FASTCALL ObpComputeHashIndex(IN POBJECT_STRING ElementName);
|
||||
|
||||
BOOLEAN ObpLookupElementNameInDirectory(
|
||||
IN POBJECT_DIRECTORY Directory,
|
||||
IN POBJECT_STRING ElementName,
|
||||
IN BOOLEAN ResolveSymbolicLink,
|
||||
OUT PVOID *ReturnedObject
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x00EF - ObCreateObject()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(239) NTSTATUS NTAPI ObCreateObject
|
||||
(
|
||||
IN POBJECT_TYPE ObjectType,
|
||||
IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
|
||||
IN ULONG ObjectBodySize,
|
||||
OUT PVOID *Object
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x00F0 - ObDirectoryObjectType
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(240) OBJECT_TYPE ObDirectoryObjectType;
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x00F1 - ObInsertObject()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(241) NTSTATUS NTAPI ObInsertObject
|
||||
(
|
||||
IN PVOID Object,
|
||||
IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
|
||||
IN ULONG ObjectPointerBias,
|
||||
OUT PHANDLE Handle
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x00F2 - ObMakeTemporaryObject()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(242) VOID NTAPI ObMakeTemporaryObject
|
||||
(
|
||||
IN PVOID Object
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x00F3 - ObOpenObjectByName()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(243) NTSTATUS NTAPI ObOpenObjectByName
|
||||
(
|
||||
IN POBJECT_ATTRIBUTES ObjectAttributes,
|
||||
IN POBJECT_TYPE ObjectType,
|
||||
IN OUT PVOID ParseContext OPTIONAL,
|
||||
OUT PHANDLE Handle
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x00F4 - ObOpenObjectByPointer()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(244) NTSTATUS NTAPI ObOpenObjectByPointer
|
||||
(
|
||||
IN PVOID Object,
|
||||
IN POBJECT_TYPE ObjectType,
|
||||
OUT PHANDLE Handle
|
||||
);
|
||||
|
||||
#define OB_HANDLES_PER_TABLE_SHIFT 6
|
||||
#define OB_HANDLES_PER_TABLE (1 << OB_HANDLES_PER_TABLE_SHIFT)
|
||||
#define OB_TABLES_PER_SEGMENT 8
|
||||
#define OB_HANDLES_PER_SEGMENT (OB_TABLES_PER_SEGMENT * OB_HANDLES_PER_TABLE)
|
||||
|
||||
typedef struct _OBJECT_HANDLE_TABLE {
|
||||
LONG HandleCount;
|
||||
LONG_PTR FirstFreeTableEntry;
|
||||
HANDLE NextHandleNeedingPool;
|
||||
PVOID **RootTable;
|
||||
PVOID *BuiltinRootTable[OB_TABLES_PER_SEGMENT];
|
||||
} OBJECT_HANDLE_TABLE, *POBJECT_HANDLE_TABLE;
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x00F5 - ObpObjectHandleTable
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(245) OBJECT_HANDLE_TABLE ObpObjectHandleTable;
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x00F6 - ObReferenceObjectByHandle()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(246) NTSTATUS NTAPI ObReferenceObjectByHandle
|
||||
(
|
||||
IN HANDLE Handle,
|
||||
IN POBJECT_TYPE ObjectType OPTIONAL,
|
||||
OUT PVOID *ReturnedObject
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x00F7 - ObReferenceObjectByName()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(247) NTSTATUS NTAPI ObReferenceObjectByName
|
||||
(
|
||||
IN POBJECT_STRING ObjectName,
|
||||
IN ULONG Attributes,
|
||||
IN POBJECT_TYPE ObjectType,
|
||||
IN OUT PVOID ParseContext OPTIONAL,
|
||||
OUT PVOID *Object
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x00F8 - ObReferenceObjectByPointer()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(248) NTSTATUS NTAPI ObReferenceObjectByPointer
|
||||
(
|
||||
IN PVOID Object,
|
||||
IN POBJECT_TYPE ObjectType
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x00F9 - ObSymbolicLinkObjectType
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(249) OBJECT_TYPE ObSymbolicLinkObjectType;
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x00FA - ObfDereferenceObject()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(250) VOID FASTCALL ObfDereferenceObject
|
||||
(
|
||||
IN PVOID Object
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x00FB - ObfReferenceObject()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(251) VOID FASTCALL ObfReferenceObject
|
||||
(
|
||||
IN PVOID Object
|
||||
);
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
|
@ -12,45 +12,41 @@
|
|||
#ifndef XBOXKRNL_PS_H
|
||||
#define XBOXKRNL_PS_H
|
||||
|
||||
#include "types.h"
|
||||
#define PsGetCurrentThread() (CONTAINING_RECORD((KeGetCurrentThread()),ETHREAD,Tcb))
|
||||
|
||||
#define X_THREAD_QUANTUM 60
|
||||
|
||||
namespace xbox
|
||||
{
|
||||
// ******************************************************************
|
||||
// * PsCreateSystemThread
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(254) ntstatus_xt NTAPI PsCreateSystemThread
|
||||
XBSYSAPI EXPORTNUM(254) NTSTATUS NTAPI PsCreateSystemThread
|
||||
(
|
||||
OUT PHANDLE ThreadHandle,
|
||||
OUT PHANDLE ThreadId OPTIONAL,
|
||||
OUT PHANDLE ThreadId OPTIONAL,
|
||||
IN PKSTART_ROUTINE StartRoutine,
|
||||
IN PVOID StartContext,
|
||||
IN boolean_xt DebuggerThread
|
||||
IN BOOLEAN DebuggerThread
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * PsCreateSystemThreadEx
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(255) ntstatus_xt NTAPI PsCreateSystemThreadEx
|
||||
XBSYSAPI EXPORTNUM(255) NTSTATUS NTAPI PsCreateSystemThreadEx
|
||||
(
|
||||
OUT PHANDLE ThreadHandle,
|
||||
IN ulong_xt ThreadExtensionSize,
|
||||
IN ulong_xt KernelStackSize,
|
||||
IN ulong_xt TlsDataSize,
|
||||
OUT PHANDLE ThreadId OPTIONAL,
|
||||
IN ULONG ThreadExtensionSize,
|
||||
IN ULONG KernelStackSize,
|
||||
IN ULONG TlsDataSize,
|
||||
OUT PHANDLE ThreadId OPTIONAL,
|
||||
IN PKSTART_ROUTINE StartRoutine,
|
||||
IN PVOID StartContext,
|
||||
IN boolean_xt CreateSuspended,
|
||||
IN boolean_xt DebuggerThread,
|
||||
IN BOOLEAN CreateSuspended,
|
||||
IN BOOLEAN DebuggerThread,
|
||||
IN PKSYSTEM_ROUTINE SystemRoutine OPTIONAL
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x0100 - PsQueryStatistics()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(256) ntstatus_xt NTAPI PsQueryStatistics
|
||||
XBSYSAPI EXPORTNUM(256) NTSTATUS NTAPI PsQueryStatistics
|
||||
(
|
||||
IN OUT PPS_STATISTICS ProcessStatistics
|
||||
);
|
||||
|
@ -58,7 +54,7 @@ XBSYSAPI EXPORTNUM(256) ntstatus_xt NTAPI PsQueryStatistics
|
|||
// ******************************************************************
|
||||
// * PsSetCreateThreadNotifyRoutine
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(257) ntstatus_xt NTAPI PsSetCreateThreadNotifyRoutine
|
||||
XBSYSAPI EXPORTNUM(257) NTSTATUS NTAPI PsSetCreateThreadNotifyRoutine
|
||||
(
|
||||
IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
|
||||
);
|
||||
|
@ -66,13 +62,9 @@ XBSYSAPI EXPORTNUM(257) ntstatus_xt NTAPI PsSetCreateThreadNotifyRoutine
|
|||
// ******************************************************************
|
||||
// * PsTerminateSystemThread
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(258) void_xt NTAPI PsTerminateSystemThread(IN ntstatus_xt ExitStatus);
|
||||
XBSYSAPI EXPORTNUM(258) VOID NTAPI PsTerminateSystemThread(IN NTSTATUS ExitStatus);
|
||||
|
||||
XBSYSAPI EXPORTNUM(259) OBJECT_TYPE PsThreadObjectType;
|
||||
|
||||
PETHREAD PspGetCurrentThread();
|
||||
|
||||
}
|
||||
XBSYSAPI EXPORTNUM(259) volatile OBJECT_TYPE PsThreadObjectType;
|
||||
|
||||
#endif
|
||||
|
|
@ -12,37 +12,32 @@
|
|||
#ifndef XBOXKRNL_RTL_H
|
||||
#define XBOXKRNL_RTL_H
|
||||
|
||||
#include "types.h"
|
||||
|
||||
namespace xbox
|
||||
{
|
||||
|
||||
// ******************************************************************
|
||||
// * RtlAnsiStringToUnicodeString
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(260) ntstatus_xt NTAPI RtlAnsiStringToUnicodeString
|
||||
XBSYSAPI EXPORTNUM(260) NTSTATUS NTAPI RtlAnsiStringToUnicodeString
|
||||
(
|
||||
PUNICODE_STRING DestinationString,
|
||||
PSTRING SourceString,
|
||||
uchar_xt AllocateDestinationString
|
||||
UCHAR AllocateDestinationString
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * RtlAppendStringToString
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(261) ntstatus_xt NTAPI RtlAppendStringToString
|
||||
XBSYSAPI EXPORTNUM(261) NTSTATUS NTAPI RtlAppendStringToString
|
||||
(
|
||||
IN OUT PSTRING Destination,
|
||||
IN PSTRING Source
|
||||
);
|
||||
|
||||
XBSYSAPI EXPORTNUM(262) ntstatus_xt NTAPI RtlAppendUnicodeStringToString
|
||||
XBSYSAPI EXPORTNUM(262) NTSTATUS NTAPI RtlAppendUnicodeStringToString
|
||||
(
|
||||
IN OUT PUNICODE_STRING Destination,
|
||||
IN PUNICODE_STRING Source
|
||||
);
|
||||
|
||||
XBSYSAPI EXPORTNUM(263) ntstatus_xt NTAPI RtlAppendUnicodeToString
|
||||
XBSYSAPI EXPORTNUM(263) NTSTATUS NTAPI RtlAppendUnicodeToString
|
||||
(
|
||||
IN OUT PUNICODE_STRING Destination,
|
||||
IN LPCWSTR Source
|
||||
|
@ -51,18 +46,18 @@ XBSYSAPI EXPORTNUM(263) ntstatus_xt NTAPI RtlAppendUnicodeToString
|
|||
// ******************************************************************
|
||||
// * RtlAssert
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(264) void_xt NTAPI RtlAssert
|
||||
XBSYSAPI EXPORTNUM(264) VOID NTAPI RtlAssert
|
||||
(
|
||||
PCHAR FailedAssertion,
|
||||
PCHAR FileName,
|
||||
ulong_xt LineNumber,
|
||||
ULONG LineNumber,
|
||||
PCHAR Message
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x0109 - RtlCaptureContext()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(265) void_xt NTAPI RtlCaptureContext
|
||||
XBSYSAPI EXPORTNUM(265) VOID NTAPI RtlCaptureContext
|
||||
(
|
||||
IN PCONTEXT ContextRecord
|
||||
);
|
||||
|
@ -70,10 +65,10 @@ XBSYSAPI EXPORTNUM(265) void_xt NTAPI RtlCaptureContext
|
|||
// ******************************************************************
|
||||
// * 0x010A - RtlCaptureStackBackTrace()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(266) ushort_xt NTAPI RtlCaptureStackBackTrace
|
||||
XBSYSAPI EXPORTNUM(266) USHORT NTAPI RtlCaptureStackBackTrace
|
||||
(
|
||||
IN ulong_xt FramesToSkip,
|
||||
IN ulong_xt FramesToCapture,
|
||||
IN ULONG FramesToSkip,
|
||||
IN ULONG FramesToCapture,
|
||||
OUT PVOID *BackTrace,
|
||||
OUT PULONG BackTraceHash
|
||||
);
|
||||
|
@ -81,10 +76,10 @@ XBSYSAPI EXPORTNUM(266) ushort_xt NTAPI RtlCaptureStackBackTrace
|
|||
// ******************************************************************
|
||||
// * RtlCharToInteger
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(267) ntstatus_xt NTAPI RtlCharToInteger
|
||||
XBSYSAPI EXPORTNUM(267) NTSTATUS NTAPI RtlCharToInteger
|
||||
(
|
||||
IN PCSZ String,
|
||||
IN ulong_xt Base OPTIONAL,
|
||||
IN ULONG Base OPTIONAL,
|
||||
OUT PULONG Value
|
||||
);
|
||||
|
||||
|
@ -95,41 +90,41 @@ XBSYSAPI EXPORTNUM(267) ntstatus_xt NTAPI RtlCharToInteger
|
|||
// * compare block of memory, return number of equivalent bytes.
|
||||
// *
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(268) size_xt NTAPI RtlCompareMemory
|
||||
XBSYSAPI EXPORTNUM(268) SIZE_T NTAPI RtlCompareMemory
|
||||
(
|
||||
IN CONST void_xt *Source1,
|
||||
IN CONST void_xt *Source2,
|
||||
IN size_xt Length
|
||||
IN CONST VOID *Source1,
|
||||
IN CONST VOID *Source2,
|
||||
IN SIZE_T Length
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x010D - RtlCompareMemoryUlong()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(269) size_xt NTAPI RtlCompareMemoryUlong
|
||||
XBSYSAPI EXPORTNUM(269) SIZE_T NTAPI RtlCompareMemoryUlong
|
||||
(
|
||||
IN PVOID Source,
|
||||
IN size_xt Length,
|
||||
IN ulong_xt Pattern
|
||||
IN SIZE_T Length,
|
||||
IN ULONG Pattern
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x010E - RtlCompareString()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(270) long_xt NTAPI RtlCompareString
|
||||
XBSYSAPI EXPORTNUM(270) LONG NTAPI RtlCompareString
|
||||
(
|
||||
IN PSTRING String1,
|
||||
IN PSTRING String2,
|
||||
IN boolean_xt CaseInSensitive
|
||||
IN BOOLEAN CaseInSensitive
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x010F - RtlCompareUnicodeString()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(271) long_xt NTAPI RtlCompareUnicodeString
|
||||
XBSYSAPI EXPORTNUM(271) LONG NTAPI RtlCompareUnicodeString
|
||||
(
|
||||
IN PUNICODE_STRING String1,
|
||||
IN PUNICODE_STRING String2,
|
||||
IN boolean_xt CaseInSensitive
|
||||
IN BOOLEAN CaseInSensitive
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
|
@ -139,7 +134,7 @@ XBSYSAPI EXPORTNUM(271) long_xt NTAPI RtlCompareUnicodeString
|
|||
// * Copy Source to Destination
|
||||
// *
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(272) void_xt NTAPI RtlCopyString
|
||||
XBSYSAPI EXPORTNUM(272) VOID NTAPI RtlCopyString
|
||||
(
|
||||
OUT PSTRING DestinationString,
|
||||
IN PSTRING SourceString OPTIONAL
|
||||
|
@ -148,7 +143,7 @@ XBSYSAPI EXPORTNUM(272) void_xt NTAPI RtlCopyString
|
|||
// ******************************************************************
|
||||
// * 0x0111 - RtlCopyUnicodeString()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(273) void_xt NTAPI RtlCopyUnicodeString
|
||||
XBSYSAPI EXPORTNUM(273) VOID NTAPI RtlCopyUnicodeString
|
||||
(
|
||||
OUT PUNICODE_STRING DestinationString,
|
||||
IN PUNICODE_STRING SourceString OPTIONAL
|
||||
|
@ -157,7 +152,7 @@ XBSYSAPI EXPORTNUM(273) void_xt NTAPI RtlCopyUnicodeString
|
|||
// ******************************************************************
|
||||
// * 0x0112 - RtlCreateUnicodeString()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(274) boolean_xt NTAPI RtlCreateUnicodeString
|
||||
XBSYSAPI EXPORTNUM(274) BOOLEAN NTAPI RtlCreateUnicodeString
|
||||
(
|
||||
OUT PUNICODE_STRING DestinationString,
|
||||
IN PCWSTR SourceString
|
||||
|
@ -166,25 +161,25 @@ XBSYSAPI EXPORTNUM(274) boolean_xt NTAPI RtlCreateUnicodeString
|
|||
// ******************************************************************
|
||||
// * 0x0113 - RtlDowncaseUnicodeChar()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(275) wchar_xt NTAPI RtlDowncaseUnicodeChar
|
||||
XBSYSAPI EXPORTNUM(275) WCHAR NTAPI RtlDowncaseUnicodeChar
|
||||
(
|
||||
IN wchar_xt SourceCharacter
|
||||
IN WCHAR SourceCharacter
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x0114 - RtlDowncaseUnicodeString()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(276) ntstatus_xt NTAPI RtlDowncaseUnicodeString
|
||||
XBSYSAPI EXPORTNUM(276) NTSTATUS NTAPI RtlDowncaseUnicodeString
|
||||
(
|
||||
OUT PUNICODE_STRING DestinationString,
|
||||
IN PUNICODE_STRING SourceString,
|
||||
IN boolean_xt AllocateDestinationString
|
||||
IN BOOLEAN AllocateDestinationString
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * RtlEnterCriticalSection
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(277) void_xt NTAPI RtlEnterCriticalSection
|
||||
XBSYSAPI EXPORTNUM(277) VOID NTAPI RtlEnterCriticalSection
|
||||
(
|
||||
IN PRTL_CRITICAL_SECTION CriticalSection
|
||||
);
|
||||
|
@ -192,7 +187,7 @@ XBSYSAPI EXPORTNUM(277) void_xt NTAPI RtlEnterCriticalSection
|
|||
// ******************************************************************
|
||||
// * 0x0116 - RtlEnterCriticalSectionAndRegion()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(278) void_xt NTAPI RtlEnterCriticalSectionAndRegion
|
||||
XBSYSAPI EXPORTNUM(278) VOID NTAPI RtlEnterCriticalSectionAndRegion
|
||||
(
|
||||
IN PRTL_CRITICAL_SECTION CriticalSection
|
||||
);
|
||||
|
@ -200,21 +195,21 @@ XBSYSAPI EXPORTNUM(278) void_xt NTAPI RtlEnterCriticalSectionAndRegion
|
|||
// ******************************************************************
|
||||
// * 0x0117 - RtlEqualString()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(279) boolean_xt NTAPI RtlEqualString
|
||||
XBSYSAPI EXPORTNUM(279) BOOLEAN NTAPI RtlEqualString
|
||||
(
|
||||
IN PSTRING String1,
|
||||
IN PSTRING String2,
|
||||
IN boolean_xt CaseInsensitive
|
||||
IN BOOLEAN CaseInsensitive
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x0118 - RtlEqualUnicodeString()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(280) boolean_xt NTAPI RtlEqualUnicodeString
|
||||
XBSYSAPI EXPORTNUM(280) BOOLEAN NTAPI RtlEqualUnicodeString
|
||||
(
|
||||
IN PUNICODE_STRING String1,
|
||||
IN PUNICODE_STRING String2,
|
||||
IN boolean_xt CaseInSensitive
|
||||
IN BOOLEAN CaseInSensitive
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
|
@ -223,7 +218,7 @@ XBSYSAPI EXPORTNUM(280) boolean_xt NTAPI RtlEqualUnicodeString
|
|||
XBSYSAPI EXPORTNUM(281) LARGE_INTEGER NTAPI RtlExtendedIntegerMultiply
|
||||
(
|
||||
IN LARGE_INTEGER Multiplicand,
|
||||
IN long_xt Multiplier
|
||||
IN LONG Multiplier
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
|
@ -232,7 +227,7 @@ XBSYSAPI EXPORTNUM(281) LARGE_INTEGER NTAPI RtlExtendedIntegerMultiply
|
|||
XBSYSAPI EXPORTNUM(282) LARGE_INTEGER NTAPI RtlExtendedLargeIntegerDivide
|
||||
(
|
||||
IN LARGE_INTEGER Dividend,
|
||||
IN ulong_xt Divisor,
|
||||
IN ULONG Divisor,
|
||||
IN PULONG Remainder // OUT? OPTIONAL?
|
||||
);
|
||||
|
||||
|
@ -243,33 +238,33 @@ XBSYSAPI EXPORTNUM(283) LARGE_INTEGER NTAPI RtlExtendedMagicDivide
|
|||
(
|
||||
IN LARGE_INTEGER Dividend,
|
||||
IN LARGE_INTEGER MagicDivisor,
|
||||
IN cchar_xt ShiftCount
|
||||
IN CCHAR ShiftCount
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x011C - RtlFillMemory()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(284) void_xt NTAPI RtlFillMemory
|
||||
XBSYSAPI EXPORTNUM(284) VOID NTAPI RtlFillMemory
|
||||
(
|
||||
IN void_xt UNALIGNED *Destination,
|
||||
IN dword_xt Length,
|
||||
IN byte_xt Fill
|
||||
IN VOID UNALIGNED *Destination,
|
||||
IN DWORD Length,
|
||||
IN BYTE Fill
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x011D - RtlFillMemoryUlong()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(285) void_xt NTAPI RtlFillMemoryUlong
|
||||
XBSYSAPI EXPORTNUM(285) VOID NTAPI RtlFillMemoryUlong
|
||||
(
|
||||
IN PVOID Destination,
|
||||
IN size_xt Length,
|
||||
IN ulong_xt Pattern
|
||||
IN SIZE_T Length,
|
||||
IN ULONG Pattern
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * RtlFreeAnsiString
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(286) void_xt NTAPI RtlFreeAnsiString
|
||||
XBSYSAPI EXPORTNUM(286) VOID NTAPI RtlFreeAnsiString
|
||||
(
|
||||
IN OUT PANSI_STRING AnsiString
|
||||
);
|
||||
|
@ -277,7 +272,7 @@ XBSYSAPI EXPORTNUM(286) void_xt NTAPI RtlFreeAnsiString
|
|||
// ******************************************************************
|
||||
// * 0x011F - RtlFreeUnicodeString()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(287) void_xt NTAPI RtlFreeUnicodeString
|
||||
XBSYSAPI EXPORTNUM(287) VOID NTAPI RtlFreeUnicodeString
|
||||
(
|
||||
IN OUT PUNICODE_STRING UnicodeString
|
||||
);
|
||||
|
@ -285,7 +280,7 @@ XBSYSAPI EXPORTNUM(287) void_xt NTAPI RtlFreeUnicodeString
|
|||
// ******************************************************************
|
||||
// * 0x0120 - RtlGetCallersAddress()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(288) void_xt NTAPI RtlGetCallersAddress
|
||||
XBSYSAPI EXPORTNUM(288) VOID NTAPI RtlGetCallersAddress
|
||||
(
|
||||
OUT PVOID *CallersAddress,
|
||||
OUT PVOID *CallersCaller
|
||||
|
@ -298,13 +293,13 @@ XBSYSAPI EXPORTNUM(288) void_xt NTAPI RtlGetCallersAddress
|
|||
// * Initialize a counted ANSI string.
|
||||
// *
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(289) void_xt NTAPI RtlInitAnsiString
|
||||
XBSYSAPI EXPORTNUM(289) VOID NTAPI RtlInitAnsiString
|
||||
(
|
||||
IN OUT PANSI_STRING DestinationString,
|
||||
IN PCSZ SourceString
|
||||
);
|
||||
|
||||
XBSYSAPI EXPORTNUM(290) void_xt NTAPI RtlInitUnicodeString
|
||||
XBSYSAPI EXPORTNUM(290) VOID NTAPI RtlInitUnicodeString
|
||||
(
|
||||
IN OUT PUNICODE_STRING DestinationString,
|
||||
IN PCWSTR SourceString
|
||||
|
@ -313,7 +308,7 @@ XBSYSAPI EXPORTNUM(290) void_xt NTAPI RtlInitUnicodeString
|
|||
// ******************************************************************
|
||||
// * RtlInitializeCriticalSection
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(291) void_xt NTAPI RtlInitializeCriticalSection
|
||||
XBSYSAPI EXPORTNUM(291) VOID NTAPI RtlInitializeCriticalSection
|
||||
(
|
||||
IN PRTL_CRITICAL_SECTION CriticalSection
|
||||
);
|
||||
|
@ -321,28 +316,28 @@ XBSYSAPI EXPORTNUM(291) void_xt NTAPI RtlInitializeCriticalSection
|
|||
// ******************************************************************
|
||||
// * 0x0124 - RtlIntegerToChar()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(292) ntstatus_xt NTAPI RtlIntegerToChar
|
||||
XBSYSAPI EXPORTNUM(292) NTSTATUS NTAPI RtlIntegerToChar
|
||||
(
|
||||
IN ulong_xt Value,
|
||||
IN ulong_xt Base,
|
||||
IN long_xt OutputLength,
|
||||
IN ULONG Value,
|
||||
IN ULONG Base,
|
||||
IN LONG OutputLength,
|
||||
IN PSZ String
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x0125 - RtlIntegerToUnicodeString()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(293) ntstatus_xt NTAPI RtlIntegerToUnicodeString
|
||||
XBSYSAPI EXPORTNUM(293) NTSTATUS NTAPI RtlIntegerToUnicodeString
|
||||
(
|
||||
IN ulong_xt Value,
|
||||
IN ulong_xt Base,
|
||||
IN ULONG Value,
|
||||
IN ULONG Base,
|
||||
IN PUNICODE_STRING String
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * RtlLeaveCriticalSection
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(294) void_xt NTAPI RtlLeaveCriticalSection
|
||||
XBSYSAPI EXPORTNUM(294) VOID NTAPI RtlLeaveCriticalSection
|
||||
(
|
||||
IN PRTL_CRITICAL_SECTION CriticalSection
|
||||
);
|
||||
|
@ -350,7 +345,7 @@ XBSYSAPI EXPORTNUM(294) void_xt NTAPI RtlLeaveCriticalSection
|
|||
// ******************************************************************
|
||||
// * 0x0127 - RtlLeaveCriticalSectionAndRegion()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(295) void_xt NTAPI RtlLeaveCriticalSectionAndRegion
|
||||
XBSYSAPI EXPORTNUM(295) VOID NTAPI RtlLeaveCriticalSectionAndRegion
|
||||
(
|
||||
IN PRTL_CRITICAL_SECTION CriticalSection
|
||||
);
|
||||
|
@ -358,12 +353,12 @@ XBSYSAPI EXPORTNUM(295) void_xt NTAPI RtlLeaveCriticalSectionAndRegion
|
|||
// ******************************************************************
|
||||
// * RtlLowerChar
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(296) char_xt NTAPI RtlLowerChar(char_xt Character);
|
||||
XBSYSAPI EXPORTNUM(296) CHAR NTAPI RtlLowerChar(CHAR Character);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x0129 - RtlMapGenericMask()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(297) void_xt NTAPI RtlMapGenericMask
|
||||
XBSYSAPI EXPORTNUM(297) VOID NTAPI RtlMapGenericMask
|
||||
(
|
||||
IN PACCESS_MASK AccessMask,
|
||||
IN PGENERIC_MAPPING GenericMapping
|
||||
|
@ -377,47 +372,47 @@ XBSYSAPI EXPORTNUM(297) void_xt NTAPI RtlMapGenericMask
|
|||
// * in 4-byte blocks, followed by any remaining blocks.
|
||||
// *
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(298) void_xt NTAPI RtlMoveMemory
|
||||
XBSYSAPI EXPORTNUM(298) VOID NTAPI RtlMoveMemory
|
||||
(
|
||||
IN void_xt UNALIGNED *Destination,
|
||||
IN CONST void_xt UNALIGNED *Source,
|
||||
IN size_xt Length
|
||||
IN VOID UNALIGNED *Destination,
|
||||
IN CONST VOID UNALIGNED *Source,
|
||||
IN SIZE_T Length
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x012B - RtlMultiByteToUnicodeN()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(299) ntstatus_xt NTAPI RtlMultiByteToUnicodeN
|
||||
XBSYSAPI EXPORTNUM(299) NTSTATUS NTAPI RtlMultiByteToUnicodeN
|
||||
(
|
||||
IN PWSTR UnicodeString,
|
||||
IN ulong_xt MaxBytesInUnicodeString,
|
||||
IN ULONG MaxBytesInUnicodeString,
|
||||
IN PULONG BytesInUnicodeString,
|
||||
IN PCHAR MultiByteString,
|
||||
IN ulong_xt BytesInMultiByteString
|
||||
IN ULONG BytesInMultiByteString
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x012C - RtlMultiByteToUnicodeSize()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(300) ntstatus_xt NTAPI RtlMultiByteToUnicodeSize
|
||||
XBSYSAPI EXPORTNUM(300) NTSTATUS NTAPI RtlMultiByteToUnicodeSize
|
||||
(
|
||||
IN PULONG BytesInUnicodeString,
|
||||
IN PCHAR MultiByteString,
|
||||
IN ulong_xt BytesInMultiByteString
|
||||
IN ULONG BytesInMultiByteString
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * RtlNtStatusToDosError
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(301) ulong_xt NTAPI RtlNtStatusToDosError
|
||||
XBSYSAPI EXPORTNUM(301) ULONG NTAPI RtlNtStatusToDosError
|
||||
(
|
||||
IN ntstatus_xt Status
|
||||
IN NTSTATUS Status
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x012E - RtlRaiseException()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(302) void_xt NTAPI RtlRaiseException
|
||||
XBSYSAPI EXPORTNUM(302) VOID NTAPI RtlRaiseException
|
||||
(
|
||||
IN PEXCEPTION_RECORD ExceptionRecord
|
||||
);
|
||||
|
@ -425,15 +420,15 @@ XBSYSAPI EXPORTNUM(302) void_xt NTAPI RtlRaiseException
|
|||
// ******************************************************************
|
||||
// * 0x012F - RtlRaiseStatus()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(303) void_xt NTAPI RtlRaiseStatus
|
||||
XBSYSAPI EXPORTNUM(303) VOID NTAPI RtlRaiseStatus
|
||||
(
|
||||
IN ntstatus_xt Status
|
||||
IN NTSTATUS Status
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * RtlTimeFieldsToTime
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(304) boolean_xt NTAPI RtlTimeFieldsToTime
|
||||
XBSYSAPI EXPORTNUM(304) BOOLEAN NTAPI RtlTimeFieldsToTime
|
||||
(
|
||||
IN PTIME_FIELDS TimeFields,
|
||||
OUT PLARGE_INTEGER Time
|
||||
|
@ -442,7 +437,7 @@ XBSYSAPI EXPORTNUM(304) boolean_xt NTAPI RtlTimeFieldsToTime
|
|||
// ******************************************************************
|
||||
// * RtlTimeToTimeFields
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(305) void_xt NTAPI RtlTimeToTimeFields
|
||||
XBSYSAPI EXPORTNUM(305) VOID NTAPI RtlTimeToTimeFields
|
||||
(
|
||||
IN PLARGE_INTEGER Time,
|
||||
OUT PTIME_FIELDS TimeFields
|
||||
|
@ -451,7 +446,7 @@ XBSYSAPI EXPORTNUM(305) void_xt NTAPI RtlTimeToTimeFields
|
|||
// ******************************************************************
|
||||
// * RtlTryEnterCriticalSection
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(306) boolean_xt NTAPI RtlTryEnterCriticalSection
|
||||
XBSYSAPI EXPORTNUM(306) BOOLEAN NTAPI RtlTryEnterCriticalSection
|
||||
(
|
||||
IN PRTL_CRITICAL_SECTION CriticalSection
|
||||
);
|
||||
|
@ -459,57 +454,57 @@ XBSYSAPI EXPORTNUM(306) boolean_xt NTAPI RtlTryEnterCriticalSection
|
|||
// ******************************************************************
|
||||
// * 0x0133 - RtlUlongByteSwap()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(307) ulong_xt FASTCALL RtlUlongByteSwap
|
||||
XBSYSAPI EXPORTNUM(307) ULONG FASTCALL RtlUlongByteSwap
|
||||
(
|
||||
IN ulong_xt Source
|
||||
IN ULONG Source
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * RtlUnicodeStringToAnsiString
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(308) ntstatus_xt NTAPI RtlUnicodeStringToAnsiString
|
||||
XBSYSAPI EXPORTNUM(308) NTSTATUS NTAPI RtlUnicodeStringToAnsiString
|
||||
(
|
||||
IN OUT PSTRING DestinationString,
|
||||
IN PUNICODE_STRING SourceString,
|
||||
IN boolean_xt AllocateDestinationString
|
||||
IN BOOLEAN AllocateDestinationString
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x0135 - RtlUnicodeStringToInteger()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(309) ntstatus_xt NTAPI RtlUnicodeStringToInteger
|
||||
XBSYSAPI EXPORTNUM(309) NTSTATUS NTAPI RtlUnicodeStringToInteger
|
||||
(
|
||||
IN PUNICODE_STRING String,
|
||||
IN ulong_xt Base,
|
||||
IN ULONG Base,
|
||||
IN PULONG Value
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x0136 - RtlUnicodeToMultiByteN()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(310) ntstatus_xt NTAPI RtlUnicodeToMultiByteN
|
||||
XBSYSAPI EXPORTNUM(310) NTSTATUS NTAPI RtlUnicodeToMultiByteN
|
||||
(
|
||||
IN PCHAR MultiByteString,
|
||||
IN ulong_xt MaxBytesInMultiByteString,
|
||||
IN ULONG MaxBytesInMultiByteString,
|
||||
IN PULONG BytesInMultiByteString,
|
||||
IN PWSTR UnicodeString,
|
||||
IN ulong_xt BytesInUnicodeString
|
||||
IN ULONG BytesInUnicodeString
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x0137 - RtlUnicodeToMultiByteSize()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(311) ntstatus_xt NTAPI RtlUnicodeToMultiByteSize
|
||||
XBSYSAPI EXPORTNUM(311) NTSTATUS NTAPI RtlUnicodeToMultiByteSize
|
||||
(
|
||||
IN PULONG BytesInMultiByteString,
|
||||
IN PWSTR UnicodeString,
|
||||
IN ulong_xt BytesInUnicodeString
|
||||
IN ULONG BytesInUnicodeString
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x0138 - RtlUnwind()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(312) void_xt NTAPI RtlUnwind
|
||||
XBSYSAPI EXPORTNUM(312) VOID NTAPI RtlUnwind
|
||||
(
|
||||
IN PVOID TargetFrame OPTIONAL,
|
||||
IN PVOID TargetIp OPTIONAL,
|
||||
|
@ -520,45 +515,45 @@ XBSYSAPI EXPORTNUM(312) void_xt NTAPI RtlUnwind
|
|||
// ******************************************************************
|
||||
// * 0x0139 - RtlUpcaseUnicodeChar()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(313) wchar_xt NTAPI RtlUpcaseUnicodeChar
|
||||
XBSYSAPI EXPORTNUM(313) WCHAR NTAPI RtlUpcaseUnicodeChar
|
||||
(
|
||||
IN wchar_xt SourceCharacter
|
||||
IN WCHAR SourceCharacter
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x013A - RtlUpcaseUnicodeString()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(314) ntstatus_xt NTAPI RtlUpcaseUnicodeString
|
||||
XBSYSAPI EXPORTNUM(314) NTSTATUS NTAPI RtlUpcaseUnicodeString
|
||||
(
|
||||
OUT PUNICODE_STRING DestinationString,
|
||||
IN PUNICODE_STRING SourceString,
|
||||
IN boolean_xt AllocateDestinationString
|
||||
IN BOOLEAN AllocateDestinationString
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x013B - RtlUpcaseUnicodeToMultiByteN()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(315) ntstatus_xt NTAPI RtlUpcaseUnicodeToMultiByteN
|
||||
XBSYSAPI EXPORTNUM(315) NTSTATUS NTAPI RtlUpcaseUnicodeToMultiByteN
|
||||
(
|
||||
IN OUT PCHAR MultiByteString,
|
||||
IN ulong_xt MaxBytesInMultiByteString,
|
||||
IN ULONG MaxBytesInMultiByteString,
|
||||
IN PULONG BytesInMultiByteString,
|
||||
IN PWSTR UnicodeString,
|
||||
IN ulong_xt BytesInUnicodeString
|
||||
IN ULONG BytesInUnicodeString
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x013C - RtlUpperChar()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(316) char_xt NTAPI RtlUpperChar
|
||||
XBSYSAPI EXPORTNUM(316) CHAR NTAPI RtlUpperChar
|
||||
(
|
||||
char_xt Character
|
||||
CHAR Character
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x013D - RtlUpperString()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(317) void_xt NTAPI RtlUpperString
|
||||
XBSYSAPI EXPORTNUM(317) VOID NTAPI RtlUpperString
|
||||
(
|
||||
OUT PSTRING DestinationString,
|
||||
IN PSTRING SourceString
|
||||
|
@ -567,19 +562,19 @@ XBSYSAPI EXPORTNUM(317) void_xt NTAPI RtlUpperString
|
|||
// ******************************************************************
|
||||
// * 0x013E - RtlUshortByteSwap()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(318) ushort_xt FASTCALL RtlUshortByteSwap
|
||||
XBSYSAPI EXPORTNUM(318) USHORT FASTCALL RtlUshortByteSwap
|
||||
(
|
||||
IN ushort_xt Source
|
||||
IN USHORT Source
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x013F - RtlWalkFrameChain
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(319) ulong_xt NTAPI RtlWalkFrameChain
|
||||
XBSYSAPI EXPORTNUM(319) ULONG NTAPI RtlWalkFrameChain
|
||||
(
|
||||
OUT PVOID *Callers,
|
||||
IN ulong_xt Count,
|
||||
IN ulong_xt Flags
|
||||
IN ULONG Count,
|
||||
IN ULONG Flags
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
|
@ -589,27 +584,22 @@ XBSYSAPI EXPORTNUM(319) ulong_xt NTAPI RtlWalkFrameChain
|
|||
// * Fill a block of memory with zeros.
|
||||
// *
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(320) void_xt NTAPI RtlZeroMemory
|
||||
XBSYSAPI EXPORTNUM(320) VOID NTAPI RtlZeroMemory
|
||||
(
|
||||
IN void_xt UNALIGNED *Destination,
|
||||
IN size_xt Length
|
||||
IN VOID UNALIGNED *Destination,
|
||||
IN SIZE_T Length
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x0160 - RtlRip
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(352) void_xt NTAPI RtlRip
|
||||
XBSYSAPI EXPORTNUM(352) VOID NTAPI RtlRip
|
||||
(
|
||||
PCHAR ApiName,
|
||||
PCHAR Expression,
|
||||
PCHAR Message
|
||||
);
|
||||
|
||||
void_xt RtlInitSystem();
|
||||
extern RTL_CRITICAL_SECTION NtSystemTimeCritSec;
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
@ -12,11 +12,6 @@
|
|||
#ifndef XBOX_H
|
||||
#define XBOX_H
|
||||
|
||||
#include "types.h"
|
||||
|
||||
namespace xbox
|
||||
{
|
||||
|
||||
#define AV_PACK_NONE 0x00000000
|
||||
#define AV_PACK_STANDARD 0x00000001
|
||||
#define AV_PACK_RFU 0x00000002
|
||||
|
@ -78,8 +73,6 @@ namespace xbox
|
|||
#define AV_OPTION_CGMS 18
|
||||
#define AV_OPTION_WIDESCREEN 19
|
||||
|
||||
void_xt InitializeFscCacheEvent();
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x0001 - AvGetSavedDataAddress()
|
||||
// ******************************************************************
|
||||
|
@ -88,31 +81,31 @@ XBSYSAPI EXPORTNUM(1) PVOID NTAPI AvGetSavedDataAddress(void);
|
|||
// ******************************************************************
|
||||
// * 0x0002 - AvSendTVEncoderOption()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(2) void_xt NTAPI AvSendTVEncoderOption
|
||||
XBSYSAPI EXPORTNUM(2) VOID NTAPI AvSendTVEncoderOption
|
||||
(
|
||||
IN PVOID RegisterBase,
|
||||
IN ulong_xt Option,
|
||||
IN ulong_xt Param,
|
||||
OUT ulong_xt *Result
|
||||
IN ULONG Option,
|
||||
IN ULONG Param,
|
||||
OUT ULONG *Result
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x0003 - AvSetDisplayMode()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(3) ulong_xt NTAPI AvSetDisplayMode
|
||||
XBSYSAPI EXPORTNUM(3) ULONG NTAPI AvSetDisplayMode
|
||||
(
|
||||
IN PVOID RegisterBase,
|
||||
IN ulong_xt Step,
|
||||
IN ulong_xt Mode,
|
||||
IN ulong_xt Format,
|
||||
IN ulong_xt Pitch,
|
||||
IN ulong_xt FrameBuffer
|
||||
IN ULONG Step,
|
||||
IN ULONG Mode,
|
||||
IN ULONG Format,
|
||||
IN ULONG Pitch,
|
||||
IN ULONG FrameBuffer
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x0004 - AvSetSavedDataAddress()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(4) void_xt NTAPI AvSetSavedDataAddress
|
||||
XBSYSAPI EXPORTNUM(4) VOID NTAPI AvSetSavedDataAddress
|
||||
(
|
||||
IN PVOID Address
|
||||
);
|
||||
|
@ -120,51 +113,51 @@ XBSYSAPI EXPORTNUM(4) void_xt NTAPI AvSetSavedDataAddress
|
|||
// ******************************************************************
|
||||
// * 0x0023 - FscGetCacheSize()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(35) ulong_xt NTAPI FscGetCacheSize();
|
||||
XBSYSAPI EXPORTNUM(35) ULONG NTAPI FscGetCacheSize();
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x0024 - FscInvalidateIdleBlocks()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(36) void_xt NTAPI FscInvalidateIdleBlocks();
|
||||
XBSYSAPI EXPORTNUM(36) VOID NTAPI FscInvalidateIdleBlocks();
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x0025 - FscSetCacheSize()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(37) ntstatus_xt NTAPI FscSetCacheSize
|
||||
XBSYSAPI EXPORTNUM(37) NTSTATUS NTAPI FscSetCacheSize
|
||||
(
|
||||
ulong_xt NumberOfCachePages
|
||||
ULONG NumberOfCachePages
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x0058 - KdDebuggerEnabled
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(88) boolean_xt KdDebuggerEnabled;
|
||||
XBSYSAPI EXPORTNUM(88) BOOLEAN KdDebuggerEnabled;
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x0059 - KdDebuggerNotPresent
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(89) boolean_xt KdDebuggerNotPresent;
|
||||
XBSYSAPI EXPORTNUM(89) BOOLEAN KdDebuggerNotPresent;
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x00A0 - KfRaiseIrql()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(160) uchar_xt FASTCALL KfRaiseIrql
|
||||
XBSYSAPI EXPORTNUM(160) UCHAR FASTCALL KfRaiseIrql
|
||||
(
|
||||
IN uchar_xt NewIrql
|
||||
IN UCHAR NewIrql
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x00A1 - KfLowerIrql()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(161) void_xt FASTCALL KfLowerIrql
|
||||
XBSYSAPI EXPORTNUM(161) VOID FASTCALL KfLowerIrql
|
||||
(
|
||||
IN uchar_xt NewIrql
|
||||
IN UCHAR NewIrql
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x00A2 - KiBugCheckData
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(162) ulong_ptr_xt KiBugCheckData[5];
|
||||
XBSYSAPI EXPORTNUM(162) ULONG_PTR KiBugCheckData[5];
|
||||
|
||||
void KiLockDispatcherDatabase
|
||||
(
|
||||
|
@ -174,7 +167,7 @@ void KiLockDispatcherDatabase
|
|||
// ******************************************************************
|
||||
// * 0x00A3 - KiUnlockDispatcherDatabase()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(163) void_xt FASTCALL KiUnlockDispatcherDatabase
|
||||
XBSYSAPI EXPORTNUM(163) VOID FASTCALL KiUnlockDispatcherDatabase
|
||||
(
|
||||
IN KIRQL OldIrql
|
||||
);
|
||||
|
@ -187,24 +180,24 @@ XBSYSAPI EXPORTNUM(164) PLAUNCH_DATA_PAGE LaunchDataPage;
|
|||
// ******************************************************************
|
||||
// * 0x00FC - PhyGetLinkState()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(252) dword_xt NTAPI PhyGetLinkState
|
||||
XBSYSAPI EXPORTNUM(252) DWORD NTAPI PhyGetLinkState
|
||||
(
|
||||
IN ulong_xt Mode
|
||||
IN ULONG Mode
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x00FD - PhyInitialize()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(253) ntstatus_xt NTAPI PhyInitialize
|
||||
XBSYSAPI EXPORTNUM(253) NTSTATUS NTAPI PhyInitialize
|
||||
(
|
||||
IN ulong_xt forceReset,
|
||||
IN ULONG forceReset,
|
||||
IN PVOID Parameter2
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x0141 - XboxEEPROMKey
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(321) uchar_xt XboxEEPROMKey[16];
|
||||
XBSYSAPI EXPORTNUM(321) UCHAR XboxEEPROMKey[16];
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x0142 - XboxHardwareInfo
|
||||
|
@ -214,13 +207,13 @@ XBSYSAPI EXPORTNUM(322) XBOX_HARDWARE_INFO XboxHardwareInfo;
|
|||
// ******************************************************************
|
||||
// * 0x0143 - XboxHDKey
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(323) uchar_xt XboxHDKey[16];
|
||||
XBSYSAPI EXPORTNUM(323) UCHAR XboxHDKey[16];
|
||||
|
||||
typedef struct _XBOX_KRNL_VERSION {
|
||||
ushort_xt Major;
|
||||
ushort_xt Minor;
|
||||
ushort_xt Build;
|
||||
ushort_xt Qfe;
|
||||
USHORT Major;
|
||||
USHORT Minor;
|
||||
USHORT Build;
|
||||
USHORT Qfe;
|
||||
} XBOX_KRNL_VERSION;
|
||||
|
||||
// ******************************************************************
|
||||
|
@ -231,7 +224,7 @@ XBSYSAPI EXPORTNUM(324) XBOX_KRNL_VERSION XboxKrnlVersion;
|
|||
// ******************************************************************
|
||||
// * 0x0145 - XboxSignatureKey
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(325) byte_xt XboxSignatureKey[16];
|
||||
XBSYSAPI EXPORTNUM(325) BYTE XboxSignatureKey[16];
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x0146 - XeImageFileName
|
||||
|
@ -241,7 +234,7 @@ XBSYSAPI EXPORTNUM(326) OBJECT_STRING XeImageFileName;
|
|||
// ******************************************************************
|
||||
// * 0x0147 - XeLoadSection()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(327) ntstatus_xt NTAPI XeLoadSection
|
||||
XBSYSAPI EXPORTNUM(327) NTSTATUS NTAPI XeLoadSection
|
||||
(
|
||||
IN PXBEIMAGE_SECTION Section
|
||||
);
|
||||
|
@ -249,7 +242,7 @@ XBSYSAPI EXPORTNUM(327) ntstatus_xt NTAPI XeLoadSection
|
|||
// ******************************************************************
|
||||
// * 0x0148 - XeUnloadSection()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(328) ntstatus_xt NTAPI XeUnloadSection
|
||||
XBSYSAPI EXPORTNUM(328) NTSTATUS NTAPI XeUnloadSection
|
||||
(
|
||||
IN PXBEIMAGE_SECTION Section
|
||||
);
|
||||
|
@ -257,7 +250,7 @@ XBSYSAPI EXPORTNUM(328) ntstatus_xt NTAPI XeUnloadSection
|
|||
// ******************************************************************
|
||||
// * 0x014F - XcSHAInit()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(335) void_xt NTAPI XcSHAInit
|
||||
XBSYSAPI EXPORTNUM(335) VOID NTAPI XcSHAInit
|
||||
(
|
||||
IN PUCHAR pbSHAContext
|
||||
);
|
||||
|
@ -265,17 +258,17 @@ XBSYSAPI EXPORTNUM(335) void_xt NTAPI XcSHAInit
|
|||
// ******************************************************************
|
||||
// * 0x0150 - XcSHAUpdate()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(336) void_xt NTAPI XcSHAUpdate
|
||||
XBSYSAPI EXPORTNUM(336) VOID NTAPI XcSHAUpdate
|
||||
(
|
||||
IN PUCHAR pbSHAContext,
|
||||
IN PUCHAR pbInput,
|
||||
IN ulong_xt dwInputLength
|
||||
IN ULONG dwInputLength
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x0151 - XcSHAFinal()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(337) void_xt NTAPI XcSHAFinal
|
||||
XBSYSAPI EXPORTNUM(337) VOID NTAPI XcSHAFinal
|
||||
(
|
||||
IN PUCHAR pbSHAContext,
|
||||
IN PUCHAR pbDigest
|
||||
|
@ -284,41 +277,41 @@ XBSYSAPI EXPORTNUM(337) void_xt NTAPI XcSHAFinal
|
|||
// ******************************************************************
|
||||
// * 0x0152 - XcRC4Key()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(338) void_xt NTAPI XcRC4Key
|
||||
XBSYSAPI EXPORTNUM(338) VOID NTAPI XcRC4Key
|
||||
(
|
||||
IN PUCHAR pbKeyStruct,
|
||||
IN ulong_xt dwKeyLength,
|
||||
IN ULONG dwKeyLength,
|
||||
IN PUCHAR pbKey
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x0153 - XcRC4Crypt()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(339) void_xt NTAPI XcRC4Crypt
|
||||
XBSYSAPI EXPORTNUM(339) VOID NTAPI XcRC4Crypt
|
||||
(
|
||||
IN PUCHAR pbKeyStruct,
|
||||
IN ulong_xt dwInputLength,
|
||||
IN ULONG dwInputLength,
|
||||
IN PUCHAR pbInput
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x0154 - XcHMAC()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(340) void_xt NTAPI XcHMAC
|
||||
XBSYSAPI EXPORTNUM(340) VOID NTAPI XcHMAC
|
||||
(
|
||||
IN PBYTE pbKeyMaterial,
|
||||
IN ulong_xt cbKeyMaterial,
|
||||
IN ULONG cbKeyMaterial,
|
||||
IN PBYTE pbData,
|
||||
IN ulong_xt cbData,
|
||||
IN ULONG cbData,
|
||||
IN PBYTE pbData2,
|
||||
IN ulong_xt cbData2,
|
||||
IN ULONG cbData2,
|
||||
OUT PBYTE HmacData
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x0155 - XcPKEncPublic()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(341) ulong_xt NTAPI XcPKEncPublic
|
||||
XBSYSAPI EXPORTNUM(341) ULONG NTAPI XcPKEncPublic
|
||||
(
|
||||
IN PUCHAR pbPubKey,
|
||||
IN PUCHAR pbInput,
|
||||
|
@ -328,7 +321,7 @@ XBSYSAPI EXPORTNUM(341) ulong_xt NTAPI XcPKEncPublic
|
|||
// ******************************************************************
|
||||
// * 0x0156 - XcPKDecPrivate()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(342) ulong_xt NTAPI XcPKDecPrivate
|
||||
XBSYSAPI EXPORTNUM(342) ULONG NTAPI XcPKDecPrivate
|
||||
(
|
||||
IN PUCHAR pbPrvKey,
|
||||
IN PUCHAR pbInput,
|
||||
|
@ -338,7 +331,7 @@ XBSYSAPI EXPORTNUM(342) ulong_xt NTAPI XcPKDecPrivate
|
|||
// ******************************************************************
|
||||
// * 0x0157 - XcPKGetKeyLen()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(343) ulong_xt NTAPI XcPKGetKeyLen
|
||||
XBSYSAPI EXPORTNUM(343) ULONG NTAPI XcPKGetKeyLen
|
||||
(
|
||||
OUT PUCHAR pbPubKey
|
||||
);
|
||||
|
@ -346,7 +339,7 @@ XBSYSAPI EXPORTNUM(343) ulong_xt NTAPI XcPKGetKeyLen
|
|||
// ******************************************************************
|
||||
// * 0x0158 - XcVerifyPKCS1Signature()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(344) boolean_xt NTAPI XcVerifyPKCS1Signature
|
||||
XBSYSAPI EXPORTNUM(344) BOOLEAN NTAPI XcVerifyPKCS1Signature
|
||||
(
|
||||
IN PUCHAR pbSig,
|
||||
IN PUCHAR pbPubKey,
|
||||
|
@ -356,30 +349,30 @@ XBSYSAPI EXPORTNUM(344) boolean_xt NTAPI XcVerifyPKCS1Signature
|
|||
// ******************************************************************
|
||||
// * 0x0159 - XcModExp()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(345) ulong_xt NTAPI XcModExp
|
||||
XBSYSAPI EXPORTNUM(345) ULONG NTAPI XcModExp
|
||||
(
|
||||
IN LPDWORD pA,
|
||||
IN LPDWORD pB,
|
||||
IN LPDWORD pC,
|
||||
IN LPDWORD pD,
|
||||
IN ulong_xt dwN
|
||||
IN ULONG dwN
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x015A - XcDESKeyParity()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(346) void_xt NTAPI XcDESKeyParity
|
||||
XBSYSAPI EXPORTNUM(346) VOID NTAPI XcDESKeyParity
|
||||
(
|
||||
IN PUCHAR pbKey,
|
||||
IN ulong_xt dwKeyLength
|
||||
IN ULONG dwKeyLength
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x015B - XcKeyTable()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(347) void_xt NTAPI XcKeyTable
|
||||
XBSYSAPI EXPORTNUM(347) VOID NTAPI XcKeyTable
|
||||
(
|
||||
IN ulong_xt dwCipher,
|
||||
IN ULONG dwCipher,
|
||||
OUT PUCHAR pbKeyTable,
|
||||
IN PUCHAR pbKey
|
||||
);
|
||||
|
@ -387,80 +380,80 @@ XBSYSAPI EXPORTNUM(347) void_xt NTAPI XcKeyTable
|
|||
// ******************************************************************
|
||||
// * 0x015C - XcBlockCrypt()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(348) void_xt NTAPI XcBlockCrypt
|
||||
XBSYSAPI EXPORTNUM(348) VOID NTAPI XcBlockCrypt
|
||||
(
|
||||
IN ulong_xt dwCipher,
|
||||
IN ULONG dwCipher,
|
||||
OUT PUCHAR pbOutput,
|
||||
IN PUCHAR pbInput,
|
||||
IN PUCHAR pbKeyTable,
|
||||
IN ulong_xt dwOp
|
||||
IN ULONG dwOp
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x015D - XcBlockCryptCBC()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(349) void_xt NTAPI XcBlockCryptCBC
|
||||
XBSYSAPI EXPORTNUM(349) VOID NTAPI XcBlockCryptCBC
|
||||
(
|
||||
IN ulong_xt dwCipher,
|
||||
IN ulong_xt dwInputLength,
|
||||
IN ULONG dwCipher,
|
||||
IN ULONG dwInputLength,
|
||||
OUT PUCHAR pbOutput,
|
||||
IN PUCHAR pbInput,
|
||||
IN PUCHAR pbKeyTable,
|
||||
IN ulong_xt dwOp,
|
||||
IN ULONG dwOp,
|
||||
IN PUCHAR pbFeedback
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x015E - XcCryptService()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(350) ulong_xt NTAPI XcCryptService
|
||||
XBSYSAPI EXPORTNUM(350) ULONG NTAPI XcCryptService
|
||||
(
|
||||
IN ulong_xt dwOp,
|
||||
IN ULONG dwOp,
|
||||
IN PVOID pArgs
|
||||
);
|
||||
|
||||
/* Function pointers which point to all the kernel crypto functions. Used by PCRYPTO_VECTOR. */
|
||||
typedef void_xt(NTAPI *pfXcSHAInit)(PUCHAR pbSHAContext);
|
||||
typedef void_xt(NTAPI *pfXcSHAUpdate)(PUCHAR pbSHAContext, PUCHAR pbInput, ulong_xt dwInputLength);
|
||||
typedef void_xt(NTAPI *pfXcSHAFinal)(PUCHAR pbSHAContext, PUCHAR pbDigest);
|
||||
typedef void_xt(NTAPI *pfXcRC4Key)(PUCHAR pbKeyStruct, ulong_xt dwKeyLength, PUCHAR pbKey);
|
||||
typedef void_xt(NTAPI *pfXcRC4Crypt)(PUCHAR pbKeyStruct, ulong_xt dwInputLength, PUCHAR pbInput);
|
||||
typedef void_xt(NTAPI *pfXcHMAC)(PBYTE pbKeyMaterial, ulong_xt cbKeyMaterial, PBYTE pbData, ulong_xt cbData, PBYTE pbData2, ulong_xt cbData2, PBYTE HmacData);
|
||||
typedef ulong_xt(NTAPI *pfXcPKEncPublic)(PUCHAR pbPubKey, PUCHAR pbInput, PUCHAR pbOutput);
|
||||
typedef ulong_xt(NTAPI *pfXcPKDecPrivate)(PUCHAR pbPrvKey, PUCHAR pbInput, PUCHAR pbOutput);
|
||||
typedef ulong_xt(NTAPI *pfXcPKGetKeyLen)(PUCHAR pbPubKey);
|
||||
typedef boolean_xt(NTAPI *pfXcVerifyPKCS1Signature)(PUCHAR pbSig, PUCHAR pbPubKey, PUCHAR pbDigest);
|
||||
typedef ulong_xt(NTAPI *pfXcModExp)(LPDWORD pA, LPDWORD pB, LPDWORD pC, LPDWORD pD, ulong_xt dwN);
|
||||
typedef void_xt(NTAPI *pfXcDESKeyParity)(PUCHAR pbKey, ulong_xt dwKeyLength);
|
||||
typedef void_xt(NTAPI *pfXcKeyTable)(ulong_xt dwCipher, PUCHAR pbKeyTable, PUCHAR pbKey);
|
||||
typedef void_xt(NTAPI *pfXcBlockCrypt)(ulong_xt dwCipher, PUCHAR pbOutput, PUCHAR pbInput, PUCHAR pbKeyTable, ulong_xt dwOp);
|
||||
typedef void_xt(NTAPI *pfXcBlockCryptCBC)(ulong_xt dwCipher, ulong_xt dwInputLength, PUCHAR pbOutput, PUCHAR pbInput, PUCHAR pbKeyTable, ulong_xt dwOp, PUCHAR pbFeedback);
|
||||
typedef ulong_xt(NTAPI *pfXcCryptService)(ulong_xt dwOp, PVOID pArgs);
|
||||
typedef VOID(NTAPI *pfXcSHAInit)(PUCHAR pbSHAContext);
|
||||
typedef VOID(NTAPI *pfXcSHAUpdate)(PUCHAR pbSHAContext, PUCHAR pbInput, ULONG dwInputLength);
|
||||
typedef VOID(NTAPI *pfXcSHAFinal)(PUCHAR pbSHAContext, PUCHAR pbDigest);
|
||||
typedef VOID(NTAPI *pfXcRC4Key)(PUCHAR pbKeyStruct, ULONG dwKeyLength, PUCHAR pbKey);
|
||||
typedef VOID(NTAPI *pfXcRC4Crypt)(PUCHAR pbKeyStruct, ULONG dwInputLength, PUCHAR pbInput);
|
||||
typedef VOID(NTAPI *pfXcHMAC)(PBYTE pbKeyMaterial, ULONG cbKeyMaterial, PBYTE pbData, ULONG cbData, PBYTE pbData2, ULONG cbData2, PBYTE HmacData);
|
||||
typedef ULONG(NTAPI *pfXcPKEncPublic)(PUCHAR pbPubKey, PUCHAR pbInput, PUCHAR pbOutput);
|
||||
typedef ULONG(NTAPI *pfXcPKDecPrivate)(PUCHAR pbPrvKey, PUCHAR pbInput, PUCHAR pbOutput);
|
||||
typedef ULONG(NTAPI *pfXcPKGetKeyLen)(PUCHAR pbPubKey);
|
||||
typedef BOOLEAN(NTAPI *pfXcVerifyPKCS1Signature)(PUCHAR pbSig, PUCHAR pbPubKey, PUCHAR pbDigest);
|
||||
typedef ULONG(NTAPI *pfXcModExp)(LPDWORD pA, LPDWORD pB, LPDWORD pC, LPDWORD pD, ULONG dwN);
|
||||
typedef VOID(NTAPI *pfXcDESKeyParity)(PUCHAR pbKey, ULONG dwKeyLength);
|
||||
typedef VOID(NTAPI *pfXcKeyTable)(ULONG dwCipher, PUCHAR pbKeyTable, PUCHAR pbKey);
|
||||
typedef VOID(NTAPI *pfXcBlockCrypt)(ULONG dwCipher, PUCHAR pbOutput, PUCHAR pbInput, PUCHAR pbKeyTable, ULONG dwOp);
|
||||
typedef VOID(NTAPI *pfXcBlockCryptCBC)(ULONG dwCipher, ULONG dwInputLength, PUCHAR pbOutput, PUCHAR pbInput, PUCHAR pbKeyTable, ULONG dwOp, PUCHAR pbFeedback);
|
||||
typedef ULONG(NTAPI *pfXcCryptService)(ULONG dwOp, PVOID pArgs);
|
||||
|
||||
/* Struct which contains all the pointers to the crypto functions */
|
||||
typedef struct {
|
||||
pfXcSHAInit pXcSHAInit;
|
||||
pfXcSHAUpdate pXcSHAUpdate;
|
||||
pfXcSHAFinal pXcSHAFinal;
|
||||
pfXcRC4Key pXcRC4Key;
|
||||
pfXcRC4Crypt pXcRC4Crypt;
|
||||
pfXcHMAC pXcHMAC;
|
||||
pfXcPKEncPublic pXcPKEncPublic;
|
||||
pfXcPKDecPrivate pXcPKDecPrivate;
|
||||
pfXcPKGetKeyLen pXcPKGetKeyLen;
|
||||
pfXcVerifyPKCS1Signature pXcVerifyPKCS1Signature;
|
||||
pfXcModExp pXcModExp;
|
||||
pfXcDESKeyParity pXcDESKeyParity;
|
||||
pfXcKeyTable pXcKeyTable;
|
||||
pfXcBlockCrypt pXcBlockCrypt;
|
||||
pfXcBlockCryptCBC pXcBlockCryptCBC;
|
||||
pfXcCryptService pXcCryptService;
|
||||
typedef struct {
|
||||
pfXcSHAInit pXcSHAInit;
|
||||
pfXcSHAUpdate pXcSHAUpdate;
|
||||
pfXcSHAFinal pXcSHAFinal;
|
||||
pfXcRC4Key pXcRC4Key;
|
||||
pfXcRC4Crypt pXcRC4Crypt;
|
||||
pfXcHMAC pXcHMAC;
|
||||
pfXcPKEncPublic pXcPKEncPublic;
|
||||
pfXcPKDecPrivate pXcPKDecPrivate;
|
||||
pfXcPKGetKeyLen pXcPKGetKeyLen;
|
||||
pfXcVerifyPKCS1Signature pXcVerifyPKCS1Signature;
|
||||
pfXcModExp pXcModExp;
|
||||
pfXcDESKeyParity pXcDESKeyParity;
|
||||
pfXcKeyTable pXcKeyTable;
|
||||
pfXcBlockCrypt pXcBlockCrypt;
|
||||
pfXcBlockCryptCBC pXcBlockCryptCBC;
|
||||
pfXcCryptService pXcCryptService;
|
||||
} CRYPTO_VECTOR, *PCRYPTO_VECTOR;
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x015F - XcUpdateCrypto()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(351) void_xt NTAPI XcUpdateCrypto
|
||||
XBSYSAPI EXPORTNUM(351) VOID NTAPI XcUpdateCrypto
|
||||
(
|
||||
IN PCRYPTO_VECTOR pNewVector,
|
||||
OUT PCRYPTO_VECTOR pROMVector OPTIONAL
|
||||
|
@ -482,10 +475,10 @@ XBSYSAPI EXPORTNUM(354) XBOX_KEY_DATA XboxAlternateSignatureKeys[ALTERNATE_SIGNA
|
|||
// ******************************************************************
|
||||
// * 0x0163 - XePublicKeyData
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(355) uchar_xt XePublicKeyData[284];
|
||||
XBSYSAPI EXPORTNUM(355) uchar_xt XePublicKeyDataRetail[284];
|
||||
XBSYSAPI EXPORTNUM(355) uchar_xt XePublicKeyDataDebug[284];
|
||||
XBSYSAPI EXPORTNUM(355) uchar_xt XePublicKeyDataChihiro[284];
|
||||
XBSYSAPI EXPORTNUM(355) UCHAR XePublicKeyData[284];
|
||||
XBSYSAPI EXPORTNUM(355) UCHAR XePublicKeyDataRetail[284];
|
||||
XBSYSAPI EXPORTNUM(355) UCHAR XePublicKeyDataChihiroGame[284];
|
||||
XBSYSAPI EXPORTNUM(355) UCHAR XePublicKeyDataChihiroBoot[284];
|
||||
|
||||
// ******************************************************************
|
||||
// * 0x0165 - IdexChannelObject
|
||||
|
@ -495,10 +488,10 @@ XBSYSAPI EXPORTNUM(357) IDE_CHANNEL_OBJECT IdexChannelObject;
|
|||
// ******************************************************************
|
||||
// * 0x0169 - RtlSnprintf()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(361) int_xt CDECL RtlSnprintf
|
||||
XBSYSAPI EXPORTNUM(361) INT CDECL RtlSnprintf
|
||||
(
|
||||
IN PCHAR string,
|
||||
IN size_xt count,
|
||||
IN SIZE_T count,
|
||||
IN LPCCH format,
|
||||
...
|
||||
);
|
||||
|
@ -506,7 +499,7 @@ XBSYSAPI EXPORTNUM(361) int_xt CDECL RtlSnprintf
|
|||
// ******************************************************************
|
||||
// * 0x016A - RtlSprintf()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(362) int_xt CDECL RtlSprintf
|
||||
XBSYSAPI EXPORTNUM(362) INT CDECL RtlSprintf
|
||||
(
|
||||
IN PCHAR string,
|
||||
IN LPCCH format,
|
||||
|
@ -516,10 +509,10 @@ XBSYSAPI EXPORTNUM(362) int_xt CDECL RtlSprintf
|
|||
// ******************************************************************
|
||||
// * 0x016B - RtlVsnprintf()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(363) int_xt CDECL RtlVsnprintf
|
||||
XBSYSAPI EXPORTNUM(363) INT CDECL RtlVsnprintf
|
||||
(
|
||||
IN PCHAR string,
|
||||
IN size_xt count,
|
||||
IN SIZE_T count,
|
||||
IN LPCCH format,
|
||||
...
|
||||
);
|
||||
|
@ -527,49 +520,47 @@ XBSYSAPI EXPORTNUM(363) int_xt CDECL RtlVsnprintf
|
|||
// ******************************************************************
|
||||
// * 0x016C - RtlVsprintf()
|
||||
// ******************************************************************
|
||||
XBSYSAPI EXPORTNUM(364) int_xt CDECL RtlVsprintf
|
||||
XBSYSAPI EXPORTNUM(364) INT CDECL RtlVsprintf
|
||||
(
|
||||
IN PCHAR string,
|
||||
IN LPCCH format,
|
||||
...
|
||||
);
|
||||
|
||||
XBSYSAPI EXPORTNUM(367) ntstatus_xt NTAPI UnknownAPI367
|
||||
XBSYSAPI EXPORTNUM(367) NTSTATUS NTAPI UnknownAPI367
|
||||
(
|
||||
// UNKNOWN ARGUMENTS
|
||||
);
|
||||
|
||||
XBSYSAPI EXPORTNUM(368) ntstatus_xt NTAPI UnknownAPI368
|
||||
XBSYSAPI EXPORTNUM(368) NTSTATUS NTAPI UnknownAPI368
|
||||
(
|
||||
// UNKNOWN ARGUMENTS
|
||||
);
|
||||
|
||||
XBSYSAPI EXPORTNUM(369) ntstatus_xt NTAPI UnknownAPI369
|
||||
XBSYSAPI EXPORTNUM(369) NTSTATUS NTAPI UnknownAPI369
|
||||
(
|
||||
// UNKNOWN ARGUMENTS
|
||||
);
|
||||
|
||||
XBSYSAPI EXPORTNUM(370) ntstatus_xt NTAPI XProfpControl // PROFILING
|
||||
XBSYSAPI EXPORTNUM(370) NTSTATUS NTAPI XProfpControl // PROFILING
|
||||
(
|
||||
ulong_xt Action,
|
||||
ulong_xt Param
|
||||
ULONG Action,
|
||||
ULONG Param
|
||||
);
|
||||
|
||||
XBSYSAPI EXPORTNUM(371) ntstatus_xt NTAPI XProfpGetData // PROFILING
|
||||
XBSYSAPI EXPORTNUM(371) NTSTATUS NTAPI XProfpGetData // PROFILING
|
||||
(
|
||||
// NO ARGUMENTS
|
||||
);
|
||||
|
||||
XBSYSAPI EXPORTNUM(372) ntstatus_xt NTAPI IrtClientInitFast // PROFILING
|
||||
XBSYSAPI EXPORTNUM(372) NTSTATUS NTAPI IrtClientInitFast // PROFILING
|
||||
(
|
||||
// UNKNOWN ARGUMENTS
|
||||
);
|
||||
|
||||
XBSYSAPI EXPORTNUM(373) ntstatus_xt NTAPI IrtSweep // PROFILING
|
||||
XBSYSAPI EXPORTNUM(373) NTSTATUS NTAPI IrtSweep // PROFILING
|
||||
(
|
||||
// UNKNOWN ARGUMENTS
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
#endif
|
|
@ -1 +1 @@
|
|||
Subproject commit fa24d868ac2f8fd558e4e914c9863411245db8fd
|
||||
Subproject commit c7b8b49ef8691ac85ad18298468f7e4a616290ed
|
|
@ -1 +1 @@
|
|||
Subproject commit 774111351210e6f340246d6fb32741b09708f381
|
||||
Subproject commit 0f2794cac610fad4f1955241ef43e6254fd11205
|
|
@ -1 +1 @@
|
|||
Subproject commit f8a95b7afa963c90b01a9e7cd758346f95c90f50
|
||||
Subproject commit 7c491b6ef7e49c7f35dcdd39f99f1f5943e48e9e
|
|
@ -1 +0,0 @@
|
|||
Subproject commit 8ced41570e4692b0d556503683ae45f92416f5f1
|
|
@ -1 +0,0 @@
|
|||
Subproject commit cf178f1fac38426990425cc034f7d4b8c9e1e388
|
|
@ -1 +0,0 @@
|
|||
Subproject commit 3f86a95c0784d73ce6815237ec33ed25f233b643
|
|
@ -1 +0,0 @@
|
|||
Subproject commit ead0af5dee49e408c005151393f8a7dbcd27026c
|
|
@ -1 +1 @@
|
|||
Subproject commit 83d4e1ebef3588fae48b69a7352cc21801cb70bc
|
||||
Subproject commit 29cb47ea7674b36cf2b742c11cf2568add1f47fc
|
|
@ -1 +0,0 @@
|
|||
Subproject commit 94e5f23e736f2bb67ebdf90727353e65344f9fc0
|
|
@ -2,7 +2,7 @@ cmake_minimum_required (VERSION 3.12)
|
|||
project(cxbx)
|
||||
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
set(CMAKE_CXX_STANDARD 20)
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
|
||||
# Suppress extra stuff from generated solution
|
||||
set(CMAKE_SUPPRESS_REGENERATION true)
|
||||
|
@ -12,13 +12,16 @@ include_directories(
|
|||
"${CXBXR_ROOT_DIR}/src/common"
|
||||
"${CXBXR_ROOT_DIR}/src/common/Win32"
|
||||
"${CXBXR_ROOT_DIR}/import/OpenXDK/include"
|
||||
"${CXBXR_ROOT_DIR}/import/DirectX9/include"
|
||||
"${CXBXR_ROOT_DIR}/import/distorm/include"
|
||||
"${CXBXR_ROOT_DIR}/import/glew-2.0.0/include"
|
||||
"${CXBXR_ROOT_DIR}/import/libusb/libusb"
|
||||
"${CXBXR_ROOT_DIR}/import/subhook"
|
||||
"${CXBXR_ROOT_DIR}/import/DirectX9/include"
|
||||
"${CXBXR_ROOT_DIR}/import/XbSymbolDatabase"
|
||||
"${CXBXR_ROOT_DIR}/import/simpleini"
|
||||
"${CXBXR_ROOT_DIR}/import/libtommath"
|
||||
"${CXBXR_ROOT_DIR}/import/libtomcrypt/src/headers"
|
||||
"${CXBXR_ROOT_DIR}/import/winpcap/Include"
|
||||
"${CXBXR_ROOT_DIR}/import/xxHash"
|
||||
"${CXBXR_ROOT_DIR}/import/SDL2/include"
|
||||
)
|
||||
|
||||
link_directories(
|
||||
|
@ -43,10 +46,10 @@ if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
|||
LTC_NO_MISC
|
||||
LTC_NO_PROTOTYPES
|
||||
|
||||
# Enable Chihiro work
|
||||
CHIHIRO_WORK
|
||||
# Use inline XXHash version
|
||||
XXH_INLINE_ALL
|
||||
)
|
||||
|
||||
|
||||
# Reference: https://docs.microsoft.com/en-us/cpp/build/reference/compiler-options-listed-alphabetically
|
||||
add_compile_options(
|
||||
# Catch synchronous (C++) exceptions only
|
||||
|
@ -62,37 +65,31 @@ if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
|||
endif()
|
||||
|
||||
add_compile_definitions(NOMINMAX
|
||||
|
||||
# Use inline XXHash version
|
||||
XXH_INLINE_ALL
|
||||
)
|
||||
|
||||
file (GLOB RESOURCES
|
||||
|
||||
|
||||
"${CXBXR_ROOT_DIR}/CONTRIBUTORS"
|
||||
"${CXBXR_ROOT_DIR}/COPYING"
|
||||
"${CXBXR_ROOT_DIR}/README.md"
|
||||
"${CXBXR_ROOT_DIR}/src/gui/resource/.editorconfig"
|
||||
"${CXBXR_ROOT_DIR}/src/gui/resource/Cxbx.rc"
|
||||
"${CXBXR_ROOT_DIR}/src/gui/resource/Cxbx-R.ico"
|
||||
"${CXBXR_ROOT_DIR}/src/gui/resource/Logo.bmp"
|
||||
"${CXBXR_ROOT_DIR}/src/gui/resource/Logo-License-CC4.bmp"
|
||||
"${CXBXR_ROOT_DIR}/src/gui/resource/ResCxbx.h"
|
||||
"${CXBXR_ROOT_DIR}/resource/.editorconfig"
|
||||
"${CXBXR_ROOT_DIR}/resource/Cxbx.rc"
|
||||
"${CXBXR_ROOT_DIR}/resource/Cxbx-R.ico"
|
||||
"${CXBXR_ROOT_DIR}/resource/Logo.bmp"
|
||||
"${CXBXR_ROOT_DIR}/resource/Logo-License-CC4.bmp"
|
||||
"${CXBXR_ROOT_DIR}/src/.editorconfig"
|
||||
)
|
||||
|
||||
source_group(TREE ${CXBXR_ROOT_DIR}/src PREFIX header FILES
|
||||
${CXBXR_HEADER_GUIv1}
|
||||
${CXBXR_HEADER_COMMON}
|
||||
${CXBXR_HEADER_EMU}
|
||||
)
|
||||
|
||||
source_group(TREE ${CXBXR_ROOT_DIR}/import PREFIX import FILES
|
||||
${CXBXR_SOURCE_EMU_IMPORT}
|
||||
)
|
||||
|
||||
source_group(TREE ${CXBXR_ROOT_DIR}/src PREFIX source FILES
|
||||
source_group(TREE ${CXBXR_ROOT_DIR}/src PREFIX source FILES
|
||||
${CXBXR_SOURCE_GUIv1}
|
||||
${CXBXR_SOURCE_COMMON}
|
||||
${CXBXR_SOURCE_EMU}
|
||||
)
|
||||
|
||||
source_group(TREE ${CXBXR_ROOT_DIR} FILES ${RESOURCES})
|
||||
|
@ -100,8 +97,10 @@ source_group(TREE ${CXBXR_ROOT_DIR} FILES ${RESOURCES})
|
|||
add_executable(cxbx WIN32 ${RESOURCES}
|
||||
${CXBXR_HEADER_GUIv1}
|
||||
${CXBXR_HEADER_COMMON}
|
||||
${CXBXR_HEADER_EMU}
|
||||
${CXBXR_SOURCE_GUIv1}
|
||||
${CXBXR_SOURCE_COMMON}
|
||||
${CXBXR_SOURCE_EMU}
|
||||
${CXBXR_GIT_VERSION_H}
|
||||
)
|
||||
|
||||
|
@ -111,17 +110,25 @@ if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
|||
# Reference: https://docs.microsoft.com/en-us/cpp/build/reference/linker-options
|
||||
set_target_properties(cxbx PROPERTIES
|
||||
LINK_FLAGS "
|
||||
/NODEFAULTLIB:libcmt \
|
||||
/INCREMENTAL:NO
|
||||
/LARGEADDRESSAWARE
|
||||
/FIXED
|
||||
/SAFESEH:NO
|
||||
/DYNAMICBASE:NO
|
||||
/BASE:0x10000
|
||||
/STACK:65536,65536
|
||||
/NODEFAULTLIB:libcmt
|
||||
/DELAYLOAD:wpcap.dll
|
||||
"
|
||||
LINK_FLAGS_RELEASE "
|
||||
/LTCG \
|
||||
/DEBUG \
|
||||
/LTCG
|
||||
/DEBUG
|
||||
"
|
||||
)
|
||||
|
||||
# Reference: https://docs.microsoft.com/en-us/cpp/build/reference/compiler-options-listed-alphabetically
|
||||
# /Zi = create a PDB file without affecting optimization
|
||||
# /Ob3 = Controls inline expansion of functions.
|
||||
# /Ob2 = Controls inline expansion of functions.
|
||||
# /Oi = Generate intrinsic functions
|
||||
# /Ot = In favor of using fast code than small code
|
||||
# /GL = Whole program optimization
|
||||
|
@ -130,19 +137,19 @@ if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
|||
# /Qpar = Enable automatic parallelize loops in the code
|
||||
|
||||
# Set optimization options for release build
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} \
|
||||
/Zi \
|
||||
/Ob3 \
|
||||
/Oi \
|
||||
/Ot \
|
||||
/GL \
|
||||
\
|
||||
/GS- \
|
||||
/Gy \
|
||||
/Qpar \
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}
|
||||
/Zi
|
||||
/Ob2
|
||||
/Oi
|
||||
/Ot
|
||||
/GL
|
||||
|
||||
/GS-
|
||||
/Gy
|
||||
/Qpar
|
||||
"
|
||||
)
|
||||
|
||||
|
||||
# disable optimization for CxbxKrnl.cpp file
|
||||
set_source_files_properties(
|
||||
${CXBXR_KRNL_CPP} PROPERTIES COMPILE_FLAGS "/Od /GL-"
|
||||
|
@ -150,11 +157,10 @@ if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
|||
endif()
|
||||
|
||||
# Windows libraries
|
||||
set(WINS_LIB
|
||||
set(WINS_LIB
|
||||
legacy_stdio_definitions
|
||||
d3d9
|
||||
d3dcompiler
|
||||
delayimp
|
||||
dinput8
|
||||
dxguid
|
||||
odbc32
|
||||
|
@ -170,36 +176,25 @@ set(WINS_LIB
|
|||
comctl32
|
||||
XINPUT9_1_0
|
||||
Iphlpapi
|
||||
Dwmapi
|
||||
wpcap
|
||||
)
|
||||
|
||||
target_link_libraries(cxbx
|
||||
PUBLIC libXbSymbolDatabase
|
||||
PUBLIC XbSymbolDatabase
|
||||
subhook
|
||||
libtomcrypt
|
||||
SDL2
|
||||
imgui
|
||||
libusb
|
||||
mio::mio_min_winapi
|
||||
|
||||
${WINS_LIB}
|
||||
)
|
||||
|
||||
install(TARGETS ${PROJECT_NAME}
|
||||
RUNTIME DESTINATION bin
|
||||
)
|
||||
|
||||
if(${CMAKE_GENERATOR} MATCHES "Visual Studio ([^9]|[9][0-9])" AND BUILD_CXBXR_DEBUGGER)
|
||||
if(${CMAKE_GENERATOR} MATCHES "Visual Studio ([^9]|[9][0-9])")
|
||||
add_dependencies(cxbx cxbxr-debugger)
|
||||
endif()
|
||||
|
||||
add_dependencies(cxbx cxbxr-ldr cxbxr-emu misc-batch)
|
||||
set(CXBXR_GLEW_DLL "${CXBXR_ROOT_DIR}/import/glew-2.0.0/bin/Release/Win32/glew32.dll")
|
||||
|
||||
# Try to stop cmake from building hlsl files
|
||||
# Which are all currently loaded at runtime only
|
||||
set_source_files_properties(
|
||||
${CXBXR_HEADER_HLSL}
|
||||
PROPERTIES
|
||||
HEADER_FILE_ONLY TRUE
|
||||
VS_TOOL_OVERRIDE "None"
|
||||
# Copy glew32.dll to build type's folder after build.
|
||||
add_custom_command(TARGET cxbx POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CXBXR_GLEW_DLL} $<TARGET_FILE_DIR:cxbx>
|
||||
)
|
||||
|
|
|
@ -1,196 +0,0 @@
|
|||
cmake_minimum_required (VERSION 3.12)
|
||||
project(cxbxr-emu)
|
||||
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
set(CMAKE_CXX_STANDARD 20)
|
||||
|
||||
# Suppress extra stuff from generated solution
|
||||
set(CMAKE_SUPPRESS_REGENERATION true)
|
||||
|
||||
# Force exclude default libraries being included
|
||||
#set(CMAKE_CXX_STANDARD_LIBRARIES "")
|
||||
|
||||
include_directories(
|
||||
"${CXBXR_ROOT_DIR}/src"
|
||||
"${CXBXR_ROOT_DIR}/src/common"
|
||||
"${CXBXR_ROOT_DIR}/src/common/Win32"
|
||||
"${CXBXR_ROOT_DIR}/import/OpenXDK/include"
|
||||
"${CXBXR_ROOT_DIR}/import/DirectX9/include"
|
||||
"${CXBXR_ROOT_DIR}/import/distorm/include"
|
||||
"${CXBXR_ROOT_DIR}/import/glew-2.0.0/include"
|
||||
"${CXBXR_ROOT_DIR}/import/libusb/libusb"
|
||||
"${CXBXR_ROOT_DIR}/import/simpleini"
|
||||
"${CXBXR_ROOT_DIR}/import/winpcap/Include"
|
||||
"${CXBXR_ROOT_DIR}/import/xxHash"
|
||||
)
|
||||
|
||||
link_directories(
|
||||
"${CXBXR_ROOT_DIR}/import/distorm/lib/Win32"
|
||||
"${CXBXR_ROOT_DIR}/import/glew-2.0.0/lib/Release/Win32"
|
||||
"${CXBXR_ROOT_DIR}/import/DirectX9/lib"
|
||||
"${CXBXR_ROOT_DIR}/import/winpcap/Lib"
|
||||
)
|
||||
|
||||
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
||||
add_compile_definitions(
|
||||
_CRT_SECURE_NO_WARNINGS
|
||||
# Windows 7 minimum requirement
|
||||
_WIN32_WINNT=0x0601
|
||||
LTM_DESC
|
||||
USE_LTM
|
||||
LTC_NO_TEST
|
||||
LTC_NO_CIPHERS
|
||||
LTC_NO_HASHES
|
||||
LTC_NO_MACS
|
||||
LTC_NO_PRNGS
|
||||
LTC_NO_MISC
|
||||
LTC_NO_PROTOTYPES
|
||||
|
||||
# Use inline XXHash version
|
||||
XXH_INLINE_ALL
|
||||
|
||||
# Enable Chihiro work
|
||||
CHIHIRO_WORK
|
||||
)
|
||||
add_compile_options(
|
||||
/EHs
|
||||
/MP
|
||||
/GF
|
||||
/arch:SSE2
|
||||
)
|
||||
endif()
|
||||
|
||||
add_compile_definitions(
|
||||
NOMINMAX
|
||||
CXBXR_EMU
|
||||
CXBXR_EMU_EXPORTS
|
||||
)
|
||||
|
||||
file (GLOB RESOURCES
|
||||
"${CXBXR_ROOT_DIR}/CONTRIBUTORS"
|
||||
"${CXBXR_ROOT_DIR}/COPYING"
|
||||
"${CXBXR_ROOT_DIR}/README.md"
|
||||
)
|
||||
|
||||
source_group(TREE ${CXBXR_ROOT_DIR}/import PREFIX import FILES
|
||||
${CXBXR_HEADER_EMU_IMPORT}
|
||||
)
|
||||
|
||||
source_group(TREE ${CXBXR_ROOT_DIR}/src PREFIX header FILES
|
||||
${CXBXR_HEADER_GUIv1}
|
||||
${CXBXR_HEADER_COMMON}
|
||||
${CXBXR_HEADER_EMU}
|
||||
"${CXBXR_ROOT_DIR}/src/emulator/targetver.h"
|
||||
)
|
||||
|
||||
source_group(TREE ${CXBXR_ROOT_DIR}/import PREFIX import FILES
|
||||
${CXBXR_SOURCE_EMU_IMPORT}
|
||||
)
|
||||
|
||||
source_group(TREE ${CXBXR_ROOT_DIR}/src PREFIX source FILES
|
||||
${CXBXR_SOURCE_GUIv1}
|
||||
${CXBXR_SOURCE_COMMON}
|
||||
${CXBXR_SOURCE_EMU}
|
||||
"${CXBXR_ROOT_DIR}/src/emulator/cxbxr-emu.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/emulator/dllmain.cpp"
|
||||
)
|
||||
|
||||
source_group(TREE ${CXBXR_ROOT_DIR} FILES ${RESOURCES})
|
||||
|
||||
add_library(cxbxr-emu SHARED ${RESOURCES}
|
||||
${CXBXR_HEADER_COMMON}
|
||||
${CXBXR_HEADER_EMU_IMPORT}
|
||||
${CXBXR_HEADER_EMU}
|
||||
"${CXBXR_ROOT_DIR}/src/emulator/targetver.h"
|
||||
${CXBXR_SOURCE_COMMON}
|
||||
${CXBXR_SOURCE_EMU_IMPORT}
|
||||
${CXBXR_SOURCE_EMU}
|
||||
${CXBXR_GIT_VERSION_H}
|
||||
"${CXBXR_ROOT_DIR}/src/emulator/cxbxr-emu.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/emulator/dllmain.cpp"
|
||||
)
|
||||
|
||||
# Link and compile flags
|
||||
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
||||
|
||||
set_target_properties(cxbxr-emu PROPERTIES
|
||||
LINK_FLAGS "
|
||||
/INCREMENTAL:NO \
|
||||
/LARGEADDRESSAWARE \
|
||||
/SAFESEH:NO \
|
||||
/STACK:65536,65536 \
|
||||
/NODEFAULTLIB:libcmt \
|
||||
/DELAYLOAD:wpcap.dll \
|
||||
"
|
||||
LINK_FLAGS_RELEASE "
|
||||
/LTCG \
|
||||
/DEBUG \
|
||||
"
|
||||
)
|
||||
|
||||
# Set optimization options for release build
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} \
|
||||
/Zi \
|
||||
/Ob3 \
|
||||
/Oi \
|
||||
/Ot \
|
||||
/GL \
|
||||
\
|
||||
/GS- \
|
||||
/Gy \
|
||||
/Qpar \
|
||||
"
|
||||
)
|
||||
endif()
|
||||
|
||||
# Windows libraries
|
||||
set(WINS_LIB
|
||||
legacy_stdio_definitions
|
||||
d3d9
|
||||
d3dcompiler
|
||||
delayimp
|
||||
dinput8
|
||||
dxguid
|
||||
odbc32
|
||||
odbccp32
|
||||
Shlwapi
|
||||
dxerr9
|
||||
ws2_32
|
||||
dsound
|
||||
winmm
|
||||
ddraw
|
||||
d3dx9
|
||||
dbghelp
|
||||
comctl32
|
||||
XINPUT9_1_0
|
||||
Iphlpapi
|
||||
wpcap
|
||||
)
|
||||
|
||||
target_link_libraries(cxbxr-emu
|
||||
PUBLIC libXbSymbolDatabase
|
||||
subhook
|
||||
libtomcrypt
|
||||
SDL2
|
||||
imgui
|
||||
libusb
|
||||
nv2a_vsh_emulator
|
||||
mio::mio_min_winapi
|
||||
|
||||
${WINS_LIB}
|
||||
)
|
||||
|
||||
install(TARGETS ${PROJECT_NAME}
|
||||
RUNTIME DESTINATION bin
|
||||
)
|
||||
|
||||
add_dependencies(cxbxr-emu cxbxr-ldr misc-batch)
|
||||
|
||||
# Try to stop cmake from building hlsl files
|
||||
# Which are all currently loaded at runtime only
|
||||
set_source_files_properties(
|
||||
${CXBXR_HEADER_HLSL}
|
||||
PROPERTIES
|
||||
HEADER_FILE_ONLY TRUE
|
||||
VS_TOOL_OVERRIDE "None"
|
||||
)
|
|
@ -1,75 +0,0 @@
|
|||
cmake_minimum_required (VERSION 3.12)
|
||||
project(cxbxr-ldr)
|
||||
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
set(CMAKE_CXX_STANDARD 20)
|
||||
|
||||
# Suppress extra stuff from generated solution
|
||||
set(CMAKE_SUPPRESS_REGENERATION true)
|
||||
|
||||
# Force exclude default libraries being included
|
||||
set(CMAKE_CXX_STANDARD_LIBRARIES "")
|
||||
|
||||
# Force set BasicRunTimeChecks to default
|
||||
STRING (REGEX REPLACE "/RTC(su|[1su])" "" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
|
||||
|
||||
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
||||
add_compile_definitions(
|
||||
_CRT_SECURE_NO_WARNINGS
|
||||
)
|
||||
add_compile_options(
|
||||
/sdl-
|
||||
)
|
||||
endif()
|
||||
|
||||
file (GLOB HEADERS
|
||||
"${CXBXR_ROOT_DIR}/src/common/AddressRanges.h"
|
||||
"${CXBXR_ROOT_DIR}/src/common/ReserveAddressRanges.h"
|
||||
"${CXBXR_ROOT_DIR}/src/CxbxVersion.h"
|
||||
"${CXBXR_ROOT_DIR}/src/version.h"
|
||||
)
|
||||
|
||||
file (GLOB SOURCES
|
||||
"${CXBXR_ROOT_DIR}/src/common/AddressRanges.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/common/ReserveAddressRanges.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/CxbxVersion.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/loader/cxbxr-ldr.cpp"
|
||||
)
|
||||
|
||||
source_group(TREE ${CXBXR_ROOT_DIR}/src PREFIX header FILES ${HEADERS})
|
||||
|
||||
source_group(TREE ${CXBXR_ROOT_DIR}/src PREFIX source FILES ${SOURCES})
|
||||
|
||||
add_executable(cxbxr-ldr ${HEADERS} ${SOURCES})
|
||||
|
||||
# Link and compile flags
|
||||
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
||||
|
||||
set_target_properties(cxbxr-ldr PROPERTIES
|
||||
LINK_FLAGS "
|
||||
/LARGEADDRESSAWARE \
|
||||
/FIXED \
|
||||
/DYNAMICBASE:NO \
|
||||
/BASE:0x10000 \
|
||||
/STACK:65536,65536 \
|
||||
/NODEFAULTLIB \
|
||||
/ENTRY:rawMain \
|
||||
"
|
||||
)
|
||||
|
||||
# Set optimization options for release build
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} \
|
||||
/Oi \
|
||||
"
|
||||
)
|
||||
endif()
|
||||
|
||||
target_link_libraries(cxbxr-ldr
|
||||
PUBLIC kernel32.lib
|
||||
)
|
||||
|
||||
install(TARGETS ${PROJECT_NAME}
|
||||
RUNTIME DESTINATION bin
|
||||
)
|
||||
|
||||
add_dependencies(cxbxr-ldr misc-batch)
|
|
@ -1,42 +0,0 @@
|
|||
cmake_minimum_required (VERSION 3.8)
|
||||
project(imgui LANGUAGES CXX)
|
||||
# Since imgui doesn't have CMake, we'll make an interface project here.
|
||||
|
||||
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
||||
add_compile_definitions(
|
||||
_CRT_SECURE_NO_WARNINGS
|
||||
_CRT_NONSTDC_NO_DEPRECATE
|
||||
)
|
||||
endif()
|
||||
|
||||
# Add any defines from imconfig.h file in here without need to edit import file directly.
|
||||
add_compile_definitions(
|
||||
IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS
|
||||
IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS
|
||||
)
|
||||
|
||||
file (GLOB HEADERS
|
||||
"${CXBXR_ROOT_DIR}/import/imgui/imconfig.h"
|
||||
"${CXBXR_ROOT_DIR}/import/imgui/imgui.h"
|
||||
"${CXBXR_ROOT_DIR}/import/imgui/imgui_internal.h"
|
||||
"${CXBXR_ROOT_DIR}/import/imgui/imstb_rectpack.h"
|
||||
"${CXBXR_ROOT_DIR}/import/imgui/imstb_textedit.h"
|
||||
"${CXBXR_ROOT_DIR}/import/imgui/imstb_truetype.h"
|
||||
)
|
||||
|
||||
file (GLOB SOURCES
|
||||
"${CXBXR_ROOT_DIR}/import/imgui/imgui.cpp"
|
||||
"${CXBXR_ROOT_DIR}/import/imgui/imgui_draw.cpp"
|
||||
"${CXBXR_ROOT_DIR}/import/imgui/imgui_tables.cpp"
|
||||
"${CXBXR_ROOT_DIR}/import/imgui/imgui_widgets.cpp"
|
||||
)
|
||||
|
||||
source_group(TREE ${CXBXR_ROOT_DIR}/import/imgui PREFIX header FILES ${HEADERS})
|
||||
|
||||
source_group(TREE ${CXBXR_ROOT_DIR}/import/imgui PREFIX source FILES ${SOURCES})
|
||||
|
||||
add_library(${PROJECT_NAME} ${HEADERS} ${SOURCES})
|
||||
|
||||
target_include_directories(${PROJECT_NAME}
|
||||
PUBLIC "${CXBXR_ROOT_DIR}/import/imgui"
|
||||
)
|
|
@ -12,11 +12,17 @@ if ("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC")
|
|||
endif()
|
||||
|
||||
add_compile_definitions(
|
||||
LTM_DESC
|
||||
LTC_SOURCE
|
||||
LTC_NO_TEST
|
||||
LTC_NO_PROTOTYPES
|
||||
)
|
||||
|
||||
include_directories(
|
||||
"${CXBXR_ROOT_DIR}/import/libtommath"
|
||||
"${CXBXR_ROOT_DIR}/import/libtomcrypt/src/headers"
|
||||
)
|
||||
|
||||
file (GLOB HEADERS
|
||||
"${CXBXR_ROOT_DIR}/import/libtomcrypt/src/headers/tomcrypt.h"
|
||||
"${CXBXR_ROOT_DIR}/import/libtomcrypt/src/headers/tomcrypt_argchk.h"
|
||||
|
@ -455,12 +461,6 @@ source_group(TREE ${CXBXR_ROOT_DIR}/import/libtomcrypt/src PREFIX source FILES $
|
|||
|
||||
add_library(libtomcrypt ${HEADERS} ${SOURCES})
|
||||
|
||||
target_compile_definitions(libtomcrypt PUBLIC LTM_DESC=1)
|
||||
|
||||
target_include_directories(libtomcrypt
|
||||
PUBLIC "${CXBXR_ROOT_DIR}/import/libtomcrypt/src/headers"
|
||||
)
|
||||
|
||||
target_link_libraries(libtomcrypt
|
||||
PUBLIC libtommath
|
||||
|
||||
|
|
|
@ -11,6 +11,11 @@ if ("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC")
|
|||
)
|
||||
endif()
|
||||
|
||||
|
||||
include_directories(
|
||||
"${CXBXR_ROOT_DIR}/import/libtommath"
|
||||
)
|
||||
|
||||
file (GLOB HEADERS
|
||||
"${CXBXR_ROOT_DIR}/import/libtommath/tommath.h"
|
||||
"${CXBXR_ROOT_DIR}/import/libtommath/tommath_class.h"
|
||||
|
@ -165,7 +170,3 @@ source_group(TREE ${CXBXR_ROOT_DIR}/import/libtommath PREFIX header FILES ${HEAD
|
|||
source_group(TREE ${CXBXR_ROOT_DIR}/import/libtommath PREFIX source FILES ${SOURCES})
|
||||
|
||||
add_library(libtommath ${HEADERS} ${SOURCES})
|
||||
|
||||
target_include_directories(libtommath
|
||||
PUBLIC "${CXBXR_ROOT_DIR}/import/libtommath"
|
||||
)
|
||||
|
|
|
@ -1,51 +0,0 @@
|
|||
cmake_minimum_required (VERSION 3.8)
|
||||
project(libusb LANGUAGES CXX)
|
||||
# Since libusb doesn't have CMake, we'll make an interface project here.
|
||||
|
||||
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
||||
add_compile_definitions(
|
||||
_CRT_SECURE_NO_WARNINGS
|
||||
_CRT_NONSTDC_NO_DEPRECATE
|
||||
)
|
||||
endif()
|
||||
|
||||
include_directories(
|
||||
"${CXBXR_ROOT_DIR}/import/libusb/msvc"
|
||||
"${CXBXR_ROOT_DIR}/import/libusb/libusb")
|
||||
|
||||
file (GLOB HEADERS
|
||||
"${CXBXR_ROOT_DIR}/import/libusb/libusb/libusb.h"
|
||||
"${CXBXR_ROOT_DIR}/import/libusb/libusb/libusbi.h"
|
||||
"${CXBXR_ROOT_DIR}/import/libusb/libusb/version.h"
|
||||
"${CXBXR_ROOT_DIR}/import/libusb/libusb/version_nano.h"
|
||||
"${CXBXR_ROOT_DIR}/import/libusb/libusb/msvc/config.h"
|
||||
"${CXBXR_ROOT_DIR}/import/libusb/libusb/os/events_windows.h"
|
||||
"${CXBXR_ROOT_DIR}/import/libusb/libusb/os/threads_windows.h"
|
||||
"${CXBXR_ROOT_DIR}/import/libusb/libusb/os/windows_common.h"
|
||||
"${CXBXR_ROOT_DIR}/import/libusb/libusb/os/windows_usbdk.h"
|
||||
"${CXBXR_ROOT_DIR}/import/libusb/libusb/os/windows_winusb.h"
|
||||
)
|
||||
|
||||
file (GLOB SOURCES
|
||||
"${CXBXR_ROOT_DIR}/import/libusb/libusb/core.c"
|
||||
"${CXBXR_ROOT_DIR}/import/libusb/libusb/descriptor.c"
|
||||
"${CXBXR_ROOT_DIR}/import/libusb/libusb/hotplug.c"
|
||||
"${CXBXR_ROOT_DIR}/import/libusb/libusb/io.c"
|
||||
"${CXBXR_ROOT_DIR}/import/libusb/libusb/strerror.c"
|
||||
"${CXBXR_ROOT_DIR}/import/libusb/libusb/sync.c"
|
||||
"${CXBXR_ROOT_DIR}/import/libusb/libusb/os/events_windows.c"
|
||||
"${CXBXR_ROOT_DIR}/import/libusb/libusb/os/threads_windows.c"
|
||||
"${CXBXR_ROOT_DIR}/import/libusb/libusb/os/windows_common.c"
|
||||
"${CXBXR_ROOT_DIR}/import/libusb/libusb/os/windows_usbdk.c"
|
||||
"${CXBXR_ROOT_DIR}/import/libusb/libusb/os/windows_winusb.c"
|
||||
)
|
||||
|
||||
source_group(TREE ${CXBXR_ROOT_DIR}/import/libusb/libusb PREFIX header FILES ${HEADERS})
|
||||
|
||||
source_group(TREE ${CXBXR_ROOT_DIR}/import/libusb/libusb PREFIX source FILES ${SOURCES})
|
||||
|
||||
add_library(${PROJECT_NAME} ${HEADERS} ${SOURCES})
|
||||
|
||||
target_include_directories(${PROJECT_NAME}
|
||||
PUBLIC "${CXBXR_ROOT_DIR}/import/libusb"
|
||||
)
|
|
@ -1,29 +0,0 @@
|
|||
|
||||
find_package(Git)
|
||||
|
||||
if(Git_FOUND)
|
||||
message("Git found: ${GIT_EXECUTABLE}")
|
||||
|
||||
execute_process(
|
||||
COMMAND git describe --always --tags --first-parent --dirty
|
||||
OUTPUT_VARIABLE _GIT_VERSION
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
|
||||
message("Git version: " ${_GIT_VERSION})
|
||||
else()
|
||||
set(_GIT_VERSION "unknown")
|
||||
endif()
|
||||
|
||||
# Appears to update whenever define has changed.
|
||||
configure_file(
|
||||
"${CMAKE_SOURCE_DIR}/src/version.h.in" "${CMAKE_SOURCE_DIR}/src/version.h" @ONLY
|
||||
NEWLINE_STYLE LF
|
||||
)
|
||||
|
||||
|
||||
message("Runtime Build Directory: ${TargetRunTimeDir}")
|
||||
|
||||
# Copy glew32.dll to build type's folder.
|
||||
set(CXBXR_GLEW_DLL "${CMAKE_SOURCE_DIR}/import/glew-2.0.0/bin/Release/Win32/glew32.dll")
|
||||
file(COPY ${CXBXR_GLEW_DLL} DESTINATION ${TargetRunTimeDir})
|
|
@ -0,0 +1,40 @@
|
|||
cmake_minimum_required (VERSION 3.8)
|
||||
project(vsbc)
|
||||
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
|
||||
# Suppress extra stuff from generated solution
|
||||
set(CMAKE_SUPPRESS_REGENERATION true)
|
||||
|
||||
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
||||
add_compile_definitions(_CRT_SECURE_NO_WARNINGS
|
||||
)
|
||||
endif()
|
||||
|
||||
add_compile_definitions(CXBXVSBC_EXPORTS
|
||||
)
|
||||
|
||||
file (GLOB HEADERS
|
||||
"${CXBXR_ROOT_DIR}/src/vsbc/CxbxVSBC.h"
|
||||
"${CXBXR_ROOT_DIR}/src/vsbc/DlgVirtualSBCFeedback.h"
|
||||
"${CXBXR_ROOT_DIR}/src/vsbc/stdafx.h"
|
||||
"${CXBXR_ROOT_DIR}/src/vsbc/targetver.h"
|
||||
)
|
||||
|
||||
file (GLOB SOURCES
|
||||
"${CXBXR_ROOT_DIR}/src/vsbc/CxbxVSBC.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/vsbc/DlgVirtualSBCFeedback.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/vsbc/dllmain.cpp"
|
||||
"${CXBXR_ROOT_DIR}/src/vsbc/stdafx.cpp"
|
||||
)
|
||||
|
||||
source_group(TREE ${CXBXR_ROOT_DIR}/src/vsbc PREFIX header FILES ${HEADERS})
|
||||
|
||||
source_group(TREE ${CXBXR_ROOT_DIR}/src/vsbc PREFIX source FILES ${SOURCES})
|
||||
|
||||
add_library(vsbc SHARED ${HEADERS} ${SOURCES})
|
||||
|
||||
set_target_properties(vsbc PROPERTIES
|
||||
OUTPUT_NAME CxbxVSBC
|
||||
)
|
Before Width: | Height: | Size: 281 KiB After Width: | Height: | Size: 281 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 166 KiB After Width: | Height: | Size: 166 KiB |
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 33 KiB |
Before Width: | Height: | Size: 188 B After Width: | Height: | Size: 188 B |
52
setup.bat
|
@ -1,26 +1,26 @@
|
|||
@echo off
|
||||
|
||||
REM Cxbx-Reloaded setup script
|
||||
REM
|
||||
REM Depends on git, cmake and Visual Studio being installed.
|
||||
|
||||
echo Pulling latest version from git...
|
||||
REM git clone --recurse-submodules https://github.com/Cxbx-Reloaded/Cxbx-Reloaded/
|
||||
git pull --recurse-submodules
|
||||
|
||||
REM echo Synchronizing submodules...
|
||||
REM git submodule update --init --recursive
|
||||
|
||||
echo Initializing most recent Visual Studio build environment...
|
||||
@call "%VS140COMNTOOLS%vsvars32.bat"
|
||||
|
||||
echo Generating solution...
|
||||
mkdir build
|
||||
cd build
|
||||
REM cmake .. -G "Visual Studio 16 2019" -A Win32
|
||||
cmake .. -A Win32
|
||||
|
||||
echo Building solution...
|
||||
cmake --build . -j %NUMBER_OF_PROCESSORS%
|
||||
|
||||
echo Done! Enjoy using Cxbx-Reloaded!
|
||||
@echo off
|
||||
|
||||
REM CXbx-Reloaded setup script
|
||||
REM
|
||||
REM Depends on git, cmake and Visual Studio being installed.
|
||||
|
||||
echo Pulling lastest version from git...
|
||||
REM git clone --recurse-submodules https://github.com/Cxbx-Reloaded/Cxbx-Reloaded/
|
||||
git pull --recurse-submodules
|
||||
|
||||
REM echo Synchronizing submodules...
|
||||
REM git submodule update --init --recursive
|
||||
|
||||
echo Initializing most recent Visual Studio build environment...
|
||||
@call "%VS140COMNTOOLS%vsvars32.bat"
|
||||
|
||||
echo Generating solution...
|
||||
mkdir build
|
||||
cd build
|
||||
REM cmake .. -G "Visual Studio 16 2019" -A Win32
|
||||
cmake .. -A Win32
|
||||
|
||||
echo Building solution...
|
||||
cmake --build .
|
||||
|
||||
echo Done! Enjoy using Cxbx-Reloaded!
|
|
@ -3,5 +3,5 @@ root = true
|
|||
[*]
|
||||
indent_size = 4
|
||||
trim_trailing_whitespace = true
|
||||
end_of_line = lf
|
||||
end_of_line = crlf
|
||||
insert_final_newline = true
|
||||
|
|
25
src/Cxbx.h
|
@ -27,7 +27,14 @@
|
|||
|
||||
#include <cstdint>
|
||||
|
||||
#define FUNC_EXPORTS __pragma(comment(linker, "/EXPORT:" __FUNCTION__ "=" __FUNCDNAME__))
|
||||
/*! xbaddr is the type of a physical address */
|
||||
typedef uint32_t xbaddr;
|
||||
|
||||
/*! xbnullptr is the type of null pointer address*/
|
||||
#define xbnullptr nullptr
|
||||
|
||||
/*! xbnull is the type of null address or value*/
|
||||
#define xbnull 0
|
||||
|
||||
#ifdef _DEBUG
|
||||
/*! define this to track memory allocations */
|
||||
|
@ -61,14 +68,18 @@ enum DebugMode { DM_NONE, DM_CONSOLE, DM_FILE };
|
|||
/*! debugger enable state */
|
||||
enum DebuggerState { debuggerOff, debuggerOn };
|
||||
|
||||
/*! indicates emulation of a Chihiro system */
|
||||
/*! type of Xbe */
|
||||
enum XbeType { xtRetail, xtDebug, xtChihiro };
|
||||
|
||||
extern XbeType g_XbeType;
|
||||
|
||||
/*! indicates emulation of an Chihiro (arcade, instead of Xbox console) executable */
|
||||
extern bool g_bIsChihiro;
|
||||
|
||||
/*! indicates emulation of a DevKit system */
|
||||
/* Note: Our DevKit emulation lacks the kernel debugging interface and virtual dvd-rom emulator card, so this is actually a Debug Kit */
|
||||
extern bool g_bIsDevKit;
|
||||
/*! indicates emulation of a Debug xbe executable */
|
||||
extern bool g_bIsDebug;
|
||||
|
||||
/*! indicates emulation of a Retail system */
|
||||
/*! indicates emulation of a Retail xbe executable*/
|
||||
extern bool g_bIsRetail;
|
||||
|
||||
/*! indicates ability to save on exit (needed for settings reset) */
|
||||
|
@ -84,4 +95,6 @@ extern volatile bool g_bPrintfOn;
|
|||
#define CxbxSetThreadName(Name)
|
||||
#endif
|
||||
|
||||
#include <filesystem>
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.8" sku=".NETFramework,Version=v4.8"/>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/>
|
||||
</startup>
|
||||
</configuration>
|
||||
|
|
|
@ -13,12 +13,6 @@ add_compile_options(
|
|||
/langversion:6
|
||||
)
|
||||
|
||||
# First, we must define .NET Framework version before include cs_x86's projects.
|
||||
# Which then will pass down version we want unified.
|
||||
set(DOTNET_TARGET_FRAMEWORK_VERSION "v4.8")
|
||||
|
||||
add_subdirectory("${CXBXR_ROOT_DIR}/import/cs_x86" "${CMAKE_BINARY_DIR}/import/cs_x86")
|
||||
|
||||
set(CXBXR_DEBUGGER_SRC_DIR "${CXBXR_ROOT_DIR}/src/CxbxDebugger")
|
||||
|
||||
file (GLOB SOURCES
|
||||
|
@ -43,15 +37,16 @@ file (GLOB SOURCES
|
|||
"${CXBXR_DEBUGGER_SRC_DIR}/DebugOutputManager.cs"
|
||||
"${CXBXR_DEBUGGER_SRC_DIR}/FileEventManager.cs"
|
||||
"${CXBXR_DEBUGGER_SRC_DIR}/FileWatchManager.cs"
|
||||
"${CXBXR_DEBUGGER_SRC_DIR}/IDebugWindow.cs"
|
||||
"${CXBXR_DEBUGGER_SRC_DIR}/CxbxDebuggerInstance.cs"
|
||||
"${CXBXR_DEBUGGER_SRC_DIR}/CxbxDebuggerInstance.Designer.cs"
|
||||
"${CXBXR_DEBUGGER_SRC_DIR}/CxbxDebuggerInstance.resx"
|
||||
"${CXBXR_DEBUGGER_SRC_DIR}/CxbxDebuggerMain.cs"
|
||||
"${CXBXR_DEBUGGER_SRC_DIR}/CxbxDebuggerMain.Designer.cs"
|
||||
"${CXBXR_DEBUGGER_SRC_DIR}/CxbxDebuggerMain.resx"
|
||||
"${CXBXR_DEBUGGER_SRC_DIR}/Form1.cs"
|
||||
"${CXBXR_DEBUGGER_SRC_DIR}/Form1.Designer.cs"
|
||||
"${CXBXR_DEBUGGER_SRC_DIR}/Form1.resx"
|
||||
"${CXBXR_DEBUGGER_SRC_DIR}/PatchManager.cs"
|
||||
"${CXBXR_DEBUGGER_SRC_DIR}/Program.cs"
|
||||
"${CXBXR_DEBUGGER_SRC_DIR}/Properties/AssemblyInfo.cs"
|
||||
"${CXBXR_DEBUGGER_SRC_DIR}/Properties/Resources.Designer.cs"
|
||||
"${CXBXR_DEBUGGER_SRC_DIR}/Properties/Resources.resx"
|
||||
"${CXBXR_DEBUGGER_SRC_DIR}/Properties/Settings.Designer.cs"
|
||||
"${CXBXR_DEBUGGER_SRC_DIR}/Properties/Settings.settings"
|
||||
"${CXBXR_DEBUGGER_SRC_DIR}/Resources/BreakpointDisable_16x_24.bmp"
|
||||
"${CXBXR_DEBUGGER_SRC_DIR}/Resources/BreakpointEnable_16x_24.bmp"
|
||||
"${CXBXR_DEBUGGER_SRC_DIR}/Resources/Pause_16x_24.bmp"
|
||||
|
@ -97,8 +92,10 @@ file (GLOB SOURCES
|
|||
"${CXBXR_DEBUGGER_SRC_DIR}/Win32/Windows/NativeMethods.cs"
|
||||
)
|
||||
|
||||
file (GLOB PROPERTIES
|
||||
"${CXBXR_DEBUGGER_SRC_DIR}/Properties/Settings.settings"
|
||||
csharp_set_windows_forms_properties(
|
||||
"${CXBXR_DEBUGGER_SRC_DIR}/Form1.Designer.cs"
|
||||
"${CXBXR_DEBUGGER_SRC_DIR}/Form1.cs"
|
||||
"${CXBXR_DEBUGGER_SRC_DIR}/Form1.resx"
|
||||
"${CXBXR_DEBUGGER_SRC_DIR}/Properties/AssemblyInfo.cs"
|
||||
"${CXBXR_DEBUGGER_SRC_DIR}/Properties/Resources.Designer.cs"
|
||||
"${CXBXR_DEBUGGER_SRC_DIR}/Properties/Resources.resx"
|
||||
|
@ -106,22 +103,7 @@ file (GLOB PROPERTIES
|
|||
"${CXBXR_DEBUGGER_SRC_DIR}/Properties/Settings.settings"
|
||||
)
|
||||
|
||||
csharp_set_windows_forms_properties(
|
||||
"${CXBXR_DEBUGGER_SRC_DIR}/CxbxDebuggerInstance.cs"
|
||||
"${CXBXR_DEBUGGER_SRC_DIR}/CxbxDebuggerInstance.Designer.cs"
|
||||
"${CXBXR_DEBUGGER_SRC_DIR}/CxbxDebuggerInstance.resx"
|
||||
"${CXBXR_DEBUGGER_SRC_DIR}/CxbxDebuggerMain.Designer.cs"
|
||||
"${CXBXR_DEBUGGER_SRC_DIR}/CxbxDebuggerMain.cs"
|
||||
"${CXBXR_DEBUGGER_SRC_DIR}/CxbxDebuggerMain.resx"
|
||||
)
|
||||
|
||||
csharp_set_designer_cs_properties(
|
||||
${PROPERTIES}
|
||||
)
|
||||
|
||||
set_source_files_properties(
|
||||
"${CXBXR_DEBUGGER_SRC_DIR}/CxbxDebuggerInstance.cs"
|
||||
"${CXBXR_DEBUGGER_SRC_DIR}/CxbxDebuggerMain.cs"
|
||||
set_source_files_properties("${CXBXR_DEBUGGER_SRC_DIR}/Form1.cs"
|
||||
VS_CSHARP_SubType "Form"
|
||||
)
|
||||
|
||||
|
@ -131,21 +113,18 @@ set_source_files_properties("${CXBXR_DEBUGGER_SRC_DIR}/RicherTextBox.cs"
|
|||
|
||||
source_group(TREE ${CXBXR_ROOT_DIR} FILES ${SOURCES})
|
||||
|
||||
add_executable(cxbxr-debugger WIN32 ${SOURCES} ${PROPERTIES} #Test WIN32 like cxbx does if doesn't need compile option set
|
||||
add_executable(cxbxr-debugger WIN32 ${SOURCES} #Test WIN32 like cxbx does if doesn't need compile option set
|
||||
)
|
||||
|
||||
set_target_properties(cxbxr-debugger PROPERTIES
|
||||
set_target_properties(cxbxr-debugger PROPERTIES
|
||||
VS_DOTNET_REFERENCES
|
||||
"Microsoft.CSharp;System;System.Core;System.Data;System.Data.DataSetExtensions;System.Deployment;System.Drawing;System.Windows;System.Windows.Forms;System.Xml;System.Xml.Linq;System.Net.Http"
|
||||
VS_GLOBAL_ApplicationIcon "${CXBXR_ROOT_DIR}/src/gui/resource/Cxbx-R.ico"
|
||||
|
||||
VS_GLOBAL_ApplicationIcon "${CXBXR_ROOT_DIR}/resource/Cxbx-R.ico"
|
||||
|
||||
VS_GLOBAL_ROOTNAMESPACE "CxbxDebugger"
|
||||
|
||||
DOTNET_TARGET_FRAMEWORK_VERSION ${DOTNET_TARGET_FRAMEWORK_VERSION}
|
||||
|
||||
)
|
||||
|
||||
set_property(TARGET cxbxr-debugger PROPERTY DOTNET_TARGET_FRAMEWORK_VERSION "v4.5")
|
||||
|
||||
target_link_libraries(cxbxr-debugger cs_x86)
|
||||
|
||||
install(TARGETS ${PROJECT_NAME}
|
||||
RUNTIME DESTINATION bin
|
||||
)
|
||||
|
|
|
@ -1,201 +0,0 @@
|
|||
namespace CxbxDebugger
|
||||
{
|
||||
partial class CxbxDebuggerMain
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CxbxDebuggerMain));
|
||||
this.menuStrip = new System.Windows.Forms.MenuStrip();
|
||||
this.fileMenu = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.debugToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.miStartDebugging = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.miSuspend = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.miResume = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.windowsMenu = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolTip = new System.Windows.Forms.ToolTip(this.components);
|
||||
this.statusStrip1 = new System.Windows.Forms.StatusStrip();
|
||||
this.lblStatusDeprecate = new System.Windows.Forms.ToolStripStatusLabel();
|
||||
this.lblStatus = new System.Windows.Forms.ToolStripStatusLabel();
|
||||
this.menuStrip.SuspendLayout();
|
||||
this.statusStrip1.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// menuStrip
|
||||
//
|
||||
this.menuStrip.ImageScalingSize = new System.Drawing.Size(24, 24);
|
||||
this.menuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.fileMenu,
|
||||
this.debugToolStripMenuItem,
|
||||
this.windowsMenu});
|
||||
this.menuStrip.Location = new System.Drawing.Point(0, 0);
|
||||
this.menuStrip.MdiWindowListItem = this.windowsMenu;
|
||||
this.menuStrip.Name = "menuStrip";
|
||||
this.menuStrip.Padding = new System.Windows.Forms.Padding(4, 1, 0, 1);
|
||||
this.menuStrip.Size = new System.Drawing.Size(734, 24);
|
||||
this.menuStrip.TabIndex = 0;
|
||||
this.menuStrip.Text = "MenuStrip";
|
||||
//
|
||||
// fileMenu
|
||||
//
|
||||
this.fileMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.exitToolStripMenuItem});
|
||||
this.fileMenu.ImageTransparentColor = System.Drawing.SystemColors.ActiveBorder;
|
||||
this.fileMenu.Name = "fileMenu";
|
||||
this.fileMenu.Size = new System.Drawing.Size(37, 22);
|
||||
this.fileMenu.Text = "&File";
|
||||
//
|
||||
// exitToolStripMenuItem
|
||||
//
|
||||
this.exitToolStripMenuItem.Name = "exitToolStripMenuItem";
|
||||
this.exitToolStripMenuItem.ShortcutKeyDisplayString = "Alt+F4";
|
||||
this.exitToolStripMenuItem.Size = new System.Drawing.Size(135, 22);
|
||||
this.exitToolStripMenuItem.Text = "E&xit";
|
||||
this.exitToolStripMenuItem.Click += new System.EventHandler(this.ExitToolsStripMenuItem_Click);
|
||||
//
|
||||
// debugToolStripMenuItem
|
||||
//
|
||||
this.debugToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.miStartDebugging,
|
||||
this.toolStripMenuItem1,
|
||||
this.miSuspend,
|
||||
this.miResume});
|
||||
this.debugToolStripMenuItem.Name = "debugToolStripMenuItem";
|
||||
this.debugToolStripMenuItem.Size = new System.Drawing.Size(54, 22);
|
||||
this.debugToolStripMenuItem.Text = "Debug";
|
||||
//
|
||||
// miStartDebugging
|
||||
//
|
||||
this.miStartDebugging.Image = global::CxbxDebugger.Properties.Resources.run;
|
||||
this.miStartDebugging.ImageTransparentColor = System.Drawing.Color.Magenta;
|
||||
this.miStartDebugging.Name = "miStartDebugging";
|
||||
this.miStartDebugging.ShortcutKeyDisplayString = "F5";
|
||||
this.miStartDebugging.Size = new System.Drawing.Size(117, 22);
|
||||
this.miStartDebugging.Text = "&Start";
|
||||
this.miStartDebugging.Click += new System.EventHandler(this.startDebuggingToolStripMenuItem_Click);
|
||||
//
|
||||
// toolStripMenuItem1
|
||||
//
|
||||
this.toolStripMenuItem1.Name = "toolStripMenuItem1";
|
||||
this.toolStripMenuItem1.Size = new System.Drawing.Size(114, 6);
|
||||
//
|
||||
// miSuspend
|
||||
//
|
||||
this.miSuspend.Image = global::CxbxDebugger.Properties.Resources.pause;
|
||||
this.miSuspend.ImageTransparentColor = System.Drawing.Color.Magenta;
|
||||
this.miSuspend.Name = "miSuspend";
|
||||
this.miSuspend.Size = new System.Drawing.Size(117, 22);
|
||||
this.miSuspend.Text = "&Break";
|
||||
this.miSuspend.Click += new System.EventHandler(this.suspendToolStripMenuItem_Click);
|
||||
//
|
||||
// miResume
|
||||
//
|
||||
this.miResume.Image = global::CxbxDebugger.Properties.Resources.run;
|
||||
this.miResume.ImageTransparentColor = System.Drawing.Color.Magenta;
|
||||
this.miResume.Name = "miResume";
|
||||
this.miResume.Size = new System.Drawing.Size(117, 22);
|
||||
this.miResume.Text = "&Resume";
|
||||
this.miResume.Click += new System.EventHandler(this.resumeToolStripMenuItem_Click);
|
||||
//
|
||||
// windowsMenu
|
||||
//
|
||||
this.windowsMenu.Name = "windowsMenu";
|
||||
this.windowsMenu.Size = new System.Drawing.Size(68, 22);
|
||||
this.windowsMenu.Text = "&Windows";
|
||||
//
|
||||
// statusStrip1
|
||||
//
|
||||
this.statusStrip1.ImageScalingSize = new System.Drawing.Size(24, 24);
|
||||
this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.lblStatusDeprecate,
|
||||
this.lblStatus});
|
||||
this.statusStrip1.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;
|
||||
this.statusStrip1.Location = new System.Drawing.Point(0, 339);
|
||||
this.statusStrip1.Name = "statusStrip1";
|
||||
this.statusStrip1.Padding = new System.Windows.Forms.Padding(1, 0, 9, 0);
|
||||
this.statusStrip1.Size = new System.Drawing.Size(734, 61);
|
||||
this.statusStrip1.TabIndex = 2;
|
||||
this.statusStrip1.Text = "statusStrip1";
|
||||
//
|
||||
// lblStatusDeprecate
|
||||
//
|
||||
this.lblStatusDeprecate.BackColor = System.Drawing.Color.Yellow;
|
||||
this.lblStatusDeprecate.Name = "lblStatusDeprecate";
|
||||
this.lblStatusDeprecate.Size = new System.Drawing.Size(723, 15);
|
||||
this.lblStatusDeprecate.Spring = true;
|
||||
this.lblStatusDeprecate.Text = "WARNING: cxbxr-debugger will eventually be removed from upstream branch.";
|
||||
this.lblStatusDeprecate.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
//
|
||||
// lblStatus
|
||||
//
|
||||
this.lblStatus.Name = "lblStatus";
|
||||
this.lblStatus.Size = new System.Drawing.Size(723, 15);
|
||||
this.lblStatus.Text = "Ready";
|
||||
//
|
||||
// CxbxDebuggerMain
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
|
||||
this.ClientSize = new System.Drawing.Size(734, 361);
|
||||
this.Controls.Add(this.statusStrip1);
|
||||
this.Controls.Add(this.menuStrip);
|
||||
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||
this.IsMdiContainer = true;
|
||||
this.MainMenuStrip = this.menuStrip;
|
||||
this.Name = "CxbxDebuggerMain";
|
||||
this.Text = "cxbx-debugger";
|
||||
this.menuStrip.ResumeLayout(false);
|
||||
this.menuStrip.PerformLayout();
|
||||
this.statusStrip1.ResumeLayout(false);
|
||||
this.statusStrip1.PerformLayout();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
private System.Windows.Forms.MenuStrip menuStrip;
|
||||
private System.Windows.Forms.ToolStripMenuItem fileMenu;
|
||||
private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem windowsMenu;
|
||||
private System.Windows.Forms.ToolTip toolTip;
|
||||
private System.Windows.Forms.ToolStripMenuItem debugToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem miStartDebugging;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem1;
|
||||
private System.Windows.Forms.ToolStripMenuItem miSuspend;
|
||||
private System.Windows.Forms.ToolStripMenuItem miResume;
|
||||
private System.Windows.Forms.StatusStrip statusStrip1;
|
||||
private System.Windows.Forms.ToolStripStatusLabel lblStatusDeprecate;
|
||||
private System.Windows.Forms.ToolStripStatusLabel lblStatus;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1,156 +0,0 @@
|
|||
// Written by x1nixmzeng for the Cxbx-Reloaded project
|
||||
//
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace CxbxDebugger
|
||||
{
|
||||
public partial class CxbxDebuggerMain : Form, IDebugContainerWindow
|
||||
{
|
||||
public CxbxDebuggerMain(string[] args)
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
var StartupArgs = new string[args.Length - 1];
|
||||
Array.Copy(args, 1, StartupArgs, 0, args.Length - 1);
|
||||
|
||||
// Setup session without initially running the game
|
||||
AddDebugSession(StartupArgs, false);
|
||||
|
||||
#if FALSE
|
||||
AddDebugSession(new string[] { }, false);
|
||||
#endif
|
||||
}
|
||||
|
||||
private void ExitToolsStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
Close();
|
||||
}
|
||||
|
||||
private void startDebuggingToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (ActiveMdiChild is IDebugWindow)
|
||||
{
|
||||
(ActiveMdiChild as IDebugWindow).StartSession();
|
||||
}
|
||||
}
|
||||
|
||||
private void suspendToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (ActiveMdiChild is IDebugWindow)
|
||||
{
|
||||
(ActiveMdiChild as IDebugWindow).SuspendSession();
|
||||
}
|
||||
}
|
||||
|
||||
private void resumeToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (ActiveMdiChild is IDebugWindow)
|
||||
{
|
||||
(ActiveMdiChild as IDebugWindow).ResumeSession();
|
||||
}
|
||||
}
|
||||
|
||||
public void AddDebugSession(string[] Arguments, bool StartAutomatically)
|
||||
{
|
||||
var SessionWindow = CreateNewSessionWindow(Arguments);
|
||||
|
||||
if (StartAutomatically)
|
||||
{
|
||||
SessionWindow.StartSession();
|
||||
}
|
||||
}
|
||||
|
||||
public void ReportGameTitle(string GameTitle)
|
||||
{
|
||||
Text = $"cxbx-debugger ({GameTitle})";
|
||||
}
|
||||
|
||||
private IDebugWindow CreateNewSessionWindow(string[] Arguments)
|
||||
{
|
||||
var childForm = new CxbxDebuggerInstance(this, Arguments);
|
||||
childForm.WindowState = FormWindowState.Maximized;
|
||||
childForm.TextChanged += (sender, e) => { OnSessionWindowRenamed(sender as Form); };
|
||||
childForm.Activated += (sender, e) => { OnSessionWindowActivated(sender as IDebugWindow); };
|
||||
childForm.Show();
|
||||
|
||||
return childForm;
|
||||
}
|
||||
|
||||
private void OnSessionWindowActivated(IDebugWindow child)
|
||||
{
|
||||
var state = child.GetDebugStateInfo();
|
||||
RefreshStatusText(state);
|
||||
}
|
||||
|
||||
private void OnSessionWindowRenamed(Form form)
|
||||
{
|
||||
// https://stackoverflow.com/questions/1347734/mdi-window-list-not-updating-child-title-bar-texts
|
||||
|
||||
ActivateMdiChild(null);
|
||||
ActivateMdiChild(form);
|
||||
}
|
||||
|
||||
public void ReportStatus(IDebugWindow Window, DebugState State, string Detail)
|
||||
{
|
||||
if (Window == ActiveMdiChild)
|
||||
{
|
||||
RefreshStatusText(new DebugStateInfo() { State = State, Detail = Detail });
|
||||
}
|
||||
}
|
||||
|
||||
private void RefreshStatusText(DebugStateInfo stateInfo)
|
||||
{
|
||||
var stateString = "";
|
||||
var canSuspend = false;
|
||||
var canResume = false;
|
||||
var canRun = false;
|
||||
|
||||
switch (stateInfo.State)
|
||||
{
|
||||
case DebugState.Unknown:
|
||||
stateString = "No valid Xbe was loaded. Invalid session.";
|
||||
break;
|
||||
|
||||
case DebugState.Idle:
|
||||
stateString = "Ready";
|
||||
canRun = true;
|
||||
break;
|
||||
|
||||
case DebugState.Suspended:
|
||||
stateString = "Suspended";
|
||||
canResume = true;
|
||||
break;
|
||||
|
||||
case DebugState.Running:
|
||||
stateString = "Running";
|
||||
canSuspend = true;
|
||||
break;
|
||||
|
||||
case DebugState.Terminated:
|
||||
stateString = "Terminated";
|
||||
//canRun = true; // Uncomment to allow restarted sessions
|
||||
break;
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(stateInfo.Detail))
|
||||
{
|
||||
stateString += $" - {stateInfo.Detail}";
|
||||
}
|
||||
|
||||
miStartDebugging.Enabled = canRun;
|
||||
miSuspend.Enabled = canSuspend;
|
||||
miResume.Enabled = canResume;
|
||||
lblStatus.Text = stateString;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -9,7 +9,6 @@ using WinDebug = VsChromium.Core.Win32.Debugging;
|
|||
using System.Runtime.InteropServices;
|
||||
using WinLowLevel = LowLevelDesign.Win32.Windows.NativeMethods;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace CxbxDebugger
|
||||
{
|
||||
|
@ -33,18 +32,13 @@ namespace CxbxDebugger
|
|||
string[] args = new string[] { };
|
||||
string Target = "";
|
||||
|
||||
public string TargetPath
|
||||
{
|
||||
get { return Target; }
|
||||
}
|
||||
|
||||
RunState State = RunState.NotLaunched;
|
||||
|
||||
DebuggerMessages.DebuggerInit InitParams = new DebuggerMessages.DebuggerInit();
|
||||
|
||||
DebuggerInstance DebugInstance;
|
||||
|
||||
List<IDebuggerSessionEvents> SessionEvents = new List<IDebuggerSessionEvents>();
|
||||
List<IDebuggerGeneralEvents> GeneralEvents = new List<IDebuggerGeneralEvents>();
|
||||
List<IDebuggerProcessEvents> ProcessEvents = new List<IDebuggerProcessEvents>();
|
||||
List<IDebuggerThreadEvents> ThreadEvents = new List<IDebuggerThreadEvents>();
|
||||
List<IDebuggerModuleEvents> ModuleEvents = new List<IDebuggerModuleEvents>();
|
||||
|
@ -77,29 +71,30 @@ namespace CxbxDebugger
|
|||
Init();
|
||||
}
|
||||
|
||||
public Debugger(string[] launchArgs)
|
||||
public Debugger(string[] x_args)
|
||||
{
|
||||
Init();
|
||||
|
||||
// Copy XBE path without the quotes
|
||||
var loadArg = Array.FindIndex(launchArgs, x => x == "/load");
|
||||
if (loadArg != -1)
|
||||
if (x_args == null)
|
||||
return;
|
||||
|
||||
// Copy all arguments
|
||||
args = x_args;
|
||||
|
||||
// Keep quotes for any strings that may contain spaces
|
||||
int scratch;
|
||||
for (int i = 0; i < args.Length; ++i)
|
||||
{
|
||||
Target = launchArgs[loadArg + 1].Trim(new char[] { '"' });
|
||||
if (int.TryParse(args[i], out scratch) == false)
|
||||
{
|
||||
args[i] = string.Format("\"{0}\"", args[i]);
|
||||
}
|
||||
}
|
||||
|
||||
args = new string[launchArgs.Length];
|
||||
|
||||
for (int i = 0; i < launchArgs.Length; ++i)
|
||||
// Copy XBE path without the quotes
|
||||
if(x_args.Length > 2)
|
||||
{
|
||||
var arg = launchArgs[i];
|
||||
|
||||
if (arg.Contains(" "))
|
||||
{
|
||||
arg = string.Format($"\"{arg}\"");
|
||||
}
|
||||
|
||||
args[i] = arg;
|
||||
Target = x_args[2].Trim(new char[] { '"' });
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -109,7 +104,7 @@ namespace CxbxDebugger
|
|||
bpStall.Set();
|
||||
|
||||
// Remove all events
|
||||
SessionEvents.Clear();
|
||||
GeneralEvents.Clear();
|
||||
ProcessEvents.Clear();
|
||||
ThreadEvents.Clear();
|
||||
ModuleEvents.Clear();
|
||||
|
@ -178,19 +173,14 @@ namespace CxbxDebugger
|
|||
if (CanLaunch() == false)
|
||||
throw new Exception("Unable to launch in this state");
|
||||
|
||||
if (args.Length == 0)
|
||||
return false;
|
||||
|
||||
var DebugCreationFlags =
|
||||
WinProcesses.ProcessCreationFlags.DEBUG_ONLY_THIS_PROCESS |
|
||||
WinProcesses.ProcessCreationFlags.CREATE_NEW_CONSOLE;
|
||||
|
||||
var launchArgs = new StringBuilder(string.Join(" ", args));
|
||||
|
||||
|
||||
bool bRet = WinProcesses.NativeMethods.CreateProcess
|
||||
(
|
||||
null,
|
||||
launchArgs,
|
||||
new StringBuilder(string.Join(" ", args)),
|
||||
null,
|
||||
null,
|
||||
false,
|
||||
|
@ -206,15 +196,11 @@ namespace CxbxDebugger
|
|||
// Store so they can be marshalled and closed correctly
|
||||
hProcess = new WinProcesses.SafeProcessHandle(stProcessInfo.hProcess);
|
||||
hThread = new WinProcesses.SafeThreadHandle(stProcessInfo.hThread);
|
||||
|
||||
|
||||
bContinue = true;
|
||||
|
||||
State = RunState.Running;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new Exception($"Failed to launch loader '{launchArgs}'");
|
||||
}
|
||||
|
||||
return bRet;
|
||||
}
|
||||
|
@ -322,7 +308,10 @@ namespace CxbxDebugger
|
|||
Thread.StartAddress = DebugInfo.lpStartAddress;
|
||||
Thread.ThreadBase = DebugInfo.lpThreadLocalBase;
|
||||
|
||||
Parallel.ForEach(ThreadEvents, Event => Event.OnThreadCreate(Thread));
|
||||
foreach (IDebuggerThreadEvents Event in ThreadEvents )
|
||||
{
|
||||
Event.OnThreadCreate(Thread);
|
||||
}
|
||||
}
|
||||
|
||||
private void HandleExitThread(WinDebug.DEBUG_EVENT DebugEvent)
|
||||
|
@ -339,7 +328,10 @@ namespace CxbxDebugger
|
|||
{
|
||||
uint ExitCode = DebugInfo.dwExitCode;
|
||||
|
||||
Parallel.ForEach(ThreadEvents, Event => Event.OnThreadExit(TargetThread, ExitCode));
|
||||
foreach (IDebuggerThreadEvents Event in ThreadEvents)
|
||||
{
|
||||
Event.OnThreadExit(TargetThread, ExitCode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -372,17 +364,26 @@ namespace CxbxDebugger
|
|||
DebugInstance = new DebuggerInstance(Process);
|
||||
RegisterEventInterfaces(DebugInstance);
|
||||
|
||||
Parallel.ForEach(ProcessEvents, Event => Event.OnProcessCreate(Process));
|
||||
foreach (IDebuggerProcessEvents Event in ProcessEvents)
|
||||
{
|
||||
Event.OnProcessCreate(Process);
|
||||
}
|
||||
|
||||
Parallel.ForEach(ThreadEvents, Event => Event.OnThreadCreate(MainThread));
|
||||
|
||||
foreach (IDebuggerThreadEvents Event in ThreadEvents)
|
||||
{
|
||||
Event.OnThreadCreate(MainThread);
|
||||
}
|
||||
|
||||
var XboxModule = new DebuggerModule();
|
||||
|
||||
XboxModule.Path = Target;
|
||||
XboxModule.ImageBase = DebugInfo.lpBaseOfImage;
|
||||
XboxModule.Core = true;
|
||||
|
||||
Parallel.ForEach(ModuleEvents, Event => Event.OnModuleLoaded(XboxModule));
|
||||
foreach (IDebuggerModuleEvents Event in ModuleEvents)
|
||||
{
|
||||
Event.OnModuleLoaded(XboxModule);
|
||||
}
|
||||
}
|
||||
|
||||
private void HandleExitProcess(WinDebug.DEBUG_EVENT DebugEvent)
|
||||
|
@ -399,7 +400,10 @@ namespace CxbxDebugger
|
|||
|
||||
if (TargetProcess != null)
|
||||
{
|
||||
Parallel.ForEach(ProcessEvents, Event => Event.OnProcessExit(TargetProcess, ExitCode));
|
||||
foreach (IDebuggerProcessEvents Event in ProcessEvents)
|
||||
{
|
||||
Event.OnProcessExit(TargetProcess, ExitCode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -417,7 +421,10 @@ namespace CxbxDebugger
|
|||
Module.Path = ResolveProcessPath(DebugInfo.hFile);
|
||||
Module.ImageBase = DebugInfo.lpBaseOfDll;
|
||||
|
||||
Parallel.ForEach(ModuleEvents, Event => Event.OnModuleLoaded(Module));
|
||||
foreach (IDebuggerModuleEvents Event in ModuleEvents)
|
||||
{
|
||||
Event.OnModuleLoaded(Module);
|
||||
}
|
||||
}
|
||||
|
||||
private void HandleUnloadDll(WinDebug.DEBUG_EVENT DebugEvent)
|
||||
|
@ -433,7 +440,10 @@ namespace CxbxDebugger
|
|||
|
||||
if (TargetModule != null)
|
||||
{
|
||||
Parallel.ForEach(ModuleEvents, Event => Event.OnModuleUnloaded(TargetModule));
|
||||
foreach (IDebuggerModuleEvents Event in ModuleEvents)
|
||||
{
|
||||
Event.OnModuleUnloaded(TargetModule);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -443,7 +453,10 @@ namespace CxbxDebugger
|
|||
|
||||
string debugString = ReadProcessString(DebugInfo.lpDebugStringData, DebugInfo.nDebugStringLength, DebugInfo.fUnicode == 1);
|
||||
|
||||
Parallel.ForEach(OutputEvents, Event => Event.OnDebugOutput(debugString));
|
||||
foreach(IDebuggerOutputEvents Event in OutputEvents)
|
||||
{
|
||||
Event.OnDebugOutput(debugString);
|
||||
}
|
||||
}
|
||||
|
||||
private void HandleException(WinDebug.DEBUG_EVENT DebugEvent)
|
||||
|
@ -464,28 +477,12 @@ namespace CxbxDebugger
|
|||
}
|
||||
break;
|
||||
|
||||
case ExceptionCode.PrivilegedInstruction:
|
||||
{
|
||||
// Seeing this frequently called in Win10
|
||||
|
||||
ContinueStatus = WinDebug.CONTINUE_STATUS.DBG_EXCEPTION_NOT_HANDLED;
|
||||
}
|
||||
break;
|
||||
|
||||
case ExceptionCode.StatusHandleNotClosable:
|
||||
{
|
||||
// Seeing this frequently called in Win10
|
||||
|
||||
ContinueStatus = WinDebug.CONTINUE_STATUS.DBG_EXCEPTION_NOT_HANDLED;
|
||||
}
|
||||
break;
|
||||
|
||||
case (ExceptionCode)DebuggerMessages.ReportType.OVERRIDE_EXCEPTION:
|
||||
{
|
||||
var Thread = DebugInstance.MainProcess.FindThread((uint)DebugEvent.dwThreadId);
|
||||
if (Thread != null)
|
||||
{
|
||||
var Query = DebuggerMessages.GetExceptionHandledQuery(Thread, new DebuggerMessages.DataProcessor(DebugInfo.ExceptionRecord.ExceptionInformation));
|
||||
var Query = DebuggerMessages.GetExceptionHandledQuery(Thread, DebugInfo.ExceptionRecord.ExceptionInformation);
|
||||
|
||||
bool Handled = false;
|
||||
foreach (IDebuggerExceptionEvents Event in ExceptionEvents)
|
||||
|
@ -504,7 +501,7 @@ namespace CxbxDebugger
|
|||
var Thread = DebugInstance.MainProcess.FindThread((uint)DebugEvent.dwThreadId);
|
||||
if (Thread != null)
|
||||
{
|
||||
var Report = DebuggerMessages.GetHLECacheReport(Thread, new DebuggerMessages.DataProcessor(DebugInfo.ExceptionRecord.ExceptionInformation));
|
||||
var Report = DebuggerMessages.GetHLECacheReport(Thread, DebugInfo.ExceptionRecord.ExceptionInformation);
|
||||
SetupHLECacheProvider(Report.FileName);
|
||||
}
|
||||
}
|
||||
|
@ -515,7 +512,7 @@ namespace CxbxDebugger
|
|||
var Thread = DebugInstance.MainProcess.FindThread((uint)DebugEvent.dwThreadId);
|
||||
if (Thread != null)
|
||||
{
|
||||
var Report = DebuggerMessages.GetKernelPatchReport(Thread, new DebuggerMessages.DataProcessor(DebugInfo.ExceptionRecord.ExceptionInformation));
|
||||
var Report = DebuggerMessages.GetKernelPatchReport(Thread, DebugInfo.ExceptionRecord.ExceptionInformation);
|
||||
|
||||
KernelSymbolProvider.AddKernelSymbolFromMessage(Report);
|
||||
}
|
||||
|
@ -527,9 +524,12 @@ namespace CxbxDebugger
|
|||
var Thread = DebugInstance.MainProcess.FindThread((uint)DebugEvent.dwThreadId);
|
||||
if (Thread != null)
|
||||
{
|
||||
var Report = DebuggerMessages.GetFileOpenedReport(Thread, new DebuggerMessages.DataProcessor(DebugInfo.ExceptionRecord.ExceptionInformation));
|
||||
var Report = DebuggerMessages.GetFileOpenedReport(Thread, DebugInfo.ExceptionRecord.ExceptionInformation);
|
||||
|
||||
Parallel.ForEach(FileEvents, Event => Event.OnFileOpened(Report));
|
||||
foreach (IDebuggerFileEvents Event in FileEvents)
|
||||
{
|
||||
Event.OnFileOpened(Report);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -539,9 +539,12 @@ namespace CxbxDebugger
|
|||
var Thread = DebugInstance.MainProcess.FindThread((uint)DebugEvent.dwThreadId);
|
||||
if (Thread != null)
|
||||
{
|
||||
var Report = DebuggerMessages.GetFileReadReport(Thread, new DebuggerMessages.DataProcessor(DebugInfo.ExceptionRecord.ExceptionInformation));
|
||||
var Report = DebuggerMessages.GetFileReadReport(Thread, DebugInfo.ExceptionRecord.ExceptionInformation);
|
||||
|
||||
Parallel.ForEach(FileEvents, Event => Event.OnFileRead(Report));
|
||||
foreach (IDebuggerFileEvents Event in FileEvents)
|
||||
{
|
||||
Event.OnFileRead(Report);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -551,9 +554,12 @@ namespace CxbxDebugger
|
|||
var Thread = DebugInstance.MainProcess.FindThread((uint)DebugEvent.dwThreadId);
|
||||
if (Thread != null)
|
||||
{
|
||||
var Report = DebuggerMessages.GetFileWriteReport(Thread, new DebuggerMessages.DataProcessor(DebugInfo.ExceptionRecord.ExceptionInformation));
|
||||
var Report = DebuggerMessages.GetFileWriteReport(Thread, DebugInfo.ExceptionRecord.ExceptionInformation);
|
||||
|
||||
Parallel.ForEach(FileEvents, Event => Event.OnFileWrite(Report));
|
||||
foreach (IDebuggerFileEvents Event in FileEvents)
|
||||
{
|
||||
Event.OnFileWrite(Report);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -563,10 +569,13 @@ namespace CxbxDebugger
|
|||
var Thread = DebugInstance.MainProcess.FindThread((uint)DebugEvent.dwThreadId);
|
||||
if (Thread != null)
|
||||
{
|
||||
var Report = DebuggerMessages.GetFileClosedReport(Thread, new DebuggerMessages.DataProcessor(DebugInfo.ExceptionRecord.ExceptionInformation));
|
||||
var Report = DebuggerMessages.GetFileClosedReport(Thread, DebugInfo.ExceptionRecord.ExceptionInformation);
|
||||
if (Report != null)
|
||||
{
|
||||
Parallel.ForEach(FileEvents, Event => Event.OnFileClosed(Report));
|
||||
foreach (IDebuggerFileEvents Event in FileEvents)
|
||||
{
|
||||
Event.OnFileClosed(Report);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -577,23 +586,14 @@ namespace CxbxDebugger
|
|||
var Thread = DebugInstance.MainProcess.FindThread((uint)DebugEvent.dwThreadId);
|
||||
if (Thread != null)
|
||||
{
|
||||
var Report = DebuggerMessages.GetDebuggerInitReport(Thread, new DebuggerMessages.DataProcessor(DebugInfo.ExceptionRecord.ExceptionInformation));
|
||||
var Report = DebuggerMessages.GetDebuggerInitReport(Thread, DebugInfo.ExceptionRecord.ExceptionInformation);
|
||||
|
||||
InitParams = Report;
|
||||
|
||||
Parallel.ForEach(SessionEvents, Event => Event.OnDebugTitleLoaded(InitParams.Title));
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case (ExceptionCode)DebuggerMessages.ReportType.DEBUGGER_NEW_TARGET:
|
||||
{
|
||||
var Thread = DebugInstance.MainProcess.FindThread((uint)DebugEvent.dwThreadId);
|
||||
if (Thread != null)
|
||||
{
|
||||
var Report = DebuggerMessages.GetDebuggerNewTargetReport(Thread, new DebuggerMessages.DataProcessor(DebugInfo.ExceptionRecord.ExceptionInformation));
|
||||
|
||||
Parallel.ForEach(SessionEvents, Event => Event.OnDebugTargetChanged(Report.CommandLine));
|
||||
foreach (IDebuggerGeneralEvents Event in GeneralEvents)
|
||||
{
|
||||
Event.OnDebugTitleLoaded(InitParams.Title);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -603,7 +603,7 @@ namespace CxbxDebugger
|
|||
var Thread = DebugInstance.MainProcess.FindThread((uint)DebugEvent.dwThreadId);
|
||||
if (Thread != null)
|
||||
{
|
||||
var Report = DebuggerMessages.GetMSVCThreadName(Thread, new DebuggerMessages.DataProcessor(DebugInfo.ExceptionRecord.ExceptionInformation));
|
||||
var Report = DebuggerMessages.GetMSVCThreadName(Thread, DebugInfo.ExceptionRecord.ExceptionInformation);
|
||||
if(Report != null)
|
||||
{
|
||||
// Resolve the ThreadId of an invalid ID to the current thread name
|
||||
|
@ -618,7 +618,10 @@ namespace CxbxDebugger
|
|||
// Update the resolved thread name
|
||||
ResolvedThread.DebugName = Report.Name;
|
||||
|
||||
Parallel.ForEach(ThreadEvents, Event => Event.OnThreadNamed(Thread));
|
||||
foreach (IDebuggerThreadEvents Event in ThreadEvents)
|
||||
{
|
||||
Event.OnThreadNamed(Thread);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -636,7 +639,10 @@ namespace CxbxDebugger
|
|||
|
||||
bpStall.Reset();
|
||||
|
||||
Parallel.ForEach(ExceptionEvents, Event => Event.OnBreakpoint(Thread, BpAddr, BpCode, FirstChance));
|
||||
foreach (IDebuggerExceptionEvents Event in ExceptionEvents)
|
||||
{
|
||||
Event.OnBreakpoint(Thread, BpAddr, BpCode, FirstChance);
|
||||
}
|
||||
|
||||
bpStall.WaitOne();
|
||||
}
|
||||
|
@ -663,7 +669,10 @@ namespace CxbxDebugger
|
|||
WinDebug.DEBUG_EVENT DbgEvt = new WinDebug.DEBUG_EVENT();
|
||||
ContinueStatus = WinDebug.CONTINUE_STATUS.DBG_CONTINUE;
|
||||
|
||||
Parallel.ForEach(SessionEvents, Event => Event.OnDebugStart());
|
||||
foreach (IDebuggerGeneralEvents Event in GeneralEvents)
|
||||
{
|
||||
Event.OnDebugStart();
|
||||
}
|
||||
|
||||
// Loop until told to stop
|
||||
while (bContinue == true)
|
||||
|
@ -720,7 +729,10 @@ namespace CxbxDebugger
|
|||
|
||||
State = RunState.Ended;
|
||||
|
||||
Parallel.ForEach(SessionEvents, Event => Event.OnDebugEnd());
|
||||
foreach (IDebuggerGeneralEvents Event in GeneralEvents)
|
||||
{
|
||||
Event.OnDebugEnd();
|
||||
}
|
||||
}
|
||||
|
||||
public DebuggerSymbol ResolveSymbol(uint Address)
|
||||
|
@ -740,8 +752,8 @@ namespace CxbxDebugger
|
|||
|
||||
public void RegisterEventInterfaces(object EventClass)
|
||||
{
|
||||
IDebuggerSessionEvents SessionListener = EventClass as IDebuggerSessionEvents;
|
||||
if(SessionListener != null ) SessionEvents.Add(SessionListener);
|
||||
IDebuggerGeneralEvents GeneralListener = EventClass as IDebuggerGeneralEvents;
|
||||
if(GeneralListener != null ) GeneralEvents.Add(GeneralListener);
|
||||
|
||||
IDebuggerProcessEvents ProcessListener = EventClass as IDebuggerProcessEvents;
|
||||
if (ProcessListener != null) ProcessEvents.Add(ProcessListener);
|
||||
|
|
|
@ -5,12 +5,11 @@ using System;
|
|||
|
||||
namespace CxbxDebugger
|
||||
{
|
||||
public interface IDebuggerSessionEvents
|
||||
public interface IDebuggerGeneralEvents
|
||||
{
|
||||
void OnDebugStart();
|
||||
void OnDebugEnd();
|
||||
void OnDebugTitleLoaded(string Title);
|
||||
void OnDebugTargetChanged(string CommandLine);
|
||||
}
|
||||
|
||||
public interface IDebuggerProcessEvents
|
||||
|
|
|
@ -9,20 +9,15 @@ namespace CxbxDebugger
|
|||
{
|
||||
public enum ReportType : uint
|
||||
{
|
||||
HLECACHE_FILE = 0x1000,
|
||||
HLECACHE_FILE = 0x00deed00,
|
||||
KERNEL_PATCH = 0x00deed01,
|
||||
FILE_OPENED = 0x00deed02,
|
||||
FILE_READ = 0x00deed03,
|
||||
FILE_CLOSED = 0x00deed04,
|
||||
DEBUGGER_INIT = 0x00deed05,
|
||||
FILE_WRITE = 0x00deed06,
|
||||
|
||||
KERNEL_PATCH = 0x2000,
|
||||
|
||||
FILE_OPENED = 0x3000,
|
||||
|
||||
FILE_READ = 0x3001,
|
||||
FILE_WRITE = 0x3002,
|
||||
FILE_CLOSED = 0x3003,
|
||||
|
||||
DEBUGGER_INIT = 0x4000,
|
||||
DEBUGGER_NEW_TARGET = 0x4001,
|
||||
|
||||
OVERRIDE_EXCEPTION = 0x5000,
|
||||
OVERRIDE_EXCEPTION = 0x00ceed01,
|
||||
|
||||
// Exception code from https://msdn.microsoft.com/en-us/library/xcb2z8hs.aspx
|
||||
MS_VC_EXCEPTION = 0x406D1388,
|
||||
|
@ -34,38 +29,22 @@ namespace CxbxDebugger
|
|||
WCHAR,
|
||||
};
|
||||
|
||||
public class DataProcessor
|
||||
{
|
||||
uint[] SourceData;
|
||||
uint SourceIndex;
|
||||
|
||||
public DataProcessor(uint[] Data)
|
||||
{
|
||||
SourceData = Data;
|
||||
SourceIndex = 0;
|
||||
}
|
||||
|
||||
public uint Pop()
|
||||
{
|
||||
return SourceData[SourceIndex++];
|
||||
}
|
||||
}
|
||||
|
||||
public class HLECache
|
||||
{
|
||||
public string FileName { get; set; }
|
||||
}
|
||||
|
||||
public static HLECache GetHLECacheReport(DebuggerThread Context, DataProcessor Data)
|
||||
public static HLECache GetHLECacheReport(DebuggerThread Context, uint[] Data)
|
||||
{
|
||||
HLECache Report = new HLECache();
|
||||
|
||||
var Type = (StringType)Data.Pop();
|
||||
StringType Type = (StringType)Data[0];
|
||||
|
||||
if (Type != StringType.CHAR)
|
||||
throw new Exception("GetHLECacheReport expects a string message");
|
||||
|
||||
var Length = Data.Pop(); ;
|
||||
var MessagePtr = new IntPtr(Data.Pop());
|
||||
uint Length = Data[1];
|
||||
IntPtr MessagePtr = new IntPtr(Data[2]);
|
||||
|
||||
Report.FileName = Context.OwningProcess.ReadString(MessagePtr, Length);
|
||||
|
||||
|
@ -78,19 +57,20 @@ namespace CxbxDebugger
|
|||
public IntPtr Address { get; set; }
|
||||
}
|
||||
|
||||
public static KernelPatch GetKernelPatchReport(DebuggerThread Context, DataProcessor Data)
|
||||
public static KernelPatch GetKernelPatchReport(DebuggerThread Context, uint[] Data)
|
||||
{
|
||||
KernelPatch Report = new KernelPatch();
|
||||
|
||||
var Type = (StringType)Data.Pop();
|
||||
StringType Type = (StringType)Data[0];
|
||||
|
||||
if (Type != StringType.CHAR)
|
||||
throw new Exception("GetKernelPatchReport expects a string message");
|
||||
|
||||
var Length = Data.Pop();
|
||||
var MessagePtr = new IntPtr(Data.Pop());
|
||||
uint Length = Data[1];
|
||||
IntPtr MessagePtr = new IntPtr(Data[2]);
|
||||
|
||||
Report.Name = Context.OwningProcess.ReadString(MessagePtr, Length);
|
||||
Report.Address = new IntPtr(Data.Pop());
|
||||
Report.Address = new IntPtr(Data[3]);
|
||||
|
||||
return Report;
|
||||
}
|
||||
|
@ -102,21 +82,23 @@ namespace CxbxDebugger
|
|||
public bool Succeeded { get; set; }
|
||||
}
|
||||
|
||||
public static FileOpened GetFileOpenedReport(DebuggerThread Context, DataProcessor Data)
|
||||
public static FileOpened GetFileOpenedReport(DebuggerThread Context, uint[] Data)
|
||||
{
|
||||
FileOpened Report = new FileOpened();
|
||||
|
||||
Report.Handle = new IntPtr(Data.Pop());
|
||||
Report.Handle = new IntPtr(Data[0]);
|
||||
|
||||
StringType Type = (StringType)Data[1];
|
||||
|
||||
var Type = (StringType)Data.Pop();
|
||||
if (Type != StringType.WCHAR)
|
||||
throw new Exception("GetFileOpenedReport expects a widestring message");
|
||||
|
||||
var Length = Data.Pop();
|
||||
var MessagePtr = new IntPtr(Data.Pop());
|
||||
uint Length = Data[2];
|
||||
IntPtr MessagePtr = new IntPtr(Data[3]);
|
||||
|
||||
Report.FileName = Context.OwningProcess.ReadWString(MessagePtr, Length);
|
||||
Report.Succeeded = Data.Pop() != 0;
|
||||
|
||||
Report.Succeeded = Data[4] != 0;
|
||||
|
||||
return Report;
|
||||
}
|
||||
|
@ -128,13 +110,13 @@ namespace CxbxDebugger
|
|||
public uint Offset { get; set; }
|
||||
}
|
||||
|
||||
public static FileRead GetFileReadReport(DebuggerThread Context, DataProcessor Data)
|
||||
public static FileRead GetFileReadReport(DebuggerThread Context, uint[] Data)
|
||||
{
|
||||
FileRead Report = new FileRead();
|
||||
|
||||
Report.Handle = new IntPtr(Data.Pop());
|
||||
Report.Length = Data.Pop();
|
||||
Report.Offset = Data.Pop();
|
||||
Report.Handle = new IntPtr(Data[0]);
|
||||
Report.Length = Data[1];
|
||||
Report.Offset = Data[2];
|
||||
|
||||
return Report;
|
||||
}
|
||||
|
@ -146,13 +128,13 @@ namespace CxbxDebugger
|
|||
public uint Offset { get; set; }
|
||||
}
|
||||
|
||||
public static FileWrite GetFileWriteReport(DebuggerThread Context, DataProcessor Data)
|
||||
public static FileWrite GetFileWriteReport(DebuggerThread Context, uint[] Data)
|
||||
{
|
||||
FileWrite Report = new FileWrite();
|
||||
|
||||
Report.Handle = new IntPtr(Data.Pop());
|
||||
Report.Length = Data.Pop();
|
||||
Report.Offset = Data.Pop();
|
||||
Report.Handle = new IntPtr(Data[0]);
|
||||
Report.Length = Data[1];
|
||||
Report.Offset = Data[2];
|
||||
|
||||
return Report;
|
||||
}
|
||||
|
@ -162,20 +144,18 @@ namespace CxbxDebugger
|
|||
public IntPtr Handle { get; set; }
|
||||
}
|
||||
|
||||
public static FileClosed GetFileClosedReport(DebuggerThread Context, DataProcessor Data)
|
||||
public static FileClosed GetFileClosedReport(DebuggerThread Context, uint[] Data)
|
||||
{
|
||||
// TODO: Restructure this library
|
||||
uint InvalidHandle = (uint)VsChromium.Core.Win32.Handles.NativeMethods.INVALID_HANDLE_VALUE;
|
||||
|
||||
var Handle = Data.Pop();
|
||||
|
||||
// Skip invalid file handles
|
||||
if (Handle == InvalidHandle)
|
||||
if (Data[0] == InvalidHandle)
|
||||
return null;
|
||||
|
||||
FileClosed Report = new FileClosed();
|
||||
|
||||
Report.Handle = new IntPtr(Handle);
|
||||
Report.Handle = new IntPtr(Data[0]);
|
||||
|
||||
return Report;
|
||||
}
|
||||
|
@ -189,78 +169,59 @@ namespace CxbxDebugger
|
|||
public IntPtr ParameterBase { get; set; }
|
||||
}
|
||||
|
||||
public static ExceptionHandledQuery GetExceptionHandledQuery(DebuggerThread Context, DataProcessor Data)
|
||||
public static ExceptionHandledQuery GetExceptionHandledQuery(DebuggerThread Context, uint[] Data)
|
||||
{
|
||||
ExceptionHandledQuery Query = new ExceptionHandledQuery();
|
||||
|
||||
Query.ReponseAddr = new IntPtr(Data.Pop());
|
||||
Query.ExceptionAddress = Data.Pop();
|
||||
Query.ExceptionCode = Data.Pop();
|
||||
Query.ParameterCount = Data.Pop();
|
||||
Query.ParameterBase = new IntPtr(Data.Pop());
|
||||
Query.ReponseAddr = new IntPtr(Data[0]);
|
||||
Query.ExceptionAddress = Data[1];
|
||||
Query.ExceptionCode = Data[2];
|
||||
Query.ParameterCount = Data[3];
|
||||
Query.ParameterBase = new IntPtr(Data[4]);
|
||||
|
||||
return Query;
|
||||
}
|
||||
|
||||
public class DebuggerInit
|
||||
{
|
||||
public uint TitleID { get; set; }
|
||||
public string Title { get; set; }
|
||||
}
|
||||
|
||||
public static DebuggerInit GetDebuggerInitReport(DebuggerThread Context, DataProcessor Data)
|
||||
public static DebuggerInit GetDebuggerInitReport(DebuggerThread Context, uint[] Data)
|
||||
{
|
||||
DebuggerInit Report = new DebuggerInit();
|
||||
|
||||
StringType Type = (StringType)Data.Pop();
|
||||
Report.TitleID = Data[0];
|
||||
|
||||
StringType Type = (StringType)Data[1];
|
||||
|
||||
if (Type != StringType.CHAR)
|
||||
throw new Exception("GetDebuggerInitReport expects a string message");
|
||||
|
||||
uint Length = Data.Pop();
|
||||
IntPtr MessagePtr = new IntPtr(Data.Pop());
|
||||
uint Length = Data[2];
|
||||
IntPtr MessagePtr = new IntPtr(Data[3]);
|
||||
|
||||
Report.Title = Context.OwningProcess.ReadString(MessagePtr, Length);
|
||||
|
||||
return Report;
|
||||
}
|
||||
|
||||
public class DebuggerNewTarget
|
||||
{
|
||||
public string CommandLine { get; set; }
|
||||
}
|
||||
|
||||
public static DebuggerNewTarget GetDebuggerNewTargetReport(DebuggerThread Context, DataProcessor Data)
|
||||
{
|
||||
var Report = new DebuggerNewTarget();
|
||||
|
||||
StringType Type = (StringType)Data.Pop();
|
||||
|
||||
if (Type != StringType.CHAR)
|
||||
throw new Exception("GetDebuggerInitReport expects a string message");
|
||||
|
||||
uint Length = Data.Pop();
|
||||
IntPtr MessagePtr = new IntPtr(Data.Pop());
|
||||
|
||||
Report.CommandLine = Context.OwningProcess.ReadString(MessagePtr, Length);
|
||||
|
||||
return Report;
|
||||
}
|
||||
|
||||
public class MSVCThreadName
|
||||
{
|
||||
public string Name { get; set; }
|
||||
public uint ThreadId { get; set; }
|
||||
}
|
||||
|
||||
public static MSVCThreadName GetMSVCThreadName(DebuggerThread Context, DataProcessor Data)
|
||||
public static MSVCThreadName GetMSVCThreadName(DebuggerThread Context, uint[] Data)
|
||||
{
|
||||
var Type = Data.Pop();
|
||||
uint Type = Data[0];
|
||||
if (Type != 0x1000)
|
||||
return null;
|
||||
|
||||
string ReportName = "";
|
||||
|
||||
IntPtr MessagePtr = new IntPtr(Data.Pop());
|
||||
IntPtr MessagePtr = new IntPtr(Data[1]);
|
||||
if (MessagePtr != IntPtr.Zero)
|
||||
{
|
||||
ReportName = Context.OwningProcess.ReadString(MessagePtr);
|
||||
|
@ -269,7 +230,7 @@ namespace CxbxDebugger
|
|||
MSVCThreadName Report = new MSVCThreadName();
|
||||
|
||||
Report.Name = ReportName;
|
||||
Report.ThreadId = Data.Pop();
|
||||
Report.ThreadId = Data[2];
|
||||
|
||||
return Report;
|
||||
}
|
||||
|
|
|
@ -114,12 +114,6 @@ namespace CxbxDebugger
|
|||
if (ebp == 0 || ReturnAddr == ebp)
|
||||
break;
|
||||
|
||||
if ((ReturnAddr & 0x80000000) != 0)
|
||||
break;
|
||||
|
||||
if ((ebp & 0x80000000) != 0)
|
||||
break;
|
||||
|
||||
CallstackCache.AddFrame(new DebuggerStackFrame(new IntPtr(ReturnAddr), new IntPtr(ebp)));
|
||||
}
|
||||
while (CallstackCache.CanCollect);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
namespace CxbxDebugger
|
||||
{
|
||||
partial class CxbxDebuggerInstance
|
||||
partial class Form1
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
|
@ -28,21 +28,22 @@
|
|||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CxbxDebuggerInstance));
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
|
||||
this.lbConsole = new System.Windows.Forms.ListBox();
|
||||
this.toolStrip1 = new System.Windows.Forms.ToolStrip();
|
||||
this.btnStart = new System.Windows.Forms.ToolStripButton();
|
||||
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.btnSuspend = new System.Windows.Forms.ToolStripButton();
|
||||
this.btnResume = new System.Windows.Forms.ToolStripButton();
|
||||
this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.toolStripLabel1 = new System.Windows.Forms.ToolStripLabel();
|
||||
this.cbThreads = new System.Windows.Forms.ToolStripComboBox();
|
||||
this.toolStripLabel2 = new System.Windows.Forms.ToolStripLabel();
|
||||
this.cbFrames = new System.Windows.Forms.ToolStripComboBox();
|
||||
this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.statusBar = new System.Windows.Forms.StatusStrip();
|
||||
this.lblStatus = new System.Windows.Forms.ToolStripStatusLabel();
|
||||
this.tabContainer = new System.Windows.Forms.TabControl();
|
||||
this.tabSummary = new System.Windows.Forms.TabPage();
|
||||
this.linkLabel3 = new System.Windows.Forms.LinkLabel();
|
||||
this.linkLabel2 = new System.Windows.Forms.LinkLabel();
|
||||
this.linkLabel1 = new System.Windows.Forms.LinkLabel();
|
||||
this.label9 = new System.Windows.Forms.Label();
|
||||
this.label7 = new System.Windows.Forms.Label();
|
||||
this.tabDisassembly = new System.Windows.Forms.TabPage();
|
||||
this.splitContainer2 = new System.Windows.Forms.SplitContainer();
|
||||
this.btnToMemory = new System.Windows.Forms.Button();
|
||||
|
@ -51,6 +52,7 @@
|
|||
this.btnGo = new System.Windows.Forms.Button();
|
||||
this.label6 = new System.Windows.Forms.Label();
|
||||
this.cbDisAddr = new System.Windows.Forms.ComboBox();
|
||||
this.txDisassembly = new CxbxDebugger.RicherTextBox();
|
||||
this.tabBreakpoints = new System.Windows.Forms.TabPage();
|
||||
this.splitContainer3 = new System.Windows.Forms.SplitContainer();
|
||||
this.groupBox4 = new System.Windows.Forms.GroupBox();
|
||||
|
@ -110,11 +112,10 @@
|
|||
this.lbDebug = new System.Windows.Forms.ListBox();
|
||||
this.diagSaveMemory = new System.Windows.Forms.SaveFileDialog();
|
||||
this.diagBrowseCT = new System.Windows.Forms.OpenFileDialog();
|
||||
this.txDisassembly = new CxbxDebugger.RicherTextBox();
|
||||
this.toolStrip1.SuspendLayout();
|
||||
this.tableLayoutPanel3.SuspendLayout();
|
||||
this.statusBar.SuspendLayout();
|
||||
this.tabContainer.SuspendLayout();
|
||||
this.tabSummary.SuspendLayout();
|
||||
this.tabDisassembly.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit();
|
||||
this.splitContainer2.Panel1.SuspendLayout();
|
||||
|
@ -157,33 +158,73 @@
|
|||
//
|
||||
this.lbConsole.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.lbConsole.FormattingEnabled = true;
|
||||
this.lbConsole.Location = new System.Drawing.Point(3, 271);
|
||||
this.lbConsole.Location = new System.Drawing.Point(3, 231);
|
||||
this.lbConsole.Name = "lbConsole";
|
||||
this.lbConsole.ScrollAlwaysVisible = true;
|
||||
this.lbConsole.Size = new System.Drawing.Size(728, 62);
|
||||
this.lbConsole.Size = new System.Drawing.Size(728, 51);
|
||||
this.lbConsole.TabIndex = 2;
|
||||
//
|
||||
// toolStrip1
|
||||
//
|
||||
this.toolStrip1.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;
|
||||
this.toolStrip1.ImageScalingSize = new System.Drawing.Size(24, 24);
|
||||
this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.btnStart,
|
||||
this.toolStripSeparator1,
|
||||
this.btnSuspend,
|
||||
this.btnResume,
|
||||
this.toolStripSeparator2,
|
||||
this.toolStripLabel1,
|
||||
this.cbThreads,
|
||||
this.toolStripLabel2,
|
||||
this.cbFrames});
|
||||
this.toolStrip1.Location = new System.Drawing.Point(0, 0);
|
||||
this.toolStrip1.Name = "toolStrip1";
|
||||
this.toolStrip1.Padding = new System.Windows.Forms.Padding(0, 0, 2, 0);
|
||||
this.toolStrip1.RenderMode = System.Windows.Forms.ToolStripRenderMode.Professional;
|
||||
this.toolStrip1.Size = new System.Drawing.Size(734, 25);
|
||||
this.toolStrip1.TabIndex = 7;
|
||||
this.toolStrip1.Text = "toolStrip1";
|
||||
//
|
||||
// btnStart
|
||||
//
|
||||
this.btnStart.Image = global::CxbxDebugger.Properties.Resources.run;
|
||||
this.btnStart.ImageTransparentColor = System.Drawing.Color.Magenta;
|
||||
this.btnStart.Name = "btnStart";
|
||||
this.btnStart.Size = new System.Drawing.Size(51, 22);
|
||||
this.btnStart.Text = "Start";
|
||||
this.btnStart.Click += new System.EventHandler(this.toolStripButton1_Click);
|
||||
//
|
||||
// toolStripSeparator1
|
||||
//
|
||||
this.toolStripSeparator1.Name = "toolStripSeparator1";
|
||||
this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25);
|
||||
//
|
||||
// btnSuspend
|
||||
//
|
||||
this.btnSuspend.Image = global::CxbxDebugger.Properties.Resources.pause;
|
||||
this.btnSuspend.ImageTransparentColor = System.Drawing.Color.Magenta;
|
||||
this.btnSuspend.Name = "btnSuspend";
|
||||
this.btnSuspend.Size = new System.Drawing.Size(72, 22);
|
||||
this.btnSuspend.Text = "Suspend";
|
||||
this.btnSuspend.Click += new System.EventHandler(this.toolStripButton2_Click);
|
||||
//
|
||||
// btnResume
|
||||
//
|
||||
this.btnResume.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
|
||||
this.btnResume.ImageTransparentColor = System.Drawing.Color.Magenta;
|
||||
this.btnResume.Name = "btnResume";
|
||||
this.btnResume.Size = new System.Drawing.Size(53, 22);
|
||||
this.btnResume.Text = "Resume";
|
||||
this.btnResume.Click += new System.EventHandler(this.toolStripButton3_Click);
|
||||
//
|
||||
// toolStripSeparator2
|
||||
//
|
||||
this.toolStripSeparator2.Name = "toolStripSeparator2";
|
||||
this.toolStripSeparator2.Size = new System.Drawing.Size(6, 25);
|
||||
//
|
||||
// toolStripLabel1
|
||||
//
|
||||
this.toolStripLabel1.Name = "toolStripLabel1";
|
||||
this.toolStripLabel1.Size = new System.Drawing.Size(46, 22);
|
||||
this.toolStripLabel1.Size = new System.Drawing.Size(47, 22);
|
||||
this.toolStripLabel1.Text = "Thread:";
|
||||
//
|
||||
// cbThreads
|
||||
|
@ -203,28 +244,45 @@
|
|||
//
|
||||
this.cbFrames.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.cbFrames.Name = "cbFrames";
|
||||
this.cbFrames.Size = new System.Drawing.Size(135, 25);
|
||||
this.cbFrames.Size = new System.Drawing.Size(200, 25);
|
||||
this.cbFrames.SelectedIndexChanged += new System.EventHandler(this.cbFrames_SelectedIndexChanged);
|
||||
//
|
||||
// tableLayoutPanel3
|
||||
//
|
||||
this.tableLayoutPanel3.ColumnCount = 1;
|
||||
this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.tableLayoutPanel3.Controls.Add(this.statusBar, 0, 2);
|
||||
this.tableLayoutPanel3.Controls.Add(this.tabContainer, 0, 0);
|
||||
this.tableLayoutPanel3.Controls.Add(this.lbConsole, 0, 1);
|
||||
this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.tableLayoutPanel3.Location = new System.Drawing.Point(0, 25);
|
||||
this.tableLayoutPanel3.Name = "tableLayoutPanel3";
|
||||
this.tableLayoutPanel3.RowCount = 2;
|
||||
this.tableLayoutPanel3.RowCount = 3;
|
||||
this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 80F));
|
||||
this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20F));
|
||||
this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
|
||||
this.tableLayoutPanel3.Size = new System.Drawing.Size(734, 336);
|
||||
this.tableLayoutPanel3.Size = new System.Drawing.Size(734, 306);
|
||||
this.tableLayoutPanel3.TabIndex = 9;
|
||||
//
|
||||
// statusBar
|
||||
//
|
||||
this.statusBar.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.statusBar.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.lblStatus});
|
||||
this.statusBar.Location = new System.Drawing.Point(0, 285);
|
||||
this.statusBar.Name = "statusBar";
|
||||
this.statusBar.Size = new System.Drawing.Size(734, 21);
|
||||
this.statusBar.TabIndex = 10;
|
||||
this.statusBar.Text = "statusStrip1";
|
||||
//
|
||||
// lblStatus
|
||||
//
|
||||
this.lblStatus.Name = "lblStatus";
|
||||
this.lblStatus.Size = new System.Drawing.Size(39, 16);
|
||||
this.lblStatus.Text = "Ready";
|
||||
//
|
||||
// tabContainer
|
||||
//
|
||||
this.tabContainer.Controls.Add(this.tabSummary);
|
||||
this.tabContainer.Controls.Add(this.tabDisassembly);
|
||||
this.tabContainer.Controls.Add(this.tabBreakpoints);
|
||||
this.tabContainer.Controls.Add(this.tabWatch);
|
||||
|
@ -236,82 +294,16 @@
|
|||
this.tabContainer.Multiline = true;
|
||||
this.tabContainer.Name = "tabContainer";
|
||||
this.tabContainer.SelectedIndex = 0;
|
||||
this.tabContainer.Size = new System.Drawing.Size(728, 262);
|
||||
this.tabContainer.Size = new System.Drawing.Size(728, 222);
|
||||
this.tabContainer.TabIndex = 3;
|
||||
//
|
||||
// tabSummary
|
||||
//
|
||||
this.tabSummary.Controls.Add(this.linkLabel3);
|
||||
this.tabSummary.Controls.Add(this.linkLabel2);
|
||||
this.tabSummary.Controls.Add(this.linkLabel1);
|
||||
this.tabSummary.Controls.Add(this.label9);
|
||||
this.tabSummary.Controls.Add(this.label7);
|
||||
this.tabSummary.Location = new System.Drawing.Point(4, 22);
|
||||
this.tabSummary.Name = "tabSummary";
|
||||
this.tabSummary.Padding = new System.Windows.Forms.Padding(3, 3, 3, 3);
|
||||
this.tabSummary.Size = new System.Drawing.Size(654, 318);
|
||||
this.tabSummary.TabIndex = 6;
|
||||
this.tabSummary.Text = "Summary";
|
||||
this.tabSummary.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// linkLabel3
|
||||
//
|
||||
this.linkLabel3.AutoSize = true;
|
||||
this.linkLabel3.Location = new System.Drawing.Point(11, 112);
|
||||
this.linkLabel3.Name = "linkLabel3";
|
||||
this.linkLabel3.Size = new System.Drawing.Size(89, 13);
|
||||
this.linkLabel3.TabIndex = 5;
|
||||
this.linkLabel3.TabStop = true;
|
||||
this.linkLabel3.Text = "View disassembly";
|
||||
this.linkLabel3.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel3_LinkClicked);
|
||||
//
|
||||
// linkLabel2
|
||||
//
|
||||
this.linkLabel2.AutoSize = true;
|
||||
this.linkLabel2.Location = new System.Drawing.Point(11, 85);
|
||||
this.linkLabel2.Name = "linkLabel2";
|
||||
this.linkLabel2.Size = new System.Drawing.Size(69, 13);
|
||||
this.linkLabel2.TabIndex = 4;
|
||||
this.linkLabel2.TabStop = true;
|
||||
this.linkLabel2.Text = "View memory";
|
||||
this.linkLabel2.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel2_LinkClicked);
|
||||
//
|
||||
// linkLabel1
|
||||
//
|
||||
this.linkLabel1.AutoSize = true;
|
||||
this.linkLabel1.Location = new System.Drawing.Point(11, 60);
|
||||
this.linkLabel1.Name = "linkLabel1";
|
||||
this.linkLabel1.Size = new System.Drawing.Size(95, 13);
|
||||
this.linkLabel1.TabIndex = 3;
|
||||
this.linkLabel1.TabStop = true;
|
||||
this.linkLabel1.Text = "View file resources";
|
||||
this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked);
|
||||
//
|
||||
// label9
|
||||
//
|
||||
this.label9.AutoSize = true;
|
||||
this.label9.Location = new System.Drawing.Point(9, 35);
|
||||
this.label9.Name = "label9";
|
||||
this.label9.Size = new System.Drawing.Size(268, 13);
|
||||
this.label9.TabIndex = 1;
|
||||
this.label9.Text = "To get started, select Debug->Start from the main menu";
|
||||
//
|
||||
// label7
|
||||
//
|
||||
this.label7.AutoSize = true;
|
||||
this.label7.Location = new System.Drawing.Point(11, 6);
|
||||
this.label7.Name = "label7";
|
||||
this.label7.Size = new System.Drawing.Size(155, 13);
|
||||
this.label7.TabIndex = 0;
|
||||
this.label7.Text = "Welcome to the cxbx-debugger";
|
||||
//
|
||||
// tabDisassembly
|
||||
//
|
||||
this.tabDisassembly.Controls.Add(this.splitContainer2);
|
||||
this.tabDisassembly.Location = new System.Drawing.Point(4, 22);
|
||||
this.tabDisassembly.Name = "tabDisassembly";
|
||||
this.tabDisassembly.Padding = new System.Windows.Forms.Padding(3, 3, 3, 3);
|
||||
this.tabDisassembly.Size = new System.Drawing.Size(654, 318);
|
||||
this.tabDisassembly.Padding = new System.Windows.Forms.Padding(3);
|
||||
this.tabDisassembly.Size = new System.Drawing.Size(720, 196);
|
||||
this.tabDisassembly.TabIndex = 0;
|
||||
this.tabDisassembly.Text = "Disassembly";
|
||||
this.tabDisassembly.UseVisualStyleBackColor = true;
|
||||
|
@ -337,14 +329,14 @@
|
|||
// splitContainer2.Panel2
|
||||
//
|
||||
this.splitContainer2.Panel2.Controls.Add(this.txDisassembly);
|
||||
this.splitContainer2.Size = new System.Drawing.Size(648, 312);
|
||||
this.splitContainer2.Size = new System.Drawing.Size(714, 190);
|
||||
this.splitContainer2.SplitterDistance = 34;
|
||||
this.splitContainer2.TabIndex = 2;
|
||||
//
|
||||
// btnToMemory
|
||||
//
|
||||
this.btnToMemory.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.btnToMemory.Location = new System.Drawing.Point(386, 3);
|
||||
this.btnToMemory.Location = new System.Drawing.Point(452, 3);
|
||||
this.btnToMemory.Name = "btnToMemory";
|
||||
this.btnToMemory.Size = new System.Drawing.Size(119, 23);
|
||||
this.btnToMemory.TabIndex = 4;
|
||||
|
@ -355,7 +347,7 @@
|
|||
// btnNext
|
||||
//
|
||||
this.btnNext.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.btnNext.Location = new System.Drawing.Point(581, 3);
|
||||
this.btnNext.Location = new System.Drawing.Point(647, 3);
|
||||
this.btnNext.Name = "btnNext";
|
||||
this.btnNext.Size = new System.Drawing.Size(64, 23);
|
||||
this.btnNext.TabIndex = 3;
|
||||
|
@ -366,7 +358,7 @@
|
|||
// btnPrev
|
||||
//
|
||||
this.btnPrev.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.btnPrev.Location = new System.Drawing.Point(512, 3);
|
||||
this.btnPrev.Location = new System.Drawing.Point(577, 3);
|
||||
this.btnPrev.Name = "btnPrev";
|
||||
this.btnPrev.Size = new System.Drawing.Size(64, 23);
|
||||
this.btnPrev.TabIndex = 2;
|
||||
|
@ -377,7 +369,7 @@
|
|||
// btnGo
|
||||
//
|
||||
this.btnGo.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.btnGo.Location = new System.Drawing.Point(261, 3);
|
||||
this.btnGo.Location = new System.Drawing.Point(327, 3);
|
||||
this.btnGo.Name = "btnGo";
|
||||
this.btnGo.Size = new System.Drawing.Size(119, 23);
|
||||
this.btnGo.TabIndex = 1;
|
||||
|
@ -401,18 +393,33 @@
|
|||
this.cbDisAddr.FormattingEnabled = true;
|
||||
this.cbDisAddr.Location = new System.Drawing.Point(132, 5);
|
||||
this.cbDisAddr.Name = "cbDisAddr";
|
||||
this.cbDisAddr.Size = new System.Drawing.Size(124, 21);
|
||||
this.cbDisAddr.Size = new System.Drawing.Size(189, 21);
|
||||
this.cbDisAddr.TabIndex = 0;
|
||||
this.cbDisAddr.SelectedIndexChanged += new System.EventHandler(this.cbDisAddr_SelectedIndexChanged);
|
||||
this.cbDisAddr.KeyDown += new System.Windows.Forms.KeyEventHandler(this.comboBox1_KeyDown);
|
||||
//
|
||||
// txDisassembly
|
||||
//
|
||||
this.txDisassembly.BackColor = System.Drawing.SystemColors.Window;
|
||||
this.txDisassembly.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||
this.txDisassembly.Cursor = System.Windows.Forms.Cursors.Default;
|
||||
this.txDisassembly.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.txDisassembly.Font = new System.Drawing.Font("Lucida Console", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.txDisassembly.Location = new System.Drawing.Point(0, 0);
|
||||
this.txDisassembly.Name = "txDisassembly";
|
||||
this.txDisassembly.ReadOnly = true;
|
||||
this.txDisassembly.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.ForcedVertical;
|
||||
this.txDisassembly.Size = new System.Drawing.Size(714, 152);
|
||||
this.txDisassembly.TabIndex = 1;
|
||||
this.txDisassembly.Text = "";
|
||||
//
|
||||
// tabBreakpoints
|
||||
//
|
||||
this.tabBreakpoints.Controls.Add(this.splitContainer3);
|
||||
this.tabBreakpoints.Location = new System.Drawing.Point(4, 22);
|
||||
this.tabBreakpoints.Name = "tabBreakpoints";
|
||||
this.tabBreakpoints.Padding = new System.Windows.Forms.Padding(3, 3, 3, 3);
|
||||
this.tabBreakpoints.Size = new System.Drawing.Size(654, 318);
|
||||
this.tabBreakpoints.Padding = new System.Windows.Forms.Padding(3);
|
||||
this.tabBreakpoints.Size = new System.Drawing.Size(720, 196);
|
||||
this.tabBreakpoints.TabIndex = 1;
|
||||
this.tabBreakpoints.Text = "Breakpoints";
|
||||
this.tabBreakpoints.UseVisualStyleBackColor = true;
|
||||
|
@ -431,8 +438,8 @@
|
|||
// splitContainer3.Panel2
|
||||
//
|
||||
this.splitContainer3.Panel2.Controls.Add(this.clbBreakpoints);
|
||||
this.splitContainer3.Size = new System.Drawing.Size(648, 312);
|
||||
this.splitContainer3.SplitterDistance = 214;
|
||||
this.splitContainer3.Size = new System.Drawing.Size(714, 190);
|
||||
this.splitContainer3.SplitterDistance = 237;
|
||||
this.splitContainer3.TabIndex = 5;
|
||||
//
|
||||
// groupBox4
|
||||
|
@ -444,7 +451,7 @@
|
|||
this.groupBox4.Controls.Add(this.cbBreakpointCxbx);
|
||||
this.groupBox4.Location = new System.Drawing.Point(2, 112);
|
||||
this.groupBox4.Name = "groupBox4";
|
||||
this.groupBox4.Size = new System.Drawing.Size(210, 196);
|
||||
this.groupBox4.Size = new System.Drawing.Size(233, 75);
|
||||
this.groupBox4.TabIndex = 5;
|
||||
this.groupBox4.TabStop = false;
|
||||
this.groupBox4.Text = "Interrupts";
|
||||
|
@ -482,7 +489,7 @@
|
|||
this.groupBox1.Controls.Add(this.tbFilter);
|
||||
this.groupBox1.Location = new System.Drawing.Point(0, 0);
|
||||
this.groupBox1.Name = "groupBox1";
|
||||
this.groupBox1.Size = new System.Drawing.Size(211, 106);
|
||||
this.groupBox1.Size = new System.Drawing.Size(234, 106);
|
||||
this.groupBox1.TabIndex = 4;
|
||||
this.groupBox1.TabStop = false;
|
||||
this.groupBox1.Text = "File Watch";
|
||||
|
@ -495,7 +502,7 @@
|
|||
this.cbAction.FormattingEnabled = true;
|
||||
this.cbAction.Location = new System.Drawing.Point(89, 45);
|
||||
this.cbAction.Name = "cbAction";
|
||||
this.cbAction.Size = new System.Drawing.Size(115, 21);
|
||||
this.cbAction.Size = new System.Drawing.Size(139, 21);
|
||||
this.cbAction.TabIndex = 6;
|
||||
//
|
||||
// label5
|
||||
|
@ -522,7 +529,7 @@
|
|||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.btnAddFileBp.Location = new System.Drawing.Point(89, 72);
|
||||
this.btnAddFileBp.Name = "btnAddFileBp";
|
||||
this.btnAddFileBp.Size = new System.Drawing.Size(115, 23);
|
||||
this.btnAddFileBp.Size = new System.Drawing.Size(139, 23);
|
||||
this.btnAddFileBp.TabIndex = 4;
|
||||
this.btnAddFileBp.Text = "Add";
|
||||
this.btnAddFileBp.UseVisualStyleBackColor = true;
|
||||
|
@ -534,7 +541,7 @@
|
|||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.tbFilter.Location = new System.Drawing.Point(89, 19);
|
||||
this.tbFilter.Name = "tbFilter";
|
||||
this.tbFilter.Size = new System.Drawing.Size(115, 20);
|
||||
this.tbFilter.Size = new System.Drawing.Size(139, 20);
|
||||
this.tbFilter.TabIndex = 2;
|
||||
//
|
||||
// clbBreakpoints
|
||||
|
@ -543,7 +550,7 @@
|
|||
this.clbBreakpoints.FormattingEnabled = true;
|
||||
this.clbBreakpoints.Location = new System.Drawing.Point(0, 0);
|
||||
this.clbBreakpoints.Name = "clbBreakpoints";
|
||||
this.clbBreakpoints.Size = new System.Drawing.Size(430, 312);
|
||||
this.clbBreakpoints.Size = new System.Drawing.Size(473, 190);
|
||||
this.clbBreakpoints.TabIndex = 0;
|
||||
this.clbBreakpoints.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.clbBreakpoints_ItemCheck);
|
||||
this.clbBreakpoints.KeyDown += new System.Windows.Forms.KeyEventHandler(this.clbBreakpoints_KeyDown);
|
||||
|
@ -553,8 +560,8 @@
|
|||
this.tabWatch.Controls.Add(this.splitContainer1);
|
||||
this.tabWatch.Location = new System.Drawing.Point(4, 22);
|
||||
this.tabWatch.Name = "tabWatch";
|
||||
this.tabWatch.Padding = new System.Windows.Forms.Padding(3, 3, 3, 3);
|
||||
this.tabWatch.Size = new System.Drawing.Size(654, 318);
|
||||
this.tabWatch.Padding = new System.Windows.Forms.Padding(3);
|
||||
this.tabWatch.Size = new System.Drawing.Size(720, 196);
|
||||
this.tabWatch.TabIndex = 2;
|
||||
this.tabWatch.Text = "File Watcher";
|
||||
this.tabWatch.UseVisualStyleBackColor = true;
|
||||
|
@ -572,8 +579,8 @@
|
|||
// splitContainer1.Panel2
|
||||
//
|
||||
this.splitContainer1.Panel2.Controls.Add(this.lbOpenedFiles);
|
||||
this.splitContainer1.Size = new System.Drawing.Size(648, 312);
|
||||
this.splitContainer1.SplitterDistance = 453;
|
||||
this.splitContainer1.Size = new System.Drawing.Size(714, 190);
|
||||
this.splitContainer1.SplitterDistance = 501;
|
||||
this.splitContainer1.TabIndex = 3;
|
||||
//
|
||||
// lvFileDetails
|
||||
|
@ -588,7 +595,7 @@
|
|||
this.lvFileDetails.Location = new System.Drawing.Point(0, 0);
|
||||
this.lvFileDetails.MultiSelect = false;
|
||||
this.lvFileDetails.Name = "lvFileDetails";
|
||||
this.lvFileDetails.Size = new System.Drawing.Size(453, 312);
|
||||
this.lvFileDetails.Size = new System.Drawing.Size(501, 190);
|
||||
this.lvFileDetails.TabIndex = 2;
|
||||
this.lvFileDetails.UseCompatibleStateImageBehavior = false;
|
||||
this.lvFileDetails.View = System.Windows.Forms.View.Details;
|
||||
|
@ -614,7 +621,7 @@
|
|||
this.lbOpenedFiles.FormattingEnabled = true;
|
||||
this.lbOpenedFiles.Location = new System.Drawing.Point(0, 0);
|
||||
this.lbOpenedFiles.Name = "lbOpenedFiles";
|
||||
this.lbOpenedFiles.Size = new System.Drawing.Size(191, 312);
|
||||
this.lbOpenedFiles.Size = new System.Drawing.Size(209, 190);
|
||||
this.lbOpenedFiles.TabIndex = 0;
|
||||
//
|
||||
// tabMemory
|
||||
|
@ -622,8 +629,8 @@
|
|||
this.tabMemory.Controls.Add(this.splitContainer4);
|
||||
this.tabMemory.Location = new System.Drawing.Point(4, 22);
|
||||
this.tabMemory.Name = "tabMemory";
|
||||
this.tabMemory.Padding = new System.Windows.Forms.Padding(3, 3, 3, 3);
|
||||
this.tabMemory.Size = new System.Drawing.Size(720, 236);
|
||||
this.tabMemory.Padding = new System.Windows.Forms.Padding(3);
|
||||
this.tabMemory.Size = new System.Drawing.Size(720, 196);
|
||||
this.tabMemory.TabIndex = 4;
|
||||
this.tabMemory.Text = "Memory Viewer";
|
||||
this.tabMemory.UseVisualStyleBackColor = true;
|
||||
|
@ -641,8 +648,8 @@
|
|||
// splitContainer4.Panel2
|
||||
//
|
||||
this.splitContainer4.Panel2.Controls.Add(this.groupBox2);
|
||||
this.splitContainer4.Size = new System.Drawing.Size(714, 230);
|
||||
this.splitContainer4.SplitterDistance = 375;
|
||||
this.splitContainer4.Size = new System.Drawing.Size(714, 190);
|
||||
this.splitContainer4.SplitterDistance = 376;
|
||||
this.splitContainer4.TabIndex = 7;
|
||||
//
|
||||
// txMemoryDump
|
||||
|
@ -656,7 +663,7 @@
|
|||
this.txMemoryDump.Name = "txMemoryDump";
|
||||
this.txMemoryDump.ReadOnly = true;
|
||||
this.txMemoryDump.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
|
||||
this.txMemoryDump.Size = new System.Drawing.Size(375, 230);
|
||||
this.txMemoryDump.Size = new System.Drawing.Size(376, 190);
|
||||
this.txMemoryDump.TabIndex = 0;
|
||||
//
|
||||
// groupBox2
|
||||
|
@ -674,7 +681,7 @@
|
|||
this.groupBox2.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.groupBox2.Location = new System.Drawing.Point(0, 0);
|
||||
this.groupBox2.Name = "groupBox2";
|
||||
this.groupBox2.Size = new System.Drawing.Size(335, 230);
|
||||
this.groupBox2.Size = new System.Drawing.Size(334, 190);
|
||||
this.groupBox2.TabIndex = 8;
|
||||
this.groupBox2.TabStop = false;
|
||||
this.groupBox2.Text = "View or Dump Memory";
|
||||
|
@ -683,9 +690,9 @@
|
|||
//
|
||||
this.textBox2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.textBox2.Location = new System.Drawing.Point(183, 129);
|
||||
this.textBox2.Location = new System.Drawing.Point(213, 129);
|
||||
this.textBox2.Name = "textBox2";
|
||||
this.textBox2.Size = new System.Drawing.Size(146, 20);
|
||||
this.textBox2.Size = new System.Drawing.Size(115, 20);
|
||||
this.textBox2.TabIndex = 10;
|
||||
//
|
||||
// label8
|
||||
|
@ -699,11 +706,13 @@
|
|||
//
|
||||
// cbDataFormat
|
||||
//
|
||||
this.cbDataFormat.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.cbDataFormat.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.cbDataFormat.FormattingEnabled = true;
|
||||
this.cbDataFormat.Location = new System.Drawing.Point(88, 130);
|
||||
this.cbDataFormat.Name = "cbDataFormat";
|
||||
this.cbDataFormat.Size = new System.Drawing.Size(89, 21);
|
||||
this.cbDataFormat.Size = new System.Drawing.Size(119, 21);
|
||||
this.cbDataFormat.TabIndex = 8;
|
||||
this.cbDataFormat.SelectionChangeCommitted += new System.EventHandler(this.cbDataFormat_SelectionChangeCommitted);
|
||||
//
|
||||
|
@ -713,7 +722,7 @@
|
|||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.btnAddWatch.Location = new System.Drawing.Point(88, 157);
|
||||
this.btnAddWatch.Name = "btnAddWatch";
|
||||
this.btnAddWatch.Size = new System.Drawing.Size(241, 23);
|
||||
this.btnAddWatch.Size = new System.Drawing.Size(240, 23);
|
||||
this.btnAddWatch.TabIndex = 7;
|
||||
this.btnAddWatch.Text = "Add to Editor...";
|
||||
this.btnAddWatch.UseVisualStyleBackColor = true;
|
||||
|
@ -734,7 +743,7 @@
|
|||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.btnDumpMemory.Location = new System.Drawing.Point(88, 100);
|
||||
this.btnDumpMemory.Name = "btnDumpMemory";
|
||||
this.btnDumpMemory.Size = new System.Drawing.Size(241, 23);
|
||||
this.btnDumpMemory.Size = new System.Drawing.Size(240, 23);
|
||||
this.btnDumpMemory.TabIndex = 6;
|
||||
this.btnDumpMemory.Text = "Dump Memory to File...";
|
||||
this.btnDumpMemory.UseVisualStyleBackColor = true;
|
||||
|
@ -746,7 +755,7 @@
|
|||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.txAddress.Location = new System.Drawing.Point(88, 18);
|
||||
this.txAddress.Name = "txAddress";
|
||||
this.txAddress.Size = new System.Drawing.Size(241, 20);
|
||||
this.txAddress.Size = new System.Drawing.Size(240, 20);
|
||||
this.txAddress.TabIndex = 1;
|
||||
//
|
||||
// label2
|
||||
|
@ -764,7 +773,7 @@
|
|||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.btnReadMemory.Location = new System.Drawing.Point(88, 71);
|
||||
this.btnReadMemory.Name = "btnReadMemory";
|
||||
this.btnReadMemory.Size = new System.Drawing.Size(241, 23);
|
||||
this.btnReadMemory.Size = new System.Drawing.Size(240, 23);
|
||||
this.btnReadMemory.TabIndex = 2;
|
||||
this.btnReadMemory.Text = "Read Memory";
|
||||
this.btnReadMemory.UseVisualStyleBackColor = true;
|
||||
|
@ -776,7 +785,7 @@
|
|||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.txSize.Location = new System.Drawing.Point(88, 45);
|
||||
this.txSize.Name = "txSize";
|
||||
this.txSize.Size = new System.Drawing.Size(241, 20);
|
||||
this.txSize.Size = new System.Drawing.Size(240, 20);
|
||||
this.txSize.TabIndex = 3;
|
||||
this.txSize.Text = "32";
|
||||
//
|
||||
|
@ -785,8 +794,8 @@
|
|||
this.tabTweaks.Controls.Add(this.tabCEContainer);
|
||||
this.tabTweaks.Location = new System.Drawing.Point(4, 22);
|
||||
this.tabTweaks.Name = "tabTweaks";
|
||||
this.tabTweaks.Padding = new System.Windows.Forms.Padding(3, 3, 3, 3);
|
||||
this.tabTweaks.Size = new System.Drawing.Size(654, 318);
|
||||
this.tabTweaks.Padding = new System.Windows.Forms.Padding(3);
|
||||
this.tabTweaks.Size = new System.Drawing.Size(720, 196);
|
||||
this.tabTweaks.TabIndex = 5;
|
||||
this.tabTweaks.Text = "Memory Editor";
|
||||
this.tabTweaks.UseVisualStyleBackColor = true;
|
||||
|
@ -799,7 +808,7 @@
|
|||
this.tabCEContainer.Location = new System.Drawing.Point(3, 3);
|
||||
this.tabCEContainer.Name = "tabCEContainer";
|
||||
this.tabCEContainer.SelectedIndex = 0;
|
||||
this.tabCEContainer.Size = new System.Drawing.Size(648, 312);
|
||||
this.tabCEContainer.Size = new System.Drawing.Size(714, 190);
|
||||
this.tabCEContainer.TabIndex = 5;
|
||||
//
|
||||
// tabSubData
|
||||
|
@ -807,8 +816,8 @@
|
|||
this.tabSubData.Controls.Add(this.splitContainer6);
|
||||
this.tabSubData.Location = new System.Drawing.Point(4, 22);
|
||||
this.tabSubData.Name = "tabSubData";
|
||||
this.tabSubData.Padding = new System.Windows.Forms.Padding(3, 3, 3, 3);
|
||||
this.tabSubData.Size = new System.Drawing.Size(640, 286);
|
||||
this.tabSubData.Padding = new System.Windows.Forms.Padding(3);
|
||||
this.tabSubData.Size = new System.Drawing.Size(706, 164);
|
||||
this.tabSubData.TabIndex = 0;
|
||||
this.tabSubData.Text = "Edit Data";
|
||||
this.tabSubData.UseVisualStyleBackColor = true;
|
||||
|
@ -830,8 +839,8 @@
|
|||
// splitContainer6.Panel2
|
||||
//
|
||||
this.splitContainer6.Panel2.Controls.Add(this.lvCEMemory);
|
||||
this.splitContainer6.Size = new System.Drawing.Size(634, 280);
|
||||
this.splitContainer6.SplitterDistance = 57;
|
||||
this.splitContainer6.Size = new System.Drawing.Size(700, 158);
|
||||
this.splitContainer6.SplitterDistance = 34;
|
||||
this.splitContainer6.TabIndex = 2;
|
||||
//
|
||||
// btnRefresh
|
||||
|
@ -857,7 +866,7 @@
|
|||
// btnApply
|
||||
//
|
||||
this.btnApply.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.btnApply.Location = new System.Drawing.Point(508, 3);
|
||||
this.btnApply.Location = new System.Drawing.Point(574, 3);
|
||||
this.btnApply.Name = "btnApply";
|
||||
this.btnApply.Size = new System.Drawing.Size(123, 23);
|
||||
this.btnApply.TabIndex = 4;
|
||||
|
@ -871,7 +880,7 @@
|
|||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.txNewValue.Location = new System.Drawing.Point(261, 5);
|
||||
this.txNewValue.Name = "txNewValue";
|
||||
this.txNewValue.Size = new System.Drawing.Size(240, 20);
|
||||
this.txNewValue.Size = new System.Drawing.Size(307, 20);
|
||||
this.txNewValue.TabIndex = 2;
|
||||
//
|
||||
// lvCEMemory
|
||||
|
@ -887,7 +896,7 @@
|
|||
this.lvCEMemory.Location = new System.Drawing.Point(0, 0);
|
||||
this.lvCEMemory.MultiSelect = false;
|
||||
this.lvCEMemory.Name = "lvCEMemory";
|
||||
this.lvCEMemory.Size = new System.Drawing.Size(634, 219);
|
||||
this.lvCEMemory.Size = new System.Drawing.Size(700, 120);
|
||||
this.lvCEMemory.TabIndex = 1;
|
||||
this.lvCEMemory.UseCompatibleStateImageBehavior = false;
|
||||
this.lvCEMemory.View = System.Windows.Forms.View.Details;
|
||||
|
@ -917,8 +926,8 @@
|
|||
this.tabSubAssembly.Controls.Add(this.lvCEAssembly);
|
||||
this.tabSubAssembly.Location = new System.Drawing.Point(4, 22);
|
||||
this.tabSubAssembly.Name = "tabSubAssembly";
|
||||
this.tabSubAssembly.Padding = new System.Windows.Forms.Padding(3, 3, 3, 3);
|
||||
this.tabSubAssembly.Size = new System.Drawing.Size(640, 286);
|
||||
this.tabSubAssembly.Padding = new System.Windows.Forms.Padding(3);
|
||||
this.tabSubAssembly.Size = new System.Drawing.Size(706, 164);
|
||||
this.tabSubAssembly.TabIndex = 1;
|
||||
this.tabSubAssembly.Text = "Edit Assembly";
|
||||
this.tabSubAssembly.UseVisualStyleBackColor = true;
|
||||
|
@ -936,7 +945,7 @@
|
|||
this.lvCEAssembly.Location = new System.Drawing.Point(3, 3);
|
||||
this.lvCEAssembly.MultiSelect = false;
|
||||
this.lvCEAssembly.Name = "lvCEAssembly";
|
||||
this.lvCEAssembly.Size = new System.Drawing.Size(635, 280);
|
||||
this.lvCEAssembly.Size = new System.Drawing.Size(700, 158);
|
||||
this.lvCEAssembly.TabIndex = 4;
|
||||
this.lvCEAssembly.UseCompatibleStateImageBehavior = false;
|
||||
this.lvCEAssembly.View = System.Windows.Forms.View.Details;
|
||||
|
@ -966,8 +975,8 @@
|
|||
this.tabOutput.Controls.Add(this.splitContainer5);
|
||||
this.tabOutput.Location = new System.Drawing.Point(4, 22);
|
||||
this.tabOutput.Name = "tabOutput";
|
||||
this.tabOutput.Padding = new System.Windows.Forms.Padding(3, 3, 3, 3);
|
||||
this.tabOutput.Size = new System.Drawing.Size(654, 318);
|
||||
this.tabOutput.Padding = new System.Windows.Forms.Padding(3);
|
||||
this.tabOutput.Size = new System.Drawing.Size(720, 196);
|
||||
this.tabOutput.TabIndex = 3;
|
||||
this.tabOutput.Text = "Debug Output";
|
||||
this.tabOutput.UseVisualStyleBackColor = true;
|
||||
|
@ -989,7 +998,7 @@
|
|||
// splitContainer5.Panel2
|
||||
//
|
||||
this.splitContainer5.Panel2.Controls.Add(this.lbDebug);
|
||||
this.splitContainer5.Size = new System.Drawing.Size(648, 312);
|
||||
this.splitContainer5.Size = new System.Drawing.Size(714, 190);
|
||||
this.splitContainer5.SplitterDistance = 26;
|
||||
this.splitContainer5.TabIndex = 6;
|
||||
//
|
||||
|
@ -1000,7 +1009,7 @@
|
|||
this.txFilter.Enabled = false;
|
||||
this.txFilter.Location = new System.Drawing.Point(41, 3);
|
||||
this.txFilter.Name = "txFilter";
|
||||
this.txFilter.Size = new System.Drawing.Size(604, 20);
|
||||
this.txFilter.Size = new System.Drawing.Size(670, 20);
|
||||
this.txFilter.TabIndex = 4;
|
||||
//
|
||||
// label3
|
||||
|
@ -1020,7 +1029,7 @@
|
|||
this.lbDebug.Location = new System.Drawing.Point(0, 0);
|
||||
this.lbDebug.Name = "lbDebug";
|
||||
this.lbDebug.ScrollAlwaysVisible = true;
|
||||
this.lbDebug.Size = new System.Drawing.Size(648, 282);
|
||||
this.lbDebug.Size = new System.Drawing.Size(714, 160);
|
||||
this.lbDebug.TabIndex = 3;
|
||||
//
|
||||
// diagSaveMemory
|
||||
|
@ -1033,40 +1042,24 @@
|
|||
this.diagBrowseCT.Filter = "Cheat Engine Tables (*.CT)|*.ct";
|
||||
this.diagBrowseCT.Title = "Load cheat table";
|
||||
//
|
||||
// txDisassembly
|
||||
// Form1
|
||||
//
|
||||
this.txDisassembly.BackColor = System.Drawing.SystemColors.Window;
|
||||
this.txDisassembly.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||
this.txDisassembly.Cursor = System.Windows.Forms.Cursors.Default;
|
||||
this.txDisassembly.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.txDisassembly.Font = new System.Drawing.Font("Lucida Console", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.txDisassembly.Location = new System.Drawing.Point(0, 0);
|
||||
this.txDisassembly.Name = "txDisassembly";
|
||||
this.txDisassembly.ReadOnly = true;
|
||||
this.txDisassembly.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.ForcedVertical;
|
||||
this.txDisassembly.Size = new System.Drawing.Size(648, 274);
|
||||
this.txDisassembly.TabIndex = 1;
|
||||
this.txDisassembly.Text = "";
|
||||
//
|
||||
// CxbxDebuggerInstance
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
|
||||
this.ClientSize = new System.Drawing.Size(734, 361);
|
||||
this.ControlBox = false;
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(734, 331);
|
||||
this.Controls.Add(this.tableLayoutPanel3);
|
||||
this.Controls.Add(this.toolStrip1);
|
||||
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||
this.MinimizeBox = false;
|
||||
this.Name = "CxbxDebuggerInstance";
|
||||
this.Text = "unnamed instance";
|
||||
this.Name = "Form1";
|
||||
this.Text = "Cxbx-Reloaded Debugger";
|
||||
this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.Form1_FormClosed);
|
||||
this.toolStrip1.ResumeLayout(false);
|
||||
this.toolStrip1.PerformLayout();
|
||||
this.tableLayoutPanel3.ResumeLayout(false);
|
||||
this.tableLayoutPanel3.PerformLayout();
|
||||
this.statusBar.ResumeLayout(false);
|
||||
this.statusBar.PerformLayout();
|
||||
this.tabContainer.ResumeLayout(false);
|
||||
this.tabSummary.ResumeLayout(false);
|
||||
this.tabSummary.PerformLayout();
|
||||
this.tabDisassembly.ResumeLayout(false);
|
||||
this.splitContainer2.Panel1.ResumeLayout(false);
|
||||
this.splitContainer2.Panel1.PerformLayout();
|
||||
|
@ -1118,6 +1111,11 @@
|
|||
#endregion
|
||||
private System.Windows.Forms.ListBox lbConsole;
|
||||
private System.Windows.Forms.ToolStrip toolStrip1;
|
||||
private System.Windows.Forms.ToolStripButton btnStart;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
|
||||
private System.Windows.Forms.ToolStripButton btnSuspend;
|
||||
private System.Windows.Forms.ToolStripButton btnResume;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
|
||||
private System.Windows.Forms.ToolStripComboBox cbThreads;
|
||||
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel3;
|
||||
private System.Windows.Forms.TabControl tabContainer;
|
||||
|
@ -1137,6 +1135,8 @@
|
|||
private System.Windows.Forms.TextBox txAddress;
|
||||
private System.Windows.Forms.GroupBox groupBox1;
|
||||
private System.Windows.Forms.TextBox tbFilter;
|
||||
private System.Windows.Forms.StatusStrip statusBar;
|
||||
private System.Windows.Forms.ToolStripStatusLabel lblStatus;
|
||||
private RicherTextBox txDisassembly;
|
||||
private System.Windows.Forms.Label label2;
|
||||
private System.Windows.Forms.Label label1;
|
||||
|
@ -1192,11 +1192,6 @@
|
|||
private System.Windows.Forms.Button btnLoadCT;
|
||||
private System.Windows.Forms.Button btnRefresh;
|
||||
private System.Windows.Forms.TextBox textBox2;
|
||||
private System.Windows.Forms.TabPage tabSummary;
|
||||
private System.Windows.Forms.Label label7;
|
||||
private System.Windows.Forms.Label label9;
|
||||
private System.Windows.Forms.LinkLabel linkLabel3;
|
||||
private System.Windows.Forms.LinkLabel linkLabel2;
|
||||
private System.Windows.Forms.LinkLabel linkLabel1;
|
||||
}
|
||||
}
|
||||
|
|
@ -8,15 +8,15 @@ using System.Collections.Generic;
|
|||
using System.IO;
|
||||
using System.Text.RegularExpressions;
|
||||
using cs_x86;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace CxbxDebugger
|
||||
{
|
||||
public partial class CxbxDebuggerInstance : Form, IDebugWindow
|
||||
public partial class Form1 : Form
|
||||
{
|
||||
Thread DebuggerWorkerThread;
|
||||
Debugger DebuggerInst;
|
||||
string[] StartupArgs;
|
||||
string[] CachedArgs;
|
||||
string CachedTitle = "";
|
||||
bool SuspendedOnBp = false;
|
||||
|
||||
DebuggerFormEvents DebugEvents;
|
||||
|
@ -29,45 +29,33 @@ namespace CxbxDebugger
|
|||
DebugOutputManager debugStrMan;
|
||||
PatchManager patchMan;
|
||||
|
||||
IDebugContainerWindow DebugContainer
|
||||
{
|
||||
get
|
||||
{
|
||||
return MdiParent as IDebugContainerWindow;
|
||||
}
|
||||
}
|
||||
|
||||
DebugStateInfo StateInfo = new DebugStateInfo();
|
||||
|
||||
private void SetDebugState(DebugState State, string Detail = "")
|
||||
{
|
||||
DebugContainer.ReportStatus(this, State, Detail);
|
||||
|
||||
StateInfo.State = State;
|
||||
StateInfo.Detail = Detail;
|
||||
}
|
||||
|
||||
List<DebuggerMessages.FileOpened> FileHandles = new List<DebuggerMessages.FileOpened>();
|
||||
|
||||
public CxbxDebuggerInstance(Form Owner, string[] args)
|
||||
public Form1()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
MdiParent = Owner;
|
||||
// TODO: Cleanup arg handling
|
||||
|
||||
string[] args = Environment.GetCommandLineArgs();
|
||||
|
||||
#if !DEBUG
|
||||
// Arguments are expected before the Form is created
|
||||
if (args.Length < 2)
|
||||
{
|
||||
throw new Exception("Incorrect usage");
|
||||
}
|
||||
#endif
|
||||
|
||||
StartupArgs = args;
|
||||
var items = new List<string>(args.Length - 1);
|
||||
for (int i = 1; i < args.Length; ++i)
|
||||
{
|
||||
items.Add(args[i]);
|
||||
}
|
||||
|
||||
CachedArgs = items.ToArray();
|
||||
|
||||
DebugEvents = new DebuggerFormEvents(this);
|
||||
|
||||
SetDebugState(DebugState.Unknown);
|
||||
SetDebugProcessActive(false);
|
||||
|
||||
txDisassembly.InlineLinkClicked += OnDisassemblyNavigation;
|
||||
|
||||
|
@ -89,8 +77,6 @@ namespace CxbxDebugger
|
|||
fileWatchMan = new FileWatchManager(clbBreakpoints);
|
||||
debugStrMan = new DebugOutputManager(lbDebug);
|
||||
patchMan = new PatchManager();
|
||||
|
||||
CreateDebuggerOnce();
|
||||
}
|
||||
|
||||
private void OnDisassemblyNavigation(object sender, InlineLinkClickedEventArgs e)
|
||||
|
@ -100,85 +86,38 @@ namespace CxbxDebugger
|
|||
ShowDisassemblyAt(e.Link);
|
||||
}
|
||||
|
||||
private void CreateDebuggerOnce()
|
||||
private void StartDebugging()
|
||||
{
|
||||
if (DebuggerInst == null)
|
||||
bool Create = false;
|
||||
|
||||
if (DebuggerWorkerThread == null)
|
||||
{
|
||||
// First launch
|
||||
Create = true;
|
||||
}
|
||||
else if (DebuggerWorkerThread.ThreadState == ThreadState.Stopped)
|
||||
{
|
||||
// Further launches
|
||||
Create = true;
|
||||
}
|
||||
|
||||
if (Create)
|
||||
{
|
||||
// Create debugger instance
|
||||
DebuggerInst = new Debugger(StartupArgs);
|
||||
DebuggerInst = new Debugger(CachedArgs);
|
||||
DebuggerInst.RegisterEventInterfaces(DebugEvents);
|
||||
DebuggerInst.RegisterEventInterfaces(patchMan);
|
||||
|
||||
var TargetXbeName = ValidateXbeTargetName(DebuggerInst.TargetPath);
|
||||
var TargetXbeValid = true;
|
||||
|
||||
if (string.IsNullOrEmpty(TargetXbeName))
|
||||
{
|
||||
TargetXbeName = "<unknown>";
|
||||
TargetXbeValid = false;
|
||||
}
|
||||
|
||||
if (InvokeRequired)
|
||||
{
|
||||
// Set form title based on this new process
|
||||
Invoke(new MethodInvoker(delegate ()
|
||||
{
|
||||
Text = TargetXbeName;
|
||||
}));
|
||||
}
|
||||
else
|
||||
{
|
||||
Text = TargetXbeName;
|
||||
}
|
||||
|
||||
if (TargetXbeValid)
|
||||
{
|
||||
SetDebugState(DebugState.Idle, $"{TargetXbeName} is waiting to start");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private string ValidateXbeTargetName(string XbePath)
|
||||
{
|
||||
var XbeName = Path.GetFileName(XbePath);
|
||||
|
||||
if (File.Exists(XbePath))
|
||||
{
|
||||
return XbeName;
|
||||
}
|
||||
|
||||
// Cxbx CLI will pass through the path as a list of parameters, "dir;name"
|
||||
if (XbeName.StartsWith(";"))
|
||||
{
|
||||
var CleanedXbePath = XbePath.Remove(XbePath.Length - XbeName.Length, 1);
|
||||
|
||||
if (File.Exists(CleanedXbePath))
|
||||
{
|
||||
return XbeName.Substring(1);
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private void StartDebugging()
|
||||
{
|
||||
if (GetSessionState() == SessionState.Inactive)
|
||||
{
|
||||
// Setup new debugger thread
|
||||
DebuggerWorkerThread = new Thread(x =>
|
||||
{
|
||||
CreateDebuggerOnce();
|
||||
|
||||
if (DebuggerInst.Launch())
|
||||
{
|
||||
DebuggerInst.RunThreaded();
|
||||
}
|
||||
});
|
||||
|
||||
var ProcessName = Path.GetFileName(DebuggerInst.TargetPath);
|
||||
|
||||
DebuggerWorkerThread.Name = $"DebuggerFor_{ProcessName}";
|
||||
DebuggerWorkerThread.Name = "CxbxDebugger";
|
||||
DebuggerWorkerThread.Start();
|
||||
}
|
||||
}
|
||||
|
@ -207,7 +146,7 @@ namespace CxbxDebugger
|
|||
if (IsMainThread)
|
||||
PrefixStr = "> ";
|
||||
|
||||
var DisplayStr = $"{PrefixStr}[{(uint)Thread.Handle}]";
|
||||
string DisplayStr = string.Format("{0}[{1}] ", PrefixStr, (uint)Thread.Handle);
|
||||
|
||||
// Resolve thread name
|
||||
|
||||
|
@ -267,7 +206,7 @@ namespace CxbxDebugger
|
|||
|
||||
private void DebugLog(string Message)
|
||||
{
|
||||
var MessageStamped = $"[{DateTime.Now.ToLongTimeString()}] {Message}";
|
||||
string MessageStamped = string.Format("[{0}] {1}", DateTime.Now.ToLongTimeString(), Message);
|
||||
|
||||
if (InvokeRequired)
|
||||
{
|
||||
|
@ -296,11 +235,11 @@ namespace CxbxDebugger
|
|||
{
|
||||
case FileEventType.Read:
|
||||
case FileEventType.Write:
|
||||
string text = $"{Event.Length} bytes";
|
||||
string text = string.Format("{0} bytes", Event.Length.ToString());
|
||||
|
||||
if (Event.Offset != uint.MaxValue)
|
||||
{
|
||||
text += $" from offset {Event.Offset}";
|
||||
text += string.Format(" from offset {0}", Event.Offset);
|
||||
}
|
||||
|
||||
lvi.SubItems.Add(text);
|
||||
|
@ -341,7 +280,7 @@ namespace CxbxDebugger
|
|||
{
|
||||
Invoke(new MethodInvoker(delegate ()
|
||||
{
|
||||
Suspend(DebugState.Breakpoint, "Hit file event");
|
||||
Suspend("file open");
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
@ -351,10 +290,12 @@ namespace CxbxDebugger
|
|||
{
|
||||
Invoke(new MethodInvoker(delegate ()
|
||||
{
|
||||
DebugContainer.ReportGameTitle(Title);
|
||||
CachedTitle = Title;
|
||||
|
||||
Text = string.Format("{0} - Cxbx-Reloaded Debugger", CachedTitle);
|
||||
|
||||
// This is done too late - modules are already loaded
|
||||
//LoadCheatTable($"{Title}.ct");
|
||||
//LoadCheatTable(string.Format("{0}.ct", CachedTitle));
|
||||
}));
|
||||
}
|
||||
|
||||
|
@ -388,7 +329,7 @@ namespace CxbxDebugger
|
|||
else
|
||||
{
|
||||
string module_name = Path.GetFileName(Module.Path);
|
||||
Suspend(DebugState.Breakpoint, string.Format("Breakpoint hit in {0} at 0x{1:x}", module_name, Address));
|
||||
Suspend(string.Format("Breakpoint hit in {0} at 0x{1:x}", module_name, Address));
|
||||
|
||||
// Forces a refresh at the breakpoint address (not the callstack trace)
|
||||
DumpDisassembly(Address);
|
||||
|
@ -403,21 +344,35 @@ namespace CxbxDebugger
|
|||
{
|
||||
Invoke(new MethodInvoker(delegate ()
|
||||
{
|
||||
SetDebugState(Active ? DebugState.Running : DebugState.Terminated);
|
||||
// Disable when active
|
||||
btnStart.Enabled = !Active;
|
||||
|
||||
// Enable when active
|
||||
btnSuspend.Enabled = Active;
|
||||
btnResume.Enabled = Active;
|
||||
|
||||
lblStatus.Text = (Active ? "Running" : "Inactive");
|
||||
}));
|
||||
}
|
||||
else
|
||||
{
|
||||
SetDebugState(Active ? DebugState.Running : DebugState.Terminated);
|
||||
// Disable when active
|
||||
btnStart.Enabled = !Active;
|
||||
|
||||
// Enable when active
|
||||
btnSuspend.Enabled = Active;
|
||||
btnResume.Enabled = Active;
|
||||
|
||||
lblStatus.Text = (Active ? "Running" : "Inactive");
|
||||
}
|
||||
}
|
||||
|
||||
private void btnClearLog_Click(object sender, EventArgs e)
|
||||
{
|
||||
//lbConsole.Items.Clear();
|
||||
lbConsole.Items.Clear();
|
||||
}
|
||||
|
||||
class DebuggerFormEvents : IDebuggerSessionEvents,
|
||||
class DebuggerFormEvents : IDebuggerGeneralEvents,
|
||||
IDebuggerProcessEvents,
|
||||
IDebuggerModuleEvents,
|
||||
IDebuggerThreadEvents,
|
||||
|
@ -425,12 +380,9 @@ namespace CxbxDebugger
|
|||
IDebuggerExceptionEvents,
|
||||
IDebuggerFileEvents
|
||||
{
|
||||
CxbxDebuggerInstance frm;
|
||||
Form1 frm;
|
||||
|
||||
|
||||
|
||||
|
||||
public DebuggerFormEvents(CxbxDebuggerInstance main)
|
||||
public DebuggerFormEvents(Form1 main)
|
||||
{
|
||||
frm = main;
|
||||
}
|
||||
|
@ -445,8 +397,8 @@ namespace CxbxDebugger
|
|||
{
|
||||
int remainingThreads = Process.Threads.Count;
|
||||
|
||||
frm.DebugLog($"Process exited {Process.ProcessID} ({NtStatus.PrettyPrint(ExitCode)})");
|
||||
frm.DebugLog($"{remainingThreads} child thread(s) remain open");
|
||||
frm.DebugLog(string.Format("Process exited {0} ({1})", Process.ProcessID, NtStatus.PrettyPrint(ExitCode)));
|
||||
frm.DebugLog(string.Format("{0} child thread(s) remain open", remainingThreads));
|
||||
|
||||
frm.DebugModules.Clear();
|
||||
|
||||
|
@ -474,70 +426,36 @@ namespace CxbxDebugger
|
|||
|
||||
public void OnDebugTitleLoaded(string Title)
|
||||
{
|
||||
frm.DebugLog($"Loaded title \"{Title}\"");
|
||||
frm.DebugLog(string.Format("Loaded title \"{0}\"", Title));
|
||||
frm.DebugTitle(Title);
|
||||
}
|
||||
|
||||
// https://stackoverflow.com/a/749653
|
||||
public static string[] CommandLineToArgs(string commandLine)
|
||||
{
|
||||
int argc;
|
||||
var argv = VsChromium.Core.Win32.Processes.NativeMethods.CommandLineToArgvW(commandLine, out argc);
|
||||
if (argv == IntPtr.Zero)
|
||||
throw new System.ComponentModel.Win32Exception();
|
||||
try
|
||||
{
|
||||
var args = new string[argc];
|
||||
for (var i = 0; i < args.Length; i++)
|
||||
{
|
||||
var p = Marshal.ReadIntPtr(argv, i * IntPtr.Size);
|
||||
args[i] = Marshal.PtrToStringUni(p);
|
||||
}
|
||||
|
||||
return args;
|
||||
}
|
||||
finally
|
||||
{
|
||||
Marshal.FreeHGlobal(argv);
|
||||
}
|
||||
}
|
||||
|
||||
public void OnDebugTargetChanged(string CommandLine)
|
||||
{
|
||||
frm.DebugLog($"New debug session started - {CommandLine}");
|
||||
|
||||
frm.Invoke(new MethodInvoker(delegate ()
|
||||
{
|
||||
frm.DebugContainer.AddDebugSession(CommandLineToArgs(CommandLine), true);
|
||||
}));
|
||||
}
|
||||
|
||||
public void OnThreadCreate(DebuggerThread Thread)
|
||||
{
|
||||
frm.DebugLog($"Thread created {Thread.ThreadID}");
|
||||
frm.DebugLog(string.Format("Thread created {0}", Thread.ThreadID));
|
||||
frm.DebugThreads.Add(Thread);
|
||||
}
|
||||
|
||||
public void OnThreadExit(DebuggerThread Thread, uint ExitCode)
|
||||
{
|
||||
frm.DebugLog($"Thread exited {Thread.ThreadID} ({NtStatus.PrettyPrint(ExitCode)})");
|
||||
frm.DebugLog(string.Format("Thread exited {0} ({1})", Thread.ThreadID, NtStatus.PrettyPrint(ExitCode)));
|
||||
frm.DebugThreads.Remove(Thread);
|
||||
}
|
||||
|
||||
public void OnThreadNamed(DebuggerThread Thread)
|
||||
{
|
||||
frm.DebugLog($"Thread {Thread.ThreadID} named {Thread.DebugName}");
|
||||
frm.DebugLog(string.Format("Thread {0} named {1}", Thread.ThreadID, Thread.DebugName));
|
||||
}
|
||||
|
||||
public void OnModuleLoaded(DebuggerModule Module)
|
||||
{
|
||||
frm.DebugLog($"Loaded module \"{Module.Path}\"");
|
||||
frm.DebugLog(string.Format("Loaded module \"{0}\"", Module.Path));
|
||||
frm.DebugModules.Add(Module);
|
||||
}
|
||||
|
||||
public void OnModuleUnloaded(DebuggerModule Module)
|
||||
{
|
||||
frm.DebugLog($"Unloaded module \"{Module.Path}\"");
|
||||
frm.DebugLog(string.Format("Unloaded module \"{0}\"", Module.Path));
|
||||
frm.DebugModules.Remove(Module);
|
||||
}
|
||||
|
||||
|
@ -557,7 +475,7 @@ namespace CxbxDebugger
|
|||
}
|
||||
|
||||
// TODO Include GetLastError string
|
||||
var ExceptionMessage = string.Format("Access violation thrown at 0x{0:X8} ({1})", Address, ProcessName);
|
||||
string ExceptionMessage = string.Format("Access violation thrown at 0x{0:X8} ({1})", Address, ProcessName);
|
||||
|
||||
ExceptionMessage += string.Format("\n\nException code {0:X8}", Code);
|
||||
|
||||
|
@ -587,13 +505,13 @@ namespace CxbxDebugger
|
|||
if (Info.Succeeded)
|
||||
{
|
||||
frm.FileHandles.Add(Info);
|
||||
frm.DebugLog($"Opened file: \"{Info.FileName}\"");
|
||||
frm.DebugLog(string.Format("Opened file: \"{0}\"", Info.FileName));
|
||||
|
||||
frm.DebugFileEvent(FileEvents.Opened(Info.FileName));
|
||||
}
|
||||
else
|
||||
{
|
||||
frm.DebugLog($"Opened file FAILED: \"{Info.FileName}\"");
|
||||
frm.DebugLog(string.Format("Opened file FAILED: \"{0}\"", Info.FileName));
|
||||
|
||||
frm.DebugFileEvent(FileEvents.OpenedFailed(Info.FileName));
|
||||
}
|
||||
|
@ -604,7 +522,7 @@ namespace CxbxDebugger
|
|||
var Found = frm.FileHandles.Find(FileInfo => FileInfo.Handle == Info.Handle);
|
||||
if (Found != null)
|
||||
{
|
||||
frm.DebugLog($"Reading {Info.Length} byte(s) from: {Found.FileName}");
|
||||
frm.DebugLog(string.Format("Reading {0} byte(s) from: {1}", Info.Length, Found.FileName));
|
||||
frm.DebugFileEvent(FileEvents.Read(Found.FileName, Info.Length, Info.Offset));
|
||||
}
|
||||
}
|
||||
|
@ -614,7 +532,7 @@ namespace CxbxDebugger
|
|||
var Found = frm.FileHandles.Find(FileInfo => FileInfo.Handle == Info.Handle);
|
||||
if (Found != null)
|
||||
{
|
||||
frm.DebugLog($"Writing {Info.Length} byte(s) to: {Found.FileName}");
|
||||
frm.DebugLog(string.Format("Writing {0} byte(s) to: {1}", Info.Length, Found.FileName));
|
||||
frm.DebugFileEvent(FileEvents.Write(Found.FileName, Info.Length, Info.Offset));
|
||||
}
|
||||
}
|
||||
|
@ -628,12 +546,17 @@ namespace CxbxDebugger
|
|||
|
||||
frm.DebugFileEvent(FileEvents.Closed(Found.FileName));
|
||||
|
||||
frm.DebugLog($"Closed file: \"{Found.FileName}\"");
|
||||
frm.DebugLog(string.Format("Closed file: \"{0}\"", Found.FileName));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void Suspend(DebugState State, string Detail)
|
||||
private void toolStripButton1_Click(object sender, EventArgs e)
|
||||
{
|
||||
StartDebugging();
|
||||
}
|
||||
|
||||
private void Suspend(string Reason)
|
||||
{
|
||||
if (DebuggerInst != null)
|
||||
{
|
||||
|
@ -649,7 +572,7 @@ namespace CxbxDebugger
|
|||
PopulateThreadList(cbThreads, null);
|
||||
}
|
||||
|
||||
SetDebugState(State, Detail);
|
||||
lblStatus.Text = string.Format("Suspended ({0})", Reason);
|
||||
|
||||
cbThreads.Enabled = true;
|
||||
cbFrames.Enabled = true;
|
||||
|
@ -670,12 +593,22 @@ namespace CxbxDebugger
|
|||
}
|
||||
}
|
||||
|
||||
SetDebugState(DebugState.Running);
|
||||
lblStatus.Text = "Running";
|
||||
|
||||
cbThreads.Enabled = false;
|
||||
cbFrames.Enabled = false;
|
||||
}
|
||||
|
||||
private void toolStripButton2_Click(object sender, EventArgs e)
|
||||
{
|
||||
Suspend("manually triggered");
|
||||
}
|
||||
|
||||
private void toolStripButton3_Click(object sender, EventArgs e)
|
||||
{
|
||||
Resume();
|
||||
}
|
||||
|
||||
struct CallstackInfo
|
||||
{
|
||||
public uint InstructionPointer;
|
||||
|
@ -808,8 +741,8 @@ namespace CxbxDebugger
|
|||
{
|
||||
if (EP != 0)
|
||||
{
|
||||
var LinkName = string.Format("{0} +{1:x}", Name, Address - EP);
|
||||
var Link = string.Format("0x{0:x8}", Address);
|
||||
string LinkName = string.Format("{0} +{1:x}", Name, Address - EP);
|
||||
string Link = string.Format("0x{0:x8}", Address);
|
||||
|
||||
tb.InsertLink(LinkName, Link);
|
||||
}
|
||||
|
@ -900,6 +833,9 @@ namespace CxbxDebugger
|
|||
|
||||
private void btnDumpMemory_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (DebuggerInst == null)
|
||||
return;
|
||||
|
||||
if (diagSaveMemory.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
byte[] data = ReadMemory();
|
||||
|
@ -919,7 +855,7 @@ namespace CxbxDebugger
|
|||
int Index = cbThreads.SelectedIndex;
|
||||
if (Index == -1)
|
||||
return;
|
||||
|
||||
|
||||
CallstackDump.Clear();
|
||||
cbFrames.Items.Clear();
|
||||
|
||||
|
@ -1038,6 +974,17 @@ namespace CxbxDebugger
|
|||
fileWatchMan.SetEnabled(e.Index, e.NewValue == CheckState.Checked);
|
||||
}
|
||||
|
||||
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
|
||||
{
|
||||
if (keyData == Keys.F5)
|
||||
{
|
||||
StartDebugging();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private void HandleDisasmGo()
|
||||
{
|
||||
uint addr = 0;
|
||||
|
@ -1098,7 +1045,7 @@ namespace CxbxDebugger
|
|||
{
|
||||
var li = lvCEMemory.Items.Add(string.Format("{0} 0x{1:x}", DataPatch.Module, DataPatch.Offset));
|
||||
li.SubItems.Add(DataPatch.Name);
|
||||
li.SubItems.Add($"{DataPatch.Patched.Length} byte(s)");
|
||||
li.SubItems.Add(string.Format("{0} byte(s)", DataPatch.Patched.Length));
|
||||
if (MainProcess != null)
|
||||
{
|
||||
li.SubItems.Add(patchMan.Read(MainProcess, DataPatch));
|
||||
|
@ -1157,7 +1104,7 @@ namespace CxbxDebugger
|
|||
|
||||
if (File.Exists(filename))
|
||||
{
|
||||
DebugLog($"Attempting to load \"{filename}\"");
|
||||
DebugLog(string.Format("Attempting to load \"{0}\"", filename));
|
||||
|
||||
CheatEngine.CheatTable ct_data = CheatEngine.CheatTableReader.FromFile(filename);
|
||||
if (ct_data != null)
|
||||
|
@ -1194,8 +1141,8 @@ namespace CxbxDebugger
|
|||
patchMan.Assembly.Add(DataPatch);
|
||||
}
|
||||
|
||||
DebugLog($"Loaded {ct_data.CodeEntires.Count} auto-assembler entries");
|
||||
DebugLog($"Loaded {ct_data.CheatEntries.Count} cheat entries");
|
||||
DebugLog(string.Format("Loaded {0} auto-assembler entries", ct_data.CodeEntires.Count));
|
||||
DebugLog(string.Format("Loaded {0} cheat entries", ct_data.CheatEntries.Count));
|
||||
|
||||
RefreshPatches();
|
||||
}
|
||||
|
@ -1204,7 +1151,7 @@ namespace CxbxDebugger
|
|||
|
||||
private void button5_Click(object sender, EventArgs e)
|
||||
{
|
||||
var PatchType = (PatchType)cbDataFormat.SelectedIndex;
|
||||
PatchType PatchType = (PatchType)cbDataFormat.SelectedIndex;
|
||||
|
||||
int PatchSize = PatchManager.PatchTypeLength(PatchType);
|
||||
if (PatchSize == 0)
|
||||
|
@ -1222,7 +1169,7 @@ namespace CxbxDebugger
|
|||
Patch DataPatch = new Patch();
|
||||
|
||||
DataPatch.DisplayAs = PatchType;
|
||||
DataPatch.Name = $"Patched {PatchType}";
|
||||
DataPatch.Name = string.Format("Patched {0}", PatchType);
|
||||
DataPatch.Module = "";
|
||||
DataPatch.Offset = addr;
|
||||
|
||||
|
@ -1287,60 +1234,5 @@ namespace CxbxDebugger
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
public SessionState GetSessionState()
|
||||
{
|
||||
if (DebuggerWorkerThread == null)
|
||||
{
|
||||
return SessionState.Inactive;
|
||||
}
|
||||
else if (DebuggerWorkerThread.ThreadState == ThreadState.Stopped)
|
||||
{
|
||||
return SessionState.Ended;
|
||||
}
|
||||
|
||||
return SessionState.Running;
|
||||
}
|
||||
|
||||
public void StartSession()
|
||||
{
|
||||
if (GetSessionState() == SessionState.Inactive)
|
||||
{
|
||||
StartDebugging();
|
||||
}
|
||||
}
|
||||
|
||||
public void SuspendSession()
|
||||
{
|
||||
if (GetSessionState() == SessionState.Running)
|
||||
{
|
||||
Suspend(DebugState.Suspended, "By user");
|
||||
}
|
||||
}
|
||||
|
||||
public void ResumeSession()
|
||||
{
|
||||
Resume();
|
||||
}
|
||||
|
||||
private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
||||
{
|
||||
tabContainer.SelectedTab = tabWatch;
|
||||
}
|
||||
|
||||
private void linkLabel2_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
||||
{
|
||||
tabContainer.SelectedTab = tabMemory;
|
||||
}
|
||||
|
||||
private void linkLabel3_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
||||
{
|
||||
tabContainer.SelectedTab = tabDisassembly;
|
||||
}
|
||||
|
||||
public DebugStateInfo GetDebugStateInfo()
|
||||
{
|
||||
return StateInfo;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -118,13 +118,16 @@
|
|||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>534, 17</value>
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
<metadata name="statusBar.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>122, 17</value>
|
||||
</metadata>
|
||||
<metadata name="diagSaveMemory.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>153, 17</value>
|
||||
<value>238, 17</value>
|
||||
</metadata>
|
||||
<metadata name="diagBrowseCT.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>357, 17</value>
|
||||
<value>384, 17</value>
|
||||
</metadata>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
|
@ -1,51 +0,0 @@
|
|||
// Written by x1nixmzeng for the Cxbx-Reloaded project
|
||||
//
|
||||
|
||||
namespace CxbxDebugger
|
||||
{
|
||||
public enum SessionState
|
||||
{
|
||||
Inactive,
|
||||
Running,
|
||||
Ended,
|
||||
}
|
||||
|
||||
public enum DebugState
|
||||
{
|
||||
Unknown,
|
||||
Idle,
|
||||
Suspended,
|
||||
Breakpoint,
|
||||
Running,
|
||||
Terminated,
|
||||
}
|
||||
|
||||
public struct DebugStateInfo
|
||||
{
|
||||
public DebugState State;
|
||||
public string Detail;
|
||||
}
|
||||
|
||||
public interface IDebugWindow
|
||||
{
|
||||
void StartSession();
|
||||
|
||||
void SuspendSession();
|
||||
|
||||
void ResumeSession();
|
||||
|
||||
SessionState GetSessionState();
|
||||
|
||||
DebugStateInfo GetDebugStateInfo();
|
||||
}
|
||||
|
||||
public interface IDebugContainerWindow
|
||||
{
|
||||
void AddDebugSession(string[] Arguments, bool StartAutomatically);
|
||||
|
||||
void ReportGameTitle(string GameTitle);
|
||||
|
||||
void ReportStatus(IDebugWindow Window, DebugState Status, string Detail);
|
||||
}
|
||||
|
||||
}
|
|
@ -18,7 +18,6 @@ namespace CxbxDebugger
|
|||
Application.SetCompatibleTextRenderingDefault(false);
|
||||
|
||||
string[] args = Environment.GetCommandLineArgs();
|
||||
#if !DEBUG
|
||||
if( args.Length == 1 )
|
||||
{
|
||||
// TODO: Valid usage message
|
||||
|
@ -26,9 +25,8 @@ namespace CxbxDebugger
|
|||
Application.Exit();
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
Application.Run(new CxbxDebuggerMain(args));
|
||||
Application.Run(new Form1());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -345,10 +345,6 @@ namespace CxbxDebugger
|
|||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
StatusHandleNotClosable = 0xC0000235,
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
GuardPageViolation = 0x80000001,
|
||||
/// <summary>
|
||||
///
|
||||
|
|
|
@ -2,25 +2,10 @@
|
|||
// PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com
|
||||
#include "Version.h"
|
||||
#include "CxbxVersion.h"
|
||||
#include <string>
|
||||
|
||||
/*! version string dependent on trace flag */
|
||||
#ifndef _DEBUG_TRACE
|
||||
const char* CxbxVersionStr = _GIT_VERSION " (" __DATE__ ")";
|
||||
const char *CxbxrHashBuild = _GIT_VERSION;
|
||||
#else
|
||||
const char* CxbxVersionStr = _GIT_VERSION "-Trace (" __DATE__ ")";
|
||||
const char *CxbxrHashBuild = _GIT_VERSION "-Trace";
|
||||
#endif
|
||||
|
||||
static constexpr const char *GitVersionStr = _GIT_VERSION;
|
||||
static constexpr size_t GitVersionLength = std::char_traits<char>::length(GitVersionStr);
|
||||
static_assert(GitVersionLength < GitVersionMaxLength);
|
||||
|
||||
const char *const GetGitVersionStr() {
|
||||
return GitVersionStr;
|
||||
}
|
||||
|
||||
const size_t GetGitVersionLength() {
|
||||
return GitVersionLength;
|
||||
}
|
||||
|
|
|
@ -1,10 +1,5 @@
|
|||
#pragma once
|
||||
|
||||
extern const char* CxbxVersionStr;
|
||||
extern const char *CxbxrHashBuild;
|
||||
#include "version.h"
|
||||
|
||||
// Note: GitVersionMaxLength should be large enough to accomodate the longest git version string we can practically expect to have. This is necessary
|
||||
// to avoid possible mismatches in the string length which can happen if the user mixes different cxbxr versions
|
||||
inline constexpr size_t GitVersionMaxLength = 80;
|
||||
const char *const GetGitVersionStr();
|
||||
const size_t GetGitVersionLength();
|
||||
extern const char* CxbxVersionStr;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#include <Windows.h>
|
||||
|
||||
// Default to High Performance Mode on machines with dual graphics
|
||||
__declspec(dllexport) int AmdPowerXpressRequestHighPerformance = 1; // AMD
|
||||
__declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001; // NVIDIA
|
||||
#include <Windows.h>
|
||||
|
||||
// Default to High Performance Mode on machines with dual graphics
|
||||
__declspec(dllexport) int AmdPowerXpressRequestHighPerformance = 1; // AMD
|
||||
__declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001; // NVIDIA
|
||||
|
|
|
@ -1,102 +0,0 @@
|
|||
// This is an open source non-commercial project. Dear PVS-Studio, please check it.
|
||||
// PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * This file is part of Cxbx-Reloaded.
|
||||
// *
|
||||
// * Cxbx-Reloaded 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 recieved a copy of the GNU General Public License
|
||||
// * along with this program; see the file COPYING.
|
||||
// * If not, write to the Free Software Foundation, Inc.,
|
||||
// * 59 Temple Place - Suite 330, Bostom, MA 02111-1307, USA.
|
||||
// *
|
||||
// * (c) 2017-2019 Patrick van Logchem <pvanlogchem@gmail.com>
|
||||
// *
|
||||
// * All rights reserved
|
||||
// *
|
||||
// ******************************************************************
|
||||
|
||||
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
|
||||
#include <Windows.h> // For PAGE_READWRITE, PAGE_EXECUTE_READWRITE, and PAGE_NOACCESS
|
||||
|
||||
#include "util/std_extend.hpp"
|
||||
#include "AddressRanges.h"
|
||||
|
||||
// NOTE: Cannot be use in the header file.
|
||||
// For InitialMemoryProtection field only. Memory page protection usage, for use by VirtualAlloc
|
||||
// Shortend symbol aliasses for memory page protection
|
||||
#define PROT_UNH 0 // UNHANDLED
|
||||
#define PROT_RW PAGE_READWRITE
|
||||
#define PROT_XRW PAGE_EXECUTE_READWRITE
|
||||
#define PROT_NAC PAGE_NOACCESS
|
||||
|
||||
const _XboxAddressRanges XboxAddressRanges[] = {
|
||||
#ifdef DEBUG
|
||||
#define RANGE_ENTRY(START, END, SIZE, PROT, FLAGS, COMMENT) { START, END, SIZE, PROT, FLAGS, COMMENT }
|
||||
#else
|
||||
#define RANGE_ENTRY(START, END, SIZE, PROT, FLAGS, COMMENT) { START, SIZE, PROT, FLAGS }
|
||||
#endif
|
||||
// See https://xboxdevwiki.net/Memory
|
||||
// and https://xboxdevwiki.net/Boot_Process#Paging
|
||||
// Entry : Start , End , Size , Protect , RangeFlags , Comment
|
||||
RANGE_ENTRY(USER_ADDRESS1_BASE, USER_ADDRESS1_END, USER_ADDRESS1_SIZE, PROT_XRW, SYSTEM_ALL | MAY_FAIL, "MemLowVirtual (General Xbox type) lower 64 MiB Optional (already reserved via virtual_memory_placeholder)"),
|
||||
RANGE_ENTRY(USER_ADDRESS2_BASE, USER_ADDRESS2_END, USER_ADDRESS2_SIZE, PROT_XRW, SYSTEM_128MB | MAY_FAIL, "MemLowVirtual (Chihiro / DevKit) ^ + upper 64 MiB"),
|
||||
RANGE_ENTRY(PHYSICAL_MAP1_BASE, PHYSICAL_MAP1_END, PHYSICAL_MAP1_SIZE, PROT_UNH, SYSTEM_ALL , "MemPhysical (General Xbox type) lower 64 MiB"),
|
||||
RANGE_ENTRY(PHYSICAL_MAP2_BASE, PHYSICAL_MAP2_END, PHYSICAL_MAP2_SIZE, PROT_UNH, SYSTEM_128MB , "MemPhysical (Chihiro / DevKit) ^ + upper 64 MiB"),
|
||||
RANGE_ENTRY(DEVKIT_MEMORY_BASE, DEVKIT_MEMORY_END, DEVKIT_MEMORY_SIZE, PROT_NAC, SYSTEM_DEVKIT , "DevKitMemory"), // TODO : Check reserved range (might behave like MemTiled)
|
||||
RANGE_ENTRY(PAGE_TABLES_BASE , PAGE_TABLES_END , PAGE_TABLES_SIZE , PROT_RW , SYSTEM_ALL , "MemPageTable"), // See PAGE_TABLES_SIZE, which contains one 4 byte entry per PAGE_SIZE
|
||||
RANGE_ENTRY(SYSTEM_MEMORY_BASE, SYSTEM_MEMORY_END, SYSTEM_MEMORY_SIZE, PROT_RW , SYSTEM_ALL | MAY_FAIL, "SystemMemory Optional"), // TODO : Check reserved range (might behave like MemTiled)
|
||||
RANGE_ENTRY(TILED_MEMORY_BASE , TILED_MEMORY_END , TILED_MEMORY_SIZE , PROT_UNH, SYSTEM_ALL , "MemTiled Optional (even though it can't be reserved, MapViewOfFileEx to this range still works!?)"),
|
||||
RANGE_ENTRY(NV2A_DEVICE1_BASE , NV2A_DEVICE1_END , NV2A_DEVICE1_SIZE , PROT_NAC, SYSTEM_ALL , "DeviceNV2A_a (GPU)"),
|
||||
RANGE_ENTRY(NV2A_PRAMIN_BASE , NV2A_PRAMIN_END , NV2A_PRAMIN_SIZE1 , PROT_RW , SYSTEM_ALL , "MemNV2APRAMIN"),
|
||||
RANGE_ENTRY(NV2A_DEVICE2_BASE , NV2A_DEVICE2_END , NV2A_DEVICE2_SIZE , PROT_NAC, SYSTEM_ALL , "DeviceNV2A_b (GPU)"),
|
||||
RANGE_ENTRY(APU_DEVICE_BASE , APU_DEVICE_END , APU_DEVICE_SIZE , PROT_NAC, SYSTEM_ALL , "DeviceAPU"),
|
||||
RANGE_ENTRY(AC97_DEVICE_BASE , AC97_DEVICE_END , AC97_DEVICE_SIZE , PROT_NAC, SYSTEM_ALL , "DeviceAC97 (ACI)"),
|
||||
RANGE_ENTRY(USB_DEVICE_BASE , USB_DEVICE_END , USB_DEVICE_SIZE , PROT_NAC, SYSTEM_ALL , "DeviceUSB"),
|
||||
RANGE_ENTRY(NVNET_DEVICE_BASE , NVNET_DEVICE_END , NVNET_DEVICE_SIZE , PROT_NAC, SYSTEM_ALL , "DeviceNVNet"),
|
||||
RANGE_ENTRY(FLASH_DEVICE1_BASE, FLASH_DEVICE1_END, FLASH_DEVICEN_SIZE, PROT_NAC, SYSTEM_ALL , "DeviceFlash_a (Flash mirror 1)"),
|
||||
RANGE_ENTRY(FLASH_DEVICE2_BASE, FLASH_DEVICE2_END, FLASH_DEVICEN_SIZE, PROT_NAC, SYSTEM_ALL , "DeviceFlash_b (Flash mirror 2)"),
|
||||
RANGE_ENTRY(FLASH_DEVICE3_BASE, FLASH_DEVICE3_END, FLASH_DEVICEN_SIZE, PROT_NAC, SYSTEM_ALL | MAY_FAIL, "DeviceFlash_c (Flash mirror 3)"), // this region fails reservation when running under Ubuntu with wine, so it must be allowed to fail
|
||||
RANGE_ENTRY(FLASH_DEVICE4_BASE, FLASH_DEVICE4_END, FLASH_DEVICEN_SIZE, PROT_NAC, SYSTEM_ALL | MAY_FAIL, "DeviceFlash_d (Flash mirror 4) Optional (will probably fail reservation, which is acceptable - the 3 other mirrors work just fine"),
|
||||
#undef RANGE_ENTRY
|
||||
};
|
||||
|
||||
const size_t XboxAddressRanges_size = ARRAY_SIZE(XboxAddressRanges);
|
||||
|
||||
bool AddressRangeMatchesFlags(const size_t index, const unsigned int flags)
|
||||
{
|
||||
return XboxAddressRanges[index].RangeFlags & flags;
|
||||
}
|
||||
|
||||
bool IsOptionalAddressRange(const size_t index)
|
||||
{
|
||||
return AddressRangeMatchesFlags(index, MAY_FAIL);
|
||||
}
|
||||
|
||||
unsigned int AddressRangeGetSystemFlags(const size_t index)
|
||||
{
|
||||
return XboxAddressRanges[index].RangeFlags & SYSTEM_ALL;
|
||||
}
|
||||
|
||||
bool VerifyWow64()
|
||||
{
|
||||
typedef BOOL(WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
|
||||
BOOL bIsWow64 = FALSE;
|
||||
HMODULE hKernel32 = GetModuleHandle(TEXT("kernel32"));
|
||||
LPFN_ISWOW64PROCESS fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress(hKernel32, "IsWow64Process");
|
||||
if (fnIsWow64Process != nullptr) {
|
||||
HANDLE hCurrentProcess = GetCurrentProcess();
|
||||
fnIsWow64Process(hCurrentProcess, &bIsWow64);
|
||||
}
|
||||
|
||||
return (bIsWow64 != FALSE);
|
||||
}
|
|
@ -1,211 +0,0 @@
|
|||
// This is an open source non-commercial project. Dear PVS-Studio, please check it.
|
||||
// PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * This file is part of Cxbx-Reloaded.
|
||||
// *
|
||||
// * Cxbx-Reloaded 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 recieved a copy of the GNU General Public License
|
||||
// * along with this program; see the file COPYING.
|
||||
// * If not, write to the Free Software Foundation, Inc.,
|
||||
// * 59 Temple Place - Suite 330, Bostom, MA 02111-1307, USA.
|
||||
// *
|
||||
// * (c) 2017-2019 Patrick van Logchem <pvanlogchem@gmail.com>
|
||||
// * (c) 2019 ergo720
|
||||
// *
|
||||
// * All rights reserved
|
||||
// *
|
||||
// ******************************************************************
|
||||
#pragma once
|
||||
|
||||
#include <cstdint> // For uint32_t
|
||||
|
||||
#define KiB(x) ((x) * 1024 ) // = 0x00000400
|
||||
#define MiB(x) ((x) * KiB(1024)) // = 0x00100000
|
||||
|
||||
// TODO: Convert the rest of defines to constexpr or const in AddressRanges.h file in master/develop branch.
|
||||
#define USER_ADDRESS1_BASE 0x00010000
|
||||
#define USER_ADDRESS1_SIZE (MiB(64) - KiB(64)) // = 0x03FF0000
|
||||
#define USER_ADDRESS1_END (USER_ADDRESS1_BASE + USER_ADDRESS1_SIZE - 1) // 0x03FFFFFF
|
||||
|
||||
#define USER_ADDRESS2_BASE 0x04000000
|
||||
#define USER_ADDRESS2_SIZE (MiB(64)) // = 0x04000000
|
||||
#define USER_ADDRESS2_END (USER_ADDRESS2_BASE + USER_ADDRESS2_SIZE - 1) // 0x07FFFFFF
|
||||
|
||||
// Base addresses of various components
|
||||
// Segaboot entry point xor address
|
||||
inline const uint32_t SEGABOOT_EP_XOR = 0x40000000;
|
||||
// Kernel Segment Zero
|
||||
#define KSEG0_BASE 0x80000000
|
||||
|
||||
#define PHYSICAL_MAP_BASE 0x80000000
|
||||
#define PHYSICAL_MAP_SIZE (MiB(256)) // = 0x10000000
|
||||
#define PHYSICAL_MAP_END (PHYSICAL_MAP_BASE + PHYSICAL_MAP_SIZE - 1) // 0x8FFFFFFF
|
||||
|
||||
inline constexpr uint32_t PHYSICAL_MAP1_BASE = 0x80000000;
|
||||
inline constexpr uint32_t PHYSICAL_MAP1_SIZE = (MiB(64)); // = 0x04000000
|
||||
inline constexpr uint32_t PHYSICAL_MAP1_END = (PHYSICAL_MAP1_BASE + PHYSICAL_MAP1_SIZE - 1); // 0x83FFFFFF
|
||||
|
||||
inline constexpr uint32_t PHYSICAL_MAP2_BASE = 0x84000000;
|
||||
inline constexpr uint32_t PHYSICAL_MAP2_SIZE = (MiB(64)); // = 0x04000000
|
||||
inline constexpr uint32_t PHYSICAL_MAP2_END = (PHYSICAL_MAP2_BASE + PHYSICAL_MAP2_SIZE - 1); // 0x8FFFFFFF
|
||||
|
||||
#define CONTIGUOUS_MEMORY_BASE KSEG0_BASE // = 0x80000000
|
||||
#define XBOX_CONTIGUOUS_MEMORY_SIZE (MiB(64))
|
||||
#define CHIHIRO_CONTIGUOUS_MEMORY_SIZE (MiB(128))
|
||||
|
||||
inline constexpr uint32_t DEVKIT_MEMORY_BASE = 0xB0000000;
|
||||
inline constexpr uint32_t DEVKIT_MEMORY_SIZE = (MiB(256)); // = 0x10000000
|
||||
inline constexpr uint32_t DEVKIT_MEMORY_END = (DEVKIT_MEMORY_BASE + DEVKIT_MEMORY_SIZE - 1); // 0xBFFFFFFF
|
||||
|
||||
inline constexpr uint32_t PAGE_TABLES_BASE = 0xC0000000;
|
||||
inline constexpr uint32_t PAGE_TABLES_SIZE = (MiB(4)); // = 0x00400000
|
||||
inline constexpr uint32_t PAGE_TABLES_END = (PAGE_TABLES_BASE + PAGE_TABLES_SIZE - 1); // 0xC03FFFFF
|
||||
|
||||
inline constexpr uint32_t SYSTEM_MEMORY_BASE = 0xD0000000;
|
||||
inline constexpr uint32_t SYSTEM_MEMORY_SIZE = (MiB(512)); // = 0x20000000
|
||||
inline constexpr uint32_t SYSTEM_MEMORY_END = (SYSTEM_MEMORY_BASE + SYSTEM_MEMORY_SIZE - 1); // 0xEFFFFFFF
|
||||
|
||||
inline constexpr uint32_t TILED_MEMORY_BASE = 0xF0000000;
|
||||
inline constexpr uint32_t TILED_MEMORY_SIZE = (MiB(64)); // = 0x04000000
|
||||
inline constexpr uint32_t TILED_MEMORY_END = (TILED_MEMORY_BASE + TILED_MEMORY_SIZE - 1); // 0xF3FFFFFF
|
||||
|
||||
#define XBOX_WRITE_COMBINED_BASE 0xF0000000 // WC (The WC memory is another name of the tiled memory)
|
||||
#define XBOX_WRITE_COMBINED_SIZE (MiB(128)) // = 0x08000000
|
||||
#define XBOX_WRITE_COMBINED_END (XBOX_WRITE_COMBINED_BASE + XBOX_WRITE_COMBINED_SIZE - 1) // 0xF7FFFFFF
|
||||
|
||||
#define XBOX_UNCACHED_BASE 0xF8000000 // UC
|
||||
#define XBOX_UNCACHED_SIZE (MiB(128 - 4)) // = 0x07C00000
|
||||
#define XBOX_UNCACHED_END (XBOX_UNCACHED_BASE + XBOX_UNCACHED_SIZE - 1) // - 0xFFBFFFFF
|
||||
|
||||
inline constexpr uint32_t NV2A_DEVICE1_BASE = 0xFD000000;
|
||||
inline constexpr uint32_t NV2A_DEVICE1_SIZE = (MiB(7)); // = 0x00700000
|
||||
inline constexpr uint32_t NV2A_DEVICE1_END = (NV2A_DEVICE1_BASE + NV2A_DEVICE1_SIZE - 1); // 0xFD6FFFFF
|
||||
|
||||
inline constexpr uint32_t NV2A_PRAMIN_BASE = 0xFD700000;
|
||||
inline constexpr uint32_t NV2A_PRAMIN_SIZE1 = (MiB(1)); // = 0x00100000 // TODO: Might be best to merge PCIDevice.h's address ranges into this header file.
|
||||
inline constexpr uint32_t NV2A_PRAMIN_END = (NV2A_PRAMIN_BASE + NV2A_PRAMIN_SIZE1 - 1); // 0xFD7FFFFF
|
||||
|
||||
inline constexpr uint32_t NV2A_DEVICE2_BASE = 0xFD800000;
|
||||
inline constexpr uint32_t NV2A_DEVICE2_SIZE = (MiB(8)); // = 0x00800000
|
||||
inline constexpr uint32_t NV2A_DEVICE2_END = (NV2A_DEVICE2_BASE + NV2A_DEVICE2_SIZE - 1); // 0xFDFFFFFF
|
||||
|
||||
inline constexpr uint32_t APU_DEVICE_BASE = 0xFE800000;
|
||||
inline constexpr uint32_t APU_DEVICE_SIZE = (KiB(512)); // = 0x00080000
|
||||
inline constexpr uint32_t APU_DEVICE_END = (APU_DEVICE_BASE + APU_DEVICE_SIZE - 1); // 0xFE87FFFF
|
||||
|
||||
inline constexpr uint32_t AC97_DEVICE_BASE = 0xFEC00000;
|
||||
inline constexpr uint32_t AC97_DEVICE_SIZE = (KiB(4)); // = 0x0001000
|
||||
inline constexpr uint32_t AC97_DEVICE_END = (AC97_DEVICE_BASE + AC97_DEVICE_SIZE - 1); // 0xFEC00FFF
|
||||
|
||||
inline constexpr uint32_t USB_DEVICE_BASE = 0xFED00000;
|
||||
inline constexpr uint32_t USB_DEVICE_SIZE = (KiB(4)); // = 0x0001000
|
||||
inline constexpr uint32_t USB_DEVICE_END = (USB_DEVICE_BASE + USB_DEVICE_SIZE - 1); // 0xFED00FFF
|
||||
|
||||
inline constexpr uint32_t NVNET_DEVICE_BASE = 0xFEF00000;
|
||||
inline constexpr uint32_t NVNET_DEVICE_SIZE = (KiB(1)); // = 0x00000400
|
||||
inline constexpr uint32_t NVNET_DEVICE_END = (NVNET_DEVICE_BASE + NVNET_DEVICE_SIZE - 1); // 0xFEF003FF
|
||||
|
||||
inline constexpr uint32_t FLASH_DEVICEN_SIZE = (MiB(4)); // = 0x00400000
|
||||
inline constexpr uint32_t FLASH_DEVICE1_BASE = 0xFF000000;
|
||||
inline constexpr uint32_t FLASH_DEVICE1_END = (FLASH_DEVICE1_BASE + FLASH_DEVICEN_SIZE - 1); // 0xFF3FFFFF
|
||||
|
||||
inline constexpr uint32_t FLASH_DEVICE2_BASE = 0xFF400000;
|
||||
inline constexpr uint32_t FLASH_DEVICE2_END = (FLASH_DEVICE2_BASE + FLASH_DEVICEN_SIZE - 1); // 0xFF7FFFFF
|
||||
|
||||
inline constexpr uint32_t FLASH_DEVICE3_BASE = 0xFF800000;
|
||||
inline constexpr uint32_t FLASH_DEVICE3_END = (FLASH_DEVICE3_BASE + FLASH_DEVICEN_SIZE - 1); // 0xFFBFFFFF
|
||||
|
||||
inline constexpr uint32_t FLASH_DEVICE4_BASE = 0xFFC00000;
|
||||
inline constexpr uint32_t FLASH_DEVICE4_END = (FLASH_DEVICE4_BASE - 1 + FLASH_DEVICEN_SIZE); // 0xFFFFFFFF // -1 must be before size to remove compiler warning.
|
||||
|
||||
// Miscellaneous base addresses
|
||||
#define XBE_IMAGE_BASE 0x00010000
|
||||
#define PAGE_DIRECTORY_BASE 0xC0300000
|
||||
#define NV2A_INIT_VECTOR 0xFF000008
|
||||
|
||||
// Define virtual base and alternate virtual base of kernel
|
||||
#define XBOX_KERNEL_BASE (PHYSICAL_MAP_BASE + XBE_IMAGE_BASE)
|
||||
#define KERNEL_PHYSICAL_ADDRESS XBE_IMAGE_BASE // = 0x10000
|
||||
#define KERNEL_SIZE sizeof(DUMMY_KERNEL)
|
||||
#define KERNEL_STACK_SIZE 12288 // 0x03000, needed by PsCreateSystemThreadEx, however the current implementation doesn't use it
|
||||
|
||||
// Miscellaneous memory variables
|
||||
// Xbox pages are (1 << 12) = 0x00001000 = 4096 bytes in size. Large pages are 4 MiB instead
|
||||
// NOTE: PAGE_SIZE is also defined in xfile.h (oxdk) and linux_wrapper.h (oxdk)
|
||||
#define PAGE_SHIFT 12 // 2^12 = 4 KiB
|
||||
#define PAGE_SIZE (1 << PAGE_SHIFT) // = 0x00001000 = KiB(4)
|
||||
#define PAGE_MASK (PAGE_SIZE - 1)
|
||||
|
||||
#define LARGE_PAGE_SHIFT 22 // 2^22 = 4 MiB
|
||||
#define LARGE_PAGE_SIZE (1 << LARGE_PAGE_SHIFT) // = 0x00400000 = 4 MiB
|
||||
#define LARGE_PAGE_MASK (LARGE_PAGE_SIZE - 1)
|
||||
|
||||
#define BYTES_IN_PHYSICAL_MAP (MiB(256)) // this refers to the system RAM physical window 0x80000000 - 0x8FFFFFFF
|
||||
#define MAXIMUM_ZERO_BITS 21 // for XbAllocateVirtualMemory
|
||||
#define MAX_VIRTUAL_ADDRESS 0xFFFFFFFF
|
||||
|
||||
#define LOWEST_USER_ADDRESS XBE_IMAGE_BASE // = 0x00010000
|
||||
#define HIGHEST_USER_ADDRESS 0x7FFEFFFF
|
||||
#define HIGHEST_VMA_ADDRESS (HIGHEST_USER_ADDRESS - X64KB) // for NtAllocateVirtualMemory
|
||||
#define USER_MEMORY_SIZE (HIGHEST_USER_ADDRESS - LOWEST_USER_ADDRESS + 1) // 0x7FFE0000 = 2 GiB - 128 KiB
|
||||
|
||||
// Memory size per system
|
||||
#define XBOX_MEMORY_SIZE (MiB(64))
|
||||
#define CHIHIRO_MEMORY_SIZE (MiB(128))
|
||||
|
||||
// Common page calculations
|
||||
#define ROUND_UP_4K(size) (((size) + PAGE_MASK) & (~PAGE_MASK))
|
||||
#define ROUND_UP(size, alignment) (((size) + (alignment - 1)) & (~(alignment - 1)))
|
||||
#define ROUND_DOWN_4K(size) ((size) & (~PAGE_MASK))
|
||||
#define ROUND_DOWN(size, alignment) ((size) & (~(alignment - 1)))
|
||||
#define CHECK_ALIGNMENT(size, alignment) (((size) % (alignment)) == 0)
|
||||
#define PAGE_ALIGN(address) ROUND_DOWN_4K(address)
|
||||
|
||||
// Windows' address space allocation granularity;
|
||||
// See https://blogs.msdn.microsoft.com/oldnewthing/20031008-00/?p=42223
|
||||
const int BLOCK_SIZE = KiB(64);
|
||||
|
||||
extern const struct _XboxAddressRanges {
|
||||
uint32_t Start;
|
||||
#ifdef DEBUG
|
||||
uint32_t End; // TODO : Add validation that this End corresponds to specified Size
|
||||
#endif
|
||||
uint32_t Size;
|
||||
unsigned long InitialMemoryProtection; // Memory page protection, for use by VirtualAlloc
|
||||
// Shortend symbol aliasses for memory page protection
|
||||
#define PROT_UNH 0 // UNHANDLED
|
||||
#define PROT_RW PAGE_READWRITE
|
||||
#define PROT_XRW PAGE_EXECUTE_READWRITE
|
||||
#define PROT_NAC PAGE_NOACCESS
|
||||
|
||||
unsigned int RangeFlags;
|
||||
// Range flags (used for system selection and optional marker)
|
||||
#define MAY_FAIL (1 << 0) // Optional (may fail address range reservation)
|
||||
#define SYSTEM_XBOX (1 << 1)
|
||||
#define SYSTEM_DEVKIT (1 << 2)
|
||||
#define SYSTEM_CHIHIRO (1 << 3)
|
||||
// Short-hand for sets of system configurations
|
||||
#define SYSTEM_ALL (SYSTEM_XBOX | SYSTEM_DEVKIT | SYSTEM_CHIHIRO)
|
||||
#define SYSTEM_128MB ( SYSTEM_DEVKIT | SYSTEM_CHIHIRO)
|
||||
#ifdef DEBUG
|
||||
const char *Comment;
|
||||
#endif
|
||||
} XboxAddressRanges[];
|
||||
|
||||
extern const size_t XboxAddressRanges_size;
|
||||
|
||||
extern bool AddressRangeMatchesFlags(const size_t index, const unsigned int flags);
|
||||
extern bool IsOptionalAddressRange(const size_t index);
|
||||
extern unsigned int AddressRangeGetSystemFlags(const size_t index);
|
||||
|
||||
extern bool VerifyWow64();
|
|
@ -37,19 +37,19 @@ namespace CxbxDebugger
|
|||
// Note: Keep the top 3-bits empty as they are used internally
|
||||
enum ReportType : DWORD
|
||||
{
|
||||
HLECACHE_FILE = 0x1000,
|
||||
// Debugger report codes:
|
||||
|
||||
KERNEL_PATCH = 0x2000,
|
||||
HLECACHE_FILE = 0x00deed00,
|
||||
KERNEL_PATCH = 0x00deed01,
|
||||
FILE_OPENED = 0x00deed02,
|
||||
FILE_READ = 0x00deed03,
|
||||
FILE_CLOSED = 0x00deed04,
|
||||
DEBUGGER_INIT = 0x00deed05,
|
||||
FILE_WRITE = 0x00deed06,
|
||||
|
||||
FILE_OPENED = 0x3000,
|
||||
FILE_READ = 0x3001,
|
||||
FILE_WRITE = 0x3002,
|
||||
FILE_CLOSED = 0x3003,
|
||||
// Debugger query codes:
|
||||
|
||||
DEBUGGER_INIT = 0x4000,
|
||||
DEBUGGER_NEW_TARGET = 0x4001,
|
||||
|
||||
OVERRIDE_EXCEPTION = 0x5000,
|
||||
OVERRIDE_EXCEPTION = 0x00ceed01,
|
||||
};
|
||||
|
||||
bool IsAttached()
|
||||
|
@ -128,10 +128,8 @@ namespace CxbxDebugger
|
|||
case Internal::KERNEL_PATCH:
|
||||
case Internal::FILE_OPENED:
|
||||
case Internal::FILE_READ:
|
||||
case Internal::FILE_WRITE:
|
||||
case Internal::FILE_CLOSED:
|
||||
case Internal::DEBUGGER_INIT:
|
||||
case Internal::DEBUGGER_NEW_TARGET:
|
||||
return true;
|
||||
|
||||
case Internal::OVERRIDE_EXCEPTION:
|
||||
|
@ -150,20 +148,12 @@ namespace CxbxDebugger
|
|||
{
|
||||
Internal::ReportHelper Report(Internal::DEBUGGER_INIT);
|
||||
|
||||
Report.Add(0); // unused
|
||||
Report.AddString(XbeTitle);
|
||||
|
||||
Report.Send();
|
||||
}
|
||||
|
||||
void ReportNewTarget(const char* CommandLine)
|
||||
{
|
||||
Internal::ReportHelper Report(Internal::DEBUGGER_NEW_TARGET);
|
||||
|
||||
Report.AddString(CommandLine);
|
||||
|
||||
Report.Send();
|
||||
}
|
||||
|
||||
void ReportHLECacheFile(const char* Filename)
|
||||
{
|
||||
Internal::ReportHelper Report(Internal::HLECACHE_FILE);
|
||||
|
|
|
@ -36,7 +36,6 @@ namespace CxbxDebugger
|
|||
// Report helpers:
|
||||
|
||||
void ReportDebuggerInit(const char* XbeTitle);
|
||||
void ReportNewTarget(const char* CommandLine);
|
||||
|
||||
void ReportHLECacheFile(const char* Filename);
|
||||
void ReportKernelPatch(const char* ImportName, DWORD Address);
|
||||
|
|
|
@ -27,8 +27,12 @@
|
|||
#define LOG_PREFIX CXBXR_MODULE::EEPR
|
||||
#define LOG_PREFIX_INIT CXBXR_MODULE::INIT
|
||||
|
||||
#include <core\kernel\exports\xboxkrnl.h> // For XC_VALUE_INDEX and XBOX_EEPROM
|
||||
#include "cxbxr.hpp" // For CxbxrAbort
|
||||
// prevent name collisions
|
||||
namespace xboxkrnl
|
||||
{
|
||||
#include <xboxkrnl/xboxkrnl.h> // For XC_VALUE_INDEX and XBOX_EEPROM
|
||||
};
|
||||
|
||||
#include <stdio.h> // For printf
|
||||
#include <shlobj.h> // For HANDLE, CreateFile, CreateFileMapping, MapViewOfFile
|
||||
#include <random>
|
||||
|
@ -36,13 +40,14 @@
|
|||
#include "EmuEEPROM.h" // For EEPROMInfo, EEPROMInfos
|
||||
#include "core\kernel\support\Emu.h" // For EmuWarning
|
||||
#include "..\..\src\devices\LED.h" // For SetLEDSequence
|
||||
#include "..\core\kernel\init\CxbxKrnl.h"
|
||||
|
||||
xbox::XBOX_EEPROM *EEPROM = nullptr; // Set using CxbxRestoreEEPROM()
|
||||
xboxkrnl::XBOX_EEPROM *EEPROM = nullptr; // Set using CxbxRestoreEEPROM()
|
||||
|
||||
// Default value (NA), overwritten with the actual content in the eeprom by CxbxRestoreEEPROM
|
||||
xbox::ulong_xt XboxFactoryGameRegion = XC_GAME_REGION_NA;
|
||||
xboxkrnl::ULONG XboxFactoryGameRegion = XC_GAME_REGION_NA;
|
||||
|
||||
const EEPROMInfo* EmuFindEEPROMInfo(xbox::XC_VALUE_INDEX index)
|
||||
const EEPROMInfo* EmuFindEEPROMInfo(xboxkrnl::XC_VALUE_INDEX index)
|
||||
{
|
||||
for (int i = 0; EEPROMInfos[i].index != XC_END_MARKER; i++)
|
||||
if (EEPROMInfos[i].index == index)
|
||||
|
@ -74,7 +79,7 @@ static void EepromCRC(unsigned char *crc, unsigned char *data, long dataLen) {
|
|||
free(CRC_Data);
|
||||
}
|
||||
|
||||
void gen_section_CRCs(xbox::XBOX_EEPROM* eeprom) {
|
||||
void gen_section_CRCs(xboxkrnl::XBOX_EEPROM* eeprom) {
|
||||
const long Factory_size = sizeof(eeprom->FactorySettings) - sizeof(eeprom->FactorySettings.Checksum);
|
||||
const long User_size = sizeof(eeprom->UserSettings) - sizeof(eeprom->UserSettings.Checksum);
|
||||
EepromCRC(
|
||||
|
@ -89,10 +94,9 @@ void gen_section_CRCs(xbox::XBOX_EEPROM* eeprom) {
|
|||
);
|
||||
}
|
||||
|
||||
#ifdef CXBXR_EMU
|
||||
xbox::XBOX_EEPROM *CxbxRestoreEEPROM(char *szFilePath_EEPROM_bin)
|
||||
xboxkrnl::XBOX_EEPROM *CxbxRestoreEEPROM(char *szFilePath_EEPROM_bin)
|
||||
{
|
||||
xbox::XBOX_EEPROM *pEEPROM;
|
||||
xboxkrnl::XBOX_EEPROM *pEEPROM;
|
||||
|
||||
// First, try to open an existing EEPROM.bin file :
|
||||
HANDLE hFileEEPROM = CreateFile(szFilePath_EEPROM_bin,
|
||||
|
@ -122,7 +126,7 @@ xbox::XBOX_EEPROM *CxbxRestoreEEPROM(char *szFilePath_EEPROM_bin)
|
|||
}
|
||||
|
||||
// Make sure EEPROM.bin is at least 256 bytes in size
|
||||
SetFilePointer(hFileEEPROM, EEPROM_SIZE, nullptr, FILE_BEGIN);
|
||||
SetFilePointer(hFileEEPROM, 256, nullptr, FILE_BEGIN);
|
||||
SetEndOfFile(hFileEEPROM);
|
||||
|
||||
HANDLE hFileMappingEEPROM = CreateFileMapping(
|
||||
|
@ -141,12 +145,14 @@ xbox::XBOX_EEPROM *CxbxRestoreEEPROM(char *szFilePath_EEPROM_bin)
|
|||
LARGE_INTEGER len_li;
|
||||
GetFileSizeEx(hFileEEPROM, &len_li);
|
||||
unsigned int FileSize = len_li.u.LowPart;
|
||||
if (FileSize != 256) {
|
||||
CxbxrAbort("%s : EEPROM.bin file is not 256 bytes large!\n", __func__);
|
||||
if (FileSize != 256)
|
||||
{
|
||||
CxbxKrnlCleanup("%s : EEPROM.bin file is not 256 bytes large!\n", __func__);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
// Map EEPROM.bin contents into memory :
|
||||
pEEPROM = (xbox::XBOX_EEPROM *)MapViewOfFile(
|
||||
pEEPROM = (xboxkrnl::XBOX_EEPROM *)MapViewOfFile(
|
||||
hFileMappingEEPROM,
|
||||
FILE_MAP_READ | FILE_MAP_WRITE,
|
||||
/* dwFileOffsetHigh */0,
|
||||
|
@ -178,11 +184,11 @@ xbox::XBOX_EEPROM *CxbxRestoreEEPROM(char *szFilePath_EEPROM_bin)
|
|||
}
|
||||
|
||||
// Read the HDD (and eventually also the online) keys stored in the eeprom file. Users can input them in the eeprom menu
|
||||
memcpy(xbox::XboxHDKey, pEEPROM->EncryptedSettings.HDKey, xbox::XBOX_KEY_LENGTH);
|
||||
memcpy(xboxkrnl::XboxHDKey, pEEPROM->EncryptedSettings.HDKey, xboxkrnl::XBOX_KEY_LENGTH);
|
||||
|
||||
// Verify the checksum of the eeprom header
|
||||
UCHAR Checksum[20] = { 0 };
|
||||
xbox::XcHMAC(xbox::XboxEEPROMKey, 16, pEEPROM->EncryptedSettings.Confounder, 8, pEEPROM->EncryptedSettings.HDKey, 20, Checksum);
|
||||
xboxkrnl::XcHMAC(xboxkrnl::XboxEEPROMKey, 16, pEEPROM->EncryptedSettings.Confounder, 8, pEEPROM->EncryptedSettings.HDKey, 20, Checksum);
|
||||
if (memcmp(Checksum, pEEPROM->EncryptedSettings.Checksum, 20))
|
||||
{
|
||||
// The checksums do not match. Log this error and flash the LED (red, off, red, off)
|
||||
|
@ -192,51 +198,21 @@ xbox::XBOX_EEPROM *CxbxRestoreEEPROM(char *szFilePath_EEPROM_bin)
|
|||
|
||||
return pEEPROM;
|
||||
}
|
||||
#endif
|
||||
|
||||
void EmuEEPROMReset(xbox::XBOX_EEPROM* eeprom)
|
||||
void EmuEEPROMReset(xboxkrnl::XBOX_EEPROM* eeprom)
|
||||
{
|
||||
memset(eeprom, 0, sizeof(xbox::XBOX_EEPROM));
|
||||
memset(eeprom, 0, sizeof(xboxkrnl::XBOX_EEPROM));
|
||||
|
||||
// Setup random number generator
|
||||
std::random_device rd;
|
||||
std::mt19937 gen(rd());
|
||||
std::uniform_int_distribution<> randomDis(0, 255);
|
||||
|
||||
// Factory Settings
|
||||
// Set Factory Settings
|
||||
eeprom->FactorySettings.AVRegion = AV_STANDARD_NTSC_M | AV_FLAGS_60Hz;
|
||||
memcpy(eeprom->FactorySettings.SerialNumber, "Cxbx-R ", 12);
|
||||
// TODO: Ethernet Address
|
||||
// TODO: Online Key
|
||||
|
||||
// Generate a random serial number
|
||||
std::uniform_int_distribution<> serialDis(0, 9);
|
||||
std::string serial = "";
|
||||
for (int i = 0; i < 12; i++) {
|
||||
serial += std::to_string(serialDis(gen));
|
||||
}
|
||||
memset(eeprom->FactorySettings.SerialNumber, 0, 12);
|
||||
strncpy((char*)eeprom->FactorySettings.SerialNumber, serial.c_str(), 12);
|
||||
|
||||
// Generate a random mac address, starting with the Microsoft prefix
|
||||
eeprom->FactorySettings.EthernetAddr[0] = 0x00;
|
||||
eeprom->FactorySettings.EthernetAddr[1] = 0x50;
|
||||
eeprom->FactorySettings.EthernetAddr[2] = 0xF2;
|
||||
for (int i = 3; i < 6; i++) {
|
||||
eeprom->FactorySettings.EthernetAddr[i] = randomDis(gen);
|
||||
}
|
||||
|
||||
// Generate a random Online Key
|
||||
for (int i = 0; i < 16; i++) {
|
||||
eeprom->FactorySettings.OnlineKey[i] = randomDis(gen);
|
||||
}
|
||||
|
||||
// Encrypted Settings
|
||||
// Encrypted Section
|
||||
eeprom->EncryptedSettings.GameRegion = XC_GAME_REGION_NA;
|
||||
|
||||
// Generate a random HDD Key
|
||||
for (int i = 0; i < 16; i++) {
|
||||
eeprom->EncryptedSettings.HDKey[i] = randomDis(gen);
|
||||
}
|
||||
|
||||
xbox::XcHMAC(xbox::XboxEEPROMKey, 16, eeprom->EncryptedSettings.Confounder, 8, eeprom->EncryptedSettings.HDKey, 20, eeprom->EncryptedSettings.Checksum);
|
||||
// TODO: HDD Key
|
||||
xboxkrnl::XcHMAC(xboxkrnl::XboxEEPROMKey, 16, eeprom->EncryptedSettings.Confounder, 8, eeprom->EncryptedSettings.HDKey, 20, eeprom->EncryptedSettings.Checksum);
|
||||
|
||||
// User Settings
|
||||
eeprom->UserSettings.Language = XC_LANGUAGE_ENGLISH; // = English
|
||||
|
@ -246,5 +222,34 @@ void EmuEEPROMReset(xbox::XBOX_EEPROM* eeprom)
|
|||
eeprom->UserSettings.ParentalControlMovies = XC_PC_MAX; // = XC_PRTL_CRTL_MAX
|
||||
eeprom->UserSettings.MiscFlags = 0; // No automatic power down
|
||||
|
||||
// Online Settings
|
||||
|
||||
// Setup the Serial and Mac Generators
|
||||
std::random_device rd;
|
||||
std::mt19937 gen(rd());
|
||||
std::uniform_int_distribution<> serialDis (0, 9);
|
||||
std::uniform_int_distribution<> macOnlineDis(0, 255);
|
||||
|
||||
// Generate a random serial number
|
||||
std::string serial = "";
|
||||
for (int i = 0; i < 12; i++) {
|
||||
serial += std::to_string(serialDis(gen));
|
||||
}
|
||||
memset(eeprom->FactorySettings.SerialNumber, 0, 12);
|
||||
strncpy((char*)eeprom->FactorySettings.SerialNumber, serial.c_str(), 12);
|
||||
|
||||
// Generate a random mac address
|
||||
eeprom->FactorySettings.EthernetAddr[0] = 0x00;
|
||||
eeprom->FactorySettings.EthernetAddr[1] = 0x50;
|
||||
eeprom->FactorySettings.EthernetAddr[2] = 0xF2;
|
||||
for (int i = 3; i < 6; i++) {
|
||||
eeprom->FactorySettings.EthernetAddr[i] = macOnlineDis(gen);
|
||||
}
|
||||
|
||||
// Generate a random Online Key
|
||||
for (int i = 0; i < 16; i++) {
|
||||
eeprom->FactorySettings.OnlineKey[i] = macOnlineDis(gen);
|
||||
}
|
||||
|
||||
// TODO: TimeZone Settings
|
||||
}
|
||||
|
|
|
@ -27,55 +27,66 @@
|
|||
#ifndef EMU_EEPROM_H
|
||||
#define EMU_EEPROM_H
|
||||
|
||||
#include <core\kernel\exports\xboxkrnl.h> // For XC_VALUE_INDEX and XBOX_EEPROM
|
||||
#if defined(__cplusplus)
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
#define EEPROM_SIZE sizeof(xbox::XBOX_EEPROM)
|
||||
// prevent name collisions
|
||||
namespace xboxkrnl
|
||||
{
|
||||
#undef _WIN32 // Compile-in REG_DWORD and friends, since we lack a <windows> include here
|
||||
#include <xboxkrnl/xboxkrnl.h> // For XC_VALUE_INDEX and XBOX_EEPROM
|
||||
#define _WIN32
|
||||
};
|
||||
|
||||
#define EEPROM_SIZE sizeof(xboxkrnl::XBOX_EEPROM)
|
||||
|
||||
typedef struct EEPROMInfo {
|
||||
xbox::XC_VALUE_INDEX index;
|
||||
xboxkrnl::XC_VALUE_INDEX index;
|
||||
int value_offset;
|
||||
int value_type;
|
||||
int value_length;
|
||||
} EEPROMInfo;
|
||||
|
||||
#define XC_END_MARKER (xbox::XC_VALUE_INDEX)-1
|
||||
#define XC_END_MARKER (xboxkrnl::XC_VALUE_INDEX)-1
|
||||
|
||||
#define EEPROM_INFO_ENTRY(XC, Member, REG_Type) \
|
||||
{ xbox::XC, offsetof(xbox::XBOX_EEPROM, Member), REG_Type, sizeof(((xbox::XBOX_EEPROM *)0)->Member) }
|
||||
{ xboxkrnl::##XC, offsetof(xboxkrnl::XBOX_EEPROM, Member), REG_Type, sizeof(((xboxkrnl::XBOX_EEPROM *)0)->Member) }
|
||||
|
||||
static const EEPROMInfo EEPROMInfos[] = {
|
||||
EEPROM_INFO_ENTRY(XC_TIMEZONE_BIAS, UserSettings.TimeZoneBias, xbox::reg_dword),
|
||||
EEPROM_INFO_ENTRY(XC_TZ_STD_NAME, UserSettings.TimeZoneStdName, xbox::reg_binary),
|
||||
EEPROM_INFO_ENTRY(XC_TZ_STD_DATE, UserSettings.TimeZoneStdDate, xbox::reg_dword),
|
||||
EEPROM_INFO_ENTRY(XC_TZ_STD_BIAS, UserSettings.TimeZoneStdBias, xbox::reg_dword),
|
||||
EEPROM_INFO_ENTRY(XC_TZ_DLT_NAME, UserSettings.TimeZoneDltName, xbox::reg_binary),
|
||||
EEPROM_INFO_ENTRY(XC_TZ_DLT_DATE, UserSettings.TimeZoneDltDate, xbox::reg_dword),
|
||||
EEPROM_INFO_ENTRY(XC_TZ_DLT_BIAS, UserSettings.TimeZoneDltBias, xbox::reg_dword),
|
||||
EEPROM_INFO_ENTRY(XC_LANGUAGE, UserSettings.Language, xbox::reg_dword),
|
||||
EEPROM_INFO_ENTRY(XC_VIDEO, UserSettings.VideoFlags, xbox::reg_dword),
|
||||
EEPROM_INFO_ENTRY(XC_AUDIO, UserSettings.AudioFlags, xbox::reg_dword),
|
||||
EEPROM_INFO_ENTRY(XC_P_CONTROL_GAMES, UserSettings.ParentalControlGames, xbox::reg_dword), // Zapper queries this. TODO : Should this be xbox::reg_none?
|
||||
EEPROM_INFO_ENTRY(XC_P_CONTROL_PASSWORD, UserSettings.ParentalControlPassword, xbox::reg_dword),
|
||||
EEPROM_INFO_ENTRY(XC_P_CONTROL_MOVIES, UserSettings.ParentalControlMovies, xbox::reg_dword), // Xbox Dashboard queries this.
|
||||
EEPROM_INFO_ENTRY(XC_ONLINE_IP_ADDRESS, UserSettings.OnlineIpAddress, xbox::reg_dword),
|
||||
EEPROM_INFO_ENTRY(XC_ONLINE_DNS_ADDRESS, UserSettings.OnlineDnsAddress, xbox::reg_dword),
|
||||
EEPROM_INFO_ENTRY(XC_ONLINE_DEFAULT_GATEWAY_ADDRESS, UserSettings.OnlineDefaultGatewayAddress, xbox::reg_dword),
|
||||
EEPROM_INFO_ENTRY(XC_ONLINE_SUBNET_ADDRESS, UserSettings.OnlineSubnetMask, xbox::reg_dword),
|
||||
EEPROM_INFO_ENTRY(XC_MISC, UserSettings.MiscFlags, xbox::reg_dword),
|
||||
EEPROM_INFO_ENTRY(XC_DVD_REGION, UserSettings.DvdRegion, xbox::reg_dword),
|
||||
EEPROM_INFO_ENTRY(XC_MAX_OS, UserSettings, xbox::reg_binary),
|
||||
EEPROM_INFO_ENTRY(XC_TIMEZONE_BIAS, UserSettings.TimeZoneBias, REG_DWORD),
|
||||
EEPROM_INFO_ENTRY(XC_TZ_STD_NAME, UserSettings.TimeZoneStdName, REG_BINARY),
|
||||
EEPROM_INFO_ENTRY(XC_TZ_STD_DATE, UserSettings.TimeZoneStdDate, REG_DWORD),
|
||||
EEPROM_INFO_ENTRY(XC_TZ_STD_BIAS, UserSettings.TimeZoneStdBias, REG_DWORD),
|
||||
EEPROM_INFO_ENTRY(XC_TZ_DLT_NAME, UserSettings.TimeZoneDltName, REG_BINARY),
|
||||
EEPROM_INFO_ENTRY(XC_TZ_DLT_DATE, UserSettings.TimeZoneDltDate, REG_DWORD),
|
||||
EEPROM_INFO_ENTRY(XC_TZ_DLT_BIAS, UserSettings.TimeZoneDltBias, REG_DWORD),
|
||||
EEPROM_INFO_ENTRY(XC_LANGUAGE, UserSettings.Language, REG_DWORD),
|
||||
EEPROM_INFO_ENTRY(XC_VIDEO, UserSettings.VideoFlags, REG_DWORD),
|
||||
EEPROM_INFO_ENTRY(XC_AUDIO, UserSettings.AudioFlags, REG_DWORD),
|
||||
EEPROM_INFO_ENTRY(XC_P_CONTROL_GAMES, UserSettings.ParentalControlGames, REG_DWORD), // Zapper queries this. TODO : Should this be REG_NONE?
|
||||
EEPROM_INFO_ENTRY(XC_P_CONTROL_PASSWORD, UserSettings.ParentalControlPassword, REG_DWORD),
|
||||
EEPROM_INFO_ENTRY(XC_P_CONTROL_MOVIES, UserSettings.ParentalControlMovies, REG_DWORD), // Xbox Dashboard queries this.
|
||||
EEPROM_INFO_ENTRY(XC_ONLINE_IP_ADDRESS, UserSettings.OnlineIpAddress, REG_DWORD),
|
||||
EEPROM_INFO_ENTRY(XC_ONLINE_DNS_ADDRESS, UserSettings.OnlineDnsAddress, REG_DWORD),
|
||||
EEPROM_INFO_ENTRY(XC_ONLINE_DEFAULT_GATEWAY_ADDRESS, UserSettings.OnlineDefaultGatewayAddress, REG_DWORD),
|
||||
EEPROM_INFO_ENTRY(XC_ONLINE_SUBNET_ADDRESS, UserSettings.OnlineSubnetMask, REG_DWORD),
|
||||
EEPROM_INFO_ENTRY(XC_MISC, UserSettings.MiscFlags, REG_DWORD),
|
||||
EEPROM_INFO_ENTRY(XC_DVD_REGION, UserSettings.DvdRegion, REG_DWORD),
|
||||
EEPROM_INFO_ENTRY(XC_MAX_OS, UserSettings, REG_BINARY),
|
||||
// XC_MAX_OS is called to return a complete XBOX_USER_SETTINGS structure
|
||||
//
|
||||
// One example is from XapipQueryTimeZoneInformation(, xbox::reg_dword, sizeof(DWORD), where it is used to
|
||||
// One example is from XapipQueryTimeZoneInformation(, REG_DWORD, sizeof(DWORD), where it is used to
|
||||
// detect the local timezone information.
|
||||
EEPROM_INFO_ENTRY(XC_FACTORY_SERIAL_NUMBER, FactorySettings.SerialNumber, xbox::reg_binary),
|
||||
EEPROM_INFO_ENTRY(XC_FACTORY_ETHERNET_ADDR, FactorySettings.EthernetAddr, xbox::reg_binary),
|
||||
EEPROM_INFO_ENTRY(XC_FACTORY_ONLINE_KEY, FactorySettings.OnlineKey, xbox::reg_binary),
|
||||
EEPROM_INFO_ENTRY(XC_FACTORY_AV_REGION, FactorySettings.AVRegion, xbox::reg_dword),
|
||||
// Note : XC_FACTORY_GAME_REGION is linked to a separate ULONG XboxFactoryGameRegion (of type xbox::reg_dword)
|
||||
EEPROM_INFO_ENTRY(XC_FACTORY_GAME_REGION, EncryptedSettings.GameRegion, xbox::reg_dword),
|
||||
EEPROM_INFO_ENTRY(XC_ENCRYPTED_SECTION, EncryptedSettings, xbox::reg_binary),
|
||||
{ xbox::XC_MAX_ALL, 0, xbox::reg_binary, sizeof(xbox::XBOX_EEPROM) },
|
||||
EEPROM_INFO_ENTRY(XC_FACTORY_SERIAL_NUMBER, FactorySettings.SerialNumber, REG_BINARY),
|
||||
EEPROM_INFO_ENTRY(XC_FACTORY_ETHERNET_ADDR, FactorySettings.EthernetAddr, REG_BINARY),
|
||||
EEPROM_INFO_ENTRY(XC_FACTORY_ONLINE_KEY, FactorySettings.OnlineKey, REG_BINARY),
|
||||
EEPROM_INFO_ENTRY(XC_FACTORY_AV_REGION, FactorySettings.AVRegion, REG_DWORD),
|
||||
// Note : XC_FACTORY_GAME_REGION is linked to a separate ULONG XboxFactoryGameRegion (of type REG_DWORD)
|
||||
EEPROM_INFO_ENTRY(XC_FACTORY_GAME_REGION, EncryptedSettings.GameRegion, REG_DWORD),
|
||||
EEPROM_INFO_ENTRY(XC_ENCRYPTED_SECTION, EncryptedSettings, REG_BINARY),
|
||||
{ xboxkrnl::XC_MAX_ALL, 0, REG_BINARY, sizeof(xboxkrnl::XBOX_EEPROM) },
|
||||
{ XC_END_MARKER }
|
||||
};
|
||||
|
||||
|
@ -139,16 +150,20 @@ static const EEPROMInfo EEPROMInfos[] = {
|
|||
#define DVD_REGION_RESERVED 7
|
||||
#define DVD_REGION_INTERNATIONAL 8
|
||||
|
||||
extern xbox::XBOX_EEPROM *CxbxRestoreEEPROM(char *szFilePath_EEPROM_bin);
|
||||
extern xboxkrnl::XBOX_EEPROM *CxbxRestoreEEPROM(char *szFilePath_EEPROM_bin);
|
||||
|
||||
extern const EEPROMInfo* EmuFindEEPROMInfo(xbox::XC_VALUE_INDEX index);
|
||||
extern const EEPROMInfo* EmuFindEEPROMInfo(xboxkrnl::XC_VALUE_INDEX index);
|
||||
|
||||
extern xbox::XBOX_EEPROM *EEPROM;
|
||||
extern xboxkrnl::XBOX_EEPROM *EEPROM;
|
||||
|
||||
extern xbox::ulong_xt XboxFactoryGameRegion;
|
||||
extern xboxkrnl::ULONG XboxFactoryGameRegion;
|
||||
|
||||
extern void EmuEEPROMReset(xbox::XBOX_EEPROM* eeprom);
|
||||
extern void EmuEEPROMReset(xboxkrnl::XBOX_EEPROM* eeprom);
|
||||
|
||||
void gen_section_CRCs(xbox::XBOX_EEPROM*);
|
||||
void gen_section_CRCs(xboxkrnl::XBOX_EEPROM*);
|
||||
|
||||
#if defined(__cplusplus)
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // EMU_EEPROM_H
|
||||
|
|
|
@ -27,14 +27,14 @@
|
|||
|
||||
#include "common\Error.h"
|
||||
|
||||
const std::string Error::GetError()
|
||||
const std::string& Error::GetError()
|
||||
{
|
||||
return std::string(m_szError);
|
||||
return m_strError;
|
||||
}
|
||||
|
||||
bool Error::HasError() const
|
||||
{
|
||||
return HasFatalError() || (m_szError[0] != '\0');
|
||||
return HasFatalError() || !m_strError.empty();
|
||||
}
|
||||
|
||||
bool Error::HasFatalError() const
|
||||
|
@ -46,7 +46,7 @@ bool Error::ClearError()
|
|||
{
|
||||
if (m_bFatal) { return false; }
|
||||
|
||||
m_szError[0] = '\0';
|
||||
m_strError.clear();
|
||||
m_bFatal = false;
|
||||
|
||||
return true;
|
||||
|
@ -54,17 +54,11 @@ bool Error::ClearError()
|
|||
|
||||
void Error::SetError(const std::string& strError)
|
||||
{
|
||||
// assert(strError.length()) < sizeof(m_szError));
|
||||
|
||||
memset(m_szError, '\0', sizeof(m_szError));
|
||||
memcpy(m_szError, strError.c_str(), strError.length());
|
||||
m_strError = strError;
|
||||
}
|
||||
|
||||
void Error::SetFatalError(const std::string& strError)
|
||||
{
|
||||
// assert(strError.length()) < sizeof(m_szError));
|
||||
|
||||
memset(m_szError, '\0', sizeof(m_szError));
|
||||
memcpy(m_szError, strError.c_str(), strError.length());
|
||||
m_strError = strError;
|
||||
m_bFatal = true;
|
||||
}
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
class Error
|
||||
{
|
||||
public:
|
||||
const std::string GetError();
|
||||
const std::string& GetError();
|
||||
|
||||
bool HasError() const;
|
||||
bool HasFatalError() const;
|
||||
|
@ -42,15 +42,15 @@ public:
|
|||
|
||||
protected:
|
||||
// protected constructor so this class must be inherited from
|
||||
Error() : m_szError("\0"), m_bFatal(false) { }
|
||||
Error() : m_bFatal(false) { }
|
||||
|
||||
// protected so only derived class may set an error
|
||||
void SetError(const std::string& strStrError);
|
||||
void SetFatalError(const std::string& strError);
|
||||
|
||||
private:
|
||||
char m_szError[60]; // Cannot be std::string, which sizeof() differs between builds
|
||||
uint32_t m_bFatal; // Cannot be bool, to avoid bit packing altering memory layout
|
||||
std::string m_strError;
|
||||
bool m_bFatal;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,187 +0,0 @@
|
|||
// This is an open source non-commercial project. Dear PVS-Studio, please check it.
|
||||
// PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * This file is part of the Cxbx-Reloaded project.
|
||||
// *
|
||||
// * Cxbx and Cxbe are free software; you can redistribute them
|
||||
// * and/or modify them 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 recieved a copy of the GNU General Public License
|
||||
// * along with this program; see the file COPYING.
|
||||
// * If not, write to the Free Software Foundation, Inc.,
|
||||
// * 59 Temple Place - Suite 330, Bostom, MA 02111-1307, USA.
|
||||
// *
|
||||
// * All rights reserved
|
||||
// *
|
||||
// ******************************************************************
|
||||
#define LOG_PREFIX CXBXR_MODULE::FILE
|
||||
#define LOG_PREFIX_INIT CXBXR_MODULE::INIT
|
||||
|
||||
#include <filesystem>
|
||||
#include "common/cxbxr.hpp"
|
||||
#include "Settings.hpp"
|
||||
#include "EmuShared.h"
|
||||
#include "xxhash.h" // for XXH3_64bits
|
||||
#include "core/kernel/common/xbox.h"
|
||||
#include "Logging.h"
|
||||
|
||||
char szFilePath_CxbxReloaded_Exe[MAX_PATH] = { 0 };
|
||||
char szFilePath_EEPROM_bin[MAX_PATH] = { 0 };
|
||||
|
||||
std::string g_DataFilePath;
|
||||
std::string g_DiskBasePath;
|
||||
std::string g_MuBasePath;
|
||||
|
||||
//TODO: Possible move CxbxResolveHostToFullPath inline function someplace else if become useful elsewhere.
|
||||
// Let filesystem library clean it up for us, including resolve host's symbolic link path.
|
||||
// Since internal kernel do translate to full path than preserved host symoblic link path.
|
||||
void CxbxResolveHostToFullPath(std::filesystem::path& file_path, std::string_view finish_error_sentence) {
|
||||
std::error_code error;
|
||||
std::filesystem::path sanityPath = std::filesystem::canonical(file_path, error);
|
||||
if (error) {
|
||||
|
||||
// The MS implementation of std::filesystem::canonical internally calls GetFinalPathNameByHandleW, which fails with ERROR_FILE_NOT_FOUND when called
|
||||
// on a file inside a mounted xiso under Windows with the xbox-iso-vfs tool because of this known dokany bug https://github.com/dokan-dev/dokany/issues/343
|
||||
EmuLogInit(LOG_LEVEL::WARNING, "Could not resolve to %s: %s, dokany in use? The error was: %s",
|
||||
finish_error_sentence.data(), file_path.string().c_str(), error.message().c_str());
|
||||
|
||||
sanityPath = std::filesystem::absolute(std::filesystem::weakly_canonical(file_path, error), error);
|
||||
if (error) {
|
||||
CxbxrAbortEx(LOG_PREFIX_INIT, "Could not resolve to %s: %s. The error was: %s", finish_error_sentence.data(), file_path.string().c_str(), error.message().c_str());
|
||||
}
|
||||
}
|
||||
file_path = sanityPath;
|
||||
}
|
||||
// TODO: Eventually, we should remove this function to start using std::filesystem::path method for all host paths.
|
||||
void CxbxResolveHostToFullPath(std::string& file_path, std::string_view finish_error_sentence) {
|
||||
std::filesystem::path sanityPath(file_path);
|
||||
CxbxResolveHostToFullPath(sanityPath, finish_error_sentence);
|
||||
file_path = sanityPath.string();
|
||||
}
|
||||
|
||||
// NOTE: Do NOT modify g_<custom>BasePath variables after this call!
|
||||
void CxbxrInitFilePaths()
|
||||
{
|
||||
if (g_Settings) {
|
||||
g_DataFilePath = g_Settings->GetDataLocation();
|
||||
}
|
||||
else {
|
||||
char dataLoc[MAX_PATH];
|
||||
g_EmuShared->GetDataLocation(dataLoc);
|
||||
g_DataFilePath = dataLoc;
|
||||
}
|
||||
|
||||
// Make sure our data folder exists :
|
||||
bool result = std::filesystem::exists(g_DataFilePath);
|
||||
if (!result && !std::filesystem::create_directory(g_DataFilePath)) {
|
||||
CxbxrAbort("%s : Couldn't create Cxbx-Reloaded's data folder!", __func__);
|
||||
}
|
||||
|
||||
// Make sure the EmuDisk folder exists
|
||||
g_DiskBasePath = g_DataFilePath + "\\EmuDisk";
|
||||
result = std::filesystem::exists(g_DiskBasePath);
|
||||
if (!result && !std::filesystem::create_directory(g_DiskBasePath)) {
|
||||
CxbxrAbort("%s : Couldn't create Cxbx-Reloaded EmuDisk folder!", __func__);
|
||||
}
|
||||
CxbxResolveHostToFullPath(g_DiskBasePath, "Cxbx-Reloaded's EmuDisk directory");
|
||||
g_DiskBasePath = std::filesystem::path(g_DiskBasePath).append("").string();
|
||||
|
||||
// Make sure the EmuDMu folder exists
|
||||
g_MuBasePath = g_DataFilePath + "\\EmuMu";
|
||||
result = std::filesystem::exists(g_MuBasePath);
|
||||
if (!result && !std::filesystem::create_directory(g_MuBasePath)) {
|
||||
CxbxrAbort("%s : Couldn't create Cxbx-Reloaded EmuMu folder!", __func__);
|
||||
}
|
||||
CxbxResolveHostToFullPath(g_MuBasePath, "Cxbx-Reloaded's EmuMu directory");
|
||||
g_MuBasePath = std::filesystem::path(g_MuBasePath).append("").string();
|
||||
|
||||
snprintf(szFilePath_EEPROM_bin, MAX_PATH, "%s\\EEPROM.bin", g_DataFilePath.c_str());
|
||||
|
||||
GetModuleFileName(GetModuleHandle(nullptr), szFilePath_CxbxReloaded_Exe, MAX_PATH);
|
||||
}
|
||||
|
||||
// Loads a keys.bin file as generated by dump-xbox
|
||||
// See https://github.com/JayFoxRox/xqemu-tools/blob/master/dump-xbox.c
|
||||
void LoadXboxKeys()
|
||||
{
|
||||
std::string keys_path = g_DataFilePath + "\\keys.bin";
|
||||
|
||||
// Attempt to open Keys.bin
|
||||
FILE* fp = fopen(keys_path.c_str(), "rb");
|
||||
|
||||
if (fp != nullptr) {
|
||||
// Determine size of Keys.bin
|
||||
xbox::XBOX_KEY_DATA keys[2];
|
||||
fseek(fp, 0, SEEK_END);
|
||||
long size = ftell(fp);
|
||||
rewind(fp);
|
||||
|
||||
// If the size of Keys.bin is correct (two keys), read it
|
||||
if (size == xbox::XBOX_KEY_LENGTH * 2) {
|
||||
fread(keys, xbox::XBOX_KEY_LENGTH, 2, fp);
|
||||
|
||||
memcpy(xbox::XboxEEPROMKey, &keys[0], xbox::XBOX_KEY_LENGTH);
|
||||
memcpy(xbox::XboxCertificateKey, &keys[1], xbox::XBOX_KEY_LENGTH);
|
||||
}
|
||||
else {
|
||||
EmuLog(LOG_LEVEL::WARNING, "Keys.bin has an incorrect filesize. Should be %d bytes", xbox::XBOX_KEY_LENGTH * 2);
|
||||
}
|
||||
|
||||
fclose(fp);
|
||||
return;
|
||||
}
|
||||
|
||||
// If we didn't already exit the function, keys.bin could not be loaded
|
||||
EmuLog(LOG_LEVEL::WARNING, "Failed to load Keys.bin. Cxbx-Reloaded will be unable to read Save Data from a real Xbox");
|
||||
}
|
||||
|
||||
static HANDLE hMapDataHash = nullptr;
|
||||
|
||||
bool CxbxrLockFilePath()
|
||||
{
|
||||
std::stringstream filePathHash("Local\\");
|
||||
uint64_t hashValue = XXH3_64bits(g_DataFilePath.c_str(), g_DataFilePath.length() + 1);
|
||||
if (!hashValue) {
|
||||
CxbxrAbort("%s : Couldn't generate Cxbx-Reloaded's data folder hash!", __func__);
|
||||
}
|
||||
|
||||
filePathHash << std::hex << hashValue;
|
||||
|
||||
hMapDataHash = CreateFileMapping(
|
||||
INVALID_HANDLE_VALUE, // Paging file
|
||||
nullptr, // default security attributes
|
||||
PAGE_READONLY, // readonly access
|
||||
0, // size: high 32 bits
|
||||
/*Dummy size*/4, // size: low 32 bits
|
||||
filePathHash.str().c_str() // name of map object
|
||||
);
|
||||
|
||||
if (hMapDataHash == nullptr) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (GetLastError() == ERROR_ALREADY_EXISTS) {
|
||||
PopupError(nullptr, "Data path directory is currently in use.\nUse a different data path directory or stop emulation from another process.");
|
||||
CloseHandle(hMapDataHash);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void CxbxrUnlockFilePath()
|
||||
{
|
||||
// Close opened file path lockdown shared memory.
|
||||
if (hMapDataHash) {
|
||||
CloseHandle(hMapDataHash);
|
||||
hMapDataHash = nullptr;
|
||||
}
|
||||
}
|
|
@ -1,53 +0,0 @@
|
|||
// This is an open source non-commercial project. Dear PVS-Studio, please check it.
|
||||
// PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * This file is part of the Cxbx-Reloaded project.
|
||||
// *
|
||||
// * Cxbx and Cxbe are free software; you can redistribute them
|
||||
// * and/or modify them 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 recieved a copy of the GNU General Public License
|
||||
// * along with this program; see the file COPYING.
|
||||
// * If not, write to the Free Software Foundation, Inc.,
|
||||
// * 59 Temple Place - Suite 330, Bostom, MA 02111-1307, USA.
|
||||
// *
|
||||
// * All rights reserved
|
||||
// *
|
||||
// ******************************************************************
|
||||
#pragma once
|
||||
|
||||
extern char szFilePath_CxbxReloaded_Exe[MAX_PATH];
|
||||
extern char szFilePath_EEPROM_bin[MAX_PATH];
|
||||
|
||||
extern std::string g_DataFilePath;
|
||||
extern std::string g_DiskBasePath;
|
||||
extern std::string g_MuBasePath;
|
||||
|
||||
#include <filesystem>
|
||||
|
||||
//TODO: Possible move CxbxResolveHostToFullPath inline function someplace else if become useful elsewhere.
|
||||
// Let filesystem library clean it up for us, including resolve host's symbolic link path.
|
||||
// Since internal kernel do translate to full path than preserved host symoblic link path.
|
||||
void CxbxResolveHostToFullPath(std::filesystem::path& file_path, std::string_view finish_error_sentence);
|
||||
|
||||
// TODO: Eventually, we should remove this function to start using std::filesystem::path method for all host paths.
|
||||
void CxbxResolveHostToFullPath(std::string& file_path, std::string_view finish_error_sentence);
|
||||
|
||||
// NOTE: Do NOT modify g_<custom>BasePath variables after this call!
|
||||
void CxbxrInitFilePaths();
|
||||
|
||||
// Loads a keys.bin file as generated by dump-xbox
|
||||
// See https://github.com/JayFoxRox/xqemu-tools/blob/master/dump-xbox.c
|
||||
void LoadXboxKeys();
|
||||
|
||||
bool CxbxrLockFilePath();
|
||||
|
||||
void CxbxrUnlockFilePath();
|
|
@ -38,7 +38,6 @@ typedef enum class _IPC_UPDATE_GUI {
|
|||
, XBOX_LED_COLOUR
|
||||
, LOG_ENABLED
|
||||
, KRNL_IS_READY
|
||||
, OVERLAY
|
||||
} IPC_UPDATE_GUI;
|
||||
|
||||
void ipc_send_gui_update(IPC_UPDATE_GUI command, const unsigned int value);
|
||||
|
@ -49,11 +48,10 @@ void ipc_send_gui_update(IPC_UPDATE_GUI command, const unsigned int value);
|
|||
// ******************************************************************
|
||||
|
||||
typedef enum class _IPC_UPDATE_KERNEL {
|
||||
CONFIG_LOGGING_SYNC = 0,
|
||||
CONFIG_INPUT_SYNC,
|
||||
CONFIG_CHANGE_TIME
|
||||
CONFIG_LOGGING_SYNC = 0
|
||||
, CONFIG_INPUT_SYNC
|
||||
} IPC_UPDATE_KERNEL;
|
||||
|
||||
void ipc_send_kernel_update(IPC_UPDATE_KERNEL command, const int value, const unsigned int hwnd);
|
||||
void ipc_send_kernel_update(IPC_UPDATE_KERNEL command, const unsigned int value, const unsigned int hwnd);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -27,122 +27,117 @@
|
|||
|
||||
#include <windows.h> // for PULONG
|
||||
|
||||
#include "Logging.h"
|
||||
#include "common\Settings.hpp"
|
||||
#include "Logging.h"
|
||||
#include "common\Settings.hpp"
|
||||
#include "EmuShared.h"
|
||||
|
||||
// For thread_local, see : https://en.cppreference.com/w/cpp/language/storage_duration
|
||||
// TODO : Use Boost.Format https://www.boost.org/doc/libs/1_53_0/libs/format/index.html
|
||||
thread_local std::string _logThreadPrefix;
|
||||
|
||||
std::atomic_bool g_EnabledModules[to_underlying(CXBXR_MODULE::MAX)] = { false };
|
||||
const char* g_EnumModules2String[to_underlying(CXBXR_MODULE::MAX)] = {
|
||||
"CXBXR ",
|
||||
"XBE ",
|
||||
"INIT ",
|
||||
"VMEM ",
|
||||
"PMEM ",
|
||||
"GUI ",
|
||||
"EEPR ",
|
||||
"RSA ",
|
||||
"POOLMEM ",
|
||||
"D3D8 ",
|
||||
"D3DST ",
|
||||
"D3DCVT ",
|
||||
"DSOUND ",
|
||||
"XAPI ",
|
||||
"XACT ",
|
||||
"XGRP ",
|
||||
"XONLINE ",
|
||||
"FS ",
|
||||
"PSHB ",
|
||||
"PXSH ",
|
||||
"VTXSH ",
|
||||
"VSHCACHE",
|
||||
"VTXB ",
|
||||
"DINP ",
|
||||
"XINP ",
|
||||
"SDL ",
|
||||
"FILE ",
|
||||
"X86 ",
|
||||
"HLE ",
|
||||
"NET ",
|
||||
"MCPX ",
|
||||
"NV2A ",
|
||||
"SMC ",
|
||||
"OHCI ",
|
||||
"USB ",
|
||||
"HUB ",
|
||||
"XIDCTRL ",
|
||||
"ADM ",
|
||||
"INPSYS ",
|
||||
"DSBUFFER",
|
||||
"DSSTREAM",
|
||||
"DS3DCALC",
|
||||
"XMO ",
|
||||
"RINP ",
|
||||
"JVS ",
|
||||
"LIBUSB ",
|
||||
"KRNL ",
|
||||
"LOG ",
|
||||
"XBOX ",
|
||||
"XBDM ",
|
||||
"AV ",
|
||||
"DBG ",
|
||||
"EX ",
|
||||
"FSC ",
|
||||
"HAL ",
|
||||
"IO ",
|
||||
"KD ",
|
||||
"KE ",
|
||||
"KI ",
|
||||
"MM ",
|
||||
"NT ",
|
||||
"OB ",
|
||||
"PS ",
|
||||
"RTL ",
|
||||
"XC ",
|
||||
"XE ",
|
||||
};
|
||||
std::atomic_int g_CurrentLogLevel = to_underlying(LOG_LEVEL::INFO);
|
||||
std::atomic_bool g_CurrentLogPopupTestCase = true;
|
||||
static bool g_disablePopupMessages = false;
|
||||
|
||||
const char log_debug[] = "DEBUG: ";
|
||||
const char log_info[] = "INFO : ";
|
||||
const char log_warn[] = "WARN : ";
|
||||
const char log_error[] = "ERROR: ";
|
||||
const char log_fatal[] = "FATAL: ";
|
||||
const char log_unkwn[] = "???? : ";
|
||||
|
||||
// Do not use EmuLogOutput function outside of this file.
|
||||
void EmuLogOutput(CXBXR_MODULE cxbxr_module, LOG_LEVEL level, const char *szWarningMessage, const va_list argp)
|
||||
thread_local std::string _logThreadPrefix;
|
||||
|
||||
std::atomic_bool g_EnabledModules[to_underlying(CXBXR_MODULE::MAX)] = { false };
|
||||
const char* g_EnumModules2String[to_underlying(CXBXR_MODULE::MAX)] = {
|
||||
"CXBXR ",
|
||||
"XBE ",
|
||||
"INIT ",
|
||||
"VMEM ",
|
||||
"PMEM ",
|
||||
"GUI ",
|
||||
"EEPR ",
|
||||
"RSA ",
|
||||
"POOLMEM ",
|
||||
"D3D8 ",
|
||||
"D3DST ",
|
||||
"D3DCVT ",
|
||||
"DSOUND ",
|
||||
"XAPI ",
|
||||
"XACT ",
|
||||
"XGRP ",
|
||||
"XONLINE ",
|
||||
"FS ",
|
||||
"PSHB ",
|
||||
"PXSH ",
|
||||
"VTXSH ",
|
||||
"VSHCACHE",
|
||||
"VTXB ",
|
||||
"DINP ",
|
||||
"XINP ",
|
||||
"SDL ",
|
||||
"FILE ",
|
||||
"X86 ",
|
||||
"HLE ",
|
||||
"NET ",
|
||||
"MCPX ",
|
||||
"NV2A ",
|
||||
"SMC ",
|
||||
"OHCI ",
|
||||
"USB ",
|
||||
"HUB ",
|
||||
"XIDCTRL ",
|
||||
"ADM ",
|
||||
"INPSYS ",
|
||||
"DSBUFFER",
|
||||
"DSSTREAM",
|
||||
"DS3DCALC",
|
||||
"XMO ",
|
||||
"KRNL ",
|
||||
"LOG ",
|
||||
"XBOX ",
|
||||
"XBDM ",
|
||||
"AV ",
|
||||
"DBG ",
|
||||
"EX ",
|
||||
"FSC ",
|
||||
"HAL ",
|
||||
"IO ",
|
||||
"KD ",
|
||||
"KE ",
|
||||
"KI ",
|
||||
"MM ",
|
||||
"NT ",
|
||||
"OB ",
|
||||
"PS ",
|
||||
"RTL ",
|
||||
"XC ",
|
||||
"XE ",
|
||||
};
|
||||
std::atomic_int g_CurrentLogLevel = to_underlying(LOG_LEVEL::INFO);
|
||||
|
||||
const char log_debug[] = "DEBUG: ";
|
||||
const char log_info[] = "INFO : ";
|
||||
const char log_warn[] = "WARN : ";
|
||||
const char log_error[] = "ERROR: ";
|
||||
const char log_fatal[] = "FATAL: ";
|
||||
const char log_unkwn[] = "???? : ";
|
||||
|
||||
// Do not use EmuLogOutput function outside of this file.
|
||||
void EmuLogOutput(CXBXR_MODULE cxbxr_module, LOG_LEVEL level, const char *szWarningMessage, va_list argp)
|
||||
{
|
||||
LOG_THREAD_INIT;
|
||||
|
||||
const char* level_str;
|
||||
LOG_THREAD_INIT;
|
||||
|
||||
const char* level_str;
|
||||
switch (level) {
|
||||
default:
|
||||
level_str = log_unkwn;
|
||||
default:
|
||||
level_str = log_unkwn;
|
||||
break;
|
||||
case LOG_LEVEL::DEBUG:
|
||||
level_str = log_debug;
|
||||
case LOG_LEVEL::DEBUG:
|
||||
level_str = log_debug;
|
||||
break;
|
||||
case LOG_LEVEL::INFO:
|
||||
level_str = log_info;
|
||||
case LOG_LEVEL::INFO:
|
||||
level_str = log_info;
|
||||
break;
|
||||
case LOG_LEVEL::WARNING:
|
||||
level_str = log_warn;
|
||||
case LOG_LEVEL::WARNING:
|
||||
level_str = log_warn;
|
||||
break;
|
||||
case LOG_LEVEL::ERROR2:
|
||||
level_str = log_error;
|
||||
break;
|
||||
case LOG_LEVEL::ERROR2:
|
||||
level_str = log_error;
|
||||
break;
|
||||
case LOG_LEVEL::FATAL:
|
||||
level_str = log_fatal;
|
||||
case LOG_LEVEL::FATAL:
|
||||
level_str = log_fatal;
|
||||
break;
|
||||
}
|
||||
|
||||
std::cout << _logThreadPrefix << level_str
|
||||
std::cout << _logThreadPrefix << level_str
|
||||
<< g_EnumModules2String[to_underlying(cxbxr_module)];
|
||||
|
||||
vfprintf(stdout, szWarningMessage, argp);
|
||||
|
@ -150,23 +145,16 @@ void EmuLogOutput(CXBXR_MODULE cxbxr_module, LOG_LEVEL level, const char *szWarn
|
|||
fprintf(stdout, "\n");
|
||||
|
||||
fflush(stdout);
|
||||
}
|
||||
inline void EmuLogOutputEx(const CXBXR_MODULE cxbxr_module, const LOG_LEVEL level, const char *szWarningMessage, ...)
|
||||
{
|
||||
va_list argp;
|
||||
va_start(argp, szWarningMessage);
|
||||
EmuLogOutput(cxbxr_module, level, szWarningMessage, argp);
|
||||
va_end(argp);
|
||||
}
|
||||
|
||||
// print out a custom message to the console or kernel debug log file
|
||||
void EmuLogEx(CXBXR_MODULE cxbxr_module, LOG_LEVEL level, const char *szWarningMessage, ...)
|
||||
}
|
||||
|
||||
// print out a custom message to the console or kernel debug log file
|
||||
void NTAPI EmuLogEx(CXBXR_MODULE cxbxr_module, LOG_LEVEL level, const char *szWarningMessage, ...)
|
||||
{
|
||||
if (szWarningMessage == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
LOG_CHECK_ENABLED_EX(cxbxr_module, level) {
|
||||
|
||||
LOG_CHECK_ENABLED_EX(cxbxr_module, level) {
|
||||
if (g_bPrintfOn) {
|
||||
|
||||
LOG_THREAD_INIT;
|
||||
|
@ -177,11 +165,11 @@ void EmuLogEx(CXBXR_MODULE cxbxr_module, LOG_LEVEL level, const char *szWarningM
|
|||
EmuLogOutput(cxbxr_module, level, szWarningMessage, argp);
|
||||
|
||||
va_end(argp);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void EmuLogInit(LOG_LEVEL level, const char *szWarningMessage, ...)
|
||||
}
|
||||
|
||||
void NTAPI EmuLogInit(LOG_LEVEL level, const char *szWarningMessage, ...)
|
||||
{
|
||||
if (szWarningMessage == NULL) {
|
||||
return;
|
||||
|
@ -193,156 +181,53 @@ void EmuLogInit(LOG_LEVEL level, const char *szWarningMessage, ...)
|
|||
EmuLogOutput(CXBXR_MODULE::INIT, level, szWarningMessage, argp);
|
||||
|
||||
va_end(argp);
|
||||
}
|
||||
|
||||
// Set up the logging variables for the GUI process
|
||||
inline void log_get_settings()
|
||||
{
|
||||
log_set_config(g_Settings->m_core.LogLevel, g_Settings->m_core.LoggedModules, g_Settings->m_core.bLogPopupTestCase);
|
||||
}
|
||||
|
||||
inline void log_sync_config()
|
||||
{
|
||||
int LogLevel;
|
||||
unsigned int LoggedModules[NUM_INTEGERS_LOG];
|
||||
bool LogPopupTestCase;
|
||||
g_EmuShared->GetLogLv(&LogLevel);
|
||||
g_EmuShared->GetLogModules(LoggedModules);
|
||||
g_EmuShared->GetLogPopupTestCase(&LogPopupTestCase);
|
||||
log_set_config(LogLevel, LoggedModules, LogPopupTestCase);
|
||||
}
|
||||
|
||||
void log_set_config(int LogLevel, unsigned int* LoggedModules, bool LogPopupTestCase)
|
||||
{
|
||||
g_CurrentLogLevel = LogLevel;
|
||||
for (unsigned int index = to_underlying(CXBXR_MODULE::CXBXR); index < to_underlying(CXBXR_MODULE::MAX); index++) {
|
||||
if (LoggedModules[index / 32] & (1 << (index % 32))) {
|
||||
g_EnabledModules[index] = true;
|
||||
}
|
||||
else {
|
||||
g_EnabledModules[index] = false;
|
||||
}
|
||||
}
|
||||
|
||||
// Set up the logging variables for the GUI process
|
||||
inline void log_get_settings()
|
||||
{
|
||||
log_set_config(g_Settings->m_core.LogLevel, g_Settings->m_core.LoggedModules);
|
||||
}
|
||||
|
||||
inline void log_sync_config()
|
||||
{
|
||||
int LogLevel;
|
||||
unsigned int LoggedModules[NUM_INTEGERS_LOG];
|
||||
g_EmuShared->GetLogLv(&LogLevel);
|
||||
g_EmuShared->GetLogModules(LoggedModules);
|
||||
log_set_config(LogLevel, LoggedModules);
|
||||
}
|
||||
|
||||
void log_set_config(int LogLevel, unsigned int* LoggedModules)
|
||||
{
|
||||
g_CurrentLogLevel = LogLevel;
|
||||
for (unsigned int index = to_underlying(CXBXR_MODULE::CXBXR); index < to_underlying(CXBXR_MODULE::MAX); index++) {
|
||||
if (LoggedModules[index / 32] & (1 << (index % 32))) {
|
||||
g_EnabledModules[index] = true;
|
||||
}
|
||||
else {
|
||||
g_EnabledModules[index] = false;
|
||||
}
|
||||
}
|
||||
g_CurrentLogPopupTestCase = LogPopupTestCase;
|
||||
}
|
||||
|
||||
// Generate active log filter output.
|
||||
void log_generate_active_filter_output(const CXBXR_MODULE cxbxr_module)
|
||||
}
|
||||
|
||||
// Generate active log filter output.
|
||||
void log_generate_active_filter_output(const CXBXR_MODULE cxbxr_module)
|
||||
{
|
||||
LOG_THREAD_INIT;
|
||||
std::string generic_output_str = _logThreadPrefix + log_info + g_EnumModules2String[to_underlying(cxbxr_module)];
|
||||
|
||||
std::cout << generic_output_str << "Current log level: " << g_CurrentLogLevel << std::endl;
|
||||
|
||||
generic_output_str.append("Active log filter: ");
|
||||
for (unsigned int index = to_underlying(CXBXR_MODULE::CXBXR); index < to_underlying(CXBXR_MODULE::MAX); index++) {
|
||||
if (g_EnabledModules[index]) {
|
||||
std::cout << generic_output_str << g_EnumModules2String[index] << "\n";
|
||||
}
|
||||
}
|
||||
LOG_THREAD_INIT;
|
||||
std::string generic_output_str = _logThreadPrefix + log_info + g_EnumModules2String[to_underlying(cxbxr_module)];
|
||||
|
||||
std::cout << generic_output_str << "Current log level: " << g_CurrentLogLevel << std::endl;
|
||||
|
||||
generic_output_str.append("Active log filter: ");
|
||||
for (unsigned int index = to_underlying(CXBXR_MODULE::CXBXR); index < to_underlying(CXBXR_MODULE::MAX); index++) {
|
||||
if (g_EnabledModules[index]) {
|
||||
std::cout << generic_output_str << g_EnumModules2String[index] << "\n";
|
||||
}
|
||||
}
|
||||
std::cout << std::flush;
|
||||
}
|
||||
|
||||
// Use kernel managed environment
|
||||
void log_init_popup_msg()
|
||||
{
|
||||
Settings::s_video vSettings;
|
||||
g_EmuShared->GetVideoSettings(&vSettings);
|
||||
g_disablePopupMessages = vSettings.bFullScreen;
|
||||
}
|
||||
|
||||
// TODO: Move PopupPlatformHandler into common GUI's window source code or use imgui in the future.
|
||||
// PopupPlatformHandler is intended to be use as internal wrapper function.
|
||||
static PopupReturn PopupPlatformHandler(const char* msg, const PopupReturn ret_default, const UINT uType, const HWND hWnd)
|
||||
{
|
||||
int ret = MessageBox(hWnd, msg, /*lpCaption=*/TEXT("Cxbx-Reloaded"), uType);
|
||||
|
||||
switch (ret) {
|
||||
default:
|
||||
case IDCANCEL:
|
||||
return PopupReturn::Cancel;
|
||||
case IDOK:
|
||||
return PopupReturn::Ok;
|
||||
case IDABORT:
|
||||
return PopupReturn::Abort;
|
||||
case IDRETRY:
|
||||
return PopupReturn::Retry;
|
||||
case IDIGNORE:
|
||||
return PopupReturn::Ignore;
|
||||
case IDYES:
|
||||
return PopupReturn::Yes;
|
||||
case IDNO:
|
||||
return PopupReturn::No;
|
||||
}
|
||||
}
|
||||
|
||||
PopupReturn PopupCustomEx(const void* hwnd, const CXBXR_MODULE cxbxr_module, const LOG_LEVEL level, const PopupIcon icon, const PopupButtons buttons, const PopupReturn ret_default, const char *message, ...)
|
||||
{
|
||||
UINT uType = MB_TOPMOST | MB_SETFOREGROUND;
|
||||
|
||||
// Make assert whenever the format string is null pointer which isn't allow in here.
|
||||
assert(message != nullptr);
|
||||
|
||||
switch (icon) {
|
||||
case PopupIcon::Warning: {
|
||||
uType |= MB_ICONWARNING;
|
||||
break;
|
||||
}
|
||||
case PopupIcon::Error: {
|
||||
uType |= MB_ICONERROR; // Note : MB_ICONERROR == MB_ICONSTOP == MB_ICONHAND
|
||||
break;
|
||||
}
|
||||
case PopupIcon::Info: {
|
||||
uType |= MB_ICONINFORMATION;
|
||||
break;
|
||||
}
|
||||
case PopupIcon::Question:
|
||||
case PopupIcon::Unknown:
|
||||
default: {
|
||||
uType |= MB_ICONQUESTION;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
switch (buttons) {
|
||||
default:
|
||||
case PopupButtons::Ok:
|
||||
uType |= MB_OK;
|
||||
break;
|
||||
case PopupButtons::OkCancel:
|
||||
uType |= MB_OKCANCEL;
|
||||
break;
|
||||
case PopupButtons::AbortRetryIgnore:
|
||||
uType |= MB_ABORTRETRYIGNORE;
|
||||
break;
|
||||
case PopupButtons::YesNoCancel:
|
||||
uType |= MB_YESNOCANCEL;
|
||||
break;
|
||||
case PopupButtons::YesNo:
|
||||
uType |= MB_YESNO;
|
||||
break;
|
||||
case PopupButtons::RetryCancel:
|
||||
uType |= MB_RETRYCANCEL;
|
||||
break;
|
||||
}
|
||||
|
||||
va_list argp;
|
||||
va_start(argp, message);
|
||||
// allocate predicted buffer size then write to buffer afterward.
|
||||
std::string Buffer(1+std::vsnprintf(nullptr, 0, message, argp), '\0');
|
||||
vsnprintf(Buffer.data(), Buffer.size(), message, argp);
|
||||
va_end(argp);
|
||||
|
||||
EmuLogOutputEx(cxbxr_module, level, "Popup : %s", Buffer.c_str());
|
||||
|
||||
// If user is using exclusive fullscreen, we need to refrain all popups.
|
||||
if (g_disablePopupMessages) {
|
||||
return ret_default;
|
||||
}
|
||||
|
||||
return PopupPlatformHandler(Buffer.data(), ret_default, uType, (const HWND)hwnd);
|
||||
}
|
||||
|
||||
const bool needs_escape(const wint_t _char)
|
||||
{
|
||||
// Escaping is needed for control characters,
|
||||
|
@ -396,13 +281,8 @@ inline void output_wchar(std::ostream& os, wchar_t c)
|
|||
default: os << "\\x" << std::setfill('0') << std::setw(4) << std::right << std::hex << std::uppercase << (wint_t)c;
|
||||
}
|
||||
}
|
||||
else {
|
||||
const wchar_t *wc = reinterpret_cast<const wchar_t *>(&c);
|
||||
std::string dst(2, '\0');
|
||||
std::mbstate_t ps{};
|
||||
std::wcsrtombs(dst.data(), &wc, 1, &ps);
|
||||
os << dst;
|
||||
}
|
||||
else
|
||||
os << c;
|
||||
}
|
||||
|
||||
LOG_SANITIZE_HEADER(hex1, uint8_t)
|
||||
|
@ -461,7 +341,7 @@ LOG_SANITIZE_HEADER(sanitized_char_pointer, char *)
|
|||
while (*v && max_length--) {
|
||||
os << *v++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return os << "\"";
|
||||
}
|
||||
|
@ -475,7 +355,7 @@ LOG_SANITIZE_HEADER(sanitized_wchar_pointer, wchar_t *)
|
|||
return os << "NULL";
|
||||
|
||||
bool needsEscaping = false;
|
||||
int max_length = container.max;
|
||||
int max_length = container.max;
|
||||
while (*v && max_length--)
|
||||
if (needs_escape(*v++))
|
||||
{
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
// * If not, write to the Free Software Foundation, Inc.,
|
||||
// * 59 Temple Place - Suite 330, Bostom, MA 02111-1307, USA.
|
||||
// *
|
||||
// * (c) 2016 Patrick van Logchem <pvanlogchem@gmail.com>
|
||||
// * (c) 2016 Patrick van Logchem <pvanlogchem@gmail.com>
|
||||
// * (c) 2019 ergo720
|
||||
// *
|
||||
// * All rights reserved
|
||||
|
@ -29,162 +29,107 @@
|
|||
#include <windows.h> // For DWORD
|
||||
#include <sstream> // For std::stringstream
|
||||
#include <iostream> // For std::cout
|
||||
#include <iomanip> // For std::setw
|
||||
#include <iomanip> // For std::setw
|
||||
#include <atomic> // For atomic_bool and atomic_uint
|
||||
#include "common\util\CxbxUtil.h" // For g_bPrintfOn and to_underlying
|
||||
|
||||
// NOTE: using ERROR2 since windows.h imports an ERROR macro which would conflict otherwise
|
||||
typedef enum class _LOG_LEVEL {
|
||||
DEBUG = 0,
|
||||
INFO,
|
||||
WARNING,
|
||||
ERROR2,
|
||||
FATAL,
|
||||
MAX,
|
||||
#include "common\util\CxbxUtil.h" // For g_bPrintfOn and to_underlying
|
||||
|
||||
// NOTE: using ERROR2 since windows.h imports an ERROR macro which would conflict otherwise
|
||||
typedef enum class _LOG_LEVEL {
|
||||
DEBUG = 0,
|
||||
INFO,
|
||||
WARNING,
|
||||
ERROR2,
|
||||
FATAL,
|
||||
MAX,
|
||||
}LOG_LEVEL;
|
||||
|
||||
typedef enum class _CXBXR_MODULE: unsigned int {
|
||||
// general
|
||||
CXBXR = 0,
|
||||
XBE,
|
||||
INIT,
|
||||
VMEM,
|
||||
PMEM,
|
||||
GUI,
|
||||
EEPR,
|
||||
RSA,
|
||||
POOLMEM,
|
||||
D3D8,
|
||||
D3DST,
|
||||
D3DCVT,
|
||||
DSOUND,
|
||||
XAPI,
|
||||
XACT,
|
||||
XGRP,
|
||||
XONLINE,
|
||||
FS,
|
||||
PSHB,
|
||||
PXSH,
|
||||
VTXSH,
|
||||
VSHCACHE,
|
||||
VTXB,
|
||||
DINP,
|
||||
XINP,
|
||||
SDL,
|
||||
FILE,
|
||||
X86,
|
||||
HLE,
|
||||
NET,
|
||||
MCPX,
|
||||
NV2A,
|
||||
SMC,
|
||||
OHCI,
|
||||
USB,
|
||||
HUB,
|
||||
XIDCTRL,
|
||||
ADM,
|
||||
INPSYS,
|
||||
DSBUFFER,
|
||||
DSSTREAM,
|
||||
DS3DCALC,
|
||||
XMO,
|
||||
RINP,
|
||||
JVS,
|
||||
LIBUSB,
|
||||
// kernel
|
||||
KRNL,
|
||||
LOG,
|
||||
XBOX,
|
||||
XBDM,
|
||||
AV,
|
||||
DBG,
|
||||
EX,
|
||||
FSC,
|
||||
HAL,
|
||||
IO,
|
||||
KD,
|
||||
KE,
|
||||
KI,
|
||||
MM,
|
||||
NT,
|
||||
OB,
|
||||
PS,
|
||||
RTL,
|
||||
XC,
|
||||
XE,
|
||||
// max
|
||||
MAX,
|
||||
}CXBXR_MODULE;
|
||||
typedef enum class _CXBXR_MODULE: unsigned int {
|
||||
// general
|
||||
CXBXR = 0,
|
||||
XBE,
|
||||
INIT,
|
||||
VMEM,
|
||||
PMEM,
|
||||
GUI,
|
||||
EEPR,
|
||||
RSA,
|
||||
POOLMEM,
|
||||
D3D8,
|
||||
D3DST,
|
||||
D3DCVT,
|
||||
DSOUND,
|
||||
XAPI,
|
||||
XACT,
|
||||
XGRP,
|
||||
XONLINE,
|
||||
FS,
|
||||
PSHB,
|
||||
PXSH,
|
||||
VTXSH,
|
||||
VSHCACHE,
|
||||
VTXB,
|
||||
DINP,
|
||||
XINP,
|
||||
SDL,
|
||||
FILE,
|
||||
X86,
|
||||
HLE,
|
||||
NET,
|
||||
MCPX,
|
||||
NV2A,
|
||||
SMC,
|
||||
OHCI,
|
||||
USB,
|
||||
HUB,
|
||||
XIDCTRL,
|
||||
ADM,
|
||||
INPSYS,
|
||||
DSBUFFER,
|
||||
DSSTREAM,
|
||||
DS3DCALC,
|
||||
XMO,
|
||||
// kernel
|
||||
KRNL,
|
||||
LOG,
|
||||
XBOX,
|
||||
XBDM,
|
||||
AV,
|
||||
DBG,
|
||||
EX,
|
||||
FSC,
|
||||
HAL,
|
||||
IO,
|
||||
KD,
|
||||
KE,
|
||||
KI,
|
||||
MM,
|
||||
NT,
|
||||
OB,
|
||||
PS,
|
||||
RTL,
|
||||
XC,
|
||||
XE,
|
||||
// max
|
||||
MAX,
|
||||
}CXBXR_MODULE;
|
||||
|
||||
extern std::atomic_bool g_EnabledModules[to_underlying(CXBXR_MODULE::MAX)];
|
||||
extern const char* g_EnumModules2String[to_underlying(CXBXR_MODULE::MAX)];
|
||||
extern std::atomic_int g_CurrentLogLevel;
|
||||
|
||||
extern std::atomic_bool g_EnabledModules[to_underlying(CXBXR_MODULE::MAX)];
|
||||
extern const char* g_EnumModules2String[to_underlying(CXBXR_MODULE::MAX)];
|
||||
extern std::atomic_int g_CurrentLogLevel;
|
||||
extern std::atomic_bool g_CurrentLogPopupTestCase;
|
||||
|
||||
// print out a log message to the console or kernel debug log file if level is high enough
|
||||
void EmuLogEx(CXBXR_MODULE cxbxr_module, LOG_LEVEL level, const char *szWarningMessage, ...);
|
||||
void EmuLogInit(LOG_LEVEL level, const char *szWarningMessage, ...);
|
||||
|
||||
#define EmuLog(level, fmt, ...) EmuLogEx(LOG_PREFIX, level, fmt, ##__VA_ARGS__)
|
||||
|
||||
extern inline void log_get_settings();
|
||||
|
||||
extern inline void log_sync_config();
|
||||
|
||||
void log_set_config(int LogLevel, unsigned int* LoggedModules, bool LogPopupTestCase);
|
||||
|
||||
void log_generate_active_filter_output(const CXBXR_MODULE cxbxr_module);
|
||||
|
||||
// Use emulation environment to manage popup messages
|
||||
// If log_init_popup_msg is not called at earliest point of emulation.
|
||||
// Then users will have a chance of popup message appear during start of emulation in full screen.
|
||||
void log_init_popup_msg();
|
||||
|
||||
typedef enum class _PopupIcon {
|
||||
Unknown = 0,
|
||||
Question,
|
||||
Info,
|
||||
Warning,
|
||||
Error
|
||||
} PopupIcon;
|
||||
|
||||
typedef enum class _PopupButtons {
|
||||
Unknown = 0,
|
||||
Ok,
|
||||
OkCancel,
|
||||
AbortRetryIgnore,
|
||||
YesNoCancel,
|
||||
YesNo,
|
||||
RetryCancel
|
||||
} PopupButtons;
|
||||
|
||||
typedef enum class _PopupReturn {
|
||||
Unknown = 0,
|
||||
Ok,
|
||||
Cancel,
|
||||
Abort,
|
||||
Retry,
|
||||
Ignore,
|
||||
Yes,
|
||||
No
|
||||
} PopupReturn;
|
||||
|
||||
PopupReturn PopupCustomEx(const void* hwnd, const CXBXR_MODULE cxbxr_module, const LOG_LEVEL level, const PopupIcon icon, const PopupButtons buttons, const PopupReturn ret_default, const char* message, ...);
|
||||
|
||||
#define PopupCustom(hwnd, level, icon, buttons, ret_default, fmt, ...) PopupCustomEx(hwnd, LOG_PREFIX, level, icon, buttons, ret_default, fmt, ## __VA_ARGS__)
|
||||
#define PopupQuestionEx(hwnd, level, buttons, ret_default, fmt, ...) PopupCustom(hwnd, level, PopupIcon::Question, buttons, ret_default, fmt, ## __VA_ARGS__)
|
||||
#define PopupQuestion(hwnd, fmt, ...) PopupQuestionEx(hwnd, LOG_LEVEL::INFO, PopupButtons::YesNoCancel, PopupReturn::Cancel, fmt, ## __VA_ARGS__)
|
||||
#define PopupInfoEx(hwnd, buttons, ret_default, fmt, ...) PopupCustom(hwnd, LOG_LEVEL::INFO, PopupIcon::Info, buttons, ret_default, fmt, ## __VA_ARGS__)
|
||||
#define PopupInfo(hwnd, fmt, ...) (void)PopupInfoEx(hwnd, PopupButtons::Ok, PopupReturn::Ok, fmt, ## __VA_ARGS__)
|
||||
#define PopupWarningEx(hwnd, buttons, ret_default, fmt, ...) PopupCustom(hwnd, LOG_LEVEL::WARNING, PopupIcon::Warning, buttons, ret_default, fmt, ## __VA_ARGS__)
|
||||
#define PopupWarning(hwnd, fmt, ...) (void)PopupWarningEx(hwnd, PopupButtons::Ok, PopupReturn::Ok, fmt, ## __VA_ARGS__)
|
||||
#define PopupErrorEx(hwnd, buttons, ret_default, fmt, ...) PopupCustom(hwnd, LOG_LEVEL::ERROR2, PopupIcon::Error, buttons, ret_default, fmt, ## __VA_ARGS__)
|
||||
#define PopupError(hwnd, fmt, ...) (void)PopupErrorEx(hwnd, PopupButtons::Ok, PopupReturn::Ok, fmt, ## __VA_ARGS__)
|
||||
#define PopupFatalEx(hwnd, buttons, ret_default, fmt, ...) PopupCustom(hwnd, LOG_LEVEL::FATAL, PopupIcon::Error, buttons, ret_default, fmt, ## __VA_ARGS__)
|
||||
#define PopupFatal(hwnd, fmt, ...) (void)PopupFatalEx(hwnd, PopupButtons::Ok, PopupReturn::Ok, fmt, ## __VA_ARGS__)
|
||||
|
||||
// For LOG_TEST_CASE
|
||||
extern inline void EmuLogOutputEx(const CXBXR_MODULE cxbxr_module, const LOG_LEVEL level, const char *szWarningMessage, ...);
|
||||
// print out a log message to the console or kernel debug log file if level is high enough
|
||||
void NTAPI EmuLogEx(CXBXR_MODULE cxbxr_module, LOG_LEVEL level, const char *szWarningMessage, ...);
|
||||
void NTAPI EmuLogInit(LOG_LEVEL level, const char *szWarningMessage, ...);
|
||||
|
||||
#define EmuLog(level, fmt, ...) EmuLogEx(LOG_PREFIX, level, fmt, ##__VA_ARGS__)
|
||||
|
||||
extern inline void log_get_settings();
|
||||
|
||||
extern inline void log_sync_config();
|
||||
|
||||
void log_set_config(int LogLevel, unsigned int* LoggedModules);
|
||||
|
||||
void log_generate_active_filter_output(const CXBXR_MODULE cxbxr_module);
|
||||
|
||||
//
|
||||
// __FILENAME__
|
||||
|
@ -225,30 +170,9 @@ extern inline void output_wchar(std::ostream& os, wchar_t c);
|
|||
// By default, sanitization functions simply return the given argument
|
||||
// (type and value) which results in calls to standard output writers.
|
||||
template<class T>
|
||||
inline auto _log_sanitize(T value, int ignored_length = 0)
|
||||
inline T _log_sanitize(T value, int ignored_length = 0)
|
||||
{
|
||||
// This is necessary because C++20 has deleted the overloaded operator<< of ostream for wchar_t, char8_t, char16_t and char32_t.
|
||||
// The proper solution is to use wide strings in all our logging macros/functions, see https://github.com/Cxbx-Reloaded/Cxbx-Reloaded/issues/743
|
||||
if constexpr (std::is_same_v<xbox::wchar_xt, std::remove_cvref_t<std::remove_pointer_t<T>>>) {
|
||||
if constexpr (std::is_pointer_v<T>) {
|
||||
const wchar_t *wstr = reinterpret_cast<const wchar_t *>(value);
|
||||
std::size_t len = std::wcslen(wstr);
|
||||
std::string dst(len + 1, '\0');
|
||||
std::mbstate_t ps{};
|
||||
std::wcsrtombs(dst.data(), &wstr, len, &ps);
|
||||
return dst;
|
||||
}
|
||||
else {
|
||||
const wchar_t *wstr = reinterpret_cast<const wchar_t *>(&value);
|
||||
std::string dst(2, '\0');
|
||||
std::mbstate_t ps{};
|
||||
std::wcsrtombs(dst.data(), &wstr, 1, &ps);
|
||||
return dst;
|
||||
}
|
||||
}
|
||||
else {
|
||||
return value;
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
#if 0 // TODO FIXME : Disabled for now, as this is incorrectly called for INT types too
|
||||
|
@ -263,12 +187,12 @@ inline const char * _log_sanitize(BOOL value, int ignored_length = 0)
|
|||
#define LOG_SANITIZE_HEADER(C, T) \
|
||||
std::ostream& operator<<( \
|
||||
std::ostream& os, \
|
||||
const Sane##C& container) \
|
||||
const Sane##C& container) \
|
||||
|
||||
#define LOG_SANITIZE(C, T) \
|
||||
struct Sane##C \
|
||||
{ \
|
||||
T value; \
|
||||
T value; \
|
||||
int max; \
|
||||
Sane##C(T _v, int _m = 80) : value(_v), max(_m) { } \
|
||||
}; \
|
||||
|
@ -315,13 +239,13 @@ constexpr const char* remove_prefix(const char* str, const char *prefix) {
|
|||
return (str_skip_prefix(str, prefix) == str + str_length(prefix)) ? str_skip_prefix(str, prefix) : str;
|
||||
}
|
||||
|
||||
static constexpr const char* xbox_prefix = "xbox::";
|
||||
static constexpr const char* emupatch_prefix = "EmuPatch_"; // See #define EMUPATCH
|
||||
constexpr char* xtl_prefix = "XTL::";
|
||||
constexpr char* emupatch_prefix = "EmuPatch_"; // See #define EMUPATCH
|
||||
|
||||
constexpr const char* remove_emupatch_prefix(const char* str) {
|
||||
// return an empty string when str isn't given
|
||||
// skip xbox:: and/or EmuPatch_ prefix if present
|
||||
return remove_prefix(remove_prefix(str, xbox_prefix), emupatch_prefix);
|
||||
// skip XTL:: and/or EmuPatch_ prefix if present
|
||||
return remove_prefix(remove_prefix(str, xtl_prefix), emupatch_prefix);
|
||||
}
|
||||
|
||||
#define LOG_ARG_START "\n " << std::setfill(' ') << std::setw(20) << std::left
|
||||
|
@ -334,14 +258,14 @@ constexpr const char* remove_emupatch_prefix(const char* str) {
|
|||
// For thread_local, see : https://en.cppreference.com/w/cpp/language/storage_duration
|
||||
// TODO : Use Boost.Format https://www.boost.org/doc/libs/1_53_0/libs/format/index.html
|
||||
extern thread_local std::string _logThreadPrefix;
|
||||
|
||||
// Checks if this log should be printed or not
|
||||
#define LOG_CHECK_ENABLED_EX(cxbxr_module, level) \
|
||||
if (g_EnabledModules[to_underlying(cxbxr_module)] && to_underlying(level) >= g_CurrentLogLevel)
|
||||
|
||||
// Checks if this log should be printed or not
|
||||
#define LOG_CHECK_ENABLED_EX(cxbxr_module, level) \
|
||||
if (g_EnabledModules[to_underlying(cxbxr_module)] && to_underlying(level) >= g_CurrentLogLevel)
|
||||
|
||||
// Checks if this log should be printed or not
|
||||
#define LOG_CHECK_ENABLED(level) \
|
||||
LOG_CHECK_ENABLED_EX(LOG_PREFIX, level)
|
||||
// Checks if this log should be printed or not
|
||||
#define LOG_CHECK_ENABLED(level) \
|
||||
LOG_CHECK_ENABLED_EX(LOG_PREFIX, level)
|
||||
|
||||
#define LOG_THREAD_INIT \
|
||||
if (_logThreadPrefix.length() == 0) { \
|
||||
|
@ -372,7 +296,7 @@ extern thread_local std::string _logThreadPrefix;
|
|||
msg << _logThreadPrefix << _logFuncPrefix << "(";
|
||||
|
||||
#define LOG_FUNC_BEGIN \
|
||||
LOG_INIT \
|
||||
LOG_INIT \
|
||||
LOG_CHECK_ENABLED(LOG_LEVEL::DEBUG) { \
|
||||
LOG_FUNC_BEGIN_NO_INIT
|
||||
|
||||
|
@ -394,47 +318,9 @@ extern thread_local std::string _logThreadPrefix;
|
|||
// LOG_FUNC_END closes off function and optional argument logging
|
||||
#define LOG_FUNC_END \
|
||||
if (_had_arg) msg << "\n"; \
|
||||
msg << ");\n"; \
|
||||
msg << ");\n"; \
|
||||
std::cout << msg.str(); \
|
||||
} } while (0); \
|
||||
}
|
||||
|
||||
#define LOG_FUNC_BEGIN_ARG_RESULT_NO_INIT \
|
||||
do { if(g_bPrintfOn) { \
|
||||
bool _had_arg = false; \
|
||||
std::stringstream msg; \
|
||||
msg << _logThreadPrefix << _logFuncPrefix << " returns OUT {";
|
||||
|
||||
#define LOG_FUNC_BEGIN_ARG_RESULT \
|
||||
LOG_CHECK_ENABLED(LOG_LEVEL::DEBUG) { \
|
||||
LOG_FUNC_BEGIN_ARG_RESULT_NO_INIT
|
||||
|
||||
// LOG_FUNC_ARG_RESULT writes output via all available ostream << operator overloads, sanitizing and adding detail where possible
|
||||
#define LOG_FUNC_ARG_RESULT(arg) \
|
||||
_had_arg = true; \
|
||||
msg << LOG_ARG_START << "*"#arg << " : "; \
|
||||
if (arg != nullptr) { \
|
||||
msg << _log_sanitize(*arg); \
|
||||
} else { \
|
||||
msg << "NOT SET"; \
|
||||
}
|
||||
|
||||
// LOG_FUNC_ARG_RESULT_TYPE writes result output using the overloaded << operator of the given type
|
||||
#define LOG_FUNC_ARG_RESULT_TYPE(type, arg) \
|
||||
_had_arg = true; \
|
||||
msg << LOG_ARG_START << "*"#arg << " : "; \
|
||||
if (arg != nullptr) { \
|
||||
msg << (type)*arg; \
|
||||
} else { \
|
||||
msg << "NOT SET"; \
|
||||
}
|
||||
|
||||
// LOG_FUNC_END_ARG_RESULT closes off function and optional argument result logging
|
||||
#define LOG_FUNC_END_ARG_RESULT \
|
||||
if (_had_arg) msg << "\n"; \
|
||||
msg << "};\n"; \
|
||||
std::cout << msg.str(); \
|
||||
} } while (0); \
|
||||
} } while (0); \
|
||||
}
|
||||
|
||||
// LOG_FUNC_RESULT logs the function return result
|
||||
|
@ -447,23 +333,23 @@ extern thread_local std::string _logThreadPrefix;
|
|||
|
||||
// LOG_FORWARD indicates that an api is implemented by a forward to another API
|
||||
#define LOG_FORWARD(api) \
|
||||
LOG_INIT \
|
||||
LOG_INIT \
|
||||
LOG_CHECK_ENABLED(LOG_LEVEL::DEBUG) { \
|
||||
do { if(g_bPrintfOn) { \
|
||||
std::cout << _logThreadPrefix << _logFuncPrefix << " forwarding to "#api"...\n"; \
|
||||
} } while (0); \
|
||||
} } while (0); \
|
||||
}
|
||||
|
||||
// LOG_IGNORED indicates that Cxbx consiously ignores an api
|
||||
#define LOG_IGNORED() \
|
||||
do { \
|
||||
static bool b_echoOnce = true; \
|
||||
if(g_bPrintfOn && b_echoOnce) { \
|
||||
if(g_bPrintfOn && b_echoOnce) { \
|
||||
LOG_CHECK_ENABLED(LOG_LEVEL::INFO) { \
|
||||
LOG_THREAD_INIT \
|
||||
LOG_FUNC_INIT(__func__) \
|
||||
std::cout << _logThreadPrefix << "WARN: " << _logFuncPrefix << " ignored!\n"; \
|
||||
b_echoOnce = false; \
|
||||
b_echoOnce = false; \
|
||||
} \
|
||||
} \
|
||||
} while(0)
|
||||
|
@ -472,12 +358,12 @@ extern thread_local std::string _logThreadPrefix;
|
|||
#define LOG_UNIMPLEMENTED() \
|
||||
do { \
|
||||
static bool b_echoOnce = true; \
|
||||
if(g_bPrintfOn && b_echoOnce) { \
|
||||
if(g_bPrintfOn && b_echoOnce) { \
|
||||
LOG_CHECK_ENABLED(LOG_LEVEL::INFO) { \
|
||||
LOG_THREAD_INIT \
|
||||
LOG_FUNC_INIT(__func__) \
|
||||
std::cout << _logThreadPrefix << "WARN: " << _logFuncPrefix << " unimplemented!\n"; \
|
||||
b_echoOnce = false; \
|
||||
b_echoOnce = false; \
|
||||
} \
|
||||
} \
|
||||
} while(0)
|
||||
|
@ -486,12 +372,12 @@ extern thread_local std::string _logThreadPrefix;
|
|||
#define LOG_INCOMPLETE() \
|
||||
do { \
|
||||
static bool b_echoOnce = true; \
|
||||
if(g_bPrintfOn && b_echoOnce) { \
|
||||
if(g_bPrintfOn && b_echoOnce) { \
|
||||
LOG_CHECK_ENABLED(LOG_LEVEL::INFO) { \
|
||||
LOG_THREAD_INIT \
|
||||
LOG_FUNC_INIT(__func__) \
|
||||
std::cout << _logThreadPrefix << "WARN: " << _logFuncPrefix << " incomplete!\n"; \
|
||||
b_echoOnce = false; \
|
||||
b_echoOnce = false; \
|
||||
} \
|
||||
} \
|
||||
} while(0)
|
||||
|
@ -500,12 +386,12 @@ extern thread_local std::string _logThreadPrefix;
|
|||
#define LOG_NOT_SUPPORTED() \
|
||||
do { \
|
||||
static bool b_echoOnce = true; \
|
||||
if(g_bPrintfOn && b_echoOnce) { \
|
||||
if(g_bPrintfOn && b_echoOnce) { \
|
||||
LOG_CHECK_ENABLED(LOG_LEVEL::INFO) { \
|
||||
LOG_THREAD_INIT \
|
||||
LOG_FUNC_INIT(__func__) \
|
||||
std::cout << _logThreadPrefix << "WARN: " << _logFuncPrefix << " not supported!\n"; \
|
||||
b_echoOnce = false; \
|
||||
b_echoOnce = false; \
|
||||
} \
|
||||
} \
|
||||
} while(0)
|
||||
|
@ -632,6 +518,6 @@ LOGRENDER_HEADER_BY_REF(Type) \
|
|||
// An example type rendering, for PVOID
|
||||
//
|
||||
|
||||
LOGRENDER_HEADER_BY_REF(PVOID);
|
||||
LOGRENDER_HEADER_BY_REF(PVOID);
|
||||
|
||||
#endif _LOGGING_H
|
||||
|
|
|
@ -1,324 +0,0 @@
|
|||
// This is an open source non-commercial project. Dear PVS-Studio, please check it.
|
||||
// PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * This file is part of Cxbx-Reloaded.
|
||||
// *
|
||||
// * Cxbx-Reloaded 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 recieved a copy of the GNU General Public License
|
||||
// * along with this program; see the file COPYING.
|
||||
// * If not, write to the Free Software Foundation, Inc.,
|
||||
// * 59 Temple Place - Suite 330, Bostom, MA 02111-1307, USA.
|
||||
// *
|
||||
// * (c) 2017-2019 Patrick van Logchem <pvanlogchem@gmail.com>
|
||||
// * (c) 2019 ergo720
|
||||
// *
|
||||
// * All rights reserved
|
||||
// *
|
||||
// ******************************************************************
|
||||
|
||||
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
|
||||
#include <Windows.h> // For DWORD, CALLBACK, VirtualAlloc, LPVOID, SIZE_T, HMODULE
|
||||
|
||||
// NOTE: Cannot be use in loader project due to force exclude std libraries.
|
||||
//#define DEBUG // Uncomment whenever need to verify memory leaks or bad configure.
|
||||
|
||||
#ifdef DEBUG
|
||||
#include <cstdio> // For printf
|
||||
#endif
|
||||
#include <cstdint> // For uint32_t
|
||||
|
||||
#include "util/std_extend.hpp"
|
||||
#include "ReserveAddressRanges.h"
|
||||
#include "AddressRanges.h"
|
||||
|
||||
// Reserve an address range up to the extend of what the host allows.
|
||||
bool ReserveMemoryRange(int index, blocks_reserved_t blocks_reserved)
|
||||
{
|
||||
uint32_t Start = XboxAddressRanges[index].Start;
|
||||
int Size = XboxAddressRanges[index].Size;
|
||||
bool HadAnyFailure = false;
|
||||
|
||||
// Reserve this range in 64 KiB block increments, so that during emulation
|
||||
// our memory-management code can VirtualFree() each block individually :
|
||||
|
||||
const DWORD Protect = XboxAddressRanges[index].InitialMemoryProtection;
|
||||
bool NeedsReservationTracking = false;
|
||||
unsigned int arr_index = BLOCK_REGION_DEVKIT_INDEX_BEGIN;
|
||||
static HANDLE hFileMapping1;
|
||||
static HANDLE hFileMapping2;
|
||||
|
||||
#ifdef DEBUG
|
||||
std::printf("DEBUG: ReserveMemoryRange call begin\n");
|
||||
std::printf(" : Comment = %s\n", XboxAddressRanges[index].Comment);
|
||||
#endif
|
||||
switch (Start) {
|
||||
case PHYSICAL_MAP1_BASE:
|
||||
hFileMapping1 = CreateFileMapping(
|
||||
INVALID_HANDLE_VALUE,
|
||||
nullptr,
|
||||
PAGE_EXECUTE_READWRITE,
|
||||
0,
|
||||
Size,
|
||||
nullptr);
|
||||
if (hFileMapping1 == nullptr) {
|
||||
HadAnyFailure = true;
|
||||
break;
|
||||
}
|
||||
[[fallthrough]];
|
||||
|
||||
case PHYSICAL_MAP2_BASE:
|
||||
case TILED_MEMORY_BASE: {
|
||||
static bool NeedsInitializationMap = true;
|
||||
|
||||
if (NeedsInitializationMap) {
|
||||
hFileMapping2 = CreateFileMapping(
|
||||
INVALID_HANDLE_VALUE,
|
||||
nullptr,
|
||||
PAGE_EXECUTE_READWRITE,
|
||||
0,
|
||||
Size,
|
||||
nullptr);
|
||||
if (hFileMapping2 == nullptr) {
|
||||
HadAnyFailure = true;
|
||||
break;
|
||||
}
|
||||
NeedsInitializationMap = false;
|
||||
}
|
||||
|
||||
LPVOID Result = MapViewOfFileEx(
|
||||
(Start == PHYSICAL_MAP1_BASE || Start == TILED_MEMORY_BASE) ? hFileMapping1 : hFileMapping2,
|
||||
(Start == PHYSICAL_MAP1_BASE || Start == PHYSICAL_MAP2_BASE) ?
|
||||
(FILE_MAP_READ | FILE_MAP_WRITE | FILE_MAP_EXECUTE) : (FILE_MAP_READ | FILE_MAP_WRITE),
|
||||
0,
|
||||
0,
|
||||
Size,
|
||||
(LPVOID)Start);
|
||||
#ifdef DEBUG
|
||||
std::printf(" : MapViewOfFile; Start = 0x%08X; Result = %p\n", Start, Result);
|
||||
#endif
|
||||
if (Result == nullptr) {
|
||||
HadAnyFailure = true;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case SYSTEM_MEMORY_BASE:
|
||||
// If additional addresses need to be assign in region's block.
|
||||
// Then check for nonzero value.
|
||||
arr_index = BLOCK_REGION_SYSTEM_INDEX_BEGIN;
|
||||
[[fallthrough]];
|
||||
|
||||
case DEVKIT_MEMORY_BASE:
|
||||
// arr_index's default is BLOCK_REGION_DEVKIT_INDEX_BEGIN which is zero.
|
||||
// Any block region above zero should be place above this case to override zero value.
|
||||
//arr_index = BLOCK_REGION_DEVKIT_INDEX_BEGIN;
|
||||
NeedsReservationTracking = true;
|
||||
[[fallthrough]];
|
||||
|
||||
default: {
|
||||
while (Size > 0) {
|
||||
SIZE_T BlockSize = (SIZE_T)(Size > BLOCK_SIZE) ? BLOCK_SIZE : Size;
|
||||
LPVOID Result = VirtualAlloc((LPVOID)Start, BlockSize, MEM_RESERVE, Protect);
|
||||
if (Result == nullptr) {
|
||||
HadAnyFailure = true;
|
||||
}
|
||||
#ifdef DEBUG
|
||||
std::printf(" : Start = %08X; Result = %p;\n", Start, Result);
|
||||
#endif
|
||||
// Handle the next block
|
||||
Start += BLOCK_SIZE;
|
||||
Size -= BLOCK_SIZE;
|
||||
if (NeedsReservationTracking) {
|
||||
if (Result != nullptr) {
|
||||
blocks_reserved[arr_index / 32] |= (1 << (arr_index % 32));
|
||||
#ifdef DEBUG
|
||||
std::printf(" : arr_index = 0x%08X; set bit = 0x%08X;\n", arr_index, (1 << (arr_index % 32)));
|
||||
std::printf(" : blocks_reserved[%08X] = 0x%08X\n", arr_index/32, blocks_reserved[arr_index/32]);
|
||||
#endif
|
||||
}
|
||||
arr_index++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#ifdef DEBUG
|
||||
std::printf(" : ReserveMemoryRange call end: HadAnyFailure = %d\n\n", HadAnyFailure);
|
||||
#endif
|
||||
|
||||
// Only a complete success when the entire request was reserved in a single range
|
||||
// (Otherwise, we have either a complete failure, or reserved it partially over multiple ranges)
|
||||
return !HadAnyFailure;
|
||||
}
|
||||
|
||||
// Free address range from the host.
|
||||
void FreeMemoryRange(int index, blocks_reserved_t blocks_reserved)
|
||||
{
|
||||
uint32_t Start = XboxAddressRanges[index].Start, _Start;
|
||||
int Size = XboxAddressRanges[index].Size;
|
||||
bool NeedsReservationTracking = false;
|
||||
unsigned int arr_index = BLOCK_REGION_DEVKIT_INDEX_BEGIN;
|
||||
#ifdef DEBUG
|
||||
std::printf("DEBUG: FreeMemoryRange call begin\n");
|
||||
std::printf(" : Comment = %s\n", XboxAddressRanges[index].Comment);
|
||||
#endif
|
||||
switch (Start) {
|
||||
case PHYSICAL_MAP1_BASE:
|
||||
case PHYSICAL_MAP2_BASE:
|
||||
case TILED_MEMORY_BASE: {
|
||||
(void)UnmapViewOfFile((LPVOID)Start);
|
||||
#ifdef DEBUG
|
||||
std::printf(" : UnmapViewOfFile; Start = 0x%08X\n", Start);
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
|
||||
case SYSTEM_MEMORY_BASE:
|
||||
// If additional addresses need to be assign in region's block.
|
||||
// Then check for nonzero value.
|
||||
arr_index = BLOCK_REGION_SYSTEM_INDEX_BEGIN;
|
||||
[[fallthrough]];
|
||||
case DEVKIT_MEMORY_BASE: {
|
||||
// arr_index's default is BLOCK_REGION_DEVKIT_INDEX_BEGIN which is zero.
|
||||
// Any block region above zero should be place above this case to override zero value.
|
||||
//arr_index = BLOCK_REGION_DEVKIT_INDEX_BEGIN;
|
||||
NeedsReservationTracking = true;
|
||||
}
|
||||
[[fallthrough]];
|
||||
|
||||
default: {
|
||||
while (Size > 0) {
|
||||
_Start = Start; // Require to silence C6001's warning complaint
|
||||
BOOL Result = VirtualFree((LPVOID)_Start, 0, MEM_RELEASE);
|
||||
#ifdef DEBUG
|
||||
std::printf(" : Start = %08X; Result = %d;\n", Start, Result);
|
||||
#endif
|
||||
// Handle the next block
|
||||
Start += BLOCK_SIZE;
|
||||
Size -= BLOCK_SIZE;
|
||||
if (NeedsReservationTracking) {
|
||||
if (Result != 0) {
|
||||
blocks_reserved[arr_index / 32] &= ~(1 << (arr_index % 32));
|
||||
#ifdef DEBUG
|
||||
std::printf(" : arr_index = 0x%08X; clear bit = 0x%08X;\n", arr_index, (1 << (arr_index % 32)));
|
||||
std::printf(" : blocks_reserved[%08X] = 0x%08X\n", arr_index/32, blocks_reserved[arr_index/32]);
|
||||
#endif
|
||||
}
|
||||
arr_index++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#ifdef DEBUG
|
||||
std::printf(" : FreeMemoryRange call end\n\n");
|
||||
#endif
|
||||
}
|
||||
|
||||
bool ReserveAddressRanges(const unsigned int system, blocks_reserved_t blocks_reserved) {
|
||||
// Loop over all Xbox address ranges
|
||||
for (size_t i = 0; i < XboxAddressRanges_size; i++) {
|
||||
// Skip address ranges that don't match the given flags
|
||||
if (!AddressRangeMatchesFlags(i, system))
|
||||
continue;
|
||||
|
||||
// Try to reserve each address range
|
||||
if (ReserveMemoryRange(i, blocks_reserved))
|
||||
continue;
|
||||
|
||||
// Some ranges are allowed to fail reserving
|
||||
if (!IsOptionalAddressRange(i)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void FreeAddressRanges(const unsigned int system, unsigned int release_systems, blocks_reserved_t blocks_reserved) {
|
||||
// If reserved_systems is empty, then there's nothing to be freed up.
|
||||
if (release_systems == 0) {
|
||||
return;
|
||||
}
|
||||
// Loop over all Xbox address ranges
|
||||
for (size_t i = 0; i < XboxAddressRanges_size; i++) {
|
||||
// Skip address ranges that do match specific flag
|
||||
if (AddressRangeMatchesFlags(i, system))
|
||||
continue;
|
||||
|
||||
// Skip address ranges that doesn't match the reserved flags
|
||||
if (!AddressRangeMatchesFlags(i, release_systems))
|
||||
continue;
|
||||
|
||||
FreeMemoryRange(i, blocks_reserved);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
bool AttemptReserveAddressRanges(unsigned int* p_reserved_systems, blocks_reserved_t blocks_reserved) {
|
||||
|
||||
size_t iLast = 0;
|
||||
unsigned int reserved_systems = *p_reserved_systems, clear_systems = 0;
|
||||
// Loop over all Xbox address ranges
|
||||
for (size_t i = 0; i < XboxAddressRanges_size; i++) {
|
||||
|
||||
// Once back to original spot, let's resume.
|
||||
if (i == iLast && clear_systems) {
|
||||
reserved_systems &= ~clear_systems;
|
||||
if (reserved_systems == 0) {
|
||||
*p_reserved_systems = 0;
|
||||
return false;
|
||||
}
|
||||
// Resume virtual allocated range.
|
||||
clear_systems = 0;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (clear_systems) {
|
||||
// Skip address ranges that doesn't match the given flags
|
||||
if (!AddressRangeMatchesFlags(i, clear_systems))
|
||||
continue;
|
||||
|
||||
// Release incompatible system's memory range
|
||||
FreeMemoryRange(i, blocks_reserved);
|
||||
}
|
||||
else {
|
||||
// Skip address ranges that don't match the given flags
|
||||
if (!AddressRangeMatchesFlags(i, reserved_systems))
|
||||
continue;
|
||||
|
||||
// Try to reserve each address range
|
||||
if (ReserveMemoryRange(i, blocks_reserved))
|
||||
continue;
|
||||
|
||||
// Some ranges are allowed to fail reserving
|
||||
if (!IsOptionalAddressRange(i)) {
|
||||
// If not, then let's free them and downgrade host's limitation.
|
||||
clear_systems = AddressRangeGetSystemFlags(i);
|
||||
iLast = i;
|
||||
i = -1; // Reset index back to zero after for statement's increment.
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
*p_reserved_systems = reserved_systems;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool isSystemFlagSupport(unsigned int reserved_systems, unsigned int assign_system)
|
||||
{
|
||||
if (reserved_systems & assign_system) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
|
@ -1,47 +0,0 @@
|
|||
// This is an open source non-commercial project. Dear PVS-Studio, please check it.
|
||||
// PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * This file is part of Cxbx-Reloaded.
|
||||
// *
|
||||
// * Cxbx-Reloaded 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 recieved a copy of the GNU General Public License
|
||||
// * along with this program; see the file COPYING.
|
||||
// * If not, write to the Free Software Foundation, Inc.,
|
||||
// * 59 Temple Place - Suite 330, Bostom, MA 02111-1307, USA.
|
||||
// *
|
||||
// * (c) 2017-2019 Patrick van Logchem <pvanlogchem@gmail.com>
|
||||
// *
|
||||
// * All rights reserved
|
||||
// *
|
||||
// ******************************************************************
|
||||
#pragma once
|
||||
|
||||
#include <cstdint> // For uint32_t
|
||||
|
||||
// First block section will be devkit region (256MiB) = 262144KiB / 64 KiB = 4096 bits needed -> 4096 / 32 (sizeof(uint32_t)) = 128 entries blocks_reserved array.
|
||||
// Next block section will be system region (512MiB) = 524288KiB / 64KiB = 8192 bits needed -> 8192 / 32 (sizeof(uint32_t)) = 256 entries of blocks_reserved array.
|
||||
// 1 bit per block_size (64KiB).
|
||||
typedef uint32_t blocks_reserved_t[384]; // 384 = 128 (devkit region) + 256 (system region)
|
||||
|
||||
inline constexpr uint32_t BLOCK_REGION_DEVKIT_INDEX_BEGIN = 0;
|
||||
inline constexpr uint32_t BLOCK_REGION_DEVKIT_INDEX_END = 4096;
|
||||
inline constexpr uint32_t BLOCK_REGION_SYSTEM_INDEX_BEGIN = 4096;
|
||||
inline constexpr uint32_t BLOCK_REGION_SYSTEM_INDEX_END = 12288;
|
||||
|
||||
extern bool ReserveAddressRanges(const unsigned int system, blocks_reserved_t blocks_reserved);
|
||||
|
||||
extern void FreeAddressRanges(const unsigned int system, unsigned int release_systems, blocks_reserved_t blocks_reserved);
|
||||
|
||||
extern bool AttemptReserveAddressRanges(unsigned int* p_reserved_systems, blocks_reserved_t blocks_reserved);
|
||||
|
||||
extern bool isSystemFlagSupport(unsigned int reserved_systems, unsigned int assign_system);
|
|
@ -0,0 +1,53 @@
|
|||
// ******************************************************************
|
||||
// *
|
||||
// * This file is part of the Cxbx project.
|
||||
// *
|
||||
// * Cxbx 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 recieved a copy of the GNU General Public License
|
||||
// * along with this program; see the file COPYING.
|
||||
// * If not, write to the Free Software Foundation, Inc.,
|
||||
// * 59 Temple Place - Suite 330, Bostom, MA 02111-1307, USA.
|
||||
// *
|
||||
// * (c) 2016 Patrick van Logchem <pvanlogchem@gmail.com>
|
||||
// *
|
||||
// * All rights reserved
|
||||
// *
|
||||
// ******************************************************************
|
||||
#ifndef RESERVEDMEMORY_H
|
||||
#define RESERVEDMEMORY_H
|
||||
|
||||
#if defined(__cplusplus)
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
#include "EmuShared.h" // For XBE_MAX_VA, XBE_IMAGE_BASE and CXBX_BASE_OF_CODE
|
||||
|
||||
// The following code reserves virtual addresses from 0x00011000 upwards;
|
||||
#define VM_PLACEHOLDER_SIZE (XBE_MAX_VA - XBE_IMAGE_BASE - CXBX_BASE_OF_CODE)
|
||||
|
||||
// First, declare the '.text' section again :
|
||||
#pragma section(".text") // Note : 'read,write,execute' would cause a warning
|
||||
// Then place the following variable into the '.text' section :
|
||||
__declspec(allocate(".text"))
|
||||
// This variable *MUST* be this large, for it to take up address space
|
||||
// so that all other code and data in this module are placed outside of the
|
||||
// maximum virtual memory range.
|
||||
unsigned char virtual_memory_placeholder[VM_PLACEHOLDER_SIZE]; // = { OPCODE_NOP_90 };
|
||||
// TODO : Try to get the same result without enlarging our executable by 128 MB!
|
||||
|
||||
|
||||
#if defined(__cplusplus)
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // RESERVEDMEMORY_H
|
|
@ -27,15 +27,12 @@
|
|||
// *
|
||||
// ******************************************************************
|
||||
|
||||
#define LOG_PREFIX CXBXR_MODULE::CXBXR
|
||||
|
||||
#include "Settings.hpp"
|
||||
#include "core\kernel\support\Emu.h"
|
||||
#include "EmuShared.h"
|
||||
#include <filesystem>
|
||||
#include "common\input\layout_xbox_device.h"
|
||||
#include <fstream>
|
||||
#include "common/util/cliConfig.hpp"
|
||||
#include "common\input\InputManager.h"
|
||||
#include "common\input\layout_xbox_controller.h"
|
||||
|
||||
// TODO: Implement Qt support when real CPU emulation is available.
|
||||
#ifndef QT_VERSION // NOTE: Non-Qt will be using current directory for data
|
||||
|
@ -48,28 +45,21 @@ static_assert(false, "Please implement support for cross-platform's user profile
|
|||
#include <QStandardPaths> // for cross-platform's user profile support
|
||||
#endif
|
||||
|
||||
std::string g_exec_filepath;
|
||||
|
||||
// Individual library version
|
||||
uint16_t g_LibVersion_D3D8 = 0;
|
||||
uint16_t g_LibVersion_DSOUND = 0;
|
||||
|
||||
// NOTE: Update settings_version when conversion to setting's structure is required.
|
||||
// UPDATE: When settings are removed, use "if (use false && settings_version < {next_version}) {" statement
|
||||
// until existing settings require replacement or conversion. next_version input is a hardcode number.
|
||||
// Settings version 10 and later should consider as not backward compatible.
|
||||
// TODO: Add read-only state when using an older build and add a notification for will not be able save to file.
|
||||
// The sooner we do this, the better before version upgrade.
|
||||
// NOTE: Update settings_version when add/edit/delete setting's structure.
|
||||
///////////////////////////
|
||||
// * History:
|
||||
// * 2: (RadWolfie), initial version
|
||||
// * 3: (ergo720), added logging settings
|
||||
// * 4: (LukeUsher), added network settings
|
||||
// * 5: (ergo720), added new input gui settings and revision to core
|
||||
// * 6: (RadWolfie), added loader executable member to core, only for clean up loader expertimental setting
|
||||
// * 7: (RadWolfie), fix allowAdminPrivilege not align with other boolean members
|
||||
// * 8: (ergo720), added general input settings
|
||||
// * 9: (LukeUsher), replaced HardwareYUV with MaintainAspect
|
||||
///////////////////////////
|
||||
const unsigned int settings_version = 9;
|
||||
const unsigned int settings_version = 5;
|
||||
|
||||
Settings* g_Settings = nullptr;
|
||||
|
||||
|
@ -88,9 +78,6 @@ static struct {
|
|||
const char* RecentXbeFiles = "RecentXbeFiles";
|
||||
const char* DataStorageToggle = "DataStorageToggle";
|
||||
const char* DataCustomLocation = "DataCustomLocation";
|
||||
const char* IgnoreInvalidXbeSig = "IgnoreInvalidXbeSig";
|
||||
const char *IgnoreInvalidXbeSec = "IgnoreInvalidXbeSec";
|
||||
const char* ConsoleTypeToggle = "ConsoleTypeToggle";
|
||||
} sect_gui_keys;
|
||||
|
||||
static const char* section_core = "core";
|
||||
|
@ -102,7 +89,6 @@ static struct {
|
|||
const char* AllowAdminPrivilege = "AllowAdminPrivilege";
|
||||
const char* LoggedModules = "LoggedModules";
|
||||
const char* LogLevel = "LogLevel";
|
||||
const char* LogPopupTestCase = "LogPopupTestCase";
|
||||
} sect_core_keys;
|
||||
|
||||
static const char* section_video = "video";
|
||||
|
@ -112,19 +98,10 @@ static struct {
|
|||
const char* Direct3DDevice = "Direct3DDevice";
|
||||
const char* VSync = "VSync";
|
||||
const char* FullScreen = "FullScreen";
|
||||
const char* MaintainAspect = "MaintainAspect";
|
||||
const char* HardwareYUV = "HardwareYUV";
|
||||
const char* RenderResolution = "RenderResolution";
|
||||
} sect_video_keys;
|
||||
|
||||
static const char* section_overlay = "overlay";
|
||||
static struct {
|
||||
const char* build_hash = "Build Hash";
|
||||
const char* FPS = "FPS";
|
||||
const char* hle_lle_stats = "HLE/LLE Stats";
|
||||
const char* title_name = "Title Name";
|
||||
const char* file_name = "File Name";
|
||||
} sect_overlay_keys;
|
||||
|
||||
static const char* section_audio = "audio";
|
||||
static struct {
|
||||
const char* adapter = "adapter";
|
||||
|
@ -140,24 +117,15 @@ static struct {
|
|||
const char* adapter_name = "adapter_name";
|
||||
} sect_network_keys;
|
||||
|
||||
static const char *section_input_general = "input-general";
|
||||
static struct {
|
||||
const char *mo_axis_range = "MouseAxisRange";
|
||||
const char *mo_wheel_range = "MouseWheelRange";
|
||||
const char *ignore_kbmo_unfocus = "IgnoreKbMoUnfocus";
|
||||
} sect_input_general;
|
||||
|
||||
static const char* section_controller_dinput = "controller-dinput";
|
||||
static const char* section_controller_port = "controller-port";
|
||||
|
||||
static const char* section_input_port = "input-port-";
|
||||
static const char* section_input = "input-port-";
|
||||
static struct {
|
||||
const char* type = "Type";
|
||||
const char* device = "DeviceName";
|
||||
const char* config = "ProfileName";
|
||||
const char *top_slot = "TopSlot";
|
||||
const char *bottom_slot = "BottomSlot";
|
||||
} sect_input_port;
|
||||
} sect_input;
|
||||
|
||||
static const char* section_input_profiles = "input-profile-";
|
||||
static struct {
|
||||
|
@ -176,9 +144,7 @@ static struct {
|
|||
|
||||
std::string GenerateExecDirectoryStr()
|
||||
{
|
||||
std::string exec_path;
|
||||
(void)cli_config::GetValue(cli_config::exec, &exec_path);
|
||||
return exec_path.substr(0, exec_path.find_last_of("\\/"));
|
||||
return g_exec_filepath.substr(0, g_exec_filepath.find_last_of("\\/"));
|
||||
}
|
||||
|
||||
// NOTE: This function will be only have Qt support, std::filesystem doesn't have generic support.
|
||||
|
@ -237,33 +203,74 @@ bool Settings::Init()
|
|||
// Enter setup installer process
|
||||
if (!bRet) {
|
||||
|
||||
std::string setupFile;
|
||||
m_gui.DataStorageToggle = SetupFile(setupFile);
|
||||
std::string saveFile;
|
||||
#ifdef RETRO_API_VERSION // TODO: Change me to #ifndef QT_VERSION
|
||||
// Can only have one option without Qt.
|
||||
saveFile = GenerateExecDirectoryStr();
|
||||
|
||||
if (m_gui.DataStorageToggle == CXBX_DATA_INVALID) {
|
||||
#else // Only support for Qt compile build.
|
||||
int iRet = MessageBox(nullptr, szSettings_save_user_option_message, "Cxbx-Reloaded", MB_YESNOCANCEL | MB_ICONQUESTION);
|
||||
|
||||
if (iRet == IDYES) {
|
||||
saveFile = GenerateExecDirectoryStr();
|
||||
m_gui.DataStorageToggle = CXBX_DATA_EXECDIR;
|
||||
}
|
||||
else if (iRet == IDNO){
|
||||
saveFile = GenerateUserProfileDirectoryStr();
|
||||
m_gui.DataStorageToggle = CXBX_DATA_APPDATA;
|
||||
if (saveFile.size() == 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check if data directory exists.
|
||||
bRet = std::filesystem::exists(saveFile);
|
||||
if (!bRet) {
|
||||
// Then try create data directory.
|
||||
bRet = std::filesystem::create_directory(saveFile);
|
||||
if (!bRet) {
|
||||
// Unable to create a data directory
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
saveFile.append(szSettings_settings_file);
|
||||
|
||||
// Call LoadConfig, this will load the config, applying defaults for any missing fields
|
||||
bRet = LoadConfig();
|
||||
|
||||
if (!bRet) {
|
||||
PopupError(nullptr, szSettings_setup_error);
|
||||
MessageBox(nullptr, szSettings_setup_error, "Cxbx-Reloaded", MB_OK);
|
||||
return false;
|
||||
}
|
||||
|
||||
bRet = Save(setupFile);
|
||||
bRet = Save(saveFile);
|
||||
}
|
||||
return bRet;
|
||||
}
|
||||
|
||||
bool Settings::LoadUserConfig()
|
||||
{
|
||||
std::string fileSearch;
|
||||
m_gui.DataStorageToggle = FindSettingsLocation(fileSearch);
|
||||
std::string fileSearch = GenerateExecDirectoryStr();
|
||||
|
||||
if (m_gui.DataStorageToggle == CXBX_DATA_INVALID) {
|
||||
return false;
|
||||
fileSearch.append(szSettings_settings_file);
|
||||
|
||||
// Check and see if file exists from portable, current, directory.
|
||||
if (std::filesystem::exists(fileSearch) == false) {
|
||||
|
||||
fileSearch = GenerateUserProfileDirectoryStr();
|
||||
if (fileSearch.size() == 0) {
|
||||
return false;
|
||||
}
|
||||
fileSearch.append(szSettings_settings_file);
|
||||
|
||||
// Check if the user profile directory settings file exists.
|
||||
if (std::filesystem::exists(fileSearch) == false) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return LoadFile(fileSearch);
|
||||
|
@ -340,11 +347,6 @@ bool Settings::LoadConfig()
|
|||
index++;
|
||||
}
|
||||
|
||||
m_gui.bIgnoreInvalidXbeSig = m_si.GetBoolValue(section_gui, sect_gui_keys.IgnoreInvalidXbeSig, /*Default=*/false);
|
||||
m_gui.bIgnoreInvalidXbeSec = m_si.GetBoolValue(section_gui, sect_gui_keys.IgnoreInvalidXbeSec, /*Default=*/false);
|
||||
|
||||
m_gui.ConsoleTypeToggle = (EMU_CONSOLE_TYPE)m_si.GetLongValue(section_gui, sect_gui_keys.ConsoleTypeToggle, /*Default=*/EMU_CONSOLE_TYPE_AUTO);
|
||||
|
||||
// ==== GUI End =============
|
||||
|
||||
// ==== Core Begin ==========
|
||||
|
@ -386,14 +388,9 @@ bool Settings::LoadConfig()
|
|||
m_core.LoggedModules[index] = 0;
|
||||
index++;
|
||||
}
|
||||
m_core.bLogPopupTestCase = m_si.GetBoolValue(section_core, sect_core_keys.LogPopupTestCase, /*Default=*/true);
|
||||
|
||||
// ==== Core End ============
|
||||
|
||||
// Delete/update legacy configs from previous revisions
|
||||
RemoveLegacyConfigs(m_core.Revision);
|
||||
m_core.Revision = settings_version;
|
||||
|
||||
// ==== Hack Begin ==========
|
||||
|
||||
m_hacks.DisablePixelShaders = m_si.GetBoolValue(section_hack, sect_hack_keys.DisablePixelShaders, /*Default=*/false);
|
||||
|
@ -418,7 +415,7 @@ bool Settings::LoadConfig()
|
|||
m_video.direct3DDevice = m_si.GetLongValue(section_video, sect_video_keys.Direct3DDevice, /*Default=*/0);
|
||||
m_video.bVSync = m_si.GetBoolValue(section_video, sect_video_keys.VSync, /*Default=*/false);
|
||||
m_video.bFullScreen = m_si.GetBoolValue(section_video, sect_video_keys.FullScreen, /*Default=*/false);
|
||||
m_video.bMaintainAspect = m_si.GetBoolValue(section_video, sect_video_keys.MaintainAspect, /*Default=*/true);
|
||||
m_video.bHardwareYUV = m_si.GetBoolValue(section_video, sect_video_keys.HardwareYUV, /*Default=*/false);
|
||||
m_video.renderScaleFactor = m_si.GetLongValue(section_video, sect_video_keys.RenderResolution, /*Default=*/1);
|
||||
|
||||
// ==== Video End ===========
|
||||
|
@ -463,74 +460,39 @@ bool Settings::LoadConfig()
|
|||
|
||||
// ==== Network End =========
|
||||
|
||||
// ==== Input General Begin ====
|
||||
|
||||
m_input_general.MoAxisRange = m_si.GetLongValue(section_input_general, sect_input_general.mo_axis_range, MO_AXIS_DEFAULT_RANGE);
|
||||
m_input_general.MoWheelRange = m_si.GetLongValue(section_input_general, sect_input_general.mo_wheel_range, MO_WHEEL_DEFAULT_RANGE);
|
||||
m_input_general.IgnoreKbMoUnfocus = m_si.GetBoolValue(section_input_general, sect_input_general.ignore_kbmo_unfocus, true);
|
||||
|
||||
// ==== Input General End ==============
|
||||
|
||||
// ==== Input Port Begin ====
|
||||
// ==== Input Begin ====
|
||||
|
||||
for (int port_num = 0; port_num < 4; port_num++) {
|
||||
for (int slot = 0; slot < XBOX_CTRL_NUM_SLOTS; ++slot) {
|
||||
m_input_port[port_num].Type = to_underlying(XBOX_INPUT_DEVICE::DEVICE_INVALID);
|
||||
m_input_port[port_num].SlotType[slot] = to_underlying(XBOX_INPUT_DEVICE::DEVICE_INVALID);
|
||||
|
||||
std::string current_section = std::string(section_input_port) + std::to_string(port_num);
|
||||
int ret = m_si.GetLongValue(current_section.c_str(), sect_input_port.type, -2);
|
||||
if (ret == -2) {
|
||||
continue;
|
||||
}
|
||||
m_input_port[port_num].Type = ret;
|
||||
m_input_port[port_num].DeviceName = m_si.GetValue(current_section.c_str(), sect_input_port.device);
|
||||
m_input_port[port_num].ProfileName = TrimQuoteFromString(m_si.GetValue(current_section.c_str(), sect_input_port.config));
|
||||
ret = m_si.GetLongValue(current_section.c_str(), slot == 0 ? sect_input_port.top_slot : sect_input_port.bottom_slot, -2);
|
||||
if (ret == -2) {
|
||||
continue;
|
||||
}
|
||||
m_input_port[port_num].SlotType[slot] = ret;
|
||||
}
|
||||
}
|
||||
|
||||
// ==== Input Port End ==============
|
||||
|
||||
// ==== Input Profile Begin ====
|
||||
|
||||
std::array<std::vector<std::string>, to_underlying(XBOX_INPUT_DEVICE::DEVICE_MAX)> control_names;
|
||||
for (int device = 0; device < to_underlying(XBOX_INPUT_DEVICE::DEVICE_MAX); device++) {
|
||||
if (dev_num_buttons[device] == 0) {
|
||||
std::string current_section = std::string(section_input) + std::to_string(port_num);
|
||||
int ret = m_si.GetLongValue(current_section.c_str(), sect_input.type, -2);
|
||||
if (ret == -2) {
|
||||
m_input[port_num].Type = to_underlying(XBOX_INPUT_DEVICE::DEVICE_INVALID);
|
||||
continue;
|
||||
}
|
||||
|
||||
const auto &lambda = [&control_names, &device](int num_buttons, const char *const ctrl_names[]) {
|
||||
for (int i = 0; i < num_buttons; i++) {
|
||||
char control_name[XBOX_BUTTON_NAME_LENGTH];
|
||||
std::sprintf(control_name, sect_input_profiles.control, ctrl_names[i]);
|
||||
control_names[device].push_back(control_name);
|
||||
}
|
||||
};
|
||||
|
||||
switch (device)
|
||||
{
|
||||
case to_underlying(XBOX_INPUT_DEVICE::MS_CONTROLLER_DUKE):
|
||||
case to_underlying(XBOX_INPUT_DEVICE::MS_CONTROLLER_S):
|
||||
case to_underlying(XBOX_INPUT_DEVICE::ARCADE_STICK):
|
||||
lambda(dev_num_buttons[device], button_xbox_ctrl_names);
|
||||
break;
|
||||
|
||||
case to_underlying(XBOX_INPUT_DEVICE::STEEL_BATTALION_CONTROLLER):
|
||||
lambda(dev_num_buttons[device], button_sbc_names);
|
||||
break;
|
||||
|
||||
case to_underlying(XBOX_INPUT_DEVICE::LIGHTGUN):
|
||||
lambda(dev_num_buttons[device], button_lightgun_names);
|
||||
break;
|
||||
|
||||
}
|
||||
m_input[port_num].Type = ret;
|
||||
m_input[port_num].DeviceName = m_si.GetValue(current_section.c_str(), sect_input.device);
|
||||
m_input[port_num].ProfileName = TrimQuoteFromString(m_si.GetValue(current_section.c_str(), sect_input.config));
|
||||
}
|
||||
|
||||
// ==== Input End ==============
|
||||
|
||||
// ==== Input Profile Begin ====
|
||||
std::array<std::vector<std::string>, to_underlying(XBOX_INPUT_DEVICE::DEVICE_MAX)> control_names;
|
||||
|
||||
for (int device = 0; device < to_underlying(XBOX_INPUT_DEVICE::DEVICE_MAX); device++) {
|
||||
if (dev_num_buttons[device] == 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
for (int i = 0; i < dev_num_buttons[device]; i++) {
|
||||
char control_name[30];
|
||||
std::sprintf(control_name, sect_input_profiles.control, button_xbox_ctrl_names[i][0]);
|
||||
control_names[device].push_back(control_name);
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: add the control names of the other devices
|
||||
|
||||
index = 0;
|
||||
while (true) {
|
||||
std::string current_section = std::string(section_input_profiles) + std::to_string(index);
|
||||
|
@ -551,15 +513,9 @@ bool Settings::LoadConfig()
|
|||
|
||||
// ==== Input Profile End ======
|
||||
|
||||
// ==== Overlay Begin =========
|
||||
|
||||
m_overlay.build_hash = m_si.GetBoolValue(section_overlay, sect_overlay_keys.build_hash, false);
|
||||
m_overlay.fps = m_si.GetBoolValue(section_overlay, sect_overlay_keys.FPS, false);
|
||||
m_overlay.hle_lle_stats = m_si.GetBoolValue(section_overlay, sect_overlay_keys.hle_lle_stats, false);
|
||||
m_overlay.title_name = m_si.GetBoolValue(section_overlay, sect_overlay_keys.title_name, false);
|
||||
m_overlay.file_name = m_si.GetBoolValue(section_overlay, sect_overlay_keys.file_name, false);
|
||||
|
||||
// ==== Overlay End ===========
|
||||
// Delete legacy configs from previous revisions
|
||||
RemoveLegacyConfigs(m_core.Revision);
|
||||
m_core.Revision = settings_version;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -588,11 +544,6 @@ bool Settings::Save(std::string file_path)
|
|||
m_si.SetValue(section_gui, sect_gui_keys.RecentXbeFiles, m_gui.szRecentXbeFiles[i].c_str(), nullptr, false);
|
||||
}
|
||||
|
||||
m_si.SetBoolValue(section_gui, sect_gui_keys.IgnoreInvalidXbeSig, m_gui.bIgnoreInvalidXbeSig, nullptr, true);
|
||||
m_si.SetBoolValue(section_gui, sect_gui_keys.IgnoreInvalidXbeSec, m_gui.bIgnoreInvalidXbeSec, nullptr, true);
|
||||
|
||||
m_si.SetLongValue(section_gui, sect_gui_keys.ConsoleTypeToggle, m_gui.ConsoleTypeToggle, nullptr, true, true);
|
||||
|
||||
// ==== GUI End =============
|
||||
|
||||
// ==== Core Begin ==========
|
||||
|
@ -612,7 +563,6 @@ bool Settings::Save(std::string file_path)
|
|||
stream << "0x" << std::hex << m_core.LoggedModules[i];
|
||||
m_si.SetValue(section_core, sect_core_keys.LoggedModules, stream.str().c_str(), nullptr, false);
|
||||
}
|
||||
m_si.SetBoolValue(section_core, sect_core_keys.LogPopupTestCase, m_core.bLogPopupTestCase, nullptr, true);
|
||||
|
||||
// ==== Core End ============
|
||||
|
||||
|
@ -624,9 +574,8 @@ bool Settings::Save(std::string file_path)
|
|||
m_si.SetLongValue(section_video, sect_video_keys.Direct3DDevice, m_video.direct3DDevice, nullptr, true, true);
|
||||
m_si.SetBoolValue(section_video, sect_video_keys.VSync, m_video.bVSync, nullptr, true);
|
||||
m_si.SetBoolValue(section_video, sect_video_keys.FullScreen, m_video.bFullScreen, nullptr, true);
|
||||
m_si.SetBoolValue(section_video, sect_video_keys.MaintainAspect, m_video.bMaintainAspect, nullptr, true);
|
||||
m_si.SetBoolValue(section_video, sect_video_keys.HardwareYUV, m_video.bHardwareYUV, nullptr, true);
|
||||
m_si.SetLongValue(section_video, sect_video_keys.RenderResolution, m_video.renderScaleFactor, nullptr, false, true);
|
||||
|
||||
// ==== Video End ===========
|
||||
|
||||
// ==== Audio Begin =========
|
||||
|
@ -652,63 +601,36 @@ bool Settings::Save(std::string file_path)
|
|||
|
||||
// ==== Network End =========
|
||||
|
||||
// ==== Input General Begin =======
|
||||
|
||||
m_si.SetLongValue(section_input_general, sect_input_general.mo_axis_range, m_input_general.MoAxisRange, nullptr, false, true);
|
||||
m_si.SetLongValue(section_input_general, sect_input_general.mo_wheel_range, m_input_general.MoWheelRange, nullptr, false, true);
|
||||
m_si.SetBoolValue(section_input_general, sect_input_general.ignore_kbmo_unfocus, m_input_general.IgnoreKbMoUnfocus, nullptr, true);
|
||||
|
||||
// ==== Input General End =========
|
||||
|
||||
// ==== Input Port Begin ====
|
||||
// ==== Input Begin ====
|
||||
|
||||
for (int port_num = 0; port_num < 4; port_num++) {
|
||||
std::string current_section = std::string(section_input_port) + std::to_string(port_num);
|
||||
std::string quoted_prf_str = m_input_port[port_num].ProfileName.insert(0, "\"");
|
||||
std::string current_section = std::string(section_input) + std::to_string(port_num);
|
||||
std::string quoted_prf_str = m_input[port_num].ProfileName.insert(0, "\"");
|
||||
quoted_prf_str += "\"";
|
||||
m_si.SetLongValue(current_section.c_str(), sect_input_port.type, m_input_port[port_num].Type, nullptr, false, true);
|
||||
m_si.SetValue(current_section.c_str(), sect_input_port.device, m_input_port[port_num].DeviceName.c_str(), nullptr, true);
|
||||
m_si.SetValue(current_section.c_str(), sect_input_port.config, quoted_prf_str.c_str(), nullptr, true);
|
||||
m_si.SetLongValue(current_section.c_str(), sect_input_port.top_slot, m_input_port[port_num].SlotType[SLOT_TOP], nullptr, false, true);
|
||||
m_si.SetLongValue(current_section.c_str(), sect_input_port.bottom_slot, m_input_port[port_num].SlotType[SLOT_BOTTOM], nullptr, false, true);
|
||||
m_si.SetLongValue(current_section.c_str(), sect_input.type, m_input[port_num].Type, nullptr, false, true);
|
||||
m_si.SetValue(current_section.c_str(), sect_input.device, m_input[port_num].DeviceName.c_str(), nullptr, true);
|
||||
m_si.SetValue(current_section.c_str(), sect_input.config, quoted_prf_str.c_str(), nullptr, true);
|
||||
}
|
||||
|
||||
// ==== Input Port End ==============
|
||||
// ==== Input End ==============
|
||||
|
||||
// ==== Input Profile Begin ====
|
||||
|
||||
std::array<std::vector<std::string>, to_underlying(XBOX_INPUT_DEVICE::DEVICE_MAX)> control_names;
|
||||
for (int device = 0; device < to_underlying(XBOX_INPUT_DEVICE::DEVICE_MAX); device++) {
|
||||
for (int device = 0; device < to_underlying(XBOX_INPUT_DEVICE::DEVICE_MAX); device++) {
|
||||
if (dev_num_buttons[device] == 0) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
const auto &lambda = [&control_names, &device](int num_buttons, const char *const ctrl_names[]) {
|
||||
for (int i = 0; i < num_buttons; i++) {
|
||||
char control_name[XBOX_BUTTON_NAME_LENGTH];
|
||||
std::sprintf(control_name, sect_input_profiles.control, ctrl_names[i]);
|
||||
control_names[device].push_back(control_name);
|
||||
}
|
||||
};
|
||||
|
||||
switch (device)
|
||||
{
|
||||
case to_underlying(XBOX_INPUT_DEVICE::MS_CONTROLLER_DUKE):
|
||||
case to_underlying(XBOX_INPUT_DEVICE::MS_CONTROLLER_S):
|
||||
case to_underlying(XBOX_INPUT_DEVICE::ARCADE_STICK):
|
||||
lambda(dev_num_buttons[device], button_xbox_ctrl_names);
|
||||
break;
|
||||
|
||||
case to_underlying(XBOX_INPUT_DEVICE::STEEL_BATTALION_CONTROLLER):
|
||||
lambda(dev_num_buttons[device], button_sbc_names);
|
||||
break;
|
||||
|
||||
case to_underlying(XBOX_INPUT_DEVICE::LIGHTGUN):
|
||||
lambda(dev_num_buttons[device], button_lightgun_names);
|
||||
break;
|
||||
}
|
||||
for (int i = 0; i < dev_num_buttons[device]; i++) {
|
||||
char control_name[30];
|
||||
std::sprintf(control_name, sect_input_profiles.control, button_xbox_ctrl_names[i][0]);
|
||||
control_names[device].push_back(control_name);
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: add the control names of the other devices
|
||||
|
||||
int profile_num = 0;
|
||||
for (int i = 0; i < to_underlying(XBOX_INPUT_DEVICE::DEVICE_MAX); i++) {
|
||||
size_t vec_size = m_input_profiles[i].size();
|
||||
|
@ -744,16 +666,6 @@ bool Settings::Save(std::string file_path)
|
|||
|
||||
// ==== Input Profile End ======
|
||||
|
||||
// ==== Overlay Begin =======
|
||||
|
||||
m_si.SetBoolValue(section_overlay, sect_overlay_keys.build_hash, m_overlay.build_hash, nullptr, true);
|
||||
m_si.SetBoolValue(section_overlay, sect_overlay_keys.FPS, m_overlay.fps, nullptr, true);
|
||||
m_si.SetBoolValue(section_overlay, sect_overlay_keys.hle_lle_stats, m_overlay.hle_lle_stats, nullptr, true);
|
||||
m_si.SetBoolValue(section_overlay, sect_overlay_keys.title_name, m_overlay.title_name, nullptr, true);
|
||||
m_si.SetBoolValue(section_overlay, sect_overlay_keys.file_name, m_overlay.file_name, nullptr, true);
|
||||
|
||||
// ==== Overlay End =========
|
||||
|
||||
// ==== Hack Begin ==========
|
||||
|
||||
m_si.SetBoolValue(section_hack, sect_hack_keys.DisablePixelShaders, m_hacks.DisablePixelShaders, nullptr, true);
|
||||
|
@ -791,7 +703,6 @@ void Settings::SyncToEmulator()
|
|||
|
||||
// register Video settings
|
||||
g_EmuShared->SetVideoSettings(&m_video);
|
||||
g_EmuShared->SetOverlaySettings(&m_overlay);
|
||||
|
||||
// register Audio settings
|
||||
g_EmuShared->SetAudioSettings(&m_audio);
|
||||
|
@ -799,43 +710,33 @@ void Settings::SyncToEmulator()
|
|||
// register Network settings
|
||||
g_EmuShared->SetNetworkSettings(&m_network);
|
||||
|
||||
// register xbox device input settings
|
||||
// register input settings
|
||||
for (int i = 0; i < 4; i++) {
|
||||
g_EmuShared->SetInputDevTypeSettings(&m_input_port[i].Type, i);
|
||||
g_EmuShared->SetInputSlotTypeSettings(&m_input_port[i].SlotType[SLOT_TOP], i, SLOT_TOP);
|
||||
g_EmuShared->SetInputSlotTypeSettings(&m_input_port[i].SlotType[SLOT_BOTTOM], i, SLOT_BOTTOM);
|
||||
if (m_input_port[i].Type != to_underlying(XBOX_INPUT_DEVICE::DEVICE_INVALID)) {
|
||||
g_EmuShared->SetInputDevNameSettings(m_input_port[i].DeviceName.c_str(), i);
|
||||
if (m_input_port[i].Type < to_underlying(XBOX_INPUT_DEVICE::DEVICE_MAX)) {
|
||||
auto it = std::find_if(m_input_profiles[m_input_port[i].Type].begin(),
|
||||
m_input_profiles[m_input_port[i].Type].end(), [this, i](const auto &profile) {
|
||||
if (profile.ProfileName == m_input_port[i].ProfileName) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
if (it != m_input_profiles[m_input_port[i].Type].end()) {
|
||||
char controls_name[HIGHEST_NUM_BUTTONS][HOST_BUTTON_NAME_LENGTH];
|
||||
for (int index = 0; index < dev_num_buttons[m_input_port[i].Type]; index++) {
|
||||
strncpy(controls_name[index], it->ControlList[index].c_str(), 30);
|
||||
g_EmuShared->SetInputDevTypeSettings(&m_input[i].Type, i);
|
||||
if (m_input[i].Type != to_underlying(XBOX_INPUT_DEVICE::DEVICE_INVALID)) {
|
||||
g_EmuShared->SetInputDevNameSettings(m_input[i].DeviceName.c_str(), i);
|
||||
auto it = std::find_if(m_input_profiles[m_input[i].Type].begin(),
|
||||
m_input_profiles[m_input[i].Type].end(), [this, i](const auto& profile) {
|
||||
if (profile.ProfileName == m_input[i].ProfileName) {
|
||||
return true;
|
||||
}
|
||||
g_EmuShared->SetInputBindingsSettings(controls_name, dev_num_buttons[m_input_port[i].Type], i);
|
||||
return false;
|
||||
});
|
||||
if (it != m_input_profiles[m_input[i].Type].end()) {
|
||||
char controls_name[XBOX_CTRL_NUM_BUTTONS][30];
|
||||
for (int index = 0; index < dev_num_buttons[m_input[i].Type]; index++) {
|
||||
strncpy(controls_name[index], it->ControlList[index].c_str(), 30);
|
||||
}
|
||||
g_EmuShared->SetInputBindingsSettings(controls_name, XBOX_CTRL_NUM_BUTTONS, i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// register Input general settings
|
||||
g_EmuShared->SetInputGeneralSettings(&m_input_general);
|
||||
|
||||
// register Hacks settings
|
||||
g_EmuShared->SetHackSettings(&m_hacks);
|
||||
|
||||
// register data location setting
|
||||
g_EmuShared->SetDataLocation(GetDataLocation().c_str());
|
||||
|
||||
// reset title mount path
|
||||
g_EmuShared->SetTitleMountPath("");
|
||||
g_EmuShared->SetStorageLocation(GetDataLocation().c_str());
|
||||
}
|
||||
|
||||
void verifyDebugFilePath(DebugMode& debug_mode, std::string& file_path)
|
||||
|
@ -919,131 +820,17 @@ std::string Settings::GetDataLocation()
|
|||
return m_current_data_location;
|
||||
}
|
||||
|
||||
// Detect where settings file is located and return default data mode.
|
||||
CXBX_DATA Settings::FindSettingsLocation(std::string& file_path_out)
|
||||
{
|
||||
std::string fileSearch = GenerateExecDirectoryStr();
|
||||
CXBX_DATA ret = CXBX_DATA_EXECDIR;
|
||||
|
||||
fileSearch.append(szSettings_settings_file);
|
||||
|
||||
// Check and see if file exists from portable, current, directory.
|
||||
if (std::filesystem::exists(fileSearch) == false) {
|
||||
|
||||
fileSearch = GenerateUserProfileDirectoryStr();
|
||||
if (fileSearch.size() == 0) {
|
||||
return CXBX_DATA_INVALID;
|
||||
}
|
||||
CXBX_DATA ret = CXBX_DATA_APPDATA;
|
||||
fileSearch.append(szSettings_settings_file);
|
||||
|
||||
// Check if the user profile directory settings file exists.
|
||||
if (std::filesystem::exists(fileSearch) == false) {
|
||||
return CXBX_DATA_INVALID;
|
||||
}
|
||||
}
|
||||
file_path_out = fileSearch;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
// Enter setup installer process
|
||||
CXBX_DATA Settings::SetupFile(std::string& file_path_out)
|
||||
{
|
||||
std::string setupFile;
|
||||
CXBX_DATA data_ret = CXBX_DATA_INVALID;
|
||||
#ifdef RETRO_API_VERSION // TODO: Change me to #ifndef QT_VERSION
|
||||
// Can only have one option without Qt.
|
||||
setupFile = GenerateExecDirectoryStr();
|
||||
|
||||
#else // Only support for Qt compile build.
|
||||
PopupReturn eRet = PopupQuestion(nullptr, szSettings_save_user_option_message);
|
||||
|
||||
if (eRet == PopupReturn::Yes) {
|
||||
setupFile = GenerateExecDirectoryStr();
|
||||
data_ret = CXBX_DATA_EXECDIR;
|
||||
}
|
||||
else if (eRet == PopupReturn::No) {
|
||||
setupFile = GenerateUserProfileDirectoryStr();
|
||||
data_ret = CXBX_DATA_APPDATA;
|
||||
if (setupFile.size() != 0) {
|
||||
// Check if data directory exists.
|
||||
if (!std::filesystem::exists(setupFile)) {
|
||||
// Then try create data directory.
|
||||
if (!std::filesystem::create_directory(setupFile)) {
|
||||
// Unable to create a data directory
|
||||
data_ret = CXBX_DATA_INVALID;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (data_ret == CXBX_DATA_INVALID) {
|
||||
PopupError(nullptr, szSettings_setup_error);
|
||||
}
|
||||
else {
|
||||
setupFile.append(szSettings_settings_file);
|
||||
// Create the file, that's it. Load the default configuration later on;
|
||||
std::ofstream createFile(setupFile);
|
||||
if (createFile.is_open()) {
|
||||
createFile.close();
|
||||
}
|
||||
file_path_out = setupFile;
|
||||
}
|
||||
|
||||
return data_ret;
|
||||
}
|
||||
|
||||
void Settings::RemoveLegacyConfigs(unsigned int CurrentRevision)
|
||||
{
|
||||
if (CurrentRevision < 5) {
|
||||
switch (CurrentRevision) {
|
||||
case 2:
|
||||
case 3:
|
||||
case 4:
|
||||
m_si.Delete(section_controller_dinput, nullptr, true);
|
||||
m_si.Delete(section_controller_port, nullptr, true);
|
||||
}
|
||||
|
||||
if (CurrentRevision == 5) {
|
||||
m_si.Delete(section_core, "LoaderExperiment", true);
|
||||
}
|
||||
|
||||
|
||||
if (CurrentRevision < 8) {
|
||||
const std::string kb_str = "Keyboard";
|
||||
|
||||
for (unsigned port_num = 0; port_num < 4; ++port_num) {
|
||||
std::string current_section = std::string(section_input_port) + std::to_string(port_num);
|
||||
std::string device_name = m_si.GetValue(current_section.c_str(), sect_input_port.device, "");
|
||||
|
||||
if (device_name.ends_with(kb_str)) {
|
||||
device_name += "Mouse";
|
||||
m_si.SetValue(current_section.c_str(), sect_input_port.device, device_name.c_str(), nullptr, true);
|
||||
}
|
||||
}
|
||||
|
||||
for (unsigned index = 0; ; ++index) {
|
||||
std::string current_section = std::string(section_input_profiles) + std::to_string(index);
|
||||
if (m_si.GetSectionSize(current_section.c_str()) == -1) {
|
||||
break;
|
||||
}
|
||||
|
||||
std::string device_name = m_si.GetValue(current_section.c_str(), sect_input_profiles.device, "");
|
||||
|
||||
// NOTE: with C++20, this can be simplified by simply calling device_name.ends_with()
|
||||
if (device_name.length() >= kb_str.length()) {
|
||||
if (device_name.compare(device_name.length() - kb_str.length(), kb_str.length(), kb_str) == 0) {
|
||||
device_name += "Mouse";
|
||||
m_si.SetValue(current_section.c_str(), sect_input_profiles.device, device_name.c_str(), nullptr, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(CurrentRevision < 9) {
|
||||
m_si.Delete(section_video, "HardwareYUV", true);
|
||||
}
|
||||
|
||||
// see settings_version for details.
|
||||
if(false && CurrentRevision < 10) {
|
||||
m_si.Delete(section_core, "LoaderExecutable", true);
|
||||
break;
|
||||
case 5:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
// * 59 Temple Place - Suite 330, Bostom, MA 02111-1307, USA.
|
||||
// *
|
||||
// * (c) 2002-2003 Aaron Robinson <caustik@caustik.com>
|
||||
// * (c) 2017-2018 RadWolfie
|
||||
// * (c) 2017-2018 RadWolfie
|
||||
// * (c) 2019 ergo720
|
||||
// *
|
||||
// * All rights reserved
|
||||
|
@ -26,46 +26,33 @@
|
|||
// ******************************************************************
|
||||
#ifndef SETTINGS_HPP
|
||||
#define SETTINGS_HPP
|
||||
#include "Cxbx.h"
|
||||
|
||||
#include "SimpleIni.h"
|
||||
#include "common\input\InputManager.h"
|
||||
#include "SimpleIni.h"
|
||||
#include "input\InputDevice.h"
|
||||
#include "common\util\CxbxUtil.h"
|
||||
#include <string>
|
||||
#include <array>
|
||||
|
||||
#include "core/common/imgui/settings.h"
|
||||
|
||||
#include <string>
|
||||
#include <array>
|
||||
|
||||
extern std::string g_exec_filepath;
|
||||
|
||||
// Individual library version
|
||||
extern uint16_t g_LibVersion_D3D8;
|
||||
|
||||
// Individual library version
|
||||
extern uint16_t g_LibVersion_D3D8;
|
||||
extern uint16_t g_LibVersion_DSOUND;
|
||||
|
||||
#define szSettings_alloc_error "ERROR: Unable to allocate Settings class."
|
||||
#define assert_check_shared_memory(type) \
|
||||
"Invalid "#type" size, please verify structure is align, not adding new member, or is using placeholder reserves." \
|
||||
" Otherwise, please perform versioning upgrade and update "#type" sizeof check."
|
||||
|
||||
// Toggle emulation console mode.
|
||||
typedef enum _EMU_CONSOLE_TYPE {
|
||||
EMU_CONSOLE_TYPE_AUTO = 0,
|
||||
EMU_CONSOLE_TYPE_RETAIL = 1,
|
||||
EMU_CONSOLE_TYPE_DEVKIT = 2,
|
||||
EMU_CONSOLE_TYPE_CHIHIRO = 3,
|
||||
} EMU_CONSOLE_TYPE;
|
||||
|
||||
// Cxbx-Reloaded's data storage location.
|
||||
typedef enum _CXBX_DATA {
|
||||
CXBX_DATA_INVALID = -1,
|
||||
CXBX_DATA_APPDATA = 0,
|
||||
CXBX_DATA_EXECDIR = 1,
|
||||
CXBX_DATA_CUSTOM = 2,
|
||||
} CXBX_DATA;
|
||||
|
||||
} CXBX_DATA;
|
||||
|
||||
// ******************************************************************
|
||||
// * Define number of integers required to store logging settings
|
||||
// ******************************************************************
|
||||
#define NUM_INTEGERS_LOG 3
|
||||
#define NUM_INTEGERS_LOG 2
|
||||
|
||||
enum {
|
||||
LLE_NONE = 0,
|
||||
|
@ -87,8 +74,6 @@ public:
|
|||
void SyncToEmulator();
|
||||
void Verify();
|
||||
std::string GetDataLocation();
|
||||
static CXBX_DATA FindSettingsLocation(std::string& file_path_out);
|
||||
static CXBX_DATA SetupFile(std::string& file_path_out);
|
||||
|
||||
// GUI settings
|
||||
struct s_gui {
|
||||
|
@ -97,27 +82,23 @@ public:
|
|||
std::string szRecentXbeFiles[10];
|
||||
unsigned int DataStorageToggle;
|
||||
std::string szCustomLocation = "";
|
||||
bool bIgnoreInvalidXbeSig;
|
||||
bool bIgnoreInvalidXbeSec;
|
||||
unsigned int ConsoleTypeToggle;
|
||||
} m_gui;
|
||||
|
||||
// Core settings
|
||||
struct s_core {
|
||||
struct s_core {
|
||||
unsigned int Revision;
|
||||
unsigned int FlagsLLE;
|
||||
DebugMode KrnlDebugMode;
|
||||
char szKrnlDebug[MAX_PATH] = "";
|
||||
char szStorageLocation[xbox::max_path] = "";
|
||||
unsigned int LoggedModules[NUM_INTEGERS_LOG];
|
||||
char szStorageLocation[MAX_PATH] = "";
|
||||
bool allowAdminPrivilege;
|
||||
unsigned int LoggedModules[NUM_INTEGERS_LOG];
|
||||
int LogLevel = 1;
|
||||
bool bUnused_WasUseLoaderExec;
|
||||
bool allowAdminPrivilege;
|
||||
bool bLogPopupTestCase;
|
||||
bool Reserved2 = 0;
|
||||
bool Reserved3 = 0;
|
||||
bool Reserved4 = 0;
|
||||
int Reserved99[10] = { 0 };
|
||||
} m_core;
|
||||
static_assert(sizeof(s_core) == 0x250, assert_check_shared_memory(s_core));
|
||||
|
||||
// Video settings
|
||||
struct s_video {
|
||||
|
@ -126,12 +107,11 @@ public:
|
|||
unsigned int direct3DDevice;
|
||||
bool bVSync;
|
||||
bool bFullScreen;
|
||||
bool bMaintainAspect;
|
||||
bool bHardwareYUV;
|
||||
bool Reserved3;
|
||||
int renderScaleFactor = 1;
|
||||
int Reserved99[9] = { 0 };
|
||||
} m_video;
|
||||
static_assert(sizeof(s_video) == 0x98, assert_check_shared_memory(s_video));
|
||||
|
||||
// Audio settings
|
||||
struct s_audio {
|
||||
|
@ -142,45 +122,33 @@ public:
|
|||
bool mute_on_unfocus;
|
||||
int Reserved99[14] = { 0 };
|
||||
} m_audio;
|
||||
static_assert(sizeof(s_audio) == 0x4C, assert_check_shared_memory(s_audio));
|
||||
|
||||
// Input general settings
|
||||
struct s_input_general {
|
||||
long MoAxisRange;
|
||||
long MoWheelRange;
|
||||
bool IgnoreKbMoUnfocus;
|
||||
bool Reserved1[3];
|
||||
} m_input_general;
|
||||
static_assert(sizeof(s_input_general) == 0xC, assert_check_shared_memory(s_input_general));
|
||||
|
||||
struct s_input_port {
|
||||
int Type;
|
||||
int SlotType[XBOX_CTRL_NUM_SLOTS];
|
||||
std::string DeviceName;
|
||||
std::string ProfileName;
|
||||
};
|
||||
std::array<s_input_port, 4> m_input_port;
|
||||
|
||||
struct s_input_profiles {
|
||||
int Type;
|
||||
std::string ProfileName;
|
||||
std::string DeviceName;
|
||||
std::vector<std::string> ControlList;
|
||||
};
|
||||
std::array<std::vector<s_input_profiles>, to_underlying(XBOX_INPUT_DEVICE::DEVICE_MAX)> m_input_profiles;
|
||||
|
||||
|
||||
struct s_input {
|
||||
int Type;
|
||||
std::string DeviceName;
|
||||
std::string ProfileName;
|
||||
};
|
||||
std::array<s_input, 4> m_input;
|
||||
|
||||
struct s_input_profiles {
|
||||
int Type;
|
||||
std::string ProfileName;
|
||||
std::string DeviceName;
|
||||
std::vector<std::string> ControlList;
|
||||
};
|
||||
std::array<std::vector<s_input_profiles>, to_underlying(XBOX_INPUT_DEVICE::DEVICE_MAX)> m_input_profiles;
|
||||
|
||||
// Network settings
|
||||
struct s_network {
|
||||
char adapter_name[MAX_PATH] = "";
|
||||
} m_network;
|
||||
static_assert(sizeof(s_network) == 0x104, assert_check_shared_memory(s_network));
|
||||
|
||||
// Hack settings
|
||||
// NOTE: When removing fields, replace them with place-holders
|
||||
// The size and order of this structure should *not* be allowed to change
|
||||
// Hack settings
|
||||
// NOTE: When removing fields, replace them with place-holders
|
||||
// The size and order of this structure should *not* be allowed to change
|
||||
// TODO: Fix IPC/Shared Memory so this isn't necessary
|
||||
struct s_hack {
|
||||
bool DisablePixelShaders;
|
||||
bool DisablePixelShaders;
|
||||
bool Reserved2;
|
||||
bool UseAllCores;
|
||||
bool SkipRdtscPatching;
|
||||
|
@ -190,11 +158,8 @@ public:
|
|||
bool Reserved8 = 0;
|
||||
int Reserved99[8] = { 0 };
|
||||
} m_hacks;
|
||||
static_assert(sizeof(s_hack) == 0x28, assert_check_shared_memory(s_hack));
|
||||
|
||||
overlay_settings m_overlay;
|
||||
|
||||
private:
|
||||
private:
|
||||
void RemoveLegacyConfigs(unsigned int CurrentRevision);
|
||||
std::string m_file_path = "";
|
||||
CSimpleIniA m_si;
|
||||
|
|
|
@ -24,165 +24,149 @@
|
|||
// * All rights reserved
|
||||
// *
|
||||
// ******************************************************************
|
||||
|
||||
#include <core\kernel\exports\xboxkrnl.h>
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
#ifdef _WIN32
|
||||
#include <windows.h>
|
||||
#endif
|
||||
#include <thread>
|
||||
#include <vector>
|
||||
#include <vector>
|
||||
#include <mutex>
|
||||
#include <array>
|
||||
#include "Timer.h"
|
||||
#include "common\util\CxbxUtil.h"
|
||||
#include "core\kernel\support\EmuFS.h"
|
||||
#include "core\kernel\exports\EmuKrnlPs.hpp"
|
||||
#include "core\kernel\exports\EmuKrnl.h"
|
||||
#include "devices\Xbox.h"
|
||||
#include "devices\usb\OHCI.h"
|
||||
#include "core\hle\DSOUND\DirectSound\DirectSoundGlobal.hpp"
|
||||
#include "common\util\CxbxUtil.h"
|
||||
#include "core\kernel\init\CxbxKrnl.h"
|
||||
#ifdef __linux__
|
||||
#include <time.h>
|
||||
#endif
|
||||
|
||||
|
||||
// Virtual clocks will probably become useful once LLE CPU is implemented, but for now we don't need them.
|
||||
// See the QEMUClockType QEMU_CLOCK_VIRTUAL of XQEMU for more info.
|
||||
#define CLOCK_REALTIME 0
|
||||
//#define CLOCK_VIRTUALTIME 1
|
||||
|
||||
|
||||
static std::atomic_uint64_t last_qpc; // last time when QPC was called
|
||||
static std::atomic_uint64_t exec_time; // total execution time in us since the emulation started
|
||||
static uint64_t pit_last; // last time when the pit time was updated
|
||||
static uint64_t pit_last_qpc; // last QPC time of the pit
|
||||
// The frequency of the high resolution clock of the host, and the start time
|
||||
int64_t HostQPCFrequency, HostQPCStartTime;
|
||||
// Vector storing all the timers created
|
||||
static std::vector<TimerObject*> TimerList;
|
||||
// The frequency of the high resolution clock of the host
|
||||
uint64_t HostClockFrequency;
|
||||
// Lock to acquire when accessing TimerList
|
||||
std::mutex TimerMtx;
|
||||
|
||||
|
||||
void timer_init()
|
||||
// Returns the current time of the timer
|
||||
inline uint64_t GetTime_NS(TimerObject* Timer)
|
||||
{
|
||||
QueryPerformanceFrequency(reinterpret_cast<LARGE_INTEGER *>(&HostQPCFrequency));
|
||||
QueryPerformanceCounter(reinterpret_cast<LARGE_INTEGER *>(&HostQPCStartTime));
|
||||
pit_last_qpc = last_qpc = HostQPCStartTime;
|
||||
pit_last = get_now();
|
||||
|
||||
// Synchronize xbox system time with host time
|
||||
LARGE_INTEGER HostSystemTime;
|
||||
GetSystemTimeAsFileTime((LPFILETIME)&HostSystemTime);
|
||||
xbox::KeSystemTime.High2Time = HostSystemTime.u.HighPart;
|
||||
xbox::KeSystemTime.LowPart = HostSystemTime.u.LowPart;
|
||||
xbox::KeSystemTime.High1Time = HostSystemTime.u.HighPart;
|
||||
#ifdef _WIN32
|
||||
LARGE_INTEGER li;
|
||||
QueryPerformanceCounter(&li);
|
||||
uint64_t Ret = Muldiv64(li.QuadPart, SCALE_S_IN_NS, (uint32_t)HostClockFrequency);
|
||||
#elif __linux__
|
||||
static struct timespec ts;
|
||||
clock_gettime(CLOCK_MONOTONIC_RAW, &ts);
|
||||
uint64_t Ret = Muldiv64(ts.tv_sec, SCALE_S_IN_NS, 1) + ts.tv_nsec;
|
||||
#else
|
||||
#error "Unsupported OS"
|
||||
#endif
|
||||
return Ret;
|
||||
}
|
||||
|
||||
// More precise sleep, but with increased CPU usage
|
||||
void SleepPrecise(std::chrono::steady_clock::time_point targetTime)
|
||||
// Calculates the next expire time of the timer
|
||||
static inline uint64_t GetNextExpireTime(TimerObject* Timer)
|
||||
{
|
||||
using namespace std::chrono;
|
||||
// If we don't need to wait, return right away
|
||||
|
||||
// TODO use waitable timers?
|
||||
// TODO fetch the timer resolution to determine the sleep threshold?
|
||||
// TODO adaptive wait? https://blat-blatnik.github.io/computerBear/making-accurate-sleep-function/
|
||||
|
||||
// Try to sleep for as much of the wait as we can
|
||||
// to save CPU usage / power
|
||||
// We expect sleep to overshoot, so give ourselves some extra time
|
||||
// Note currently we ask Windows to give us 1ms timer resolution
|
||||
constexpr auto sleepThreshold = 2ms; // Minimum remaining time before we attempt to use sleep
|
||||
|
||||
auto sleepFor = (targetTime - sleepThreshold) - steady_clock::now();
|
||||
auto sleepMs = duration_cast<milliseconds>(sleepFor).count();
|
||||
|
||||
// Sleep if required
|
||||
if (sleepMs >= 0) {
|
||||
Sleep((DWORD)sleepMs);
|
||||
}
|
||||
|
||||
// Spin wait
|
||||
while (steady_clock::now() < targetTime) {
|
||||
;
|
||||
}
|
||||
return GetTime_NS(Timer) + Timer->ExpireTime_MS.load();
|
||||
}
|
||||
|
||||
// NOTE: the pit device is not implemented right now, so we put this here
|
||||
static uint64_t pit_next(uint64_t now)
|
||||
// Deallocates the memory of the timer
|
||||
void Timer_Destroy(TimerObject* Timer)
|
||||
{
|
||||
constexpr uint64_t pit_period = 1000;
|
||||
uint64_t next = pit_last + pit_period;
|
||||
|
||||
if (now >= next) {
|
||||
xbox::KiClockIsr(now - pit_last);
|
||||
pit_last = get_now();
|
||||
return pit_period;
|
||||
}
|
||||
|
||||
return pit_last + pit_period - now; // time remaining until next clock interrupt
|
||||
}
|
||||
|
||||
static void update_non_periodic_events()
|
||||
{
|
||||
// update dsound
|
||||
dsound_worker();
|
||||
|
||||
// check for hw interrupts
|
||||
for (int i = 0; i < MAX_BUS_INTERRUPT_LEVEL; i++) {
|
||||
// If the interrupt is pending and connected, process it
|
||||
if (g_bEnableAllInterrupts && HalSystemInterrupts[i].IsPending() && EmuInterruptList[i] && EmuInterruptList[i]->Connected) {
|
||||
HalSystemInterrupts[i].Trigger(EmuInterruptList[i]);
|
||||
unsigned int index, i;
|
||||
std::lock_guard<std::mutex>lock(TimerMtx);
|
||||
|
||||
index = TimerList.size();
|
||||
for (i = 0; i < index; i++) {
|
||||
if (Timer == TimerList[i]) {
|
||||
index = i;
|
||||
}
|
||||
}
|
||||
|
||||
assert(index != TimerList.size());
|
||||
delete Timer;
|
||||
TimerList.erase(TimerList.begin() + index);
|
||||
}
|
||||
|
||||
uint64_t get_now()
|
||||
{
|
||||
LARGE_INTEGER now;
|
||||
QueryPerformanceCounter(&now);
|
||||
uint64_t elapsed_us = now.QuadPart - last_qpc;
|
||||
last_qpc = now.QuadPart;
|
||||
elapsed_us *= 1000000;
|
||||
elapsed_us /= HostQPCFrequency;
|
||||
exec_time += elapsed_us;
|
||||
return exec_time;
|
||||
}
|
||||
|
||||
static uint64_t get_next(uint64_t now)
|
||||
{
|
||||
std::array<uint64_t, 5> next = {
|
||||
pit_next(now),
|
||||
g_NV2A->vblank_next(now),
|
||||
g_NV2A->ptimer_next(now),
|
||||
g_USB0->m_HostController->OHCI_next(now),
|
||||
dsound_next(now)
|
||||
};
|
||||
return *std::min_element(next.begin(), next.end());
|
||||
}
|
||||
|
||||
xbox::void_xt NTAPI system_events(xbox::PVOID arg)
|
||||
{
|
||||
// Testing shows that, if this thread has the same priority of the other xbox threads, it can take tens, even hundreds of ms to complete a single loop.
|
||||
// So we increase its priority to above normal, so that it scheduled more often
|
||||
SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_ABOVE_NORMAL);
|
||||
|
||||
// Always run this thread at dpc level to prevent it from ever executing APCs/DPCs
|
||||
xbox::KeRaiseIrqlToDpcLevel();
|
||||
// Thread that runs the timer
|
||||
void ClockThread(TimerObject* Timer)
|
||||
{
|
||||
uint64_t NewExpireTime;
|
||||
|
||||
if (!Timer->Name.empty()) {
|
||||
CxbxSetThreadName(Timer->Name.c_str());
|
||||
}
|
||||
if (Timer->CpuAffinity != nullptr) {
|
||||
InitXboxThread(*Timer->CpuAffinity);
|
||||
}
|
||||
NewExpireTime = GetNextExpireTime(Timer);
|
||||
|
||||
while (true) {
|
||||
const uint64_t last_time = get_now();
|
||||
const uint64_t nearest_next = get_next(last_time);
|
||||
|
||||
while (true) {
|
||||
update_non_periodic_events();
|
||||
uint64_t elapsed_us = get_now() - last_time;
|
||||
if (elapsed_us >= nearest_next) {
|
||||
break;
|
||||
if (GetTime_NS(Timer) > NewExpireTime) {
|
||||
if (Timer->Exit.load()) {
|
||||
Timer_Destroy(Timer);
|
||||
return;
|
||||
}
|
||||
std::this_thread::yield();
|
||||
}
|
||||
Timer->Callback(Timer->Opaque);
|
||||
NewExpireTime = GetNextExpireTime(Timer);
|
||||
}
|
||||
Sleep(1); // prevent burning the cpu
|
||||
}
|
||||
}
|
||||
|
||||
int64_t Timer_GetScaledPerformanceCounter(int64_t Period)
|
||||
// Changes the expire time of a timer
|
||||
void Timer_ChangeExpireTime(TimerObject* Timer, uint64_t Expire_ms)
|
||||
{
|
||||
LARGE_INTEGER currentQPC;
|
||||
QueryPerformanceCounter(¤tQPC);
|
||||
|
||||
// Scale frequency with overflow avoidance, like in std::chrono
|
||||
// https://github.com/microsoft/STL/blob/6d2f8b0ed88ea6cba26cc2151f47f678442c1663/stl/inc/chrono#L703
|
||||
const int64_t currentTime = currentQPC.QuadPart - HostQPCStartTime;
|
||||
const int64_t whole = (currentTime / HostQPCFrequency) * Period;
|
||||
const int64_t part = (currentTime % HostQPCFrequency) * Period / HostQPCFrequency;
|
||||
|
||||
return whole + part;
|
||||
Timer->ExpireTime_MS.store(Expire_ms);
|
||||
}
|
||||
|
||||
// Destroys the timer
|
||||
void Timer_Exit(TimerObject* Timer)
|
||||
{
|
||||
Timer->Exit.store(true);
|
||||
}
|
||||
|
||||
// Allocates the memory for the timer object
|
||||
TimerObject* Timer_Create(TimerCB Callback, void* Arg, std::string Name, unsigned long* Affinity)
|
||||
{
|
||||
std::lock_guard<std::mutex>lock(TimerMtx);
|
||||
TimerObject* pTimer = new TimerObject;
|
||||
pTimer->Type = CLOCK_REALTIME;
|
||||
pTimer->Callback = Callback;
|
||||
pTimer->ExpireTime_MS.store(0);
|
||||
pTimer->Exit.store(false);
|
||||
pTimer->Opaque = Arg;
|
||||
Name.empty() ? pTimer->Name = "Unnamed thread" : pTimer->Name = Name;
|
||||
pTimer->CpuAffinity = Affinity;
|
||||
TimerList.emplace_back(pTimer);
|
||||
|
||||
return pTimer;
|
||||
}
|
||||
|
||||
// Starts the timer
|
||||
// Expire_MS must be expressed in NS
|
||||
void Timer_Start(TimerObject* Timer, uint64_t Expire_MS)
|
||||
{
|
||||
Timer->ExpireTime_MS.store(Expire_MS);
|
||||
std::thread(ClockThread, Timer).detach();
|
||||
}
|
||||
|
||||
// Retrives the frequency of the high resolution clock of the host
|
||||
void Timer_Init()
|
||||
{
|
||||
#ifdef _WIN32
|
||||
LARGE_INTEGER freq;
|
||||
QueryPerformanceFrequency(&freq);
|
||||
HostClockFrequency = freq.QuadPart;
|
||||
#elif __linux__
|
||||
ClockFrequency = 0;
|
||||
#else
|
||||
#error "Unsupported OS"
|
||||
#endif
|
||||
}
|
||||
|
|
|
@ -28,24 +28,39 @@
|
|||
#ifndef TIMER_H
|
||||
#define TIMER_H
|
||||
|
||||
#include <atomic>
|
||||
#include <mutex>
|
||||
|
||||
#include <atomic>
|
||||
|
||||
#define SCALE_S_IN_NS 1000000000
|
||||
#define SCALE_MS_IN_NS 1000000
|
||||
#define SCALE_US_IN_NS 1000
|
||||
#define SCALE_NS_IN_NS 1
|
||||
|
||||
#define SCALE_NS_IN_NS 1
|
||||
|
||||
#define SCALE_S_IN_US 1000000
|
||||
#define SCALE_MS_IN_US 1000
|
||||
#define SCALE_US_IN_US 1
|
||||
|
||||
/* typedef of the timer object and the callback function */
|
||||
typedef void(*TimerCB)(void*);
|
||||
typedef struct _TimerObject
|
||||
{
|
||||
int Type; // timer type
|
||||
std::atomic_uint64_t ExpireTime_MS; // when the timer expires (ms)
|
||||
std::atomic_bool Exit; // indicates that the timer should be destroyed
|
||||
TimerCB Callback; // function to call when the timer expires
|
||||
void* Opaque; // opaque argument to pass to the callback
|
||||
std::string Name; // the name of the timer thread (if any)
|
||||
unsigned long* CpuAffinity; // the cpu affinity of the timer thread (if any)
|
||||
}
|
||||
TimerObject;
|
||||
|
||||
extern int64_t HostQPCFrequency;
|
||||
extern uint64_t HostClockFrequency;
|
||||
|
||||
void timer_init();
|
||||
uint64_t get_now();
|
||||
int64_t Timer_GetScaledPerformanceCounter(int64_t Period);
|
||||
void SleepPrecise(std::chrono::steady_clock::time_point targetTime);
|
||||
/* Timer exported functions */
|
||||
TimerObject* Timer_Create(TimerCB Callback, void* Arg, std::string Name, unsigned long* Affinity);
|
||||
void Timer_Start(TimerObject* Timer, uint64_t Expire_MS);
|
||||
void Timer_Exit(TimerObject* Timer);
|
||||
void Timer_ChangeExpireTime(TimerObject* Timer, uint64_t Expire_ms);
|
||||
inline uint64_t GetTime_NS(TimerObject* Timer);
|
||||
void Timer_Init();
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,68 +0,0 @@
|
|||
// This is an open source non-commercial project. Dear PVS-Studio, please check it.
|
||||
// PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * This file is part of Cxbx-Reloaded.
|
||||
// *
|
||||
// * Cxbx-Reloaded 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 recieved a copy of the GNU General Public License
|
||||
// * along with this program; see the file COPYING.
|
||||
// * If not, write to the Free Software Foundation, Inc.,
|
||||
// * 59 Temple Place - Suite 330, Bostom, MA 02111-1307, USA.
|
||||
// *
|
||||
// * (c) 2017-2019 Patrick van Logchem <pvanlogchem@gmail.com>
|
||||
// * (c) 2019 ego720
|
||||
// *
|
||||
// * All rights reserved
|
||||
// *
|
||||
// ******************************************************************
|
||||
|
||||
#include "AddressRanges.h"
|
||||
#include "core\kernel\init\CxbxKrnl.h" // For CXBX_BASE_ADDR
|
||||
|
||||
bool VerifyBaseAddr()
|
||||
{
|
||||
/*! CXBX_BASE_ADDR is defined as 0x00010000, which is the base address of
|
||||
the cxbxr-ldr.exe host executable.
|
||||
Set in cxbxr-ldr.exe Project options, Linker, Advanced, Base Address */
|
||||
return ((UINT_PTR)GetModuleHandle(nullptr) == CXBX_BASE_ADDR);
|
||||
}
|
||||
|
||||
void UnreserveMemoryRange(const int index)
|
||||
{
|
||||
uint32_t Start = XboxAddressRanges[index].Start;
|
||||
int Size = XboxAddressRanges[index].Size;
|
||||
|
||||
while (Size > 0) {
|
||||
VirtualFree((LPVOID)Start, (SIZE_T)0, MEM_RELEASE); // To release, dwSize must be zero!
|
||||
Start += BLOCK_SIZE;
|
||||
Size -= BLOCK_SIZE;
|
||||
}
|
||||
}
|
||||
|
||||
bool AllocateMemoryRange(const int index)
|
||||
{
|
||||
uint32_t Start = XboxAddressRanges[index].Start;
|
||||
int Size = XboxAddressRanges[index].Size;
|
||||
|
||||
while (Size > 0) {
|
||||
int BlockSize = (Size > BLOCK_SIZE) ? BLOCK_SIZE : Size;
|
||||
if (nullptr == VirtualAlloc((void*)Start, BlockSize, MEM_COMMIT, PAGE_READWRITE)) { // MEM_RESERVE already done by Cxbx-Loader.exe
|
||||
return false;
|
||||
}
|
||||
|
||||
Start += BLOCK_SIZE;
|
||||
Size -= BLOCK_SIZE;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
|
@ -1,32 +0,0 @@
|
|||
// This is an open source non-commercial project. Dear PVS-Studio, please check it.
|
||||
// PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * This file is part of Cxbx-Reloaded.
|
||||
// *
|
||||
// * Cxbx-Reloaded 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 recieved a copy of the GNU General Public License
|
||||
// * along with this program; see the file COPYING.
|
||||
// * If not, write to the Free Software Foundation, Inc.,
|
||||
// * 59 Temple Place - Suite 330, Bostom, MA 02111-1307, USA.
|
||||
// *
|
||||
// * (c) 2017-2019 Patrick van Logchem <pvanlogchem@gmail.com>
|
||||
// *
|
||||
// * All rights reserved
|
||||
// *
|
||||
// ******************************************************************
|
||||
#pragma once
|
||||
|
||||
extern bool VerifyBaseAddr();
|
||||
|
||||
extern void UnreserveMemoryRange(const int index);
|
||||
extern bool AllocateMemoryRange(const int index);
|
|
@ -1,51 +0,0 @@
|
|||
// ******************************************************************
|
||||
// *
|
||||
// * This file is part of the Cxbx project.
|
||||
// *
|
||||
// * Cxbx and Cxbe are free software; you can redistribute them
|
||||
// * and/or modify them 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 recieved a copy of the GNU General Public License
|
||||
// * along with this program; see the file COPYING.
|
||||
// * If not, write to the Free Software Foundation, Inc.,
|
||||
// * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
// *
|
||||
// * (c) 2020 RadWolfie
|
||||
// *
|
||||
// * All rights reserved
|
||||
// *
|
||||
// ******************************************************************
|
||||
#pragma once
|
||||
|
||||
#include <cstdint>
|
||||
|
||||
// Convert frequency to pitch helper
|
||||
static inline int32_t converter_freq2pitch(uint32_t freq) {
|
||||
// NOTE: pitch = 0 is equal to 48 KHz.
|
||||
/* For research purpose of how to convert frequency to pitch and back to frequency.
|
||||
// Edit hertz variable to see the result.
|
||||
float hertz = 12000.0f;
|
||||
|
||||
float hertzRatio = 48000.0f; // base frequency
|
||||
float pitchRatio = 4096.0f; // pitch per octave
|
||||
|
||||
// Convert hertz to pitch
|
||||
float pitch = log2(hertz / hertzRatio) * pitchRatio;
|
||||
|
||||
// Convert pitch to hertz
|
||||
hertz = exp((pitch / pitchRatio) * log(2)) * hertzRatio;*/
|
||||
return static_cast<int32_t>(log2(freq / 48000.0f) * 4096.0f);
|
||||
}
|
||||
|
||||
// Convert pitch to frequency helper
|
||||
static inline uint32_t converter_pitch2freq(int32_t pitch) {
|
||||
//* See research documentation above for conversion example.
|
||||
return static_cast<uint32_t>(exp((pitch / 4096.0f) * log(2)) * 48000.0f);
|
||||
}
|
|
@ -23,42 +23,42 @@
|
|||
// *
|
||||
// * All rights reserved
|
||||
// *
|
||||
// ******************************************************************
|
||||
|
||||
#ifndef EMUDES_H
|
||||
#define EMUDES_H
|
||||
|
||||
#define MBEDTLS_DES_KEY_SIZE 8
|
||||
|
||||
#define MBEDTLS_DES_ENCRYPT 1
|
||||
#define MBEDTLS_DES_DECRYPT 0
|
||||
|
||||
#define MBEDTLS_ERR_DES_INVALID_INPUT_LENGTH -0x0032 /**< The data input has an invalid length. */
|
||||
|
||||
/**
|
||||
* \brief DES context structure
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
uint32_t sk[32]; /*!< DES subkeys */
|
||||
}
|
||||
mbedtls_des_context;
|
||||
|
||||
/**
|
||||
* \brief Triple-DES context structure
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
uint32_t sk[96]; /*!< 3DES subkeys */
|
||||
}
|
||||
mbedtls_des3_context;
|
||||
|
||||
void mbedtls_des_key_set_parity(unsigned char* Key, unsigned long KeyLenght);
|
||||
void mbedtls_des_setkey_enc(mbedtls_des_context* ctx, const unsigned char key[MBEDTLS_DES_KEY_SIZE]);
|
||||
void mbedtls_des_crypt_ecb(mbedtls_des_context* ctx, const unsigned char input[8], unsigned char output[8], unsigned long encrypt);
|
||||
int mbedtls_des_crypt_cbc(mbedtls_des_context* ctx, unsigned long mode, unsigned long length, unsigned char iv[8], const unsigned char* input, unsigned char* output);
|
||||
void mbedtls_des3_set3key_enc(mbedtls_des3_context* ctx, const unsigned char key[MBEDTLS_DES_KEY_SIZE * 3]);
|
||||
void mbedtls_des3_crypt_ecb(mbedtls_des3_context* ctx, const unsigned char input[8], unsigned char output[8], unsigned long encrypt);
|
||||
int mbedtls_des3_crypt_cbc(mbedtls_des3_context* ctx, unsigned long mode, unsigned long length, unsigned char iv[8], const unsigned char *input, unsigned char *output);
|
||||
|
||||
#endif EMUDES_H
|
||||
// ******************************************************************
|
||||
|
||||
#ifndef EMUDES_H
|
||||
#define EMUDES_H
|
||||
|
||||
#define MBEDTLS_DES_KEY_SIZE 8
|
||||
|
||||
#define MBEDTLS_DES_ENCRYPT 1
|
||||
#define MBEDTLS_DES_DECRYPT 0
|
||||
|
||||
#define MBEDTLS_ERR_DES_INVALID_INPUT_LENGTH -0x0032 /**< The data input has an invalid length. */
|
||||
|
||||
/**
|
||||
* \brief DES context structure
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
uint32_t sk[32]; /*!< DES subkeys */
|
||||
}
|
||||
mbedtls_des_context;
|
||||
|
||||
/**
|
||||
* \brief Triple-DES context structure
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
uint32_t sk[96]; /*!< 3DES subkeys */
|
||||
}
|
||||
mbedtls_des3_context;
|
||||
|
||||
void mbedtls_des_key_set_parity(unsigned char* Key, unsigned long KeyLenght);
|
||||
void mbedtls_des_setkey_enc(mbedtls_des_context* ctx, const unsigned char key[MBEDTLS_DES_KEY_SIZE]);
|
||||
void mbedtls_des_crypt_ecb(mbedtls_des_context* ctx, const unsigned char input[8], unsigned char output[8], unsigned long encrypt);
|
||||
int mbedtls_des_crypt_cbc(mbedtls_des_context* ctx, unsigned long mode, unsigned long length, unsigned char iv[8], const unsigned char* input, unsigned char* output);
|
||||
void mbedtls_des3_set3key_enc(mbedtls_des3_context* ctx, const unsigned char key[MBEDTLS_DES_KEY_SIZE * 3]);
|
||||
void mbedtls_des3_crypt_ecb(mbedtls_des3_context* ctx, const unsigned char input[8], unsigned char output[8], unsigned long encrypt);
|
||||
int mbedtls_des3_crypt_cbc(mbedtls_des3_context* ctx, unsigned long mode, unsigned long length, unsigned char iv[8], const unsigned char *input, unsigned char *output);
|
||||
|
||||
#endif EMUDES_H
|
||||
|
|
|
@ -1,161 +1,161 @@
|
|||
// ******************************************************************
|
||||
// *
|
||||
// * This file is part of the Cxbx project.
|
||||
// *
|
||||
// * Cxbx and Cxbe are free software; you can redistribute them
|
||||
// * and/or modify them 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 recieved a copy of the GNU General Public License
|
||||
// * along with this program; see the file COPYING.
|
||||
// * If not, write to the Free Software Foundation, Inc.,
|
||||
// * 59 Temple Place - Suite 330, Bostom, MA 02111-1307, USA.
|
||||
// *
|
||||
// * (c) 2018 ergo720
|
||||
// * (c) 2019 Jannik Vogel
|
||||
// *
|
||||
// * All rights reserved
|
||||
// *
|
||||
// ******************************************************************
|
||||
|
||||
// Acknowledgment:
|
||||
// verify_hash, RSApkcs1paddingtable and RSA_PUBLIC_KEY are from the
|
||||
// file xboxlib.c of the xbedump tool (and that file only, GPLv2).
|
||||
// https://github.com/XboxDev/xbedump/blob/master/xboxlib.c
|
||||
// mbedtls_swap_endianness is extracted from mbedtls_mpi_read_binary used in the file bignum.h of ReactOS
|
||||
// https://github.com/reactos/reactos
|
||||
|
||||
// xboxlib.c license
|
||||
/***************************************************************************
|
||||
* *
|
||||
* 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. *
|
||||
* *
|
||||
***************************************************************************/
|
||||
|
||||
/**
|
||||
* \file bignum.h
|
||||
*
|
||||
* \brief Multi-precision integer library
|
||||
*
|
||||
* Copyright (C) 2006-2015, ARM Limited, All Rights Reserved
|
||||
* SPDX-License-Identifier: GPL-2.0
|
||||
*
|
||||
* 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 file is part of mbed TLS (https://tls.mbed.org)
|
||||
*/
|
||||
|
||||
#define LOG_PREFIX CXBXR_MODULE::RSA
|
||||
|
||||
#include "EmuRsa.h"
|
||||
#include "core\kernel\support\Emu.h" // For EmuLog
|
||||
#include "tomcrypt.h"
|
||||
#include "tommath.h"
|
||||
|
||||
#define CHK_MP_RET(x) do { int ret = (x); if (ret != MP_OKAY) return false; } while(0)
|
||||
|
||||
|
||||
// ******************************************************************
|
||||
// *
|
||||
// * This file is part of the Cxbx project.
|
||||
// *
|
||||
// * Cxbx and Cxbe are free software; you can redistribute them
|
||||
// * and/or modify them 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 recieved a copy of the GNU General Public License
|
||||
// * along with this program; see the file COPYING.
|
||||
// * If not, write to the Free Software Foundation, Inc.,
|
||||
// * 59 Temple Place - Suite 330, Bostom, MA 02111-1307, USA.
|
||||
// *
|
||||
// * (c) 2018 ergo720
|
||||
// * (c) 2019 Jannik Vogel
|
||||
// *
|
||||
// * All rights reserved
|
||||
// *
|
||||
// ******************************************************************
|
||||
|
||||
// Acknowledgment:
|
||||
// verify_hash, RSApkcs1paddingtable and RSA_PUBLIC_KEY are from the
|
||||
// file xboxlib.c of the xbedump tool (and that file only, GPLv2).
|
||||
// https://github.com/XboxDev/xbedump/blob/master/xboxlib.c
|
||||
// mbedtls_swap_endianness is extracted from mbedtls_mpi_read_binary used in the file bignum.h of ReactOS
|
||||
// https://github.com/reactos/reactos
|
||||
|
||||
// xboxlib.c license
|
||||
/***************************************************************************
|
||||
* *
|
||||
* 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. *
|
||||
* *
|
||||
***************************************************************************/
|
||||
|
||||
/**
|
||||
* \file bignum.h
|
||||
*
|
||||
* \brief Multi-precision integer library
|
||||
*
|
||||
* Copyright (C) 2006-2015, ARM Limited, All Rights Reserved
|
||||
* SPDX-License-Identifier: GPL-2.0
|
||||
*
|
||||
* 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 file is part of mbed TLS (https://tls.mbed.org)
|
||||
*/
|
||||
|
||||
#define LOG_PREFIX CXBXR_MODULE::RSA
|
||||
|
||||
#include "EmuRsa.h"
|
||||
#include "core\kernel\support\Emu.h" // For EmuLog
|
||||
#include "tomcrypt.h"
|
||||
#include "tommath.h"
|
||||
|
||||
#define CHK_MP_RET(x) do { int ret = (x); if (ret != MP_OKAY) return false; } while(0)
|
||||
|
||||
|
||||
const unsigned char RSApkcs1paddingtable[3][16] = {
|
||||
{ 0x0F, 0x14,0x04,0x00,0x05,0x1A,0x02,0x03,0x0E,0x2B,0x05,0x06,0x09,0x30,0x21,0x30 },
|
||||
{ 0x0D, 0x14,0x04,0x1A,0x02,0x03,0x0E,0x2B,0x05,0x06,0x07,0x30,0x1F,0x30,0x00,0x00 },
|
||||
{ 0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }
|
||||
};
|
||||
|
||||
// Move this to CxbxUtil.h if it's ever needed in other places of the emu as well
|
||||
void mbedtls_swap_endianness(const unsigned char* in_buf, unsigned char* out_buf, size_t size)
|
||||
{
|
||||
size_t i, j, n;
|
||||
uint32_t* out_buf_uint = (uint32_t*)out_buf;
|
||||
|
||||
memset(out_buf_uint, 0, size);
|
||||
|
||||
for (n = 0; n < size; n++)
|
||||
if (in_buf[n] != 0)
|
||||
break;
|
||||
|
||||
for (i = size, j = 0; i > n; i--, j++) {
|
||||
out_buf_uint[j / 4] |= ((uint32_t)in_buf[i - 1]) << ((j % 4) << 3);
|
||||
}
|
||||
}
|
||||
|
||||
void init_tom_lib()
|
||||
{
|
||||
// NOTE: init_LTM has been deprecated in favor to crypt_mp_init("L"). However, in the latest master branch crypt_mp_init
|
||||
// is still undefined.
|
||||
static bool need_init = true;
|
||||
if (need_init) {
|
||||
init_LTM();
|
||||
need_init = false;
|
||||
}
|
||||
}
|
||||
|
||||
bool xbox_exp_mod(unsigned char* pA, const unsigned char* pB, const unsigned char* pC, const unsigned char* pD,
|
||||
size_t a_size, size_t b_size, size_t c_size, size_t d_size)
|
||||
{
|
||||
mp_int a, b, c, d;
|
||||
CHK_MP_RET(mp_init(&a));
|
||||
CHK_MP_RET(mp_init(&b));
|
||||
CHK_MP_RET(mp_init(&c));
|
||||
CHK_MP_RET(mp_init(&d));
|
||||
CHK_MP_RET(mp_import(&b, 1, -1, b_size, 0, 0, pB));
|
||||
CHK_MP_RET(mp_import(&c, 1, -1, c_size, 0, 0, pC));
|
||||
CHK_MP_RET(mp_import(&d, 1, -1, d_size, 0, 0, pD));
|
||||
|
||||
CHK_MP_RET(mp_exptmod(&b, &c, &d, &a));
|
||||
|
||||
CHK_MP_RET(mp_export(pA, NULL, -1, a_size, 0, 0, &a));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool xbox_rsa_public(const unsigned char* in_buf, unsigned char* out_buf, RSA_PUBLIC_KEY key)
|
||||
{
|
||||
rsa_key tom_key;
|
||||
unsigned char in_buf_be[256] = { 0 };
|
||||
unsigned char out_buf_be[256] = { 0 };
|
||||
unsigned long out_len = 256;
|
||||
unsigned char modulus_be[256] = { 0 };
|
||||
unsigned char exp_be[4] = { 0 };
|
||||
|
||||
// We must swap the data since libtom expects the data to be in big endian
|
||||
mbedtls_swap_endianness (key.KeyData.Modulus, modulus_be, 256);
|
||||
mbedtls_swap_endianness (key.KeyData.Exponent, exp_be, 4);
|
||||
mbedtls_swap_endianness (in_buf, in_buf_be, 256);
|
||||
if (rsa_set_key(modulus_be, 256, exp_be, 4, NULL, 0, &tom_key) != CRYPT_OK) {
|
||||
EmuLog(LOG_LEVEL::WARNING, "Failed to load rsa key");
|
||||
return false;
|
||||
}
|
||||
if (rsa_exptmod(in_buf_be, 256, out_buf_be, &out_len, PK_PUBLIC, &tom_key) != CRYPT_OK) {
|
||||
EmuLog(LOG_LEVEL::WARNING, "rsa_exptmod failed");
|
||||
return false;
|
||||
}
|
||||
mbedtls_swap_endianness(out_buf_be, out_buf, 256);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool verify_hash(const unsigned char* hash, const unsigned char* decryptBuffer, RSA_PUBLIC_KEY key)
|
||||
{
|
||||
};
|
||||
|
||||
// Move this to CxbxUtil.h if it's ever needed in other places of the emu as well
|
||||
void mbedtls_swap_endianness(const unsigned char* in_buf, unsigned char* out_buf, size_t size)
|
||||
{
|
||||
size_t i, j, n;
|
||||
uint32_t* out_buf_uint = (uint32_t*)out_buf;
|
||||
|
||||
memset(out_buf_uint, 0, size);
|
||||
|
||||
for (n = 0; n < size; n++)
|
||||
if (in_buf[n] != 0)
|
||||
break;
|
||||
|
||||
for (i = size, j = 0; i > n; i--, j++) {
|
||||
out_buf_uint[j / 4] |= ((uint32_t)in_buf[i - 1]) << ((j % 4) << 3);
|
||||
}
|
||||
}
|
||||
|
||||
void init_tom_lib()
|
||||
{
|
||||
// NOTE: init_LTM has been deprecated in favor to crypt_mp_init("L"). However, in the latest master branch crypt_mp_init
|
||||
// is still undefined.
|
||||
static bool need_init = true;
|
||||
if (need_init) {
|
||||
init_LTM();
|
||||
need_init = false;
|
||||
}
|
||||
}
|
||||
|
||||
bool xbox_exp_mod(unsigned char* pA, const unsigned char* pB, const unsigned char* pC, const unsigned char* pD,
|
||||
size_t a_size, size_t b_size, size_t c_size, size_t d_size)
|
||||
{
|
||||
mp_int a, b, c, d;
|
||||
CHK_MP_RET(mp_init(&a));
|
||||
CHK_MP_RET(mp_init(&b));
|
||||
CHK_MP_RET(mp_init(&c));
|
||||
CHK_MP_RET(mp_init(&d));
|
||||
CHK_MP_RET(mp_import(&b, 1, -1, b_size, 0, 0, pB));
|
||||
CHK_MP_RET(mp_import(&c, 1, -1, c_size, 0, 0, pC));
|
||||
CHK_MP_RET(mp_import(&d, 1, -1, d_size, 0, 0, pD));
|
||||
|
||||
CHK_MP_RET(mp_exptmod(&b, &c, &d, &a));
|
||||
|
||||
CHK_MP_RET(mp_export(pA, NULL, -1, a_size, 0, 0, &a));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool xbox_rsa_public(const unsigned char* in_buf, unsigned char* out_buf, RSA_PUBLIC_KEY key)
|
||||
{
|
||||
rsa_key tom_key;
|
||||
unsigned char in_buf_be[256] = { 0 };
|
||||
unsigned char out_buf_be[256] = { 0 };
|
||||
unsigned long out_len = 256;
|
||||
unsigned char modulus_be[256] = { 0 };
|
||||
unsigned char exp_be[4] = { 0 };
|
||||
|
||||
// We must swap the data since libtom expects the data to be in big endian
|
||||
mbedtls_swap_endianness (key.KeyData.Modulus, modulus_be, 256);
|
||||
mbedtls_swap_endianness (key.KeyData.Exponent, exp_be, 4);
|
||||
mbedtls_swap_endianness (in_buf, in_buf_be, 256);
|
||||
if (rsa_set_key(modulus_be, 256, exp_be, 4, NULL, 0, &tom_key) != CRYPT_OK) {
|
||||
EmuLog(LOG_LEVEL::WARNING, "Failed to load rsa key");
|
||||
return false;
|
||||
}
|
||||
if (rsa_exptmod(in_buf_be, 256, out_buf_be, &out_len, PK_PUBLIC, &tom_key) != CRYPT_OK) {
|
||||
EmuLog(LOG_LEVEL::WARNING, "rsa_exptmod failed");
|
||||
return false;
|
||||
}
|
||||
mbedtls_swap_endianness(out_buf_be, out_buf, 256);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool verify_hash(const unsigned char* hash, const unsigned char* decryptBuffer, RSA_PUBLIC_KEY key)
|
||||
{
|
||||
unsigned char cmphash[20];
|
||||
int a;
|
||||
int zero_position = 20;
|
||||
|
@ -192,5 +192,5 @@ bool verify_hash(const unsigned char* hash, const unsigned char* decryptBuffer,
|
|||
if (decryptBuffer[i] != 0xff) return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
|