программирование IDE

Тема в разделе "WASM.ELECTRONICS", создана пользователем h1t0n, 16 сен 2005.

  1. h1t0n

    h1t0n New Member

    Публикаций:
    0
    Регистрация:
    16 сен 2005
    Сообщения:
    23
    Помогите пожалуйста:
    Код (Text):
    1.  
    2. ; Çàïðåùàþ ïðåðûâàíèÿ îò óñòðîéñòâà
    3. mov DX,03F6h
    4. mov AL,00000010b
    5. out DX,AL
    6.  
    7. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    8. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    9.  
    10. ; Æäó êîãäà óñòðîéñòâî îñâîáîäèòüñÿ
    11. mov DX,01F7h
    12. __test_BSY:
    13. in AL,DX
    14. and AL,10000000b
    15. jnz __test_BSY
    16.  
    17. ; Âûáèðàþ óñòðîéñòâî
    18. mov DX,01F6h
    19. mov AL,11100000b
    20. out DX,AL
    21.  
    22. ; Æäó êîãäà óñòðîéñòâî áóäåò ãîòîâî ê ïðèåìó êîìàíäû
    23. mov DX,01F7h
    24. __test_BSY_DRDY:
    25. in AL,DX
    26. and AL,10000000b
    27. jnz __test_BSY_DRDY
    28. and AL,01000000b
    29. jz __test_BSY_DRDY
    30.  
    31. ; Çàïèñûâàþ êîä êîìàíäû â ðåãèñòð
    32. mov DX,01F7h
    33. mov AL,0ECh
    34. out DX,AL
    35.  
    36. ; Æäó êîãäà êîìàíäà áóäåò âûïîëíåíà è óñòðîéñòâî áóäåò ãîòîâî ê îáìåíó äàííûìè
    37. mov DX,01F7h
    38. __wait1:
    39. in AL,DX
    40. and AL,10000000b
    41. jnz __wait1
    42. and AL,00001000b
    43. jz __wait1
    44.  
    45. ; ×èòàþ äàííûå
    46. cld
    47. mov AX,0B800h
    48. mov DI,AX
    49. mov DX,01F0h
    50. rep outsw
    51.  
    52. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    53. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    54.  
    55. ; Ðàçðåøàþ ïðåðûâàíèÿ îò óñòðîéñòâà
    56. mov DX,03F6h
    57. mov AL,00000000b
    58. out DX,AL
    59.  
    60. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    61. jmp $
    62. times 512-$ db 00h
    63.  


    Я перечитал кучу документаций, статей и пр. Переписал килобайты кода, а всё равно ничего не работает. Объясните в чем ошибка?
     
  2. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    t13.org
     
  3. VaStaNi

    VaStaNi Member

    Публикаций:
    0
    Регистрация:
    1 июн 2004
    Сообщения:
    203
    Адрес:
    Ukraine
    1. отсутствует величина длины для REP OUTSW ! Не вижу чему CX равен!? CX=0x100!

    2. Для ATAPI команда другая, не 0xEC, это если ты CDROM будешь терзать по IDE!...

    3. в 0x1F6 засылается СООТВЕТСТВУЮЩИЙ подключенному приводу КОД! Т.е. разберись на тот ли девайс "метишь"?

    Успехов!
     
  4. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    h1t0n

    Где загрузка регистра ES и почему outsw, а не insw?
     
  5. VaStaNi

    VaStaNi Member

    Публикаций:
    0
    Регистрация:
    1 июн 2004
    Сообщения:
    203
    Адрес:
    Ukraine
    Black_mirror - совершенно прав!!!

    Очевидно чел читал моловато и совершенно не использовал трассировщик, а зря! Уже давно бы практически понял "картину" и причину...

    Еще можно в сборную солянку советов добавить cli...sti для куска кода, что собственно читает,хотя это некритично по моему. Думаю ещё, что попытка использовать это:

    mov AX,0B800h

    mov DI,AX

    говорит скорее всего о том, что хочется выводить дамп на экран, но.... но если это так, то 0B800h - это ведь СЕГМЕНТ видеобуфера, а не смещение!

    Причесав концовку, за тебя h1t0n и надеясь, что ЭТО поможет тебе разрубить узлы, ОКОНЧАТЕЛЬНО все понять и двигаться тебе дальше, лицезреем такой блок PIO чтения:

    ....

    ....

    ; PIO чтение сектора (512 байт)IDE устройства

    mov DX,01F0h

    mov AX,0B800h

    mov ES,AX

    xor DI,DI ; = 0 - начало видеобуфера!

    mov CX, 100h ; вычитать 256 WORD`ов!

    cld

    cli ; выключим прерывания для надежности

    rep insw ; струя 512 байт сливается в [ES:lol: I]...

    sti ; включить прерывания!

    ........

    ........