生DOSについては過去の記事→DOSで利用できるフロッピーフォーマット [PC/AT +5]を参照。
バックエンド(ドライバーレイヤー)
Windows NT系標準ではKernel32.dllが持つDeviceIoControl 関数にIOCTL_DISK_GET_MEDIA_TYPESコントロールコードを送ることで、デバイスドライバーと通信し、あるドライブで利用可能なディスクフォーマットのジオメトリー情報を知ることができる。
そこで、Windows標準ドライバーで動作する内蔵5.25インチFDDと3.5インチFDD、一般的なスリムサイズのUSB外付け3.5インチFDD(デバイスマネージャーでの表示名はY-E DATA USB-FDU USB Device)について調べてみた。
Windows 2000での内蔵5.25インチFDD
5.25インチFDDについては、私が持っているPCの中ではWindows 2000でしか動作しないため、XP以降については調べていない。PC/AT互換機で使用できる5.25インチFDDにはDSDD(360 KB、両面倍密度)とDSHD(1.2 MB、両面高密度)の2タイプがあり、ここではDSHDドライブを使用している。
Cylinder Track Sector Bytes Disk size
40 1 8 512 163840 (Bytes) = 160 (KiB)
40 1 9 512 184320 (Bytes) = 180 (KiB)
40 2 8 512 327680 (Bytes) = 320 (KiB)
40 2 4 1024 327680 (Bytes) = 320 (KiB)
40 2 9 512 368640 (Bytes) = 360 (KiB)
80 2 15 512 1228800 (Bytes) = 1200 (KiB)
Windows 2000での内蔵3.5インチFDD
PC/AT互換機で使用できる3.5インチFDDにはDD(720 KB、倍密度)とHD(1.44 MB、高密度)の2タイプがあり、ここではHDドライブを使用している。
Cylinder Track Sector Bytes Disk size
80 2 9 512 737280 (Bytes) = 720 (KiB)
80 2 18 512 1474560 (Bytes) = 1440 (KiB)
Windows 2000でのUSB外付け3.5インチFDD
USB外付け3.5インチFDDの場合、挿入しているフロッピーディスクがDD(720 KB、倍密度)かHD(1.44 MB、高密度)かによって利用可能なジオメトリー情報が変わる。
次はDD(720 KB、倍密度)ディスクの場合。
Cylinder Track Sector Bytes Disk size
80 2 9 512 737280 (Bytes) = 720 (KiB)
次はHD(1.44 MB、高密度)ディスクの場合。
Cylinder Track Sector Bytes Disk size
80 2 15 512 1228800 (Bytes) = 1200 (KiB)
77 2 8 1024 1261568 (Bytes) = 1232 (KiB)
80 2 18 512 1474560 (Bytes) = 1440 (KiB)
内蔵ドライブに比べて、2つのジオメトリー情報が追加されている。1番目は5.25インチ2HCディスクと同じジオメトリーであり、東芝J-3100の初期モデルで使われていたフォーマットだろうか。2番目はそれ以外の日本のPC(NEC PC-98、富士通FMRなど)で使われていたフォーマットだろう。
Windows XP以降でのUSB外付け3.5インチFDD
Windows XP以降ではUSB外付け3.5インチFDDがDD(倍密度)ディスクの8セクター/トラック (640 KB) フォーマットに対応している点でWindows 2000と異なる。
Cylinder Track Sector Bytes Disk size
80 2 8 512 655360 (Bytes) = 640 (KiB)
80 2 9 512 737280 (Bytes) = 720 (KiB)
他はWindows 2000と同じ。
上記にないジオメトリーのディスクを読むには
DOSではIMD、WindowsではSAMdiskなどの独自のドライバーを持つディスクイメージ化ソフトで読める可能性がある。これらのソフトウェアでディスクデータをイメージ化し、エミュレーターで使用する方法がある。
バックエンド(ファイルシステムレイヤー)
ドライバーレイヤーの条件を満たしたとしても、ファイルシステムを認識できるかどうかは別問題である。DOSの場合はメディアディスクリプタさえ読めれば問題ないが、Windows NT系ではBPB (BIOS Parameter Block)や署名 (55 AA)も正しく記録されている必要がある。初期のMS-DOS (Ver.1.xx) でフォーマットされたディスクや市販ソフトウェアのディスクはファイルを読めない可能性がある。もしファイルを読めなくても、ディスク自体にアクセスすることは可能なので、ディスクイメージ化してエミュレーターで運用できる可能性はある。
フロントエンド(エクスプローラー)
上記の2つの条件をパスしていれば、既存のフォーマット済みディスクを読み書きすることはできる。しかし、ディスクを新たにフォーマットするにはドライバーがその種類のディスクに対してIOCTLのフォーマットコマンドをサポートしているだけでなく、フロントエンドたる「フォーマッター」も必要。
Windows標準ではshell32.dllにSHFormatDrive 関数としてGUIでのフォーマット機能が用意されている。これは、エクスプローラーでドライブを右クリック→フォーマット をクリックして表示されるダイアログと同じ。この機能はWindowsのバージョンによって微妙に違いがある。
Windows 98
内蔵、外付けにかかわらず、3.5インチは720KB、1.44MB、120MB(LS-120ディスク用?)、5.25インチは360KB、1.2MBしか選べない。

Windows 2000
1番目は内蔵5.25インチFDD、2番目は外付け3.5インチFDD(HDディスクをセット)。J-3100やPC-98のフォーマットも選択可能。

Windows XP
Windows 2000との違いは、3.5インチ1.44MBフォーマットしか選べないことと、MS-DOS起動ディスクの作成が可能になったこと。3.5インチDDディスクをセットしてこのダイアログを開くと、容量やファイルシステム欄は空欄になって何も選べなくなる(後のWindowsバージョンではこの代わりにエラーメッセージが表示される)。

→ KB302113: Windows XP で 720 KB のフロッピーディスクをフォーマットできない - Microsoft サポート技術情報
公式にはコマンドプロンプトのFORMATコマンドでも720KBフォーマットは対応していないことになっているが、実際は/Tスイッチと/Nスイッチを組み合わせてフォーマットすることができる。また、Windows 7では/Fスイッチでのサイズ指定も復活している。
→ Windows - Formatting a 720K Diskette in a 1.44M Drive - minuszerodegrees.net
Windows 11
Windows 8.1まではMS-DOS起動ディスクを作成できたが、Windows 10ではこの機能が削除された。次はWindows 11のスクリーンショット。
