2013-01-01から1年間の記事一覧
Windows上のXamarin StudioでF#プロジェクトをビルドしようとすると、最近のバージョンでは失敗します。 Xamarin Studio F# Language Binding 結果 4.0.12 3.2.15 OK 4.0.13 3.2.15 ビルドに失敗しました。. MSBuild operation failed 4.0.13 3.2.19 ビルド…
NetBSDにはアセンブリ言語のサンプルが入っています。 /usr/share/examples/asm/hello/powerpc.s PowerPC用ですが、MIPSに移植してみます。 PowerPC 主要部分を抜粋します。 _start: # write(STDOUT_FILENO, message, MESSAGE_SIZE) li %r0, 4 # r0: write(2…
この記事はF# Advent Calendar 2013の2日目の参加記事です。昨日はトップバッターの@igetaさんでした。短いコードにデータベースのアクセステクニックが詰まってとても参考になります。 いげ太の日記: Micro ORM を128行で 私の記事は、勉強会でF#を教えるた…
お盆休みに予定していたV6移植ハッカソンですが、残念ながら参加者が少なかったため中止とさせていただきました。今後は池袋バイナリ勉強会の中で作業を進める予定です。力不足、大変申し訳ありません。
スタート低レイヤー#2でid:shinichiro_hさんに全部入りのbinutilsが作れるということを教えて頂きました。さっそく試してみました。MSYS(MinGW)用のバイナリを置いておきます。 binutils-2.23.2-msys-cross-all.tar.xz (14.6MB) /usr/localに展開するだけで…
先日、PDP-11から8086へのトランスレータを試作しました。 PDP-11のアセンブリを8086に変換 簡単なプログラムを変換して大まかなABIが見えてきたので、仮にまとめます。詳細についてはV6移植ハッカソンで作業しながら決めていこうと思います。
2013/7/27(土)に開催されたスタート低レイヤー#2でELFについて発表して来ました。 ELFの動的リンク from 7shi 私自身とても勉強になりました。主催のmasterqさんはじめ、他の発表者の方々、参加者の方々、お疲れ様でした。
V6移植ハッカソンの作業フローをまとめました。今まで作って来たインタプリタやトランスレータの位置付けがはっきりするのではないでしょうか。
V6移植ハッカソンでは手始めにトランスレータを作りながらPDP-11から8086への変換について調べる予定です。現場でスクラッチから始めると発散しかねないので、ある程度方向付けるためトランスレータを試作しました。 pdp2i8086.py コマンドライン引数を表示…
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のa.outを作っていました。 8086版V6のa.out ACKをカスタマイズしてオプションなしで出力できるようになりました。 $ 8086v6-cc -.o write.s $ 7run a.out hello※ -.oはgccの-nostdlibに相当します。
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で描いています。(ソース)
8086(16bitのx86)をサポートするコンパイラとしてACKが使えるようになりました。 The Amsterdam Compiler Kit ACK自体の移植ではなく、MINIX用のバイナリを8086インタプリタ上で動かします。使用方法は以下を参照してください。 i8086インタプリタでMINIX…
i8086インタプリタにPDP-11インタプリタを統合しました。1つのプログラムでMINIX 2とUNIX V6の両方のバイナリを動かせます。 https://bitbucket.org/7shi/i8086tools UNIX V6のccを動かしてカーネルがビルドできることを確認しました。 https://twitter.com/…
先日、i8086インタプリタでMINIXのカーネルがビルドできるようになりました。 i8086のインタプリタでMINIXのコマンドを動かす 手順を説明します。
【追記】残念ながら参加者が少なかったため中止とさせていただきました。今後は池袋バイナリ勉強会の中で作業を進める予定です。お盆休みの四日間に渡ってUNIX V6を8086に移植するハッカソンを開催します。 8/12(月) V6移植ハッカソン(1日目) 8/13(火) V6…
前回、アセンブラからシステムコールを呼ぶ例を示しました。 i8086のインタプリタでMINIXのコマンドを動かす 通常はC言語からlibc経由で呼び出します。UNIX V6とMINIX 2.0.4でlibcからexitシステムコールが呼び出されるまでを追ってみます。
i8086の逆アセンブラに引き続きインタプリタを実装して、MINIXのカーネルがビルドできるようになりました。 http://twitter.com/7shi/status/349237003193307136 OSごと動かすエミュレータではなく、ユーザープロセスのみをホスティングするインタプリタとし…
MINIX 2.0.4をVMにインストールする方法について、調べたことや参考URLを残しておきます。通常の手順では配布ファイルからフロッピーディスクのイメージを作ってインストールします。手間が掛かるため、今回はインストール済みディスクイメージを使います。
前回、命令表を作成しました。 i8086の命令表 今回はオペコードの構造を確認するため逆アセンブラを作ります。
i8086(16bitのx86)の命令フォーマットについて理解を深めるため、データシートを写経して表に整理しました。探せば既にあるとは思いますが、勉強のため手を動かしてみました。
16bitのx86コードに触れたくなりました。そこでMINIX 2に目を付けました。MINIX 2は16bitと32bitの両方に対応しています。16bitの方は80286のプロテクトモードを使用しているためリアルモードではありません。カーネルではなくユーザープログラムの動きを追…
今までPythonやC#やNode.jsでJITを実装しました。 PythonでJIT (Windows 32bit) PythonでJIT (Mac OS X 64bit) C#でJIT Node.jsでJIT 今回はF#版です。C#版をほとんどそのまま焼き直しただけですが、それだけでは面白くないので、環境を判定して64bitにも対…
今までPythonやC#でJITを実装しました。 PythonでJIT (Windows 32bit) PythonでJIT (Mac OS X 64bit) C#でJIT 今回はNode.jsのrefモジュールとffiモジュールを使用します。npmでインストールする必要があります。残念ながらブラウザ上では動きません。
前回はELFファイルの構造を示しながら、動的リンクに必要な処理を説明しました。 ELFの動的リンク(1) 今回はPythonで実装した簡易ローダを見ながら、実際の処理を追っていきます。 elf-simple.py 32bit Windows上でELFファイルを読み込み、動的リンクを解決…
これから2回に渡って、ELFの動的リンクについて見ていきます。※ 試験的に文中の図はインラインSVGで描いています。(ソース)ELFファイルの中はセクションとセグメントで二重に分割されています。属性が共通するセクションをグループ化したものがセグメント…
ブログに図を入れるとき、別途作成してPNGで保存してアップするのは面倒です。インラインでSVGを埋め込むのはどうかと思いつき、試してみました。 <svg width="150" height="100" style="border:solid 1px black"> <circle cx="75" cy="50" r="30" fill="red"></circle> </svg> ドローソフトで描いたSVGをコピペするのでは、PNGをアップするのと比べてもあまり手間が軽減されません。H…
昨日告知した初心者TypeScript入門の資料が完成しました。事前公開します。 http://sdrv.ms/13R4zAg (PDF) 簡単な思考ルーチンを実装しています。以下に動く状態のものを貼っておきますので、実際に試せます。コンピュータは後手固定です。【追記】JSX移植版…