Typy a triky
       aneb n∞kolik u₧iteΦn²ch rad pro programovßnφ
                     grafick²ch karet

     V nßsledujφcφch n∞kolika odstavcφch se zmφnφm o
n∞kolika nejΦast∞jÜφch problΘmech a otßzkßch, kterΘ
vyvstanou p°i psanφ program∙ pracujφcφh p°φmo s registry
a videopam∞tφ. Zßrove≥ se dozvφte, jakΘ je jejich °eÜenφ,
jakß je na n∞ odpov∞∩.

Jak zvolit sprßvn² zapisovacφ m≤d ?
     P°i kreslenφ na obrazovku v grafick²ch re₧imech jsme
postaveni p°ed zßsadnφ problΘm, kter² ze dvou nabφzen²ch
zapisovacφch m≤d∙ zvolit. Ve v∞tÜin∞ p°φpad∙ se jako
v²hodn∞jÜφ jevφ pou₧φt zapisovacφ re₧im 2, kter² umo₧≥uje
nastavit barvu bod∙ pouze jednφm zßpisem. Nesmφme vÜak
zapomenout nastavit na konci programu zp∞t zapisovacφ re₧im
0, kter² je po₧adovßn pro korektnφ prßci slu₧eb BIOS.

Jak co nejoptimßln∞ni p°istupovat k videopam∞ti ?
     Procesory Intel 80x86 adresujφ pam∞¥ po 64K segmentech
se vÜemi z toho plynoucφmi v²hodami a nev²hodami. Pokud
zapisujete do videopam∞ti, musφ n∞jak² segmentov² registr
obsahovat hodnotu segmentu videopam∞ti. Obvykle registr DS
obsahuje datov² segment programu a ES obsahuje segment
videopam∞ti. P°i p°φstupu k videopam∞ti se pak pou₧φvß
explicitnφho urΦenφ segmentu (instrukce ve tvaru MOV
ES:[BX], AL). Instrukce v tomto tvaru zap°φΦinφ p°idßnφ k≤du
prefixu segmetu p°ed vlastnφ instrukΦnφ k≤d. To samoz°ejm∞
vede ke zpomalenφ provßd∞nφ instrukce. Je tedy v₧dy dobrΘ
zjistit, zda v rßmci n∞jakΘho dφlΦφho ·seku programu
nep°istupujeme Φast∞ji k videopam∞ti ne₧ k datovΘmu segmentu
programu a pokud tomu tak je, pak je v²hodnΘ umφstit alespo≥
doΦasn∞ segment obrazovΘ pam∞ti do registru DS.
     DalÜφ zpomalenφ p°φstupu do videopam∞ti je zap°φΦin∞no
hardwarovou konstrukcφ adaptΘru. O p°φstup k videopam∞ti se
d∞lφ adaptΘr s procesorem, p°φstup k nφ je tedy mnohem
pomalejÜφ ne₧ ke konvenΦnφ pam∞ti. NaÜφ snahou by m∞lo b²t
omezenφ p°φstupu k videopam∞ti, kterΘ n∞kdy lze provΘst,
n∞kdy je naopak velmi obtφ₧nΘ. P°φklad tohoto druhu
optimalizace je uveden v rutin∞ na kreslenφ Φßry uvedenΘ na
konci Φlßnku. JenotlivΘ body, kterΘ pat°φ do stejnΘho byte
videopam∞ti se zde shroma₧∩ujφ a zapφÜφ se jako celek.
Oproti verzi, kterß k videopam∞ti p°istupuje po ka₧dΘm bodu,
m∙₧eme zaznamenat a₧ osminßsobnΘ zmenÜenΘ poΦtu p°φstup∙ do
pam∞ti (tento p°φpad nastane v p°φpad∞ kreslenφ horizontßlnφ
Φßry). Odpovφdajφcφm zp∙sobem se zv∞tÜφ i rychlost rutiny,
proto₧e vzhledem k jednoduchosti v²poΦt∙ je poΦet p°φstup∙
k pomalΘ pam∞ti rozhodujφcφ.
     DalÜφm zlepÜovßkem (op∞t pou₧it²m v rutin∞ pro kreslenφ
Φßry) je snφ₧enφ poΦtu instrukcφ procesoru pot°ebn²ch k
modifikaci videopam∞ti. Tφmto snφ₧enφm dosßhneme i zrychlenφ
programu. ╚asto pou₧φvanou sekvenci p°φkaz∙:
     MOV   AL, [BX]    ; naΦtenφ latch-registr∙
     MOV   [BX], AH    ; zßpis hodnoty v AH do videopam∞ti
m∙₧eme nahradit mnohem kratÜφ:
     XCHG  [BX], AH    ; nejprve se naΦtou latch-registry
                         a potΘ bude do pam∞ti zapsßna
                         hodnota registru AL
Nesmφme zapomenout na to, ₧e po provedenφ instrukce XCHG
nem∙₧eme °φci nic urΦitΘho o obsahu registru AH (p°φpadn∞
n∞jakΘho jinΘho pou₧itΘho). P°ed ka₧d²m p°φstupem do pam∞ti
musφme registr znovu naplnit Φφslem barvy (zapisovacφ re₧im
2) nebo bitovou maskou (zapisovacφ re₧im 0).

Detekce instalovanΘ grafickΘ karty
     Ka₧d² program by ma svΘm samΘm zaΦßtku m∞l zjistit zda
mß dostupnΘ vÜechny technickΘ prost°edky pot°ebnΘ pro svojφ
sprßvnou Φinnost. Jednφm z nich je i grafickß karta. Pro
testovßnφ p°φtomnosti nßm nabφzφ Φasto postaΦujφcφ mo₧nosti
sßm BIOS. Pro zjiÜt∞nφ karty VGA m∙₧eme pou₧φt slu₧bu 1ah
funkci 00h - Φtenφ kombinace monitor∙. Pokud funkce vrßtila
v registru AL hodnotu 1ah, je instalovßna karta VGA. Pokud
ne, m∙₧eme se posunout o ·rove≥ nφ₧ a testovat p°φtomnost
EGA funkcφ 10h slu₧by 12h. Pokud po zavolßnφ funkce bude
nastaven registr BL na hodnotu 0-3, je v systΘmu p°φtomna
EGA.
     Jeliko₧ n∞kterΘ grafickΘ karty nejsou ·pln∞
kompatibilnφ a nemusejφ vracet sprßvnΘ hodnoty po volßnφ
slu₧eb BIOS, m∞l by program umo₧≥ovat p°ekr²t automatickou
detekci. NejlΘpe pomocφ parametru programu nebo
konfiguraΦnφho souboru, kde by byla zapsßna informace o
typu pou₧itΘho adaptΘru.

[PokraΦovßnφ] | [Obsah]


Copyright © Ji°φ Kosek