PDP-11インタプリタでUNIX V6のカーネルをビルドするまで
クロスコンパイラをビルド
MSYSでPDP-11のクロスgccをビルドしました。バイナリを配布します。 http://d.hatena.ne.jp/n7shi/20110304/1299224931
2011-03-04 16:48:49v6のディスクイメージから取り出したカーネルがobjdumpで逆アセンブルできないと思っていたけど、v6内でstripすれば逆アセンブルできることに気付いた。カーネルに限らず自分で作ったhello worldのa.outも同様。binutilsではstripできない。
2011-03-06 10:19:07v6で出力したハローワールドがやけに複雑だなと思っていたけど、printf()はフォーマット解析をしているから当然だった。cputc()からwrite()を呼んで書き込んでいるけど、バッファリングされていたりして結構難しい。
2011-03-06 11:00:13crtとwriteがスタティックリンクされているけど、読めない規模ではないかな。 https://gist.github.com/856957
2011-03-06 11:16:56逆アセンブラを自作
ちょっと余裕が出てきたのでPDP-11の逆アセンブラを作っている。即値代入がすごい構造になっていることに気付いた。 mov (pc)+, r0 として次のアドレスに置いた即値を読み込み、pcをインクリメントしてスキップしている。ARMも似たことをやるけど、直後ではない。
2011-03-22 13:12:44pdp11-aout-objdumpの出力はアドレスも即値も両方$xxで出力されて区別できない。destが即値になることはないのでアドレスだと判断できるけど、srcは判断できない。v6のアセンブラはアドレスに$を付けないみたいだから、それを真似することにする。
2011-03-22 14:03:44ためしにhgで日本語のコミットメッセージを書いてbitbucketにpushしてみたら、特に文字化けしなかった。インチキ英語を書くのに疲れたから、次から日本語で書こう・・・
2011-03-22 18:02:09PDP-11の逆アセンブラがある程度動くようになったので公開しました。Silverlight化したのでブラウザ上で動きます。 http://7shi.net/v6/
2011-03-22 20:30:46PDP-11の逆アセンブラで出力の16進数を8進数に切り替えられるようになった。 http://7shi.net/v6/ Lions本でまず戸惑ったのが8進数だったので、切り替えながら少しずつ慣れたいと思っていた。
2011-03-23 02:02:57C#からVBに移行
仕事でVB.NETばかり使っていたら、C#でセミコロンを打つのがわずらわしくなって来た。今更だけどVB.NETの存在意義が分かってきた気がする。
2011-03-26 10:57:50十数年ぶりにVBに戻ってきたことになるのかな。.NETが出るのが2年早かったら、何も考えずにVB5→VB.NETに移行して(VB6は5から移行するメリットを感じなかったので買わなかった)、C++やC#には手を出さなかったかもしれない。VBAはずっと縁が切れないけど。
2011-03-26 12:01:54Alphaのときは途中までC#で作ってからF#に移行したけど、PDP-11はVBに移行してみた。VB10はVB7で感じた「どう書けば良いか分からない感」があまりない。8進数リテラルがあるので、C#より合っているかも。
2011-03-26 15:07:33インタプリタに着手
Lions本勉強会参加の皆様お疲れ様でした。今日のLions本勉強会の議論を参考に、インタプリタの間接システムコールを修正中です。目標はasの動作です。 http://7shi.net/v6/
2011-03-27 19:55:41printf()がインタプリタでうまく動かない。トレースを追っているけど何が何だか分からないので、とりあえずシンボルを表示しようとしている。今までobjdumpを通らないのでstripしていたけど、自前逆アセンブラが出来たからもう大丈夫。
2011-03-27 23:32:07