Чтение секторов SATA HDD

Тема в разделе "WASM.ASSEMBLER", создана пользователем dess, 14 окт 2008.

  1. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Memphis
    Так ты напиши определение BusMaster делов-то. Поиск по PCI устройства с классом 01 - IDE. И чтение регистра Bar5(считая от 1)
     
  2. Memphis

    Memphis New Member

    Публикаций:
    0
    Регистрация:
    23 окт 2008
    Сообщения:
    104
    Pavia
    Можно, только ленивый я на это. Пусть готовые/годные/рабочие адреса дают. Их же не поиск адресов интересует (речь выше уже была о этом), да и пример будет короче, не надо на другое отвлекаться. Кстати, с твоей ссылки и я начинал (первое знакомство), но там несколько важных моментов не описано.
     
  3. fireman

    fireman New Member

    Публикаций:
    0
    Регистрация:
    16 сен 2008
    Сообщения:
    39
    Memphis
    Будет и на бумаге и под отладчиком и непосредственно поддержка ФАТ16/32 уже написана осталось только с УДМА разобраться.
    Pavia
    Я думал УДМА и ДМА по разному программируются, статью конечно до конца пока еще не дочитал, но слов УДМА пока не встречалось!
     
  4. Memphis

    Memphis New Member

    Публикаций:
    0
    Регистрация:
    23 окт 2008
    Сообщения:
    104
    fireman
    Не, так не пойдет. Эти циферки мне мало чего говорят. Адресов много, и куда конкретно хард включен, неизвестно. Поэтому читай мой диалог с dess, чего я от него требовал. Я хочу, чтобы код сразу заработал, а не гадать на кофейной гуще. А пример я уже принес - как дашь конкретные адреса для харда, я его перекомпилирую. Жду.
     
  5. fireman

    fireman New Member

    Публикаций:
    0
    Регистрация:
    16 сен 2008
    Сообщения:
    39
    Диапазоны:
    8438-843F 8444-8447 8430-8437 8440-8443 8400-840F
    Master
     
  6. fireman

    fireman New Member

    Публикаций:
    0
    Регистрация:
    16 сен 2008
    Сообщения:
    39
    8438 8444+2

    BusMaster 8400-840F
     
  7. Memphis

    Memphis New Member

    Публикаций:
    0
    Регистрация:
    23 окт 2008
    Сообщения:
    104
    fireman
    Код (Text):
    1. codesg        segment
    2.                  assume  cs:codesg, ds:codesg
    3.  
    4.                 .486p
    5.  
    6.                 org     100h
    7.  
    8. start:
    9.                 jmp     short begin
    10. ;------------------------------------------------
    11. base_IO         dw      8438h           ; база ввода/вывода харда
    12. device          db      0A0h            ; это мастер
    13. base_BM         dw      8400h           ; база БусМастера
    14. ;------------------------------------------------
    15. sect            db      0FFh            ; кол-во секторов для трансфера
    16. segm            dw      5678h           ; сегмент ОЗУ для трансфера
    17. offs            dw      9ABCh           ; смещение в сегменте
    18. ;------------------------------------------------
    19.                 align   4
    20.  
    21. base_DTP        dd      ?               ; база дескрипторов всегда выравнена
    22.                 dw      ?
    23.                 dw      ?
    24.  
    25.                 dd      ?
    26.                 dw      ?
    27.                 dw      ?
    28. ;------------------------------------------------
    29.  
    30. begin:
    31.                 push    cs
    32.                 pop     ds                      ;       !!!!!
    33.  
    34.                 smsw    ax
    35.  
    36.                 test    al,1
    37.                 jz      short lab0
    38.  
    39.                 int     3
    40. ;------------------------------------------------
    41. lab0:
    42.                 cmp     sect,0
    43.                 jnz     short lab1
    44.  
    45.                 int     3
    46. ;------------------------------------------------
    47. lab1:
    48.                 test    byte ptr offs,1
    49.                 jz      short lab2
    50.  
    51.                 int     3
    52. ;------------------------------------------------
    53. lab2:
    54.                 mov     al,device
    55.                 or      al,40h
    56.                 mov     dx,base_IO
    57.                 add     dx,6
    58.                 out     dx,al
    59.  
    60.                 inc     dx
    61. lab3:
    62.                 in      al,dx
    63.  
    64.                 test    al,80h
    65.                 jnz     lab3
    66.  
    67.                 mov     al,0
    68.                 sub     dx,6
    69.                 out     dx,al
    70.  
    71.                 inc     dx
    72.                 mov     al,sect
    73.                 out     dx,al
    74.  
    75.                 mov     al,0
    76.                 inc     dx
    77.                 out     dx,al
    78.  
    79.                 inc     dx
    80.                 out     dx,al
    81.  
    82.                 inc     dx
    83.                 out     dx,al
    84.  
    85.                 mov     al,0C8h
    86.                 inc     dx
    87.                 inc     dx
    88.                 out     dx,al
    89.  
    90.                 mov     si,offset base_DTP
    91.  
    92.                 movzx   ebx,segm
    93.                 shl     ebx,4
    94.                 movzx   eax,offs
    95.                 add     ebx,eax
    96.                 mov     [si],ebx
    97.  
    98.                 mov     al,sect
    99.  
    100.                 cmp     al,80h
    101.                 jna     short lab4
    102.  
    103.                 sub     al,80h
    104.                 mov     dword ptr [si+4],0
    105.                 add     ebx,10000h
    106.                 add     si,8
    107.                 mov     [si],ebx
    108. lab4:
    109.                 shl     ax,9
    110.                 mov     [si+4],ax
    111.                 mov     ah,80h
    112.                 mov     [si+6],ax
    113.  
    114.                 mov     al,6
    115.                 mov     dx,base_BM
    116.                 add     dx,2
    117.                 out     dx,al
    118.  
    119.                 xor     eax,eax
    120.                 mov     ax,cs
    121.                 add     dx,2
    122.                 shl     eax,4
    123.                 add     eax,offset base_DTP
    124.                 out     dx,eax
    125.  
    126.                 mov     al,9
    127.                 sub     dx,4
    128.                 out     dx,al
    129.  
    130.                 add     dx,2
    131. lab5:
    132.                 in      al,dx
    133.  
    134.                 test    al,4
    135.                 jz      lab5
    136.  
    137.                 test    al,2
    138.                 jz      short lab6
    139.  
    140.                 int     3
    141. ;------------------------------------------------
    142. lab6:
    143. ;;;             out     dx,al
    144.  
    145.                 mov     al,8
    146.                 sub     dx,2
    147.                 out     dx,al
    148.  
    149.                 mov     dx,base_IO
    150.                 add     dx,7
    151. lab7:
    152.                 in      al,dx
    153.  
    154.                 test    al,1
    155.                 jz      short good
    156.  
    157.                 int     3
    158. ;------------------------------------------------
    159. good:
    160.                 nop
    161.  
    162. ;;;             //////////////////
    163. ;;;             //////////////////
    164. ;;;             //////////////////
    165.  
    166.                 nop
    167.  
    168.                 int     3
    169. ;------------------------------------------------
    170.  
    171. codesg          ends
    172.  
    173.                 end     start
    Бинарник нужен для отладки или сам сделаешь ?
     
  8. fireman

    fireman New Member

    Публикаций:
    0
    Регистрация:
    16 сен 2008
    Сообщения:
    39
    Спасибо за код!
    Бинарик Сам как-нибудь :)
    Где можно слить СОФТ-АЙС не подскажешь меня просто интересует 32-битный отладчик для ДОС? А то ТД не рулит, а Тд32 только под Винду.
     
  9. CrystalIC

    CrystalIC New Member

    Публикаций:
    0
    Регистрация:
    26 июл 2008
    Сообщения:
    500
    fireman
     
  10. fireman

    fireman New Member

    Публикаций:
    0
    Регистрация:
    16 сен 2008
    Сообщения:
    39
    CrystalIC
    Не понял? Я че-то нито написал?
     
  11. Memphis

    Memphis New Member

    Публикаций:
    0
    Регистрация:
    23 окт 2008
    Сообщения:
    104
    fireman
    Не знаю. Я под ДОСом на AFD отлаживаю. Вижу только 16 бит младшие. А старшие по смыслу догадываюсь. Мне этого вполне хватает, особо когда прожки сам для себя пишешь, исходник практически наизусть помнишь, поэтому РОНы особо и не интересуют. Ну а если уж больно припрет, можно DWORD РОНа в стек послать, поглядеть, затем обратно вернуть.
     
  12. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Memphis
    В досе отлаживаю TD нормально рабтает. Регистры 32битные показывает только нужно установить переключатель.
    Насчет меток. Есть удобное средство как @B @f @@ или @lable- с произвольным именем.
     
  13. fireman

    fireman New Member

    Публикаций:
    0
    Регистрация:
    16 сен 2008
    Сообщения:
    39
    Вопрос в тему, ЛБА 48 т.е. Максимальное кол-во секторов 281474976710655, а у АТА 32 бита (60-61 слово), куда делись 16 бит?
     
  14. Rodin

    Rodin New Member

    Публикаций:
    0
    Регистрация:
    30 апр 2007
    Сообщения:
    125
    Если поддерживается LBA48, то максимальное кол-во секторов нужно брать из 100-103 слов
     
  15. Rodin

    Rodin New Member

    Публикаций:
    0
    Регистрация:
    30 апр 2007
    Сообщения:
    125
    Читаю 128 первых секторов через УДМА5 с запрещенными прерываниями и ожиданием обнуления бита AС.

    Заметил такую особенность - если читать в режиме LBA28 (команда 0xC8) - ожидание AC 1-15 милисекунд, если в LBA48 (команда 0x25) - ожидание AC 0.1-0.4 милисекунды. Т.е. LBA48 гораздо быстрее.

    Кто-нить такое замечал или это где-то моя бага?
     
  16. Memphis

    Memphis New Member

    Публикаций:
    0
    Регистрация:
    23 окт 2008
    Сообщения:
    104
    Rodin
    и ожиданием обнуления бита AС - а что за бит такой ? Я их помню только по маскам и расположению, но не по названиям.
     
  17. Rodin

    Rodin New Member

    Публикаций:
    0
    Регистрация:
    30 апр 2007
    Сообщения:
    125
    Признак активности BusMaster - нулевой бит регистра состояния DMA
     
  18. Memphis

    Memphis New Member

    Публикаций:
    0
    Регистрация:
    23 окт 2008
    Сообщения:
    104
    Rodin
    Признак активности BusMaster - нулевой бит регистра состояния DMA - есть такая зверушка.

    Заметил такую особенность - если читать в режиме LBA28 (команда 0xC8) - ожидание AC 1-15 милисекунд, если в LBA48 (команда 0x25) - ожидание AC 0.1-0.4 милисекунды. Т.е. LBA48 гораздо быстрее.

    Кто-нить такое замечал или это где-то моя бага?
    - думаю, твоя. Для начала померь скорость трансфера из буфера для ЛБА28/48. Алгоритм такой - дал команду в хард. Выждал 2...5 секунд (хард гарантированно положит данные в буфер), включил БМ, засек время через rdtsc, опрос бита #4 в статусе БМ, опять засек время через rdtsc, взял разность, посчитал ручками.
     
  19. Rodin

    Rodin New Member

    Публикаций:
    0
    Регистрация:
    30 апр 2007
    Сообщения:
    125
    Вобщем действительно у меня была бага.
     
  20. Rodin

    Rodin New Member

    Публикаций:
    0
    Регистрация:
    30 апр 2007
    Сообщения:
    125
    Провожу крештесты под виндой. При активной работе винта (параллельная дефрагментация или массовое копирование файлов) в 2-3 случаях из 1000 происходит таймаут ожидания канала (я ожидаю обнуления бита занятости уст-ва регистра статуса). Значение регистра статуса при этом 0xC8. Т.е. уст-во занято выполнением команды и уст-во готово к приему команды. Кто-нибудь такое встречал и как на это реагировать?