復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第311回]
●システムプログラムのロード(2)
前回は、E−80(仮称)ミニコンにND80ZV(ND80Z3.5)のシステムプログラムをロードして、ちゃんとZB3BASICが動作しているところを見ていただきました。
そのあと電源を切ったのでありましたが。
このお話には続きがあります。
電源を切ったあと、次に電源を入れたならば、一体どういう動作をするでありましょうか?
ということについてのお話です。
それは。
0000H〜0006Hに書かれていたサンプルプログラムが実行されて…。
ええ。
フツーのプログラムをロードしたのでしたら、普通はそういうことになりますでしょう。
そのように説明をしてきましたから。
しかし。
前回ロードしましたプログラムはフツーのプログラムではなくて、システムプログラムです。
そこには普通のプログラムとは違った仕掛けが仕込んであるのです。
電源を入れますと、このような状態になります。
これじゃ何もわからんではないか。
あ。
それはまあ、そうなのですけれど。
もしも0000H〜0006Hに書いてありましたサンプルプログラムが実行されているのでありましたならば、左上にありますPROGRAMMED OUTPUT LEDには、左下のPROGRAMMED INPUTスイッチの設定値がそのまま表示されるはずです。
しかし、スイッチの設定値が04Hなのに、LED表示はFFHになっています。
どうも様子が違っているなあ、ということはお分かりいただけるかと思います。
ここで、Windows側でDOSプロンプト(コマンドプロンプト)を立ち上げて、zb3.exeを実行してみますと(WindowsパソコンとはUSBで接続されたままだとします)、このようになります。
画面は前回終了したところからの続きになっています。
zb3[Enter]と入力すると、再びE−80(仮称)ミニコンとつながってしまいます。
つまり、今までとは違って、ZB3BASICシステムをロードしたあとは、一旦電源を切っても、次に電源をONにすると同時にシステムが立ち上がってしまうのです。
どういうこと?
その理由を知るために、RAMの0000Hから数バイトをDMコマンドで表示させてみました。
いつの間にか0000H〜0002Hには、C30008という命令が書き込まれています。
アドレス0800Hへのジャンプ命令です。
アドレス0800HはND80Zモニタプログラムのエントリアドレスです。
どうしてこんなことになったのでしょうか?
そのわけは、前回お見せした0400H〜のダンプリストを見るとわかります。
前回はZB3BASICシステムプログラムを0400Hからロードしたあとで、0406Hから実行しました。
では0406Hには何が書かれていたのでしょう。
ダンプリストでは16進数だけなのでわかりにくいかと思います。
ですので下にあらためてその部分を抜き出して、ニーモニックを付加してみました。
0406 3EC3 LD A,C3
0408 320000 LD ($0000),A
040B 210008 LD HL,$0800
040E 220100 LD ($0001),HL
0411 C30008 JP $0800
そのようにプログラムが実行されたために、0000H〜0002HにC30008が書き込まれたのです。
これによって、以後は電源ONと同時にシステムが起動することになったのでした。
これで、もう安心して電源を切ることができます。
Windows側を終了したあと、もう一度E−80(仮称)ミニコンの電源を切りました。
あ。
忘れておりました。
もう一度E−80(仮称)ミニコンの電源を入れます。
そして先ほどと同じように、zb3[Enter]でUSB接続を確立したあと、z[Enter]を入力してZB3BASICを再び起動しました。
ZB3BASICは電源ONまたはリセット後はBASICのテキストエリアはクリアされますから、LISTコマンドを入力しても、何も表示されません。
しかしその後に何かを入力してしまわない限り、それ以前に作成したBASICプログラムはメモリ内に保持されています。
そして電源を切ってもRAMが単三電池でバックアップされていれば、そのBASICプログラムもそのまま保持されています。
リセットによってクリアされたはずのBASICプログラムはHELPコマンドを入力することで復活させられます。
ZB3BASICでは命令やコマンドに省略形が使えます。
h.はHELPの略記です。
ただの .(ピリオド)はLISTの略記です。
r.はRUNの略記です。
ご覧のように、HELPコマンドの入力によって前回作成したBASICプログラムを復活させることができました。
これで一渡りの動作確認ができましたので、最終的にUSB接続を終了し、E−80(仮称)ミニコンの電源もOFFにしました。
以上の操作もログファイルに記録されています。
画面と同じ内容ですけれど、参考までにお見せします。
こちらが今回の最初に電源ONしてから、USB接続を終了するまでのログファイルです。
logfile nd80zlog\02050846.txt open ND80ZVに接続しました 0001 0000 - z 1000 00C3 - *** nd80z3 basic **** >dm 0000,000f 0000 C3 00 08 FF C3 00 00 FF-FF ED FF C3 80 FF 31 00 テ...テ......テ..1. >0000 00C3 - リモート接続を終了しました logfile closed at Tue Feb 05 08:49:10 2013 |
logfile nd80zlog\02050850.txt open ND80ZVに接続しました 0001 0000 - z 1000 00C3 - *** nd80z3 basic **** >h. TEXT 8004-8053 ヘンスウ DFFB-DFFF >. 10 FOR A=0 TO 10 20 PRINT "a=",A,"sqrt=",SQR(A) 30 NEXT A >r. a= 0 sqrt= 0 a= 1 sqrt= 1 a= 2 sqrt= 1.41421 a= 3 sqrt= 1.73205 a= 4 sqrt= 2 a= 5 sqrt= 2.23607 a= 6 sqrt= 2.44949 a= 7 sqrt= 2.64575 a= 8 sqrt= 2.82843 a= 9 sqrt= 3 a= 10 sqrt= 3.16228 >0000 00C3 - リモート接続を終了しました logfile closed at Tue Feb 05 08:52:18 2013 |