An open-source Xbox kernel alternative, designed for use with XQEMU.
XQEMU is a low-level machine emulator, which needs a copy of the Xbox system software to start and run games. Unfortunately, this system software cannot be freely distributed due to it being copyrighted material. This means that in order to run XQEMU, the user must dump the MCPX ROM and TSOP flash images from their own physical Xbox. This, of course, can be a significant barrier to entry for many users.
Though it is a goal for XQEMU to continue to maintain compatibility with the official Xbox system software, it is benificial to also have an open-source alternative path for multiple reasons, namely licensing and performance optimizations. Fortunately, the interface between title and the kernel (API) is simple, clean, and largely documented and can therefore be implemented by an open-source alternative kernel, maintaining binary compatibility with unmodified title code.
Please note: by design, this project contains no copyrighted code from the official Xbox kernel.
Currently able to boot nxdk samples with full 3D graphics! It'll be a little while before this can boot a real game.
In order to use this kernel, you'll need to use a development branch of XQEMU which facilitates loading an XBE.
A very basic kernel that will:
- Switch to protected mode
Enable the serial port (
- Perform barebones device init (PCI, VGA, etc)
- Read the EEPROM
- Poke XQEMU to load an XBE into memory
- Patch XBE imports with stub functions
- Jump to XBE entry point
- Handle a handful of kernel function calls
High-level list of major things that need to be implemented next:
- Proper kernel memory allocator (SLAB, SLOB might be fine)
- Proper virtual memory allocator for title
- Thread/DPC Scheduler
- Interrupt stuff
- XQEMU HLE File IO
Other Kernel things...
- Rtl functions
- Kernel data exports
- Lots of other kernel stuff
How to Build
Standard build tools and NASM are needed, then
make -C src.
How to Run
Check out run.sh to see how to use this with XQEMU. Please note that you'll need the dev branch of XQEMU (mentioned above). Also note that you should not provide a
bootrom image when running this kernel.