Petit Profiler v0.2a (EMS 対応など)
2026-05-03
タグ: #release先日作った PC-98 の DOS 用プロファイラ に機能を2個足した。
1つは、計測中に計測していることが分かるように画面右下の T-VRAM のアトリビュートを書き換える処理が入っていたが、この挙動の有効無効を切り替えられるようにした。
もう1つは、CS:IP の記録を EMS メモリに保存できるようにした。
v0.1a では CS:IP の記録をコンベンショナルメモリに保存していた。
そのため、プロファイラを実行するには、プロファイラ本体に加え 128KiB のコンベンショナルメモリが必要で、計測対象のプログラムは残りの空きメモリに収まっている必要があった。
上記の Petit Profiler 初出の記事でも「EMS や XMS のメモリに記録した方がいいんだろうな」と書いている。
というわけで、急ぎ EMS メモリへの記録対応を足すことにした。
int 67h の API 自体はそんなに難しくはないが、割り込みハンドラ内でいちいちエラーチェックしながら EMS を読み書きするのはちょっと面倒というか億劫だった。
エラーの判定と取り扱いの処理なんてどこで書いてもやっていることは大して変わらない筈だが、割り込みハンドラ内でエラーが起こるかもしれない操作を行うというのは、なんか神経質になる。
この点は、一旦確保してしまえば割り込みハンドラ内から好きに読み書きできるコンベンショナルメモリの方が気楽だ。
他に考えていることというと、Petit Profiler のパッケージには PPVIEW.CPP という名前で、プロファイルのログとリンカの map ファイル内のシンボルの対応付けをして重い関数を表示するプログラムのソースが入っているが、これの機能追加がある。 現状 PPVIEW.CPP は JWlink の出力する map ファイルにしか対応していない。 まず、JWasm は -Fl オプションで出力できるリスティングファイルにシンボルというかラベル一覧が書かれているっぽい。 これに対応すれば、JWasm で単一の .asm からアセンブルした .com のプロファイル結果を元の .asm に関連付けられそうだ。 あと、Microsoft の LINK.EXE の map ファイルも対応するといいんじゃないかという気がしているが、MS-DOS 拡張機能セットが手元にないので暫く先になりそう。 PPVIEW.CPP 自体の DOS 対応は、この令和に DOS 開発を全部 DOS 上でやっている事例はあんまりなさそうなので、PPVIEW は当分現代コンピュータ上で動かしてくださいということで、優先度低めでいいかなぁと思っている。