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

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

シンボルを表示するようにしたらだいぶ読みやすくなった。

2011-03-28 00:53:09
七誌 @7shi

インタプリタの動作を追っていて、シンボルまでメモリに展開していたことに気付いた。bssがゼロじゃないのはまずい。

2011-03-30 00:08:44
七誌 @7shi

textとdataのサイズだけコピー。execシステムコールと同じことをしているw

2011-03-30 00:10:40
七誌 @7shi

putchar()が機能しないのを追っている。ブレークポイントやステップ実行は実装コストが高いので、実行時トレースでオペランドがアドレスを指していたらダンプするようにしてみよう。

2011-03-30 22:48:11
七誌 @7shi

IsNot演算子なんてあったのか。知らなかった。 http://msdn.microsoft.com/ja-jp/library/t3bat82c.aspx

2011-03-30 22:59:56
七誌 @7shi

putchar()が直った。PC相対でアドレスを参照するときに、PCの値を取り違えていたのが原因だった。

2011-03-31 00:24:36
七誌 @7shi

トレースの中に標準出力が埋もれわけがわからない。まだトレースを止めるのは時期尚早なので、標準出力を分離しよう。

2011-03-31 00:34:34
七誌 @7shi

コードを書いたのにdivが逆アセンブルされないと思ったら分岐を忘れていた。mul,div,ash,ashcはオペランドが他の命令と逆にエンコードされている。

2011-03-31 01:48:10
七誌 @7shi

PDP-11逆アセンブラにインタプリタを付けて、UNIX V6バイナリを実行させてみた。とりあえずprintf()まで動作を確認。 http://7shi.net/v6/

2011-03-31 03:35:26
七誌 @7shi

UNIX V6のバイナリを対象としたPDP-11のインタプリタの開発を開始しました。VB.NETのSilverlightプロジェクトです。 http://d.hatena.ne.jp/n7shi/20110330/1301532485

2011-03-31 09:48:05
七誌 @7shi

PDP-11逆アセンブラで、アドレスをシンボル相対で表記したり、システムコール名を表示したりした。割と読みやすくなった。 http://7shi.net/v6/

2011-04-01 21:34:51
七誌 @7shi

PDP-11の一般命令を一通り実装した。当面はユーザーランドだけを対象とするので、特権命令は後回し。

2011-04-04 12:14:35
七誌 @7shi

比較的単純そうなnmを動かそうとしている。sbrk()が出てきた。malloc()的に使っている。indirもbreakも、ちょうどこの前の勉強会に出てきた内容だから、とても助かる!

2011-04-04 19:37:20
七誌 @7shi

nmで fout = dup(1); close(1); などと厄介なことをしている。foutはputchar()を追ったときにflush()の中で使われているのを見たから、バッファリングさせるためにやっているのは分かったけど。

2011-04-04 20:40:19
七誌 @7shi

nmが動くようになったけどprinto()の挙動がおかしい・・・

2011-04-05 11:02:17
七誌 @7shi

トレースを追って、ash命令がバグっていることが判明。修正したらnmが動いた! http://7shi.net/v6/

2011-04-05 12:46:18
七誌 @7shi

とりあえずインタプリタにasとas2を突っ込んだ。いきなりsys signalを呼んでいる。先は長そう・・・ http://7shi.net/v6/

2011-04-05 20:41:28
七誌 @7shi

asはtextセクションに文字列が埋め込まれたりして逆汗がずれたりしていたので、シンボルを見て補正するようにしてみた。

2011-04-07 07:40:09
七誌 @7shi

PDP-11のmovbは符号拡張するのか!そういえばAlphaもそうだった。

2011-04-07 18:47:18
七誌 @7shi

V6のasが動きそうで動かない。これを片付けないとすっきりできない。

2011-04-07 21:52:30
七誌 @7shi

インタプリタでトレースしながらasのソースを見ていたら、C言語に書き換えられるような気がしてきた。もっとも、こう思うのもトレースを実装して動きが追える様になったお陰だから、最初からそんなことを考えられるわけがないのだけど。

2011-04-07 22:59:18
七誌 @7shi

as2が最後まで動いたけど、保存されたa.outを見ると中身はほとんどゼロだった。どこが間違っているのか地道にトレースするしかない。

2011-04-08 00:47:25
七誌 @7shi

PDP-11インタプリタでV6のシステムコールもどきを実装してトレースしているけど、それらしい動きが見えて面白い。子供の頃おもちゃを分解して遊んでいたのを思い出す。

2011-04-08 09:41:23
七誌 @7shi

as(pass1)の中間生成物は、simh上と自作インタプリタ上で完全一致した。問題はas2。めちゃくちゃなファイルが出力されてしまう。sys writeに渡すcountがおかしな値になっている。

2011-04-08 14:09:08
七誌 @7shi

トレースでレジスタの変化を追っていたら、インタプリタの挙動がおかしい所を見付けた!

2011-04-08 16:23:50
前へ 1 2 ・・ 5 次へ