Здравствуйте. Вот узнал о возможности с помощью BIOS [функции 42h (расширенное чтение) и 43h (расширенная запись) прерывания Int 13h]записывать/считывать большие блоки данных (DMA или PIO, LBA) в режиме линейной адресации памяти (адрес буфера лежит в пределах от 0 до 4 Гб). Вычитал о подобной возможности в книге Кулакова "Программирование на аппаратном уровне", 2-е издание, специальный справочник, 2003. Есть некоторые заявления, что драйвера защищенного режима Win 95/98 работают именно через "дополнительные дисковые функции". Написал на скорую руку программку для считывания 1 Мб (2048 секторов) диска, начиная с 0 сектора, в оперативную память (нач. адрес - 1Мб+64кб). Запустил под чистым DOS. Функция чтения выполнилась с ошибкой (09h, по спецификации [Working Draft, T13 D1386, Revision 2, October 21, 1999, Information Technology - BIOS Enhanced Disk Drive Services (EDD)] такого кода ошибки вообще не указано, но в Ralf Brown's Interrupt List нашел описание - data boundary error [attempted DMA across 64K boundary or >80h sectors]) BIOS довольно "свежий" - Award (08/03/04). Пробовал менять параметры пакета дискового адреса - та же ошибка. Если кто знает, в чем причина возникновения ошибки, просьба написать ответ. Исходный код программки для чтения секторов мастер-диска 1 канала с параметрами, указанными выше, прилагается в аттаче. _700679943__no_work.asm
Вот что я прочитал по ссылке http://en.wikipedia.org/wiki/BIOS_call#INT_13h_AH.3D42h:_Extended_Read _Sectors_From_Drive Описание DAP : Disk Address Packet --------------------------------------------- offset size description --------------------------------------------- 00h 1 byte size of DAP = 16 = 10h 01h 1 byte unused, should be zero 02h 1 byte number of sectors to be readed, 0..127 (= 7Fh) 03h 1 byte unused, should be zero 04h..07h 4 bytes segment:offset pointer to the memory buffer to which sectors will be transfered 08h..0Fh 8 bytes absolute number of the start of the sectors to be read (1st sector of drive has number 0) Чуствуешь разницу со своими параметрами (размер DAP там 16, у тебя 32, число секторов для чтения тоже другое = максимум 127, у тебя 255). Почитай внимательно, какие ограничения на параметры существуют.
В документе на 9 странице указан формат Device Address Packet. Я использовал расширенный набор параметров, т.к. для меня в первую очередь была важна возможность работать в режиме линейной адресации памяти. Но я разобрался со сложившейся ситуацией. Данный стандарт описывает версию 3.0 расширенного программного интерфейса Int 13h (страница 13 в вышеуказанном документе - "The version of the extensions shall be 30h. This indicates that the INT 13h extensions are compliant with this standard."), а мой БИОС, как выяснилось, поддерживает только версию 2.1. Для меня не совсем ясно, почему стандарт 2000 года не поддерживается в BIOS 2003 года производства (а в частности, 64-битные расширения для функций расширенного чтения и записи).