belyj belyj Normal'nyj rezhim belyj na chernom, kogda bity 0-2 ustanovleny v 111, a bity 4-6 ustanovleny v 000. Negativnoe izobrazhenie soz- daetsya obratnymi znacheniyami bitov. Simvoly vyvodyatsya s povyshennoj yarkost'yu, kogda bit 3 ustanovlen v 1; ne sushchestvuet sposoba pri- dat' povyshennuyu yarkost' fonu, kogda simvoly vyvodyatsya v negativ- nom izobrazhenii, a takzhe nedostupno podcherkivanie v negative. Vo vseh sluchayah, ustanovka v 1 bita 7 daet miganie simvolov. Vsego vozmozhno tol'ko 10 kombinacij, kogda simvoly vidny. Oni mogut byt' realizovany razlichnymi ustanovkami bitov. Nizhe privodyatsya po odnoj iz vozmozhnyh ustanovok dlya kazhdogo sluchaya: Atribut Cepochka bitov Geks 10-noe normal'nyj 00000111 7 7 intensivnyj 00001111 F 15 normal'nyj podcherknutyj 00000001 1 1 intensivnyj podcherknutyj 00001001 9 9 negativnyj 01110000 70 112 normal'nyj migayushchij 10000111 87 135 intensivnyj migayushchij 10001111 8F 143 normal'nyj migayushchij podch. 10000001 81 129 yarkij migayushchij podcherk. 10001001 89 137 yarkij negativnyj 11110000 F0 240 Vysokij uroven'. Bejsik ustanavlivaet cveta i atributy simvolov operatorom COLOR. Vse operatory PRINT i WRITE, kotorye sleduyut za dannym operatorom COLOR, vypolnyayutsya s atributami, ukazannymi v etom operatore. Cvet fona menyaetsya tol'ko dlya vyodimyh simvolov, no ne dlya vsego ekrana. Novyj operator COLOR ne vliyaet na to, chto bylo vyvedeno ranee. Krome sluchaya monohromnogo adaptora, COLOR 3,4 ustanavlivaet osnovnoj cvet simvola cian (#3), a fonovyj - krasnyj (#4). Diapa- zon kodov osnovnyh cvetov 0-31, prichem chisla 0-15 sootvetstvuyut cvetam, perechislennym v vysheprivedennoj tablice, a chisla 16-31 poluchayutsya pribavleniem k lyubomu iz etih kodov chisla 16, chto daet tot zhe samyj cvet, no s miganiem simvolov. (Pri miganii osnovnoj cvet periodicheski menyaetsya na fonovyj, v to vremya kak fonovyj cvet ostaetsya neizmennym.) Operatory PRINT i WRITE mogut takzhe vyvodit' simvoly na grafi- cheskij ekran. Pri etom cvet simvolov - eto vsegda tretij cvet tekushchej paletty, t.e. zheltyj/korichnevyj dlya paletty 0 i belyj - dlya paletty 1. Otmetim, chto kogda Vy nachinaete rabotat' v cvetnom tekstovom rezhime, to ves' ekran cherno-belyj. CHtoby zakrasit' ves' ekran v fonovyj cvet, neobhodimo ukazat' operatorom COLOR ,2, naprimer, zelenyj cvet i zatem ochistit' ekran komandoj CLS. Kogda Vy chisti- te ekran po hodu vypolneniya programmy, to neobhodimo, chtoby pos- lednij operator COLOR ustanovil fonovyj cvet takim, kakim Vy hotite zakrasit' ves' ekran. Dlya monohromnogo displeya atributy ustanavlivayutsya analogichnym obrazom. 0 sootvetstvuet chernomu cvetu, a lyuboe iz chisel 1-7 sootvetstvuet belomu. Takim obrazom COLOR 0,7 ustanavlivaet cher- noe izobrazhenie na belom fone (negativ), v to vremya kak COLOR 7,0 daet vyvod belyh simvolov na chernom fone (obychnaya ustanovka). Imeetsya odno isklyuchenie: esli v kachestve osnovnogo cveta ispol'- zovat' kod 1, to budut vyvodit'sya podcherknutye simvoly. Pribaviv 8 k lyubomu iz kodov osnovnogo cveta, poluchim yarkoe izobrazhenie. Pribaviv 16 k lyubomu iz kodov 0-15, poluchim migayushchie simvoly. Takim obrazom 7+8+16=31 daet yarkoe migayushchee beloe izobrazhenie. Dlya fonovogo cveta dopustimy tol'ko znacheniya ot 0 do 7. Esli Vy ispol'zuete pryamoe otobrazhenie v pamyat' [4.3.1], to operator COLOR ne vliyaet na vyvod. Vmesto etogo Vy dolzhny vybrat' trebuemuyu ustanovku atributov iz tablic i pryamo prisvoit' znache- nie sootvetstvuyushchego bajta atributov operatorom POKE. Pomnite, chto bajty atributov vsegda zanimayut nechetnye pozicii v videobufe- re. Otobrazhenie v pamyat' pozvolyaet Vam imet' 16 fonovyh cvetov v Bejsike (pri uslovii, chto Vam ne nuzhny migayushchie simvoly). Dlya graficheskogo adaptora vvedite OUT &H3D8,8, chtoby starshij bit kazhdogo atributa dejstvoval kak bit yarkosti dlya fonovyh cvetov. V sleduyushchem primere v centre ekrana pechataetsya yarkokrasnyj "!" na svetlokrasnom fone. 100 DEF SEG = &HB800 'ukazyvaem na bufer cvetnogo displeya 110 OUT &H3D8,8 'ispol'zuem 16 fonovyh cvetov 120 POKE 1000,33 'pechataem ! v centre ekrana 130 POKE 1001,196 'krasnyj na svetlokrasnom (11000100) Kak uzhe govorilos' vyshe PCjr hranit bit miganiya v massive vorot displeya. Vot ta zhe programma dlya PCjr (no ona ne budet rabotat' v rezhime dvuhcvetnoj grafiki): 100 DEF SEG = &HB800 'ukazyvaem na videobufer 110 X = INP(&H3AH) 'chitaem iz massiva vorot displeya 120 OUT &H3AH,3 'trebuem dostup k registru 3 130 OUT &H3AH,0 'sbrasyvaem vse bity etogo registra 140 POKE 1000,33 'pechataem ! v centre ekrana 150 POKE 1001,196 'krasnyj na svetlokrasnom (11000100) Privedem eshche primer izmeneniya naznacheniya cveta registra paletty. Kod cveta, kotoryj obychno vyvoditsya sinim (0001) sdelaem, chtoby on vyvodil cvet magenta (0101). Nomer registra massiva vorot displeya, sootvetstvuyushchij kodu cveta 1 raven 11H. 100 X = INP (&H3AH) 'chitaem iz massiva vorot displeya 110 OUT &H3AH,&H11 'trebuem dostup k registru 11H 120 OUT &H3AH,5 'pomeshchaem tuda kod magenty (0101 = 5) Srednij uroven'. Preryvaniya DOS i BIOS predostavlyayut ochen' bednye vozmozhnosti dlya raboty s cvetnym tekstom. Tol'ko funkciya 9 preryvaniya 10H prinimaet bajt atributov pri vyvode simvola. Funkciya A preryvaniya 10H vyvodit simvol bez ukazaniya cveta ili atributa; ona prosto pomeshchaet simvol v videobufer, ne trogaya bajt atributa, takim obrazom atributy sohranyayut svoe staroe znachenie. Funkciya D prery- vaniya 10H takzhe ostavlyaet netronutym bajt atributov. Vse eti funkcii obsuzhdayutsya v [4.3.1]. Funkcii vyvoda na ekran DOS preryvaniya 21H vsegda vyvodyat beloe na chernom. Dazhe esli dlya vsego ekrana ustanovlen nekotoryj fonovyj cvet, to funkcii DOS ustanavlivayut atribut v normal'nyj chernyj pri vyvode kazhdogo simvola. Odnako imeetsya sposob preodo- let' eto ogranichenie. MS DOS predostavlyaet drajver ustrojstva ANSI.SYS, kotoryj mozhet interpretirovat' special'nye Esc-posledo- vatel'nosti. V prilozhenii D ob®yasnyayutsya osnovy ego ispol'zovaniya. Esc-posledovatel'nosti vyvodyatsya cherez funkciyu 9 preryvaniya 21H, kotorye obychno vyvodyat stroku simvolov na ekran. V etom sluchae stroka sostoit iz simvola Esc, za kotorym sleduet [, a dalee odno ili bolee kodovyh chisel iz nizheprivedennogo spiska. Stroka dolzhna konchat'sya simvolom m i obychnym ogranichitelem $. Vot kodovye nome- ra: 0 vse atributy vyklyucheny (chernyj na belom) 1 vklyuchena povyshennaya intensivnost' 4 vklyucheno podcherkivanie 5 vklyucheno miganie 7 vklyucheno negativnoe izobrazhenie 8 vse vklyucheno (pri etom simvoly nevidimy) 30 chernyj osnovnoj cvet 40 chernyj fon 31 krasnyj osnovnoj cvet 41 krasnyj fon 32 zelenyj osnovnoj cvet 42 zelenyj fon 33 zheltyj osnovnoj cvet 43 zheltyj fon 34 sinij osnovnoj cvet 44 sinij fon 35 osnovnoj cvet magenta 45 fon magenta 36 osnovnoj cvet cian 46 fon cian 37 belyj osnovnoj cvet 40 belyj fon Otmetim, chto kogda funkcii MS DOS vyvodyat simvoly v graficheskom rezhime, to oni obychno ispol'zuyut kod 3 tekushchej paletty. S pomoshch'yu Esc-posledovatel'nostej mozhno ustanovit' cvet simvola sootvetst- vuyushchim lyubomu iz cvetov paletty. Nado ukazyvat' 30 ili 31 dlya fonovogo cveta, 32 ili 33 - dlya koda 1, 34 ili 35 - dlya koda 2 i 36 ili 37 - dlya koda 3. V etom sluchae ne nado ukazyvat' fonovyj cvet. V sleduyushchem primere na ekran vyvodyatsya dve stroki s pomoshch'yu funkcii 9 preryvaniya 21H. Pervaya vyvoditsya sinim na krasnom, a vtoraya - migayushchim cianom na krasnom. Ne nado pereopredelyat' kras- nyj v kachestve fonovogo cveta dlya vtoroj stroki, poskol'ku nazna- cheniya cvetov dejstvuyut na vse posleduyushchie komandy vyvoda (vklyuchaya funkcii BIOS preryvaniya 10H), do teh por, poka ne budut sdelany drugie naznacheniya. Otmetim, kak prosto peremeshivat' komandy up- ravleniya cvetom s vyvodom samih strok. ;---v segmente dannyh STRING_1 DB 'The rain in Spain',0AH,0DH,'$' STRING_2 DB 'Falls mainly on the plain$' BLUE_RED DB 27,'[34;41m$' BLINK_CYAN DB 27,'[5;36m$' ;---vyvod strok MOV AH,9 ;funkciya vyvoda stroki LEA DX,BLUE_RED ;adres upravlyayushchej stroki v DX INT 21H ;vse budet vydavat'sya sinim na krasnom LEA DX,STRING_1 ;ukazyvaem na pervuyu stroku INT 21H ;pechataem stroku LEA DX,BLINK_CYAN ;adres vtoroj upravlyayushchej stroki INT 21H ;menyaem cvet na migayushchij cian LEA DX,STRING_2 ;ukazyvaem na vtoruyu stroku INT 21H ;pechataem stroku Vy vsegda dolzhny pozabotit'sya o tom, chtoby sbrosit' atributy cveta v normal'noe sostoyanie pered zaversheniem programmy, pos- kol'ku v protivnom sluchae oni budut dejstvovat' i na vyvod posle- duyushchih programm. V konce sleduet vyvesti Esc-posledovatel'nost', ispol'zuyushchuyu kod nomer 0, kak ukazano vyshe. PCjr i EGA imeyut special'nuyu funkciyu BIOS dlya ustanovki soder- zhimogo registrov paletty. |to podfunkciya 0 funkcii 10H preryvaniya 10H. Nado pomestit' nomer registra paletty (ot 0 do 15) v BL, a znachenie koda cveta (takzhe ot 0 do 15) v BH, a zatem vypolnit' preryvanie. Podfunkciya 2 funkcii 10H ustanavlivaet vse registry paletty, a takzhe cvet granicy, ispol'zuya 17-bajtnyj massiv, na kotoryj dolzhny ukazyvat' ES:DX. Bajty 0-15 massiva pomeshchayutsya v registry paletty 0-15, a bajt 16 ustanavlivaet cvet granicy. O tom, kak otdel'no ustanovit' cvet granicy sm. [4.1.4]. Nizkij uroven'. Kak uzhe ob®yasnyalos' v razdele "Vysokij uroven'", nado prosto pomestit' trebuemoe znachenie bajta atributov v videobufer, za tem simvolom, k kotoromu eti atributy dolzhny otnosit'sya. Priveden primer dlya cvetnogo adaptora ili PCjr. V primere ustanavlivaetsya tekstovyj ekran 80*25 s 16 fonovymi cvetami, a zatem ekran ini- cializiruetsya v krasnyj cvet svetlosinem fone: ;---ustanovka 16 fonovyh cvetov v tekstovom rezhime 80*25 MOV AL,00001001B ;ustanovka v 0 bita miganiya MOV DX,3D8H ;adres registra OUT DX,AL ;posylaem v registr ;---inicializiruem ves' ekran v krasnyj na svetlosinem fone MOV AX,0B800H ;ukazyvaem na videobufer MOV ES,AX ; MOV CX,2000 ;zapisyvaem atribut v 2000 yacheek MOV BX,1 ;BX ukazyvaet na bajt atributov MOV AL,10010100B ;znachenie bajta atributov NEXT_CHAR: MOV ES:[BX],AL ;posylaem atributy v bufer INC BX ;uvelichivaem ukazatel' na atributy INC BX ; LOOP NEXT_CHAR ;pishem v sleduyushchuyu poziciyu 4.1.4 Ustanovka cveta granicy ekrana. Granica simvol'nogo ekrana mozhet imet' cvet, otlichnyj ot fono- vogo cveta central'noj chasti ekrana. Mozhet byt' ispol'zovan lyuboj iz 16 cvetov. S drugoj storony, graficheskie ekrany tehnicheski ne imeyut oblasti granicy. Kogda cvet fona ustanavlivaetsya v grafi- cheskom rezhime, to ves' ekran, vklyuchaya oblast' granicy, okrashi- vaetsya v etot cvet. Odnako, operacii vyvoda tochek na ekran ne imeyut dostupa k oblasti granicy; esli bol'shuyu chast' adresuemyh tochek ekrana izmenit' v nefonovyj cvet, to budet sozdana vidi- most' granicy ekrana. Vysokij uroven'. Tretij parametr operatora Bejsika COLOR ustanavlivaet cvet granicy. Ispol'zuyutsya te zhe samye kodovye nomera cvetov, prive- dennye v [4.1.3]. Naprimer, dlya ustanovki granicy v svetlosinij cvet, nado napisat' COLOR ,,8. PCjr krome togo mozhet izmenyat' cvet, za schet izmeneniya ustanovki registra paletty, sootvetstvuyu- shchego kodu cveta, ukazannogo dlya cveta granicy. Polnoe ob®yasnenie sm. v [4.1.3]. Srednij uroven'. Dlya vseh videosistem fonovyj cvet mozhet byt' ustanovlen funk- ciej BH, preryvaniya 10H. |ta funkciya ustanavlivaet takzhe osnovnye cveta. CHtoby ukazat', chto nado izmenit' fonovyj cvet, nado pomes- tit' 0 v BH, a kod cveta v BL i vypolnit' preryvanie. Krome togo, PCjr i EGA imeyut special'nuyu funkciyu dlya ustanovki fonovogo cve- ta. |to podfunkciya 1 funkcii 10H preryvaniya 10H. Nado pomestit' 10H v AH, 1 v AL i kod cveta v BH. Nikakih znachenij ne vozvra- shchaetsya. Nizkij uroven'. Dlya cvetnogo graficheskogo adaptora bity 0-3 porta 3D9H (Re- gistr vybora cveta) ustanavlivayut cvet granicy, kogda ekran na- hodmtsya v tekstovom rezhime. Kak obychno, naznachenie bitov v vosho- dyashchem poryadke - sinij (B), zelenyj (G), krasnyj (R) i intensiv- nost'. Poskol'ku etot adres prednaznachen tol'ko dlya zapisi, vse ostal'nye bity etogo registra dolzhny byt' pravil'no ustanovleny. |to bit 4, kotoryj, esli ego ustanovit' v 1, privodit k tomu, chto vse fonovye cveta budut vyvodit'sya s vysokoj intensivnost'yu. ;---ustanovka svetlosinego cveta granicy MOV AL,00001001B ;atribut svetlosinego cveta MOV DX,3D9H ;adres registra vybora cveta OUT DX,AL ;ustanavlivaem cvet granicy Dlya PCjr massiv vorot displeya [4.1.1] imeet registr, kotoryj ustanavlivaet cvet granicy. |to 4-bitnyj registr, prichem bity 0-3 sootvetstvuyut sinemu, zelenomu, krasnomu i vysokoj intensivnosti, kogda ustanovleny v 1. Dlya ustanovki svetlosinego cveta nado poslat' v registr 1001. Registr cveta granicy - eto registr 2 massiva vorot displeya. CHtoby poluchit' dostup k etomu registru nado snachala poslat' 2 v port po adresu 3DAH. Zatem nado poslat' dannye po tomu zhe adresu. CHtoby byt' uverennym, chto mikroshema gotova prinyat' nomer registra, a ne dannye, nado snachala prochi- tat' iz porta 3DAH. Sleduyushchij primer ustanavlivaet krasnyj cvet granicy (bit 2 ustanovlen). MOV DX,3DAH ;adres porta massiva vorot displeya IN AL,DX ;chtenie dlya podgotovki mikroshemy MOV AL,2 ;nomer trebuemogo registra OUT DX,AL ;posylaem v port MOV AL,4 ;ustanavlivaems tol'ko bit 2 OUT DX,AL ;ustanavlivaem cvet granicy Dlya EGA cvet granicy ustanavlivaetsya registrom skanirovaniya (overscan). |to registr nomer 11H porta s adresom 3C0H. Nado snachala prochitat' etot port, chtoby pereklyuchit' ego na adresnyj registr, zatem poslat' tuda nomer 11H v kachestve indeksa, a zatem poslat' dannye. Imeyut znachenie tol'ko mladshie 4 bita dannyh, esli tol'ko EGA ne svyazan s uluchshennym cvetnym displeem IBM, a v etom sluchae imeyut znachenie mladshie 6 bitov, kotorye ustanavlivayut cvet granicy. 4.1.5 Ochistka chasti/vsego ekrana. Ochistka ekrana sostoit prosto v zapisi probela v kazhduyu iz pozicij ekrana (kod ASCII - 32). Odnako, esli pri vyvode na ekran byli ispol'zovany nenormal'nye atributy, to dolzhny byt' takzhe izmeneny i bajty atributov. Operacionnaya sistema obespechivaet prostoj sposob ochistki tol'ko chasti ekrana. Vysokij uroven'. Bejsik dlya ochistki ekrana ispol'zuet operator CLS. Pri etom 25-ya stroka vnizu ekrana stanovitsya pustoj tol'ko esli byl ubran spisok znachenij funkcional'nyh klavish s pomoshch'yu komandy KEY OFF. Bajty atributov ustanavlivayutsya ravnymi ASCII 7. V [4.5.1] dana procedura prokrutki, kotoraya mozhet byt' ispol'zovana v Bejsike dlya ochistki okon na ekrane. Srednij uroven'. Operacionnaya sistema predostavlyaet neskol'ko sposobov ochistki ekrana. Kakoj iz nih Vy vyberete zavisit ot togo, kakie sredstva trebuyutsya programme dlya dostizheniya drugih celej. Pervyj metod - eto prosto sbros rezhima displeya, ispol'zuya funkciyu 0 preryvaniya 10H [4.1.2]. Dlya simvol'nogo ekrana kazhdaya poziciya zapolnyaetsya probelom (ASCII 32), a vse atributy ustanavlivayutsya normal'nymi (ASCII 7). Obychno etot metod horosh tol'ko v nachale programmy, kogda vse ravno nado ustanavlivat' rezhim raboty displeya. Dlya cvetnogo graficheskogo adaptora i PCjr reinicializaciya rezhima displeya privodit k katavasii na ekrane. |tot effekt otsutstvuet u monohromnogo adaptora i EGA. ;---ochistka ekrana putem ustanovki novogo rezhima MOV AH,0 ;nomer funkcii ustanovki rezhima displeya MOV AL,2 ;kod rezhima 80*25 cherno-belogo INT 10H ;ochistka ekrana Vtoroj metod sostoit v ispol'zovanii funkcij 6 i 7 preryvaniya 10H, kotorye sdvigayut ekran. CHislo strok, na kotoroe nado sdvi- nut' ekran pomeshchaetsya v AL i kogda eto chislo ravno nulyu ekran ochishchaetsya. Preryvanie pozvolyaet sdvigat' tol'ko chast' ekrana, poetomu takim obrazom mozhno ochistit' otdel'noe okno na ekrane. Nado pomestit' koordinaty levogo verhnego ugla okna v CX, a koor- dinaty pravogo nizhnego ugla v DX (nomer stroki v CH/DH, a nomer stolbca v CL/DL). Pomestite atribut, s kotorym dolzhen chistit'sya ekran v BH. Koordinaty otschityvayutsya ot 0. ;---ochistka okna mezhdu 3,4 i 13,15 MOV AH,6 ;ispol'zuem proceduru sdviga MOV AL,0 ;chislo strok sdviga delaem ravnym nulyu MOV BH,7 ;bajt atributov dlya zapolneniya MOV CH,3 ;stroka dlya verhnego levogo ugla MOV CL,4 ;stolbec dlya levogo verhnego ugla MOV DH,13 ;stroka dlya nizhnego levogo ugla MOV DL,15 ;stolbec dlya nizhnego levogo ugla INT 10H ;chistim okno Tretij metod zaklyuchaetsya v ispol'zovanii fukncii 9 preryvaniya 10H; kotoraya vyvodit simvol i atributy stol'ko raz, skol'ko uka- zano v CX. Znachenie 2000 chistit ves' ekran, esli kursor byl usta- novlen v 0,0, ispol'zuya metod pokazannyj v [4.2.1]. AH dolzhen soderzhat' simvol probela, AL - bajt atributov, a BH - nomer stra- nicy displeya. ;---ustanovka kursora v levyj verhnij ugol ekrana MOV AH,2 ;funkciya ustanovki kursora MOV BH,0 ;nomer stranicy MOV DX,0 ;koordinaty 0,0 INT 10H ;ustanavlivaem kursor ;---vyvod simvola probela 2000 raz MOV AH,9 ;nomer funkcii MOV CX,2000 ;chislo povtorenij vyvoda MOV AL,' ' ;simvol probela v AL MOV BL,7 ;atributy v BL INT 10H ;ochistka ekrana Nakonec, DOS obespechivaet ochistku ekrana s pomoshch'yu special'nyh Esc-posledovatel'nostej, kotorye rabotayut s drajverom ANSI.SYS. Osnovnye svedeniya o nem privedeny v prilozhenii D. |ti posledova- tel'nosti - eto stroki, nachinayushchiesya s simvola Esc, a zavershayu- shchiesya ogranichitelem $. Takie stroki vyvodyatsya funkciej 9 preryva- niya 21H, pri etom DS:DX dolzhny ukazyvat' na pervyj simvol stroki. DOS interpretiruet stroku ne vyvodya ee na displej. CHtoby steret' ves' ekran stroka dolzhna byt' [2J. CHtoby steret' konec stroki, nachinaya ot pozicii kursora (vklyuchaya etu poziciyu), stroka [K. ;---v segmente dannyh CLEAR_LINE DB 27,'[K$' ;---ochistka konca stroki, nachinaya ot pozicii kursora MOV AH,9 ;funkciya vyvoda stroki LEA DX,CLEAR_LINE ;DX dolzhen ukazyvat' na nachalo stroki INT 21H ;stiraem konec stroki Nizkij uroven'. Na nizkom urovne nado prosto pomestit' simvoly probela i tre- buemyj bajt atributov v pamyat' displeya, ispol'zuya instrukciyu STOSW. Vot primer dlya monohromnogo displeya: MOV AX,0B000H ;ukazyvaem na pamyat' displeya MOV ES,AX ; MOV DI,0 ;DI ukazyvaet na nachalo bufera MOV AL,32 ;simvol probela MOV AH,7 ;normal'nye atributy MOV CX,2000 ;chislo povtorenij REP STOSW ;posylaem AX v ES:DI 2000 raz 4.1.6 Pereklyuchenie mezhdu videoadaptorami. Mashina mozhet byt' osnashchena i monohromnym i cvetnym adaptorom, ili odnim iz etih adaptorov i EGA. Programma mozhet vybirat', kakoj iz monitorov dolzhen byt' aktivnym, izmenyaya znacheniya bitov 4 i 5 v yachejke pamyati 0000:0410. Ustanoviv oba etih bita v 1 my vybiraem monohromnyj adaptor. Izmeniv ustanovku bitov 5-4 na 10 ustanavlivaem graficheskij adaptor v rezhime 80 simvolov v stroke, a na 01 - 40 simvolov v stroke. I, nakonec, izmeniv bity na 00, vybiraem EGA. Vo vseh sluchayah Vy dolzhny nemedlenno podat' komandu ustanovki rezhima, poskol'ku BIOS imeet eshche ochen' mnogo registrov, kotorye nado izmenit', prezhde chem displej budet rabotat' normal'- no. Otmetim, chto hotya operacionnaya sistema ne mozhet upravlyat' odnovremenno dvumya monitorami, programmy mogut osushchestvlyat' vyvod na oba displeya, ispol'zuya pryamoe otobrazhenie v pamyat' [4.3.1] dlya adresov bufera neaktivnogo monitora. Vysokij uroven'. V Bejsike nado prosto ispol'zovat' sleduyushchij kod: 100 'Pereklyuchenie na monohromnyj displej 110 KEY OFF: CLS 120 WIDTH 40 130 DEF SEG = 0 140 M = PEEK(&H410) 150 POKE &H410,M OR &H30 160 WIDTH 80 170 LOCATE,,1,12,13 180 KEY ON 100 'Pereklyuchenie na cvetnoj graficheskij displej (80 simvolov) 110 KEY OFF: CLS 120 WIDTH 80 130 DEF SEG = 0 140 M = PEEK(&H410) 150 POKE &H410,(M AND &HCF) OR &H20 160 WIDTH 80 170 SCREEN 0 180 LOCATE,,1,6,7 190 KEY ON 100 'Pereklyuchenie na EGA (80 simvolov) 110 KEY OFF: CLS 120 WIDTH 80 130 DEF SEG = 0 140 M = PEEK(&H410) 150 POKE &H410,M AND &HCF 160 WIDTH 80 170 SCREEN 0 180 LOCATE,,1,6,7 190 KEY ON Izmenite komandy WIDTH i SCREEN, chtoby pereklyuchit'sya na drugie nachal'nye rezhimy displeya. Nizkij uroven'. V assemblere, kak i v Bejsike, nado pryamo izmenit' bity 4 i 5 po adresu 0000:0410. Nado sbrosit' rezhim displeya srazu vsled za izmeneniem. ;---pereklyuchenie na monohromnyj monitor SUB AX,AX ;obnulyaem AX MOV ES,AX ;ustanavlivaem ES na nachalo pamyati MOV DL,ES:[410H] ;poluchaem bajt po adresu 0000:0410 OR DL,00110000B ;ustanavlivaem bity 4 i 5 MOV ES:[410H],DL ;vozvrashchaem bajt MOV AH,0 ;fukciya ustanovki rezhima displeya MOV AL,0 ;monohromnyj rezhim 80*25 INT 10H ;ustanavlivaem rezhim ;---pereklyuchenie na cvetnoj monitor (40 simvolov) SUB AX,AX ;ustanavlivaem ES na nachalo pamyati MOV ES,AX ; MOV DL,ES:[410H] ;berem bajt po adresu 0000:0410 AND DL,11001111B ;sbrasyvaem bity 4 i 5 OR DL,00010000B ;ustanavlivaem bit 4 MOV ES:[410H],DL ;vozvrashchaem bajt MOV AH,0 ;funkciya ustanovki rezhima displeya MOV AL,1 ;cvetnoj rezhim 40*25 INT 10H ;ustanavlivaem rezhim ;---pereklyuchenie na EGA SUB AX,AX ;ustanavlivaem ES na nachalo pamyati MOV ES,AX ; MOV DL,ES:[410H] ;berem bajt po adresu 0000:0410 AND DL,11001111B ;sbrasyvaem bity 4 i 5 MOV ES:[410H],DL ;vozvrashchaem bajt MOV AH,0 ;funkciya ustanovki rezhima displeya MOV AL,1 ;cvetnoj rezhim 40*25 INT 10H ;ustanavlivaem rezhim Razdel 2. Upravlenie kursorom. Kursor sluzhit dvum celyam. Vo-pervyh, on sluzhit ukazatelem mesta na ekrane, v kotoroe operatory programmy posylayut svoj vyvod. Vo-vtoryh, on obespechivaet vidimuyu tochku otscheta na ekrane dlya pol'zovatelya programmy. Tol'ko dlya vtorogo primeneniya kursor dolzhen byt' vidimym. Kogda kursor nevidim (vyklyuchen), to on vse ravno ukazyvaet na poziciyu ekrana. |to vazhno, poskol'ku lyuboj vyvod na ekran, podderzhivaemyj operacionnoj sistemoj, nachinaetsya s tekushchej pozicii kursora. Kursor generiruetsya mikroshemoj kontrollera displeya 6845, opisannoj v [4.1.1]. |ta mikroshema imeet registry, ustanavlivayu- shchie razmer i polozhenie kursora. Mikroshema 6845 delaet tol'ko mercayushchij kursor, hotya imeyutsya programmnye sposoby sozdaniya ne- mercayushchego kursora [4.2.6]. CHastota mercaniya kursora ne mozhet byt' izmenena. V graficheskih rezhimah kursor ne vyvoditsya, hotya simvoly pozicioniruyutsya na ekrane temi zhe samymi procedurami ustanovki kursora, chto i v tekstovyh rezhimah. Kogda videosistema rabotaet v rezhime, dopuskayushchem neskol'ko displejnyh stranic, to kazhdaya stranica imeet svoj sobstvennyj kursor i pri pereklyuchenii mezhdu stranicami vosstanavlivaetsya poziciya kursora, kotoruyu on zanimal, kogda bylo poslednee obrashche- nie k vosstanavlivaemoj stranice. Nekotorye rezhimy displeya pozvo- lyayut imet' do 8 displejnyh stranic i sootvetstvuyushchie im pozicii kursora hranyatsya v nabore vos'mi 2-bajtnyh peremennyh v oblasti dannyh BIOS, nachinaya s adresa 0040:0050H. V kazhdoj peremennoj mladshij bajt soderzhit nomer stolbca, otschityvaya ot 0, a starshij bajt soderzhit nomer stroki, takzhe otschityvaya ot 0. Kogda ispol'- zuetsya men'she chem 8 stranic, to ispol'zuyutsya peremennye, raspolo- zhennye v bolee mladshih adresah pamyati. 4.2.1 Ustanovka kursora v absolyutnuyu poziciyu. Dlya kursora mogut byt' ustanovleny absolyutnye koordinaty ili koordinaty otnositel'no ego tekushchej pozicii [4.2.2]. Absolyutnye koordinaty mogut menyat'sya v predelah 25 strok i 80 (inogda 40) stolbcov. YAzyki vysokogo urovnya obychno otschityvayut koordinaty ekrana, nachinaya s 1, i takim obrazom poziciya levogo verhnego ugla 1,1. YAzyk assemblera vsegda nachinaet otschet s nulya i poziciya levogo verhnego ugla 0,0. Vysokij uroven'. Bejsik numeruet stroki ot 1 do 25, a stolbcy ot 1 do 80. For- mat operatora LOCATE, kotoryj ustanavlivaet poziciyu kursora ta- koj: LOCATE stroka,stolbec. Esli ustanovki kursora ne delaetsya, to on perehodit v pervuyu poziciyu stroki posle vvoda vozvrata karetki, a sdvig ekrana nachinaetsya posle togo, kak budet zapolne- na 24-ya stroka. CHtoby vyvesti v 25-yu stroku Vy dolzhny ispol'zo- vat' LOCATE (predvaritel'no ochistiv etu stroku s pomoshch'yu KEY OFF). Dlya otmeny avtomaticheskogo sdviga ekrana v strokah 24 i 25 nado zavershat' operator PRINT tochkoj s zapyatoj (chtoby otmenit' sdvig v poziciyah 24,80 i 25,80 nado ispol'zovat' pryamoe otobrazhe- nie v pamyat' [4.3.1]). Nizhe priveden primer risovaniya vertikal'- noj cherty s pomoshch'yu odnogo iz simvolov psevdografiki v centre ekrana. 100 FOR N = 1 TO 25 'povtor dlya kazhdoj stroki 110 LOCATE N,40 'ustanovka kursora v seredinu stroki 120 PRINT CHR$(186); 'pechataem vertikal'nuyu chertu 130 NEXT 'perehod k sleduyushchej stroke Kogda ispol'zuetsya neskol'ko displejnyh stranic, to operator LOCATE dejstvuet na tekushchej aktivnoj stranice pamyati. Esli stra- nica, vyvodimaya v dannyj moment na monitor, ne aktivna, to polo- zhenie kursora na ekrane ne menyaetsya. Otmetim, chto Bejsik imeet sobstvennuyu peremennuyu, hranyashchuyu tekushchee polozhenie kursora. Esli Vy podklyuchite assemblernuyu podprogrammu, kotoraya izmenit polozhe- nie kursora, to Bejsik proignoriruet novuyu poziciyu kursora, kogda emu budet vozvrashcheno upravlenie. Srednij uroven'. Operacionnaya sistema predostavlyaet dva sposoba pozicionirova- niya kursora v absolyutnuyu poziciyu na ekrane. Funkciya 2 preryvaniya 10H ustanavlivaet kursor, otnosyashchijsya k ukazannoj stranice pamya- ti. Stranicy numeruyutsya nachinaya s nulya i dlya monohromnogo displeya nomer stranicy (nahodyashchijsya v BH) dolzhen vsegda byt' ravnym 0. DH:DL soderzhat stroku i stolbec, kotorye tozhe numeruyutsya s 0. Kursor menyaet svoe polozhenie na ekrane tol'ko esli ustanovka kursora otnositsya k tekushchej aktivnoj stranice. ;---ustanovka kursora v stroku 13, stolbec 39 MOV AH,2 ;nomer funkcii MOV BH,0 ;nomer stranicy MOV DH,13 ;stroka MOV DL,39 ;stolbec INT 10H ;pozicioniruem kursor Vtoroj metod pozicionirovaniya kursora sostoit v ispol'zovanii special'nogo drajvera ustrojstva ANSI.SYS, kotoryj dolzhen byt' zagruzhen pri starte sistemy. V prilozhenii D dany neobhodimye svedeniya. Dlya vyvoda stroki, soderzhashchej informaciyu o stroke i stolbce ispol'zuetsya funkciya 9 preryvaniya 21H. Stroka nachinaetsya s simvola Esc (ASCII 27), a zavershaetsya simvolom ogranichitelem $. Format stroki Esc[stroka,stolbecH$, gde stroka i stolbec nume- ruyutsya ot nulya, a Esc oboznachaet kod ASCII 27. Naprimer, stroka 27,'10;60H$' ustanavlivaet kursor v stroku 10, stolbec 60. Hotya takoj metod kazhetsya izlishne slozhnym, no on okazyvaetsya ochen' udobnym pri vyvode ryada strok na ekran, tak kak Esc-posle- dovatel'nost' obrabatyvaetsya kak odna iz strok nabora. V dannom primere tri stroki soobshcheniya razbrosany po vsemu ekranu. ;---v segmente dannyh POSITION_1 DB 27,'[10;30H$' STRING_1 DB 'There are two options:$' POSITION_2 DB 27,'[13;32H$' STRING_2 DB '(1) Review part 1$' POSITION_3 DB 27,'[15;32H$' STRING_3 DB '(2) Move on to part 2$' ;---pechat' strok MOV AH,9 ;nomer funkcii vyvoda stroki LEA DX,POSITION_1 ;1-ya stroka pozicionirovaniya kursora INT 21H ;pozicioniruem kursor LEA DX,STRING_1 ;1-ya tekstovaya stroka INT 21H ;vyvod stroki LEA DX,POSITION_2 ;i t.d. INT 21H ; LEA DX,STRING_2 ; INT 21H ; LEA DX,POSITION_3 ; INT 21H ; LEA DX,STRING_3 ; INT 21H ; Nizkij uroven'. Registry 14 i 15 mikroshemy 6845 hranyat polozhenie kursora. Vy mozhete izmenit' ih znachenie i kursor peredvinetsya v sootvetstvuyu- shchuyu poziciyu ekrana, no preryvaniya vyvoda na ekran DOS i BIOS budut ignorirovat' Vashu ustanovku i vernut kursor v staroe polo- zhenie. |to proishodit potomu, chto kazhdyj raz pri vyzove etih preryvanij, oni vosstanavlivayut registry kursora, ispol'zuya 2-bajtnoe znachenie, hranyashcheesya v oblasti dannyh BIOS. V etoj oblasti, nachinaya s adresa 0040:0050, mogut nahodit'sya do vos'mi takih znachenij, davaya tekushchee polozhenie kursora dlya kazhdoj iz stranic displeya. Procedura nizkogo urovnya dolzhna modificirovat' i eti znacheniya, chtoby izmenit' sostoyanie kursora polnost'yu. Poziciya kursora hranitsya v registrah 14 i 15 kak chislo ot 0 do 1999, chto sootvetstvuet 2000 (25*80) poziciyam ekrana. Ne sputajte etu sistemu numeracii s poziciyami videobufera ot 0 do 3999, gde kazhdyj simvol soprovozhdaetsya eshche bajtom atributov (dlya polucheniya ekvivalentnogo ukazatelya na poziciyu kursora nado sdvinut' ukaza- tel' videobufera na 1 bit vpravo). Obrashchaem takzhe Vashe vnimanie, na to, chto ne nado menyat' mestami starshij i mladshij bajty: v registre 14 - starshij, a 15 - mladshij. ;---v programme MOV BL,24 ;stroka v BL (0-24) MOV BH,79 ;stolbec v BH (0-79) CALL SET_CURSOR ;vyzov procedury ;---procedura ustanovki kursora SET_CURSOR PROC ;poluchaem dostup k registru mladshego bajta MOV DX,3B4H ;port adresnogo registra 6845 MOV AL,15 ;vybiraem registr 15 OUT DX,AL ;posylaem zapros ;vychislenie pozicii kursora MOV AL,80 ;umnozhaem nomer stroki na 80 MUL BL ;v AX - nomer stroki, umnozhennyj na 80 MOV BL,BH ;perenosim nomer stolbca v BL SUB BH,BH ;rasprostranyaem BL na BX ADD AX,BX ;vychislyaem poziciyu kursora ;posylaem mladshij bajt rezul'tata INC DX ;adresuem upravlyayushchij registr OUT DX,AL ;posylaem mladshij bajt ;poluchaem dostup k registru starshego bajta MOV AL,14 ;nomer trebuemogo registra DEC DX ;vosstanavlivaem port adresnogo registra OUT DX,AL ;posylaem zapros ;posylaem starshij bajt rezul'tata INC DX ;adresuem upravlyayushchij registr MOV AL,AH ;pomeshchaem starshij bajt v AL OUT DX,AL ;posylaem starshij bajt RET SET_CURSOR ENDP 4.2.2 Otnositel'noe pozicionirovanie kursora Inogda byvaet poleznym sdvinut' kursor otnositel'no ego predy- dushchej pozicii: na stroku vverh, na tri stolbca vpravo, i t.d. Dostatochno prosto ispol'zovat' dlya etoj celi uzhe opisannoe abso- lyutnoe pozicionirovanie kursora. No dlya udobstva MS DOS predos- tavlyaet nekotorye vozmozhnosti otnositel'nogo peremeshcheniya kursora. Srednij uroven'. Funkcii otnositel'nogo peremeshcheniya kursora vypolnyayutsya Esc-posledovatel'nostyami. |to stroki, kotorye vyvodyatsya na ekran s pomoshch'yu funkcii 9 preryvaniya 21H. V prilozhenii D dany osnovy ih ispol'zovaniya. Takie posledovatel'nosti interpretiruyutsya MS DOS kak komandy peremeshcheniya kursora, a ne vyvod simvolov stroki. Stroka nachinaetsya s simvola Esc (ASCII 27), zatem idet simvol [, a simvol $ otmechaet konec stroki. Sama stroka sostoit iz chisla pozicij, na kotoroe nado sdvinut'sya, i koda napravleniya. CHtoby sdvinut'sya na 3 pozicii: vverh 3A vniz 3B vpravo 3C vlevo 3D CHisla zapisyvayutsya kak kody ASCII. Ne preobrazujte, naprimer, 33C (33 probela vpravo) v 33,'C'; dolzhno byt' '33C'. V nizhepriveden- nom primere cifry 1-8 pomeshchayutsya cherez opredelennye intervaly poperek ekrana, kak metki stolbcov dannyh. Promezhutki mezhdu cif- rami generiruyutsya Esc-posledovatel'nostyami, kotorye sdvigayut kursor vpravo posle vyvoda kazhdoj cifry. ;---v segmente dannyh CURSOR_RIGHT DB 27,'[9C$' ;---ustanovka nachal'noj pozicii kursora MOV BH,0 ;noier stranicy MOV DH,1 ;stroka MOV DL,5 ;stolbec MOV AH,2 ;funkciya ustanovki kursora INT 10H ;ustanovka kursora ;---vyvod cifr LEA BX,CURSOR_RIGHT ;BX budet obmenivat'sya s DX MOV CX,8 ;chislo cifr dlya vyvoda MOV DL,'0' ;nachinaem s 0 NEXT_NUMBER: MOV AH,2 ;funkciya DOS dlya vyvoda simvola INT 21H ;vyvodim simvol INC DL ;perehodim k sleduyushchemu kodu ASCII XCHG DX,BX ;pomeshchaem ukazatel' na stroku v DX MOV AH,9 ;funkciya vyvoda stroki INT 21H ;sdvigaem kursor na 9 pozicij vpravo XCHG DX,BX ;vozvrashchaem v DX kod ASCII LOOP NEXT_NUMBER ;perehodim k sleduyushchej cifre Imeetsya takzhe para Esc-posledovatel'nostej, kotorye upravlyayut perenosom kursora na sleduyushchuyu stroku pri dostizhenii im konca tekushchej stroki. Kogda ustanavlivaetsya otsutstvie perenosa, to lishnie simvoly pri vyvode otbrasyvayutsya. Stroka, zapreshchayushchaya perenos - Esc [=7h (ili kak dannye, 27,'[=7h'). Dlya vozvrata k rezhimu avtomaticheskogo perenosa na sleduyushchuyu stroku ispol'zuetsya stroka Esc [=7l (27,'[=7l'). 4.2.3 Vklyuchenie i vyklyuchenie kursora. Kursor generiruetsya mikroshemoj 6845. On funkcioniruet sover- shenno nezavisimo ot videopamyati. |to znachit, chto pri pryamoj adre- sacii v pamyat' displeya [4.3.1] programmnoe obespechenie dolzhno koordinirovat' peremeshcheniya kursora s vstavkoj novogo simvola v bufer. Otmetim, chto mikroshema 6845 ne mozhet ni sozdavat' nemer- cayushchij kursor, ni izmenit' chastotu ego mercaniya. V [4.2.6] poka- zano kak skonstruirovat' drugie "iskusstvennye" tipy kursora. Vysokij uroven'. Interpretator Bejsika avtomaticheski vyklyuchaet kursor pri za- puske programmy. Kursor poyavlyaetsya, kogda ispol'zuetsya operator INPUT, no ne v drugih sluchayah. Esli Vashej programme neobhodim kursor, skazhem dlya procedury INKEY$, to on dolzhen byt' vklyuchen ustanovkoj tret'ego parametra operatora LOCATE v 1 (0 snova vyk- lyuchit ego). Napominaem, chto pervye dva parametra operatora LOCATE ustanavlivayut stroku i stolbec, v kotoryh dolzhen vyvodit'sya kur- sor. 100 LOCATE 15,40,1 ;vklyuchit' kursor, ego poziciya 15,40 ili 100 LOCATE ,,1 ;vklyuchit' kursor v tekushchej pozicii i 100 LOCATE ,,0 ;snova vyklyuchit' kursor Kursor budet ostavat'sya pri posleduyushchih poyavleniyah operatora LOCATE bez ustanovki kazhdyj raz tret'ego parametra. Odnako nado otmetit', chto operatory INPUT i INPUT$ vyklyuchat ego posle ih vypolneniya. Srednij uroven'. Assemblernye programmy ostavlyayut kursor vklyuchennym, do teh por, poka im ne ukazano obratnoe. Operacionnaya sistema ne predos- tavlyaet special'nyh sredstv vyklyucheniya kursora, no eto legko sdelat'. Nado prosto pozicionirovat' kursor za predely ekrana, s pomoshch'yu funkcii 2 preryvaniya 10H ustanovit' ego v pervuyu poziciyu 26-j stroki. Pomnite, chto koordinaty otschityvayutsya ot nulya, tak chto etoj pozicii sootvetstvuyut koordinaty 25,0. MOV BH,0 ;nomer stranicy (vsegda 0 dlya monohromnogo) MOV DH,25 ;stroka MOV DL,0 ;stolbec MOV AH,2 ;nomer funkcii INT 10H ;ustanavlivaem kursor za predely ekrana Nizkij uroven'. Bit 6 registra 10 mikroshemy 6845 [4.1.1] vyklyuchaet kursor, kogda on ustanovlen v 1, i vklyuchaet ego, kogda sbroshen v 0. |tot registr soderzhit takzhe znachenie "nachal'noj stroki" dlya kursora, kotoroe vmeste so znacheniem "konechnoj stroki" opredelyaet tolshchinu kursora [4.2.4]. Poskol'ku tip kursora ne imeet znacheniya, kogda kursor vyklyuchen, to nado prosto pomestit' v registr 10 znachenie 32, chtoby ustanovit' bit 6. CHtoby vosstanovit' kursor Vy dolzhny takzhe vernut' znachenie "nachal'noj stroki" kursora. Dlya normal'- nogo kursora eto znachenie ravno 11. Znachenie "konechnoj stroki" pri etih procedurah ne menyaetsya, poskol'ku ono hranitsya v drugom registre. ;---vyklyuchenie kursora MOV DX,3B4H ;nomer porta adresnogo registra 6845 MOV AL,10 ;vybor registra 10 OUT DX,AL ;posylaem zapros INC DX ;dostup k registru cherez sleduyushchij port MOV AL,32 ;ustanavlivaem bit 6 dlya vyklyucheniya kursora OUT DX,AL ;vyklyuchaem kursor ;---obratnoe vklyuchenie kursora MOV AL,11 ;znachenie "nachal'noj stroki" OUT DX,AL ;vklyuchaem kursor 4.2.4 Izmenenie formy kursora. Kursor mozhet menyat'sya po tolshchine ot tonkoj linii do maksimal'- nogo razmera, otvodimogo pod simvol. On stroitsya iz korotkih gorizontal'nyh otrezkov, verhnij iz kotoryh nazyvaetsya "nachal'noj strokoj" kursora, a nizhnij - "konechnoj strokoj". Dlya monohromnogo displeya pod kazhdyj simvol otvoditsya 14 strok, pronumerovannyh ot 0 do 13, nachinaya sverhu. Promezhutki mezhdu simvolami obespechivayut- sya dvumya verhnimi strokami i tremya nizhnimi. Bol'shinstvo simvolov raspologayutsya v strokah 2-10, hotya hvostiki nekotoryh simvolov dostigayut linij 12 i 13, v to vremya kak podcherkivanie zanimaet odnu dvenadcatuyu stroku. Na 200-strochnom cvetnom displee dlya kazhdogo simvola otvoditsya tol'ko 8 strok, a simvol risuetsya v verhnih semi strokah. |ti 8 strok pronumerovany ot 0 do 7, nachinaya sverhu, i normal'nyj kur- sor formiruetsya odnoj strokoj 7. (Otmetim, chto na cvetnom displee net podcherkivaniya, poskol'ku ispol'zovanie dlya podcherkivaniya stroki 7 privelo by k tomu, chto simvoly slivalis' by s raspolo- zhennymi pod nimi.) Cvetnoj displej vysokogo razresheniya ispol'zuet 14-strochnyj monohromnyj variant, kogda on rabotaet v rezhime vyso- kogo razresheniya, a kogda on rabotaet v odnom iz cvetnyh grafiches- kih rezhimov, to on ispol'zuet 8-strochnyj rezhim. Kursor mozhet byt' sformirovan lyuboj kombinaciej prilegayushchih otrezkov. Dlya monohromnogo displeya on zanimaet vse otvedennoe pod simvol mesto, kogda "nachal'naya stroka" ravna 0, a "konechnaya stro- ka" ravna 13 (dlya graficheskogo displeya nado ispol'zovat' znachenie "konechnoj stroki" ravnoe 7). Esli znacheniya "nachal'noj" i "konech- noj" stroki sovpadayut, to voznikaet odnostrochnyj kursor. Esli nomer "konechnoj stroki" men'she chem "nachal'noj" to voznikaet kur- sor, sostoyashchij iz dvuh chastej, tak kak proishodit perenos v verh- nie stroki. Naprimer, esli "nachal'naya stroka" ravna 12, a "konech- naya" - 1, to snachala zapolnyaetsya stroka 12, zatem 13, zatem 0 i, nakonec, 1. Kursor pri etom prinimaet formu dvuh parallel'nyh linij, ukazyvayushchih verhnyuyu i nizhnyuyu granicy ryada, kotoryj on zanimaet. BIOS hranit 2-bajtnuyu peremennuyu po adresu 0040:0060, kotoraya soderzhit tekushchie znacheniya "nachal'noj" i "konechnoj" strok. Pervyj bajt soderzhit znachenie "konechnoj stroki", a vtoroj - "nachal'noj". Vysokij uroven'. V Bejsike operator LOCATE mozhet ne tol'ko pozicionirovat' kursor i vklyuchat' ili vyklyuchat' ego, no i upravlyat' ego formoj. Parmetry, ustanavlivayushchie "nachal'nuyu" i "konechnuyu" stroki - eto 4-e i 5-e chislo, sleduyushchie za slovom LOCATE. Drugie parametry mogut byt' opushcheny, esli prisutstvuyut razdelyayushchie ih zapyatye. Takim obrazom, chtoby sozdat' tolstyj kursor, zanimayushchij stroki so 2 po 12, nado zapisat' LOCATE ,,,2,12. Otmetim, chto Bejsik obychno vyklyuchaet kursor, kogda nachinaet vypolnenie programmy. Kak vklyu- chit' ego obratno sm. v [4.2.3]. Srednij uroven'. Funkciya 1 preryvaniya BIOS 10H ustanavlivaet "nachal'nuyu" i "konechnuyu" stroki kursora. V CH dolzhna byt' ukazana "nachal'naya", a v CL - "konechnaya" stroka. ;---ustanovka "nachal'noj" i "konechnoj" strok kursora MOV AH,1 ;nomer funkcii MOV CH,0 ;nachat' kursor v verhnej stroke MOV CL,7 ;okonchit' kursor v vos'moj stroke INT 10H ; Nizkij uroven'. Registry 10 i 11 kontrollera displeya 6845 soderzhat znacheniya "nachal'noj" i "konechnoj" stroki, sootvetstvenno. Dostup k oboim registram osushchestvlyaetsya cherez port 3B5H dlya monohromnogo adapto- ra i 3D5H - dlya cvetnogo alaptora i PCjr. Predvaritel'no nado poslat' nomer trebuemogo registra v adresnyj registr, imeyushchij adres porta 3B4H (sm. [4.1.1]). Znacheniya zanimayut mladshij konec kazhdogo registra. Odnako registr "nachal'noj" stroki (#10) bitami 5 i 6 indiciruet takzhe dolzhen li vyvodit'sya kursor. Poskol'ku kursor vyvoditsya, kogda oba etih bita sbrosheny v 0, to prosto pomestiv v registr nomer "nachal