Wstęp do grafiki
W tym artykule dowiesz się jak obsługuje się grafikę w assemblerze. Jeżeli próbowałeś kiedykolwiek pisać coś związanego z grafiką np. w Pascalu przy użyciu BGI - to możesz być za chwilę naprawdę zaskoczony. Rysowanie jest bowiem dziecinnie proste.
Po pierwsze musisz się nauczyć ustawiać odpowiedni tryb graficzny, a także wracać do trybu tekstowego. Do zmiany trybu pracy ekranu służy funkcja 00h przerwania 10h. Numer trybu podaje się w al, a numer funkcji - standardowo w ah.
Następujący kod:
ustawi tryb graficzny, którego numer znajduje się w zmiennej tryb. Zmienna ta oczywiście jest typu db (jeden bajt). Zwróć uwagę, że w przeciwieństwie do biblioteki graficznej firmy Borland - tutaj nie musisz mieć żadnych sterowników i pisać jakichś wymyślnych konstrukcji. Po prostu prosisz BIOS aby ustawił ci tryb graficzny - a on to robi.
Musisz jeszcze wiedzieć, że tryb 320x200x256, czyli standardowy 256-kolorowy tryb karty VGA (notabene niedostępny przez bgi:-) ma numer 13h. Natomiast standardowy tryb tekstowy (80x25) ma numer 03h.
Aby wypełnić ekran musisz wiedzieć jak zorganizowana jest pamięć video. W trybie 13h jednemu pixelowi odpowiada po prostu jeden bajt. Cała pamięć ekranu znajduje się w segmencie 0a000h. W pierwszym bajcie tego segmentu znajduje się lewy, górny pixel ekranu. W kolejnym - jego sąsiad z prawej strony. Dalej - reszta sąsiadów z pierwszego wiersza... Następnie znajduje się drugi wiersz, trzeci... i tak aż do końca.
Do zapalenia pixela o wspólrzędnych (x,y) musisz wyliczyć jego adres w pamięci. Wzór jest bardzo prosty :-) 320 * y + x . I to wszystko. Wystarczy wysłać tam wartość koloru, aby ekran w tym miejscu zmienił barwę... Spróbuj to zrobić teraz:
(oczywiście to tylko fragment programu - przedtem musisz zainicjować tryb graficzny a potem wrócić do trybu tekstowego i zakończyć program)
Jeżeli cię to interesuje - to wiedz, że tryb tekstowy również zorganizowany jest dosyć prosto. Pamięć ekranu znajduje się wtedy w segmencie 0b800h. Każdy znak na ekranie opisywany jest przez dwa bajty. W pierwszym podaje się numer ascii znaku, a w drugim - jego atrybuty (kolor, tło, miganie). Napisanie programu który umieszcza znaczki w trybie tekstowym na ekranie możesz potraktować jako pracę domową :-)
Po pierwsze musisz się nauczyć ustawiać odpowiedni tryb graficzny, a także wracać do trybu tekstowego. Do zmiany trybu pracy ekranu służy funkcja 00h przerwania 10h. Numer trybu podaje się w al, a numer funkcji - standardowo w ah.
Następujący kod:
mov ah,00h
mov al,[tryb]
int 10h
mov al,[tryb]
int 10h
ustawi tryb graficzny, którego numer znajduje się w zmiennej tryb. Zmienna ta oczywiście jest typu db (jeden bajt). Zwróć uwagę, że w przeciwieństwie do biblioteki graficznej firmy Borland - tutaj nie musisz mieć żadnych sterowników i pisać jakichś wymyślnych konstrukcji. Po prostu prosisz BIOS aby ustawił ci tryb graficzny - a on to robi.
Musisz jeszcze wiedzieć, że tryb 320x200x256, czyli standardowy 256-kolorowy tryb karty VGA (notabene niedostępny przez bgi:-) ma numer 13h. Natomiast standardowy tryb tekstowy (80x25) ma numer 03h.
Aby wypełnić ekran musisz wiedzieć jak zorganizowana jest pamięć video. W trybie 13h jednemu pixelowi odpowiada po prostu jeden bajt. Cała pamięć ekranu znajduje się w segmencie 0a000h. W pierwszym bajcie tego segmentu znajduje się lewy, górny pixel ekranu. W kolejnym - jego sąsiad z prawej strony. Dalej - reszta sąsiadów z pierwszego wiersza... Następnie znajduje się drugi wiersz, trzeci... i tak aż do końca.
Do zapalenia pixela o wspólrzędnych (x,y) musisz wyliczyć jego adres w pamięci. Wzór jest bardzo prosty :-) 320 * y + x . I to wszystko. Wystarczy wysłać tam wartość koloru, aby ekran w tym miejscu zmienił barwę... Spróbuj to zrobić teraz:
mov ax,0a000h
mov es,ax
mov di,320*10+10
mov al,10
mov es:[di],al
mov es,ax
mov di,320*10+10
mov al,10
mov es:[di],al
(oczywiście to tylko fragment programu - przedtem musisz zainicjować tryb graficzny a potem wrócić do trybu tekstowego i zakończyć program)
Jeżeli cię to interesuje - to wiedz, że tryb tekstowy również zorganizowany jest dosyć prosto. Pamięć ekranu znajduje się wtedy w segmencie 0b800h. Każdy znak na ekranie opisywany jest przez dwa bajty. W pierwszym podaje się numer ascii znaku, a w drugim - jego atrybuty (kolor, tło, miganie). Napisanie programu który umieszcza znaczki w trybie tekstowym na ekranie możesz potraktować jako pracę domową :-)
Autorem tekstu jest:
Jacek Popławski
Materiał dodany przez użytkownika: alphan
