Repository navigation
OXOS v0.1.6
LATEST UPDATES: discs loaded at the ms dashboard are now recognised (previously you had to reset afer loading a disc)
Biggest updates was to the source repo - If you are a developer, this version also adds developer tools to the repository (source-level debugging of the kernel and nxdk titles, a serial debug log and a kernel call tracer); they're built only by their own make targets and are not part of this BIOS image.
Kernel debugging in VS Code: the OXOS kernel stopped at a breakpoint in XepLoadImage while loading the dashboard, with its call stack, locals, the loaded title's name and path in watches, and the kernel's boot log in the terminal.
Download: bios_v0.1.6.bin (1 MB, SHA-256 9e9e16dad78a299f9def09699ead645b19adf5b06f28f35c69ee00f2cf4da040)
What changed in the BIOS
- Discs loaded at the dashboard are recognised. Inserting a disc while the Microsoft dashboard was running showed "unrecognised disc" until a reset. The kernel now mounts discs in the same order as the original kernel (XDVDFS, then UDF), and retries the drive's "medium changed" and "becoming ready" answers the way the original does.
New for developers (in the repository, not in the BIOS image)
-
Source-level, real-time debugging with gdb or VS Code. This covers the OXOS kernel and any nxdk app or game, in one session:
- set breakpoints, step over and into code, and inspect variables, watches and the call stack;
- step from your app straight into a kernel call and back.
make run-gdbbuilds a debug kernel and starts xemu paused with its GDB server.- The kernel in VS Code: open the OXOS folder, set a breakpoint and press F5 (the screenshot above).
- Your nxdk app in VS Code: copy
tools/vscode/into the app's.vscode/folder. F5 then builds the app withDEBUG=y, boots it on OXOS and stops at your first breakpoint.
-
Debug serial log. The trace builds write a log to the SuperIO serial port (COM1): boot steps,
DbgPrintoutput from the kernel and games, every title load and its result, and crashes. In xemu,make run-trace-basicprints it in the terminal. On hardware it works with an LPC SuperIO adapter or a Modxo board (spec 18). Release builds leave it out. -
Kernel call tracer.
make run-trace-fullrecords a game's last 32,768 kernel calls: function, arguments, return value and file names. They're dumped automatically when the kernel crashes and when xemu closes;make print-trace-dumpprints them at any time. It runs with xemu set to 128 MB, so games get the same memory as on a release build. -
Getting started guide. The README now covers the packages to install on a fresh Ubuntu, how to install xemu, clone the repository, add a hard-disk image and do a first build. Pillow is no longer needed to build.
Known limitations
- Debugging is xemu-only. A GDB stub for real hardware (over the SuperIO serial port) is not built yet.
- gdb sees one CPU, not an app's threads. Timers stop while you're paused.
- C++ nxdk apps need
CXXFLAGS += -mllvm -dwarf-linkage-names=Abstractfor gdb to show function names; C apps need nothing. - Not tested on a real console yet.
- No certificate key: stock saves and System Link with stock consoles won't work.
Checked in xemu
- All
make testphases pass, andmake test-dashboots this exact image to the dashboard. - The debug kernel passes all
make testphases too. - Kernel debugging in VS Code: a breakpoint on each title load, with the title's name shown.
- nxdk app debugging, on the repository's controller-test app: breakpoints in
main, stepping into nxdk code, inspecting variables.
Using it in xemu
- Open Machine → Settings → System.
- Set Flash (BIOS) File to
bios_v0.1.6.binand leave MCPX Boot ROM File empty.
Sources (GPL-2.0)
- This repository at tag
v0.1.6. - XboxDev/cromwell at
86f547387184d1001d377cce97d3756c8acf91ccfor the X-codes and EEPROM key states. - Contains no Microsoft code. Not affiliated with or endorsed by Microsoft.
