红白机游戏《超级玛丽》重编译成 JavaScript 代码

2018-01-23 11:10:20 +08:00
 zjcqoo

周末在 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 以上 😀

11570 次点击
所在节点    分享创造
67 条回复
lancerly
2018-01-24 11:41:27 +08:00
楼主好强!
subpo
2018-01-24 11:48:32 +08:00
收藏了!第一次看到在 js 上模拟一个电脑的 cpu 内存的时候觉得无比高大上
yuankui
2018-01-24 11:49:33 +08:00
跪拜
dd0754
2018-01-24 12:13:02 +08:00
大佬,给跪
think2011
2018-01-24 12:21:55 +08:00
大佬 大佬
aksoft
2018-01-24 13:04:03 +08:00
求坦克大战 和魂多罗~~
jedihy
2018-01-25 01:36:32 +08:00
楼主有没有兴趣来微软西雅图?

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

https://yangjunhui.monster/t/425155

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

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

© 2021 V2EX