PC98 BIOS割り込み:INT 1Bh (DISK BIOS)
DISK BIOSはPC-9801無印以外の機種ではフロッピーディスク・SASI固定ディスク共通で割り込み番号1Bhを使用します。なお、本稿は1MB FD I/Fを制御するために調べたもので、HD関連については不十分です。
Int 1Bh (DISK BIOS)
ファンクション一覧
- INT 1Bh/AH=10h : SEEK (シーク)
- INT 1Bh/AH=x1h : VERIFY (ベリファイ)
- INT 1Bh/AH=x2h : READ DIAGNOSTIC (診断のための読み込み)
- INT 1Bh/AH=x3h : INITIALIZE (ディスク装置の初期化)
- INT 1Bh/AH=x4h : SENSE (ディスク装置の状態を取得)
- INT 1Bh/AH=x5h : WRITE DATA (セクタデータ書き込み)
- INT 1Bh/AH=x6h : READ DATA (セクタデータ読み込み)
- INT 1Bh/AH=x7h : RECALIBRATE (シリンダ0へのシーク)
- INT 1Bh/AH=x9h : WRITE DELETED DATA (DDAM付きデータ書き込み)
- INT 1Bh/AH=xAh : READ ID (ID読み込み)
- INT 1Bh/AH=xCh : READ DELETED DATA (DDAM付きデータ読み込み)
- INT 1Bh/AH=xDh : FORMAT TRACK (トラックのフォーマット)
- INT 1Bh/AH=xEh : SET OPERATION MODE (モード設定)
BIOSコマンド識別コード (AH)
INT 1Bhにおいて、AHに入れるファンクション番号の上位4ビットには下のようにアクセスモードを指定します。コマンドによっては無視されるパラメータがあります。
AH | ||
---|---|---|
D7 | MT | MT(Multi Track) |
D6 | MF | Density(0=FM, 1=MFM) |
D5 | nr | Retry x8(0=Yes, 1=No) |
D4 | SK | Seek(0=No, 1=Yes) |
D3 | FUNC | コマンド |
D2 | ||
D1 | ||
D0 |
Physical Device Address (AL)
INT 1Bhにおいて、ALには処理対象の装置を指定するコードを入力します。コマンドによっては無視されるパラメータがあります。
AL | ||
---|---|---|
D7 | DA | アクセスモード 0:640KB FDD 1:1MB FDDまたは固定ディスク |
D6 | 000:SASI固定ディスク 001:1MB I/O 010:SCSI固定ディスク 011:1.44MB I/O 101:320KB I/O 111:640KB I/O |
|
D5 | ||
D4 | ||
D3 | UA | |
D2 | UA(HR) | (Head Reverse) |
D1 | UA | ユニット番号(#0-#3) SCSI ID(#0-#7) |
D0 |
Head ReverseはFDDに対してのみ有効で、セクタIDのヘッド番号と実際のヘッドが逆転する場合にビットを立てる。
共通する入力値
コマンドによっては無視されるパラメータがあります。
BX | DTL | データ長 |
---|---|---|
CH | N | セクタ長(00=128B,01=256B,02=512B,03=1024B) |
CL | C | シリンダ番号 |
DH | H | ヘッド番号 |
DL | R | セクタ番号 |
ES:BP | データバッファ領域先頭アドレス |
固定ディスクインターフェイスの場合は次のようになります。
BX | データ長(256 x nバイト) |
---|---|
CX | シリンダ番号 |
DH | ヘッド番号 |
DL | セクタ番号 |
ES:BP | データバッファ領域先頭アドレス |
出力(リターン・ステータス)
CF(Carry Flag)=0は正常終了、CF=1は異常終了。出力値以外のレジスタ・フラグの情報は保証される。
CF | AH | ||
---|---|---|---|
0 | 0xh | Normal Terminate | 正常終了 |
0 | 0xh | Ready | 準備完了 |
0 | 1xh | Control Mark | DDAM付きデータを読み込んだ |
0 | 1xh | Write Protect | ライトプロテクトされている |
1 | 2xh | DMA Boundary | バッファのアドレスがセグメントをまたいだ |
1 | 3xh | End of cylinder | 転送容量を超えてデータ長(DTL)を指定した |
1 | 4xh | Equipment Check | ドライブ名が無効またはデバイスが異常 |
1 | 5xh | OverRun | 書き込みデータ転送時間を超過した |
1 | 6xh | Not Ready | ドライブの準備ができていない |
1 | 7xh | Not Writable | ライト・プロテクトされている |
1 | 8xh | Error | エラーを検出した |
1 | 9xh | Time Out | タイムアウト |
1 | Axh | Data Error(ID) | ID部のCRCエラーを検出した |
1 | Bxh | Data Error(DATA) | DATA部のCRCエラーを検出した |
1 | Cxh | No Data | 一致するIDを持つセクタがない |
1 | Dxh | Bad Cylinder | 指定したシリンダがない |
1 | Exh | Missing Address Mark | トラックにID(IAM)がない |
1 | Fxh | Missing Address Mark | トラックにDATA(DAM,DDAM)がない |
0 | x1h | Both sides device | 両面媒体がセットされている |
ビット3-0はSENSEコマンドで装置種別が通知される。(CF=0のとき有効)
D2 | 0:40シリンダモードもしくは1MB FDアクセスモード 1:80シリンダモード |
---|---|
D0 | 0:片面媒体がセットされている 1:両面媒体がセットされている (1MB/640KB両用ドライブでは常に両面) |
システム共通域
DISK BIOSで使用するシステム共通域。詳細はUNDOCUMENTED 9801/9821 vol.2のmemsys.txtを参照。
- RDISK_EQUIP(488h)
- DISK_RESET(492h)
- F2HD_MODE(493h)
- DISK_EQUIP2(494h)
- DISK_EQUIP(55Ch,55Dh)
- DISK_INT(55Eh,55Fh)
- DISK_TYPE(560h)
- DISK_MODE(561h)
- DISK_TIME(562h,563h)
- DISK_RESULT(564h-583h)
- DISK_BOOT(584h)
- DISK_STATUS(585h)
- DISK_SENSE(586h-589h)
- F2DD_MODE(5CAh)
- F2DD_COUNT(5CBh)
- F2DD_POINTER(5CCh-5CFh)
- F2DD_RESULT(5D0h-5DFh)
参考文献
- DISKに関する資料(DISK.TUT) - http://www.vector.co.jp/soft/data/hardware/se016321.html、清十郎
- PC-9800シリーズテクニカルデータブック BIOS編、アスキー、1992年
- PC-9801 BIOSとCプログラミング、川上峻史/工学図書、1991年