IOS Architecture
IOS consists of a kernel and system modules: Location:Source/Core/Core/IOS/
IOS Kernel
Location:IOS/IOS.cpp
The IOS kernel manages:
- IPC (Inter-Process Communication): PowerPC ↔ ARM communication
- Module Loading: Start/stop IOS modules
- Request Handling: Route IOCTL commands to modules
- Resource Management: File descriptors, memory
IPC Communication
PowerPC communicates with IOS via IPC registers:IPC_OPEN: Open device (/dev/es,/dev/fs, etc.)IPC_CLOSE: Close file descriptorIPC_READ/WRITE: Read/write dataIPC_IOCTL: Issue control commandIPC_IOCTLV: Vector IOCTL (multiple buffers)
ES Module (ETicket Services)
Location:IOS/ES/
Manages Wii titles, tickets, and content:
Responsibilities
- Title installation and launching
- Ticket and TMD (Title Metadata) verification
- Content decryption (using title keys)
- DLC and update management
- NAND permissions
Key Functions
Title IDs
Wii titles are identified by 64-bit IDs:FS Module (FileSystem)
Location:IOS/FS/
Provides NAND filesystem access:
NAND Structure
File Operations
FS Backend
Location:IOS/FS/HostBackend/
Maps NAND filesystem to host directory:
Dolphin stores the NAND filesystem in
User/Wii/ on the host system. This allows easy backup and inspection of save data.DI Module (Disc Interface)
Location:IOS/DI/
Handles DVD access for Wii games:
Features
- Read disc sectors
- Get disc status and info
- Decrypt partition content
- Handle disc changes
Disc Partitions
Wii discs have multiple partitions:- Update Partition: System updates
- Game Partition: Main game content (encrypted)
- Channel Partition: Wii Channels
USB Module
Location:IOS/USB/
Emulates USB devices:
USB Subsystems
Bluetooth (USB/Bluetooth/)
Bluetooth (USB/Bluetooth/)
Wii Remote communication via Bluetooth:
- Scan for Wii Remotes
- Pair and connect remotes
- HID input reporting
- Sync button handling
- Extension detection (Nunchuk, Classic Controller)
/dev/usb/oh1/57e/305USB HID (USB/USB_HID/)
USB HID (USB/USB_HID/)
Generic USB HID devices:
- Keyboards
- Mice
- Generic gamepads
/dev/usb/hidSkylanders Portal (USB/Emulated/)
Skylanders Portal (USB/Emulated/)
Skylanders portal emulation:
- Figure detection
- RFID reading/writing
- LED control
/dev/usb/lp0Infinity Base (USB/Emulated/)
Infinity Base (USB/Emulated/)
Disney Infinity base emulation:
- Figure placement detection
- NFC communication
Network Module
Location:IOS/Network/
Network services:
KD (Network/KD/)
NWC24 (Nintendo WiiConnect24) daemon:- Friend codes
- WiiConnect24 messaging
- Download management
WD (Network/WD/)
Wifi Driver:- Wifi configuration
- Access point scanning
- Connection management
NCD (Network/NCD/)
Network Configuration Daemon:- Connection settings
- IP configuration (DHCP/static)
IP Stack (Network/IP/)
TCP/IP implementation:- Socket API
- TCP/UDP protocols
- DNS resolution
SDIO Module
Location:IOS/SDIO/
SD card interface:
User/Wii/sd.raw or host SD card folder.
STM Module
Location:IOS/STM/
State Transition Manager:
- Power button handling
- Reset button
- System state transitions
- LED control (slot LED, power LED)
Crypto Services
Location:IOS/Crypto/
Encryption and decryption:
AES Engine
Hardware AES for content decryption:Keys
- Common Key: Encrypts all Wii content (Dolphin uses dumped key)
- Title Keys: Per-title encryption (derived from tickets)
- SD Key: SD card content encryption
IOS Versions
Multiple IOS versions exist:| IOS | Purpose |
|---|---|
| IOS9 | Early system menu |
| IOS21 | System menu 3.0 |
| IOS36 | System menu 3.2 |
| IOS53 | System menu 4.0 |
| IOS58 | System menu 4.3 (most common) |
| IOS80 | System menu 4.3K (Korea) |
Dolphin HLE emulates all IOS versions with a unified implementation. The IOS version number mainly affects title permissions and available system calls.
Save Data
Game saves stored in NAND:WiiSave Format
Location:Core/HW/WiiSave.cpp
Save files are encrypted:
- AES-CBC encryption with SD key
- SHA-1 HMAC for integrity
- Banner image (96x32 RGB5A3)