beatmaniaIII用フロッピーディスクの内部研究

研究方針
1.44MB FDの内部の大雑把な区分け
フォーマット比較
ディスクコピー比較
「System Volume Information」を禁止
WindowsXP(とそれ以降)によるファイル情報の自動書き換えを禁止
実験に使ったFDのイメージファイル
今後の調査予定
外部リンク

かにかにクラブ > ビートマニア / ビートマニアスリー > beatmaniaIII用フロッピーディスクの取り扱いについて > beatmaniaIII用フロッピーディスクの内部研究

バックアップコピーが難しい、III1stのFD(フロッピーディスク)の研究。
バックアップを手軽にできるようにしたい。

研究方針
III1stの公式サイト内にある「beatmania III Q&A」のページにおいて、
Q: バックアップディスクの作り方を詳しく教えて下さい。
A: Windows95、もしくはWindows98上で行います。 (WindowsNT、2000、Macintoshでは出来ません)
と書いてあるので、まずWindows98を基本にして調査し、次にそれとその他と比較して違いを見つける方針で研究を進める。

Microsoft Extensible Firmware Initiative FAT32 File System Specification (DOC形式ファイル)
ここ(上記リンク先)に、FDに採用されている「FAT12」という取り決めを発展拡張した「FAT32」の正式な仕様書がある。
(日本語による解説ページ:ELM > Japanese > テクニカル ノート > FATファイルシステムのしくみと操作法)
詳細はそこにまかせておいて、このページでは、IIIシリーズに必要な部分だけを研究する。

フォーマットのパラメータは、
容量 = 「1.44MB 512 バイト/セクタ」
ファイルシステム = 「FAT」または「既定」または「標準」
アロケーションユニットサイズ = 「512 バイト」または「既定」または「標準」
ボリュームラベル = 空欄
クイックフォーマット = どちらでもいい
結果レポート(Windows98) = どちらでもいい
システムファイル(Windows98) = なし
MS-DOSの起動ディスク(WindowsXP, それ以降) = なし
(比較しやすくするための統一であり、IIIシリーズに必要な設定というわけではない)

なお、記事中の実験で使用しているWindowsは、以下のバージョンである。
Windows98 → 98 SE
WindowsXP → XP Professional SP3 32bit
Windows7 → 7 Ultimate SP1 64bit
Windows10 → 10 Pro 64bit
Windows11 → 11 Pro 64bit

1.44MB FDの内部の大雑把な区分け
1.44MB FDの容量は、0x168000バイト。
アドレス内容
_____0x0ブートセクタ
___0x200FAT1
__0x1400FAT2
__0x2600ルートディレクトリ
__0x4200ファイル内データ
0x168000(ここの1バイト手前がディスクの終端)
ブートセクタ
機器にこのディスクを入れて電源を入れた時に動かすプログラムと、このディスクの情報。
FAT1/FAT2
ファイル内データの連結情報。
FAT2はFAT1のコピー。
面倒なので、FAT2の内容については、このページ内での今後の記載を省略する。
ルートディレクトリ
ルートディレクトリ内のファイル名などの情報。
ファイル内データ
ファイル内データ、またはサブディレクトリ内の情報。

フォーマット比較
Windowsのいくつかのエディションで、FDのフォーマットをした、その内容を比較。
なお、IIIシリーズはFDから動作を始めるように作られてはいないので、ブートセクタ内のプログラム部分は完全に無視する。
基本形
---- ブートセクタ ----
000000  ** ** ** YY YY YY YY YY YY YY YY 00 02 01 01 00
000010  02 E0 00 40 0B F0 09 00 12 00 02 00 00 00 00 00
000020  00 00 00 00 00 00 29 ZZ ZZ ZZ ZZ 4E 4F 20 4E 41
000030  4D 45 20 20 20 20 46 41 54 31 32 20 20 20 ** **
||||||  (             プログラム部分 中略             )
0001F0  ** ** ** ** ** ** ** ** ** ** ** ** ** ** 55 AA
---- FAT1 ----
000200  F0 FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00
||||||  (              「00」の羅列 中略              )
0013F0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
---- ルートディレクトリ ----
002600  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
||||||  (              「00」の羅列 中略              )
0041F0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
---- ファイル内データ ----
004200  F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6
||||||  (              「F6」の羅列 中略              )
167FF0  F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6
Windows98 (EXPLORER.EXE経由 限定)
000000  ** ** ** YY YY YY YY YY 49 48 43 00 02 01 01 00
000010  02 E0 00 40 0B F0 09 00 12 00 02 00 00 00 00 00
000020  00 00 00 00 00 00 29 ZZ ZZ ZZ ZZ 4E 4F 20 4E 41
||||||  (            以降「基本形」と同じ             )
「YY YY YY YY YY」は、フォーマット作業をするたび変動するが、理由と法則は不明。
その後ろの「49 48 43」は固定で、ASCII文字で「IHC」。
「ZZ ZZ ZZ ZZ」も、フォーマット作業をするたび変動するが、これは仕様どおり。
Windows98 (COMMAND.COM経由 限定)
EXPLORER.EXE経由と同じ。
ただし、プログラム部分だけが、全面的に異なる。
WindowsXP (EXPLORER.EXE, CMD.EXE, COMMAND.COM 共通)
000000  ** ** ** 4D 53 44 4F 53 35 2E 30 00 02 01 01 00
000010  02 E0 00 40 0B F0 09 00 12 00 02 00 00 00 00 00
000020  00 00 00 00 00 00 29 ZZ ZZ ZZ ZZ 4E 4F 20 4E 41
||||||  (            途中「基本形」と同じ             )
167DF0  F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6 F6
167E00  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
||||||  (              「00」の羅列 中略              )
167FF0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
「4D 53 44 4F 53 35 2E 30」は固定で、ASCII文字で「MSDOS5.0」。
「ZZ ZZ ZZ ZZ」は、仕様どおり、フォーマット作業をするたび変動する。
プログラム部分は、Windows98のどちらのタイプでもない、異なるもの。
Windows98では最後まで「F6」で埋め立てられていたが、XPでは最後の512バイトが「00」になっている。
Windows7 (EXPLORER.EXE, CMD.EXE, POWERSHELL.EXE 共通)
WindowsXPと同じ。
ただし、プログラム部分の中にある7バイトの文字列だけが異なる。
具体的に異なる箇所は下記の通り。
0001A0  B0 4E 54 4C 44 52 20 20 20 20 20 20 0D 0A 52 65
0001A0  B0 42 4F 4F 54 4D 47 52 20 20 20 20 0D 0A 52 65
前者がWindowsXPで、ASCII文字にすると「NTLDR」プラス空白文字2個。
後者がWindows7で、ASCII文字にすると「BOOTMGR」。
Windows10 (EXPLORER.EXE, CMD.EXE, POWERSHELL.EXE 共通)
||||||  (             最初Windows7と同じ              )
---- FAT1 ----
000200  F0 FF FF FF FF FF 00 00 00 00 00 00 00 00 00 00
||||||  (              「00」の羅列 中略              )
0013F0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
---- ルートディレクトリ ----
002600  XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
||||||  (       強制的に作られたものの羅列 中略       )
002650  XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
002660  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
||||||  (              「00」の羅列 中略              )
0041F0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
---- ファイル内データ ----
004200  XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
||||||  (       強制的に作られたものの羅列 中略       )
004290  XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
0042A0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
||||||  (              「00」の羅列 中略              )
0043F0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
004400  XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
||||||  (       強制的に作られたものの羅列 中略       )
004440  XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
004450  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
||||||  (              「00」の羅列 中略              )
0045F0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
||||||  (             以降Windows7と同じ              )
全体の骨組みとブートセクタは、Windows7と同じだが、
隠しサブディレクトリ「\System Volume Information」と
隠しファイル「\System Volume Information\IndexerVolumeGuid」が
強制的に作成される。
XX」はこれらの強制されたデータ。
この強制を禁止すればWindows7と同じになる。
(参考):『「System Volume Information」を禁止』
Windows11 (EXPLORER.EXE, CMD.EXE, POWERSHELL.EXE 共通)
Windows10と同じ。
(Windows10とWindows11の強制されたデータは、作成日時等を含むため完全一致にはならないが、そこに目を瞑れば同じになる。)

ディスクコピー比較
Windowsのいくつかのエディションで、FDのディスクコピーをした、その内容を比較。
ディスクコピーというからには、内容は丸々同一のものができそうに思うかもしれないが、実際は違う。

「コピー」=「同一のものを作りたい」
「ボリュームID」=「同一のものを作りたくない」
これら2つを両立するのが不可能なため、片方が犠牲になっている。
どちらかが誤った挙動というわけではない。

Windows98 (EXPLORER.EXE経由 限定)
000000  ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??
000010  ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??
000020  ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??
||||||  (           以降「コピー元」と同じ            )
この段落では「??」と書いた部分は、コピー元と同じであることを示すことにする。
ということは、この場合、コピー元とコピー先が完璧に同じである。
Windows98 (COMMAND.COM経由 限定)
000000  ?? ?? ?? 4D 53 57 49 4E 34 2E 30 ?? ?? ?? ?? ??
000010  ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??
000020  ?? ?? ?? ?? ?? ?? ?? ZZ ZZ ZZ ZZ ?? ?? ?? ?? ??
||||||  (           以降「コピー元」と同じ            )
「OEM名」が必ず「4D 53 57 49 4E 34 2E 30」(ASCII文字で「MSWIN4.0」)になる。
また、「ボリュームID」も、ディスクコピー作業をするたびに再発行され、変更されてしまう。
WindowsXP (EXPLORER.EXE, CMD.EXE, COMMAND.COM 共通)
000000  ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??
000010  ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??
000020  ?? ?? ?? ?? ?? ?? ?? ZZ ZZ ZZ ZZ ?? ?? ?? ?? ??
||||||  (           以降「コピー元」と同じ            )
「OEM名」は変更されずにきちんとコピーされる。
しかし、「ボリュームID」は、ディスクコピー作業をするたびに再発行され、変更されてしまう。
Windows7 (EXPLORER.EXE, CMD.EXE, POWERSHELL.EXE 共通)
WindowsXPと同じ。
「ボリュームID」が変更されてしまう。
Windows10 (EXPLORER.EXE, CMD.EXE, POWERSHELL.EXE 共通)
ディスクコピーの操作方法が無くなっている。
Windows11 (EXPLORER.EXE, CMD.EXE, POWERSHELL.EXE 共通)
ディスクコピーの操作方法が無くなっている。

「System Volume Information」を禁止
Windows8.1以降のエディションでは、OSが着脱可能型(リムーバブル)ドライブを検知した時、自動的にそのドライブのルートディレクトリに「System Volume Information」という隠しディレクトリを作成するようになっている。
作成されたそれを消去することは可能だが、その後に取り付けるたびに同じ作業をすることになる。
着脱可能型ドライブにはFDも含まれる。

この、自動的に作成される機能を禁止することが、レジストリエディタを使うことで可能。
なお、FDだけでなく、着脱可能型ドライブの全てが対象であることに注意すること。

お約束的な文言。
レジストリエディタの操作は、作業を間違えるなどして、OSが起動できなくなるなどの重大な事故を起こすことがあるので細心の注意を払うこと。
どんな不都合が発生しようが、筆者は責任を取るつもりはない。
実行するなら自己責任ですること。

(Windows8.1以降で有効)

WindowsXP(とそれ以降)によるファイル情報の自動書き換えを禁止
この段落は、このページで研究している内容とは関係ないので、完全に無視して構わない。
このサイトでは過去に(2021年12月まで)長らく、この自動書き換えが原因でバックアップに失敗すると決めつけてきたが、書き換えられていなくても失敗しているようである。
しかし、せっかく調べた知識なので残しておく。

WindowsXP(とそれ以降)のエクスプローラは、ディレクトリの中を表示すると、その瞬間にそのディレクトリの中のファイル情報を全て書き換えてしまう。
「アクセス日時」を更新したり、Microsoft社が過去に手がけた別のシステムとの互換性を配慮した工夫や設定を反映させたりする。
(先に書いた「決めつけ」は、このことでIII1st実機が保存したものとファイル情報が違うものに変化するのが原因であると憶測したもの。)

この、自動的に書き換える機能を禁止することが、レジストリエディタを使うことで可能。
なお、Windows10のとある時期には、禁止設定を無視して着脱可能型かどうかで書き換えたり書き換えなかったりを自動で変動することがあった。
さらには、Windows10のそれとは別の時期には、禁止と許可の判定が反転していたという致命的な誤りの報告があったこともある。

繰り返し、お約束的な文言。
レジストリエディタの操作は、作業を間違えるなどして、OSが起動できなくなるなどの重大な事故を起こすことがあるので細心の注意を払うこと。
どんな不都合が発生しようが、筆者は責任を取るつもりはない。
実行するなら自己責任ですること。
筆者がこのやりかたを教わった当時、
『Nortonをインストール済みのWindows2000でこれをやったらOSが起動できなくなった』
という人がいたので、本当に注意。


実験に使ったFDのイメージファイル
イメージファイルとは、ディスクの中身を丸ごと読み取って、それをファイルに保存したもの。

Windowsの色々なバージョンでフォーマットしただけのFD(ZIP圧縮)

今後の調査予定
自分用メモ。

●Windows98のCOMMAND.COM経由のディスクコピーでは、バックアップが失敗するのでは?

●どのOSでディスクコピーしようと、ボリュームIDを一致させれば、バックアップが成功するのでは?

●ボリュームIDが同じFDを作れば、ファイル単品でのコピーでも、バックアップが成功するのでは?
 →成功した!!!!


関連外部リンク
●ボリュームIDを直接的に書き換えるツール(1)
Microsoft > Learn > Sysinternals > ダウンロード > VolumeID v2.1

●ボリュームIDを直接的に書き換えるツール(2)
PENGUIN'S CAFE! > 「Volume Serial Number Editor for Windows9x/NT」

●FDをファイルに取り込む(イメージ化)およびその逆をするツール
chrysocome.net > 「RawWrite for Windows」
●それを日本語で解説しているページ
ぼくんちのTV別館 > 「RawWrite for Windows: FDをイメージ化したりイメージをFDに戻すツール」

●イメージ化したものの中に入っているファイルをWindowsで操作可能にするツール
実験室:P > 「DiskExplorer」

© 2000-2024 KANIKANI