line 画像

ROFS について

 とりあえず調べた結果を箇条書き…。Windows 用のバイナリとソースコードをまとめた物はこちらへ。

 ROFS 形式ですが、ファイルの先頭から 0x1800 バイトを消して .iso などの拡張子に変更した後、 daemon tools などで mount すると普通にファイルを見ることが出来ます。調べたりしたの意味ないですな。
 先頭から 0x1800 が拡張されたヘッダで、あとは ISO9660 なファイルシステムで保存されているようです。
 下のメモはむなしいのでそのまま残しておきます…。


ROFS (CVM) file format memo

B = byte(8bit)
W = word(16bit)
L = long word(32bit)

--
0x0000-0xb7ff
 - ROFS version
 - GAME TITLE, PUBLISHER_NAME etc.

offset 0xb800
1W	: first data length = A

1L	: start address START(little endian)
1L	: start address START(big endian)
1L	: FAT SIZE (little endian)
1L	: FAT SIZE (big endian)
1B	: 0x68 ??
1B	: data length X
XB	: ?? (date?)
4B	: 01 00 00 01 ??
2B	: 01 00 or 01 01
		01 01 だったら FAT SIZE 関連のデータは終了?
1W	: next data length = B

 ここまでのすべてのbyte数が A になる。次に B Byte を読み込んで
処理を行う。
 ただし、次に読み込む data に関しては A と全く同じ内容になって
いるので、B の data に関しての意味は良く分からない。確認用?

--
offset 0xb800 + A + B
1W	: data length C

:DATA FIRST
1L	: start address START(little endian)
1L	: start address START(big endian)
		FILE start address = 0x800*START + 0x1800
1L	: file size (little endian)
1L	: file size (big endian)

1B	: 0x68 ??
1B	: data length Y
YB	: ?? (date?)
4B	: 01 00 00 01 ??
1B	: file name length Z
ZB	: file name
2B	: 3B 31 (flag?)

0 fill が行われる

last 1W	: 次の data の data length D
		0x0000 の場合、次のデータの長さは合わせ込み(?)されたところにある。
		0x00 以外のデータが出てくるまで探す必要がある。

 ここまでのすべての byte 数が C になる。次に D Byte を読み込んで
処理を行う。ただし、合わせ込み(?)が行われた場合は data length は
合わなくなる。

 あとは DATA FIRST に戻って FAT SIZE + 0x1800 まで処理を繰り返す。