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 adresowania2t cyfrowych procesow graficznych2?tryby mieszaniatryby (3)Mikrokontrolery To takie proste, cz 15 (układ licznikowy w 8052C & specjalne tryby pracy 8051)utk cw 3 1 karta graficzna teoriaWymienić charakterystyczne obszary łuku elektrycznego oraz wyjaśnić graficznie warunki wyłączania prGraficzna obróbka zdjęćAnaliza Graficznawięcej podobnych podstron