Page 1 of 1

Floppy

Posted: Wed Jan 04, 2006 5:23 pm
by halyavin
В исходниках visopsys я обнаружил, что проверить не сменилась ли дискета можно с помощью опроса 7 бита порта 0x3F7 (бит 1 - дискета сменилась, 0 - не сменилась), что сделать намного проще чем проверить метку диска. Правда ли это? Если да, то когда сбрасывается этот бит - при перекалибровке или при сбросе контроллера дисковвода?

Правильно ли я понимаю, что лоток cdrom'a открывается только по сигналу ОС (или с согласия ОС), а не сам по себе, не уведомляя (возможно только в случае если диск остановлен) ОС о случившемся?

Не хочется допускать ситуации, когда ОС продолжает дописывать файл... уже на другую дискету...

Posted: Thu Jan 05, 2006 2:53 pm
by Mario79
halyavin
Согласно Кулакову:
"Регистр цифрового ввода (Digital Input Register, сокращенно DIR), расположенный по адресу 3F7h, доступен только для считывания. Старший разряд этого регистра отображает состояние сигнала смены диска, а остальные зарезервированы".
Из этого объяснения нихрена не понятно, ведь это может означать и просто признак наличия дискеты. А вообще то проверять только лишь наличие дискеты неправильно. Так как может быть, что пользователь вынул и вставил ту же самую дискету. Тогда какой смысл обновлять все данные ФАТ, которые в кеше.
Когда изменяется этот бит тоже не понятно, так как нету подробного описания. Кулаков у себя, его не использует.

По этому же адресу располагается и регистр управления конфигурацией, который доступен только на запись. В нем задается скорость передачи данных.

Я при реализации драйвера сделал процедуру, контролирующую устаревание данных. Как только двигатель остановлен, происходит сброс флагов, которые индицируют правильность данных ФАТ в кеше.

Лоток CD открывается и закрывается в 2-х случаях:
1) Пользователь нажал кнопку.
2) Драйвер подал ATAPI команду.

Дописывать файл на другую дискету драйвер уже не будет, произойдет аварийное завершение операции. Смотри код там после каждой команды проверка стоит. А пока ты вынимаешь и вставляешь дискету, обязательно произойдет ошибка.