暫定版 ============================================================================== デバッグに関係するコマンド・機能 ============================================================================== ■DEBUG:0 Debug : Main (CPU #1) デバッグモード ※後述 ■DEBUG:1 Debug : Disk (CPU #2) デバッグモード ※後述 ■DEBUG:2 Trace : 逆アセ時のレジスタ表示 (DEBUGGER) ・デバッグモードでトレース時に表示される「現在のレジスタ」が 画面に残るようになります ■DEBUG:4 Trace : PAUSE時のフリップ設定表示 (VIDEO) ・*.cfg で FLIP に 2 以上を設定した場合に有効になります ・pause/break 時に、各ページに割り当てられた DMA アドレスと 最後に描画したベージが示されます ■DEBUG:6 Trace : Disk動作トレース & CDOS-II 2HDフォーマットパッチ ・ディスクアクセスのプログレス表示を詳細にします デバッグモードではこちらに切り替えた方が良いと思います ■DEBUG:7 Trace : キーコード表示 & パネル座標表示 ・*.cmd や キーボード定義用のコード確認が目的です ------------------------------------------------------------------------------ ■DEBUG.step=n ステップ実行 ※後述 ------------------------------------------------------------------------------ ■DEBUG.cmd=n デバッグコマンド ・デバッグコマンドを実行します ・デバッグコマンドは *.dbgファイルに記述し、*.cmd に登録したキーで実行します ・DEBUG.cmd=14 には「dump」コマンドが登録されています (デフォルトコマンド) ・DEBUG.cmd=15 には「disasm」コマンドが登録されています (デフォルトコマンド) ・デバッグコマンド は、ブレイク中にのみ実行可能です ・コマンドの種類毎に、最後に実行した「メモリ種別」,「アドレス」を覚えています ブレイク直後は アドレス :ブレイク時に到達したPC メモリ種別:無指定 に初期化されます ・「メモリ種別=対象アドレス」が省略されたコマンドをはじめて実行する際は、 アドレス :ブレイク時に到達したPC メモリ種別:現在のメモリマップから PC 位置のメモリを判別して選択 となります ※動作中のALUに迷い込んでいた場合は、メインRAM(高速TextVRAM)が表示されます このケースは「ステップ(トレース)実行」でしか内容を確認できません ・継続実行: 「メモリ種別=対象アドレス」が省略されたコマンドは「前回」の条件を引き継ぎます 「前回」には、ブレイク時に自動実行されるコマンドも含まれます 前回、メモリ種別が指定されていた場合は、その境界に達するとスタックします 無指定だった場合、現在のメモリマップに従い 0xFFFF まで表示します 但し、GVRAM, ALU, 辞書ROM エリアに侵入した場合は、メインRAM が表示されます ※ブレイク時の PC が、GVRAM, 辞書ROM にあった場合は、まず各エリアが表示され さらに続けることで 0xFFFF まで表示します ・*.cmd ファイルの設定は j80 起動時に FIX されます デバッグコマンドを変更したい場合は、*.dbg ファイル側を修正してください ※詳細は sample.dbg を参照してください ------------------------------------------------------------------------------ ■Debug:1 メモリ・ダンプ (一括ダンプ) ・RAM系のメモリを一括ダンプします ・「サウンドボード2」の ADPCM用メモリも落とせます (sound.bus.mem) ・disk.mem は ROM,未実装範囲を 0x00 で埋め、アドレスを揃えてあります ■Debug:2 メモリ・ロード (Load Movie) ・拡張メモリを一括ロードします ・iplディスク(ex. : foo.d88)と同じ場所にある foo.e88 をロードします ・apaslothy さんの「動画実験」サポート用の機能です http://www5f.biglobe.ne.jp/~apaslothy/ スタック方式なので、一回再生する度に大量のディスクを食わせる必要があり、 手間なので用意しました ■Debug:3 メモリマップ表示 ・メモリの割り当てを表示します ■Debug:4 モニタ(GUI)起動 ・モニタを立ち上げます ・モニタがアクティブになると、エミュレータは停止します ・エミュレータ側が停止したタイミングでのみ内容が更新されます ・メモリとレジスタを操作できます ■Debug:5 トレーサ(GUI)起動 ・*.dbg ファイルをドロップできます ------------------------------------------------------------------------------ ■+DBG ・ブレイクポイント, デバッグコマンドを設定します ・ブレイクポイント, デバッグコマンド は、*.dbg ファイルに記述します ・*.dbg ファイルを使う場合は、ブレイクポイントにデバッグコマンドを登録して 「ブレイク時に〜させる」設定も可能です ・*dbg ファイルは、ドロップ可能です ・*dbg ファイルは、read モードで開くので、(編集ソフトが抱えていなければ) 開いたまま更新可能です ※詳細は sample.dbg を参照してください ■DBG ・ブレイクポイント, デバッグコマンドを一時的に無効にしたい場合に使います ・無効→有効に変更する際に *.dbg ファイルを読み直します 「*.dbg 編集→保存 ⇒ DBG コマンド」で更新 が可能です ------------------------------------------------------------------------------ ■検討中の機能 ・メモリ・ロード (bin) ・foo.dbg と同じ場所の foo.bin をロードする ・いらない? ・メモリ・ロード (汎用) ・ファイルダイアログで bin を指定する ・デバッグモードでは bin のドロップで発動 ・いらない? ・内部診断コマンド ・グラフィックモード表示 ※要望あればメールください ============================================================================== デバッグモード ============================================================================== ■デバッグモードへの移行 / 通常モードへの復帰  - - - - - - - - - - - - - - - - - - - - - -  DEBUG:0 Debug : Main (CPU #1) デバッグモード@CPU  DEBUG:1 Debug : Disk (CPU #2) デバッグモード@CPU ------------------------------------------------------------------------------ ・CPU毎に切り替え可能です どちらかのCPUがデバックモードに移行すると、j80本体もデバッグモードになります ・pause状態でデバッグモードに移行した場合は、一命令実行してブレイクします ・通常モードへの復帰時は、常にpauseが解除された状態になります ・デバッグモードでは、Diskがオフラインの状態でもDisk側CPUは動作を続けます (通常モードでは負荷低減のため停止します) ------------------------------------------------------------------------------ ■ブレイク / 解除  - - - - - - - - - - - - - - - - - - - - - -  Pause 一時停止 <-> 再開 ------------------------------------------------------------------------------ ・通常モードの pause/resume と同じです ・ブレイク時に、  ・最後の命令を実行する前のレジスタ値 (省略する場合あり)  ・最後に実行した命令と結果概略  を表示します ------------------------------------------------------------------------------ ■ステップ実行  - - - - - - - - - - - - - - - - - - - - - -  DEBUG.step=0 ステップ実行 (最小ステップを実行してブレイクする)  - - - - - - - - - - - - - - - - - - - - - -  DEBUG.step=1 ステップ実行 (HALT,ブロック転送系は完了までを1ステップとする)  DEBUG.step=2 ステップ実行 (step=1 + CALL復帰までを1ステップとする)  DEBUG.step=3 ステップ実行 (step=2 + JRまでを1ステップとする) ------------------------------------------------------------------------------ ・DEBUG.step=0  ・このコマンドは、MAIN側, DISK側 両方に送られます   j80側の制御(進行)に伴い、どちらかのCPUが選択されます  ・フリーラン(スキップ)中は即ブレイクします  ・ブレイク状態からは1ステップ実行してブレイクします   ブロック転送などは1ターン(最小ステップ)毎にブレイクします    - - - - - - - - - - - - - - - - - - - - - - ・DEBUG.step=1~3  ・このコマンドは、ブレイクしていたCPUにのみ送られます   もう一方のCPUはフリーランに移行しますのでご注意下さい ★ブレイクポイントもマスクする?   上記仕様により、フリーラン(スキップ)中は無視されます    □このコマンドは、ブレイク直前の命令で動作が変わります   (「次に実行する命令が例外対象か?」ではない点に注意)    □例外扱いする命令以外を実行後にブレイクしている   最小ステップ実行後にブレイクします(DEBUG.step=0 と同じ動作になります)    □例外扱いする命令を実行後にブレイクしている   「この後ろの命令に到達する命令」を実行した後にブレイクします   ブロック転送,I/O → 最終回   CALL → RET   DJNZ,JR系 → false時(最終回)   ※停止条件はアドレスだけなので、step=2,3 ではブレイクしないこともあります   ※j80の実装上の問題により step=1 でもブレイクしないことがあります ------------------------------------------------------------------------------ ■注意:モードによる動作の違い ------------------------------------------------------------------------------ ・「FDD」コマンドによる DiskIF の online / offline 切り替え ・通常モード :offline にすると、DISK側 CPU は完全に停止します ・デバッグモード:offline にしても、DISK側 CPU は動作を続けます ==============================================================================