mgba-emu/mgba
GitHub: mgba-emu/mgba
跨平台高精度 Game Boy Advance 模拟器,支持 GBC/GB 游戏、GDB 调试、Lua 脚本和多媒体录制功能
Stars: 6829 | Forks: 936
# mGBA
mGBA 是一个用于运行 Game Boy Advance 游戏的模拟器。其目标是在速度和精确度上超越许多现有的 Game Boy Advance 模拟器,并增加其他模拟器缺乏的功能。它同时也支持 Game Boy 和 Game Boy Color 游戏。
最新的新闻和下载可以在 [mgba.io](https://mgba.io/) 找到。
[](https://buildbot.mgba.io)
[](https://hosted.weblate.org/engage/mgba)
## 功能特性
- 高度精确的 Game Boy Advance 硬件支持[[1]](#missing)。
- Game Boy/Game Boy Color 硬件支持。
- 快速模拟。已知即使在低端硬件(如上网本)上也能全速运行。
- Qt 和 SDL 移植版本,分别提供重量级和轻量级前端。
- 本地(同一台计算机)联机线支持。
- 存档类型检测,甚至包括闪存大小[[2]](#flashdetect)。
- 支持带有运动传感器和震动功能的卡带(仅可通过游戏控制器使用)。
- 实时时钟支持,甚至无需配置。
- 支持 Boktai 游戏的太阳能传感器。
- 支持 Game Boy Camera 和 Game Boy Printer。
- 内置 BIOS 实现,以及加载外部 BIOS 文件的能力。
- 使用 Lua 的脚本支持。
- 按住 Tab 键支持 Turbo/快进功能。
- 按住 Backquote(反引号)键支持倒带功能。
- 跳帧,可配置高达 10。
- 截图支持。
- 金手指支持。
- 9 个即时存档槽。即时存档也可以作为截图查看。
- 视频、GIF、WebP 和 APNG 录制。
- e-Reader 支持。
- 可重映射的键盘和游戏手柄控制。
- 从 ZIP 和 7z 文件加载。
- 支持 IPS、UPS 和 BPS 补丁。
- 通过命令行界面和 GDB 远程支持进行游戏调试,兼容 Ghidra 和 IDA Pro。
- 可配置的模拟倒带。
- 支持加载和导出 GameShark 和 Action Replay 快照。
- 适用于 RetroArch/Libretro 和 OpenEmu 的核心。
- 通过 [Weblate](https://hosted.weblate.org/engage/mgba) 提供的多种语言的社区翻译。
- 许多许多其他小功能。
#### Game Boy 映射器
以下映射器已完全支持:
- MBC1
- MBC1M
- MBC2
- MBC3
- MBC3+RTC
- MBC30
- MBC5
- MBC5+Rumble
- MBC7
- M161
- Wisdom Tree (未授权)
- NT "old type" 1 and 2 (未授权合卡)
- NT "new type" (未授权类 MBC5)
- Pokémon Jade/Diamond (未授权)
- Sachen MMC1 (未授权)
以下映射器部分支持:
- MBC6 (缺少闪存写入支持)
- MMM01
- Pocket Cam
- TAMA5 (RTC 支持不完整)
- HuC-1 (缺少红外支持)
- HuC-3 (缺少红外支持)
- Sachen MMC2 (缺少 alternate wiring 支持)
- BBD (缺少 logo 切换)
- Hitek (缺少 logo 切换)
- GGB-81 (缺少 logo 切换)
- Li Cheng (缺少 logo 切换)
- Sintax (缺少 logo 切换)
### 计划中的功能
- 网络多人联机线支持。
- Dolphin/JOY bus 联机线支持。
- MP2k 音频混合,提供比硬件更高品质的声音。
- 用于工具辅助速通的重录支持。
- 全面的调试套件。
- 无线适配器支持。
## 支持的平台
- Windows 7 或更新版本
- OS X 10.9 (Mavericks)[[3]](#osxver) 或更新版本
- Linux
- FreeBSD
- Nintendo 3DS
- Nintendo Switch
- Wii
- PlayStation Vita
其他类 Unix 平台,如 OpenBSD,已知也可以工作,但未经测试且未完全支持。
### 系统要求
要求非常低。任何可以运行 Windows Vista 或更新版本的计算机都应该能够进行模拟。还需要支持 OpenGL 1.1 或更新版本,OpenGL 3.2 或更新版本用于着色器和高级功能。
## 下载
可以在官方网站的 [Downloads][downloads] 部分找到下载。源代码可以在 [GitHub][source] 上找到。
## 控制
控制可以在设置菜单中配置。许多游戏控制器默认应自动映射。默认键盘控制如下:
- **A**: X
- **B**: Z
- **L**: A
- **R**: S
- **Start**: Enter
- **Select**: Backspace
## 编译
编译需要使用 CMake 3.1 或更新版本。已知 GCC、Clang 和 Visual Studio 2019 可用于编译 mGBA。
#### Docker 构建
大多数平台的推荐构建方式是使用 Docker。提供了几个 Docker 镜像,其中包含跨多个平台构建 mGBA 所需的工具链和依赖项。
注意:如果您使用的是 Windows 10 之前的旧版 Windows 系统,您可能需要将 Docker 配置为使用 VirtualBox 共享文件夹,以便将当前的 `mgba` 检出目录正确映射到 Docker 镜像的工作目录。(有关详细信息,请参阅 issue [#1985](https://mgba.io/i/1985)。)
要使用 Docker 镜像构建 mGBA,只需在 mGBA 检出的根目录中运行以下命令:
```
docker run --rm -it -v ${PWD}:/home/mgba/src mgba/windows:w32
```
启动 Docker 容器后,它将生成一个包含构建产物的 `build-win32` 目录。将 `mgba/windows:w32` 替换为其他平台的 Docker 镜像,将生成相应的其他目录。Docker Hub 上提供以下 Docker 镜像:
- 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
如果您想加快构建过程,请考虑添加标志 `-e MAKEFLAGS=-jN` 以使用 `N` 个 CPU 核心对 mGBA 进行并行构建。
#### *nix 构建
要在基于 Unix 的系统上使用 CMake 进行构建,推荐的命令如下:
```
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr ..
make
sudo make install
```
这将构建 mGBA 并将其安装到 `/usr/bin` 和 `/usr/lib`。已安装的依赖项将被自动检测,如果未找到依赖项而禁用的功能将在运行 `cmake` 命令后显示在无法找到它们的警告之后。
如果您使用的是 macOS,步骤略有不同。假设您使用 homebrew 包管理器,获取依赖项并构建的推荐命令是:
```
brew install cmake ffmpeg libzip qt5 sdl2 libedit lua pkg-config
mkdir build
cd build
cmake -DCMAKE_PREFIX_PATH=`brew --prefix qt5` ..
make
```
请注意,您不应在 macOS 上执行 `make install`,因为它无法正常工作。
#### Windows 开发者构建
##### MSYS2
为了在 Windows 上进行开发构建,推荐使用 MSYS2。请遵循其 [网站](https://msys2.github.io) 上的安装步骤。确保您运行的是 32 位版本("MSYS2 MinGW 32-bit")(如果您想为 x86_64 构建,则运行 64 位版本 "MSYS2 MinGW 64-bit")并运行此附加命令(包括大括号)以安装所需的依赖项(请注意,这涉及下载超过 1100MiB 的包,因此需要很长时间):
```
pacman -Sy --needed base-devel git ${MINGW_PACKAGE_PREFIX}-{cmake,ffmpeg,gcc,gdb,libelf,libepoxy,libzip,lua,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)
```
请注意,此适用于 Windows 的 mGBA 构建不适合分发,因为它运行所需的 DLL 是分散的,但非常适合开发。但是,如果需要分发此类构建(例如,用于在没有安装 MSYS2 环境的机器上进行测试),运行 `cpack -G ZIP` 将准备一个包含所有必要 DLL 的 zip 文件。
##### Visual Studio
使用 Visual Studio 构建也是一个类似的复杂设置。首先,您需要安装 [vcpkg](https://github.com/Microsoft/vcpkg)。安装 vcpkg 后,您需要安装几个额外的包:
```
vcpkg install ffmpeg[vpx,x264] libepoxy libpng libzip lua sdl2 sqlite3
```
请注意,此安装不支持 Nvidia 硬件上的硬件加速视频编码。如果您关心这一点,则需要预先安装 CUDA,然后将 `ffmpeg[vpx,x264,nvcodec]` 替换到上一个命令中。
您还需要安装 Qt。不幸的是,由于 Qt 由一家境况不佳的公司拥有和运营,而不是一个合理的组织,因此不再有最新版本的离线开源版安装程序,因此您需要要么退回到 [旧版本安装程序](https://download.qt.io/archive/qt/5.12/5.12.9/qt-opensource-windows-x86-5.12.9.exe)(它要求您创建一个否则毫无用处的帐户,但您可以通过临时设置无效代理或以其他方式禁用网络来绕过),使用在线安装程序(无论哪种方式都需要帐户),或使用 vcpkg 构建(缓慢)。这些都不是很好的选择。对于安装程序,您需要安装适用的 MSVC 版本。请注意,离线安装程序不支持 MSVC 2019。对于 vcpkg,您需要像这样安装它,这将花费相当长的时间,尤其是在四核或更低核心数的计算机上:
```
vcpkg install qt5-base qt5-multimedia
```
接下来,打开 Visual Studio,选择 Clone Repository,然后输入 `https://github.com/mgba-emu/mgba.git`。当 Visual Studio 完成克隆后,转到 File > CMake 并打开检出存储库根目录下的 CMakeLists.txt 文件。从那里,可以像其他 Visual Studio CMake 项目一样在 Visual Studio 中开发 mGBA。
#### 工具链构建
如果您拥有 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 没有硬性依赖项,但是,特定功能需要以下可选依赖项。如果找不到依赖项,这些功能将被禁用。
- Qt 5:用于 GUI 前端。音频需要 Qt Multimedia 或 SDL。
- SDL:用于更基本的前端和 Qt 前端中的游戏手柄支持。推荐使用 SDL 2,但也支持 1.2。
- zlib 和 libpng:用于截图支持和 PNG 存档支持。
- libedit:用于命令行调试器支持。
- ffmpeg 或 libav:用于视频、GIF、WebP 和 APNG 录制。
- libzip 或 zlib:用于加载存储在 zip 文件中的 ROM。
- SQLite3:用于游戏数据库。
- libelf:用于 ELF 加载。
- Lua:用于脚本编写。
- json-c:用于脚本 `storage` API。
SQLite3、libpng 和 zlib 随模拟器包含在内,因此无需先在外部编译它们。
## 脚注
[1] 目前缺失的功能是
- 模式 3、4 和 5 的 OBJ 窗口 ([Bug #5](http://mgba.io/b/5))
[2] 闪存大小检测在某些情况下不起作用。这些可以在运行时配置,但如果遇到这种情况,建议提交 Bug。
[3] 只有 Qt 移植版本才需要 10.9。可能可以在 10.7 或更早版本上构建或运行 Qt 移植版本,但这不是官方支持的。已知 SDL 移植版本可在 10.5 上运行,并且可能在更早的版本上运行。
## 版权
mGBA 版权所有 © 2013 – 2026 Jeffrey Pfau。它根据 [Mozilla Public License version 2.0](https://www.mozilla.org/MPL/2.0/) 分发。许可证副本可在分发的 LICENSE 文件中找到。
mGBA 包含以下第三方库:
- [inih](https://github.com/benhoyt/inih),版权所有 © 2009 – 2020 Ben Hoyt,根据 BSD 3-clause 许可证使用。
- [LZMA SDK](http://www.7-zip.org/sdk.html),属于公共领域。
- Austin Appleby 的 [MurmurHash3](https://github.com/aappleby/smhasher) 实现,属于公共领域。
- [getopt for MSVC](https://github.com/skandhurkat/Getopt-for-Visual-Studio/),属于公共领域。
- [SQLite3](https://www.sqlite.org),属于公共领域。
如果您是游戏发行商并希望许可 mGBA 用于商业用途,请发送电子邮件至 [licensing@mgba.io](mailto:licensing@mgba.io) 了解更多信息。
标签:Bash脚本, Game Boy Advance, GBA模拟器, GDB调试, Ghidra, IDA Pro, Libretro, Lua脚本, RetroArch, rizin, SDL, 云资产清单, 多人联机, 存档管理, 客户端加密, 客户端加密, 怀旧游戏, 掌机游戏, 游戏ROM, 游戏录制, 游戏模拟器, 请求拦截, 逆向工程, 金手指