こんにちは、I.Tak.です。
ひさしぶりなのでさっきはシグネチャとかを忘れましたX-(
さてl2d3がなぜうまく伸長できなかったか、ですが、ずばり
「bim2bin2はmaxdisが効かないのではないか?!」
と疑っています。以下に説明します。
これはchuck0t.sys(chuck0t.exeをリロケートしてヘッダを
取ったもの)のダンプです。^と~で下線を引いたところに注目し
てください。
+0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +a +b +c +d +e +f
00000d30: 36 c7 05 f8 ff ff ff cf 03 00 00 36 a3 fc ff ff
-------------------------------------^^^^^^^^^^^
00008d30: 31 c0 bd 80 df ff ff 48 b9 1c 00 00 00 89 4d fc
-------------------------------------~~~~~~~~~~~
00008ef0: 00 d4 ff ff 1f b9 00 00 04 00 e8 37 16 00 00 36
-------------------------------------------------^^^^^^^^
00008f00: a3 74 df ff ff 89 c2 b9 00 10 00 00 e8 22 17 00
----------^^
そしてこちらは, それをmaxdis:32kで圧縮したのち, IPLで伸長し
た結果をダンプしたものです(FMTOWNSのダンプ機能が役立った)。
上のダンプと比較して, ~で強調したところがコピーされている
のが分かると思います。
00008ef0: 00 d4 ff ff 1f b9 00 00 04 00 e8 37 16 1c 00 00
-------------------------------------------------~~~~~~~~
00008f00: 00 74 df ff ff 89 c2 b9 00 10 00 00 e8 22 17 1c
----------~~
これは状況証拠でしかありませんが, 0x0d39のデータをコピーする
べきなのに0x8d39のデータをコピーしてしまったように見えます。
それで、距離が15ビットで表現できる範囲を超えてしまったので
はないかと思い、48KBまで距離をとれる伸長ルーチンを作って試し
ました。起動はできましたが、どこか壊れているようでアプリを
起動することはできませんでした。
l2d4はもちろんそんなことはなくて、うまく展開・起動できます。
以上の結果から、「bim2bin2は怪しい。それもl2d3がmaxdisを
理解していないらしい」と考えられます。どうでしょう?
念のため、これはl2d3/l2d4/osaskcmp/exeリロケーションなど
盛り込んだIPLです。l2d3ルーチンに間違いは無いと思います。
http://user.ecc.u-tokyo.ac.jp/~g240845/osask/lzh/bootsec3.lzh
I.Tak. <g240845 !Atmark! mail.ecc.u-tokyo.ac.jp>
http://user.ecc.u-tokyo.ac.jp/~g240845/