MYCPU80でCP/Mを!
超巨大基板の8080互換HCMOS・CPUでCP/Mを走らせてしまおうという、なんとも狂気なプロジェクトです!
[第82回]
●レジスタモードとブレーク操作
前回はレジスタモードについてほんの少しだけ説明しました。
レジスタモードの一機能としてブレークポイントの設定があります。
ブレークしたいアドレスをブレークポイントとして設定したうえでユーザープログラムを実行すると指定したアドレスでブレークします(正確にはそのアドレスの直前でブレークします)。
そしてそのときのレジスタの値が表示されます。
ここでレジスタモードを利用すると、レジスタの値を変更してブレークしたところからプログラムの実行を再開させることなどができます。
実行例で説明をします。
アドレス8000から簡単なプログラムを書きました。
書いたのは次のプログラムです。
8000 213412 LXI H,$1234
8003 117856 LXI D,$5678
8006 01AB90 LXI B,$90AB
8009 79 MOV A,C
800A 83 ADD E
800B 3C INR A
800C 23 INX H
800D 13 INX D
800E 03 INX B
800F C30980 JMP $8009
そのあと[/][R]でレジスタモードにエントリします。
このまま[+]を入力することで目的のレジスタまで進むことができますが、ここでは[/][R][A]と入力してブレークアドレスレジスタを直接指定しました。
[brA]がブレークアドレスレジスタです。
レジスタモードで表示されるレジスタは8080のCPUレジスタですが[brA]だけはCPUレジスタではありません。
リモートプログラムに組み込まれている「仮想レジスタ」です。
ブレークポイントを800Cに設定しました。
[−]キーでレジスタ表示を前にひとつ戻して[brA]に800Cが設定されたことを確認しました。
レジスタモードでは[+]キーの入力で[AF]→[BC]→[DE]→[HL]→[SP]→[PC]→[brA]→[AF]のようにリング状にレジスタを表示できます。
[−]キーの入力で[+]とは逆向きの表示になります。
[SP]はスタックポインタ、[PC]はプログラムカウンタです。
[/][0](ゼロ)と入力するとレジスタモードが終了します。
ここまで準備したあと、ユーザープログラムを実行します。
[8][0][0][0][.]([.]を入力すると[ADRSSET]に変換されます)と入力したあと、[R]でプログラムを実行しました。
ブレークポイントが800Cに設定されていますから、800Cでブレークしてそのときの値が表示されました。
あれ?
レジスタ名の表示がおかしいですねえ。
バグがあるようです。
レジスタ名がずれてしまいましたが、値は正しく表示されています。
前からAF、BC、DE、HL、SP、PCの値が表示されています。
最後の8桁はフラグをビットごとに表示しています。
Aレジスタの値を見ると24になっています。
MOV A,C
ADD E
INR A
までを実行してそこでブレークしましたから、
C=AB、E=78なので
AB+78=123の計算結果の下位8ビットがAレジスタに入り、そのあと INR A で+1されて、24になります。
そのほかのレジスタも正しく表示されています。
このあとバグを直して、この続きを実行したのですが、本日は時間がなくなってしまいましたので、その続きは次回に説明いたします。
MYCPU80でCP/Mを![第82回]
2014.12.16upload
前へ
次へ
ホームページトップへ戻る