2013年3月28日木曜日

X68000で記録されたHDD/MO/DVD-RAMの読み出し方(限定的)

X68000で記録したDVD-RAMが見つかった。
DVD-RAMなので、最近のPCでも光学ドライブがそれに対応していれば読めるかと思った。Windows/MacOS/Linuxでは標準でFAT12/16/32で記録されたメディアを読むことが出来るからである。
しかし実際には一部しか読めなかった
読むために、いろいろやってみた。

ということで、そのあたりの情報を「覚えているうちに」書いておこうと思う。
なお、X68000用のツールなどについては細かい説明をしない。また、ファイルシステムについての若干の知識を要する。

まずは、X68000のファイル/メディアをWindows/MacOS/Linuxで読む場合の問題点を先に列記しておく。

・8+3バイトの文字を超えた部分は切り捨てられる
Windowsの1ファイルシステムであるところFAT、というかMS-DOSのファイル名は8+3バイトであった(+3は拡張子分)。
X68000のOS、Human68Kのファイルシステムは基本的にFAT12またはFAT16準拠でありDOS互換だが、ファイル名部分を18バイトまで記録できる。これは、FATで予備になっていた10バイトをファイル名領域に割り当てたからである。ただし、識別はDOSとの互換性を考慮して8バイトまでとしてあった。TwentyOneを導入していれば18バイト全て識別させる事もできる。

WindowsではVFAT(Windows95で採用された、FATでロングファイル名を使うためのシステム)でその予備領域を使うようになった。従って、X68で記録されたその10バイトの拡張部分に関しては、どうやっても読むことが出来ず、バッサリ切り捨てである。この拡張部分の記録=ファイル名によってはVFATと誤認識して、正しく読めないこともある。
(かなりまれな現象ではあるが、何度か遭遇した。)

TwentyOneでファイル名識別を18+3文字に拡張していた場合、切り捨てによってファイル名が重複する可能性がある。この場合、後から出てきたファイルで上書きされてしまう。

余談だが、VFATとFAT32を混同している説明がたまに見受けられるのでちょっと説明。FAT32は、FATファイルシステムにおける、1File Allocation Table単位を32ビットにしただけのものである(厳密には他にもルートディレクトリの大きさが可変になったとか細かい違いはある)。VFATはFATファイルシステム上でロングファイル名;正確にはunicodeによる256バイトまでのファイル名記録をするのための「やり方」である。したがって、FAT16/12上でも実現される反面、FAT32だけどロングファイル名は使えないシステムもある(というか組み込み機器用に作った。そういう仕事してた)。


・半角カナ、2バイト文字は化ける
Human68Kのファイル名には半角カナ(0xa0〜0xdf)やSHIFT-JISでの2バイト文字も使うことが出来る。SX-Window上のファイル名には特に多い。

Windowsでは今もこれをサポートしてくれているのでそのまま表示もアクセスも可能であるが、MacOSやLinux上に実装されているFATドライバは8+3部分はASCIIのみ(VFATはUnicode)なので、文字化けする。文字化けはするが、アクセスは可能である。

ただしWindowsでは、ファイル名を8バイト目で切り捨てるとき、2バイト文字の1バイト目で切られた場合はアクセス不可となりエラーが発生する。これは結構多発する。
(Linux上には2バイト文字という概念がないので、単に文字化けするだけ。)

・英大文字しか受け付けない
X68→Windowsで一番引っかかるのがこれではないかと思う。WindowsというかDOSではファイル名は全て英大文字である。ロングファイル名で小文字が使えるようになったが、それはVFAT上で記録されているからであって、DOS互換の8+3バイトファイル名では全て英大文字に変換されている。
Human68Kでは小文字ファイル名を使え、そのまま記録する。ただし、ファイル名比較では大文字と区別されない。

小文字ファイル名があると、Windows上ではエントリとしては表示できるが、実体へのアクセスはできない。MacOSではエントリとしても表示されない。ところが、Linuxでは表示もアクセスも出来る。UNIX自体がファイル名に英小文字を許し、また大文字小文字の区別があったからであろう。 それをFAT相手でも有効にしてくれているのである。


TwentyOneを入れ、さらに英大文字小文字区別オプションをつけていると、Windowsから見た時、同一フォルダ内に同名ファイルが存在することになり、どういう結果をもたらすかわからない(うちにはそういう環境はないから)。


このような各OSでのファイル名の互換性を頭に入れた上、ファイルコピーを考える。


・物理的にドライブを認識させる
X68で記録したメディアでそれらが読める可能性があるのはSCSI接続のHDD、MOまたはDVD-RAMドライブに限られる。いや、3.5インチフロッピーも、ドライブさえ用意出来れば読めるだろう。FDS-120のようなUSB-3.5インチドライブも数年前までは入手できたが今はどうだろうか。
→3.5インチFDは、ドライブ自体が1.2Mフォーマット(いわゆる98フォーマット)に対応していれば読めるが、1.44M(IBMフォーマット)専用だと読めない。これは容量だけの違いではなく回転数が異なる。USBタイプのは、私が知るかぎり全てOKだったと思う。
5インチドライブに関しては、現在手に入れることはおよそ不可能だろう。

私が知るかぎり、WindowsXP時代まではPCMCIAのSCSIカードやUSB-SCSI変換器があったので、SCSIドライブを容易に接続できたが。今はどうだろうか。Windows7以降ではドライバが対応しているかどうかもわからない。(シリアルでない)PCMCIAカードスロットを持つノートPC自体が希少価値状態だろう。

・論理的にメデイアを認識させる
物理的にドライブが接続できても、メディアが読めるかどうかはまた別問題である。
Human68KはFATであるが、それより前にドライブとしての認識領域(MBR領域)のフォーマットがあり、ここは互換性がない。
Human68Kでフォーマットされたメディアが読めないのはこのためである。

残念ながらの、この部分を「後から」読めるように変換するツールはないと思う。
少なくとも私は知らない。しかし、「先に」読めるようにしておくツールはある。
GORRYさんのFIMである。現在も↓から入手可能である。
http://download.goo.ne.jp/software/contents/soft/x68/hardware/se036103.html
これでフォーマットしておくとIBMフォーマットとなり、Windows/MacOS/Linuxで読めるメディアが出来上がる。

私はX68を現役で使っていた時にもDOSとファイルやり取りすることがあったので、ファイル名の問題はともかく、ある時期以降FIMだけは必ず掛けていた。

余談であるが、実はFIMにはいくつかバグが居る。
・1セクター256バイトHDDで暴走する(可能性がある)
・FDS-120のようなProcessor Deviceで容量が表示出来ない
・Humanフォーマットのディスクで1パーティションの容量が一定(多分2000M)を越えると表示がおかしくなる
・フォーマットで書き込む値が一部おかしい
・6桁を越えるセクター番号に対応していない
実使用上ほとんど表面化しない/問題ないとは思うが念のため。
修正版も作った(日付から見るに2000年)のだけど、どこにもアップロードしないままだったなぁ。
今となっては検証環境がないので出すことも出来ないけど。


・・・結局

長々と書いたが、結局のところ
・FIMフォーマットされたメディアを認識させる
・Linuxで起動して読ませる
ことが基本となる。

Linuxはどれでもいいかわからないが、私はMacOS上のVMWare Fusion4上にUbuntuを入れて作業した。Windows機ならCD-ROMまたはDVD-ROMから起動できるKnoppixなどを使えばいいだろう。もちろんFATをサポートしている物しか使えないが。

その上でのだいたいの手順。

(1)Ubuntu起動
(2)Macの内蔵ドライブを共有してDVD-RAMを認識させる

(3)ファイルが見えたら、ローカルに圧縮して保存する
直接ファイルとしてコピーすると、エラーが発生するファイル名分をコピーした際、Ubuntu(12)ではカーネルエラーが発生してしまうことがある。圧縮だと圧縮エラーは発生するが、そこまでの圧縮ファイルとができる上、カーネルエラーも出ないので安全である。

(4)圧縮ファイルをWindows等目的のOSへコピーする。
方法はネットワーク経由でもUSBメモリ経由でも適当に。

(5)切り捨てられたファイル名や文字化けしたファイル名を手動で直す
2バイトまたは半角カナフォルダ名だけなら、先にWindowsでコピーして作成させておき、Linuxでコピーした実体をその下に移動すると、幾分楽にはなる。


以上、FIMさえ除けば、X68での操作は一切いらずにファイルの転送が可能になる。


うちではこれでFIMをかけてあるDVD-RAM/MOは(制約はあれ)読めるようになった。
が、やはりFIMでないMOも若干あったりして何とかしたいと思わなくもない。
X68実機環境を作れば一発解決だけど、それが大変だからなぁ。


もしX68エミュレーターの上でサポートしてくれるなら、知りうる限りの情報は提供するけど、あれらもXDF/HDSレベルの互換性であって、物理ドライブを直接接続できるものはないからなぁ。まあ、そのためにはデバイスドライバーを作る必要があって非常に難しいというのは解るが。

Windows95ではDOSレベルファンクションコールでディスクの直読みが出来たので、DOSプログラムとしてX68メディアを読み取るプログラムも作れたんだけど、今は禁止されてるから無理。Windows7が走るPC上でも動くDOS互換OSでもあれば作れる?昔はフリーのDOS互換OSもあったけど、今はどうなんだろうか。


そうそう、拙作FAT32ツールは、X68000上でFAT32+VFAT記録されたディスクを読むためのプログラムであって、Windows上でX68のメディアを読むためのものではない。どこぞで勘違いされているような話を見かけたこともあるので、念のため。

0 件のコメント:

コメントを投稿