【お知らせ】プログラミング記事の投稿はQiitaに移行しました。

インタプリタの動作確認

前回、インタプリタを複数のCPUやOSに対応させる過程を書きました。

実際に動かしてみます。

$ file write-minix write-v6 write-8086v6
write-minix:  Linux-8086 impure executable
write-v6:     PDP-11 executable
write-8086v6: DOS executable (COM)
$ 7run write-minix
hello
$ 7run write-v6
hello
$ 7run write-8086v6
hello
続きを読む

インタプリタのクラス設計

自作インタプリタを少しずつ進化させて、複数のCPUやOSをサポートできるようになりました。クラス設計で試行錯誤した過程を残しておきます。

※ 文中の図はインラインSVGで描いています。(ソース

続きを読む

ACKメモ

8086(16bitのx86)をサポートするコンパイラとしてACKが使えるようになりました。

ACK自体の移植ではなく、MINIX用のバイナリを8086インタプリタ上で動かします。使用方法は以下を参照してください。

ACKに関するメモです。

続きを読む

i8086とPDP-11のインタプリタを統合

i8086インタプリタPDP-11インタプリタを統合しました。1つのプログラムでMINIX 2とUNIX V6の両方のバイナリを動かせます。

UNIX V6のccを動かしてカーネルがビルドできることを確認しました。

V6移植ハッカソンで使うため、2年前に作ったPDP-11のインタプリタi8086インタプリタの構造に合わせて移植しました。MINIX 2とUNIX V6のUNIXとしての共通部分は基底クラスで共用しています。UNIX V6をi8086に移植する際にインタプリタシステムコールのABIを実装すれば、カーネルを移植する前にユーザーバイナリの動作確認を切り離して行えるのではないかという狙いです。

続きを読む

MINIXのexitシステムコールを追う

前回、アセンブラからシステムコールを呼ぶ例を示しました。

通常はC言語からlibc経由で呼び出します。UNIX V6とMINIX 2.0.4でlibcからexitシステムコールが呼び出されるまでを追ってみます。

続きを読む

i8086のインタプリタでMINIXのコマンドを動かす

i8086の逆アセンブラに引き続きインタプリタを実装して、MINIXのカーネルがビルドできるようになりました。

OSごと動かすエミュレータではなく、ユーザープロセスのみをホスティングするインタプリタとして実装しています。Windowsにはforkがないため、1プロセスの中で擬似的に複数のプロセスを再現しています。

続きを読む