cb85fe401c
But for normal msvc builds i would put it at around 30-50% Added per-xexmodule caching of information per instruction, can be used to remember what code needs compiling at start up Record what guest addresses wrote mmio and backpropagate that to future runs, eliminating dependence on exception trapping. this makes many games like h3 actually tolerable to run under a debugger fixed a number of errors where temporaries were being passed by reference/pointer Can now be compiled with clang-cl 14.0.1, requires -Werror off though and some other solution/project changes. Added macros wrapping compiler extensions like noinline, forceinline, __expect, and cold. Removed the "global lock" in guest code completely. It does not properly emulate the behavior of mfmsrd/mtmsr and it seriously cripples amd cpus. Removing this yielded around a 3x speedup in Halo Reach for me. Disabled the microprofiler for now. The microprofiler has a huge performance cost associated with it. Developers can re-enable it in the base/profiling header if they really need it Disable the trace writer in release builds. despite just returning after checking if the file was open the trace functions were consuming about 0.60% cpu time total Add IsValidReg, GetRegisterInfo is a huge (about 45k) branching function and using that to check if a register was valid consumed a significant chunk of time Optimized RingBuffer::ReadAndSwap and RingBuffer::read_count. This gave us the largest overall boost in performance. The memcpies were unnecessary and one of them was always a no-op Added simplification rules for multiplicative patterns like (x+x), (x<<1)+x For the most frequently called win32 functions i added code to call their underlying NT implementations, which lets us skip a lot of MS code we don't care about/isnt relevant to our usecases ^this can be toggled off in the platform_win header handle indirect call true with constant function pointer, was occurring in h3 lookup host format swizzle in denser array by default, don't check if a gpu register is unknown, instead just check if its out of range. controlled by a cvar ^looking up whether its known or not took approx 0.3% cpu time Changed some things in /cpu to make the project UNITYBUILD friendly The timer thread was spinning way too much and consuming a ton of cpu, changed it to use a blocking wait instead tagged some conditions as XE_UNLIKELY/LIKELY based on profiler feedback (will only affect clang builds) Shifted around some code in CommandProcessor::WriteRegister based on how frequently it was executed added support for docdecaduple precision floating point so that we can represent our performance gains numerically tons of other stuff im probably forgetting |
||
---|---|---|
.github | ||
android/android_studio_project | ||
assets | ||
docs | ||
src/xenia | ||
third_party | ||
tools | ||
.appveyor.yml | ||
.azure-pipelines.yml | ||
.clang-format | ||
.drone.star | ||
.gdbinit | ||
.gitattributes | ||
.gitignore | ||
.gitmodules | ||
LICENSE | ||
README.md | ||
premake5.lua | ||
xb | ||
xb.bat | ||
xb.ps1 | ||
xenia-build | ||
xeniarc |
README.md
Xenia - Xbox 360 Emulator
Xenia is an experimental emulator for the Xbox 360. For more information, see the main Xenia wiki.
Interested in supporting the core contributors? Visit Xenia Project on Patreon.
Come chat with us about emulator-related topics on Discord.
For developer chat join #dev
but stay on topic. Lurking is not only fine, but encouraged!
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.
Status
Buildbot | Status | Releases |
---|---|---|
Windows | Latest ◦ All | |
Linux |
Quite a few real games run. Quite a few don't. See the Game compatibility list for currently tracked games, and feel free to contribute your own updates, screenshots, and information there following the existing conventions.
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.
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!
Contributors Wanted!
Have some spare time, know advanced C++, and want to write an emulator? Contribute! There's a ton of work that needs to be done, a lot of which is wide open greenfield fun.
For general rules and guidelines please see CONTRIBUTING.md.
Fixes and optimizations are always welcome (please!), but in addition to that there are some major work areas still untouched:
- Help work through missing functionality/bugs in games
- Reduce the size of Xenia's huge log files
- Skilled with Linux? A strong contributor is needed to help with porting
See more projects good for contributors. It's a good idea to ask on Discord and check the issues page before beginning work on something.
FAQ
See the frequently asked questions page.