Assembler - язык неограниченных возможностей


Работа с VGA-режимами


Функция 00 прерывания BIOS 10h позволяет переключаться не только в текстовые режимы, использовавшиеся в предыдущих главах, но и в некоторые графические. Эти видеорежимы стандартны и поддерживаются всеми видеоадаптерами (начиная с VGA), см. табл. 19.


Таблица 19. Основные графические режимы VGA


Номер режима Разрешение Число цветов
11h 640x480 2
12h 640x480 16
13h 320x200 256


Существуют еще несколько видеорежимов, использовавшихся более старыми видеоадаптерами CGA и EGA (с номерами от 4 до 10h); их список приведен в приложении 2.

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


INТ 10h АН = 0Ch — Вывести точку на экран

Ввод: АН = 0Ch
ВН = номер видеостраницы (игнорируется для режима 13h, поддерживающего только одну страницу)
DX = номер строки
СХ = номер столбца
AL = номер цвета (для режимов 10h и llh, если старший бит 1, номер цвета точки на экране будет результатом операции «исключающее ИЛИ»)
Вывод: Никакого


INТ 10h AH = 0Dh — Считать точку с экрана

Ввод: АН = 0Dh
ВН = номер видеостраницы (игнорируется для режима 13h, поддерживающего только одну страницу)
DX = номер строки
СХ = номер столбца
Вывод: AL = номер цвета


Попробуем тем не менее воспользоваться средствами BIOS для вывода на экран. Следующая программа переводит экран в графический режим 13h (320x200), заселяет его точками случайным образом, после чего эти точки эволюционируют согласно законам алгоритма «Жизнь»: если у точки меньше двух или больше трех соседей, она погибает, а если у пустой позиции есть три соседа, в ней появляется новая точка. Мы будем использовать очень простой, но неоптимальный способ реализации этого алгоритма: сначала для каждой точки вычисляется число соседей, затем каждая точка преобразуется в соответствии с полученным числом соседей, и затем каждая точка выводится на экран.

; lifebios.asm ; Игра "Жизнь" на поле 320x200, использующая вывод на экран средствами BIOS .model small .stack 100h ; явное задание стека - для ЕХЕ-программ .code .186 ; для команд shl al,4 и shr al,4 start: push FAR_BSS ; сегментный адрес буфера в DS pop ds




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