☰
mGBA 模拟器完全指南:功能特性、Mapper 支持与跨平台编译实战(Game Boy Advance / Game Boy)
2026/9/28 2:21:36 网站建设 项目流程
  • 游戏开发

【免费下载链接】mgba

mGBA Game Boy Advance Emulator

项目地址:https://gitcode.com/gh_mirrors/mg/mgba
点击查看免费下载

mGBA 是一款面向 Game Boy Advance 的模拟器,同时兼容 Game Boy 与 Game Boy Color,其核心目标是比现有同类模拟器更快、更准,并提供其他模拟器所不具备的扩展功能。本文以官方西班牙语文档 README_ES.md 为骨架,结合当前仓库源码(CMake 构建系统、GB Mapper 实现、GBA 外设与 SIO 驱动等)展开,帮助读者完整掌握 mGBA 的功能清单、存储控制器支持矩阵、系统需求,以及从 Docker 到原生工具链的各平台编译流程。

一、项目概况与设计目标

mGBA 是一个以速度与精度为首要目标的 Game Boy Advance 模拟器:

  • 高度精确的 Game Boy Advance 硬件支持;
  • 同时支持 Game Boy / Game Boy Color 硬件;
  • 运行速度快,能够在低端硬件(如上网本)上以全速运行;
  • 提供 SDL 与 Qt 两套图形前端;
  • 支持本机(同一台计算机上的)联机线(link cable)通信。

当前仓库中的核心实现与文档描述一一对应:GBA 联机线驱动位于 src/gba/sio/(包含 lockstep.c、dolphin.c、gbp.c),GB 侧则位于 src/gb/sio/(lockstep.c、printer.c)。文档中标注的“计划特性”包括网络联机线、面向 Dolphin 的 Joybus 联机、MP2k 音频混合、面向 TAS 的 regrabación(录影回放)、Lua 脚本、完整调试套件与无线适配器兼容等,其中 Lua 脚本能力在当前仓库中已落地为 ENABLE_SCRIPTING 与 USE_LUA 构建选项,调试器基础设施由 ENABLE_DEBUGGERS 与 ENABLE_GDB_STUB 控制。

二、功能特性全览

mGBA 在文档中宣称的功能几乎全部能在当前仓库源码中找到对应实现:

  • GBA 高精度硬件支持:文档脚注说明当前仍缺失 OBJ window 在模式 3/4/5 下的支持(即文档注释 [1]),其余部分由 src/gba/ 下的核心(core.c、video.c、audio.c、io.c、dma.c、timer.c)实现。
  • GB / GBC 硬件支持:核心位于 src/gb/(core.c、video.c、audio.c、io.c、timer.c、memory.c)。
  • 保存类型自动检测:包括 flash 存储器大小探测(文档注释 [2] 说明个别情况下检测可能失效,可在运行时手工配置,遇到此类情况建议提交 bug)。对应实现见 src/gba/savedata.c。
  • 运动传感器与震动卡带:仅在使用手柄时可用。
  • 实时时钟(RTC)支持:无需额外配置即可工作,MBC3 的 RTC 锁存逻辑见 src/gb/mbc/mbc-private.h 中的_GBMBCLatchRTC。
  • Boktai 系列游戏的太阳光传感器。
  • Game Boy Camera 与 Game Boy Printer:相机与打印机的实现分别在 src/gb/mbc/pocket-cam.c 与 src/gb/sio/printer.c。
  • 内置 BIOS 与外部 BIOS 可选:GBA 侧 BIOS 加载与 HLE 见 src/gba/bios.c 与 src/gba/hle-bios.c。
  • Turbo / 快进模式:按住 Tab 即可。
  • 回退(倒带):按反引号键`触发;核心实现位于 src/core/rewind.c,且回退深度可配置。
  • 跳帧:最多一次跳过 10 帧。
  • 截图(屏幕快照):依赖 libpng,由 USE_PNG 构建选项控制。
  • 金手指代码支持:核心实现见 src/core/cheats.c,GBA 侧 GameShark/CodeBreaker 解码器位于 src/gba/cheats/。
  • 9 个存档位:可附带缩略图预览;PNG 内嵌存档由 libpng 支撑。
  • 录像与导出:支持视频、GIF、WebP、APNG,依赖 FFmpeg/libav(USE_FFMPEG),编码器实现在 src/feature/ffmpeg/。
  • e-Reader 支持:见 src/gba/cart/ereader.c。
  • 键位与手柄按键可自定义。
  • ZIP 与 7z 压缩 ROM 加载:ZIP 由 zlib/minizip/libzip 支撑(USE_ZLIB、USE_LIBZIP),7z 由 LZMA SDK 支撑(USE_LZMA)。
  • IPS、UPS、BPS 补丁支持:实现在 src/util/patch-ips.c、src/util/patch-ups.c 与 src/util/patch-fast.c。
  • 命令行调试器与 GDB 远程调试:兼容 IDA Pro 的 GDB stub,见 src/debugger/(cli-debugger.c、gdb-stub.c)与 src/arm/debugger/。
  • GameShark / Action Replay 存档导入导出:见 src/gba/sharkport.c。
  • RetroArch/Libretro 与 OpenEmu 核心:Libretro 前端位于 src/platform/libretro/,由 BUILD_LIBRETRO 选项控制。
  • 社区多语言翻译:由 Weblate 平台协作维护。

三、支持的存储控制器(Mapper)矩阵

文档将 Mapper 支持分为“完整支持”与“部分支持”两档,当前仓库的 src/gb/mbc/mbc-private.h 中声明的所有 MBC 回调函数与之一一对应:

完整支持(12 种):

Mapper源码实现(src/gb/mbc/)
MBC1_GBMBC1(licensed.c)
MBC1M(多路复用版 MBC1)_GBMBC1
MBC2_GBMBC2
MBC3_GBMBC3
MBC3 + RTC_GBMBC3+_GBMBCLatchRTC
MBC5_GBMBC5
MBC5 + Rumble_GBMBC5
MBC7_GBMBC7
Wisdom Tree(未授权卡带)_GBWisdomTree(unlicensed.c)
Pokémon Jade/Diamond(未授权)_GBPKJD(unlicensed.c)
BBD(未授权,类 MBC5)_GBBBD(unlicensed.c)
Hitek(未授权,类 MBC5)_GBHitek(unlicensed.c)

部分支持(5 种):

Mapper支持情况源码实现
MBC6不支持向 flash 写入_GBMBC6(licensed.c)
MMM01—_GBMMM01(licensed.c)
Pocket Cam—_GBPocketCam(pocket-cam.c)
TAMA5不支持 RTC_GBTAMA5(tama5.c)
HuC-1不支持 IR_GBHuC1(licensed.c)
HuC-3不支持 RTC 与 IR_GBHuC3(huc-3.c)

值得注意的是,当前仓库的 Mapper 覆盖范围已超出文档列表,例如_GBNTOld1、_GBNTOld2、_GBNTNew(未授权 NT 卡带)、_GBLiCheng、_GBGGB81、_GBSachen、_GBSintax等也已具备回调声明,说明后续版本在持续扩充未授权卡带兼容性。

四、支持平台与系统要求

文档列出的官方支持平台:

  • Windows 7 或更新版本
  • OS X 10.9(Mavericks)或更新版本(仅 Qt 版本需要 10.9;SDL 版本在 10.5 即可运行,10.7 上运行 Qt 版本“有可能”但不作官方支持)
  • Linux
  • FreeBSD
  • Nintendo 3DS
  • Nintendo Switch
  • Wii
  • PlayStation Vita

其他 Unix-like 系统(如 OpenBSD)理论上可运行但未经官方测试。

系统要求极低:任何能流畅运行 Windows Vista 的电脑都足以运行模拟器本体;显示方面要求 OpenGL 1.1 或更新版本,而 Shader 与高级图形功能需要 OpenGL 3.2 或更新版本。OpenGL 相关构建选项在 CMakeLists.txt 中由 BUILD_GL / BUILD_GLES2 / BUILD_GLES3 控制。

五、获取方式

官方发布版下载位于项目官网的 Downloads 专区,源代码可 clone 自 GitHub 仓库mgba-emu/mgba。安装包形式包括 Windows 安装程序/压缩包、macOS 应用、Linux 发行版软件包以及各主机平台(3DS、Switch、Wii、Vita)的专用构建,此外 RetroArch 用户可直接加载 Libretro 核心。

六、默认按键与控制

mGBA 的按键可在设置菜单中自由配置,大部分手柄插入后会尝试自动映射。默认键盘布局如下:

手柄/主机按键键盘按键
AX
BZ
LA
RS
StartEnter(回车)
SelectBackspace(退格)

其他常用快捷键还包括:按住 Tab 进入 Turbo/快进模式、按`(反引号)触发回退(Rewind)。输入系统的底层实现可参考 src/core/input.c 与 src/gba/input.c,Qt 前端的键位映射逻辑位于 src/platform/qt/input/。

七、编译构建指南

mGBA 使用 CMake 构建。文档写作时要求 CMake 3.1+,但以当前仓库为准,根目录 CMakeLists.txt 第一行声明的是cmake_minimum_required(VERSION 3.12),因此请使用 3.12 或更新版本的 CMake。编译器方面,GCC 与 Clang 均可正常编译;文档注明 Visual Studio 2013 及更早版本不可用,而当前仓库已包含针对 MSVC 的编译标志分支(见 CMakeLists.txt),说明现代 Visual Studio 工具链已被支持。

7.1 使用 Docker 编译(推荐)

官方提供一组预装工具链与依赖的 Docker 镜像,覆盖绝大多数平台。在 mGBA 源码检出目录下执行:

docker run --rm -t -v $PWD:/home/mgba/src mgba/windows:w32

该命令会在当前目录生成build-win32目录,内含编译好的可执行文件。将镜像名替换为其他平台即可得到对应的输出目录。Docker Hub 上可用的镜像包括:

  • mgba/3ds
  • mgba/switch
  • mgba/ubuntu:xenial
  • mgba/ubuntu:bionic
  • mgba/ubuntu:focal
  • mgba/ubuntu:groovy
  • mgba/vita
  • mgba/wii
  • mgba/windows:w32
  • mgba/windows:w64

7.2 Unix-like 系统原生编译

推荐命令序列:

mkdir build cd build cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr .. make sudo make install

执行后 mGBA 会被安装到/usr/bin与/usr/lib。CMake 会自动探测已安装的依赖;若某些依赖缺失,对应功能会被自动禁用,并在cmake输出中给出警告。配置阶段结束后,构建系统还会打印一份“功能摘要”(见 CMakeLists.txt),逐项列出 Qt/SDL 前端、调试器、录像、截图、ZIP/7z、SQLite3、OpenGL、Lua 脚本等特性的开启状态,便于核对。

7.3 macOS(Homebrew)编译

假设使用 Homebrew 包管理器,推荐步骤:

brew install cmake ffmpeg libzip qt5 sdl2 libedit pkg-config mkdir build cd build cmake -DCMAKE_PREFIX_PATH=`brew --prefix qt5` .. make

注意:macOS 上不要执行make install,该流程在 macOS 下无法正确工作。

7.4 Windows 开发环境编译

MSYS2 方式(推荐开发用)

安装 MSYS2 后,请确保使用32 位“MSYS2 MinGW 32-bit”(若目标为 x86_64 则使用 “MSYS2 MinGW 64-bit”)环境,并执行以下命令安装依赖(注意会下载超过 1100 MB 的软件包,耗时较长):

pacman -Sy --needed base-devel git ${MINGW_PACKAGE_PREFIX}-{cmake,ffmpeg,gcc,gdb,libelf,libepoxy,libzip,pkgconf,qt5,SDL2,ntldd-git}

检出源码并编译:

git clone https://github.com/mgba-emu/mgba.git mkdir -p mgba/build cd mgba/build cmake .. -G "MSYS Makefiles" make -j$(nproc --ignore=1)

这种构建因依赖 DLL 分散,不适合直接分发,但非常适合开发调试。若确实需要分发(例如在未安装 MSYS2 的机器上测试),执行cpack -G ZIP即可打包出包含全部所需 DLL 的 zip。

Visual Studio 方式

首先安装 vcpkg,然后安装依赖包:

vcpkg install ffmpeg[vpx,x264] libepoxy libpng libzip sdl2 sqlite3

以上命令不支持 Nvidia 硬件加速视频编码;若需要,请先安装 CUDA,并将命令中的ffmpeg[vpx,x264]替换为ffmpeg[vpx,x264,nvcodec]。

Qt 的获取相对曲折:可选用旧版离线安装包、在线安装器,或通过 vcpkg 编译(较慢)。若使用安装器,请选择与 MSVC 匹配的版本(离线安装器与 MSVC 2019 不兼容);若走 vcpkg,则执行:

vcpkg install qt5-base qt5-multimedia

随后打开 Visual Studio,选择“克隆仓库”,输入 mGBA 的 Git 地址完成克隆;再通过“文件 > CMake”打开仓库根目录的 CMakeLists.txt,即可像其他 CMake 项目一样在 Visual Studio 中开发调试。

7.5 使用交叉工具链编译主机平台版本

若已安装 devkitARM(3DS)、devkitPPC(Wii)、devkitA64(Switch)或 vitasdk(PS Vita),可按以下模板编译:

mkdir build cd build cmake -DCMAKE_TOOLCHAIN_FILE=../src/platform/3ds/CMakeToolchain.txt .. make

各平台的-DCMAKE_TOOLCHAIN_FILE参数如下:

平台工具链文件
3DSsrc/platform/3ds/CMakeToolchain.txt
Switchsrc/platform/switch/CMakeToolchain.txt
Vitasrc/platform/psp2/CMakeToolchain.vitasdk
Wiisrc/platform/wii/CMakeToolchain.txt

八、依赖体系与功能开关解析

mGBA没有硬性依赖,所有依赖均为可选:找不到对应库时相关功能自动降级关闭。文档列出的可选依赖如下:

依赖作用构建选项(CMakeLists.txt)
Qt 5图形界面;音频需 Qt Multimedia 或 SDLBUILD_QT
SDL基础前端与 Qt 前端的游戏手柄支持(推荐 SDL 2,兼容 1.2)BUILD_SDL
zlib + libpng截图、PNG 内嵌存档图USE_ZLIB / USE_PNG
libedit命令行调试器USE_EDITLINE
FFmpeg / libav视频、GIF、WebP、APNG 录像USE_FFMPEG
libzip 或 zlib加载 zip 内 ROMUSE_LIBZIP / USE_ZLIB
SQLite3游戏数据库USE_SQLITE3
libelf加载 ELF 文件USE_ELF

其中SQLite3、libpng 与 zlib 已内置于模拟器(第三方源码位于 src/third-party/sqlite3/、src/third-party/libpng/、src/third-party/zlib/),无需在外部预先编译安装;另有 inih(配置文件解析,src/third-party/inih/)与 LZMA SDK(7z 支持)随源码分发。

九、许可与版权

mGBA 版权为 © 2013–2021 Jeffrey Pfau,以Mozilla Public License 2.0发布,许可全文见仓库根目录 LICENSE。项目中还包含以下第三方库:

  • inih(© 2009–2020 Ben Hoyt,BSD 3-Clause)
  • LZMA SDK(公有领域)
  • MurmurHash3(Austin Appleby 实现,公有领域)
  • getopt for MSVC(公有领域)
  • SQLite3(公有领域)

以上第三方库源码分别位于 src/third-party/ 下的 inih、lzma、sqlite3 与 zlib 等目录中。如需为商业用途获取 mGBA 的商业授权,文档建议通过官方邮箱联系版权方。

十、延伸阅读

  • 英文主文档:README.md;另有德文 README_DE.md、日文 README_JP.md、简体中文 README_ZH_CN.md 等本地化版本。
  • 构建配置全文:CMakeLists.txt;平台工具链脚本位于 src/platform/cmake/。
  • GB 存储控制器实现:src/gb/mbc/(入口 src/gb/mbc.c)。
  • GBA 外设与保存:Savedata 检测见 src/gba/savedata.c,联机线驱动见 src/gba/sio/。
  • 调试与脚本:GDB stub 见 src/debugger/gdb-stub.c,Lua 脚本引擎见 src/script/。
  • 游戏开发

【免费下载链接】mgba

mGBA Game Boy Advance Emulator

项目地址:https://gitcode.com/gh_mirrors/mg/mgba
点击查看免费下载

相关推荐

上一篇:Niv:彻底解放Nix项目依赖管理的终极方案
下一篇:终极发动机模拟器指南:用开源软件体验真实引擎轰鸣

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询