oby pravil'no ispol'zovat' komandy upravleniya modemom i informaciyu o ego statu- se nado tshchatel'no izuchit' dokumentaciyu na dannyj modem. Modem PCjr opisan v tehnicheskom rukovodstve po PCjr. Nizheprivedennye primery dayut tol'ko goluyu shemu ustanovleniya svyazi cherez modem. Vysokij uroven'. Poskol'ku telefonnaya svyaz' ochen' medlennaya, to svyaz' s modemom eto odna iz oblastej, gde programmirovanie svyazi na Bejsike nichem ne huzhe, chem na yazyke assemblera. Vot grubaya shema: 100 OUT BASEADDRESS+4,1 'ustanavlivaem bit DTR 110 '''teper' posylaem upravlyayushchuyu stroku dlya vyzova i ustanovle- 120 '''niya svyazi - etot kod menyaetsya ot modema k modemu . . 200 X = INP(BASEADDRESS+2) 'poluchaem registr statusa modema 210 IF X AND 2 <> 2 THEN 200 'zhdem poka budet ustanovlen bit 1 220 OUT BASEADDRESS+4,3 'ustanavlivaem bit RTS 230 X = INP(BASEADDRESS+2) 'poluchaem registr statusa modema 240 IF X AND 1 <> 1 THEN 230 'zhdem poka budet ustanovlen bit 0 250 '''teper' posylaem dannye Nizkij uroven'. Vot ta zhe samaya shema na yazyke assemblera: ;---ustanavlivaem signal DTR MOV DX,BASE_ADDRESS ;nachinaem s bazovogo adresa ADD DX,4 ;ukazyvaem na registr kontrolya modema MOV AL,1 ;ustanavlivaem bit 1 OUT DX,AL ;posylaem v port ;---posylaem upravlyayushchuyu stroku modemu dlya vyzova . (etot kod raznyj dlya raznyh modemov) . ;---ozhidaem poka budet ustanovlen signal DSR INC DX ;ukazyvaem na registr statusa modema INC DX ; TRY_AGAIN: IN AL,DX ;poluchaem soderzhimoe TEST AL,10B ;proveryaem vtoroj bit JZ TRY_AGAIN ;zhdem poka on ne budet raven 1 ;---ustanavlivaem bit RTS DEC DX ;vozvrashchaemsya k registru upravleniya DEC DX ; MOV AL,3 ;ustanavlivaem signal RTS OUT DX,AL ;posylaem v port ;---ozhidaem signala CTS INC DX ;vozvrashchaemsya k registru statusa INC DX ; ONCE_MORE: IN AL,DX ;poluchaem bajt statusa TEST AL,1 ;proveryaem bit CTS JZ ONCE_MORE ;ne prodolzhaem poka on ne ustanovlen ;---teper' mozhno posylat' dannye 7.1.6 Peredacha dannyh. Peredacha dannyh proshche chem priem, poskol'ku programma imeet polnyj kontrol' nad sostavom dannyh i skorost'yu, s kotoroj oni dolzhny posylat'sya. Tem ne menee procedury peredachi mogut byt' dostatochno slozhnymi, esli oni obrabatyvayut dannye po mere togo, kak oni posylayutsya. Mogut byt' takzhe problemy s sinhronizaciej pri ispol'zovanii protokola XON/XOFF. |tot protokol ispol'zuet kody ASCII 17(XON) i 19(XOFF), dlya togo chtoby signalizirovat' prinimayushchej stancii, chto peredatchik hochet prodolzhit' peredachu vremenno prervannogo potoka dannyh. CHtoby prinyat' eti signaly, programma dolzhna nepreryvno analizirovat' prinimaemye simvoly pri peredache (v polnodupleksnom rezhime, v kotorom obychno rabotayut modemy, signaly odnovremenno idut v obe storony po telefonnomu kanalu). Krome togo, chtoby obnaruzhit', chto udalennaya stanciya posylaet stroku nulej, v kachestve signala pereryva, dolzhen nepre- ryvno analizirovat'sya status bita pereryva (nomer 4) registra statusa linii [7.1.4]. Na ris. 7-2 (v [7.1.7]) pokazano kak pro- cedura peredachi dannyh vzaimodejstvuet s kodom, prinimayushchim dan- nye. Vsledstvie etih prichin, predstavlennye v etom punkte procedury otdel'no peredayushchie dannye yavlyayutsya iskustvennymi. No ih mozhno skombinirovat' s procedurami priema dannyh, opisannymi v [7.1.7] dlya sozdaniya obshchego predstavleniya o tom, chto nuzhno. YAsno, chto dlya sozdaniya rabotosposobnoj procedury neobhodimo zatratit' bol'shie usiliya, osobenno v chasti obnaruzheniya i ispravleniya oshibok pri peredache dannyh. Vysokij uroven'. V Bejsike dlya togo, chtoby poslat' dannye v otkrytyj kommunika- cionnyj port nado ispol'zovat' operatory PRINT#, PRINT# USING ili WRITE#. Poslednie dva operatora imeyut special'nyj format, paral- lel'nyj tomu, kotoryj ispol'zuetsya imi pri vyvode na displej. Obychno ispol'zuetsya operator PRINT#. V dannom primere posylaemye dannye berutsya neposredstvenno s klaviatury. Predpolagaetsya, chto COM1 uzhe otkryt, kak pokazano v [7.1.2]. Procedura obrabatyvaet bit pereryva v registre statusa linii. . . 500 C$ = INKEY$: IF C$ <> "" THEN PRINT #1,C$ 510 X = INP(BASEADDRESS + 5) 'chitaem registr statusa linii 520 IF X AND 32 = 32 THEN 1000 'proveryaem bit pereryva 530 IF EOF(1) THEN 500 'esli bufer pust, to zhdem vvoda . (zdes' raspolozhena procedura priema dannyh) . 1000 '''zdes' procedura obrabotki pereryva Srednij uroven'. Funkciya 1 preryvaniya 14H BIOS posylaet simvol, soderzhashchijsya v AL v kommunikacionnyj kanal. Pri vhode DX soderzhit nomer porta (0 ili 1). Pri vozvrate AH soderzhit bajt statusa, v kotorom bit 7 = 1, esli operaciya neuspeshna. V etom sluchae imeyut znachenie sleduyu- shchie bity: bit 4 obnaruzhen pereryv (signal "stop" ot prinimayushchej stancii) 5 registr sdviga peredatchika pust 6 registr hraneniya peredatchika pust MS DOS imeet funkciyu dlya peredachi po kommunikacionnomu kanalu simvola, pomeshchaemogo v DL. |to funkciya nomer 4 preryvaniya 21H, no ona ne imeet nikakih preimushchestv pered funkciej BIOS; ona ne vozvrashchaet statusnoj informacii i ne pozvolyaet naznachat' kakoj iz kommunikacionnyh portov nado ispol'zovat' (vsegda ispol'zuetsya COM1). CHtoby vyvesti stroku dannyz ispol'zujte funkciyu 40H preryvaniya 21H. |to obychnaya funkciya vyvoda dlya vseh fajlov i ustrojstv pri ispol'zovanii metoda dostupa deskriptora fajlov. COM1 imeet pre- lopredelennyj nomer #3. Pomestite nomer fajla v BX, a chislo pere- davaemyh bajtov v CX. Pust' DS:DX ukazyvayut na bufer vyvodimyh dannyh i vyzyvajte funkciyu. MOV AH,40H ;nomer funkcii MOV BX,3 ;predopredelennyj nomer fajla dlya COM1 MOV CX,50 ;vyvodim 50 bajtov LEA DX,DATA_BUFFER ;DS:DX ukazyvayut na bufer dannyh INT 21H ;posylaem dannye JC COM_ERROR ;uhod na obrabotku oshibki Otmetim, chto pri ispol'zovanii predopredelennyh nomerov fajlov ih ne nado otkryvat'. Esli proizoshla oshibka, to ustanavlivaetsya flag perenosa, a v AX vozvrashchaetsya 5 esli kommunikacionnyj port ne gotov i 6 pri ukazanii nevernogo nomera fajla. Nizkij uroven'. Kogda bajt dannyh pomeshchaetsya v registr hraneniya peredatchika, to on avtomaticheski vyvoditsya v posledovatel'nyj kanal cherez registr sdviga peredatchika, kotoryj serializuet dannye. Net neob- hodimosti v impul'se bita stroba, kak eto delaetsya v sluchae pa- rallel'nogo adaptera. Bit 5 registra statusa linii pokazyvaet svoboden li registr hraneniya peredatchika dlya priema dannyh. Re- gistr postoyanno proveryaetsya do teh por, poka bit 5 ne stanet ravnym 1. Posle etogo v registr hraneniya peredatchika posylaetsya ocherednoj bajt iz togo mesta, otkuda oni berutsya. V processe peredachi bit 5 raven 0 i tol'ko kogda on opyat' stanet ravnym 1, to v registr hraneniya peredatchika mozhet byt' poslan sleduyushchij simvol. |tot process povtoryaetsya do teh por, poka eto nuzhno. V sleduyushchem primere dany osnovnye ponyatiya ob etoj procedure. Konechno, ona mozhet byt' sdelana neobychajno slozhnoj (v chastnosti, programmirovanie svyazi trebuet osobo tshchatel'nyh procedur obnaru- zheniya oshibok i vosstanovleniya pri sboyah). V primere predpolagaet- sya, chto kommunikacionnyj port i modem uzhe inicializirovany, kak pokazano v [7.1.2] i [7.1.5]. Pervaya chast' eto cikl proverki oshibok i priema simvolov. V [7.1.7] priveden kod dlya procedury priema dannyh. ;---zhdem poka vse budet gotovo dlya posylki simvola KEEP_TRYING: MOV DX,BASE_ADDRESS ;bazovyj adres ADD DX,5 ;ukazyvaem na registr statusa linii IN AL,DX ;poluchaem bajt statusa TEST AL,00011110B ;proveryaem na oshibku JNZ ERROR_ROUTINE ;esli est', to na proceduru obrabotki TEST AL,00000001B ;proveryaem polucheny li dannye JNZ RECEIVE ;esli da, to na proceduru priema TEST AL,00100000B ;proveryaem gotovnost' k peredache JZ KEEP_TRYING ;esli net, to vozvrashchaemsya nazad ;---peredaem simvol prinimaemyj s klaviatury MOV AH,1 ;funkciya proverki nazhatiya klavishi INT 16H ;preryvanie klaviatury BIOS JZ KEEP_TRYING ;vozvrat, esli ne bylo nazhatiya MOV AH,0 ;funkciya polucheniya koda s klaviatury INT 16H ;teper' nuzhnyj simvol v AL SUB DX,5 ;adres registra hraneniya peredatchika OUT DX,AL ;posylaem simvol JMP SHORT KEEP_TRYING ;vozvrashchaemsya k nachalu cikla 7.1.7 Poluchenie dannyh. Kommunikacionnaya programma gotova prinimat' dannye kak tol'ko inicializirovan kommunikacionnyj port [7.1.2] i ustanovlena svyaz' s udalennoj stanciej [7.1.5]. Priem dannyh nikogda polnost'yu ne otdelen ot peredachi dannyh, poskol'ku programme mozhet potrebo- vat'sya poslat' signal XOFF (ASCII 19), chtoby ostanovit' potok dannyh, esli oni postupayut slishkom bystro i ona ne uspevaet ih obrabatyvat'. Kod XON (ASCII 17) soobshchaet udalennoj stancii, chto mozhno prodolzhit' peredachu. Otmetim, chto PCjr ne mozhet prinimat' dannye vo vremya diskovyh operacij; chtoby snyat' eto ogranichenie mozhno ispol'zovat' XON i XOFF. V zavisimosti ot slozhnosti ispol'zuemogo protokola obmena, prinimaemye dannye mogut trebovat' prostoj ili slozhnoj obrabotki. Mozhet byt' poluchen odin iz nabora upravlyayushchih kodov, privedennyh v [7.1.9]. Te iz nih, kotorye yavlyayutsya ogranichitelyami dannyh chashche obnaruzhivayutsya pri sinhronnom obmene. Pri vyvode poluchaemyh sim- volov na ekran uchityvajte vliyanie simvolov perevoda stroki (ASCII 10), poskol'ku nekotorye yazyki (vklyuchaya Bejsik) avtomaticheski vstavlyayut perevod stroki posle vozvrata karetki; v etom sluchae isklyuchajte perevody stroki iz prinimaemyh dannyh, chtoby izbezhat' pustyh strok pri vyvode. Na ris. 7-2 pokazana kommunikacionnaya procedura, vklyuchayushchaya takzhe kod peredachi, obsuzhdaemyj v [7.1.6]. Vysokij uroven'. Dlya kommunikacionnoj procedury, napisannoj na interpretiruemom Bejsike, vremya ochen' sushchestvenno. Obrabotka medlenna, poetomu esli procedura priema neverno skonstruirovana, to vhodnoj bufer mozhet zapolnit'sya (t.e. proizojdet perepolnenie) v to vremya kak programma eshche budet analizirovat' ranee poluchennye dannye. Oche- vidnym resheniem etoj problemy yavlyaetsya maksimal'no vozmozhnyj razmer bufera. Pri zagruzke Bejsika razmer bufera vvoda ustanav- livaetsya dobavleniem k komande klyucha /C:. BASICA /C:1024 sozdaet bufer razmerom v 1K i eto minimal'noe chislo dlya skorosti obmena 1200 bod (slozhnym proceduram mozhet ponadobit'sya 4096 bajt). Po umolchaniyu ispol'zuetsya razmer bufera ravnyj 256 bajtam i takoj bufer imeet to preimushchestvo, chto on mozhet byt' celikom pomeshchen v odnu simvol'nuyu peremennuyu. Takoj razmer bufera mozhno ispol'zo- vat' tol'ko pri skorosti obmena 300 bod i nizhe. Bejsik chitaet iz bufera s pomoshch'yu operatora INPUT$ (mozhno ispol'zovat' takzhe INPUT# i LINE INPUT#, no INPUT$ bolee gibok). |tot operator imeet formu INPUT$(chislobajt,nomerfajla). Naprimer, INPUT$(10,#1) chitaet 10 bajtov iz kommunikacionnogo kanala, otk- rytogo kak fajl #1. Esli razmer bufera ne prevyshaet 256 bajtov, to ochen' udobno chitat' vse soderzhimoe bufera za odin raz. LOC soobshchaet skol'ko bajtov dannyh nahoditsya v bufere v dannyj mo- ment. Poetomu napishite operator INPUT$(LOC(1),#1) i v S$ budut zapisany vse dannye s momenta poslednego dostupa k buferu. Konech- no, esli LOC(1) = 0, to bufer pust i procedura dolzhna ozhidat' poka dannye budut polucheny. Otmetim, chto EOF(1) takzhe mozhno is- pol'zovat' dlya proverki sostoyaniya bufera, tak kak eta funkciya vozvrashchaet -1 esli bufer pust i 0, esli tam est' hotya by odin simvol. Posle togo kak dannye zapisany v S$ programma dolzhna proverit' ne soderzhatsya li tam upravlyayushchie kody. Funkciya INSTR vypolnyaet etu zadachu bystree vsego. Napomnim, chto ee parametrami yavlyayutsya snachala poziciya, s kotoroj nado vesti poisk v stroke, zatem imya stroki i, nakonec, simvol (ili stroka) kotoryj ishchetsya. CHtoby najti simvol XOFF (ASCII 19) operator dolzhen imet' vid INSTR(1,S$,CHR$(19)). CHtoby najti vtoroe poyavlenie nuzhnogo uprav- lyayushchego simvola povtorite poisk v stroke, nachinaya s simvola, sleduyushchego za poziciej, v kotoroj najden pervyj. Obychno procedura vvoda isklyuchaet bol'shinstvo upravlyayushchih sim- volov iz prinimaemyh dannyh, s tem chtoby oni normal'no vyglyadeli pri vyvode. Zatem dannye vyvodyatsya na ekran, peresylayutsya v dru- goe mesto v pamyati, a inogda zapisyvayutsya na disk ili vyvodyatsya na printer. V processe vsej etoj deyatel'nosti programma dolzhna postoyanno vozvrashchat'sya k prosmotru ne postupili li novye dannye. Esli okazalos', chto bufer zapolnyaetsya slishkom bystro, to program- ma mozhet poslat' signal XOFF, ostanavlivaya potok dannyh. Zatem, posle togo kak poluchennye dannye budu dekodirovany, mozhno snova razreshit' peredachu dannyh. Konechno, neobhodimo chtoby protokol obmena podderzhival XON i XOFF. Programmy, napisannye na interpre- tiruemom Bejsike, obychno mogut ispol'zovat' XON/XOFF dlya ustanov- leniya sootvetstviya skorostej pri prieme dannyh, no pri peredache dannyh takaya programma chasto ne mozhet dostatochno bystro otreagi- rovat' na poluchenie signala XOFF. . . 500 '''zdes' nahoditsya procedura peredachi (sm. [7.1.6]) . . 600 IF LOC(1)>100 THEN XOFF = 1: PRINT #1,CHR$(19) 610 C$ = INPUT$(LOC(1),#1) 'chitaem soderzhimoe bufera 620 '''vydelyaem iz dannyh upravlyayushchie simvoly 630 IF INSTR(1,C$,CHR$(19))>0 THEN 800 'poluchen XOFF 640 IF INSTR(1,C$,CHR$(17))>0 THEN 900 'poluchen XON . (zdes' udalyayutsya nenuzhnye upravlyayushchie simvoly . 700 PRINT C$ 'vyvodim dannye na ekran 710 IF LOC(1) > 0 THEN 600 'esli polucheny dannye, to chitaem ih 720 IF XOFF = 1 THEN XOFF = 0: PRINT #1,CHR$(17) . . 800 'reakciya na XOFF . 900 'reakciya na XON Esli funkciya LOF primenyaetsya k kommunikacionnomu portu, to ona vozvrashchaet kolichestvo svobodnogo mesta, ostavsheesya v bufere vvo- da. Naprimer, esli COM1 otkryt kak #1, to LOF(1) soobshchit svobod- nogo prostranstva. |to mozhet byt' polezno dlya opredeleniya, chto bufer pochti polon. Otmetim, odnako, chto operator LOC vozvrashchaet poziciyu ukazatelya v bufere i eto znachenie mozhet byt' ispol'zovano dlya toj zhe celi. Naprimer, esli COM1 otkryt kak #3, a razmer bufera vvoda raven 256 bajtam, to do teh por, poka LOC(3) ne budet raven 256, bufer ne polon. Srednij uroven'. Funkciya 2 preryvaniya 14H BIOS ozhidaet simvol iz posledovatel'- nogo porta, pomeshchaet ego v AL pri poluchenii i zatem vozvrashchaetsya v programmu. Pri vhode nado pomestit' nomer porta (0-1) v DX. Pri vozvrate AX raven nulyu, esli ne bylo oshibki. Esli AH ne raven 0, to mozhet byt' vozvrashchen bajt statusa, v kotorom imeyut znachenie tol'ko 5 bitov. |to sleduyushchie bity: bit 1 oshibka perepolneniya (novyj simvol postupil ran'she, chem byl udalen staryj) 2 oshibka chetnosti (veroyatno, iz-za problem v linii) 3 oshibka oformleniya (startovyj ili stop-bity neverny) 4 obnaruzhen pereryv (poluchena dlinnaya stroka bitov 0) 5 oshibka tajmauta (ne poluchen signal DSR) MS DOS takzhe predostavlyaet kommunikacionnuyu funkciyu dlya priema odnogo simvola, eto funkciya 3 preryvaniya 21H. Funkciya ozhidaet simvol iz COM1 i pomeshchaet ego v AL. Otmetim, chto pri etom net funkcii inicializacii porta, kotoruyu nado delat' cherez proceduru BIOS ili neposredstvenno, kak pokazano v [7.1.2]. Po umolchaniyu port inicializiruetsya so znacheniyami 2400 bod, net kontrolya chet- nosti, odin stop-bit i 8 bitov na simvol. |ta funkciya ne imeet nikakih dostoinstv po sravneniyu s funkciej BIOS i ne vozvrashchaet informacii o statuse. Nizkij uroven'. Pri poluchenii dannyh bez ispol'zovaniya kommunikacionnogo pre- ryvaniya [7.1.8] programma dolzhna postoyanno proveryat' registr statusa linii, adres porta kotorogo na 5 bol'she bazovogo adresa ispol'zuemogo kommunikacionnogo adaptera. Bit 0 etogo registra budet raven nulyu, do teh por poka ne budet poluchen simvol v re- gistr dannyh priemnika. Kogda bit 0 stanovitsya ravnym 1, to nado nemedlenno schitat' ego iz registra, s tem chtoby na nego ne nalo- zhilsya sleduyushchij prinimaemyj simvol. Posle togo kak simvol schitan, bit 0 opyat' stanovitsya ravnym 0 i ostaetsya takovym, poka ne pri- budet novyj simvol. Hotya zdes' ob etom ne govorilos', no kommunikacionnye procedu- ry obychno sozdayut ciklicheskij bufer dlya sbora postupayushchih simvo- lov. Ciklicheskie bufera obsuzhdalis' v [3.1.1]. Vy dolzhny takzhe znat', chto esli postupayushchie dannye podavat' na ekran so skorost'yu 1200 bod, to procedura sdviga ekrana BIOS [4.5.1] ne budet uspe- vat' i proizojdet perepolnenie. Prostoe reshenie etih problem sostoit v ispol'zovanii kommunikacionnogo preryvaniya, kak ob®yas- neno v [7.1.8]. Sleduyushchij primer chastichno dubliruet soderzhimoe predydushchego razdela, otnosyashchegosya k peredache simvolov. Kak i v tom sluchae kod nachinaetsya s beskonechnogo cikla. Ob®edinite eti 2 procedury s procedurami inicializacii iz [7.1.2] i [7.1.5] dlya sozdaniya za- konchennoj procedury vvoda/vyvoda cherez kommunikacionnyj kanal. KEEP_TRYING: MOV DX,BASE_ADDRESS ;bazovyj adres ADD DX,5 ;ukazyvaem na registr statusa linii IN AL,DX ;poluchaem bajt statusa TEST AL,00011110B ;proveryaem na oshibku JNZ ERROR_ROUTINE ;esli da, to na obrabotku oshibki TEST AL,00000001B ;proveryaem polucheny li dannye JNZ RECEIVE ;na proceduru priema dannyh TEST AL,00100000B ;proveryaem gotovnost' k peredache JZ KEEP_TRYING ;esli net, to k nachalu cikla . (zdes' raspolozhena procedura peredachi - sm. [7.1.6]) . ;---poluchaem dannye i vyvodim ih na ekran RECEIVE: MOV DX,BASE_ADDRESS ;bazovyj adres IN AL,DX ;chitaem poluchennyj simvol CMP AL,19 ;proverka na XOFF JE XOFF_ROUTINE ; . (i t.d.) . MOV DL,AL ;gotovim simvol dlya vyvoda na ekran MOV AH,2 ;funkciya vyvoda simvola INT 21H ;vyvodim ego JMP SHORT KEEP_TRYING ;vozvrashchaemsya na nachalo cikla 7.1.8 Posylka/poluchenie dannyh s pomoshch'yu kommunikacionnogo preryvaniya. Horoshaya kommunikacionnaya programma imeet slishkom mnogo raboty, chtoby posvyatit' sebya celikom vvodu/vyvodu. Postupayushchie dannye dolzhny analizirovat'sya, peredavaemye dannye dolzhny sobirat'sya, a bol'shie bloki dannyh mogut zapisyvat'sya na disk ili schityvat'sya s nego. Kommunikacionnoe preryvanie pozvolyaet programme ne tratit' na vvod/vyvod bol'she vremeni, chem on togo trebuet. Naprimer, posle ustanovki preryvaniya, upravlenie peredaetsya procedure pere- dachi dannyz tol'ko v tom sluchae, kogda registr hraneniya peredat- chika pust i vozvrashchaetsya programme, kak tol'ko poslan bajt dan- nyh, pozvolyaya ej prodolzhat' svoyu rabotu do teh por, poka registr hraneniya peredatchika ne budet snova gotov. Ne zabud'te oznako- mit'sya s obsuzhdeniem preryvanij v [1.2.3], prezhde chem prodolzhit' chtenie. IBM PC otvodit dva apparatnyh preryvaniya dlya kommunikacionnyh kanalov, nomer 3 (COM1) i 4 (COM2). Otmetim, chto u PCjr, vstroen- nyj modem imeet nomer 3, a COM1 - nomer 4. Mikroshema UART 8250 dopuskaet 4 klassa preryvanij dlya kazhdogo kanala, ispol'zuya sle- duyushchie dvoichnye kodovye chisla: 00 izmenenie v registre statusa modema 01 registr hraneniya peredatchika pust 10 polucheny dannye 11 oshibka priema, ili polucheno uslovie pereryva |ti kody soderzhatsya v bitah 2-1 registra identifikacii preryva- niya, adres porta kotorogo na 2 bol'she, chem bazovyj adres ispol'- zuemogo kommunikacionnogo adaptera. Bit 0 etogo registra ustanav- livaetsya pri vozniknovenii preryvaniya, a ostal'nye bity ne is- pol'zuyutsya i vsegda ravny 0. CHtoby vybrat' odno ili bolee preryvanij, nado zaprogrammiro- vat' registr razresheniya preryvaniya, adres kotorogo na 1 bol'she bazovogo adresa. Znachenie ego bitov takoe: bit 0 1 = preryvanie pri poluchenii dannyh 1 1 = preryvanie kogda registr hraneniya peredatchika pust 2 1 = preryvanie pri oshibke priema dannyh 3 1 = preryvanie pri izmenenii registra statusa modema 7-4 ne ispol'zuyutsya, vsegda 0 Kogda odno iz etih sobytij proishodit, to iniciiruetsya apparatnoe preryvanie, voznikayushchee v mikrosheme obrabotki preryvanij 8259 po kanalu 3 dlya COM1 i po kanalu 4 dlya COM2. Procedura obrabotki preryvanij peredaet upravlenie tomu kodu, na kotoryj ukazyvaet sootvetstvuyushchij vektor preryvaniya. Poskol'ku eto apparatnoe pre- ryvanie, to ono mozhet byt' maskirovano [1.2.2]. Pomnite, chto procedura obrabotki preryvaniya dolzhna zavershat'sya standartnym kodom vyhoda iz apparatnogo preryvaniya MOV AL,20H/OUT 20H,AL. Na ris. 7-3 pokazano kommunikacionnoe preryvanie. Lyuboe chislo tipov preryvaniya mozhet byt' razresheno odnovremen- no. No esli razreshen bolee chem odin tip, to procedura obrabotki preryvaniya dolzhna sama opredelyat' kakoj iz tipov preryvaniya proi- zoshel, proveryaya registr identifikacii preryvaniya. Odnovremenno mogut proishodit' bolee chem odno preryvanie, poetomu bit 0 re- gistra identifikacii soobshchaet o tom, chto postupilo eshche odno pre- ryvanie. Kogda dva ili bolee preryvanij postupilo v odin i tot zhe moment vremeni, to oni obrabatyvayutsya v poryadke, ukazannom v nizheprivedennoj tablice. Dobavochnye preryvaniya dolzhny byt' obra- botany do zaversheniya procedury obrabotki preryvaniya. Usloviya predshestvuyushchih preryvanij "otmenyayutsya" s pomoshch'yu dejstvij, pri- vedennyh v pravom stolbce sleduyushchej tablicy: Kod Tip Dejstviya dlya "sbrosa" 11 oshibka ili pereryv chtenie registra statusa linii 10 polucheny dannye chtenie registra priemnika dannyh 01 peredatchik gotov vyvod simvola v registr hraneniya peredatchika 00 izmenenie statusa modema chtenie registra statusa modema Nizkij uroven'. Vot obshchaya forma programmy, obrabatyvayushchej kommunikacionnye preryvaniya: ;---ustanovka vektora kommunikacionnogo preryvaniya PUSH DS ;sohranyaem DS MOV DX,OFFSET IO_INT ;DS:DX ukazyvayut na proceduru MOV AX,SEG IO_INT ; MOV DS,AX ; MOV AL,0BH ;nomer vektora dlya COM1 MOV AH,25H ;funkciya izmeneniya vektora INT 21H ;menyaem vektor preryvaniya ;---inicializaciya registra razresheniya preryvaniya (COM1) MOV AX,40H ;DS ukazyvaet na dannye BIOS MOV DS,AX ; MOV DX,DS:[0] ;poluchaem bazovyj adres COM1 INC DX ;ukazyvaem na registr razresheniya MOV AL,3 ;preryvanij i razreshaem preryvaniya OUT DX,AL ;priema i peredachi POP DS ;vosstanavlivaem registr ;---procedura obrabotki preryvaniya - snachala opredelyaem ego tip IO_INT PROC FAR NEXT_INT: MOV DX,BASEADDRESS ;bazovyj adres INC DX ;ukazyvaem na registr identifikacii INC DX ;preryvaniya IN AL,DX ;chitaem ego znachenie TEST AL,10B ;eto preryvanie peredatchika? JNZ TRANSMIT ;esli da, to na peredachu RECEIVE: ;inache na priem . . JMP SHORT ANOTHER ;proveryaem net li drugogo preryvaniya TRANSMIT: ;zdes' kod dlya peredachi . . ;---pered vyhodom, proveryaem net li drugogo preryvaniya ANOTHER: MOV DX,BASEADDRESS ;bazovyj adres INC DX ;ukazyvaem na registr identifikacii INC DX ;preryvaniya IN AL,DX ;chitaem ego znachenie TEST AL,1 ;proveryaem bit 1 JNZ NEXT_INT ;esli on ustanovlen, to na nachalo MOV AL,20H ;inache kod zaversheniya apparatnogo OUT 20H,AL ;preryvaniya IRET IO_INT ENDP 7.1.9 Svodka upravlyayushchih kodov, ispol'zuemyh pri kommunikacii. |ta tablica soderzhit 32 upravlyayushchih koda ASCII, kotorye is- pol'zuyutsya pri kommunikacii, a takzhe pri rabote printera i drugih ustrojstv. Dobavlen takzhe kod ASCII 127 - DEL (Zaboj), kotoryj obychno ispol'zuetsya kak upravlyayushchij kod, hotya ego i nel'zya vydat' s klaviatury s pomoshch'yu sochetaniya Ctrl + klavisha. Primenenie neko- toryh kodov, takih kak vozvrat karetki, invariantno. No bol'- shinstvo drugih upravlyayushchih kodov imeyut shirokij diapazon interpre- tacii, vo mnogom iz-za otsutstviya sovmestimosti oborudovaniya. Nomer koda ASCII Kombinaciya Mnemo- 10-j 16-j Simvol s Ctrl nika Naznachenie 00 00 ^@ NUL Simvol-razdelitel' (ne imeyushchij znacheniya, poetomu polezen dlya zaderzhek) 01 01 ^A SOH Nachalo zagolovka. Nachinaet peredachu bloka dannyh ili no- vogo fajla. 02 02 ^B STX Nachalo teksta. Otmechaet nachalo teksta, sleduyushchego za za- golovkom dannyh. 03 03 ^C ETX Konec teksta. Mozhet otmechat' nachalo dannyh, sluzhashchih dlya kontrolya oshibok. 04 04 ^D EOT Konec peredachi. Kod ostanovki, no inogda on prosto otme- chaet konec fajla. 05 05 ^E ENQ Zapros. Zaprashivaet statusnuyu informaciyu u otdalennoj stancii. 06 06 ^F ACK Podtverzhdenie. Podtverzhdaet uspeshnyj obmen mezhdu stanciyami. 07 07 ^G BEL Zvonok. Iniciiruet zvonok, chtoby privlech' vnimanie. 08 08 ^H BS Vozvrat na shag. 09 09 ^I HT Gorizontal'naya tabulyaciya. 10 0A ^J LF Perevod stroki. 11 0B ^K VT Vertikal'naya tabulyaciya. 12 0C ^L FF Perevod formata. 13 0D ^M CR Vozvrat karetki. 14 0E ^N SO Sdvig vyklyuchen. Pereklyuchaet nabor simvolov. 15 0F ^O SI Sdvig vklyuchen. Pereklyuchaet nabor simvolov. 16 10 ^P DLE Data Link Escape. Modificiruet znachenie sleduyushchih simvolov (analogichno Esc). 17 11 ^Q DC1 Upravlenie ustrojstvom 1. Ispol'zuetsya kak signal XON dlya udalennoj stancii na peredachu. 18 12 ^R DC2 Upravlenie ustrojstvom 2. Signal pereklyucheniya obshchego nazna- cheniya. 19 13 ^S DC3 Upravlenie ustrojstvom 3. Ispol'zuetsya kak signal XOFF dlya udalennoj stancii dlya prekrashcheniya peredachi. 20 14 ^T DC4 Upravlenie ustrojstvom 4. Signal pereklyucheniya obshchego nazna- cheniya. 21 15 ^U NAK Otricanie. Peredacha neuspeshna. 22 16 ^V SYN Promezhutok sinhronizacii. Ispol'zuetsya mezhdu blokami dannyh pri sinhronnoj svyazi. 23 17 ^W TB Konec bloka peredachi. Variant ETX. 24 18 ^X CAN Otmena. Obychno signaliziruet ob oshibke peredachi. 25 19 ^Y EM Konec sredy. Signaliziruet o fizicheskom konce istochnika dannyh. 26 1A ^Z SUB Podstanovka. Zamenyaet simvoly, kotorye nezakonny ili nevoz- mozhno vyvesti. 27 1B ^[ ESC Otmechaet posleduyushchie simvoly, kak upravlyayushchuyu posledova- tel'nost'. 28 1C ^/ FS Razdelitel' fajlov. Otmechaet logicheskuyu granicu mezhdu faj- lami. 29 1D ^] GS Razdelitel' grupp. Otmechaet logicheskuyu granicu mezhdu grup- pami dannyh. 30 1E ^^ RS Razdelitel' zapisej. Otmechaet logicheskuyu granicu mezhdu za- pisyami dannyh. 31 1F ^_ US Razdelitel' ob®ektov. Otmechaet logicheskuyu granicu mezhdu ob®ektami dannyh. 127 7F net DEL Zaboj. Udalyaet drugie simvoly. Razdel 2. Sozdanie drajvera ustrojstva. Drajver ustrojstva eto special'naya programma, kotoraya uprav- lyaet obmenom s periferijnym ustrojstvom, takim kak printer ili diskovyj nakopitel'. Poskol'ku parametry etih periferijnyh ust- rojstv menyayutsya ot proizvoditelya k proizvoditelyu, to raznym pol'- zovatelyam programmy mozhet potrebovat'sya dyuzhina razlichnyh drajve- rov, chtoby on mog rabotat' na imeyushchemsya u nego oborudovanii. Imeetsya 4 sposoba vklyucheniya drajverov ustrojstv v programmu: 1. Mozhno pomestit' kod dlya vseh drajverov pryamo v programmu. Naprimer, chtoby podderzhivat' razlichnye printery, mozhno sozdat' tablicu upravlyayushchih posledovatel'nostej i iskat' v nej nuzhnyj kod kazhdyj raz kogda on potrebuetsya. |tot podhod tratit mnogo pamyati i mozhet byt' dostatochno medlennym. 2. Sozdat' ryad drajverov ustrojstv i potrebovat', chtoby prog- ramma zagruzhala neobhodimyj v kachestve overleya (t.e. pomeshchat' ego v oblast' programmy, special'no ostavlennuyu dlya etoj celi [1.3.5]). 3. Sozdat' drajver ustrojstva kak otdel'nuyu programmu, kotoraya ukazyvaetsya v komandnom fajle, vypolnyaemom pri zagruzke sistemy. Programma zapuskaetsya i ustanavlivaet drajver ustrojstva kak programmu obrabotki preryvaniya. Posle etogo programma zavershaet- sya, no ostaetsya rezidentnoj v pamyati, kak ob®yasneno v [1.3.4]. Vposledstvii nasha programma ispol'zuet etot drajver cherez vektor preryvaniya. 4. Sozdat' polnocennyj drajver ustrojstva, kotoryj budet zag- ruzhat'sya pri starte s pomoshch'yu fajla CONFIG.SYS. MS DOS podderzhi- vaet takoj tip drajverov ustrojstv i odnazhdy zagruzhennyj on mozhet ispol'zovat' vse vozmozhnosti komand DOS, vklyuchaya proverku oshibok. Special'naya komanda IOCTL (Kontrol' vvoda/vyvoda) pozvolyaet prog- ramme uznat' status drajvera i poslat' emu upravlyayushchuyu stroku, pomimo obychnogo potoka dannyh. Pervye tri strategii legko realizuyutsya s pomoshch'yu informacii, privedennoj v ostal'nyh chastyah dannoj knigi. No ustanavlivaemye drajvery ustrojstv ochen' slozhny. Zato kogda on est', to on ochen' moshchen. V etom sluchae sistema budet rabotat' s ustrojstvom nas- tol'ko zhe tesno, kak s klaviaturoj ili diskovym nakopitelem. Ustrojstvu mozhet byt' prisvoeno imya, naprimer, SERIALPR dlya pos- ledovatel'nogo printera, i zatem eto ustrojstvo mozhet byt' otkry- to dlya dostupa iz lyubogo yazyka. V Bejsike operator OPEN "SE- RIALPR" FOR OUTPUT AS #2 podgotovit posledovatel'nyj printer dlya vyvoda. V yazyke assemblera Vy smozhete poluchit' dostup k printeru kak s pomoshch'yu metoda upravlyayushchego bloka fajla, tak i s pomoshch'yu metoda deskriptora fajla, vklyuchaya ochen' moshchnuyu funkciyu IOCTL. Pri etom pol'zovatel' imeet vozmozhnost' dostupa k ustrojstvu na urov- ne operacionnoj sistemy i mozhet prosto vvesti komandu COPY A:MY- FILE SERIALPR:, chtoby skopirovat' soderzhimoe fajla na printer. Ustanavlivaemye drajvery ustrojstv mogut byt' napisany tol'ko na yazyke assemblera. Oni mogut obsluzhivat' dva tipa ustrojstv: simvol'nye i blochnye. |ti imena opisyvayut edinicy, kotorymi ust- rojstvo obrabatyvaet dannye. Obychno drajvery blochnyh ustrojstv obsluzhivayut diskovye nakopiteli, a drajvery simvol'nyh - vse ostal'noe, nachinaya ot posledovatel'nyh printerov i konchaya robota- mi. Blochnye ustrojstva obmenivayutsya blokami dannyh, poetomu oni zanimayutsya nakopleniem dannyh. Simvol'nye ustrojstva obmenivayutsya dannymi pobajtno, poetomu oni luchshe podhodyat dlya upravlyayushchih ustrojstv, a takzhe dlya ustrojstv, kotorye ne mogut obespechit' vysokuyu skorost' obmena dannymi. Drajvery blochnyh ustrojstv ochen' slozhny i zdes' net dostatochno mesta, chtoby ob®yasnit' ih struktu- ru. Ochen' redko komu trebuetsya napisat' takoj drajver. Tehniches- koe rukovodstvo po MS DOS predostavlyaet vsyu neobhodimuyu informa- ciyu i soderzhit polnyj primer drajvera virtual'nogo diska v opera- tivnoj pamyati. Vy mozhete prosmotret' etu informaciyu posle togo kak izuchite obsuzhdenie drajverov simvol'nyh ustrojstv, priveden- noe zdes'. Ustanavlivaemye drajvery ustrojstv besposhchadny k programmists- kim oshibkam. Poskol'ku drajvery avtomaticheski zagruzhayutsya siste- moj pri zagruzke, to nevozmozhno ispol'zovat' otladchiki dlya vyyav- leniya prichin nepoladok. Poetomu bud'te predel'no vnimatel'ny pri ih napisanii. Programma drajvera ustrojstva razbivaetsya na tri chasti, kazhdaya iz kotoryh obsuzhdaetsya otdel'no v sleduyushchih razdelah. |to (1) zagolovok drajvera, kotoryj imenuet ustrojstvo i soderzhit infor- maciyu ob ostal'nyh chastyah drajvera, (2) strategiya drajvera, koto- raya hranit informaciyu ob oblasti dannyh, sozdavaemoj MS DOS, kotoraya nazyvaetya zagolovkom zaprosa, i (3) obrabotchik preryvaniya ustrojstva, kotoryj i soderzhit kod, upravlyayushchij ustrojstvom. 7.2.1 Sozdanie zagolovka drajvera. Drajvery ustrojstv dolzhny sozdavat'sya v vide COM fajlov [1.3.6]. Odnako oni ne yavlyayutsya nastoyashchimi programmami, poskol'ku u nih otsutstvuet prefiks programmnogo segmenta. CHtoby dobit'sya etogo ne nado vklyuchat' operator ORG 100H v nachale programmy, kak eto delaetsya dlya COM fajlov. Libo zapishite ORG 0, libo voobshche nichego ne pishite. Drajver dolzhen byt' opisan kak dalekaya (far) procedura, kak i v lyuboj programme. V nizheprivedennom primere priveden nachal'nyj kod dlya drajvera ustrojstva s imenem DEVICE12. Ono zamenyaet standartnoe ustrojstvo AUX, ispol'zuemoe MS DOS, prinimaya vyvod funkcii 4 preryvaniya 21H. Ves' drajver ustrojstva sostoit iz koda etogo razdela vmeste s kodom, privedennom v sle- duyushchih dvuh razdelah; pomestite ih podryad odin za drugim, chtoby poluchit' polnuyu programmu. Drajver ustrojstva dolzhen nachinat'sya s zagolovka drajvera. On imeet dlinu 18 bajtov, razdelennyh na 5 polej. Pervoe pole (DD) vsegda soderzhit znachenie -1 (FFFFFFFFH), i kogda MS DOS zagruzhaet drajver, to ono zamenyaetsya na startovyj adres sleduyushchego drajve- ra. Takim obrazom, sistema mozhet iskat' sleduyushchij drajver po cepochke. U poslednego zagruzhennogo drajvera v etom pole ostaetsya znachenie -1. Vtoroe pole eto bajt atributov drajvera. Imeyut znachenie tol'ko 7 bitov etogo slova: bit 15 1 = simvol'noe ustrojstvo, 0 = blochnoe ustrojstvo 14 1 = podderzhivaet IOCTL, 0 = ne podderzhivaet IOCTL 13 1 = format blokov IBM, 0 = drugoj format blokov 3 1 = chasy, 0 = ne chasy 2 1 = nulevoe ustrojstvo, 0 = ne nulevoe ustrojstvo 1 1 = ustrojstvo standartnogo vyvoda, 0 = net 0 1 = ustrojstvo standartnogo vvoda, 0 = net Obychno ustanovlen tol'ko bit 15, ili bity 15 i 14, esli ustrojst- vo podderzhivaet IOCTL (kak obsuzhdaetsya v [7.2.4]). Bit 13 usta- navlivaetsya tol'ko dlya blochnyh ustrojstv. Ostal'nye bity ispol'- zuyutsya dlya zameny ustrojstv, ispol'zuemyh MS DOS po umolchaniyu (ustrojstvami standartnogo vvoda i vyvoda yavlyayutsya klaviatura i videodisplej; ustrojstvo chasov ob®edinyaet chasy real'nogo vremeni s chasami vremeni sutok BIOS; a nulevoe ustrojstvo (NULL) - eto psevdoustrojstvo, ispol'zuemoe dlya testovyh celej). Tret'e i chetvertoe polya soderzhat smeshcheniya dlya procedur strate- gii i obrabotki preryvaniya, kotorye budut rassmotreny v sleduyushchih razdelah. Nakonec, poslednee pole soderzhit imya ustrojstva. Imya mozhet soderzhat' do 8 simvolov i ono dolzhno byt' vyravneno po levomu krayu s zavershayushchimi probelami. Dlya zameny sushchestvuyushchih v DOS ustrojstv, takih kak LPT1 ili COM1, ispol'zujte to zhe imya ustrojstva, kak v dannom primere. Nizkij uroven'. V dannom primere sozdaetsya drajver dlya posledovatel'nogo ust- rojstva. "DEVICE12" - imya fajla, kotoryj dolzhen byt' ukazan v fajle konfiguracii sisitemy, chtoby etot drajver byl zagruzhen. V bajte atributov ustanovlen tol'ko bit 15, ukazyvaya chto eto sim- vol'noe ustrojstvo i chto ono ne podderzhivaet IOCTL. DEV_STRATEGY i DEV_INTERRUPT - imena procedur, obsuzhdaemyh v sleduyushchih razde- lah. Ustrojstvo nazvano AUX, s tem chtoby zamenit' obychnoe ust- rojstvo MS DOS s etim imenem. |to pozvolyaet ochen' prosto obra- shchat'sya k etomu ustrojstvu, poskol'ku sistema imeet predopredelen- nyj nomer fajla dlya obrashcheniya k ustrojstvu AUX (posledovatel'no- mu). V primer vklyuchen nachal'nyj kod dlya drajvera, opredelyayushchij ego kak COM programmu. CSEG SEGMENT PUBLIC 'CODE' 'ustanavlivaem kodovyj segment ORG 0 'eta stroka neobyazatel'na ASSUME CS:CSEG,DS:CSEG,ES:CSEG DEVICE12 PROC FAR 'drajver eto dalekaya procedura DD 0FFFFFFFFH 'adres sleduyushchego drajvera DW 8000H 'bajt atributov DW DEV_STATEGY 'adres procedury strategii DW DEV_INTERRUPT 'adres procedury preryvaniya DB 'AUX ' 'imya ustrojstvo (dopolnennoe probelami) 7.2.2 Sozdanie strategii ustrojstva. Procedura strategii ustrojstva trebuet tol'ko pyati strok. Kogda sistema zagruzhaet ustrojstvo, to ona sozdaet blok dannyh, nazyvaemyj zagolovkom zaprosa. On imeet dve funkcii. Vo-pervyh on sluzhit oblast'yu dannyh dlya vnutrennih operacij sistemy. Bolee vazhno to, chto zagolovok zaprosa sluzhit oblast'yu, cherez kotoruyu proishodit obmen informaciej mezhdu drajverom i vyzyvayushchej ego programmoj. Naprimer, kogda drajver vyvodit dannye, to emu daetsya adres dannyh cherez zagolovok zaprosa. Kogda zhe drajver zavershaet svoyu rabotu, to on ustanavlivaet v zagolovke zaprosa bajt statu- sa, kotoryj dostupen vyzyvayushchej programme, tem samym davaya voz- mozhnost' ej uznat' ob oshibke. MS DOS sozdaet zagolovok zaprosa pri ustanovke drajvera ust- rojstva (kogda sistema zagruzhaetsya). Procedura strategii ust- rojstva vypolnyaetsya tol'ko odin raz v etot moment. Pri etom ES:BX ukazyvayut na vnov' sozdannyj zagolovok zaprosa i procedure nuzhno prosto skopirovat' ih, chtoby vposledstvii on mog byt' obnaruzhen pri obrashchenii k drajveru. Adresa smeshcheniya i segmenta zagolovka pomeshchayutsya v dve peremennye. V sleduyushchem razdele Vy uvidite, chto pri obrashchenii k drajveru, pervoe chto on delaet - vosstanavlivaet znacheniya ES:BX, chtoby mozhno bylo poluchit' informaciyu iz zagolovka zaprosa. Razmer zagolovka zaprosa mozhet menyat'sya, v zavisimosti ot tipa sdelannogo zaprosa k drajveru (napr. inicializaciya, vyvod dannyh ili vozvrat statusa). Odnako pervye 13 bajt zagolovka vsegda odni i te zhe. Ih format takov: 1. Dlina zagolovka zaprosa (DB). 2. Kod ustrojstva (DB). Opredelyaet nomer dlya blochnyh ustrojstv. 3. Kod komandy (DB). Zdes' hranitsya nomer poslednej poslannoj drajveru komandy. |ti kody perechisleny v [7.2.3]. 4. Status (DW). Status ustanavlivaetsya kazhdyj raz pri vyzove drajvera. Esli ustanovlen bit 15, to v mladshih vos'mi bitah naho- ditsya kod oshibki. Kody oshibok perechisleny v [7.2.3]. 5. Rezervnaya oblast' (8 bajtov). Ispol'zuetsya MS DOS. 6. Dannye neobhodimye dlya raboty drajvera (peremennoj dliny). Nizkij uroven'. Vot 5 strok procedury strategii ustrojstva. Otmechaem, chto dve slovnye peremennye, hranyashchie znacheniya ES i BX, sleduyut za inst- rukciej RET, kak i polozheno v formate COM. DEV_STRATEGY: MOV CS:KEEP_ES,ES MOV CS:KEEP_BX,BX RET KEEP_CS DW ? KEEP_BX DW ? 7.2.3 Sozdanie obrabotchika preryvaniya ustrojstva. Drajver ustrojstva nachinaetsya s dvuh porcij koda, privedennyh v predydushchih razdelah. Za nimi dolzhna sledovat' sootvetstvuyushchaya procedura obrabotki preryvaniya. Na samom dele, eto neverno, nazy- vat' etu proceduru proceduroj obrabotki preryvaniya, tak kak ona vovse ne obsluzhivaet preryvanie i zavershaetsya obychnoj instrukciej RET. Imeetsya 13 tipov funkcij, kotorye mozhet vypolnyat' ustanavli- vaemyj drajver ustrojstva. Kogda drajver vyzyvaetsya funkciej DOS (skazhem funkciej 3FH preryvaniya 21H, kotoraya chitaet dannye iz fajla ili ustrojstva), to funkciya pomeshchaet kodovyj nomer ot 1 do 13 v odnobajtnoe pole po smeshcheniyu 2 v zagolovke zaprosa (dlya vvoda - kodovyj nomer 5). Zatem upravlenie peredaetsya procedure obrabotki preryvaniya drajvera, adoes kotoroj opredelyaetsya pri prosmotre zagolovka drajvera [7.2.1]. |ta procedura v pervuyu ochered' vosstanavlivaet