[目次]
harib27fを動作させてみた画像(画像がこのwikiに添付できなかったので、CHNOSProjectWikiの添付ファイルへのリンクになっています)。 http://chnosproject.sourceforge.jp/wiki147u/index.php?plugin=attach&pcmd=open&file=scrshot.png&refer=CHNOSProject/CHNOS
harib27f相当の機能ほぼ全て
make install相当の機能(make installができないだけで、方法は他にいくらでもある)
エミュレーターは便利です。そして素晴らしいソフトウエアだと思います。
しかし、やはり実機や仕様と挙動が異なる場合が多々あるようです。
そして時にそれは、開発者達を惑わせます。
デバッグ例外は、CPUに用意された便利で強力な機能の一つです。
指定されたアドレスのコードを実行したり、またはデータとして読み書きを行ったり、はたまたIOポートとしてアクセスしたときに、例外を起こしてくれます。
これは、メモリがいつの間にか破壊されていた!という心霊現象のようなバグを解決するために非常に有効です。
#ええ、そうですとも。まさかメモリ管理システムがメモリを破壊していたなんて、思い至りませんでしたよ(涙)。
…ということで、その素晴らしい機能を使ってデバッグしようとしていたのですが…。
いきなりこの関門にぶち当たってしまいました。
どうやら検索したところ、QEMUはKQEMUという高速化モジュールをインストールしなければデバッグ例外が使えないようです。
Bochsに関しては、「エミュレーション速度は遅いけれど例外の報告は正確だから!」ということで重宝していたのですが、動きませんでした。
もしかすると、自分の設定ミスかと思い、VirtualPC2007で実行してみました。
すると…出ました。デバッグ例外。
これで一安心、と思いきや、次なる関門が待ち受けていました。
今回は、ある特定のアドレスにアクセスした命令をすべてリストアップしたかったので、ブレークポイント例外が発生しても、情報を確認後、実行を再開させたかったのです。
ということで、「紙に印刷したらきっと分厚い」IA-32 インテル® アーキテクチャソフトウェア・デベロッパーズ・マニュアルを参照して、例外ハンドラーを実装しました。
このマニュアルが言うには、私が今求めている、指定アドレスへの書き込みに対するブレークポイント例外が発生した時、
「プロセッサは、このアクセスを行った命令を実行した後に例外を発生する。したがって、これらのブレークポイント条件によってトラップクラスの例外が発生する。」
「トラップの場合-レジスタCSとEIP にセーブされている内容は、その例外を生成した命令の次の命令を指す。」
つまり、単純にIRETDすれば、実行を再開できるはずだったのです。
しかし…VirtualPC2007は
「例外を発生させた命令自体を指すEIP」
を保存していたのです…。
なるほど、だからあんなに繰り返しシリアル出力にデバッグ例外の発生が記録されていたのか。
24 | 0111_0100_xxxx....xxxx | 16 | 65535 | FFFF | 7-4型 |
28 | 0111_0101_xxxx....xxxx | 20 | 1048575 | FFFFF | 7-5型 |
32 | 0111_0110_xxxx....xxxx | 24 | (省略) | FFFFFF | 7-6型 |
64 | 0111_1000_1101_xxxx....xxxx | 52 | (省略) | (省略) | 7-D型 |
128 | 0111_1001_1101_xxxx....xxxx | 116 | (省略) | (省略) | 7-1D型 |
256 | 0111_1011_1101_xxxx....xxxx | 244 | (省略) | (省略) | 7-3D型 |
512 | 0111_1100_0111_1100_xxxx....xxxx | 496 | (省略) | (省略) | 7-7C型 |
気は心レベルですが。 第二IRCサーバをしばらく落とします。節電の一環です。被災された方等にもし役立つものでしたらご一報ください。その折には再開します(ないとは思いますが)。 電力事情が改善しましたらもちろん再開するつもりでおります。その折にはこちらにて告知させて頂きます。
printf("ここはいつもの白だよ\n"); printf("ここは何色かな?\n"); color(2, 0); printf("じゃあここは何色かな?\n");
Attach file: 015.PNG by hikarupsp
長くなりそうなので、ページを分けました。hikarupsp/pcctolテスト/準備
ブロック型プラグイン
★★★☆☆
#block( [clear[:right] [:left]] [,w[idth]:数値[CSS単位]] [,height:数値[CSS単位]] [,[left] [right] [center]] [,around] [,class:[@]クラス名] [,font-size:数値[CSS単位]] [,round] ){{
[複数行引数]
}}
複数行引数の内容を<div>で囲まれたブロック要素へ出力します。
複数行引数の内容は通常の通りWiki書式として整形されます。
クラス名にはデフォルトで "@round", "@info", "@caution", "@ban" が用意されています。
"@round" は他のクラスと組み合わせて使用できます。
新たにCSSクラスを追加したい場合は、html側xpwikiインストールディレクトリ/skin/css/block.css に(存在しなければ作成して)記述します。 記述方法は、trust側/modules/xpwiki/skin/css/block.css の "$class div.block_round" あたりを参照してください。
引数を省略するとCSSで clear:both 相当、 "left" は clear:left 、"right" は clear:right 相当です。
OSAKAは現時点ではAT互換機のHDDを読み書きすることができません!
かなりの高確率で間違いみたいです。近日実験レポート。勘違いスマソ!
DEFAULTCOLDEP, ←標準の色深度 0, ←? "OSASK .BMP", ←自動読込する壁紙のファイル名(8.3形式) 0, ←? (char*)0, ←ファイル名の先頭ポインタ・・・かな? 640,400, ←スクリーンの大きさかなぁ? {8, 8, 0xc618, 0x00c0c0c0, 0x00c0c0c0}, ←4bit,8bit,16bit,24bit,32bit時の背景の色 8, ←? {8, 4, 2, 4, 1}, ←? 8 ←?