iT邦幫忙

7

用Javascript實作的PC模擬器

剛剛在透過宗董的噗浪看到:
http://www.plurk.com/p/c8rqs4

有人用Javascript實作了x86環境,可以跑busybox...
實作的網址:
http://bellard.org/jslinux/

瀏覽器所使用的Javascript引擎,需要支援TypedArray,所以目前只能在Firefox4以及Chrome上面跑。Chrome12會有bug,所以建議在Chrome11上面跑。剛剛試跑的執行畫面:

看了一下原始碼,他用一個javascript來模擬終端機http://bellard.org/jslinux/term.js,模擬器則是:http://bellard.org/jslinux/cpux86.js。模擬器的程式,會透過ajax下載linux kernel image及root filesystem image等來執行...

據說在Firefox4下的執行速度大約是Chrome11的兩倍...

我只能說,作者太強了XD


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
海綿寶寶
iT邦大神 1 級 ‧ 2011-05-18 11:13:06

使用FireFox4.0.1
執行指令:top, uname -a, df

原始程式就看不懂了
還給他obfuscated暈

說實在
這除了方便練習使用linux CLI之外
我還真想不出有什麼用處疑惑

fillano iT邦超人 1 級 ‧ 2011-05-18 15:03:41 檢舉

他寫這個據說是想要研究Javascript引擎以及執行效率。
原始碼並沒有做混淆,只去掉不必要的空格。

0
逮丸逮丸
iT邦大師 1 級 ‧ 2011-05-18 12:45:30

太妙了!
雖然有 原理 的說明,
還是不了解怎麼能夠把這些東西鬥在一起…
如果能在裡面綁個虛擬網卡,
又能連外的話,
又能與PC的檔案系統互通的話,
應會有更多的應用吧。

看更多先前的回應...收起先前的回應...

不能輸入中文。
只可從CLI裡複製文字出來,
但無法從外面貼文字進CLI裡。

fillano iT邦超人 1 級 ‧ 2011-05-18 15:01:42 檢舉

作者是超級神人:

  1. 高中就寫了LZEXE
  2. TinyCC作者
  3. qemu作者
  4. ffmpeg作者
  5. 發明了目前最快的圓周率演算法...

介紹:http://www.hksilicon.com/kb/articles/5760/Fabrice-Bellard

fillano提到:
作者是超級神人:

太強了拍手拍手拍手

ycl8000 iT邦高手 1 級 ‧ 2011-05-18 15:57:39 檢舉

瞠目結舌簽名

0
player
iT邦大師 1 級 ‧ 2011-05-19 17:16:34

http://bellard.org/jslinux/term.js
http://bellard.org/jslinux/cpux86.js

但是
"use strict";
這是什麼? 我不記得JavaScript裡有這種用法?
還有
Linux是在哪邊載入的?
謎?

不過也有點收獲了
FireFox4 在JavaScript裡可以用 ctypes 去Call外部的dll來用?
https://developer.mozilla.org/en/js-ctypes/Using_js-ctypes

看更多先前的回應...收起先前的回應...
player iT邦大師 1 級 ‧ 2011-05-19 17:48:12 檢舉

既然用JavaScript可以做到模擬x86去跑Linux
那是不是有一天
我們可能可以在網頁瀏覽器上
去玩到傳統TV-Game的遊戲呢?
如果以同樣的原理去模擬TV-Game主機的CPU與GPU
並利用ctypes去將繪圖拋轉到DirectX或OpenGL去處理的話

街機、大型電玩的模擬器,應早就有javascript版:
http://www.smashcat.org/personal/html/games_arcade.html
http://def-logic.com/main/
不大會去分辨這些是否透過ROM跑出來的?

那個smashcat裡的
大金剛太空侵略者
是整個用dHTML/Javascript寫出來的而不是跑ROM

已經有MAME類的模擬器了
用Javascript實作的模擬器
意義也不大
大概只有像這位天才說的:Just for fun (在末段What's the use中提到)
不過人家是天才
我的頭腦只是一塊海綿哈哈哈哈哈哈

fillano iT邦超人 1 級 ‧ 2011-05-20 09:18:38 檢舉

use strict是ECMA-262 Edition 5定義的新語法,表示要用嚴格的Javascript語法來執行,有一些過去慣用的寫法就會出錯,例如使用變數前沒有用var宣告。

use strict主要是影響他所在的scope,如果在函數中使用,並不會讓global scope以及其他未使用的函數變成use strict。

fillano iT邦超人 1 級 ‧ 2011-05-20 09:20:45 檢舉

linux是程式中利用ajax(XMLHttpRequest)從遠端載入的,你仔細看一下程式的話,可以看到cpux86.js最後有載入幾個*.bin檔的動作。

我要留言

立即登入留言