Работа с ATA, данные с порта 1F7h всегда 0

Тема в разделе "WASM.OS.DEVEL", создана пользователем nwin, 6 авг 2011.

  1. nwin

    nwin New Member

    Публикаций:
    0
    Регистрация:
    6 авг 2011
    Сообщения:
    2
    Всем привет. Прошу помощи. Хочу записать данные на HDD (ATA) через порты, но получается, так как данные с порта 1F7h все время 0x00.
    Запускаю под bochs, код (метка: write_MBR_via_port):
    taz.newffr.com/TAZ/_VX_/vxmags/moonbug10/APPENDIX.ADD/MBR/RW_MBR.ASM

    Лог bochs:
    ata0-0: write sectors issued to non-disk

    Хотя если писать на диск с помощью int 13h то все нормально.

    Помогите пожалуйста.
     
  2. shm

    shm New Member

    Публикаций:
    0
    Регистрация:
    18 сен 2010
    Сообщения:
    93
    nwin
    Сперва почитай http://ru.osdev.wikia.com/wiki/HDD + обсуждения.
    На мой взгляд лучше сперва научится считывать данные, а только потом переходить к записи.
    А диск-то вообще сконфигурирован?
    Если ты в int13h указываешь DL=80h это еще не означает, что он находится именно на ata[0; 0], да и вообще может быть не ATA по большому счету.
    Я тебе дал ссылку на статью, там есть пример, от него можешь и отходить. Если предполагается использовать на реальном железе (не древнем) , то стоит учесть, что если писать в стандартные порты 0x1F0/0x170, то очень большая вероятность вообще дисков не увидеть, т. к. надо искать контроллеры на шине PCI и у них получать BAR'ы и только убедившись, что контроллер работает в Legacy стоит писать в стандартные порты (подробности в статье).
     
  3. nwin

    nwin New Member

    Публикаций:
    0
    Регистрация:
    6 авг 2011
    Сообщения:
    2
    shm, спасибо за содержательный ответ. Проблему решил. Тему можно закрывать.