Операционная система: MS-DOS 3+
Среда: Borland TASM (Assembler)
Введение
Для работы с графическим адаптером, в BIOS
используется прерывание INT 10h. Оно
позволяет
устанавливать графические режимы работы,
выводить символы и графику. В данной статье будет
описано
использование INT 10h для рисования
графики.
Выбор графического режима
Функция 0 (ah=0) прерывания INT 10h
устанавливает видео режим, который был указан в регистре
AL.
В этой таблице приведены значения только для
графических режимов, текстовые будут описаны в
другой
статье.
Графические режимы
Режим |
Разрешение |
Количество цветов |
06h |
640x200 |
2 |
0Dh |
320x200 |
16 |
0Eh |
640x200 |
16 |
0Fh |
640x350 |
2 |
10h |
640x350 |
16 |
11h |
640x480 |
2 |
12h |
640x480 |
16 |
13h |
320x200 |
256 |
6Ah * |
800x600 |
16 |
* Режим 6Ah утвержден VESA, но его поддерживают не
все видео адаптеры
Существуют также дополнительные режимы, которые
используются для SVGA и XGA
адаптеров. Они
устанавливаются вызовом VESA BIOS Extension (AX=4F02h
INT 10h).
Рисование точки
Для рисования точки необходимо вызвать
функцию 0Ch прерывания INT 10h. Цвет
помещается в AL,
видеостраница в BH, координатаY в DX,
а координатаX в CX. Следующая процедура
рисует точку с
цветом 1, в X=50 и Y=20.
mov ah,0Ch ; функция рисования точки mov al,1 ; цвет точки mov bh,0 ; видео страница mov cx,50 ; координата X mov dx,20 ; координата Y int 10h ; вызов прерывания BIOS
Функция 0Ch исполняется очень
медленно, особенно при рисовании множества
точек. Настоящие
графические программы (такие как игры)
записывают непосредственно в видеопамять, после
того, как
они рассчитали цвет и расположение точки. Но в
нашем случае INT 10h является
промежуточным шагом
на пути к настоящему программированию графики.
Вы можете прочесть о прямом выводе графики
в видео режиме 13h (320x200x256) в этой статье.
Пример программы
Эта программа переключается в графический режим,
рисует длинную линию, используя функцию 0Сh,
затем ожидает нажатия клавиши и возвращается в
прежний режим. Если вы запустите этот пример из
DOS окна под Windows, то при
переключении графического режима, ваше окно
перейдет в полно
экранный режим. Когда программа закончит свое
выполнение, нажмите ALT+ENTER для перехода в
оконный режим.
.model small .stack 100h .386
Mode_6 = 6 ; 640 X 200, 2 colors Mode_13 = 0Dh ; 320 X 200, 16 colors Mode_14 = 0Eh ; 640 X 200, 16 colors Mode_15 = 0Fh ; 640 X 350, 2 colors Mode_16 = 10h ; 640 X 350, 16 colors Mode_17 = 11h ; 640 X 480, 2 colors Mode_18 = 12h ; 640 X 480, 16 colors Mode_19 = 13h ; 320 X 200, 256 colors Mode_6A = 6Ah ; 800 X 600, 16 colors
.data saveMode db ; Сохранить текущий видео режим currentX dw 100 ; координата X currentY dw 100 ; координата Y color db 1 ; номер цвета
; В 2 цветном режиме 1 = белый, в 16 цветном 1 = синий
.code
main proc mov ax,@data mov ds,ax
; Получить текущий видео режим
mov ah,0Fh int 10h mov saveMode,al
; Переключиться в графический режим
mov ah,0 ; установка видео режима mov al,Mode_17 ; номер режима int 10h
; Рисование прямой линии
LineLength = 100
mov dx,currentY mov cx,LineLength ; счетчик цикла
L1: push cx mov ah,0Ch ; рисование точки mov al,color ; цвет точки mov bh,0 ; видео страница mov cx,currentX int 10h inc currentX ;inc color ; используйте для разноцветной линии pop cx
loop L1
; Ожидаем нажатия клавиши
mov ah,0 int 16h
; Возврат в прежний видео режим
mov ah,0 ; установить видео режим mov al,saveMode ; сохраненный видео режим int 10h
; Выход из программы
mov ax,4c00h int 21h
main endp
end main
Заключение
Исходный код данного примера для Turbo Assembler можно скачать здесь.
источник: sizov.boom.ru
|