MAME デバッガ続き

デバッガ標準装備となったバージョン以降の最新ビルドかつ WindowsSDL port を見つけたのですが、デバッガは動かないようになってました。うーん、ソースでは Windows も考慮した記述になってるので残念。

仕方ないので Win32API のほうとデバッガコアのヘッダファイルを見てみました。拡張子が .c とか、古めの driver 系は変更がないので、 C で書いてあるなと思うわけですが、こういったコアの部分は C++ で手の込んだコードになっています。デバッガコアの方は4つぐらいのクラスを多重継承してある記述や friend という、素人が使うと泥沼にはまる要素があって私が使うには大変なオーラが漂ってきます。

一方 osd/windows/debugwin.c のほうは Windows 依存のウインドウの作成、位置の管理、テキストボックスのフォームの設置などがメインです。こっちも C++ ですが、使い切れてない出来です(もとは C だったのを徐々に移行中かもしれません)。デバッガコアとの通信は、カーソルの移動なり、デバッグ情報の文字列の取得、デバッグコマンドの送信にだけときっちり切り分けられていました。カーソルの選択などもデバッガコアがすべて管理しているので、OS 依存 (osd, OS depend) だけきっかりやってます。

当たり前かもしれませんが、コマンド入力フォーム以外の表示部分は、文字列を画像化して文字の色などを塗っています。ここが合理化というか、手抜きなんでしょうが、文字列配列を1行ずつコアから得て、bitmap に描画してます。逆アセンブルコードは1行ずつで、CPUレジスタダンプも1行ずつ...ということになります。

旧デバッガだと CPU ごとにレジスタのレイアウトが違うみたいで Z80 は横長に2行(上段:表レジスタ,下段:裏レジスタ)、68000 は縦長に2列(左列:Dレジスタ、右列:Aレジスタ)となっていた余波を見た気がします。

自分好みの入力系統にして、無駄な空白をなくして、レジスタも好きに並べられるとなるとちょっとおもしろそう。とここまでで満足。だってデバッガコアが CPU や RAM にどうつながってるか調べたり実装するのは大変そうですから。

気は済んだので、 M72 を再開したいと思います。