Обзор архитектуры 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: