概要
这是一个用 Go 编写的 NES 模拟器。
标题屏幕
http://www.michaelfogleman.com/static/nes/
依赖性
<code>github.com/go-gl/gl/v2.1/gl github.com/go-gl/glfw/v3.1/glfw github.com/gordonklaus/portaudio </code>
portaudio-go 依赖项需要在你的系统上安装 PortAudio。
要构建 portaudio-go,你必须先安装 PortAudio 的开发头和库。有些系统提供了这样的软件包,例如,在 Ubuntu 上,你可以运行 apt-get install portaudio19-dev。在其他系统上,你可能需要从源代码安装。
在 Mac 上,你可以使用 homebrew。
brew install portaudio
安装
go get 命令会自动获取上面列出的依赖项,编译二进制文件并将其放置在 $GOPATH/bin 目录下。
go get github.com/fogleman/nes
使用方法
nes [rom_file|rom_directory]。
如果没有指定参数,程序将在当前工作目录中查找 rom 文件。
如果指定了一个目录,程序将在该目录中查找 rom 文件。
如果指定了一个文件,程序将运行该 rom 文件。
对于1和2,程序将显示一个菜单屏幕来选择要播放的 rom 文件。缩略图是从在线数据库中下载的,并以 rom 文件的 md5 和为键。
控件
支持操纵杆,尽管按钮映射目前是硬编码的。下面是键盘控制。
Nintendo | Emulator |
---|---|
Up, Down, Left, Right | Arrow Keys |
Start | Enter |
Select | Right Shift |
A | Z |
B | X |
A (Turbo) | A |
B (Turbo) | S |
Reset | R |
Mappers
实现了以下的映射器:
- NROM (0)
- MMC1(1)
- UNROM (2)
- CNROM (3)
- MMC3(4)
- AOROM (7)
这些映射器覆盖了大约 85% 的 NES 游戏。我希望能尽快实现更多的映射器。要查看哪些游戏应该可以使用,请参考这个列表。
已知问题
- 在 PPU 的时间上有一些小问题,但大多数游戏都能正常运行。
- APU 的模拟并不完美,但也不差。
文档
有兴趣编写自己的模拟器吗?对 NES 的内部结构很好奇?这里有一些不错的资源:
(The first version translated by vz on 2020.10.15)