2014.12.20

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

MYCPU80でCP/Mを!
超巨大基板の8080互換HCMOS・CPUでCP/Mを走らせてしまおうという、なんとも狂気なプロジェクトです!


[第85回]


●ブレークアドレスの設定方法の機能追加

[第82回][第83回]でブレークアドレスの設定について説明をしました。
ブレークアドレスを設定するには、まず/Rでレジスタモードにエントリして、そこでbrAレジスタ(仮想レジスタ)にブレークしたいアドレスを書き込みます。
その後/0でレジスタモードを終了してからスタートアドレスを指定してRコマンドで実行を開始します。
結構面倒です。

なぜレジスタモードかといいますと、ブレーク後に各レジスタの値を見たり、値を変更したりするのに都合がよいからです。
各レジスタのバッファの延長としてブレークアドレスレジスタも考えましたので、そういう手続きになりました。
もともとND80ZV(ND80Z3.5)でボード上のキー操作によってLEDにレジスタの値を表示させる機能になっているものを、そのままリモートプログラムの機能としても使えるように考えたため、パソコン側のキーボードとMSDOSプロンプト画面を使った場合にはちょっともどかしいやり方になってしまっています。

ただブレーク後にレジスタの値を変更しないで、レジスタの値をただ確認するだけならば、リモートプログラムではブレークすると全レジスタの値の一覧が表示されますから、わざわざレジスタモードエントリする必要はありません。
それならそれをもう一歩進めて、ブレークアドレスの設定についてもレジスタモードに入らないで設定できるととても楽になります。

レジスタモードではなくて、ふつうにアドレス部とデータ部が表示されてキー入力スタンバイの状態のときに1文字か2文字の入力でブレークアドレスの設定ができれば便利です。
しかしブレークアドレスを意味するとなるとたとえば「BA」の文字をコマンドにすることなどをすぐに思いつきますが、’B’も’A’も16進数のアドレスやデータの入力になってしまいますから使えません。
それならいっそ記号にしたらどうだろうか、と考えました。
で。
’!’を入力したら、ブレークアドレスセットということにしました。
そのような機能追加をおこなって、試してみたのが下の画面です。



念のため/Dコマンドでメモリにプログラムが正しく書き込まれていることを確認してから
[8][0][0][C][.]と入力して800Cを左4桁のアドレス表示部に表示させました([.]を入力すると[ADRSSET]に変換されます)。
そのあと[!]を入力すると
beak setと表示され、続いて
[brA] FFF0 800C −
と表示されてそこで入力待ちになりました。
[brA]レジスタバッファ(アドレスFFF0)に値として800Cが書き込まれたことがわかります。

そのあとの操作は簡略化したためにちょっと見にはわかりにくいのですが、入力待ちの状態でいきなり[.]([ADRSSET])を入力しています。
リモートプログラムはTK−80のキー操作をリモートで行なうためのもので、ルールはTK−80のキー入力、LED表示に従います。
[ADRSSET]はそれに先立って4桁のアドレスを入力します。
入力された数値は右側4桁のデータ表示部に表示されます。
そのあと[ADRSSET]キーを押すことで、データ表示部の数値が左側4桁のアドレス表示部に移動します。
上の画面ではデータ表示部に[brA]の値として800Cが表示されていて、それをアドレスとしてアドレス表示部に表示させたいと思ったので、ルールとしてはまず800Cを入力するところなのですが、その値がすでにデータ表示部に表示されているので、それを利用していきなり[.]([ADRSSET]を入力したのです。
その結果、
800C 0CFF − 
と表示されました。
ブレークセットによって800Cの命令がFFに書き換えられています。
ソフトウエアブレークに必要な動作です。
ソフトウエアブレークは[第83回]で説明しました。

以上で新しく追加したブレークセットの機能が正しく働いていることが確認されましたから、8000番地からプログラムを実行しました。
8000[ADRSSET][R](RUN)です。
800Cでブレークして全レジスタの値が表示されました。

そのあとブレークしたアドレス800Cとその値が表示されて入力待ちになっていますが、ここのところの表示も変更しました。
[第83回]での結果を見ていただくとわかりますが、もともとはブレークしたあとはデータ表示部にはAF(Aレジスタとフラグレジスタ)の値が表示されるようになっていました。
これもND80ZV(ND80Z3.5)の機能です。
しかしリモートプログラムでは全レジスタの表示を行なっていますから、そのあとでAFの値を表示するのは冗長です。
せっかくアドレス表示部にはブレークしたときのアドレス(上の例では800C)を表示しますから、データ表示部にはそのアドレスの内容を表示する方が自然と考えてそのように直しました。

なお今回説明しました[!]によるブレークアドレスのセットは新たに追加した機能ですから、[第83回]で説明しましたレジスタモードにエントリしてセットする方法も使えます。

下は上の画面のログです。

logfile mycpu80log\12200827.txt open
mzbdos2n2 2014.11.30 by Chunichidenko

MYCPU80に接続しました(9600bps)
0001 001E - 8000[ADRSSET]
8000 0021 - 8011/d[MEMORY DUMP]
8000  21 34 12 11 78 56 01 AB 90 79 83 3C 23 13 03 C3  !4..xV.ォ.y.<#..テ
8010  09 80 45 2A 14 14 14 14 14 14 14 14 14 14 14 14  ..E*............
8000 8011 - 800c[ADRSSET]
800C 0C23 - ! break set
[ brA] FFF0 800C - [ADRSSET]
800C 0CFF - 8000[ADRSSET]
8000 0021 - r [RUN]
A F  B C  D E  H L   SP   PC  SZ H P C
2405 90AB 5678 1234 FF80 800C 00000101
800C 0023 - ^E
0000 00C3 - 
リモート接続を終了しました
logfile closed at Sat Dec 20 08:30:09 2014

MYCPU80でCP/Mを![第85回]
2014.12.20upload

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