Russian Belarusian English German Japanese Ukrainian

Rashka.studio - игры и приложения для Android! Заходи, ждём тебя =)

Biosdisk

CuBook05

Функция

Дисковые функции BIOS.
 
Синтаксис

#include<bios.h>
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», в котором подробно описана данная таблица и операция форматирования.
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 сбой операции распознавания.
 
Переносимость

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

#include<bios.h>
#include<stdio.h>

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;
}
Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter

Добавить комментарий