MS-DOS для программиста


Программа DISKINFO - часть 2


// Получаем адрес таблицы параметров дискеты dpt_ptr = get_dpt();

printf("\n" "\nКод размера сектора дискеты: %d" "\nЗаполняющий символ для форматирования: %2.2X", dpt_ptr->sec_size, dpt_ptr->fill_char);

// Получаем адреса первой и второй таблицы // параметров жесткого диска hdpt1_ptr = get_hdp1(); hdpt2_ptr = get_hdp2();

printf("\n" "\nПараметры первого НМД:" "\n Количество дорожек: %d" "\n Количество головок: %d" "\n" "\nПараметры второго диска:" "\n Количество дорожек: %d" "\n Количество головок: %d", hdpt1_ptr->max_cyl, hdpt1_ptr->max_head, hdpt2_ptr->max_cyl, hdpt2_ptr->max_head); }

/** * disk_cfg * * Определить конфигурацию дисковой подсистемы * * Функция заполняет структуру, описывающую * конфигурацию дисковой подсистемы: * * typedef struct _DISK_CONFIG_ * { * int n_floppy; * int n_hard; * int t_floppy1; * int t_floppy2; * int t_hard1; * int t_hard2; * } DISK_CONFIG; * **/

void disk_cfg(DISK_CONFIG* cfg) { char unsigned far *modptr; char unsigned pc_type; char cfg_byte; int cfg_word;

union REGS inregs, outregs;

// Определяем тип компьютера modptr = (char unsigned far*)MK_FP(0xf000, 0xfffe); pc_type = *modptr;

// В зависимости от типа компьютера выбираем // способ определения конфигурации дисковой // подсистемы switch (pc_type) { case 0xfc:

// Для IBM AT считываем конфигурацию дисковой // подсистемы из CMOS-памяти

// Считываем байт конфигурации outp(0x70, 0x14); cfg_byte = inp(0x71);

// Определяем количество установленных НГМД if((cfg_byte & 1) == 0) { // Если младший бит байта конфигурации равен 0, // НГМД отсутствуют cfg->n_floppy = 0; cfg->t_floppy1 = 0; cfg->t_floppy2 = 0; } else { // Определяем количество установленных НГМД cfg->n_floppy = ((cfg_byte >> 6) & 3) + 1;

// Определяем типы НГМД outp(0x70, 0x10); cfg_byte = inp(0x71);

cfg->t_floppy2 = cfg_byte & 0xf; cfg->t_floppy1 = (cfg_byte >> 4) & 0xf; }




- Начало -  - Назад -  - Вперед -