- 游戏开发
【免费下载链接】mgba
mGBA Game Boy Advance Emulator
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 的按键可在设置菜单中自由配置,大部分手柄插入后会尝试自动映射。默认键盘布局如下:
| 手柄/主机按键 | 键盘按键 |
|---|---|
| A | X |
| B | Z |
| L | A |
| R | S |
| Start | Enter(回车) |
| Select | Backspace(退格) |
其他常用快捷键还包括:按住 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/3dsmgba/switchmgba/ubuntu:xenialmgba/ubuntu:bionicmgba/ubuntu:focalmgba/ubuntu:groovymgba/vitamgba/wiimgba/windows:w32mgba/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参数如下:
| 平台 | 工具链文件 |
|---|---|
| 3DS | src/platform/3ds/CMakeToolchain.txt |
| Switch | src/platform/switch/CMakeToolchain.txt |
| Vita | src/platform/psp2/CMakeToolchain.vitasdk |
| Wii | src/platform/wii/CMakeToolchain.txt |
八、依赖体系与功能开关解析
mGBA没有硬性依赖,所有依赖均为可选:找不到对应库时相关功能自动降级关闭。文档列出的可选依赖如下:
| 依赖 | 作用 | 构建选项(CMakeLists.txt) |
|---|---|---|
| Qt 5 | 图形界面;音频需 Qt Multimedia 或 SDL | BUILD_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 内 ROM | USE_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
相关推荐
mGBA 模拟器完全指南:Game Boy Advance 精确模拟、功能架构与多平台编译实践
mGBA 模拟器完全指南:Game Boy Advance 精确模拟、功能架构与多平台编译实践 mGBA 是一个以高精度、高性能为目标的 Game Boy Ad
游戏开发mGBA 模拟器全指南:Game Boy Advance 核心特性、GB 卡带映射器支持矩阵与多平台编译实战
mGBA 模拟器全指南:Game Boy Advance 核心特性、GB 卡带映射器支持矩阵与多平台编译实战 本文以仓库内的德语版 README( README
游戏开发mGBA模拟器深度体验:解锁Game Boy Advance游戏的全新境界
mGBA模拟器深度体验:解锁Game Boy Advance游戏的全新境界 在复古游戏复兴的浪潮中,mGBA模拟器以其卓越的性能和精准的硬件模拟,成为Game
游戏开发
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考