HariboteのISOイメージを解析してみる

hrb.osask.jp から、CD-ROM用イメージをダウンロードしてきた。
とりあえず、この中身を少し眺めてみる。


まず、17セクタ目の、Boot Record Volume Descriptor の内容...
と思ったけれど、いきなり、基本ボリューム記述子(PVD)を引いてしまった模様。


う〜ん。


あぁ、セクタは、ゼロオリジンだから、17セクタ目は、18セクタ目って事か?
って事は、セクタ17って書かないと、正確な表現にならないのか...
混乱するなぁ〜。


ついでに復習を兼ねて...
ISO 9660 では、先頭16セクタ分はシステムエリアとして予約済み。
将来的に、ここが利用される事があるのかどうか分からないけど、基本未使用みたい。
で、セクタ16から、ボリューム記述子が並ぶ事になります。
各記述子は、1セクタ毎に配置されて、先頭バイトが種別を示しているようです。
並び順は、特に決まっていないようだけど、まず基本ボリューム記述子が来るらしい。
最後は、ボリューム記述子集合終端子で終わると。


まず、セクタ16

0000 01 43 44 30 30 31 01 00-57 69 6E 33 32 20 20 20 .CD001..Win32   
0010 20 20 20 20 20 20 20 20-20 20 20 20 20 20 20 20                 
0020 20 20 20 20 20 20 20 20-4F 53 41 5F 48 41 52 49         OSA_HARI
0030 5F 4F 53 43 30 37 30 36-20 20 20 20 20 20 20 20 _OSC0706        
0040 20 20 20 20 20 20 20 20-00 00 00 00 00 00 00 00         ........
0050 12 78 00 00 00 00 78 12-00 00 00 00 00 00 00 00 .x....x.........

基本ボリューム記述子

先頭1バイトが、ボリューム記述子種別で、1は PVD ですね。


次に、セクタ17

0000 00 43 44 30 30 31 01 45-4C 20 54 4F 52 49 54 4F .CD001.EL TORITO
0010 20 53 50 45 43 49 46 49-43 41 54 49 4F 4E 00 00  SPECIFICATION..
0020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0040 00 00 00 00 00 00 00 F0-01 00 00 00 00 00 00 00 ................
0050 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

Boot Record Volume Descriptor

ここが、Boot Record Volume Descriptor になります。
BRVDは、セクタ17に配置するように決められているみたいですね。
ボリューム記述子種別は、0になります。


次に、セクタ18

0000 02 43 44 30 30 31 01 00-00 57 00 69 00 6E 00 33 .CD001...W.i.n.3
0010 00 32 00 20 00 20 00 20-00 20 00 20 00 20 00 20 .2. . . . . . . 
0020 00 20 00 20 00 20 00 20-00 4F 00 53 00 41 00 5F . . . . .O.S.A._
0030 00 48 00 41 00 52 00 49-00 5F 00 4F 00 53 00 43 .H.A.R.I._.O.S.C
0040 00 30 00 37 00 30 00 36-00 00 00 00 00 00 00 00 .0.7.0.6........
0050 12 78 00 00 00 00 78 12-25 2F 45 00 00 00 00 00 .x....x.%/E.....

副ボリューム記述子


次に、セクタ19

0000 FF 43 44 30 30 31 01 00-00 00 00 00 00 00 00 00 .CD001..........
0010 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0040 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0050 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

ボリューム記述子集合終端子


ざっと、こんな感じみたいです。
で、BRVD 内のブートカタログへのポインタ値を見ると、F0 01 00 00 となっています。
個人的に、リトルエンディアンは苦手で、毎回、戸惑うわけですが、
要するに、これは、00 00 01 F0 って事で、496になります。
随分と先に、ブートカタログが存在するようですね。


で、セクタ496は、どうなっているかと言うと...

0000 01 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0010 00 00 00 00 00 00 00 00-00 00 00 00 AA 55 55 AA .............UU.
0020 88 00 00 00 00 00 04 00-08 02 00 00 00 00 00 00 ................
0030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0040 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0050 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

ボリューム記述子集合終端子

まず、先頭32バイトが、Validation Entry になるようですね。
先頭1バイトはヘッダIDで、必ず1。
次の1バイトがプラットフォームIDで、0は80x86と。
最終2バイトはキーバイトで、有名な 55 AA です。
その前にある2バイトは、チェックサムです。
続く32バイトが、Entry になると。
先頭1バイトが88は、ブート可能を示します。
次の1バイトがブートメディアタイプで、
ここでは、0で、エミュレーション無しになってますね。
はりぼては、ロード処理を自力でやりますよ... って事かな?
ロードセグメントはデフォルト、システムタイプは0、
で、読み込むセクタ数が4(この場合は、CD-ROMのセクタで良いのかな?2K*4Sec=8Kになる?)、
ブートイメージへのポインタが 00 00 02 08 となっていると。
16進数の0208は、10進数の520って事で、そこに実体があるはず!!


で、セクタ520を見てみると...

0000 EB 7E 00 00 00 00 00 00-10 00 00 00 00 00 00 00 .~..............
0010 42 43 44 57 42 43 44 57-42 43 44 57 42 43 44 57 BCDWBCDWBCDWBCDW
0020 42 43 44 57 42 43 44 57-42 43 44 57 42 43 44 57 BCDWBCDWBCDWBCDW
0030 42 43 44 57 42 43 44 57-42 43 44 57 42 43 44 57 BCDWBCDWBCDWBCDW
0040 0D 0A 42 6F 6F 74 61 62-6C 65 20 43 44 20 57 69 ..Bootable CD Wi
0050 7A 61 72 64 20 76 32 2E-30 61 31 20 43 6F 70 79 zard v2.0a1 Copy

とりあえず、先頭は、ジャンプ命令のように見える。
けど... はてな
はりぼてのローダーとは違うようだなぁ...


BCDWを検索してみると、Bootable CD Wizard なるソフトが引っ掛かった。
どうやら、はりぼては、これを使ってブータブルCDイメージを作成している模様。
そうか、良く考えたら、FDイメージ用のローダは、そのままCDには使えないのか...
でも、FDエミュレーション機能とかあるから、それをうまく使えないのかな?
とりあえず、ここまで。