Разрабатываемый эмулятор Nintendo GameCube

pureikyubu (プレイキューブ) — эмулятор Nintendo GameCube, созданный для изучения аппаратного обеспечения консоли и реверс-инжиниринга технологий, на которых делались игры. GameCube — инженерный шедевр Nintendo/ArtX, и разбирать его по частям, чтобы понять, как он устроен, — большое удовольствие.

Что нового

Релиз 2.0 — релиз периферии: периферийные устройства консоли становятся одним пулом — контроллеры, карты памяти, Broadband и Modem Adapter, Game Boy Player и Game Boy Advance на кабеле связи — с одним окном, которое их настраивает. На стороне GameCube появляются сохранения состояния, программный конвейер GFX перестаёт быть экспериментальным, а интерфейс получает восемь тем, японские названия в селекторе и два такта эмуляции в строке состояния.

Периферия

Один пул устройств

Каждое периферийное устройство — отдельная модель в src/peripherals.cpp: контроллер, карта, адаптер или Game Boy Player, включённые в разъём шины SI, EXI или Hi-Speed, со своими настройками и одной таблицей свойств, которая их рисует.

Сеть

Broadband и Modem Adapter

Оба адаптера последовательного порта 1 эмулируются со стороны консоли, командное слово за командным словом, а поставляемый бэкенд отправляет кадры Broadband Adapter по UDP, так что два эмулятора делят один эмулируемый сегмент.

Портативная связь

Game Boy Player и кабель связи

Player достигается через ту самую оконную область ARAM, в которой он и живёт, а Game Pak в его слоте запускает тот же встроенный Game Boy Advance. Кабель связи управляет Game Boy Advance в разъёме SI так, как это делает игра.

Сохранения

Вся консоль в одном файле

F5 и F7, десять слотов, меню File и команды savestate/loadstate. Портативные машины сохраняют свои состояния, а состояние, загруженное в машину, которая успела поработать, продолжает тот же прогон.

Графика

Soft GFX — больше не бета

Программный конвейер больше не экспериментальный: он рисует заставку boot ROM и проигрыватели фильмов, уважает маску записи BP в CP, а заголовки, которые он запускает, совпадают с шейдерным бэкендом.

Интерфейс

Темы, дамп и такты

Восемь тем на палитре сайта, японские названия в селекторе, текст «один тексель на пиксель», окно видеовыхода, следящее за своим окном, — и gfxdump, который хранит последние кадры потока графических команд.

Скриншоты

Снято с текущей сборки (линейка релиза 2.0).

The Legend of Zelda: The Wind Waker, нарисованная программным конвейером GFX
The Wind WakerТитульный экран, нарисованный программным конвейером GFX, в собственном окне видеовыхода.
Новый отладчик DebugUI2 с регистрами Gekko и памятью
Новый отладчикКаждая панель — Markdown команды JDI: история сессии и командная строка рядом с регистрами Gekko, дизассемблером и физической памятью.
Super Mario Sunshine доходит до вступительной сцены
Super Mario SunshineЗагружается, проигрывает вступительный ролик и доходит до следующей сцены — после того как инструкции управления кэшем перестали вызывать исключение на сегменте прямого доступа.
Metroid Fusion на встроенном Game Boy Advance
Metroid FusionВстроенный Game Boy Advance, запущенный собственным свободным boot ROM эмулятора, отрисовка на 60 к/с.
Soul Calibur II, отрисованная pureikyubu
Soul Calibur IIСторонняя 3D-игра, отрисованная через shader-конвейер XF/TEV.

Как собрать

Windows

Откройте scripts/VS2026/pureikyubu.sln в Visual Studio 2026 и нажмите Build. Есть конфигурации Debug и Release как для Win32-, так и для SDL-интерфейса.

Linux

Сборка через CMake + SDL2, проверена в том числе под WSL2:

sudo apt install libglew-dev
git clone https://github.com/emu-russia/pureikyubu.git
cd pureikyubu && git submodule update --init
cd build && cmake .. && make
./pureikyubu pong.dol

Программный конвейер GFX

У графической подсистемы Flipper появился второй путь рендеринга: программная (CPU) реализация тех же аппаратных блоков, написанная по спецификациям GameCube, переключаемая на лету переменной конфига GFX_PIPELINE и рисующая через настоящий массив памяти EFB, вывод которого (XFB) сканирует видеоинтерфейс.

Сцена, отрисованная программным конвейером GFX

Читать страницу · In English · Wiki · Задача #384

MCP-сервер

Эмулятор умеет работать как локальный MCP-сервер (Model Context Protocol): LLM-агент запускает его своим дочерним процессом и управляет через него всем отладочным интерфейсом — каждая команда эмулятора становится инструментом (tool). Загрузить образ диска, прочитать регистры Gekko, снять дамп основной памяти, посмотреть счётчики железа, сделать скриншот.

{
  "mcpServers": {
    "pureikyubu": { "command": "pureikyubu_headless", "args": ["--mcp"] }
  }
}

Читать страницу · In English · Wiki · Задача #383

Что дальше

Периферия не закончена, и следующий релиз — это тот, где она будет закончена: верхняя половина сетевого стека за Broadband Adapter, прошивка самого Game Boy Player и поток кадров, который она питает, передача multi-boot, которая всё ещё нужна кабелю связи, и Game Boy Advance от Player или link-устройства, путешествующий в состоянии GameCube.

После этого проект переходит в своё устойчивое состояние: планомерное улучшение — производительность и исправление ошибок от релиза к релизу, а не очередной рывок за новыми возможностями. Архитектура уже на месте; остаётся сделать то, что есть, быстрее, точнее и полнее. Подробности — в заметках о релизе 2.0.

Документация

Дайджест после 1.6

English digest · Дайджест на русском

Wiki

Внутренности эмулятора: Flipper, GFX, Gekko, Debug UI и разбор IROM процессора DSP.

Архив

Прошлые релизы, оставлены для справки.