# emukidid/xenogcfork architecture

> Architecture diagram of the GitHub repository emukidid/xenogcfork, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/emukidid/xenogcfork
- Repository: https://github.com/emukidid/xenogcfork

## Overview

xenogcfork is a GameCube/DVD-drive firmware fork for the drive’s MN10200 CPU, with a GameCube-side shell and flash-updater application. The main user workflow is launching the shell, detecting video region, listing disc games, and booting a selection; a memory-card DOL loader is documented as work in progress. A separate workflow updates drive flash. The shell and updater excerpts support their local calls; drive-firmware internals are only sampled in part, so uncertain subsystem wiring is omitted.

Main entry points: [`XenoShell/source/main.c`](https://github.com/emukidid/xenogcfork/blob/master/XenoShell/source/main.c) (XenoShell), [`Drivecode/Source/xdump.asm.c`](https://github.com/emukidid/xenogcfork/blob/master/Drivecode/Source/xdump.asm.c) (Drive firmware), [`XenoFlash/source/dvd.c`](https://github.com/emukidid/xenogcfork/blob/master/XenoFlash/source/dvd.c) (Updater DVD commands), [`XenoFlash/source/main.cpp`](https://github.com/emukidid/xenogcfork/blob/master/XenoFlash/source/main.cpp) (XenoFlash updater)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_shell["Shell and boot"]
  node_shell["XenoShell<br/>[main.c]"]
  node_dol["Loaded DOL<br/>[main.c]"]
end

subgraph group_firmware["Drive firmware"]
  node_drivefw["Drive firmware<br/>[xdump.asm.c]"]
  node_drivecode_main["Drive runtime<br/>[QLite Main.asm.c]"]
  node_apploader["Drive apploader"]
  node_breakpoints["Breakpoints"]
end

subgraph group_update["Flash update"]
  node_updater["XenoFlash updater<br/>[main.cpp]"]
  node_dvd_transport["Updater DVD commands<br/>[dvd.c]"]
end

subgraph group_hardware["Hardware interfaces"]
  node_ipl["IPL interface<br/>[main.c]"]
  node_dvd["DVD interface<br/>[main.c]"]
  node_memory_card[("Memory card")]
  node_disc[("Game disc")]
  node_flash[("Drive flash")]
end

node_user(("Player"))

node_user -->|"starts"| node_shell
node_shell -->|"reads IPL"| node_ipl
node_ipl -->|"provides region"| node_shell
node_shell -->|"issues commands"| node_dvd
node_dvd -->|"reads disc"| node_disc
node_dvd -->|"returns game list"| node_shell
node_shell -.->|"loads DOL"| node_memory_card
node_memory_card -.->|"provides DOL"| node_dol
node_shell -.->|"loads sections"| node_dol
node_user -->|"starts update"| node_updater
node_updater -->|"calls commands"| node_dvd_transport
node_dvd_transport -->|"programs flash"| node_flash
node_dvd_transport -->|"sends drive commands"| node_drivefw
node_drivecode_main -->|"runs firmware"| node_drivefw
node_drivefw -->|"uses"| node_apploader
node_drivefw -->|"dispatches"| node_breakpoints

click node_shell "https://github.com/emukidid/xenogcfork/blob/master/XenoShell/source/main.c"
click node_dol "https://github.com/emukidid/xenogcfork/blob/master/XenoShell/source/main.c"
click node_drivefw "https://github.com/emukidid/xenogcfork/blob/master/Drivecode/Source/xdump.asm.c"
click node_drivecode_main "https://github.com/emukidid/xenogcfork/blob/master/Drivecode/Source/QLite%20Main.asm.c"
click node_apploader "https://github.com/emukidid/xenogcfork/blob/master/Drivecode/Source/QLiteApploader.asm.c"
click node_breakpoints "https://github.com/emukidid/xenogcfork/blob/master/Drivecode/Source/QLiteBreakpoints.asm.c"
click node_ipl "https://github.com/emukidid/xenogcfork/blob/master/XenoShell/source/main.c"
click node_dvd "https://github.com/emukidid/xenogcfork/blob/master/XenoShell/source/main.c"
click node_updater "https://github.com/emukidid/xenogcfork/blob/master/XenoFlash/source/main.cpp"
click node_dvd_transport "https://github.com/emukidid/xenogcfork/blob/master/XenoFlash/source/dvd.c"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_shell,node_dol toneBlue
class node_drivefw,node_drivecode_main,node_apploader,node_breakpoints toneAmber
class node_updater,node_dvd_transport toneMint
class node_ipl,node_dvd,node_memory_card,node_disc,node_flash toneRose
class node_user toneIndigo
```

## Components

### Shell and boot

- [XenoShell](https://github.com/emukidid/xenogcfork/blob/master/XenoShell/source/main.c): `XenoShell/source/main.c`
- [Loaded DOL](https://github.com/emukidid/xenogcfork/blob/master/XenoShell/source/main.c): `XenoShell/source/main.c`

### Drive firmware

- [Drive firmware](https://github.com/emukidid/xenogcfork/blob/master/Drivecode/Source/xdump.asm.c): `Drivecode/Source/xdump.asm.c`
- [Drive runtime](https://github.com/emukidid/xenogcfork/blob/master/Drivecode/Source/QLite%20Main.asm.c): `Drivecode/Source/QLite Main.asm.c`
- [Drive apploader](https://github.com/emukidid/xenogcfork/blob/master/Drivecode/Source/QLiteApploader.asm.c): `Drivecode/Source/QLiteApploader.asm.c`
- [Breakpoints](https://github.com/emukidid/xenogcfork/blob/master/Drivecode/Source/QLiteBreakpoints.asm.c): `Drivecode/Source/QLiteBreakpoints.asm.c`

### Flash update

- [XenoFlash updater](https://github.com/emukidid/xenogcfork/blob/master/XenoFlash/source/main.cpp): `XenoFlash/source/main.cpp`
- [Updater DVD commands](https://github.com/emukidid/xenogcfork/blob/master/XenoFlash/source/dvd.c): `XenoFlash/source/dvd.c`

### Hardware interfaces

- [IPL interface](https://github.com/emukidid/xenogcfork/blob/master/XenoShell/source/main.c): `XenoShell/source/main.c`
- [DVD interface](https://github.com/emukidid/xenogcfork/blob/master/XenoShell/source/main.c): `XenoShell/source/main.c`
- **Memory card**
- **Game disc**
- **Drive flash**

### Other components

- **Player**

## Connections

- Player → XenoShell: starts
- XenoShell → IPL interface: reads IPL
- IPL interface → XenoShell: provides region
- XenoShell → DVD interface: issues commands
- DVD interface → Game disc: reads disc
- DVD interface → XenoShell: returns game list
- XenoShell → Memory card: loads DOL
- Memory card → Loaded DOL: provides DOL
- XenoShell → Loaded DOL: loads sections
- Player → XenoFlash updater: starts update
- XenoFlash updater → Updater DVD commands: calls commands
- Updater DVD commands → Drive flash: programs flash
- Updater DVD commands → Drive firmware: sends drive commands
- Drive runtime → Drive firmware: runs firmware
- Drive firmware → Drive apploader: uses
- Drive firmware → Breakpoints: dispatches
