ducalex/retro-go
GitHub: ducalex/retro-go
一款面向 ODROID-GO 等 ESP32 设备的复古游戏模拟器固件,集成多平台模拟器并提供丰富的游戏管理与存档功能。
Stars: 1243 | Forks: 329
# 目录
- [描述](#description)
- [安装](#installation)
- [使用说明](#usage)
- [常见问题](#issues)
- [开发](#development)
- [鸣谢](#acknowledgements)
- [许可证](#license)
# 描述
Retro-Go 是一个用于在基于 ESP32 的设备上玩复古游戏的固件(官方支持的设备有
ODROID-GO 和 MRGC-G32,请查看[此列表了解其他设备](components/retro-go/README.md))。
该项目由一个启动器和半打应用程序组成,这些程序经过了深度
优化,在不降低兼容性的前提下减少了 CPU、内存和 flash 的需求!
### 支持的系统:
- Nintendo:**NES、SNES(较慢)、Gameboy、Gameboy Color、Game & Watch**
- Sega:**SG-1000、Master System、Mega Drive / Genesis、Game Gear**
- Coleco:**Colecovision**
- NEC:**PC Engine**
- Atari:**Lynx**
- 其他:**DOOM**(包含 mod!)
### Retro-Go 功能:
- 游戏内菜单
- 收藏夹和最近游玩
- GB 调色板、RTC 调整与存档
- NES 调色板、PAL roms、支持 NSF
- 更多模拟器和应用程序
- 缩放和过滤选项
- 更好的性能和兼容性
- Turbo 速度 / 快进
- 可自定义的启动器
- 封面图和存档状态预览
- 每个游戏多个存档位
- Wifi 文件管理器
- 以及更多!
### 截图

# 安装
### ODROID-GO
1. 从[发布页面](https://github.com/ducalex/retro-go/releases/)下载 `retro-go_1.x_odroid-go.fw` 并将其复制到 SD 卡的 `/odroid/firmware` 目录下。
2. 按住 B 键的同时给设备上电。
3. 在文件列表中选择 retro-go 并进行刷写。
### MyRetroGameCase G32 (GBC)
1. 从[发布页面](https://github.com/ducalex/retro-go/releases/)下载 `retro-go_1.x_mrgc-g32.fw` 并将其复制到 SD 卡的 `/espgbc/firmware` 目录下。
2. 按住 MENU 键(音量旋钮)的同时给设备上电。
3. 在文件列表中选择 retro-go 并进行刷写。
### 其他设备
1. 从[发布页面](https://github.com/ducalex/retro-go/releases/)下载适用于您设备的 .img 文件。
2. 使用 USB 线缆将您的设备连接到电脑。
3. 使用 esptool 刷入镜像:
- [命令行](https://github.com/espressif/esptool/releases/):运行 `esptool.py write_flash --flash_size detect 0x0 retro-go_*.img`
- [网页版](https://espressif.github.io/esptool-js/):连接您的设备,点击 Erase Flash,然后选择您的 .img 文件并将地址设置为 0x0,最后点击 Program)
您的特定设备可能需要额外的步骤(例如开机时按住某个按钮),或需要不同的 esptool 标志,亦或是特殊的数据线。如果上述步骤失败,您可能需要向制造商询问如何刷写新固件的说明!
如果您的设备尚未被支持,或者没有预编译版本可用,您可以查看[开发部分](#Development)以获取有关如何为您的设备进行构建的更多信息。
# 使用说明
## 游戏封面 / 图像
游戏封面应放置在 SD 卡根目录下的 `romart` 文件夹中。您可以[在此处](https://github.com/ducalex/retro-go-covers)获取预制的封面包。Retro-Go 也兼容旧版的 Go-Play romart 包。
您可以通过创建 PNG 图像(160x168,8位)来添加缺失的封面图。支持两种命名方案:
- 基于文件名:`/romart/nes/Super Mario.png`(注意*不*包含 rom 扩展名)
- 基于 CRC32:`/romart/nes/A/ABCDE123.png`,其中 `nes` 与 rom 文件夹名称相同,`ABCDE123` 是游戏的 CRC32(在启动器中按 A -> Properties 即可找到),而 `A` 是 CRC32 的第一个字符
_注意:基于 CRC32 的方式(预制包使用的方式)比基于名称的方式慢得多!这种方式之所以有用,是因为即使游戏的 CRC 相同,文件名也可能千差万别,但如果您自己生成图像,我建议您使用基于文件名的格式,并删除 SD 卡上所有基于 CRC 的图像,以提高响应速度。_
## BIOS 文件
某些模拟器支持加载 BIOS。文件应按以下方式放置:
- GB:`/retro-go/bios/gb_bios.bin`
- GBC:`/retro-go/bios/gbc_bios.bin`
- FDS:`/retro-go/bios/fds_bios.bin`
- MSX:在 `/retro-go/bios/msx/` 文件夹中放入:`MSX.ROM` `MSX2.ROM` `MSX2EXT.ROM` `MSX2P.ROM` `MSX2PEXT.ROM` `FMPAC.ROM` `DISK.ROM` `MSXDOS2.ROM` `PAINTER.ROM` `KANJI.ROM`
## Game & Watch
roms 必须使用 [LCD-Game-Shrinker](https://github.com/bzhxx/LCD-Game-Shrinker) 打包,相关教程可以[在此找到](https://gist.github.com/DNA64/16fed499d6bd4664b78b4c0a9638e4ef)。
## Wifi
要使用 wifi,您需要创建一个 `/retro-go/config/wifi.json` 配置文件。您最多可以定义 4 个不同的网络,随后可以在菜单中选择。其内容应如下所示:
```
{
"ssid0": "my-network",
"password0": "my-password",
"ssid1": "my-other-network",
"password1": "my-password",
"ssid2": "my-third-network",
"password2": "my-password",
"ssid3": "my-last-network",
"password3": "my-password"
}
```
### 时间同步
时间同步会在成功连接到网络后立即在启动器中进行。
这是通过联系 `pool.ntp.org` 的 NTP 完成的,目前无法禁用。
时区可以在启动器的选项菜单中进行配置。
### 文件管理器
您可以在 retro-go 的 *about* 菜单中找到设备的 IP 地址。然后在您的 PC 上访问
http://192.168.x.x/ 即可打开文件管理器。
## 外部 DAC(耳机)
Retro-Go 支持[专为 ODROID-GO 设计的外部 DAC mod](https://github.com/backofficeshow/odroid-go-audio-hat)
它允许通过耳机输出高质量音频。您可以在菜单中的 `Audio Out: Ext DAC` 选项进行切换。
# 常见问题
### 黑屏 / 无限重启
Retro-Go 通常会自动检测并解决应用程序的崩溃和死机。但是,如果您确实
陷入了无限重启,您可以在设备上电时按住 `DOWN` 键以返回启动器。
### 音质
GO 的音量衰减不正确,导致较大的音量过于刺耳,
而较小的音量则因为 DAC 分辨率问题而产生失真。改善音频的一个快速方法是剪断其中
一根扬声器线,并串联一个 `33 欧姆(或附近阻值)`的电阻。焊接效果更好,但非必需,
将线紧紧拧在一起也能很好地工作。
[更复杂的解决方案可以在此查看。](https://wiki.odroid.com/odroid_go/silent_volume)
或者,您可以使用本文档前面提到的耳机 DAC mod。
### Game Boy SRAM *(即 存档/电池/备份 RAM)*
在 Retro-Go 中,存档状态将为您提供最佳且最可靠的存档体验。话虽如此,如果您
需要或想要 SRAM 存档,请继续阅读。SRAM 格式与 VisualBoyAdvance 兼容,因此可以
用于导入或导出存档。
您可以在选项菜单中配置自动保存 SRAM 的功能。较长的延迟会减少卡顿,但代价是
如果在关机时过快断电可能会导致数据丢失。还要注意,当*恢复*游戏时,如果存在存档状态,Retro-Go 将优先
读取存档状态。
### ZIP 文件
现在大多数 Retro-Go 应用程序都支持 ZIP 文件。ZIP 压缩包应仅包含一个 ROM 文件,且不能包含其他任何内容。不幸的是,ZIP 支持还取决于可用内存,较大的 ROM 在某些设备上可能会加载失败。
# 开发
如果您希望构建或修改 Retro-Go,您可以在以下文档中找到帮助:
- 构建说明请见 [BUILDING.md](BUILDING.md)
- 主题说明请见 [THEMING.md](THEMING.md)
- 移植说明请见 [PORTING.md](PORTING.md)
- 翻译说明请见 [LOCALIZATION.md](LOCALIZATION.md)
# 鸣谢
- NES/GBC/SMS 模拟器和基础库最初来自于由 crashoverride、Nemo1984 等人开发的[官方 Go-Play 固件](https://github.com/othercrashoverride/go-play) 的“Triforce”分支。
- 启动器的设计最初受到/借鉴自 [pelle7 的 go-emu](https://github.com/pelle7/odroid-go-emu-launcher)。
- PCE-GO 是 [HuExpress](https://github.com/kallisti5/huexpress) 的一个分支,并参考了 [pelle7 的移植版](https://github.com/pelle7/odroid-go-pcengine-huexpress/)。
- Lynx 模拟器是 [libretro-handy](https://github.com/libretro/libretro-handy) 的一个移植版。
- SNES 模拟器是 [Snes9x 2005](https://github.com/libretro/snes9x2005) 的一个移植版。
- DOOM 引擎是 [PrBoom 2.5.0](http://prboom.sourceforge.net/) 的一个移植版。
- Genesis 模拟器是 bzhxx 开发的 [Gwenesis](https://github.com/bzhxx/gwenesis/) 的一个移植版。
- Game & Watch 模拟器是 bzhxx 开发的 [lcd-game-emulator](https://github.com/bzhxx/lcd-game-emulator) 的一个移植版。
- MSX 模拟器是 Marat Fayzullin 开发的 [fMSX](https://fms.komkon.org/fMSX/) 的一个移植版。
- PNG 支持由 [lodepng](https://github.com/lvandeve/lodepng/) 提供。
- PCE 封面图来自 [Christian_Haitian](https://github.com/christianhaitian)。
- 部分图标来自 [Rokey](https://iconarchive.com/show/seed-icons-by-rokey.html)。
- 背景图片来自 [es-theme-gbz35](https://github.com/rxbrad/es-theme-gbz35)。
- 特别感谢 [RGHandhelds](https://www.rghandhelds.com/) 和 [MyRetroGamecase](https://www.myretrogamecase.com/) 送给我一台 [G32](https://www.myretrogamecase.com/products/game-mini-g32-esp32-retro-gaming-console-1) 设备。
- 感谢 [ODROID-GO](https://forum.odroid.com/viewtopic.php?f=159&t=37599) 社区对 retro-go 开发的鼓励与支持!
# 许可证
本项目中所有内容均采用 [GPLv2 许可证](COPYING),以下组件除外:
- fmsx/components/fmsx (MSX 模拟器,自定义非商业许可证)
- handy-go/components/handy (Lynx 模拟器,zlib 许可证)
引脚定义
| GO 引脚 | PCM5102A 引脚 | |--------|---------| | 1 | GND | | 2 | - | | 3 | LCK | | 4 | DIN | | 5 | BCK | | 6 | VIN | | 7 | - | | 8 | - | | 9 | - | | 10 | - |标签:ESP32, 固件, 复古游戏, 客户端加密, 嵌入式系统, 游戏机, 物联网