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

2010-01-01から1年間の記事一覧

VWD2010でF#

SilverlightでF#を使用する場合、Visual Studio 2010 ProfessionalではC# SilverlightアプリケーションとF# Silverlightクラスライブラリを組み合わせる方法が推奨されているようです。 F# for Silverlight 4 available - Inside F# フリーのVisual Web Deve…

逆アセンブラ・インタプリタ

id:n7shi:20100701で開発した逆アセンブラ・インタプリタをF#に移植しました。Visual Studio 2008 ShellでF# Integrationを使用しています。 http://github.com/7shi/Betelgeuse/tree/20100709 SilverlightではなくWindows Formsを使用しています。Silverlig…

逆アセンブラ・インタプリタ

Alphaの命令について調査するため、Silverlightで逆アセンブラ・インタプリタを作成しました。以下でホスティングしています。ページ上部の[Test1]などのボタンを押すとサンプルを読み込んで実行します。 Sirius - Alpha Canis Majoris (名前の由来:最も明…

ulongの積の上位64bit

C#

ulong(64bit符号なし整数型)同士の掛け算を128bitで計算して上位64bitを取得する必要に迫られました。C#のサンプルが見当たらなかったので、作成したものをパブリックドメインに置いておきます。下位64bitは普通に掛け算すれば得られます。 public ulong u…

Personal Alpha

Personal AlphaというAlphaエミュレータでNetBSDを起動してみました。(GXemulやQEMUではOSが起動するところまで実装が進んでいないようです)Personal AlphaはTru64とOpenVMSしかサポートしていないため、そのままではNetBSDは起動しません。クロック(mcclo…

クロス開発

昨日と同じネタですが、今日はWindows CE系が対象です。使用しているファイルはid:n7shi:20100519のものです。 【画像左】Windows Mobileエミュレータ(ARM)の共有フォルダ機能でホストのフォルダをマウントして、ExcelからクロスビルドしたEXEを実行していま…

クロス開発

ホスト側でExcel版コンパイラ(id:n7shi:20100519)を動かして、NT4/MIPSゲスト側(id:n7shi:20100609)から共有フォルダ経由でEXEを実行してみました。クロス開発です。NT4/MIPSで動くExcelを持っていないので、このような形になりました。

QEMUでNT4/MIPS

【追記】以前は2種類のQEMUを使い分ける複雑な手順を掲載していましたが、パッチによって0.13.0だけですべての作業が行えるようになったため、説明を修正しました。Windows上のQEMUに、MIPS用のWindows NT 4.0 Workstationをインストールして動かしてみまし…

HTMLをパース

私がHTMLをパースするのに使用している独自パーサーXmlParserをご紹介します。.NET標準のXmlReaderから妥当性チェックなどを省いて単純化したものです。構造は単純で、XmlParserという1つのクラスだけで構成されています。C#/VB10のソースを以下にパブリック…

ファイル名操作マクロ

Excelのマクロでファイル名を操作するため.NET風の名前の関数を作りました。単純なものですが私はよく使うので、参考までにパブリックドメインで公開します。

コンパイラ

id:n7shi:20100305でExcel上のネイティブコンパイラをARMに対応しましたが、今回MIPSに対応しました。MIPS用のNT4とCEに対応しています。QEMU上のNT4/MIPSで動作を確認しました。 vba-exe-4.xls 以下のアーキテクチャを切り替えられます。 Windows (x86) Win…

コンパイラを作ってみて

コンパイラ開発(id:n7shi:20090310)を通して物の見方がどう変わったかについて書いてみます。一般的な見解(と私が認識しているもの)、私の見解(過去・現在)などの視点が入り乱れるため、箇条書きを中心に記述します。何かを主張しようとしているわけで…

VMware上でのBSD系OSのビルド速度

id:n7shi:20100404のコメント欄で、NetBSDのbuild.shを使ってカーネルのクロスコンパイルをすればgccのバージョンを揃えて同じもののコンパイル速度が比較できるとご指摘いただいたので、計測しました。あくまでVMware Player上での計測ですが、NetBSDの展開…

binutils向きのBSD系OSは?

VMware Player上のBSD系OSでbinutils-2.20.1のビルド時間を計測してみました。OpenBSDのビルドの遅さとDragonFly BSDのファイル削除の速さが突出していますが、それ以外はほとんど同じです。DragonFly BSDのファイル操作がサクサクしているのは独自開発のHAM…

Virtual PC vs VMware Player

各種OSでVirtual PCとVMware Playerの速度を比較してみました。計測したマシンではVMware PlayerでAMD-Vを有効にできません。各OSでの処理は異なるためOS間の比較に意味はなく、同一OSでのVM間の比較が目的です。 Windows XP SP3, Athlon 64 X2 3800+, Virtu…

カーネルビルド計測

id:syuu1228さんがOpenBSD/sgiのカーネルビルドを計測されています(セルフ/amd64上のクロス)。私の手元のマシンでも計測してみました。Interixはid:n7shi:20100113で移植したクロス環境を使用しています。

コンパイラ(Windows Mobile対応)

id:n7shi:20100303で公開したExcel上で動くコンパイラが割と好評だったようなので、調子に乗ってWindows Mobile用のARMバイナリも出力できるようにしてみました。 vba-exe-3.xls x86を直訳したような冗長なARMのコードを吐きます。残念ながらPocket Excelで…

クロス開発の環境変数

id:n7shi:20100113でも取り上げましたが、OpenBSD上で他のアーキテクチャのカーネルをクロスビルドする手順はid:syuu1228:20090805にまとめられています。カーネルをビルドするときの環境変数が多いので、簡略化するための俺々スクリプトを作りました。

コンパイラ

masapicoさんによるWindowsの実行ファイル(PE)を出力する簡単なコンパイラがあります。 VBでEXEを作成する 今となってはVB6は簡単には手に入りませんが、VBはGUIを除けばVBA(Officeのマクロ言語)と共通です。そのためGUIをワークシートで代用してExcelに…

GOTエラー

OpenBSDでportsをビルドしていて、CUPSでエラーになりました。 Linking texttops... (snip) /usr/bin/ld: not enough GOT space for local GOT entriesGOTというのはGlobal Object Tableのことで、どうやらグローバル変数が収まりきらないというエラーのよう…

パッケージ

私が手も足も出ないでまごまごしているうちに、GdiumにOpenBSDが移植されました! http://www.openbsd.org/loongson.html さっそくportsを色々とビルドしています。ものすごく時間が掛かるため消えると痛いので、自分用のバックアップを兼ねてSkyDriveに置い…

JPC

JPCというJavaで書かれたx86 PCエミュレータの存在を知りました。 http://javapc.sourceforge.net/ id:n7shi:20100221で取り上げたsanosのサイトを見ていて、アプレットで起動するデモを見付けたのがきっかけです。 Running sanos in a browser (非常に重い…

inet

VC++でビルドしたinetがMINIXで動きました。 http://github.com/7shi/minix-tools/tree/20100227 ソースをインポートしてビルドしただけではパケットが壊れてすぐに落ちました。原因はbuf.hの以下のマクロでした。 #define ptr2acc_data(/* acc_t * */ a) (b…

フォルダ整理

VC++でMINIXのバイナリをビルドするためのソースツリーがごちゃごちゃして来たので、MINIXから持って来たソースをlib, servers, drivers, commandsにフォルダ分けして整理しました。 http://github.com/7shi/minix-tools/tree/20100226 今後カーネルに必要な…

shとmake

VC++でshとmakeをビルドしてMINIXで動かせるようになりました。yaccやlexを用意するのが面倒だったため、生成したソースを流用しています。 http://github.com/7shi/minix-tools/tree/20100225 shとmakeを入れ替えて、xzのconfigure(長いシェルスクリプト)…

pushf/popf

VC++でビルドしたバイナリをMINIXで動かしていて、strchr()で落ちることに気付きました。strchr()は組み込み関数として特別扱いされているため、C言語で記述してもVC++が受け付けてくれません。オプションで組み込み関数を無効にしてもダメです(VC++2005ま…

転送・実行スクリプト

VC++でMINIX用のバイナリを開発すると、動作確認が面倒です。ホスト(開発マシン)にInterixでFTPサーバを立てて(/etc/inetd.confでftpの行をコメントアウト)、ゲスト(MINIX)からアクセスして実行する手抜きスクリプトを書いてみました。 #!/bin/sh HOST…

libc

VC++のMINIXクロス開発でlibcをサポートしました。 http://github.com/7shi/minix-tools/tree/20100222 id:n7shi:20100209ではシステムコールを直接呼んでいましたが、libcをサポートしたことで以下のような普通のCプログラムが動きます。 #include <stdio.h> int mai</stdio.h>…

Sanos

VC++が出力したコードをMINIXで動かそうとして、64bit整数型の剰余(a % b)を計算する部分で__aulldvrmというシンボルを使用していたためリンクエラーになりました。32bitのx86では64bitを計算する命令がないため、コンパイラが出力するコードでは計算用の…

exit

VC++でexit()に必要な関数だけlibcから持って来て、動くようになりました。 http://github.com/7shi/minix-tools/tree/20100219 #include <stdlib.h> int errno; void start() { __exit(42); } CRTがないため、単発の関数をエントリポイントにしています。</stdlib.h>