Операционная система MS DOS (том 2)


Характеристики дисководов - часть 4


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

Приведем функцию, которая заполнит структуру типа DISK_CONFIG, описанную в файле sysp.h,

информацией о конфигурации дисковой подсистемы.

Структура DISK_CONFIG содержит поля:

n_floppy количество установленных в системе НГМД.
n_hard количество установленных жестких НМД.
t_floppy1 тип первого НГМД.
t_floppy2 тип второго НГМД.
t_hard1 тип первого НМД.
t_hard2 тип второго НМД.

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

#include <stdio.h> #include <dos.h> #include "sysp.h"

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 = FP_MAKE(0xf000,0xfffe); pc_type = *modptr;

// В зависимости от типа компьютера выбираем // способ определения конфигурации дисковой // подсистемы

switch (pc_type) {

case 0xfc:

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

// Считываем байт конфигурации

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;

}

// Определяем конфигурацию жестких дисков




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