| |
BIGLIB |
| большущая библиотека (9812 книг), можно не только прочитать но и скачать бесплатно |
|
| |
ФАНТАСТИКА |
| фентези,
фантастика, фантастические повести |
|
| |
ФИЛОСОФИЯ |
книги, которые заставляют
задуматься над окружающим тебя миром.
|
|
| |
МЕДИЦИНА |
медицинские книги,
методички,
народные лечебники |
|
| |
КУЛИНАРИЯ |
рецепты
тортов, консервирование,
все о спиртных
напитках. |
|
| |
СТИХИ |
| стихи популярных
и не очень авторов |
|
| |
ТВОРЧЕСТВО |
| народное творчество,
стихи, песни и т.д. |
|
| |
ЮМОР |
| анекдоты, приколы,
смешные истории |
|
| |
ЭРОТИКА |
| эротические рассказы,
книги о технике секса,
кама-сутра и др. |
|
|
| |
 |
Графический режим 320 х 200 предоставляет пользователю 8
страниц размером по 8К. Смещение от начала страницы до байта,
содержащего пиксель с координатами (X,Y), равен 40*Y + int(X/8),
а номер соответствующего бита в этом байте равен 7 - (X % 8).
Здесь X - горизонтальная позиция точки (0 - 639), Y - ее
вертикальная позиция (0 - 199).
В графических режимах 640 х 350 имеются две страницы с
адресами A0000h и A8000h соответственно. В остальном этот режим
аналогичен предыдущим.
В качестве примера приведем три подпрограммы работы с
дисплеем EGA в режиме 640 х 200. Если Вы хотите использовать их
в других режимах, достаточно поменять значение константы
PageSize на соответствующее значение.
- 67 -
PageSize equ 4000h ; размер страницы для режима 640 х 200
;ЙННННННННННННННННННННННННННННННННННННННННННН»
;є Подпрограмма очистки экрана. є
;є Вход: CX = номер очищаемой страницы (0-3) є
;ИНННННННННННННННННННННННННННННННННННННННННННј
EGA_Cls proc near
push ax
push bx
push cx
push dx
push es
push di
xor ax,ax ; вычисляем смещение до страницы
mov bx,PageSize
jcxz Page_0
High_Page:
add ax,bx
loop High_Page
Page_0:
mov di,ax ; DI = адрес страницы в видеопамяти
mov ax,0A000h
mov es,ax ; ES:DI = полный адрес страницы
mov ax,0FF08h
mov dx,3CEh ; графический контроллер
out dx,ax ; установить все битовые маски
mov ax,0FF02h
mov dx,3C4h ; блок синхронизации
out dx,ax ; разрешить запись во все плоскости
mov ax,3
mov dx,3CEh ; графический контроллер
out dx,ax ; задать нормальный режим работы
mov cx,PageSize
xor al,al
rep stosb ; обнулить страницу
pop di
pop es
pop dx
pop cx
pop bx
pop ax
ret
EGA_Cls endp
;ЙННННННННННННННННННННННННННННННННННННННННННН»
;є Подпрограмма вывода пикселя на экран. є
;є Вход: AX = цвет пикселя є
;є BX = номер страницы є
;є CX = номер столбца (X) є
;є DX = номер строки (Y) є
;ИНННННННННННННННННННННННННННННННННННННННННННј
Put_Pixel proc near
push ax
- 68 -
push bx
push cx
push dx
push es
push ax
push cx
push dx
mov ax,dx
mov cx,80
mul cx ; AX = 80 * Y
pop dx
pop cx
push cx
shr cx,1
shr cx,1
shr cx,1 ; CX = X / 8
add ax,cx ; AX = 80 * Y + X / 8
mov cx,bx ; номер страницы
mov bx,PageSize
jcxz Page_Done
Next_Page:
add ax,bx ; учтем смещение до страницы
loop Next_Page
Page_Done:
pop cx
mov bx,ax ; BX = адрес байта, содержащего пиксель
mov ax,0A000h
mov es,ax ; ES:BX = полный адрес байта
and cl,7 ; CL = X % 7
mov ah,80h
shr ah,cl ; AH = позиция пикселя в байте
mov dx,3CEh
mov al,8
out dx,ax ; разрешить запись только в этот бит
pop ax
mov ch,al ; цвет пикселя
mov dx,3C4h
mov ax,0FF02h
out dx,ax ; разрешить запись во все плоскости
mov al,es:[bx] ; читаем байт
xor al,al
mov es:[bx],al ; обнуляем пиксель
mov al,2
mov ah,ch ; цвет
and ah,0Fh ; приведем к диапазону 0-15
out dx,ax ; разрешить запись в соотв. плоскости
mov al,es:[bx] ; читаем байт
mov al,0FFh
mov es:[bx],al ; устанавливаем пиксель
mov ax,0FF02h
out dx,ax ; разрешить запись во все плоскости
mov ax,3
mov dx,3CEh ; графический контроллер
out dx,ax ; задать нормальный режим работы
- 69 -
mov ax,0FF08h
out dx,ax ; включить все биты
pop es
pop dx
pop cx
pop bx
pop ax
ret
Put_Pixel endp
;ЙННННННННННННННННННННННННННННННННННННННННННН»
;є Подпрограмма чтения цвета пикселя. є
;є Вход: CX = номер столбца (X) є
;є DX = номер строки (Y) є
;є Выход:AX = цвет пикселя є
;ИНННННННННННННННННННННННННННННННННННННННННННј
Get_Pixel proc near
push ax
push bx
push cx
push dx
push es
push dx
mov ax,205h
mov dx,3CEh
out dx,ax ; режимы: записи=01, чтения=0
pop dx
push cx
push dx
mov ax,dx
mov cx,80
mul cx ; AX = 80 * Y
pop dx
pop cx
push cx
shr cx,1
shr cx,1
shr cx,1 ; CX = X / 8
add ax,cx ; AX = 80 * Y + X / 8
mov cx,bx ; номер страницы
mov bx,PageSize
jcxz My_Page
Higher_Page:
add ax,bx ; учтем смещение до страницы
loop Higher_Page
My_Page:
mov di,ax ; DI = адрес байта, содержащего пиксель
mov ax,0A000h
mov es,ax ; ES:DI = полный адрес байта
pop cx
and cl,7 ; CL = X % 7
mov ch,80h
shr ch,cl ; CH = позиция пикселя в байте
- 70 -
|
adfun.ru
|
|
|
|