HTML5技术

四十年前的 6502 CPU 指令翻译成 JS 代码会是怎样 - EtherDream(2)

字号+ 作者:H5之家 来源:H5之家 2017-03-03 13:01 我要评论( )

通过现成的反编译工具,变成 汇编码: $0600 20 06 06 JSR $0606$0603 20 38 06 JSR $0638$0606 20 0d 06 JSR $060d$0609 20 2a 06 JSR $062a$060c 60RTS$060d a9 02LDA #$02....$0731 caDEX$0732 d0 fbBNE $072f$0

通过现成的反编译工具,变成 汇编码:

$0600 20 06 06 JSR $0606 $0603 20 38 06 JSR $0638 $0606 20 0d 06 JSR $060d $0609 20 2a 06 JSR $062a $060c 60 RTS $060d a9 02 LDA #$02 .... $0731 ca DEX $0732 d0 fb BNE $072f $0734 60 RTS

然后通过小脚本的正则替换,变成符合 C 语法的 代码:

L_0600: JSR(0606, 0600) L_0603: JSR(0638, 0603) L_0606: JSR(060d, 0606) L_0609: JSR(062a, 0609) L_060c: RTS() L_060d: LDA_IMM(0x02) .... L_0731: DEX() L_0732: BNE(072f) L_0734: RTS()

最后使用 emscripten 将 C 代码编译成 JS 代码:

在线演示(ASDW 控制方向,请用 Chrome 浏览器)

当然,这种方式虽然很简单,但生成的 JS 很大。而且所有的 6502 指令对应的 JS 最终都在一个 function 里面,对浏览器优化也不利。

后记

后来还考虑用类似的思路,做一个带 JIT 功能的红白机模拟器。不过了解下 NES 的功能后就基本放弃了,因为远不止 6502 CPU 那么简单,还要考虑硬件中断、卡带 Mapper 等各种复杂的情况,所以就没做了。

大家有什么好的想法,也可以聊聊。


 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 我从半年前项目中的代码看到了什么? - ptsp

    我从半年前项目中的代码看到了什么? - ptsp

    2016-10-27 14:00

  • 国产程序员陋习,写在农历猴年前 - 麦克*堂

    国产程序员陋习,写在农历猴年前 - 麦克*堂

    2016-02-06 18:57

网友点评
t