Xbox 360 Emulator Research Project
Go to file
emoose f92f660251 [VFS/Kernel] Fixes to allow games to make use of cache partitions
Happy new year! Here's my first commit of the 2020s :)

With these fixes, Halo 3 Epsilon will now write cached map data & other things (autosaves/datamine...) to the cache0/cache1 partitions, (as long as mount_cache cvar is set)
(Halo 3 retail will also write some things to cache with this, but oddly doesn't cache map stuff... which is strange because Epsilon was built only a day or two after the retail build, so I'm not sure why it'd work differently...
Maybe retail needs a TU applied for it to work or something like that)
Other games should hopefully work with cache now too (AFAIK the problem was in SDK library code, that a lot of games probably share)
No idea if this will actually improve anything though, but at least things will work closer to what games expect :)

The way this works is by tricking the cache-partition code (staticly linked into the game exe) into thinking that the Partition0/Cache0/Cache1 devices are valid.
To do that I made another kind of VFS device, the NullDevice, which just takes in a list of paths to handle.
Whenever an IO request is made to one of these paths, the NullDevice can simply pretend to the game that everything was successful, which satisfies the requirements needed for caching.

It also makes use of another trick: setting TitleInsecureCacheDrive XEX permission, which seems to skip a huge chunk of cache-init code (STFC filesystem device registration & stuff like that)
I'm not sure if this would work with every single revision of the STFC/cache code though...
At least in Halo 3 the retail code will handle the TitleInsecureCacheDrive case for us fine, but maybe older/more recent versions don't include functionality for it, need to look into it some more.
(I did try an impl. without needing this permission months ago, got pretty far with it but got caught on one tiny issue that I couldn't figure out... too bad I didn't find out about this permission earlier!)
2020-01-02 12:16:20 +11:00
.github [CI] Skip master branch, also rename xenia.exe to xenia-canary.exe in AppVeyor+Azure 2019-12-01 04:00:22 -05:00
assets [Base] icon fix 2019-12-01 04:00:22 -05:00
docs Remove (hopefully) last OpenGL leftovers & crunch 2019-11-08 09:10:51 -08:00
src/xenia [VFS/Kernel] Fixes to allow games to make use of cache partitions 2020-01-02 12:16:20 +11:00
third_party Actually update libav. 2019-12-01 04:00:22 -05:00
tools Remove (hopefully) last OpenGL leftovers & crunch 2019-11-08 09:10:51 -08:00
.appveyor.yml [AppVeyor] Skip tests 2019-12-06 21:57:18 -08:00
.azure-pipelines.yml [CI] Skip master branch, also rename xenia.exe to xenia-canary.exe in AppVeyor+Azure 2019-12-01 04:00:22 -05:00
.clang-format Include order fixes. 2015-12-27 10:27:46 -08:00
.gitattributes gitattributes (maybe). 2015-05-24 01:16:34 -07:00
.gitignore Update .gitignore. 2018-05-22 22:24:39 -05:00
.gitmodules Fix submodule URLs. 2019-08-04 03:23:36 -05:00
.travis.yml Remove (hopefully) last OpenGL leftovers & crunch 2019-11-08 09:10:51 -08:00
LICENSE Adding CONTRIBUTING.md so that github shows it on issues. 2015-08-28 14:16:38 -07:00
README.md [README] stuff 2019-12-01 04:00:22 -05:00
premake5.lua AVX(2/512) builds 2019-12-01 03:49:34 -05:00
xb Add xb symlink to xenia-build to match xb.bat for win 2017-07-11 11:47:24 -06:00
xb.bat Fix handling of paths to Python with spaces in xb.bat. 2019-08-23 10:40:21 -05:00
xenia-build AVX(2/512) builds 2019-12-01 03:49:34 -05:00
xeniarc clang-format detection cleanup. 2015-08-01 00:41:46 -07:00

README.md

Xenia - Xbox 360 Emulator

AppVeyor Build status Azure Build Status Actions Status

Xenia Canary is an experimental fork of Xenia. For more information, see the wiki.

See current Pull Request status here.

Interested in supporting the core contributors? Visit Xenia Project on Patreon.

Please check the FAQ page before asking questions. We've got jobs/lives/etc, so don't expect instant answers.

Discussing illegal activities will get you banned.

Disclaimer

The goal of this project is to experiment, research, and educate on the topic of emulation of modern devices and operating systems. It is not for enabling illegal activity. All information is obtained via reverse engineering of legally purchased devices and games and information made public on the internet (you'd be surprised what's indexed on Google...).

Discord: Discord

Quickstart

See the Quickstart page.

Download

Windows

Building

See building.md for setup and information about the xb script. When writing code, check the style guide and be sure to run clang-format!

FAQ

See the frequently asked questions page.