DISK BIOSでFDセクタ読み込み [AT/PC98]
昔のパソコンのFDDをテストするツールを作りたくて、FDのセクタ読み込みの手法についていろいろ資料を探っていたのだけれど。
MS-DOSのファンクションを使うならInt 25h(Absolute Disk Read)が使えるが、なるべくオーバーヘッドは避けたい。機種に依存しないので、一応方法の一つとして検討しておく。
AT互換機 - Int 13h, 02h(Read Sectors into Memory)
AT互換機の場合はInt 13h, 02h(Read Sectors into Memory)が使える。当然、機種依存になってしまうので他の機種ではこのファンクションは使えない。
入力
AH | 02h |
---|---|
AL | 読み取るセクタ数 |
CH | シリンダ番号(全10ビット、CLの上位2ビット) |
CL | 開始セクタ番号 |
DH | ヘッド番号 |
DL | ドライブ番号 |
ES:BX | データバッファ領域先頭アドレス |
NEC PC98 - Int 1Bh, x6h(READ DATA)
NEC PC98はというと、調べてもWeb上にPC98のBIOSの資料が出てこない。というか、国産PCは数多くあるのにこういった技術的な情報、特にソフトウェア周辺のことは本当に少ない。本から情報を得る、という昔ながらの手段に頼るしかない。幸いPC98に関しては今も古本屋で技術書が手に入りやすい。ただ、必要な情報だけが欲しいと言うときには本は向いていないなとつくづく思う。
PC98の場合はInt 1Bh, x6h(READ DATA)を使う。入力パラメータはAT互換機とはずいぶん異なる。コマンド毎にマルチトラック読み書き、データ密度、リトライ、シークの動作を指定できるようになっている。
入力
AH | BIOSコマンド識別コード
|
||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
AL | デバイスユニット番号
|
||||||||||||||||
BX | データ長 (バイト単位) | ||||||||||||||||
CH | セクタ長 (00h-03h) | ||||||||||||||||
CL | シリンダ番号(0-76) | ||||||||||||||||
DH | ヘッド番号(0-1) | ||||||||||||||||
DL | セクタ番号(1-26) | ||||||||||||||||
ES:BP | データバッファ領域先頭アドレス |
データをメモリに読み出す必要がなければVERIFYファンクションの方が向いている。
DISK BIOSのファンクションリストはこちらにまとめた→ PC98 BIOS:INT 1Bh (DISK BIOS) - radioc.dat
と、ここまで調べておきながら実環境(FDD)がないことに気付く。USB-FDDでは代わりになりそうにない。
参考文献
- INT 25h (37) Absolute Disk Read - http://members.tripod.com/vitaly_filatov/ng/asm/asm_011.6.html
- INT 13h, 02h (2) Read Sectors into Memory all - http://members.tripod.com/vitaly_filatov/ng/asm/asm_024.3.html
- DISKに関する資料(DISK.TUT) - http://www.vector.co.jp/soft/data/hardware/se016321.html
- PC-9800シリーズテクニカルデータブック BIOS編、アスキー、1992年
- PC-9801 BIOSとCプログラミング、川上峻史/工学図書、1991年