PDP-11インタプリタでUNIX V6のカーネルをビルドするまで

PDP-11のクロスコンパイラがビルドできたことをきっかけに、逆アセンブラを作り始めて、インタプリタでカーネルをビルドできるようになる過程です。 当初はブラウザで動かすためSilverlightで開発していましたが、最後にC++で書き直してコマンドラインアプリとしました。
6

クロスコンパイラをビルド

七誌 @7shi

MSYSでPDP-11のクロスgccをビルドしました。バイナリを配布します。 http://d.hatena.ne.jp/n7shi/20110304/1299224931

2011-03-04 16:48:49
七誌 @7shi

あまり移植とかしたくない。労力を掛ければできることは分かっているけど。とりあえずhello worldのバイナリを調べてみよう。

2011-03-06 09:08:39
七誌 @7shi

asがフルアセンブラという時点で移植の選択肢はなくなった。

2011-03-06 09:44:02
七誌 @7shi

v6のディスクイメージから取り出したカーネルがobjdumpで逆アセンブルできないと思っていたけど、v6内でstripすれば逆アセンブルできることに気付いた。カーネルに限らず自分で作ったhello worldのa.outも同様。binutilsではstripできない。

2011-03-06 10:19:07
七誌 @7shi

pdp11-aout-objdumpの出力が8進数と16進数のちゃんぽんで読みにくい。

2011-03-06 10:39:50
七誌 @7shi

v6で出力したハローワールドがやけに複雑だなと思っていたけど、printf()はフォーマット解析をしているから当然だった。cputc()からwrite()を呼んで書き込んでいるけど、バッファリングされていたりして結構難しい。

2011-03-06 11:00:13
七誌 @7shi

write(1,"hello\n",6);で直接呼ぶと結構小さくなった。ゴルフが目的じゃないから、適当に切り上げて逆汗とにらめっこ。

2011-03-06 11:09:40
七誌 @7shi

crtとwriteがスタティックリンクされているけど、読めない規模ではないかな。 https://gist.github.com/856957

2011-03-06 11:16:56

逆アセンブラを自作

七誌 @7shi

ちょっと余裕が出てきたのでPDP-11の逆アセンブラを作っている。即値代入がすごい構造になっていることに気付いた。 mov (pc)+, r0 として次のアドレスに置いた即値を読み込み、pcをインクリメントしてスキップしている。ARMも似たことをやるけど、直後ではない。

2011-03-22 13:12:44
七誌 @7shi

pdp11-aout-objdumpの出力はアドレスも即値も両方$xxで出力されて区別できない。destが即値になることはないのでアドレスだと判断できるけど、srcは判断できない。v6のアセンブラはアドレスに$を付けないみたいだから、それを真似することにする。

2011-03-22 14:03:44
七誌 @7shi

ためしにhgで日本語のコミットメッセージを書いてbitbucketにpushしてみたら、特に文字化けしなかった。インチキ英語を書くのに疲れたから、次から日本語で書こう・・・

2011-03-22 18:02:09
七誌 @7shi

TortoiseHgは2.0になってからWorkbenchの中で一通り作業できるので便利になった。

2011-03-22 18:39:52
七誌 @7shi

PDP-11の逆アセンブラがある程度動くようになったので公開しました。Silverlight化したのでブラウザ上で動きます。 http://7shi.net/v6/

2011-03-22 20:30:46
七誌 @7shi

PDP-11の逆アセンブラで出力の16進数を8進数に切り替えられるようになった。 http://7shi.net/v6/ Lions本でまず戸惑ったのが8進数だったので、切り替えながら少しずつ慣れたいと思っていた。

2011-03-23 02:02:57

C#からVBに移行

七誌 @7shi

仕事でVB.NETばかり使っていたら、C#でセミコロンを打つのがわずらわしくなって来た。今更だけどVB.NETの存在意義が分かってきた気がする。

2011-03-26 10:57:50
七誌 @7shi

VWDはExpressの中でもやや異色。C#とVBが混ぜられるのが地味に便利。

2011-03-26 11:51:26
七誌 @7shi

十数年ぶりにVBに戻ってきたことになるのかな。.NETが出るのが2年早かったら、何も考えずにVB5→VB.NETに移行して(VB6は5から移行するメリットを感じなかったので買わなかった)、C++やC#には手を出さなかったかもしれない。VBAはずっと縁が切れないけど。

2011-03-26 12:01:54
七誌 @7shi

Alphaのときは途中までC#で作ってからF#に移行したけど、PDP-11はVBに移行してみた。VB10はVB7で感じた「どう書けば良いか分からない感」があまりない。8進数リテラルがあるので、C#より合っているかも。

2011-03-26 15:07:33

インタプリタに着手

七誌 @7shi

Lions本勉強会参加の皆様お疲れ様でした。今日のLions本勉強会の議論を参考に、インタプリタの間接システムコールを修正中です。目標はasの動作です。 http://7shi.net/v6/

2011-03-27 19:55:41
七誌 @7shi

V6のnmを見ていたら、シンボルは8文字固定長で格納されていた。だからあんなに関数名を縮めようとしてるんだ。

2011-03-27 23:03:16
七誌 @7shi

printf()がインタプリタでうまく動かない。トレースを追っているけど何が何だか分からないので、とりあえずシンボルを表示しようとしている。今までobjdumpを通らないのでstripしていたけど、自前逆アセンブラが出来たからもう大丈夫。

2011-03-27 23:32:07
1 ・・ 5 次へ