Flying Cow
Меню сайта
Вход:
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Категории раздела
Cтатьи наших пользователей [0]
Движки и конструкторы [35]
Наши игры [2]
Полезные статьи общего назначения [3]
Главная » Статьи » Полезные статьи общего назначения

Рисование графики используя INT 10h

Операционная система: 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
Категория: Полезные статьи общего назначения | Добавил: robesh (21.08.2010)
Просмотров: 2842 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск
Наш опрос
Оцените мой сайт
Всего ответов: 52
Друзья

Браузерные Игры

Сообщество КОМА

Copyright Flying Cow © 2024Сайт создан в системе uCoz