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

復活!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

そして下は一度電源を切ってから、もう一度電源ONしてUSB接続を確立し、再び接続を終了するまでのログファイルです。

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

以上、長々と説明をしてきましたように、簡単なLoaderを使ってでもシステムプログラムをロードすることは十分可能で、そしてバッテリーによってメモリがバックアップされているのでしたら、一度システムをロードしてしまえば、それから後はローダーを操作することも、フロントパネルを操作することもなく、電源ONでいきなりシステムプログラムを起動させて使うことができます。

そういうことになりますと。
システムROMも不要ですし、なにもわざわざIPL(Initial Program Loader)なんてものを用意する必要もなくなってしまいます。

しかし。
忘れてはならない重要なことがあります。
それはRAMはヤワなものだということです。
RAMもハードウェアではありますが、その利用のされ方からすればSOFT(柔な)WAREであると言えましょう。

何事もなければそれでよろしいのですけれど。
たとえばマシン語プログラムを作成して、それのデバッグを試みているときなどを想定しますと、おそらく完成するまでに何回かプログラムミスによって暴走することを経験するでありましょう。
ひょっとするとそのたびにシステムプログラムも破壊されてしまうかもしれません。
あるいはLoaderも破壊されてしまうことだって大いにありえます。

そうなりますと、パネルスイッチを操作してLoaderプログラムを入力することからはじめなければなりません。
たかだか32バイト程度のLoaderですから、再入力するにもそれほど手間はかかりますまい。
しかし、暴走のたびにそのようにしなければならないということになりますと。
当然心中穏やかならぬ気分とはなってきまして、果てにはこのミニコンの設計者(つまりこの私め)を呪詛するようになるやも知れませぬ。

老いぼれたりとはいいましても、まだまだこの世にたっぷりと未練がありますゆえ、そんなことで呪い殺されたくはありませぬ。
ということになりますと。

当然のことながら、いよいよIPLについて考えなくてはなりませぬ。

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

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