BIOS INT 13H с AH = 2 может считывать только 72 сектора каждый раз. Зачем? - PullRequest
7 голосов
/ 05 сентября 2010

Я использую Bochs 2.4.5 для написания кода загрузочного сектора.Я использую INT 13H для чтения секторов с дискеты.Но я обнаружил, что если счетчик секторов читать> 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

Спасибо за любую помощь.

Обновление

Следуя инструкции Мэтью Слэттери , я нашел соответствующий код.Я перечислил это здесь для других, столь же смущенных как я.Полный код находится здесь .

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       }

Ответы [ 3 ]

5 голосов
/ 05 сентября 2010

Вы используете Bochs, поэтому ответ можно найти в источнике BIOS Bochs : BIOS выполняет явную проверку диапазона числа секторов и отклоняет его, если оно больше 72(или равно 0).

2 голосов
/ 05 сентября 2010

Простой ответ, указанный Мэтью Слаттери , заключается в том, что это всего лишь проверка диапазона, выполняемая Бохсом. Это основано на считывании контроллера флоппи-дисковода на 2,88 МБ, который будет ограничен 72 секторами.


Удачный ответ заключается в том, что текущий BIOS из-за обратной совместимости поддерживает только одностороннее чтение, что для 1.44Mb дискеты составляет максимум 18 секторов. Это зависит от стартового сектора, так что фактический максимум будет соответствовать сумме, оставшейся на трассе. Загрузка и запуск с флэш-накопителя USB - простая альтернатива устаревшей дискете для os dev. В зависимости от идентификатора загрузочного диска (регистр dl) могут использоваться одни и те же функции BIOS / дискеты.

0 голосов
/ 05 сентября 2010

Согласно Стандартным дискетам, поддерживаемым MS-DOS , число секторов на дорожку на дискете 1,44 МБ составляет 18. Поскольку 18 * 4 = 72, это может быть подсказкой.Возможно, BIOS не хочет читать больше определенного количества треков одновременно.

...