






                          Набор программ
             для определения аппаратной конфигурации
                   IBM-совместимого компьютера
                             (detect)










                                Автор: Шапорев Т.В.












                           Москва 1990

                            Аннотация

     В этом документе описана библиотека программ для языка про-
граммирования C для определения наиболее типичных черт IBM-совмес-
тимого компьютера.
     Большинство из использованных в описываемых программах алго-
ритмов упоминались в той или иной мере в различных изданиях и -
как оказалось впоследствии - вполне тривиальны. Однако память о
собственных мучениях заставила меня оформить их в общедоступном
виде.
     Вместе с библиотекой поставляется демонстрационная программа.

     1. Назначение

     Библитека предназначена для использования с языком прогамми-
рования C и позволяет определить такие наиболее типичные черты
IBM-совместимого компьютера, как
 - тип центрального процессора;
 - наличие и тип арифметического сопроцессора;
 - типы основного и альтернативного видеоадаптеров и дисплеев;
 - количество основной (convential - до 1MB) оперативной памяти.

     2. Применение

     Библиотека может использоваться на любом IBM-совместимом
компьютере под управлением любой версии MS-DOS с любой моделью
памяти любого C-компилятора.
     Необходимые для работы библиотеки описания содержатся в файле
detect.h
     Для сборки программ в "крошечной" (tiny), "малой" (small) или
"компактной" (compact) моделях памяти необходимо использовать
"ближний" (near) вариант библиотеки, собранный в файле
consolen.lib
     Для сборки программ в "средней" (medium), "большой" (large)
или "гигантской" (huge) моделях памяти небходимо использовать
"дальний" (far) вариант библиотеки, собранный в файле
consolef.lib
     Некоторые конкретные ограничения реализации указаны в описа-
ниях отдельных функций.

     3. Описания функций

        int CPUname(void);

     Определение типа центрального процессора, работающего как в
основном (real), так и привилегированном (protected) режиме.
     Функция без аргументов, возвращаемые значения характеризуют
тип центрального процессора:
 0  - Intel 8086
 1  - Intel 8088
 2  - Intel 80186
 3  - Intel 80188
 4  - Intel 80286
 6  - Intel 80386
 7  - Intel 80386SX
128 - NEC V20
129 - NEC V30
     Для процессора, работающего в привилегтрованном режиме, будет
возвращено отрицательное число, обратное данному.
     Примечание: функция обнаруживает не все существующие типы
процессоров, в любом случае будет возвращено одно из вышеописанных
значений.

        int MathUnit(void);

     Определение наличия и типа математического сопроцесора.
     Функция без аргументов, возвращаемые значения характеризуют
тип арифметического сопроцессора:
0 - сопроцессор не опознан (отсутствует)
1 - Intel 8087
2 - Intel 80287
3 - Intel 80387
4 - Weitek 1167
5 - Weitek 1167 and 80387

        int MathHere(void)

     Определение наличия математического сопроцесора.
     Функция без аргументов, возвращает ненулевое значение, если
найден арифметическоий сопроцессор.
     Для обнаружения сопроцессора делается попытка работы с ним,
таким образом, результат не зависит от установки переключателей на
системной плате (в старых PC).

	struct	VideoIdent
	{
		unsigned char VideoSubsystem;
	        unsigned char VideoDisplay;
	};
	void VideoID ( struct VideoIdent far * );

     Определение типа основного и альтернативного видеоадаптера и
связанного с ним монитора.
     Функция получает в качестве аргумента адрес массива из двух
структур типа VideoIdent и заполняет их описаниями основной
(primary) и альтернативной видеосистем. Начальный (нулевой) эле-
мент массива соответствует основной видеосистеме.
     Возможные значения поля VideoSubsystem:
 0  - адаптер не опознан (возможно, отсутствует)
 1  - IBM Monochrome Display Adapter or compatible
 2  - IBM Color Graphics Adapter or compatible
 3  - IBM Enhanced Graphics Adapter or compatible
 4  - IBM Professional Graphics Adapter or compatible
 5  - IBM Multi-Color Graphics Adapter or compatible
 6  - IBM Video Graphics Adapter or compatible
128 - Hercules Graphics Card
129 - Hercules Plus Graphics Card
130 - Hercules InColor Graphics Card
224 - Liquid Color Display system
240 - Tandy 1000 and above
     Возможные значения поля VideoDisplay:
 0 - монитор не опознан (возможно, отсутствует)
 1 - MDA-совместимый монохромный монитор
 2 - CGA-совместимый цветной монитор
 3 - EGA-совместимый цветной монитор
 4 - PGA-совместимый цветной монитор
 5 - PS/2-совместимый монохромный монитор
 6 - PS/2-совместимый цветной монитор
     Примечание: для видосистем типа LCD и Tandy поле VideoDisplay
заполняется произвольным кодом.

        int FindCMem(void);
     Определение количества основной (convential - до 1MB) опера-
тивной памяти.
     Без аргументов, возвращает количество памяти в килобайтах.
     Данная функция определяет количество памяти путем активного
поиска и поэтому в ряде случаев надежнее 12h прерывания BIOS.
     Считается, что минимальная порция оперативной памяти 16K.

        int conflags(void);

     Запрос и BIOS некоторых архитектурных особенностей компьюте-
ра (см. ниже).
     Без аргументов, возвращает -1, если BIOS не поддерживает дан-
ную функцию, иначе отдельные разряды результата устанавливаются в
единицу, если
разряд 7 (80h) - 3 канал DMA используется BIOS жесткого диска;
       6 (40h) - присутствует второй контроллер прервываний (8259)
       5 (20h) - присутствует таймер
       4 (10h) - 09h прерывание вызывает прерывание 15h, 4 функцию
       3 (08h) - wait for external event supported (?)
       2 (04h) - существует дополнительная область данных BIOS
       1 (02h) - используется шина типа Micro Channel

     5. Демонстрационная программа

     Вместе с библитотекой поставляется программа detect (исходные
тескты в файлах detect.c и console.c, выполняемый код в файле
detect.com), которая запрашивает и выводит подробную информацию об
архитектурных особенностях компьютера.
     Программа собирается Turbo C 2.0.
