X68000のFDのIPLの処理内容

HAS.XやHIOCS.Xなどの作者であるYuNKさんによる、ブートセクタの解析ツイートをまとめさせていただきました。
4
yunk @yunkya2

#X68000 のブート処理、IPL ROMがディスク先頭のブートセクタを$002000~に読んで実行することは書籍に書いてあるが、そのブートセクタの処理内容がどうなっているのかを調べてみた

2022-12-11 13:21:49
yunk @yunkya2

まずは手元の起動可能なFDイメージからブートセクタを抜き出す。XDFファイルなら dd if=イメージファイル of=bootsect.r bs=1024 count=1 DIMファイルの場合は先頭256バイトにヘッダがあるのでこれもスキップ

2022-12-11 13:21:50
yunk @yunkya2

ファイルをエミュレータ上に持ち込んで、おもむろにdis.xで逆アセンブル dis bootsect.r bootsect.s 拡張子を.Rにしたのはヘッダなしのベタイメージをそのまま解釈してもらうため。もうこれだけでいい感じの逆アセンブルリストが。dis.x様様。

2022-12-11 13:21:50
yunk @yunkya2

処理の流れはこんな感じ: 1. IOCS _BOOTINFで起動ドライブの情報を取得 2. FATのルートディレクトリの先頭セクタをIOCS _B_READで読む 3. 1セクタに含まれる32個分のディレクトリエントリから、human.sysというファイルを探す(case insensitive)

2022-12-11 13:21:50
yunk @yunkya2

4. 見つかったディレクトリエントリ内の、ファイルの先頭クラスタ番号を得てセクタ番号に変換 5. ファイル先頭の1セクタを_B_READで読む 6. ヘッダがX68kの実行ファイルであることを確認(先頭2バイトが'HU') 7. ロード先固定形式(Zファイル)でロードアドレスが$006800であることを確認

2022-12-11 13:21:51
yunk @yunkya2

8. 実行開始アドレス、text,data,bss領域のサイズを取得 9. IOCS _B_READで$0067c0~にtext+data+$40バイトを読む(実行ファイルヘッダも込みで読む) 10. bss領域を0でクリア 11. ヘッダに書かれている実行開始アドレスへジャンプ …以上

2022-12-11 13:21:51
yunk @yunkya2

つまりブートセクタから起動可能なイメージの条件は ・ルートディレクトリの先頭から32個以内のエントリにあるhuman.sysというファイルで、内容が連続したセクタに置かれている ・ロード先固定形式でロードアドレスが$006800 なのでSYS.Xでファイル転送すると前者を満たしてくれるはず

2022-12-11 13:21:51
yunk @yunkya2

久しぶりにエミュレータを引っ張り出して、20年ぶりくらいに68000アセンブラを読んだ気がする 昔はこんなことばっかりやってたなあw

2022-12-11 13:21:51

 
 
 

関連まとめ

まとめ dis.xの思い出 X68000用の逆アセンブラ dis.x についてのツイートをまとめました. 5958 pv 42 4 users
まとめ X68000用ゲーム「ヴァリストレスナルト」SRAMに侵入してFDに感染する謎のIPL 続報: https://togetter.com/li/1850750 「このIPLはウイルス感染のおそれがあります.」の表示 ↓ BOOT MENU(起動デバイスを選択可能にするSRAM常駐ツール)の、フロッピーディスクのIPL内にディスク書き込みかSRAM書き込み許可と思われるコードが含まれないか調べる機能。 IPLCHK.r ↓ 未知のIPLかどうかCRCで比較するツール(SRAM常駐可) 同様のツールに電脳倶楽部に掲載されたIPLCHK.Xというものもあり。 8774 pv 9 1 user
まとめ X68000用ゲーム「ヴァリストレスナルト」IPLについて販売元からの発表 ※注意※ 対象のディスクから起動するとSRAMに感染してしまうので、ゲームディスクから起動して確認しようとしてはいけません! システムディスク等から起動してゲームディスクのIPLやHUMAN.SYSの内容を確認する、などしましょう。 X68000用ゲーム「ヴァリストレスナルト」SRAMに侵入してFDに感染する謎のIPL https://togetter.com/li/1844403 3551 pv 7