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

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

[第97回]


●ファイルアトリビュート

ファイルアトリビュート(file attribute)というのはファイルの属性のことです。
CP/Mの場合、そのファイルが
1)R/W(読み書き可能)か、それともR/O(リードオンリー)なのか
2)SYS(システムファイル)かDIR(その他のファイル)なのか
という2種類の属性があります。

CP/Mのファイル属性は各ファイルのFCBエリアに保持されているのですが、そのために独立したエリアは用意されていません。
ちょっと変わった方法でファイルの属性が記録されます。
CP/Mではファイルは、ファイル名8バイト+拡張子3バイトで示されますが、その拡張子3バイトのうちの前2バイトのビット7を使って2種類のファイル属性を示します。
そのことを実例で説明いたします。

JP D233[Enter]でCP/Mを起動して、DIRコマンドでAドライブのディレクトリを表示させました。
その後Ctrl−Dを入力してCP/Mを終了して、ZB3BASICに戻り、そこでDMコマンドでAドライブのディレクトリエリアを表示させました。

logfile nd80zlog\04140711.txt open

ND80ZVに接続しました
0001 0000 - z
1000 00C3 - 
*** nd80z3 basic ****
>jp d233

a>dir
A: FNC0E-1  COM : FTST10   COM : FTST10-2 COM : FTST10-4 COM
A: FTST10-5 COM : FTST11   COM : FTST12   COM : FTST13   COM
A: FTST14   COM : FTST15   COM : FTST16   COM : FTST10-6 COM
a>^D
end of CP/M
>dm 8800,887f
8800  00 46 4E 43 30 45 2D 31-20 43 4F 4D 00 00 00 02  .FNC0E-1 COM....
8810  01 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
8820  00 46 54 53 54 31 30 20-20 43 4F 4D 00 00 00 02  .FTST10  COM....
8830  02 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
8840  00 46 54 53 54 31 30 2D-32 43 4F 4D 00 00 00 02  .FTST10-2COM....
8850  03 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
8860  00 46 54 53 54 31 30 2D-34 43 4F 4D 00 00 00 02  .FTST10-4COM....
8870  04 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
>

ここではAドライブのディレクトリエリアの最初の部分、アドレス8800H〜887FHを表示させています。
ちょうど1セクタ128バイトです。
ディレクトリエリアは1セクタ128バイトを32バイトずつ4つに分割して、それぞれで1つのファイルを管理します。
この各32バイトのエリアをFCB(File Control Block)といいます。
FCBはディレクトリだけではなくて、BDOSの中でファイルを扱うためのワークエリアに対しても同じFCBという名前をつけて扱います。
ディレクトリに置かれるFCBと、BDOSやユーザープログラムの中で扱われるFCBとは、一部相違があります。
基本的な部分は同じですがBDOSで扱われるFCBは、シーケンシャルファイルが33バイトでランダムファイルは36バイトです。

さて、そこで上のディレクトリの中味を見てみます。
そこには4つのFCBが示されています。
各FCBの先頭バイトをbOバイトであるとしますと、bXバイトからbP1バイトまでが拡張子(Extension、エクステンション)になります。
上に示されている4つのファイルの拡張子はいずれもCOMです。
その3バイトのエリアにはCOMのASCIIコード(43 4F 4D)が入れられています。
CP/Mの場合、ファイル名と拡張子はA〜Zおよび一部の記号で構成されますから、ビット7は常に0です。
この使われないビット7を利用して、ファイルアトリビュート(属性)が示されます。

ファイルアトリビュートを特に指定しない場合は、拡張子部分の文字コードのビット7は0です。
このとき、そのファイルはR/W(読み書き可能)で、かつDIRファイル(システムファイル以外のファイル)です。
拡張子部分の最初のバイト(bXバイト)のビット7を1にすると、そのファイルはR/O(リードオンリー。更新削除禁止)になります。
拡張子部分の2番目のバイト(bP0バイト)のビット7を1にすると、そのファイルはSYSファイル(システムファイル)になります。

それではテストのために、ビット7を強制的に1にしてみましょう。
メモリの中味を書き換えるにはCMコマンドを使います。

>cm 8829
8829 43-c3
882A 4F-
>cm 884a
884A 4F-cf
884B 4D-
>cm 8869
8869 43-c3
886A 4F-cf
886B 4D-
>dm 8800,887f
8800  00 46 4E 43 30 45 2D 31-20 43 4F 4D 00 00 00 02  .FNC0E-1 COM....
8810  01 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
8820  00 46 54 53 54 31 30 20-20 C3 4F 4D 00 00 00 02  .FTST10  テOM....
8830  02 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
8840  00 46 54 53 54 31 30 2D-32 43 CF 4D 00 00 00 02  .FTST10-2CマM....
8850  03 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
8860  00 46 54 53 54 31 30 2D-34 C3 CF 4D 00 00 00 02  .FTST10-4テマM....
8870  04 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
>

2番目のファイルFTST10.COMのファイルアトリビュートをR/Oにしてみます。
CM 8829[Enter]
と入力すると下のようにアドレス8829Hのメモリ内容が表示されますから
8829 43−
C3と入力して
43(01000011)をC3(11000011)に変更しました。

次に3番目のファイルFTST10−2.COMのファイルアトリビュートをSYSにしてみます。
CM 884A[Enter]
と入力すると下のようにアドレス884AHのメモリ内容が表示されますから
884A 4F−
CFと入力して
4F(01001111)をCF(11001111)に変更しました。

次に4番目のファイルFTST10−4.COMのファイルアトリビュートをR/OでさらにSYSにしてみます。
CM 8869[Enter]
と入力すると下のようにアドレス8869Hのメモリ内容が表示されますから
8869 43−
C3と入力して
その次に表示される
886A 4F−
にCFと入力しました。

そのように変更したあと、もう一度DMコマンドで、ディレクトリエリアのメモリ内容を表示させました。
CMコマンドで変更した通りになっていることが確認されました。

それではもう一度JP D233[Enter]
と入力してCP/Mを起動します。

>jp d233

a>dir
A: FNC0E-1  COM : FTST10   COM : FTST10-5 COM : FTST11   COM
A: FTST12   COM : FTST13   COM : FTST14   COM : FTST15   COM
A: FTST16   COM : FTST10-6 COM
a>era ftst10.com
Bdos Err On A: File R/O
a>^D
end of CP/M
>0000 00C3 - 
リモート接続を終了しました
logfile closed at Sat Apr 14 07:14:22 2012

CP/Mを起動したあと、DIRコマンドでAドライブのディレクトリを表示させてみました。
FTST10.COMは見かけ上はそのほかのファイルとは区別はつきません。
しかし、FTST10−2.COMとFTST10−4.COMは表示されなくなってしまいました。
DIRコマンドではファイルアトリビュートが”SYS”のファイルは表示されません。

それではFTST10.COMはどうでしょうか。
ERAコマンドを使って、FTST10.COMを削除してみます。
ERA FTST10.COM[Enter]
と入力したところ
Bdos Err On A: File R/O
と表示されました。
間違い無くR/Oファイルに設定されていることが確認できました。

本日はちょっと時間がありません。
この続きは次回にすることにいたします。

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

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