biosdisk

 Функция            Дисковые функции BIOS.

 Синтаксис          #include
                    int biosdisk(int cmd, int drive, int head,
                     int track, int sector, int nsects, void * buffer);

 Файл, содержащий   bios.h
 прототип

 Описание           biosdisk использует  прерывание 0x13 для того,чтобы
                    передать выполнение дисковых операций непосредст-
                    венно системе BIOS.

                    drive представляет собой число, которое задает
                    используемый дисковод: 0 для 1-го устройства гиб-
                    ких дисков, 1 для 2-го устройства гибких дисков,
                    3 для 3-го устройства и т.д. Для жестких дисковых
                    устройств значение drive 0x80 задает первый дис-
                    ковод, значение 0x81 - второй дисковод, значение
                    0x82 - третий и т.д.

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

                    cmd обозначает выполняемую операцию. В зависимос-
                    ти от значения cmd остальные аргументы могут тре-
                    боваться или нет.

                    Далее перечислены возможные значения cmd для
                    компьютеров IBM PC, XT, AT, PS/2 или совместимых
                    с ними.

                    0   Аппаратный сброс дискового контроллера. Все
                        остальные параметры игнорируются.
                    1   Возвращает статус последней дисковой операции.
                        Все остальные параметры игнорируются.
                    2   Считывает в память один или несколько секторов
                        диска. Начальный сектор, подлежащий считыванию,
                        задается аргументами head, track и sector. Чис-
                        ло  считываемых  секторов  задается  аргументом
                        nsects. Данные считываются в buffer по 512 бай-
                        тов на сектор.
                    3   Записывает на диск из памяти один  или  более
                        дисковых секторов. Начальный сектор задается
                        аргументами head, track и sector. Число сек-
                        торов определяется аргументом nsects. Данные
                        записываются на диск из buffer по 512 байт на
                        сектор.
                    4   Производит верификацию одного или более секто-
                        ров. Начальный сектор определяется  аргументами
                        head, track и sector. Количество секторов зада-
                        ется в nsects.
                    5   Форматирует дорожку. Дорожка определяется
                        аргументами head и track. buffer является ад-
                        ресным указателем таблицы дескрипторов секто-
                        ров, которые будут записываться на указанной
                        дорожке. Обратитесь к документу "Техническое
                        справочное руководство по IBM PC", в котором
                        подробно описана данная таблица и операция
                        форматирования.

                    Только для компьютеров типа XT, AT, PS/2 и сов-
                    местимых с ними разрешены следующие значения ар-
                    гумента cmd:

                    6   Форматирует дорожку и устанавливает флаги пло-
                        хих секторов.
                    7   Форматирует диск, начиная с заданной дорожки.
                    8   Возвращает параметры текущего дисковода. Дан-
                        ная информация записывается в buffer в первые
                        четыре байта.
                    9   Задает характеристики пары устройств.
                   10   Производит удлиненное считывание, когда чи-
                        тается 512 байтов плюс 4 дополнительных байта
                        на каждый сектор.
                   11   Выполняет удлиненную запись, когда записывается
                        512 байтов плюс 4 дополнительных байта на
                        каждый сектор.
                   12   Выполняет дисковый  поиск.
                   13   Альтернативный сброс диска.
                   14   Считывает буфер сектора.
                   15   Записывает буфер сектора.
                   16   Проверяет готовность заданного диска.
                   17   Рекалибрует диск.
                   18   Производит диагностику  контроллера RAM.
                   19   Производит диагностику дисковода.
                   20   Производит внутреннюю диагностику контроллера.

                    Примечание. biosdisk работает ниже файловой сис-
                    темы - на произвольных секторах, поэтому может
                    разрушить содержимое файлов и директорий на жест-
                    ком диске.

 Возвращаемое       biosdisk возвращает байт состояния, состоя-
 значение           щий из следующих битов:

                    0x00   успешная операция.
                    0x01   неверная команда.
                    0x02   адресный маркер не найден.
                    0x03   попытка записи на диск, защищенный от записи.
                    0x04   сектор не найден.
                    0x05   неудачный сброс (для жесткого диска).
                    0x06   диск изменился после последней операции.
                    0x07   сбой параметра активности дисковода.
                    0x08   конфликт при работе DMA.
                    0x09   попытка обращения к DMA за границей 64К.
                    0x0A   обнаружен дефектный сектор.
                    0x0B   обнаружена дефектная дорожка.
                    0x0C   неподдерживаемая дорожка.
                    0x10   ошибка CRC/ECC при чтении диска.
                    0x11   ошибка CRC/ECC при корректировке данных.
                    0x20   сбой при работе контроллера.
                    0x40   сбой при операции поиска.
                    0x80   узел подсоединения не отвечает.
                    0xAA   устройство не готово (только для жесткого
                           диска).
                    0xBB   произошла нераспознаваемая ошибка (только
                           для жесткого диска).
                    0xCC   произошел сбой при записи.
                    0xE0   ошибка статуса.
                    0xFF   сбой операции распознавания.

                    Заметим, что код 0x11 не является ошибкой, посколь-
                    ку данные являются корректными. Возвращаемое значе-
                    ние выдается в любом случае, чтобы дать возможность
                    прикладной программе выработать решение.

 Переносимость      Данная функция поддерживается только на компью-
                    терах IBM PC и совместимых с ними.

 Смотрите также     absread abswrite

 Пример:

 #include
 #include
 int main(void)
 {
    #define CMD     2 /* команда чтения сектора */
    #define DRIVE   0 /* номер дисковода для A: */
    #define HEAD    0 /* номер головки */
    #define TRACK   1 /* номер дорожки */
    #define SECT    1 /* номер секторов */
    #define NSECT   1 /* число секторов */

    int result;
    char buffer[512];
    printf("Попытка чтения дисковода A:\n");
    result = biosdisk(CMD,DRIVE,HEAD,TRACK,SECT,NSECT,buffer);
    if(result==0)
       printf("Успешное чтение диска в дисководе A:");
    else
       printf("Попытка чтения дисковода A: неудача\n");
    return 0;
 }