libvdmgrを使用した、システムを実行するWindows用アプリです。
vdmgrはシステムの実行だけですが、vdmgrdebugはアプリケーションのデバッグやパフォーマンス解析など、システム上で動作するアプリケーションの開発などに使用することができます。
現在用意しているシステム用のアプリケーションの開発を行うことができます。
CPUがZ80、8052は、C言語のコンパイラに、SDCCを使用することで、ソースレベルのデバッグが可能です。
TD4、GMC-4は簡易アセンブラを内蔵しているため、ソースファイル(.asm)を読み込むことが可能です。
ソースファイルから読み込んだ時は、ソースレベルのデバッグになります。
名称 | 説明 |
---|---|
ソースファイルリスト | デバッグ情報を読み込んだ時のみ使用することができます。 デバッグ情報から取得したファイルの一覧を表示します。 ファイル名をダブルクリックで、ソースファイルを開きます。 |
ショートカットボタン | 実行、停止などを行うボタン。 <一応用意してありますが、ショートカットキーを使った方が便利です。 |
ブレークポイント領域 | 薄いグレーの箇所を左クリックするとブレークポイントの設定と解除ができる。 |
実行時間・クロック数 | 実行から停止までの時間とクロック数を表示します。 |
レジスタ操作 | CPUやレジスタを持つモジュールの操作を行います。 |
ログ | ibvdmgrやモジュールが出力するログを表示します。 |
メモリー操作 | CPUやメモリーを持つモジュールの操作を行います。 |
ブレークポイント一覧 | 設定中のブレークポイントの表示と、設定・解除・無効を行います。 逆アセンブルから設定したブレークで停止した時は、逆アセンブルを表示します。 ソースファイルから設定したブレークで停止した時は、ソースファイルを表示します。 |
ローカル変数 | デバッグ情報を読み込んだ時のみ使用することができます。 現在停止中のアドレスから見える変数を表示し・編集を行います。 コンパイル時の最適化により、正しく表示されないことがあります※1。 現在、ビットフィールドは未サポートです。 |
動作状態 | システムの実行中は実行、停止中は停止が表示されます。 システムが正しく構築されていない時は未構築が表示されます。 |
※1 |
SDCCのデバッグ情報ファイルCDBは、レジスタ変数が間違って出力されていたり、関数間のブロックが初期化されていなかったり、ビット変数のアドレスが設定されていなかったり、ブロックのレベル1に定義しているローカル変数のブロックが1つで閉じていたり、ライブラリ化すると情報がなくなったりと正しく出力(実は正しい?)されていないようです(SDCC付属のデバッガでも正しく表示されない)。 ファイル名の全てを出力されていなかったり、ディレクトリ情報がないなど他にも色々と問題がありますが、できる限り行情報は前後の情報から補完して作成しています。 そのため、SDCCのバージョンが、上がると正しく読めなくなる可能性があります。 また、変数には補完できる情報がどこにもないため、正しく表示されない可能性があるので(vdmgrdebugの変数表示が間違えていことも良くあるので)、気を付けてください。 |
vdmgrの詳細設定と同じです。
キー | 説明 |
---|---|
Ctrl+O | イメージファイルを開きます。 システムを実行している時は選択できません。 |
Ctrl+R | 現在開いているイメージファイルを再読み込みします。 システムを実行している時は選択できません。 |
Ctrl+G | フォーカスが逆アセンブル時はジャンプ先アドレスを表示します。 ソースファイル時はジャンプ行を表示します。 メモリー時はメモリーを表示するアドレスを表示します。 |
F3 | ソフトリセットします。 |
F5 | システムを実行します。 |
Shift+F5 | 実行状態のシステムを停止します。 |
F9 | ブレークポイントの設定と解除。 |
F10 | 関数をステップオーバーします。 |
F11 | 関数をステップインします。 |
使用可能なモジュールは、メニューから「ヘルプ」-「モジュール一覧」を押下し、モジュール一覧ダイアログで確認します。
ファイルを、configディレクトリ以下へ保存し、vdmgrdebugを起動します。
詳細設定を開き、ターゲットシステムへ”Z80テレビゲーム(SC1602BS/LEDx8/7SEGx4/SN76489)”を選択します。
画面下にある「メモリー」タブを選択し、アドレスに0xc202入力し「Enterキー」押下します。
メモリー内容に適当な値を書き込んでいくと、画面に線や点が描画されます。
また、アドレスを0xf000にするとLED、0xf100,0xf101,0xf102,0xfx03にすると7SEGを点灯・消灯できることが確認できます。
動作確認後、ファイルを保存し、適当な場所へ解凍します。
メニューから、「ファイル」-「開く」を選択し、解凍した場所にあるsampleディレクトリ内のmain.ihxファイルを選択します
(main.ihxファイルをvdmgrdebugへドラッグアンドドロップでも可)
正しく読み込みが完了し、実行すると以下のような画面が表示され、線が移動し、壁をぶつかると音が鳴り、LCDには波のようなもの、LEDと7SEGがカウントするプログラムが動作します。
また、ソースをビルドするにはSDCCが必要となります。
現在ソースレベルのデバッグに対応しているのは、SDCCのCDBフォーマット(Z80/MCS-51)、TD4、GMC-4です。
CDBは、アセンブリ言語のデバッグ情報の出力方法が良く分からないため、C言語のみの対応となっています。
※CC65、IEEE695のデバッグ情報も大体分かっているため、6502(ファミコン)とTLCS-900H(NEOGEO POCKET)は対応できると思います。
vdmgrdebugは名前付きパイプに対応しています。
UARTの送受信先を名前付きパイプへ接続し、名前付きパイプに対応した端末を使用することで、シリアルコンソールとして使用することができます。
通信速度は、システム構成ファイルへ記述します。
以下は、Tera Term v4.74以降を使用した時の接続手順です。