Реферат: Дополнительные дисковые утилиты
Требуется задать имя диска и тип формата. Все аналогично утилите “Restore Boot Record” (см. выше).
Технология: задается загрузочная запись, она анализируется и записывается на дискету. Затем, используя полученную информацию, очищаются FAT и корневой каталог. Если все пройдет успешно, то вернется сообщение “All right!”, иначе будет выдано сообщение об ошибке.
Save User Boot Record
Сохраняет в файл загрузочную запись с дискеты, для использования предыдущими утилитами.
Требуется задать имя диска и имя файла.
Технология: с помощью абсолютного чтения с диска (прерывание 25h) считывается нулевой сектор дискеты, и эти 512 байт записываются в заданный файл. Если все пройдет успешно, то вернется сообщение “All right!”, иначе будет выдано сообщение об ошибке.
ОПЦИИ:
Directories
Можно задать каталог по умолчанию для файлов форматов, сохраняемых утилитой “Restore Boot Record”. Этот каталог будет присутствовать в строке для ввода имени файла пользовательского формата.
Опции можно сохранять для дальнейшего использования.
ПРОБЛЕМЫ: РЕШЕННЫЕ И НЕРЕШЕННЫЕ.
Само собой, при написании любой программы возникают проблемы большие и поменьше, кое-какие оказываются полностью разрешенными, некоторые удается ловко обойти, ну и остается малая часть нерешенных или оставленных до лучших времен.
И вот я хочу поделиться своими проблемами и способами их решения:
· Оказывается, что под Windows прерывание 13h делает не то же, что под DOS (я так и не выяснил, что именно), поэтому долгое время не работало определение типов дисководов. Обошел я это дело путем считывания данных дисководов прямо из CMOS, используя порты 70h и 71h.
· Форматов дискет существует просто громадное множество (я могу перечислить около двадцати - это более-менее нужные), поэтому встал вопрос - как их всех поддерживать? Пришлось оставить на долю пользователя копировать нужные форматы в файл с помощью прилагаемой утилиты “Save User Boot Record”. Да и тех, что поддерживаются, слишком много, чтобы всех их держать в полном виде в памяти (7*512 байт = 3584 байта), поэтому пришлось их проанализировать и оставить только различающиеся байты (15 байт).
Экономия: 3584-(512+7*15) = 2967 байт.
Ну, на этом, пожалуй, и хватит, так как самое основное я уже упомянул, а остальные проблемы не стоит и упоминать (слишком мелкие и давно уже решенные).
Автор выражает благодарность за помощь по подготовке данной статьи своему научному руководителю Вадиму Сергеевичу Рублёву.