PDP-11インタプリタでUNIX V6のカーネルをビルドするまで
putchar()が機能しないのを追っている。ブレークポイントやステップ実行は実装コストが高いので、実行時トレースでオペランドがアドレスを指していたらダンプするようにしてみよう。
2011-03-30 22:48:11IsNot演算子なんてあったのか。知らなかった。 http://msdn.microsoft.com/ja-jp/library/t3bat82c.aspx
2011-03-30 22:59:56コードを書いたのにdivが逆アセンブルされないと思ったら分岐を忘れていた。mul,div,ash,ashcはオペランドが他の命令と逆にエンコードされている。
2011-03-31 01:48:10PDP-11逆アセンブラにインタプリタを付けて、UNIX V6バイナリを実行させてみた。とりあえずprintf()まで動作を確認。 http://7shi.net/v6/
2011-03-31 03:35:26UNIX V6のバイナリを対象としたPDP-11のインタプリタの開発を開始しました。VB.NETのSilverlightプロジェクトです。 http://d.hatena.ne.jp/n7shi/20110330/1301532485
2011-03-31 09:48:05PDP-11逆アセンブラで、アドレスをシンボル相対で表記したり、システムコール名を表示したりした。割と読みやすくなった。 http://7shi.net/v6/
2011-04-01 21:34:51比較的単純そうなnmを動かそうとしている。sbrk()が出てきた。malloc()的に使っている。indirもbreakも、ちょうどこの前の勉強会に出てきた内容だから、とても助かる!
2011-04-04 19:37:20nmで fout = dup(1); close(1); などと厄介なことをしている。foutはputchar()を追ったときにflush()の中で使われているのを見たから、バッファリングさせるためにやっているのは分かったけど。
2011-04-04 20:40:19とりあえずインタプリタにasとas2を突っ込んだ。いきなりsys signalを呼んでいる。先は長そう・・・ http://7shi.net/v6/
2011-04-05 20:41:28インタプリタでトレースしながらasのソースを見ていたら、C言語に書き換えられるような気がしてきた。もっとも、こう思うのもトレースを実装して動きが追える様になったお陰だから、最初からそんなことを考えられるわけがないのだけど。
2011-04-07 22:59:18PDP-11インタプリタでV6のシステムコールもどきを実装してトレースしているけど、それらしい動きが見えて面白い。子供の頃おもちゃを分解して遊んでいたのを思い出す。
2011-04-08 09:41:23as(pass1)の中間生成物は、simh上と自作インタプリタ上で完全一致した。問題はas2。めちゃくちゃなファイルが出力されてしまう。sys writeに渡すcountがおかしな値になっている。
2011-04-08 14:09:08