Sluzby BIOS pro praci s obrazovkou Volani BIOS BIOS je tady k tomu, aby vam zajistil kompatibilitu programu na ruznych pocitacich a grafickych kartach. Samozrejme, ze muzete grafickou kartu ovladat primo pomoci registru a zapisovat primo do videopameti. Musite vsak vsechny programy psat tolikrat, kolik je ruznych grafickych karet, na nichz ma vas program pracovat. Muzete vsak pouzit BIOS, tomu predate pouze parametry a on uz vse udela za vas, at mate v pocitaci jakoukoliv grafickou kartu. Je samozrejme, ze za tuto flexibilitu zaplatite. Tim, ze BIOS podporuje velke mnozstvi karet, nejsou jeho rutiny tak rychle. Nemohou totiz vyuzivat specialnich vlastnosti jednotlivych adapteru. Pokud tedy potrebujete neco udelat opravdu rychle a efektivne, musite sahnout k programovani registru a primemu zapisu do pameti. Volani videosluzeb BIOS se provadi pomoci interruptu 10h. Predtim nez ho zavolate, musite do registru AH ulozit cislo sluzby a do ostatnich registru pripadne parametry, ktere tato sluzba vyzaduje. K volani sluzeb BIOS je samozrejme nejvhodnejsi pouzivat assembler, ale je mozne je volat i z vyssich programovacich jazyku. Nektere programovaci jazyky umoznuji primo zapisovat do zdrojoveho textu assembler. Nebo disponuji funkcemi k volani sluzeb BIOS (v Turbo Pascalu je to napriklad procedura INTR). Nasledujici priklad nam ukaze, jak nastavit zobrazovaci mod 3, tj. text 80 sloupcu a 25 radek. Assembler: mov AH, 00h ;sluzba 00h - nastaveni modu mov AL, 03h ;cislo modu int 10h ;volani INT 10h Turbo Pascal pomoci interniho assembleru: asm push DS push BP mov AH, 00h ;sluzba 00h - nastaveni modu mov AL, 03h ;cislo modu int 10h ;volani INT 10h pop BP pop DS end; pozn. Pred volanim INT 10h je v internim assembleru Turbo Pascalu vhodne ulozit obsah registru DS, BP. Tyto registry nesmi byt pro ostatni casti programu zmeneny a sluzba na INT 10h by je mohla zmenit. Turbo Pascal pomoci procedury INTR: Var Reg: Registers; begin Reg.AH := 00; ;sluzba 00h - nastaveni modu Reg.AL := 03; ;cislo modu Intr($10, Reg); ;volani INT 10h end; V pripade, ze nektera sluzba vraci nejake vysledky, jsou opet vraceny v registrech mikroprocesoru. Sluzby BIOS pro praci s obrazovkou V teto kapitole popiseme sluzby 00h-00f interruptu 10h. Ty zbyvajici, ktere jsou specificke pro karty EGA a VGA popiseme v nasledujici casti. Sluzba 00h - Nastaveni zobrazovaciho modu ========================================= Popis: Funkce se pouziva k nastaveni zobrazovaciho modu adapteru. Mohou se pomoci ni nastavovat textove rezimy a rezimy graficke: 320 x 200, 640 x 200, 640 x 350 a 640 x 480. Pote mohou byt znaky na obrazovku zapisovany pomoci sluzeb 09h, 0ah, 0eh, 13h. Bod muzete zobrazit pomoci sluzby 0ch. Vstup: AH = 00h Cislo sluzby AL = Cislo zobrazovaciho modu (podle nasledujici tabulky) Mod Grafika/Text Pocet barev ------------------------------------------------- 00h text 40 x 25 16 barev VGA, 16 odstinu sedi EGA 01h text 40 x 25 16 barev EGA,VGA 02h text 80 x 25 16 barev VGA, 16 odstinu sedi EGA 03h text 80 x 25 16 barev EGA/VGA 04h grafika 320 x 200 4 barvy 05h grafika 320 x 200 4 barvy VGA, 4 odstiny sedi EGA 06h grafika 640 x 200 2 barvy (jedna z nich je cerna) 07h text 80 x 25 monochromaticke zobrazeni 0dh grafika 320 x 200 16 barev EGA, VGA 0eh grafika 640 x 200 16 barev EGA, VGA 0fh grafika 640 x 350 monochrom. zobr. EGA, VGA 10h grafika 640 x 350 4 barvy (EGA 64K), 16 barev EGA, VGA 11h grafika 640 x 480 monochrom. zobr. VGA 12h grafika 640 x 480 16 barev VGA 13h grafika 320 x 200 256 barev VGA 6ah grafika 800 x 600 16 barev, pouze pokud karta podporuje VESA Poznamka: Na adapteru EGA s monochromatickym monitorem pouzivejte pouze mody 07h a 0fh. Pokud nejvyssi bit AL nastavite na 1, pri inicializaci modu se zachova puvodni obsah obrazovky. Nastaveni nejvyssiho bitu provede tak, ze k cislu modu ulozenemu v registru AL prictete hodnotu 80h. Sluzba 01h - Nastaveni tvaru textoveho kurzoru ============================================== Popis: Tato funkce slouzi k definovani tvaru kurzoru. Muzete urcit pocatecni a koncovou radku, mezi kterymi bude vybarvena obdelnikova cast znakoveho boxu. Kurzor tedy nemusi zacinat na prvni a koncit na posledni radce. Muze byt klidne ve stredu znakoveho boxu. V grafickych modech kurzor neni. Pocatecni a koncova radka kurzoru jsou ulozeny v peti nejnizsich bitech. Bity 7, 6 a 5 by mely vzdy obsahovat nulu (na adapterech EGA a VGA, na ostatnich urcuji rychlost blikani kurzoru). Pokud chcete kurzor ucinit neviditelnym, nastavte jeho konec i pocatek pod znakovy box (tj. obe hodnoty budou vetsi nez 7). Pokud na EGA nastavite pocatecni radku vetsi nez koncovou, objevi se kurzor jako dve carky nad sebou (inverze kurzoru, ktery by se objevil, pokud by pocatecni a koncova radka byly vymeneny). Adapter VGA tento trik neumoznuje. Pokud je pocatecni radka vetsi nez koncova, kurzor se neobjevi. Jelikoz starsi textove mody podporovaly pouze osmiradkovy kurzor, musel byt v zajmu zachovani kompatibility udelan kompromis na novejsich textovych modech, ktere podporuji znaky se 14 nebo 16 radky. Pokud je cislo radku 0-3 povazuje se za horni radek a pokud je 4-7, povazuje se za dolni (hodnota 4-7 pak podle adapteru odpovida radkum 10-13 - EGA , pripadne 12-15 - VGA). Pokud interval definice kurzoru obsahuje i radky 4 a 5 (v registrech ulozeno jako 3 a 4) vyplni se i prostor mezi nimi. Vstup: AH = 01h Cislo sluzby CH = Pocatecni radka kurzoru (bity 0-4) CL = Koncova radka kurzoru (bity 0-4) Sluzba 02h - Nastaveni pozice kurzoru ===================================== Popis: Nastavi pozici kurzoru na obrazovce. Radka 0 je horni radka obrazovky a sloupec 0 je sloupec nejvice vlevo na obrazovce. Vstup: AH = 02h Cislo sluzby DL = Cislo radky DH = Cislo sloupce BH = Cislo stranky (vysvetleni co je stranka naleznete u popisu sluzby 05h) Sluzba 03h - Cteni pozice a velikosti kurzoru ============================================= Popis: Cte aktualni souradnice kurzoru v dane strance. Zjisti take velikost kurzoru (tak jak byl definovan sluzbou 01h). Vstup: AH = 03h Cislo sluzby BH = Cislo stranky Vystup: Bude obsazen v registrech po zavolani sluzby DH = Aktualni radka, na ktere je kurzor DL = Aktualni sloupec, ve kterem je kurzor CH = Pocatecni radka kurzoru CL = Koncova radka kurzoru Sluzba 04h - Cteni pozice svetelneho pera ========================================= Popis: Tato sluzba zjistuje souradnice svetelneho pera v okamziku, kdy bylo stisknuto jeho tlacitko. Pokud je aktualni zobrazovaci rezim 4-6, graficky radek je vracen v registru CH. Pokud pouzivate nove EGA mody, cislo graficke radky sluzba ulozi do registru CX. Vstup: AH = 04h Cislo sluzby Vystup: Bude obsazen v registrech po zavolani sluzby AH = 0 Nebylo stisknuto tlacitko na svetelnem peru, informace v ostatnich registrech jsou neplatne. = 1 Bylo stisknuto tlacitko na svetelnem peru, informace v registrech plati. DH = Znakova radka DL = Znakovy sloupec CH = Graficka radka (v modech 4-6) CX = Graficka radka v novych EGA rezimech BX = Graficky sloupec Poznamka: Karta VGA nepodporuje praci se svetelnym perem. Volani teto sluzby, pokud mate VGA kartu postrada jakykoliv smysl. Sluzba 05h - Vyber aktivni obrazove stranky =========================================== Popis: Adapter muze mit v pameti najednou nekolik stranek (obsahu obrazovky). Ale pouze jedna z techto stranek muze byt zobrazovana. U vetsiny funkci BIOS, ktere zapisuji znaky na obrazovku, kresli bod, presouvaji kurzor atd., si muzete zvolit, do ktere stranky se jeji vystup promitne. Vyuzijete-li teto schopnosti graficke karty, muzete jednu stranku zobrazovat a ve druhe provadet zmeny. Pak obe stranky prepnout a nova stranka se zobrazi okamzite bez pomaleho vykreslovani. Toto se da vyhodne uplatnit napriklad pri animaci. Tato sluzba vam umozni zvolit stranku, ktera se bude zobrazovat. Obvykle se zobrazuje stranka 0 a do ni se take provadeji vsechny zmeny. Vstup: AH = 05h Cislo sluzby AL = Cislo stranky, ktera se ma zobrazit Poznamka: Cisla stranek dostupnych v ruznych zobrazovacich rezimech udava nasledujici tabulka. Pokud obsahuje 0 znamena to, ze je dostupna jedna stranka s cislem 0, atd. Mod 64K 128K 256K - Velikost pameti videoadapteru --------------------- 00h 0-7 0-7 0-7 01h 0-7 0-7 0-7 02h 0-3 0-7 0-7 03h 0-3 0-7 0-7 04h 0 0 0 05h 0 0 0 06h 0 0 0 07h 0-3 0-7 0-7 0dh 0-1 0-3 0-7 0eh 0 0-1 0-3 0fh 0 0-1 0-1 10h 0 0 0-1 11h - - 0 Pouze VGA 12h - - 0 Pouze VGA 13h - - 0 Pouze VGA Vsechny karty VGA maji nejmene 256K pameti, tzn. plati pro ne posledni sloupec tabulky. Sluzba 06h - Rolovani aktivni obrazove stranky nahoru ===================================================== Popis: Tato funkce roluje obsah obrazovky zezdola nahoru. Do spodni casti obrazovky jsou vkladany prazdne radky. Muzete specifikovat levy horni a pravy dolni roh okenka a rolovani pak bude probihat pouze v nem a ne na cele plose obrazovky. Tato funkce pracuje pouze s aktivni obrazovou strankou. Pokud zadate jako pocet radek k odrolovani 0, smaze se cela obrazovka (okno). Vstup: AH = 06h Cislo sluzby AL = Pocet radek k odrolovani (0 maze cele okno) BH = Atribut znaku pridavanych jako nova radka (viz. sluzba 08h) CH = Horni okraj okna (cislo radky) CL = Levy okraj okna (cislo sloupce) DH = Dolni radka okna (cislo radky) DL = Pravy okraj okna (cislo sloupce) Sluzba 07h - Rolovani aktivni obrazove stranky dolu =================================================== Popis: Tato funkce roluje obsah okenka dolu. Prazdne radky jsou vkladany na hornim okraji okna. Tato sluzba pracuje stejne jako sluzba 06h, pouze smer rolovani textu je opacny. Vstup: AH = 07h Cislo sluzby AL = Pocet radek k odrolovani (0 maze cele okno) BH = Atribut znaku pridavanych jako nova radka (viz. sluzba 08h) CH = Horni okraj okna (cislo radky) CL = Levy okraj okna (cislo sloupce) DH = Dolni radka okna (cislo radky) DL = Pravy okraj okna (cislo sloupce) Sluzba 08h - Cteni znaku a jeho atributu na pozici kurzoru ========================================================== Popis: Tato funkce slouzi k zjisteni kodu a atributu znaku na aktualni pozici kurzoru v libovolne obrazovove strance. Atribut znaku je jeden byte dlouha informace o zpusobu zobrazeni znaku podle nasledujici tabulky: /------------------------------------------------\ |blikani| barva pozadi | inten- | barva znaku | | | | zita | | |-------+----------------+--------+--------------| MSB | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | \------------------------------------------------/ Pro barevne monitory je prirazeni barev nasledujici: Bity 4-6 (barva pozadi): 000 cerna 100 cervena 001 modra 101 fialova 010 zelena 110 hneda 011 tyrkysova 111 bila Bity 0-3 (barva znaku): 0000 cerna 1000 tmave seda 0001 modra 1001 svetle modra 0010 zelena 1010 svetle zelena 0011 tyrkysova 1011 svetle tyrkysova 0100 cervena 1100 svetle cervena 0101 fialova 1101 svetle fialova 0110 hneda 1110 zluta 0111 svetle seda 1111 bila Na monochromatickych monitorech (neni myslen cernobily monitor, ktery se u nas casto pouziva v kombinaci s VGA kartou) by barva pozadi mela byt bud 0 (cerna) nebo 111b=07h (barevna). Barva znaku 000b odpovida cerne, 001b - znak bude podtrzeny a 111b - znak bude barevny. Hodnota atributu ma vyznam pouze v textovych rezimech. Vstup: AH = 08h Cislo sluzby BH = Cislo obrazove stranky Vystup: Bude obsazen v registrech po zavolani sluzby AL = ASCII kod znaku AH = Atribut znaku (pouze v textovem rezimu) Poznamka: U popisu sluzeb 10h a 11h naleznete mnoho dalsich informaci o atributech a znakovych sadach. Bit urcujici blikani muze byt preprogramovan tak, aby urcoval intenzitu barvy pazadi (pro pozadi pak muzeme pouzit take 16 barev). Toto nastaveni lze provest pomoci CRTC registru nebo volanim sluzby 10h a funkce 03h interruptu 10h. Bit urcujici intenzitu barvy znaku muze byt preprogramovan tak, aby urcoval jednu ze dvou znakovych sad, z kterych se ziskavaji informace o tvaru znaku. Muzete tak v textovem rezimu pouzivat najednou 512 znaku. Sluzba 09h - Zapsani znaku a atributu na pozici kurzoru ======================================================= Popis: Tuto sluzbu muzete pouzit k zapsani znaku (nebo nekolika stejnych znaku) do libovolne z obrazovych stranek. Znak se objevi na pozici kurzoru, kterou muzete nastavit pomoci sluzby 02h. Atribut znaku ma nasledujici vyznam (pro textove rezimy): /------------------------------------------------\ |blikani| barva pozadi | inten- | barva znaku | | | | zita | | |-------+----------------+--------+--------------| MSB | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | \------------------------------------------------/ Pro barevne monitory je prirazeni barev nasledujici: Bity 4-6 (barva pozadi): 000 cerna 100 cervena 001 modra 101 fialova 010 zelena 110 hneda 011 tyrkysova 111 bila Bity 0-3 (barva znaku): 0000 cerna 1000 tmave seda 0001 modra 1001 svetle modra 0010 zelena 1010 svetle zelena 0011 tyrkysova 1011 svetle tyrkysova 0100 cervena 1100 svetle cervena 0101 fialova 1101 svetle fialova 0110 hneda 1110 zluta 0111 svetle seda 1111 bila Na monochromatickych monitorech (neni myslen cernobily monitor, ktery se u nas casto pouziva v kombinaci s VGA kartou) by barva pozadi mela byt bud 0 (cerna) nebo 111b=07h (barevna). Barva znaku 000b odpovida cerne, 001b - znak bude podtrzeny a 111b - znak bude barevny. V grafickem rezimu se byte atributu pouziva k urceni barvy znaku. Pokud s barvou zaroven nastavite bit 7 na jedna, znak bude na obrazovku kreslen tak, ze se s jejim obsahem provede operace XOR. (Body na nez by se kreslil znak jsou zinvertovany.) Pokud tuto funkci pouzijete v textovem rezimu k zobrazeni vice znaku, ktere by se na radku nevesly, automaticky ve vypisovani pokracuje na zacatku dalsiho radku. V grafickem rezimu se vsechny znaky musi vejit na radku. (Pokud se nevejdou, vetsinou se presunou na dalsi radku, ale neposunou se dolu o 8 pixelu, tj. vysku znaku, ale jen o jeden pixel.) Vstup: AH = 09h Cislo sluzby AL = ASCII kod znaku BH = Cislo obrazove stranky (gr. rezim 13h pouziva tento byte k urceni barvy pozadi) BL = Atribut zobrazeni CX = Kolikrat se ma znak zobrazit Poznamka: Pozice kurzoru po zavolani teto sluzby zustava nezmenena (i v pripade vystupu nekolika znaku). Umistovani kurzoru musi program obstaravat sam. Ridici znaky jako CR, LF, BS (Backspace) jsou zobrazeny jako znaky. Jejich spravna interpretace musi byt obsazena v programu napr. pomoci zmeny pozice kurzoru. Sluzba 0ah - Zapsani znaku na pozici kurzoru ============================================ Popis: Tato sluzba je shodna se sluzbou 09h s tim rozdilem, ze nelze specifikovat atribut zobrazeni (ponecha se puvodni). Vstup: AH = 0ah Cislo sluzby AL = ASCII kod znaku BH = Pouzita obrazova stranky CX = Kolikrat se ma znak zobrazit Sluzba 0bh - Nastaveni palety barev =================================== Popis: Tato sluzba pracuje pouze v rezimech kompatibilnich s CGA. Pro nastaveni palety v EGA/VGA rezimech pouzijte sluzbu 10h. Obsah registru BH urcuje, co se vlastne bude nastavovat. Pokud obsahuje 0, nastavuje se barva pozadi (0-15) pripadne barva ramecku v textovych rezimech (0-31). Pokud BH obsahuje 1, urcuje nejmene vyznamny bit registru BL jednu ze dvou palet: zelena, cervena a hneda nebo tyrkysova, fialova a bila. Vstup: AH = 0bh Cislo sluzby BH = Vyber palety k nastaveni 0 - pozadi/ramecek 1 - nastaveni palet barev BL = pro BH = 0 - barva pozadi (0-15) v grafickych rezimech; v textovych rezimech barva ramecku (0-31) pro BH = 1 - vyber palety 0 -> zelena, cervena, hneda 1 -> tyrkysova, fialova, bila Sluzba 0ch - Zapis bod ====================== Popis: Tato sluzba slouzi k nakresleni bodu do libovolne obrazove stranky v grafickych rezimech. Pozice bodu se udava pomoci kartezskych souradnic. Levy horni roh obrazovky ma souradnice (0, 0). Nastavenim bitu 7 v byte barvy (ulozena v AL) zajistite, ze bod bude XORovan s puvodnim obsahem obrazovky. Na grafickych adapterech, ktere podporuji pouze jednu grafickou stranku, neni brano cislo obrazove stranky do uvahy (napr. CGA). Vstup: AH = 0ch Cislo sluzby AL = Barva bodu BH = Cislo obrazove stranky CX = X souradnice bodu - sloupec (0-319 nebo 0-639) DX = Y souradnice bodu - radka (0-199, 0-349 nebo 0-479) Poznamka: Tato a nasledujici sluzba jsou velmi pomale. Pokud tedy potrebujete pouzivat rychlou grafiku, musite si napsat vlastni vlastni rychle rutiny, ktere vyuzivaji vsech moznosti karet (nektere z nich jsou na konci clanku), nebo pouzit nekterou z mnoha jiz hotovych grafickych knihoven (nejznamejsi je asi BGI - Borland Graphics Interface). Sluzba 0dh - Precti bod ======================= Popis: Tato sluzba zjisti barvu libovolnehbo bodu na obrazovce. Opet pro libovolnou obrazovou stranku. Levy horni roh stinitka ma souradnice (0, 0). Na kartach CGA se cislo obrazove stranky ignoruje. Vstup: AH = 0dh Cislo sluzby BH = Cislo obrazove stranky CX = X souradnice bodu - sloupec (0-319 nebo 0-639) DX = Y souradnice bodu - radka (0-199, 0-349 nebo 0-479) Vystup: Bude obsazen v registrech po zavolani sluzby AL = Barva bodu Poznamka: Tato funkce je dost pomala. Sluzba 0eh - Zapis ridici znak do aktivni stranky ================================================= Popis: Tato sluzba slouzi k zapsani znaku na obrazovku. Narozdil od predeslych podobnych funkci je po vypsani znaku kurzor presunut na nasledujici pozici a jsou interpretovany ridici kody CR (0dh), LF (0ah), BS (08h) a bell (7) - pipnuti. Sluzba zapisuje pouze do aktualni videostranky. Barva znaku ma vyznam pouze v grafickych rezimech. Vstup: AH = 0eh Cislo sluzby AL = ASCII kod znaku BL = Barva znaku (pouze pro graficke rezimy) Sluzba 0fh - Zjisti aktualni zobrazovaci rezim ============================================== Popis: Tato sluzba zjistuje informace o aktualnim zobrazovacim rezimu. Zjistuje pocet zobrazovanych sloupcu, aktualni obrazovou stranku a cislo zobrazovaciho rezimu. Pokud byl rezim inicializovan bez mazani obrazovky (bit 7 nastaven na jedna), bude mit i zjistene cislo rezimu nastaveny bit 7. K zjisteni skutecneho cisla zobrazovaciho rezimu pak muzete pouzit instrukci AND AL, 7fh. Vstup: AH = 0fh Cislo sluzby Vystup: Bude obsazen v registrech po zavolani sluzby AL = Cislo zobrazovaciho modu AH = Pocet sloupcu obrazovky BH = Cislo aktualni obrazove stranky Priklad na zaver Nasledujici program demonstrujte pouziti nekterych ze sluzeb 00h - 0fh. Nejdrive program pomoci sluzby 0fh zjisti aktualni zobrazovaci mod. Ten ulozi pro pozdejsi pouziti pri ukoncovani programu. Videokartu prepne pomoci sluzby 00h do modu 12h (pro EGA je mozno 0fh). Pote pomoci sluzby 02h nastavi pozici kurzoru. Na teto pozici zobrazi napis "Ukazka kresleni bodu na obrazovku". Pak pod sebe postupne nakresli patnact vodorovnych car napric obrazovkou (kresli je po bodech pomoci sluzby 0ch). Jejich barvy budou postupne 15 az 1, tj. od bile az po modrou. Pak uz program ceka jen na stisk klavesy, po kterem obnovi puvodni videomod a ukonci svou cinnost. Vsimnete si, ze ve smycce na kresleni bodu je pred volanim INT 10h ulozen obsah registru a pote zase obnoven. Je to z toho duvodu, ze BIOS rutina muze zmenit obsah nekterych registru procesoru, na ktere se pozdeji odvolavame. Zamezime tak situaci, ze se program "kousne" a my nevime proc. Program lze do spustitelneho tvaru prevest sekvenci techto prikazu: TASM jmeno_souboru TLINK jmeno_souboru, pokud predtim nasledujici vypis ulozime do souboru jmeno_souboru.ASM. .286 ; pouziva nektere instrukce mp i80286 (pusha, popa) .MODEL small ; pametovy model .STACK 100h ; zasobnik .DATA ; data segment ; Text vypisovany na obrazovku + 3 pipnuti Msg db 'Ukazka kresleni bodu na obrazovku !!!',7,7,7 StrLen equ $-Msg ; delka textu OldMode db 00 ; misto na ulozeni puvodniho videomodu .CODE ; zacatek kodu programu mov AX, @data ; nastavi spravny data segment mov DS, AX mov AH, 0fh ; sluzba 0fh - Zjisteni grafickeho modu int 10h ; volani sluzby and AL, 7fh ; smazani nejvyssiho bitu mov OldMode, AL ; ulozeni puvodniho zobrazovaciho modu mov AH, 00h ; sluzba 00h - nastaveni zobrazovaciho modu mov AL, 12h ; mod 12h - grafika 640 x 480 ; pro EGA napr. 0fh - 640 x 350 int 10h ; volani sluzby mov AH, 02h ; sluzba 02h - nastaveni pozice kurzoru mov BH, 00h ; cislo obrazove stranky je 0 mov DL, 21 ; kurzor na sloupec 21 mov DH, 1 ; a radku 1 int 10h ; volani sluzby mov SI, OFFSET Msg ; v DS:SI je adresa na Msg string mov CX, StrLen ; do CX delka retezce mov AH, 0eh ; sluzba 0eh - zapsani ridiciho znaku mov BL, 0fh ; barva znaku 15 - bila WriteLoop: lodsb ; nacte znak int 10h ; vytiskne jej loop WriteLoop ; opakuje pro vsechny znaky retezce mov AH, 0ch ; sluzba 0ch - zobrazeni bodu mov BH, 00h ; cislo obrazove stranky mov DX, 100 ; Y souradnice mov CX, 639 ; X souradnice mov AL, 15 ; pocatecni barva je bila DotLoop: pusha ; ulozi registry, sluzba je muze menit int 10h ; zavolej sluzbu popa ; obnoveni registru loop DotLoop ; dokud CX > 0 kresli body ; tj. nakresli se vodorovna cara pusha ; ulozeni registru int 10h ; nakresli posledni bod popa ; obnoveni registru inc DX ; zvetsi Y souradnici mov CX, 639 ; nastav X souradnici dec AL ; zmensi cislo barvy jnz DotLoop ; dokud barva neni 0, kresli dalsi caru mov AH, 01h ; ceka na znak z klavesnice int 21h ; sluzba 01h DOS mov AH, 00h ; sluzba 00h - nastaveni zobraz. modu mov AL, OldMode ; puvodni videomod int 10h ; volani sluzby mov AH, 4ch ; ukonceni programu int 21h ; DOS sluzba 4ch END ; konec programu
Copyright © Jiri Kosek