Extended Int 13h

Тема в разделе "WASM.ASSEMBLER", создана пользователем _First_, 5 фев 2006.

  1. _First_

    _First_ New Member

    Публикаций:
    0
    Регистрация:
    6 янв 2006
    Сообщения:
    7
    Здравствуйте. Вот узнал о возможности с помощью 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 канала с параметрами, указанными выше, прилагается в аттаче.

    [​IMG] _700679943__no_work.asm
     
  2. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Вот что я прочитал по ссылке

    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). Почитай внимательно, какие ограничения на параметры существуют.
     
  3. _First_

    _First_ New Member

    Публикаций:
    0
    Регистрация:
    6 янв 2006
    Сообщения:
    7
    В документе на 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-битные расширения для функций расширенного чтения и записи).