カテゴリー
先日秋葉原を歩いていて面白いものを見つけて思わず買ってしまいました。
それがこれ、「MS-DOS 3.21」のラベルが貼られたROM、しかもHとLが揃っていたのでMS-DOSのROM化ってどうなっているのか見てみたくなったのでした。
まずROMライタでそれぞれ読んで、一つのファイルに結合しました。
objcopyあたりでできるのかもしれませんが、以前やっつけで作ったツールを流用しました。元はMC68000向けだったので最初エンディアン間違えて……
何か特徴的なデータないかなと眺めていて最初に見つけたのは……
12bit×2を3バイトにパックし、それがリトルエンディアンでバイトが入れ替わっているといういやらしい仕様、昔FAT潰したフロッピーを手作業で復旧したときの記憶がよみがえってきます。
0xFF7ということは不良クラスタ、一般的なフロッピーのBPBを流用しつつデータのない領域を飛ばしているのかな。
ディスクイメージごとROM化しているみたいですね。
などと考えながら先へ進むとありました。
MSDOS.SYS, IO.SYSまであるということはRAM領域にロードするわけで、これではPC環境と一緒でただディスクの代わりにROMに書き込まれているだけです。
さすがにROM上での実行は出来ないのかな。
これ以上読んでもあまり面白くはないかも。
ということで最後にリセット処理(FFFF:0000)の部分だけ見てみます。

末尾から16バイトのE9 0D F8のところ、一般的にJMP FARするものと思っていたらここはJMP NEARになってますね。
リセット時はCS=0FFFFHになっているはずでラップアラウンドしてRAM領域を指しそうなんだけどいいのかな? 私が何か勘違いしている? それともこのROMは0C0000H~0FFFFFH以外に配置されていて他にもROMがあったのかな?
関連項目


コメントを追加