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バイトCSVnCheckSum Vector チェックサムベクトルテーブル先頭アドレス
各ドライブのディレクトリ情報のチェックに使用するスクラッチの先頭アドレス
16バイト/
ドライブ
2バイトALVnAlocation Vector アロケーションベクトルテーブル先頭アドレス
BDOSから各ディスクの使用状況を管理するためのスクラッチの先頭アドレス

 

ディスクパラメータブロックの構造

物理的なドライブの情報を指定しておいて、SELDRVでドライブ選択時に切替することで反映させる

ポインタサイズ名前内容PC80/
FM7
X1S1
DPBLK:2バイトSPTSector Per Track
物理的なセクタ数
646464
1BSHBlock Shift Factor
データブロックのアロケーションサイズ
444
1BLMBlock Mask
ブロックマスク
151515
1EXMExtent Mask
一つのディレクトリエントリに128論理セクタ(16KB)のデータブロックが何個入るか
111
2DSMDisk Size Max
データブロックの最大数-1
ディスク全体のバイト数=(DSM+1)*(BLM+1)*128の関係
151151151
2DRMDirectory Entry Max
ディレクトリエントリ総数-1
12763127
2AL0,1Allocation Vector for Directory
ディレクトエリアとして使用するサイズ設定
192128192
2CKSCheck Sum Size
チェックサムベクタテーブルのサイズ
(DRM+1)/8
321632
15バイト/
ドライブ
2OFFTrack Offset
システムトラックをスキップするためのオフセット
(このトラックからディレクト入り領域が始まる)
222

今回のS1-CP/MはFM7と同じMSA仕様に合わせたいと思います。

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。 本文に全角文字を2文字以上含めて下さい (スパム対策)