Выбор режима работы - функция 00h 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Выбор режима работы - функция 00h



(слайд №8)

 

Функция 00h прерывания 10h позволяет задать любой стандартный режим работы видеоадаптера:

 

На входе: AH 00h
  AL Номер устанавливаемого режима работы видеоадаптера, если бит D7 = 1, то при установке режима видеопамять не очищается
На выходе: Не используются

 

Приведем пример выбора режима видеоадаптера:

mov ah, 0

mov al, 3; Выбираем режим номер 3 (16 цветной, текстовый,

int 10h; разрешение 25х80 символов)

 

Информацию о видеоадаптерах и его режимах можно найти, например:

1. «Библиотека системного программиста» - Александр Фролов, Григорий Фролов Том 21, Программирование видеоадаптеров, М.: Диалог-МИФИ, 1995, 271 стр.

2. http://www.codenet.ru/cat/Applications/Graphics/VGA-VESA-Standarts/

3. http://www.codenet.ru/progr/video/vbe-svga.php

4. и т.д.

 

Определение текущего режима работы видеоадаптера - функция 0Fh

(слайд №9)

 

Функция позволяет определить номер текущего режима работы видеоадаптера, номер активной страницы и количество символов в строке экрана. Формат функции имеет следующий вид:

 

На входе: AH 0Fh
На выходе: AH Количество символов в строке
  AL Номер текущего режима
  BH Номер активной страницы видеопамяти

 

Бит D7 регистра AL соответствует значению бита D7 регистра AL, использованному при предыдущем выборе режима работы видеоадаптера (см. функцию 0).


Список стандартных режимов работы видеоадаптеров представлен в следующей таблице:

 

Режим работы Тип информации Количество цветов Разрешение, пиксел x пиксел Размер символов, пиксел x пиксел
0, 1 Текстовый цветной   40x25 8x8
0*, 1* Текстовый цветной   40x25 8x14
0+, 1+ Текстовый цветной   40x25 9x16
2, 3 Текстовый цветной   80x25 8x8
2*, 3* Текстовый цветной   80x25 8x14
2+, 3+ Текстовый цветной   80x25 9x16
4, 5 Графический цветной   320x200  
  Графический цветной   640x200  
  Текстовый монохромный   80x25 9x14
7+ Текстовый монохромный   80x25 9x16
8, 9, 0Ah Используются видеоадаптерами компьютера PC jr, и в настоящее время интереса не представляют
0Bh, 0Ch Зарезервировано
0Dh Графический цветной   320x200  
0Eh Графический цветной   640x200  
0Fh Графический монохромный   640x350  
10h Графический цветной   640x350  
11h Графический цветной   640x480  
12h Графический цветной   640x480  
13h Графический цветной   320x200  

 

Приведем список режимов работы видеоадаптеров, соответствующих стандарту VESA:

(слайд №10)

 

Режим работы Тип информации Количество цветов Разрешение, пиксел x пиксел Размер символов, пиксел x пиксел
100h Графический цветной   640x400  
101h Графический цветной   640x480 8х16
102h Графический цветной   800x600 8х8
103h Графический цветной   800x600 8х8
104h Графический цветной   1024x768  
105h Графический цветной   1024x768 8х16
106h Графический цветной   1280x1024  
107h Графический цветной   1280x1024  
108h Текстовый цветной   80x60  
109h Текстовый цветной   132x25 9х16
10Ah Текстовый цветной   132x43 9х9
10Bh Текстовый цветной   132x50  
10Ch Текстовый цветной   132x60  
10Dh Графический цветной   320x200  
10Eh Графический цветной   320x200  
10Fh Графический цветной   320x200  
110h Графический цветной   640x480  
111h Графический цветной   640x480  
112h Графический цветной   640x480  
113h Графический цветной   800x600  
114h Графический цветной   800x600  
115h Графический цветной   800x600  
116h Графический цветной   1024x768  
117h Графический цветной   1024x768  
118h Графический цветной   1024x768  
119h Графический цветной   1024x768  
11Ah Графический цветной   1280x1024  

Int 11h - Конфигурация оборудования

Для варианта №11, Лабораторной работы №2 - Определить и вывести на экран список оборудования (BIOS 11h).

(слайд №11-12)

 

Вход: нет

Выход: AX =конфигурация оборудования

Описание: Возвращает в AX конфигурацию оборудования ПЭВМ.

Примечания:

1. Это слово хранится в области данных BIOS по адресу 00410h.

2. На IBM PC, XT и PCjr биты 2-3 содержат объем ОЗУ на системной плате в блоках по 16К (например, 00=16К, 11=64К).

3. Бит 2 не используется на PC, XT, AT и PC Convertible. На XT-286 и PS/2 он указывает на наличие устройства графического ввода (pointing device).

4. Бит 12 всегда установлен в 1 на PCjr.

5. Бит 13 указывает наличие встроенного модема на PC Convertible, последовательного принтера на PCjr и зарезервирован на остальных ПЭВМ.

6. Если DIP-переключатели в PC и XT выставлены неверно, то BIOS не определит наличие сопроцессора. Для проверки того, имеет ли ЭВМ сопроцессор, лучше всего выполнить его команду и проанализировать результат.

7. Для определения числа жестких дисков используйте Int 13h, функцию 08h.

 

Приведем назначение отдельных битов слова конфигурации:

Биты Значение
0 1 - система содержит НМД;0 - система не содержит НМД. (Для варианта №1, Лабораторной работы №2 - Определить наличие и тип установленного в системе накопителя на жестких магнитных дисках (НЖМД).)
1 1 - установлен арифметический сопроцессор;0 - арифметический сопроцессор не установлен.
2-3 Объем основной памяти, установленной на материнской плате:Биты: 3 2 0 1 - 16К; 1 0 - 32К; 1 1 - 64К и более. (Для варианта №2, Лабораторной работы №2 - Определить объем установленной оперативной памяти и ее тип.)
4-5 Тип дисплейного контроллера и его режим:Биты: 5 4 0 0 - не используется или EGA; 0 1 - CGA, EGA, VGA в режиме 40x25; 1 0 - CGA, EGA, VGA в режиме 80x25; 1 1 - монохромный контроллер. (Для варианта №12, Лабораторной работы №2 - Определить режим видеоадаптера (текстовый, графический, разрешение) (BIOS 10h).
6-7 Количество установленных НГМД:Биты: 7 6 0 0 - установлен 1 НГМД; 0 1 - установлено 2 НГМД; 1 0 - установлено 3 НГМД; 1 1 - установлено 4 НГМД. (Для варианта №8, Лабораторной работы №2 - Определить количество и тип установленных накопителей на гибких магнитных дисках (НГМД).)
8 1 - используется контроллер прямого доступа к памяти;0 - контроллер прямого доступа к памяти не используется.
9-11 Количество установленных портов последовательной передачи данных RS232S:000 - нет портов;001 - используется один порт;111 - используется 7 портов. (Для варианта №4, Лабораторной работы №2 - Определить количество установленных последовательных и параллельных портов.)
12 1 - используется игровой адаптер (джойстик);0 - игровой адаптер не используется.
13 1 - установлен последовательный принтер (только для PC Jr).
14-15 Количество установленных принтеров:00 - нет принтеров;01 - используется 1 принтер;10 - используется 2 принтера;11 - используется 3 принтера. (Для варианта №4, Лабораторной работы №2 - Определить количество установленных последовательных и параллельных портов.)

 

Пример:

(слайд №13-14)

 

// =====================================================

// Получение информации о конфигурации компьютера при помощи BIOS

// =====================================================

#include <stdio.h>

#include <conio.h>

#include <memory.h>

#include <dos.h>

// Битовые поля слова конфигурации

typedef struct _HDWCFG

{

unsigned HddPresent: 1; // 0

unsigned NpuPresent: 1; // 1

unsigned AmountOfRAM: 2; // 2-3

unsigned VideoMode: 2; // 4-5

unsigned NumberOfFdd: 2; // 6-7

unsigned DmaPresent: 1; // 8

unsigned NumberOfCom: 3; // 9-11

unsigned GamePresent: 1; // 12

unsigned JrComPresent: 1; // 13

unsigned NumberOfLpt: 2; // 14-15

} HDWCFG;

int main(void)

{

union REGS rg;

HDWCFG HdwCfg;

unsigned uword;

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

rg.h.ah = 0x0;

int86(0x11, &rg, &rg);

// Получаем слово конфигурации и сохраняем его в структуре HdwCfg

uword = (unsigned int)rg.x.ax;

memcpy(&HdwCfg, &uword, 2);

// Выводим на экран конфигурацию компьютера printf("\n\nConfiguration word: %04.4X", HdwCfg);

if(HdwCfg.HddPresent)

printf("\nHDD present");

if(HdwCfg.NpuPresent)

printf("\nNPU present");

printf("\nRAM banks: %d", HdwCfg.AmountOfRAM);

printf("\nVideo Mode: %d", HdwCfg.VideoMode);

printf("\nNubber of FDD: %d", HdwCfg.NumberOfFdd + 1);

if(HdwCfg.DmaPresent)

printf("\nDMA present");

printf("\nNubber of COM ports: %d", HdwCfg.NumberOfCom);

if(HdwCfg.GamePresent)

printf("\nGame adapter present");

if(HdwCfg.JrComPresent)

printf("\nPCjr Com present");

printf("\nNumber of LPT ports: %d", HdwCfg.NumberOfLpt);

// Вызываем прерывание INT 12h для определения объема основной оперативной памяти

// компьютера

rg.h.ah = 0x0;

int86(0x12, &rg, &rg);

// Выводим объем оперативной памяти

printf("\nRAM istalled: %d Kbytes",

(unsigned int)rg.x.ax);

// Получаем объем расширенной оперативной памяти,

// доступной через прерывание INT 15h

rg.h.ah = 0x88;

int86(0x15, &rg, &rg);

// Выводим объем расширенной оперативной памяти

printf("\nExtended RAM istalled: %ld Kbytes",

(unsigned int)rg.x.ax);

getch();

return 0;

}

 

Int 12h - Размер ОЗУ

Для варианта №2, Лабораторной работы №2 - Определить объем установленной оперативной памяти и ее тип.

(слайд №15)

 

Существуют 3-и типа оперативной памяти:

  • основная;
  • расширенная;
  • дополнительная.

 

Объем основной памяти определяется прерыванием BIOS INT12h.

Вход: нет

Выход: AX =размер ОЗУ в килобайтах

Описание: Возвращает в AX размер оперативной памяти в Кб (не более 640), определенный в процессе POST анализом DIP-переключателей на PC/XT или содержимого CMOS на AT и PS/2.

Примечания.

1. Это слово хранится в области данных BIOS по адресу 00413h.

2. Для определения размера расширенной памяти используйте Int 15h, функцию 88h. Для определения размера дополнительной памяти используйте Int 67h, функцию 42h.

Анализируя эту величину из AX, программы могут при нехватке памяти либо вывести на экран соответствующее сообщение и отказаться от работы, либо изменить алгоритмы работы, организовав, например, "виртуальную" память на диске или просто записывая в файл промежуточные результаты.

 

Int 15h - Системные утилиты

 

Это прерывание объединяет большую группу функций, не связанных с каким-либо конкретным внешним устройством, например:

88h Получить размер расширенной памяти (AT, XT-286, PS/2)

 

Выход: AX = число непрерывных 1K блоков сверх 1M (1024K)

 

Интерфейс EMS

 

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

Вызывать функции EMS (прерывание 67h) можно, только если в системе присутствует драйвер с именем ЕММХХХХ0.

Для проверки его существования можно, например, вызвать функцию 3Dh (открыть файл или устройство), причем на тот случай, если драйвер EMS отсутствует, а в текущей директории есть файл с именем ЕММХХХХ0, следует дополнительно вызвать функцию IOCTLINT 21h с АХ = 4400h и ВХ = идентификатор файла или устройства, полученный от функции 3Dh. Если значение бита 7 в DX после вызова этой функции 1, то драйвер EMS наверняка присутствует в системе.

 

INT 67h, АН = 42h — Получить объем памяти

 

Ввод: AH = 42h
Вывод: АН = 0 DX = объем EMS-памяти в 16-килобайтных страницах ВХ = объем свободной EMS-памяти в 16-килобайтных страницах

 



Поделиться:


Последнее изменение этой страницы: 2016-04-26; просмотров: 521; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.222.35.77 (0.039 с.)