PDP-11インタプリタでUNIX V6のカーネルをビルドするまで
PDP-11のクロスコンパイラがビルドできたことをきっかけに、逆アセンブラを作り始めて、インタプリタでカーネルをビルドできるようになる過程です。
当初はブラウザで動かすためSilverlightで開発していましたが、最後にC++で書き直してコマンドラインアプリとしました。
七誌
@7shi
Win32でもfork()とunlink()に細工してコマンドライン版V6インタプリタが動くようになった。Silverlightではexec()に細工して終了後fork()にlongjmpもどきで戻っていたけど、fork()でVMインスタンスをコピーした方が素直だった。
2011-04-12 17:47:00
七誌
@7shi
Win32だと握っているファイルを削除できないので、unlink()に失敗したら削除を予約して、close()後にリトライするという細工を施した。このようにfork()とunlink()の細工だけで、V6のカーネルビルドまでできるようになった。
2011-04-12 17:57:55
七誌
@7shi
同一マシン・同一OS上でWin32版とInterix版のV6カーネルビルド速度を比較してみた。Win32が21.7秒、Interixが96.6秒、約4.5倍の差。Win32版の速度なら十分使い物になる。
2011-04-12 18:08:22
七誌
@7shi
@superhoge 今夜中にWindowsでも動くインタプリタとコンパイラのセットを公開します。(公開が遅れているのはWindowsネイティブに移植していたためです)
2011-04-12 19:16:49
七誌
@7shi
#readLions 読書会でデモしたコマンドライン版のインタプリタを公開しました。 http://d.hatena.ne.jp/n7shi/20110412/1302608565
2011-04-12 20:42:44V6移植ハッカソン
七誌
@7shi
お盆休みにUNIX V6を8086に移植するハッカソンを開催します。カーネルの移植は後回しにして、PDP-11と8086のインタプリタを使いながらユーザーランドのトランスレートから着手する予定です。 http://t.co/iE4qMVZ2av #8086v6
2013-06-30 10:36:47