Fabrice Bellard的Javascript模拟器是如何工作的?

今天我有一个令人沮丧的时刻,当我看到JavaScript模拟器在JavaScript中: http : //bellard.org/jslinux/

它编译C程序,有vi和emacs,支持所有shell命令等。

它是如何工作的?

起初,我也认为这只是一个连接到虚拟机的terminal仿真器,但事实并非如此。 如果你看networking连接,你可以看到,启动后,没有数据传输了。

所以这是真的。

CPU不是什么神奇的东西; 实际上它只是从内存中读取字节,并根据命令的意思修改RAM。

在这种情况下,CPU仿真器基于qemu代码。 他所做的是创build一组函数,其索引是PC(程序计数器)的下一个字节。

现在你只需要一个简单的linux发行版,不需要像浮点运算或者MMX代码那样的任何奇特的CPU命令。

有趣的是兽的速度。 整个事情有点呆滞,但是在浏览器中是JavaScript。

结论:令人印象深刻。 不能等待看到一个C64模拟器:-)

http://www.quora.com/CPU-Emulation/How-does-bellard-org-jslinux-work

简化说明

jslinux本质上是一个用软件实现的完整的计算机,特别是JavaScript。 这当然被称为模拟器。 这个特定的版本设置为运行Linux,但理论上它可以运行其他操作系统。

将模拟器(JavaScript,〜90KB缩小,〜7000行格式化)加载到浏览器中。 Linux的一个版本以前被编译成x86处理器的机器代码,被加载并复制到一个大型的整数中,作为模拟计算机的RAM。 仿真器CPU然后被指向机器代码的第一条指令,并被告知开始解释指令(例如读/写RAM,进行算术和逻辑运算,跳转到不同的指令等等)。 有时它会通过另一段JavaScript代码(使用浏览器DOM模拟串行端口和terminal)将数据(如系统日志或shell命令提示符)写入“terminal”。 您的按键也通过这个模拟串行端口发回到Linux。