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

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

[第309回]


●[第307回]で書き忘れたこと

書かなければいけないと思いつつ、つい忘れてしまっておりました。

[第305回]では普通のLoaderプログラムを使って、普通のプログラムをロードしました。
そして[第306回]では、普通のLoaderを使って、データをロードしました。

[第307回]ではそのようにロードしたあとの、E−80(仮称)ミニコンのメモリマップがどうなっているのかについて説明をいたしました。
そこではRAMのアドレス0000H〜0006Hに、[第300回]でパネルスイッチを使って入力したテストプログラムがあります、と書きました。
実は、そこが大切なところだったのです。

ごく普通に読みますと、「そうか、たまたまそんなものが残っていたのか」ぐらいに思ってしまいます。
しかし、「そんなもの」などという軽いものではありません。
これは非常に重要なプログラムなのです。

サンプルとしてためしに入力してテストしてみただけの、無くてもよいように思えるプログラムなのですが、無くては困る存在なのです。
ちょうど将棋の歩のようなものでありましょうか。

E−80(仮称)ミニコンにはROMはなくて、RAMだけのシステムです、ということは何回も説明をしております。
さらにそのRAMは単三電池3本でバックアップしておくことができます、ということも説明をいたしました。
したがって、電源を切ってもRAMの中身は消えずにそのままバックアップされていますから、次に電源を入れたときにも、前にロードしたプログラムをそのまま使うことができます。

が。
忘れてはならない大切なことがあります。
それは、電源を入れるとCPUはすぐに動作を開始する、ということです。
なーんだ。
そんなこと、当たり前じゃないの。
ま。
当たり前のことなのですけれど。

システムROMや、モニタROMを実装したごく普通のボードでしたら、当たり前で過ぎてしまうことなのですが。
しかし、ROMがなくてRAMだけのシステムでは、それは忘れてはならない重要なことなのです。
大抵のシステムでは電源ONと同時にCPUがリセットされる仕組みの回路になっています。
パワーオンリセットです。
するとCPUは0000Hからメモリの値を読み込んで、それを実行します。

もう、おわかりかと思います。
そうなのです。
もしも、0000H番地に有効なプログラムが書かれていなかった場合には、CPUは当然暴走状態になってしまい、RAMのあちこちを手当たり次第に書き換えてしまうかもしれません。
そうなってしまったら、なんのためのバックアップだかわからなくなってしまいます。
フルRAMシステムでのメモリバックアップにはそういう危ない側面があります。
(ちょっと怖いです)

今回はたまたま、といいますか、幸いにも0000H番地に無限ループ(エンドレス)のプログラムを置いてありますから、電源を入れるとそこでループして他には行きませんから、RAMの中身が破壊されることもなく無事に済んでいます。
要はそのように安全なプログラムでしたならばなんでもよいわけですから、一番簡単なプログラムで言いますと、

0000 C30000  JP $0000

というのが最も簡単でよろしいでしょう。

あ。
これは[第307回]のメモリマップのように、システムらしきものが存在しない、プログラムがばらばらに存在しているだけのときには、0000Hにも何らかのプログラムを置くことを忘れてはいけませんよ、というお話です。
そこにシステムプログラムが書き込まれれば、当然電源ONと同時に0000Hからスタートするように設計されるべきものですから、0000Hにプログラムが書かれていないということはありえません。

しかしシステムプログラムであれば、なおさらフルRAMのシステムでは気を使わなければならないでありましょう。
イレギュラーな処理によって、CPUが暴走してしまうことのないように、エラー処理に気を使っておきませんと、万一のときにはデータも含めてすべてが昇天してしまいます。

余談になってしまいますが。
BASICのプログラムでは、エラー対策がしてあるのが普通ですから、よほど変なプログラムを書いたとしても、それが暴走してRAMの中身を破壊してしまう、などということは普通はありません。
「普通は」と書いたのにはわけがあります。
BASICにもこわい命令があるからです。
POKE
という命令などが、ちょいとこわい命令です。
POKE A,B
というように使いますと、Aで示すメモリアドレスにBで示すデータ(ただし8ビット)を書き込みます。
もしもプログラムのミスで、Aにシステムのアドレス領域が指定されたとすると、システムが暴走してしまうことになります。

BASICではなくて、マシン語のプログラムでは、ちょいとしたプログラムミスで、簡単に暴走してしまうで有りましょう。
ROMにシステムが書かれている場合には、リセットするだけで初期状態に復帰できますが、フルRAMのシステムでは、システムをロードするところからやり直さなければなりません。

そのように書きますと、フルRAMなんて良いところなどないではないか、というように思えてしまうかも知れませんが、ROMにも短所があり、RAMにも長所があります。
ROMにシステムプログラムが書かれているのは便利なことなのですが、たとえばプログラムの改良、バージョンアップのたびにROMを交換しなければならないという短所があります。
その点フルRAMでしたら、ロードするプログラムを変更するだけで済みます。
またフルRAMならば、ロードするファイルを変えることによって、異なるシステムを走らせることができます。
ちょうどCP/MがOSのみを提供することによって、その上でBASICとかFORTRANとかその他いろいろなプログラムを走らせることができたのはその一例です。

これを一口で言いますと、手軽さ、簡便なシステムならROM、拡張性、柔軟性を希求するならばRAM、ということだと思います。

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

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