PC-98 向け DOS 用高解像度デバッガ作成

タグ: #asm  #release 

PC-98 上での DOS プログラムのデバッグをするとき、画面に時々文字を表示するくらいの CLI ツールとかであれば既存の公開されているデバッガで十分デバッグできるのだが、M3 の演奏プログラム のように画面を全部占有するプログラムだと、デバッガとデバッグ対象のプログラムが画面を取り合って非常に作業が面倒になる悩みがあった。

それとは別で昔の PC/AT 互換機の周辺機器を調べていたら、HGC (Hercules Graphics Card) は CGA や VGA とリソースが異なり、HGC をゲームや CAD のデバッグ表示用に使う需要があった、というのを知った。 当然、同様に PC-98 でも内蔵のグラフィックスとは別の表示機器を用意して、そっちに表示するデバッガがあれば、内蔵グラフィックスの競合の問題を回避しつつデバッグができるよね、と思った。 こう思ったのは多分数年前のことなのだが、DOS でのデバッガ実装の知識がなく、調べたことが Petit Profiler に役立ったりもしたが、結局書きかけのコード断片が半年以上野晒しになっていたのだった。

そんなこんなでデバッガのことは頭の隅に追いやられていたが、ふと思い付きで AI に DOS 用デバッガ実装のアプローチを聞いたら結構詳しい情報を返してきたので、何だかできそうな気がしてきた。 DOS のデバッガの実装自体に興味はあったので、基本的には自分がコードを書いて AI に実装の不備の調査や動作確認を任せる形で進めた。 ただ、逆アセンブラ周辺の実装はあまりに面倒だったので AI に殆どやってもらった。 振り返ると、自分の理解が一番足りていなかったのは DOS のプロセス管理の知識だったと思われる。 デバッグ中にブレークしたり実行再開したりする度に、デバッガ本体とデバッグ対象の子プロセスの間を行き来しなくてはならないが、その手順が全然わかっていなかった。 プロセスの切り替えが動けば、メモリ保護とかもないし、他の実装は比較的苦労せずにできた部分が多い感じがする。

AI に動作確認をやらせるのには QEMU を使った。 最初は実験用の実機を用意してどうにかするつもりだったが、調べたら QEMU に必要そうな機能が揃っているのがわかった。 そこで、DOS の入ったディスクイメージを用意して、動作確認対象のプログラムを QEMU で動かせるようにしてみろ、と AI に言ったら、QMP とか名前付きパイプとかを使って動作検証するための 800 行くらいの PowerShell スクリプトが書かれた。 中身は全然読んでいないのだが、まあ動いていそうなので良しとしている。 DOS の日本語は Shift-JIS だが、これを UTF-8 に変換して取り扱えていそうな部分だけ気になったので見てみたところ、PowerShell から .NET の機能を呼び出せるので、それで変換しているようだった。 知らなかったので、自分で試してみたら PowerShell のスクリプトから MessageBox が表示できてなんだか面白かった。

今後は、機能が幾らか足りなかったり端折ったりしている箇所の改善と、RS-232C 越しのリモートデバッグ機能を追加できたりしたらいいかなあと思っている。 作ったデバッガは HRDB のページ にあります。 DOS 汎用の派生バイナリの LRDB も同梱しています。


投稿一覧に戻る トップに戻る