Обзор архитектуры mGBA
Этот документ предоставляет обзор архитектуры кодовой базы mGBA, компонентов и принципов проектирования. Понимание архитектуры необходимо для участия в проекте или настройки mGBA.
Обзор
mGBA написан в основном на C, с некоторым C++ для платформо-специфичного кода и GUI на основе Qt. Кодовая база разработана для точности, производительности и переносимости на различные платформы.
Основная архитектура
Модульный дизайн
mGBA использует модульную архитектуру с отдельными компонентами:
- Ядро: Основной движок эмуляции (CPU, память, аппаратные компоненты)
- Интерфейс: Платформо-специфичные реализации UI (Qt, SDL и т.д.)
- Бэкенд: Платформо-специфичные бэкенды (OpenGL, Vulkan, Direct3D, Metal)
- Поддержка: Вспомогательные библиотеки и утилиты
Структура директорий
Ключевые директории в дереве исходного кода mGBA:
- src/: Основной исходный код
- src/core/: Основной движок эмуляции
- src/gb/: Эмуляция Game Boy/Game Boy Color
- src/gba/: Эмуляция Game Boy Advance
- src/platform/: Платформо-специфичный код
- src/util/: Вспомогательные функции и утилиты
- src/debugger/: Функциональность отладчика
- src/feature/: Реализации функций (читы, скрипты и т.д.)
Основные компоненты
Эмуляция CPU
Ядро CPU реализует эмуляцию процессора ARM7TDMI:
- Режим ARM: 32-битный набор инструкций ARM
- Режим THUMB: 16-битный набор инструкций THUMB
- Точность циклов: Точное по циклам время выполнения инструкций
- Конвейер: Симуляция конвейера CPU
Управление памятью
Система памяти реализует полную карту памяти GBA:
- Карта памяти: Полное 32-битное адресное пространство
- Области памяти: WRAM, VRAM, ROM, SRAM, регистры I/O
- DMA: Прямой доступ к памяти
- Кэш: Симуляция кэша CPU
Графическая система
Система рендеринга графики:
- PPU (Блок обработки пикселей): Эмуляция графического конвейера
- Бэкенды рендеринга: Программный, OpenGL, Vulkan, Direct3D, Metal
- Слои: Фоновые слои и слой спрайтов
- Эффекты: Масштабирование, поворот, альфа-смешивание
Аудио система
Система обработки звука:
- Звуковые каналы: Эмуляция каналов PCM, PSG
- Микширование: Смешивание аудио каналов
- Ресэмплинг: Преобразование частоты дискретизации
- Вывод: Платформо-специфичный вывод звука
Архитектура интерфейса
Интерфейс Qt
GUI интерфейс на основе Qt для настольных платформ:
- Кроссплатформенный GUI фреймворк
- Нативный внешний вид на каждой платформе
- Богатый набор виджетов для конфигурации и отладки
Интерфейс SDL
Интерфейс на основе SDL для простого UI или встроенных систем:
- Более легковесный, чем интерфейс Qt
- Используется для встроенных портов (3DS, Wii U, Vita)
- Базовая обработка окон и ввода
Архитектура бэкенда
Бэкенды рендеринга
Несколько бэкендов рендеринга для разных платформ:
- Программный: Рендеринг на CPU (всегда доступен)
- OpenGL: Кроссплатформенное аппаратное ускорение
- Vulkan: Современный низкоуровневый API (Linux/Windows)
- Direct3D 11: Ускорение для Windows
- Metal: Нативное ускорение для macOS/iOS
Принципы проектирования
Точность прежде всего
mGBA отдает приоритет точности над производительностью:
- Точная по циклам эмуляция по умолчанию
- Точное поведение аппаратуры для всех компонентов
- Оптимизации производительности не должны жертвовать точностью
Переносимость
Код написан с учетом переносимости:
- Слои абстракции платформы для OS-специфичного кода
- Стандартный C/C++ где возможно
- Условная компиляция для платформо-специфичных функций
Модульность
Компоненты разработаны как модульные и независимые:
- Четкое разделение между ядром и интерфейсом
- Подключаемые бэкенды для рендеринга и звука
- Опциональные функции могут быть включены или отключены
Ключевые компоненты
Ядро эмулятора (mCore)
Класс ядра эмулятора управляет состоянием эмуляции:
- Инициализирует и управляет всеми аппаратными компонентами
- Обрабатывает загрузку ROM и состояние игры
- Координирует CPU, память, графику и звук
- Управляет состояниями сохранения и сохранениями батареи
Game Boy Advance (GBA)
Специфичная для GBA эмуляция:
- Ядро CPU ARM7TDMI
- Карта памяти GBA и аппаратура
- Специфичные для GBA функции (кабель связи, RTC и т.д.)
Game Boy/Game Boy Color (GB/GBC)
Обратная совместимость с играми GB/GBC:
- Отдельное ядро эмуляции GB/GBC
- Автоматическое определение игр GB/GBC
- Те же функции доступны для игр GB/GBC
Порты платформ
mGBA поддерживает несколько платформ через платформо-специфичные порты:
- Настольные: Windows, macOS, Linux (интерфейс Qt)
- Мобильные: Android, iOS (нативный UI)
- Встроенные: 3DS, Wii U, Vita (интерфейс SDL)
Модули функций
Опциональные функции
Функции могут быть включены или отключены во время компиляции:
- Скрипты Lua: Интеграция Lua 5.4
- Отладчик: Инструменты отладки и проверки памяти
- Читы: Поддержка читов
- Кабель связи: Поддержка мультиплеера
Связанные статьи
Для получения дополнительной информации о разработке mGBA:
- Сборка из исходников - Полное руководство по компиляции mGBA из исходного кода на разных платформах
- Участие в разработке mGBA - Руководство по участию в коде, отчетах об ошибках и документации
- API скриптинга Lua - Документация API для реализации интерфейса скриптов
- API конфигурации - Параметры конфигурации и управление настройками