仮に、MZ-700/800/1500/2500, X1シリーズ, PC-80/88シリーズに組み込んでみました。
現状仕様で問題ないか、改良点がないか、よろしければご意見お願いいたします。
http://homepage3.nifty.com/takeda-toshiya/00tmp/debugger.zip
使い方はSYMDEBと同じ感じです。
特定のメモリアドレスやI/Oポートへの読み書きでブレークを掛けることもできます。
メニューから、Control - Debug CPUを選択すると、コンソールが開きます。
?でコマンド一覧が表示されます。
デバッガを起動すると、CPUが停止した状態になります。
このとき、エミュレータのメインウィンドウは操作できません。
GでCPUが連続動作中か、Qでデバッガを終了すると、メインウィンドウを操作できます。
Gを実行すると、ブレークするまで次のコマンドを入力できません。
このとき、Control - Close Debuggerを選択すると、デバッガを終了できます。
数値の入力は基本ヘキサですが、お尻にDを付けるとデシマルになります。
(2014/9/4 15:15追記)
コメントありがとうございます。
対応できるところから実装してみました。
何も入力せずにリターンで、最後に実行した命令を再実行するようにしました。
一度トレース実行して、後はリターンを連打で先に進めることができます。
「次の命令にGo」は、次の命令のアドレスを各軸に取得できるか心配とか、
JMP命令のところで実行してしまうと面倒そう、ということで、
G <address>で、「指定したアドレスまでGo」できるようにしました。
全ブレークポイントを無効にして、指定アドレスにブレークポイントを仕掛けて、
Goしてブレークしたら、元のブレークポイントを復旧するようになっています。
PCからの逆アセンブルリストを常に表示するのは、現在のCLIでは難しそうなので、
GやTを実行した後は、せめて次に実行する1命令だけ逆アセンブルしたものを
表示するようにしました。
Eで複数データを同時書き込みをサポートしました。
EAで文字列も書き込めます。
Gの実行中、ESCキーで手動ブレークを掛けるようにしました。
Tについても正式リリース時までには対応します。
N/W/Lで、メモリダンプをファイルに入出力できるようにしました。
VRAMの保存など、アーキテクチャ依存のデータの扱いについては検討中です。
(2014/9/5 0:10追記)
Gで連続実行中にESCキーで中断した後、CPUをブレークし忘れてたのを修正しました。
Tで大きいステップ数を指定した場合にも、ESCで中断できるようにしました。
i86/i286コアについてもデバッガをサポートしました。
また、古いi86コアを使用していた機種について、新しいi86コアに切り替えました。
古いi86コアは、当面はV30用に残しておくかと思います。
コマンドのパラメタとして、ANK文字を指定できるようにしました。
'A'で、Aの文字コードの0x41を指定することができます。
例えば、E 8000 'A' 'B' 'C'といった使い方をすることができます。
!コマンドを追加しました。主にバーチャルマシンに対する操作をここに入れる予定です。
現状サポートしているのは以下のコマンドです。
! RESET [CPU]
仮想マシンをリセットします。CPUを付けると、デバッグ中のCPUのみリセットします。
! KEY CODE [msec]
キーボードのキーを、msec間だけ押した状態にします。
CODEには、Windowsの仮想キーコードを指定してください。
文字コードと仮想キーコードが一致している場合、'A'のように指定することもできます。
(2014/9/5 2:40追記)
デバッガとは関係ないですが、PC-8801でプチ修正。
従来、DMA転送を一気に実行していましたが、画面の表示期間にあわせて1行分のデータずつ
CRTCに転送するようにしました。
また、DMA転送中にDMAのアドレスやカウンタレジスタの値を更新するようにしました。
バイナリは同じURLにアップしています。
(2014/9/6 0:50追記)
i386とV30について、デバッガをサポートしました。
MB8877が、他のデバイスが登録したイベントを勝手にキャンセルしてしまう問題を修正しました。
FMR-30で、カレンダクロックの更新が止まっていたのが修正されています。
そろそろ週末辺りにでも正式リリースします。
それまでには8084やuCOM87でもデバッガをサポートできるようにしたいですね。
8084は、データとプログラムでバスが分かれていて、ちょっと扱いが難しいです。
(2014/9/7 10:50追記)
8048とUPD7801でデバッガをサポートしましたので、ようやく正式リリースしました。
ご協力ありがとうございました。
X1やPC-6001のサブCPUもデバッグできますので、そちらの解析にもお役立てください。
(2014/10/11 4:00追記)
数値のお尻にDを付けて、デシマルと見做す仕様を一旦廃止しました。