Last Updated on 2019年11月8日 by kabekin
CP/Mのディスク関連のパラメータを整理しておきます。
BIOS80内で指定するディスク関連のパラメータにディスクパラメータテーブルというものがあるそうです。
ディスクパラメータテーブルは3つの部分から構成されているそうで、
a) ディスクパラメータヘッダ (DPH)
b) セクタトランスレートテーブル (スキュー用)
c) ディスクパラメータブロック(DPB)
で構成されているそうです
a)のセクタトランスレートテーブルとc)のディスクパラメータブロックはドライブ構成が全て同じであれば共用できるとのことですが、ディスクパラメータテーブル自体はドライブの個数用意する必要があるとのこと。
ディスクパラメータテーブルの構造
ドライブの個数分必要。
XLTやDPBは構成が同じものは共用可能。
ポインタ | サイズ | 名前 | 内容 |
DPBASE: | 2バイト | XLTn | セクタトランスレートテーブルの先頭アドレス (スキューが同じドライブの場合はXLTを共用できる) ブロッキング/デブロッキングを行っている場合は逆効果になる場合あり |
6バイト | — | Scratch Pad Area BDOS用スクラッチ | |
2バイト | DIRBF (DIRBF) | Directory Buffer Address ディレクトリバッファアドレス BDOSがディレクトリを操作するために必要な128バイトのスクラッチの先頭アドレス | |
2バイト | DPBn (DPBLK) | Disk Parameter Block ディスクパラメータブロック 各ドライブのDPBの先頭アドレス (ドライブ仕様が同じ場合はDPBを共用できる) | |
2バイト | CSVn | CheckSum Vector チェックサムベクトルテーブル先頭アドレス 各ドライブのディレクトリ情報のチェックに使用するスクラッチの先頭アドレス | |
16バイト/ ドライブ | 2バイト | ALVn | Alocation Vector アロケーションベクトルテーブル先頭アドレス BDOSから各ディスクの使用状況を管理するためのスクラッチの先頭アドレス |
ディスクパラメータブロックの構造
物理的なドライブの情報を指定しておいて、SELDRVでドライブ選択時に切替することで反映させる
ポインタ | サイズ | 名前 | 内容 | PC80/ FM7 | X1 | S1 |
DPBLK: | 2バイト | SPT | Sector Per Track 物理的なセクタ数 | 64 | 64 | 64 |
1 | BSH | Block Shift Factor データブロックのアロケーションサイズ | 4 | 4 | 4 | |
1 | BLM | Block Mask ブロックマスク | 15 | 15 | 15 | |
1 | EXM | Extent Mask 一つのディレクトリエントリに128論理セクタ(16KB)のデータブロックが何個入るか | 1 | 1 | 1 | |
2 | DSM | Disk Size Max データブロックの最大数-1 ディスク全体のバイト数=(DSM+1)*(BLM+1)*128の関係 | 151 | 151 | 151 | |
2 | DRM | Directory Entry Max ディレクトリエントリ総数-1 | 127 | 63 | 127 | |
2 | AL0,1 | Allocation Vector for Directory ディレクトエリアとして使用するサイズ設定 | 192 | 128 | 192 | |
2 | CKS | Check Sum Size チェックサムベクタテーブルのサイズ (DRM+1)/8 | 32 | 16 | 32 | |
15バイト/ ドライブ | 2 | OFF | Track Offset システムトラックをスキップするためのオフセット (このトラックからディレクト入り領域が始まる) | 2 | 2 | 2 |
今回のS1-CP/MはFM7と同じMSA仕様に合わせたいと思います。