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

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

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

研究方針
beatmaniaIIIの公式サイト内にある「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ファイルシステムのしくみと操作法)
詳細はそこにまかせておいて、このページでは、beatmaniaIIIに必要な部分だけを研究する。

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

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

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

フォーマット比較
Windowsのいくつかのエディションで、FDのフォーマットをした、その内容を比較。
なお、beatmaniaIIIは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バイトの文字列だけが異なる。
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  ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??
||||||  (       強制的に作られたものの羅列 中略       )
002650  ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??
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  ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??
||||||  (       強制的に作られたものの羅列 中略       )
004290  ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??
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  ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??
||||||  (       強制的に作られたものの羅列 中略       )
004440  ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??
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」が
強制的に作成される。
この強制を禁止すればWindows7と同じになる。
(参考):『「System Volume Information」を禁止』

ディスクコピー比較
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 共通)
ディスクコピーの操作方法が無くなっている。

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

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

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

(Windows8.1以降で有効)

WindowsXP(とそれ以降)によるファイル情報の自動書き換えを禁止
(以降、「とそれ以降」の表記は省略)

このサイトではこれまで(2021年12月現在)長らく、この自動書き換えが原因でバックアップに失敗すると決めつけてきたが、書き換えられていなくても失敗しているようである。
なので、この知識は無駄な可能性が高い(まだ調査中。これ「も」原因の可能性を未調査。)のだが、せっかく調べた知識なので残しておく。

WindowsXPのエクスプローラは、ディレクトリの中を表示すると、その瞬間にそのディレクトリの中のファイル情報を全て書き換えてしまう。
「アクセス日時」を更新したり、Microsoft社が過去に手がけた別のシステムとの互換性を配慮した工夫や設定を反映させたりする。
なお、設定やWindows Updateのバージョンによっては、着脱可能型かどうかで書き換えたり書き換えなかったりを自動で変動する場合があるようである。
(先に書いた「決めつけ」は、このことでbeatmaniaIII実機が保存したものとファイル情報が違うものに変化するのが原因であると憶測したもの。)

この、自動的に書き換える機能を禁止することが、レジストリエディタを使うことで可能。

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


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

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

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

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

●ボリュームIDを直接的に書き換えるツール
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-2023 KANIKANI