假期无聊想着搞一个 NES 模拟器玩玩,目标在浏览器中运行,断断续续搞了一个月之后基本五脏俱全了,声音和图像都没啥大问题
github 地址:tsnes
在线演示地址:tsnes-demo
当初做模拟器的时候网上也找不到完整的入门教程,所以干脆就自己抽空慢慢更新教程了:NES 模拟器开发教程
模拟器效果图:
重装机兵

Mario1

我的 18 款 MBP i7 CPU,在 Chrome 中运行 CPU 占用大概 70%,所以理论上 i5 应该也可以全速模拟。
另外由于音频和绘图也会占用不少 CPU,所以如果采用 Web worker 将模拟器的线程分离出去,理论上在手机中应该也能全速模拟
由于我是以库的形式进行开发的,所以没有花心思美化页面(~~主要还是懒~~)
1
zhuawadao 2020 年 4 月 6 日
别让楼主灰心,支持一下~
|
2
Mohanson 2020 年 4 月 6 日 |
3
lzdyes 2020 年 4 月 6 日
厉害了!
|
4
yuuko 2020 年 4 月 6 日
厉害了
|
5
anUglyDog 2020 年 4 月 6 日
强
|
6
anUglyDog 2020 年 4 月 6 日
你这做好看点可以引流啊,太有情怀了
|
7
idealhs 2020 年 4 月 6 日
挺好奇,为什么如此低性能的一个机器,浏览器的模拟器跑起来这么吃资源啊
|
9
LukeChien 2020 年 4 月 6 日 via Android
好像见过 WebAssembly 做的,那个性能会好一些,楼主同样🐮🍺
|
10
zj 2020 年 4 月 6 日
这个要支持下。
|
11
across 2020 年 4 月 6 日
看了文档还没写到显示部分,是用 webgl 画?
|
13
renmu 2020 年 4 月 6 日 via Android
我不当勇士了,我要回家修战车
|
15
esw OP @idealhs NES PPU 时钟 5MHZ 以上,也就是说模拟的时候每秒要执行 500w 以上次运算,而且每次运算需要很多逻辑来完成,再加上 JS 性能损耗,所以比较费 CPU
|
17
firefox12 2020 年 4 月 6 日
很牛逼 我想问是不是要把 cpu ppu 系统本身全模拟出来 再做?
|
19
firefox12 2020 年 4 月 6 日
@esw 但是 没有模拟 cpu 和 ppu 你怎么让卡带里的内容跑起来? 我的看法 是读卡带文件 ,然后让模拟 cpu 开始运行里面的二进制,然后让结果显示出来吧。
|
20
zwxharry 2020 年 4 月 6 日
重装机兵回忆杀,红狼,尼娜
|
21
esw OP @firefox12 对,首先开发 CPU,使用 http://nickmass.com/images/nestest.nes 来开发,它有 log 可以对照: http://www.qmtpro.com/~nes/misc/nestest.log ,这样就可以一条指令一条指令地开发,同时用 log 来检测错误,最终整个文件正常运行完就说明 CPU 大部分工作开发完了,然后使用同样的方法,一点一点开发 PPU
|
22
Arrowing 2020 年 4 月 6 日
重装机兵好评,upupup
|
23
Warder 2020 年 4 月 6 日
很强,一个月就做好了啊
|
24
mengkun 2020 年 4 月 6 日
太强了……
|
25
hive 2020 年 4 月 6 日
收下我的膝盖
|
26
superliwei 2020 年 4 月 6 日
很强。。。
|
29
Mohanson 2020 年 4 月 6 日
@esw 哈哈, 我还写过雅达利街机的模拟器: https://github.com/mohanson/space-invaders, 这些游戏机因为没有操作系统所以模拟起来比较容易, 到 PS 时代后的机器就不好模拟了, 去年想过做 switch emu, 调研了一下就立马放弃了.
|
30
Meltdown 2020 年 4 月 6 日 via Android
膜拜
|
31
zhw2590582 2020 年 4 月 6 日
可以大概说说怎么个原理吗
|
32
luny 2020 年 4 月 6 日
学习了!
|
33
Archeb 2020 年 4 月 7 日 via iPhone
楼主🐮🍺!
|
34
happy8109 2020 年 4 月 7 日
实现个实时存盘吧
|
36
esw OP @zhw2590582 其实就是软件模拟 NES 里面芯片的逻辑,然后电信号变成函数调用
|
39
augustheart 2020 年 4 月 7 日
@esw gba 啊,唯一一台主机发售前就让人给模拟了的游戏机……
|
40
UnknownR 2020 年 4 月 7 日
卧槽🐂🍺,star 一个学习一下
|
41
eivs 2020 年 4 月 7 日
|
42
wanguorui123 2020 年 4 月 7 日
666
|
43
baxtergu 2020 年 4 月 7 日
在 github 发现了这个仓库看了下代码,一开始以为是对 jsnes 的 ts 实现,后来发现好像不是。不过楼主厉害 一个月能做成这样,666
|
45
yun77op 2020 年 4 月 7 日
厉害,可以尝试下用 assemblyscript 把 ts 转成 WebAssembly
|
47
exceptionplayer1 2020 年 4 月 7 日
真厉害,大佬
|
48
lneoi 2020 年 4 月 7 日
厉害厉害
|
49
boks 2020 年 4 月 7 日
牛逼,我最近刚好也想搞这个。
|
50
lights 2020 年 4 月 7 日
重装机兵在国内真的好有名啊
|
53
nazhenhuiyi294 2020 年 4 月 8 日
有点流批
|
54
uestcfei 2020 年 4 月 9 日
这个是没有支持所有的 nes 格式的吗?我下载的有一些 nes 的游戏,运行提示:Unsupported mapper: 150,file 看了一下,没啥区别啊。和好奇这个 nes 文件的格式。
|