作りたいものに妥協しないために、会社を興してまで完成させた作品です。うれろー、うれろー。

2018年03月29日

RFC: Common Source Code Projectのデバッガの改良

Common Source Code Projectのデバッガの改良中です。
趣旨としては、操作対象のデバイスやCPUを切り替えられるようにしよう、というものです。
以下に試作版をアップしています。
http://takeda-toshiya.my.coocan.jp/00tmp/debugger.zip

私のエミュレータのデバッガを開発に使ってくださっている方がいらっしゃいましたら、
ご意見ご要望をコメントに頂けますと助かります。

180329-1.png

! device
とすると、仮想マシンの全デバイスを列挙します。
! device (id)
とすると、操作対象のデバイスを切り替えます。

ただし、CPUを実行するG,T,Pコマンドおよびブレークポイント関係のコマンドは、
デバッグ対象のCPUに対して実行されます。
T,PコマンドでCPUをステップ実行すると、CPUのレジストリ情報とあわせて、
操作対象のデバイスの情報が緑色で表示されますので、
例えば、サブCPUを操作対象にして、TコマンドでメインCPUをステップ実行しながら、
メインCPUとサブCPUの実行中の命令やレジスタの状態を並べて確認したり、
(メインCPUで1ステップ進める間にサブCPUが複数ステップ進む、といことはありますが)
サブCPUのメモリやI/O空間を操作したり、といったことが可能です。

! device cpu
とすると、操作対象のデバイスを元のCPUに戻すことができます。

180329-2.png

CPU以外を操作対象にすることができます。
例えばMB8877やuPD765Aを指定すると、FDCのレジスタ状態や実行中のコマンド、
現在アクセスしているセクタの情報を確認することができます。

180329-3.png

また、TMS9918を指定すると、D,EコマンドでVRAMの内容を表示・編集したり、
N,L,WコマンドでVRAMの内容をファイルに読み書きすることができます。
(元々は、たなむさんのTweetを見て、これがやりたかったのが発端です)

180329-4.png

デバッグ対象のCPUを切り替えることも可能です。
! cpu
とすると、仮想マシン中の(デバッガが付いている)CPUを列挙します。
! cpu (id)
とすると、デバッグ対象のCPUを切り替えます。

例えば、最初はメインCPUをデバッグ対象としてデバッガを立ち上げて、
サブCPUにコマンドを送ったところでブレークを掛けて、
サブCPUにデバッグ対象を切り替えて、サブCPUをトレースすることが可能です。

また、これは従来からサポートしていますが、T,PコマンドでCPUをステップ実行して、
CPUのレジストリの情報を表示する際に、
CPUの消費クロック数(起動時から・前回のブレーク時から)、
現在のスキャンラインが始まってからのクロック数、
現在のスキャンライン番号が表示されるようになっています。
HBLANK/VBLANKの間にVRAMに転送する処理を詰め込むような場合に便利かもしれません。
posted by 武田 at 01:34| Comment(10) | 開発 | このブログの読者になる | 更新情報をチェックする
まるくん、がんばれ、ちょうがんばれ