Služby BIOS pro práci s obrazovkou
Volání BIOS
BIOS je tady k tomu, aby vám zajistil kompatibilitu
programů na různých počítačích a grafických kartách.
Samozřejmě, že můžete grafickou kartu ovládat přímo pomocí
registrů a zapisovat přímo do videopaměti. Musíte však
všechny programy psát tolikrát, kolik je různých grafických
karet, na nichž má váš program pracovat. Můžete však použít
BIOS, tomu předáte pouze parametry a on už vše udělá za vás,
ať máte v počítači jakoukoliv grafickou kartu. Je
samozřejmé, že za tuto flexibilitu zaplatíte. Tím, že BIOS
podporuje velké množství karet, nejsou jeho rutiny tak
rychlé. Nemohou totiž využívat speciálních vlastností
jednotlivých adaptérů. Pokud tedy potřebujete něco udělat
opravdu rychle a efektivně, musíte sáhnout k programování
registrů a přímému zápisu do paměti.
Volání videoslužeb BIOS se provádí pomocí interruptu
10h. Předtím než ho zavoláte, musíte do registru AH uložit
číslo služby a do ostatních registrů případné parametry,
které tato služba vyžaduje. K volání služeb BIOS je
samozřejmě nejvhodnější používat assembler, ale je možné je
volat i z vyšších programovacích jazyků. Některé
programovací jazyky umožňují přímo zapisovat do zdrojového
textu assembler. Nebo disponují funkcemi k volání služeb
BIOS (v Turbo Pascalu je to například procedura INTR).
Následující příklad nám ukáže, jak nastavit zobrazovací mód
3, tj. text 80 sloupců a 25 řádek.
Assembler:
mov AH, 00h ;služba 00h - nastavení módu
mov AL, 03h ;číslo módu
int 10h ;volání INT 10h
Turbo Pascal pomoci interního assembleru:
asm
push DS
push BP
mov AH, 00h ;služba 00h - nastavení módu
mov AL, 03h ;číslo módu
int 10h ;volání INT 10h
pop BP
pop DS
end;
pozn. Před voláním INT 10h je v interním assembleru Turbo
Pascalu vhodné uložit obsah registrů DS, BP. Tyto
registry nesmí být pro ostatní části programu změněny
a služba na INT 10h by je mohla změnit.
Turbo Pascal pomocí procedury INTR:
Var Reg: Registers;
begin
Reg.AH := 00; ;služba 00h - nastavení módu
Reg.AL := 03; ;číslo módu
Intr($10, Reg); ;volání INT 10h
end;
V případě, že některá služba vrací nějaké výsledky, jsou
opět vráceny v registrech mikroprocesoru.
Služby BIOS pro práci s obrazovkou
V této kapitole popíšeme služby 00h-00f interruptu
10h. Ty zbývající, které jsou specifické pro karty EGA a VGA
popíšeme v následující části.
Služba 00h - Nastavení zobrazovacího módu
=========================================
Popis: Funkce se používá k nastavení zobrazovacího módu
adaptéru. Mohou se pomocí ní nastavovat textové režimy
a režimy grafické: 320 x 200, 640 x 200, 640 x 350
a 640 x 480. Poté mohou být znaky na obrazovku
zapisovány pomocí služeb 09h, 0ah, 0eh, 13h. Bod můžete
zobrazit pomocí služby 0ch.
Vstup: AH = 00h Číslo služby
AL = Číslo zobrazovacího módu (podle následující
tabulky)
Mód Grafika/Text Počet barev
-------------------------------------------------
00h text 40 x 25 16 barev VGA, 16 odstínů šedi EGA
01h text 40 x 25 16 barev EGA,VGA
02h text 80 x 25 16 barev VGA, 16 odstínů šedi 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 odstíny šedi EGA
06h grafika 640 x 200 2 barvy (jedna z nich je černá)
07h text 80 x 25 monochromatické zobrazení
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
Poznámka: Na adaptéru EGA s monochromatickým monitorem
používejte pouze módy 07h a 0fh.
Pokud nejvyšší bit AL nastavíte na 1, při inicializaci
módu se zachová původní obsah obrazovky. Nastavení
nejvyššího bitu provede tak, že k číslu módu uloženému
v registru AL přičtete hodnotu 80h.
Služba 01h - Nastavení tvaru textového kurzoru
==============================================
Popis: Tato funkce slouží k definování tvaru kurzoru. Můžete
určit počáteční a koncovou řádku, mezi kterými bude
vybarvena obdélníková část znakového boxu. Kurzor tedy
nemusí začínat na první a končit na poslední řádce.
Může být klidně ve středu znakového boxu. V grafických
módech kurzor není.
Počáteční a koncová řádka kurzoru jsou uloženy v pěti
nejnižších bitech. Bity 7, 6 a 5 by měly vždy obsahovat
nulu (na adaptérech EGA a VGA, na ostatních určují
rychlost blikání kurzoru). Pokud chcete kurzor učinit
neviditelným, nastavte jeho konec i počátek pod znakový
box (tj. obě hodnoty budou větší než 7). Pokud na EGA
nastavíte počáteční řádku větší než koncovou, objeví se
kurzor jako dvě čárky nad sebou (inverze kurzoru, který
by se objevil, pokud by počáteční a koncová řádka byly
vyměněny). Adaptér VGA tento trik neumožňuje. Pokud je
počáteční řádka větší než koncová, kurzor se neobjeví.
Jelikož starší textové módy podporovaly pouze
osmiřádkový kurzor, musel být v zájmu zachování
kompatibility udělán kompromis na novějších textových
módech, které podporují znaky se 14 nebo 16 řádky.
Pokud je číslo řádku 0-3 považuje se za horní řádek
a pokud je 4-7, považuje se za dolní (hodnota 4-7 pak
podle adaptéru odpovídá řádkům 10-13 - EGA , případně
12-15 - VGA). Pokud interval definice kurzoru
obsahuje i řádky 4 a 5 (v registrech uloženo jako
3 a 4) vyplní se i prostor mezi nimi.
Vstup: AH = 01h Číslo služby
CH = Počáteční řádka kurzoru (bity 0-4)
CL = Koncová řádka kurzoru (bity 0-4)
Služba 02h - Nastavení pozice kurzoru
=====================================
Popis: Nastaví pozici kurzoru na obrazovce. Řádka 0 je horní
řádka obrazovky a sloupec 0 je sloupec nejvíce vlevo na
obrazovce.
Vstup: AH = 02h Číslo služby
DL = Číslo řádky
DH = Číslo sloupce
BH = Číslo stránky (vysvětlení co je stránka
naleznete u popisu služby 05h)
Služba 03h - Čtení pozice a velikosti kurzoru
=============================================
Popis: Čte aktuální souřadnice kurzoru v dané stránce.
Zjistí také velikost kurzoru (tak jak byl definován
službou 01h).
Vstup: AH = 03h Číslo služby
BH = Číslo stránky
Výstup: Bude obsažen v registrech po zavolání služby
DH = Aktuální řádka, na které je kurzor
DL = Aktuální sloupec, ve kterém je kurzor
CH = Počáteční řádka kurzoru
CL = Koncová řádka kurzoru
Služba 04h - Čtení pozice světelného pera
=========================================
Popis: Tato služba zjišťuje souřadnice světelného pera v
okamžiku, kdy bylo stisknuto jeho tlačítko. Pokud je
aktuální zobrazovací režim 4-6, grafický řádek je
vracen v registru CH. Pokud používate nové EGA módy,
číslo grafické řádky služba uloží do registru CX.
Vstup: AH = 04h Číslo služby
Výstup: Bude obsažen v registrech po zavolání služby
AH = 0 Nebylo stisknuto tlačítko na světelném
peru, informace v ostatních registrech jsou
neplatné.
= 1 Bylo stisknuto tlačítko na světelném peru,
informace v registrech platí.
DH = Znaková řádka
DL = Znakový sloupec
CH = Grafická řádka (v módech 4-6)
CX = Grafická řádka v nových EGA režimech
BX = Grafický sloupec
Poznámka: Karta VGA nepodporuje práci se světelným perem.
Volání této služby, pokud máte VGA kartu postrádá
jakýkoliv smysl.
Služba 05h - Výběr aktivní obrazové stránky
===========================================
Popis: Adaptér může mít v paměti najednou několik stránek
(obsahů obrazovky). Ale pouze jedna z těchto stránek
může být zobrazována. U většiny funkcí BIOS, které
zapisují znaky na obrazovku, kreslí bod, přesouvají
kurzor atd., si můžete zvolit, do které stránky se
její výstup promítne. Využijete-li této schopnosti
grafické karty, můžete jednu stránku zobrazovat a ve
druhé provádět změny. Pak obě stránky přepnout a nová
stránka se zobrazí okamžitě bez pomalého
vykreslování. Toto se dá výhodně uplatnit například
při animaci.
Tato služba vám umožní zvolit stránku, která se bude
zobrazovat. Obvykle se zobrazuje stránka 0 a do ní se
také provádějí všechny změny.
Vstup: AH = 05h Číslo služby
AL = Číslo stránky, která se má zobrazit
Poznámka: Čísla stránek dostupných v různých
zobrazovacích režimech udává následující tabulka.
Pokud obsahuje 0 znamená to, že je dostupná jedna
stránka s číslem 0, atd.
Mód 64K 128K 256K - Velikost paměti videoadaptéru
---------------------
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
Všechny karty VGA mají nejméně 256K paměti, tzn.
platí pro ně poslední sloupec tabulky.
Služba 06h - Rolování aktivní obrazové stránky nahoru
=====================================================
Popis: Tato funkce roluje obsah obrazovky zezdola nahorů. Do
spodní části obrazovky jsou vkládány prázdné řádky.
Můžete specifikovat levý horní a pravý dolní roh
okénka a rolování pak bude probíhat pouze v něm a ne
na celé ploše obrazovky. Tato funkce pracuje pouze s
aktivní obrazovou stránkou.
Pokud zadáte jako počet řádek k odrolování 0, smaže
se celá obrazovka (okno).
Vstup: AH = 06h Číslo služby
AL = Počet řádek k odrolování (0 maže celé okno)
BH = Atribut znaků přidaváných jako nová řádka (viz.
služba 08h)
CH = Horní okraj okna (číslo řádky)
CL = Levý okraj okna (číslo sloupce)
DH = Dolní řádka okna (číslo řádky)
DL = Pravý okraj okna (číslo sloupce)
Služba 07h - Rolování aktivní obrazové stránky dolů
===================================================
Popis: Tato funkce roluje obsah okénka dolů. Prázdné řádky
jsou vkládány na horním okraji okna. Tato služba
pracuje stejně jako služba 06h, pouze směr rolování
textu je opačný.
Vstup: AH = 07h Číslo služby
AL = Počet řádek k odrolování (0 maže celé okno)
BH = Atribut znaků přidaváných jako nová řádka (viz.
služba 08h)
CH = Horní okraj okna (číslo řádky)
CL = Levý okraj okna (číslo sloupce)
DH = Dolní řádka okna (číslo řádky)
DL = Pravý okraj okna (číslo sloupce)
Služba 08h - Čtení znaku a jeho atributu na pozici kurzoru
==========================================================
Popis: Tato funkce slouží k zjištění kódu a atributu znaku
na aktuální pozici kurzoru v libovolné obrazovové
stránce. Atribut znaku je jeden byte dlouhá informace
o způsobu zobrazení znaku podle následující tabulky:
/------------------------------------------------\
|blikání| barva pozadí | inten- | barva znaku |
| | | zita | |
|-------+----------------+--------+--------------|
MSB | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
\------------------------------------------------/
Pro barevné monitory je přiřazení barev následující:
Bity 4-6 (barva pozadí):
000 černá 100 červená
001 modrá 101 fialová
010 zelená 110 hnědá
011 tyrkysová 111 bílá
Bity 0-3 (barva znaku):
0000 černá 1000 tmavě šedá
0001 modrá 1001 světle modrá
0010 zelená 1010 světle zelená
0011 tyrkysová 1011 světle tyrkysová
0100 červená 1100 světle červená
0101 fialová 1101 světle fialová
0110 hnědá 1110 žlutá
0111 světle šedá 1111 bílá
Na monochromatických monitorech (není myšlen
černobílý monitor, který se u nás často používá
v kombinaci s VGA kartou) by barva pozadí měla být
buď 0 (černá) nebo 111b=07h (barevná). Barva znaku
000b odpovídá černé, 001b - znak bude podtržený a
111b - znak bude barevný. Hodnota atributu má význam
pouze v textových režimech.
Vstup: AH = 08h Číslo služby
BH = Číslo obrazové stránky
Výstup: Bude obsažen v registrech po zavolání služby
AL = ASCII kód znaku
AH = Atribut znaku (pouze v textovém režimu)
Poznámka: U popisu služeb 10h a 11h naleznete mnoho dalších
informací o atributech a znakových sadách.
Bit určující blikání může být přeprogramován tak, aby
určoval intenzitu barvy pazadí (pro pozadí pak můžeme
použít také 16 barev). Toto nastavení lze provést
pomocí CRTC registrů nebo voláním služby 10h a funkce
03h interruptu 10h.
Bit určující intenzitu barvy znaku může být
přeprogramován tak, aby určoval jednu ze dvou
znakových sad, z kterých se získávají informace o
tvaru znaku. Můžete tak v textovém režimu používat
najednou 512 znaků.
Služba 09h - Zapsání znaku a atributu na pozici kurzoru
=======================================================
Popis: Tuto službu můžete použít k zapsání znaku (nebo
několika stejných znaků) do libovolné z obrazových
stránek. Znak se objeví na pozici kurzoru, kterou
můžete nastavit pomocí služby 02h.
Atribut znaku má následující význam (pro textové
režimy):
/------------------------------------------------\
|blikání| barva pozadí | inten- | barva znaku |
| | | zita | |
|-------+----------------+--------+--------------|
MSB | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
\------------------------------------------------/
Pro barevné monitory je přiřazení barev následující:
Bity 4-6 (barva pozadí):
000 černá 100 červená
001 modrá 101 fialová
010 zelená 110 hnědá
011 tyrkysová 111 bílá
Bity 0-3 (barva znaku):
0000 černá 1000 tmavě šedá
0001 modrá 1001 světle modrá
0010 zelená 1010 světle zelená
0011 tyrkysová 1011 světle tyrkysová
0100 červená 1100 světle červená
0101 fialová 1101 světle fialová
0110 hnědá 1110 žlutá
0111 světle šedá 1111 bílá
Na monochromatických monitorech (není myšlen
černobílý monitor, který se u nás často používá
v kombinaci s VGA kartou) by barva pozadí měla být
buď 0 (černá) nebo 111b=07h (barevná). Barva znaku
000b odpovídá černé, 001b - znak bude podtržený a
111b - znak bude barevný.
V grafickém režimu se byte atributu používá k určení
barvy znaku. Pokud s barvou zároveň nastavíte bit 7
na jedna, znak bude na obrazovku kreslen tak, že se s
jejím obsahem provede operace XOR. (Body na než by se
kreslil znak jsou zinvertovány.)
Pokud tuto funkci použijete v textovém režimu k
zobrazení více znaků, které by se na řádku nevešly,
automaticky ve vypisování pokračuje na začátku
dalšího řádku. V grafickém režimu se všechny znaky
musí vejít na řádku. (Pokud se nevejdou, většinou se
přesunou na další řádku, ale neposunou se dolů o 8
pixelů, tj. výšku znaku, ale jen o jeden pixel.)
Vstup: AH = 09h Číslo služby
AL = ASCII kód znaku
BH = Číslo obrazové stránky (gr. režim 13h používá
tento byte k určení barvy pozadí)
BL = Atribut zobrazení
CX = Kolikrát se má znak zobrazit
Poznámka: Pozice kurzoru po zavolání této služby zůstává
nezměněna (i v případě výstupu několika znaků).
Umísťování kurzoru musí program obstarávat sám.
Řídící znaky jako CR, LF, BS (Backspace) jsou
zobrazeny jako znaky. Jejich správná interpretace
musí být obsažena v programu např. pomocí změny
pozice kurzoru.
Služba 0ah - Zapsání znaku na pozici kurzoru
============================================
Popis: Tato služba je shodná se službou 09h s tím rozdílem,
že nelze specifikovat atribut zobrazení (ponechá se
původní).
Vstup: AH = 0ah Číslo služby
AL = ASCII kód znaku
BH = Použitá obrazová stránky
CX = Kolikrát se má znak zobrazit
Služba 0bh - Nastavení palety barev
===================================
Popis: Tato služba pracuje pouze v režimech kompatibilních s
CGA. Pro nastavení palety v EGA/VGA režimech použijte
službu 10h.
Obsah registru BH určuje, co se vlastně bude
nastavovat. Pokud obsahuje 0, nastavuje se barva
pozadí (0-15) případně barva rámečku v textových
režimech (0-31). Pokud BH obsahuje 1, určuje nejméně
významný bit registru BL jednu ze dvou palet:
zelená, červená a hnědá nebo tyrkysová, fialová
a bílá.
Vstup: AH = 0bh Číslo služby
BH = Výběr palety k nastavení
0 - pozadí/rámeček
1 - nastavení palet barev
BL = pro BH = 0 - barva pozadí (0-15) v grafických
režimech; v textových režimech barva
rámečku (0-31)
pro BH = 1 - výběr palety
0 -> zelená, červená, hnědá
1 -> tyrkysová, fialová, bílá
Služba 0ch - Zapiš bod
======================
Popis: Tato služba slouží k nakreslení bodu do libovolné
obrazové stránky v grafických režimech. Pozice bodu
se udává pomocí kartézských souřadnic. Levý horní roh
obrazovky má souřadnice (0, 0).
Nastavením bitu 7 v byte barvy (uložena v AL)
zajistíte, že bod bude XORován s původním obsahem
obrazovky.
Na grafických adaptérech, které podporují pouze jednu
grafickou stránku, není bráno číslo obrazové stránky
do úvahy (např. CGA).
Vstup: AH = 0ch Číslo služby
AL = Barva bodu
BH = Číslo obrazové stránky
CX = X souřadnice bodu - sloupec (0-319 nebo 0-639)
DX = Y souřadnice bodu - řádka (0-199, 0-349 nebo
0-479)
Poznámka: Tato a následující služba jsou velmi pomalé. Pokud
tedy potřebujete používat rychlou grafiku, musíte si
napsat vlastní vlastní rychlé rutiny, které
využívají všech možností karet (některé z nich jsou
na konci článku), nebo použít některou z mnoha již
hotových grafických knihoven (nejznámější je asi BGI
- Borland Graphics Interface).
Služba 0dh - Přečti bod
=======================
Popis: Tato služba zjistí barvu libovolnéhbo bodu na
obrazovce. Opět pro libovolnou obrazovou stránku.
Levý horní roh stínítka má souřadnice (0, 0).
Na kartách CGA se číslo obrazové stránky ignoruje.
Vstup: AH = 0dh Číslo služby
BH = Číslo obrazové stránky
CX = X souřadnice bodu - sloupec (0-319 nebo 0-639)
DX = Y souřadnice bodu - řádka (0-199, 0-349 nebo
0-479)
Výstup: Bude obsažen v registrech po zavolání služby
AL = Barva bodu
Poznámka: Tato funkce je dost pomalá.
Služba 0eh - Zapiš řídící znak do aktivní stránky
=================================================
Popis: Tato služba slouží k zapsání znaku na obrazovku.
Narozdíl od předešlých podobných funkcí je po vypsání
znaku kurzor přesunut na následující pozici a jsou
interpretovány řídící kódy CR (0dh), LF (0ah), BS
(08h) a bell (7) - pípnutí.
Služba zapisuje pouze do aktuální videostránky. Barva
znaku má význam pouze v grafických režimech.
Vstup: AH = 0eh Číslo služby
AL = ASCII kód znaku
BL = Barva znaku (pouze pro grafické režimy)
Služba 0fh - Zjisti aktuální zobrazovací režim
==============================================
Popis: Tato služba zjišťuje informace o aktuálním
zobrazovacím režimu. Zjišťuje počet zobrazovaných
sloupců, aktuální obrazovou stránku a číslo
zobrazovacího režimu. Pokud byl režim inicializován
bez mazání obrazovky (bit 7 nastaven na jedna), bude
mít i zjištěné číslo režimu nastavený bit 7.
K zjištění skutečného čísla zobrazovacího režimu pak
můžete použít instrukci AND AL, 7fh.
Vstup: AH = 0fh Číslo služby
Výstup: Bude obsažen v registrech po zavolání služby
AL = Číslo zobrazovacího módu
AH = Počet sloupců obrazovky
BH = Číslo aktuální obrazové stránky
Příklad na závěr
Následující program demonstrujte použití některých ze
služeb 00h - 0fh. Nejdříve program pomocí služby 0fh zjistí
aktuální zobrazovací mód. Ten uloží pro pozdější použití při
ukončování programu. Videokartu přepne pomocí služby 00h do
módu 12h (pro EGA je možno 0fh). Poté pomocí služby 02h
nastaví pozici kurzoru. Na této pozici zobrazí nápis "Ukázka
kreslení bodů na obrazovku". Pak pod sebe postupně nakreslí
patnáct vodorovných čar napříč obrazovkou (kreslí je po
bodech pomocí služby 0ch). Jejich barvy budou postupně 15 až
1, tj. od bílé až po modrou. Pak už program čeká jen na
stisk klávesy, po kterém obnoví původní videomód a ukončí
svou činnost.
Všimněte si, že ve smyčce na kreslení bodů je
před voláním INT 10h uložen obsah registrů a poté zase
obnoven. Je to z toho důvodu, že BIOS rutina může změnit
obsah některých registrů procesoru, na které se později
odvoláváme. Zamezíme tak situaci, že se program "kousne"
a my nevíme proč.
Program lze do spustitelného tvaru převést sekvencí
těchto příkazů:
TASM jméno_souboru
TLINK jméno_souboru,
pokud předtím následující výpis uložíme do souboru
jméno_souboru.ASM.
.286 ; používá některé instrukce mp i80286 (pusha, popa)
.MODEL small ; paměťový model
.STACK 100h ; zásobník
.DATA ; data segment
; Text vypisovaný na obrazovku + 3 pípnutí
Msg db 'Ukázka kreslení bodů na obrazovku !!!',7,7,7
StrLen equ $-Msg ; délka textu
OldMode db 00 ; místo na uložení původního videomódu
.CODE ; začátek kódu programu
mov AX, @data ; nastaví správný data segment
mov DS, AX
mov AH, 0fh ; služba 0fh - Zjištění grafického módu
int 10h ; volání služby
and AL, 7fh ; smazání nejvyššího bitu
mov OldMode, AL ; uložení původního zobrazovacího módu
mov AH, 00h ; služba 00h - nastavení zobrazovacího módu
mov AL, 12h ; mód 12h - grafika 640 x 480
; pro EGA např. 0fh - 640 x 350
int 10h ; volání služby
mov AH, 02h ; služba 02h - nastavení pozice kurzoru
mov BH, 00h ; číslo obrazové stránky je 0
mov DL, 21 ; kurzor na sloupec 21
mov DH, 1 ; a řádku 1
int 10h ; volání služby
mov SI, OFFSET Msg ; v DS:SI je adresa na Msg string
mov CX, StrLen ; do CX délka řetězce
mov AH, 0eh ; služba 0eh - zapsání řídícího znaku
mov BL, 0fh ; barva znaku 15 - bílá
WriteLoop:
lodsb ; načte znak
int 10h ; vytiskne jej
loop WriteLoop ; opakuje pro všechny znaky řetězce
mov AH, 0ch ; služba 0ch - zobrazení bodu
mov BH, 00h ; číslo obrazové stránky
mov DX, 100 ; Y souřadnice
mov CX, 639 ; X souřadnice
mov AL, 15 ; počáteční barva je bílá
DotLoop:
pusha ; uloží registry, služba je může měnit
int 10h ; zavolej službu
popa ; obnovení registrů
loop DotLoop ; dokud CX > 0 kresli body
; tj. nakreslí se vodorovná čára
pusha ; uložení registrů
int 10h ; nakresli poslední bod
popa ; obnovení registrů
inc DX ; zvětši Y souřadnici
mov CX, 639 ; nastav X souřadnici
dec AL ; zmenši číslo barvy
jnz DotLoop ; dokud barva není 0, kresli další čáru
mov AH, 01h ; čeká na znak z klávesnice
int 21h ; služba 01h DOS
mov AH, 00h ; služba 00h - nastavení zobraz. módu
mov AL, OldMode ; původní videomód
int 10h ; volání služby
mov AH, 4ch ; ukončení programu
int 21h ; DOS služba 4ch
END ; konec programu
[Pokračování] |
[Obsah]
Copyright © Jiří Kosek