Categories: R10旧型PC

日立 MB-S1 S1-CP/M80 移植作戦 その24 BIOSの作成8-2

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仕様に合わせたいと思います。

kabekin