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