Функция _bios_disk
Стандартная библиотека Borland C++ содержит специальную функцию _bios_disk , облегчающую работу с диском на уровне BIOS. Эта функция описана в файле bios.h следующим образом:
unsigned _bios_disk (unsigned funct, struct diskinfo_t *diskinfo);
Параметр funct задает выполняемую функцию. Параметр diskinfo - это указатель на структуру, описывающую необходимые параметры, такие как номер дорожки, номер головки и т. д.:
struct diskinfo_t { unsigned drive; // номер дисковода unsigned head; // номер головки unsigned track; // номер дорожки unsigned sector; // номер первого сектора unsigned nsectors; // количество секторов void far *buffer; // адрес буфера в памяти };
Перед использованием функции _bios_disk программа должна заполнить поля структуры diskinfo и указать соответствующий параметр funct.
Файл bios.h содержит константы для возможных значений параметра funct:
Значение | Описание |
_DISK_FORMAT | Форматирование дорожки, описанной в структуре diskinfo.Программа должна задать для этой функции в структуре diskinfo номер НГМД или НМД, для которого выполняется форматирование, номер головки и номер форматируемой дорожки. Кроме этого, программа должна установить указатель buffer на подготовленный буфер формата. Следует также выполнить все подготовительные действия, связанные с настройкой контроллера НГМД и таблицы параметров дискеты |
_DISK_READ | Чтение одного или нескольких секторов.Эта функция аналогична функции 2 прерывания INT13h . Если при чтении секторов произошла ошибка, ее код будет возвращен функцией _bios_disk в старшем байте. При успешном завершении операции функция возвращает 0 |
_DISK_WRITE | Запись одного или нескольких секторов на диск. Функция аналогична предыдущей, за исключением того, что данные из буфера записываются на диск |
_DISK_RESET | Сброс контроллера НГМД. Для этой функции не надо заполнять структуру diskinfo, так как ее содержимое игнорируется. Сброс контроллера выполняют после того, как произошла ошибка при выполнении другой операции, например, чтения или записи. После сброса можно попробовать повторить выполнение операции |
_DISK_STATUS | Получение состояния НГМД после выполнения последней операции.Старший байт возвращаемого функцией _bios_disk значения содержит байт состояния |
_DISK_VERIFY | Проверка диска.С помощью этой функции можно убедиться в том, что указанные секторы существуют и могут быть прочитаны в память. Дополнительно выполняется проверка CRC . Функция проверки диска использует все поля структуры diskinfo. При ошибке старшие 8 бит возвращаемого функцией значения содержат байт состояния. |