PC-9801+ICM MO3120で書いたと思われるMOメディアの中に、論理的に読み出せないものがいくつかあって、それについて調査した。10枚中9枚まで以下の解析情報で内容の取得に成功した。
作業手順 §
128MB~640MB時代に使用したMOメディアの内容をサルベージするために、USB接続のMOドライブを経由してWindows 10からファイル読み込みを行った。
その際、読み出しに失敗するメディアが数枚存在した。
それらは、DD for Windows R2を使用してディスクのイメージだけ丸ごと吸い出した。
このイメージからファイルを無事に取り出せるのかが問題である。
症状 §
- 全ファイルコピーが失敗する
- サブディレクトリ内のファイル名が全て化けている場合がある
おおまかな解析の詳細 §
- 原始的なFAT16である
- IPL領域にFAT16などの文字は含まれず、基本的な情報のみである (ほとんど0が詰まっている)
- 日本語ファイル名はシフトJISである
- VFATは使用されていない
- 書き込みが行われていない領域は[CF][23]のシーケンスが繰り返されていると思われる
詳細の解析 §
- 特定のクラスタ番号から先のセクター取得が間違っていることを突き止めた
- それ以前のクラスタの取得には成功している
- つまり、クラスタの取得に成功する領域と失敗する領域が存在する
- サブディレクトリのクラスタの取得に失敗すると結果的に関係ないデータを読み込み、ファイル名が化けるだけでなく、その先のファイル先頭FAT番号も全て無意味なバイナリー値を取得してしまいファイルのコピーもそれ以上できなくなる
- どこから何バイトずれているのか?
- ずれているのは一箇所だけか?
原因 §
- ベタイメージのオフセットでいうと0x03cbfa00~0x03cffa00(256KB)の領域が全て[CF][23]で埋まっており、この領域が使用されていない
- この領域は単純に存在しないものとして読み飛ばせば正常にFAT16ファイルシステムとして読み出せる
- ずれていたのはこの一箇所のみであった
対策 §
- MOのFAT16イメージ読み出しプログラムを作成した。
- https://github.com/autumn009/d88explorerの"BrokenMOFatImageDump"ディレクトリ以下のプログラムを-fオプションで使用する。(-fを付けないと0x03cbfa00~0x03cffa00の読み飛ばしを行わない。ツールそのものは、VFAT非対応、属性非対応であることを除けばFAT16汎用である)
- Visual Studio Enterprise 2019 6.10.0 Preview 1.0と.NET 5用のC#コンソールアプリケーションとして作成されている
補足 §
- まだ読み出せないイメージが存在するので、追加の調査を行う
- フロッピーディスクから読み出したMS-DOSディスクのイメージ(2DD640KBなので今のWindowsではそのまま扱えない)もあるので、FAT12の読み出しも検討中である