用 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 将模拟器的线程分离出去,理论上在手机中应该也能全速模拟

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

7240 次点击
所在节点    分享创造
55 条回复
eivs
2020-04-07 11:32:55 +08:00
这个感觉更流程一些

https://github.com/bfirsh/jsnes
wanguorui123
2020-04-07 14:16:26 +08:00
666
baxtergu
2020-04-07 16:50:46 +08:00
在 github 发现了这个仓库看了下代码,一开始以为是对 jsnes 的 ts 实现,后来发现好像不是。不过楼主厉害 一个月能做成这样,666
sivacohan
2020-04-07 16:54:16 +08:00
@Mohanson 我支持了一个小额赞助~
yun77op
2020-04-07 17:07:43 +08:00
厉害,可以尝试下用 assemblyscript 把 ts 转成 WebAssembly
Mohanson
2020-04-07 17:13:38 +08:00
@sivacohan 天啦噜, 这是我收到过最大的一笔赞助费! 谢谢老板(认真
exceptionplayer1
2020-04-07 17:37:06 +08:00
真厉害,大佬
lneoi
2020-04-07 17:56:27 +08:00
厉害厉害
boks
2020-04-07 18:04:23 +08:00
牛逼,我最近刚好也想搞这个。
lights
2020-04-07 18:10:13 +08:00
重装机兵在国内真的好有名啊
esw
2020-04-07 19:37:35 +08:00
@eivs jsnes 之前看过源码,不过 es5 看得脑阔疼
esw
2020-04-07 19:37:54 +08:00
@yun77op js 的动态特性不一定能转把?
nazhenhuiyi294
2020-04-08 09:55:18 +08:00
有点流批
uestcfei
2020-04-09 11:26:08 +08:00
这个是没有支持所有的 nes 格式的吗?我下载的有一些 nes 的游戏,运行提示:Unsupported mapper: 150,file 看了一下,没啥区别啊。和好奇这个 nes 文件的格式。
esw
2020-04-11 12:20:23 +08:00
@uestcfei 没有,nes 有几百种 mapper,大部分 mapper 逻辑都是不同的,所以要全支持的话相当于要实现上百颗芯片的逻辑,这是非常耗时耗力的,所以目前只支持了任天堂官方几个常用的 mapper 和重装机兵的 mapper:mapper 0-4,mapper 74

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

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

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

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

© 2021 V2EX