読み込み失敗時は、ディスクシステムのリセットをするのがポイント。
最大リトライ回数の定義に、.setディレクティブを使ってみた。
変更部分は以下の通り。
// プログラム .set MAX_RETRY, 5 # 再読み込み最大回数 entry: movw $0, %ax movw %ax, %ss movw $0x7C00, %sp movw %ax, %ds // 2セクタから1セクタ分読み込む movw $0x0820, %ax movw %ax, %es movb $0, %ch # シリンダ0 movb $0, %dh # ヘッド0 movb $2, %cl # セクタ2 movw $0, %si # 失敗回数 retry: movb $0x02, %ah # Read sector(s) into memory movb $1, %al # 1セクタ読み込む movw $0, %bx # ES:BX Data buffer(0x8200に読み込む) movb $0x00, %dl # Aドライブ int $0x13 # BIOS interrupt call jnc fin # 読み込みOK でfinへ add $1, %si cmp MAX_RETRY, %si jae error # SI >= MAX_RETRY でerrorへ movb $0x00, %ah # Reset disk system movb $0x00, %dl # Aドライブ int $0x13 jmp retry fin: hlt jmp fin一応、うまく動作しているようだ。
0 件のコメント:
コメントを投稿