那些游戏模拟器是怎么实现的,比如最近上架 app store 的 delta

158 天前
 rookiemaster

还有比如 yuzu 模拟器,他们是怎么实现的,有什么实现框架吗

4111 次点击
所在节点    程序员
29 条回复
youyouzi
157 天前
我比较关心的是有什么好的游戏下载网站
jisuowei
157 天前
djasdjds
157 天前
@jisuowei #22 这个好
liangye115
157 天前
@jisuowei #22 这个是真不错
youyouzi
157 天前
大佬牛皮
chobitssp
157 天前
@Chad0000 雷蛇骑仕 v2
rookiemaster
157 天前
@iX8NEGGn 能求个学习路线嘛,感谢
iX8NEGGn
157 天前
需要一点汇编和冯诺依曼体系架构基础,无需深入,了解一些常见概念就行,比如:

- 内存单元、寄存器、IO 设备。
- 指令集、寻址模式、寻址空间。
- 地址总线、数据总线、控制总线。
- MMIO (内存映射 IO )、DMA (直接内存访问)。
- 补码、溢出、端序、堆栈、内存页、指令周期、CPU 复位等其他概念。
- 中断、中断向量表、中断例程、可屏蔽中断、不可屏蔽中断等关于中断的概念。

这里有个交互式学习 6502 ( NES 使用的 CPU )汇编的网站: https://skilldrick.github.io/easy6502/


比较系统的教程推荐:

- 中文教程,JS 实现
- 地址: https://www.jianshu.com/p/d12426ebc2cb
- 代码: https://github.com/qpalzmqaz123/tsnes

- 英文教程,Rust 实现
- 地址: https://bugzmanov.github.io/nes_ebook
- 代码: https://github.com/bugzmanov/nes_ebook

- 中文教程,C 实现
- 地址: https://github.com/dustpg/BlogFM/issues?page=2
- 代码: https://github.com/dustpg/StepFC

- 英文视频教程,C 实现
- 地址: https://www.youtube.com/playlist?list=PLrOv9FMX8xJHqMvSGB_9G9nZZ_4IgteYf
- 代码: https://github.com/OneLoneCoder/olcNES

- 英文视频,Go 实现
- 地址: <amp-youtube data-videoid="V6VP-2aIcSc" layout="responsive" width="480" height="270"></amp-youtube> - 代码: https://github.com/BrianWill/nes
注:这个 Go 实现视频并不是教程,作者批判“面向对象”中的过度设计,它把 Github 一个高星 Go 实现的 NES 模拟器改造成面向过程,评论区说很多人说这是他看过的最简单 NES 模拟器实现,我没有深入看,你如果熟悉 Go 的话可以看下。


教程可以都看一下,代码挑一个你熟悉的语言就行,再给你挑几个比较简单的实现:

- Go 实现: https://github.com/fogleman/nes
- C# 实现: https://github.com/wcabus/nes-sharp
- C# 实现: https://github.com/GunshipPenguin/nescafe
- C++ 实现: https://github.com/tiansongyu/6502Emulator


还有一些比较好玩有意思的实现:

- 5000 字节的代码,C 实现 : https://github.com/binji/smolnes
- 子周期精确的模拟,C++ 实现: https://github.com/L-Spiro/BeesNES
- 逻辑门级别的模拟,C++ 实现: https://github.com/emu-russia/breaknes
- 晶体管级别的模拟,C# 实现: https://github.com/SourMesen/VisualNes
- 晶体管级别的模拟,JavaScript 实现: https://github.com/iaddis/metalnes


应该是目前 NES 模拟器最好的实现:

- https://github.com/SourMesen/Mesen
- https://github.com/TASEmulators/fceux

我不是想让你去看它的源码,太复杂估计看不懂,但它们提供 GUI Debug 功能,可以用来辅助调试。


测试 ROM (用来测试你的指令实现是否正确): https://github.com/christopherpow/nes-test-roms


其他一些可能有用的链接:

- Nes 系统介绍: https://www.nesdev.org/NESDoc.pdf
- Nes 系统介绍: https://problemkaputt.de/everynes.htm
- 溢出标志解释: http://www.6502.org/tutorials/vflag.html
- 滚屏渲染原理: https://zhuanlan.zhihu.com/p/464160291https://zhuanlan.zhihu.com/p/464360239
- “精灵零命中”: https://retrocomputing.stackexchange.com/questions/1898/how-can-i-create-a-split-scroll-effect-in-an-nes-game


最详细的参考文档网站: https://www.nesdev.org/wiki/NES_reference_guide ,初学者应该看不懂,因为东西太多太分散,一下就在其中迷路了。
wangmn
156 天前

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1035034

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX