2012.7.23
前へ
次へ
ホームページトップへ戻る

復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります

[第180回]


●ブレークポイントの設定とレジスタダンプ

ND80ZVのZB3BASICにはマシン語デバッグ機能のひとつとして、ブレークポイントの設定とブレーク時のレジスタダンプが備わっています。
TK−80モニタやND80Zモニタのブレーク機能と基本的には同じものですが、ZB3BASICではブレーク時にそのときのZ80CPUの全レジスタの値を画面に表示します(レジスタダンプ)。

MBASICやF80が最初動いてくれなかったときに、その動作解析のために、ZB3BASICのブレーク機能が大いに役に立ちました。
もちろんND80ZVのZB3BASICに組み込まれているブレーク機能は、ROMに書いてありますから、0000〜7FFFがRAMになってしまうと、そのままでは動作できません。
DMコマンドやCMコマンドと同じように、0000〜7FFFがRAMの状態でも機能するように、プログラムを一部書き換えなくてはなりません([第162回][第164回]参照)。

ブレーク動作はDMやCMよりも複雑な動作になるため、うまく機能してくれるかどうかちょっと心配でしたが、DMやCMと同じ考え方でうまく動作してくれました。

下は実際にF80.COM(FORTRAN80)の動作をブレークポイントを設定して解析したときのログファイルの一部です。

logfile nd80zlog\07082124.txt open

ND80ZVに接続しました
0001 0000 - z
1000 00C3 - 
*** nd80z3 basic ****
can't open D.vfd
>/ld zbds1f.bin,bc00
loading ZBDS1F.BIN ...18d0(6352)bytes loaded,from BC00 to D4CF
>bp c238
>jp d233

A>f80

A F  B C  D E  H L  A'F' B'C' D'E' H'L'  PC   SP   IX   IY  I  SZ H PNC
0042 0006 D084 D004 0000 0000 0000 0000 C238 F7FE 0000 0000 FF 01000010
>bp 19c0
>rt@

*=HELL11

A F  B C  D E  H L  A'F' B'C' D'E' H'L'  PC   SP   IX   IY  I  SZ H PNC
0044 0000 FE70 02C8 0000 0000 0000 0000 19C0 C403 0000 0000 FF 01000100
>bp 19c6
>rt@

A F  B C  D E  H L  A'F' B'C' D'E' H'L'  PC   SP   IX   IY  I  SZ H PNC
0D00 1700 0108 011F 0000 0000 0000 0000 19C6 C403 0000 0000 FF 00000000
>dm@0100,011f
0100  C3 9E 06 05 C4 75 C2 00-20 20 20 20 20 20 20 20  テ...トuツ.        
0110  20 50 52 4F 47 52 41 4D-20 48 45 4C 4C 31 31 0D   PROGRAM HELL11.
>dm@0100,012f
0100  C3 9E 06 05 C4 75 C2 00-20 20 20 20 20 20 20 20  テ...トuツ.        
0110  20 50 52 4F 47 52 41 4D-20 48 45 4C 4C 31 31 0D   PROGRAM HELL11.
0120  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
>cm@015b
015B 01-
>dm@5e60,5eff
5E60  00 00 00 00 20 20 20 20-20 20 20 20 20 50 52 4F  ....         PRO
5E70  47 52 41 4D 20 48 45 4C-4C 31 31 0D 0A 43 20 20  GRAM HELL11..C  
5E80  20 20 20 20 20 20 61 62-63 78 79 7A 0D 0A 20 20        abcxyz..  
5E90  20 20 20 20 20 20 20 45-4E 44 0D 0A 45 52 00 0E         END..ER..
5EA0  4F 55 42 0D 00 00 00 00-00 00 00 00 00 00 00 42  OUB............B
5EB0  00 00 00 00 0D 00 00 36-00 00 00 00 00 00 F8 00  .......6........
5EC0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
5ED0  00 00 00 00 00 00 00 00-04 C0 00 00 00 00 00 00  .........タ......
5EE0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
5EF0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
>bp 19c0
>rt@
HELL11

A F  B C  D E  H L  A'F' B'C' D'E' H'L'  PC   SP   IX   IY  I  SZ H PNC
2F44 0000 0017 011F 0000 0000 0000 0000 19C0 C401 0000 0000 FF 01000100
>dm@0100,012f
0100  C3 9E 06 05 C4 75 C2 18-20 20 20 20 20 00 20 20  テ...トuツ.     .  
0110  20 50 52 4F 47 52 41 4D-20 48 45 4C 4C 31 31 0D   PROGRAM HELL11.
0120  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
>bp 19c3
>rt@

A F  B C  D E  H L  A'F' B'C' D'E' H'L'  PC   SP   IX   IY  I  SZ H PNC
0D08 0F00 0017 0117 0000 0000 0000 0000 19C3 C401 0000 0000 FF 00001000
>

指定したアドレスでブレークすると、そのときのレジスタの内容が表示されて、そこでシステムのエントリポイントに戻ります。
そのあとはDMコマンドでもCMコマンドでも普通に実行することができます。

そんなことをしていいのか?
と心配になりますがブレークしたときのレジスタの内容は全て保存されていますから、大丈夫です。
ブレークしたところから、プログラムの続きの実行を再開するにはRTコマンドを使います。
RTコマンドの実行によって、ブレーク前の状態を再現しますから、そのときにフルRAMに戻さなければなりません。

RTコマンドは、あたらしく機能追加してフルRAMに戻すことができるようにしました。
フルRAMに戻すときは、RT@を使います。
DM@やCM@と同じです。

時間が無くなってしまいました。
この続きは次回にすることにいたします。

ワンボードマイコンでCP/Mを![第180回]
2012.7.23upload

前へ
次へ
ホームページトップへ戻る