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

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

[第175回]


●COPYコマンド

CP/M2.2にはSAVEコマンドはありますが、LOADコマンドはありません。
ありませんというのは、ビルトインコマンド(最初からCP/Mシステムに含まれていて、メモリに常駐しているコマンド)としては、という但し書きつきでは、です。

LOADコマンドはトランジェントコマンドとして、つまりアプリケーションとしては、ありました。
しかし、そのLOADコマンドはSAVEコマンドと対の機能として考えられるような一般的なLOAD機能とは異なっていました。

そこで、前回からのお話の続きになります。
Windowsのハードディスク内のフォルダにあるプログラムやデータのファイルの内容を、ND80ZVのRAMの0100Hから始まるトランジェントエリアにロードする機能は、CP/Mにはありませんから、ZB3BASICの/LD機能を利用します。

そして、0100Hから始まるトランジェントエリアにあるプログラムやデータをフロッピーディスクにファイル名をつけて保存するには、SAVEコマンドを使います。
CP/M互換DOSではSAVEコマンドで、トランジェントエリアのプログラム、データを仮想フロッピーディスクにファイル名をつけて保存します。

その機能を組み合わせれば、前回説明しましたように、Windowsのフォルダにあるファイルを、/LDコマンドでND80ZV上のRAMの0100Hから始まるトランジェントエリアに読み込んで、次にそれをCP/M互換DOSのSAVEコマンドで仮想FDDに書き込むことができます。

その操作は結局、ファイルをWindowsのフォルダから、仮想FDDにコピーするという操作になりますから、それはCOPYコマンドの操作です。

しかし、CP/MにはCOPYコマンドはありません。
代わりにPIPというコマンドを使います。

でも、PIPでは何を意味しているのかさっぱりわかりません。
そこで、CP/M互換DOSではPIPではなくてCOPYをコマンド名にすることにしました。
とりあえず今のところは、ドライブ間でのファイルコピーに限定した機能です。

PIPもLOADと同様、ビルトインコマンドではなくて、アプリケーションとして供給されるトランジェントコマンドでしたが、COPYコマンドはビルトインコマンドとして最初からCCPに組み込む形で考えました。

COPYコマンドの通常の機能としては、たとえば仮想FDDのAドライブにあるファイルを、Bドライブにコピーするというような使い方が基本になります。
そこにさらに機能を追加して、Windowsのフォルダ(たとえばND80Z3フォルダ)にあるファイルを仮想FDDのドライブにコピーする、ということもできるようにしました。

CP/M2.2ではドライブ名としてはA〜Pを使います。
Q〜Zは使われていません。
そこでWindows側のプログラムZB3.EXEが置かれている、Windowsのハードディスク上のフォルダ(ND80Z3フォルダ)を、Zドライブとすることにしました。

ND80Z3フォルダ上にあるファイルHELLO.FORを仮想FDDのAドライブにコピーするには、COPYコマンドを使って下のようにします。

A>COPY Z:HELLO.FOR[Enter]

手前味噌といいますか、自画自賛ですけれど、これってなかなかにすぐれもののコマンドなのではありませんでしょうか?

で。
そこにさらにちょいと機能を追加して、例のEOFコード(1AH)も付加するようにしてしまいました。
EOFコードの追加はCP/Mにおいてテキストファイルを読み込むときには必要なことなのですが、バイナリファイルでは余計なことです。

しかし余りそのあたりを厳密にしようとすると、せっかくシンプルな機能にしたものが、かえって使いにくいものになってしまいます。
ですからここはシンプルにまとめるために、Zフォルダから仮想FDDにファイルコピーを行なう場合に、コピー元のファイルの拡張子がBIN、COM以外のファイルの場合には、ファイルの最後にEOFコード(1AH)を付加するようにしました。

実は、このCOPYコマンドは実際に使っているところを、すでにお見せしています。
[第170回]の終わりのところでお見せした下の画像です。



真中あたりで、
A>copy z:hello.for
と入力しています。

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

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