Skip to content

OXOS v0.2.0

Choose a tag to compare

@kooscode kooscode released this 19 Oct 07:00
· 16 commits to main since this release

Big disks and exFAT. The Xbox hard disk no longer has to be a Microsoft FATX disk.

  • Format a drive of any size as exFAT on your PC (Windows, macOS or Linux).
  • Copy the dashboard, your apps and your saves onto it as ordinary files.
  • Put it in the Xbox.

OXOS also uses the whole disk now, not just the first 128 GiB.

Download: bios_v0.2.0.bin (1 MB, SHA-256 93fa5833cbb1ef6fce4c8f325ae7fe5cdae55936b6cc9f3ff70e69f39666e67f)

Big hard disks: 48-bit addressing (LBA48)

  • The original kernel uses 28-bit sector numbers, so it can only reach the first 128 GiB of a disk. OXOS now uses the drive's 48-bit commands, which reach 128 PiB.
  • Tested in xemu on a 2 TB disk: every test sector landed at the right place, including the ones just past the old 128 GiB limit.
  • Disks up to 128 GiB get exactly the original commands, and existing FATX disks keep working unchanged.

exFAT hard disks

  • Formatted on any computer. Use one exFAT partition on a GPT disk (or MBR, up to 2 TiB). The default settings of Windows Disk Management, macOS Disk Utility, or Linux gdisk + mkfs.exfat all work. You don't need FATX tools or Xbox-specific partitioning.

  • Folders are the Xbox drives:

    Folder Drive What goes there
    C C: the dashboard
    E E: saves and game data (TDATA, UDATA)
    F F: your extra drive: apps, homebrew, anything
    X, Y, Z X:, Y:, Z: game caches, created automatically
  • Copy data any time. Put the drive in a PC: saves, apps and the dashboard are plain files. You can back up, restore and add apps with the file manager you already use.

  • One shared pool of space. There are no fixed partition sizes: C, E and F can each use the whole disk.

    • Games see C: and E: as at most 2 TB, because some older software miscounts larger numbers.
    • F: shows the full size.
    • The cache drives X/Y/Z show 750 MB each, as on a retail disk. Games format them as they always did, and OXOS empties the folder instead.

Size limits:

  • Disk: no practical limit with GPT; tested with 256 GB and 500 GB disks. MBR partitions stop at 2 TiB.
  • Files: the PC can store files of any size on the disk. Xbox games and apps only see files under 4 GB, because the Xbox file API is 32-bit; larger files are hidden from them.
  • Names: Xbox software sees names of up to 42 characters (the Xbox rule). Longer names, and names with characters outside Latin-1, are hidden from it and left untouched.

Setting up a drive:

  1. Format it as exFAT: one GPT partition starting at 1 MiB (the default everywhere).
  2. Create the folders C, E and F.
  3. Copy your dashboard files into C (for example from your old drive's C:), and your saves into E if you have them.
  4. Put apps into F, e.g. F\apps\myapp\default.xbe.

For xemu users

Make an exFAT disk image on Linux:

qemu-img create -f qcow2 hdd.qcow2 500G
sudo modprobe nbd max_part=8 && sudo qemu-nbd --connect=/dev/nbd0 hdd.qcow2
sudo sgdisk -n 1:2048:0 -t 1:0700 /dev/nbd0 && sudo mkfs.exfat /dev/nbd0p1
sudo mount /dev/nbd0p1 /mnt && sudo mkdir /mnt/C /mnt/E /mnt/F   # copy your files in
sudo umount /mnt && sudo qemu-nbd --disconnect /dev/nbd0
  • Set the image as xemu's hard disk.
  • Mount it again whenever you want to copy files. Unmount it before starting xemu: the PC and the console must never have the disk open at the same time.
  • From a source checkout, python3 tests/exfat.py --from-fatx old.qcow2 new.qcow2 --size 500G converts an existing FATX image.

New for developers (in the repository)

  • make run-xbe XBE='F:\apps\demo\default.xbe' runs an XBE from the hard disk. A small launcher disc (tools/xbe-launcher) starts it the way a dashboard does. make run-trace-xbe does the same with the serial log and kernel call tracer.
  • New tests:
    • make test-lba48 runs the self-tests on a 2 TB disk.
    • make test-exfat runs them on an exFAT disk and checks the disk afterwards.
    • tests/exfat.py builds and checks exFAT disk images.
  • Designs: spec/oxos-internal/ (LBA48, the exFAT storage layout, the exFAT driver).

Known limitations

  • Not tested on a real console yet. Large disks need a drive, or an IDE adapter, that passes 48-bit commands through.
  • Memory units are still FATX only; exFAT memory units are planned.
  • Disk layout:
    • The first data partition on the disk must be the exFAT one.
    • The disk must use 512-byte sectors, the normal case for drives used with IDE adapters.
  • No certificate key: stock saves and System Link with stock consoles won't work.

Checked in xemu

  • All make test phases, make test-exfat and make test-lba48 pass, and make test-dash boots this exact image to the dashboard.
  • A disk prepared only with standard Linux tools (a 500 GB disk; sgdisk, mkfs.exfat, files copied through the Linux exFAT driver):
    • the Microsoft dashboard boots from it;
    • Halo formats its cache, loads a level and writes its cache files;
    • afterwards Linux's fsck.exfat reports the disk clean.
  • On an exFAT disk, Halo was played, the profile saved, and the game continued after a reboot.

Using it in xemu

  1. Open Machine → Settings → System.
  2. Set Flash (BIOS) File to bios_v0.2.0.bin and leave MCPX Boot ROM File empty.

Sources (GPL-2.0)

  • This repository at tag v0.2.0.
  • XboxDev/cromwell at 86f547387184d1001d377cce97d3756c8acf91cc for the X-codes and EEPROM key states.
  • Contains no Microsoft code. Not affiliated with or endorsed by Microsoft.