tryby graficzne




Kurs Assemblera by Skowik - Lekcja 8
















var napis=new Array("T","R","Y","B","Y ","G","R","A","F","I","C","Z","N","E");
var kolory=new Array("EE00EE","FF00DD","FF00CC","FF00BB","FF00AA","FF0099",
"EE00AA","EE00BB","EE00CC","EE00DD","EE00EE","DD00FF","CC00FF","AA00FF","8800FF");
for(i=0; i< 14; i++)
document.write(napis[i].fontcolor(kolory[i]));



W architekturze komputera IBM PC rozgraniczamy dwa tryby pracy kart
graficznych. Są to tryby: tekstowy i graficzny.Wynika to z rysu
historycznego kart graficznych.Z punktu widzenia procesora, karta graficzna
to zbiór portów wejścia-wyjścia i obszar pamięci obrazu.Programowanie
sterownika sprowadza się zatem do zapisu i odczytu pamięci oraz portów
I/O.Pamięć obrazu jest odwzorowana w przestrzeni adresowej procesora między
adresami A000:0000h-B000:FFFFh.Na pamięć obrazu przeznaczone jest 128 kB ,
była to ilość wystarczająca dla kart CGA.Na tej lekcji będziemy zajmować się
jedynie standartowymi trybami pracy kart graficznych.
Wszystkie nowoczesne karty graficzne powinny obsługiwać standardowe tryby pracy.
Aby odwołać się do nich na poziomie assemblera należy wykonać poniższy fragment
programu:
MOV AH,00HMOV AL,numer trybuINT
10HIstnieje również możliwość pobrania trybu w jakim pracuje
karta grafiki. Aby dostać tą informację wystarczy wpisać :
MOV AH,0FHINT 10HWówczas w
rejestrze AL znajdzie się numer tryby.


Tryby tekstowe

W trybach tekstowych pamięć obrazu sterowników EGA,VGA i SVGA zorganizowana
jest tak samo jak w sterownikach wcześniejszych. Z tego powodu została zachowana
zgodność pomiędzy różnymi rodzajami kart graficznych.W trybach tekstowych nie
mamy doczynienia z punktami lecz znakami wyświetlanymi na ekranie. Każdy znak to
numer 8 bitowy. Znak o podanym numerze zostaje pobrany z matrycy znaków i
wyświetlony na ekranie. Znaki zostały z pogrupowane w pewnej kolejności i
zostały im przydzielone pewne numery które nazywamu kodami ASCII znaków. W pamięci
każdy znak reprezentowany jest przez 2 bajty, pierwszy to kod ASCII a drugi to
atrybuty znaku. W pamięci ekranu znaki są zapisane na przemian z atrybutami. W
trybach tekstowych pamięć obrazu rozpoczyna się od adresu B800:0000h.Atrybut
to po prostu kolor literki i tła pod literką. Jeśli chcemy np. postwić napis
'Czesc' na "początku" ekranu. Czyli musimy postawić pod 0b800:0000 bajt 'C',pod
0b800:0002 bajt 'z' itd. Robimy to tak:
mov ax,0b800hmov es,axmov di,0mov byte ptr
es:[di],'C'mov byte ptr es:[di+2],'z'mov byte ptr es:[di+4],'e'mov
byte ptr es:[di+6],'s'mov byte ptr es:[di+8],'c'i na
ekranie pojawi nam się piękny napis Czesc. Oprócz standardowych trybów
tekstowych w kartach SVGA występują też tryby dodatkowe, wszystkie 16 kolorowe.

Sposoby czyszczenia
ekranu

Istnieje pare sposobów na czyszczenie ekranu. Pierwszy z nich to aktywacja
odpowiedniego trybu graficznego. Czyści ono ekran zarówno w grafice jak i w
trybach tekstowych. np.:
MOV AH,00HMOV AL,03;tryb
tekstowy 80x25INT 10Hlub
MOV AH,00HMOV AL,13H;tryb
graficzny 256 kolorowyINT 10HPowoduje to
wyczyszczenie pamięci ekranu(wszystkich stron) i ustawienie kursora przy lewym
górnym rogu.Rozwiązanie te choć szybkie powoduje zresetowanie matrycy znaków
i przywrócenie standardowych kolorów.Innym rozwiązaniem (choć nieco
dłuższym)jest przesunięcie ekranu w górę lub w dół i wypełnienie go pustymi
liniami o odpowiednich atrybutach.W rozwiązaniu tym kursor pozostaje na miejscu
, następuje czyszczenie jedynie bieżącej strony ekranu, a kolory i matryca
znaków pozostają niezmienione.Poniżej przedstawiam fragment kodu dla
drugiego rozwiązania.
MOV AX,0600HMOV BH,atrybuty;np.kolor pustych liniiMOV CX,0000HMOV
DX,184FHINT 10H
Poniżej pokazuję program wykorzystujący powyższe wiadomości:
xmax equ 4fh;ymax equ 18h;kod
segmentassume cs:kod,ss:stosik,ds:dane;;
******************************************************; * PROCEDURY *;
******************************************************naekran
procmov ah,09hint 21hretendpgotoxy procpush dxmov
dl,xmov dh,ymov ah,02hmov bh,00hint 10hpop
dxretendpbrak_pliku proclea dx,napis2call naekran;kbhit:
mov ah,0Bhint 21hcmp al,0je kbhit;jmp
exitendpotworz_plik procmov ah,3dh;mov al,0;mov
dx,offset nazwa;int 21h;jc brak_plikumov dojscie,ax;ret
endpzamknij_plik procmov ah,3Eh;mov bx,dojscie;int
21h;ret ;endpczytaj_z_pliku procpush cx;push dx;mov
ah,3Fh;mov bx,dojscie; identyfikator pliku ktory ma byc
otwartymov cx,1; liczba bajtow do
przeczytanialea dx,bufor;int 21h;pop dx;pop
cx;ret;endp;readln proc;mov ah,0ahint
21h;retendpendf procmov ah,42hmov bx,dojscie;mov
al,2;xor cx,cxxor dx,dxint 21hmov
eof,axretendp;--------------------------------------------------------------------
start: mov ax,dane mov ds,ax mov ax,stosik mov ss,ax
mov sp,offset szczytmov ah,00mov al,03hint 10hlea
dx,napis1;call naekran;lea dx,dl_buf;call readln mov
si,0;lea bx,ile_znak;mov cx,ds:[bx];dec cx; przepisywanie: lea
bx,buf;mov al,ds:[bx][si];xor ah,ah; lea bx,nazwa; mov
ds:[bx+si],al;cmp cl,0; je end_przepisywanie; dec cl; inc si;
jmp przepisywanie; end_przepisywanie:mov ah,00mov
al,03hint 10hcall otworz_plik;mov si,0;wyswietlanie:call
czytaj_z_pliku;lea bx,buformov dl,ds:[bx];lea bx,napismov
ds:[bx],dlcmp dl,9;jb keyhitcmp ax,0je keyhitcmp
dl,10je lf;polf: lea dx,napiscall naekranjmp
wyswietlanie;lf: inc y cmp y,20ja keyhit;jmp polfcr:
cmp ah,'z'ja zamirc: add ah,32jmp zamikeyhit:mov
ah,0Bhint 21hcmp al,0jne exit;jmp keyhitmov ah,8int
21h;zamiana malych na duze mov bx,0000h;mov ax,B600hmov
es,axzam:mov ax,es:[bx]cmp ah,'a'jae crzami: mov
es:[bx],ax;inc bxcmp bx,0FFFFhja exit jmp
zam;exit:call zamknij_plik;mov ah,4chmov al,00hint
21h;kod ends;dane segmentx db 01hy db 01heof dw
0;;plikdojscie dw 0bufor db 1
dup(0);klawiaturadl_buf db 13; dlugosc
buforaile_znak db 0;buf db 13 dup(0);nazwa db
0,0,0,0,0,0,0,0,0,0,0,0,0; Nazwa pliku zakonczona
#0napis db '*','$';napis1 DB 'Wpisz nazwe pliku z tekstem
(wraz z rozszerzeniem) : ',10,13,'$' ;Napis2 db ' Plik nie istnieje
!!!$';dane endsstosik segment ;dw 100h dup(0) ;szczyt label
word ;stosik ends ;end start


Funkcje trybu
tekstowego

W trybach tekstowych mamy bardzo dużo funkcji.W poprzednich lekcjach już pare
omówiłem , więc pora zebrać wszystkie wiadomości do kupy.Aby ustawić
kursor w wybranej pozycji należy użyć funkcji 02H przerwania 10H





Wywołanie

AH
AL
BH
BL
CH
CL
DH
DL
Bufor
inne


02H

-

nr.strony

-

-

-

wiersz

kolumna

-

-


Powrót po INT 10H


AH

AL

BH

BL

CH

CL

DH

DL

Bufor

inne


-

-

-

-

-

-

-

-

-

-Aby odczytać bieżącą
pozycję kursora i jego kształt należy wywołać funkcję 03H przerwania 10H.





Wywołanie

AH
AL
BH
BL
CH
CL
DH
DL
Bufor
inne


03H

-

-

-

-

-

-

-

-

-


Powrót po INT 10H


AH

AL

BH

BL

CH

CL

DH

DL

Bufor

inne


-

-

-

-

Początkowa linia kursora

Końcowa linia kursora

Wiersz

Kolumna

-

-Żeby ustalić aktualnie
wyświetlaną stronę graficzną trzeba posłużyć się funkcją 05H przerwania 10H i do
rejestru AL wpisać numer strony. Liczba stron zależy od rozmiaru pamięci karty
graficznej. Standardowo wyświetlana jest strona o numerze 0.Ekran możemy
także przesuwać w górę i w dół. Do przesuwania w górę służy funkcja 06H
przerwania 10H





Wywołanie

AH
AL
BH
BL
CH
CL
DH
DL
Bufor
inne


06H

liczba linii

atrybuty

-

wiersz lewego górnego rogu

kolumna lewego górnego rogu

wiersz prawego dolnego rogu

kolumna prawego dolnego rogu

-

-


Powrót po INT 10H


AH

AL

BH

BL

CH

CL

DH

DL

Bufor

inne


-

-

-

-

-

-

-

-

-

-natomiast do przesuwania
okna w dół funkcja 07H tegoż przerwania.





Wywołanie

AH
AL
BH
BL
CH
CL
DH
DL
Bufor
inne


07H

liczba linii

atrybuty

-

wiersz lewego górnego rogu

kolumna lewego górnego rogu

wiersz prawego dolnego rogu

kolumna prawego dolnego rogu

-

-


Powrót po INT 10H


AH

AL

BH

BL

CH

CL

DH

DL

Bufor

inne


-

-

-

-

-

-

-

-

-

-Przerwanie 10H posiadać
musi wiele funkcji zapisu znaków na ekran i odczytu znaków z ekranu.Do
odczytu znaku wraz z jego atrybutami przeznaczona jest funkcja 08H.





Wywołanie

AH
AL
BH
BL
CH
CL
DH
DL
Bufor
inne


08H

-

numer strony

-

-

-

-

-

-

-


Powrót po INT 10H


AH

AL

BH

BL

CH

CL

DH

DL

Bufor

inne


atrybut znaku

kod znaku

-

-

-

-

-

-

-

-Funkcja 09h przerwania
10H służy do zapisu znaku wraz z jego atrybutem na ekranie





Wywołanie

AH
AL
BH
BL
CH
CL
DH
DL
Bufor
inne


09H

kod znaku

numer strony

atrybut znaku(txt), kolor(grafika)

starsza część ilości wypisanych znaków

młodsza część ilości wypisanych znaków

-

-

-

-


Powrót po INT 10H


AH

AL

BH

BL

CH

CL

DH

DL

Bufor

inne


-

-

-

-

-

-

-

-

-

-Podobną funkcją jest
funkcja 0AH przerwania 10H która wypisuje znak na ekranie bez jego atrybutów





Wywołanie

AH
AL
BH
BL
CH
CL
DH
DL
Bufor
inne


0AH

kod znaku

numer strony

-

starsza część ilości wypisanych znaków

młodsza część ilości wypisanych znaków

-

-

-

-


Powrót po INT 10H


AH

AL

BH

BL

CH

CL

DH

DL

Bufor

inne


-

-

-

-

-

-

-

-

-

-Funkcje 09H i 0AH
wypisują znaki lecz nie rozróżniają znaków kontrolnych( o kodach 0 - 31) i nie
powodują zmiany położenia kursora na następną pozycję.Funkcja 0EH służy do
wyświetlenia znaku wraz z przesunięciem kursora.Działa ona zarówno w trybach
tekstowych jak i graficznych. Uwzględnia też niektóre znaki sterujące.





Wywołanie

AH
AL
BH
BL
CH
CL
DH
DL
Bufor
inne


0EH

kod znaku

numer strony

kolor(grafika)

-

-

-

-

-

-


Powrót po INT 10H


AH

AL

BH

BL

CH

CL

DH

DL

Bufor

inne


-

-

-

-

-

-

-

-

-

-Przerwanie 10H umożliwia
także wypisanie ciągu znaków.Służy do tego funkcja 13H która ma wiele podfunkcji
.Podfunkcja 00H funkcji 13H przerwania 10H służy do wyświetlania ciągu
znaków z podanym atrybutem , bez zmiany pozycji kursora z uwzględnieniem
niektórych kodów sterujących.Podany ciąg znaków dla tej podfunkcji musi
zawierać jedynie kody ASCII znaków





Wywołanie

AH
AL
BH
BL
CH
CL
DH
DL
Bufor
inne


13H

00H

numer strony

atrybut wyświetlanych znaków

część starsza liczby znaków w wyświetlanym ciągu

część młodsza liczby znaków w wyświetlanym ciągu

numer wiersza

numer początkowej kolumny

-

ES:BP - adres początku ciągu znaków


Powrót po INT 10H


AH

AL

BH

BL

CH

CL

DH

DL

Bufor

inne


-

-

-

-

-

-

-

-

-

-Podfunkcja 01H funkcji
13H przerwania 10H służy do wyświetlania ciągu znaków z podanym atrybutem , ze
zmiany pozycji kursora z uwzględnieniem niektórych kodów sterujących.Podany
ciąg znaków dla tej podfunkcji musi zawierać jedynie kody ASCII znaków użycie
atrybutów jest niedopuszczalne.





Wywołanie

AH
AL
BH
BL
CH
CL
DH
DL
Bufor
inne


13H

01H

numer strony

atrybut wyświetlanych znaków

część starsza liczby znaków w wyświetlanym ciągu

część młodsza liczby znaków w wyświetlanym ciągu

numer wiersza

numer początkowej kolumny

-

ES:BP - adres początku ciągu znaków


Powrót po INT 10H


AH

AL

BH

BL

CH

CL

DH

DL

Bufor

inne


-

-

-

-

-

-

-

-

-

-Podfunkcja 02H funkcji
13H przerwania 10H służy do wyświetlania ciągu znaków w postaci par
"znak-atrybut znaku", bez zmiany pozycji kursora z uwzględnieniem niektórych
kodów sterujących.Podany ciąg znaków dla tej podfunkcji musi zawierać
jedynie kody ASCII znaków





Wywołanie

AH
AL
BH
BL
CH
CL
DH
DL
Bufor
inne


13H

02H

numer strony

-

część starsza liczby par(znak-atrybut) w wyświetlanym
ciągu

część młodsza liczby par(znak-atrybut) w wyświetlanym
ciągu

numer wiersza

numer początkowej kolumny

-

ES:BP - adres początku ciągu par


Powrót po INT 10H


AH

AL

BH

BL

CH

CL

DH

DL

Bufor

inne


-

-

-

-

-

-

-

-

-

-Podfunkcja 03H funkcji
13H przerwania 10H służy do wyświetlania ciągu znaków w postaci par
"znak-atrybut znaku", ze zmianą pozycji kursora z uwzględnieniem niektórych
kodów sterujących.Podany ciąg znaków dla tej podfunkcji musi zawierać
jedynie kody ASCII znaków





Wywołanie

AH
AL
BH
BL
CH
CL
DH
DL
Bufor
inne


13H

03H

numer strony

-

część starsza liczby par(znak-atrybut) w wyświetlanym
ciągu

część młodsza liczby par(znak-atrybut) w wyświetlanym
ciągu

numer wiersza

numer początkowej kolumny

-

ES:BP - adres początku ciągu par


Powrót po INT 10H


AH

AL

BH

BL

CH

CL

DH

DL

Bufor

inne


-

-

-

-

-

-

-

-

-

-

Tryby graficzne

W trybach graficznych nie mamy doczynienia ze znakami a z pojedyńczymi
punktami.W różnych trybach graficznych jest inna organizacja pamięci obrazu
, jednak we wszystkich kolejne komórki reprezentują punkty ułożone na ekranie od
lewa do prawa i od góry do dołu.W trybach 2-kolorowych jeden punkt opisywany
jest przez jeden bit , w 16-kolorowych przez 4 bity a w 256-kolorowym jeden
bajt.W trybach graficznych przerwanie 10H udostępnia nam również sporo
funkcji.Podstawową funkcją jest funkcja zapisu punktu o podanym kolorze
z palety na ekranie. Służy do tego funkcja 0CH przerwania 10H





Wywołanie

AH
AL
BH
BL
CH
CL
DH
DL
Bufor
inne


0CH

nr.koloru

numer strony

-

starsza część współrzędnej X

młodsza część współrzędnej X

starsza część współrzędnej Y

młodsza część współrzędnej Y

-

-


Powrót po INT 10H


AH

AL

BH

BL

CH

CL

DH

DL

Bufor

inne


-

-

-

-

-

-

-

-

-

-Równie ważne jak
wyświetlanie punktu jest pobieranie informacji o numerze koloru wybranego
punktu. Służy do tego funkcja 0DH





Wywołanie

AH
AL
BH
BL
CH
CL
DH
DL
Bufor
inne


0CH

-

numer strony

-

starsza część współrzędnej X

młodsza część współrzędnej X

starsza część współrzędnej Y

młodsza część współrzędnej Y

-

-


Powrót po INT 10H


AH

AL

BH

BL

CH

CL

DH

DL

Bufor

inne


-

numer koloru w palecie

-

-

-

-

-

-

-

-Często musimy skorzystać
z kolorów których nie ma w standardowej palecie barw. Przerwanie 10H posiada
mechanizmy zmiany kolorów, przywracania standardowych , a nawet zmiany całych
palet kolorów. Pamiętajmy że możemy używać tylko kolorów zdefiniowanych w
palecie. W standardowych kartach VGA mamy do dyspozycji palety 2, 16 lub 256
kolorowe.Do operacji na palecie barw służy funkcja 10H przerwania 10H.
Przerwanie to posiada wiele podfunkcji definiujących kolory.Podfunkcja
00H służy do ustawiania jednego koloru palety VGA





Wywołanie

AH
AL
BH
BL
CH
CL
DH
DL
Bufor
inne


10H

00H

numer wzorca koloru

numer koloru w palecie

-

-

-

-

-

-


Powrót po INT 10H


AH

AL

BH

BL

CH

CL

DH

DL

Bufor

inne


-

-

-

-

-

-

-

-

-

-Podfunkcja 01H służy do
zmiany koloru krawędzi ekranu.





Wywołanie

AH
AL
BH
BL
CH
CL
DH
DL
Bufor
inne


10H

01H

numer wzorca koloru

-

-

-

-

-

-

-


Powrót po INT 10H


AH

AL

BH

BL

CH

CL

DH

DL

Bufor

inne


-

-

-

-

-

-

-

-

-

-Podfunkcja 07H służy do
odczytu numeru wzorca koloru palety.





Wywołanie

AH
AL
BH
BL
CH
CL
DH
DL
Bufor
inne


10H

07H

-

numer koloru w palecie

-

-

-

-

-

-


Powrót po INT 10H


AH

AL

BH

BL

CH

CL

DH

DL

Bufor

inne


-

-

nr.wzorca koloru

-

-

-

-

-

-

-Podfunkcja 10H służy do
określenia pojedyńczego wzorca koloru VGA przez podanie trzech składowych
zawierających się pomiędzy 0-63.





Wywołanie

AH
AL
BH
BL
CH
CL
DH
DL
Bufor
inne


10H

10H

0H

numer wzorca koloru (0-255)

składowa zielona

składowa niebieska

składowa czerwona

-

-

-


Powrót po INT 10H


AH

AL

BH

BL

CH

CL

DH

DL

Bufor

inne


-

-

-

-

-

-

-

-

-

-Podfunkcja 12H służy do
definiowania bloku wzorców przez podanie ciągu wzorców w buforze. Wzorzec to
trzy 6 bitowe składowe koloru.





Wywołanie

AH
AL
BH
BL
CH
CL
DH
DL
Bufor
inne


10H

12H

0H

numer pierwszego wzorca w bloku

0H

liczba ustawianych wzorców

-

-

ES:DX

-


Powrót po INT 10H


AH

AL

BH

BL

CH

CL

DH

DL

Bufor

inne


-

-

-

-

-

-

-

-

-

-W trybach 256-kolorowych
nr wzorca odpowiada numerowi koloru w palecie. W innych trybach do palety pod
odpowiedni numer można wybierać wzorzec o odpowiednik numerze.Podfunkcja
15H służy do pobrania pojedyńczego wzorca koloru VGA.





Wywołanie

AH
AL
BH
BL
CH
CL
DH
DL
Bufor
inne


10H

15H

numer wzorca koloru(0-255)

-

-

-

-

-

-

-


Powrót po INT 10H


AH

AL

BH

BL

CH

CL

DH

DL

Bufor

inne


-

-

-

-

składowa zielona

składowa niebieska

składowa czerwona

-

-

-Wzorce kolorów można
przekształcać do poziomów szarości. Służy do tego podfunkcja 1BH.





Wywołanie

AH
AL
BH
BL
CH
CL
DH
DL
Bufor
inne


10H

1BH

00H

nr. pierwszego zamienianego wzorca

00H

liczba przekształcanych wzorców

-

-

-

-


Powrót po INT 10H


AH

AL

BH

BL

CH

CL

DH

DL

Bufor

inne


-

-

-

-

-

-

-

-

-

-Przykłady zastosowań
powyższych funkcji znajdziesz w następnej lekcji.

Generator znaków

Często mamy potrzebę zmiany wyglądu znaku (czcionki). W assemblerze możemy to
zrobić gdyż znaki przepisane są z pamięci ROM do pewnego wycinka pamięci RAM.
Właśnie wygląd znaków pobierany jest z pamięci RAM i może on być
zmieniany.Do działań na generatorze znaków przeznaczona jest funkcja 11H
przerwania 10H. Jak poprzednia funkcja tak i ta posiada wiele
podfunkcji.Podfunkcja 00H służy do zastąpienia zbioru znaków lub jego
części znakami zdefiniowanymi przez użytkownika.





Wywołanie

AH
AL
BH
BL
CH
CL
DH
DL
Bufor
inne


11H

00H

liczba bajtów na znak(8-16)

nr.zbioru znaków(0-7)

00H

liczba zastępowanych znaków

00H

kod ASCII pierwszego znaku

-

ES:BP-Adres obszaru zawierającego definicje użytkownika.



Powrót po INT 10H


AH

AL

BH

BL

CH

CL

DH

DL

Bufor

inne


-

-

-

-

-

-

-

-

-

-Wzorzec znaku możemy
zaprojektować w następujący sposób. Tworzymy tabelę o tylu wierszach i tylu
kolumnach co ilość punktów w pionie i poziomie w znaku. Na przykład tabela dla
znaku 8x8 wygląda w następujący sposób:




128
064
032
016
008
004
002
001
suma


0

0

0

0

0

0

0

0

0


0

0

0

0

0

0

0

0

0


0

0

0

0

0

0

0

0

0


0

0

0

0

0

0

0

0

0


0

0

0

0

0

0

0

0

0


0

0

0

0

0

0

0

0

0


0

0

0

0

0

0

0

0

0


0

0

0

0

0

0

0

0

0Kolumny
tabeli numerujemy zgodnie z potęgą dwójki od 7 do 0. Dany punkt który ma być
wyświetlany w znaku oznaczamy 1 a nie wyświetlany 0; Punkty z danego wiersza
sumujemy wg wzoru:
128*x+64*x+32*x+16*x+8*x+4*x+2*x+x=R gdzie x= 0 lub
1Sumy z poszczególnych wierszy zapisujemy w łańcuchu w segmencie
danych.Funkcja 11H pozwala nam także ładować standardowe zestawy znaków
z matrycy zapisanej w pamięci ROM. Podfunkcja 01H ładuje standardowy
zestaw znaków 8x14Podfunkcja 02H ładuje standardowy zestaw znaków
8x8Podfunkcja 04H ładuje standardowy zestaw znaków 8x16Podfunkcja 11H
ładuje standardowy zestaw znaków 8x14Podfunkcja 12H ładuje standardowy
zestaw znaków 8x8Podfunkcja 14H ładuje standardowy zestaw znaków 8x16





Wywołanie

AH
AL
BH
BL
CH
CL
DH
DL
Bufor
inne


11H

nr. podfunkcji

-

nr. zbioru znaków

-

-

-

-

-

-


Powrót po INT 10H


AH

AL

BH

BL

CH

CL

DH

DL

Bufor

inne


-

-

-

-

-

-

-

-

-

-Podfunkcja 03H
przeznaczona jest do wyboru domyślnych znaków które będą wyświetlane w trybach
tekstowych pracy karty graficznej.Wybrany zbiór musi być przedtem załadowany
funkcjami opisanymi powyżej.





Wywołanie

AH
AL
BH
BL
CH
CL
DH
DL
Bufor
inne


11H

03H

-

bity 4,1,0 - to nr. pierwszego zbioru znaków a bity 5,3,3
drugiego zbioru znaków

-

-

-

-

-

-


Powrót po INT 10H


AH

AL

BH

BL

CH

CL

DH

DL

Bufor

inne


-

-

-

-

-

-

-

-

-

-W tekstowych trybach pracy
można stosować zbiory 256 lub 512-znakowe. Dla zbioru 256-znakowego nr.
pierwszego i drugiego zestawu muszą być jednakowe. W zbiorach 512-znakowych
pierwsze 256 znaków zostanie wybrane gdy trzeci bit atrybutu wynosi 0 a
pozostałe 256 znaków gdy trzeci bit atrybutu wynosi 1. Podfunkcja 20H
służy do modyfikowania wzorców znaków o kodach wyższych niż 127. Adres ES:BP
zapisany jest w tablicy wektorów przerwań jako wektor 1FH. Zmodyfikowane znaki
dostępne są w trybach
4-7.





Wywołanie

AH
AL
BH
BL
CH
CL
DH
DL
Bufor
inne


11H

20H

-

-

-

-

-

-

-

ES:BP - adres obszaru z poisami znaków


Powrót po INT 10H


AH

AL

BH

BL

CH

CL

DH

DL

Bufor

inne


-

-

-

-

-

-

-

-

-

-Podfunkcja powinna być
wywołana zaraz po ustawieniu trybu pracy.Podfunkcja 21H służy do
definiowania przez użytkownika wzorców znaków dostępnych w trybach
graficznych.





Wywołanie

AH
AL
BH
BL
CH
CL
DH
DL
Bufor
inne


11H

21H

-

00H

00H

liczba bajtów opisujących pojedyńczy znak

-

liczba wierszy na ekranie

-

ES:BP - adres obszaru zawierającego opisy
znaków.


Powrót po INT 10H


AH

AL

BH

BL

CH

CL

DH

DL

Bufor

inne


-

-

-

-

-

-

-

-

-

-Adres wskazywany przez
rejesry ES:BP jest zapisywany w tablicy wektorów przerwań jako wektor
43H.


Funkcje konfigurujące

Przerwanie 10H umożliwia również konfigurację sterownika karty grafiki. Do
konfiguracji karty graficznej służy wielopodfunkcyjna funkcja 12H przerwania
10H.Z pośród wielu podfunkcji funkcji 12H wybrałem niektóre wg mnie
najważniejsze. Podfunkcja 10H służy do odczytania informacji o stanie aktywnego
sterownika.





Wywołanie

AH
AL
BH
BL
CH
CL
DH
DL
Bufor
inne


12H

-

-

10H

-

-

-

-

-

-


Powrót po INT 10H


AH

AL

BH

BL

CH

CL

DH

DL

Bufor

inne


-

-

typ monitora:0-kolorowy1-mono

rozmiar pamięci obrazu:1-128kB3-256kB i
więcej

wartość odczytana z rejestru złącza krawędziowego

-

-

-

-

-Podfunkcja 30H służy do
ustalania rozdzielczości pionowej sterownika VGA w tekstowych trybach pracy.
Wyświetlanie z większą rozdzielczością pozwala na zwiększenie ilości wierszy na
ekranie. Podfunkcja ta powinna być wykonywana przed ustawianiem tekstowego trybu
pracy funkcją 00H przerwania 10H.





Wywołanie

AH
AL
BH
BL
CH
CL
DH
DL
Bufor
inne


12H

rozdzielczość pionowa:0-200 linii1-350
linii2-400 linii

-

30H

-

-

-

-

-

-


Powrót po INT 10H


AH

AL

BH

BL

CH

CL

DH

DL

Bufor

inne


-

00H-aktywnym sterownikiem nie jest VGA12H-aktywnym
sterownikiem jest VGA

-

-

-

-

-

-

-

-Podfunkcja 31H powoduje
przywrócenie standardowej palety kolorów podczas przełączania trybu pracy.
Podfunkcja ta powinna być wykonywana przed ustawianiem trybu pracy funkcją 00H
przerwania 10H.





Wywołanie

AH
AL
BH
BL
CH
CL
DH
DL
Bufor
inne


12H

00H

-

31H

-

-

-

-

-

-


Powrót po INT 10H


AH

AL

BH

BL

CH

CL

DH

DL

Bufor

inne


-

Jeśli podano poprawne parametry to AL=12H

-

-

-

-

-

-

-

-Podfunkcja 32H powoduje
programowe odłączenie sterownika i zablokowanie dostępu do pamięci obrazu oraz
rejestrów.





Wywołanie

AH
AL
BH
BL
CH
CL
DH
DL
Bufor
inne


12H

00H-przyłączenie sterownika01H-odłączenie
sterownika

-

32H

-

-

-

-

-

-


Powrót po INT 10H


AH

AL

BH

BL

CH

CL

DH

DL

Bufor

inne


-

12H- poprawne dane wejściowe

-

-

-

-

-

-

-

-Podfunkcja 33H powoduje
przełączenie do poziomów szarości sterownika VGA.





Wywołanie

AH
AL
BH
BL
CH
CL
DH
DL
Bufor
inne


12H

0-poziomy szarości1-obraz kolorowy

-

33H

-

-

-

-

-

-


Powrót po INT 10H


AH

AL

BH

BL

CH

CL

DH

DL

Bufor

inne


-

12H-poprawne dane wejściowe

-

-

-

-

-

-

-

-Podfunkcja 36H służy do
wygaszenia monitora , lub do ottworzenia jego zawartości.





Wywołanie

AH
AL
BH
BL
CH
CL
DH
DL
Bufor
inne


12H

0-wyświetlanie obrazu1-wygaszenie obrazu

-

36H

-

-

-

-

-

-


Powrót po INT 10H


AH

AL

BH

BL

CH

CL

DH

DL

Bufor

inne


-

12H-podano poprawne parametry

-

-

-

-

-

-

-

-Poznane w tej
części kursu wiadomości chciałbym przedstawić praktycznie. Program będzie
zamieniał znak "@" na ludzika.Działać to będzie jedynie pod systemem DOS.Na
początku zaprojektujemy znak.




128
064
032
016
008
004
002
001
suma


0

0

0

1

1

1

0

0

28


0

0

1

0

1

0

1

0

42


0

0

1

1

1

1

1

0

62


0

1

1

1

1

1

1

1

127


0

1

0

0

0

0

0

1

65


0

0

1

0

0

0

1

0

34


0

0

0

1

1

1

0

0

28


0

0

0

0

0

0

0

0

0A
następnie wpisać kod programu:
kod segmentassume
cs:kod,ss:stosik,ds:dane;zmien_znak procpush esmov ax,dsmov
es,axlea bp,datmov ax,1100h;Generator
znakówmov bh,10h;bajtow na znakmov
bl,0;nr.zbioru znakówmov cx,1;liczba znaków do zamianymov dx,word ptr '@'int
10hpop esretendpstart: mov ax,dane ;mov ds,ax ;mov
ax,stosik ;mov ss,ax ;mov sp,offset szczyt;mov ah,00 mov al,03h
int 10h call zmien_znak mov ax,0B600hmov es,axmov
di,0rysuj:mov byte ptr es:[di],'@';inc di;inc di;cmp
di,78;je keyhit;jmp rysujkeyhit:mov ah,0Bhint 21hcmp
al,0jne exit;jmp keyhitexit:mov ah,4chmov al,00hint
21h;kod ends;dane segmentdat db
28,42,62,127,65,34,28,0,0,0,0,0,0,0,0,0,0 dane endsstosik
segment dw 100h dup(0) szczyt label word stosik ends end
start Teraz po zakończeniu programu za każdym razem zamiast
znaku "@" wyświetlać się będzie zdefiniowany przez nas znak (tylko w DOS).














Strona utworzona przez(c)2001


Wyszukiwarka

Podobne podstrony:
tryby adresowania2
t cyfrowych procesow graficznych2?
tryby mieszania
tryby (3)
Mikrokontrolery To takie proste, cz 15 (układ licznikowy w 8052C & specjalne tryby pracy 8051)
utk cw 3 1 karta graficzna teoria
Wymienić charakterystyczne obszary łuku elektrycznego oraz wyjaśnić graficznie warunki wyłączania pr
Graficzna obróbka zdjęć
Analiza Graficzna

więcej podobnych podstron