
- •2.2. Структура видеоадаптера.
- •2.3. Графические режимы работы видеоадаптера vga и организация видеопамяти.
- •Линейная организация видеопамяти.
- •Плоскостная организация видеопамяти.
- •2.4. Понятие палитры. Организация палитры ega, vga.
- •2.5. Видеостраницы.
- •2.7. Нестандартные режимы видеоадаптера vga.
- •2.8. Регистры контроллера элт.
- •Регистры синхронизатора.
- •2.10. Формирование изображения.
- •Постановка задачи и задания на лабораторную работу.
- •Задание 1.
- •Задание 2.
- •Приложение.
- •Int 10h ; средствами bios
- •ClearPage(0);
- •ClearPage(1);
- •PutPixel(I,1,I,0);
- •PutPixel(I,1,I,1);
- •DrawPenta(X,y,с,k,0); ; начальный пятиугольник
- •SetPage(Page);
- •DrawPenta(X,y,с,k,Page);
- •SetPage(Page); ; установка активной страницы
- •DrawPenta(...,1-Page); ; стирание предыдущ. Пятиуг.
- •; На скрытой странице, т.Е.
- •; Рисование черным цветом
- •Конец цикла
- •Asm ; возврат в текстовый режим
Какую работу нужно написать?
Приложение.
Ниже приведены примеры задач лабораторной работы по заданиям 1 и 2.
Задание 1. Переместить пятиугольник из верхнего левого в нижний правый угол. При перемещении фигуры увеличивать ее в размерах. Установить нестандартный режим с разрешением 320х200 с использованием 256 цветов. Организовать работу с двумя видеостраницами.
Для выполнения задания требуется уметь реализовывать следующие действия:
-
устанавливать требуемый графический режим,
-
очищать видеостраницу,
-
переключать видеостраницы ( устанавливать заданную в качестве активной),
-
отображать пиксел с координатами (x,y) заданного цвета на требуемой видеостранице,
-
рисовать отрезок прямой по заданным координатам точек начала и конца отрезка заданным цветом на требуемой видеостранице,
-
рисовать пятиугольник от начальной точки с координатами (x,y) заданным цветом и коэффициентом масштабирования на требуемой видеостранице.
Отображение пиксела.
Н
procedure
PutPixel(x,y,c,p:word); begin asm mov
bx,x ;
вычисление
смещения по формуле mov
ax,y ; у
* 80 + ( x >> 2 ) mov
dx,80 ; для режима 320х200х256 mul
dx mov
cx,bx shr
bx,1 shr
bx,1 add
bx,ax ;
BX=смещение mov
ax,102h ; запись в порт 3C4h
индекса
2 and
cl,3 ; в порт данных 3C5h
— значения shl
ah,cl ; 1 <<
( x & 3 ) mov
dx,3C4h out
dx,ax ;
вывод 2-х байтов mov
ax,p ;
вычисление
сегмента видеостраницы mov
dx,400h ; AX=A000h+400h*p mul
dx add
ax,0A000h mov
es,ax mov
al,byte ptr c ;
отображение
пиксела цветом c mov
es:[bx],al end; end;
Рисование линии.
Линия строится согласно алгоритму Брезенхема для прямых по пикселам (см. “Методические указания к лабораторной работе №1”). В этом алгоритме для отображения пиксела следует вызывать выше описанную процедуру PutPixel. Рисование линии можно оформить в виде процедуры с прототипом DrawLine( x, y, x1, y1, c, p:word).
Рисование пятиугольника.
Рисование пятиугольника от начальной точки с координатами (x,y) с коэффициентом k цветом с на странице р можно оформить в виде процедуры DrawPenta(x, y, c, p:word; k:real), пятикратно вызывающую процедуру DrawLine с необходимыми параметрами. Коэффициент k используется для расчета второй точки при вызове процедуры DrawLine.
Установка режима 320х200х256.
Н
procedure
Set320x200x256; begin asm mov
ax,13h ; установка стандартного режима
13h mov
dx,03C4h mov
ax,0604h ; программирование регистров
out
dx,ax ; синхронизатора,
mov
dx,03D4h ; контроллера ЭЛТ mov
ax,0014h out
dx,ax mov
ax,0E317h out
dx,ax end; end;
Int 10h ; средствами bios
Замечание. Для записи содержимого младшей половины регистра AX в порт, адрес которого находится в регистре DX, и старшей половины регистра AX в порт, адрес которого вычисляется как адрес, записанный в DX + 1, можно воспользоваться одной командой out dx, ax вместо традиционного двукратного вызова out dx, ah.
Переключение видеостраниц.
Ниже приводится процедура, устанавливающая страницу page видимой.
procedure
SetPage(page:word); var
addr:word; begin
addr:=page*$4000; while
(port[$3DA] and $8) = 0 do; ;ожидание окончания
asm
;обратного
верт. хода луча mov
dx,3D4h mov
al,0Ch out
dx,al ; программирование регистров inc
dx mov
ax,addr mov
cl,8 shr
ax,cl out
dx,al dec
dx mov
al,0Dh out
dx,al inc
dx mov
ax,addr and
ax,0Fh out
dx,al end; end;
Очистка видеостраницы.
procedure
ClearPage(page:word); begin asm mov
dx,3C4h mov
al,2 out
dx,al inc
dx mov
al,0Fh out
dx,al mov
ax,page mov
bx,400h mul
bx add
ax,0A000h mov
es,ax xor
ax,ax xor
di,di mov
cx,4000h cld rep
stosb end; end;