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

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

[第14回]

●ページという単位

ここ数日は複数のお得意様からの急ぎの注文が重なってしまい、それをこなすのに忙しくて、CP/Mの作業も、ホームページの更新も思うに任せません。
もうあと何日か、この状態が続きそうです。

前回までのところで、CP/Mのディスクパラメータとしてトラック、セクタ、ブロックについて説明をしてきました。
トラックとセクタはフロッピーディスク、ハードディスクをハード面から見たときの基本的な構成要素ですから、特にCP/Mに限った話ではありません。
しかしブロックというのは、おそらくCP/Mだけのものだと思います。

確かにブロックという考え方を導入することによって、ディスクのディレクトリ管理はそうではない場合に比べてうんと簡単になります。
その代わりに、たとえ1セクタしか使わなくてもそのセクタを含む1ブロックが使用済みにされてしまいますから、いささか乱暴な考え方でもあります。

もっとも不経済が発生するのは、ファイルの終わりの部分を含むブロック(つまり半端のままで終わるブロック)のみですから、大きなファイルでしたらそれほど問題にするほどではないでしょう。

逆にたとえば1セクタに収まってしまうような小さなファイルでも1ブロックを消費してしまいますから、これはかなり不経済です。

しかし、その一方でディレクトリに登録できるファイル名にも限りがありますから、小さなファイルだからといって、ディスク容量の限界までいくつでも登録できるものではありません。
そういう点から考えてみると、このブロックという考え方はちょっと乱暴のようでいて、意外に合理的なのかもしれません。

実はディスクに関して、ちょいと乱暴ではないか、と思えるところが、ブロックのほかにもあります。
それが今回お話をする「ページ」という単位です。

CP/Mではプログラムやデータをファイルとしてフロッピーディスクに保存するためにSAVEというコマンドを使います。
その使い方はかなり特徴的です。

SAVEコマンドはアドレス0100から始まるトランジェントエリアにあるプログラムやデータを保存するためのものですから、SAVEの開始アドレスは0100に決まっています。
特徴的なのは、保存するサイズ(バイト数)の指定の仕方です。
ここでページという単位が使われます。
たとえば、0100から始まる400バイトのプログラムを、TEST.COMという名前で保存する場合には次のようなコマンドを入力します。

SAVE 2 TEST.COM[Enter]
     ↑これがページ

1ページは256バイトというサイズを示します。
すると400バイトは2ページですから、上のようになります。

ううう。
これは、いかにも、乱暴ではありませぬか。
どうやら、CP/Mはページ単位(256バイト)でファイルのSAVE/LOADをしているらしいのですねえ。

あ。ここでLOADというのは一般的な意味で使っています(CP/MのLOADコマンドはちょっと特殊なもののようですので)。

たとえばND80ZVのZB3BASICでのSAVEコマンドは、セクタでもページでもなく、きっちりバイト単位で機能します。
BASICプログラムはテキストファイル(注記)ですから、テキストの始めから終わりまでを保存します。
その場合のコマンドは、

/SAVE TEST.TXT[Enter]

のように、アドレスもバイト数のパラメータもつけませんが、システムがテキストの先頭と終わりのアドレスを管理していますから、これできっちりバイト単位で保存できるのです。

[注記]
ZB3BASICのBASICプログラムはメモリ上では中間言語の形になっていますから、厳密に言えば「テキストファイル」ではありません。
SAVEコマンドの実行時には、その中間言語からテキストに翻訳しながらファイルSAVEを行ないます。

ところでND80ZVのZB3BASICのファイル保存コマンドには、/SAVEのほかにもうひとつ、/SVというコマンドがあります。
これはマシン語のデータなどをアドレスを指定して保存するためのもので、次のように使います。

/SV TEST.BIN,8100,84FF[Enter]

私はごく普通にそのように考えてシステムを作ってきましたので、CP/MのSAVEコマンドについては、「いや、それはちょっと、乱暴だなあ」、と思いました。
それでは、ファイルの終わりがわからないではありませんか。

ああ。
それで、あの、EOFが登場するわけですね。

時間がなくなってしまいました。
今回は説明が途中半端で、何が何だかわからんぞお状態で終わってしまいますが、次回につながります。

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

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