Image: 日本語DOS内部のディスケットドライブタイプ判別方法 [PS/55]

15年前にDOSのディスクフォーマットについて調べていた最中にPS/55というマシンを知ったときの最初の疑問は、PS/55の日本語DOSで使われる標準のフォーマットは何?だった。この疑問はエミュレーターの完成によってようやく解決した。

例によってMCA機と非MCA機(5550互換)で異なるため、ここではPS/55はMCA機のみを指し、非MCA機のPS/55はIBM 5550に含むとする。

ディスクBIOS (Int 13h, AH = 08h)

IBM PCのローレベル(DOSやドライバー)でのディスクアクセスは Int 13h の ディスクBIOS を通して行われる。この点はPS/55もIBM 5550も同じ。

フォーマットしようとするディスケットが未フォーマットの場合、ディスケットドライブのタイプからフォーマットを仮定する必要がある。

ディスケットドライブのタイプ判別には Int 13h, AH = 08hが使われる。以下、Interrupt List Release 60 by Ralf Brown (1999)より。

INT 13 - DISK - GET DRIVE PARAMETERS (PC,XT286,CONV,PS,ESDI,SCSI)
	AH = 08h
	DL = drive (bit 7 set for hard disk)

Return: CF set on error
	    AH = status (07h) (see #00234)
	CF clear if successful
	    AH = 00h
	    AL = 00h on at least some BIOSes
	    BL = drive type (AT/PS2 floppies only) (see #00242)
	    CH = low eight bits of maximum cylinder number
	    CL = maximum sector number (bits 5-0)
		 high two bits of maximum cylinder number (bits 7-6)
	    DH = maximum head number
	    DL = number of drives
	    ES:DI -> drive parameter table (floppies only)

(Table 00242)
Values for diskette drive type:
 01h	360K
 02h	1.2M
 03h	720K
 04h	1.44M
 05h	??? (reportedly an obscure drive type shipped on some IBM machines)
	2.88M on some machines (at least AMI 486 BIOS)
 06h	2.88M
 10h	ATAPI Removable Media Device

PS/55の場合、ディスクBIOSはシステム装置内にあるシステムボードのROMに収録されており、日本語DOSはこれを呼び出している。ステージII 5551-T09の場合、ディスクBIOSはリファレンス・ディスケットによって設定されたCMOSの値を読み取ってドライブタイプを決定している。この値はIBM PCと同じで、上のTable 00242の通り。

ドライブタイプはユーザーがリファレンス・ディスケットを使って設定することになる。ハードウェアとしては2台目の内蔵ディスケットドライブがインストールされたことを検出する機能はあるが、タイプを自動判別する機能は備わっていないため、ユーザーが正しいタイプを選択する必要がある。もっとも、下の画面の場合は「1.44MB 3.5インチ」または「未装着」しか選べないため、間違えようがない。

Image: 86Box PS/55 Reference Diskette Ver.1.33

IBM 5550の場合、システムボードはBIOSを持たないため、ディスクBIOSは日本語DOSのシステムファイル (IBMBIO.COM) に含まれている。日本語DOSのディスクBIOSは、IPL ROMの特定のアドレスにある値を読み取ってドライブタイプを決定している。この判別方法は次のようになっている。

if FFFC:Ch == 02 then 3.5 HD drive (there is no 3.5 DD drive model)
if FFFC:Ch == 01 then 5.25 DSHD drive
                 else 5.25 DSQD drive

ROMデータによってドライブタイプが決まるということは、ドライブタイプはシステム装置のモデルによって決まり、後から別のタイプの内蔵ドライブをオプションでインストールすることは想定されていないということになる。外付けの3.5インチディスケット駆動機構はそれに付属するドライバーソフトウェアでサポートされていたと予想できる。

Int 13h, AH=08hを呼び出したときにALが返す値は次の通り。IBM PCにはない 05h が追加されている。

 02h	5.25" 1.2M
 03h	3.5" 720K
 04h	3.5" 1.44M
 05h	5.25" 720K

日本語DOS K3.3のユーザーズ・ガイドによれば、

ディスケットは、特に指定しない限り、ディスケット・ドライブのタイプに応じたバイト/セクターでフォーマットされます。720Kバイトのディスケット・ドライブでは、DOSバージョンK2.60未満では8セクター/トラック、バージョンK2.60以上では9セクター/トラックでフォーマットされます。

と書かれていることから、日本語DOS K2.5以前では 05h = 5.25” 640K だったと予想できる。

MS-DOS IOCtl (Int 21h, AX = 440Dh)

Int 13hは機種依存の機能であり、富士通や日本電気などの他メーカーのPCで同じ機能が用意されているとは限らない。そこで、MS-DOS Ver.3.2以降ではデバイスドライバー開発用にローレベルの機能が Ioctl (Int 21h, AH = 44h) として提供されている。その中の一つ、Int 21h, AX = 440Dh にてドライブの情報を含んだ Device Parameter Block (DPB) を取得することができる。このファンクションはDOSのSYSコマンドでも使われている。

INT 21 - DOS 3.2+ - IOCTL - GENERIC BLOCK DEVICE REQUEST
	AX = 440Dh
	BL = drive number (00h=default,01h=A:,etc)
	CH = category code (see #01558)
	CL = minor code (function) (see #01559)
	DS:DX -> (DOS) parameter block (see #01560,#01562,#01563,#01564,#01565)
	SI:DI -> (OS/2 comp box) parameter block (see #01566,#01568,#01569,#01572)
Return: CF set on error
	    AX = error code (01h,02h,etc.) (see #01680 at AH=59h/BX=0000h)
	CF clear if successful
	    DS:DX -> data block if CL=60h or CL=61h

DPBはBPB (BIOS Parameter Block) を内包していて情報量が多いため、ここでは全てを記載しない。その中でタイプ判別に重要なのは Device type で、その値は次の通り。

(Table 01561)
Values for device type:
 00h	320K/360K disk
 01h	1.2M disk
 02h	720K disk
 03h	single-density 8-inch disk
 04h	double-density 8-inch disk
 05h	fixed disk
 06h	tape drive
 07h	(DOS 3.3+) other type of block device, normally 1.44M floppy
 08h	read/write optical disk
 09h	(DOS 5+) 2.88M floppy

実際に調べたところでは、IBM 5550の日本語DOS K3.4では5.25” 2DDディスケットは 01h (1.2M diskと同じ) らしい。SYSコマンドでは、DPBのdevice typeが2か7(3.5インチディスケット)なら新フォーマット、1でかつトラックあたりセクター数が15(5.25インチ2HCディスケット)なら新フォーマット、そうでなければ(トラックあたりセクター数が8または9の2DDディスケット)旧フォーマットと判断している。(フォーマットの新旧の違いについては既に260201 5550エミュ製作 [56]日本語DOSの起動に成功!で説明した。)


※コメント欄が表示されない場合はdisqusについてJavascriptが有効であることを確認して下さい。コメントはスパム防止フィルターによる承認制のため、投稿してもすぐに反映されない場合があります。

管理人 : Akamaki (akm)

は、PCとVTuberに夢中になっている電気技術者です。

私はレトロコンピューティングの愛好家ですが、そのようなリグはもう収集していません。

私の活動はトップページで見ることができます。読んでくれてありがとう!