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

UNIX V6

V6移植ハッカソンを中止します

お盆休みに予定していたV6移植ハッカソンですが、残念ながら参加者が少なかったため中止とさせていただきました。今後は池袋バイナリ勉強会の中で作業を進める予定です。力不足、大変申し訳ありません。

8086版V6のABI(仮)

先日、PDP-11から8086へのトランスレータを試作しました。 PDP-11のアセンブリを8086に変換 簡単なプログラムを変換して大まかなABIが見えてきたので、仮にまとめます。詳細についてはV6移植ハッカソンで作業しながら決めていこうと思います。

V6移植ハッカソンの作業フロー

V6移植ハッカソンの作業フローをまとめました。今まで作って来たインタプリタやトランスレータの位置付けがはっきりするのではないでしょうか。

PDP-11のアセンブリを8086に変換

V6移植ハッカソンでは手始めにトランスレータを作りながらPDP-11から8086への変換について調べる予定です。現場でスクラッチから始めると発散しかねないので、ある程度方向付けるためトランスレータを試作しました。 pdp2i8086.py コマンドライン引数を表示…

8086版V6でC言語のハローワールド

8086版V6でC言語のハローワールドが実行できる最低限のlibcを実装しました。OS本体はまだ存在しないためインタプリタ上で実行します。 $ cat hello.c main(){printf("hello\n");} $ 8086v6-cc hello.c "hello.c", line 1: (warning) 'main' old-fashioned fu…

8086V6用にACKをカスタマイズ

前回、コマンドやオプションを駆使して8086V6のa.outを作っていました。 8086版V6のa.out ACKをカスタマイズしてオプションなしで出力できるようになりました。 $ 8086v6-cc -.o write.s $ 7run a.out hello※ -.oはgccの-nostdlibに相当します。

8086版V6のa.out

8086版V6のa.outはマジックナンバーで識別することにしました。PDP-11のマジックナンバーはブランチ命令に由来します。 0407(0x107) br 020(0x10) .textと.dataは同じセグメントで連続 0410(0x108) br 022(0x12) .textと.dataは別セグメントに分離 0411(0x10…

インタプリタの動作確認

前回、インタプリタを複数のCPUやOSに対応させる過程を書きました。 インタプリタのクラス設計 実際に動かしてみます。 $ file write-minix write-v6 write-8086v6 write-minix: Linux-8086 impure executable write-v6: PDP-11 executable write-8086v6: DO…

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

自作インタプリタを少しずつ進化させて、複数のCPUやOSをサポートできるようになりました。クラス設計で試行錯誤した過程を残しておきます。 https://bitbucket.org/7shi/i8086tools ※ 文中の図はインラインSVGで描いています。(ソース)

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

i8086インタプリタにPDP-11インタプリタを統合しました。1つのプログラムでMINIX 2とUNIX V6の両方のバイナリを動かせます。 https://bitbucket.org/7shi/i8086tools UNIX V6のccを動かしてカーネルがビルドできることを確認しました。 https://twitter.com/…

V6移植ハッカソン

【追記】残念ながら参加者が少なかったため中止とさせていただきました。今後は池袋バイナリ勉強会の中で作業を進める予定です。お盆休みの四日間に渡ってUNIX V6を8086に移植するハッカソンを開催します。 8/12(月) V6移植ハッカソン(1日目) 8/13(火) V6…

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

前回、アセンブラからシステムコールを呼ぶ例を示しました。 i8086のインタプリタでMINIXのコマンドを動かす 通常はC言語からlibc経由で呼び出します。UNIX V6とMINIX 2.0.4でlibcからexitシステムコールが呼び出されるまでを追ってみます。

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

i8086の逆アセンブラに引き続きインタプリタを実装して、MINIXのカーネルがビルドできるようになりました。 http://twitter.com/7shi/status/349237003193307136 OSごと動かすエミュレータではなく、ユーザープロセスのみをホスティングするインタプリタとし…

putchar()とバッファリング

UNIX V6のprintf()は内部で1文字ずつputchar()を呼んでいます。通常は1文字ずつwriteシステムコールが呼ばれますが、特殊な細工をするとバッファリングされるようになります。今回はnmとputchar()のソースを取り上げます。 http://minnie.tuhs.org/cgi-bin/u…

Lions本読書会合宿 結果報告

Lions本読書会2011秋合宿での作業についてまとめたスライドを公開します(他の方の発表)。UNIX V6のCコンパイラを改造しようとして、前段階のビルドにハマって何もできなかった話です。 Cコンパイラの改造(未) View more presentations from n 7shi pptx…

Lions本読書会合宿LT発表資料

Lions本読書会2011秋合宿で発表したLTの資料を公開します(他の方の発表)。id:n7shi:20111011で告知したサンクと継続の勉強会に絡めた内容です。 V6でJIT・部分適用・継続 View more presentations from n 7shi pptx版(同内容): v6-jit-th-cr.pptx ソース…

巨大ファイルのマッピング

id:n7shi:20101204でUNIX V6のファイルシステムを分析しましたが、リバースエンジニアリングをソースで裏付ける手法だったため漏れがありました。以下の記事で二重間接参照の存在を知りました。 id:takahirox:20110815:1313398103 SIMH上のUNIX V6で実験して…

構造を表示

id:n7shi:20101204のファイルシステム読み込みツールを改造して、ディレクトリやファイルの構造が表示できるようになりました。今まではイメージ全体をZIP圧縮して取り出すことしかできませんでしたが、ファイル単位で取り出せるようになりました。Windows F…

名古屋Geek Bar LT

名古屋Geek Bar 5月2日(月)でLTをして来ました。V6関係のツールがメインですが、自己紹介に絡めて独自言語のセルフホスティングも取り上げています。V6 Interpreter (Nagoya Geek Bar 2011-05-02)

コマンドライン版インタプリタ

id:n7shi:20110408で開発したSilverlight版のPDP-11インタプリタですが、ブラウザから出してコマンドラインで動かなければ、実用には厳しいと感じました。そのためC++で書き直して、Win32とPOSIXに対応しました。Win32はMinGW、POSIXは Interix 3.5, NetBSD …

コンパイラが動作

id:n7shi:20110330で開発に着手したPDP-11のインタプリタですが、最低限必要な命令とシステムコールを実装して、ようやくV6のコンパイラが動くようになりました。Silverlightに対応した環境ではブラウザ内で動きます。 実行 ⇒ http://7shi.net/v6/ ソース ⇒ …

インタプリタ

id:n7shi:20110322で開発したPDP-11の逆アセンブラを拡張して、UNIX V6のバイナリを対象としたインタプリタの開発に着手しました。まだ未実装の命令やシステムコールが多数ありますが、とりあえずprintf()くらいは動くようになりました。Silverlightに対応し…

逆アセンブラ

PDP-11の命令について調査するため、Silverlightで逆アセンブラを作成しました。UNIX V6のa.outに対応しています。 実行 ⇒ http://7shi.net/v6/ ソース ⇒ https://bitbucket.org/7shi/v6/src/e49b87e118af Lions本では8進数に戸惑ったため、デフォルトの出力…

クロスコンパイラ

MSYSでPDP-11のクロスgccをビルドしました。バイナリを置いておきます。 gcc-4.6.1-msys-cross-pdp11-aout.tar.xz /usr/localに展開すれば、pdp11-aout-gccとして呼び出せるようになります。特定OS用のcrtなどは含まれていないため、実行ファイルを出力する…

ファイルシステムの読み込み

id:oraccha:20101101の手順を参考に、UNIX V6をSIMHで動かしてみました。分析のためファイルを取り出そうとしたのですが、TCP/IP以前のOSのためネットワークが使えるのか不明で、ディスクイメージからファイルを取り出す方法も分かりません。仕方ないのでカ…