Rober ZHurden. Spravochnik programmista na personal'nom komp'yutere firmy IBM Oglavlenie. Vvedenie Soglasheniya o chislah, prinyatye v etoj knige. Vvedenie Glava 1. Sistemnye resursy. Razdel 1. Reviziya sistemnyh resursov. Dostup k mikrosheme interfejsa s periferiej 8255. Opredelenie tipa IBM PC. Opredelenie versii MS DOS. Opredelenie chisla i tipov adapterov displeya. Opredelenie chisla i tipa diskovyh nakopitelej. Opredelenie chisla i tipa periferijnyh ustrojstv. Reviziya kolichestva pamyati. Razdel 2. Upravlenie preryvaniyami. Programmirovanie kontrollera preryvanij 8259. Zapret/razreshenie otdel'nyh apparatnyh preryvanij. Napisanie sobstvennogo preryvaniya. Dopolnenie k sushchestvuyushchemu preryvaniyu. Razdel 3. Upravlenie programmami. Manipulyacii s pamyat'yu. Zapusk odnoj programmy iz drugoj. Ispol'zovanie komand interfejsa s pol'zovatelem iz programmy. Sohranenie programmy v pamyati posle zaversheniya. Zagruzka i zapusk programmnyh overleev. Preobrazovanie programm iz tipa .EXE v tip .COM. Glava 2. Tajmery i zvuk. Razdel 1. Ustanovka i chtenie tajmera. Programmirovanie mikroshemy tajmera 8253/8254. Ustanovka/chtenie vremeni. Ustanovka/chtenie daty. Ustanovka/chtenie chasov real'nogo vremeni. Zaderzhka programmnyh operacij. Operacii zaprogrammirovannye vo vremeni. Upravlenie rabotoj v real'nom vremeni. Generaciya sluchajnyh chisel s pomoshch'yu mikroshemy tajmera. Razdel 2. Sozdanie zvuka. Programmirovanie generatora zvuka 76496 (tol'ko PCjr). Generaciya tona. Generaciya zvuka odnovremenno s drugimi dejstviyami. Gudok dinamika. Generaciya nabora tonov. Generaciya stroki tonov, odnovremenno s drugimi operaciyami. Sozdanie plavnogo perehoda tonov. Sozdanie zvukovyh effektov. Odnovremennaya generaciya raznyh zvukov. Glava 3. Klaviatura. Razdel 1. Upravlenie klaviaturoj. Ochistka bufera klaviatury. Proverka simvolov v bufere. Ozhidat' vvod simvola i ne vyvodit' ego na ekran. Ozhidanie nazhatiya klavishi i eho na ekran. Priem simvola bez ozhidaniya. Poluchenie stroki simvolov. Proverka/ustanovka statusa klavish-pereklyuchatelej. Napisanie procedury vvoda s klaviatury obshchego naznacheniya. Pereprogrammirovanie preryvaniya klaviatury. Razdel 2. Dostup k otdel'nym klavisham. Ispol'zovanie klavish <BackSpace>, <Enter>, <Escape> i <Tab>. Ispol'zovanie klavish-pereklyuchatelej: <Shift>, <Ctrl> i <Alt>. Ispol'zovanie klavish-pereklyuchatelej: NumLock, CapsLock, Ins i ScrollLock. Ispol'zovanie cifrovoj dopolnitel'noj klaviatury i kla- vish peremeshcheniya kursora. Ispol'zovanie funkcional'nyh klavish. Pereprogrammirovanie otdel'nyh klavish. Sozdanie makroopredelenij dlya otdel'nyh klavish. Sozdanie procedury obrabotki Ctrl-Break. Pereprogrammirovanie klavishi PrtSc. Razdel 3: Svodka kodov klavish i primenenij. Predopredelennoe ispol'zovanie klavish. Svodnaya tablica skan-kodov. Svodnaya tablica kodov ASCII Svodka kodov psevdografiki dlya postroeniya ramok. Svodnaya tablica rasshirennyh kodov. Glava 4. Vyvod na terminal. Razdel 1. Upravlenie vyvodom na terminal. Programmirovanie kontrollera displeya 6845. Ustanovka/proverka rezhima displeya. Ustanovka atributov/cvetov simvolov. Ustanovka cveta granicy ekrana. Ochistka chasti/vsego ekrana. Pereklyuchenie mezhdu videoadaptorami. Razdel 2. Upravlenie kursorom. Ustanovka kursora v absolyutnuyu poziciyu. Otnositel'noe pozicionirovanie kursora Vklyuchenie i vyklyuchenie kursora. Izmenenie formy kursora. CHtenie/sohranenie/vosstanovlenie pozicii kursora. Sozdanie al'ternativnyh tipov kursora. Razdel 3. Vyvod simvolov na ekran. Vyvod na ekran odnogo simvola. Vyvod stroki simvolov na ekran. CHtenie simvola i ego atributov v dannoj pozicii. Sozdanie special'nyh simvolov. Svodka dannyh dlya opisaniya simvolov. Razdel 4. Vyvod tochechnoj grafiki. Ustanovka cvetov dlya tochechnoj grafiki. Risovanie tochki na ekrane (monohromnyj, cvetnoj i PCjr). Risovanie tochki na ekrane (EGA). Opredelenie cveta tochki ekrana. Risovanie linij na ekrane. Zapolnenie oblastej ekrana. Graficheskij vyvod s ispol'zovaniem simvolov psevdografiki. Razdel 5. Sdvig ekrana i stranicy. Vertikal'nyj sdvig tekstovogo ekrana. Sdvig tekstovogo ekrana gorizontal'no. Pereklyuchenie mezhdu tekstovymi stranicami. Sdvig mezhdu stranicami teksta. Glava 5. Diskovye nakopiteli. Razdel 1. Upravlenie raspredeleniem diska. CHtenie tablicy razmeshcheniya fajlov. Opredelenie dostupnogo diskovogo prostranstva. Poluchenie/ustanovka razmera fajla. Vosstanovlenie posle oshibok, svyazannyh s nehvatkoj prostranstva na diske. Razdel 2. Rabota s katalogami diska. CHtenie/izmenenie kornevogo kataloga. Sozdanie/udalenie podkataloga. CHtenie/izmenenie podkataloga. Poluchenie/ustanovka tekushchego kataloga. Poluchenie/ustanovka vremeni i daty poslednego dostupa k fajlu. Spryatannye i zashchishchennye ot zapisi fajly. CHtenie/izmenenie metki toma. Razdel 3. Podgotovka k rabote s fajlami. Ustanovka/proverka nakopitelya po umolchaniyu. Sozdanie/udalenie fajla. Otkrytie/zakrytie fajla. Pereimenovanie fajla; izmenenie pozicii fajla v kataloge. Podgotovka k fajlovym operaciyam. Analiz informacii komandnoj stroki. Razdel 4. CHtenie i zapis' fajla. Programmirovanie kontrollera NGMD 765 i mikroshemy prya- mogo dostupa k pamyati 8237. CHtenie/zapis' opredelennyh sektorov. Zapis' v posledovatel'nye fajly. CHtenie iz posledovatel'nyh fajlov. Zapis' v fajly pryamogo dostupa. CHtenie iz fajlov pryamogo dostupa. Proverka dannyh posle operacij chteniya/zapisi. Opredelenie diskovyh oshibok i vosstanovlenie posle nih. Glava 6. Printer. Razdel 1. Upravlenie rabotoj printera. Inicializaciya porta printera/povtornaya inicializaciya printera. Proverka togo, chto printer svyazan s mashinoj. Interpretaciya oshibok printera i vosstanovlenie posle nih. Pereklyuchenie mezhdu dvumya ili neskol'kimi printerami. Razdel 2. Ustanovka specifikacij pechati. Ustanovka tekstovogo i graficheskogo rezhimov. Upravlenie rasstoyaniem mezhdu strokami. Upravlenie dvizheniem bumagi. Upravlenie polozheniem pechatayushchej golovki. Ustanovka pozicij tabulyacii. Izmenenie shrifta pechati. Sravnenie vozmozhnostej printerov IBM. Razdel 3. Posylka dannyh na printer. Vyvod tekstovyh ili graficheskih dannyh na printer. Vyravnivanie pravogo polya. Proporcional'naya pechat'. Pechat' special'nyh simvolov. Kopirovanie ekrana na printer (damp ekrana). Glava 7. Vvod/vyvod. Razdel 1. Dostup k posledovatel'nomu portu. Programmirovanie mikroshemy UART 8250. Inicializaciya posledovatel'nogo porta. Ustanovka tekushchego kommunikacionnogo porta. Opredelenie statusa kommunikacionnogo porta. Inicializaciya i upravlenie modemom. Peredacha dannyh. Poluchenie dannyh. Posylka/poluchenie dannyh s pomoshch'yu kommunikacionnogo preryvaniya. Svodka upravlyayushchih kodov, ispol'zuemyh pri kommunikacii. Razdel 2. Sozdanie drajvera ustrojstva. Sozdanie zagolovka drajvera. Sozdanie strategii ustrojstva. Sozdanie obrabotchika preryvaniya ustrojstva. Dostup k drajveru ustrojstva. Obnaruzhenie i analiz oshibok ustrojstva. Razdel 3. Ispol'zovanie special'nyh ustrojstv vvoda/vyvoda. CHtenie/zapis' s kassetnogo magnitofona. CHtenie pozicii svetovogo pera. Poluchenie analogovogo vvoda cherez igrovoj port. Poluchenie cifrovogo vvoda iz igrovogo porta. Prilozheniya. Prilozhenie A. Dvoichnye i shestnadcatirichnye chisla i adre- saciya pamyati. Prilozhenie B. Bitovye operacii v Bejsike. Prilozhenie V. Osnovnye svedeniya ob yazyke assemblera. Prilozhenie G. Vklyuchenie assemblernyh procedur v programmy na Bejsike. Prilozhenie D. Ispol'zovanie drajvera ustrojstva ANSI.SYS. Prilozhenie E. Nabor instrukcij mikroprocessora 8088. Prilozhenie ZH. Nabor instrukcij mikroprocessora 80286. Prilozhenie Z. Tolkovyj slovar' IBM PC. Glava 1. Sistemnye resursy. Razdel 1. Reviziya sistemnyh resursov. Odnoj iz pervyh zadach posle zagruzki zadachi yavlyaetsya proverka kuda my popali: na kakom tipe IBM PC zapushchena zadacha?... pod kakoj versiej MS DOS?... skol'ko imeetsya pamyati?... vse li neob- hodimoe oborudovanie prisutstvuet? Imeetsya tri sposoba polucheniya etoj informacii. Naimenee elegantnyj sposob - sprosit' ob etom u pol'zovatelya (no znaet li on otvety?). Namnogo luchshe poluchit' vsyu dostupnuyu informaciyu iz ustanovki pereklyuchatelej na sistemnoj plate. No eta ustanovka ne vsegda sootvetstvuet real'nosti. Poe- tomu luchshe vsego ispol'zovat' tret'yu vozmozhnost' - poluchit' prya- moj dostup k trebuemomu oborudovaniyu ili prochitat' nuzhnuyu infor- maciyu iz oblasti dannyh BIOS. Poskol'ku ustanovka pereklyuchatelej mozhet sluzhit' otpravnoj tochkoj dlya polucheniya trebuemoj informa- cii, to etot razdel nachinaetsya s obsuzhdeniya mikroshemy, soderzha- shchej etu informaciyu - mikroshemy interfejsa s periferiej 8255. Programma mozhet poluchit' dostup k oborudovaniyu tol'ko dvumya sposobami. Ona mozhet obratit'sya k lyubomu iz portov vvoda/vyvoda, sootvetstvuyushchemu prisoedinennomu oborudovaniyu (obychno byvaet zanyata lish' malaya dolya iz 65535 vozmozhnyh adresov portov). Ili programma mozhet obratit'sya k lyubomu iz bolee chem millionu adresov operativnoj pamyati. Svodnaya tablica adresov portov privedena v [7.3.0]. Na ris. 1-1 pokazano kak raspredeleny v pamyati opera- cionnaya sistema i programmy. 1.1.1 Dostup k mikrosheme interfejsa s periferiej 8255. Mikroshema interfejsa s periferiej Intel 8255 - luchshee mesto, s kotorogo nado nachinat', chtoby poluchit' informaciyu ob imeyushchemsya oborudovanii. |ta mikroshema prednaznachena dlya mnogih celej. Ona soobshchaet ob ustanovke pereklyuchatelej na sistemnoj plate. Ona prinimaet dlya komp'yutera vvod s klaviatury. Ona upravlyaet ryadom periferijnyh ustrojstv, vklyuchaya mikroshemu tajmera 8253. Iz mashin semejstva IBM PC tol'ko AT ne ispol'zuet mikroshemu 8255; on hranit informaciyu ob oborudovanii vmeste s chasami real'nogo vre- meni v special'noj mikrosheme s nezavisimym pitaniem. Odnako AT ispol'zuet te zhe adresa portov, chto i 8255, dlya raboty s klavia- turoj i upravleniya mikroshemoj tajmera. Mikroshema 8255 imeet tri odnobajtnyh registra, nazyvaemyh ot porta A do porta C. Adresa etih portov ot 60H do 62H sotvetstven- no. Vse tri porta mozhno chitat', no pisat' mozhno tol'ko v port B. Dlya PC, ustanovka bita 7 porta B v 1 izmenyaet informaciyu, soder- zhashchuyusya v porte A. Analogichno dlya PC ustanovka bita 2 opredelyaet soderzhimoe chetyreh mladshih bitov porta C, a ustanovka bita 3 delaet to zhe samoe dlya XT. Soderzhimoe etih registrov sleduyushchee: Port A (60H) kogda v porte B bit 7=0 bity 0-7 PC,XT,PCjr,AT: 8-bitnye skan-kody s klaviatury kogda v porte B bit 7=1 dlya PC bit 0 PC: 0 = net nakopitelej na disketah 1 PC: ne ispol'zuetsya 2-3 PC: chislo bankov pamyati na sistemnoj plate 4-5 PC: tip displeya (11 = monohromnyj, 10 = cvetnoj 80*25, 01 = cvetnoj 40*25) 6-7 PC: chislo nakopitelej na disketah Port B (61H) bit 0 PC,XT,PCjr: upravlyaet kanalom 2 tajmera 8253 1 PC,XT,PCjr: vyvod na dinamik 2 PC: vybor soderzhimogo porta C PCjr: 1 = simvol'nyj rezhim, 0 = graficheskij 3 PC,PCjr: 1 = kassetnyj motor vyklyuchen XT: vybor soderzhimogo porta C 4 PC,XT: 0 = razreshenie OZU PCjr: 1 = zapret dinamika i motora kassety 5 PC,XT: 0 = razreshenie oshibok shchelej rasshireniya 6 PC,XT: 1 = razreshenie chasov klaviatury 5-6 PCjr: vybor dinamika (00 = 8253, 01 = kasseta, 10 = vvod/vyvod, 11 = mikroshema 76496) 7 PC: vybor soderzhimogo porta A PC,XT: podtverzhdenie klaviatury Port C (62H) kogda v porte B bit 2=1 dlya PC ili bit 3=1 dlya XT bity 0-3 PC: nizhnyaya polovina pereklyuchatelya 2 konfi- guracii (OZU na plate rasshireniya) 0 PCjr: 1 = vvedennyj simvol poteryan 1 XT: 1 = est' mat. soprocessor PCjr: est' karta modema 2 PCjr: est' karta NGMD 2-3 XT: chislo bankov pamyati na sistemnoj plate 3 PCjr: 0 = 128K pamyati 4 PC,PCjr: vvod s kassety XT: ne ispol'zuetsya 5 PC,XT,PCjr: vyhod kanala 2 8253 6 PC,XT: 1 = proverka oshibok shchelej rasshireniya PCjr: 1 = dannye s klaviatury 7 PC,XT: 1 = kontrol' oshibok chetnosti PCjr: 0 = kabel' klaviatury podsoedinen kogda v porte B bit 2=0 dlya PC ili bit 3=0 dlya XT bity 0-3 PC: verhnyaya polovina pereklyuchatelya 2 konfi- guracii (ne ispol'zuetsya) 0-1 XT: tip displeya (11 = monohromnyj, 10 = cvetnoj 80*25, 01 = cvetnoj 40*25) 2-3 XT: chislo nakopitelej NGMD (00 = 1 i t.d.) 4-7 PC,XT: to zhe, chto i s ustanovlennymi bitami Otmetim, chto 0 v odnom iz bitov registra sootvetstvuet usta- novke pereklyuchatelya "off". AT hranit informaciyu o konfiguracii v mikrosheme MC146818 firmy Motorola, vmeste s chasami real'nogo vremeni. On vovse ne imeet mikroshemy 8255, hotya dlya upravleniya mikroshemoj tajmera i priema dannyh s klaviatury ispol'zuyutsya te zhe samye adresa por- tov. Mikroshema imeet 64 registra, pronumerovannyh ot 00 do 3FH. Dlya chteniya registra nuzhno snachala poslat' ego nomer v port s adresom 70H, a zatem prochitat' ego cherez port 71H. Razlichnye parametry konfiguracii obsuzhdayutsya na posleduyushchih stranicah. Privedem zdes' tol'ko kratkuyu svodku: Nomer registra Ispol'zovanie 10H tip nakopitelya NGMD 12H tip nakopitelya fiksirovannogo diska 14H periferiya 15H pamyat' na sistemnoj plate (mladshij bajt) 16H pamyat' na sistemnoj plate (starshij bajt) 17H obshchaya pamyat' (mladshij bajt) 18H obshchaya pamyat' (starshij bajt) 30H pamyat' sverh 1 megabajta (mladshij bajt) 31H pamyat' sverh 1 megabajta (starshij bajt) Vysokij uroven'. V dannoj knige imeetsya mnozhestvo primerov dostupa k etim por- tam. Nizhe privoditsya programma na Bejsike, ustanavlivayushchaya chislo diskovyh nakopitelej, prisoedinennyh k IBM PC. Prezhde chem prochi- tat' dva starshih bita porta A, bit 7 porta B dolzhen byt' ustanov- len v 1. Sushchestvenno, chto Vy dolzhny vernut' znachenie etogo bita nazad v 0 pered dal'nejshej rabotoj, inache klaviatura budet zaper- ta i dlya vosstanovleniya rabotosposobnosti mashiny Vam pridetsya vyklyuchit' ee. Bejsik ne pozvolyaet dvoichnoe predstavlenie chisel, chto zatrudnyaet rabotu s cepochkami bitov. Prostaya podprogramma mozhet zamenit' lyuboe celoe vplot' do 255 (maksimal'noe znachenie, kotoroe mozhet prinimat' nomer porta) na vos'misimvol'nuyu dvoichnuyu stroku. Posle etogo strokovaya funkciya MID$ pozvolyaet vyrezat' nuzhnye bity dlya analiza. Osnovy bitovyh operacij v Bejsike opisa- ny v prilozhenii B. 100 A = INP(&H61) 'poluchaem znachenie iz porta B 110 A = A OR 128 'ustanavlivaem bit 7 120 OUT &H61,A 'posylaem bajt nazad v port B 130 B = INP(&H60) 'poluchaem znachenie iz porta A 140 A = A AND 128 'sbrasyvaem bit 7 150 OUT &H61,A 'vosstanavlivaem znachenie porta B 160 GOSUB 1000 'preobrazuem v dvoichnuyu stroku 170 NUMDISK$ = RIGHT$(B$,1) 'poluchaem nulevoj bit 180 IF D$ = 1 THEN NUMDISK = 0: GOTO 230 'net diskov 190 C$ = LEFT$(B$,2) 'berem dva starshih bita stroki 200 TALLEY = 0 'peremennaya dlya chisla diskov 210 IF RIGHT$(C$,1) = "1" THEN TALLEY = 2 'berem starshij bit 220 IF LEFT$(C$,1) = "1" THEN TALLEY = TALLEY + 1 'i mladshij 230 TALLEY = TALLEY + 1 'schet nachinaetsya s 1, a ne s 0 'teper' imeem chislo nakopitelej 1000 '''Podprogramma preobrazovaniya bajta v dvoichnuyu stroku 1010 B$ = "" 'zavodim stroku 1020 FOR N = 7 TO 0 STEP -1 'proverka ocherednoj stepeni 2 1030 Z = B - 2^N ' 1040 IF Z >= 0 THEN B = Z: B$ = B$+"1" ELSE B$ = B$+"0" 1050 NEXT 'povtoryaem dlya kazhdogo bita 1060 RETURN 'vse zakoncheno Nizkij uroven'. Assemblernaya programma poluchaet chislo imeyushchihsya diskovyh nako- pitelej tem zhe sposobom, chto i v vysheprivedennom primere, no bolee prosto. Napominaem, chto nel'zya zabyvat' o vosstanovlenii pervonachal'nogo znacheniya v porte B. IN AL,61H ;poluchaem znachenie iz porta B OR AL,10000000B ;ustanavlivaem bit 7 v 1 OUT 61H,AL ;zamenyaem bajt IN AL,60H ;poluchaem znachenie iz porta A MOV CL,6 ;podgotovka dlya sdviga AL SHR AL,CL ;sdvigaem 2 starshih bita na 6 pozicij INC AL ;nachinaem schet s 1, a ne s 0 MOV NUM_DRIVES,AL ;poluchaem chislo nakopitelej IN AL,61H ;podgotovka k vosstanovleniyu porta B AND AL,01111111B ;sbrasyvaem bit 7 OUT 61H,AL ;vosstanavlivaem bajt 1.1.2 Opredelenie tipa IBM PC. Imeyutsya problemy sovmestimosti mezhdu razlichnymi tipami IBM PC. Dlya togo chtoby programma mogla rabotat' na lyubom iz IBM PC, is- pol'zuya vse ego vozmozhnosti, neobhodimo chtoby ona mogla oprede- lit' tip mashiny, v kotoruyu ona zagruzhena. |ta informaciya soder- zhitsya vo vtorom s konca bajte pamyati po adresu FFFFE v ROM-BIOS, s ispol'zovaniem sleduyushchih klyuchevyh chisel. Komp'yuter Kod PC FF XT FE PCjr FD AT FC Vysokij uroven'. V Bejsike nado prosto ispol'zovat' PEEK dlya chteniya znacheniya: 100 DEF SEG = &HF000 'ukazyvaem na verhnie 64K pamyati 110 X = PEEK(&HFFFE) 'chitaem vtoroj s konca bajt 120 IF X = &HFD THEN ... '... togda eto PCjr Nizkij uroven'. V yazyke assemblera: ;--- Opredelenie tipa komp'yutera: MOV AX,0F000H ;ukazyvaet ES na PZU MOV ES,AX ; MOV AL,ES:[0FFFEH] ;poluchaem bajt CMP AL,0FDH ;eto PCjr? JE INITIALIZE_JR ;perehodim na inicializaciyu 1.1.3 Opredelenie versii MS DOS. Po mere razvitiya MS DOS k nej dobavlyalis' novye vozmozhnosti, mnogie iz kotoryh sushchestvenno oblegchayut napisanie opredelennyh chastej programmy po sravneniyu s predydushchimi versiyami. CHtoby imet' garantiyu chto programma budet rabotat' s lyuboj versiej MS DOS ona dolzhna ispol'zovat' tol'ko funkcii, dostupnye v MS DOS 1.0. V sisteme predusmotreno preryvanie, vozvrashchayushchee nomer versii MS DOS. |to chislo mozhet ispol'zovat'sya dlya proverki vypolnimosti Vashej programmy. Minimal'no, programma mozhet pri starte vydavat' soobshchenie ob oshibke, soobshchaya chto ej nuzhna drugaya versiya MS DOS. Srednij uroven'. Funkciya 30H preryvaniya 21H vozvrashchaet nomer versii MS DOS. Starshij nomer versii (2 iz 2.10) vozvrashchaetsya v AL, a mladshij nomer versii (10 iz 2.10) vozvrashchaetsya v AH (obratite vnimanie, chto mladshij nomer .1 vozvrashchaet znachenie AH, a ne 1H). AL mozhet soderzhat' 0, chto ukazyvaet na versiyu MS DOS men'shuyu chem 2.0. |to preryvanie menyaet soderzhimoe registrov BX i CX, v kotoryh vozv- rashchaetsya znachenie 0. ;--- Opredelenie versii MS DOS: MOV AH,30H ;nomer funkcii polucheniya versii INT 21H ;poluchit' nomer versii CMP AL,2 ;proverka na versiyu 2.h JL WRONG_DOS ;esli men'she 2, to vydat' soobshchenie 1.1.4 Opredelenie chisla i tipov adapterov displeya. Programme mozhet okazat'sya neobhodima informaciya o tom, budet li ona rabotat' v sisteme s monohromnym adapterom, s cvetnoj graficheskoj kartoj ili s EGA, a takzhe o nalichii vtorogo adaptera. V punkte [4.1.6] ob®yasneno kak peredat' upravlenie ot odnogo adaptera k drugomu. Bajt statusa oborudovaniya, hranyashchijsya v ob- lasti dannyh ROM-BIOS po adresu 0040:0010 soobshchaet ustanovku pereklyuchatelya 1, kotoryj pokazyvaet kakaya iz kart aktivna. V principe dolzhny imet' znachenie 11 dlya monohromnoj karty, 10 - dlya cvetnoj karty 80*25, 01 - dlya cvetnoj karty 40*25 i 00 dlya EGA. Odnako pri nalichii EGA on mozhet ustanovit' bity otlichnymi ot 00, v zavisimosti ot ustanovki ego sobstvennyh pereklyuchatelej. Poeto- mu Vy dolzhny snachala drugimi sredstvami ustanovit' nalichie EGA, a zatem, esli ego net, to po dannym BIOS opredelit' yavlyaetsya li aktivnym cvetnoj ili monohromnyj adapter. Dlya proverki nalichiya EGA nado prochitat' bajt po adresu 0040:0087. Esli on raven 0, to EGA otsutstvuet. Esli etot bajt nenulevoj, to kogda bit 3=0, EGA yavlyaetsya aktivnym adapterom, a kogda on raven 1, to aktiven vto- roj adapter. Kogda prisutstvuet EGA, to proverka nalichiya monohromnogo ili cvetnogo adaptera osushchestvlyaetsya zapis'yu znacheniya v registr adre- sa kursora mikroshemy 6845 [4.1.1] i posleduyushchego chteniya znacheniya i proverki ih na sovpadenie. Dlya monohromnoj karty poshlite 0FH v port 3B4H, chtoby ukazat' na registr kursora, a zatem prochitat' i zapisat' adres kursora cherez port 3B5H. Sootvetstvuyushchie porty dlya cvetnoj karty 3D4H i 3D5H. Kogda karta otsutstvuet, to port vozv- rashchaet znachenie 0FFH; no poskol'ku eto znachenie mozhet soderzhat'sya v registre, to nedostatochno prostoj proverki na eto znachenie. Imeyutsya dva dobavochnyh voprosa, na kotorye mogut potrebovat'sya otvety pri nalichii EGA: skol'ko imeetsya pamyati na ego karte i kakoj tip monitora podsoedinen? Dlya opredeleniya tipa displeya prover'te bit 1 po adresu 0040:0087; kogda on ustanovlen, to podsoedinen mmonohromnyj displej, a kogda on raven nulyu - cvet- noj. Esli Vasha programma ispol'zuet cvetnoj graficheskij rezhim s 350 strokami, to nado takzhe opredelit' prisoedinen li displej IRGB ili R'G'B'RGB, gde poslednyaya abbreviatura sootvetstvuet uluchshenomu cvetnomu displeyu IBM. |to opredelyaetsya ustanovkoj chetyreh pereklyuchatelej na karte EGA. Ustanovka etih pereklyuchate- lej vozvrashchaetsya v CL pri obrashchenii k funkcii 12H preryvaniya 10H. Cepochka chetyreh mladshih bitov dolzhna byt' 0110 dlya uluchshennogo cvetnogo displeya. Ta zhe samaya funkciya soobshchaet i nalichie pamyati na karte EGA. Ona vozvrashchaet BL, soderzhashchij 0 dlya 64K, 1 - dlya 128, 2 - dlya 192 i 3 - dlya polnyh 256K pamyati displeya. Vysokij uroven'. Privedennye fragmenty koda opredelyayut tip tekushchego monitora i rezhim ego raboty, a takzhe opredelyayut kakie tipy videoadapterov imeyutsya v mashine: 100 '''opredelenie aktivnogo adaptera 110 DEF SEG = &H40 'ukazyvaem na oblast' dannyh BIOS 120 X = PEEK(&H87) 'proverka na nalichie EGA 130 IF X = 0 THEN 200 'EGA otsutstvuet, idem dal'she 140 IF X AND 8 = 0 THEN... 'aktivnyj monitor EGA . . 200 X = PEEK(&H10) 'chitaem bajt statusa oborudovaniya 210 Y = X AND 48 'vydelyaem bity 4 i 5 220 IF Y = 48 THEN ... '... togda monohromnyj (00110000) 230 IF Y = 32 THEN ... '... togda cvetnoj 80*25 (00100000) 240 IF Y = 16 THEN ... '... togda cvetnoj 40*25 (00010000) Sleduyushchij primer proveryaet nalichie monohromnoj karty, kogda aktivnoj yavlyaetsya karta EGA ili cvetnaya. Tot zhe primer mozhno ispol'zovat' dlya proverki nalichiya cvetnoj karty esli ispol'zovat' adresa portov &H3D4 i &H3D5. 100 '''proverka nalichiya monohromnoj karty 110 OUT &H3B4,&HF 'adres registra kursora 120 X = INP(&H3B5) 'chtenie i sohranenie znacheniya 130 OUT &H3B5,100 'posylaem v registr lyuboe znachenie 140 IF INP(&H3B5)<>100 THEN... 'esli karta est' - vernetsya to zhe 150 OUT &H3B5,X 'vosstanavlivaem znachenie registra Nizkij uroven'. Privedennye primery sootvetstvuyut primeram na Bejsike. ;--- Opredelenie aktivnogo adaptera: MOV AX,40H ;ukazyvaem ES na oblast' dannyh BIOS MOV ES,AX ; MOV AL,ES:[87H] ;proveryaem nalichie EGA CMP AL,0 ; JE NO_EGA ;esli 0040:0087 = 0, to EGA net TEST AL,00001000B ;EGA est', proveryaem bit 3 JNZ EGA_NOT_ACTIVE;esli bit 3=1, to EGA neaktiven . . EGA_NOT_ACTIVE: MOV AL,ES:[10H] ;proveryaem bajt statusa displeya AND AL,00110000B ;vydelyaem bity 4 i 5 CMP AL,48 ;eto monohromnaya karta? JE MONOCHROME ;perehod esli da Predpolagaya nalichie monohromnoj karty proverim ustanovlena li cvetnaya karta (neaktivnaya): ;--- Ustanovlena li neaktivnaya cvetnaya karta? MOV DX,3D4H ;ukazyvaem na registr adresa 6845 MOV AL,0FH ;zaprashivaem registr kursora OUT DX,AL ;ukazyvaem na registr INC DX ;ukazyvaem na registr dannyh IN AL,DX ;poluchaem tekushchee znachenie XCNG AH,AL ;sohranyaem znachenie MOV AL,100 ;testovoe znachenie 100 OUT DX,AL ;posylaem ego IN AL,DX ;schityvaem ego snova CMP AL,100 ;sravnivaem znacheniya JNE NO_CARD ;perehod esli net karty XCNG AH,AL ;inache est' cvetnaya karta OUT DX,AL ;togda vosstanavlivaem znachenie 1.1.5 Opredelenie chisla i tipa diskovyh nakopitelej. Na vseh mashinah krome AT (kotoryj budet obsuzhdat'sya nizhe) registry mikroshemy 8255 interfejsa s periferiej soderzhat infor- maciyu o tom, skol'ko NGMD imeet mashina. V primerah [1.1.1] poka- zano kak poluchit' etu informaciyu. Informaciya opredelyayushchaya tip diska soderzhitsya v tablice razmeshcheniya fajlov (FAT) diska, kotoraya sledit za ispol'zovaniem diskovogo prostranstva. Pervyj bajt FAT soderzhit odin iz sleduyushchih kodov: Kod Tip diska FF dvuhstoronnij, 8 sektorov FE odnostoronnij, 8 sektorov FD dvuhstoronnij, 9 sektorov FC odnostoronnij, 9 sektorov F9 dvuhstoronnij, 15 sektorov F8 fiksirovannyj disk Sama tablica razmeshchenie fajlov ne yavlyaetsya fajlom. Ona mozhet byt' schitana pri pomoshchi funkcij DOS ili BIOS neposredstvenno chi- tayushchih opredelennye sektora diska. V punkte [5.1.1] soderzhitsya vsya informaciya neobhodimaya dlya nahozhdeniya i chteniya FAT. K schast'yu, operacionnaya sistema obespechivaet funkciyu, kotoraya vozvrashchaet identifikacionnyj bajt diska. Dannye BIOS ne pokazyvayut chislo zhestkih diskov v sisteme, tak kak pereklyuchateli prednaznacheny tol'ko dlya gibkih diskov. Odnako Vy mozhete ispol'zovat' ukazannuyu funkciyu operacionnoj sistemy dlya poiska nakopitelej. Ona vozvrashchaet znachenie 0CDH, vmesto odnogo iz upomyanutyh kodov, kogda nakopiteli otsutstvuyut. Nado prosto proveryat' vse bol'shie i bol'shie nomera nakopitelej, do teh por poka ne budet obnaruzheno ukazannoe znachenie. AT unikalen v tom smysle, chto ego informaciya o konfiguracii govorit kakoj tip nakopitelya ispol'zuetsya. |tu informaciyu mozhno poluchit' iz porta s adresom 71H, predvaritel'no poslav nomer registra v port 70H. Dlya NGMD nomer registra raven 10H. Informa- ciya o pervom nakopitele soderzhitsya v bitah 7-4, a o vtorom - v bitah 3-0. V oboih sluchayah cepochka bitov 0000 govorit ob otsutst- vii nakopitelya, 0001 - o dvuhstoronnem nakopitele s plotnost'yu 48 dorozhek na dyujm, a 0010 - o nakopitele bol'shoj emkosti (96 doro- zhek na dyujm). Informaciya o fiksirovannom diske soderzhitsya v re- gistre 12H. I snova bity 7-4 i 3-0 sootvetstvuyut pervomu i vtoro- mu nakopitelyam. 0000 ukazyvaet na otsutstvie nakopitelya. Drugie 15 vozmozhnyh znachenij opisyvayut emkost' i konstrukciyu nakopitelya. |ti kody slozhnye; esli Vam po kakoj-to prichine potrebuetsya eta informaciya, obratites' k tehnicheskomu rukovodstvu po AT. Srednij uroven'. Funkciya 1CH preryvaniya 21H vozvrashchaet informaciyu ob ukazannom nakopitele. Pomestite nomer nakopitelya v DL, prichem 0 = nakopi- tel' po umolchaniyu, 1 = A, i t.d. Pri vozvrashchenii DX soderzhit chislo klasterov v FAT, AL - chislo sektorov v klastere, a CX - chislo bajtov v sektore. DS:BX ukazyvaet na bajt, soderzhashchij kod identifikacii diska iz FAT, soglasno privedennoj tablice. V sle- duyushchem primere opredelyaetsya tip nakopitelya A: ;---opredelenie tipa diska MOV AH,1CH ;funkciya MS DOS MOV DL,1 ;vybor nakopitelya A INT 21H ;poluchenie informacii MOV DL,[BX] ;poluchenie tipa nakopitelya CMP DL,0FDH ;dvuhstoronnij, 9 sektorov? JE DBL_9 ;i t.d. BIOS AT imeet funkciyu, soobshchayushchuyu obshchie parametry nakopitelej. |to funkciya 8 preryvaniya 13H. Ona vozvrashchaet chislo nakopitelej v DL, maksimal'noe chislo storon nakopitelya v DH, maksimal'noe chislo sektorov v CL i dorozhek v CH, a kod statusa oshibki nakopitelya v AH (sm. punkt [5.4.8]). Drugaya funkciya BIOS AT vozvrashchaet tip nakopitelya. |to funkciya 15H preryvaniya 13H, kotoraya trebuet nomera nakopitelya v DL. V AH vozvrashchaetsya kod, prichem 0 = net nakopitelya, 1 = disketa bez obnaruzheniya izmenenij, 2 = disketa s obnaruzheniem izmenenij i 3 = fiksirovannyj disk. V sluchae fiksirovannogo diska v CX:DX vozvra- shchaetsya chislo sektorov po 512 bajt. 1.1.6 Opredelenie chisla i tipa periferijnyh ustrojstv. Pri starte ROM-BIOS proveryaet prisoedinennoe oborudovanie, soobshchaya o rezul'tatah svoej proverki v registr statusa. |tot registr zanimaet dva bajta, nachinaya s 0040:0010. Nizheprivedennye znacheniya bitov otnosyatsya ko vsem mashinam, poka ne ogovoreno ob- ratnoe: bit 0 esli 1, to prisutstvuet NGMD 1 XT,AT:1 = est' mat. soprocessor (PC,PCjr:ne ispol'z.) 2-3 11 = bazovaya pamyat' 64K (AT:ne ispol'zuetsya) 4-5 Aktivnyj videoadapter (11 = monohromnyj, 10 = cvetnoj 80*25, 01 = cvetnoj 40*25) 6-7 chislo NGMD (esli bit 0 = 1) 8 PCjr:0 = est' DMA (PC,XT,AT:ne ispol'zuetsya) 9-11 chislo adapterov kommunikacii 12 1 = est' igrovoj port (AT:ne ispol'zuetsya) 13 PCjr:est' serijnyj printer (PC,XT,AT:ne ispol'z.) 14-15 chislo prisoedinennyh printerov Bol'shaya chast' informaciya rasshifrovyvaetsya primitivno. No obra- tite vnimanie, chto informaciya o diskovyh nakopitelyah raspredelena mezhdu bitami 0 i 6-7. Znachenie 0 v bitah 6-7 ukazyvaet, chto ime- etsya odin diskovyj nakopitel'; chtoby uznat' ob otsutstvii nakopi- telej nado proverit' bit 0. CHislo portov kommunikacii mozhet byt' polucheno iz oblasti dan- nyh BIOS. BIOS otvodit chetyre 2-bajtnyh polya dlya hraneniya bazovyh adresov vplot' do chetyreh COM portov (MS DOS ispol'zuet tol'ko dva iz nih). Bazovyj adres - eto mladshij iz adresov portov, otno- syashchihsya k gruppe portov, imeyushchih dostup k dannomu kanalu kommuni- kacii. |ti chetyre polya nachinayutsya s adresa 0040:0008. Portu COM1 sootvetstvuet adres :0008, a COM2 - 000A. Esli eto pole soderzhit 0, to sootvetstvuyushchij port otsutstvuet. Takim obrazom, esli slovo po adresu :0008 otlichno ot nulya, a po adresu 000A - nulevoe, to imeetsya odin port kommunikacii. AT hranit informaciyu o periferii v registre 14H mikroshemy konfiguracii. Snachala zapishite 14H v port s adresom 70H, a zatem prochitajte soderzhimoe registra cherez port 71H. Vot znachenie bitov etogo registra: bity 7-6 00 = 1 NGMD, 01 = 2 NGMD 5-4 01 = vyvod na cvetnoj displej, 40 strok 10 = vyvod na cvetnoj displej, 80 strok 11 = vyvod na monohromnyj displej 3-2 ne ispol'zuetsya 1 1 = imeetsya mat. soprocessor 0 0 = net NGMD, 1 = imeetsya NGMD Vysokij uroven'. V Bejsike nuzhno prosto prochitat' bajty statusa iz oblasti dannyh BIOS. V prilozhenii B ob®yasneno vypolnenie bitovyh operacij v Bejsike. V privedennom primere proverka nalichiya diskovyh nako- pitelej dostigaetsya proverkoj chetnosti mladshego bajta statusnogo registra (chetnyj - net nakopitelej). 100 DEF SEG = 0 'ukazyvyaem na dno pamyati 110 X = PEEK(&H410) 'poluchaem mladshij bajt registra 120 IF X MOD 2 = 0 THEN 140 'on chetnyj - net nakopitelej 130 PRINT "Imeetsya disk" 'inache imeetsya nakopitel' 140 GOTO 160 'idem ko vtoromu soobshcheniyu 150 PRINT "Net nakopitelej" 'vtoroe soobshchenie 160 ... 'prodolzhaem... Proverka nalichiya COM1: 100 DEF SEG = 40H 'ukazyvaem na oblast' dannyh BIOS 110 PORT = PEEK(0) + 256*PEEK(1) 'poluchaem slovo so smeshcheniem 0 120 IF PORT = 0 THEN... '... to net adaptera COM1 Srednij uroven'. Preryvanie 11H BIOS vozvrashchaet bajt statusa oborudovaniya v AX. Na vhode nichego podavat' ne nado. V primere opredelyaetsya chislo diskovyh nakopitelej. ; ---poluchenie chisla diskovyh nakopitelej: INT 11H ;poluchaem bajt statusa TEST AL,0 ;imeyutsya nakopiteli? JZ NO_DRIVES ;perehod, esli net AND AL,1100000B ;vydelyaem bity 5-6 MOV CL,5 ;podgotovka k sdvigu registra SHR AL,CL ;sdvig vpravo na 5 bitov INC AL ;dobavlyaem 1, t.k. otschet idet s 1 Nizkij uroven'. Assemblernaya programma rabotaet tak zhe, kak i programma na Bejsike. V primere chitaetsya informaciya o konfiguracii dlya AT, opredelyaya ustanovlen li matematicheskij soprocessor: MOV AL,14H ;nomer registra OUT 70H,AL ;posylaem zapros IN AL,71H ;chitaem registr TEST AL,10B ;proveryaem bit 1 JZ NO_COPROCESSOR ;esli ne ustanovlen, to soprocessora net 1.1.7 Reviziya kolichestva pamyati. Vopros: "Skol'ko imeetsya pamyati?",- mozhet imet' tri smysla. O kakom kolichestve pamyati soobshchayut pereklyuchateli, ustanovlennye na sistemnoj plate? Skol'ko mikroshem pamyati real'no ustanovleno v mashine? I, nakonec, skol'ko ostaetsya svobodnoj pamyati, kotoruyu DOS mozhet ispol'zovat' dlya vypolneniya Vashih programm? Mashina mozhet imet' 10 bankov pamyati po 64K, no pereklyuchateli mogut uka- zyvat' na nalichie tol'ko 320K, ostavlyaya polovinu pamyati dlya ka- kih-libo special'nyh celej. A kak mozhet Vasha programma uznat', skol'ko iz dostupnyh 320K ona mozhet ispol'zovat', uchityvaya, chto drugoe programmnoe obespechenie mozhet byt' zagruzheno rezidentnym v verhnyuyu ili nizhnyuyu chast' pamyati? Otvet na kazhdyj vopros mozhno poluchit' svoim sposobom. Dlya PC i XT ustanovka pereklyuchatelej mozhet byt' prosto prochitana cherez port B mikroshemy interfejsa s periferiej 8255. V punkte [1.1.1] opisano kak eto delaetsya. BIOS hranit dvuhbajtnuyu peremennuyu po adresu 0040:0013, kotoraya soobshchaet chislo kilobajt ispol'zuemoj pamyati. Dlya PCjr bit 3 porta 62H (port C mikroshemy 8255) raven nulyu, kogda mashina imeet dobavochnye 64K pamyati. AT daet osobo polnuyu informaciyu o pamyati. Registry 15H (mladshij) i 16H (star- shij) mikroshemy informacii o konfiguracii govoryat skol'ko pamyati ustanovleno na sistemnoj plate (vozmozhny tri znacheniya: 0100H - dlya 256K, 0200H - dlya 512K i 0280H dlya 512K plyus 128K na plate rasshireniya). Pamyat' kanala vvoda/vyvoda dlya AT soobshchaetsya regist- rami 17H i 18H (s inkrementom 512K). Pamyat' sverh 1 megabajta dostupna cherez registry 30H i 31H (opyat' s inkrementom 512K, vplot' do 15 megabajt). Esli AT imeet 128K na plate rasshireniya, to ustanovlen bit 7 registra 33. Vo vseh sluchayah nado snachala poslat' nomer registra v port 70H, a zatem prochitat' znachenie iz porta 71H. Legko napisat' programmu, kotoraya pryamo testiruet nalichie pamyati cherez opredelennye intervaly adresnogo prostranstva. Pos- kol'ku minimal'naya porciya pamyati 16 kilobajt, to dostatochno pro- verit' odnu yachejku pamyati v kazhdom 16-kilobajtnom segmente, chtoby ubedit'sya, chto vse 16K prisutstvuyut. Kogda dannaya yachejka pamyati otsutstvuet, to pri chtenii iz nee poluchaem znachenie 233. Dlya proverki mozhno zapisat' v yachejku proizvol'noe chislo, otlichnoe ot 233 i srazu zhe schitat' ego. Esli vmesto poslannogo chisla vozvra- shchaetsya 233, to sootvetstvuyushchij bank pamyati otsutstvuet. Ne prime- nyajte etot sposob na AT, gde pri popytke pisat' v nesushchestvuyushchuyu pamyat' vstupaet v dejstvie vstroennaya obrabotka nesushchestvuyushchej pamyati. Diagnostika AT nastol'ko horosha, chto Vy mozhete celikom polozhit'sya na sistemnuyu informaciyu o konfiguracii. Pamyat' postoyanno zanimaetsya chastyami operacionnoj sistemy, drajverami ustrojstv, rezidentnymi programmami obrabotki preryva- nij i upravlyayushchimi blokami MS DOS. Pri proverke bankov pamyati Vy ne dolzhny vnosit' neobratimyh izmenenij v soderzhimoe pamyati. Snachala nado sohranit' znachenie, hranyashcheesya v testiruemoj yachejke, zatem proverit' ee i vosstanovit' pervonachal'noe znachenie. Imeetsya eshche odna problema. Esli Vasha procedura hotya by vremen- no modificiruet svoj kod, to eto mozhet privesti k krahu. Poetomu dlya proverki nado vybirat' takuyu yachejku iz bloka 64K, kotoraya ne budet zanyata tekstom Vashej procedury. Dlya etogo pomestite proce- duru testirovaniya vperedi programmy, a dlya testirovaniya vyberite yachejku so smeshcheniem ravnym smeshcheniyu dlya kodovogo segmenta. Napri- mer, esli registr kodovogo segmenta soderzhit 13E2, to segment nachinaetsya so smeshcheniya 13E2 vo vtorom 64K-bajtnom bloke pamyati. Poskol'ku Vasha podprogramma proverki ne mozhet nahodit'sya po etomu adresu, to Vy mozhete bezopasno proveryat' znachenie 3E2 v kazhdom bloke. Zapret preryvanij [1.2.2] pozvolyaet ne bespokoit'sya o modifikacii koda iz-za apparatnyh preryvanij, kotorye mogut proishodit' vo vremya proverki. Opredelenie kolichestva pamyati real'no dostupnoj operacionnoj sisteme takzhe trebuet nekotorogo fokusa. Kogda programma pervyj raz poluchaet upravlenie, to DOS otvodit ej vsyu dostupnuyu pamyat', vklyuchaya verhnyuyu oblast' pamyati, soderzhashchuyu nerezidentnuyu chast' DOS (kotoraya avtomaticheski perezagruzhaetsya, esli ona byla modifi- cirovana). Dlya zapuska drugoj programmy iz tekushchej ili dlya togo, chtoby sdelat' programmu podhodyashchej dlya mnogopol'zovatel'soj sis- temy, neobhodimo urezat' programmu do trebuemogo razmera. V punk- te [1.3.1] opisano kak eto sdelat' s pomoshch'yu funkcii 4AH preryva- niya 21H. |ta zhe funkciya mozhet byt' ispol'zovana dlya rasshireniya otveden- noj pamyati. Poskol'ku programme otvoditsya vsya dostupnaya pamyat' pri zagruzke, to takoe rasshirenie nevozmozhno pri starte. Esli Vy poprobuete sdelat' eto, to budet ustanovlen flag perenosa, v registre AX poyavitsya kod oshibki 8, a v registre BX budet vozvra- shcheno maksimal'noe chislo dostupnyh 16-bajtnyh paragrafov. |ta informaciya kak raz i nuzhna. Znachit nado vydat' zapros so slishkom bol'shim znacheniem v registre BX ( skazhem, F000H paragrafov), a zatem vypolnite preryvanie. Pozabot'tes' o tom, chtoby vypolnit' etu funkciyu v samom nachale programmy, poka registr ES eshche imeet nachal'noe znachenie. Vysokij uroven'. Interpretator Bejsika ispol'zuet tol'ko 64K (hotya operatory PEEK i POKE pozvolyayut dostup k pamyati za predelami 64K). Dolya pamyati dostupnaya v nastoyashchij moment vozvrashchaetsya funkciej FRE. |ta funkciya imeet fiktivnyj argument, kotoryj mozhet byt' chislovym ili simvol'noj strokoj. BYTES = FRE(x) peredaet v BYTES chislo svobodnyh bajtov. BYTES = FRE(x$) delaet to zhe samoe. No stroko- vyj argument vynuzhdaet ochistku oblasti dannyh pered tem kak vozv- ratit' chislo bajtov. Zametim, chto esli razmer rabochej oblasti ustanavlivaetsya s pomoshch'yu operatora CLEAR, to kolichestvo pamyati, soobshchaemoe funkciej FRE budet na ot 2.5 do 4 kilobajt men'she iz-za potrebnostej rabochej oblasti interpretatora. Translyator Bejsika ne nakladyvaet ogranichenie 64K na summarnyj ob®em koda i dannyh. No sam kompilyator ogranichen tem kolichestvom pamyati, kotoroe on mozhet ispol'zovat' pri kompilyacii. Esli etogo prostranstva nedostatochno, to unichtozh'te vse nenuzhnye nomera strok pri pomoshchi klyucha kompilyacii /N. Mozhno takzhe ispol'zovat' bolee korotkie imena peremennyh. Srednij uroven'. Preryvanie 12H BIOS proveryaet ustanovku pereklyuchatelej i vozv- rashchaet v AX kolichestvo kilobajt pamyati v sisteme. |ta velichina vychislyaetsya iz ustanovki registrov mikroshemy 8255 ili, dlya AT, mikroshemy konfiguracii/chasov. Vhodnyh registrov