用 Typescript 写了个 NES 模拟器

2020-04-06 13:48:21 +08:00
 esw

假期无聊想着搞一个 NES 模拟器玩玩,目标在浏览器中运行,断断续续搞了一个月之后基本五脏俱全了,声音和图像都没啥大问题

github 地址:tsnes

在线演示地址:tsnes-demo

当初做模拟器的时候网上也找不到完整的入门教程,所以干脆就自己抽空慢慢更新教程了:NES 模拟器开发教程

模拟器效果图:

重装机兵

Mario1

我的 18 款 MBP i7 CPU,在 Chrome 中运行 CPU 占用大概 70%,所以理论上 i5 应该也可以全速模拟。

另外由于音频和绘图也会占用不少 CPU,所以如果采用 Web worker 将模拟器的线程分离出去,理论上在手机中应该也能全速模拟

由于我是以库的形式进行开发的,所以没有花心思美化页面(~~主要还是懒~~)

7438 次点击
所在节点    分享创造
55 条回复
esw
2020-04-06 16:24:02 +08:00
@firefox12 对,首先开发 CPU,使用 http://nickmass.com/images/nestest.nes 来开发,它有 log 可以对照: http://www.qmtpro.com/~nes/misc/nestest.log ,这样就可以一条指令一条指令地开发,同时用 log 来检测错误,最终整个文件正常运行完就说明 CPU 大部分工作开发完了,然后使用同样的方法,一点一点开发 PPU
Arrowing
2020-04-06 17:10:24 +08:00
重装机兵好评,upupup
Warder
2020-04-06 17:22:01 +08:00
很强,一个月就做好了啊
mengkun
2020-04-06 18:15:26 +08:00
太强了……
lbyo
2020-04-06 19:46:00 +08:00
收下我的膝盖
superliwei
2020-04-06 20:05:57 +08:00
很强。。。
esw
2020-04-06 22:14:49 +08:00
@Warder 不算完全做好,nes mapper 太多了,简直就是无底洞,目前只完成了一些常用 mapper
esw
2020-04-06 22:15:21 +08:00
@Mohanson 学习了!
Mohanson
2020-04-06 22:21:59 +08:00
@esw 哈哈, 我还写过雅达利街机的模拟器: https://github.com/mohanson/space-invaders, 这些游戏机因为没有操作系统所以模拟起来比较容易, 到 PS 时代后的机器就不好模拟了, 去年想过做 switch emu, 调研了一下就立马放弃了.
Meltdown
2020-04-06 22:23:50 +08:00
膜拜
zhw2590582
2020-04-06 22:34:08 +08:00
可以大概说说怎么个原理吗
luny
2020-04-06 23:45:37 +08:00
学习了!
Archeb
2020-04-07 08:02:09 +08:00
楼主🐮🍺!
happy8109
2020-04-07 09:37:09 +08:00
实现个实时存盘吧
esw
2020-04-07 09:47:28 +08:00
@Mohanson 是啊,资料太少,其他主机基本都没有 nesdev 这样全的网站了
esw
2020-04-07 09:48:19 +08:00
@zhw2590582 其实就是软件模拟 NES 里面芯片的逻辑,然后电信号变成函数调用
esw
2020-04-07 09:48:54 +08:00
@happy8109 存盘已经实现了,现在每 3 秒保存在 localstorage 里面
esw
2020-04-07 09:49:40 +08:00
@happy8109 刚看错了,才反应过来你说的是实时存档,这个确实还没搞
augustheart
2020-04-07 10:35:49 +08:00
@esw gba 啊,唯一一台主机发售前就让人给模拟了的游戏机……
UnknownR
2020-04-07 10:55:50 +08:00
卧槽🐂🍺,star 一个学习一下

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

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

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

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

© 2021 V2EX