周末在 GitHub 上看到有人把原版的《超级玛丽》汇编加上了详细的注释: https://gist.github.com/1wErt3r/4048722,差不多算是开源了吧:)
于是想起之前捣鼓的一个玩具 《机器指令翻译成 JavaScript 》,做了一些改进,加上了 NES 的接口,例如图像、声音、手柄等。
然后和之前文中说的一样,将 6502 ASM 「翻译」成 C,然后再通过 emscripten 「编译」成 JavaScript:

演示: https://www.etherdream.com/FunnyScript/smb-js/game.html
由于最新版的浏览器会把 asm.js 代码自动转成 WebAssembly,所以部分浏览器初始化比较慢,比如 Chrome 启动需要等好几秒。像 FireFox 会缓存 asm.js 的解析,所以只有首次加载会慢。
需要注意的是,这不是模拟器!最明显的特征,就是性能。
点击 Benchmark 按钮可测试游戏逻辑的极限 FPS,目前最快的是 Firefox,在我笔记本上可以跑到 19 万 FPS !就算 IE10 也能跑到 600 FPS。( IE10 以下的浏览器不支持)
当然,这还只是没做任何性能优化的结果,之后还会尝试更好的翻译方案,比如指令层的 call/jump 尽可能翻译成代码层的函数调用、分支代码等。希望能达到 50 万 FPS 以上 😀
1
missdeer 2018 年 1 月 23 日
这一波 666
|
2
toou123 2018 年 1 月 23 日
小心被任天堂告了...(手动笑哭)
|
3
ljbljb007 2018 年 1 月 23 日
有 bug 啊 带子弹的玛丽被小怪碰一下不是变成没子弹的玛丽吗? 这里怎么直接变小了?
|
4
zjcqoo OP @ljbljb007 原版的超级玛丽在线模拟器: https://jsnes.fir.sh/run/Super%20Mario%20Bros.%20(JU)%20(PRG0)%20[!].nes
|
5
imdoge 2018 年 1 月 23 日
好难跳……
另外按着前进怎么就跳不高。。难道我需要机械键盘 |
6
jiqing 2018 年 1 月 23 日
我一直在看关于 6502 模拟器的资料,想用 Java 写一个,看底层看得相当蛋疼
|
7
tinytin 2018 年 1 月 23 日
竟然连第一关都过不去了。。。。
|
8
civet 2018 年 1 月 23 日
看到楼上几位同学,好像还没发现 B 键的用处……
|
9
northisland 2018 年 1 月 23 日
一不小心就点了 2 下收藏
|
10
droiz 2018 年 1 月 23 日
Firefox 太可怕了,我的 2014 年中独显 macbookpro,ff 可以跑 214285FPS,chrome 只有 28407FPS
|
11
basstk 2018 年 1 月 23 日
勾起了小时候的回忆,厉害了我的哥
|
12
goldenlove 2018 年 1 月 23 日
游戏不错,但再也找不回当时的感觉了~
可支持手柄不? |
13
cy97cool 2018 年 1 月 23 日
强烈建议加一个存档功能。。。
|
14
zjcqoo OP @goldenlove 可以支持。改天我加上。
|
16
gluttony 2018 年 1 月 23 日
|
17
newtype0092 2018 年 1 月 23 日
@ljbljb007 你玩到山寨版了
|
18
luoway 2018 年 1 月 23 日
nice!
跳是 I 键 蹲是哪个键? |
19
qipan0321 2018 年 1 月 23 日
看了楼主的博客园,真的强!
|
20
MonoLogueChi 2018 年 1 月 23 日 via Android
建议加上虚拟按键,方便在手机上玩
|
21
lneoi 2018 年 1 月 23 日
这个可真的是会被告...
|
22
zjcqoo OP |
23
master13 2018 年 1 月 23 日
厉害厉害!
|
24
fy 2018 年 1 月 23 日
大概这就是大佬吧 膜拜
|
25
xi4ohz 2018 年 1 月 23 日
同看了楼主的博客园,真的强!
|
26
300 2018 年 1 月 23 日
我只有 43290FPS /(ㄒoㄒ)/~~
|
27
zhouyou457 2018 年 1 月 23 日 via iPhone
7p 只有 2338fps ……
|
28
woffee 2018 年 1 月 23 日
好巧妙的方法
|
29
a570295535 2018 年 1 月 23 日
一般屌,如果改成 [多人在线玛丽奥跑酷] 就真屌了
|
30
linap 2018 年 1 月 23 日 via Android
s8+ 18200fps
|
31
pluto1 2018 年 1 月 23 日
Safari 随手跑了一下只有 2600。。吓得我赶紧打开 Firefox 看了下,19W+ 。。还以为电脑已经落后时代那么多了 2333
|
32
ericFork 2018 年 1 月 23 日
能不能把 I 和 O 键反过来……因为这个死了好多次了
|
33
yagnqionggo 2018 年 1 月 23 日
太厉害了
|
34
abeholder 2018 年 1 月 23 日
膜拜大佬 。
|
35
zenze 2018 年 1 月 23 日
玩了好久,谢谢大佬!
|
36
kran 2018 年 1 月 23 日 via iPhone
nes 图像是怎么做的?
|
37
morethansean 2018 年 1 月 23 日 via iPhone
既然这个帖子变成了 benchmark ...
iPhoneX: 2570 Pixel 2: 18522 为啥差距这么大... |
39
zjcqoo OP @pluto1
@morethansean 现在整个游戏逻辑最终在一个 JS function 里,函数越大优化开销是指数上升的。有些浏览器快是因为支持 asm.js ,它有专门的优化策略,和普通 JS 不太一样。 以后会考虑拆成多个小 function,这样性能会提高很多。 |
41
jonirrings 2018 年 1 月 23 日
兄弟干得不错啊。来看看这个 http://koute.github.io/pinky-web/
看看能不能把 Pixelated 加上 |
43
xx314327475 2018 年 1 月 23 日
打了一关 奖人还在熟悉的地方 谢谢作者
|
46
zgl2007dj 2018 年 1 月 23 日
666
|
47
zjcqoo OP @kran 可以看下原始的汇编程序: https://gist.github.com/1wErt3r/4048722 这里面包含了 指令+数据,贴图不在里面。我就是对照着翻译,并不关心动态数据是怎么产生的。
|
48
toan 2018 年 1 月 23 日 via Android
然后看了楼主博客的热文《一根网线发起的攻击》,哈哈哈,楼主真是牛,创新力,创造力,动手力真是个强!哈哈哈,服了!
|
50
cczy 2018 年 1 月 24 日
git 链接错了?
|
51
sammo 2018 年 1 月 24 日 via iPhone
好吃不腻
|
52
maemolee 2018 年 1 月 24 日
吊炸天啊这个 www
|
54
meanmachine 2018 年 1 月 24 日 via Android
既然都在 benchmark...s7e 4w
|
55
Creabine 2018 年 1 月 24 日
厉害了
|
56
Immortal 2018 年 1 月 24 日
厉害 不过更被楼主博客内容吸引
|
57
lizhenda 2018 年 1 月 24 日
真心厉害了
|
58
ariesjia 2018 年 1 月 24 日
太强大了 厉害厉害
|
59
doubleflower 2018 年 1 月 24 日
能自定义键就好了,这个 IO 太反人类了,建议 J 发子弹,K 跳
|
60
yesqu 2018 年 1 月 24 日
chrome 49969FPS
|
61
lancerly 2018 年 1 月 24 日
楼主好强!
|
62
subpo 2018 年 1 月 24 日
收藏了!第一次看到在 js 上模拟一个电脑的 cpu 内存的时候觉得无比高大上
|
63
yuankui 2018 年 1 月 24 日
跪拜
|
64
dd0754 2018 年 1 月 24 日 via Android
大佬,给跪
|
65
think2011 2018 年 1 月 24 日
大佬 大佬
|
66
aksoft 2018 年 1 月 24 日
求坦克大战 和魂多罗~~
|
67
jedihy 2018 年 1 月 25 日 via iPhone
楼主有没有兴趣来微软西雅图?
|