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

インタプリタの動作確認

前回、インタプリタを複数の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で描いています。(ソース)

ACKメモ

8086(16bitのx86)をサポートするコンパイラとしてACKが使えるようになりました。 The Amsterdam Compiler Kit ACK自体の移植ではなく、MINIX用のバイナリを8086インタプリタ上で動かします。使用方法は以下を参照してください。 i8086インタプリタでMINIX…

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

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

i8086インタプリタでMINIXカーネルをビルド

先日、i8086インタプリタでMINIXのカーネルがビルドできるようになりました。 i8086のインタプリタでMINIXのコマンドを動かす 手順を説明します。

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ごと動かすエミュレータではなく、ユーザープロセスのみをホスティングするインタプリタとし…

MINIX 2.0.4をVMにインストール

MINIX 2.0.4をVMにインストールする方法について、調べたことや参考URLを残しておきます。通常の手順では配布ファイルからフロッピーディスクのイメージを作ってインストールします。手間が掛かるため、今回はインストール済みディスクイメージを使います。

i8086の逆アセンブラ

前回、命令表を作成しました。 i8086の命令表 今回はオペコードの構造を確認するため逆アセンブラを作ります。

i8086の命令表

i8086(16bitのx86)の命令フォーマットについて理解を深めるため、データシートを写経して表に整理しました。探せば既にあるとは思いますが、勉強のため手を動かしてみました。

MINIX 2事始め

16bitのx86コードに触れたくなりました。そこでMINIX 2に目を付けました。MINIX 2は16bitと32bitの両方に対応しています。16bitの方は80286のプロテクトモードを使用しているためリアルモードではありません。カーネルではなくユーザープログラムの動きを追…

F#でJIT

今までPythonやC#やNode.jsでJITを実装しました。 PythonでJIT (Windows 32bit) PythonでJIT (Mac OS X 64bit) C#でJIT Node.jsでJIT 今回はF#版です。C#版をほとんどそのまま焼き直しただけですが、それだけでは面白くないので、環境を判定して64bitにも対…

Node.jsでJIT

今までPythonやC#でJITを実装しました。 PythonでJIT (Windows 32bit) PythonでJIT (Mac OS X 64bit) C#でJIT 今回はNode.jsのrefモジュールとffiモジュールを使用します。npmでインストールする必要があります。残念ながらブラウザ上では動きません。

ELFの動的リンク(2)

前回はELFファイルの構造を示しながら、動的リンクに必要な処理を説明しました。 ELFの動的リンク(1) 今回はPythonで実装した簡易ローダを見ながら、実際の処理を追っていきます。 elf-simple.py 32bit Windows上でELFファイルを読み込み、動的リンクを解決…

ELFの動的リンク(1)

これから2回に渡って、ELFの動的リンクについて見ていきます。※ 試験的に文中の図はインラインSVGで描いています。(ソース)ELFファイルの中はセクションとセグメントで二重に分割されています。属性が共通するセクションをグループ化したものがセグメント…

SVGのテスト

SVG

ブログに図を入れるとき、別途作成してPNGで保存してアップするのは面倒です。インラインでSVGを埋め込むのはどうかと思いつき、試してみました。 ドローソフトで描いたSVGをコピペするのでは、PNGをアップするのと比べてもあまり手間が軽減されません。HTML…

TypeScriptでモンテカルロ法リバーシ

昨日告知した初心者TypeScript入門の資料が完成しました。事前公開します。 http://sdrv.ms/13R4zAg (PDF) 簡単な思考ルーチンを実装しています。以下に動く状態のものを貼っておきますので、実際に試せます。コンピュータは後手固定です。【追記】JSX移植版…

TypeScriptでリバーシ

3/15(金)19:00より初心者TypeScript入門を開催します。リバーシ(いわゆるオセロ)を作りながらTypeScriptに挑戦する初心者向けの勉強会です。 http://www.zusaar.com/event/574004 資料用に途中まで作ったリバーシを貼っておきます。他のサイトを埋め込んで…

PEの.idataをアセンブラで考える

PEの.idataをアセンブリ言語で記述しながら説明します。PEからDLLを参照するには.idataセクションにDLL名とシンボル名を記述します。実行時にWindowsのローダが.idataを見てLoadLibraryとGetProcAddressに相当する処理を行い、取得したアドレスを.idataに書…

アクティブパターンをどう捉えるか

F# C#

F# Advent Calendar 2012 第16日目の参加記事です。 昨日 @kyon_mmさん SpecFlowについて 明日 @linerlockさん F#製のビルドツール, FAKEで遊ぶ 今年のF# Advent Calendarは実用がテーマです。私はアクティブパターンをなかなか実用できないでいましたが、よ…

Gtk#でファイルをドラッグ&ドロップ

Gtk#のウィジェットにファイルをドラッグ&ドロップで渡します。受け取る種類を指定しておくと、ドロップしたときにDragDataReceivedシグナルが発生します。ファイルは "text/uri-list" です。URIで渡されるため、ローカル名に変換が必要です。 using System…

整数の割り算を掛け算に変換 (4)

前回まで見てきた計算方法で、どれくらい高速化するか実験します。サンプルでは定数として10と97を使用します。Athlon 64 X2 4600+ 2.4GHzでの測定結果を掲載します。 div10 除算命令 div 80.66s div10mul 乗算命令 mul 16.14s div97 除算命令 div 82.46s di…

整数の割り算を掛け算に変換 (3)

前々回、前回に引き続き整数の割り算を掛け算に変換する方法について考えます。割り算を掛け算に変換するのは逆数を利用します。整数だけの計算では2以上の逆数がゼロになってしまうため、事前にx倍して後で割ります。 a / b = a * (1 / b) = a * (x / b) / …

整数の割り算を掛け算に変換 (2)

【注】この記事の計算方法は不完全なため誤差が出ます。次回以降で補正する方法を説明します。前回に引き続き整数の割り算を掛け算に変換する方法について考えます。単純化のため、計算対象を16bit符号なし整数型に限定します。除数が最大値の半分より大きい…

整数の割り算を掛け算に変換 (1)

【注】この記事の計算方法は不完全なため誤差が出ます。次回以降で補正する方法を説明します。コンパイラの出力を見ていると、除数が定数の場合に整数の割り算を掛け算に変換していることに気付きます。これがどんな原理で行われているのか考えてみました。…

Gdk#によるグラフィックス

本日のMonoDevelop勉強会の資料として、Gdk#でグラフィックスを表示して操作する手順をまとめました。 Gdk#によるグラフィックス

ビルド速度の計測

同一マシンのWindows上で各種UNIX互換環境のビルド速度を計測してみました。 CPU Athlon 64 X2 4600+ 2.4GHz OS Windows XP MCE SP3 対象 binutils-2.22 ビルド方法 configure --target=i386-darwinmake -j2 結果 MSYS gcc-4.7.0 6:32 Cygwin gcc-4.5.3 7:37…

固定レイアウトとレイアウトマネージャ

10月13日(土)のMonoDevelop勉強会の資料として、固定レイアウトとレイアウトマネージャを比較しながら触る手順をまとめました。 固定レイアウトによるGUI レイアウトマネージャによるGUI

池袋バイナリ勉強会

池袋で勉強会専用のスペースをオープンしました。定員は19名(演台含む)です。 http://w.livedoor.jp/ikebin/ 日曜日の池袋バイナリ勉強会の他、コンピュータ関係の勉強会を開催します。 よろしくお願いします。