Разработка динамических сайтов
SEO услуги
Управление контекстной рекламой

Вход на хостинг

Имя пользователя:*

Пароль пользователя:*

IT-новости

20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла

Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......

подробнее

30.07.2015 Ищем уникальный контент для сайта

Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......

подробнее

11.05.2015 Распространённые ошибки разработчиков сайтов

Не секрет, что в сети Интернет насчитывается миллионы сайтов, и каждый день появляются тысячси новых......

подробнее

                 :"=a"(a)

                 :"0"(a));

           buff1[i++] = a;

    } while(hd_data_request());

Дождавшись освобождения устройства, при помощи функции check_error() читаем регистр состояния. При этом мы сбрасываем прерывание от устройства и проверяем, не произошла ли ошибка. Затем считываем из регистра данных значение. Считывание производим до тех пор, пока установлен бит DRQ. Как только будет передан последний блок данных, устройство этот бит сбросит. Считанную информацию сохраним в буфере buff1.

Копируем полученную информацию из буфера buff1 в структуру struct hdreg hd:

    memcpy(hd,(struct hdreg *)buff1,0x100);

Очищаем буфер и выходим:

    memset(buff1,0,0x100);

    return;

}

Следующая функция осуществляет чтение сектора в режиме адресации CHS.

void read_hd_sector_chs(unsigned short N, unsigned short s_sect, unsigned short s_cyl, unsigned short head, unsigned short *buff)

{

 

    int i = 0;

    unsigned short a;

 

    if((!N) || (!s_sect)) return;

 

Аргументы функции:

n  N – число секторов для чтения;

n  s_sect – стартовый сектор;

n  s_cyl – стартовый цилиндр;

n  head – номер головки;

n  buff – буфер, куда все помещается.

Ожидаем освобождения устройства:

    hd_busy();

В регистр номера устройства и головки заносим соответствующие данные. Бит 6 сброшен, что указывает на режим адресации CHS:

    OUT_P_B(0xA0|head,HD_CURRENT);

Ждем готовность устройства к приему команд:

    hd_ready();

В блок командных регистров заносим требуемые параметры:

    OUT_P_B(N,HD_NSECTOR);

    OUT_P_B(s_sect,HD_SECTOR);

    OUT_P_B(s_cyl,HD_LCYL);

    OUT_P_B((s_cyl >> 8),HD_HCYL);

В регистр команд записываем код команды чтения секторов с повторами – 0x20. Данная команда выполняется в режиме PIO:

    OUT_P_B(0x20,HD_STATUS);

Считываем блок данных в буфер buff:

    do {

           hd_busy();

           check_error();


Предыдущая страницаОглавлениеСледующая страница
 
[001] [002] [003] [004] [005] [006] [007] [008] [009] [010] [011] [012] [013] [014] [015] [016] [017] [018] [019] [020]
[021] [022] [023] [024] [025] [026] [027] [028] [029] [030] [031] [032] [033] [034] [035] [036] [037] [038] [039] [040]
[041] [042] [043] [044] [045] [046] [047] [048] [049] [050] [051] [052] [053] [054] [055] [056] [057] [058] [059] [060]
[061] [062] [063] [064] [065] [066] [067] [068] [069] [070] [071] [072] [073] [074] [075] [076] [077] [078] [079] [080]
[081] [082] [083] [084] [085] [086] [087] [088] [089] [090] [091] [092] [093] [094] [095] [096] [097] [098] [099] [100]
[101] [102] [103] [104] [105] [106] [107] [108] [109] [110] [111] [112] [113] [114] [115] [116] [117] [118] [119] [120]
[121] [122] [123] [124] [125] [126] [127] [128] [129] [130] [131] [132] [133] [134] [135] [136] [137] [138] [139] [140]
[141] [142] [143] [144] [145] [146] [147] [148] [149] [150] [151] [152] [153]

+7 (831) 413-63-27
ООО Дельта-Технология ©2007 - 2023 год
Нижний Новгород, ул. Дальняя, 17А.
Rambler's Top100