kciya ustanovki vektora MOV AL,1FH ;nomer izmenyaemogo vektora INT 21H ;ustanovka vektora POP DS ;vosstanavlivaem DS ;---pechat' simvolov MOV AH,2 ;nomer funkcii MOV DL,128 ;pervyj simvol INT 21H ;vyvod ego MOV DL,129 ;vtoroj simvol INT 21H ;vyvod ego Dlya EGA funkciya 11H preryvaniya 10H manipuliruet naborom simvo- lov. |ta funkciya mozhet byt' ochen' slozhnoj, kogda ona ispol'zuetsya dlya sozdaniya special'nyh rezhimov ekrana, no ee osnovnoe primene- nie dostatochno prostoe. Imeetsya chetyre podfunkcii. Kogda AL raven 0, to dannye, opredelyaemye pol'zovatelem perenosyatsya iz pamyati v special'nyj blok simvolov. Kogda AL raven 1 ili 2, to nabory dannyh dlya simvolov 8*14 i 8*8 sootvetstvenno kopiruyutsya iz PZU v blok simvolov. Kogda AL raven 3, to funkciya ustanavlivaet nazna- chenie bloka v registre vybora karty simvolov, kak opisano vyshe. V poslednem sluchae nado prosto pomestit' sootvestvuyushchie dannye v BL i vyzvat' funkciyu. Dlya zagruzki dannyh iz PZU pomestite nomer bloka v BL i vypolnite funkciyu. Dlya zagruzki svoih dannyh nado chtoby ES:BP ukazyvali na nih, chislo peredavaemyh simvolov dolzhno byt' v CX, smeshchenie (nomer simvola) v bloke dolzhno byt' v DX, chislo bajtov na simvol - v BH, a nomer bloka - v BL. Posle etogo vyzyvajte preryvanie 10H. Vot primer: ;---ustanavlivaem 128 pol'zovatel'skih simvolov v bloke 0 MOV AX,SEG CHARACTER_DATA ;ES:BP dolzhny ukazyvat' na dannye MOV ES,AX ; MOV BP,OFFSET CHARACTER_DATA ; MOV CX,128 ;chislo simvolov MOV DX,128 ;nachal'noe smeshchenie MOV BL,0 ;nomer bloka MOV BH,8 ;matrica 8*8 MOV AL,1 ;nomer podfunkcii MOV AH,11H ;nomer funkcii INT 10H ;perenosim dannye 4.3.5 Svodka dannyh dlya opisaniya simvolov. Nizhe privedeny 8-bajtnye posledovatel'nosti, neobhodimye dlya opisaniya simvolov dlya cvetnogo graficheskogo adaptora. Ih ispol'- zovanie ob®yasneno v [4.3.4]. Kod ASCII Simvol Posledovatel'nost' (16-naya) 128 A 78 CC C0 CC 78 18 0C 78 129 B 00 CC 00 CC CC CC 7E 00 130 V 1C 00 78 CC FC C0 78 00 131 G 7E C3 3C 06 3E 66 3F 00 132 D CC 00 78 0C 7C CC 7E 00 133 E E0 00 78 0C 7C CC 7E 00 134 ZH 30 30 78 0C 7C CC 7E 00 135 Z 00 00 78 0C 7C CC 7E 00 136 I 7E C3 3C 66 7E 60 3C 00 137 J CC 00 78 CC FC C0 78 00 138 K E0 00 78 CC FC C0 78 00 139 L CC 00 70 30 30 30 78 00 140 M 7C C6 38 18 18 18 3C 00 141 N E0 00 70 30 30 30 78 00 142 O C6 38 6C C6 FE C6 C6 00 143 P 30 30 00 78 CC FC CC 00 144 R 1C 00 FC 60 78 60 FC 00 145 S 00 00 7F 0C 7F CC 7F 00 146 T 3E 6C CC FE CC CC CE 00 147 U 78 CC 00 78 CC CC 78 00 148 F 00 CC 00 78 CC CC 78 00 149 H 00 E0 00 78 CC CC 78 00 150 C 78 CC 00 CC CC CC 7E 00 151 CH 00 E0 00 CC CC CC 7E 00 152 SH 00 CC 00 CC CC 7C 0C F8 153 SHCH C3 18 3C 66 66 3C 18 00 154 ¬ CC 00 CC CC CC CC 78 00 155 Y 18 18 7E C0 C0 7E 18 18 156 X 38 6C 64 F0 60 E6 FC 00 157 | CC CC 78 FC 30 FC 30 30 158 YU F8 CC CC FA C6 CF C6 C7 159 YA 0E 1B 18 3C 18 18 D8 70 160 a 1C 00 78 00 7C CC 7E 00 161 b 38 00 70 30 30 30 78 00 162 v 00 1C 00 78 CC CC 78 00 163 g 00 1C 00 CC CC CC 7E 00 164 d 00 F8 00 F8 CC CC CC 00 165 e FC 00 CC EC FC DC CC 00 166 zh 3C 6C 6C 3E 00 7E 00 00 167 z 38 6C 6C 38 00 7C 00 00 168 i 30 00 30 60 C0 CC 78 00 169 j 00 00 00 FC C0 C0 00 00 170 k 00 00 00 FC 0C 0C 00 00 171 l C3 C6 CC DE 33 66 CC 0F 172 m C3 C6 CC DB 37 6F CF 03 173 n 18 18 00 18 18 18 18 00 174 o 00 33 66 CC 66 33 00 00 175 p 00 CC 66 33 66 CC 00 00 176 ° 22 88 22 88 22 88 22 88 177 ± 55 AA 55 AA 55 AA 55 AA 178 ² DB 77 DB EE DB 77 DB EE 179 ³ 18 18 18 18 18 18 18 18 180 ´ 18 18 18 18 F8 18 18 18 181 µ 18 18 F8 18 F8 18 18 18 182 ¶ 36 36 36 36 F6 36 36 36 183 · 00 00 00 00 FE 36 36 36 184 ¸ 00 00 F8 18 F8 18 18 18 185 ¹ 36 36 F6 06 F6 36 36 36 186 º 36 36 36 36 36 36 36 36 187 » 00 00 FE 06 F6 36 36 36 188 ¼ 36 36 F6 06 FE 00 00 00 189 ½ 36 36 36 36 FE 00 00 00 190 ¾ 18 18 F8 18 F8 00 00 00 191 ¿ 00 00 00 00 F7 18 18 18 192 A 18 18 18 18 1F 00 00 00 193 B 18 18 18 18 FF 00 00 00 194 V 00 00 00 00 FF 18 18 18 195 G 18 18 18 18 1F 18 18 18 196 D 00 00 00 00 FF 00 00 00 197 E 18 18 18 18 FF 18 18 18 198 ZH 18 18 1F 18 1F 18 18 18 199 Z 36 36 36 36 37 36 36 36 200 I 36 36 37 30 3F 00 00 00 201 J 00 00 3F 30 37 36 36 36 202 K 36 36 F7 00 FF 00 00 00 203 L 00 00 FF 00 F7 36 36 36 204 M 36 36 37 30 37 36 36 36 205 N 00 00 FF 00 FF 00 00 00 206 O 36 36 F7 00 F7 36 36 36 207 P 18 18 FF 00 FF 00 00 00 208 R 36 36 36 36 FF 00 00 00 209 S 00 00 FF 00 FF 18 18 18 210 T 00 00 00 00 FF 36 36 36 211 U 36 36 36 36 3F 00 00 00 212 F 18 18 1F 18 1F 00 00 00 213 H 00 00 1F 18 1F 18 18 18 214 C 00 00 00 00 3F 36 36 36 215 CH 36 36 36 36 FF 36 36 36 216 SH 18 18 FF 18 FF 18 18 18 217 SHCH 18 18 18 18 F8 00 00 00 218 ¬ 00 00 00 00 1F 18 18 18 219 Y FF FF FF FF FF FF FF FF 220 X 00 00 00 00 FF FF FF FF 221 | F0 F0 F0 F0 F0 F0 F0 F0 222 YU 0F 0F 0F 0F 0F 0F 0F 0F 223 YA FF FF FF FF 00 00 00 00 224 r 00 00 76 DC CB DC 76 00 225 s 00 78 CC F8 CC F8 C0 C0 226 t 00 CC C0 C0 C0 C0 00 00 227 u 00 FE 6C 6C 6C 6C 6C 00 228 f FC CC 60 30 60 CC FC 00 229 h 00 00 7E D8 D8 D8 70 00 230 c 00 66 66 66 66 7C 60 C0 231 ch 00 76 DC 18 18 18 18 00 232 sh FC 30 78 CC CC 78 30 FC 233 shch 38 6C C6 FE C6 6C 38 00 234 ® 38 6C C6 C6 6C 6C EE 00 235 y 1C 30 18 7C CC CC 78 00 236 ' 00 00 7E DB DB 7E 00 00 237 e 06 0C 7E DB DB 7E 60 C0 238 yu 38 60 C0 F8 C0 60 38 00 239 ya 78 CC CC CC CC CC CC 00 240 ¨ 00 FC 00 FC 00 FC 00 00 241 ¸ 30 30 FC 30 30 00 FC 00 242 t 60 30 18 30 60 00 FC 00 243 u 18 30 60 30 18 00 FC 00 244 f 0E 1B 1B 18 18 18 18 18 245 h 18 18 18 18 18 D8 D8 70 246 c 30 30 00 FC 00 30 30 00 247 ch 00 76 DC 00 76 DC 00 00 248 sh 38 6C 6C 38 00 00 00 00 249 shch 00 00 00 18 18 00 00 00 250 ® 00 00 00 00 18 00 00 00 251 y 0F 0C 0C 0C EC 6C 3C 1C 252 ' 78 6C 6C 6C 6C 00 00 00 253 e 70 18 30 60 78 00 00 00 254 yu 00 00 3C 3C 3C 3C 00 00 255 00 00 00 00 00 00 00 00 Razdel 4. Vyvod tochechnoj grafiki. Cvetnoj graficheskij adaptor imeet tri graficheskih rezhima, PCjr - shest', a EGA - sem'. Kak ustanavlivat' eti rezhimy pokazano v [4.1.2]. Trebovaniya k razmeru pamyati sushchestvenno otlichayutsya dlya razlichnyh rezhimov, v zavisimosti ot razresheniya ekrana i chisla ispol'zuemyh cvetov. V svoih uluchshennyh graficheskih rezhimah EGA ispol'zuet pamyat' displeya sovsem po-drugomu, chem ostal'nye video- sistemy, no on tochno emuliruet ih ispol'zovanie pamyati pri rabote v treh obshchih rezhimah. Snachala rassmotrim cvetnoj adaptor i sistemu PCjr. Dva cveta (chernyj i belyj) trebuyut tol'ko odin bit pamyati dlya kazhdoj tochki na ekrane. CHetyre cveta zanimayut 2 bita, a 16 cvetov - 4 (8-cvet- nye rezhimy ne ispol'zuyutsya, poskol'ku tri bita, trebuyushchiesya dlya ih predstavleniya nel'zya udobno razmestit' v 8 bit bajta). Dlya vseh rezhimov po vertikali imeetsya 200 tochek. Nizkoe razreshenie (ispol'zuemoe tol'ko na PCjr) ispol'zuet 160 tochek po gorizonta- li, srednee razreshenie - vdvoe bol'she (320 tochek) i vysokoe raz- reshenie - eshche vdvoe bol'she (640 tochek). CHislo kilobajt pamyati, trebuemoe dlya kazhdogo rezhtima privedeno v [4.5.3]. V dvuh- i chetyrehcvetnom rezhimah PCjr imeet vybor lyubogo iz 16 dostupnyh cvetov. Cvetnoj adaptor bolee ogranichen. V dvuhcvetnom rezhime on vsegda ogranichen belym i chernym, a v chetyrehcvetnom rezhime tol'ko cvet fona mozhet vybirat'sya iz 16 cvetov, v to vremya kak osnovnoj cvet dolzhen brat'sya tol'ko iz dvuh predopredelennyh palett. Paletta 0 soderzhit korichnevyj, zelenyj i krasnyj cveta, a paletta 1 - cian, magenta i belyj. V otlichie ot tekstovyh dannyh v rezhimah 4-6 i 8-A graficheskie dannye razbity na videostranice na chasti. V bol'shinstve rezhimov dannye razbivayutsya na dve chasti, pri etom pervaya polovina bufera soderzhit dannye dlya chetnyh strok ekrana, a vtoraya polovina - dannye dlya nechetnyh strok (stroki numeruyutsya, nachinaya s verha ekrana vniz). Odnako v 16-cvetnyh rezhimah PCjr bufer razmerom 32K delitsya na chetyre chasti, kazhdaya iz kotoryh soderzhit dannye dlya kazhdoj chetvertoj stroki. V 4-cvetnyh rezhimah pervyj bajt bufera soderzhit informaciyu o samyh levyh tochkah stroki 0, prichem starshij bit otnositsya k samoj levoj tochke. Sleduyushchij bajt soderzhit informaciyu o sleduyushchem seg- mente stroki i t.d. Dlya vsej stroki trebuetsya 80 bajt. 81-j bajt soderzhit informaciyu o levom konce stroki 2. V 16-cvetnyh rezhimah kartina priblizitel'no takaya zhe, no dlya kazhdoj stroki trebuetsya 160 bajt i kazhdaya chast' bufera soderzhit dannye tol'ko dlya vdvoe men'shego chisla strok. Dlya cvetnogo graficheskogo adaptora chetnye stroki zanimayut pamyat' so smeshcheniyami ot 0000 do 1F3FH, a nechetnye - ot 2000H do 3F3FH. Promezhutok mezhdu 1F3FH i 2000H ignoriruetsya. Dlya PCjr sootvetstvuyushchie yachejki mogut sushchestvenno razlichat'sya, v zavisimosti ot rezhima i chisla ispol'zuemyh stranic. PCjr spe- cial'no ustroen takim obrazom, chto vyvod v 16K, nachinayushchihsya s segmenta B800H perenapravlyaetsya v tu oblast' pamyati, gde real'no raspolozhen videobufer. |to svojstvo pozvolyaet pisat' programmy, kotorye budut odinakovo rabotat' na cvetnom displee i PCjr. Dlya rezhimov ekrana EGA ot DH do 10H pamyat' organizovana sovsem po-drugomu. Ona razdelyaetsya na odnu, dve ili chetyre bitovye plos- kosti, kazhdaya iz kotoryh organizovana tak zhe, kak dlya cherno-belo- go rezhima vysokogo razresheniya, opisannogo vyshe: kogda bajt dannyh posylaetsya v opredelennyj adres videobufera, to kazhdyj bit soot- vetstvuet tochke na ekrane, prichem oni opisyvayut gorizontal'nyj segment stroki i bit 7 sootvetstvuet samoj levoj tochke. Zapisy- vayutsya chetyre takih bitovyh ploskosti, sootvetstvuyushchih odnim i tem zhe adresam v videobufere. |to otvodit kazhdoj tochke 4 bita, chto pozvolyaet opisyvat' 16 cvetov. Na ris. 4-4 pokazany razlichnye shemy raspredeleniya pamyati. V graficheskom rezhime mogut vyvodit'sya i simvoly. Odnako oni sozdayutsya ne obchynym sposobom, vmesto etogo BIOS vyrisovyvaet ih potochechno, ne izmenyaya fonovogo cveta. Po etoj prichine takie veshchi kak negativnoe izobrazhenie i miganie simvolov nedostupny v grafi- cheskom rezhime. Ne vyvoditsya i kursor. BIOS mozhet chitat' i oprede- lyat' ustanovku tochek v pozicii kursora, chtoby uznat' kakoj simvol tam soderzhitsya. Simvoly raspolagayutsya v odnoj iz pozicij, soot- vetstvuyushchih obychnym strokam i stolbcam, chto oznachaet, chto oni vsegda nachinayutsya na granice kratnoj vos'mi tochkam. 4.4.1 Ustanovka cvetov dlya tochechnoj grafiki. PCjr i EGA rabotayut s cvetom sovsem po-drugomu, chem cvetnoj adaptor. Oni ispol'zuyut registry paletty, kotorye pozvolyayut v lyuboj moment izmenit' cvet, kotoryj sootvetstvuet dannomu kodu cveta. Vsledstvie etoj raznicy my budem obsuzhdat' eti dve sistemy otdel'no i nachnem s cvetnogo adaptora. Obe sistemy ispol'zuyut odin i tot zhe osnovnoj nabor kodov cveta, kotoryj v tochnosti sovpadaet s ispol'zuemym v tekstovyh rezhimah: Nomer koda Cepochka bitov Cvet 0 0000 chernyj 1 0001 sinij 2 0010 zelenyj 3 0011 cian 4 0100 krasnyj 5 0101 magenta 6 0110 korichnevyj 7 0111 belyj 8 1000 seryj 9 1001 yarkosinij 10 1010 yarkozelenyj 11 1011 yarkij cian 12 1100 rozovyj 13 1101 yarkaya magenta 14 1110 zheltyj 15 1111 yarkobelyj Dlya cvetnogo graficheskogo adaptora cvet razreshen tol'ko v rezhime umerennogo razresheniya. Dlya kazhdoj tochki otvodyatsya dva bita kazhdogo bajta videobufera. CHetyre vozmozhnyh kombinacii etih bitov predstavlyayut odin fonovyj i tri osnovnyh cveta. Fonovyj cvet mozhet byt' lyubym iz 16. Odnako tri osnovnyh cveta mogut vybirat'- sya iz odnoj iz dvuh palett, kazhdaya iz kotoryh soderzhit tol'ko tri predopredelennyh cveta. |to sleduyushchie cveta: Nomer koda Cepochka bitov Paletta 0 Paletta 1 0 00 cvet fona cvet fona 1 01 zelenyj cian 2 10 krasnyj magenta 3 11 zheltyj/korichnevyj belyj Esli Vy v kakoj-to moment pereklyuchilis' mezhdu palettami, to vse vyvedennye na ekran cveta budut sootvetstvenno izmeneny. Edinst- vennyj sposob ispol'zovat' cvet, ne vhodyashchij v eti paletty, sos- toit v tom, chtoby iskustvenno rassmatrivat' odin iz cvetov palet- ty kak fonovyj cvet, chto predpolagaet zapolnenie etim cvetom vsego ekrana, kogda ekran chistitsya (ispol'zujte dlya etogo pryamoe otobrazhenie v pamyat'). Posle etogo istinnyj fonovyj cvet mozhet pokazyvat'sya "skvoz' nego" v kachestve osnovnogo cveta. Takaya tehnika privodit k sozdaniyu granicy ekrana, analogichnoj toj, chto izobrazhaetsya v tekstovyh rezhimah. V protivnom sluchae granica ekrana ne mozhet byt' vydelena cvetom, tak kak ves' ekran zakra- shivaetsya fonovym cvetom, hotya tochki otnosyashchiesya k oblasti granicy nel'zya adresovat'. Otmetim, chto BIOS hranit v svoej oblasti dan- nyh odnobajtnuyu peremennuyu, kotoraya soderzhit tekushchij nomer palet- ty. Ee adres raven 0040:0066H. Izmenenie etogo chisla ne menyaet tekushchuyu ustanovku paletty; naoborot, esli Vy izmenite cvet palet- ty drugimi sredstvami, pomimo funkcij operacionnoj sistemy, to znachenie etoj peremennoj budet modificirovano. Simvoly mogut peremeshivat'sya s tochechnoj grafikoj. Cvet, koto- rym budut vyvodit'sya simvoly, zavisit ot togo, kakuyu fuknciyu Vy budete ispol'zovat' dlya ih vyvoda. Prostejshaya funkciya po umolcha- niyu ispol'zuet tretij cvet tekushchej paletty. Odnako imeetsya ryad sposobov ispol'zovat' lyuboj iz cvetov paletty, a takzhe vyvodit' simvoly razlichnymi cvetami. Smotrite obsuzhdenie v [4.1.3]. EGA i PCjr obespechivayut dobavochnuyu gibkost' v ispol'zovanii atributov cveta, nezavisimo ot togo, v kakom rezhime oni rabotayut. Pri 16-cvetnoj grafike chetyre bita, nahodyashchiesya v pamyati dlya kazhdoj tochki ekrana dayut cepochku bitov, kotoraya ne perevoditsya pryamo v sootvetstvuyushchie cveta privedennoj tablicy. Vmesto etogo kazhdyj nomer otnositsya k odnomu iz 16 registrov paletty. Kazhdyj iz etih registrov soderzhit cepochku bitov, sootvetstvuyushchuyu cvetu, kotoryj budet vyvodit'sya na samom dele. Esli vse 16 registrov budut soderzhat' 0100, to nezavisimo ot togo, kakoj atribut budet pripisan tochke v pamyati, ona budet vyvedena krasnym cvetom. Zna- chenie v registre 0 ispol'zuetsya v kachestve fonovogo cveta. Na ris. 4-1 v [4.1.3] pokazan etot mehanizm. V dvuh- i chetyrehcvet- nom rezhimah ispol'zuyutsya tol'ko pervye dva ili chetyre registra paletty. Registry paletty pozvolyayut programme izmenit' vse vyvodimoe v odnom cvete na drugoj, ne delaya nikakih izmenenij v videobufere. Bolee togo otdel'nye ob®ekty mogut poyavlyat'sya i ischezat' kak po volshebstvu. |to delaetsya izmeneniem znacheniya, soderzhashchegosya v registre paletty, sootvetstvuyushchemu dannomu ob®ektu, na znachenie fonovogo cveta. Naprimer, predpolozhim, chto fonovyj cvet chernyj (0000) i chto ob®ekt vyveden s atributom 1110, tak chto on vyvodit- sya v tom cvete, kotoryj ukazan v registre paletty 15 (po umolcha- niyu znachenie dlya etogo registra zheltyj). Esli izmenit' znachenie registra 15 na 0000 (chernyj fonovyj cvet), to ob®ekt ischeznet. No na samom dele ob®ekt hranitsya v pamyati, tak kak on zapisan s atributom 1110, a ne s atributom 0000, kak vse tochki fona. Ob®ekt mozhet byt' sdelan opyat' vidimym, esli izmenit' znachenie registra paletty 15 opyat' na 1110. Ne obyazatel'no, chtoby ischezali vse zheltye ob®ekty, poskol'ku nekotorye mogut byt' vyvedeny s drugim atributom, kotoryj takzhe sootvetstvuet registru paletty, soderzha- shchemu takzhe zheltyj cvet. EGA mozhet ispol'zovat' 6 bitov registra paletty, a ne 4, kogda k nemu prisoedinen uluchshennyj cvetnoj graficheskij displej firmy IBM. Pri etom stanovyatsya dostupnymi 64 cveta, kodirovka dlya koto- ryh R'G'B'RGB. R, G i B sootvetstvuyut temnym cvetam, a R', G' i B' - svetlym. Razlichnye kombinacii sozdayut 64 ottenka. Kak vseg- da, 111111 sootvetstvuet belomu cvetu, a 000000 - chernomu. Otme- tim, chto cherez registry paletty dlya EGA vsegda dostupny 64 cveta, nezavisimo ot togo, v kakom rezhime on rabotaet. Pri rabote v rezhime 4-cvetnoj grafiki (kak u cvetnogo adaptora) aktivny tol'ko mladshie 4 registra paletty, no oni mogut soderzhat' lyubye cveta. Vysokij uroven'. Kogda cvetnoj displej rabotaet v graficheskom rezhime, to Bejsik obrabatyvaet operator COLOR po drugomu, chem v tekstovom rezhime. Snachala idet fonovyj cvet, v vide chisla ot 0 do 15, a zatem idet nomer paletty 0 ili 1. Naprimer, COLOR 2,1 ustanavlivaet zelenyj fonovyj cvet (#2) dlya vsego ekrana i aktiviziruet palettu 1. Posle etogo tri vozmozhnyh osnovnyh cveta ukazyvayutsya ih nomerami v palette: 1 - cian, 2 - magenta i 3 - belyj (sravnite s operato- rom PAINT). CHtoby vyklyuchit' cvet v rezhime umerennogo razresheniya napishite SCREEN ,1. Otmetim, chto ispol'zovanie tol'ko chernogo i belogo cvetov v rezhime umerennogo razresheniya ne privodit k eko- nomii pamyati. PCjr ispol'zuet operator COLOR takim obrazom tol'ko v rezhime SCREEN 1. Dlya rezhimov ot SCREEN 3 do SCREEN 6 format etogo operatora COLOR osnovnoj,fonovyj. Pri etom osnovnoj cvet - eto chislo v diapazone ot 1 do 15 v 16-cvetnom rezhime i ot 1 do 3 - v 4-cvetnom. On ne dolzhen byt' ravnym 0, kotoryj vsegda ispol'- zuetsya v kachestve fonovogo cveta. Imeyutsya special'nye operatory dlya ustanovki registrov paletty: PALETTE i PALETTE USING. PALETTE ustanavlivaet cvet sootvetstvuyu- shchij lyubomu atributy. Naprimer, PALETTE 9,11 privodit k tomu, chto tochki narisovannye s cvetom paletty 9 (obychno svetlosinij) budut vyvedeny v cvete 11 (svetlyj cian). CHtoby izmenit' ustanovku vseh registrov paletty k ih pervonachal'nomu znacheniyu, t.e. chtoby re- gistr 0 soderzhal 0, registr 12 - 12 i t.d. nado napisat' prosto PALETTE. Otmetim, chto v rezhimah SCREEN 4 i SCREEN 6 registry paletty inicializiruyutsya takim obrazom, chtoby atributy cvetov 1-3 byli takimi zhe, kak dlya paletty 1 na cvetnom graficheskom displee. |to delaetsya v celyah sovmestimosti. Vse 16 registrov paletty mogut byt' ustanovleny odnim operato- rom PALETTE USING. PALETTE USING napravlyaet soderzhimoe 16-ele- mentnogo celogo massiva v registry paletty. Imeya neskol'ko takih massivov programma mozhet bystro pereklyuchat' razlichnye shemy cve- tov. Kazhdyj element massiva dolzhen byt' chislom v diapazone ot 0 do 15, ili -1, v poslednem sluchae sootvetstvuyushchij registr ne izmenyaetsya. Naprimer, dlya obrashcheniya privychnoj shemy cvetov soz- dajte massiv, v kotorom ARRAYNAME(0) = 15, ARRAYNAME(1) = 14 i t.d. Zatem napishite PALETTE USING ARRAYNAME(0) i soderzhimoe mas- siva ARRAYNAME budet peredano v registry paletty. 0 indiciruet nachal'nuyu poziciyu v massive, s kotoroj nado brat' dannye posylae- mye v registry. Mogut ispol'zovat'sya bolee dlinnye massivy, iz kotoryh dannye mogut brat'sya nachinaya s lyuboj tochki, pri uslovii chto do konca massiva eshche est' 16 elementov. PALETTE USING ARRAY- NAME(12) budet brat' dannye, nachinaya s 12-go bajta massiva. Otme- tim, chto operator PALETTE USING rabotaet kak v tekstovom, tak i v graficheskom rezhimah. Vot primer: 100 DEF INT A-Z 'vse peremennye celye 110 DIM SCHEME1(16) 'massiv dlya shemy cvetov #1 120 DIM SCHEME2(16) 'massiv dlya shemy cvetov #2 130 DATA 3,5,9,2,4,12,15,1,6,7,14,13,8,11,10,0 140 DATA 0,11,13,7,1,12,2,5,10,8,14,6,15,4,9,3 150 FOR N = 0 TO 15 'dlya kazhdogo registra paletty 160 READ Q 'prochitat' kod cveta 170 SCHEME1(N) = Q 'i pomestit' ego v massiv 180 NEXT ' 190 FOR N = 0 TO 15 'to zhe samoe so vtorym massivom 200 READ Q ' 210 SCHEME2(N) = Q ' 220 NEXT ' 230 PALETTE USING SCHEME1(0) 'ustanovka registrov . 500 PALETTE USING SCHEME2(0) 'menyaem ih posredi programmy Srednij uroven'. Funkciya BH preryvaniya 10H ustanavlivaet kak fonovyj cvet, tak i cveta paletty - no ne odnovremenno. Dlya ustanovki fonovogo cveta nado pomestit' v BH 0, a zatem kod cveta ot 0 do 15 v BL. Dlya ustanovki paletty nado pomestit' v BH 1, a v BL 0 ili 1. V dannom primere ustanavlivaetsya cvet fona cian i vybiraetsya palet- ta 0: ;---ustanovka cveta fona i paletty MOV AH,0BH ;funkciya ustanovki cveta MOV BH,0 ;snachala ustanavlivaem fonovyj cvet MOV BL,3 ;kod ciana INT 10H ;ustanovka cveta MOV BH,1 ;teper' ustanavlivaem palettu MOV BL,1 ;vybiraem palettu 1 INT 10H ;ustanavlivaem palettu Na PCjr eta funkciya rabotaet tochno tak zhe v 4-cvetnom rezhime, ustanavlivaya registry 1-3 v odnu iz shem cvetov, ispol'zuemyh cvetnym adaptorom. V 2-cvetnom rezhime 0 v BL sootvetstvuet belomu cvetu, kak cvetu 1, a 1 - chernomu. |ta funkciya ne vliyaet na naz- nacheniya, ispol'zuemye v 16-cvetnom rezhime. Odnako vo vseh sluchayah fonovyj cvet mozhet byt' ustanovlen zasylkoj v BH 0, a v BL - koda cveta. Nizkij uroven'. Dlya cvetnogo adaptora my mozhem poluchit' dostup k "registru vybora cveta" cherez port 3D9H. V graficheskih rezhimah etot registr dejstvuet po-drugomu, chem v tekstovyh (opisannyh v [4.1.3]). Bity 0-3 soderzhat informaciyu o fonovom cvete v obychnom formate (soot- vetstvenno sinij, zelenyj ikrasnyj komponenty i intensivnost'). Bit 5 vybiraet palettu, kogda etot bit raven 0, to paletta nomer 0. V graficheskih rezhimah ostal'nye bity ne imeyut znacheniya. |tot registr tol'ko dlya zapisi, poetomu Vy dolzhny ukazyvat' informaciyu i o fonovom cvete i o palette, pri izmenenii lyubogo iz nih. MOV DX,3D9H ;adres registra vybora cveta MOV AL,00100110B ;cepochka bitov dlya ciana i paletty 1 OUT DX,AL ;posylaem ee Poskol'ku oni ispol'zuyut registry paletty, to etot primer neprimenim ni k PCjr ni k EGA. Dlya nih nado prosto zagruzit' trebuemye znacheniya v eti registry. U PCjr eti registry numeruyutsya ot 10H do 1FH. Dostup ko vsem registram osushchestvlyaetsya cherez odin port s adresom 3DAH. Lyuboe novoe znachenie prinimaemoe etim portom vosprinimaetsya adresnym registrom. Poetomu nado poslat' snachala nomer registra, a zatem kod cveta dlya etogo registra. CHtoby byt' uverennym, chto port ozhidaet nomer registra nado prochitat' iz nego. Naprimer, chtoby pomestit' yarkosinij cvet (1001) v registr paletty 2: ;---pomeshchaem kod yarkosinego cveta v registr paletty 2 MOV DX,3DAH ;adres massiva vorot displeya IN AL,DX ;chitaem iz nego MOV AL,12H ;nomer registra OUT DX,AL ;posylaem nomer registra MOV AL,00001001B ;kod yarkosinego cveta OUT DX,AL ;posylaem cvet U EGA adres porta dostupa k registram paletty - 3C0H, a registry numeruyutsya ot 00 do 0FH. Nado prochitat' iz porta 3DAH (a ne 3C0H), chtoby byt' uverennym, chto ozhidaetsya nomer registra. Kogda k EGA prisoedinen uluchshennyj cvetnoj displej i pereklyuchateli ustanovleny sootvetstvuyushchim obrazom, to v registry pomeshchayutsya 6-bitnye znacheniya. 4.4.2 Risovanie tochki na ekrane (monohromnyj, cvetnoj i PCjr). Vsledstvie organizacii graficheskoj informacii v videobufere vyvod odnoj tochki podrazumevaet izmenenie otdel'nyh bitov pamyati. Rezhimy dvuh, chetyreh i shestnadcati cvetov trebuyut, chtoby dlya ustanovki harakteristik odnoj tochki byli izmeneny odin, dva i chetyre bita sootvetstvenno. |ti operacii mogut trebovat' ogromno- go kolichestva processornogo vremeni, o chem svidetel'stvuet to, chto bol'shinstvo graficheskogo programmnogo obespecheniya rabotaet ochen' medlenno. Tshchatel'noe obdumyvanie chasto pozvolyaet srazu ustanovit' vse bity odnogo bajta, a ne obrashchat'sya k odnomu i tomu zhe bajtu 4 ili 8 raz. Imejte eto vvidu, i ne sledujte slepo pri- vedennoj zdes' tehnike potochechnogo vyvoda. Vysokij uroven'. Bejsik predostavlyaet operatory PSET i PRESET dlya izmeneniya cveta otdel'noj tochki. |ti imena obrazovany ot PointSET (ustanov- ka tochki) i PointRESET (sbros tochki). Oni ochen' pohozhi. Za oboimi dolzhny sledovat' koordinaty stolbca i stroki, ukazyvaemoj tochki, zaklyuchennye v skobki. Otmetim, chto koordinaty sleduyut v poryadke x,y - t.e. snachala idet stolbec, a zatem stroka; etot poryadok obratnyj po otnosheniyu k poryadku operatora LOCATE, kotoryj pozi- cioniruet tekst na ekrane. PSET(50,80) ili PRESET(50,80) ustanav- livayut cvet tochki v stolbce 50 i stroke 80. Za operatorom PSET mozhet sledovat' kod cveta, kotoryj lezhit v diapazone, opredelyae- mom tekushchim rezhimom ekrana. Esli kod cveta ne ukazan, to ispol'- zuetsya maksimal'nyj nomer koda, kotoryj dopustim dlya dannogo rezhima. V PRESET cvet ne ukazyvaetsya. On vsegda vozvrashchaet tochke cvet fona (kod 0). Naprimer: 100 PSET(100,180),3 'ustanovka cveta 3 tekushchej paletty 110 PRESET(100,180) 'izmenenie cveta tochki na fonovyj PSET i PRESET obychno ispol'zuyut sistemu koordinat, v kotoroj levyj verhnij ugol ekrana imeet koordinaty 0,0. Operator WINDOW pozvolyaet Vam pereopredelit' sistemu koordinat tak, chto naprimer, koordinaty levogo verhnego ugla budut -100,100, centra ekrana - 0,0, a pravogo nizhnego ugla - 100,-100. Dlya etogo sluchaya nado zapisat' operator v vide WINDOW(-100,100)-(100,-100). (Novye koordinaty ne budut vliyat' na sistemu koordinat 25*80 (ili 25*40), v kotoroj operator LOCATE pozicioniruet simvoly na grafi- cheskom ekrane [4.2.1].) Kak i v operatore LINE [4.4.5], pervoe chislo kazhdoj pary v skobkah ukazyvaet gorizontal'nuyu koordinatu (po osi x). Koordina- ty mogut byt' kak polozhitel'nymi, tak i otricatel'nymi, lish' by oni ne byli ravnymi. Levomu krayu ekrana vsegda prisvaivaetsya men'shee chislo (kotoroe mozhet byt' bol'shim otricatel'nym). Takim obrazom, dazhe esli Vy pomenyaete koordinaty v primere i zapishete operator WINDOW(100,-100)-(-100,100), to znachenie -100 budet vzyato dlya levoj granicy ekrana. Vtoroe chislo kazhdoj pary koordinat opredelyaet granicy ekrana po vertikali. I opyat', men'shee znachenie budet otnosit'sya k nizhnej granice ekrana, nezavisimo ot togo, v kakoj pare koordinat ono ukazano. Bol'shee polozhitel'noe znachenie (ili men'shee iz dvuh otricatel'nyh) prisvaivaetsya v kachestve znacheniya osi y dlya verh- nej stroki ekrana. Napravlenie uvelicheniya znachenij mozhet byt' obrashcheno, s tem chtoby maksimal'nye znacheniya sootvetstvovali nizu ekrana i naoborot. Nado prosto dobavit' k operatoru slovo SCREEN, naprimer, WINDOW SCREEN(-100,100)-(100,-100). Programma mozhet ukazyvat' tochki, otnosyashchiesya k oblasti za predelami koordinat ekrana. Naprimer, centr okruzhnosti mozhet nahodit'sya za predelami ekrana, s tem chtoby vidna byla tol'ko chast' dugi. Otmetim, chto koordinaty, ukazyvaemye operatorom WIN- DOW mogut nepreryvno izmenyat'sya pri izmenenii masshtaba ili ugla zreniya na ob®ekt. Izobrazhenie dolzhno pererisovyvat'sya, a inogda stirat'sya, pri izmenenii koordinat okna. Operator PMAP preobrazuet koordinaty ot obychnoj fizicheskoj sistemy koordinat k "mirovoj" sisteme, ustanavlivaemoj operatorom WINDOW. PMAP ispol'zuet chetyre kodovyh nomera: 0 preobrazuet x iz "mirovoj" sistemy v fizicheskuyu 1 preobrazuet y iz "mirovoj" sistemy v fizicheskuyu 2 preobrazuet x iz fizicheskoj sistemy v "mirovuyu" 3 preobrazuet y iz fizicheskoj sistemy v "mirovuyu" Operator imeet formu PMAP(poziciya,kod). Naprimer, predpolozhim, chto Vy ustanovili sistemu "mirovyh" koordinat operatorom WINDOW. Koordinaty levogo verhnego ugla ekrana (-100,100), a pravogo nizhnego - (100,-100). Kakaya budet poziciya central'noj tochki ekra- na (0,0) pri ispol'zovanii obychnoj fizicheskoj sistemy 320*200, v kotoroj levyj verhnij ugol imeet koordinaty 0,0? CHtoby najti X napishite X = PMAP(0,0), a Y - napishite Y = PMAP(0,1). Vy poluchite znachenie X = 160, a Y = 100. Srednij uroven'. Funkciya CH preryvaniya 10H ustanavlivaet tochku. DX soderzhit stroku, a CX - stolbec, oba otschityvaemye ot 0. Kod cveta pome- shchaetsya v AL. Otmetim, chto soderzhimoe AX budet razrusheno pri vy- polnenii preryvaniya. Esli Vy ispol'zuete eto preryvanie v cikle, to ne zabud'te sohranit' AX na steke i kazhdyj raz vosstanavlivat' ego. ;---vyvod tochki s koordinatami 100,180 MOV AH,0CH ;funkciya ustanovki tochki MOV AL,3 ;vybiraem cvet 3 paletty MOV CX,100 ;stroka MOV DX,180 ;stolbec INT 10H ;vyvodim tochku ;---stiraem tochku MOV AH,0CH ;vosstanavlivaem funkciyu MOV AL,0 ;ispol'zuem dlya stiraniya fonovyj cvet MOV DX,100 ;stroka MOV CX,180 ;stolbec INT 10H ;stiraem tochku V to vremya kak cvet paletty pomeshchaetsya v mladshie bity AL, starshij bit takzhe imeet znachenie. Esli on raven 1, to nad cvetom proizvoditsya operaciya isklyuchayushchego ILI s tekushchim cvetom. Napom- nim, chto operaciya isklyuchayushchego ILI ustanavlivaet bit tol'ko v tom sluchae esli iz dvuh sravnivaemyh bitov ustanovlen tol'ko odin. Esli oba sravnivaemye bita ravny 1 ili oba ravny 0, to rezul'tat budet 0. Dlya dvuhcvetnogo rezhima eto oznachaet, chto takaya operaciya obrashchaet ustanovku bita. Esli etu operaciyu primenit' ko vsem tochkam ekrana, to budet obrashchen ves' ekran. V chetyreh- i 16-cvet- nom rezhimah, s drugoj storony, oblasti ekrana mogut menyat' svoi cveta. Naprimer, pust' v 4-cvetnom rezhime umerennogo razresheniya oblast' zanyata tochkami libo cveta 1 paletty (ustanovka bitov 01B) ili cveta 2 paletty (10B). CHto proizojdet, esli primenit' ko vsem tochkam etoj oblasti operaciyu isklyuchayushchego ILI s 11B? 01B perejdet v 10B, a 10B perejdet v 01B - cveta budut obrashcheny. Nizkij uroven'. Na nizkom urovne my imeem vozmozhnost' pryamogo dostupa k video- buferu (otobrazhenie v pamyat'). Snachala Vy dolzhny vychislit' smeshche- nie tochki (a) vnutri bufera i (b) vnutri bajta, soderzhashchego bity, otnosyashchiesya k dannoj tochke. Posle etogo bitovye operacii obespe- chat sootvetstvuyushchuyu ustanovku. Otmetim, chto esli Vy stanete is- pol'zovat' etu tehniku na PCjr, kogda on rabotaet v odnom iz 16-cvetnyh rezhimov, ispol'zuyushchih stranicu razmerom 32K, to vyvod v adresa, nachinayushchiesya s paragrafa B800H ne budet perenapravlen verno. Vam neobhodimo pryamo adresovat' real'nye yachejki, raspolo- zhennye v segmente nizhe 2000H. Dlya nahozhdeniya tochki neobhodimo prezhde vsego opredelit' naho- ditsya li ona v chetnoj ili nechetnoj stroke. V dannom primere stro- ka pomeshchena v CX, a stolbec - v DX. Esli bit 0 registra CX raven 0, to stroka imeet chetnyj nomer. CHetnye stroki raspolozheny so smeshcheniem 0 otnositel'no nachala bufera. Esli zhe stroka imeet nechetnyj nomer, to neobhodimo dobavit' smeshchenie 2000H dlya ukaza- niya na nachalo vtoroj poloviny bufera. Zatem razdelite nomer stroki na 2, neobhodimo podschitat' chislo tol'ko chetnyh ili nechetnyh strok i umnozh'te rezul'tat na 80, t.k. na odnu stroku rashoduetsya 80 bajt. Dlya deleniya mozhno ispol'zo- vat' instrukciyu SHL, a rezul'tat dast obshchee chislo bajtov vo vseh strokah, predshestvuyushchih stroke, v kotoroj raspolozhena iskomaya tochka. Vmesto togo, chtoby zatem vychislyat' chislo stolbcov v tekushchej stroke, luchshe snachala opredelit' poziciyu pary bitov v bajte, kotorye soderzhat etu tochku. |to dostigaetsya obrashcheniem vseh bitov v nomere stolbca (posle togo kak sohranena ego kopiya) i vydeleniya dvuh mladshih bitov. |ta procedura pokazhet nahodyatsya li dva bita, otnosyashchiesya k tochke na pervoj, vtoroj, tret'ej ili chetvertoj pozicii v bajte. Umnozhiv eto znachenie na 2 my poluchaem nomer v bajte pervogo iz dvuh bitov, otnosyashchihsya k dannoj tochke. Zatem prihodit vremya podschitat' chislo bajtov v stroke, pred- shestvuyushchih bajtu, soderzhashchemu itnformaciyu o trebuemoj tochke. Dlya rezhima umerennogo razresheniya nado razdelit' chislo stolbcov na 4, a dlya vysokogo razresheniya - na 8. Posle etogo nado slozhit' tri smeshcheniya: smeshchenie za schet nomera stroki, za schet nomera stolbca i smeshchenie nachala chetnyh/nechetnyh strok v bufere. Posle etogo Vy mozhete poluchit' trebuemyj bajt iz bufera. Nakonec, nado proizvesti operaciyu nad sootvetstvuyushchimi bitami bajta. Vrashchajte bajt do teh por, poka para bitov otnosyashchihsya k tochke ne stanet mladshimi. Pri vrashchenii neobhodimo ispol'zovat' ranee podschitannoe znachenie pozicii bitov. Zatem vyklyuchite oba bita pomestite v nih instrukciej OR trebuemyj kod paletty. Zatem nado proizvesti obratnoe vrashchenie i poslat' bajt obratno v bufer. ;---v segmente dannyh PALETTE_COLOR DB 2 ;---vyzov procedury MOV AX,0B800H ;ukazyvaem na videobufer MOV ES,AX ; MOV CX,100 ;nomer stroki MOV DX,180 ;nomer stolbca CALL SET_DOT ; . . ;---opredelyaem chislo bajtov v predshestvuyushchih strokah SET_DOT PROC TEST CL,1 ;nomer stroki nechetnyj? JZ EVEN_ROW ;esli net, to vpered MOV BX,2000H ;smeshchenie dlya nechetnyh strok JMP SHORT CONTINUE ;perehod vpered EVEN_ROW: MOV BX,0 ;smeshchenie dlya chetnyh strok CONTINUE: SHR CX,1 ;delim chislo strok na 2 MOV AL,80 ;umnozhaem na 80 MUL CL ;v AX - chislo bajtov ;---opredelyaem polozhenie pary bit v bajte MOV CX,DX ;kopiruem nomer stolbca NOT CL ;obrashchaem bity AND CL,00000011B ;v CL - poziciya bitov (0-3) SHL CL,1 ;poziciya pervogo bita pary ;---podschityvaem smeshchenie stolbca v bajtah SHR DX,1 ;delim nomer stolbca na 4 SHR DX,1 ;(nuzhny dva mladshih bita) ;---vychislyaem smeshchenie dlya izmenyaemogo bajta ADD AX,DX ;skladyvaem vse tri smeshcheniya ADD BX,AX ; ;---izmenyaem bity nuzhnogo bajta MOV AH,ES:[BX] ;chitaem nuzhnyj bajt ROR AH,CL ;sdvigaem nuzhnye bity vniz AND AH,11111100B ;chistim mladshie 2 bita MOV AL,PALETTE_COLOR ;izmenyaem ih na cvet paletty OR AH,AL ; ROL AH,CL ;obratnoe vrashchenie MOV ES:[BX],AH ;vozvrashchaem bajt RET ; SET_DOT ENDP 4.4.3 Risovanie tochki na ekrane (EGA). U EGA grafika bolee slozhnaya. S tochki zreniya processora rezhimy ekrana 0-7 dejstvuyut tak zhe, kak sootvetstvuyushchie rezhimy dlya cvet- nogo adaptora ili PCjr, no rezhimy ot DH do 10H sovershenno drugie. Organizaciya pamyati dlya etih rezhimov menyaetsya, v zavisimosti ot chisla ispol'zuemyh cvetov i kolichestva pamyati, imeyushchejsya na plate displeya. Smotrite ris. 4-4 v [4.4.0]. V rezhimah D, E i 10H pamyat' razbita na 4 bitovye ploskosti. Kazhdaya ploskost' organizovana takim zhe obrazom, kak dlya cherno-be- logo rezhima vysokogo razresheniya cvetnogo adaptora, kotoryj obsuzh- dalsya v [4.4.2]: kogda bajt dannyh posylaetsya v opredelennyj adres videobufera, to kazhdyj bit sootvetstvuet tochke na ekrane, prichem ves' bajt sootvetstvuet gorizontal'nomu segmentu linii, a bit 7 sootvetstvuet samoj levoj tochke. Vyvodyatsya chetyre takih bitovyh ploskosti, otnosyashchiesya k odnim i tem zhe adresam v video- bufere. |to privodit k tomu, chto kazhdaya tochka opisyvaetsya chetyr'- mya bitami (davaya 16 cvetov), prichem kazhdyj bit nahoditsya votdel'- nom bajte otdel'noj bitovoj ploskosti. No kak Vy mozhete zapisat' 4 razlichnyh bajta dannyh, raspolo- zhennyh po odnomu i tomu zhe adresu? Otvet na etot vopros sostoit v tom, chto Vy ne posylaete posledovatel'no chetyre bajta po etomu adresu. Vmesto etogo odin iz treh rezhimov zapisi pozvolyaet izme- nit' vse 4 bajta, na osnovanii odnogo bajta dannyh poluchennogo ot processora. Vliyanie dannyh poslannyh processorom zavisit ot usta- novki neskol'kih registrov, vklyuchayushchih dva registra maski, koto- rye opredelyayut na kakie bity i v kakih bitovyh ploskostyah budut izmenyat'sya bity. Dlya ponimaniya etih registrov my dolzhny snachala razobrat'sya s chetyr'mya registrami zadvizhki (latch register). Oni soderzhat dan- nye dlya chetyreh bitovyh ploskostej v toj pozicii, k kotoroj bylo poslednee obrashchenie. (Zametim, chto termin bitovaya ploskost' is- pol'zuetsya kak dlya celoj oblasti videobufera, tak i dlya odnobajt- nogo bufera, vremenno hranyashchegosya v registre zadvizhki.) Kogda processor posylaet dannye po opredelennomu adresu, to eti dannye mogut izmenit' ili polnost'yu smenit' dannye registra zadvizhki, a vposledstvii imenno dannye iz registra zadvizhki zapisyvayutsya v videobufer. Kakim obrazom dannye processora vliyayut na registr zadvizhki zavisit ot ispol'zuemogo rezhima zapisi, a takzhe ot usta- novki nekotoryh drugih registrov. Pri chtenii adresa iz videobufe- ra registry zadvizhki zapolnyayutsya chetyr'mya bajtami iz chetyreh bitovyh ploskostej po dannomu adresu. Registrami zadvizhki legko manipulirovat', proizvodya ih soderzhimym razlichnye logicheskie operacii, chto pozvolyaet ustraivat' razlichnye graficheskie tryuki. Registr maski bitov i registr maski karty dejstvuyut na regist- ry zadvizhki, zashchishchaya opredelennye bity ili bitovye ploskosti ot izmeneniya pod dejstviem dannyh, postupayushchih ot processora. Re- gistr maski bitov eto registr tol'ko dlya zapisi, adres porta kotoro