ezhime umerennogo razresheniya cepochka bitov 10000011 opisyvaet 4 tochki, pervaya iz kotoryh imeet cvet 2, sle- duyushchie 2 - fonovyj cvet, a poslednyaya - cvet 3. |ta cepochka soot- vetstvuet chislu 131 ili &H83 (sm. prilozhenie B, v kotorom obsuzh- dayutsya bitovye operacii v Bejsike). Obrashchenie etoj cepochki v 11000010 dast 193 (&HC1). Oni mogut byt' ob®edineny v element ornamenta shirinoj v 4 tochki i vysotoj v 2 strokoj CHR$(&H83) + CHR$(&HC1). V takuyu stroku mogut vklyuchat'sya do 8 bajtov, dovodya vysotu do 8 tochek. Takaya stroka ispol'zuetsya v operatore PAINT vmesto cveta. Vot vyvod kvadrata, zapolnennogo opisannym ornamen- tom: 100 LINE (100,110)-(150,150),1,B 'risuem ramku 110 PAINT (125,125),CHR$(&H83)+CHR$(&HC1),1 'zapolnyaem ee Otmetim, chto neregulyarnosti elementa ornamenta mogut privodit' k tomu, chto procedura PAINT zavershaetsya, ne zakonchiv zapolneniya oblasti. Bejsik reshaet etu problemu ukazaniem parametra fona dlya operatora PAINT. Esli u Vas vozniknut problemy, obrashchajtes' k rukovodstvu po Bejsiku za detalyami. Operator DRAW, pozvolyayushchij risovat' slozhnye linii, takzhe mozhet zapolnyat' oblasti. On obsuzhdaetsya v [4.4.5]. "Tekushchaya tochka" (iz kotoroj budet risovat'sya sleduyushchij segment linii) dolzhna byt' pomeshchena vnutr' oblasti, ogranichennoj granicej ukazannogo cveta. V stroku operatora DRAW nado pomestit' kodovuyu bukvu P, za koto- roj dolzhen sledovat' kod cveta zakraski i kod cveta granicy. Dlya vyvoda ramki cvetom 1 paletty, a zatem ee zapolneniya cvetom 3 napishite DRAW "U10R10D10L10BH1P3,1". Zdes' pervye chetyre koda risuyut granicy ramki, zatem kod 'BH' peremeshchaet tekushchuyu tochku vnutr' ramki, ne risuya linii, a zatem kod 'P' privodit k zapolne- niyu ramki. Takim obrazom mogut byt' zapolneny i bolee slozhnye formy. Otmetim, chto neobyazatel'no pri peremeshchenii tochki vnutr' oblasti otmenyat' risovanie linii vdol' etogo puti. Odnako, v etom sluchae nado ispol'zovat' dlya etogo segmenta kod cveta, otlichnyj ot cveta zapolnyaemoj granicy. Bejsik imeet takzhe vozmozhnost' zapolneniya oblastej ekrana zaranee podgotovlennym izobrazheniem. Izobrazhenie mozhet byt' lyubo- go razmera, mozhet byt' vyvedeno v lyuboj pozicii ekrana i hranitsya v massive. Obychno, izobrazhenie sozdaetsya s pomoshch'yu vseh dostupnyh sredstv, a zatem zapominaetsya v massive operatorom GET. Massiv mozhet byt' pomeshchen v posledovatel'nyj fajl [5.4.3], iz kotorogo programma mozhet zagruzit' ego i vyvesti izobrazhenie. Operator GET perechislyaet koordinaty levogo verhnego i pravogo nizhnego ugla ramki, soderzhashchej izobrazhenie, prichem snachala idet nomer stolbca, a zatem nomer stroki dlya kazhdoj pary koordinat. Zatem dolzhno sledovat' imya massiva, kotoroe ne zaklyuchaetsya v kavychki. Napri- mer, GET (80,40)-(120,60),ARRAY3 pomeshchaet vse tochki, nahodyashchiesya vnutri ukazannoj oblasti v massiv s imenem ARRAY3. Odnomernye massivy, kak i vse ostal'nye, dolzhny byt' predvari- tel'no opisany operatorom DIM. Massiv mozhet soderzhat' elementy lyuboj tochnosti. Dlya vychisleniya trebuemyh razmerov massiva nado snachala opredelit' skol'ko bajtov potrebuetsya dlya hraneniya izob- razheniya. |to mozhno vychislit' po formule 4 + INT ((x*bitovnatochku + 7)/8)* y. Zdes' "bitovnatochku" ravno 1 dlya vysokogo razresheniya i 2 - dlya umerennogo razresheniya. Bukvy x i y otnosyatsya k chislu tochek vdol' gorizontal'noj i vertikal'noj storon bloka izobrazhe- niya. INT oboznachaet celuyu chast' chisla. Nakonec, nado opredelit' skol'ko elementov massiva trebuetsya dlya hraneniya dannogo chisla bajtov. Kazhdyj element zanimaet 2 bajta v celom massive, no 4 - dlya chisel s obychnoj tochnost'yu i 8 - dlya chisel s dvojnoj tochno- st'yu. Dlya polucheniya izobrazheniya iz massiva i vyvoda ego na ekran ispol'zujte operator PUT. |tot operator trebuet tol'ko koordinaty levogo verhnego ugla oblasti ekrana, v kotoruyu budet vyvodit'sya izobrazhenie. Za koordinatami dolzhno byt' ukazano imya massiva. Naprimer, PUT (40,30),ARRAY1 pomeshchaet izobrazhenie, levyj verhnij ugol kotorogo budet nahodit'sya v stolbce 40 i stroke 30. Operator PUT mozhet imet' eshche i neobyazatel'nyj parametr, opredelyayushchij cvet, kotorym budet vyvodit'sya izobrazhenie. Esli etot parametr opushchen, to izobrazhenie budet vyvodit'sya tochno v tom vide, v kotorom ono bylo zapisano operatorom GET. |to ekvivalentno zapisi PUT (40,30),ARRAY1,PSET. V protivnom sluchae imeyutsya nekotorye drugie vozmozhnosti. Esli Vy vmesto PSET ukazhete PRESET, to cvet 0 palet- ty budet zamenen na cvet 3 i naoborot, a cvet 1 paletty - na cvet 2 i naoborot. Imeyutsya eshche tri sluchaya, ispol'zuyushchie logicheskie operacii AND, OR ili XOR. Kak i PRESET eti slova mogut zamenyat' PSET v prive- dennom primere. Obsuzhdenie etih treh operacij smotrite v prilozhe- nii B. Kazhdaya operaciya vklyuchaet sravnenie bitov sushchestvuyushchej tochki na ekrane s bitami tochki nakladyvaemogo izobrazheniya. V rezhime vysokogo razresheniya, kogda na tochku otvoditsya tol'ko 1 bit operaciya prostaya. No v rezhime umerennogo razresheniya, v kotorom na kazhduyu tochku otvoditsya 2 bita, mogut proishodit' razlichnye trans- formacii cvetov. AND ustanavlivaet bit tol'ko esli on byl ustanovlen i u tochki ekrana i u tochki izobrazheniya (vzyatoj iz massiva). V rezhime vyso- kogo razresheniya eto oznachaet, chto tochka izobrazheniya poyavitsya na ekrane tol'ko esli sootvetstvuyushchaya tochka ekrana uzhe "vklyuchena". Vse ostal'nye tochki oblasti budut vyklyucheny. V rezhime umerennogo razresheniya operaciya proizvoditsya nad oboimi bitami. Esli dlya tochki ekrana ustanovka bitov 01, a dlya sootvetstvuyushchej tochki izobrazheniya - 10, to oba bita budut sbrosheny i tochka ekrana polu- chit kod 00, chto sootvetstvuet fonovomu cvetu. OR ustanavlivaet bit, esli on byl ustanovlen libo dlya tochki ekrana, libo dlya tochki izobrazheniya. V cherno-belom rezhime OR nak- ladyvaet izobrazhenie na sushchestvuyushchee izobrazhenie na ekrane. V cvetnom rezhime dlya opredeleniya effekta Vy opyat' dolzhny pribegnut' k vychisleniyam. Kombinaciya kodov paletty 1(01) i 2(10) daet 3(11), takzhe kak i kombinaciya 0(00) i 3(11). I, nakonec, XOR ustanavlivaet bit, esli iz dvuh sravnivaemyh tol'ko odin byl ustanovlen. Primenenie etoj operacii dlya cher- no-belogo ekrana s massivom edinic daet negativnoe izobrazhenie (1 i 1 daet 0, a 1 i 0 - daet 1). V rezhime umerennogo razresheniya eta operaciya menyaet vse cveta. V rezul'tate poluchaem nalozhenie dvuh izobrazhenij. No bolee vazhno, chto pri povtorenii etoj operacii ekran prinimaet v tochnosti takoj zhe vid, kotoryj on imel pervona- chal'no. Pri etom izobrazhenie stiraetsya. |ta tehnika polezna dlya mul'tiplikacii, kogda nad izobrazheniem dvazhdy proizvoditsya opera- ciya XOR v odnoj pozicii, zatem v sosednej i t.d. Nizkij uroven'. Imeetsya mnogo podhodov k napisaniyu procedur zapolneniya grafi- cheskih ob®ektov. Ni odin iz nih ne yavlyaetsya ideal'nym, poskol'ku vsegda imeetsya konflikt mezhdu skorost'yu raboty procedury i slozh- nost'yu figur, kotorye ona mozhet obrabatyvat'. Lyubaya procedura, kotoraya zapolnyaet oblast' tochku za tochkoj budet medlennoj, neza- visimo ot togo, naskol'ko elegantno ona realizovana. Imejte vvi- du, chto pochti kazhdaya modificiruemaya tochka raspolozhena v bajte, vse tochki kotorogo budut izmenyat'sya v tot zhe samyj cvet. Poluche- nie dostupa k odnomu i tomu zhe bajtu s ispol'zovaniem slozhnyh procedur trebuet sushchestvenno bol'she vremeni, chem ustanovka celogo bajta za odin dostup k yachejke videobufera. Naprimer, potochechnaya ochistka ekrana trebuet na IBM PC neskol'kih sekund pri ispol'zo- vanii funkcii BIOS, v to vremya kak pryamoj dostup v pamyat' proiz- vodit etu operaciyu mgnovenno: MOV AX,0B800H ;ES ukazyvaet na bufer ekrana MOV ES,AX ; MOV CX,8192 ;zapolnyaem vse bajty MOV AX,0 ;v kazhdyj bajt pishem 0 MOV DI,0 ;DI poocheredno ukazyvaet na vse bajty REP STOSW ;povtoryaem zapis' 8192 raza Mnogie procedury zapolnyayut po odnoj gorizontal'noj stroke, proveryaya na cvet granicy sprava i sleva. Poskol'ku stroki sostoyat iz smezhnyh bajtov dannyh, to nado poocheredno brat' bajty iz vi- deobufera i proveryat' prisutstvuet li v nih cvet granicy. Esli cvet granicy otsutstvuet, to mozhno zamenit' srazu ves' bajt na cvet zapolneniya. V protivnom sluchae k dannomu bajtu primenyaetsya potochechnyj podhod. Imeetsya ochen' bystryj sposob opredeleniya prisutstvuet li gra- nichnyj cvet v dannom bajte videobufera. Predpolozhim, chto procedu- ra ishchet cvet 1 paletty v rezhime umerennogo razresheniya s chetyr'mya cvetami. |tomu cvetu sootvetstvuet kod 01, poetomu snachala zapol- nim ves' bajt etim kodom: 01010101. Zatem ispol'zuem operaciyu NOT dlya obrashcheniya kazhdogo bita, posle chego bajt primet vid 10101010. Prodelaem operaciyu XOR so znacheniem vzyatym iz videobufera; v rezul'tate poluchim bajt, u kotorogo oba bita, otnosyashchiesya k odnoj tochke ravny 1 tol'ko dlya tochek, imeyushchih granichnyj cvet. Zatem snova ispol'zuem operaciyu NOT s tem, chtoby para bitov, otnosyashchih- sya k tochke granichnogo cveta imela kod 00. Posle etogo ispol'zuem operaciyu TEST dlya nahozhdeniya polej so znacheniem 00. Esli takoe pole najdeno, to granichnyj cvet obnaruzhen i procedura perehodit k obychnomu potochechnomu analizu dannogo bajta. |tu proceduru mozhno eshche ubystrit', esli ispol'zovat' slovnye dannye. MOV AL,ES:[BX] ;berem bajt iz videobufera XOR AL,10101010B ;ustanavlivaem bity dlya cveta granicy NOT AL ;obrashchaem bity TEST AL,11000000B ;proveryaem bity 7-6 JZ FOUND_BOUND ;perehod esli granichnyj cvet TEST AL,00110000B ;proveryaem bity 5-4 JZ FOUND_BOUND ;perehod esli granichnyj cvet TEST AL,00001100B ;proveryaem bity 3-2 JZ FOUND_BOUND ;perehod esli granichnyj cvet TEST AL,00000011B ;proveryaem bity 1-0 JZ FOUND_BOUND ;perehod esli granichnyj cvet MOV AL,FILL_COLOR ;granichnogo cveta net, zapolnyaem bajt MOV ES:[BX],AL ;vozvrashchaem bajt v videobufer . . FOUND_BOUND: Kogda eto vozmozhno, postarajtes', chtoby granicy pryamougol'nyh oblastej Vashih kartinok byli vyravneny na granicu dvuh, chetyreh ili vos'mi tochek, s tem chtoby pryamoe otobrazhenie v pamyat' imelo delo s celymi bajtami. Drugaya vozmozhnost', hotya i ne stol' byst- raya, sostoit v sozdanii opredelyaemyh pol'zovatelem psevdografi- cheskih simvolov [4.3.4] i vyvode ih na granice oblasti zapolne- niya. Koroche, v dannoj oblasti Vy imeete vse vozmozhnosti proyavit' soobrazitel'nost', a zachastuyu stoit podumat', a nuzhna li Vam stol' slozhnaya grafika v dannoj zadache. 4.4.7 Graficheskij vyvod s ispol'zovaniem simvolov psevdografiki. Kogda Vy vyvodite izobrazhenie tochka za tochkoj, to eto otnimaet ochen' mnogo vremeni, osobenno kogda sozdayutsya effekty mul'tipli- kacii. Odin iz sposobov ekonomii vremeni sostoit v svedenii vseh ili chasti vyvodimyh form k figuram, kotorye mogut byt' postroeny na matrice tochek 8*8. Takie figury mogut byt' sozdany, kak opre- delyaemye pol'zovatelem simvoly, kak pokazano v [4.3.4]. Posle togo, kak eti simvoly opredeleny oni vyvodyatsya na ekran ochen' bystro i prosto. |ti simvoly mogut vyvodit'sya vperemeshku s poto- chechnymi grafikami, kak obychnye bukvy. Odin iz sposobov bystrogo zapolneniya figury sostoit v posledovatel'nom vyvode vnutri figury polnost'yu zakrashennogo bloka. Otmetim, chto eti simvoly vsegda raspolagayutsya v standartnyh poziciyah kursora. Srednij uroven'. V etom primere risuetsya figura cheloveka, zanimayushchaya 2 simvola v vysotu i 2 simvola v shirinu. Kak ob®yasneno v [4.3.4] vektor preryvaniya 1FH ukazyvaet na nachalo oblasti dannyh, opredelyayushchih simvoly. CHetyre simvola mogut byt' vyvedeny obychnymi procedurami DOS ili BIOS. Legko sozdat' drugoj nabor simvolov, dlya vyvoda figury s rukami i nogami v drugom meste ekrana. Dva nabora simvo- lov mogut poocheredno menyat'sya v sosednih poziciyah kursora, sozda- vaya illyuziyu cheloveka, idushchego po ekranu. ;---v segmente dannyh CHARACTER_DATA DB 00110000B ;levyj verhnij kvadrant DB 01100111B DB 01100111B DB 00110011B DB 00011111B DB 00001111B DB 00001111B DB 00000111B DB 00000011B ;pravyj verhnij kvadrant DB 10001100B DB 10011000B DB 00110000B DB 11100000B DB 11000000B DB 11000000B DB 10000000B DB 00001111B ;levyj nizhnij kvadrant DB 00011111B DB 00011100B DB 00011000B DB 00011000B DB 00110000B DB 01100000B DB 00010000B DB 11000000B ;pravyj nizhnij kvadrant DB 11000000B DB 11000000B DB 11000000B DB 01100000B DB 01100000B DB 00010000B DB 00011110B DB 00000000B ;---ustanovka vektora preryvaniya PUSH DS ;sohranyaem DS MOV DX,OFFSET CHAR_DATA ;smeshchenie dlya dannyh v DX MOV AX,SEG CHAR_DATA ;segment dlya dannyh v DS MOV DS,AX ; MOV AH,25H ;funkciya ustanovki vektora MOV AL,1FH ;nomer vektora INT 21H ;ustanavlivaem vektor POP DS ;vosstanavlivaem DS ;---risuem figuru ;---pozicioniruem kursor na verhnij ryad MOV AH,2 ;funkciya ustanovki kursora MOV DH,13 ;stroka 13 MOV DL,20 ;stolbec 20 MOV BH,0 ;stranica 0 INT 10H ;ustanovka kursora ;---risuem verhnie dva simvola MOV DL,128 ;berem simvol 128 MOV AH,2 ;funkciya vyvoda/kursor vpered INT 21H ;vyvod simvola MOV DL,129 ;berem simvol 129 INT 21H ;vyvodim ego ;---pozicioniruem kursor na nizhnyuyu stroku MOV DH,14 ;stroka 14 MOV DL,20 ;stolbec 20 MOV AH,2 ;funkciya ustanovki kursora INT 10H ;ustanavlivaem kursor ;---risuem nizhnie dva simvola MOV DL,130 ;berem simvol 130 MOV AH,2 ;funkciya vyvoda/kursor vpered INT 21H ;vyvod simvola MOV DL,131 ;berem simvol 131 INT 21H ;vyvodim ego Razdel 5. Sdvig ekrana i stranicy. Sdvig ekrana i razbienie na stranicy - eto dva sposoba pereno- sa bloka informacii iz pamyati na ekran. Pri sdvige odna iz granic ekrana sdvigaetsya vnutr', stiraya informaciyu na protivopolozhnoj storone. Zatem osvobodivshayasya oblast' zapolnyaetsya iz pamyati. Povtorenie etogo dejstviya stroka za strokoj sozdaet illyuziyu sdvi- ga ekrana. S drugoj storony, razbienie na stranicy osnovano na odnovre- mennom hranenii neskol'kih ekranov informacii v videobufere i pereklyuchenii vyvoda s odnoj stranicy na druguyu. Ispol'zovanie displejnyh stranic nevozmozhno na monohromnom adaptore, poskol'ku ego pamyati hvataet tol'ko dlya odnogo simvol'nogo ekrana. Drugie videosistemy v bol'shinstve ekrannyh rezhimov mogut rabotat' s neskol'kimi stranicami. Ispol'zovanie stranic displeya osobenno polezno pri postroenii slozhnyh kartin "za kulisami"; posle togo kak eta rabota zavershena, novyj ekran vyvoditsya momental'no. Procedura, imitiruyushchaya rabotu so stranicami dlya monohromnogo adaptora privedena v [4.5.3]. Ona osobenno polezna, kogda Vy imeete delo s medlennym vyvodom na ekran v Bejsike. 4.5.1 Vertikal'nyj sdvig tekstovogo ekrana. Kogda tekstovyj ekran sdvigaetsya vverh, to stroki so 2-j po 25-yu perepisyvayutsya na stroki s 1-j po 24-yu, a sleduyushchaya stroka dannyh vyvoditsya v 25-j stroke. Pri etom verhnyaya stroka, poverh kotoroj osushchestvletsya vyvod teryaetsya, hotya ona prodolzhaet su- shchestvovat' v pamyati. Sdvig vniz ustroen analogichno. Vysokij uroven'. Bejsik utomitel'no medlitelen pri svoih manipulyaciyah s ekra- nom. Dlya bystrogo sdviga Vy mozhete pozhelat' ispol'zovat' procedu- ru na mashinnom yazyke, kotoraya ne delaet nichego drugogo, krome kak ispol'zuet preryvanie 10H, kak opisano nizhe v punkte srednij uroven'. Procedura pozvolyaet sdvigat' ves' ekran ili lyuboe okno v nem. Prilozhenie G pokazyvaet kak vklyuchat' podprogrammy na mashin- nom yazyke v Vashi programmy. Vasha programma na Bejsike dolzhna ukazyvat' koordinaty verhnego levogo i nizhnego pravogo uglov okna, kotorye mogut lezhat' v diapazone ot 0 do 24 i ot 0 do 79. Trebuetsya takzhe parametr, ukazyvayushchij napravlenie sdviga: vverh ili vniz (6 i 7, sootvetstvenno), chislo strok na kotoroe nuzhno sdvinut' (esli 0, to okno ochishchaetsya) i znachenie bajta atributov dlya ochishchaemyh strok (dlya "normal'nyh" - 7). Ispol'zujte dlya nih celye peremennye. V nizheprivedenno primere ekran sdvigaetsya vniz na odnu stroku, a zatem osvobodivshayasya stroka osvobozhdaetsya. 100 '''dannye dlya podprogrammy 110 DATA &H55, &H8B, &HEC, &H8B, &H76, &H12, &H8A 120 DATA &H24, &H8B, &H76, &H10, &H8A, &H04, &H8B 130 DATA &H76, &H0E, &H8A, &H2C, &H8B, &H76, &H0C 140 DATA &H8A, &H0C, &H8B, &H76, &H0A, &H8A, &H34 150 DATA &H8B, &H76, &H08, &H8A, &H14, &H8B, &H76 160 DATA &H06, &H8A, &H3C, &HCD, &H10, &H5D, &HCA 170 DATA &H0E, &H00 180 '''pomeshchaem dannye v segment &H2000 190 DEF SEG = &H2000 'pomeshchaem dannye nachinaya s &H2000 200 FOR N = 0 TO 43 '44 bajta 210 READ Q 'chitaem odin bajt 220 POKE N,Q 'pomeshchaem ego v pamyat' 230 NEXT 'sleduyushchij 300 '''v programme 310 GOSUB 500 'sdvigaem na stroku 320 LOCATE 1,1: PRINT TEXT$(LINEPTR); 'vyvodim stroku teksta 500 '''podprogramma sdviga 510 DEFINT A-Z 'ispol'zuem celye peremennye 520 TLR = 0 'levaya verhnyaya stroka 530 TLC = 0 'levyj verhnij stolbec 540 BRR = 24 'nizhnyaya pravaya stroka 550 BRC = 79 'nizhnij pravyj stolbec 560 NUMROWS = 1 'chislo strok sdviga 570 DIR = 7 'napravlenie sdviga vniz 580 FILL = 7 'zapolnenie obychnym atributom 590 DEF SEG = &H2000 'ukazyvaem na podprogrammu 600 SCROLL = 0 'nachinaem s 1-go bajta 610 CALL SCROLL(DIR,NUMROWS,TLR,TLC,BRR,BRC,FILL) 620 RETURN 'vse sdelano Srednij uroven'. Funkciya 6 preryvaniya 10H sdvigaet lyubuyu chast' ekrana vverh, a funkciya 7 - vniz. V oboih sluchayah AL soderzhit chislo strok sdviga, a kogda AL = 0, to ves' ekran chistitsya, a ne sdvigaetsya. CH:CL soderzhat stroku i stolbec levogo verhnego ugla, a DH:DL - soder- zhat koordinaty pravogo nizhnego ugla. Poyavlyashchiesya iz-za sdviga stroki chistye i oni vyvodyatsya s kodom atributov iz BH. ;---sdvig vverh na odnu stroku MOV AH,6 ;nomer funkcii sdviga vverh MOV AL,1 ;chislo strok sdviga MOV CH,0 ;stroka levogo verhnego ugla MOV CL,0 ;stolbec levogo verhnego ugla MOV DH,24 ;stroka pravogo nizhnego ugla MOV DL,79 ;stolbec pravogo nizhnego ugla MOV BH,7 ;atributy ochishchaemoj stroki INT 10H ;delaem sdvig Nizkij uroven'. Vertikal'nyj sdvig vsego ekrana eto trivial'naya zadacha, pos- kol'ku pravaya granica odnoj stroki v pamyati prodolzhaetsya levoj granicej sleduyushchej stroki. Sdvig vsego soderzhimogo videobufera na 160 bajt vverh po pamyati (80 simvolov v stroke * 2 bajta na sim- vol) privodit k sdvigu ekrana vniz na odnu stroku. Esli Vy pishete svoyu sobstvennuyu proceduru sdviga ekrana, ispol'zuyushchuyu pryamoe otobrazhenie v pamyat', to ne zabyvajte ob interferencii, kotoraya voznikaet na cvetnom displee i PCjr. |ta problema obsuzhdaetsya v [4.3.1]. Obychnoe reshenie etoj problemy sostoit v proverke status- nogo bajta, ozhidaya poka on razreshit zapis' v videobufer. Vam pridetsya poeksperimentirovat', chtoby opredelit' skol'ko dannyh Vy mozhete zapisat' za odin cikl. Drugoe reshenie etoj problemy sostoit v vyklyuchenii ekrana na vremya operacii sdviga, a zatem v ego vosstanovlenii. "Vyklyuchenie ekrana" podrazumevaet, chto vyvod soderzhashchihsya v videobufere dan- nyh zapreshchen, no sam bufer pri etom ne izmenyaetsya. |tot process ispol'zuetsya funkciej sdviga BIOS, ispol'zovannoj vyshe. Hotya eto ne ochen' priyatno dlya glaz, no vse-taki ne tak ploho, kak uzhe upominavshayasya interferenciya. Dlya vyklyucheniya ekrana u cvetnogo graficheskogo displeya nado sbrosit' bit 3 porta s adresom 3D8H. Izmenenie bita nazad na 1 momental'no vklyuchaet ekran obratno. |tot adres porta sootvetst- vuet registru vybora rezhima cvetnogo graficheskogo adaptora. |tot odnobajtnyj registr tol'ko dlya zapisi, poetomu programma ne mozhet prosto prochitat' ego, izmenit' znachenie bita 3 i vernut' prochi- tannyj bajt. Vmesto etogo Vam neobhodimo opredelit' takzhe pra- vil'nuyu ustanovku vseh ostal'nyh bitov (perechislennyh v [4.1.2]). Dlya PCjr etot bit raspolozhen v registre upravleniya rezhimom 1 massiva vorot displeya. V [4.1.1] ob®yasneno kak poluchit' dostup i zaprogrammirovat' etot registr. 4.5.2 Sdvig tekstovogo ekrana gorizontal'no. Gorizontal'nyj sdvig inogda trebuetsya v special'nyh programmah obrabotki teksta, takih kak tekstovye redaktory. Operacionnaya sistema ne imeet dlya etogo special'nyh sredstv. Po etoj prichine dannaya zadacha nemnogo slozhnee chem vertikal'nyj sdvig - no nesu- shchestvenno. Rassmotrim sluchaj, kogda Vy hotite, chtoby ekran sdvi- galsya vlevo na 5 pozicij. Pri etom levye 5 stolbcov ischeznut, ves' ostal'noj tekst sdvigaetsya vlevo, a samye pravye 5 stolbcov dolzhny byt' ochishcheny. Poskol'ku videobufer predstavlyaet iz sebya odnu dlinnuyu stroku, to esli kazhdyj simvol bufera sdvinut' na 10 bajtov vniz, to summarnyj effekt budet sostoyat' v tom, chto samye levye 5 simvolov kazhdoj stroki budut peredvinuty v poslednie 5 pozicij predydushchej stroki. Takim obrazom, ves' ekran budet sdvi- nut vlevo na 5 pozicij, peredvigaya 5 nenuzhnyh stolbcov v pravuyu chast' ekrana. Vse chto posle ostaetsya - eto ochistit' pravye 5 stolbcov. |to legko delaetsya s pomoshch'yu procedury vertikal'nogo sdviga [4.5.1], kotoraya mozhet vypolnyat'sya dlya lyuboj chasti ekrana i kotoraya ochishchaet ukazannuyu oblast' esli ukazat' sdvig na 0 strok. Risunok 4-6 illyustriruet etot metod. Nizkij uroven'. V etom primere osushchestvlyaetsya sdvig na 5 pozicij vlevo. Legko izmenit' ego dlya sdviga vpravo ili dlya drugogo znacheniya pozicij sdviga. Pri ispol'zovanii pryamogo otobrazheniya v pamyat' etot metod daet prakticheski momental'nyj sdvig ekrana. ;---sdvigaem vse vniz na 10 bajtov MOV AX,0B000H ;ukazyvaem na bufer monohromnogo MOV ES,AX ;displeya MOV DS,AX ; MOV SI,10 ;sdvigaem iz SI ... MOV DI,0 ;... v DI MOV CX,1995 ;sdvigaem vse krome poslednih 5 bajt REP MOVSW ;osushchestvlyaem sdvig ;---ochishchaem pravyj kraj MOV AH,6 ;funkciya vertikal'nogo sdviga MOV AL,0 ;sdvig na 0 strok chistit okno MOV CH,0 ;stroka levogo verhnego ugla MOV CL,75 ;stolbec levogo verhnego ugla MOV DH,24 ;stroka pravogo nizhnego ugla MOV DL,79 ;stolbec pravogo nizhnego ugla MOV BH,7 ;atribut dlya ochishchaemyh pozicij INT 10H ;chistim okno 4.5.3 Pereklyuchenie mezhdu tekstovymi stranicami. Poskol'ku vse videosistemy, krome monohromnogo displeya, imeyut dostatochno pamyati dlya neskol'kih videobuferov, to odnovremenno mogut byt' skonstruirovany neskol'ko ekranov, kazhdyj iz kotoryh mozhet byt' vyveden v nuzhnyj moment. Vmesto togo, chtoby peredvi- gat' dannye v videopamyati, monitor posylaet dannye iz drugoj oblasti videopamyati. CHislo dostupnyh stranic mozhet menyat'sya v zavisimosti ot videosistemy i rezhima displeya. Privodim kratkuyu svodku: Rezhim Tip CHislo stranic Nachalo bufera 0 alfavitnocifrovoj 8 B800 1 alfavitnocifrovoj 8 B800 2 alfavitnocifrovoj 8 B800 3 alfavitnocifrovoj 8 B800 4 graficheskij 1 B800 5 graficheskij 1 B800 6 graficheskij 1 B800 7 alfavitnocifrovoj 1/8 B800 8 graficheskij peremennoe B800 9 graficheskij peremennoe B800 A graficheskij peremennoe B800 D graficheskij 2/4/8 A000 E graficheskij 1/2/4 A000 F graficheskij 1/2 A000 10 graficheskij 1/2 A000 Rezhimy 8-A - graficheskie rezhimy PCjr; chislo stranic dlya nih me- nyaetsya v zavisimosti ot togo, skol'ko operativnoj pamyati otvedeno pod videobufer. Razmer stranicy raven 2K ili 4K dlya alfavitnocif- rovyh rezhimov, 32K - dlya chetyreh cvetov pri vysokom razreshenii ili 16 cvetov pri umerennom razreshenii i 16K - dlya vseh ostal'nyh rezhimov. Rezhimy D-10 podderzhivayutsya EGA. Kolichestvo stranic me- nyaetsya v zavisimosti ot ustanovlennoj pamyati. Rezhimy F i 10 tre- buyut nalichiya ne menee 128K pamyati. Rezhim 7 razreshaet odnu strani- cu dlya monohromnogo adaptora i 8 stranic dlya EGA. Monohromnyj adaptor ne imeet pamyati dlya dopolnitel'nyh stra- nic. Odnako net nikakih prichin, po kotorym chast' osnovnoj pamyati nel'zya bylo by ispol'zovat' kak bufer displeya. V etom sluchae stranichnaya organizaciya osushchestvlyaetsya za schet bystrogo obmena vsego soderzhimogo bufera v pamyati s videobuferom (adres kotorogo B000:0000). Bufer v osnovnoj pamyati mozhno rassmatrivat' kak "psevdostranicu". Hotya eto i ne nastoyashchee razbienie na stranicy, no rezul'tat budet pochti takoj zhe, esli dlya peresylki dannyh Vy budete ispol'zovat' assemblernuyu proceduru. Pri ispol'zovanii stranic nado pozabotit'sya o tom, chtoby ope- racii vyvoda na ekran napravlyalis' na nuzhnuyu stranicu. Programma ne obyazana vyvodit' dannye na tu stranicu, kotoraya v dannyj mo- ment izobrazhaetsya na ekrane. Na samom dele, chasto naoborot zhela- tel'no konstruirovat' ekran "za kulisami", a zatem momental'no vyvodit' uzhe gotovoe izobrazhenie. |tot metod osobenno polezen, kogda neobhodimo konstruirovat' slozhnyj vyvod v Bejsike, u koto- rogo vyvod ochen' medlennyj. BIOS hranit v svoej oblasti dannyh odnobajtnuyu peremennuyu, ukazyvayushchuyu, kakaya iz stranic vyvoditsya v dannyj moment. Diapazon znachenij etoj peremennoj ot 0 do 7. Ona raspolozhena po adresu 0040:0062. Vysokij uroven'. Bejsik ispol'zuet komandu SCREEN dlya ustanovki stranicy, na kotoruyu budet idti vyvod (aktivnoj stranicy) i vyvodimoj stranicy (vidimoj stranicy). Stranicy numeruyutsya ot 0 do 3 dlya tekstov s 80 simvolami v stroke i ot 0 do 7 dlya 40-simvol'nyh. Tretij para- metr za komandoj SCREEN ustanavlivaet aktivnuyu stranicu. SCREEN,,2 privodit k tomu, chto vse operatory PRINT budut rabotat' so stranicej 2. CHetvertyj parametr ustanavlivaet vidimuyu strani- cu. SCREEN,,,1 privodit k tomu, chto na ekran budet vyvodit'sya stranica 1. Kogda vidimaya stranica ne ukazyvaetsya, to avtomati- cheski prinimaetsya, chto ona sovpadaet s aktivnoj. Dlya vydeleniya pamyati pod stranicy na PCjr ispol'zuetsya opera- tor CLEAR. |tot operator ustanavlivaet obshchee kolichestvo pamyati, otvodimoe pod bufer ekrana, kotoroe pri starte ravno 16384 bajta. CHtoby dobavit' vtoruyu stranicu razmerom 16K, napishite CLEAR,,,32768. Dobavochnye tekstovye stranicy trebuyut 4096 bajtov kazhdaya. Pri uslovii, chto takim obrazom byla otvedena pamyat', komandy operatora SCREEN dlya raboty so stranicami rabotayut opi- sannym obrazom. Tol'ko PCjr imeet dobavochnyj parametr operatora SCREEN, kotoryj stiraet stranicu (t.e. perevodit ee v cvet fona). Detali opisany v rukovodstve po Bejsiku. Operator PCOPY takzhe unikalen dlya PCjr. On kopiruet izobrazhenie iz odnoj stranicy v druguyu. Naprimer, PCOPY 2,1 celikom kopiruet stranicu 2 na stra- nicu 1. Hotya monohromnyj adaptor ne imeet pamyati dlya stranic displeya, odnako imeetsya sposob ustroit' svoego roda "psevdostranicy". Nizheprivedennaya procedura na mashinnom yazyke rassmatrivaet blok pamyati kak displejnuyu stranicu. Pri vyzove etoj procedury ona obmenivaet soderzhimoe videobufera s soderzhimym etoj oblasti pamya- ti. V rezul'tate my imeem kak by dve displejnye stranicy. (V prilozhenii G ob®yasnyaetsya kak vklyuchat' podprogrammy na mashinnom yazyke v programmy na Bejsike.) Vy dolzhny otvesti blok pamyati razmerom 4000 bajt dlya psevdost- ranicy, pomimo pamyati, soderzhashchej programmu na mashinnom yazyke. V primere blok nachinaetsya s adresa segmenta &H2000, a procedura pomeshchena po adresu &H2200. Segmentnyj adres bloka soderzhitsya v 9-m i 10-m bajtah mashinnogo koda i Vy legko mozhete izmenit' ego. Vidno, chto adres &H2000 predstavlen kak &H00, &H20 v operatore DATA. |to sledstvie togo, chto mladshie cifry vsegda razmeshchayutsya v mladshih yachejkah pamyati. Esli Vy hotite razmestit' blok, skazhem po adresu 1234:0000, to nado izmenit' bajty 9 i 10 na &H34, &H12. Vam mozhet potrebovat'sya ochistit' psevdostarnicu ot vsyakoj erundy, ostavshejsya ot drugih programm. V strokah 230-260 eto dostigaetsya za schet zasylki simvola probela (ASCII 32) v kazhdyj bajt (32 sluzhit "normal'nym" bajtom atributov). Programma mozhet osushchestvlyat' vyvod na ekran obychnym obrazom, a zatem perenosit' soderzhimoe na psevdostranicu. No esli hotite, to Vy mozhete osu- shchestvlyat' vyvod pryamo na psevdostranicu, ispol'zuya pryamoe otobra- zhenie v pamyat'. 100 '''mashinnyj kod 110 DATA &H1E, &H06, &HB8, &H00, &HB0, &H8E, &HC0 120 DATA &HB8, (3&H00, &H20), &H8E, &HD8, &HBF, &H00 130 DATA &H00, &HBE, &H00, &H00, &HFC, &HB9, &HD0 140 DATA &H07, &H26, &H8B, &H1D, &HAD, &HAB, &H89 150 DATA &H5D, &HFE, &HE2, &HF6, &H07, &H1F, &HCB 160 '''pomeshchaem kod v pamyat' 170 DEF SEG = &H2200 'ukazyvaem adres procedury 180 FOR N = 0 TO 34 'nachinaem s pervogo bajta 190 READ Q 'chitaem bajt procedury 200 POKE N,Q 'pishem ego v pamyat' 210 NEXT ' 220 '''chistim psvedostranicu 230 DEF SEG = &H2000 'adres nachala psevdostranicy 240 FOR N = 0 TO 3999 'dlya kazhdogo simvola i atributa 250 POKE N,32 'pomeshchaem kod 32 260 NEXT 'poka ne ochistim ves' bufer 500 '''pishem pryamo v psevdostranicu 510 DEF SEG = &H2000 'ukazyvaem na ee adres 520 S$ = "PSEUDOPAGE" 'vyvodim slovo posredi stranicy 530 M = LEN(S$) 'poluchaem dlinu stroki 540 FOR N = 1 TO M 'dlya kazhdogo simvola stroki 550 POKE N*2+2000, ASC(MID$(S$,N,1)) 'pomeshchaem ego v bufer 560 NEXT ' 600 '''teper' ispol'zuem proceduru 610 PRINT "SCRREN 1" 'pechataem soobshenie na ekran 620 DEF SEG = &H2200 'ukazyvaem na proceduru 630 PSEUDOPAGE = 0 'nachinaem s nachala procedury 640 CALL PSEUDOPAGE 'obmenivaem stranicy 650 CALL PSEUDOPAGE 'povtoryaem obmen 660 ... Srednij uroven'. Funkciya 5 preryvaniya 10H vybiraet tekushchuyu stranicu displeya dlya vyvoda. Nado prosto pomestit' nomer stranicy v AL: ;---ustanovka vidimoj stranicy MOV AH,5 ;nomer funkcii MOV AL,2 ;nomer stranicy (nachinaya s 0) INT 10H ;ustanavlivaem stranicu Odnako eta funkciya ne ustanavlivaet stranicu, na kotoruyu budet idti vyvod. Lyuboe iz preryvanij BIOS, kotorye vyvodyat na ekran (funkcii preryvaniya 10H), trebuet chtoby nomer stranicy byl ukazan v kachestve vhodnogo parametra v odnom iz registrov. Odnako vse preryvaniya vyvoda na ekran MS DOS pishut na tekushchuyu vidimuyu stra- nicu. Takim obrazom, dlya "zakulisnyh" operacij Vam neobhodimo pol'zovat'sya preryvaniem 10H. Dlya polucheniya informacii o tekushchej stranice nado vypolnit' funkciyu F preryvaniya 10H, kotoraya vozvrashchaet status displeya. Nomer stranicy pri etom vozvrashchaetsya v BH. Nizkij uroven'. Displejnye stranicy vybirayutsya za schet izmeneniya tochki video- pamyati, nachinaya s kotoroj monitor prinimaet dannye. |ta tochka pamyati ustanavlivaetsya registrami 12 (starshij bajt) i 13 (mladshij bajt) mikroshemy 6845, kotorye nazyvayutsya registrami startovogo adresa. Znacheniya adresov razdela stranic dlya bufera, nachinayushchego- sya s B800 takie: 40 simvolov 80 simvolov stranica 0 0000H 0000H 1 0400H 0800H 2 0800H 1000H 3 0C00H 1800H 4 1000H 5 1400H 6 1800H 7 1C00H V [4.1.1] ob®yasnyaetsya kak programmirovat' registry mikroshemy 6845, a v [4.5.4] soderzhitsya primer programmirovaniya startovogo adresa. V poslednem primere nado prosto prisvoit' BX odno iz znachenij vysheprivedennoj tablicy. Konechno, pri etom ustanavli- vaetsya tol'ko vyvodimaya stranica. Dlya zapisi v opredelennuyu stra- nicu na nizkom urovne nado ispol'zovat' odno iz znachenij tablicy v kachestve smeshcheniya v videobufere pri pryamom otobrazhenii v pa- myat'. Poskol'ku pryamoe otobrazhenie v pamyat' rabotaet ochen' bystro, to illyuziya stranic mozhet byt' legko sozdana na monohromnom disp- lee. Vydelite blok razmerom 4000 bajtov dlya hraneniya stranicy. Hotya monohromnyj adaptor ne mozhet neposredstvenno chitat' iz obych- noj pamyati, soderzhimoe etogo bufera i videobufera mozhno obmenyat' nastol'ko bystro, chto nikto ne zmetit raznicy. Sleduyushchaya procedu- ra obmenivaet soderzhimoe etih dvuh oblastej. ;---v segmente dannyh PPAGE DW 2000 DUP(720H) ;zapolnyaem bufer probelami ;---peresylka mezhdu psevdostranicej i videobuferom MOV AX,0B000H ;ukazyvaem na videobufer MOV ES,AX ; MOV AX,SEG PPAGE ;ukazyvaem na psevdostranicu MOV DS,AX ; REPEAT: MOV DI,0 ;DI na nachalo videobufera MOV SI,OFFSET PPAGE ;SI na nachalo psevdostranicy CLD ;napravlenie vpered MOV CX,2000 ;budem peresylat' 2000 slov NEXT_WORD: MOV BX,ES:[DI] ;berem slovo iz videobufera v BX LODSW ;slovo iz psevdostranicy v AX STOSW ;slovo iz AX v videobufer MOV DS:[DI]-2,BX ;slovo iz BX v psevdostranicu LOOP NEXT_WORD ; PCjr hranit registr stranicy v porte s adresom 3DFH. Znachenie bitov etogo registra sleduyushchee: bity 2-0 kakaya stranica vyvoditsya (ot 0 do 7) 5-3 kakaya stranica pishetsya (ot 0 do 7) pri vyvode po adresu segmenta B800H 7-6 = 00 dlya vseh tekstovyh rezhimov = 01 dlya graficheskih rezhimov s 16K = 11 dlya graficheskih rezhimov s 32K 4.5.4 Sdvig mezhdu stranicami teksta. Poskol'ku stranicy teksta prilegayut drug k drugu v videobufe- re, to nebol'shoj tekstovyj massiv mozhet celikom pomeshchat'sya v etoj pamyati. V etom sluchae tekst sdvigat'sya vverh i vniz po ekranu ne peredvigayas' real'no v bufere. Vmesto etogo ekran nachinaet poka- zyvat' soderzhimoe bufera, nachinaya s razlichnyh tochek i tem samym sozdavaya illyuziyu sdviga. |tot metod nazyvaetsya apparatnym sdvi- gom. Apparatnyj sdvig dostigaetsya za schet izmeneniya startovogo adresa displeya, kotoryj yavlyaetsya chislom, ukazyvayushchim na simvol v videobufere, kotoryj budet vyvodit'sya v levom verhnem uglu ekra- na. Dobavlenie 80 k etomu chislu "sdvigaet" ves' ekran na odnu stroku vverh, a vychitanie 80 - na odnu stroku vniz. V rezhime s 40 simvolami v stroke nado vmesto 80 pribavlyat' ili vychitat' 40. Na ris. 4-7 privedena diagramma apparatnogo sdviga. Otmetim, chto registr startovogo adresa ne schitaet bajty atri- butov, poetomu Vy dolzhny vychislyat' adresa pamyati po-drugomu, chem pri pryamom otobrazhenii v pamyat'. Imejte takzhe vvidu, chto nesmotrya na nalichie razryvov pamyati mezhdu granicami stranic (96 bajtov mezhdu 80-simvol'nymi stranicami i 48 bajtov mezhdu 40-simvol'nymi stranicami) mikroshema 6845 propuskaet eti oblasti i sdvig nepre- ryvno proishodit s odnoj stranicy na sleduyushchuyu. Apparatnyj sdvig proishodit nastol'ko bystro, chto Vam mozhet okazat'sya neobhodimym vstavit' proceduru zaderzhki, chtoby pol'zovatel' imel vozmozhnost' uvidet' naskol'ko sdvinulsya ekran. BIOS hranit tekushchee znachenie registra startovogo adresa v peremennoj v svoej oblasti dannyh. |ta dvuhbajtnaya peremennaya raspolozhena po adresu 0040:004EH. Nizkij uroven'. Startovyj adres soderzhitsya v registrah 12 (starshij bajt) i 13 (mladshij bajt) mikroshemy 6845. V [4.1.1] ob®yasnyaetsya rabota etoj mikroshemy. Prezhde chem adresuemyj bajt napravlyaetsya v port s adresom 3D5H, neobhodimo poslat' nomer adresuemogo registra v port 3D4H. V dannom primere ekran sdvigaetsya vverh na odnu stro- ku. Peremennaya START_ADDRESS soderzhit adres pervogo simvola teku- shchej verhnej stroki ekrana. MOV BX,START_ADDRESS ;nachinaem s nachala bufera ADD BX,80 ;sdvigaem na 1 stroku (80 simvolov) MOV DX,3D4H ;vyvod v adresnyj registr MOV AL,12 ;adresuem registr 12 OUT DX,AL ;posylaem zapros INC DX ;teper' vyvodim v komandnyj registr MOV AL,BH ;starshee slovo v AL OUT DX,AL ;posylaem ego v registr 12 DEC DX ;obratno k adresnomu registru MOV AL,13 ;adresuem registr 13 OUT DX,AL ;posylaem zapros INC DX ;snova komandnyj registr MOV AL,BL ;mladshee slovo v AL OUT DX,AL ;posylaem v registr 13 Glava 5. Diskovye nakopiteli. Razdel 1. Upravlenie raspredeleniem diska. Vse diski, kak gibkie, tak i zhestkie, organizovany odinakovym obrazom. Poverhnost' diska razdelena na ryad koncentricheskih ko- lec, nazyvaemyh dorozhkami, a dorozhki delyatsya radial'no na sekto- ra. Naprimer, standartnaya disketa s diametrom 5 1/4 dyujma imeet 40 dorozhek i v sisteme MS DOS 2.0 kazhdaya dorozhka razbita na 9 sektorov (15 sektorov na diskete emkost'yu 1.2 Mbajta i 17 na fiksirovannom diske). Razmer sektora 512 bajt, i 512 bajt * 9 sektorov * 40 dorozhek * 2 storony daet v itoge emkost' diskety 360K. Vse tipy diskov ispol'zuyut razmer sektora 512 bajt v MS DOS. Fajl raspredelen po takomu kolichestvu sektorov, kotoroe neob- hodimo, chtoby vmestit' ego. Tol'ko neskol'ko sektorov na vneshnem obode diskety zarezervirovany dlya special'nyh nuzhd. Ostal'nye dostupny na osnove pravila "pervyj podoshel - pervogo obsluzhat". |to oznachaet, chto po mere zapolneniya diska dannymi sektora poste- penno zapolnyayutsya po napravleniyu k centru diska. Pri unichtozhenii fajla sektora osvobozhdayutsya i so vremenem svobodnye oblasti sta- novyatsya razbrosannymi po disku, razbivaya novye fajly i zamedlyaya dostup k nim dlya chteniya i zapisi. Fiksirovannye diski imeyut nekotorye special'nye harakteristi- ki. CHasto oni sostoyat iz dvuh ili bolee parallel'nyh plastin, u kazhdoj iz kotoryh est' dve golovki, chtoby chitat' obe ih storony. Vse dorozhki, raspolozhennye na dannom rasstoyanii ot centra, vmeste nazyvayutsya cilindrom. Poskol'ku golovki vseh diskov dvigayutsya tandemom, to dostigaetsya ekonomiya peremeshchenij esli zapolnyat' vse dorozhki odnogo cilindra, prezhde chem perehodit' k sleduyushchemu. Gruppy cilindrov mogut otnosit'sya k razlichnym operacionnym siste- mam. Programma DOS FDISK mozhet razbivat' fiksirovannyj disk na neskol'ko razdelov (do chetyreh) raznogo razmera. Po etoj prichine parametry fiksirovannogo diska mogut sil'no otlichat'sya. Diskovye sektora opredelyayutsya magnitnoj informaciej, kotoruyu zapisyvaet utilita formatizacii diska. Informaciya vklyuchaet iden- tifikacionnyj nomer kazhdogo sektora. BIOS numeruet sektora 1-8, 1-9 ili 1-15, v zavisimosti ot emkosti diska. Dorozhki ne marki- ruyutsya, vmesto etogo oni opredelyayutsya mehanicheski po smeshcheniyu golovki chteniya/zapisi ot vneshnego kraya diska. Dorozhki numeruyutsya ot 0 do 39 dlya disket diametrom 5 1/4 dyujma, a dlya diskov bol'shej emkosti ih mozhet byt' bol'she. Diskovye funkcii BIOS obrashchayutsya k opredelennomu sektoru, ukazyvaya nomera dorozhki i sektora. Odnako funkcii DOS rassmatrivayut vse sektora diska, kak odnu cep', koto- raya numeruetsya podryad, nachinaya ot 0, poetomu kazhdyj sektor imeet svoj logicheskij nomer sektora. Dlya disket pervyj sektor (dorozhka 0, sektor 1) soderzhit zapis' nachal'noj zagruzki, kotoraya yavlyaetsya nebol'shoj programmoj, pozvo- lyayushchej komp'yuteru schitat' s diskovogo nakopitelya ostal'nye chasti MS DOS. Zatem idut dve kopii tablicy razmeshcheniya fajlov, kotorye soderzhat informaciyu o raspredelenii diskovogo prostranstva (vto- raya kopiya hranitsya iz soobrazhenij bezopasnosti). Zatem idet kor- nevoj katalog, kotoryj soderzhit spisok fajlov i ssylok na podka- talogi, a takzhe ukazyvaet v kakom meste diska oni nachinayutsya. Nakonec, dalee idut dve nebol'shie programmy DOS IBMBIO.COM i IBMDOS.COM, kotorye schityvayutsya pri starte i obespechivayut komp'yu- ter vozmozhnostyami neobhodimymi dlya nahozhdeniya i zagruzki fajla C