f92f660251
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!) |
||
---|---|---|
.github | ||
assets | ||
docs | ||
src/xenia | ||
third_party | ||
tools | ||
.appveyor.yml | ||
.azure-pipelines.yml | ||
.clang-format | ||
.gitattributes | ||
.gitignore | ||
.gitmodules | ||
.travis.yml | ||
LICENSE | ||
README.md | ||
premake5.lua | ||
xb | ||
xb.bat | ||
xenia-build | ||
xeniarc |
README.md
Xenia - Xbox 360 Emulator
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...).
Quickstart
See the Quickstart page.
Download
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.