7

私はBochs2.4.5を使用してブートセクターコードを記述しています。INT13Hを使用してフロッピーからセクターを読み取ります。しかし、セクター数が72を超えると、INT13は失敗することがわかりました。また、戻りコードはAH=1です。以下はコードで、これがINT13です。戻りコードはAH=1です。

INT 13Hが72セクター以上を読み取れないのはなぜですか?

   xorb %ah, %ah
   xorb %dl, %dl
   int $0x13      # reset the floppy

   movw $0x8000, %ax
   movw %ax,%es        
   movw $0, %bx  # ES:BX is the buffer  
   movb $0x02, %ah
   movb $73, %al # how many sectors to read. 72 is ok, but >=73 is wrong.
   movb $0, %ch
   movb $1, %cl
   movb $0, %dh
   movb $0, %dl

   int $0x13

助けてくれてありがとう。

アップデート

Matthew Slatteryの指示に従って、対応するコードを見つけました。私と同じように混乱している他の人のために、ここにリストしました。完全なコードはここにあります

7220       if ((drive > 1) || (head > 1) || (sector == 0) ||
7221           (num_sectors == 0) || (num_sectors > 72)) {
7222         BX_INFO("int13_diskette: read/write/verify: parameter out of range\n");
7223         SET_AH(1);
7224         set_diskette_ret_status(1);
7225         SET_AL(0); // no sectors read
7226         SET_CF(); // error occurred
7227         return;
7228       }
4

3 に答える 3

5

Bochsを使用しているので、答えはBochs BIOSソースにあります。BIOSはセクター数に対して明示的な範囲チェックを実行しており、72より大きい(または0に等しい)場合は拒否します。

于 2010-09-05T12:27:34.767 に答える
2

Matthew Slatteryが指摘した簡単な答えは、これはBochsによって実行される範囲チェックにすぎないということです。これは、2.88Mbフロッピーマルチトラックフロッピーディスクコントローラーの読み取りに基づいており、72セクターに制限されます。


嬉しい答えは、下位互換性のために現在のBIOSは片側読み取りのみをサポートし、1.44Mbフロッピーの場合は最大18セクターであるということです。これは開始セクターに依存するため、実際の最大値はトラックに残っている合計までになります。USBフラッシュドライブからの起動と実行は、OS開発用の廃止されたフロッピーディスクの簡単な代替手段です。dlブートドライブ識別子(レジスタ)によっては、同じBIOSディスク/ディスケット機能を使用できます。

于 2010-09-05T18:47:56.730 に答える
0

MS-DOSでサポートされている標準フロッピーディスクによると、1.44MBフロッピーディスクのトラックあたりのセクター数は18です。18*4 = 72なので、これが手がかりになる可能性があります。BIOSが一度に特定の数を超えるトラックを読み取りたくない可能性があります。

于 2010-09-05T10:58:08.867 に答える