Непонятки с флоппиком
Что я не так делаю? Или дело в VMWare?
Пытаюсь из защищенного режима включить мотор мастера, засылаю в DOR (порт 0x3fd) код 0x1c, мотор не включается, но генерируется прерывание от флоппика, в котором я читаю его статус MSR = 0x80.
Что я не так делаю? Или дело в VMWare?
В реальном режиме нормально работает? У меня из-под RM проблем с флоппиком не было (я пока ещё не переписал дрова флопика для Protect'а), хотя я тоже написание и отладку веду под VMWare
Пытаюсь из защищенного режима включить мотор мастера, засылаю в DOR (порт 0x3fd) код 0x1c, мотор не включается, но генерируется прерывание от флоппика, в котором я читаю его статус MSR = 0x80.
Что я не так делаю? Или дело в VMWare?
Может надо 3F2h? Я слышал только про такой DOR. А 3FDh - это вроде про последовательный порт.
mov dx,3f2h
mov al,1ch
out dx,al
И мотор включается. В защищенном режиме. IRQ6 вроде не сгенерировался.
mov dx,3f2h
mov al,0ch
out dx,al
И мотор выключается. IRQ6 вроде опять нет.
Main Status Register:
Бит 7(старший): если=1 - контроллер готов к обмену (приему/передаче следующего байта команды/данных/результата)
Бит 6: направление обмена - из контроллера (если 0, то в контроллер)
Бит 5: режим без использования прямого доступа к памяти (0 - использовать DMA)
Бит 4: контроллер занят (пишет/читает)
Бит 3: накопитель 4 в режиме поиска (это вроде для XT)
Бит 2: накопитель 3 в режиме поиска (это вроде для XT)
Бит 1: накопитель 2 в режиме поиска
Бит 0: накопитель 1 в режиме поиска
P.S. А что такое VMWare?
Нашел кое какие описания на http://www.bbs.motion-bg.com/index.php?dir=37
В том числе и про порты.
Правда там могут возникнуть некоторые языковые барьеры при чтении...
Ситуация такая:
Хочу прочитать сектор с дискеты. Запрещаю прерывания. Говорю контроллеру дисковода, чтобы DMA не использовал. Включаю мотор дисковода. Посылаю команду чтения данных (E6h) с нужными параметрами.
Вопрос: когда начинать чтение данных? Как контроллер скажет, что данные пошли? И как скажет, что операция выполнена?
Я в цикле проверяю состояние контроллера MSR (in al,3f4h). Состояние меняется так: сразу после окончания ввода команды MSR=10h, потом 50h, потом 70h. Если дискета не вставлена, то контроллер остается в таком состоянии пока я сам его не прерву. Если дискета вставлена, то MSR продолжает изменяться: -> F0h ->90h ->C0h. И опять ждет, пока я не отреагирую. А как его понять - то ли он данные предлагает взять, то ли уже ошибка из-за того, что я их своевременно не считал.
А если я ему говорю использовать DMA (но DMA не настраиваю, потому что еше не умею), то в аналогичной ситуации MSR меняется так: после команды чтения MSR=10h, через некоторое время 50h, потом (если дискета вставлена) C0h, 90h, C0h.
Я так понимаю, что если ошибок у меня в команде нет, то читать данные можно после какого-то из перечисленных состояний MSR.
Может кто-нибудь прокомментирует, что в данном случае означает каждое из них?
P.S. И можно ли судить о том, что дискета не вставлена в дисковод (или что ее достали во время чтения/записи), как нибудь иначе, нежели по слишком длительному ожиданию данных?