
















     operacionnaq sistema  R T 1 1 (OPISANIE SOSTAWLENO PO OPISANI@

              os rafos S WNESENIEM IZMENENIJ I DOPOLNENIJ).



                   programMirowanie wne{nih ustrojstw

                        rukowodstwo programmista


                                  1985




                               LISTOW 151

























 pERW.PRIMEN.
                                                                 lITERA

                                 - 2 -






                                 - 3 -








                               sodervanie




 1.     obrabotka prerywanij                                          7

 1.1.    programmiruemyj wwod/wywod                                   7
 1.2.    wwod/wywod po prerywani`                                     8
 1.2.1.    sistema prerywanij                                         8
 1.2.2.    prioritety processora i ustrojstwa                         9
 1.2.3.    slowo sostoqniq processora (PS)                           10
 1.3.    srawnenie   wnutrennih   podprogramm    obrabotki
         prerywanij i drajwerow ustrojstw                            11
 1.4.    rekomendacii po napisani` podprogrammy  obrabotki
         prerywaniq                                                  15
 1.4.1.    oznakomlenie s ustrojstwom                                15
 1.4.2.    trebowaniq k podprogramme obrabotki                       17
 1.5.    struktura podprogrammy obrabotki prerywaniq                 18
 1.5.1.    za{ita wektorow. makrokomanda .PROTECT                    18
 1.5.2.    ustanowka wektora prerywaniq                              18
 1.5.3.    makrokomanda .DEVICE                                      19
 1.5.4.    makrokomanda .INTEN                                       19
 1.5.5.    ispolxzowanie makrokomandy .SYNCH                         20
 1.5.6.    wypolnenie  na  urowne  wetwleniq.   makrokomanda
           .FORK                                                     22
 1.5.7.    kratkie swedeniq o makrokomandah .INTEN, .FORK  i
           .SYNCH                                                    23
 1.5.8.    wyhod iz prerywaniq                                       25
 1.5.9.    obrabotka prerywaniq na fortran sm (INTSET)               25
 1.6.    primer podprogrammy obrabotki prerywaniq                    25
 1.7.    obrabotka prerywaniq w RT11XM                               26

 2.  struktura i nastrojka drajwera                                  33

 2.1.    sekciq wwedeniq                                             34
 2.1.1.    makrokomanda .DRDEF                                       34
 2.1.1.1.  direktiwa .MCALL                                          35
 2.1.1.2.  uslowiq generacii sistemy                                 35
 2.1.1.3.  sme}enie w |lemente o~eredi                               35
 2.1.1.4.  opredelenie simwolxnyh obozna~enij                        36
 2.1.2.    bajt-identifikator ustrojstwa                             36
 2.1.3.    slowo sostoqniq ustrojstwa                                37
 2.1.4.    slowo razmera ustrojstwa                                  39
 2.2.    sekciq zagolowka                                            39
 2.2.1.    informaciq w bloke 0                                      39
 2.2.2.    perwye pqtx slow drajwera                                 40
 2.2.3.    makrokomanda .DRBEG                                       40
 2.2.4.    mnogowektornye drajwery. makrokomanda .DRVTB              41
 2.2.5.    kody uslowij PS                                           42
 2.3.    sekciq iniciacii wwoda/wywoda                               42
 2.4.    sekciq obrabotki prerywaniq                                 44
 2.4.1.    to~ka annulirowaniq zaprosa                               44
 2.4.2.    ponivenie  prioriteta  processora  do  prioriteta
           ustrojstwa                                                45

                                 - 4 -




 2.4.3.    makrokomanda .DRAST                                       46
 2.4.4.    rekomendacii po programmirowani` sekcii                   46
 2.5.    sekciq zawer{eniq wwoda/wywoda                              48
 2.5.1.    makrokomanda .DRFIN                                       50
 2.6.    sekciq zawer{eniq drajwera                                  50
 2.6.1.    makrokomanda .DREND                                       50
 2.6.2.    psewdoustrojstwa                                          50

 3.  tipowaq shema drajwera ustrojstwa                               51


 4.  specifi~nye swojstwa drajwera                                   52

 4.1.    wnutrennqq o~eredx drajwerow                                52
 4.1.1.    ustanowka wo wnutrenn`` o~eredx                           53
 4.1.2.    obsluviwanie   prerywaniq   dlq    drajwerow    s
           wnutrennej o~eredx`                                       53
 4.1.3.    procedury   annulirowaniq   dlq    drajwerow    s
           wnutrennej o~eredx`                                       54
 4.2.    SET-parametry                                               55
 4.2.1.    wypolnenie komandy SET                                    55
 4.2.2.    format tablicy SET-parametrow                             56
 4.2.3.    makrokomanda .DRSET                                       56
 4.2.4.    podprogrammy dlq izmeneniq drajwera                       57
 4.2.5.    primery SET-parametrow                                    58
 4.3.    tajm-aut wwoda/wywoda ustrojstwa                            60
 4.3.1.    makrokomanda .TIMIO                                       61
 4.3.2.    makrokomanda .CTIMIO                                      63
 4.3.3.    primenenie tajm-auta ustrojstw                            64
 4.3.3.1.  mnogoterminalxnoe obsluviwanie                            64
 4.3.3.2.  tipi~naq procedura tajmera dlq drajwera diska             64
 4.3.3.3.  primer drajwera ustrojstwa pe~ati                         65
 4.4.    registraciq o{ibok                                          67
 4.4.1.    ispolxzowanie registratora o{ibok                         68
 4.4.1.1.  registraciq uspe{noj pereda~i                             68
 4.4.1.2.  registraciq gruboj o{ibki                                 69
 4.4.1.3.  registraciq negruboj o{ibki                               69
 4.4.1.4.  razli~iq mevdu grubymi i negrubymi o{ibkami               70
 4.4.1.5.  wyzow registratora o{ibok                                 70
 4.4.2.    programma protokolow                                      71
 4.4.2.1.  makrokomanda ELBLDR                                       71
 4.5.    specialxnye funkcii                                         72
 4.5.1.    sistemnaq makrokomanda .SPFUN                             72
 4.5.2.    obespe~enie specialxnyh funkcij w drajwere                73
 4.5.3.    toma raznyh razmerow                                      73
 4.5.4.    zamena plohogo bloka                                      74
 4.5.5.    ustrojstwa so specialxnymi katalogami                     74
 4.6.    drajwery ustrojstw dlq RT11XM                               75
 4.6.1.    sogla{eniq o naimenowaniqh i sistemnye uslowiq            75
 4.6.2.    ob}ie trebowaniq RT11XM                                   75
 4.6.3.    |lement o~eredi w RT11XM                                  78
 4.6.4.    ustrojstwa prqmogo dostupa                                78
 4.6.5.    simwolxno-orientirowannye ustrojstwa                      79
 4.6.5.1.  podprogramma $GETBYT                                      80
 4.6.5.2.  podprogramma $PUTBYT                                      81
 4.6.6.    podprogramma $PUTWRD                                      81
 4.6.7.    dostup w polxzowatelxskij bufer                           82

 5.  drajwery sistemnogo ustrojstwa i zagruz~iki                     87

                                 - 5 -




 5.1.    fajly monitora                                              87
 5.2.    sozdanie drajwera sistemnogo ustrojstwa                     87
 5.2.1.    perwi~nyj drajwer                                         88
 5.2.2.    podprogramma whoda                                        88
 5.2.3.    programmnyj zagruz~ik                                     88
 5.2.4.    podprogramma ~teniq zagruz~ika                            89
 5.2.5.    podprogramma obrabotki o{ibki zagruz~ika                  89
 5.2.6.    makrokomanda .DRBOT                                       90
 5.3.    programma DUP i process na~alxnoj zagruzki                  91
 5.3.1.    komanda "BOOT DDN:FILNAM"                                 91
 5.3.2.    komanda "COPY/BOOT XXN:FILNAM DDM:"                       92
 5.3.3.    komanda "BOOT DDN:"                                       94

 6.  assemblirowanie, komponowka i ustanowka drajwera                95

 6.1.    assemblirowanie drajwera                                    95
 6.2.    komponowka drajwera                                         96
 6.3.    ustanowka drajwera                                          96
 6.3.1.    awtomati~eskaq ustanowka zagruz~ikom                      96
 6.3.2.    ru~naq ustanowka komandoj INSTALL                        101
 6.3.3.    awtomati~eskaq ustanowka makrokomandoj DEV               101
 6.3.4.    ustanowka drajwera podkl`~ennogo ustrojstwa              102
 6.3.5.    podprogramma prowerki ustanowki ustrojstwa               102
 6.3.5.1.  to~ki whoda podprogrammy prowerki                        103
 6.3.5.2.  nali~ie dopolnitelxnogo registra                         103
 6.3.5.3.  otsutstwie dopolnitelxnogo registra                      104
 6.3.5.4.  bit ili bajt identifikacii                               104
 6.3.5.5.  bit ~teniq/zapisi ustrojstwa                             105
 6.3.6.    ustanowka drajwera nepodkl`~ennogo ustrojstwa            105

 7.  prowerka i otladka drajwera ustrojstwa                         106

 7.1.    ispolxzowanie ODT dlq prowerki drajwera                    106
 7.2.    ispolxzowanie ODT w RT11XM                                 109

 8.  osobennosti uprawleniq nekotorymi ustrojstwami                 110

 8.1.    drajwery magnitnoj lenty                                   110
 8.1.1.    funkcii fajlowogo drajwera                               111
 8.1.1.1.  poisk po nomeru posledowatelxnosti                       111
 8.1.1.2.  poisk po imeni fajla                                     112
 8.1.1.3.  makrokomandy fajlowogo drajwera                          113
 8.1.1.4.  ispolxzowanie makrokomand apparatnogo drajwera  s
           modulem fajlowoj struktury                               123
 8.1.2.    funkcii apparatnogo drajwera                             124
 8.1.2.1.  soob}eniq makrokomandy .SPFUN                            125
 8.1.2.2.  ~tenie i zapisx fizi~eskih blokow                        126
 8.1.2.3.  peremotka wpered/nazad                                   128
 8.1.2.4.  peremotka k metke BOT                                    130
 8.1.2.5.  obratnaq  peremotka  i  ustanowka  w   awtonomnom
           revime                                                   130
 8.1.2.6.  zapisx s ras{irennymi promevutkami                       131
 8.1.2.7.  zapisx markera lenty                                     131
 8.1.2.8.  algoritm obrabotki o{ibok                                131
 8.1.2.9.  nefajlowaq makrokomanda .LOOKUP                          132
 8.1.2.10. makrokomanda .CLOSE                                      133
 8.1.2.11. nefajlowye makrokomandy .WRIT*                           133
 8.1.2.12. nefajlowye makrokomandy .READ*                           134
 8.1.3.    ~tenie lent zapisannyh w drugih sistemah                 134

                                 - 6 -




 8.1.3.1.  ~tenie lent zapisannyh w dos kp                          134
 8.1.3.2.  ~tenie lent zapisannyh w os-rw                           135
 8.1.4.    ~tenie lent zapisannyh w RSX-11D i IAS                   135
 8.1.5.    semidorove~naq lenta                                     135
 8.2.    drajwer kassetnoj magnitnoj lenty (CT)                     137
 8.2.1.    funkcii drajwera                                         138
 8.2.1.1.  makrokomanda .LOOKUP                                     138
 8.2.1.2.  makrokomanda .DELETE                                     139
 8.2.1.3.  makrokomanda .ENTER                                      139
 8.2.1.4.  makrokomanda .CLOSE                                      140
 8.2.1.5.  makrokomandy .READ/.WRITE                                140
 8.2.2.    specialxnye funkcii kassety                              141
 8.2.2.2.  poslednij fajl                                           142
 8.2.2.3.  poslednij blok                                           142
 8.2.2.4.  sledu`}ij fajl                                           142
 8.2.2.5.  sledu`}ij blok                                           142
 8.2.2.6.  zapisx promevutka mevdu fajlami                          142
 8.2.3.    opredelenie konca fajla na kassete                       143
 8.3.    drajwery gibkih magnitnyh diskow (DX i DY)                 144
 8.4.    drajwer ustrojstwa wwoda s perfokart (CR)                  145
 8.5.    drajwer perfolento~nogo  ustrojstwa  wwoda/wywoda
         (PC)                                                       146
 8.6.    drajwer sistemnogo terminala (TT)                          146
 8.7.    drajwer paketa smennyh diskow (DM)                         147
 8.7.1.    zamena plohogo bloka                                     147
 8.7.2.    makrokomanda .SPFUN                                      149
 8.8.    nulx-drajwer (NL)                                          150

                                 - 7 -




                       1.    obrabotka prerywanij




       w |tom razdele opisany wozmovnye programmnye sposoby obmena dan-
  nymi mevdu pamqtx` i periferijnym  ustrojstwom,  rassmotreny  preimu-
  }estwa i nedostatki kavdogo sposoba i dany rekomendacii po ih ispolx-
  zowani`. dalee sleduet opisanie struktury podprogrammy obrabotki pre-
  rywaniq, kak odnogo iz sposobow programmirowaniq wwoda/wywoda, i pod-
  robnoe ob'qsnenie ee organizacii i napisaniq.



       1.1. programmiruemyj wwod/wywod



       odnim iz sposobow obmena dannymi mevdu  pamqtx`  i  periferijnym
  ustrojstwom qwlqetsq ispolxzowanie programmiruemogo  wwoda/wywoda.  w
  sootwetstwii s |tim sposobom, programma polxzowatelq funkcioniruet  w
  uslowiqh zapre}eniq prerywanij ot ustrojstwa i ispolxzuet bit  gotow-
  nosti w registre sostoqniq sootwetstwu`}ego ustrojstwa.  pri  nali~ii
  gotownosti osu}estwlqetsq pereda~a dannyh, posle ~ego programma pere-
  hodit w revim ovidaniq sledu`}ego sostoqniq gotownosti ili  wypolnqet
  drugie dejstwiq, periodi~eski opra{iwaq bit gotownosti. programmirue-
  myj wwod/wywod zawisit ot  konkretnogo  ustrojstwa  i  ne  ispolxzuet
  swojstwa  operacionnoj   sistemy,   prednazna~ennye   dlq   processow
  wwoda/wywoda. krome togo, on zanimaet sistemnye resursy do zawer{eniq
  wwoda/wywoda.

       odnako,  nesmotrq  na  |to,  programmiruemyj  wwod/wywod  inogda
  qwlqetsq naibolee priemlemym sposobom. naprimer, rezidentnyj  monitor
  ispolxzuet programmiruemyj wwod/wywod dlq pe~ati swoego soob}eniq  ob
  o{ibke "?MON-F-SYSTEM HALT". sna~ala  on  wypolnqet  operaci`  RESET,
  ~toby ostanowitx process wwoda/wywoda. zatem vdet wozmovnosti  wywoda
  na terminal soob}eniq ob o{ibke (posimwolxno). w  podobnoj  situacii,
  kogda movet bytx zapor~en sam monitor, nikakoe zadanie  ili  pereda~a
  dannyh ne movet wypolnqtxsq, krome togo movet bytx zapor~ena podprog-
  ramma monitora .PRINT, i ona ne smovet wypolnitxsq. ishodq iz  |togo,
  w opisannoj situacii programmiruemyj wwod/wywod qwlqetsq lu~{im  spo-
  sobom, ispolxzu`}imsq dlq pe~ati soob}eniq ob o{ibke.

       w prikladnoj programme polxzowatelx movet ispolxzowatx  program-
  miruemyj wwod/wywod dlq ustrojstwa, kotoroe dolvno  bytx  momentalxno
  obsluveno. nive priweden fragment RMON, demonstriru`}ij programmirue-
  myj wwod/wywod:

   ; w R1 sodervitsq adres teksta soob}eniq.
   ; TTPS qwlqetsq slowom, soderva}im
   ; adres registra sostoqniq terminala.
   ; ego bit gotownosti qwlqetsq star{im bitom
   ; mlad{ego bajta registra sostoqniq.
   ; TTPB - slowo, soderva}ee
   ; adres bufera terminala.
   ; peresylka simwola w bufer pe~ati
   ; sbrasywaet w "0"
   ; bit gotownosti w registre sostoqniq.
   ;

                                 - 8 -




   5$:    TSTB    @TTPS           ;ustrojstwo gotowo?
          BPL     5$              ;net, wernutxsq
          MOVB    (R1)+,@TTPB     ;da, wywod simwola
          BNE     5$              ;analiz na konec soob}eniq

       drajwer ustrojstwa dlq gibkih magnitnyh diskow  DX  obespe~iwaet
  drugoj primer  programmiruemogo  wwoda/wywoda.  drajwer  osu}estwlqet
  s~itywanie dannyh posektorno. ustrojstwo zawer{aet operaci`  s~itywa-
  niq, pome}aet perwyj bajt dannyh  w  bufernyj  registr  ustrojstwa  i
  wydaet signal prerywaniq. drajwer zapre}aet prerywaniq na wremq  s~i-
  tywaniq dannyh  iz  teku}ego  sektora  i  ispolxzuet  programmiruemyj
  wwod/wywod dlq posimwolxnoj pereda~i  dannyh  iz  bufernogo  registra
  ustrojstwa w pamqtx. po gotownosti s~itatx sledu`}ij sektor  (s~itany
  wse dannye iz teku}ego sektora) drajwer wnowx razre{aet prerywanie.

       sledu`}ij fragment iz drajwera DX demonstriruet  programmiruemyj
  wwod/wywod:

   ;       w registre R4 sodervitsq adres registra
   ;       sostoqniq ustrojstwa;
   ;       w R5 - adres bufernogo registra ustrojstwa;
   ;       w R2 - adres bufera dannyh w pamqti.
   ;
   TRBYT:  TSTB   @R4             ;ustrojstwo gotowo ?
           BPL    TRBYT           ;net
   EFBUF:  MOVB   @R5,(R2)+       ;da, pereda~a simwola
           DEC    @SP             ;umenx{itx s~et~ik simwolow
           BGT    TRBYT           ;prodolvitx pereda~u




       1.2. wwod/wywod po prerywani`



       hotq programmiruemyj wwod/wywod i polezen w nekotoryh situaciqh,
  wo mnogih slu~aqh lu~{im sposobom qwlqetsq organizaciq wwoda/wywoda s
  pomo}x` prerywanij. w sootwetstwii s |tim sposobom programma na~inaet
  wwod/wywod i prodolvaet obrabotku. kogda pereda~a  zawer{aetsq,  ust-
  rojstwo wydaet zapros na  prerywanie.  zatem  podprogramma  obrabotki
  prerywaniq opredelqet, w kakom sostoqnii nahoditsq pereda~a: zawer{e-
  na, nezawer{ena  ili  wstretilasx  o{ibka.  ona  wybiraet  podhodq}ee
  dejstwie (wozwra}aetsq k programme, wosstanawliwaet pereda~u ili pow-
  torqet pereda~u). preimu}estwa ispolxzowaniq wwoda/wywoda po prerywa-
  ni` w tom, ~to on pozwolqet wypolnqtx dwe ili bolee obrabotki  odnow-
  remenno, ne zahwatywaq w monopolxnoe polxzowanie sistemnye resursy.



       1.2.1. sistema prerywanij



       prerywanie wyzywaet prekra}enie raboty wypolnq`}ejsq programmy i
  zapusk podprogrammy obrabotki prerywaniq. sostoqnie  prioriteta  pro-
  cessora (PS) i s~et~ik instrukcij (PC) sohranq`tsq  w  steke  s  tem,
  ~toby obrabotka besprepqtstwenno mogla prodolvatxsq posle wozwra}eniq
  iz prerywaniq.

                                 - 9 -




       zatem processor zagruvaet nowoe sodervimoe w PS  i  PC  iz  dwuh
  predwaritelxno nazna~ennyh q~eek, nazwannyh wektorom prerywaniq.  |ti
  slowa sodervat adres podprogrammy obrabotki prerywaniq  i  nowoe  PS,
  kotoroe ukazywaet urowenx prioriteta processora.  kogda  podprogramma
  obrabotki prerywaniq zawer{aetsq, ona wypolnqet instrukci` RTI, koto-
  raq wosstanawliwaet starye PS i PC iz steka,  i  wypolnenie  ishodnoj
  programmy prodolvaetsq s ranee sohranennogo adresa.



       1.2.2. prioritety processora i ustrojstwa



       nastuplenie prerywaniq zawisit ot urownej prioriteta  processora
  i ustrojstwa. na ris. 1 dana struktura prioritetow sistemy RT11. kav-
  doe ustrojstwo w sisteme imeet swoj  prioritet.  naiwys{ij  prioritet
  ime`t te ustrojstwa, kotorye dolvny obsluviwatxsq perwymi.  naprimer,
  magnitnaq lenta imeet prioritet 6; diski oby~no  ime`t  prioritet  5;
  terminaly i drugie simwolxno-orientirowannye ustrojstwa oby~no  ime`t
  prioritet 4. |ta  prioritetnaq  sistema  t}atelxno  raspredelqetsq  i
  ustanawliwaetsq posredstwom selektora prioriteta na kavdom interfejse
  ustrojstwa wwoda/wywoda. polxzowatelx  movet  kontrolirowatx  porqdok
  ustrojstw odnogo i togo ve  prioriteta.  w  |tom  slu~ae  ustrojstwo,
  kotoroe podkl`~eno fizi~eski blive k processoru na {ine, imeet  bolee
  wysokij prioritet i obsluviwaetsq perwym, nesmotrq na to, ~to  prery-
  waniq woznikli na neskolxkih ustrojstwah odnowremenno.

               struktura prioritetow w RT11

     prioritet processora          prioritet programmnogo
                                       obespe~eniq

      7 ------                    !    drajwery ustrojstw
      6 ------                    !             i
      5 ------                    !    podprogrammy obrabotki
      4 ------                    !        prerywaniq

     !---------- FORK ---------- urowenx wetwleniq
     !
     !                        /- operatiwnye podprogrammy
     !                       /   zawer{eniq
     !---------- FG --------<
     !                       \   operatiwnaq golownaq
     !                        \- programma
     !
     !                        /- fonowye podprogrammy
     !                       /   zawer{eniq
     !---------- BG---------<
     !                       \   fonowaq golownaq
     !                        \- programma
     !
   0 ------------net zadaniq---- holostoj cikl monitora

                          ris. 1

       processor funkcioniruet na l`bom iz  wosxmi  urownej  prioriteta
  (ot 0 do 7). kogda processor podkl`~en k urown` prioriteta 7, ni odno
  iz ustrojstw ne movet prerwatx ego  zaprosom  na  obsluviwanie.  esli

                                 - 10 -




  processor podkl`~en k bolee nizkomu prioritetu, to ego mogut prerwatx
  ustrojstwa s bolee wysokim prioritetom. polxzowatelx movet ustanowitx
  prioritet processora iz podprogrammy obrabotki prerywaniq putem izme-
  neniq slowa sostoqniq processora. w sisteme RT11 dlq |toj  celi  pre-
  dusmatriwa`tsq specialxnye sredstwa programmnogo obespe~eniq. po|tomu
  polxzowatel` ne trebuetsq samomu  neposredstwenno  izmenqtx  PS.  dlq
  |togo movno ispolxzowatx sistemnye makrokomandy .MTPS, .MFPS,  .INTEN
  i .FORK.

       sistema prerywanij  pozwolqet  neprerywno  srawniwatx  prioritet
  processora s prioritetom prerywa`}ih  ustrojstw  i  obsluviwatx  ust-
  rojstwa s bolee wysokim urownem prioriteta, ~em prioritet processora.
  prerywaniq mogut gnezdowatxsq, t.e. obrabotka odnogo prerywaniq movet
  bytx prekra}ena dlq togo, ~toby obsluvitx prerywanie ot ustrojstwa  s
  bolee wysokim prioritetom. obsluviwanie  ustrojstwa  s  bolee  nizkim
  prioritetom prodolvitsq posle  okon~aniq  obsluviwaniq  ustrojstwa  s
  bolee wysokim prioritetom.



       1.2.3. slowo sostoqniq processora (PS)



       slowo sostoqniq processora (PS)  zanimaet  samyj  star{ij  adres
  stranicy wwoda/wywoda. w slowe sostoqniq processora sodervitsq infor-
  maciq o teku}em urowne prioriteta i rezulxtatah  predydu}ih  operacij
  (kody uslowij), a takve razrqd sleveniq (T-bit), wyzywa`}ij  wnutren-
  nee prerywanie posle ispolneniq komandy (esli  pered  ee  wypolneniem
  |tot razrqd ustanowlen w hode otladki programmy).

       na ris. 2 pokazana struktura PS. bity s 5 po 7 opredelq`t  teku-
  }ij urowenx prioriteta processora. izmenqq |ti bity,  movno  izmenitx
  prioritet processora. movet bytx ustanowlen odin  iz  wosxmi  urownej
  prioriteta processora ot 0 do  7.  prioritet  opredelqet  wozmovnostx
  prerywaniq raboty processora po zaprosu ot wne{nego ustrojstwa.  nai-
  wys{ij prioritet 7 ozna~aet, ~to rabota processora prerwana  bytx  ne
  movet. prioritet processora ustanawliwaetsq ili izmenqetsq programmno
  (obsluviwaemoe ustrojstwo ne movet prerywatxsq). dlq izmeneniq  prio-
  riteta processora rekomenduetsq ispolxzowatx  sistemnye  makrokomandy
  .INTEN i .FORK.

                                 - 11 -




                  slowo sostoqniq processora (PS)

     15 14 13 12 11 10      8  7    5   4   3   2   1   0
    =======================================================
    !     !     !  !         !        ! T ! N ! Z ! V ! C !
    =======================================================
     !   ! !   !  V          !  !  !    V   !   !   !   !
     ----- -----  !          -------    !   -------------
       V     V    !             V       !         V
       !     !    !             !       !         !
       !     !    !             !       !         !    kody
       !     !    !             !       !         !--> uslowij
       !     !    !             !       !------------> bit T
       !     !    !             !
       !     !    !             !-----------------> prioritet
       !     !    !
       !     !    !------------------> nabor ob}ih registrow *
       !     !
       !     !----------------------------> predydu}ij revim *
       !
       !-------------------------------------> teku}ij revim *

     *  tolxko dlq RT11XM

                          ris. 2




       1.3. srawnenie   wnutrennih   podprogramm    obrabotki
            prerywanij i drajwerow ustrojstw



       kak programmiruemyj wwod/wywod, tak i wwod/wywod  po  prerywani`
  qwlq`tsq dopustimymi processami w sisteme RT11. esli  trebuetsq  swq-
  zatx s sistemoj nowoe ustrojstwo (kotoroe e}e ne podderviwaetsq  sis-
  temoj RT11), to neobhodimo:

         - libo napisatx drajwer dlq |togo ustrojstwa;

         - libo wnutrenn`` podprogrammu obrabotki prerywaniq.

  kak drajwery ustrojstw, tak i wnutrennie podprogrammy obrabotki  pre-
  rywaniq mogut imetx sekcii  programmiruemogo  wwoda/wywoda,  a  takve
  sekcii wwoda/wywoda po prerywani`.  oby~nym  interfejsom  RT11  mevdu
  monitorom i periferijnym  ustrojstwom  qwlqetsq  drajwer  ustrojstwa,
  kotoryj movet nahoditxsq w operatiwnoj pamqti tolxko w moment  obmena
  informaciej s ustrojstwom  wwoda/wywoda.  drajwer  ustrojstwa  oby~no
  wkl`~aet w sebq podprogrammu obrabotki prerywaniq.

       dlq togo, ~toby ispolxzowatx podprogrammu obrabotki  prerywaniq,
  neobhodimo pomestitx |tu podprogrammu w programmu polxzowatelq. prog-
  ramma polxzowatelq dolvna izmenqtx registry bufera  i  sostoqnie  dlq
  specialxnogo ustrojstwa. |to  ozna~aet,  ~to  podprogramma  obrabotki
  prerywaniq wsegda dolvna nahoditxsq w pamqti wmeste s prgrammoj polx-
  zowatelq.

       s drugoj storony, esli neobhodimo ispolxzowatx drajwer ustrojst-

                                 - 12 -




  wa, to podprogramma obrabotki prerywaniq nahoditsq w drajwere, a ne w
  programme polxzowatelq. iz golownoj programmy wyda`tsq sistemnye mak-
  rokomandy .READ i .WRITE, monitor i drajwer wmeste na~ina`t  pereda~u
  dannyh, obsluviwa`t prerywaniq  i  soob}a`t  programme  polxzowatelq,
  kogda wypolnilsq obmen. w RT11SJ ili w fonowom zadanii RT11FB drajwer
  dolven bytx rezidentnym, kogda programma polxzowatelq trebuet  wypol-
  neniq wwoda/wywoda. (t.e. drajwer dolven bytx rezidentnym kavdyj raz,
  kogda otkryt fajl ili kanal.) dlq operatiwnyh i sistemnyh  zadanij  w
  RT11FB(XM) neobhodimo zagruzitx drajwer, ispolxzuq  komandu  monitora
  LOAD, do wypolneniq programmy polxzowatelq, ~toby drajwer wsegda  byl
  rezidentnym.

       to, kakoj sposob bolee wsego  podhodit  dlq  nowogo  ustrojstwa,
  zawisit glawnym obrazom ot samogo ustrojstwa i  ot  prikladnyh  prog-
  ramm. w ob}em, neobhodimo ispolxzowatx wnutrenn`` podprogrammu  obra-
  botki prerywaniq dlq ustrojstw  dat~ikow  ili  ustrojstw  uprawleniq,
  naprimer, analogo-cifrowye preobrazowateli. blokozamenqemye ustrojst-
  wa, ustrojstwa bolx{oj pamqti fajlowoj  struktury  (naprimer,  diski,
  gibkie diski) racionalxno obsluviwatx  drajwerami.  apparaturu  swqzi
  movno obsluviwatx l`bym sposobom - re{enie zawisit ot  drugih  krite-
  riew.

       dwumq glawnymi preimu}estwami wnutrennih  podprogramm  obrabotki
  prerywaniq qwlq`tsq ih skorostx  i  ob'em  obrabatywaemoj  informacii
  uprawleniq. t.k. net  dopolnitelxnyh  zatrat  monitora,  swqzannyh  s
  pereda~ej dannyh, to wnutrennqq podprogramma ~asto movet obrabatywatx
  prerywaniq bystree, ~em drajwer ustrojstwa. esli skorostx  obsluviwa-
  niq prerywaniq qwlqetsq  osnownym  kriteriem,  to  neobhodimo  otdatx
  predpo~tenie napisani` wnutrennej podprogrammy obrabotki  prerywaniq,
  dave esli ustrojstwom qwlqetsq disk.

       wnutrennqq podprogramma imeet dostup ko wsem registram ustrojst-
  wa (kone~no, drajwer ustrojstwa imeet dostup ko wsem |tim ve  regist-
  ram, no programma, ispolxzu`}aq drajwer - net). ona movet  peredawatx
  bolx{oe koli~estwo informacii golownoj  programme.  |to  obespe~iwaet
  bolx{u` gibkostx sposoba, kakim golownaq programma wyzywaet  podprog-
  rammu obrabotki prerywaniq, i w ob'eme informacii,  kotoryj  podprog-
  ramma wozwra}aet golownoj programme.

       tri osnownyh preimu}estwa ispolxzowaniq drajwerow ustrojstw zak-
  l`~a`tsq w tom, ~to oni  obespe~iwa`t  nezawisimostx  ustrojstwa  dlq
  programm polxzowatelq, oni mogut razdelqtx wremq processora s drugimi
  processami, i oni prosty w ispolxzowanii.  drajwery  ustrojstw  ime`t
  standartnyj protokol dlq interfejsa s monitorom RT11,  imeetsq  takve
  standartnyj protokol dlq interfejsa mevdu monitorom i programmoj, tak
  ~to l`baq programma, kotoraq sootwetstwuet standartam monitora, movet
  ispolxzowatx |tot drajwer. on wkl`~aet prikladnye programmy,  sistem-
  nye standartnye programmy i qzykowye processory RT11, naprimer,  mak-
  roassembler, fortran sm i bejsik. itak, drajwer ustrojstwa predostaw-
  lqet nowoe ustrojstwo bolx{omu ~islu programm  bez  kakogo-libo  spe-
  cialxnogo izmeneniq (pomimo |togo, drajwer dlq  ustrojstwa  s  prqmym
  dostupom predostawlqet fajlowu` sistemu RT11 na ustrojstwe bez dopol-
  nitelxnyh zatrat). w protiwopolovnostx |tomu, wnutrennqq podprogramma
  obrabotki prerywaniq predostawlqet nowoe ustrojstwo odnoj  prikladnoj
  programme.

       drajwery ustrojstw udobny w ispolxzowanii. tak kak oni  qwlq`tsq
  standartnymi sredstwami RT11 obrabotki wwoda/wywoda, to  napisanie  i
  ispolxzowanie ih prostoe. |ta procedura upro}aetsq e}e i tem,  ~to  w

                                 - 13 -




  RT11 ime`tsq  makrokomandy  dlq  napisaniq  drajwera;  ime`tsq  takve
  komandy monitora, kotorye ustanawliwa`t drajwery w tablicy  ustrojstw
  monitora i zagruva`t ih w pamqtx. pomimo  |togo,  drajwer  ustrojstwa
  pozwolqet ispolxzowatx preimu}estwo sistemnyh zaprosow  monitora  dlq
  wypolneniq pereda~i  dannyh.  nakonec,  drajwer  ustrojstwa  qwlqetsq
  edinstwennym sposobom, kotorym movno swqzatx ustrojstwo s wirtualxnym
  zadaniem w RT11XM.

       ris. 3 ill`striruet nekotorye razli~iq mevdu  wnutrennimi  podp-
  rogrammami obrabotki prerywaniq i drajwerami ustrojstw.

       esli wyqsnqetsq, ~to nowoe ustrojstwo trebuet  wnutrenn``  podp-
  rogrammu obrabotki prerywaniq, to neobhodimo izu~itx  podrazdel  1.4.
  esli ve opredelitsq, ~to bolee podhodit drajwer ustrojstwa,  to  sle-
  duet izu~itx |tot i posledu`}ie razdely.

                                 - 14 -




           wnutrennie podpogrammy obrabotki prerywaniq
                     i drajwery ustrojstw

    ---------------------------------------------------------
    !                             ------------------------  !
    !                             !  specializirowannaq  !  !
    !                             ! prikladnaq programma !  !
    !                             ! - - - - - - - - - - -!  !
    !  --------------             !  wnutrennqq          !  !
    !  ! ustrojstwo !-------------!  podprogramma        !  !
    !  --------------             !  obrabotki           !  !
    !                             !  prerywaniq          !  !
    !                             ! - - - - - - - - - - -!  !
    !                             !                      !  !
    !                             !----------------------!  !
    !                                                       !
    !       wnutrennqq podprogramma obrabotki prerywaniq    !
    !                                                       !
    !-------------------------------------------------------!
    !                                !------!  ------------ !
    !                                !      !--!prikladnaq! !
    !                                !      !  !programma ! !
    !                !------------!  !      !  ------------ !
    !                !  drajwer   !  !      !               !
    ! ------------   ! ustrojstwa !  !      !  ------------ !
    ! !ustrojstwo!---! - - - - -  !--! RMON !--!sistemnaq ! !
    ! ------------   !podprogramma!  !      !  !programma ! !
    !                ! obrabotki  !  !      !  ------------ !
    !                ! prerywaniq !  !      !               !
    !                ! - - - - - -!  !      !  ------------ !
    !                !------------!  !      !--!fortran sm! !
    !                                !      !  ------------ !
    !                                !      !               !
    !                                !      !  ------------ !
    !                                !      !--!  bejsik  ! !
    !                                !      !  ------------ !
    !                                !      !               !
    !                                !      !  ------------ !
    !                                !      !--! makro-   ! !
    !                                !      !  ! assembler! !
    !                                !      !  ------------ !
    !                                !      !               !
    !                                !      !  ------------ !
    !                                !      !--!prikladnaq! !
    !                                !      !  !programma ! !
    !                                !------!  ------------ !
    !                                                       !
    !              drajwer ustrojstwa                       !
    ---------------------------------------------------------

                          ris. 3

                                 - 15 -




       1.4. rekomendacii po napisani` podprogrammy  obrabotki
            prerywaniq



       naibolee wavnoj ~astx` napisaniq wnutrennej  podprogrammy  obra-
  botki prerywaniq qwlqetsq t}atelxnoe planirowanie.  neobhodimo  wyde-
  litx sledu`}ie |tapy:
         - oznakomlenie s ustrojstwom;
         - izu~enie struktury podprogrammy, obsluviwa`}ej prerywanie;
         - izu~enie shemy podprogrammy obrabotki prerywaniq;
         - trebowaniq k podprogramme;
         - podgotowka shemy podprogrammy;
         - napisanie podprogrammy obrabotki;
         - prowerka i otladka podprogrammy.



       1.4.1. oznakomlenie s ustrojstwom



       dlq  prawilxnogo  napisaniq  podprogrammy  obrabotki  prerywaniq
  neobhodimo oznakomitxsq s nowym ustrojstwom. dlq |togo sleduet wnima-
  telxno izu~itx dokumentaci`  o  nem,  kotoraq  dolvna  sodervatx  ws`
  informaci` dlq programmirowaniq.

       neobhodimo razobratxsq, kak rabotaet ustrojstwo:  ~to  trebuetsq
  ot polxzowatelq, i kak ono obrabatywaet pereda~u dannyh.  ne  sleduet
  na~inatx pisatx podprogrammu, poka ne rassmotreny sledu`}ie woprosy.

       |ti woprosy otnosqtsq ne ko wsem tipam ustrojstw. otdelxnye wop-
  rosy kasa`tsq ustrojstw s bolx{oj pamqtx`, a nekotorye bolee podhodqt
  k ustrojstwam dat~ikow ili ustrojstwam swqzi. neobhodimo  rassmotretx
  kavdyj wopros, podhodit li on dlq dannogo ustrojstwa:

      1) ~to predstawlqet soboj wektor (ili wektory)
         prerywaniq ustrojstwa ?

         - opredelitx, kakim dolven bytx wektor prerywaniq. rassmotretx
           konflikty  s  su}estwu`}imi  ustrojstwami,  predostawlennymi
           RT11, i konflikty s  ustrojstwami,  podderviwaemymi  drugimi
           operacionnymi sistemami, esli oni ispolxzu`tsq. esli  wektor
           wybran, ubeditxsq, ~to ustrojstwo  podkl`~eno  prawilxno,  i
           ~to na {ine estx nuvnye adresa.  operacionnaq  sistema  RT11
           trebuet, ~toby wse wektory byli nive q~ejki 500, no  otdelx-
           nye q~ejki nivnej pamqti ne predostawlq`tsq dlq  ispolxzowa-
           niq kak wektory;

      2) ~to predstawlq`t soboj registry komand i sostoqnij ?

         - neobhodimo opredelitx, gde raspolaga`tsq |ti registry i  ~to
           ozna~a`t bity w kavdom iz nih;

      3) kakoj urowenx prioriteta ustrojstwa ?

      4) qwlqetsq li ustrojstwo DMA (prqmogo dostupa k
         pamqti) ili programmnym peredat~ikom (slowno-
         ili simwolxno-orientirowannym ustrojstwom) ?

                                 - 16 -




      5) kakie registry bufera dannyh ?

         - neobhodimo opredelitx, gde |ti registry raspolaga`tsq, i ~to
           ozna~a`t bity w kavdom iz nih;

      6) kakie kody dlq tipi~nyh operacij ?

         - izu~itx, kak zadawatx razli~nye operacii, manipuliruq bitami
           w registrah ustrojstwa. drajwery ustrojstw ime`t wozmovnostx
           wypolnqtx operacii ~teniq, zapisi, poiska;

      7) kogda ustrojstwo wystawlqet zapros na prerywanie ?

         - nekotorye ustrojstwa wystawlq`t  zapros  na  prerywanie  dlq
           kavdogo simwola;  drugie  qwlq`tsq  slowno-orientirowannymi,
           bloko-orientirowannymi ili s orientirowkoj na paket. nekoto-
           rye ustrojstwa wystawlq`t zapros na  prerywanie  dwavdy  dlq
           opredelennyh operacij, takih kak poisk ili  sbros  registrow
           ustrojstwa w na~alxnoe  sostoqnie.  esli  dannoe  ustrojstwo
           takoe, neobhodimo |to u~estx;

      8) ~to qwlqetsq bazowoj edinicej dlq pereda~i dannyh ?

         - kone~no, |to otnositsq k  predydu}emu  woprosu,  no  sleduet
           opredelitx, posylatx li zaprosy wwoda/wywoda  na  ustrojstwo
           kak bajty, slowa ili bloki. esli, naprimer, programma  polx-
           zowatelq imeet delo s termami  slow  i  ustrojstwo  qwlqetsq
           simwolxno-orientirowannym,  to  neobhodimo  w   podprogramme
           obrabotki preobrazowatx ~islo slow w ~islo bajtow;

      9) trebuetsq li ustrojstwu polovitelxnyj ili
         otricatelxnyj s~et bajtow ?

         - nekotorye ustrojstwa trebu`t otricatelxnogo s~eta  slow  ili
           bajtow. esli ustrojstwo qwlqetsq odnim iz nih, to, wozmovno,
           neobhodimo sdelatx otricatelxnym s~et w  podprogramme  obra-
           botki;

     10) kakaq struktura ustrojstwa ?

         - esli ustrojstwom qwlqetsq disk, to  neobhodimo  uznatx,  kak
           postroeny cilindry, dorovki i sektory. opredelitx ih razmer,
           uznatx, trebuet li ustrojstwo ~eredowaniq i,  esli  tak,  to
           uznatx, kak optimizirowatx skorostx.  ~eredowanie  opisywaet
           process zapisi dannyh  na  wra}a`}eesq  ustrojstwo,  kotoryj
           trebuet wme{atelxstwa programmy mevdu sektorami.  disk  pos-
           toqnno dwivetsq; dannye zapisywa`tsq w odin sektor, program-
           ma wme{iwaetsq pri prohovdenii smevnogo sektora, zatem zapi-
           sywa`tsq ostalxnye dannye w sledu`}ij podhodq}ij sektor;

     11) kak organizowana buferizaciq ?

         - nekotorye ustrojstwa pereda`t dannye programme  polxzowatelq
           kavdyj raz po odnomu simwolu. drugie buferiru`t dannye wnut-
           renne w SILO ili posyla`t ih w paketah.  neobhodimo  ustano-
           witx, kak buferizirowatx dannye  w  programme  i  proweritx,
           ~toby oblastx bufera, kotoraq otwoditsq, byla dostato~noj;

                                 - 17 -




     12) kak wy~islqetsq adres dannyh na ustrojstwe ?

         - |to otnositsq k  strukture  ustrojstwa.  neobhodimo  izu~itx
           ustrojstwo i opredelitx, kak najti na nem trebuemye  dannye.
           obratitx wnimanie, ~to nomera  blokow  sistemy  RT11  dolvny
           bytx preobrazowany w adresa na ustrojstwe. sleduet  imetx  w
           widu ~to, nekotorye processory ne ime`t instrukcij umnoveniq
           ili deleniq;

     13) kakie "|konomi~eskie" operacii trebuet ustrojstwo ?

         - nekotorye  ustrojstwa  pered  powtoreniem   trebu`t   sbrosa
           registrow ustrojstwa w na~alxnoe sostoqnie. drugie  trebu`t,
           ~toby do wypolneniq operacij na ustrojstwe operacionnaq sis-
           tema podderviwala konkretnoe ~islo mehanizmow  (diskowodow).
           naprimer, neobhodimo wypolnitx sbros registrow  posle  neza-
           wer{ennogo poiska ili o{ibki pereda~i;

     14) kak dolvny obrabatywatxsq o{ibki i uslowiq
         iskl`~eniq ?

         - sna~ala neobhodimo re{itx, kakie o{ibki qwlq`tsq  grubymi  i
           prerwut pereda~u, i kakie o{ibki qwlq`tsq negrubymi  i  tre-
           bu`t powtoreniq  pereda~i.  nekotorymi  tipi~nymi  negrubymi
           o{ibkami qwlq`tsq o{ibki kontrolxnoj summy, o{ibki wremennyh
           zadervek i o{ibki sinhronizacii. sleduet re{itx, skolxko raz
           neobhodimo powtorqtx pereda~u  dlq  negrubyh  o{ibok  i  kak
           obrabatywatx uslowie gruboj o{ibki;

     15) kakie obstoqtelxstwa annulirowaniq ?

         - rassmotretx, qwlqetsq li ustrojstwo otnositelxno bystrym ili
           medlennym. pomnitx, ~to ne sleduet sbrasywatx registry kont-
           rollera, esli tolxko odin iz nositelej dwuhnositelxnogo ust-
           rojstwa trebuet prekra}}eniq operacii,  tak  kak  |to  movet
           me{atx operacii wtorogo  |lementa.  podobnye  obstoqtelxstwa
           mogut primenqtxsq k dwuhwhodowym nositelqm.



       1.4.2. trebowaniq k podprogramme obrabotki



       w sledu`}ih podrazdelah opisana struktura podprogrammy obrabotki
  prerywaniq i sodervitsq plan operatiwnogo zadaniq s wnutrennej  podp-
  rogrammoj obrabotki prerywaniq.  sleduet  pomnitx,  ~to  podprogramma
  obrabotki prerywaniq qwlqetsq ~astx` programmy polxzowatelq i re{itx,
  gde pomestitx ee w  programme.  esli  trebuetsq  wypolnqtx  programmu
  polxzowatelq pod uprawleniem RT11XM, to neobhodimo izu~itx  podrazdel
  1.7.

       mnogie opytnye programmisty gotowqt blok-shemy posle  togo,  kak
  wse ih programmy napisany, ili oni opuska`t ih sowsem.  odnako,  sos-
  tawlenie blok-shemy sistemy so slovnym obsluviwaniem prerywaniq movet
  pomo~x sostawitx  wnutrenn``  podprogrammu  prerywanij  i  obnaruvitx
  o{ibki w logike. w slu~ae, kogda dwa  ili  bolee  processow  pyta`tsq
  izmenitx odnu i tu ve strukturu dannyh w  odno  i  to  ve  wremq,  to
  struktura dannyh razru{aetsq i dostowernostx  rezulxtatow  nepredska-

                                 - 18 -




  zuema. (naprimer, prerywanie ustrojstwa  proizo{lo  wo  wremq  raboty
  podprogrammy obrabotki prerywaniq iz-za neprawilxnogo prioriteta pro-
  cessora.) posle razrabotki programmy polxzowatelq, nuvno  wnimatelxno
  proweritx kavdyj {ag, pomnq, ~to movet  slu~itxsq  pri  wozniknowenii
  prerywaniq w kavdoj instrukcii. takoe planirowanie  pomovet  izbevatx
  wozniknoweniq o{ibo~nyh situacij.

       dlq prowerki podprogrammy obrabotki prerywaniq neobhodimo  popy-
  tatxsq wypolnitx ee. esli podprogramma napisana werno, to  ona  budet
  prawilxno zapisywatx i s~itywatx dannye, obrabatywatx uslowiq o{ibok.
  esli pri wypolnenii podprogrammy s podgotowlennymi dannymi  wozniknut
  o{ibki, to sleduet skomponowatx ee s ODT (ne VDT) i popytatxsq wypol-
  nitx {ag za {agom, isprawitx o{ibki w podprogramme, powtorno  assemb-
  lirowatx i snowa wypolnitx.



       1.5. struktura podprogrammy obrabotki prerywaniq



       w |tom podrazdele daetsq ob}aq struktura wnutrennej podprogrammy
  obrabotki prerywaniq.



       1.5.1. za{ita wektorow. makrokomanda .PROTECT



       w sistemah pod uprawleniem RT11FB ili RT11XM, gde  movet  wypol-
  nqtxsq bolee ~em odno zadanie, neobhodimo  ispolxzowatx  makrokomandu
  .PROTECT dlq za}ity wektora prerywaniq do  togo,  kak  w  nego  budet
  zaneseno zna~enie. |tot process garantiruet, ~to wektor uve  ne  pri-
  nadlevit monitoru ili inomu zadani`. on priswaiwaet wektor zadani`  i
  za}i}aet ego ot wme{atelxstwa drugogo zadaniq ili monitora,  ustanaw-
  liwaq bity za}ity nivnej pamqti w monitore. zadanie dolvno prerwatxsq
  nemedlenno, esli makrokomanda .PROTECT  ne  srabatywaet;  zadanie  ne
  budet imetx dostupa k wektoru, t.k. on uve ispolxzuetsq.

       w sisteme pod uprawleniem RT11SJ makrokomanda .PROTECT ne  imeet
  sysla. ona w |tom slu~ae ne wypolnqet nikakogo dejstwiq, no velatelx-
  no ee ispolxzowatx, t.k. ee primenenie pozwolit uprostitx  preobrazo-
  wanie, esli podprogramma predusmatriwaet wypolnenie  pod  uprawleniem
  RT11FB.



       1.5.2. ustanowka wektora prerywaniq



       programma polxzowatelq dolvna pome}atx adres podprogrammy  obra-
  botki prerywaniq w perwoe slowo, a urowenx prioriteta 7 -  wo  wtoroe
  slowo wektora prerywaniq. nive priweden primer, pokazywa`}ij tipi~nyj
  sposob ustanowki dwuhslownogo wektora prerywaniq.  sleduet  zametitx,
  ~to programma ne dolvna ustanawliwatx wektor do teh por, poka  on  ne
  budet za}i}en. dlq |togo primera predpolagaetsq, ~to imenem ustrojst-
  wa qwlqetsq XX i wektor prerywaniq nahoditsq w 220 i 222.

                                 - 19 -




          XXVEC = 220             ;opredelenie wektora
          PR7   = 340             ;prioritet 7 = 340
   ;
   ; ISREP - to~ka whoda podprogrammy obrabotki prerywaniq
   ;
          .PROTECT #AREA,#XXVEC   ;za}ita wektora
          BCS     NOVEC           ;wektor ispolxzuetsq
          MOV     #ISREP,@#XXVEC  ;ustanowitx perwoe slowo
          MOV     #PR7,@#XXVEC+2  ;ustanowitx wtoroe slowo



       1.5.3. makrokomanda .DEVICE



       makrokomanda .DEVICE ispolxzuetsq tolxko pod uprawleniem  RT11FB
  i RT11XM. ee nazna~enie - otkl`~atx ustrojstwo, o~i}aq bit razre{eniq
  prerywaniq, esli zawer{aetsq programma ili wwoditsq <CTRL/C>.

       w sisteme  pod  uprawleniem  RT11SJ  ispolxzowanie  makrokomandy
  .DEVICE ne imeet smysla, no ee wse ve rekomenduetsq wkl`~itx w  prog-
  rammu (|to w dalxnej{em uprostit preobrazowanie, esli programma budet
  wypolnqtxsq pod uprawleniem RT11FB).

       esli programma, wypolnq`}aqsq pod uprawleniem RT11SJ, zawer{aet-
  sq, to monitor ovidaet okon~aniq  wsego  wwoda/wywoda,  esli  imeetsq
  newypolnennyj aktiwnyj |lement o~eredi.  w  RT11FB,  kogda  programma
  zawer{aetsq, to monitor ne tolxko ovidaet wypolneniq  wseh  |lementow
  o~eredi no pomimo |togo, on peredaet uprawlenie drajweru ustrojstwa w
  to~ke annulirowaniq zaprosa. esli zadanie prerywaetsq po <CTRL/C> ili
  esli ono wydaet makrokomandu .HRESET, to RT11SJ wypolnqet sbros  wseh
  registrow ustrojstw, dlq prekra}eniq wwoda/wywoda na  wseh  ustrojst-
  wah. pri razrabotke programnogo obespe~eniq  dlq  dannogo  ustrojstwa
  nuvno proweritx, ostanawliwaetsq li ono po o~istke pri polu~enii sig-
  nala inicializacii {iny.



       1.5.4. makrokomanda .INTEN



       pri wozniknowenii prerywaniq uprawlenie perehodit w to~ku  whoda
  podprogrammy obrabotki prerywaniq, adres kotoroj ukazan w perwom slo-
  we wektora prerywaniq. w |toj to~ke prioritet processora rawen  7,  i
  wse drugie prerywaniq zapre}eny. esli neobhodimo  wypolnitx  ~to-libo
  pri wseh zapre}ennyh prerywaniqh, to |to dolvno  bytx  sdelano  prog-
  rammno. ona dolvna bytx kak movno bolee korotkoj i |ffektiwnoj  i  ne
  dolvna razru{atx sodervimoe registrow. esli  podprogramme  neobhodimo
  ispolxzowatx registry, to ona dolvna hranitx i wosstanawliwatx ih  do
  wyzowa makrokomandy .INTEN. esli polprogramma, wypolnqemaq na  urowne
  prioriteta 7 sli{kom dlinna, to budet  naru{ena  reakciq  sistemy  na
  prerywaniq. rekomenduetsq, ~toby wremq  wypolneniq  ne  prewy{alo  50
  mikrosekund na urowne prioriteta 7.

       horo{im podhodom qwlqetsq snivenie prioriteta  processora  posle
  prerywaniq do prioriteta ustrojstwa. |to pozwolit ustrojstwam s bolee
  wysokim prioritetom prerywatx rabota`}u` podprogrammu obrabotki  pre-

                                 - 20 -




  rywaniq |togo ustrojstwa. dlq sniveniq urownq prioriteta ispolxzuetsq
  makrokomanda .INTEN. ukazatelx steka i ob}ie  registry  s  R0  po  R5
  dolvny sodervatx takie ve zna~eniq pri  wyda~e  .INTEN  podprogrammoj
  obrabotki prerywaniq, kak i w to~ke whoda w prerywanie. esli podprog-
  ramma obrabotki prerywaniq ne napisana w pozicionno-nezawisimom  kode
  (PIC), to ispolxzuetsq sledu`}ij format:

          .INTEN PRIO

       makrokomanda generiruet sledu`}ij kod:

          JSR     R5,@54
          .WORD   ^C<PRIO*40>&340

       esli podprogramma obrabotki prerywaniq pi{etsq w PIC, to  makro-
  komanda .INTEN ispolxzuetsq so wtorym argumentom - PIC.

          .INTEN PRIO,PIC

       wtoroj format generiruet pozicionno-nezawisimyj kod:

          MOV     @#54,-(SP)
          JSR     R5,@(SP)+
          .WORD   ^C<PRIO*40>&340

       oba formata wyzywa`t  perehod  k  podprogramme  monitora  INTEN,
  kotoraq snivaet prioritet processora i dlq RT11FB i  RT11XM  perekl`-
  ~aet wypolnenie w sostoqnie "sistema". zatem monitor  snowa  wyzywaet
  podprogrammu obrabotki prerywaniq, kak soprogrammu. R4 i  R5  predos-
  tawlq`tsq dlq ispolxzowaniq posle wozwrata iz makrokomandy. esli pot-
  rebu`tsq R0-R3, to sleduet sohranitx ih i wosstanowitx pered  wyhodom
  iz |toj makrokomandy. esli neobhodimo sohranqtx zna~eniq na  protqve-
  nii raboty makrokomandy .INTEN, to neobhodimo hranitx ih w pamqti  do
  wyzowa makrokomandy i wosstanowitx ih posle  ee  wypolneniq.  podobno
  |tomu, esli sodervimoe PS wavno (naprimer, zna~eniq  bitow  uslowij),
  to neobhodimo sohranitx ego do wyda~i .INTEN. poskolxku  makrokomanda
  .INTEN wyzywaet perekl`~enie k sistemnomu steku w RT11FB i RT11XM, to
  sleduet izbegatx ispolxzowaniq steka, a sohranqtx  i  wosstanawliwatx
  registry i PS pri neobhodimosti, ispolxzuq q~ejki pamqti wmesto  ste-
  ka.


       pRIME^ANIE. hranenie zna~enij  w  q~ejkah  pamqti  ne  pozwolqet
  podprogramme obrabotki prerywaniq bytx reenterabelxnoj  (powtornowho-
  dimoj). esli predpolagaetsq ispolxzowatx |tu podprogrammu dlq  mnogih
  ustrojstw, sleduet bytx wnimatelxnym  otnositelxno  reenterabelxnosti
  pri ee razrabotke.



       1.5.5. ispolxzowanie makrokomandy .SYNCH



       makrokomanda .SYNCH ispolxzuetsq  glawnym  obrazom  w  RT11FB  i
  RT11XM. ee nazna~enie - garantirowatx, ~to teku}ee zadanie  rabotaet,
  kogda podprogramma obrabotki prerywaniq wypolnqet sistemnu`  makroko-
  mandu. ispolxzowanie makrokomandy .SYNCH w RT11SJ  ne  imeet  smysla,
  odnako ee neobhodimo ispolxzowatx w l`bom slu~ae  (|to  w  dalxnej{em

                                 - 21 -




  uprostit preobrazowanie, esli  predpolagaetsq  rabota  programmy  pod
  uprawleniem RT11FB).

       esli neobhodimo wydatx odnu ili bolee sistemnyh  makrokomand  iz
  podprogrammy obrabotki prerywaniq, nuvno sna~ala wyzwatx makrokomandu
  .SYNCH. sleduet pomnitx, ~to makrokomanda .INTEN perekl`~aet wypolne-
  nie w sostoqnie "sistema", a sistemnye makrokomandy mogut bytx wypol-
  neny tolxko w sostoqnii "polxzowatelx". makrokomanda .SYNCH wypolnqet
  obratnoe perekl`~enie w sostoqnie "polxzowatelx". nikogda ne  sleduet
  wydawatx sistemnye makrokomandy, trebu`}ie USR, iz podprogrammy obra-
  botki prerywaniq dave posle ispolxzowaniq .SYNCH. movno takve  wydatx
  .SYNCH posle  makrokomandy  .FORK.  pri  wyzowe  makrokomandy  .SYNCH
  registry s R0 po R3 i ukazatelx steka dolvny sodervatx takie ve  zna-
  ~eniq, ~to i pri wozwra}enii iz makrokomandy .INTEN.

       tabl. 1 ill`striruet format bloka sinhronizacii, kotoryj  dejst-
  wuet kak |lement o~eredi. informaciq iz sedxmogo slowa bloka  sinhro-
  nizacii pome}aetsq w na~alo o~eredi zawer{eniq sootwetswu`}ego  zada-
  niq. wot po~emu instrukcii, sledu`}ie za makrokomandoj .SYNCH, wypol-
  nq`tsq kak podprogramma zawer{eniq w sostoqnii polxzowatelq pri urow-
  ne prioriteta 0. iz-za |togo programma polxzowatelq dolvna libo  blo-
  kirowatx prerywaniq pered makrokomandoj .SYNCH, libo dolvna  podgoto-
  witxsq k obrabotke sledu`}ego prerywaniq do  wypolneniq  makrokomandy
  .SYNCH. blok sinhronizacii predostawlqetsq dlq powtornogo ispolxzowa-
  niq, kogda Q.COMP (sme}enie 14 wosxmeri~nOE)  rawna  0.  movno  legko
  proweritx blok sinhronizacii, wyzwaw  e}e  raz  makrokomandu  .SYNCH.
  esli uprawlenie peredaetsq k obrabotke o{ibki  (slowo,  sledu`}ee  za
  .SYNCH), to blok wse e}e ispolxzuetsq.

                                                    tABLICA 1
                       blok sinhronizacii
   -----------------------------------------------------------
     sme}enie  !  imq   !  agent     !     sodervimoe
   -----------------------------------------------------------
        0      ! Q.LINK !     -      !  zarezerwirowano
        2      ! Q.CSW  !polxzowatelx!  nomer zadaniq
        4      ! Q.BLKN !     -      !  zarezerwirowano
        6      ! Q.FUNC !     -      !  zarezerwirowano
       10      ! Q.BUFF !polxzowatelx!  argument R0 dlq
               !        !            !  pereda~i
       12      ! Q.WCNT ! monitor    !  -1
       14      ! Q.COMP !polxzowatelx!  posle assemblirowaniq
               !        !            !  - zna~enie 0; zatem
               !        !            !  monitor obsluviwaet
               !        !            !  sodervimoe |togo slowa

       w ob}em, mevdu wyzowom makrokomandy  .SYNCH  i  wozwratom  movet
  bytx bolx{oj interwal wremeni. wo-perwyh,  perekl`~enie  w  sostoqnie
  "polxzowatelx" trebuet wremeni. zatem, wozmovno, fonowoj podprogramme
  zawer{eniq pridetsq ovidatx, poka operatiwnoe  zadanie,  swqzannoe  s
  wy~isleniem, ne zablokiruetsq. itak, movet projti zna~itelxnoe wremq,
  poka instrukciq, sledu`}aq za .SYNCH, dejstwitelxno wypolnitsq.

       w ~asti programmy, sledu`}ej za makrokomandoj  .SYNCH,  registry
  R0 i R1 swobodny dlq ispolxzowaniq kak w l`boj podprogramme  zawer{e-
  niq. registry s R2 po R5, esli oni  ispolxzu`tsq,  neobhodimo  sohra-
  nitx, |to sozdaet problemu dlq R4 i R5,  kotorye  ne  sohranq`tsq  wo
  wremq wypolneniq .SYNCH. esli ih sodervimoe wavno, to sleduet  sohra-
  nitx ih w pamqti do wyzowa makrokomandy  .SYNCH.  movno  ispolxzowatx

                                 - 22 -




  Q.BUFF w bloke sinhronizacii dlq pereda~i zna~eniq w R0 dlq  podprog-
  rammy sinhronizacii.

       makrokomanda .SYNCH imeet neoby~nyj sposob  wozwrata  uprawleniq
  po o{ibke. perwoe slowo posle .SYNCH  qwlqetsq  adresom  wozwrata  po
  o{ibke; wtoroe slowo - pri uspe{nom zawer{enii.

       w  RT11SJ  podprogrammy,  sledu`}ie  za  wyzowami   makrokomandy
  .SYNCH, gnezdu`tsq, to estx mogut prerywatx drug druga. oni  uporqdo-
  ~eny w RT11FB i RT11XM. w RT11SJ mehanizm makrokomandy .SYNCH modeli-
  ruet shemu RT11FB i RT11XM, no ne dubliruet ee.



       1.5.6. wypolnenie  na  urowne  wetwleniq.   makrokomanda
              .FORK



       makrokomanda .FORK predostawlqet drugoj sposob sniveniq  priori-
  teta processora. pri wyda~e ee blok wetwleniq dobawlqetsq  k  o~eredi
  wetwleniq, kotoraq qwlqetsq spiskom, princip dejstwiq kotorogo:  per-
  wyj pri{el, perwyj obsluvilsq. podprogrammy wetwleniq  (wse  instruk-
  cii, sledu`}ie za makrokomandoj .FORK) wypolnq`tsq w sostoqnii  "sis-
  temy" pri urowne prioriteta 0 posle togo, kak obsluveny wse  prerywa-
  niq, no do togo, kak monitor perekl`~itsq w  sostoqnie  polxzowatelq.
  perekl`~enie kontekstow zapre}aetsq takve wo wremq raboty podprogramm
  wetwleniq (sm. ris. 1).

       registry R4 i R5 sohranq`tsq wo wremq wyzowa makrokomandy .FORK.
  pomimo |togo, R0 i R3 swobodny dlq  ispolxzowaniq  posle  ee  wyzowa.
  podobno .SYNCH, makrokomanda .FORK predpolagaet, ~to registry s R0 po
  R3 i stek neizmenny, poskolxku makrokomanda .INTEN wypolnilasx.  sle-
  duet otmetitx, ~to wydatx .FORK bez pred{estwu`}ego  wyzowa  makroko-
  mandy .INTEN nelxzq.

       neobhodimo predostawitx ~etyrehslownyj blok pamqti dlq  |lementa
  o~eredi wetwleniq, tri poslednih slowa kotorogo budut  sodervatx  R4,
  R5 i PC. perwoe slowo qwlqetsq slowom swqzi, kotoroe dolvno bytx raw-
  no nul` pri wyda~e makrokomandy .FORK. poskolxku  podprogramma  .FORK
  ne dolvna bytx reenterabelxnoj, sleduet zapretitx prerywaniq na wremq
  mevdu momentom wyda~i makrokomandy .FORK  i  wremenem,  kogda  na~net
  wypolnqtxsq podprogramma .FORK (instrukcii, sledu`}ie za  makrokoman-
  doj).

       nelxzq powtorno ispolxzowatx blok wetwleniq  do  teh  por,  poka
  rabotaet podprogramma wetwleniq. predpolagaetsq, ~to  blok  wetwleniq
  qwlqetsq swobodnym, kogda makrokomanda, ispolxzu`}aq ego,  wypolnqet-
  sq. ill`straciq bloka wetwleniq prewedena w tabl. 2.

                                                   tABLICA 2
                         blok FORK
   ----------------------------------------------------------
    sme}enie  !  imq   !   agent   !    sodervimoe
   ----------------------------------------------------------
        0     ! F.BLNK !  monitor  !  slowo swqzi
        2     ! F.BADR !  monitor  !  adres podprogrammy FORK
        4     ! F.BR5  !  monitor  !  oblastx hraneniq R5
        6     ! F.BR4  !  monitor  !  oblastx hraneniq R4

                                 - 23 -




       oby~no makrokomanda .FORK ispolxzuetsq  w  drajwerah  ustrojstw.
  dlq togo, ~toby ispolxzowatx ee w podprogramme obrabotki  prerywaniq,
  neobhodimo sna~ala ustanowitx metku $FKPTR.  rekomenduetsq  sledu`}aq
  posledowatelxnostx wypolneniq golownoj programmy:

          MOV     @#54,R4
          ADD     402(R4),R4
          MOV     R4,$FKPTR
          .
          .
          .
   $FKPTR:.WORD   0
   hhFBLK:.WORD   0,0,0,0

       zatem w podprogramme  obrabotki  prerywaniq  movno  ispolxzowatx
  oby~nyj format makrokomandy .FORK:

          .FORK   XXFBLK

       makrokomanda .FORK generiruet sledu`}ij kod:

          JSR     R5,@$FKPTR
          .WORD   XXFBLK-.

       RT11SJ ne podderviwaet makrokomandu .FORK,  esli  pri  generacii
  sistemy ne budet wkl`~eno obsluviwanie tajmera. wmesto |togo  monitor
  modeliruet process, sohranqq registry R0 i R3 do wyzowa  podprogrammy
  obrabotki prerywaniq. sleduet zapomnitx, ~to w podprogramme obrabotki
  prerywaniq net swobodnyh registrow dlq  ispolxzowaniq  pered  wyzowom
  makrokomandy .INTEN. posle .INTEN movno swobodno  ispolxzowatx  R4  i
  R5.

       primenenie makrokomandy .FORK polezno w uslowiqh realxnogo  wre-
  meni, t.k. ona pozwolqet otkladywatx dlitelxnu`, no ne kriti~esku` po
  wremeni obrabotku prerywaniq do teh por, poka ne budut obrabotany wse
  drugie prerywaniq.

       naprimer, drajwer ustrojstwa wwoda s perfokart wnutrenne buferi-
  ziruet 80 stolbcow dannyh. on polu~aet odno  prerywanie  na  stolbec,
  transliruet i peresylaet simwol wo wnutrennij bufer na urowne  prery-
  waniq. zatem peresylaet wnutrennij bufer w bufer  polxzowatelq  (pro-
  cess, kotoryj movet zanqtx do 2,5 ms). w sisteme fobos  |tot  process
  proishodil pri urowne prioriteta 6,  ozna~a`}em,  ~to  prerywaniq  na
  |tom urowne i nive mogli bytx poterqny w |to wremq.

       makrokomanda .FORK razre{aet |ti problemy. ona wozwra}aet upraw-
  lenie pri urowne prioriteta 0, no tolxko, kogda wse drugie prerywaniq
  obsluveny, i do togo, kak uprawlenie wozwratitsq k  prerwannoj  prog-
  ramme polxzowatelq.



       1.5.7. kratkie swedeniq o makrokomandah .INTEN, .FORK  i
              .SYNCH



       w tabl. 3 kratko izloveny swedeniq ob ispolxzowanii  makrokomand
  .INTEN, .FORK i .SYNCH.

                                 - 24 -




                                                   tABLICA 3
         makrokomandy podprogramm obrabotki prerywanij
   ----------------------------------------------------------
       imq      !  nowyj  !  nowyj ! registry,   ! dannye,
    makrokomandy!prioritet!  stek  ! swobodnye   !sohranq`}i-
                !         !        !dlq ispolxzo-!esq w te~e-
                !         !        !waniq posle  !nie wyzowa
                !         !        !makrokomandy !    w
   ----------------------------------------------------------
      .INTEN    !         !sistema !  R4,R5      !   net
      .FORK     !    0    !sistema !  R0-R5      !  R4,R5
      .SYNCH    !    0    !polxzo- !             !
                !         !watelx  !  R0,R1      !    R0

       na ris. 4 priwoditsq sostoqnie registrow dlq kavdoj  makrokoman-
  dy.

                sostoqnie registrow dlq makrokomand
                      .INTEN, .FORK, .SYNCH
                w podprogrammah obrabotki prerywanij

    operaciq        R0    R1    R2    R3    R4    R5
   ----------     ------------------------------------------
       !      I----------neizwestnoe sodervimoe----------I
       !            !     !     !     !     !      !
       V            !     !     !     !     !      !
   prerywanie-------!-----!-----!-----!-----!------!-----
       !            V     V     V     V     V      V
       !      I-----------sohranitx/wosstanowitx---------I
       !            !     !   (esli neobhodimo)    !
       V            !     !     !     !     !      !
   .INTEN    -------!-----!-----!-----!-----V------V-----
       !            !     !     !     ! I--swobodno dlq--I
       !            !     !     !     !    ispolxzowaniq
       !            V     V     V     V     !       !
       !      I--sohranitx/wosstanowitx--I  !<------!<-------
       V            !     !     !     !     !       !       !
   .FORK    --------V-----V-----V-----V-----!-------!-----  !
       !                                    V       V       !
       !      I--------swobodno dlq ispolxzowaniq--------I  !
       !            !     !     !     !     !       !       !
       !            !     !     !     !     !       !       !
   .SYNCH     /->---V-----V-----V-----V-----V-------V-----  !
       !     /                                              !
       !     !I---swobodno--I I--sohranitx/wosstanowitx--I  !
       V     !      !     !     !     !     !       !       !
             !      !     !     !     !     !       !       !
         zagruzitx  V     V     V     V     V       V       !
         dannymi                                            !
         polxzowatelq                              !------->!
                                                 sodervimoe
                                                 dannyh
                                                 polxzowatelq

                          ris. 4

                                 - 25 -




       1.5.8. wyhod iz prerywaniq



       makrokomanda .INTEN  zastawlqet  monitor  wyzywatx  podprogrammu
  obrabotki prerywaniq kak soprogrammu. w konce ee  ispolxzuetsq  inst-
  rukciq RTS PC. |to wozwra}aet uprawlenie monitoru, kotoryj wosstanaw-
  liwaet R4 i R5 i zatem wypolnqet instrukci` RTI.

       wyhod iz podprogramm .FORK i .SYNCH takve po instrukcii RTS  PC.
  pri |tom neobhodimo wosstanawliwatx stek i registry.



       1.5.9. obrabotka prerywaniq na fortran sm (INTSET)



       funkciq INTSET predostawlqetsq w RT11 dlq ustanowki podprogrammy
  na qzyke fortran sm, kotoraq na~net wypolnqtxsq po prerywani`.



       1.6. primer podprogrammy obrabotki prerywaniq



       nive priwoditsq tekst operatiwnoj golownoj programmy, soderva}ej
  wnutrenn`` podprogrammu obrabotki prerywaniq.  operatiwnaq  programma
  wypolnqet nekotorye zada~i inicializacii,  a  zatem  ostanawliwaetsq.
  kogda dannye postupa`t iz periferijnogo ustrojstwa,  to  podprogramma
  obrabotki prerywaniq sobiraet ih. kogda wse dannye sobrany,  podprog-
  ramma obrabotki wosstanawliwaet  golownu`  programmu,  kotoraq  movet
  zatem obrabotatx nowu` informaci` do o~erednoj ostanowki.

       w |tom primere XX predstawlqet imq ustrojstwa.

                  **** golownaq programma ****

          XXVEG = VVV             ;wektor ustrojstwa
          PR7   = 340             ;prioritet 7
          DEVPRI= 5               ;prioritet ustrojstwa 5
          XXCSR = NNNNNN          ;registr komand i sostoqnij
          IENABL= 100             ;bit razre{eniq prerywaniq
   START: .PROTECT #LIST,#XXVEC   ;za}ita wektora
          BCS     ERROR           ;obrabotatx o{ibku
          MOV     #ISREP,@#XXVEC  ;ustanowitx perwoe slowo
                                  ;wektora
          MOV     #PR7,@#XXVEC+2  ;ustanowitx wtoroe slowo
                                  ;wektora
          .DEVICE #LIST,#DEVLST   ;blokirowatx ustrojstwo na
                                  ;wyhode ili annulirowanii
   ;
   ; inicializaciq whodnyh buferow w podprogramme obrabotki
   ; inicializaciq drugih to~ek i metok
   ;
   SPND:  BIS     #IENABL,@#XXCSR ;razre{itx prerywanie
          .SPND                   ;ovidatx dannye
   ;

                                 - 26 -




   ; sohranenie dannyh
   ; wosstanowlenie metok
   ;
          BR      SPND            ;ovidatx e}e dannye
   DEVLST:.WORD   XXCSR           ;spisok dlq .DeVICE
          .WORD   0
          .WORD   0
   LIST:  .BLKW   3               ;blok argumentow EMT
   ERROR: .                       ;podprogramma obrabotki
          .                       ;o{ibok
          .
           **** podprogramma obrabotki prerywaniq ****
   ISREP: .                       ;to~ka whoda w prerywanie
          .                       ;prioritet 7
          .
          .INTEN  DEVPRI          ;wnimanie: ne #DEVPRI
                                  ;snizitx do prioriteta
                                  ;ustrojstwa. |to sostoqnie
                                  ;sistemy s R4 i R5
   ;
   ; esli estx e}e dannye dlq sbora
   ;
          BR      RETURN
   ;
   ; esli net bolx{e dannyh dlq sbora
   ;
          .SYNCH  #SYNBLK         ;wernutxsq w golownu`
                                  ;programmu dlq obrabotki
                                  ;dannyh
          BR      SYNERR          ;o{ibka .SYNCH
          .RSUM                   ;prodolvitx golownu`
                                  ;programmu
   RETURN:RTS     PC              ;vdatx sledu`}ego
                                  ;prerywaniq
          .
          .
          .
   SYNBLK:.WORD   0,2,0,0,0,-1,0  ;zame~anie: 2 - |to nomer
                                  ;operatiwnogo zadaniq
   SYNERR:                        ;obrabotka o{ibok .SYNCH



       1.7. obrabotka prerywaniq w RT11XM



       w |tom podrazdele opisany trebowaniq k  podprogramme  obrabotki,
  esli planiruetsq wypolnqtx ee pod uprawleniem RT11XM.

       iz dwuh widow zadanij w RT11XM (wirtualxnye i priwilegirowannye)
  wirtualxnye zadaniq ne mogut sodervatx wnutrennie podprogrammy  obra-
  botki prerywaniq. po opredeleni` wirtualxnogo otobraveniq wirtualxnye
  zadaniq ne mogut imetx dostup  k  stranice  wwoda/wywoda  ustrojstwa,
  po|tomu oni ne mogut ustanawliwatx  bit  razre{eniq  prerywaniq  ust-
  rojstwa ili peresylatx dannye w (ili iz) registr bufera  dannyh  ust-
  rojstwa.

       esli zadanie, soderva}ee wnutrenn`` podprogrammu obrabotki  pre-

                                 - 27 -




  rywaniq, dolvno rabotatx pod uprawleniem RT11XM, to ono dolvno  rabo-
  tatx kak  priwilegirowannoe  zadanie.  priwilegirowannoe  otobravenie
  predostawlqet mlad{ie 28k slow pamqti i stranicu  wwoda/wywoda  prog-
  ramme i pozwolqet programme otobravatx  u~astki  oblasti  wirtualxnyh
  adresow polxzowatelq w ras{irennu` fizi~esku` pamqtx, esli |togo tre-
  buet programma.

       dlq togo, ~toby ponqtx ograni~eniq, kotorye RT11XM  nalagaet  na
  podprogrammy obrabotki prerywaniq, nuvno uqsnitx, ~to kogda  prerywa-
  nie woznikaet pod uprawleniem RT11XM, to ego  podprogramma  obrabotki
  wypolnqetsq s sistemnym, a ne s  polxzowatelxskim  otobraveniem.  |to
  ozna~aet, ~to podprogramma obrabotki prerywaniq wypolnqetsq s sistem-
  nym otobraveniem po umol~ani` w mlad{ih 28k slowah pamqti pl`s  stra-
  nica wwoda/wywoda, nezawisimo, otobrazila li programma kaku`-to  swo`
  oblastx wirtualxnyh adresow w ras{irennu` oblastx. |to  imeet  smysl,
  kogda perwoe ograni~enie RT11XM trebuet, ~toby w l`boe wremq pri woz-
  niknowenii prerywaniq otobravenie dlq podprogrammy obrabotki prerywa-
  niq pl`s dannye, kotorye ona ispolxzuet,  byli  identi~ny  sistemnomu
  otobraveni`.

       na ris. 5 pokazana shema sistemnogo  otobraveniq  po  umol~ani`,
  kotoroe obespe~iwaet dostup k mlad{im 28k slowam pamqti pl`s stranica
  wwoda/wywoda. |to  takve  shema  otobraveniq  dlq  priwilegirowannogo
  zadaniq, kogda ono wperwye na~inaet wypolnenie. |ta ve shema  otobra-
  veniq wstupaet w silu kavdyj raz pri obrabotke prerywaniq  (sowmestno
  ispolxzuemye oblasti predstawlq`t pamqtx, k kotoroj net dostupa zada-
  ni` polxzowatelq). wektor prerywaniq, nahodq}ijsq  w  q~ejkah  200  i
  202, sodervit to~ku whoda ISREP: podprogrammy obrabotki prerywaniq  i
  zna~enie 340, kotoroe predstawlqet nowoe PS. pri wozniknowenii prery-
  waniq sistema ispolxzuet sistemnoe otobravenie, ~toby najti  podprog-
  rammu obrabotki prerywaniq. w |tom primere ona  na~inaetsq  s  adresa
  120000. poskolxku priwilegirowannoe i sistemnoe otobraveniq identi~ny
  na |tom risunke, to podprogramma  obrabotki  prerywaniq  nahoditsq  w
  fizi~eskoj pamqti tam, kuda ukazywaet sistemnoe otobravenie tak,  ~to
  ona movet prawilxno wypolnqtxsq.

                                 - 28 -




            sistemnoe i priwilegirowannoe otobravenie

                            prost-wo
                            fizi~-ih
                 sist.      adresow      prost-wo
                 prost-wo ->--------<-   wirt.
                 wirt.    ! ! str. ! !   adre-
   diapazon      adre-   /  ! w/w  !  \  sow         diapazon
   adresow  ras  sow    / ->!------!<- \ polx-lq ras adresow
   --------------------/  ! !//////! !  \--------------------
   ! 177776! 7 !      !  /  !//////!  \  !      ! 7 ! 177776!
   ! 160000!   !      ! /   !//////!   \ !      !   ! 160000!
   --------------------/----!------!----\--------------------
   ! 157776! 6 !      !     !      !     !      ! 6 ! 157776!
   ! 140000!   !      !---->!      !<----!      !   ! 140000!
   --------------------     !------!     --------------------
   ! 137776! 5 !ISREP:!     ! p/p  !     !ISREP:! 5 ! 137776!
   !*120000!   !      !---->!ob.pr.!<----!      !   !*120000!
   -------------------- 120000-----!     --------------------
   ! 117776! 4 !      !     !      !     !      ! 4 ! 117776!
   ! 100000!   !      !---->!      !<----!      !   ! 100000!
   --------------------     !------!     --------------------
   !  77776! 3 !      !     !      !     !      ! 3 !  77776!
   !  60000!   !      !---->!      !<----!      !   !  60000!
   --------------------     !------!     --------------------
   !  57776! 2 !      !     !      !     !      ! 2 !  57776!
   !  40000!   !      !---->!      !<----!      !   !  40000!
   --------------------     !------!     --------------------
   !  37776! 1 !      !     !      !     !      ! 1 !  37776!
   !  20000!   !      !---->!      !<----!      !   !  20000!
   --------------------     !------!     --------------------
   !  17776! 0 !      !     !      !     !      ! 0 !  17776!
   !  00000!   !      !---->!      !<----!      !   !  00000!
   --------------------  !  --------  !  --------------------
                         !            !
                         !            !
                     sistemnoe    neizmenennoe
                     otobravenie  priwilegirowannoe
                                  otobravenie

   *                              - adres       podprogrammy
                                    obrabotki     prerywaniq
   prost-wo fizi~-ih adresow      - prostranstwo  fizi~eskih
                                    adresow
   sist. prost-wo wirt. adresow   - sistemnoe   prostranstwo
                                    wirtualxnyh      adresow
   prost-wo wirt. adresow polx-lq - prostranstwo wirtualxnyh
                                    adresow     polxzowatelq
   str. w/w                       - stranica    wwoda/wywoda
   p/p ob.pr.                     - podprogramma   obrabotki
                                    prerywaniq

                          ris. 5

       na ris. 6 predstawleno priwilegirowannoe zadanie, kotoroe  izme-
  nqet otobravenie wirtualxnogo adresa polxzowatelq (sowmestno  ispolx-
  zuemye oblasti predstawlq`t pamqtx, k kotoroj zadanie polxzowatelq ne
  imeet dostupa). iz primera widno, ~to podprogramma obrabotki prerywa-
  niq ne movet wypolnqtxsq prawilxno pri wozniknowenii prerywaniq, t.k.

                                 - 29 -




  podprogramma obrabotki prerywaniq ne nahoditsq w  fizi~eskoj  pamqti,
  gde ona dolvna bytx. oblastx pamqti,  ukazannaq  sistemnym  otobrave-
  niem, sodervit slu~ajnye dannye ili instrukcii.

                                 - 30 -




      o{ibki otobraveniq podprogrammy obrabotki prerywaniq

                              prost-wo
                              fizi~-ih
                              adresow
                          /-->--------<---\
                          !   ! str. !    !
                          !   ! w/w  !    !
                          ! ->!------!<---!
                          ! ! !      !   !!
   dia-         sist.     ! ! !------!<--!!prost-wo     dia
   pazon        prost-wo  ! ! ! p/p  !  !!!wirt.        pazon
   adre-        wirt.     ! ! !ob.pr.!  !!!adresow      adre-
   sow     ras  adresow   / ! !------!<-!!\polx-lq ras  sow
   ----------------------/  / !//////! !!! \------------------
   ! 177776!7!          !  /  !//////! !!!  !      !7! 177776!
   ! 160000! !          ! /   !//////! !! \ !      ! ! 160000!
   ----------------------/----!------! !\  \------------------
   ! 157776!6!          !     !//////! ! \  !      !6! 157776!
   ! 140000! !          !---->!//////! \  \ !      ! ! 140000!
   ----------------------     !------!  \  \------------------
   ! 137776!5!    ISREP:!     !//////!   \  !ISREP:!5! 137776!
   !*120000! !          !---->!//??//!    \ !      ! !*120000!
   ----------------------  120000----!     \------------------
   ! 117776!4!          !     !      !      !      !4! 117776!
   ! 100000! !          !---->!      !< ----!      ! ! 100000!
   ----------------------     !------!      ------------------
   !  77776!3!          !     !      !      !      !3!  77776!
   !  60000! !          !---->!      !< ----!      ! !  60000!
   ----------------------     !------!      ------------------
   !  57776!2!          !     !      !      !      !2!  57776!
   !  40000! !          !---->!      !< ----!      ! !  40000!
   ----------------------     !------!      ------------------
   !  37776!1!          !     !      !      !      !1!  37776!
   !  20000! !          !---->!      !<-----!      ! !  20000!
   ----------------------     !------!      ------------------
   !  17776!0!202 340   !     !      !      !      !0!  17776!
   !  00000! !200 ISREP:!---->!      !<-----!      ! !  00000!
   ----------------------  !  --------   !  ------------------
                           !             !
                           !             !
                     sistemnoe     izmenennoe
                     otobravenie   priwilegirowannoe
                                   otobravenie

   *                              - adres       podprogrammy
                                    obrabotki     prerywaniq
   prost-wo fizi~-ih adresow      - prostranstwo  fizi~eskih
                                    adresow
   sist. prost-wo wirt. adresow   - sistemnoe   prostranstwo
                                    wirtualxnyh      adresow
   prost-wo wirt. adresow polx-lq - prostranstwo wirtualxnyh
                                    adresow     polxzowatelq
   str. w/w                       - stranica    wwoda/wywoda
   p/p ob.pr.                     - podprogramma   obrabotki
                                    prerywaniq

                          ris. 6


                                 - 31 -




       wtoroe ograni~enie dlq podprogramm obrabotki prerywaniq w RT11XM
  otnositsq k sposobu ispolxzowaniq monitorom registra adresa  stranicy
  (ras) 1 s sistemnym otobraveniem.  ras1  uprawlqet  otobraveniem  dlq
  wirtualxnyh adresow w diapazone s 20000 po 37776. kogda RT11XM  wper-
  wye zagruvaetsq s sistemnym otobraveniem, to wirtualxnye adresa otob-
  rava`tsq prqmo w te ve fizi~eskie adresa. odnako, sam monitor ispolx-
  zuet ras1 dlq otobraveniq blokow pamqti EMT i buferow  polxzowatelxs-
  kih dannyh. itak, kavdyj raz pri wypolnenii  sistemy  sistemnye  wir-
  tualxnye adresa w diapazone ras1 mogut bytx otobraveny kuda-nibudx  w
  fizi~esku` pamqtx i sposoba kontrolirowatx ih net. nuvno bytx uweren-
  nym, ~to podprogramma obrabotki prerywaniq i l`bye dannye, w  kotoryh
  ona nuvdaetsq, ne nahodqtsq w diapazone wirtualxnyh adresow,  otobra-
  vaemyh ras1. ris. 7 ill`striruet |to ograni~enie.  dopustimye  q~ejki
  dlq podprogramm obrabotki pri uslowii, ~to priwilegirowannoe  otobra-
  venie identi~no sistemnomu otobraveni` wo wremq prerywaniq,  otme~eny
  na risunke kak "*".

       esli podprogramme obrabotki prerywaniq neobhodimo okno w pamqti,
  to ona movet pozaimstwowatx ras1 takim ve sposobom,  kak  |to  delaet
  monitor. ona dolvna sohranitx sodervimoe, ustanowitx trebuemoe zna~e-
  nie i wosstanowitx  ishodnoe  sodervimoe  pered  wyhodom.  ona  movet
  delatx |to na urowne .INTEN ili wetwleniq, no ne na urowne  sinhroni-
  zacii.


       pRIME^ANIE. esli operacionnaq sistema ispolxzuet drajwer MQ  dlq
  swqzi mevdu sistemnymi zadaniqmi, to wse ograni~eniq dlq  ras1  takve
  nalaga`tsq i na ras2 - diapazon adresow ot 40000 po 57777.

                                 - 32 -




       ograni~eniq ras1 podprogrammy obrabotki prerywaniq

                            prost-wo
                            fizi~-ih
                 sist.      adresow     prost-wo
                 prost-wo ->--------<-  wirt.
                 wirt.    ! ! str. ! !  adre-
   diapazon      adre-   /  ! w/w  !  \ sow          diapazon
   adresow   ras sow    / ->!------!<- \polx-lq ras  adresow
   --------------------/  ! !//////! !  \--------------------
   ! 177776 ! 7 !     !  /  !//////!  \  !     ! 7 ! 177776 !
   ! 160000 !   !     ! /   !//////!   \ !     !   ! 160000 !
   --------------------/----!------!----\--------------------
   ! 157776 ! 6 !     !     !      !     !     ! 6 ! 157776 !
   ! 140000 !   !     !---->!      !<----!  *  !   ! 140000 !
   --------------------     !------!     --------------------
   ! 137776 ! 5 !     !     !      !     !     ! 5 ! 137776 !
   ! 120000 !   !     !---->!      !<----!  *  !   ! 120000 !
   --------------------     !------!     --------------------
   ! 117776 ! 4 !     !     !      !     !     ! 4 ! 117776 !
   ! 100000 !   !     !---->!      !<----!  *  !   ! 100000 !
   --------------------     !------!     --------------------
   !  77776 ! 3 !     !     !      !     !     ! 3 !  77776 !
   !  60000 !   !     !---->!      !<----!  *  !   !  60000 !
   --------------------     !------!     --------------------
   !  57776 ! 2 !     !     !      !     !     ! 2 !  57776 !
   !  40000 !   !     !---->!      !<----!  *  !   !  40000 !
   --------------------     !------!     --------------------
   !  37776 ! 1 !     !     !      !     !     ! 1 !  37776 !
   !  20000 !   !     !-> 7 !      !<----!     !   !  20000 !
   --------------------     !------!     --------------------
   !  17776 ! 0 !     !     !      !     !     ! 0 !  17776 !
   !  00000 !   !     !---->!      !<----!  *  !   !  00000 !
   --------------------  !  --------  !  --------------------
                         !            !
                         !            !
                     sistemnoe    neizmenennoe
                     otobravenie  priwilegirowannoe
                                  otobravenie

   *                              - dopustimye  adresa   dlq
                                    programmy      obrabotki
                                    prerywaniq
   prost-wo fizi~-ih adresow      - prostranstwo  fizi~eskih
                                    adresow
   sist. prost-wo wirt. adresow   - sistemnoe   prostranstwo
                                    wirtualxnyh      adresow
   prost-wo wirt. adresow polx-lq - prostranstwo wirtualxnyh
                                    adresow     polxzowatelq
   str. w/w                       - stranica wwoda/wywoda

                          ris. 7

       instrukcii (podprogrammy), sledu`}ie  za  makrokomandoj  .SYNCH,
  wypolnq`tsq po~ti  tak,  kak  podprogramma  zawer{eniq.  podprogrammy
  zawer{eniq w RT11XM wypolnq`tsq  s  registrami  polxzowatelq,  stekom
  polxzowatelq i polxzowatelxskim otobraveniem. no, poskolxku  instruk-
  cii (podprogrammy), sledu`}ie za  .SYNCH,  wse  e}e  qwlqetsq  ~astx`
  podprogrammy obrabotki prerywaniq, to oni  wypolnq`tsq  s  registrami

                                 - 33 -




  polxzowatelq i s sistemnym otobraveniem.  itak,  na  instrukcii  (ili
  podprogrammy), sledu`}ie za makrokomandoj .SYNCH, w  RT11XM  naklady-
  wa`tsq te ve ograni~eniq, ~to i na osnownoe telo  podprogrammy  obra-
  botki: ih otobravenie dolvno bytx identi~no w l`boe wremq pri woznik-
  nowenii prerywaniq ili pri wypolnenii podprogrammy zawer{eniq. kone~-
  no, oni dolvny takve priderviwatxsq ograni~enij ras1 i ras2.





                   2. struktura i nastrojka drajwera




       dlq napisaniq drajwera ustrojstwa neobhodimo na stadii ego  pla-
  nirowaniq uto~nitx nekotorye poloveniq. w nastoq}em dokumente opisany
  struktura standartnogo drajwera i osnownye ego harakteristiki, a tak-
  ve neobqzatelxnye swojstwa, prisu}ie nekotorym drajweram, i ih prime-
  nenie. neobqzatelxnymi swojstwami qwlq`tsq: ustanowka  wo  wnutrenn``
  o~eredx,    SET-parametry,    obespe~enie    tajm-auta     ustrojstwa
  wwoda/wywoda, specialxnye funkcii, registraciq o{ibok  i  specialxnye
  serwisnye programmy, ime`}iesq pri rabote s RT11XM.

       ~toby napisatx programmnyj zagruz~ik dlq  sistemnogo  ustrojstwa
  neobhodimo znatx razli~iq mevdu  standartnym  drajwerom  i  drajwerom
  sistemnogo ustrojstwa. |ti razli~iq opisywa`tsq w posledu`}ih  razde-
  lah, gde ob'qsnq`tsq procedury assemblirowaniq, ustanowki, prowerki i
  otladki nowogo drajwera.

       dlq prawilxnogo napisaniq drajwera w perwu`  o~eredx  neobhodimo
  oznakomitxsq s harakteristikami ustrojstwa, interfejsom {iny i trebo-
  waniqmi, pred'qwlqemymi k podprogrammam obrabotki prerywaniq.

       pered sozdaniem drajwera ustrojstwa neobhodimo:

         - oznakomitxsq s ustrojstwom;
         - izu~itx strukturu standartnogo drajwera ustrojstwa;
         - izu~itx perwi~nyj zagruz~ik ustrojstwa;
         - podumatx ob ispolxzowanii specialxnyh swojstw;
         - izu~itx primery drajwerow;
         - podgotowitx blok-shemu drajwera ustrojstwa;
         - napisatx programmu drajwera;
         - ustanowitx, proweritx i otladitx drajwer.

       drajwer ustrojstwa sistemy RT11 imeet sledu`}ie sekcii:

         - wwedenie;
         - zagolowok;
         - iniciaciq wwoda/wywoda;
         - obrabotka prerywaniq;
         - zawer{enie wwoda/wywoda;
         - zawer{enie drajwera.

       kavdaq iz  pere~islennyh  sekcij  predstawlqet  soboj  otdelxnu`
  logi~esku` edinicu, prednazna~ennu` dlq opredelennoj celi.  sistemnaq
  makrobiblioteka  RT11  predostawlqet  specialxnye  makrokomandy   dlq
  obleg~eniq napisaniq |tih sekcij i drajwera w celom.

                                 - 34 -




       2.1. sekciq wwedeniq



       ishodnyj tekst drajwera ustrojstwa na~inaetsq s sekcii wwedeniq,
  w kotoru` wkl`~aetsq direktiwa .MCALL dlq ukazaniq neobhodimyh makro-
  komand (naprimer, .DRDEF i dr.). w |toj sekcii  ustanawliwa`tsq  sim-
  wolxnye opredeleniq, kotorye budut pozve ispolxzowany.



       2.1.1. makrokomanda .DRDEF



       makrokomanda .DRDEF ispolxzuetsq w  na~ale  sekcii  i  pozwolqet
  wypolnqtx sledu`}ee:

         - wydawatx direktiwy .MCALL dlq wseh makrokomand, swqzannyh  s
           drajwerom;
         - obespe~iwatx zna~eniq po  umol~ani`  standartnyh  parametrow
           generacii;
         - ispolxzowatx makrokomandu .QELDF dlq opredeleniq sme}enij  w
           |lementah o~eredi;
         - opredelqtx bity harakteristik ustrojstwa;
         - opredelqtx razmer ustrojstwa (DDDSIZ), w blokah;
         - opredelqtx identifikator ustrojstwa (DD$COD);
         - ustanawliwatx  slowo  sostoqniq  ustrojstwa  iz  informacii,
           nahodq}ejsq w DDDSIZ i DD$COD;
         - obespe~iwatx zna~eniq po umol~ani`  dlq  registra  komand  i
           sostoqnij ustrojstwa w DD$CSR i wektora prerywanij w DD$VEC;
         - opredelqtx simwoly DD$CSR i DD$VEC globalxnymi.


       pRIME^ANIE. DD - dwuhsimwolxnoe imq ustrojstwa.

       makrokomanda .DRDEF imeet sledu`}ij format:

          .DRDEF Name,CODE,STAT,SIZE,CSR,VEC

   gde

  Name   - dwuhsimwolxnoe imq ustrojstwa  (naprimer,  RK  dlq  drajwera
           diska s plawa`}imi golowkami);

  CODE   - wosxmeri~noe ~islowoe zna~enie, kotoroe unikalxno  identifi-
           ciruet ustrojstwo (bajt-identifikator ustrojstwa);

  STAT   - bit slowa sostoqniq ustrojstwa. w ka~estwe STAT  mogut  bytx
           ispolxzowany sledu`}ie simwoly ili wyraveniq iz nih:

               FILST$     WONLY$       HNDLR$
               RONLY$     SPECL$       SPFUN$

  SIZE   - razmer ustrojstwa w 256-slownyh blokah (|to  zna~enie  rawno
           0, esli ustrojstwo nefajlowoj struktury);

  CSR    - zna~enie po umol~ani` dlq registra komand i  sostoqnij  ust-
           rojstwa;

                                 - 35 -




  VEC    - zna~enie po umol~ani` dlq wektora prerywaniq ustrojstwa.



       2.1.1.1. direktiwa .MCALL



       makrokomanda .DRDEF wydaet direktiwu .MCALL dlq sledu`}ih makro-
  komand:

          .DRAST      .DRBEG       .DRFIN
          .DRBOT      .DREND       .DRSET
          .DRVTB      .FORK        .QELDF

       pomimo |togo, pri assemblirowanii drajwera s  uslowiem  TIM$IT=1
  makrokomanda .DRDEF wydaet direktiwu .MCALL i dlq makrokomand:

          .TIMIO  i  .CTIMIO



       2.1.1.2. uslowiq generacii sistemy



       ishodnye fajly sistemy RT11 {iroko ispolxzu`t direktiwy uslowno-
  go assemblirowaniq. sekcii drajwera wkl`~a`tsq ili opuska`tsq wo wre-
  mq assemblirowaniq w zawisimosti ot zna~enij  standartnyh  parametrow
  generacii. naprimer, ~toby ukazatx, dolvny li assemblirowatxsq  podp-
  rogrammy dlq registracii o{ibok, sistema RT11  ispolxzuet  simwolxnoe
  obozna~enie ERL$G.

       esli neobhodimo, ~toby drajwer obespe~iwal kaku`-to funkci`,  to
  zna~enie sootwetstwu`}ego standartnogo parametra dolvno bytx ustanow-
  leno w 1, w protiwnom slu~ae ono dolvno bytx rawno 0.

       makrokomanda .DRDEF  ustanawliwaet  w  0  standartnye  parametry
  generacii TIM$IT (dlq tajm-auta ustrojstwa), MMG$T  (dlq  obespe~eniq
  ras{irennoj pamqti) i ERL$G (dlq registracii  o{ibok),  esli  oni  ne
  opredeleny w fajle parametrow generacii  pri  assemblirowanii.  krome
  togo, esli simwoly ime`t  zna~eniq,otli~nye  ot  0,  to  makrokomanda
  .DRDEF ustanawliwaet ih w 1.



       2.1.1.3. sme}enie w |lemente o~eredi



       makrokomanda .DRDEF wyzywaet .QELDF dlq  opredeleniq  simwolxnyh
  sme}enij w |lementah o~eredi. sledu`}ij primer demonstriruet sgeneri-
  rowannye sme}eniq w |lemente o~eredi.

      Q.LINK = 0      (swqzx so sledu`}im |lementom o~eredi)
      Q.CSW  = 2.     (ukazatelx slowa sostoqniq kanala)
      Q.BLKN = 4.     (nomer fizi~eskogo bloka)
      Q.FUNC = 6.     (kod specialxnoj funkcii)
      Q.JNUM = 7.     (nomer zadaniq)

                                 - 36 -




      Q.UNIT = 7.     (nomer ustrojstwa)
      Q.BUFF = ^o10   (adres bufera polxzowatelq)
      Q.WCNT = ^o12   (s~et~ik slow)
      Q.COMP = ^o14   (kod podprogrammy zawer{eniq)
      Q.ELGH = ^o16   (dlina |lementa o~eredi)

  poskolxku drajwer oby~no imeet delo so sme}eniqmi w |lementah o~eredi
  otnositelxno Q.BLKN, to makrokomanda .QELDF takve opredelqet  sledu`-
  }ie simwolxnye sme}eniq:

      Q$LINK = -4
      Q$CSW  = -2
      Q$BLKN =  0
      Q$FUNC =  2
      Q$JNUM =  3
      Q$UNIT =  3
      Q$BUFF =  4
      Q$WCNT =  6
      Q$COMP = 10



       2.1.1.4. opredelenie simwolxnyh obozna~enij



       dlq opredeleniq simwolxnyh  obozna~enij,  kotorye  w  dalxnej{em
  budut ispolxzowany w drajwere, primenq`tsq operatory prqmogo priswoe-
  niq. oby~no opredeleniq wkl`~a`t registry drajwerow i drugie  weli~i-
  ny.

  nive priwoditsq rqd primerow iz drajwerow RT11:

       dlq simwola perewoda stroki (kod w koi-7 rawen 12)  ispolxzuetsq
  sledu`}ee opredelenie:

          LF = 12        ;perewod stroki

       dlq opredeleniq registrow ustrojstwa:

          RKDS = RK$CSR    ;registr sostoqniq drajwera
          RKER = RKDS+2    ;registr o{ibki
          RKCS = RKDS+4    ;registr uprawleniq sostoqniem
          RKWC = RKDS+6    ;registr s~et~ika slow

       makrokomanda .DRDEF opredelqet sledu`}ie simwoly:

          HDERR$ = 1       ;bit gruboj o{ibki w CSW
          EOF$ = 20000     ;bit konca fajla w CSW



       2.1.2. bajt-identifikator ustrojstwa



       mlad{ij bajt  slowa  sostoqniq  ustrojstwa  (bajt-identifikator)
  identificiruet kavdoe ustrojstwo w sisteme. identifikator  ustrojstwa
  opredelqetsq kak argument CODE makrokomandy .DRDEF. w tabl. 4  preds-

                                 - 37 -




  tawleny |ti zna~eniq w wosxmeri~nom kode:

                                                    tABLICA 4
                   identifikaciq ustrojstw
   -----------------------------------------------------------
       bajt-     !               ustrojstwo
   identifikator !--------------------------------------------
                 !  imq   !         naimenowanie
   -----------------------------------------------------------
          0      !  RK    ! disk s plawa`}imi golowkami
                 !        !   kassetnogo tipa
        1-2      !   -    ! zarezerwirowano
          3      !  LP    ! ustrojstwo parallelxnoj pe~ati
          4      ! TT/BA  ! sistemnyj terminal ili drajwer
                 !        !   paketnoj obrabotki
          5      !   -    ! zarezerwirowano
          6      !  DY    ! gibkij disk dwojnoj plotnosti
          7      !  PC    ! perfolento~noe ustrojstwo w/w
         10      !   -    ! zarezerwirowano
         11      !  MT    ! magnitnaq lenta
         12      !  RF    ! disk s fiksirowannymi golowkami
         13      !  CT    ! nakopitelx na kassetnoj lente
         14      !  CR    ! ustrojstwo wwoda s perfokart
      15-17      !   -    ! zarezerwirowano
         20      !  MM    ! magnitnaq lenta s wysokoj
                 !        !   plotnostx`
         21      !  DP    ! paket smennyh diskow
         22      !  DX    ! gibkij disk
         23      !  DM    ! disk  14 mbajt
         24      !   -    ! zarezerwirowano
         25      !  NL    ! nulx-ustrojstwo
      26-30      !   -    ! zarezerwirowano (dlq sistemy todas)
      31-40      !   -    ! zarezerwirowano
         41      !  LS    ! ustrojstwo posledowatelxnoj pe~ati
         42      !  MQ    ! psewdoustrojstwo wnutrennih
                 !        ! soob}enij
         44      !  XT    ! drajwer swqzi dlq raspredelennyh
                 !        ! sistem
         60      !UX,UY,UZ! drajwery wirtualxnyh nositelej
                 !        ! SJ/FB/XM- monitorah
        377      !  VM    ! drajwer ras{irennoj pamqti


       pRIME^ANIE. dlq zadaniq kodow bajtow-identifikatorow  ustrojstw,
  kotorye ne ukazany w |toj tablice, neobhodimo ispolxzowatx dlq perwo-
  go ustrojstwa wosxmeri~nyj kod 376, dlq wtorogo - 375 i t.d. ne  sle-
  duet ispolxzowatx kody, kotorye sistema otwodit dlq nowyh  apparatnyh
  ustrojstw.



       2.1.3. slowo sostoqniq ustrojstwa



       slowo sostoqniq ustrojstwa  opredelqet  kavdoe  fizi~eskoe  ust-
  rojstwo w sisteme RT11 i sodervit informaci` o nem (naprimer, qwlqet-
  sq li dostup prqmym ili posledowatelxnym). zna~enie  slowa  sostoqniq
  hranitsq w bloke 0 fajla drajwera i w tablice  monitora  $STAT  posle

                                 - 38 -




  ustanowki ustrojstwa. makrokomanda  .DSTATUS  posylaet  |to  zna~enie
  wypolnq`}ejsq programme, a .DRDEF ustanawliwaet slowo sostoqniq  ust-
  rojstwa, ispolxzuq argumenty CODE i STAT.

  w tabl. 5 predstawleny zna~eniq bitow w slowe  sostoqniq  ustrojstwa.
  makrokomanda .DRDEF ispolxzuet simwol DDSTS dlq  predstawleniq  slowa
  sostoqniq ustrojstwa.

                                                   tABLICA 5
               slowo sostoqniq ustrojstwa
   ----------------------------------------------------------
    bit !  simwol  !             zna~enie
   ----------------------------------------------------------
    0-7 !    -     ! bajt-identifikator ustrojstwa
    8-9 !    -     ! zarezerwirowano
     10 !  SPFUN$  ! 0 = makrokomanda .SPFUN zapre}ena
        !          ! 1 = drajwer movet wypolnitx makrokomandu
        !          !     .SPFUN
     11 !  HNDLR$  ! 0 = pri udalenii programmy drajwer
        !          !     wypolnqet zawer{a`}ie operacii s
        !          !     ustrojstwom, esli |lement o~eredi
        !          !     aktiwen
        !          ! 1 = pri udalenii programmy drajwer
        !          !     wypolnqet zawer{a`}ie operacii s
        !          !     ustrojstwom
        !          ! |tot bit ignoriruetsq w RT11SJ,
     12 !  SPECL$  ! 1 = ustrojstwo s nestandartnoj fajlowoj
        !          !     strukturoj (naprimer, MT, CT)
     13 !  WONLY$  ! 1 = ustrojstwo tolxko dlq zapisi
     14 !  RONLY$  ! 1 = ustrojstwo tolxko dlq ~teniq
     15 !  FILST$  ! 0 = ustrojstwo s posledowatelxnym
        !          !     dostupom (naprimer, MT, CT, PC, LP)
        !          ! 1 = ustrojstwo s prqmym dostupom
        !          !     (naprimer, RK, DX)


       pRIME^ANIE. sleduet otmetitx, ~to 11-j  bit  w  slowe  sostoqniq
  dolven bytx ustanowlen dlq drajwerow ustrojstw, kotorye pri  whode  w
  podprogrammu obrabotki prerywaniq udalq`t |lement o~eredi i  ustanaw-
  liwa`t ego wo wnutrenn`` o~eredx, i dlq drajwerow ustrojstw,  kotorye
  ime`t wnutrennie dannye, trebu`}ie izmeneniq pri  prerywanii  (napri-
  mer, mt:).

       wse ustrojstwa, w drajwerah kotoryh ustanowlen bit 15, wosprini-
  ma`tsq bolx{instwom sistemnyh programm kak ustrojstwa fajlowoj struk-
  tury.

       prostym sposobom opredeleniq slowa sostoqniq qwlqetsq  ispolxzo-
  wanie mnemoniki dlq bitow. movno zadatx argument STAT, ispolxzuq sle-
  du`}ie simwolxnye obozna~eniq ili kombinaci` iz nih.

   FILST$ == 100000  ;struktura fajla s prqmym dostupom
   RONLY$ ==  40000  ;tolxko ~tenie
   WONLY$ ==  20000  ;tolxko zapisx
   SPECL$ ==  10000  ;net kataloga
   HNDLR$ ==   4000  ;zawer{enie operacii budet wypolnqtx
                     ;drajwer
   SPFUN$ ==   2000  ;movet wypolnqtx specialxnye funkcii


                                 - 39 -




       primer. ukazatx argument STAT makrokomandy .DRDEF dlq  drajwerow
  RK, MT i LP:

          dlq  RK:  FILST$
          dlq  MT:  SPECL$!SPFUN$!HNDLR$
          dlq  LP:  WONLY$



       2.1.4. slowo razmera ustrojstwa



       argument SIZE makrokomandy .DRDEF opredelqet razmer ustrojstwa w
  256-slownyh blokah.  makrokomanda  .DRDEF  pome}aet  |to  zna~enie  w
  DDDSIZ. esli ustrojstwo ne qwlqetsq ustrojstwom s prqmym dostupom, to
  w SIZE zapisywaetsq 0. razmer ustrojstwa RK rawen 4800 blokam  (11300
  wosxmeri~nym); razmer dlq ustrojstwa  PC  (perfolento~noe  ustrojstwo
  wwoda/wywoda) rawen 0, poskolxku ono ne s prqmym dostupom.

       makrokomanda .DSTATUS wozwra}aet programme zna~enie slowa razme-
  ra ustrojstwa.



       2.2. sekciq zagolowka



       wtoroj sekciej drajwera  qwlqetsq  sekciq  zagolowka.  w  sekcii
  zagolowka wyzywaetsq makrokomanda .DRBEG dlq  ustanowki  perwyh  pqti
  slow drajwera. |ta makrokomanda hranit pqtx slow informacii w bloke 0
  fajla drajwera w q~ejkah s 52 po 60 i  sozdaet  nekotorye  globalxnye
  simwoly. dannye, ustanawliwaemye w sekcii zagolowka, ispolxzu`tsq pri
  zagruzke drajwera w pamqtx makrokomandoj .FETCH ili komandoj monitora
  LOAD. sodervimoe q~ejki 176, opisannoe nive, ispolxzuetsq zagruz~ikom
  dlq prowerki nali~iq ustrojstwa wo wremq ustanowki drajwera.



       2.2.1. informaciq w bloke 0



       w tabl. 6 predstawleno sodervanie (i mnemonika)  wosxmi  slow  w
  bloke 0: iz nih pqtx slow ustanawliwaet makrokomanda .DRBEG,  ispolx-
  zuq direktiwu .ASECT, i tri slowa, ispolxzuemye dlq zagruvaemyh  ust-
  rojstw - makrokomanda  .DRBOT.  (prinqtye  uslownosti:  mnemoni~eskoe
  obozna~enie ukazano w kwadratnyh skobkah,  DD  -  dwuhsimwolxnoe  imq
  ustrojstwa.)

                                                   tABLICA 6
                  informaciq w bloke 0
   ----------------------------------------------------------
    q~ejka !                  sovervanie
   ----------------------------------------------------------
     52    !  razmer drajwera w bajtah
           !    [DDEND-DDSTRT]
     54    !  razmer ustrojstwa w 256-slownyh blokah

                                 - 40 -




                                         pRODOLVENIE TABL. 6
   ----------------------------------------------------------
    q~ejka !                  sovervanie
   ----------------------------------------------------------
           !    [DDDSIZ]
     56    !  slowo sostoqniq ustrojstwa
           !    [DDSTS]
     60    !  slowo sostoqniq dlq otraveniq swojstw
           !  sgenerirowannoj teku}ej wersii sistemy
           !    [ERL$G+<MMG$T*2>+<TIM$IT*4>]
     62    !  ukazatelx na~ala osnownogo priwoda (.DRBOT)
     64    !  dlina osnownogo priwoda, w bajtah (.DRBOT)
     66    !  sme}enie ot na~ala osnownogo priwoda do na~ala
           !  podprogrammy ~teniq zagruz~ika (.DRBOT)
    176    !  adres registra komand i sostoqnij
           !    [DD$CSR]



       2.2.2. perwye pqtx slow drajwera



       w tabl. 7 predstawleny pqtx slow, kotorye generiru`tsq s pomo}x`
  makrokomandy .DRBEG w na~ale P-sekcii drajwera (DD  -  dwuhsimwolxnoe
  imq ustrojstwa).

                                                   tABLICA 7
                  slowa zagolowka drajwera
   ----------------------------------------------------------
     slowo  !  simwol   !          opisanie
   ----------------------------------------------------------
       1    !  DDSTRT:: ! wektor ustrojstwa
            !           ! (dlq odnowektornyh ustrojstw);
            !           ! sme}enie k tablice wektorow
            !           ! (dlq mnogowektornyh ustrojstw)
       2    !     -     ! sme}enie k to~ke whoda podprogrammy
            !           ! obrabotki prerywaniq
       3    !     -     ! prioritet (340)
       4    !  DDLQE::  ! ukazatelx poslednego |lementa
            !           ! o~eredi k drajweru
       5    !  DDCQE::  ! ukazatelx teku}ego |lementa o~eredi



       2.2.3. makrokomanda .DRBEG



       makrokomanda .DRBEG ispolxzuetsq dlq ustanowki w blok  0  perwyh
  pqti slow drajwera. |ta makrokomanda generiruet nadleva}ie globalxnye
  simwoly dlq drajwera. pered ispolxzowaniem .DRBEG neobhodimo  wyzwatx
  makrokomandu .DRDEF dlq opredeleniq DD$CSR, DD$VEC, DDDSIZ  i  DDSTS.
  makrokomanda .DRBEG imeet sledu`}ij format:

          .DRBEG NAME
   gde

  Name   - dwuhsimwolxnoe imq ustrojstwa.

                                 - 41 -




       primery ispolxzowaniq .DRBEG priwedeny w prilovenii.



       2.2.4. mnogowektornye drajwery. makrokomanda .DRVTB



       drajwer movet obsluviwatx ustrojstwo, ime`}ee bolee odnogo  wek-
  tora prerywaniq. naprimer, drajwer PC obsluviwaet prerywaniq po  wek-
  toru 70 (dlq wwoda perfolenty) i po wektoru 74 (dlq wywoda  perfolen-
  ty).

       esli ustrojstwo imeet bolee odnogo wektora  prerywaniq,  to  dlq
  kavdogo wektora drajwer dolven sodervatx tablicu, sostoq}u`  iz  treh
  slow:
         - adresa wektora prerywaniq;
         - to~ki whoda w podprogrammu obrabotki prerywaniq;
         - zna~eniq slowa sostoqniq processora (PS).

       ~toby ustanowitx zagolowok  drajwera  dlq  mnogowektornogo  ust-
  rojstwa, neobhodimo prosto wyzwatx makrokomandu .DRVTB dwa ili  bolee
  raz. makrokomanda .DRVTB ustanawliwaet tablicu dlq  kavdogo  wektora.
  oni pome}a`tsq w drajwere mevdu makrokomandoj .DRBEG i  makrokomandoj
  .DREND (ili .DRBOT), no do podprogrammy obrabotki  prerywaniq.  wyzow
  |toj makrokomandy osu}estwlqetsq odin raz dlq  kavdogo  wektora  i  w
  opredelennoj posledowatelxnosti.

       makrokomanda .DRVTB imeet sledu`}ij format:

          .DRVTB NAME,VEC,INT[,PS]
   gde

  NAME   - dwuhsimwolxnoe imq ustrojstwa (ono dolvno ukazywatxsq tolxko
           w perwom wyzowe makrokomandy .DRVTB);

  VEC    - q~ejka wektora (ot 0 do 474). perwym wektorom oby~no qwlqet-
           sq DD$VEC. zna~enie dolvno bytx kratno ~etyrem;

  INT    - simwolxnoe imq  (metka)  podprogrammy  obrabotki  prerywaniq
           (ono dolvno bytx opredeleno w drajwere,  naprimer,  makroko-
           mandoj .DRAST), prinima`}ee formu DDINT, gde DD  -  dwuhsim-
           wolxnoe imq ustrojstwa;

  PS     - zna~enie (neobqzatelxnoe), kotoroe movet ispolxzowatxsq  dlq
           opredeleniq mlad{ih ~etyreh  bitow  nowogo  slowa  sostoqniq
           processora w wektore prerywaniq. esli  |tot  argument  opus-
           kaetsq, to ego zna~enie po umol~ani` prinimaetsq rawnym 0.

       nive priweden fragment drajwera PC, kotoryj ispolxzuet dwa  wek-
  tora.

   ;tablica wektorow perfolento~nogo ustrojstwa w/w
          .IF EQ PR11$X   ;ustrojstwo wwoda i wywoda na p/l ?
          .DRVTB  PC,PR$VEC,PRINT    ;tablica dlq ustrojstwa
                                     ;wwoda s p/l
          .DRVTB  ,PP$VEC,PPINT      ;tablica dlq ustrojstwa
                                     ;wywoda na p/l
          .ENDC

                                 - 42 -




  tablica wektorow, sgenerirowannaq makrokomandami .DRVTB,  imeet  sle-
  du`}ij wid:

       .WORD   PR$VEC,PRINT-.,340!0  ;tablica dlq ustrojstwa
                                     ;wwoda s p/l
       .WORD   PP$VEC,PPINT-.,340!0  ;tablica dlq ustrojstwa
                                     ;wywoda na p/l
       .WORD   0                     ;konec tablicy

       kak pokazano w primere, bity prioriteta PS wsegda ustanawliwa`t-
  sq w 7, dave esli argument PS byl opu}en.



       2.2.5. kody uslowij PS



       w makrokomande .DRVTB tolxko bity  kodow  uslowij  argumenta  PS
  qwlq`tsq zna~a}imi. oni mogut bytx poleznymi, esli imeetsq ob}aq to~-
  ka whoda podprogrammy obrabotki prerywaniq w drajwere s dwumq i bolee
  wektorami i neobhodimo opredelitx, po kakomu wektoru wozniklo  prery-
  wanie. naprimer, drajwer PC imeet otdelxnye to~ki whoda w  prerywaniq
  dlq dwuh wektorow i on legko movet  opredelitx  isto~nik  prerywaniq.
  prerywaniq po wektoru 70 idut k podprogramme PRINT:, prerywaniq po 74
  - k PPINT:.

       esli predpolovitx, ~to drajwer PC imeet tolxko odnu to~ku  whoda
  w prerywanie, nazwannu` PCINT:, to neobhodimo ustanowitx kody uslowij
  w PS dlq kavdogo wektora. w |tom slu~ae drajwer  movet  otli~itx,  po
  kakomu wektoru proizo{lo prerywanie, analiziruq nowoe slowo sostoqniq
  processora. naprimer, esli w PS bit "C" rawen 0, to prerywanie  proi-
  zo{lo po wektoru 70, a esli bit "C" ustanowlen w 1, to -  po  wektoru
  74. w sootwetstwii s |tim  uprawlenie  movet  peredawatxsq  razli~nym
  podprogrammam.

       sledu`}ij primer demonstriruet wyzow makrokomandy .DRVTB i zane-
  senie zna~enij w kody uslowij PS:

   ;tablica wektorow perfolento~nogo ustrojstwa w/w
          .IF EQ PR11$h            ;wwod i wywod na p/l ?
          .DRVTB  PC,PR$VEC,PCINT  ;bit "C" sbro{en
          .DRVTB  ,PP$VEC,PCINT,1  ;bit "C" ustanowlen
          .ENDC





       2.3. sekciq iniciacii wwoda/wywoda



       sekciq iniciacii wwoda/wywoda sodervit perwye wypolnqemye  inst-
  rukcii drajwera. nazna~enie |toj sekcii - na~atx pereda~u dannyh.


       pRIME^ANIE. sleduet pomnitx, ~to ishodnyj tekst drajwera  dolven
  bytx napisan w pozicionno-nezawisimom kode.

                                 - 43 -




       kogda   w   programme   wstre~aetsq    sistemnaq    makrokomanda
  wwoda/wywoda (naprimer, .READ  ili  .WRITE),  to  uprawlenie  sna~ala
  perehodit k rezidentnomu monitoru, wyzywa`}emu drajwer  periferijnogo
  ustrojstwa po instrukcii JSR PC. monitor peredaet uprawlenie  {estomu
  slowu drajwera, t.e. perwomu slowu posle zagolowka. on  delaet  wyzow
  kavdyj raz, kogda |lement o~eredi stanowitsq perwym |lementom w  o~e-
  redi drajwera. |ta situaciq woznikaet, kogda  |lement  dobawlqetsq  k
  pustoj o~eredi ili kogda |lement stanowitsq perwym  w  o~eredi,  t.k.
  predydu}ij |lement byl udalen iz o~eredi. esli kakoj-libo argument  w
  wyzowe makrokomandy na wwod/wywod qwlqetsq nedopustimym dlq ustrojst-
  wa (naprimer, nomer bloka sli{kom bolx{oj, nomer  ustrojstwa  sli{kom
  bolx{oj i t.d.), drajwer dolven nemedlenno perejti k sekcii  zawer{e-
  niq wwoda/wywoda i soob}itx o gruboj (neustranimoj) o{ibke.

       iniciaciq wwoda/wywoda wypolnqetsq  w  revime  "sistema"  pri  0
  prioritete processora,  ~to  ozna~aet  newozmovnostx  perekl`~eniq  w
  revim "polxzowatelx", podprogrammy zawer{eniq ne mogut wypolnqtxsq  i
  prerywaniq po 4 i 10 wektoram wyzywa`t ostanow sistemy. w |toj sekcii
  wse registry  predostawlq`tsq  polxzowatel`.  pqtoe  slowo  zagolowka
  drajwera DDCQE sodervit adres tretxego slowa (Q.BLKN)  teku}ego  |le-
  menta o~eredi.

       postanowka w o~eredx wwoda/wywoda garantiruet,  ~to  zaprosy  na
  pereda~u dannyh budut uporqdo~ennymi, t.e. drajwery ustrojstw w  RT11
  ne dolvny bytx reenterabelxnymi, po|tomu razmer drajwera movno  mini-
  mizirowatx putem sme{iwaniq wypolnqemyh instrukcij i  segmentow  dan-
  nyh, a ne razdeleniq ih.

       dlq napisaniq sekcii iniciacii wwoda/wywoda, nazna~enie  kotoroj
  na~atx pereda~u dannyh, rekomenduetsq wypolnitx sledu`}ie {agi:
         - re{itx, skolxko raz drajwer powtorit pereda~u w slu~ae, esli
           wozniknet o{ibka. inicializirowatx s~et~ik  powtornyh  pere-
           da~, pomestiw w nego maksimalxnoe ~islo  pereda~.  sledu`}ij
           primer naglqdno ill`striruet |to:

          MOV    #RKCNT,(PC)+    ;w RKCNT mah ~islo powtorenij
    RETRY:.WORD  0               ;s~et~ik powtorenij

         - pomestitx ukazatelx teku}ego |lementa o~eredi  w  registr  i
           polu~itx nomer ustrojstwa i nomer bloka iz |lementa  o~eredi
           dlq pereda~i. naprimer:

          mOV    RKCQE,R5        ;polu~itx ukazatelx
          mOV    @R5,R2          ;w R2 nomer bloka
          mOVB   Q$UNIT(R5),R4   ;w R4 nomer ustrojstwa
          BIC    #^C<7>,R4

         - wy~islitx adres ustrojstwa dlq pereda~i dannyh  i  sohranitx
           ego w q~ejke pamqti, ~toby pri powtornoj pereda~e ne  wy~is-
           lqtx ego wnowx:

          .
          .
          .
          MOV    R3,(PC)+        ;sohranitx adres w DISKAD
   DISKAD:.WORD  0               ;sohranitx ego zdesx


                                 - 44 -




       pRIME^ANIE. wy{eukazannye {agi wypolnq`tsq odin raz dlq  kavdogo
  zaprosa wwoda/wywoda izdannogo w teku}ej programme. w slu~ae negruboj
  o{ibki |ti {agi mogut bytx powtoreny;
         - opredelitx wid zaprosa (zapisx, ~tenie ili poisk) i zapisatx
           sootwetstwu`}u` emu konstantu w registr komand  i  sostoqnij
           ustrojstwa. |tot {ag fakti~eski na~inaet wwod/wywod.

          CSIE    =       100     ;razre{itx prerywanie
          FNWRITE =       1*2     ;pisatx
          CSGO    =       1
          .
          .
          .
   AGAIN: MOV     RKCQE,R5        ;ukazatx |lement o~eredi
          MOV     #CSIE!FNWRITE!CSGO,R3   ;zapisx dopustima
          MOV     #RKDA,R4                ;ukazatelx registra
                                          ;adresa diska


       posle wypolneniq |tih {agow ustrojstwo budet gotowo k  obrabotke
  prerywaniq. kak tolxko wozniknet  prerywanie  uprawlenie  perejdet  k
  drajweru w to~ke whoda sekcii obrabotki prerywaniq.

          RTS     PC      ;vdatx prerywanie



       2.4. sekciq obrabotki prerywaniq



       posle okon~aniq wwoda/wywoda ili nastupleniq prerywaniq po  zap-
  rosu ot ustrojstwa uprawlenie peredaetsq sekcii obrabotki prerywaniq.
  w dannoj sekcii opredelqetsq, s o{ibkoj  ili  bez  o{ibki  peredalisx
  dannye.

       w na~ale sekcii obrabotki prerywaniq ustanawliwaetsq to~ka whoda
  w podprogrammu obrabotki prerywaniq i  to~ka  annulirowaniq  zaprosa.
  |ti to~ki ustanawliwa`tsq makrokomandoj .DRAST. imenem (po umol~ani`)
  dlq to~ki whoda w podprogrammu obrabotki prerywaniq  qwlqetsq  DDINT,
  gde DD - imq ustrojstwa. pri normalxnyh uslowiqh uprawlenie peredaet-
  sq drajweru w to~ku whoda  podprogrammy  obrabotki  prerywaniq  posle
  nastupleniq prerywaniq. odnako, pri nekotoryh obstoqtelxstwah drajwer
  wyzywaetsq s to~ki annulirowaniq zaprosa. razli~nye situacii  opisany
  nive.



       2.4.1. to~ka annulirowaniq zaprosa



       su}estwuet rqd situacij, kotorye wyzywa`t annulirowanie  zaprosa
  wwoda/wywoda:

         - dwojnoe navatie <CTRL/C>, prerywa`}ee teku}u` programmu;

         - makrokomanda .HRESET;


                                 - 45 -




         - prerywanie po wektoram 4 i  10  ili  l`boe  drugoe  uslowie,
           kotoroe  pe~ataet  soob}enie  o  neustranimoj  o{ibke   tipa
           "?MON-F-".

       pri ukazannyh situaciqh uprawlenie  movet  peredawatxsq  ili  ne
  peredawatxsq drajweru. |to zawisit ot togo, imeetsq li aktiwnyj  |le-
  ment o~eredi. w slu~ae, esli on estx, uprawlenie peredaetsq  drajweru
  w to~ku annulirowaniq zaprosa. w RT11FB i RT11XM uprawlenie peredaet-
  sq drajweru wne zawisimosti ot nali~iq |lementa o~eredi, esli  HNDLR$
  (bit 11) ustanawliwaetsq w slowe sostoqniq ustrojstwa. RT11SJ ignori-
  ruet |tot bit. pri wseh obstoqtelxstwah pri whode w drajwer R4 wsegda
  sodervit nomer annulirowannogo zadaniq.

       pri wozniknowenii annulirowaniq wavno ostanowitx  wwod/wywod  na
  nekotoryh ustrojstwah (simwolxnoorientirowannyh, naprimer,  perfolen-
  to~noe ustrojstwo wwoda/wywoda).  w  |tom  slu~ae  pri  annulirowanii
  drajwer dolven ostanowitx ustrojstwo, ~toby bespolezno ne rashodowatx
  perfolentu. on obespe~iwaet newozmovnostx  prodolveniq  wwoda/wywoda.
  po|tomu drajwery simwolxno-orientirowannyh ustrojstw oby~no  sodervat
  podprogrammu  annulirowaniq;  to~ka  annulirowaniq  zaprosa  qwlqetsq
  prosto instrukciej perehoda k |toj podprogramme. naprimer, drajwer PC
  imeet podprogrammu annulirowaniq,  kotoraq  blokiruet  prerywaniq  na
  perfolento~nom ustrojstwe wwoda/wywoda. zatem drajwer  (~erez  sekci`
  zawer{eniq wwoda/wywoda) peredaet uprawlenie monitoru.

       primer. stroka iz drajwera PC (PRCSR -  |to  slowo  w  drajwere,
  kotoroe ukazywaet CSR):

   PRDONE: CLR   @PRCSR  ;wyjti iz prerywaniq

       drugim ustrojstwam  (naprimer,  diskam)  dolvno  bytx  razre{eno
  zawer{atx operacii wwoda/wywoda dave pri wozniknowenii annulirowaniq.
  popytka annulirowaniq w seredine operacii movet razru{itx dannye  ili
  format informacii na ustrojstwe. bolx{instwo drajwerow dlq takih ust-
  rojstw ignoriru`t annulirowanie. instrukciq RTS PC nahoditsq w  to~ke
  annulirowaniq zaprosa, kotoraq prosto wozwra}aet uprawlenie monitoru.

       esli w drajwere ustrojstwa ispolxzuetsq makrokomanda  .FORK,  to
  pri wozniknowenii annulirowaniq  wypolnqetsq  specialxnaq  procedura.
  neobhodimo pomestitx 0 w F.BADR (adres podprogrammy wetwleniq so sme-
  }eniem 2) w bloke  wetwleniq.  |to  prepqtstwuet  monitoru  wypolnitx
  podprogrammu wetwleniq, ne ime`}u` smysla posle prerywaniq.



       2.4.2. ponivenie  prioriteta  processora  do  prioriteta
              ustrojstwa



       pri wozniknowenii prerywaniq drajwer imeet prioritet 7.  po|tomu
  w podprogrammah obrabotki prerywaniq drajwer sna~ala ponivaet priori-
  tet processora do prioriteta  ustrojstwa,  pozwoliw,  takim  obrazom,
  bolee prioritetnym ustrojstwam prerywatx |tu serwisnu`  podprogrammu.
  kak i w podprogramme obrabotki prerywaniq, wmesto ispolxzowaniq  mak-
  rokomandy .INTEN, neobhodimo  dlq  sniveniq  prioriteta  ispolxzowatx
  makrokomandu .DRAST.

                                 - 46 -




       2.4.3. makrokomanda .DRAST



       makrokomanda .DRAST ispolxzuetsq dlq ustanowki to~ki whoda podp-
  rogrammy obrabotki prerywaniq i wyhoda iz prerywaniq, i dlq  sniveniq
  prioriteta processora. |ta makrokomanda takve ustanawliwaet  globalx-
  nyj simwol $INPTR, kotoryj sodervit ukazatelx podprogrammy  $INTEN  w
  rezidentnom monitore. |tot  ukazatelx  zapolnqetsq  zagruz~ikom  (dlq
  sistemnogo ustrojstwa) ili wo wremq  wypolneniq  makrokomandy  .FETCH
  (komandoj monitora LOAD).

       makrokomanda .DRAST imeet sledu`}ij format:

          .DRAST Name,PRI[,ABO]
   gde

  NAME   - dwuhsimwolxnoe imq ustrojstwa;

  PRI    - prioritet ustrojstwa, t.e.  prioritet,  pri  kotorom  dolvna
           wypolnqtxsq podprogramma obrabotki prerywaniq;

  ABO    - argument (neobqzatelxnyj), kotoryj predstawlqet soboj  metku
           to~ki annulirowaniq zaprosa. esli argument  opu}en,  to  |ta
           makrokomanda generiruet instrukci` RTS PC w to~ke  annuliro-
           waniq  zaprosa,  kotoraq  qwlqetsq  slowom,  neposredstwenno
           pred{estwu`}im to~ke whoda w prerywanie.

       sledu`}ij primer iz drajwera PC demonstriruet wyzow makrokomandy
  .DRAST i kod, kotoryj ona generiruet:

          .DRAST  PP,4,PRDONE

          .GLOBL  $INPTR      ;opredelitx globalxnyj simwol
          BR      PRDONE      ;otwergnutx to~ku whoda
   PPINT::JSR     R5,@$INPTR  ;wyzow p/p obrabotki prerywaniq
          .WORD   ^C<4*^O40>&^O340  ;nowyj prioritet

       nive priwoditsq primer iz drajwera RK, ne ime`}ego  podprogrammy
  annulirowaniq:

          .DRAST  RK,5

          .GLOBL  $INPTR      ;opredelitx globalxnyj simwol
          RTS     PC          ;wozwrat pri annulirowanii
   RKINT::JSR     R5,@$INPTR  ;wyzow p/p obrabotki prerywaniq
          .WORD   ^C<5*^O40>&^O340  ;nowyj prioritet



       2.4.4. rekomendacii po programmirowani` sekcii



       poskolxku nazna~eniem |toj sekcii qwlqetsq wy~islenie  rezulxta-
  tow dejstwiq aktiwnogo ustrojstwa, to dlq |togo neobhodimo wospolxzo-
  watxsq rekomendaciqmi po napisani` sekcii  obrabotki  prerywaniq.  no
  prevde trebuetsq opredelitx, byla li pereda~a zawer{ena, byla li  ona
  ne zawer{ena, ili pri pereda~e woznikla o{ibka.

                                 - 47 -




       esli wo wremq pereda~i woznikla o{ibka, to drajwer dolven  usta-
  nowitx, byla li |ta o{ibka gruboj ili net.

       esli o{ibka grubaq, to drajwer dolven nemedlenno peredatx upraw-
  lenie monitoru ~erez sekci` zawer{eniq wwoda/wywoda.

       esli o{ibka negrubaq, to drajwer movet wypolnitx powtornu` pere-
  da~u. on dolven umenx{itx s~et~ik powtornyh pereda~. zatem  wernutxsq
  w sekci` iniciacii  wwoda/wywoda  dlq  wozobnowleniq  pereda~i.  esli
  popytka pereda~i powtorilasx zadannoe ~islo raz (t.e.  s~et~ik  rawen
  0), to o{ibka rassmatriwaetsq kak grubaq, i drajwer dolven perejti  w
  sekci` zawer{eniq wwoda/wywoda.

       sleduet otmetitx, ~to perehod k urown` wetwleniq  ne  obqzatelen
  dlq obrabotki o{ibki. ispolxzowatx ili net makrokomandu .FORK zawisit
  ot dlitelxnosti wremeni, trebuemogo dlq prowedeniq powtornyh pereda~.
  primenenie makrokomandy .FORK predostawlqet wozmovnostx ispolxzowaniq
  registrow R0-R3, pozwolqq, takim obrazom, ispolxzowatx ob}ie podprog-
  rammy dlq powtornyh pereda~. esli ne ispolxzuetsq makrokomanda .FORK,
  to w nali~ii budut tolxko registry R4 i R5.

       makrokomanda .FORK  wyzywaet  pereda~u  uprawleniq  rezidentnomu
  monitoru. instrukcii, sledu`}ie  za  .FORK,  wypolnq`tsq  na  nulewom
  prioritete (a ne na prioritete ustrojstwa) posle togo, kak budut obs-
  luveny wse drugie prerywaniq, no do togo, kak mogut wypolnqtxsq  dru-
  gie zadaniq ili ih podprogrammy zawer{eniq. instrukcii, sledu`}ie  za
  makrokomandoj .FORK, predstawlq`t soboj osnownoe telo sekcii obrabot-
  ki prerywaniq drajwera w sostoqnii "sistema". (|to takoe  ve  sostoq-
  nie, w kotorom wypolnqetsq sekciq iniciacii  wwoda/wywoda.)  po|tomu,
  l`boj perehod po wektoram 4 i 10 wyzywaet ostanow sistemy.

       sledu`}ij primer iz  drajwera  RK  ill`striruet,  kak  prioritet
  drajwera snivaetsq do urownq wetwleniq dlq powtornoj pereda~i  dannyh
  posle wozniknoweniq negruboj o{ibki. tak kak |tot process movet  bytx
  dlitelxnym, to urowenx wetwleniq  idealxno  podhodit  dlq  wypolneniq
  powtornyh pereda~.

       makrokomanda .FORK i ee ras{irenie:

          .FORK   RKFBLK    ;wyzow .FORK

          JSR     R5,@$FKPTR  ;perejti w monitor s kodom FORK
          .WORD   RKFBLK-.  ;sme}enie w |lemente o~eredi FORK
   RKRETR:CLRB    RETRY+1   ;sbrositx flag
          BR      AGAIN     ;perejti w sekci` iniciacii w/w

       pereda~a s~itaetsq nezawer{ennoj, esli simwoly ili bloki  dannyh
  ostalisx neperedannymi. drajwer  dolven  powtorno  iniciirowatx  ust-
  rojstwo i wyjti po instrukcii RTS PC dlq ovidaniq sledu`}ego prerywa-
  niq.

       kogda pereda~a  zawer{ena,  to  drajwer  movet  prosto  peredatx
  uprawlenie monitoru ~erez sekci` zawer{eniq wwoda/wywoda.

                                 - 48 -




       2.5. sekciq zawer{eniq wwoda/wywoda



       sekciq zawer{eniq wwoda/wywoda  drajwera  obespe~iwaet  pereda~u
  uprawleniq monitoru. pri |tom monitoru soob}aetsq, ~to drajwer wypol-
  nil teku}ij zapros, i monitor movet oswoboditx teku}ij |lement o~ere-
  di. esli drugie sekcii drajwera qwlq`tsq otdelxnymi ego  ~astqmi,  to
  sekciq zawer{eniq wwoda/wywoda fakti~eski qwlqetsq ras{ireniem sekcii
  obrabotki prerywaniq, i razdelenie |tih dwuh sekcij qwlqetsq iskusst-
  wennym. uprawlenie peredaetsq w sekci` zawer{eniq ~erez sekci`  obra-
  botki  prerywaniq.   wypolnenie   perehodit   k   sekcii   zawer{eniq
  wwoda/wywoda w slu~aqh:

         - zawer{eniq pereda~i dannyh;

         - kogda powtoreniq negruboj o{ibki dostigli maksimalxno zadan-
           nogo ~isla;

         - obnaruveniq gruboj  o{ibki.  (sleduet  otmetitx,  ~to  movno
           nemedlenno wypolnitx uslownyj perehod neposredstwenno w  |tu
           sekci` iz sekcii iniciacii wwoda/wywoda pri obnaruvenii gru-
           boj o{ibki.)

       su}estwuet dwa wida o{ibok, kotorye wyzywa`t pereda~u uprawleniq
  w sekci` zawer{eniq wwoda/wywoda:

  grubye (neustranimye) o{ibki
         - o{ibki, kotorye nemedlenno wyzywa`t uslownyj perehod  w  |tu
           sekci`;

  negrubye (ustranimye) o{ibki
         - o{ibki, kotorye is~erpali otwedennoe  im  ~islo  powtorenij,
           ~to wyzywaet uslownyj perehod w |tu sekci` posle  poslednego
           neuda~nogo powtoreniq.

  pri wyhode iz drajwera w oboih slu~aqh proizojdet pereda~a uprawleniq
  ot drajwera k monitoru.

       wo-perwyh, neobhodimo ustanowitx bit gruboj  o{ibki  (bit  0)  w
  slowe  sostoqniq  kanala  (CSW),  wtoroe   slowo   |lementa   o~eredi
  wwoda/wywoda (Q.CSW)  ukazywaet  na  slowo  sostoqniq  kanala.  zatem
  perejti k podprogramme zawer{eniq wwoda/wywoda w rezidentnom  monito-
  re, ispolxzuq dlq |togo perehoda makrokomandu .DRFIN, opisannu` nive.

       sledu`}ij primer priweden iz drajwera RK. on ill`striruet  usta-
  nowku bita gruboj o{ibki drajwerom i perehod k monitoru:

          BIS     #HDERR$,@-(R5)  ;ustanowitx bit gruboj
                                  ;o{ibki (R5 ukazywaet
                                  ;na tretxe slowo |lementa
                                  ;o~eredi; ukazatelx CSW
                                  ;nahoditsq wo wtorom slowe)
          .DRFIN  RK              ;perejti k monitoru

       dlq ustrojstwa, orientirowannogo na bloki  (naprimer,  disk  ili
  gibkij disk), drajwer prosto blokiruet prerywanie i wypolnqet perehod
  k monitoru. kak pokazano wo wtorom primere, makrokomanda .DRFIN gene-
  riruet kod dlq wypolneniq perehoda.

                                 - 49 -




       dlq ustrojstwa, orientirowannogo na slowa ili simwoly (naprimer,
  perfolento~noe ustrojstwo wwoda/wywoda), procedura budet bolee  slov-
  noj. w |tom slu~ae drajwer dolven soob}itx o dostivenii  konca  fajla
  zadani`, kotoroe wystawilo zapros na wwod/wywod.  primerami  uslowij,
  trebu`}ih podobnogo roda soob}enie, qwlq`tsq: otsutstwie lenty w per-
  folento~nom ustrojstwe wwoda/wywoda ili obnaruvenie <CTRL/Z>, wweden-
  nogo s terminala. kogda drajwer  dejstwitelxno  obnaruviwaet  uslowie
  EOF (konec fajla) pri operacii ~teniq, to on dolven ustanowitx  wnut-
  rennij flavok EOF, pomestitx poslednij simwol w bufer polxzowatelq  i
  zatem zapolnitx nulqmi ostatok bufera. zatem drajwer dolven  peredatx
  uprawlenie monitoru, kak esli by metka  EOF  ne  byla  obnaruvena,  a
  prosto byl by zapolnen bufer. drajwer  snowa  ovidaet  wyzowa,  ~toby
  soob}itx polxzowatel` o dostivenii konca fajla.

       drajwer PC ispolxzuet bit gotownosti perfolento~nogo  ustrojstwa
  wwoda/wywoda w registre sostoqniq ustrojstwa  kak  wnutrennij  flavok
  EOF. sledu`}ij primer demonstriruet, kak drajwer PC zapolnqet  nulqmi
  bufer polxzowatelq pri obnaruvenii konca fajla,  ustanawliwaet  wnut-
  rennij flavok EOF i wozwra}aet uprawlenie monitoru:

    PREO1: CLRB    @(R4)+   ;o~istitx ostatok bufera
                            ;(R4 ukazywaet na adres bufera)
           INC     -(R4)    ;uweli~itx adres bufera
           DEC     BYTCNT-BUFF(R4) ; proweritx
           BNE     PREO1    ;wozwratitxsq, esli bolx{e
   PRDONE: CLR     @PRCSR   ;zapretitx prerywanie
   PRFIN: .DRFIN  PR        ;perejti k monitoru

       kogda drajwer snowa wyzywaetsq s  nowym  |lementom  o~eredi  dlq
  drugoj operacii ~teniq, to on  sna~ala  prowerqet  wnutrennij  flavok
  EOF. obnaruviw, ~to on ustanowlen, drajwer ustanawliwaet bit EOF slo-
  wa sostoqniq kanala (bit 13), i wozwra}aet uprawlenie monitoru. rezi-
  dentnyj monitor movet, w kone~nom s~ete, o~i}atx |tot bit pri  wypol-
  nenii sledu`}ego zaprosa na wwod/wywod dlq |togo kanala.

       sledu`}ij primer demonstriruet, kak  drajwer  PC  prowerqet  bit
  gotownosti ustrojstwa, kotoryj on ispolxzuet  kak  wnutrennij  flavok
  EOF, ustanawliwaet bit EOF dlq programmy polxzowatelq,  i  wozwra}aet
  uprawlenie monitoru:

          TST     @#PR$CSR   ;ustrojstwo wwoda s p/l gotowo ?
          BPL     PRGORD        ;da, na~atx pereda~u
          BIS     #EOF$,@-(R4)  ;net, ustanowitx bit EOF
          BR      PRDONE        ;perehod na zawer{enie
          .
          .
   PRDONE:CLR     @PRCSR    ;zapretitx prerywanie
   PRFIN: .DRFIN  PR        ;perejti k monitoru

       |to sogla{enie ob ukazanii konca fajla ukazywaet, ~to simwolxno-
  orientirowannye ustrojstwa wosprinima`tsq programmoj kak ustrojstwa s
  prqmym dostupom, ~to sootwetstwuet nezawisimosti ustrojstw w RT11.

                                 - 50 -




       2.5.1. makrokomanda .DRFIN



       makrokomanda  .DRFIN  prednazna~ena  dlq  generacii  instrukcij,
  kotorye wozwra}a`t uprawlenie monitoru, i ispolxzuetsq w konce sekcii
  zawer{eniq wwoda/wywoda drajwera.  makrokomanda  ob'qwlqet  ukazatelx
  teku}ego |lementa o~eredi globalxnym simwolom i generiruet  pozicion-
  no-nezawisimyj kod dlq perehoda k monitoru. kogda uprawlenie  pereho-
  dit k monitoru, to monitor oswobovdaet teku}ij |lement o~eredi.

       makrokomanda .DRFIN imeet sledu`}ij format:

          .DRFIN NAME

   gde NAME - dwuhsimwolxnoe imq ustrojstwa.

       primery makrokomandy .DRFIN priwedeny w prilovenii.



       2.6. sekciq zawer{eniq drajwera



       nazna~enie sekcii zawer{eniq drajwera - ob'qwitx nekotorye  glo-
  balxnye simwoly i ustanowitx tablicu ukazatelej sme}enij w  rezident-
  nom monitore. ukazateli zapolnq`tsq  zagruz~ikom,  esli  |to  drajwer
  sistemnogo ustrojstwa. oni zapolnq`tsq ina~e, esli drajwer zagruvaet-
  sq makrokomandoj .FETCH ili komandoj monitora LOAD. sekciq zawer{eniq
  takve opredelqet simwol dlq  razmera  drajwera.  makrokomanda  .DREND
  ispolxzuetsq dlq generacii instrukcij zawer{eniq drajwera.



       2.6.1. makrokomanda .DREND



       format makokomandy .DREND sledu`}ij:

          .DREND NAME

   gde NAME - dwuhsimwolxnoe imq ustrojstwa.

       primery makrokomandy .DREND sm. w prilovenii.



       2.6.2. psewdoustrojstwa



       movno napisatx drajwer dlq psewdoustrojstwa (kotoroe  ne  prery-
  waetsq i ne qwlqetsq ustrojstwom s bolx{oj pamqtx`) dlq ispolxzowaniq
  preimu}estw postanowki w sistemnu` o~eredx wwoda/wywoda i, pri  |tom,
  drajwery mogut ostawatxsq rezidentnymi w pamqti. primerami  drajwerow
  dlq psewdoustrojstw qwlq`tsq: NL (nulx-drajwer) i MQ (drajwer o~eredi
  soob}enij).

                                 - 51 -




       wse wypolnqemye instrukcii takogo drajwera dolvny bytx w  sekcii
  iniciacii wwoda/wywoda. poskolxku psewdoustrojstwa ne prerywa`tsq, to
  drajweru ne trebuetsq sekciq obrabotki prerywaniq i wyzow makrokoman-
  dy .DRAST. zatem w drajwere neobhodimo  wyzwatx  makrokomandu  .DRFIN
  dlq zawer{eniq operacii i wozwrata |lementa o~eredi.




                  3. tipowaq shema drajwera ustrojstwa




       nive predstawlena struktura drajwera ustrojstwa.  zdesx  imq  XX
  qwlqetsq imenem ustrojstwa.

   .TITLE  XX      V02.01

   ;      drajwer ustrojstwa XX

   .IDENT  /V02.01/

   .SBTTL  sekciq wwedeniq

   .MCALL  .DRDEF
   .DRDEF  XX,377,WONLY$,0,177514,200

   XXBR    = XX$CSR+2     ;registr bufera XX
   XXIE    = 100          ;bit razre{eniq prerywaniq

   .SBTTL  sekciq zagolowka

           .DRBEG  XX

   .SBTTL  sekciq iniciacii wwoda/wywoda

           MOV     XXCQE,R4       ;R4 ukazywaet na teku}ij
                                  ;|lement o~eredi
           ASL     Q$WCNT(R4)     ;sdelatx slownyj s~et~ik -
                                  ;bajtnym
           BEQ     XXDONE         ;nemedlenno zawer{itx
           BCC     XXERR          ;ustrojstwo tolxko dlq
                                  ;zapisi, zapros na ~tenie
                                  ;newernyj
   RET:    BIS     #XXIE,@#XX$CSR ;razre{itx prerywanie
           RTS     PC             ;vdatx ego

   .SBTTL  sekciq obrabotki prerywaniq

           .DRAST  XX,4,XXDONE
           MOV     XXCQe,R4       ;R4 ukazywaet na teku}ij
                                  ;|lement o~eredi
           BIT     #100200,@#XX$CSR  ;o{ibka ili gotownostx?
           BMI     RET            ;o{ibka - wernutxsq nazad
           BEQ     RET            ;net gotownosti - wyjti i
                                  ;vdatx
           BIC     #XXIE,@#XX$CSR ;zapretitx prerywanie
           .FORK   XXFBLK         ;perejti k f-obrabotke

                                 - 52 -




           ADD     #Q$WCNT,R4     ;adres s~et~ika w R4
   XXNEXT: TSTB    @#XX$CSR       ;gotowo dlq sled. simwola?
           BPL     RET            ;net, wernutxsq nazad
           TST     @R4            ;pe~atatx?
           BEQ     XXDONE         ;uve wse - zawer{itx
           MOVB    @-(R4),R5      ;polu~itx simwol
           INC     (R4)+          ;uweli~itx adres bufera
           INC     @R4            ;uweli~itx s~et~ik simwolow
           BIC     #^C<177>,R5    ;perewod w kod koi-7
           MOVB    R5,@#XXBR      ;pereslatx simwol na ustr-wo
           BR      XXNEXT         ;idti za sledu`}im simwolom

   .SBTTL  sekciq zawer{eniq wwoda/wywoda

   XXERR:  BIS     #HDERR$,@-(R4) ;ustanowitx bit o{ibki w CSW
   XXDONE: BIC     #XXIE,@#XX$CSR ;zapretitx prerywaniq
           .DRFIN  XX             ;perejti k monitoru

   XXFBLK: .WORD   0,0,0,0        ;|lement o~eredi FORK

   .SBTTL  sekciq zawer{eniq drajwera

           .DREND  XX
   .END




                    4. specifi~nye swojstwa drajwera






       4.1. wnutrennqq o~eredx drajwerow



       drajwer  ustrojstwa,  wmesto   ispolxzowaniq   oby~noj   o~eredi
  wwoda/wywoda monitora/drajwera, movet obsluvitx  odnu  ili  bolee  iz
  swoih  sobstwennyh  wnutrennih  o~eredej  iz  newypolnennyh  zaprosow
  wwoda/wywoda. celx obsluviwaniq wnutrennej o~eredi zakl`~aetsq w tom,
  ~to ona pozwolqet  wypolnqtxsq  neskolxkim  operaciqm  na  ustrojstwe
  odnowremenno, t.e. drajwer movet obsluvitx srazu neskolxko zaprosow k
  ustrojstwu.

       primerom qwlqetsq o~eredx soob}enij sistemy, ispolxzu`}aq  draj-
  wer MQ dlq swqzi sistemnyh zadanij. esli odno zadanie posylaet  soob-
  }enie drugomu zadani`, a wtoroe zadanie ne prinimaet  |to  soob}enie,
  to drajwer MQ perehodit w sostoqnie ovidaniq. odnako, esli zapros  na
  priem dlq zadaniq qwlqetsq o~erednym, to drajwer MQ obrabatywaet ego.
  ~toby wypolnitx |to, on prinimaet ishodnyj zapros otprawki iz o~eredi
  monitora/drajwera, ustanawliwaet ego wo wnutrenn``  o~eredx  i  zatem
  obsluviwaet zapros priema.

       w ob}em, drajwer wypolnqet prostu`  proceduru  dlq  ustanowleniq
  wnutrennej   o~eredi.   kogda   dlq   drajwera   wypolnqetsq   zapros
  wwoda/wywoda, to on wsegda qwlqetsq perwym i edinstwennym  w  o~eredi

                                 - 53 -




  monitora/drajwera. kak tolxko postupaet zapros, drajwer ustanawliwaet
  ego wo wnutrenn`` o~eredx i o}i}aet DDCQE i DDLQE dlq "udaleniq" zap-
  rosa iz o~eredi monitora/drajwera.  sleduet  zapomnitx,  ~to  |lement
  o~eredi zanqt, on e}e ispolxzuetsq drajwerom.



       4.1.1. ustanowka wo wnutrenn`` o~eredx



       kogda drajwer wperwye wyzywaetsq dlq wypolneniq zaprosa (s  {es-
  togo slowa), to on dolven proweritx |lement o~eredi na  dopustimostx.
  nedopustimyj zapros wyzywaet neustranimu` o{ibku.

       esli zapro{enaq procedura ne  trebuet  dlitelxnyh  wy~islenij  i
  zawer{aetsq bystro to drajwer wypolnqet ee, a zatem wyzywaet makroko-
  mandu .DRFIN dlq oswobovdeniq |lementa o~eredi i soob}aet  wyzywa`}ej
  programme, ~to operaciq  zawer{ena.  esli  zapro{ena  dlq  procedura,
  kotoraq trebuet wy~islenij i wremeni dlq zawer{eniq, to drajwer pome-
  }aet zapros wo wnutrenn`` o~eredx,  ispolxzuq  slowo  swqzi  |lementa
  o~eredi. slowo swqzi rawno 0, t.k. w  |tom  slu~ae  |lement  qwlqetsq
  perwym i edinstwennym w o~eredi.

       drajwer ustanawliwaet zapros wo wnutrenn`` o~eredx, esli on tre-
  buet kakih-libo wy~islenij i wremeni, i dolven  obsluviwatxsq  asinh-
  ronno. esli zapros qwlqetsq perwym wo wnutrennej o~eredi, to  drajwer
  na~inaet operaci`, ovidaet ee zawer{eniq i zatem wyhodit po  instruk-
  cii RTS PC. esli zapros ne qwlqetsq perwym wo wnutrennej o~eredi,  to
  drajwer ne na~inaet operaci`, a prosto wyhodit po instrukcii RTS PC.



       4.1.2. obsluviwanie   prerywaniq   dlq    drajwerow    s
              wnutrennej o~eredx`



       posle zawer{eniq operacii drajwer perehodit na  to~ku  obrabotki
  prerywaniq DDINT:.  posle  |togo,  w  zawisimosti  ot  obstoqtelxstw,
  wypolnq`tsq razli~nye dejstwiq. esli imeetsq bolx{e odnoj  wnutrennej
  o~eredi, to drajwer opredelqet, kakoj zapros wyzywaet |to prerywanie.
  esli operaciq ne zawer{ena, to drajwer powtorno na~inaet ee i wozwra-
  }aet uprawlenie monitoru. esli pereda~a zawer{ena, to drajwer  dolven
  pomestitx zapros iz wnutrennej o~eredi obratno w o~eredx wwoda/wywoda
  monitora/drajwera, ustanawliwaq DDCQE i DDLQE. w |toj situacii  draj-
  weru neobhodimo wozwratitx zapros w glawnu` o~eredx wwoda/wywoda,  no
  emu takve neobhodimo prodolvatx wypolnenie (a ne wozwra}atx nemedlen-
  no uprawlenie monitoru) dlq prowerki wnutrennej  o~eredi  na  nali~ie
  newypolnennogo zaprosa.

       ~toby wernutx zapros  monitoru,  ne  peredawaq  emu  uprawlenie,
  drajwer dolven wmesto .DRFIN wypolnitx instrukcii, priwedennye w pri-
  mere.

       registr R4 ukazywaet na tretxe slowo |lementa wnutrennej  o~ere-
  di.

                                 - 54 -




          MOV     DDCQE,-(SP)   ;w slu~ae, esli estx |lement
                                ;o~eredi k monitoru/drajweru,
                                ;togda wozmovno prerywanie
          MOV     R4,DDCQE      ;zagruzitx |lement wnutrennej
          MOV     R4,DDLQE      ;o~eredi w o~eredx monitora/
                                ;drajwera
          CLR     Q$LINK(R4)
          MOV     PC,R4         ;perehod
          ADD     #DDCQE-.,R4   ;  na
          MOV     @#54,R5       ;
          JSR     PC,@270(R5)   ;    .DRFIN
          MOV     @SP,DDCQE     ;wosstanowitx sledu`}ij
          MOV     (SP)+,DDLQE   ;|lement o~eredi
          .
          .
          .
   (prowerka wnutrennej o~eredi i zapusk drugoj operacii,
   esli neobhodimo)
          .
          .
          .
          RTS     PC                      ;wozwrat



       4.1.3. procedury   annulirowaniq   dlq    drajwerow    s
              wnutrennej o~eredx`



       nezawisimo ot togo, imeet li  drajwer  zaprosy  wwoda/wywoda  wo
  wnutrennej o~eredi, sistema pods~itywaet ~islo newypolnennyh zaprosow
  wwoda/wywoda dlq kavdogo kanala. w kavdom kanale imeetsq  odin  s~et-
  ~ik; summa newypolnennyh zaprosow wwoda/wywoda nahoditsq w  rezident-
  nom monitore. kogda zadanie annuliruetsq, s~et~iki sbrasywa`tsq.  |to
  proishodit awtomati~eski, esli drajwer strogo polagaetsq  na  o~eredx
  wwoda/wywoda monitora/drajwera.

       odnako, esli drajwer ispolxzuet wnutrenn`` o~eredx wwoda/wywoda,
  to on dolven wypolnqtx proceduru umenx{eniq ~isla newypolnennyh  zap-
  rosow wwoda/wywoda. |ta procedura  garantiruet,  ~to  drajwer  na~net
  wypolnqtxsq pri annulirowanii zadaniq (nezawisimo, budet  li  drajwer
  imetx aktiwnyj |lement o~eredi), esli w drajwere  ustanowlen  bit  11
  (HNDLR$) w slowe sostoqniq ustrojstwa DDSTS pri  wyzowe  makrokomandy
  .DRDEF. w sistemah RT11FB i RT11XM |to wyzowet whod w drajwer na to~-
  ku annulirowaniq pri wseh annulirowaniqh, dave esli ni~ego net w o~e-
  redi monitora/drajwera. (RT11SJ  ignoriruet  |tot  bit,  poskolxku  w
  odnozada~nyh sistemah takoj problemy net.)

       esli whod w drajwer osu}estwlqetsq w to~ke annulirowaniq  zapro-
  sa, to on dolven proweritx swo` wnutrenn``  o~eredx,  prinadlevat  li
  |lementy annulirowannomu zadani`  (sleduet  pomnitx,  ~to  R4  wsegda
  sodervit nomer annulirowannogo zadaniq). drajwer dolven o~i}atx  swo`
  wnutrenn`` o~eredx ot |tih |lementow,  a  takve  wypolnitx  proceduru
  sbrosa s~et~ikow newypolnennyh zaprosow  wwoda/wywoda  monitora.  dlq
  |togo drajwer pome}aet zna~eniq w DDCQE i DDLQE ~em wozwra}aet zapros
  obratno w o~eredx monitora/drajwera. zatem  on  wypolnqet  izmenennu`
  makrokomandu .DRFIN, i powtorqet |tu proceduru dlq  kavdogo  |lementa
  wnutrennej o~eredi, prinadleva}ej zadani`. monitor sam umenx{aet ~is-

                                 - 55 -




  lo newypolnennyh zaprosow wwoda/wywoda.



       4.2. SET-parametry



       komanda klawi{nogo monitora SET pozwolqet izmenqtx  opredelennye
  harakteristiki drajwera ustrojstwa. drajwer dolven nahoditxsq na sis-
  temnom ustrojstwe s imenem DD.SYS (DDX.SYS  dlq  RT11XM),  gde  DD  -
  dwuhsimwolxnoe imq ustrojstwa. naprimer,  |ta  komanda  izmenqet  dlq
  ustrojstwa pe~ati dlinu raspe~atywaemoj stroki:

          SET LP WIDTH=80 (po umol~ani` - 132 simwola)

       drugoj tip komandy SET movet razre{itx ili zapretitx  kaku`-libo
  funkci`. sledu`}ij primer pokazywaet, kak komanda SET movet zastawitx
  sistemu wkl`~atx (ili net) w tekst kombinacii simwolow konca stroki.

          SET LP CR     (peredaet znaki <CR>; po umol~ani`)
          SET LP NOCR   (prepqtstwuet pereda~e znakow <CR>)

       dlq otmeny kakoj-libo funkcii neobhodimo dobawitx "NO"  k  para-
  metru. drajwer ustrojstwa, kotoryj programmiruet polxzowatelx,  movet
  imetx wozmovnostx  primeneniq  razli~nyh  SET-parametrow.  dobawlenie
  SET-parametra wliqet tolxko na fajl drajwera. polxzowatel` net  neob-
  hodimosti delatx kakie-nibudx izmeneniq dlq monitora.  sleduet  otme-
  titx, ~to SET-parametry dopustimy kak dlq sistemnyh ustrojstw, tak  i
  dlq ustrojstw dannyh.



       4.2.1. wypolnenie komandy SET



       komanda SET polnostx` uprawlqetsq tablicej w bloke 0 fajla draj-
  wera i naborom podprogramm (takve w bloke 0), kotorye izmenq`t  inst-
  rukcii i dannye w blokah 0 i 1 drajwera. sleduet pomnitx, ~to blok  0
  obra}aetsq k adresam s 0 po 776-j i ~to zagolowok drajwera na~inaetsq
  w bloke 1 s q~ejki 1000.

       pri wwode komandy SET s terminala monitor analiziruet  komandnu`
  stroku i i}et fajl drajwera DD.SYS (DDX.SYS dlq RT11XM) na  sistemnom
  ustrojstwe. |tot drajwer ne dolven bytx  zagruven  w  sisteme.  zatem
  monitor s~itywaet bloki 0 i 1 drajwera w oblastx bufera USR w pamqtx.
  on skaniruet tablicu w bloke 0 do teh por, poka ne najdet  w  tablice
  zapisx dlq ukazannogo SET-parametra. iz zapisi  w  tablice  on  movet
  opredelitx trebuemu` podprogrammu, prednazna~ennu` dlq  ispolxzowaniq
  |togo parametra i modifikatora, dopuskaemyh |toj podprogrammoj  (nap-
  rimer, "NO" ili ~islowye zna~eniq). zatem monitor wypolnqet  podprog-
  rammu, izmenq`}u` kod w blokah 0  ili  1  drajwera.  kod  w  bloke  1
  qwlqetsq ~astx` tela drajwera i sodervit instrukcii dlq ustanowki  po
  umol~ani` wseh SET-parametrow. posle izmeneniq koda  monitor  zapisy-
  waet bloki 0 i 1 obratno na sistemnoe ustrojstwo. itak, w  rezulxtate
  wypolneniq komandy SET izmenq`tsq nekotorye instrukcii ili  dannye  w
  drajwere.

                                 - 56 -




       4.2.2. format tablicy SET-parametrow



       tablica SET-parametrow sostoit iz serii  ~etyrehslownyh  zapisej
  dlq kavdogo parametra. tablica na~inaetsq s  q~ejki  400  w  bloke  0
  drajwera  i  zakan~iwaetsq  nulewym  slowom.  dlq  generacii  tablicy
  ispolxzuetsq makrokomanda .DRSET.

       perwoe slowo tablicy - |to zna~enie, kotoroe peredaetsq ~erez R3
  w podprogrammu, obsluviwa`}u` dannyj SET-parametr.  |to  slowo  movet
  bytx ~islowym zna~eniem (naprmer, koli~estwo simwolow  w  stroke  dlq
  ustrojstwa pe~ati) ili instrukciej dlq  zameny  drugoj  instrukcii  w
  bloke 1 drajwera. ono ne dolvno bytx rawno 0.

       wtoroe i tretxe slowa tablicy qwlq`tsq imenem parametra  (napri-
  mer, WIDTH ili CR) w kode RADIX-50. w tablice  simwoly  wyrawneny  po
  lewomu kra` i dopolneny probelami.

       mlad{ij bajt ~etwertogo slowa qwlqetsq ukazatelem  podprogrammy,
  kotoraq wypolnqet  modifikaci`  fajla.  star{ij  bajt  ukazywaet  tip
  dopustimogo SET-parametra. ustanowka w bajt zna~eniq  100  ukazywaet,
  ~to trebuetsq desqti~nyj argument. zna~enie 140 pokazywaet, ~to  tre-
  buetsq wosxmeri~nyj argument. ustanowka w bajt zna~eniq 200 ozna~aet,
  ~to dlq |togo parametra dopustim prefiks "NO".

       struktura tablicy SET-parametrow predstawlena na risunke 8.

     ------------------------------------------------------
     !            zna~enie peredaetsq w R3                !
     !                  podprogrammy                      !
     ------------------------------------------------------
     !                                                    !
     !            imq parametra w RADIX-50                !
     !                  (dwa slowa)                       !
     !                                                    !
     ------------------------------------------------------
     !  kod dopustimyh tipow  !      ukazatelx dlq        !
     !       komandy SET      !     podprogrammy SET      !
     ------------------------------------------------------

                          ris. 8



       4.2.3. makrokomanda .DRSET



       dlq  ustanowki  tablicy  parametra   ispolxzuetsq   makrokomanda
  .DRSET. ona wyzywaetsq dlq kavdogo parametra otdelxno, tak ~to wyzowy
  makrokomand po tekstu drajwera sledu`t  odin  za  drugim.  neobhodimo
  ispolxzowatx makrokomandu .DRSET posle makrokomandy .DRDEF, no  pered
  makrokomandoj .DRBEG.

       format makrokomandy .DRSET sledu`}ij

          .DRSET OPTION,VAL,RTN[,MODE]


                                 - 57 -




   gde

  OPTION - imq SET-parametra (naprimer, WIDTH ili CR). imq  movet  bytx
           dlinoj do  {esti  bukwenno-cifrowyh  simwolow  i  ne  dolvno
           sodervatx wstroennyh probelow ili tabulqcij;

  VAL    - parametr, kotoryj budet peredan podprogramme w  registr  R3.
           |to movet bytx  ~islowaq  konstanta,  naprimer,  minimalxnaq
           dlina stroki, ili  wsq  instrukciq,  zakl`~ennaq  w  uglowye
           skobki, dlq zameny su}estwu`}ej w bloke 0 ili 1 drajwera. on
           ne dolven bytx rawen nul`;

  RTN    - imq podprogrammy, kotoraq izmenqet kod w bloke 0 ili 1 draj-
           wera. podprogramma dolvna raspolagatxsq za tablicej paramet-
           ra w bloke 0 i ne dolvna perehoditx za adres 776;

  MODE   - argument (neobqzatelxnyj),  primenqemyj  dlq  ukazaniq  tipa
           SET-parametra. movno ispolxzowatx "NO". dlq desqti~nyh  zna-
           ~enij ispolxzuetsq argument NUM,  dlq  wosxmeri~nyh  -  OCT.
           propusk argumenta MODE ozna~aet, ~to parametr  ne  prinimaet
           ni "NO", ni ~islowogo zna~eniq. movno ob'edinitx "NO" i ~is-
           lowye argumenty. konstrukciq <NO,NUM>  ukazywaet,  ~to  tre-
           buetsq libo "NO", libo desqti~noe zna~enie, no ne oba  wmes-
           te. konstrukciq <NO,OCT> ukazywaet, ~to trebuetsq libo "NO",
           libo wosxmeri~noe zna~enie. propusk argumenta MODE ozna~aet,
           ~to 0 zapisywaetsq w star{ij bajt poslednego slowa tablicy.

       perwaq makrokomanda .DRSET wydaet direktiwu .ASECT i  ustanawli-
  waet s~et~ik q~eek w 400 dlq na~ala tablicy. makrokomanda takve zapi-
  sywaet nulx w konce tablicy. tak kak makrokomanda raspolagaet s~et~ik
  q~eek w konce tablicy, to neobhodimo w drajwere pomestitx podprogram-
  my dlq izmeneniq  koda  neposredstwenno  posle  wyzowow  makrokomandy
  .DRSET. |to garantiruet, ~to oni budut  nahoditxsq  w  nulewom  bloke
  drajwera.



       4.2.4. podprogrammy dlq izmeneniq drajwera



       dlq kavdogo SET-parametra drajwer trebuet swo` podprogrammu. ona
  qwlqetsq edinoj kak dlq ustanowki SET-parametra, tak i dlq otkaza  ot
  |toj funkcii (ispolxzowanie "NO" s |tim parametrom). nazna~enie podp-
  rogrammy - izmenqtx kod w tele drajwera,  w  zawisimosti  ot  komandy
  monitora SET, nabrannoj na sistemnom terminale.

       podprogrammy dolvny sledowatx neposredstwenno za tablicej  para-
  metra i nahoditxsq w bloke 0 (posle tablicy i nive adresa 1000).  kod
  w tele drajwera, kotoryj izmenqet podprogrammy, dolven bytx w bloke 1
  drajwera w predelah perwyh 256 (desqti~nyh) slow.

       imq podprogrammy -  |to  ee  to~ka  whoda  (po  umol~ani`).  ona
  qwlqetsq to~koj whoda dlq parametrow, prinima`}ih ~islowoe  zna~enie,
  ne prinima`}ih ni ~islowogo zna~eniq, ni "NO", i kotorye mogut prini-
  matx prefiks "NO", no ne ime`t  ego.  to~koj  whoda  dlq  parametrow,
  kotorye mogut prinimatx i ime`t "NO", qwlqetsq to~ka whoda po umol~a-
  ni` pl`s 4.


                                 - 58 -




       na whode w podprogrammu, dlq wseh parametrow R3  sodervit  "VAL"
  tablicy parametra i o~i}ennyj bit perenosa. pomimo |togo, esli ~islo-
  wye zna~eniq dopustimy dlq |togo parametra, to R0  sodervit  ~islowye
  zna~eniq iz stroki komandy SET.

       podprogramma movet ukazatx, ~to komanda monitora qwlqetsq  nedo-
  pustimoj, i pri |tom  ustanowitx  bit  "C".  naprimer,  komanda  "SET
  WIDTH" ne pozwolqet  ustanawliwatx  dlinu  stroki  ustrojstwa  pe~ati
  menx{e 30 simwolow. esli  podprogramma  SET-parametra  wypolnilasx  s
  o{ibkoj, to monitor pe~ataet soob}enie ob o{ibke i ne zapisywaet blo-
  ki 0 i 1. itak, prowerka movet bytx sdelana posle izmeneniq koda blo-
  ka 1.

       esli polxzowatelx dobawil podprogrammy dlq kavdogo SET-parametra
  drajwera, to movno ispolxzowatx sledu`}u`  stroku,  ~toby  ubeditxsq,
  nahoditsq li podprogramma w trebuemyh granicah:

       .IIF GT,<.-1000>, .ERROR.-1000  ;kod dlq SET-parametra
                                       ;sli{kom bolx{oj

       |ta sekciq zawer{aetsq direktiwoj .ASECT, posle kotoroj  polxzo-
  watelx ustanawliwaet s~et~ik q~eek w  1000.  zatem  movno  prodolvatx
  pisatx drajwer, na~inaq s makrokomandy .DRBEG, kotoraq  ustanawliwaet
  zagolowok drajwera.



       4.2.5. primery SET-parametrow



       sledu`}ie primery, wzqtye iz drajwera ustrojstwa pe~ati, pokazy-
  wa`t primenenie SET-parametrow.

          .SET LP WIDTH = 80
          .SET LP CR
          .SET LP NOCR

       drajwer wyzywaet makrokomandu .DRSET dlq ustanowki tablic  para-
  metrow dlq dwuh parametrow "WIDTH" i "CR".

       perwaq komanda ozna~aet, ~to ustanawliwaetsq parametr ustrojstwa
  pe~ati "WIDTH", ~to 30 (desqti~noe) qwlqetsq zna~eniem po  umol~ani`,
  ~to "O.WIDTH" qwlqetsq podprogrammoj, kotoraq izmenqet kod dlq  para-
  metra "WIDTH", i ~to "WIDTH" prinimaet ~islowoj argument:

          .DRSET WIDTH,30.,o.WIDTH,NUM

       sledu`}aq komanda ozna~aet, ~to  ustanawliwaetsq  parametr  "CR"
  ustrojstwa pe~ati, ~to instrukciq "NOP" dolvna bytx peredana podprog-
  ramme, ~to "O.CR" qwlqetsq imenem podprogrammy, kotoraq izmenqet  kod
  dlq |togo parametra, i ~to parametr "CR" movet bytx ukazan s "NO":

          .DRSET CR,NOP,O.CR,NO

       dwa wyzowa makrokomandy generiru`t sledu`}u` tablicu:

   .ASECT
   . = 400

                                 - 59 -




          .WORD   30.             ;minimalxnaq dlina stroki
          .RAD50  \WIDTH \        ;imq parametra
          .BYTE   <O.WIDTH-400>/2
          .BYTE   100
          NOP                     ;instrukciq dlq pereda~i
          .RAD50  \CR    \        ;imq parametra
          .BYTE   <O.CR-400>/2
          .BYTE   200
          .WORD   0               ;konec tablicy

       podprogrammy dlq obrabotki |tih  SET-parametrow  sledu`t  nepos-
  redstwenno za tablicej. nive priwedeny wozmovnye  teksty  podprogramm
  O.WIDTH i O.CR.

   O.WIDTH: MOV    R0,COLCNT    ;peredwinutx zna~enie
            MOV    R0,RSTC+2    ;w dwe konstanty
            CMP    R0,R3        ;srawnitx nowoe zna~enie
                                ;s minimalxnoj dlinoj 30.
            RTS    PC           ;wernutxsq, ustanowitx bit "C"

       sleduet otmetitx, ~to instrukcii w podprogramme O.WIDTH izmenq`t
  dannye w dwuh q~ejkah w bloke 1 drajwera.

   O.CR:    MOV    (PC)+,R3     ;wwesti ukazatelx dlq "CR",
                                ;peredwinutx adres sledu`}ej
                                ;stroki w R3
            BEQ    RSTC-CROPT+. ;nowaq instrukciq
            MOV    R3,CROPT     ;wwesti ukazatelx dlq "NOCR"
                                ;(O.CR+4); peredwinutx "NOP"
                                ;ili predyd. stroku na CROPT
            RTS    PC           ;wozwrat

       podprogramma O.CR imeet dwe to~ki whoda: dlq parametra CR  podp-
  rogramma wwoditsq w to~ke O.CR; dlq parametra NOCR ona wwoditsq  -  w
  O.CR+4. sleduet otmetitx sledu`}ee:

         - podprogramma wypolnqet zamenu instrukcii w bloke 1 odnoj  iz
           dwuh instrukcij;

         - instrukciq NOP peresylaetsq k CROPT,  esli  wybran  parametr
           NOCR;

         - esli wybran CR, to instrukciq "BEQ RSTC-CROPT+." peresylaet-
           sq k CROPT.

       takaq konstrukciq instrukcii BEQ neobhodima, poskolxku  uslownyj
  perehod assembliruetsq w drugoj q~ejke, a ne w  toj,  w  kotoroj  ona
  wypolnqetsq. wo wseh podprogrammah instrukciq perehoda dolvna ispolx-
  zowatx sledu`}u` konstrukci` dlq generacii prawilxnogo adresa:

          BR      A-B+.
   gde

  a      - nazna~enie instukcii perehoda;

  B      - adres instrukcii perehoda;

  .      - teku}ij s~et~ik q~eek.


                                 - 60 -




       oby~no, tolxko podprogrammy dlq  parametrow,  kotorye  prinima`t
  "NO", ispolxzu`t |ti instrukcii perehoda.

       i, nakonec, sleduet obratitx wnimanie:

         - na tekst sekcii  obrabotki  prerywaniq,  kotoraq  izmenqetsq
           tolxko ~to rassmotrennymi podprogrammami;

         - ~to kod, podleva}ij izmeneni`, dolven bytx raspoloven w per-
           wom bloke drajwera w perwyh 256 (desqti~nyh) slowah.

          .
          .
   COLCNT:.WORD   COLSIZ    ;pe~atatx ostaw{ejsq stroki
          .
          .
   CHRTST:CMPB    R5,#HT    ;|ta <taB>?
          BEQ     TABSET    ;da, sbrositx <taB>
          CMPB    R5,#LF    ;|to <LF>?
          BEQ     RSTC      ;da, wosstanowitx s~et~ik strok
          CMPB    R5,#CR    ;|to <CR>?
   CROPT: NOP               ;"NOP", esli "NOCR", ina~e (esli
                            ;<CR>) ispolxzowatx
                            ;"BEQ RSTC-CROPT+." iz
                            ;podprogrammy SET w bloke 0
          CMPB    R5,#FF    ;|to <FF>?
          BNE     IGNORE    ;net, |to ne pe~atatx
   RSTC:  MOV     #COLSIZ,COLCNT  ;powtorno inicializirowatx
                                  ;s~et~ik strok






       4.3. tajm-aut wwoda/wywoda ustrojstwa



       drajwer  movet  peredatx  uprawlenie  podprogramme   zawer{eniq,
  ispolxzuq neobqzatelxnoe swojstwo tajm-auta ustrojstwa, esli prerywa-
  nie ne wozniklo w ukazannyj wremennoj interwal. drajwer movet  wypol-
  nqtx podprogrammu zawer{eniq po iste~enii ukazannogo interwala wreme-
  ni bez ispolxzowaniq makrokomandy .SYNCH i soprowovda`}ej  ee  poten-
  cialxnoj zadervki.

       pri generacii sistemy  movno  zadatx  ispolxzowanie  wozmovnosti
  tajm-auta dlq  drajwera  ustrojstwa.  |ta  wozmovnostx  awtomati~eski
  wkl`~aetsq w sistemu pri wybore mnogoterminalxnoj raboty sistemy  ili
  poddervki mulxtipleksora mpd-a.  w  drugih  slu~ah,  esli  neobhodimo
  ispolxzowatx |to swojstwo w drajwere, nuvno specialxno zadatx ego  wo
  wremq generacii sistemy. ono takve ispolxzuetsq dlq sistemy teleobra-
  botki dannyh (todas).

       w sisteme imeetsq dwe makrokomandy, s pomo}x` kotoryh  obespe~i-
  waetsq ispolxzowanie w drajwere tajm-auta ustrojstwa. |to makrokoman-
  dy - .TIMIO i .CTIMIO. ih movno ispolxzowatx tolxko w drajwerah  ust-
  rojstw. pri assemblirowanii fajla drajwera  s  TIM$IT=1  makrokomanda
  .DRDEF wydaet direktiwu .MCALL dlq makrokomand .TIMIO i .CTIMIO.

                                 - 61 -




       4.3.1. makrokomanda .TIMIO



       makrokomanda .TIMIO ispolxzuetsq w sekcii iniciacii wwoda/wywoda
  drajwera dlq zapuska podprogrammy zawer{eniq ~erez zadannyj  interwal
  wremeni. makrokomandu .TIMIO movno ispolxzowatx w l`bom meste drajwe-
  ra za iskl`~eniem urownq obrabotki prerywaniq. odnako, esli neobhodi-
  mo primenitx ee w sekcii obrabotki prerywaniq, to predwaritelxno nuv-
  no ispolxzowatx makrokomandu .FORK.

       makrokomanda .TIMIO planiruet wypolnenie podprogrammy zawer{eniq
  posle iste~eniq ukazannogo interwala wremeni. podprogramma zawer{eniq
  wypolnqetsq w kontekste zadaniq,  ukazannogo  w  bloke  tajmera.  pod
  uprawleniem RT11XM podprogramma zawer{eniq  wypolnqetsq  s  sistemnym
  otobraveniem, poskolxku ona qwlqetsq  ~astx`  podprogrammy  obrabotki
  prerywaniq. kak oby~no, w podprogrammah zawer{eniq registry R0  i  R1
  predostawlq`tsq dlq ispolxzowaniq. pri pereda~e  uprawleniq  podprog-
  ramme zawer{eniq R0 sodervit posledowatelxnyj nomer zaprosa  w  tajm-
  aute.

       poskolxku polxzowatelx movet  perejti  k  urown`  wetwleniq  (F-
  obrabotke) dlq wyda~i makrokomandy .TIMIO  ili  .CTIMIO,  to  drajwer
  dolven blokirowatx prerywaniq ustrojstwa pered  wyda~ej  makrokomandy
  .FORK ili dolven bytx prawilxno zaprogrammirowan wo izbevanie problem
  reenterabelxnosti. sleduet pomnitx, ~to polxzowatelx ne movet powtor-
  no ispolxzowatx blok tajmera, poka ne isteklo nazna~ennoe wremq i  ne
  wwedena podprogramma zawer{eniq, ili  ne  budet  annulirowan  |lement
  tajmera pri uspe{nom zawer{enii makrokomandy.

       format makrokomandy sledu`}ij:

          .TIMIO TBK,HI,LO
   gde

  TBK    - adres bloka tajmera, semislownogo |lementa o~eredi.  neobho-
           dimo zametitx, ~to ne sleduet ispolxzowatx simwol "#"  pered
           TBK;

  HI     - konstanta, ukazywa`}aq star{ee slowo dwuhslownogo  interwala
           wremeni;

  LO     - konstanta, ukazywa`}aq mlad{ee slowo dwuhslownogo  interwala
           wremeni.

       format bloka tajmera pokazan w tabl. 8

                                                   tABLICA 8
                   format bloka tajmera
   ----------------------------------------------------------
   sme}enie !  imq   !  agent !          sodervanie
   ----------------------------------------------------------
       0    ! C.HOT  ! .TIMIO ! star{ee slowo wremeni
       2    ! C.LOT  ! .TIMIO ! mlad{ee slowo wremeni
       4    ! C.LINK ! monitor! swqzx so sledu`}im |lementom
            !        !        ! o~eredi; 0 ukazywaet, ~to
            !        !        ! o~eredi net
       6    ! C.JNUM ! polxzo-! nomer zadaniq polxzowatelq;
            !        ! watelx ! polu~itx ego iz |lementa

                                 - 62 -




                                         pRODOLVENIE TABL. 8
   ----------------------------------------------------------
   sme}enie !  imq   !  agent !          sodervanie
   ----------------------------------------------------------
            !        !        ! o~eredi
      10    ! C.SEQ  ! polxzo-! posledowatelxnyj nomer zaprosa
            !        ! watelx ! tajmera. dopustimyj diapazon
            !        !        ! dlq posledowatelxnyh nomerow
            !        !        ! ot 177400 do 177477
      12    ! C.SYS  ! monitor! -1
      14    ! C.COMP ! polxzo-! adres podprogrammy zawer{eniq
            !        ! watelx ! dlq wypolneniq pri
            !        !        ! wozniknowenii tajm-auta.
            !        !        ! monitor obnulqet |to slowo
            !        !        ! pri wyzowe podprogrammy
            !        !        ! zawer{eniq, ukazywaq, ~to
            !        !        ! blok tajmera predostawlqetsq
            !        !        ! dlq powtornogo ispolxzowaniq

       hotq makrokomanda .TIMIO peresylaet star{ee i mlad{ee slowa wre-
  meni w blok tajmera dlq polxzowatelq, on dolven prawilxno ukazatx  ih
  w wyzowe makrokomandy. interwal wremeni wyravaetsq w tikah. esli sis-
  tema funkcioniruet s 50-ciklowoj ~astotoj, to  |to  sootwetstwuet  50
  (desqti~noe) tikam w sekundu. su}estwuet i 60 tik/s  pri  60-ciklowoj
  ~astote. zna~eniq wremeni dlq 60-ciklowoj ~astoty pokazany w kwadrat-
  nyh skobkah "[...]" neposredstwenno posle zna~eniq ~astoty 50 gc.

       mlad{ee slowo wremeni prinimaet zna~eniq wkl`~itelxno  do  65535
  tikow, ~to po~ti rawno 1310 [1092] sek ili 21,8 [18,2] min. esli tre-
  buetsq w makrokomande .TIMIO ukazatx interwal wremeni 21,8 [18,2] min
  ili menx{e, neobhodimo pomestitx 0 w argument  HI  i  ~islo  tikow  w
  argument LO.

       esli trebuetsq opredelitx interwal wremeni  bolx{e  21,8  [18,2]
  min, to neobhodimo pomnitx o star{em slowe kak o slowe perenosa. kav-
  dyj interwal dlitelxnostx` 21,8 [18,2] min wyzywaet perenos edinicy w
  star{ee slowo. itak, ~toby ukazatx interwal nemnogo bolx{e, ~em  21,8
  [18,2] min neobhodimo, ~toby argument HI byl rawen 1, a argument LO -
  0. dlq zadaniq 43,6 [36,4] min zadatx 2 w argumente HI i 0 w argumen-
  te LO i t.d. poskolxku dwuhslownoe wremq pozwolqet ukazywatx do 65565
  edinic po 21,8 [18,2] minut kavdaq, to samyj bolx{oj interwal,  koto-
  ryj movet ukazatx polxzowatelx, rawen priblizitelxno 2,7 [2,3] godam.

       edinstwennye slowa informacii, kotorye polxzowatelx dolven usta-
  nowitx sam w bloke tajmera  -  |to  nomer  zadaniq,  posledowatelxnyj
  nomer i adres podprogrammy zawer{eniq. nomer zadaniq  movno  polu~itx
  iz teku}ego |lementa o~eredi i pereslatx ego w blok tajmera.  polxzo-
  watelx dolven priswoitx posledowatelxnyj nomer w predelah  ot  177400
  do 177477. nomer zadaniq i posledowatelxnyj nomer pereda`tsq podprog-
  ramme zawer{eniq pri ee wyzowe. adres podprogrammy zawer{eniq neobho-
  dimo pereslatx w sedxmoe slowo bloka  tajmera  pozicionno-nezawisimym
  sposobom.

       makrokomanda .TIMIO ras{irqetsq sledu`}im sposobom:

          .TIMIO  TBK,HI,LO

          JSR     R5,@$TIMIT     ;ukazatelx konca drajwera
          .WORD   TBK-.

                                 - 63 -




          .WORD   0       ;kod dlq .TIMIO
          .WORD   HI      ;star{aq ~astx interwala wremeni
          .WORD   LO      ;mlad{aq ~astx interwala wremeni



       4.3.2. makrokomanda .CTIMIO



       pri  wozniknowenii  uslowiq,  kotoroe  predusmotreno  drajwerom,
  neobhodimo wydatx zapros na otmenu tajm-auta, blokiru`}ij podprogram-
  mu zawer{eniq. dlq otmeny zaprosa tajm-auta w  drajwere  ispolxzuetsq
  makrokomanda .CTIMIO. wypolnenie ee dolvno proishoditx w revime  sis-
  temy. sleduet pomnitx, ~to pered ispolxzowaniem makrokomandy  .CTIMIO
  na urowne obrabotki prerywaniq neobhodimo  ispolxzowatx  makrokomandu
  .FORK.

       naprimer, drajwer LP predostawlqet wozmovnostx proweritx,  naho-
  ditsq li ustrojstwo pe~ati w awtonomnom revime. kogda programma  zap-
  ra{iwaet operaci`  wwoda/wywoda,  to  sekciq  iniciacii  wwoda/wywoda
  nemedlenno razre{aet prerywanie. zatem  sekciq  obrabotki  prerywaniq
  prowerqet bit o{ibki ustrojstwa. pri  ustanowlennom  bite  ustrojstwo
  pe~ati nerabotosposobno,  i  drajwer  pe~ataet  soob}enie,  organizuq
  dwuhminutnyj tajm-aut  s  pomo}x`  makrokomandy  .TIMIO,  i  peredaet
  uprawlenie monitoru po instrukcii RTS PC dlq ovidaniq drugogo  prery-
  waniq. esli prerywanie ne woznikaet w predelah dwuh minut,  to  podp-
  rogramma zawer{eniq tajmera  pe~ataet  wtoroe  soob}enie  ob  o{ibke,
  ustanawliwaet drugoj dwuhminutnyj  tajm-aut.  i  peredaet  uprawlenie
  monitoru po instrukcii RTS PC dlq ovidaniq sledu`}ego prerywaniq.

       esli o~i}en bit o{ibki, drajwer wydaet makrokomandu .CTIMIO  dlq
  otmeny wremennogo ovidaniq.

       esli interwal wremeni uve istek (ustrojstwo nahoditsq ne w tajm-
  aute), to makrokomanda .CTIMIO ne wypolnitsq. budet ustanowlen bit C.

       format wyzowa makrokomandy .CTIMIO sledu`}ij:

          .CTIMIO TBK

   gde

  TBK    - adres semislownogo bloka tajmera. |to tot ve wremennoj blok,
           ispolxzowannyj w makrokomande .TIMIO.

       makrokomanda .CTIMIO ras{irqetsq sledu`}im obrazom:

          .CTIMIO

          JSR     R5,@$TIMIT      ;ukazatelx konca drajwera
          .WORD   TBK-.
          .WORD   1               ;kod dlq .CTIMIO

       sleduet otmetitx, esli zadanie annuliruetsq, i drajwer  wwoditsq
  w to~ke annulirowaniq  zaprosa,  to  neobhodimo  nemedlenno  otmenitx
  newypolnennye zaprosy tajmera. esli podprogramma zawer{eniq  drajwera
  uve wwedena, to neobhodimo podovdatx, poka ona wypolnitsq.

                                 - 64 -




       4.3.3. primenenie tajm-auta ustrojstw



       obespe~enie tajm-auta ustrojstwa  podderviwaetsq  sistemoj  RT11
  tolxko w nekotoryh  slu~aqh.  su}estwuet  rqd  uslowij,  dlq  kotoryh
  dopuskaetsq ispolxzowanie makrokomand,  rabota`}ih  s  tajmerom.  pri
  napisanii polxzowatelem drajwera ustrojstwa sleduet opredelitx, neob-
  hodimo li ispolxzowanie takih makrokomand.



       4.3.3.1. mnogoterminalxnoe obsluviwanie



       rezidentnoe mnogoterminalxnoe obsluviwanie w RT11, kotoroe  pod-
  derviwaet mulxtipleksor mpd-a, ispolxzuet dlq prowerki sostoqniq dis-
  tancionnyh kommutiruemyh linij tajm-aut ustrojstwa. zagruz~ik  zapus-
  kaet testowu` podprogrammu dlq prowerki mulxtipleksora na izmenenie w
  sostoqnii. pri wozniknowenii izmeneniq programmnoe obespe~enie obslu-
  viwa`}ee terminaly predprinimaet sootwetstwu`}ie dejstwiq:  ono  libo
  podkl`~aet, libo otkl`~aet lini`. poslednqq instrukciq testowoj podp-
  rogrammy wydaet makrokomandu .TIMIO dlq zapuska polusekundnogo tajme-
  ra. podprogramma zawer{eniq tajmera powtorno zapuskaet testowu` podp-
  rogrammu po iste~enii polsekundy.



       4.3.3.2. tipi~naq procedura tajmera dlq drajwera diska



       drajwer diska movet primenitx tajm-aut dlq l`boj operacii s dis-
  kom. nazna~enie podprogrammy tajmera  -  otmenitx  operaci`,  kotoraq
  protekaet sli{kom dolgo ili powtorno zapustitx ee. esli  operaciq  ne
  zawer{aetsq w predelah ukazannogo otrezka wremeni, |to ozna~aet,  ~to
  proizo{la o{ibka ~teniq diska.

       sekciq iniciacii  wwoda/wywoda  ustanaliwaet  tajmer,  ispolxzuq
  makrokomandu .TIMIO. zatem drajwer na~inaet operaci`, kotoru`  zapro-
  silo zadanie: ~tenie, zapisx ili poisk. drajwer  peredaet  uprawlenie
  monitoru po instrukcii RTS PC i ovidaet prerywaniq ot ustrojstwa.

       esli woznikaet prerywanie do iste~eniq ukazannogo interwala wre-
  meni, to drajwer otmenqet .TIMIO i wypolnqet oby~nu` prowerku rezulx-
  tatow pereda~i. oby~no, drajwer libo perehodit na  urowenx  wetwleniq
  dlq powtornogo na~ala neprawilxnoj operacii, libo peredaet uprawlenie
  monitoru s pomo}x` makrokomandy .DRFIN dlq udaleniq teku}ego |lementa
  o~eredi.

       esli prerywanie ne woznikaet w predelah zadannogo interwala wre-
  meni, to na~inaet wypolnqtxsq  podprogramma  zawer{eniq  tajmera.  ee
  perwym dejstwiem dolvno bytx wosproizwedenie prerywaniq.  |to  dubli-
  ruet obstanowku drajwera posle istinnogo  prerywaniq  i  garantiruet,
  ~to stek imeet neobhodimu` informaci`. zatem podprogramma  zawer{eniq
  tajmera dejstwuet tak, kak esli by ustrojstwo bylo prerwano,  no  pri
  pereda~e byla o{ibka. podprogramma zawer{eniq tajmera  dlq  okon~aniq
  obrabotki prosto perehodit w  sekci`  obrabotki  prerywaniq  drajwera

                                 - 65 -




  ustrojstwa.

       podprogramma zawer{eniq tajmera  dolvna  ispolxzowatx  sledu`}ie
  instrukcii dlq modelirowaniq prerywaniq i whoda w revim sistemy:

          MOV     @SP,-(SP)  ;organizowatx stek
          CLR     2(SP)      ;imitirowatx prerywanie PS=0
          .MTPS   #340       ;ustanowitx prioritet 7
          .INTEN  0,PIC      ;wwesti revim sistemy

       posle whoda drajwera w revim sistemy on predprinimaet sootwetst-
  wu`}ee dejstwie kak rezulxtat tajm-auta. drajwer  movet  snowa  popy-
  tatxsq wypolnitx operaci`. ~toby sdelatx |to, on umenx{aet s~et  pow-
  tornyh popytok, perehodit k urown` wetwleniq  i  peredaet  uprawlenie
  sekcii iniciacii wwoda/wywoda. w sekcii iniciacii ustanawliwaet  dru-
  goj tajmer, na~inaetsq powtornaq  pereda~a  i  uprawlenie  peredaetsq
  monitoru po instrukcii RTS PC dlq ovidaniq sledu`}ego prerywaniq.

       esli drajwer opredelqet, ~to proizo{la neustranimaq  o{ibka,  to
  on wypolnqet taku` ve proceduru, kak esli by ~islo powtorenij pereda-
  ~i bylo is~erpano. w |tom slu~ae drajwer ustanawliwaet bit neustrani-
  moj o{ibki w slowe sostoqniq kanala i s pomo}x`  makrokomandy  .DRFIN
  peredaet uprawlenie monitoru s udaleniem teku}ego |lementa o~eredi.


       pRIME^ANIE. do togo, kak drajwer  wypolnit  makrokomandu  .DRFIN
  dlq udaleniq teku}ego |lementa o~eredi, on dolven otmenitx wse makro-
  komandy tajmera, kotorye e}e ne wypolnilisx.



       4.3.3.3. primer drajwera ustrojstwa pe~ati



       nive priwoditsq primer, kotoryj sostoit iz  fragmentow  drajwera
  ustrojstwa pe~ati RT11, izmenennyj dlq ispolxzowaniq obespe~eniq taj-
  mera, ~toby proweritx rabotu ustrojstwa w awtonomnom revime.

       sekciq iniciacii wwoda/wywoda drajwera na~inaet pereda~u (razre-
  {aet prerywaniq), sekciq obrabotki prerywaniq drajwera prowerqet  bit
  o{ibki w CSR. pri nali~ii o{ibki uprawlenie perehodit k  podprogramme
  OFFLIN, kotoraq wyzywaet makrokomandu .SYNCH dlq whoda w revim  polx-
  zowatelq, pe~ataet soob}enie ob o{ibke na sistemnom terminale i orga-
  nizuet dwuhminutnyj tajm-aut.  zatem  drajwer  wozwra}aet  uprawlenie
  monitoru po instrukcii RTS PC i ovidaet prerywanie ustrojstwa.

       esli nastupaet prerywanie ot  ustrojstwa,  to  |to  zna~it,  ~to
  neisprawnostx ustrojstwa likwidirowana. drajwer otmenqet  tajm-aut  i
  e}e raz prowerqet bit o{ibki. esli net o{ibki, to drajwer  prodolvaet
  oby~noe wypolnenie. pri nali~ii o{ibki  drajwer  peredaet  uprawlenie
  podprogramme OFFLIN. esli prerywanie ne  woznikaet  w  predelah  dwuh
  minut, to na~inaet wypolnqtxsq podprogramma zawer{eniq  tajmera.  ona
  pe~ataet soob}enie ob o{ibke, ustanawliwaet drugoj dwuhminutnyj tajm-
  aut i wozwra}aet uprawlenie monitoru po instrukcii RTS PC dlq  ovida-
  niq prerywaniq.

               primer drajwera ustrojstwa pe~ati


                                 - 66 -




   ;  sekciq iniciacii wwoda/wywoda

          .DRBEG  LP
          MOV     LPCQE,R4  ;R4 ukazywaet na teku}ij |lement
                            ;o~eredi
          ASL     6(R4)     ;preobrazowatx slownyj s~et~ik w
                            ;bajtnyj
          BCC     LPERR     ;zapros na ~tenie nedopustim
          BEQ     LPDONE    ;nemedlenno zawer{itx poisk
   RET:   BIS     #100,@LPS ;ustanowitx prerywanie, na~atx
                            ;pereda~u
          RTS     PC

   ; sekciq obrabotki prerywaniq

   .ENABL  LSB

          .DRAST  LP,4,LPDONE
          TST     TICMPL    ;|lement tajmera aktiwnyj ?
          BEQ     1$        ;net
          .CTIMIO TIMBLK    ;da, udalitx ego
          BCS     1$        ;o{ibka
          CLR     TICMPL    ;o~istitx |lement tajmera
   1$:    MOV     LPCQE,R4  ;R4 ukazywaet na teku}ij |lement
                            ;o~eredi
          TST     @(PC)+    ;o{ibka ?
   LPS:   .WORD   LP$CSR    ;registr sostoqniq LP
   ERROPT:BMI     OFFLIN    ;da, idti na korrektirowku
     .
     .
     .
   ; sekciq zawer{eniq wwoda/wywoda

   LPDONE:CLR     @LPS      ;sbrositx bit prerywaniq
          .DRFIN  LP
     .
     .
     .
   ; ustrojstwo pe~ati w awtonomnom revime;
   ; pe~atatx preduprevdenie kavdye 2 min

   OFFLIN:MOV     LPCQE,R5  ;ukazatx |lement o~eredi
          MOVB    Q$JNUM(R5),R5   ;polu~itx nomer teku}ego
                            ;zadaniq
          ASR     R5        ;sdwinutx ego
          ASR     R5        ;    wprawo  na
          ASR     R5        ;      tri bita
          BIC     #^C<16>,R5 ;wydelitx nomer zadaniq
          MOV     R5,SYJNUM  ;sohranitx ego dlq .SYNCH
          MOV     R5,TIJNUM  ;sohranitx ego dlq .TIMIO
          .SYNCH  SYNBLK,PIC ;ustanowitx revim polxzowatelq
          RTS     PC        ;sboj sinhronizacii

   1$:    CLR     TICMPL
          TST     @LPS      ;e}e estx o{ibki ?
          BPL     2$        ;net, wyjti
          MOV     PC,R0     ;pe~atx soob}eniq podobno
                            ;podprogramme zawer{eniq
          ADD     #MESSAG-.,R0    ;peresylka soob}eniq

                                 - 67 -




          .PRINT            ;pe~atatx ego
          MOV     PC,R0     ;     sposobom PIC
          ADD     #1$-.,R0  ;ukazatx dlq .TIMIO
                            ;podprogrammu zawer{eniq
          MOV     R0,TICMPL ;sohranitx ukazatelx
          .TIMIO  TIMBLK,0,2*60.*50. ;ustanowitx dwuhminutnyj
                            ;tajm-aut
   2$:    RTS     PC        ;wernutxsq

   TIMBLK:.WORD   0     ;blok tajmera: star{ee slowo wremeni
          .WORD   0     ;              mlad{ee slowo wremeni
          .WORD   0     ;swqzx so sledu`}im |lementom o~eredi
   TIJNUM:.WORD   0     ;nomer zadaniq
          .WORD   177400    ;posledowatelxnyj nomer
          .WORD   0         ;monitor pome}aet s`da -1
   TICMPL:.WORD   0         ;adres podprogrammy zawer{eniq
   SYNBLK:.WORD   0         ;blok sinhronizacii
   SYJNUM:.WORD   0         ;nomer zadaniq
          .WORD   0,0,0,-1,0 ;i t.d.
   MESSAG:.ASCIZ  "?LP-W-LP ustrojstwo w awtonomnom revime"
          .EVEN
          .DREND  LP




       4.4. registraciq o{ibok



       registraciq o{ibok - |to neobqzatelxnoe swojstwo RT11,  prednaz-
  na~ennoe dlq prowerki nadevnosti sistemy. drajwery ustrojstw, kotorye
  wkl`~a`t poddervku podsistemy registracii o{ibok, wyzywa`t  registra-
  tor o{ibok posle kavdogo seansa wwoda/wywoda. registrator o{ibok soz-
  daet hronologi~esku` zapisx aktiwnosti wwoda/wywoda ustrojstwa, koto-
  ru` movno ispolxzowatx dlq prowerki ego nadevnosti.

       dlq obespe~eniq registracii o{ibok  w  RT11  neobhodimo  pri  ee
  generacii ukazatx |tu wozmovnostx. registraciq  o{ibok  movet  wypol-
  nqtxsq tolxko w RT11FB ili RT11XM.  esli  sistema  imeet  wozmovnostx
  wypolnqtx sistemnye zadaniq, to registrator o{ibok rabotaet kak  sis-
  temnoe zadanie; w protiwnom slu~ae registrator o{ibok movet  rabotatx
  kak oby~noe operatiwnoe zadanie. uslowiem dlqjlegistracii o{ibok  pri
  generacii sistemy qwlqetsq:

  ERL$G  - zna~enie uslownogo parametra. esli ono  rawno  1,  to  budet
           obespe~iwatxsq registraciq o{ibok;

  ERL$U  - ~islo ustrojstw, dlq  kotoryh  registrator  o{ibok  sobiraet
           statistiku. zna~enie po  umol~ani`  rawno  10,  maksimalxnoe
           ~islo rawno 30. kavdoe  ustrojstwo  dobawlqet  semx  slow  k
           registratoru o{ibok. dlq kavdogo ustrojstwa  trebuetsq  odin
           slot (naprimer, dlq sistemy s dwumq  diskami  RK:  trebuetsq
           dwa slota).

       do prinqtiq re{eniq, ispolxzowatx li podsistemu registracii o{i-
  bok, neobhodimo rassmotretx wopros o potrebnosti operacionnoj sistemy
  wo wremeni i w pamqti. t.k. registraciq o{ibok  trebuet  opredelennyh
  zatrat dlq kavdogo seansa wwoda/wywoda.  sam  ve  registrator  o{ibok

                                 - 68 -




  ispolxzuet po~ti 2K slow pamqti. odnako, registrator o{ibok ne dolven
  postoqnno wypolnqtxsq, tak ~to  pamqtx,  kotoru`  on  trebuet,  movet
  bytx, pri neobhodimosti, predstawlena programmam polxzowatelq i wyzo-
  wy registratora  o{ibok,  kotorye  osu}estwlqet  drajwer,  nemedlenno
  zawer{a`tsq. naibole  racionalxno  ispolxzowatx  sistemu  registracii
  o{ibok pri prowerke nadevnosti ustrojstw.

       nive opisano, kak ispolxzowatx  registraci`  o{ibok  w  drajwere
  ustrojstwa i kaku` informaci`  registrirowatx.  takve  pokazano,  kak
  dobawlqtx zagolowki dlq ustrojstwa k programme, soob}a`}ej  ob  o{ib-
  kah.

       tekst drajwera, kotoryj primenqetsq tolxko dlq registracii  o{i-
  bok, dolven bytx pome}en  w  bloki  uslownoj  translqcii.  |ti  bloki
  transliru`tsq, esli simwol ERL$G=1, ina~e oni opuska`tsq. takim obra-
  zom, podsistema registracii o{ibok libo wkl`~aetsq w drajwer pri  ego
  assemblirowanii, libo net.



       4.4.1. ispolxzowanie registratora o{ibok



       drajwer  wyzywaet  registrator  o{ibok  posle   kavdogo   seansa
  wwoda/wywoda wne zawisimosti, byla li pereda~a uspe{noj. esli pereda-
  ~a byla s o{ibkoj, to drajwer wyzywaet registrator o{ibok dlq  kavdoj
  powtornoj popytki pereda~i i kogda iste~et nazna~ennoe ~islo  powtor-
  nyh popytok.

       poskolxku wyzowy registratora o{ibok dolvny bytx  serijnymi,  to
  drajwer movet wydatx ih tolxko wo wremq  iniciacii  wwoda/wywoda  ili
  sledom za makrokomandoj .FORK.

       drajwer sna~ala dolven  ustanowitx  registry,  a  potom  sdelatx
  obra}enie k registratoru o{ibok. priswoeniq registrow dlq treh  widow
  obra}enij k registratoru opisany w sledu`}ih podpunktah.



       4.4.1.1. registraciq uspe{noj pereda~i



       posle kavdoj uspe{noj pereda~i pered wyzowom registratora o{ibok
  sleduet ustanowitx registry R4 i R5:

  R5     - dolven ukazywatx na tretxe slowo teku}ego |lementa o~eredi;

  R4     - sodervit dwa bajta informacii: star{ij bajt qwlqetsq bajtom-
           identifikatorom ustrojstwa (DD$COD), mlad{ij bajt rawen -1.

                                 - 69 -




       4.4.1.2. registraciq gruboj o{ibki



       posle wozniknoweniq gruboj (neustranimoj) o{ibki sleduet ustano-
  witx registry s R2 po R5 do wyzowa registratora o{ibok. oby~no neust-
  ranimye o{ibki - |to te, kotorye ne qwlq`tsq wosstanowimymi. primera-
  mi neustranimyh o{ibok mogut sluvitx: ustrojstwo nepodkl`~enno,  ust-
  rojstwo nahoditsq w awtonomnom  revime,  ustrojstwo  blokirowano  dlq
  zapisi, net lenty w ustrojstwe wwoda s perfolenty i  t.d.  ustranimaq
  o{ibka, dlq kotoroj  isteklo  nazna~ennoe  ~islo  powtornyh  popytok,
  rassmatriwaetsq tove kak neustranimaq o{ibka. registry ustanawliwa`t-
  sq sledu`}im obrazom:

  R5     - dolven ukazywatx na tretxe slowo teku}ego |lementa o~eredi;

  R4     - sodervit dwa bajta informacii:  star{ij  bajt  -  |to  bajt-
           identifikator ustrojstwa (DD$COD), mlad{ij bajt rawen 0;

  R3     - sodervit dwa bajta informacii: star{ij bajt  sodervit  ob}ee
           ~islo powtornyh popytok,  otwedennoe  dlq  dannoj  pereda~i,
           mlad{ij bajt sodervit ~islo registrow ustrojstw,  sodervimoe
           kotoryh dolvno poqwitxsq w protokole o{ibok;

  R2     - ukazatelx bufera w drajwere, kotoryj sodervit registry  ust-
           rojstwa, podleva}ie registracii.



       4.4.1.3. registraciq negruboj o{ibki



       posle wozniknoweniq negruboj (ustranimoj) o{ibki sleduet ustano-
  witx registry s R2 po R5 pered wyzowom  registratora  o{ibok.  oby~no
  ustranimye o{ibki - |to te, kotorye mogut bytx isprawleny pri powtor-
  noj popytke pereda~i. primery ustranimyh o{ibok: o{ibki sinhronizacii
  i apparatnye o{ibki ~teniq/zapisi.

       neobhodimo inicializirowatx s~et~ik w drajwere  s  ob}im  ~islom
  powtornyh popytok,  otwedennyh  dlq  kavdoj  pereda~i.  predusmotretx
  umenx{enie s~eta dlq ustranimoj o{ibki pri wypolnenii kavdoj  powtor-
  noj popytki. kogda s~et dostignet 0, registrator o{ibok  budet  rass-
  matriwatx ee kak neustranimu` o{ibku. pri ustranimoj o{ibke  protokol
  o{ibok pe~ataet otdelxnu` zapisx dlq kavdoj powtornoj popytki  dannoj
  pereda~i.

       wse powtornye popytki otme~a`tsq w protokole, esli dave registry
  identi~ny. protokol ne razli~aet grubye i negrubye o{ibki.  on  pe~a-
  taet tolxko sodervimoe registrow wo wremq o{ibki i koli~estwo powtor-
  nyh popytok. grubaq o{ibka movet bytx raspoznana na wyhode, poskolxku
  ona poqwitsq s ~islom powtornyh  popytok  0  bez  predydu}ih  o{ibok.
  sodervimoe registrow:

  R5     - dolven ukazywatx na tretxe slowo teku}ego |lementa o~eredi;

  R4     - sodervit dwa bajta informacii: star{ij bajt qwlqetsq bajtom-
           identifikatorom ustrojstwa (DD$COD), mlad{ij bajt -  teku}im
           zna~eniem powtornoyh popytok. |to zna~enie dolvno umenx{atx-

                                 - 70 -




           sq s kavdoj powtornoj popytkoj, poka ~islo ne dostignet 0. w
           |tom slu~ae o{ibka budet s~itatxsq neustranimoj;

  R3     - sodervit dwa bajta informacii: star{ij bajt  sodervit  ob}ee
           ~islo powtornyh popytok, otwedennyh dlq |toj pereda~i, mlad-
           {ij bajt sodervit  ~islo  registrow  ustrojstwa,  sodervimoe
           kotoryh dolvno poqwitxsq w protokole o{ibok;

  R2     - ukazatelx bufera w drajwere, kotoryj sodervit registry  ust-
           rojstwa, podleva}ie registracii.



       4.4.1.4. razli~iq mevdu grubymi i negrubymi o{ibkami



       sam registrator o{ibok ne ustanawliwaet razli~iq mevdu  ustrani-
  mymi i neustranimymi o{ibkami, a  prosto  zapisywaet  odnu  i  tu  ve
  informaci` w oboih slu~aqh. odnako, prowerqq protokol, movno  oprede-
  litx, woznikla li neustranimaq  o{ibka,  poskolxku  kavdaq  pereda~a,
  kotoraq is~erpala wse swoi powtornye popytki,  imeet  swo`  zapisx  w
  protokole dlq kavdoj iz |tih popytok, wkl`~aq tu, kotoraq imeet ~islo
  powtornyh popytok, rawnoe 0.

       w nekotoryh slu~aqh ustranqemaq polxzowatelem o{ibka,  naprimer,
  ustrojstwo w awtonomnom revime  ili  blokirowka  zapisi,  ne  wyzowut
  registrator o{ibok. oby~no ob apparatnyh o{ibkah diska i lenty  soob-
  }aetsq, poskolxku |ti o{ibki wyzwany nenadevnostx` ustrojstwa.



       4.4.1.5. wyzow registratora o{ibok



       kogda zapro{ennye registry ustanowleny,  to  registrator  o{ibok
  wyzywaetsq sledu`}im obrazom:

          JSR     PC,@$ELPTR

       $ELPTR - |to  ukazatelx  w  rezidentnom  monitore.  makrokomanda
  .DREND otwodit oblastx w  drajwere  dlq  |togo  ukazatelq.  ukazatelx
  zapolnqetsq wo wremq na~alxnoj zagruzki (dlq  sistemnogo  ustrojstwa)
  ili wo wremq wypolneniq  makrokomandy  .FETCH  ili  komandy  monitora
  .LOAD (dlq ustrojstwa dannyh). esli registrator o{ibok ne  wypolnqet-
  sq,  to  monitor  nemedlenno  wozwra}aet  uprawlenie  drajweru.  esli
  registrator o{ibok wypolnqetsq, to swqzywa`}ee slowo w RMON  sodervit
  to~ku whoda. |tot fragment iz RMON demonstriruet, kak  osu}estwlqetsq
  wyzow registratora o{ibok:

          $ERLOG:  MOV   (PC)+,-(SP)  ;wwesti sledu`}ee slowo
                                      ;w stek iz drajwera
          $ELHND:: .WORD 0            ;0, esli registrator
                                      ;o{ibok ne wypolnqetsq.
                                      ;on e}e sodervit to~ku
                                      ;whoda
                   BNE   1$           ;perejti, esli zagruven
                   TST   (SP)+        ;o~istitx stek

                                 - 71 -




          1$:      RTS   PC           ;wyzwatx registrator
                                      ;o{ibok ili wernutxsq
                                      ;w drajwer

       komanda monitora  .SRUN  ili  .FRUN  ustanawliwaet  to~ku  whoda
  registratora o{ibok; komanda UNLOAD EL obnulqet $ELHND.

       posle wozwrata uprawleniq ot registratora o{ibok registry  s  R0
  po R3 wosstanawliwa`tsq w drajwere, a R4 i R5 razru{a`tsq.



       4.4.2. programma protokolow



       posle wkl`~eniq registracii o{ibok w drajwer ustrojstwa  neobho-
  dimo izmenenitx podsistemu protokolow tak, ~toby imq ustrojstwa  poq-
  wilosx w zagolowke protokola i prawilxno  pe~atalisx  registry.  fajl
  ERRTXT.MAC sodervit informaci` dlq  zagolowkow  protokola  ustrojstw,
  podderviwaemyh programmoj protokolow (ERROUT) podsistemy  registracii
  o{ibok. dlq sozdaniq |toj programmy ispolxzu`tsq sledu`}ie komandy:

          .MACRO/LIST ERRTXT
          .LINK ERROUT,ERRTXT



       4.4.2.1. makrokomanda ELBLDR



       makrokomanda ELBLDR ispolxzuetsq dlq dobawleniq nowogo ustrojst-
  wa k sisteme protokolow. dlq dobawleniq ustrojstwa  neobhodimo  wkl`-
  ~itx w fajl ERRTXT.MAC makrokomandu ELBLDR.

       format makrokomandy sledu`}ij:

          ELBLDR XX,<TYPE>,C1,C2,<C3>

   gde

  XX     - bajt-identifikator ustrojstwa  (DD$COD),  kotoryj  ukazan  w
           makrokomande .DRDEF. on dolven imetx zna~enie ot  0  do  377
           (wosxmeri~nyh);

  TYPE   - simwolxnaq stroka, kotoru` polxzowatelx ho~et  nape~atatx  w
           protokole (naprimer, tip ustrojstwa). ona movet bytx  dlinoj
           do 59 simwolow i zakl`~aetsq w uglowye skobki;

  C1     - odno iz dwuh slow: DISK ili TAPE. ono  identificiruet  ob}u`
           klassifikaci` ustrojstwa;

  C2     - dwuhsimwolxnoe imq ustrojstwa;

  C3     - spisok mnemoniki registrow ustrojstwa (bez perwyh dwuh  sim-
           wolow), kotorye registriruet  EL-drajwer.  mnemonika  razde-
           lqetsq zapqtymi. C3 dolvno bytx ukazano w uglowyh skobkah.


                                 - 72 -




       pri ukazanii neprawilxnyh parametrow w makrokomande ELBLDR poqw-
  lqetsq o{ibka assemblirowaniq. ni odin iz parametrow  dlq  ELBLDR  ne
  qwlqetsq obqzatelxnym.

       naprimer, makrokomanda ELBLDR dlq drajwera RK  qwlqetsq  sledu`-
  }ej:

    ELBLDR 0,<RK/izot/sm-5402>,DISK,RK,<DS,ER,CS,WC,BA,DA,DB>

       |tot  primer   pokazywaet,   ~to   ustrojstwom   qwlqetsq   disk
  RK/izot/sm-5402,  ego  dwuhsimwolxnym  imenem  qwlqetsq   RK,   bajt-
  identifikator ustrojstwa rawen 0  i  registry,  kotorye  registriru`t
  drajwer, sledu`}ie: RKDS, RKER, RKCS, RKWC, RKBA, RKDA i RKDB.

       imq whodnogo fajla dlq programmy ERROUT po umol~ani` ERRLOG.DAT.
  |to takve wyhodnoj fajl po umol~ani` dlq samogo EL-drajwera.  odnako,
  movno sohranitx prevnie fajly ERRLOG.DAT, predwaritelxno pereimenowaw
  ili skopirowaw ih na drugoe ustrojstwo. itak, programma ERROUT  movet
  operirowatx s l`bym fajlom s takim ve formatom, kak  ERRLOG.DAT.  imq
  ne wavno, waven format.



       4.5. specialxnye funkcii



       inogda  drajweram  ustrojstw  neobhodimo  wypolnitx  specifi~nye
  dejstwiq, kotorye newozmovno wypolnitx iz-za otsutstwiq sootwetstwu`-
  }ih sistemnyh makrokomand RT11. naprimer, peremotka  magnitnyh  lent,
  ~tenie/zapisx absol`tnyh sektorow na gibkih diskah i  t.d.  sistemnaq
  makrokomanda .SPFUN qwlqetsq sredstwom dlq wypolneniq takih specifi~-
  nyh dejstwij. kogda programma wydaet makrokomandu .SPFUN, to  dlq  ee
  wypolneniq w ka~estwe odnogo  iz  argumentow  neobhodimo  zadatx  kod
  konkretnoj funkcii. |tot kod ukazywaet  drajweru,  kaku`  specialxnu`
  funkci` neobhodimo wypolnitx. naprimer, dlq obratnoj  peremotki  mag-
  nitnoj lenty w awtonomnom revime nuvno ukazatx drajweru MT kod 372.



       4.5.1. sistemnaq makrokomanda .SPFUN



       format sistemnoj makrokomandy .SPFUN sledu`}ij:

          .SPFUN AREA,CHAN,FUNC,BUF,WCNT,BLK[,CRTN]

       polnoe opisanie argumentow sistemnoj makrokomandy .SPFUN sistemy
  RT11 priwoditsq w dokumentE "sistemnye tablicy i biblioteki"

       esli wyzow specialxnoj funkcii prednazna~en dlq wozwrata  odnogo
  zna~eniq, to BUF dolven bytx oblastx` odnoslownogo bufera.  polxzowa-
  telx movet swobodno interpretirowatx WCNT i BLK. oni mogut bytx l`by-
  mi slowami specifikacii, ukazatelqmi dopolnitelxnyh buferow i t.d. do
  teh por, poka drajwer budet interpretirowatx ih  soglasno  kodu  spe-
  cialxnoj funkcii. sleduet pomnitx, ~to monitor ne izmenqet |ti zna~e-
  niq pri pereda~e ih drajweru. naprimer, on ne izmenqet s~eta slow  iz
  polovitelxnogo w otricatelxnoe.

                                 - 73 -




       4.5.2. obespe~enie specialxnyh funkcij w drajwere



       dlq razre{eniq zadaniq specialxnyh funkcij w drajwere dlq  argu-
  menta STAT makrokomandy .DRDEF nuvno zadatx  bit  SPFUN$.  |to  budet
  ozna~atx, ~to drajwer movet prinimatx specialxnye funkcii.

       zatem sleduet opredelitx simwoliku w  drajwere  dlq  opredeleniq
  tipow specialxnyh funkcij, kotorye movet wypolnitx drajwer. naprimer,
  drajwer gibkogo diska DY prinimaet sledu`}ie kody  specialxnyh  funk-
  cij:

          SIZ$FN = 373     ;polu~itx razmer ustrojstwa
          WDD$FN = 375     ;pisatx s udaleniem otme~ennyh
                           ;dannyh
          WRT$FN = 376     ;pisatx absol`tnyj sektor
          RED$FN = 377     ;~itatx absol`tnyj sektor

       sleduet zametitx, ~to wse kody specialxnyh funkcij  dolvny  bytx
  otricatelxnymi zna~eniqmi bajtow (t.e. w diapazone s 200 po 377 wosx-
  meri~nyh).

       pri iniciacii drajwera dlq wwoda/wywoda on dolven proweritx ~et-
  wertoe slowo |lementa o~eredi i uznatx, estx  li  zapros  specialxnoj
  funkcii. simwolxnoe obozna~enie Q.FUNC, kotoroe qwlqetsq mlad{im baj-
  tom 4-go slowa |lementa o~eredi wwoda/wywoda, sodervit kod  specialx-
  noj funkcii. w sistemnyh makrokomandah wwoda/wywoda dlq operacij ~te-
  niq, zapisi i poiska |tot bajt = 0. dlq makrokomand specialxnyh funk-
  cij |to zna~enie qwlqetsq otricatelxnym  kodom  specialxnyh  funkcij.
  sleduet proweritx, qwlqetsq li kod dlq |togo ustrojstwa dopustimym i,
  esli net, to predusmotretx nemedlennu`  posylku  soob}eniq  o  gruboj
  o{ibke.

       dlq makrokomandy specialxnoj funkcii drajwer dolven  na~atx  |tu
  funkci` i wozwratitxsq po instrukcii RTS PC. w sekcii obrabotki  pre-
  rywaniq drajwer dolven proweritx nali~ie o{ibki i opredelitx,  zawer-
  {ena li operaciq. drajwer wozwra}aet wyzywa`}ej programme dannye  ili
  slowa sostoqniq w bufer polxzowatelq.

       poskolxku polxzowatelx primenqet specialxnye funkcii dlq oprede-
  lennogo ustrojstwa, to on movet ustanowitx uslowiq  wyzowa  dlq  |toj
  funkcii w sistemnoj makrokomande .SPFUN i uslowiq wozwrata iz drajwe-
  ra. to~no tak ve drajwer rassmatriwaet argumenty  dlq  kavdoj  drugoj
  makrokomandy specialxnoj funkcii.



       4.5.3. toma raznyh razmerow



       drajwer movet uprawlqtx ustrojstwom, kotoroe dopuskaet ispolxzo-
  wanie tomow s razli~nymi razmerami. primerami takih drajwerow qwlqet-
  sq drajwer DM, kotoryj podderviwaet diski RK06 i RK07, i drajwer  DY,
  kotoryj movet podderviwaet gibkie diski normalxnoj ili dwojnoj  plot-
  nosti.

       drajwer ustrojstwa, kotoroe podderviwaet toma  raznyh  razmerow,

                                 - 74 -




  dolven peredawatx razmer naimenx{ego toma (w blokah) w parametre SIZE
  makrokomandy .DRDEF. |to to zna~enie, kotoroe wozwra}aetsq  wypolnqe-
  moj programme pri wyda~e e` sistemnoj makrokomandy .DSTATUS.

       esli neobhodimo, ~toby wypolnqemaq programma znala razmer  usta-
  nowlennogo toma, to w nej nuvno sdelatx  wyzow  makrokomandy  .SPFUN.
  drajwer dolven bytx w sostoqnii otwetitx na zapros  wozwratom  fakti-
  ~eskogo razmera toma w oblastx odnoslownogo bufera.  standartnyj  kod
  specialxnoj funkcii dlq opredeleniq fakti~eskogo razmera  toma  rawen
  373.

       programma DUP trebuet izmeneniq dlq prawilxnoj  inicializacii  i
  operacii "sborka musora" ustrojstwa, kotoroe dopuskaet  ispolxzowanie
  tomow razli~nogo razmera.



       4.5.4. zamena plohogo bloka



       esli dlq drajwera nuvna poddervka zameny plohogo bloka, to polx-
  zowatelx dolven ispolxzowatx kody specialxnoj funkcii 377, 376,  374.
  primerom movet sluvitx drajwer DL.

       programma DUP trebuet izmeneniq dlq prawilxnoj  inicializacii  i
  operacii "sborka musora" ustrojstwa, kotoroe dopuskaet zamenu plohogo
  bloka.



       4.5.5. ustrojstwa so specialxnymi katalogami



       monitor RT11 movet swqzywatxsq s ustrojstwami fajlowoj  struktu-
  ry, ime`}imi nestandartnye katalogi (t.e. ne  RT11).  primerami  spe-
  cialxnyh ustrojstw qwlq`tsq magnitnaq lenta i  kasseta.  ih  drajwery
  ustanawliwa`t bit 12 (SPECL$) slowa sostoqniq ustrojstwa. USR  wypol-
  nqet operacii s katalogom dlq ustrojstw so strukturoj kataloga  RT11;
  dlq specialxnyh ustrojstw sam drajwer  dolven  wypolnitx  operacii  s
  katalogom, naprimer, .LOOKUP, .ENTER,  .CLOSE,  i  .DELETE,  a  takve
  pereda~u dannyh.

       monitor zapra{iwaet specialxnu` operaci`  s  katalogom,  pome}aq
  polovitelxnoe nulewoe zna~enie w bajt koda funkcii w |lemente  o~ere-
  di. polovitelxnye kody funkcii qwlq`tsq standartnymi  dlq  wseh  ust-
  rojstw. oni sledu`}ie:

          kod:          1       2       3       4
          funkciq:      CLOSE   DELETE  LOOKUP  ENTER

       |ti  funkcii  sootwetstwu`t  sistemnym   makrokomandam   .CLOSE,
  .DELETE, .LOOKUP, i .ENTER. makrokomanda .RENAME dlq specialxnyh ust-
  rojstw ignoriruetsq.

       pqtoe slowo |lementa o~eredi specialxnoj funkcii,  rabota`}ej  s
  katalogom, sodervit ukazatelx bloka opisatelq fajla,  soverva}ee  imq
  ustrojstwa, imq fajla i tip fajla w kode RADIX-50.

                                 - 75 -




       pri o{ibkah programmnogo obespe~eniq (naprimer, fajl  ne  najden
  ili katalog zapolnen), obnaruvennyh drajwerom specialxnogo ustrojstwa
  wo wremq operacij s katalogom, uprawlenie peredaetsq w  monitor.  dlq
  kavdogo tipa o{ibki wybiraetsq unikalxnyj kod. kod o{ibki zanositsq w
  SPUSR, raspolovennogo na fiksirowannom sme}enii 272 ot  na~ala  rezi-
  dentnogo monitora. apparatnye o{ibki wozwra}a`tsq  oby~nym  sposobom,
  ustanowkoj bita 0 w slowe sostoqniq kanala, ukazannogo wtorym  slowom
  |lementa o~eredi.

       programmnye zaprosy dlq operacij s katalogami  specialxnyh  ust-
  rojstw obrabatywa`tsq sistemnymi makrokomandami. naprimer, pri wyda~e
  makrokomandy .LOOKUP monitor prowerqet slowo sostoqniq ustrojstwa  na
  bit specialxnogo ustrojstwa. esli ustrojstwo imeet specialxnu` struk-
  turu kataloga, to sootwetstwu`}ij kod funkcii wwoditsq w |lement o~e-
  redi, kotoryj prqmo ustanawliwaetsq w o~eredx k drajweru,  prohodq  i
  obrabatywaqsx USR. podderviwaetsq nezawisimostx ustrojstwa, poskolxku
  operacii,  wypolnqemye  makrokomandami  .LOOKUP,  .ENTER,  .CLOSE   i
  .DELETE, qwlq`tsq "prozra~nymi" dlq polxzowatelq.




       4.6. drajwery ustrojstw dlq RT11XM



       drajwery  ustrojstw,  wypolnq`}iesq  pod  uprawleniem  RT11SJ  i
  RT11FB, dlq RT11XM trebu`t nekotoryh izmenenij. nive opisany  polove-
  niq, kotorye sleduet u~estx pri napisanii drajwera dlq RT11XM.



       4.6.1. sogla{eniq o naimenowaniqh i sistemnye uslowiq



       pri napisanii drajwera ustrojstwa neobhodimo  napisatx  ishodnyj
  fajl, wkl`~a`}ij kod, kotoryj  otnositsq  k  obespe~eni`  ras{irennoj
  pamqti i pomestitx ego w uslownye bloki translqcii.  priswoitx  |tomu
  fajlu imq DD.MAC, gde DD - dwuhsimwolxnoe  imq  ustrojstwa.  uslownym
  zna~eniem generacii sistemy, kotoraq predostawlqet obespe~enie ras{i-
  rennoj pamqti, qwlqetsq MMG$T.  esli  ono  rawno  0,  to  ras{irennaq
  pamqtx ne podderviwaetsq. esli MMG$T=1, to  podderviwaetsq.  ishodnyj
  fajl sleduet assemblirowatx s sistemnym fajlom parametrow SYCND  i  s
  fajlom XM.MAC. poslednij sozdaet fajl DDX.OBJ dlq RT11XM  ili  DD.OBJ
  dlq RT11SJ i RT11FB. |to neobhodimo, ~toby swojstwa drajwera i siste-
  my sowpadali.



       4.6.2. ob}ie trebowaniq RT11XM



       w sisteme s RT11XM drajwery dolvny nahoditxsq w mlad{ih 28k slo-
  wah fizi~eskoj pamqti, no ne w oblasti fizi~eskoj pamqti,  otobravae-
  moj ras1, kotoraq wkl`~aet q~ejki pamqti mevdu 20000 i 37776. w  sis-
  teme, kotoraq ispolxzuet drajwer MQ dlq swqzi mevdu sistemnymi  zada-
  niqmi, drajwery takve ne dolvny nahoditxsq  w  oblasti,  otobravaemoj

                                 - 76 -




  ras2 (q~ejki pamqti mevdu 40000 i  57777).  do  wypolneniq  programm,
  ispolxzu`}ih  drajwery,  neobhodimo  sdelatx  poslednie  rezidentnymi
  komandoj monitora LOAD, kotoraq zagruzit ih w trebuemu` oblastx pamq-
  ti.

       zagruvennye drajwery wypolnq`tsq s sistemnym otobraveniem, koto-
  roe predostawlqet dostup k mlad{im 28k slowam  pamqti  pl`s  stranica
  wwoda/wywoda ustrojstwa. programma, zapra{iwa`}aq  wwod/wywod,  movet
  otobravatxsq i ne w sistemnom revime.  fakti~eski,  programma  dolvna
  whoditx w odnu iz treh dopustimyh kategorij:

       1) priwilegirowannoe  zadanie,  otobravenie  kotorogo  identi~no
  sistemnomu otobraveni`;

       2) priwilegirowannoe  zadanie,  kotoroe  otobravaetsq  w  adresa
  fizi~eskoj pamqti swerh 28k slow;

       3) wirtualxnoe zadanie s l`bym widom otobraveniq.

       glawnoj slovnostx` w drajwerah dlq RT11XM qwlqetsq swqzx s bufe-
  rom dannyh polxzowatelq. ona woznikaet  iz-za  togo,  ~to  programma,
  zapra{iwa`}aq wwod/wywod, predostawlqet 16-bitnyj  wirtualxnyj  adres
  bufera w sistemnoj makrokomande, hotq |tot adres movet bytx otobraven
  e}e gde-nibudx w fizi~eskoj pamqti. po|tomu drajwer  dolven  nahoditx
  fakti~eskij 18-bitnyj fizi~eskij adres bufera dannyh polxzowatelq  do
  peresylki w nego (ili iz nego) informacii.

       u~itywaq tot fakt, ~to w sisteme s RT11XM  q~ejki  w  fizi~eskoj
  pamqti wyrava`tsq 18-bitnym adresom, nuvno, pri  neobhodimosti,  uka-
  zatx adres w samom drajwere kak adres bufera. naprimer, esli  drajwer
  sodervit stroku nulej, kotoru` on zapisywaet na ustrojstwo kak  ~astx
  inicializacii, to drajwer ustanawliwaet operaci` zapisi na  ustrojst-
  wo, ukazywaq adres stroki w  drajwere  kak  adres  bufera.  poskolxku
  drajwer raspolagaetsq w mlad{ih 28k slowah fizi~eskoj pamqti, to  ego
  fizi~eskij adres movet bytx wyraven kak 16-bitnyj  wirtualxnyj  adres
  pl`s dwa dopolnitelxnyh bita dlq RT11XM.  bity  16  i  17  18-bitnogo
  adresa dolvny bytx 0.

       ris. 8 ill`striruet sistemu s RT11XM. programma, kotoraq  zapra-
  {iwaet wwod/wywod, otobravaet  oblastx  bufera  dannyh  w  fizi~esku`
  pamqtx swerh 28k slownoj granicy.

                                 - 77 -




                drajwer ustrojstwa w RT11XM

                            prost-wo
                            fizi~-ih
                            adresow
                           /--------
                          / ! str. !
                         /  ! w/w  !
                        /  /!------!
                 sist.  ! / !      !     prost-wo
                prost-wo! ! !------!<--- wirt.
                 wirt.  ! ! !bufer !   ! adre-
   diapazon      adre-  ! ! !------!<- ! sow         diapazon
   adresow   ras sow    / ! !      ! ! ! polx-lq ras  adresow
   --------------------/  / .      . ! ! --------------------
   ! 177776 ! 7 !     !  /  .      . ! ! !     ! 7 ! 177776 !
   ! 160000 !   !     ! /   !      ! ! \ !     !   ! 160000 !
   --------------------/ 28k-->----! \  \--------------------
   ! 157776 ! 6 !     !     !      !  \  !     ! 6 ! 157776 !
   ! 140000 !   !     !---->!      !   \ !     !   ! 140000 !
   --------------------     !------!    \--------------------
   ! 137776 ! 5 !     !     !      !     !     ! 5 ! 137776 !
   ! 120000 !   !     !---->!      !     !     !   ! 120000 !
   --------------------     !------!     --------------------
   ! 117776 ! 4 !     !     !      !     !     ! 4 ! 117776 !
   ! 100000 !   !     !---->!      !     !     !   ! 100000 !
   --------------------     !------!     --------------------
   !  77776 ! 3 !     !     ! dr-r !     !     ! 3 !  77776 !
   !  60000 !   !     !---->! us-wa!     !     !   !  60000 !
   --------------------     !------!     --------------------
   !  57776 ! 2 !     !     !      !     !     ! 2 !  57776 !
   !  40000 !   !     !---->!      !     !     !   !  40000 !
   --------------------     !------!     --------------------
   !  37776 ! 1 !     !     !      !     !     ! 1 !  37776 !
   !  20000 !   !     !---->!      !     !     !   !  20000 !
   --------------------     !------!     --------------------
   !  17776 ! 0 !     !     !      !     !     ! 0 !  17776 !
   !  00000 !   !     !---->!      !     !     !   !  00000 !
   --------------------  !  --------  !  --------------------
                         !            !
                         !            !
                     sistemnoe    wirtualxnoe
                     otobravenie  otobravenie

   prost-wo fizi~-ih adresow      - prostranstwo fizi~eskih
                                    adresow
   sist. prost-wo wirt. adresow   - sistemnoe prostranstwo
                                    wirtualxnyh adresow
   prost-wo wirt. adresow polx-lq - prostranstwo wirtualxnyh
                                    adresow polxzowatelq
   str. w/w   - stranica wwoda/wywoda
   dr-r us-wa - drajwer ustrojstwa

                          ris. 8

       monitor RT11 obespe~iwaet drajwery  podgrammami  dlq  dostupa  k
  buferu dannyh polxzowatelq w  fizi~eskoj  pamqti.  nive  opisany  |ti
  podprogrammy i situacii, w kotoryh oni ispolxzu`tsq.

                                 - 78 -




       4.6.3. |lement o~eredi w RT11XM



       dlq togo, ~toby najti fakti~eskij bufer polxzowatelq w  fizi~es-
  koj pamqti, drajwer zapra{iwaet  dopolnitelxnoe  slowo  informacii  w
  |lemente o~eredi. |to slowo qwlqetsq zna~eniem dlq ras1, kotoroe  pri
  ob'edinenii s wirtualxnym adresom bufera  polxzowatelq  predostawlqet
  fizi~eskij adres bufera. hotq ispolxzuetsq tolxko odno dopolnitelxnoe
  slowo dlq drajwerow RT11XM, w dopolnenie k |tomu |lement o~eredi pre-
  dostawlqet mesto dlq dwuh slow. |ti dwa slowa so sme}eniqmi 20  i  22
  rezerwiru`tsq dlq budu}ego primeneniq RT11 i ne dolvny  ispolxzowatx-
  sq.

       esli MMG$T=1, to makrokomanda .QELDF, wyzywaemaq .DRDEF w na~ale
  drajwera, ras{irqetsq dlq generacii prawilxnyh  sme}enij  w  |lemente
  o~eredi RT11XM. ras{irenie makrokomandy sledu`}ee:

          Q.LINK = 0   (swqzx so sledu`}im |lementom o~eredi)
          Q.CSW  = 2.  (ukazatelx slowa sostoqniq kanala)
          Q.BLKN = 4.  (nomer fizi~eskogo bloka)
          Q.FUNC = 6.  (kod specialxnoj funkcii)
          Q.JNUM = 7.  (nomer zadaniq)
          Q.UNIT = 7.  (nomer ustrojstwa)
          Q.BUFF =^O10 (wirtualxnyj adres bufera polxzowatelq)
          Q.WCNT =^O12 (s~et slow)
          Q.COMP =^O14 (kod podprogrammy zawer{eniq)
          Q$LINK =-4   (simwoly dlq prostogo obra}eniq)
          Q$CSW  = 2
          Q$BLKN = 0
          Q$FUNC = 2
          Q$JNUM = 3
          Q$UNIT = 3
          Q$BUFF = 4
          Q$WCNT = 6
          Q$COMP =^O10
          Q.PAR  =^O16  (zna~enie ras1)
          Q$PAR  =^O12
          Q.ELGH =^O24 (dlina |lementa o~eredi)



       4.6.4. ustrojstwa prqmogo dostupa



       ustrojstwa prqmogo dostupa k pamqti - bolx{instwo diskow,  koto-
  rye rabota`t s 18-bitnymi adresami, tak ~to ih drajweram ne trebuetsq
  otobravatx bufer polxzowatelq. |ti drajwery  ispolxzu`t  podprogrammu
  monitora $MPPHY dlq nahovdeniq bufera polxzowatelq w fizi~eskoj pamq-
  ti. $MPPHY ispolxzuet zna~enie Q.PAR iz |lementa o~eredi i  wirtualx-
  nyj adres bufera Q.BUFF dlq sozdaniq  prawilxnogo  18-bitnogo  adresa
  dlq bufera polxzowatelq.

       format wyzowa dlq programmy $MPPHY sledu`}ij:

          JSR     PC,@$MPPTR

       $MPPTR sodervit  ukazatelx  podprogrammy  $MPPHY  w  rezidentnom

                                 - 79 -




  monitore. makrokomanda .DREND raspredelqet w konce  drajwera  oblastx
  dlq |togo ukazatelq. ukazatelx zapolnqetsq wo wremq na~alxnoj zagruz-
  ki (dlq sistemnogo ustrojstwa) ili wo wremq wypolneniq  komandy  LOAD
  (dlq ustrojstwa dannyh).

       do wyzowa:

         - R5 dolven ukazywatx Q.BUFF. |to pqtoe slowo w |lemente  o~e-
           redi.

       posle wyzowa:

         - perwoe slowo w steke [(SP)] sodervit 16 mlad{ih bitow  fizi-
           ~eskogo adresa bufera;

         - wtoroe slowo w steke [2(SP)] sodervit 2 star{ih  bita  fizi-
           ~eskogo adresa bufera w bitah 4 i 5;

         - R5 ukazywaet (Q.WCNT) na {estoe slowo |lementa o~eredi. zna-
           ~enie ne izmenqetsq.

       primer iz drajwera RK.

          CMP     (R5)+,-(R4)  ;prodwinutx k adresu bufera
                               ;w |lemente o~eredi
          JSR     PC,@$MPPTR   ;preobrazowatx wirtualxnyj
                               ;adres w fizi~eskij
          MOV     (SP)+,-(R4)  ;pomestitx mlad{. 16 bitow
                               ;w RKBA; star{ie bity - w stek
          MOV     (R5)+,-(R4)  ;pomestitx s~et~ik slow w RKWC
          BEQ     7$           ;s~et 0 - poisk
          BMI     5$           ;menx{e 0 - pisatx
          NEG     @R4          ;bolx{e 0 - ~itatx, zafiksi-
                               ;rowatx s~et dlq kontrollera
          MOV     #CSIE!FNREAD!CSGO,R3  ;|to funkciq ~teniq
   5$:    BIS     (SP)+,R3     ;ob'edinitx star{ie adresa
                               ;i bity w funkci`
          MOV     R3,-(R4)     ;na~alo operacii
   6$:    RTS     PC           ;vdatx prerywaniq



       4.6.5. simwolxno-orientirowannye ustrojstwa



       drajwery simwolxno-orientirowannyh ustrojstw  (naprimer,  perfo-
  lento~noe ustrojstwo wwoda/wywoda i ustrojstwo  pe~ati)  dolvny  sami
  peredawatx dannye iz ustrojstwa w oblastx bufera  polxzowatelq.  ust-
  rojstwo ispolxzuet registry na stranice wwoda/wywoda dlq posimwolxnoj
  pereda~i. drajwer movet ispolxzowatx dlq peresylki dannyh mevdu stra-
  nicej wwoda/wywoda i oblastx` bufera  polxzowatelq  dwe  podprogrammy
  monitora - $GETBYT i $PUTBYT.

                                 - 80 -




       4.6.5.1. podprogramma $GETBYT



       drajwer movet ispolxzowatx  podprogrammu  monitora  $GETBYT  dlq
  peresylki bajta iz bufera polxzowatelq w stek.  zatem  drajwer  movet
  peresylatx simwol w registr  bufera  dannyh  ustrojstwa  na  stranice
  wwoda/wywoda i na~inatx wwod/wywod.

       format wyzowa dlq podprogrammy $GETBYT sledu`}ij:

          JSR     PC,@$GTBYT

       $GETBYT sodervit ukazatelx podprogrammy  $GETBYT  w  rezidentnom
  monitore. makrokomanda .DREND raspredelqet w konce  drajwera  oblastx
  dlq |togo ukazatelq. ukazatelx zapolnqetsq wo wremq na~alxnoj zagruz-
  ki (dlq sistemnogo ustrojstwa) ili wo wremq wypolneniq  komandy  LOAD
  (dlq ustrojstwa dannyh).

       do wyzowa:

         - R4 dolven ukazywatx Q.BLKN. |to tretxe slowo w |lemente o~e-
           redi.

       posle wyzowa:

         - perwoe slowo w steke [(SP)] sodervit w mlad{em bajte sledu`-
           }ij bajt iz bufera polxzowatelq. sodervimoe  star{ego  bajta
           ne opredeleno;

         - R4 ne izmenqetsq.

       adres bufera (Q.BUFF) w |lemente o~eredi izmenqetsq  na  1.  pri
  wozniknowenii perepolneniq otobraveniq podprogramma monitora wy~itaet
  20000 iz zna~eniq w Q.BUFF i dobawlqet 200 k zna~eni` w Q.PAR.

       primer iz drajwera PC pokazywaet, kak drajwer polu~aet  bajt  iz
  bufera polxzowatelq i wywodit ego na perfolentu.

          MOV     PRCQE,R4        ;R4 ukazywaet na Q.BLKN
          TST     @#PP$CSR        ;o{ibka ?
          BMI     PPERR           ;wywesti na p/lentu
          TST     Q$WCNT(R4)      ;estx simwol dlq wywoda ?
          BEQ     PRDONE          ;net, idti dalx{e
          INC     Q$WCNT(R4)      ;umenx{itx s~et~ik bajtow
                                  ;(on otricatelxnyj)
          JSR     PC,@$GTBYT      ;polu~itx bajt iz bufera
                                  ;polxzowatelq
          MOVB    (SP)+,@#PPB     ;wywesti ego


                                 - 81 -




       4.6.5.2. podprogramma $PUTBYT



       posle uspe{noj pereda~i dannyh drajwer movet polu~itx simwol  iz
  registra  bufera   dannyh   ustrojstwa,   nahodq}egosq   w   stranice
  wwoda/wywoda, i wywesti ego w stek. zatem on movet ispolxzowatx podp-
  rogrammu monitora $PUTBYT dlq peresylki bajta iz steka w bufer  polx-
  zowatelq w fizi~eskoj pamqti.

       format wyzowa dlq podprogrammy $PUTBYT sledu`}ij:

          JSR     PC,@$PTBYT

       $PTBYT sodervit ukazatelx  podprogrammy  $PUTBYT  w  rezidentnom
  monitore. makrokomanda .DREND raspredelqet w konce  drajwera  oblastx
  dlq |togo ukazatelq. ukazatelx zapolnqetsq wo wremq na~alxnoj zagruz-
  ki (dlq sistemnogo ustrojstwa) i wo  wremq  wypolneniq  komandy  LOAD
  (dlq ustrojstwa dannyh).

       do wyzowa:

         - R4 dolven ukazywatx Q.BLKN. |to tretxe slowo w |lemente o~e-
           redi.

       bajt dlq pereda~i w bufer polxzowatelq  dolven  bytx  w  mlad{em
  bajte perwogo slowa steka. star{ij bajt nepredskazuem.

       posle wyzowa:

         - slowo, soderva}ee simwol dlq pereda~i, udalqetsq iz steka;

         - R4 ne izmenqetsq.

       adres bufera (Q.BUFF) w |lemente o~eredi izmenqetsq  na  1.  pri
  wozniknowenii perepolneniq otobraveniq  programma  monitora  wy~itaet
  20000 iz zna~eniq w Q.BUFF i dobawlqet 200 k zna~eni` w Q.PAR.

       primer iz drajwera PC pokazywaet, kak drajwer polu~aet simwol iz
  ustrojstwa wwoda s perfolenty i peresylaet ego w bufer polxzowatelq.

          MOV     PRCQE,R4        ;R4 ukazywaet na Q.BLKN
          MOVB    @#PRB,-(SP)     ;polu~itx simwol
          JSR     PC,@$PTBYT      ;zaslatx ego w bufer
                                  ;polxzowatelq
          DEC     Q$WCNT(R4)      ;umenx{itx s~et~ik bajtow



       4.6.6. podprogramma $PUTWRD



       podprogramma monitora $PUTWRD podobna  podprogramme  $PUTBYT  za
  iskl`~eniem togo, ~to $PUTWRD peresylaet slowo (a ne  bajt)  w  bufer
  polxzowatelq w fizi~eskoj pamqti. |ta podprogramma ispolxzuetsq, kog-
  da drajweru neobhodimo peredatx slowo informacii  sostoqniq  w  bufer
  polxzowatelq, a ne simwol dannyh iz ustrojstwa. podprogrammu  $PUTWRD
  mogut ispolxzowatx drajwery dlq l`bogo wida ustrojstwa.

                                 - 82 -




       format wyzowa dlq podprogrammy $PUTWRD sledu`}ij:

          JSR     PC,@$PTWRD

       $PTWRD sodervit ukazatelx  podprogrammy  $PUTWRD  w  rezidentnom
  monitore. makrokomanda .DREND raspredelqet w konce  drajwera  oblastx
  dlq |togo ukazatelq. ukazatelx zapolnqetsq wo wremq na~alxnoj zagruz-
  ki (dlq sistemnogo ustrojstwa) ili wo wremq wypolneniq  komandy  LOAD
  (dlq ustrojstwa dannyh).

       do wyzowa:

         - R4 dolven ukazywatx Q.BLKN w |lemente o~eredi.

       slowo dlq pereda~i w bufer polxzowatelq dolvno bytx na  werhu{ke
  steka.

       posle wyzowa:

         - slowo dlq pereda~i udalqetsq iz steka;

         - R4 ne izmenqetsq.

       adres bufera (Q.BUFF) w |lemente o~eredi izmenqetsq  na  2.  pri
  wozniknowenii perepolneniq otobraveniq podprogramma monitora wy~itaet
  20000 iz zna~eniq Q.BUFF i dobawlqet 200 k zna~eni` w Q.PAR.

       sledu`}ij primer iz DY pokazywaet drajwer, kotoryj movet  obslu-
  viwatx specialxnu` funkci`, zapra{iwa`}u` razmer ustanowlennogo toma.
  w |tom slu~ae wybiraetsq bolx{ij iz  wozmovnyh  ustanowlennyh  gibkih
  diskow. drajwer ispolxzuet podprogrammu $PUTWRD dlq peresylki razmera
  toma w oblastx polxzowatelxskogo bufera.

          MOV     #DDNBLK,-(SP)   ;zaslatx razmer w blokah
                                  ;w stek
          MOV     DYCQE,R4        ;R4 ukazywaet na Q.BLKN
          JSR     PC,@$PTWRD      ;wyzwatx podprogrammu




       4.6.7. dostup w polxzowatelxskij bufer



       otdelxnye drajwery ne mogut ispolxzowatx wy{eopisannye  podprog-
  rammy monitora i po|tomu dolvny imetx prqmoj dostup w bufer polxzowa-
  telq.

       naprimer, drajwer DM  oby~no  ispolxzuet  podprogrammu  monitora
  $MPPHY dlq preobrazowaniq otobravaemyh adresow w  fizi~eskie  adresa.
  odnako pri wozniknowenii  o{ibki  cikli~eskoj  prowerki  perepolneniq
  (CRC) drajwer wypolnqet sobstwennoe otobravenie w bufer  polxzowatelq
  i primenqet korrekci` o{ibki do prodolveniq pereda~i.  procedura  dlq
  otobraveniq drajwerom w polxzowatelxskij bufer sledu`}aq.

       ustrojstwa (naprimer, disk DX) pereda`t dannye za kavdyj raz  po
  odnomu sektoru mevdu samim diskom i wnutrennim buferom dannyh  diska,
  nazwannom "SILO". odnako, disk ne qwlqetsq ustrojstwom prqmogo dostu-

                                 - 83 -




  pa, tak ~to drajwer DX ne movet  ispolxzowatx  podprogrammu  monitora
  $MPPHY. bolee  togo,  drugie  podprogrammy  monitora  dlq  simwolxno-
  orientirowannyh ustrojstw, ime`}ih w nali~ii "SILO", sli{kom medlenny
  dlq prakti~eskogo ispolxzowaniq. itak, drajwer dlq diska  DX  otobra-
  vaet bufer polxzowatelq w  fizi~esku`  pamqtx  i  wypolnqet  operaci`
  wwoda/wywoda, kak esli by |to byla prostaq pereda~a mevdu  pamqtx`  i
  ustrojstwom. drajwer primenqet |to otobravenie,  zaimstwuq  sistemnyj
  ras1. (|to odna iz pri~in, po~emu sam drajwer ne dolven nahoditxsq  w
  oblasti, otobravaemoj posredstwom ras1.)

       perwoe dejstwie, kotoroe wypolnqet drajwer, zakl`~aetsq w sohra-
  nenii sodervimogo ras1. zatem on zagruvaet zna~enie Q.PAR iz |lementa
  o~eredi w ras1, izmenqq, takim obrazom, sistemnoe otobravenie.  dalee
  drajwer movet wybiratx oblastx bufera polxzowatelq w fizi~eskoj pamq-
  ti, ispolxzuq 16-bitnyj wirtualxnyj adres bufera w  Q.BUFF  -  adres,
  kotoryj wsegda nahoditsq w ras1 w diapazone adresow s 20000 po 37776.
  esli wwod/wywod zawer{en, to drajwer wosstanawliwaet ishodnoe  zna~e-
  nie ras1.

       nive w primere  pokazano,  kak  drajwer  movet  uprawlqtx  swoim
  sobstwennym otobraveniem. predpolagaetsq, ~to R4 ukazywaet na  tretxe
  slowo teku}ego |lementa o~eredi.

          KPAR1   =172342         ;opredelenie registra PAR1
          MOV     @#KPAR1,-(SP)   ;sohranitx staroe PAR1
                                  ;w steke
          MOV     Q$PAR(R4),@#KPAR1   ;zaslatx nowoe zna~enie
          .                       ;w PAR1; p/p o~i}aet SILO,
          .                       ;peredaet sodervimoe w
          .                       ;bufer polxzowatelq,
                                  ;ispolxzuet zna~enie Q.BUFF
          MOV     (SP)+,@#KPAR1   ;wosstanowitx PAR1

       sledu`}ij primer iz drajwera DX ill`striruet, kak drajwer wypol-
  nqet swoe sobstwennoe otobravenie  w  bufer  polxzowatelq,  kogda  on
  oswobovdaet wnutrennij "SILO". predpolagaetsq, ~to R3  rawnqetsq  128
  desqti~nym; R4 ukazywaet CSR dlq gibkogo diska; R1  sodervit  s~et~ik
  bajtow dlq |toj pereda~i; BUFRAD sodervit adres  bufera  polxzowatelq
  iz Q.BUFF w |lemente o~eredi.

          MOV     @#KISAR1,-(SP)  ;sohranitx prevnee ras1
          MOV     DXCQE,R2        ;ukazatx |lement o~eredi
                                  ;w Q.BLKN
          MOV     Q$PAR(R2),@#KISAR1    ;otobrazitx bufer
                                  ;~erez ras1
          ADD     #2,Q$PAR(R2)    ;izmenitx otobravenie
          CMP     R1,R3           ;ubeditxsq, ~to s~et~ik <
                                  ;ili = 128
          BLOS    1$              ;wse w porqdke
          MOV     R3,R1           ;wernutx s~et~ik na 128
   1$:    MOV     BUFRAD,R2       ;polu~itx w R2 wirtualxnyj
                                  ;adres bufera polxzowatelq
   2$:    TSTB    @R4             ;vdatx gotownosti
                                  ;peredat~ika
          BPL     2$              ;esli ne gotow, vdatx
                                  ;gotownosti
   3$:    MOVB    @R5,(R2)+       ;~itatx
          DEC     R1              ;proweritx s~et~ik
          BGT     2$              ;net bolx{e pereda~i

                                 - 84 -




          MOV     (SP)+,@#KISAR1  ;wosstanowitx ras1

       esli drajwer dolven imetx prqmoj dostup k  buferu  polxzowatelq,
  to wavno ponqtx, kak ras1 otobravaetsq w oblastx polxzowatelq. ris. 9
  ill`striruet |tot moment.  na  nem  pokazano  wirtualxnoe  zadanie  w
  RT11XM s polxzowatelxskim buferom, nahodq}imsq  w  fizi~eskoj  pamqti
  swerh 28k slownoj  granicy.  programma  polxzowatelq  otobravaetsq  w
  bufer ~erez ras6. drajwer zaimstwuet sistemnyj ras1, pome}aet  zna~e-
  nie Q.PAR iz |lementa o~eredi i ispolxzuet zna~enie Q.BUFF iz |lemen-
  ta o~eredi dlq dostupa k polxzowatelxskomu buferu.

        otobravenie drajwera ustrojstwa w oblastx bufera
                         polxzowatelq

                           prost-wo
                           fizi~-ih       prost-wo
                 sist.     adresow        wirt.
                 prost-wo  ---------      adre-
                 wirt.     !  str.  !     sow
   diapazon      adre-     !  w/w   !     polx-      diapazon
   adresow ras   sow       !--------!     lq     ras  adresow
   -----------------       !        !      ------------------
   !       ! !     !  !--->!--------!<--!  !     ! !        !
   !       ! !     !  !    !  BUFF: !   !  !     ! !        !
   !       ! !     !  ! !->!--------!<- !--!----------------!
   !       ! !     !  ! !  !        ! !    !     !6! 157776 !
   !       ! !     !  ! !  !        ! !    !     ! ! 140000 !
   !       ! !     !  ! !  !        ! !----!----------------!
   !       ! !     !  ! !  !        !      !     ! !        !
   !       ! !     !  ! !  !--------!      !     ! !        !
   !       ! !     !  ! !  ! dr-r   !      !     ! !        !
   !       ! !     !  ! !  ! us-wa  !      !     ! !        !
   !       ! !     !  ! !  !--------!      !     ! !        !
   !       ! !     !  ! !  !        !      !     ! !        !
   ----------------!--! !  !        !      !     ! !        !
   ! 37776 ! !     !    !  !        !      !     ! !        !
   ! 20000 ! !     !    !  !        !      !     ! !        !
   ----------------!----!  !        !      !     ! !        !
   !       ! !     !       !        !      !     ! !        !
   !       ! !     !       !        !      !     ! !        !
   -----------------       ----------      ------------------

   prost-wo fizi~-ih adresow      - prostranstwo fizi~eskih
                                    adresow
   sist. prost-wo wirt. adresow   - sistemnoe prostranstwo
                                    wirtualxnyh adresow
   prost-wo wirt. adresow polx-lq - prostranstwo wirtualxnyh
                                    adresow polxzowatelq
   str. w/w                       - stranica wwoda/wywoda
   dr-r us-wa                     - drajwer ustrojstwa

                          ris. 9.

       ras1 otobravaetsq w fizi~esku` pamqtx  w  32-slownyh  desqti~nyh
  blokah i naibolx{aq  otobravaemaq  oblastx  rawna  4k  slow  (sleduet
  zapomnitx, ~to dlina stranicy ras1 wsegda ustanowlena dlq otobraveniq
  wsej stranicy). esli bufer polxzowatelq na~inaetsq s q~ejki  w  fizi-
  ~eskoj pamqti, adres kotoroj ne qwlqetsq kratnym 32 slowam,  to  ras1
  otobravaetsq w perwu` 32-slownu` granicu nive na~ala bufera.  oblastx

                                 - 85 -




  otobraveniq ras1 movet na~inatxsq s l`bogo adresa w fizi~eskoj  pamq-
  ti, w kotorom dwe mlad{ie wosxmeri~nye cifry rawny 0. itak, pri  nad-
  leva}em otobravenii ras1, takom kak 4k slow ili 4k minus 31  desqti~-
  noe slowo bufera polxzowatelq, budut otobraveny kak pokazano na  ris.
  10.

                        otobravenie ras1

                     prost-wo fizi~-ih adresow
   O.PAR  = 3317      swy{e 28k po 32-slownym     wirt. bufer
   O.BUFF = 020024           blokam                   polx-lq
                            --------           adres = 140224
                            ! str. !
                            ! w/w  !
                            --------
                            !      !
                            .      .
                            .      .
                      351700!      !
                    !------>--------
                    !       !      !
                    !       --------
                    !       !      !
                    ! 351500--------<------!
                    !       !      !       !
                    !       .      .       !
                    !       .      .       !
                    !       --------       !
                    !       !      !       !
                    !       !      !       !
                    !       --------       !
    331724===>BUFF: !       ! BUFF:!       !
                    !       !      !       !            dia-
                    !  ----->-------331700 !            pazon
                    !  !    !      !       !            wirt.
     dia-           !  !    !      !       !            adre-
     pazon     nowoe!  !    --------331600 !            sow
     adre-    zna~-e!  !    !      !       !zna~-e      polx-
     sow   ras  ras !  !    !      !       ! ras  ras   lq
   ------------------  !    --------331500 !------------------
   ! 37776 !1! 3317 !  !    !      ! \     ! 3315 !6! 157776 !
   ! 20000 ! !      !  !    !      !  \    !      ! ! 140000 !
   -----------------!---    --------   \---!------------------
                            .      .331400
                            .      .
                            .      .
   prost-wo fizi~-ih adresow      - prostranstwo fizi~eskih
                                    adresow
   wirt. bufer polx-lq            - wirtualxnyj bufer
                                    polxzowatelq
   diapazon wirt. adresow polx-lq - diapazon wirtualxnyh
                                    adresow polxzowatelq
   str. w/w                       - stranica wwoda/wywoda

                          ris. 10

       zdesx pokazana oblastx bufera, raspolovennaq po adresu 331724  w
  fizi~eskoj pamqti, s  prikladnoj  programmoj,  otobravaemoj  w  bufer
  ~erez ras6. bufer rawen 24 wosxmeri~nym bajtam swy{e 331700, ~to raw-

                                 - 86 -




  no 32-slownoj granice. drajwer pome}aet zna~enie Q.PAR, 3317, w ras1,
  zamenqq zna~enie po umol~ani` ras1 zna~eniem 0200. |to wyzywaet otob-
  ravenie ras1 w 4k-slownu` oblastx  w  fizi~eskoj  pamqti,  na~inaq  s
  adresa 331700. w rezulxtate, kogda  drajwer  obra}aetsq  k  sistemnym
  wirtualxnym adresam w diapazone 20000 po 37776, to on imeet dostup  k
  q~ejkam fizi~eskoj pamqti s 331700 po 351676.  poskolxku  zna~enie  w
  Q.BUFF rawno 20024, to, ispolxzuq |to zna~enie, drajwer  movet  imetx
  dostup k na~alu oblasti polxzowatelxskogo bufera s q~ejki 331724.

       esli ob'em dannyh, podleva}ih pereda~e, welik, to movet  ponado-
  bitxsq prodwinutx ukazatelx bufera i nastroitx otobravenie  s  u~etom
  |togo. su}estwuet dwa sposoba prodwiveniq ukazatelq  bufera.  prostoj
  sposob - |to izmenqtx ras1 po mere prodwiveniq. naprimer, dlq  kavdyh
  32 slow, kotorye propuska`tsq ~erez bufer, dobawlqetsq 1  k  zna~eni`
  ras1. w opisannom wy{e primere drajwera DX  peredaetsq  64  slowa  za
  odin raz, dobawlqq 2 k ras1 posle kavdoj pereda~i wo izbevanii  pere-
  polneniq otobraveniq.

       drugoj sposob peredwiveniq ukazatelq bufera - |to izmenitx  zna-
  ~enie Q.BUFF, izmenqq zna~enie w samom |lemente  o~eredi.  dlq  togo,
  ~toby otregulirowatx otobraveniq, neobhodimo wypolnitx sledu`}ie pro-
  cedury, operiruq termami 4k-slownyh edinic. sna~ala, posle  izmeneniq
  zna~eniq Q.BUFF, srawnitx nowoe zna~enie s 40000. esli  |to  zna~enie
  bolx{e ili rawno 40000, to wy~estx 20000 iz nego  i  dobawitx  200  k
  Q.PAR. |ti procedury ne tolxko  otreguliru`t  otobravenie,  no  takve
  budut sposobstwowatx izbevani` perepolneniq otobraveniq.

       dlq dostupa k l`boj q~ejke w  oblasti  polxzowatelxskogo  bufera
  (esli dano sme}enie bajta ot  na~ala  bufera)  neobhodimo  opredelitx
  ~islo 32-slownyh edinic w sme}enii, razdelqq 16-bitnoe sme}enie bajta
  na 100 (wosxmeri~nyh) i dobawlqq ~astnoe k ras1 i ostatok k Q.BUFF.

       naprimer, neobhodimo imetx dostup k bajtu pri sme}enii 12345  ot
  na~ala bufera. delenie 12345 na 100 daet ~astnoe 123  i  ostatok  45.
  dobawlenie 123 k teku}emu zna~eni` Q.PAR, kotoroe  rawno  3317,  daet
  3442 dlq nowogo zna~eniq ras1. dobawlenie 45 k zna~eni` Q.BUFF, koto-
  roe rawno 020024, daet 020071 kak nowyj adres bufera  (sleduet  zame-
  titx, ~to |to adres bajta).

                                 - 87 -




             5. drajwery sistemnogo ustrojstwa i zagruz~iki




       w |tom razdele prodolvaetsq opisanie drajwerow. daetsq  informa-
  ciq, kak sozdatx drajwer sistemnogo ustrojstwa ili  izmenitx  su}est-
  wu`}ij dlq ispolxzowaniq ego w ka~estwe sistemnogo. zdesx  priwodqtsq
  swedeniq o perwi~nom drajwere sistemnogo ustrojstwa i razli~nyh podp-
  rogrammah na~alxnoj zagruzki (zagruz~ikah). w  konce  razdela  daetsq
  informaciq o procedurah podprogrammy DUP dlq na~alxnoj zagruzki nowo-
  go sistemnogo ustrojstwa.



       5.1. fajly monitora



       fajl monitora dolven nahoditxsq na sistemnom ustrojstwe i  movet
  imetx l`boe imq, no trebuemym tipom fajla qwlqetsq .SYS. distributiw-
  nye monitory RT11 nazwany RT11BL.SYS, RT11SJ.SYS  i  RT11FB.SYS.  pri
  sozdanii monitora w processe generacii sistemy  ego  imenem  qwlqetsq
  RT11XX.SYG, gde XX predstawlqet BL, SJ, FB ili XM. dlq  ispolxzowaniq
  neobhodimo pereimenowatx monitor w tip .SYS.

       bloki s 0 po 4 kavdogo fajla monitora sodervat wtori~nyj zagruz-
  ~ik. wtori~nyj zagruz~ik zagruvaet drajwer  sistemnogo  ustrojstwa  i
  monitor w pamqtx. on takve izmenqet tablicy monitora  dlq  soedineniq
  monitora s drajwerom ustrojstwa i priswaiwaet imena (po umol~ani`) DK
  i SY.

       sam fajl monitora ne sodervit kod specialxnogo ustrojstwa, i  ne
  imeet swqzej s drajwerom specialxnogo ustrojstwa do na~alxnoj zagruz-
  ki. wmesto |togo,  kavdyj  drajwer  ustrojstwa,  kotoryj  movet  bytx
  ispolxzowan kak drajwer sistemnogo ustrojstwa, imeet specialxnyj blok
  s programmoj dlq sistemnogo ustrojstwa, nazwannyj  perwi~nym  drajwe-
  rom, kotoryj ispolxzuetsq  wtori~nym  zagruz~ikom  dlq  ~teniq  fajla
  drajwera sistemnogo ustrojstwa i fajla monitora  iz  sistemnogo  ust-
  rojstwa. wtori~nyj zagruzik imeet mesto w swoem bloke 0 dlq  hraneniq
  perwi~nogo drajwera.



       5.2. sozdanie drajwera sistemnogo ustrojstwa



       dlq sozdaniq drajwera sistemnogo ustrojstwa neobhodimo  dobawitx
  perwi~nyj drajwer k standartnomu drajweru ustrojstwa dannyh.

       drajwer sistemnogo  ustrojstwa  movet  sodervatx  SET-parametry.
  esli SET-parametry qwlq`tsq ~astx`  drajwera,  to  net  neobhodimosti
  udalqtx ih pri sozdanii drajwera sistemnogo ustrojstwa.

                                 - 88 -




       5.2.1. perwi~nyj drajwer



       perwi~nyj drajwer, kotoryj dobawlqetsq k  standartnomu  drajweru
  ustrojstwa dannyh, sostoit iz ~etyreh ~astej:
         - podprogramma whoda;
         - programmnyj zagruz~ik;
         - podprogramma ~teniq zagruz~ika;
         - podprogramma obrabotki o{ibki zagruz~ika.

       perwi~nyj drajwer wypolnqetsq  wmeste  s  na~alxnym  zagruz~ikom
  sistemy (BSTRAP) dlq zagruzki nowogo sistemnogo ustrojstwa. perwi~nyj
  drajwer polnostx` nahoditsq w P-sekcii DDBOOT, gde DD - |to  dwuhsim-
  wolxnoe imq ustrojstwa. kod wypolnqetsq w fizi~eskoj pamqti s  q~ejki
  0.



       5.2.2. podprogramma whoda



       to~koj whoda dlq perwi~nogo drajwera qwlqetsq DDBOOT:.  podprog-
  ramma whoda movet sodervatx tolxko dwe instrukcii. |timi instrukciqmi
  qwlq`tsq "NOP" i bezuslownyj perehod k na~alu programmnogo  zagruz~i-
  ka. esli na~alo programmnogo zagruz~ika nahoditsq sli{kom daleko  dlq
  bezuslownogo perehoda, to movno perejti po  instrukcii  JMP,  kotoraq
  na~inaet zagruzku programmnogo obespe~eniq. nive priwoditsq  podprog-
  ramma whoda dlq drajwera RK (BOOT1 opredelqetsq wperwi~nom drajwere):

   RKBOOT:: NOP
            BR    BOOt1

       l`boj apparatnyj zagruz~ik wyzywaet zagruzku w  pamqtx  koda  P-
  sekcii DDBOOT s q~ejki 0. on takve na~inaet wypolnenie s DDBOOT::.



       5.2.3. programmnyj zagruz~ik



       programmnyj zagruz~ik (podprogramma na~alxnoj zagruzki programm-
  nogo obespe~eniq) wypolnqetsq w rezulxtate perehoda  iz  podprogrammy
  whoda. kogda na~inaet wypolnqtsq programmnyj zagruz~ik, dlq ispolxzo-
  waniq predostawlq`tsq  wse  registry.  programmnyj  zagruz~ik  dolven
  wypolnqtx sledu`}ie funkcii w ukazannom porqdke:

  1) ustanowitx stek s q~ejki 10000;

  2) sohranitx nomer ustrojstwa, s kotorogo byla zagruvena sistema (|to
  - zna~enie w diapazone ot 0 do 7). metod, ispolxzuemyj dlq nahovdeniq
  nomera, izmenqetsq w  zawisimosti  ot  ustrojstwa;  nekotorye  nomera
  pereda`tsq w registr R0, drugie dolvny izwlekatxsq  iz  CSR.  sleduet
  hranitx nomer ustrojstwa w steke i, esli neobhodimo, gde-nibudx e}e w
  pamqti;

  3) wyzwatx podprogrammu ~teniq zagruz~ika dlq  s~itywaniq  ostaw{ejsq

                                 - 89 -




  ~asti zagruz~ika;

  4) pomestitx ukazatelx w B$READ podprogrammy ~teniq zagruz~ika;

  5) pomestitx zna~enie w kode RADIX-50 dlq "B$DNAM" w B$DEVN;

  6) sohranitx nomer ustrojstwa w B$DEVU;

  7) wypolnitx perehod k B$BOOT w zagruz~ike RT11 dlq prodolveniq.

       programmnyj  zagruz~ik  dolven  nahoditxsq  w  osnownom  priwode
  neposredstwenno nive q~ejki DDBOOT+64 (q~ejki s 667 po  776  sodervat
  podprogrammu obrabotki o{ibki, sozdannu` makrokomandoj .DREND).



       5.2.4. podprogramma ~teniq zagruz~ika



       nazna~enie podprogrammy ~teniq zagruz~ika zakl`~aetsq w s~itywa-
  nii toma s ustrojstwa, s kotorogo byla zagruvena sistema.  ona  wyzy-
  waetsq kak zagruz~ikom sistemy, tak i programmnym zagruz~ikom.

       interfejs, ~erez kotoryj drugie podprogrammy pereda`t informaci`
  podprogramme ~teniq zagruz~ika, sledu`}ij:
         - R0 sodervit nomer bloka dlq s~itywaniq;
         - R1 sodervit ~islo slow dlq s~itywaniq;
         - R2 sodervit adres bufera pamqti, w kotorom hranqtsq

       dannye.

       w podprogramme ~teniq zagruz~ika predostawlq`tsq dlq ispolxzowa-
  niq wse registry i stek.

       podprogramma ~teniq zagruz~ika ne dolvna  prerywatxsq  wo  wremq
  s~itywaniq toma soglasno parametram, peredawaemym w registry R0 - R2.
  w slu~ae o{ibki podprogramma dolvna perehoditx k BIOERR. pri otsutst-
  wii o{ibok ona dolvna wozwra}atxsq po instrukcii RTS PC  s  o~i}ennym
  bitom perenosa.

       podprogramma ~teniq zagruz~ika  dolvna  nahoditxsq  w  perwi~nom
  drajwere u q~ejki DDBOOT+210 (q~ejka 210 - |to  naimenx{ij  adres,  s
  kotorogo movet raspolagatxsq podprogramma ~teniq).



       5.2.5. podprogramma obrabotki o{ibki zagruz~ika



       podprogramma obrabotki o{ibki  zagruz~ika  na~inaetsq  s  q~ejki
  BIOERR::. kod w |toj podprogramme polnostx`  obespe~iwaetsq  makroko-
  mandoj .DREND, kotoraq pome}aetsq w konce osnownogo priwoda.

                                 - 90 -




       5.2.6. makrokomanda .DRBOT



       makrokomanda .DRBOT pomogaet pri ustanowke perwi~nogo  drajwera.
  ona takve wyzywaet makrokomandu .DREND dlq obozna~eniq konca  drajwe-
  ra, tak ~to perwi~nyj drajwer ne budet zagruvatxsq w pamqtx wo  wremq
  oby~nyh operacij. kod w perwi~nom  drajwere  movet  bytx  pozicionno-
  zawisimym. odnako, l`baq pozicionno-zawisimaq ssylka dolvna wyravatx-
  sq otnositelxno DDBOOT::. sleduet otmetitx, ~to q~ejki s  60  po  206
  polxzowatel` ne predostawlq`tsq.

       format makrokomandy .DRBOT sledu`}ij:

          .DRBOT NAME,ENTRY,READ

   gde

  NAME   - dwuhsimwolxnoe imq ustrojstwa;

  ENTRY  - to~ka whoda  podprogrammy  na~alxnoj  zagruzki  programmnogo
           obespe~eniq;

  READ   - to~ka whoda podprogrammy ~teniq zagruz~ika.

       makrokomanda .DRBOT pome}aet ukazatelx na~ala perwi~nogo drajwe-
  ra w q~ejku 62 fajla drajwera, dlinu perwi~nogo drajwera (w bajtah) -
  w q~ejku 64. perwi~nyj drajwer, wkl`~aq podprogrammu obrabotki  o{ib-
  ki, snabvennu` makrokomandoj .DREND, ne dolven prewy{atx 1000  (wosx-
  meri~nyh) bajtow. q~ejka 66 sodervit sme}enie  ot  na~ala  perwi~nogo
  drajwera k na~alu podprogrammy ~teniq zagruz~ika.

       makrokomanda  .DRBOT  wyzywaetsq  do  makrokomandy  .DREND.  kod
  osnownogo priwoda pome}aetsq mevdu makrokomandami  .DRBOT  i  .DREND.
  (sleduet pomnitx, ~to razmer perwi~nogo drajwera dolven  bytx  menx{e
  ili rawen odnomu bloku,  t.e.  1000  (wosxmeri~nym)  bajtam,  wkl`~aq
  podprogrammu obrabotki o{ibki i q~ejki s 60 po  206.)  sleduet  zame-
  titx, ~to makrokomanda .DREND wyzywaetsq dwavdy w drajwere sistemnogo
  ustrojstwa: odin raz makrokomandoj .DRBOT i odin raz,  kogda  ispolx-
  zuetsq w samom konce perwi~nogo  drajwera.  perwoe  poqwlenie  .DREND
  zakrywaet nesistemnu` sekci` drajwera ustrojstwa i, krome togo, usta-
  nawliwaet tablicu ukazatelej w monitorE. wtoroj wyzow .DREND  sozdaet
  podprogrammu obrabotki o{ibki  zagruz~ika  BIOERR  wmesto  powtoreniq
  tablicy ukazatelej.

       pri ispolxzowanii komandy BOOT  dlq  na~alxnoj  zagruzki  nowogo
  ustrojstwa programma DUP peredaet nomer sistemnogo ustrojstwa w  per-
  wi~nyj drajwer, w q~ejku 4722, i w registr R0. pri na~alxnoj zagruzke
  ustrojstwa apparatnym zagruz~ikom ili l`boj sistemnoj programmoj  (ne
  sistemy RT11) perwi~nyj drajwer dolven opredelitx  nomer  ustrojstwa,
  kotoroe bylo zagruveno, i sohranitx ego w q~ejke 4722 i registre R0.

                                 - 91 -




       5.3. programma DUP i process na~alxnoj zagruzki



       w |tom podrazdele pokazano,  kak  programma  DUP  wypolnqet  tri
  komandy, otnosq}iesq k na~alxnoj zagruzke. |ti komandy sledu`}ie:

          .BOOT DDN:FILNAM
          .COPY/BOOT XXN:FILNAM DDM:
          .BOOT DDN:



       5.3.1. komanda "BOOT DDN:FILNAM"



       komanda "BOOT DDN:FILNAM" ispolxzuetsq  dlq  na~alxnoj  zagruzki
  programmnogo obespe~eniq ukazannogo fajla monitora s ukazannogo  ust-
  rojstwa. w komandnoj stroke DD predstawlqet dwuhsimwolxnoe  imq  ust-
  rojstwa; N - nomer ustrojstwa; FILNAM - imq fajla monitora. oba  faj-
  la, fajl monitora i fajl drajwera ustrojstwa,  dolvny  bytx  na  ust-
  rojstwe DD.

       srazu ve posle wyda~i  |toj  komandy  programma  DUP  prowerqet,
  qwlqetsq li ustrojstwo DD ustrojstwom s prqmym dostupom. zatem  naho-
  dit fajl monitora FILNAM.SYS na ustrojstwe. DUP s~itywaet pqtx perwyh
  blokow (s 0 po 4) w bufer pamqti. |ti bloki sodervat  wtori~nyj  zag-
  ruz~ik monitora.

       predposlednee slowo w bloke 4 sodervit suffiks dlq imeni drajwe-
  row, swqzannyh s |tim monitorom. programma  DUP  ispolxzuet  |to  dlq
  postroeniq  imeni  fajla  drajwera  ustrojstwa  (imena   DD.SYS   ili
  DDX.SYS). DUP s~itywaet blok 0  fajla  drajwera  ustrojstwa  w  bufer
  pamqti, ispolxzuq sodervimoe q~eek 62 i 64 dlq nahovdeniq  perwi~nogo
  drajwera, i s~itywaet ego w bufer pamqti.

       zatem programma DUP kopiruet perwi~nyj drajwer w bufer w  na~alo
  wtori~nogo zagruz~ika, kotoryj takve nahoditsq w bufere  pamqti.  ona
  zagruvaet informaci`, pokazannu` w tabl. 9 dlq perwi~nogo drajwera  i
  wtori~nogo zagruz~ika.

                                                   tABLICA 9
                     informaciq DUP
   ----------------------------------------------------------
    sme}enie ot na~ala   !          sodervanie
      bufera pamqti      !
   ----------------------------------------------------------
          4722           !  nomer zagruvaemogo ustrojstwa
       4724-4726         !  imq zagruvaemogo fajla w RADIX-50
          5000           !  data zagruzki
       5002-5004         !  wremq zagruzki

       zatem, programma DUP kopiruet osnownoj priwod i  wtori~nyj  zag-
  ruz~ik iz bufera pamqti w q~ejki pamqti s 0 po 5004. zatem DUP  pere-
  hodit k q~ejke 1000, ~toby na~atx wtori~nu` zagruzku  s  to~ki  whoda
  DUP. posle |togo wtori~nyj zagruz~ik movet zagruzitx w pamqtx monitor
  i drajwer sistemnogo ustrojstwa.


                                 - 92 -




       na ris. 11 predstawlena procedura wypolneniq |toj komandy.

             procedura komandy "BOOT DDN:FILNAM"

         .     pamqtx      .
         .                 .
         .                 .
         !-----------------!
   !----<!perwi~nyj drajwer!<-----!
   !     !-----------------!      !
  <4>    ! blok 0 drajwera !<---! !
   !     !-----------------!    ! !
   !     !   wtori~nyj     !    ! !
   ! !--<!   zagruz~ik     !<-! !<3>
   ! !   !                 !  ! ! !
   ! !   ! - - - - - - - - !  ! ! !
   !-!-->!     blok 0      !  ! ! !          DDN:
     !   !   zagruz~ika    !  !<2>!   .                  .
     !   !-----------------!  ! ! !   .                  .
     !   !                 !  ! ! !   .                  .
     !   !                 !  ! ! !   !                  !
     !   !                 ! <1>! !   !------------------!
     !   !                 !  ! ! !--<! perwi~nyj drajwer!
    <5>  !                 !  ! !     !- - - - - - - - - !
     !   !                 !  ! !     !  fajl drajwera   !
     !   !                 !  ! !     !  DD.SYS   ili    !
     !   !                 !  ! !     !  DDX.SYS         !
     !   .                 .  ! !     !------------------!
     !   .                 .  ! !----<! blok 0 drajwera  !
     !   .                 .  !       !------------------!
     !   !                 !  !       .                  .
     !   !                 !  !       .                  .
     !   !                 !  !       .                  .
     !   !                 !  !       !------------------!
     !   !                 !  !       !  fajl monitora   !
     !   !                 !  !       !  "FILNAM.SYS"    !
     !   !                 !  !       ! - - - - - - - - -!
     !   !                 !  !------<!    bloki 0-4     !
     !   !-----------------!4777      !  fajla monitora  !
     !   !                 !          !------------------!
     !-->!                 !          .                  .
         !                 !          .                  .
         !-----------------!0         .                  .
                          ris. 11



       5.3.2. komanda "COPY/BOOT XXN:FILNAM DDM:"



       komanda "COPY/BOOT XXN:FILNAM DDM:" ispolxzuetsq dlq kopirowaniq
  wtori~nogo zagruz~ika iz fajla monitora na ustrojstwe XX w  bloki  2,
  3, 4 i 5 ustrojstwa DD. w komandnoj stroke XX  ukazywaet  ustrojstwo,
  na kotorom hranitsq fajl monitora; N - nomer ustrojstwa; DD predstaw-
  lqet dwuhsimwolxnoe imq  ustrojstwa,  prednazna~ennoe  dlq  polu~eniq
  zagruz~ika; M - nomer ustrojstwa.

       posle wyda~i |toj komandy programma DUP prowerqet,  qwlq`tsq  li

                                 - 93 -




  XX i DD ustrojstwami s prqmym dostupom. zatem DUP nahodit fajl  moni-
  tora FILNAM.SYS na ustrojstwe XXN: i  s~itywaet  perwye  pqtx  blokow
  fajla monitora (s 0 po 4) w bufer pamqti. |ti bloki sodervat  wtori~-
  nyj zagruz~ik dlq monitora.

       programma DUP nahodit fajl  sootwetstwu`}ego  drajwera  na  ust-
  rojstwe DD, s~itywaet blok 0 fajla drajwera ustrojstwa w bufer  pamq-
  ti, ispolxzuq sodervimoe q~eek 62  i  64  dlq  nahovdeniq  perwi~nogo
  drajwera, i s~itywaet ego w bufer pamqti.

       prevde ~em kopirowatx zagruz~ik na ustrojstwo drajwer sistemnogo
  ustrojstwa DD dolven uve bytx najden na DD. DUP zagruvaet dwa slowa w
  kode RADIX-50 dlq FILNAM w q~ejki 4724 i 4726  bufera  pamqti.  zatem
  kopiruet perwi~nyj drajwer w blok 0 ustrojstwa DD.  i,  nakonec,  DUP
  zapisywaet wtori~nyj zagruz~ik w bloki so wtorogo po pqtyj ustrojstwa
  DD.

       na ris. 12 pokazana procedura wypolneniq |toj komandy.

          procedura komandy "COPY/BOOT XXN:FILNAM DDM:"

                          .  pamqtx  .            .   DDM:   .
                          .          .            .          .
                          .          .            .          .
                          !          !            !          !
                          !----------!            !----------!
                      !--<! perwi~nyj!<----<3>----! perwi~nyj!
                      !   ! drajwer  !            ! drajwer  !
   .   XXN:   .      <4>  !----------!            ! - - - - -!
   .          .       !   !  blok 0  !<---!       !   fajl   !
   !          !       !   ! drajwera !    !       ! drajwera !
   !----------!       !   !----------!   <2>      !  DD.SYS  !
   !fajl moni-!       !   !          !    !       !   ili    !
   !  tora    !   !---!-->!wtori~nyj !>-! !       ! DDX..SYS !
   !FILNAM.SYS!   !   !   !zagruz~ik !  ! !       ! - - - - -!
   !- - - - - !  <1>  !   !          !  ! !       !  blok 0  !
   !          !   !   !   !          !  ! !------<! drajwera !
   !bloki 0-4 !   !   !   !----------!  !         !----------!
   !  fajla   !---!   !   .          . <5>        .          .
   !monitora  !       !   .          .  !         .          .
   !          !       !   .          .  !         !----------!
   !----------!       !                 !         !bloki 2-5 !
   !          !       !                 !-------->!ustrojstwa!
   !          !       !                           !          !
   .          .       !                           !----------!
   .          .       !                           !          !
   .          .       !                           !----------!
                      !                           !  blok 0  !
                      !-------------------------->!ustrojstwa!
                                                  !----------!

                          ris. 12

                                 - 94 -




       5.3.3. komanda "BOOT DDN:"



       komanda "BOOT DDN:" wypolnqet zagruzku programmnogo  obespe~eniq
  s ukazannogo ustrojstwa, na kotorom monitor uve imeet wtori~nyj  zag-
  ruz~ik w blokah 2, 3, 4 i 5 (pome}ennyj tuda komandoj  COPY/BOOt).  w
  komandnoj stroke DD predstawlqet dwuhsimwolxnoe imq ustrojstwa,  pod-
  leva}ee zagruzke; N - nomer ustrojstwa. oba fajla  (fajl  monitora  i
  fajl drajwera ustrojstwa) dolvny nahoditxsq na ustrojstwe DD.

       posle wyda~i  |toj  komandy  programma  DUP  sna~ala  prowerqet,
  qwlqetsq li ustrojstwo DD ustrojstwom s prqmym  dostupom.  zatem  ona
  s~itywaet bloki 2, 3, 4 i 5 w bufer pamqti. |ti bloki  sodervat  wto-
  ri~nyj zagruz~ik monitora. osnownoj priwod uve nahoditsq w q~ejkah  s
  0 po 776.

       programma DUP nahodit fajl drajwera na ustrojstwe DD. |ta proce-
  dura prowerqet, imeet li tom drajwer sistemnnogo ustrojstwa i  zagru-
  ven li on.

       zatem DUP izwlekaet imq fajla monitora iz q~eek 724 i 726  bloka
  4 i i}et fajl monitora na ustrojstwe.

       dalee programma DUP zagruvaet informaci`, priwedennu` w tabl. 10
  dlq perwi~nogo drajwera i wtori~nogo zagruz~ika.

                                                tABLICA 10
                   informaciq DUP
   --------------------------------------------------------
    sme}enie ot na~ala   !          sodervanie
      bufera pamqti      !
   --------------------------------------------------------
          4722           !  nomer zagruvaemogo ustrojstwa
          5000           !  data zagruzki
       5002-5004         !  wremq zagruzki

       zatem, programma DUP kopiruet perwi~nyj drajwer i wtori~nyj zag-
  ruz~ik iz ustrojstwa w q~ejki pamqti s 0 po 4777 i perehodit k q~ejke
  1000, ~toby na~atx wtori~nu` zagruzku s to~ki whoda DUP. posle  |togo
  wtori~nyj zagruz~ik movet zagruzitx monitor i drajwer sistemnogo ust-
  rojstwa w pamqtx.

       ris. 13 ill`striruet proceduru wypolneniq |toj komandy.

                                 - 95 -




                procedura komandy "BOOT DDN:"

        .      pamqtx       .           .        DDN:       .
        .                   .           .                   .
        .                   .           .                   .
        !                   !           !-------------------!
       /!-------------------!           !   fajl drajwera   !
      ! !                   !           !-------------------!
      ! !wtori~nyj zagruz~ik!<-------!  .                   .
   !-<  !                   !       <1> .                   .
   !  ! !                   !        !  !-------------------!
   !  ! ! - - - - - - - - - !        !  !   fajl monitora   !
   !  ! ! perwi~nyj drajwer !<-----! !  !-------------------!
   !   \!-------------------!      ! !  .                   .
   !    !                   !      ! !  .                   .
   !    !                   !      ! !  !-------------------!
   !    .                   .     <1>!  !wtori~nyj zagruz~ik!
  <2>   .                   .      ! !-<!                   !
   !    .                   .      !    !    (bloki 2-5     !
   !    !                   !      !    !    ustrojstwa)    !
   !    !-------------------!4777  !    !-------------------!
   !    !                   !      !    !-------------------!
   !--->!                   !      !---<! perwi~nyj drajwer !
        !                   !           !(blok 0 ustrojstwa)!
        !-------------------!0          !-------------------!

                      ris. 13




          6. assemblirowanie, komponowka i ustanowka drajwera




       assemblirowanie, komponowka i  ustanowka  nowogo  drajwera  ust-
  rojstwa qwlq`tsq prostymi procedurami. ih opisanie podrobno  izloveno
  nive.



       6.1. assemblirowanie drajwera



       ishodnyj fajl  drajwera  na  makroassemblere  dolven  imetx  imq
  DD.MAC, gde DD - |to dwuhsimwolxnoe imq ustrojstwa. dlq udobstwa ~te-
  niq listinga i raspe~atki ras{ireniq makrokomand, takih kak .DRBEG  i
  .DRAST, ispolxzuetsq kl`~ makroassemblera /SHOW:MEB.

       pri assemblirowanii drajwera dlq sistem RT11SJ i RT11FB  ispolx-
  zuetsq sledu`}aq komanda:

   .MACRO SYSCND+DD/OBJ:DD

  dlq RT11XM - komanda:

                                 - 96 -




   .MACRO XM+SYSCND+DD/OBJ:DDh

       XM - |to distributiwnyj  ishodnyj  fajl  sistemy  RT11,  kotoryj
  obespe~iwaet swojstwo ras{irennoj  pamqti  dlq  operatiwnogo/fonowogo
  zadaniq.

       SYSCND.MAC - fajl parametrow sistemy, sozdannyj w processe gene-
  racii rabo~ej wersii RT11. on dolven ispolxzowatxsq pri assemblirowa-
  nii |togo drajwera, ~toby izbevatx konflikta s sistemoj.



       6.2. komponowka drajwera



       esli ishodnyj fajl assembliruetsq bez o{ibok, to on gotow k kom-
  ponowke. pri komponowke drajwera dlq RT11SJ ili  RT11FB  ispolxzuetsq
  sledu`}aq komanda:

          .LINK/MAP/EXECUTE:DD.SYS DD

  dlq sistemy RT11XM - komanda:

          .LINK/MAP/EXECUTE:DDX.SYS DDX



       6.3. ustanowka drajwera



       prevde ~em ispolxzowatx nowyj drajwer neobhodimo dobawitx infor-
  maci` o nem w tablicy ustrojstw monitora. process  dobawleniq  nowogo
  ustrojstwa nazywaetsq ustanowkoj. w sisteme RT11 |to  movno  osu}est-
  witx pri zagruzke sistemy ili s pomo}x` komandy monitora INSTALL. pri
  |tom neobhodimo ~toby pered ustanowkoj drajwera ustrojstwa apparatura
  ego prisutstwowala i byla wkl`~ena. nive opisan  sposob,  kak  obojti
  |to ograni~enie, esli neobhodimo ustanowitx drajwer dlq nepodkl`~eno-
  go ustrojstwa.

       nive opisywa`tsq razli~nye sposoby ustanowki drajwerow ustrojstw
  w sisteme RT11.



       6.3.1. awtomati~eskaq ustanowka zagruz~ikom



       podprogramma na~alxnoj zagruzki (zagruz~ik) opredelqet  mestona-
  hovdenie drajwera sistemnogo ustrojstwa  na  ustrojstwe,  s  kotorogo
  zagruvena sistema, i ustanawliwaet ego. zatem ona skaniruet ostalxnye
  fajly drajwerow na sistemnom ustrojstwe i pytaetsq  ustanowitx  soot-
  wetstwu`}ij drajwer dlq kavdogo ustrojstwa,  kotoroe  ona  nahodit  w
  sisteme. esli ustrojstwo ne podkl`~eno, to zagruz~ik ne ustanawliwaet
  ego drajwer.

       edinstwennaq trudnostx w |toj procedure woznikaet w slu~ae, esli

                                 - 97 -




  fajlow drajwerow bolx{e, ~em slotow ustrojstw. distributiwnyj monitor
  rezerwiruet odin slot dlq kavdogo ustrojstwa, kotoroe  podderviwaetsq
  RT11. monitor, sozdawaemyj w rezulxtate generacii  sistemy,  rezerwi-
  ruet odin slot dlq kavdogo ustrojstwa, zapra{iwaemogo  polxzowatelem.
  pomimo |togo, on obespe~iwaet rqd pustyh slotow, ukazannyh  polxzowa-
  telem. s~itaetsq, ~to slot rezerwiruetsq dlq opredelennogo  ustrojst-
  wa, esli tablica monitora $PNAME imeet  whod  dlq  |togo  ustrojstwa.
  slot qwlqetsq pustym, esli tablica imeet nulewoe slowo w $PNAME.

       podprogramma awtomati~eskoj ustanowki  ustrojstwa  pri  zagruzke
  imeet rqd prioritetow dlq opredeleniq kakie  drajwery  ustanawliwatx,
  esli drajwerow bolx{e, ~em slotow. esli wse sloty pustye, to  zagruz-
  ~ik ustanawliwaet drajwer sistemnogo ustrojstwa pl`s perwye  drajwery
  podkl`~ennyh ustrojstw, kotorye on wstre~aet na sistemnom ustrojstwe.
  naprimer, esli sistema imeet 8 pustyh slotow, to zagruz~ik ustanawli-
  waet drajwer sistemnogo ustrojstwa i perwye semx  drajwerow,  kotorye
  ona nahodit na sistemnom ustrojstwe.

       esli odin ili bolee slotow rezerwiru`tsq dlq  opredelennyh  ust-
  rojstw (t.e. ustrojstwa ime`t whody w tablice $PNAME),  to  zagruz~ik
  rezerwiruet |ti sloty dlq sootwetstwu`}ih drajwerow do teh por,  poka
  on ne prowerit, wkl`~ena li nadleva}aq  apparatura.  esli  apparatura
  podkl`~ena, to zagruz~ik ustanawliwaet drajwer ustrojstwa. esli appa-
  ratura ne podkl`~ena, to zagruz~ik  o~i}aet  whod  $PNAME,  sozdawaq,
  takim obrazom, pustoj slot.

       na ris.14 priweden algoritm, kotoryj  ispolxzuet  zagruz~ik  dlq
  ustanowki drajwerow ustrojstw.

                                 - 98 -




      algoritm zagruz~ika dlq ustanowki drajwera ustrojstwa

                              <a>
                               !
                               V
           ----------------------------------------
           ! proweritx, estx li fajl drajwera na  !
           !      sistemnom ustrojstwe ?          !
           ----------------------------------------
                               !
                               V
                  -----------------------------
                  !  imeetsq whod w $PNAME ?  !
                  -----------------------------
                               I
           da ---------------------------------- net
              V                                V
   --------------------   ----------------------------------
   ! uve ustanowlen ? !   ! imeetsq pustoj slot w $PNAME ? !
   --------------------   ----------------------------------
              !                            !
      da ----------------- net   da ------------------ net
         V               !          !                V
   --------------------  !          !    --------------------
   !   ignorirowatx   !  !          !    !   ignorirowatx   !
   --------------------  !          !    --------------------
         V               V          V                V
   ---------------     -----------------     ---------------
   !  GO TO  <A> !     !  apparatura   !     !  GO TO  <A> !
   ---------------     !  podkl`~ena ? !     ---------------
                       -----------------
                               V
              da ------------------------------ net
                 V                            V
   -------------------------------    ------------------------
   ! pomestitx imq drajwera w    !    ! o~istitx whod $PNAME,!
   ! $PNAME i ustanowitx drajwer !    !    esli ustrojstwo   !
   -------------------------------    !       podkl`~eno     !
                 !                    ------------------------
                 V                               V
          ---------------                  ---------------
          !  GO TO  <a> !                  !  GO TO  <a> !
          ---------------                  ---------------

                          ris. 14

       kak widno, drajwery s whodami w tablice $PNAME  ime`t  naiwys{ij
  prioritet wo wremq zagruzki. esli fajl drajwera nahoditsq na  sistem-
  nom ustrojstwe i apparatura ustrojstwa podkl`~ena, to zagruz~ik wseg-
  da ustanawliwaet |tot drajwer.

       esli drajwer ustrojstwa napisan polxzowatelem, to pri  ustanowke
  ego w sisteme RT11 problem ne wozniknet, t.k. zagruz~ik sam ustanowit
  ego, esli |tot drajwer nahoditsq na sistemnom ustrojstwe i w tablicah
  monitora imeetsq pustoj slot. esli sistema ne imeet swobodnogo slota,
  to movno sozdatx odin ili bolee slotow, sohraniw (naprimer,  pereime-
  nowaw) neskolxko fajlow drajwerow ustrojstwa na sistemnom ustrojstwe,
  i powtorno zagruzitx sistemu. movno takve ispolxzowatx komandu  moni-
  tora INSTALL dlq ustanowki nowogo drajwera, ne wypolnqq nowoj zagruz-

                                 - 99 -




  ki sistemy. (|tot nowyj drajwer movet  bytx  tem  drajwerom,  kotoryj
  zagruz~ik ne smog ustanowitx iz-za nedostatka swobodnyh  slotow,  ili
  |to movet bytx nowyj drajwer, kotoryj sozdan polxzowatelem i skopiro-
  wan na sistemnoe ustrojstwo.) esli sgenerirowana nowaq sistema, movno
  ispolxzowatx makrokomandu DEV, ~toby zarezerwirowatx slot dlq  nowogo
  drajwera ustrojstwa i ukazatx emu prioritet dlq  ustanowki  wo  wremq
  na~alxnoj zagruzki. na ris. 15 kratko izloveny sposoby, kotorymi mov-
  no ustanowitx nowyj drajwer ustrojstwa.

                                 - 100 -




            ustanowka nowogo drajwera ustrojstwa

                           <A>
                            V
             --------------------------------
             !       zagruzka sistemy       !
             --------------------------------
                            V
       ------------------------------------------------
       ! imeetsq li drajwer na sistemnom ustrojstwe ? !
       ------------------------------------------------
                            !
           da --------------------------------- net
              V                               V
   ------------------   -------------------------------------
   ! imeetsq pustoj !   ! skopirowatx drajwer na sistemnoe  !
   !     slot ?     !   !    ustrojstwo ili sozdatx ego     !
   ------------------   -------------------------------------
              !                                     V
    da --------------------- net             -----------------
       V                   V                 !    imeetsq    !
   -----------------   ------------------    ! pustoj slot ? !
   !   ustanowitx  !   ! udalitx odin   !    -----------------
   !    drajwer    !   ! fajl drajwera  !           !
   ! awtomati~eski !   ! i perejti k <a>!           !
   -----------------   ------------------           !
       !                      !                     !
       !    ------------------!                     !
       !    !           da ------------------------------ net
       !    !              V                            V
       !    !       ----------------    --------------------
       !    !       ! ispolxzowatx !    !  ispolxzowatx    !
       !    !       !   INSTALL    !    ! REMOVE i INSTALL !
       !    !       ----------------    --------------------
       !    !              V                      !
       !    !   -----------------------------     !
       !    !   ! drajwer awtomati~eski     !     !
       !    !   ! ustanawliwaetsq wo wremq  !     !
       !    !   ! o~erednoj   zagruzki      !     !
       !    !   -----------------------------     !
       !    !               !                     !
       V    V               V                     V
     -------------------------------------------------
     !  sozdan monitor wo wremq generacii sistemy ?  !
     -------------------------------------------------
                            !
      da -------------------------------------- net
         V                                    V
   -------------------------------   ---------------------
   ! ispolxzowatx makrokomandu   !   ! pomestitx komandy !
   ! DEV dlq rezerwirowaniq      !   ! REMOVE i INSTALL  !
   ! slota dlq |togo ustrojstwa. !   ! w startowyj       !
   ! ono movet ustanawliwatxsq   !   ! komandnyj fajl    !
   ! awtomati~eski pri o~erednoj !   ---------------------
   ! zagruzke                    !
   -------------------------------

                    ris. 15

                                 - 101 -




       6.3.2. ru~naq ustanowka komandoj INSTALL



       pered ispolxzowaniem  komandy  INSTALL  dlq  ustanowki  drajwera
  wru~nu` neobhodimo ispolxzowatx komandu SHOW, ~toby uwidetx,  ime`tsq
  li pustye sloty dlq ustrojstw  w  sisteme.  esli  ih  net,  to  nuvno
  ispolxzowatx komandu REMOVE dlq udaleniq nenuvnogo ustrojstwa i  pre-
  dostawitx mesto dlq nowogo, kotoroe dobawlqetsq komandoj INSTALL.

       esli slot dlq ustrojstwa uve imeetsq, to ustrojstwo awtomati~es-
  ki ustanowitsq pri na~alxnoj zagruzke sistemy. sleduet  pomnitx,  ~to
  komandy REMOVE ili INSTALL  neobhodimo  ispolxzowatx  dlq  dobawleniq
  nowogo ustrojstwa kavdyj raz, esli  osu}estwlena  na~alxnaq  zagruzka
  sistemy. |ta zada~a zna~itelxno  uprostitsq,  esli  wwesti  ukazannye
  komandy monitora w startowyj komandnyj fajl. pri |tom sozdastsq widi-
  mostx postoqnnoj ustanowki ustrojstwa.



       6.3.3. awtomati~eskaq ustanowka makrokomandoj DEV



       imeetsq e}e odna wozmovnostx awtomati~eskoj ustanowki  drajwera.
  ee movno osu}estwitx wo wremq  generacii  sistemy.  dlq  |togo  nuvno
  otredaktirowatx fajl SYSTBL.MAC, ukazaw w nem  makrokomandu  DEV  dlq
  ustanowki neobhodimogo drajwera.

       makrokomanda DEV w fajle SYSTBL.MAC ispolxzuetsq dlq postoqnnogo
  wwedeniq nowogo ustrojstwa w sistemu.

       format makrokomandy DEV sledu`}ij:

          DEV NAME,S

   gde

  NAME   - dwuhsimwolxnoe imq ustrojstwa;

  S      - slowo sostoqniq ustrojstwa (neobqzatelxnyj argument).

       sledu`}ie primery wzqty iz fajla SYSTBL:

          DEV    RK      ;ustanowitx disk RK
          DEV    LP      ;ustanowitx ustrojstwo LP
          DEV    MT      ;ustanowitx lentu MT

       posle wwedeniq w fajl  SYSTBL.MAC  makrokomandy  DEV  neobhodimo
  powtorno assemblirowatx ego. dlq |togo ispolxzowatx sledu`}u`  koman-
  du:

          .MACRO/OBJECT:TBXX XX+SYCND+SYSTBL

       w |toj komandnoj stroke XX  predstawlqet  imq  SJ,  FB  ili  XM.
  SJ.MAC, FB.MAC i XM.MAC - |to distributiwnye fajly RT11; oni  oprede-
  lq`t, razre{aetsq li fonowaq/operatiwnaq obrabotka. fajl XM.MAC, kro-
  me togo, ukazywaet, imeetsq li obespe~enie ras{irennoj  pamqti.  esli
  assemblirowanie uve zawer{eno, to neobhodimo  prosto  perekomponowatx

                                 - 102 -




  ob'ektnye fajly dlq sozdaniq nowogo monitora. |ti komandy nahodqtsq w
  komandnom fajle, polu~ennom w rezulxtate generacii sistemy.



       6.3.4. ustanowka drajwera podkl`~ennogo ustrojstwa



       pri oby~noj ustanowke drajwera mogut bytx  ustanowleny  drajwery
  tolxko teh ustrojstw, apparatura kotoryh w teku}ej konfiguracii  sis-
  temy podkl`~ena. programmy prowerq`t q~ejku 176 w bloke 0 drajwera  i
  adres, soderva}ijsq w |toj q~ejke, kotoryj oby~no  qwlqetsq  CSR  dlq
  ustrojstwa. esli apparatura ustrojstwa ne podkl`~ena w sisteme, to na
  {ine woznikaet tajm-aut, wyzywa`}ij prerywanie po q~ejke 4. w rezulx-
  tate ni podprogramma na~alxnoj zagruzki, ni komanda INSTALL ne  usta-
  nowqt drajwer ustrojstwa. pomimo  |togo,  pri  popytke  ustanowki  po
  komande INSTALL budet nape~atatano soob}enie "?KMON-F-ILLEGAL  DEVICE
  INSTALLATION".

       s~itaetsq, ~to apparatura ustrojstwa podkl`~ena, esli CSR  naho-
  ditsq na {ine. odnako, w nekotoryh slu~aqh, |togo testa nedostato~no,
  ~toby opredelitx, kakoe apparatnoe ustrojstwo  podkl`~eno.  naprimer,
  nekotorym ustrojstwam na stranice wwoda/wywoda dlq odnogo  ili  bolee
  registrow sostoqniq priswaiwa`tsq  odinakowye  adresa.  esli  sistema
  prowerila razdelqemyj adres na stranice wwoda/wywoda, to ona  e}e  ne
  znaet, kakoe iz dwuh ustrojstw dejstwitelxno podkl`~eno i kakoj draj-
  wer ustanawliwatx. naprimer, ustrojstwa gibkih diskow DX i  DY  ime`t
  odin i tot ve adres na {ine i odno i to ve ~islo registrow  sostoqniq
  na stranice wwoda/wywoda. kogda RT11 pytaetsq ustanowitx drajwer  DX,
  to sistema dolvna opredelitx, podkl`~ena li apparatura i qwlqetsq  li
  ona ustrojstwom DX. estestwenno, ~to sistema ne dolvna  ustanawliwatx
  drajwer DX, esli apparaturoj qwlqetsq ustrojstwo gibkogo diska DY.

       wsegda ime`tsq nekotorye razli~iq mevdu  dwumq  ili  bolee  ust-
  rojstwami,  kotorye  movno  opredelitx  po  registram   na   stranice
  wwoda/wywoda. kavdyj drajwer odnogo iz ustrojstw, blizkih po  identi-
  fikacii, movet prowerqtx |to razli~ie i soob}atx  podprogramme  usta-
  nowki RT11, ustanawliwatx ili net drajwer ustrojstwa,  kotoryj  rass-
  matriwaet sistema.



       6.3.5. podprogramma prowerki ustanowki ustrojstwa



       wse drajwery ustrojstw sistemy RT11,  kotorye  razdelq`t  adresa
  stranicy wwoda/wywoda, sodervat podprogrammu prowerki  ustanowki  dlq
  opredeleniq, kakoe apparatnoe  ustrojstwo  fakti~eski  podkl`~eno,  i
  razre{eniq (ili zapre}eniq) ustanowki rassmatriwaemogo drajwera. esli
  drajwer ustrojstwa napisan polxzowatelem, on movet imetx  sobstwennu`
  podprogrammu prowerki ustanowki.

       w ob}em, podprogrammy prowerki ustanowki razli~a`t, kakaq  appa-
  ratura podkl`~ena, w zawisimosti ot treh sledu`}ih uslowij:

         - iz dwuh ustrojstw,  kotorye  razdelq`t  nekotorye  registry,
           odno imeet bolx{e registrow, ~em drugoe;

                                 - 103 -




         - esli dwa ustrojstwa razdelq`t adresa dlq  wseh  registrow  i
           oni ime`t odno i to ve ~islo registrow, to  odno  ustrojstwo
           movet imetx bit ~teniq/zapisi, togda kak drugoe - tolxko bit
           ~teniq;

         - inogda ustrojstwo imeet unikalxnyj bit ili bajt  identifika-
           cii.

       podprogrammy prowerki  ustanowki  opredelq`t,  kakoe  ustrojstwo
  podkl`~eno, rukowodstwuqsx rezulxtatami prowerki odnogo iz |tih  raz-
  li~ij. esli razli~ie najdeno, to podprogramma prowerki  signaliziruet
  podprogramme ustanowki RT11, ustanawliwatx li rassmatriwaemyj drajwer
  i peredawatx uprawlenie monitoru. pri |tom  bit  "C"  ustanawliwaetsq
  dlq predotwra}eniq ustanowki drajwera i o~i}aetsq - dlq razre{eniq.

       sleduet otmetitx,  ~to  podprogramma  prowerki  ustanowki  movet
  ispolxzowatx wse ob}ie registry.



       6.3.5.1. to~ki whoda podprogrammy prowerki



       podprogramma prowerki ustanowki, kotoru`  pi{et  polxzowatelx  w
  sobstwennom drajwere, na~inaetsq s q~ejki 200 w bloke 0 drajwera. ona
  ne dolvna wyhoditx za q~ejku 356.

       q~ejka 200 qwlqetsq to~koj whoda, kotoru`  zagruz~ik  i  komanda
  monitora INSTALL ispolxzu`t dlq ustanowki ustrojstwa dannyh.

       q~ejka 202 qwlqetsq to~koj whoda, kotoru`  zagruz~ik  ispolxzuet
  dlq ustanowki sistemnogo ustrojstwa. komanda monitora INSTALL nikogda
  ne ispolxzuet ee.

       esli polxzowatelq ne interesuet, ustanawliwaetsq li drajwer  kak
  sistemnoe ustrojstwo ili kak ustrojstwo dannyh, neobhodimo  pomestitx
  instrukci` NOP w q~ejku 200. esli drajwer dolven bytx ustanowlen  kak
  sistemnyj, to ispolxzu`tsq sledu`}ie  instrukcii  dlq  predotwra}eniq
  ustanowki ego l`bymi drugimi sposobami:

           .=200           ;ne sistemnaq to~ka whoda
           BR      ERROR   ;perehod na o{ibku
           .
           .
           .
   ERROR:  SEC             ;ustanowitx bit "C"
           RTS     PC      ;i wozwratitxsq



       6.3.5.2. nali~ie dopolnitelxnogo registra



       esli |tot drajwer prednazna~aetsq dlq ustrojstwa, kotoroe razde-
  lqet adres stranicy wwoda/wywoda s drugim ustrojstwom, to movno opre-
  delitx, kakoe ustrojstwo podkl`~eno,  esli  oni  ime`t  raznoe  ~islo
  registrow. kogda ustrojstwo dlq rassmatriwaemogo  drajwera  imeet  na

                                 - 104 -




  odin registr bolx{e, ~em drugoe ustrojstwo, to ispolxzu`tsq sledu`}ie
  instrukcii dlq prowerki dopolnitelxnogo registra.

          MOV     176,R0  ;polu~itx adres CSR
          TST     N(R0)   ;estx dopolnitelxnyj registr
                          ;na sme}enii N ?
          RTS     PC      ;wernutxsq (bit perenosa
                          ;ustanawliwaetsq, esli net
                          ;ustrojstwa

       |ta podprogramma  prowerqet  nali~ie  dopolnitelxnogo  registra.
  esli ego net, to na {ine proishodit tajm-aut, ~to wyzywaet prerywanie
  po wektoru 4, i ustanawliwaetsq bit perenosa.  podprogramma  prowerki
  ustanowki peredaet uprawlenie monitoru s ustanowlennym bitom  pereno-
  sa, ukazywaq, ~to apparatura dlq rassmatriwaemogo drajwera ne podkl`-
  ~ena, i |tot drajwer ne movet bytx ustanowlen.

       s drugoj storony, esli test obnaruvil dopolnitelxnyj registr, to
  instrukciq TST wozwra}aetsq s o~i}ennym bitom perenosa. |to ozna~aet,
  ~to imeetsq apparatura dlq |togo drajwera, i sistema  RT11  ustanowit
  |tot drajwer.



       6.3.5.3. otsutstwie dopolnitelxnogo registra



       esli rassmatriwaemoe ustrojstwo imeet menx{e registrow, ~em ust-
  rojstwo, s kotorym ono razdelqet adresa na stranice wwoda/wywoda,  to
  drajwer |togo ustrojstwa movet proweritx  otsutstwie  dopolnitelxnogo
  registra. esli dopolnitelxnyj registr  ne  najden,  to  sistema  RT11
  dolvna ustanowitx rassmatriwaemyj drajwer.

       nive priweden primer, ill`striru`}ij |tu situaci`:

           MOV     176,R0  ;polu~itx adres CSR
           TST     N(R0)   ;estx dopolnitelxnyj registr
                           ;na sme}enii N ?
           BCC     1$      ;da, zdesx drugoe ustrojstwo
           CLC             ;net, o~istitx bit "C"
           RTS     PC      ;ustanowitx drajwer

   1$:     SEC             ;ustanowitx bit "C"
           RTS     PC      ;ne ustanawliwatx drajwer

       |ta podprogramma prowerqet nali~ie dopolnitelxnogo registra dru-
  gogo ustrojstwa. esli on otsutstwuet, to  podprogramma  daet  sisteme
  RT11 komandu ustanowitx rassmatriwaemyj drajwer.



       6.3.5.4. bit ili bajt identifikacii



       esli ustrojstwa, kotorye razdelq`t adresa stranicy wwoda/wywoda,
  otli~a`tsq bitom ili bajtom identifikacii, to  podprogramma  prowerki
  ustanowki movet proweritx bit ili bajt i opredelitx, kakaq apparatura

                                 - 105 -




  podkl`~ena. zatem, w zawisimosti ot |toj informacii, ona movet razre-
  {itx (ili zapretitx) ustanowku rassmatriwaemogo drajwera.

       naprimer, w RT11 ustrojstwa DX i DY razdelq`t CSR. bit 11,  naz-
  wannyj CSRX02, o~i}aetsq, esli ustrojstwom qwlqetsq DX, i  ustanawli-
  waetsq, esli ustrojstwom qwlqetsq DY. nive priweden primer iz drajwe-
  ra ustrojstwa DY, kotoryj dolven bytx ustanowlen, esli ego apparatura
  podkl`~ena.

          .ASECT
          . = 200         ;whod w podprogrammu prowerki
          NOP             ;takaq ve prowerka dlq
                          ;sist. i nesist. ustrojstwa
          BIT     #CSRX02,@176    ;|to bit DY ?
          BEQ     1$      ;net, |to DX.
                          ;ne ustanawliwatx drajwer DY
          TST     (PC)+   ;o~istitx bit perenosa,
                          ;propustitx instrukci` "SEC".
                          ;|to DY, po|tomu ustanowitx
                          ;ego drajwer
   1$:    SEC             ;ustanowitx bit "C",
                          ;ne ustanawliwatx drajwer DY
          RTS     PC      ;wernutxsq w monitor



       6.3.5.5. bit ~teniq/zapisi ustrojstwa



       esli  odno  iz  ustrojstw,  kotorye  razdelq`t  adresa  stranicy
  wwoda/wywoda, imeet bit ~teniq/zapisi w CSR, togda drugoe  ustrojstwo
  imeet tolxko bit ~teniq. w |tom slu~ae  podprogramma  prowerki  movet
  ustanowitx, kakaq apparatura podkl`~ena, wypolnqq  oby~nu`  proceduru
  prowerki bita, i razre{itx (ili zapretitx) ustanowku rassmatriwaemogo
  drajwera. podprogramma dolvna s~itatx bit, izmenitx  ego  i  zapisatx
  obratno w CSR. zatem podprogramma dolvna snowa s~itatx bit. esli zna-
  ~enie bita izmenilosx, to ustrojstwo s registrom ~teniq/zapisi  podk-
  l`~eno. esli zna~enie bita ostalosx prevnim, to imeetsq ustrojstwo  s
  registrom tolxko ~teniq. podprogramma movet ustanowitx  bit  perenosa
  nadleva}im obrazom i peredatx uprawlenie monitoru. esli bit  perenosa
  ustanowlen, to RT11 ne ustanawliwaet |tot drajwer. esli bit  perenosa
  o~i}en, to drajwer ustanawliwaetsq.



       6.3.6. ustanowka drajwera nepodkl`~ennogo ustrojstwa



       esli po kakoj-libo pri~ine neobhodimo  ustanowitx  drajwer  ust-
  rojstwa, apparatura kotorogo ne podkl`~ena w rassmatriwaemoj konfigu-
  racii sistemy, to podprogrammu na~alxnoj zagruzki i  komandu  INSTALL
  movno obojti sistemnoj programmoj SIPP. q~ejki 176 i 200  w  bloke  0
  fajla drajwera sleduet o~istitx, zatem ispolxzowatx  komandu  INSTALL
  ili powtorno zagruzitx sistemu dlq ustanowki drajwera ustrojstwa.

                                 - 106 -




               7. prowerka i otladka drajwera ustrojstwa




       esli nowyj drajwer assemblirowan, skomponowan i  ustanowlen,  to
  movno na~atx ego prowerku. wo  wremq  otladki  sleduet  pomnitx,  ~to
  neobhodimo kavdyj raz udalqtx prevnij fajl i ustanawliwatx nowyj  pri
  sozdanii nowoj wersii drajwera DD(X).SYS.

       prowerka drajwera osu}estwlqetsq w tri |tapa:

  1) ispolxzowatx sistemnu` programmu ODT dlq prowerki pereda~i  dannyh
  drajwerom;

  2) proweritx drajwer komandami klawi{nogo monitora, sistemnymi  prog-
  rammami i programmami na  qzyke  fortran  sm  ili  bejsik.  proweritx
  komandu COPY ili programmu PIP, kopiruq dannye s ustrojstwa  na  ust-
  rojstwo. ispolxzowatx drajwer s  operatorami  READ  ili  WRITE  qzyka
  fortran sm ili s operatorami INPUT ili PRINT qzyka bejsik. esli draj-
  wer ustanawliwaet bit w slowe sostoqniq  ustrojstwa,  kotoryj  ukazy-
  waet, ~to drajwer dlq ustrojstwa fajlowoj struktury RT11, to program-
  ma DUP budet funkcionirowatx prawilxno na ustrojstwe  bez  dalxnej{ih
  modifikacij. t.e. movno ispolxzowatx DUP dlq inicializacii ustrojstwa
  (komandoj INITIALIZE) i dlq ob'edineniq swobodnoj  oblasti  (komandoj
  SQUEEZE). programma RESORC ne trebuet modifikacij  dlq  raspoznawaniq
  nowogo ustrojstwa i wkl`~aet ego w protokol komandy SHOW DEVICES;

  3) porabotatx s prikladnoj programmoj, kotoraq  ispolxzuet  programmy
  wwoda/wywoda w revime ovidaniq, asinhronnogo wwoda/wywoda i  podprog-
  rammy zawer{eniq.

       esli drajwer pro{el uspe{no ~erez wse testy, to movno na~atx ego
  ispolxzowanie w sisteme RT11.



       7.1. ispolxzowanie ODT dlq prowerki drajwera



       ~toby ispolxzowatx programmu ODT dlq prowerki drajwera,  neobho-
  dimo wypolnitx ODT kak operatiwnoe zadanie. otladku drajwera proizwo-
  ditx pod uprawleniem RT11FB.

       rekomenduetsq, ~toby wo wremq otladki w sisteme byl odin polxzo-
  watelx. neobhodimo zagruzitx sistemu apparatnym  zagruz~ikom,  no  ne
  zapuskatx nikakih  sistemnyh  zada~  i  ne  zagruvatx  drajwery.  pri
  ispolxzowanii grafi~eskogo displeq neobhodimo wydatx komandu  GT  ON.
  po |toj komande drajwer GT zagruzitsq  w  werhn``  ~astx  pamqti  pod
  rezidentnyj monitor.

       dalee, skomponowatx programmu ODT dlq  operatiwnogo  zadaniq  po
  sledu`}ej komande:

          .LINK/MAP/FOREGROUND ODT

       zatem zagruzitx drajwer ustrojstwa, podleva}ij otladke:

                                 - 107 -




          .LOAD DD[X]

       po karte zagruzki dlq ODT opredelitx dlinu ODT,  wy~itaq  tysq~u
  iz werhnego predela. esli, k  primeru,  werhnej  granicej  byl  adres
  7100, togda dlina ODT budet rawna 6100 (wosxmeri~nym) slowam.

       zapustitx ODT kak operatiwnoe zadanie.  dlq  opredeleniq  adresa
  zagruzki programmy ODT ispolxzowatx kl`~ /P:

          .FRUN ODT/P
       zagruveno s 123532

  zatem wydatx komandu RESUME dlq zapuska ODT:

          .RESUME
            ODT V01.04


       pRIME^ANIE. poskolxku ODT qwlqetsq operatiwnym zadaniem  i  pos-
  lednim zagruvennym drajwerom qwlqetsq drajwer, podleva}ij otladke, to
  on raspolagaetsq w pamqti nad programmoj ODT.

       pomestitx adres zagruzki ODT w registr pereme}eniq 0:

          123532;0R

       otkrytx q~ejku, sledu`}u` za ODT w pamqti, ispolxzuq razmer sme-
  }eniq ODT ot registra pereme}eniq 0:

          0,6100/  704

       w |toj q~ejke nahoditsq razmer drajwera ustrojstwa. dlina  draj-
  wera fakti~eski rawna 702 (wosxmeri~nym) slowam. zna~enie  704  wkl`-
  ~aet slowo razmera, kotoroe ne qwlqetsq ~astx` drajwera. itak, q~ejka
  srazu posle slowa razmera qwlqetsq na~alom drajwera ustrojstwa.  pow-
  torno ustanowitx registr pereme}eniq 0 k na~alu drajwera:

          0,6102;0R

       ris. 16 ill`striruet organizaci` komponentow  w  pamqti  w  |tot
  moment.

                                 - 108 -




           ODT i drajwer ustrojstwa w pamqti

               -------------------------
               ! stranica wwoda/wywoda !
               -------------------------
               !  drajwer sistemnogo   !
               !      ustrojstwa       !
               -------------------------
               !  rezidentnyj monitor  !
               -------------------------
               !      drajwer GT       !
               -------------------------
               !      drajwer DX       ! dlina = 702 bajta
        131634 -------------------------
               ! razmer drajwera DX    ! odno slowo
        131632 -------------------------
               !         ODT           ! dlina = 6100 bajt
        123532 -------------------------
               !         USR           !
               -------------------------
               !   klawi{nyj monitor   !
               -------------------------
               !                       !
               .                       .
               .                       .
               !                       !
             0 -------------------------

                      ris. 16

       esli imeetsq listing assemblirowaniq, to movno prosleditx rabotu
  drajwera po {agam.  perwye  pqtx  slow  qwlq`tsq  zagolowkom;  perwaq
  wypolnqemaq instrukciq qwlqetsq {estym slowom. ustanowitx perwu` to~-
  ku ostanowa u {estogo slowa.

          0,12;0B

       ustanowitx dopolnitelxnye to~ki ostanowa w drugih mestah drajwe-
  ra, kotorye neobhodimo otladitx. e}e odnim kriti~eskim mestom qwlqet-
  sq to~ka whoda w prerywanie. ee movno najti, prosmotrew listing draj-
  wera. sleduet  pomnitx,  ~to  to~ka  whoda  w  prerywanie  nazywaetsq
  DDINT:; ee legko najti i ustanowitx tam to~ku ostanowa.

       posle okon~aniq ustanowki to~ek ostanowa w drajwere iz programm-
  my ODT wyhodqt po komande:

          0;G

       teperx rekomenduetsq porabotatx s  drajwerom.  dlq  |togo  movno
  poprobowatx ispolxzowatx DUP dlq inicializacii ustrojstwa  ili  prog-
  rammu PIP dlq kopirowaniq dannyh na ustrojstwo ili wypolnitx testowu`
  programmu, specialxno razrabotannu` dlq |toj celi.  kogda  wypolnenie
  dostigaet perwoj to~ki ostanowa w drajwere, to ODT prinimaet uprawle-
  nie. movno, kak oby~no, ispolxzowatx ODT  dlq  prowerki  q~eek  i  ih
  sodervimogo ili dlq izmeneniq instrukcij. sleduet pomnitx, ~to  prio-
  ritet ODT po umol~ani` rawen 7; |to prepqtstwuet  drugim  prerywaniqm
  "wme{iwatxsq" wo wremq otladki.

       esli drajwer rabotaet bez o{ibok, to to~ki ostanowa  movno  uda-

                                 - 109 -




  litx i prodolvitx wypolnenie ostalxnoj ~asti drajwera:

          ;B
          ;P

       trebuetsq ostorovnostx, ~toby ne wygruzitx  operatiwnoe  zadanie
  (ODT), esli w drajwere e}e ime`tsq ustanowlennye to~ki ostanowa.



       7.2. ispolxzowanie ODT w RT11XM



       wypolnqq neskolxko specialxnyh ukazanij, movno ispolxzowatx  ODT
  dlq otladki drajwera ustrojstwa pod RT11XM.

       nuvno wnimatelxno wybratx mesto  w  pamqti  dlq  programmy  ODT.
  skomponowatx ee s prikladnoj programmoj ili skomponowatx ee tak, ~to-
  by ona raspolagalasx w pamqti tam, gde ona ne budet  razru{ena.  esli
  to~ka ostanowa dolvna prinimatxsq w revime sistemy, to ODT ne  dolvna
  nahoditxsq w oblasti ras1 (q~ejki s 20000 po 37776). samoe podhodq}ee
  mesto dlq razme}eniq ODT - w operatiwnoj razdele.

       pri otladke s ODT stranica wwoda/wywoda  dolvna  wsegda  otobra-
  vatxsq.

       ustanowka to~ek ostanowa takve  trebuet  wnimaniq.  srazu  posle
  wwoda ODT neobhodimo posmotretx na wektor prerywaniq (BPT) w  q~ejkah
  14 i 16 w pamqti. pri ustanowke  to~ki  ostanowa  neobhodimo  wru~nu`
  ustanowitx bity teku}ego revima, bity 14 i 15, PS w q~ejke 16.  usta-
  nowitx ih w teku}ij revim, kotoryj ovidaetsq wo  wremq  wozniknoweniq
  ostanowa. zna~eniqmi qwlq`tsq 11 dlq revima polxzowatelq i 00  -  dlq
  revima sistemy. sistemnye programmy RT11, takie kak PIP i DUP,  rabo-
  ta`t w revime polxzowatelq i ovida`t, ~to bity revima budut  ustanow-
  leny w 11.

       posle ustanowki to~ek ostanowa dlq wyhoda iz  ODT  nabratx  0;G.
  |to zastawlqet ODT wypolnitx makrokomandu  .EXIT,  kotoraq  razru{aet
  wektor BPT. itak, posle wyhoda  iz  ODT  trebuetsq  wru~nu`  izmenitx
  sodervimoe wektora, ispolxzuq komandu DEPOSIT:

        D 14=(nowoe zna~enie q~. 14),(nowoe zna~enie q~. 16)

       poskolxku perekl`~enie kontekstow movet wyzwatx sboj apparatury,
  nuvno ubeditxsq, ~to w |to wremq drugie zadaniq ne wypolnq`tsq.


                                 - 110 -




           8. osobennosti uprawleniq nekotorymi ustrojstwami




       w |tom razdele opisywa`tsq drajwery ustrojstw, ime`}ie specialx-
  nye, zawisimye ot ustrojstwa, harakteristiki. k |toj kategorii  otno-
  sqtsq sledu`}ie ustrojstwa:

         - magnitnaq lenta (mm, MS, MT);
         - kassetnaq magnitnaq lenta (CT);
         - gibkij disk (DX, DY);
         - ustrojstwo wwoda s perfokart (CR);
         - perfolento~noe ustrojstwo wwoda/wywoda (PC);
         - sistemnyj terminal (TT);
         - paket smennyh diskow (DM);
         - nulx-ustrojstwo (NL).



       8.1. drajwery magnitnoj lenty



       magnitnaq lenta imeet fajlowu` strukturu, no ne prqmogo dostupa.
  |to ozna~aet, ~to ona hranit fajly posledowatelxno, no ne imeet kata-
  loga w na~ale kavdoj lenty. drajwer magnitnoj lenty obespe~iwaet faj-
  lowu` strukturu, sowmestimu` s metkami magnitnoj lenty  formata  ISO,
  kotoryj obespe~iwaet dostup k kontrolleru lenty, ne kasaqsx  specifi-
  kacij ustrojstw.

       drajwer ustrojstwa magnitnoj lenty movet bytx dwuh tipow:  appa-
  ratnyj (HD) i fajlowyj (FS).

       apparatnye drajwery nazwany MMHD.SYS, MSHD.SYS, MTHD.SYS,  draj-
  wery fajlowoj struktury - MM.SYS, MS.SYS, MT.SYS. wse drajwery  naho-
  dqtsq na distributiwnom nositele.

       drajwery magnitnyh lent MM i MT dopuska`t wypolnenie komand  SET
  dlq ustanowki ~isla dorovek, plotnosti i ~etnosti zapisi lentoprotqv-
  nogo mehanizma. |ti komandy primenq`tsq ko wsem |lementam  opredelen-
  nogo kotrollera.

       drajwery MM i mt podderviwa`t do wosxmi lentoprotqvnyh  mehaniz-
  mow, podkl`~ennyh k odnomu kontrolleru, funkcioniru`}emu pod uprawle-
  niem wseh monitorow.

       nive priwodqtsq nekotorye sokra}eniq, harakternye dlq  magnitnoj
  lenty:

          BOT  - na~alo lenty;
          EOT  - fizi~eskij konec lenty;
          LEOT - logi~eskij konec lenty;
          EOF  - konec fajla;
          FSN  - posledowatelxnyj nomer fajla.

  LEOT sostoit iz metki EOF1 (wkl`~aet odin marker lenty),  za  kotoroj
  sleduet dwa markera lenty.

                                 - 111 -




       8.1.1. funkcii fajlowogo drajwera



       drajwer magnitnoj lenty fajlowoj struktury  sodervit  apparatnyj
  drajwer, opisannyj nive, s modulem fajlowoj  struktury.  |tot  modulx
  predostawlqet drajweru wozmovnostx  wypolnqtx  makrokomandy  fajlowoj
  struktury.

       fajlowyj drajwer obsluviwaet lentoprotqvnye mehanizmy s nomerami
  0 i 1. neobhodimostx ispolxzowaniq drugih  lentoprotqvnyh  mehanizmow
  (2-7) ukazywaetsq pri generacii sistemy.

       lenta, soderva}aq dwa fajla, imeet sledu`}ij format:

          VOL1 HDR1 * dannye * EOF1 * HDR1 * dannye * EOF1 ***
   gde

  VOL1, HDR1 i EOF1
         - metki lenty ANSI;

  *      - marker lenty.



       8.1.1.1. poisk po nomeru posledowatelxnosti



       fajlowyj drajwer wypolnqet poisk  fajlow,  ispolxzuq  posledowa-
  telxnye nomera fajlow dlq opredeleniq teku}ego poloveniq lenty  otno-
  sitelxno iskomogo fajla w sootwetstwii so sledu`}im algoritmom:

         1) esli   posledowatelxnyj   nomer   iskomogo   fajla
           bolx{e, ~em teku}ee polovenie  lenty,  to  drajwer
           prodwigaet lentu w prqmom  naprawlenii.  naprimer,
           esli lenta zanimaet teku}ee polovenie u posledowa-
           telxnogo nomera fajla  1,  a  iskomyj  fajl  imeet
           nomer 2, to  lenta  perematywaetsq  wpered  ot  ee
           poloveniq u markera lenty do markera w na~ale faj-
           la 2;

         2) esli   posledowatelxnyj   nomer   iskomogo   fajl
           menx{e teku}ej pozicii lenty bolee,  ~em  na  odin
           fajl i/ili menx{e, ~em pqtx fajlow ot  BOT  (metka
           na~ala lenty), to lenta ustanawliwaetsq w na~alo i
           poisk na~inaetsq w prqmom  naprawlenii.  naprimer,
           esli teku}ee polovenie  lenty  2  i  iskomyj  fajl
           imeet posledowatelxnyj nomer 1, to lenta perematy-
           waetsq k BOT, zatem perematywaetsq wpered k marke-
           ru lenty w na~alo fajla 1. esli predpolovitx,  ~to
           teku}ee polovenie lenty 9 i trebuemyj  fajl  imeet
           posledowatelxnyj nomer 6, to lenta  perematywaetsq
           k BOT, i poisk na~inaetsq w prqmom naprawlenii.


       pRIME^ANIE. esli drajwer wygruzitx komandoj UNLOAD ili
  makrokomandoj .RELEASE, to poziciq fajla terqetsq.  w  |toj
  situacii lenta perematywaetsq w obratnom naprawlenii do teh

                            - 112 -




  por, poka drajwer ne najdet BOT ili metku, ot  kotoroj  ona
  movet opredelitx pozici` lenty.



       8.1.1.2. poisk po imeni fajla



       drajwer fajlowoj struktury movet otyskiwatx  fajly  na
  lente, osnowywaqsx na imenah fajlow. podprogramma dlq sraw-
  neniq imen fajlow ispolxzuet  algoritm,  kotoryj  pozwolqet
  drajweru raspoznawatx imena  i  tipy  fajlow,  ispolxzuemye
  drugimi operacionnymi sistemami.  drajwer  ispolxzuet  pole
  identifikacii fajlow, transliruq sodervimoe iskomogo  imeni
  fajla. |to imq fajla srawniwaetsq s imenem fajla, hranimogo
  w kode RADIX-50.

       format fajla imeet wid:

          FILNAM.TYP

   gde

  FILNAM - imq fajla, wyrawnennoe po lewomu kra` w {estisimwolxnom pole
           i, pri neobhodimosti, dopolnennoe probelami;

  TYP    - tip fajla, wyrawnennyj po lewomu kra` w trehsimwolxnom pole.

       algoritm poiska sledu`}ij:

   1) o~istitx s~et~ik simwolow (CC);

   2) proweritx perwyj simwol w imeni fajla. esli  |to  to~ka
     to wypolnitx sledu`}ee:

         - otmetitx najdennu` to~ku;

         - esli CC<6, wstawitx probely i uweli~iwatx  CC,  poka  on  ne
           budet rawnym 6;

         - kogda CC>6, udalitx simwoly i umenx{atx CC do teh por,  poka
           on ne budet rawnym 6;

   3) esli CC=6 i imq RT11 obnaruveno     w poziciqh s 64  po
     polq sistemnogo koda, to wstawitx to~ku w  transliruemoe
     imq, otmetitx najdennu` to~ku i uweli~itx CC;

   4) peremestitx simwol w transliruemoe imq fajla  i  ukazat
     sledu`}ij simwol;

  5) uweli~itx CC;

  6) kogda CC<9, to wozwratitxsq k {agu 2;

   7) proweritx ukazatelx najdennoj to~ki; esli to~ka ne  byl
     najdena, skopirowatx ~etyre simwola i wstawitx .DAT  dlq
     tipa fajla;

                            - 113 -




   8) wypolnitx posimwolxnoe srawnenie imeni trebuemogo  fajl
     i imeni fajla, kotoryj tolxko ~to stranslirowan  s  polq
     identifikatora fajla w metke zagolowka fajla (HDR1).



       8.1.1.3. makrokomandy fajlowogo drajwera



       fajlowyj  drajwer  wypolnqet  sledu`}ie  makrokomandy:
  .ENTER, .LOOKUP, .READ*/.WRIT*, .DELETE, .RENAME, .CLOSE, i
  .SPFUN.

       1) makrokomanda .ENTER

       po makrokomande .ENTER metka zagolowka fajla (HDR1)  i
  marker magnitnoj lenty dolvny bytx zapisany na  lente.  pri
  |tom  lenta  ustanawliwaetsq  posle  markera.  makrokomanda
  .ENTER inicializiruet nekotorye wnutrennie tablicy fajlowo-
  go drajwera,  soderva}ie  informaci`  o  nomere  poslednego
  zapisannogo bloka i nomere teku}ego bloka.

       esli makrokomanda .SPFUN ne byla wypolnena dlq kanala,
  otkrytogo po  .ENTER,  informaciq  wo  wnutrennih  tablicah
  (zapisx poslednego bloka i dr.) budet korrektna. oby~no dlq
  fajlow, otkrytyh po makrokomande .ENTER, ne primenq`t  mak-
  rokomandy .SPFUN. iskl`~eniem  iz  |togo  prawila  qwlqetsq
  slu~aj, kogda dolven bytx zapisan blok nestandartnogo  raz-
  mera (razmer bloka ne rawen  512  bajtam).  ~toby  zapisatx
  nestandartnye bloki, fajl otkrywa`t  makrokomandoj  .ENTER,
  zatem wypolnq`t makrokomandu zapisi .SPFUN. posle  zawer{e-
  niq operacii fajl dolven bytx zakryt makrokomandoj  .CLOSE.
  esli dolven wypolnqtsq poisk fajla, neobhodimo otkrytx len-
  tu

       nefajlowoj makrokomandoj .LOOKUP.

       makrokomanda .ENTER imeet sledu`}ij format:

          .ENTER AREA,CHAN,DBLK,,SEGNUM

       w tabl. 11 dany zna~eniq posledowatelxnyh nomerow faj-
  low (argument SEGNUM) i wypolnqemye operacii  na  magnitnoj
  lente dlq makrokomandy .ENTER.

                                                  tABLICA 11
          zna~eniq  posledowatelxnyh nomerow dlq
                 makrokomandy   .ENTER
   ----------------------------------------------------------
    FSN  !  imq  !   wypolnqemaq      !    poziciq lenty
         ! fajla !    operaciq        !
   ----------------------------------------------------------
     >0  !zadano !pozicioniruet lentu !FSN najden:
         !       !u posledowatelxnogo !s~itywa`}aq golowka
         !       !nomera fajla i wy-  !ustanawliwaetsq u naj-
         !       !wypolnqet .ENTER    !dennogo FSN i lenta
         !       !                    !gotowa k zapisi;
         !       !                    !FSN ne najden:

                            - 114 -




                                        pRODOLVENIE TABL. 11
   ----------------------------------------------------------
    FSN  !  imq  !   wypolnqemaq      !    poziciq lenty
         ! fajla !    operaciq        !
   ----------------------------------------------------------
         !       !                    !s~itywa`}aq golowka
         !       !                    !ustanawliwaetsq u .LEO
         !       !                    !i lenta gotowa k zapis
         !       !                    !
      0  !zadano !lenta perematywaetsq!FSN najden:
         !       !nazad i otyskiwaetsq!pered fajlom;
         !       !imq fajla. esli naj-!FSN ne najden:
         !       !deno, soob}enie ob  !lenta gotowa k zapisi
         !       !o{ibke; esli ne naj-!fajla.
         !       !deno - wwodit fajl  !
         !       !                    !
     -1  !zadano !pozicioniruet lentu !lenta gotowa k zapisi
         !       !u LEOT i wwodit fajl!
         !       !                    !
     -2  !zadano !lenta perematywaetsq!lenta gotowa k zapisi
         !       !i otyskiwaetsq imq  !
         !       !fajla; posle metki  !
         !       !najdennogo fajla ili!
         !       !LEOT (w zawisimosti !
         !       !ot togo, ~to wstre- !
         !       !titsq perwym) zapi- !
         !       !sywaetsq metka na~a-!
         !       !la fajla            !
         !       !                    !
      0  !  ne   !ignoriruet wozmovnu`!lenta perematywaetsq
         !zadano !fajlowu` strukturu  !k BOT
         !       !(sdelan wyzow nefaj-!
         !       !lowoj makroomandy   !
         !       ! .LOOKUP)           !

       makrokomanda .ENTER  soob}aet  ob  o{ibkah  sledu`}imi
  zna~eniqmi kodow w 52 bajte (tabl. 12):

                                                  tABLICA 12
                       o{ibki  .ENTER
   ----------------------------------------------------------
     kod w    !               poqsnenie
    bajte 52  !
   ----------------------------------------------------------
       0      ! kanal zanqt
              !
       1      ! lenta zapolnena; ustanawliwaetsq, esli
              ! obnaruviwaetsq fizi~eskij konec lenty (EOT)
              ! pri zapisi HDR1; s~itywa`}aq golowka raspo-
              ! lagaetsq posle perwogo markera, sledu`}ego
              ! za poslednim EOF1 na lente
              !
       2      ! ustrojstwo zanqto; ustanawliwaetsq, esli
              ! magnitnaq lenta uve imeet otkrytyj fajl
              !
       3      ! fajl imeetsq, ne movet bytx udalen
              !
       4      ! fajl s ukazannym posledowatelxnym nomerom
              ! ne najden; lenta ustanawliwaetsq tak ve, kak

                            - 115 -




                                        pRODOLVENIE TABL. 12
   ----------------------------------------------------------
     kod w    !               poqsnenie
    bajte 52  !
   ----------------------------------------------------------
              ! i dlq zapolnennogo ustrojstwa (kod=1)
              !
       5      ! nedopustimyj argument; posledowatelxnyj
              ! nomer fajla byl ustanowlen w predelah ot
              ! -3 do -32767 ili imq fajla ne zadano


       pRIME^ANIE. makrokomanda .ENTER soob}aet o  neustrani-
  moj o{ibke, esli o{ibki woznika`t pri wwode fajla;

       2) makrokomanda .LOOKUP

       makrokomanda .LOOKUP wyzywaet poisk i s~itywanie opre-
  delennoj metki HDR1. posle |toj makrokomandy lenta ustanaw-
  liwaetsq pered perwym blokom dannyh w fajle.

       makrokomanda .LOOKUP imeet sledu`}ij format:

          .LOOKUP AREA,CHAN,DBLK,SEGNUM

       w tabl. 13 priwodqtsq zna~eniq posledowatelxnyh  nome-
  row fajlow (argument SEGNUM) i wypolnqemye operacii na mag-
  nitnoj lente dlq makrokomandy .LOOKUP.

                                                  tABLICA 13
          zna~eniq  posledowatelxnyh nomerow dlq
                  makrokomandy   .LOOKUP
   ----------------------------------------------------------
    FSN  !  imq  !wypolnqemaq operaciq !    poziciq lenty
         ! fajla !                     !
   ----------------------------------------------------------
      0  !  ne   !wypolnqetsq .LOOKUP  !lenta perematywaetsq
         !zadano !nefajlowoj struktury !k BOT
     -1  !  ne   !wypolnqetsq .LOOKUP  !lenta ne perematy-
         !zadano !nefajlowoj struktury !waetsq
     >0  !  ne   !wypolnqetsq .LOOKUP  !FSN najden:
         !zadano !fajlowoj struktury   !lenta gotowa dlq s~i-
         !       !po FSN               !tywaniq perwogo bloka
         !       !                     !dannyh;
         !       !                     !FSN ne najden:
         !       !                     !lenta pozicioniruetsq
         !       !                     !u LEOT
      0  !zadano !perematywaetsq k BOT,!FSN najden:
         !       !zatem ispolxzuet imq !lenta gotowa dlq s~i-
         !       !fajla dlq wypolneniq !tywaniq perwogo bloka
         !       !.LOOKUP fajlowoj     !dannyh;
         !       !struktury            !FSN ne najden:
         !       !                     !lenta u LEOT
     -1  !zadano !ne perematywaetsq    !FSN najden:
         !       !nazad, wypolnqetsq   !lenta gotowa dlq s~i-
         !       !.LOOKUP fajlowoj     !tywaniq perwogo bloka
         !       !struktury po FSN     !dannyh;
         !       !                     !FSN ne najden:
         !       !                     !lenta u LEOT

                            - 116 -




                                        pRODOLVENIE TABL. 13
   ----------------------------------------------------------
    FSN  !  imq  !wypolnqemaq operaciq !    poziciq lenty
         ! fajla !                     !
   ----------------------------------------------------------
     >0  !zadano !lenta pozicioniruetsq!FSN najden:
         !       !u fajla s zadannym   !lenta gotowa dlq s~i-
         !       !FSN  i  wypolnqetsq  !tywaniq perwogo bloka
         !       !.LOOKUP    fajlowoj  !dannyh;
         !       !struktury. esli fajl !FSN ne najden:
         !       !ne najden, to wydaet-!lenta pozicioniruetsq
         !       !sq soob}enie ob o{ib-!u LEOT
         !       !ke                   !


       pRIME^ANIE. esli kanal otkryt nefajlowoj makrokomandoj
  .LOOKUP (imq fajla ne zadano i FSN=0 ili -1),  makrokomandy
  .READ, .READC, .READW ispolxzu`t neqwnyj s~et~ik slow, raw-
  nyj  razmeru  fizi~eskogo  bloka  na  lente.   makrokomandy
  .WRITE, .WRITEC, .WRITEW ispolxzu`t s~et~ik slow dlq  opre-
  deleniq razmera bloka na lente. |tot  s~et~ik  ispolxzuetsq
  wmesto razmera bloka po umol~ani` (512 bajt), i  wypolnenie
  blokirowki/deblokirowki ne proizwoditsq.  |ti  makrokomandy
  identi~ny s~itywani` ili  zapisi  po  makrokomande  .SPFUN,
  kotoraq ne wydaet soob}enij ob o{ibkah (BLK=0). BLK i  blok
  sostoqniq ne dolvny popadatx w oblastx swopinga USR.

       makrokomanda .LOOKUP soob}aet  ob  o{ibkah  sledu`}imi
  zna~eniqmi kodow w 52-m bajte (tabl. 14).

                                                  tABLICA 14
                       o{ibki  .LOOKUP
   ----------------------------------------------------------
     kod w   !               poqsnenie
    bajte 52 !
   ----------------------------------------------------------
        0    ! kanal uve otkryt
             !
        1    ! fajl ne najden; lenta pozicioniruetsq posle
             ! perwogo markera, sledu`}ego za poslednim EOF1
             !
        2    ! ustrojstwo zanqto; na magnitnoj lente imeetsq
             ! uve otkrytyj fajl
             !
        5    ! nedopustimyj argument; posledowatelxnyj
             ! nomer fajla byl ustanowlen w predelah ot
             ! -2 do -32767. makrokomanda .LOOKUP dlq
             ! apparatnogo drajwera dolvna imetx polo-
             ! vitelxnyj posledowatelxnyj nomer


       pRIME^ANIE. |ta makrokomanda  sob}aet  o  neustranimoj
  o{ibke kataloga, analogi~no makrokomande .ENTER;

       3) makrokomandy .READ*

       makrokomandy .READ* s~itywa`t dannye s magnitnoj lenty
  blokami po 512 bajtow kavdyj. |ta gruppa makrokomand opisy-
  waetsq dlq fajlow, otkrytyh makrokomandoj .ENTER i fajlowoj

                            - 117 -




  makrokomandoj .LOOKUP. esli  po  makrokomande  dolvno  bytx
  s~itano menx{e, ~em 512 bajtow,  to  s~itywaetsq  trebuemoe
  koli~estwo bajtow. esli dana makrokomanda na ~tenie  bolee,
  ~em 512 bajtow, to drajwer wypolnit dannu`  makrokomandu  w
  neskolxko |tapow.


       pRIME^ANIE. sokra}enie .READ*/.WRITE* otnositsq k sle-
  du`}ej gruppe makrokomand: .READ, .READC,  .READW,  .WRITE,
  .WRITEC, .WRITEW.

       makrokomandy .READ* dopustimy dlq kanala, kotoryj otk-
  ryt makrokomandoj .LOOKUP. oni takve dopustimy dlq  kanala,
  kotoryj otkryt makrokomandoj .ENTER, pri uslowii, ~to  zap-
  ra{iwaemyj nomer bloka ne prewy{aet nomera poslednego zapi-
  sannogo bloka (ustanawliwaetsq kod 0 w bajte 52).

       esli s~itywaetsq marker lenty, podprogramma  perepozi-
  cioniruet lentu  takim  obrazom,  ~to  drugaq  makrokomanda
  wyzowet powtornoe s~itywanie |togo markera lenty.

       pri wypolnenii makrokomandy .CLOSE dlq fajla, otkryto-
  go makrokomandoj .ENTER,  lenta  ne  pozicioniruetsq  posle
  poslednego zapisannogo bloka. |to wyzowet  poter`  informa-
  cii, esli  polxzowatelx  potrebowal  ~tenie  predposlednego
  bloka i ne  movet  powtorno  s~itatx  zapisannyj  poslednij
  blok. w |tom slu~ae lenta pozicioniruetsq w konce dannyh.

       su}estwu`t sledu`}ie prawila poiska bloka po nomeru:
         - dlq  makrokomand  .READ*  esli   ispolxzowana   makrokomanda
           .LOOKUP dlq otkrytiq fajla, to po zaprosu ~teniq s~itywa`}aq
           golowka ustanawliwaetsq u ukazannogo nomera bloka. esli  |to
           newozmovno, wydaetsq o{ibka s kodom 0 (konec fajla), i lenta
           ustanawliwaetsq posle poslednego bloka fajla;
         - dlq makrokomand .WRIT* i .READ* na zapisywaemom fajle wypol-
           nqetsq prowerka dlq opredeleniq, nahoditsq li  zapra{iwaemyj
           blok posle poslednego bloka fajla. esli |to tak, to lenta ne
           perematywaetsq wpered, i wydaetsq kod o{ibki 0 (bajt 52).

       format makrokomand .READ*:

          .READ* AREA,CHAN,BUF,WCNT,BLK[,CRTN]

       makrokomandy .READ*  soob}a`t  ob  o{ibkah  sledu`}imi
  zna~eniqmi kodow w 52-m bajte (tabl. 15).

                                                  tABLICA 15
                        o{ibki  .READ*
   ----------------------------------------------------------
     kod w    !                poqsnenie
    bajte 52  !
   ----------------------------------------------------------
       0      ! popytka s~itatx posle markera lenty; |ta
              ! o{ibka generiruetsq pri sli{kom bolx{oj dline
              ! bloka (bolee  512 bajtow)
              !
       1      ! neustranimaq o{ibka na kanale
              !
       2      ! kanal ne otkryt

                            - 118 -




       4) makrokomandy .WRIT*

       makrokomandy .WRIT*  zapisywa`t  dannye  na  magnitnu`
  lentu blokami po 512 bajtow. esli makrokomanda dolvna zapi-
  satx w blok menx{e 512 bajtow, to  drajwer  sozdaet  zapisx
  dlinoj 512 bajtow, na~inaq s adresa  dannogo  bufera.  esli
  dannye, zapisywaemye makrokomandoj .WRIT*, zanima`t  bolx{e
  512 bajtow, to drajwer preobrazuet |tu makrokomandu w  nes-
  kolxko makrokomand dlq zapisi po 512 bajtow.

       makrokomandy .WRIT* qwlq`tsq dopustimymi tolxko w faj-
  le, otkrytom makrokomandoj .ENTER ili  nefajlowoj  makroko-
  mandoj .LOOKUP.

       format makrokomand .WRIT*:

          .WRIT* AREA,CHAN,BUF,WCNT,BLK[,CRTN]

       makrokomandy .WRIT* wyda`t  soob}eniq  ob  o{ibkah  so
  sledu`}imi zna~eniqmi kodow w 52-m bajte (tabl. 16).

                                                  tABLICA 16
                      o{ibki  .WRIT*
   ----------------------------------------------------------
     kod w   !              poqsnenie
    bajte 52 !
   ----------------------------------------------------------
        0    ! konec lenty (dannye ne byli zapisany, no pre-
             ! dydu}ij blok sohranilsq i fajl movet bytx za-
             ! kryt makrokomandoj .CLOSE)  ili  nomer  bloka
             ! sli{kom bolx{oj
             !
        1    ! neustranimaq o{ibka na kanale
             !
        2    ! kanal ne otkryt

       za poslednim zapisannym blokom na lente ne movet  bytx
  wypolnena nikakaq drugaq operaciq, krome  operacii  zapisi.
  s~itywa`}aq  golowka  pozicioniruetsq  w  promevutke  mevdu
  zapisqmi do wypolneniq operacii.

       na ris. 17 i ris. 18 priwedeny primery wypolneniq ope-
  racij posle poslednego zapisannogo bloka na lente.

                            - 119 -




     primer 1                    primer 2

     (zapisx)              (obratnaq peremotka/
                                 ~tenie)
    !---------!                !---------!
    !   ! BOT !                !   ! BOT !
    !---------!                !---------!
    !         !<--mevblo~nyj-->!         !<--s~itywa`}aq
    !---------!   promevutok   !---------!       golowka
    ! b l o k !                ! b l o k ! (wozmovno wy-
    !         !                !         ! polnenie l`bo-
    !    A    !                !    A    ! go zaprosa)
    !---------!                !---------!
    !         !<--mevblo~nyj-->!         !
    !---------!   promevutok   !---------!
    ! b l o k !                ! b l o k !
    !         !                !         !
    !    B    !                !    B    !
    !---------!                !---------!
    !         !<--mevblo~nyj-->!         !
    !---------!   promevutok   !---------!
    ! b l o k !                ! b l o k !
    !         !                !         !
    !    C    !                !    C    !
    !---------!                !---------!
    !         !<--s~itywa`}aq  !         !
    !         !   golowka      !         !
    !         !   (wozmovna    !         !
    !/\/\/\/\/!   tolxko       !/\/\/\/\/!
                  zapisx)

                       ris. 17

                            - 120 -




                  primer 3

             (poziciq s~itywa`}ej
             golowki posle ~teniq)
                 !---------!
                 !   ! BOT !
                 !---------!
                 !         !<--mevblo~nyj
                 !---------!   promevutok
                 ! b l o k !
                 !         !
                 !    A    !
                 !---------!
                 !         !<--mevblo~nyj
                 !---------!   promevutok
                 ! b l o k !
                 !         !
                 !    B    !
                 !---------!
                 !         !<--mevblo~nyj
                 !---------!   promevutok
                 ! b l o k !
                 !         !
                 !    C    !
                 !---------!
                 !         !<--s~itywa`}aq golowka
                 !         ! (tak ve, kak w primere 1)
                 !/\/\/\/\/!

                        ris. 18

       na ris. 17 w primere 1 bloki A, B, C  zapisywa`tsq  na
  lentu. s~itywa`}aq golowka  ustanawliwaetsq  na  mevblo~nom
  promevutke, sledu`}em neposredstwenno za  blokom  C.  l`baq
  operaciq na magnitnoj lente, pri kotoroj lenta budet  pere-
  matywatxsq wpered, za iskl`~eniem komand zapisi (t.e. zapi-
  satx, steretx mevblo~nyj promevutok  i  zapisatx  ego,  ili
  zapisatx marker lenty) priwedet k neopredelennym  rezulxta-
  tam.

       na ris. 17 w primere 2 s~itywa`}aq golowka  ustanawli-
  waetsq u BOT posle operacii  peremotki.  wypolnqq  operacii
  ~teniq, movno sos~itatx bloki A, B i C.

       posle |togo s~itywa`}aq golowka budet pozicionirowana,
  kak pokazano na ris. 18 w primere 3. |to te  ve  uslowiq  i
  ograni~eniq kak i w primere 1 (sm. ris. 17);

       5) makrokomandy .DELETE i .RENAME

       makrokomandy .DELETE i .RENAME qwlq`tsq  nedopustimymi
  operaciqmi na magnitnoj lente, i l`baq popytka wypolnitx ih
  priwedet k soob}eni` o nedopustimom kode operacii (kod 2  w
  bajte 52);

       6) makrokomanda .CLOSE

       makrokomanda .CLOSE primenqetsq w odnom iz  treh  slu-
  ~aew:

                            - 121 -




         - esli fajl byl otkryt makrokomandoj .ENTER, to |tot fajl zak-
           rywaetsq makrokomandoj .CLOSE zapisx` markera lenty,  metkoj
           EOF1 i bolee ~em tremq markerami; w |toj operacii  s~itywa`-
           }aq golowka pozicioniruetsq pered wtorym markerom u LEOT;
         - esli fajl byl otkryt fajlowoj makrokomandoj .LOOKUP, to len-
           ta pozicioniruetsq posle markera, sledu`}ego za metkoj EOF1;
         - esli fajl byl otkryt nefajlowoj  makrokomandoj  .LOOKUP,  to
           nikakoe dejstwie ne wypolnqetsq i kanal  stanowitsq  swobod-
           nym.

       format makrokomandy .CLOSE:

          .CLOSE CHAN

       esli woznik sboj pri wypolnenii  makrokomandy  .CLOSE,
  on priwedet k poqwleni` neustranimoj o{ibki kataloga.


       pRIME^ANIE.  programmnyj  kontrolx  za   neustranimymi
  o{ibkami wozmoven posle wypolneniq makrokomandy .SERR;

       7) makrokomanda .SPFUN

       makrokomanda .SPFUN movet wypolnqtx asinhronnye opera-
  cii s katalogom, ne ispolxzuq USR. |to pozwolqet  ispolxzo-
  watx ee dlq obsledowaniq dlinnyh lent.  ona  primenqetsq  w
  fonowo-operatiwnyh  sistemah,  kotorye  ne  hotqt   ovidatx
  zawer{eniq poiska, proishodq}ego wo wremq wypolneniq makro-
  komand .ENTER i .LOOKUP. makrokomanda  .SPFUN  movet  takve
  ispolxzowatxsq pri rabote s RT11FB(XM), esli razre{en  swo-
  ping USR. |ta makrokomanda pozwolqet zapra{iwatx  .ENTER  i
  .LOOKUP posle wyda~i nefajlowoj makrokomandy .LOOKUP,  otk-
  ryw{ej kanal drajwera magnitnoj lenty. pri wyda~e  makroko-
  mandy asinhronnogo uprawleniq dlq kanala,  kotoryj  ne  byl
  otkryt nefajlowoj makrokomandoj  .LOOKUP,  mogut  poqwitxsq
  nepredskazuemye rezulxtaty.

       format zaprosa .SPFUN:

          .SPFUN AREA,CHAN,#-20.,BUF,,BLK

   gde

  -20.   - kod makrokomandy asinhronnogo uprawleniq;

  BUF    - adres 7-slownogo bloka, kotoryj imeet sledu`}ij format:

                            - 122 -




           slowo        zna~enie

           0-2  - imq fajla w kode RADIX-50;

           3    - kod operacii:
                     3 - dlq .LOOKUP;
                     4 - dlq .ENTER;

           4    - zna~enie posledowatelxnogo nomera fajla

           5-6  - rezerwiru`tsq;

  BLK    - adres 4-slownogo bloka o{ibki i bloka sostoqniq,  ispolxzue-
           mogo dlq diagnostiki o{ibok makrokomand  .LOOKUP  i  .ENTER.
           tolxko perwoe slowo iz BLK ispolxzuetsq |toj  makrokomandoj.
           drugie tri slowa rezerwiru`tsq dlq dalxnej{ego ispolxzowaniq
           i dolvny bytx obnuleny. esli perwoe slowo BLK  rawno  0,  to
           o{ibki pri wypolnenii makrokomandy  ne  bylo.  argument  BLK
           nelxzq opuskatx pri rabote s RT11XM.

       nive priweden primer programmirowaniq.

   .TITLE primer asinhronnoj operacii s katalogom
          .ENABL  LC
          .MCALL  .LOOKUP,.SPFUN,.CLOSE,.PRINT,.EXIT
   ;
   ; opredeleniq
   ;
          ASYREQ = -20.; kod asinhronnoj makrokomandy
          LOOKUP = 3   ; kod LoOKUP dlq asinhronnoj
                       ; makrokomandy
          ENTER  = 4   ; kod ENTER dlq asinhronnoj
                       ; makrokomandy
          CHAN   = 0   ; ispolxzowatx kanal 0
          FNF    = 1   ; o{ibka, fajl ne najden
          FSN    = 0   ; ispolxzowatx 0 dlq posledowa-
                       ; telxnogo nomera fajla
   ;
   ; rabota s magnitnoj lentoj
   ;
   START: .LOOKUP #AREA,#CHAN,#NFSBLK ; otkrytx kanal dlq
                                      ; sledu`}ej makroko-
                                      ; mandy
          BCS     LOOKER              ; poqwilasx o{ibka
          .SPFUN  #AREA,#CHAN,#ASYREQ,#COMBLK,,#ERRBLK
          BCC     FOUND               ; o{ibki net, fajl
                                      ; najden
          CMP     #FNF,ERRBLK ; o{ibka,fajl ne najden?
          BEQ     NOTFND      ; da
          MOV     #ASYERR,R0  ; net
          BR      CLOSE
   LOOKER:MOV     #LOOERR,R0  ; o{ibka nefajlowoj .LOOKUP
          BR      CLOSE
   FOUND: MOV     #OK,R0      ; soob}enie "fajl najden"
          BR      CLOSE
   NOTFND:MOV     #NOK,R0     ; soob}enie "fajl ne najden"
   CLOSE: .PRINT              ; pe~atx soob}eniq, ukazan-
                              ; nogo w R0
          .CLOSE  #CHAN

                            - 123 -




          .EXIT
   ;
   ; oblastx dannyh
   ;
   AREA:  .BLKW   6           ; oblastx argumenta EMT
   NFSBLK:.RAD50  /MT/        ; ispolxzuetsq dlq otkrytiq
                              ; magnitnoj lenty nefajlowoj
                              ; struktury
          .WORD   0,0,0
   COMBLK:.RAD50  /FILNAMTYP/ ; |to imq otyskiwaemogo fajla
          .WORD   LOOKUP      ; kod asinhronnoj operacii
                              ; dlq makrokomandy .LOOKUP
          .WORD   FSN         ; posledowatelxnyj nomer fajla
                              ; dlq makrokomandy .LOOKUP
          .WORD   0,0         ; zarezerwirowano (dolven bytx
                              ; nulx)
   ERRBLK:.WORD   0,0,0,0     ; zdesx wyborka o{ibok
   ;
   ; oblastx soob}eniq
   ;
          .NLIST  BEX
   LOOERR:.ASCIZ  'o{ibka nefajlowoj makrokomandy .LOOKUP'
   OK:    .ASCIZ  'fajl najden'
   NOK:   .ASCIZ  'fajl ne najden'
   ASYERR:.ASCIZ  'o{ibka asinhronnoj makrokomandy'
          .EVEN
          .LIST   BEX
          .END    START



       8.1.1.4. ispolxzowanie makrokomand apparatnogo drajwera  s
                modulem fajlowoj struktury



       apparatnyj drajwer prednazna~en  dlq  wypolneniq  dwuh
  tipow dostupa k magnitnoj lente. odin tip dostupa  qwlqetsq
  slowoorientiruemym,~to  pozwolqet  ispolxzowatx   magnitnu`
  lentu nezawisimo ot ustrojstwa. drugoj tip dostupa  ispolx-
  zuet apparatnye komandy (~tenie, zapisx, peremotka i t.d.).
  |tot tip dostupa orientirowan na rabotu s fajlami i  pozwo-
  lqet rabotatx s magnitnoj lentoj kak s ustrojstwom, ime`}im
  fajlowu` (katalogowu`) organizaci`.

       pri fajlowom dostupe k magnitnoj lente drajwer  sohra-
  nqet posledowatelxnyj nomer fajla, s pomo}x` kotorogo pozi-
  cioniruetsq lenta. takim obrazom, pereme}enie lenty wo wre-
  mq poiska fajlow movet bytx optimizirowano.

       pri dostupe k dannym na magnitnoj lente s  ispolxzowa-
  niem makrokomand  .READ*/.WRIT*  drajwer  zapominaet  nomer
  teku}ego bloka i nomer poslednego bloka, k kotoromu imeetsq
  dostup. argument "nomer bloka" movet bytx  ispolxzowan  dlq
  imitacii ustrojstwa s prqmym dostupom, dave w fajlah,  otk-
  rytyh po .ENTER.

       dwa metoda dostupa, opisannye wy{e, mogut bytx ob'edi-
  neny, t.e. movno ispolxzowatx komandy prodwiveniq lenty  po

                            - 124 -




  fajlu magnitnoj lenty. odnako, |to movet wyzwatx sledu`}ee:

         1) pri  polu~enii  perwoj   ve   komandy   apparatny
           drajwerom posledowatelxnyj nomer fajla i  informa-
           ciq o nomere bloka, opisannye wy{e, budut poterqny
           i ih newozmovno wosstanowitx do teh por,  poka  ne
           budet  wypolnena  makrokomanda  .CLOSE  i   drugaq
           komanda otkrytiq fajla; sleduet otmetitx, ~to mak-
           rokomandoj .CLOSE lenta budet peremotana  i,  esli
           fajl byl otkryt .ENTER,  na  nee  budet  wypolnena
           zapisx nezawisimo ot togo, kakie komandy byli dany
           s momenta otkrytiq fajla; magnitnaq lenta pri |tom
           ne budet  udowletworqtx  standartu;  pri  zakrytom
           fajle drajwer magnitnoj lenty  ne  movet  zapisatx
           razmer fajla, t.k. poslednij  terqetsq  dlq  nego;
           wmesto razmera fajla zapisywaet nulx; pole  posle-
           dowatelxnogo nomera fajla budet ustanowleno werno;

         2) iskl`~eniem    iz     wy{eopisannogo      qwlqets
           neobhodimostx otkrytx kanal dlq lenty  s  fajlowoj
           strukturoj i pisatx  bloki  dannyh  nestandartnogo
           razmera (razmer 512 bajtow standartno ispolxzuetsq
           makrokomandami .WRIT*);  drajwer  magnitnoj  lenty
           budet sohranqtx ~islo zapisannyh blokow,  i  metka
           EOF1 budet korrektna do teh  por,  poka  ne  budut
           ispolxzowatxsq makrokomandy inye, ~em makrokomandy
           zapisi .SPFUN; esli ispolxzu`tsq  drugie  komandy,
           to razmer fajla terqetsq.


                pRIME^ANIE. rekomenduetsq ispolxzowatx makro-
           komandy .SPFUN dlq fajla magnitnoj lenty tolxko  w
           poslednem, wy{e opisannom, slu~ae.



       8.1.2. funkcii apparatnogo drajwera



       drajwery magnitnoj lenty mogut ispolxzowatx apparatnye
  makrokomandy dlq  operacij  wwoda/wywoda,  gde  nedopustimy
  fajlowye  makrokomandy.  wwedenie   makrokomandy   fajlowoj
  struktury w apparatnyj drajwer wyzowet o{ibku  wwoda/wywoda
  kataloga monitora. apparatnyj drajwer qwlqetsq  podmnovest-
  wom drajwera magnitnoj lenty fajlowoj struktury.

       esli ne trebuetsq  dopolnitelxnaq  poddervka  fajlowoj
  struktury, to ispolxzu`tsq apparatnye drajwery. hotq  appa-
  ratnye drajwery nahodqtsq na distributiwnom nositele, pered
  ispolxzowaniem  ih  neobhodimo  pereimenowatx   s   pomo}x`
  komand, zamenq`}ih drajwer fajlowoj struktury na apparatnyj
  drajwer magnitnoj lenty:

            komandy                      dejstwiq

     REMOTE MT                      udalitx  drajwer  fajlowo
                                    struktury
     RENAME/SYS MT.SYS MTFS.SYS     sohranitx drajwer fajlowo

                            - 125 -




                                    struktury
     RENAME/SYS MTHD.SYS MT.SYS     sozdatx  nowyj  apparatny
                                    drajwer
     INSTALL MT                     ustanowitx  nowyj  drajwe

       apparatnyj drajwer movet wkl`~atx nefajlowye  makroko-
  mandy .LOOKUP, makrokomandy specialxnyh funkcij  .SPFUN,  a
  takve makrokomandy .READ, .READC, .READW, .WRITE,  .WRITEC,
  .WRITEW i .CLOSE. apparatnyj drajwer movet wypolnqtx opera-
  cii wwoda/wywoda na fizi~eskih blokah, pozicionirowatx len-
  tu i ustranqtx o{ibki.



       8.1.2.1. soob}eniq makrokomandy .SPFUN



       makrokomandy .SPFUN, wypolnqemye apparatnym drajwerom,
  soob}a`t o konce fajla i wozniknowenii neustranimyh  o{ibok
  ustanowkoj 52-go bajta sistemnoj oblasti swqzi. pomimo |to-
  go, oni oby~no ispolxzu`t argument "nomer bloka" kak  adres
  ~etyrehslownoj oblasti diagnostiki i  bloka  sostoqniq  dlq
  dopolnitelxnoj informacii ob o{ibkah. esli argument  "nomer
  bloka" rawen 0, to nikakaq informaciq ne wydaetsq.


       pRIME^ANIE. sodervimoe |tih slow ne  opredeleno,  esli
  ne ustanowlen kod o{ibki w bajte 52.

       blok (BLK) formiruetsq sledu`}im obrazom:

         - slowa 1 i 2 sodervat neobhodimu` informaci`;
         - slowa 3 i 4 ne ispolxzu`tsq i dolvny bytx obnuleny.

  informaciq, wozwra}aemaq w slowe 1  bloka  sostoqniq  (BLK)
  dlq EOF (bajt 52 rawen 0 i bit perenosa ustanowlen), preds-
  tawlena w tabl. 17.

                                                  tABLICA 17
                  informaciq o konce fajla
   ----------------------------------------------------------
     sodervimoe  !            poqsnenie
    perwogo slowa!
   ----------------------------------------------------------
          1      ! lenta pered EOF (obnaruven marker)
                 !
          2      ! lenta pered EOT (marker ne obnaruven)
                 !
          3      ! lenta u EOT i EOF (obnaruven marker)
                 !
          4      ! lenta u BOT (marker ne obnaruven)


       esli marker obnaruven wo wremq operacii peremotki,  to
  wo wtorom slowe bloka sostoqniq (BLK) wozwra}aetsq raznostx
  mevdu ~islom blokow, kotorye nuvno bylo propustitx, i  ~is-
  lom fakti~eski propu}ennyh blokow. apparatnyj drajwer  rea-
  giruet na EOT, marker i metku BOT kak na EOF.

                            - 126 -




       informaciq, wozwra}aemaq w  slowe  1  bloka  sostoqniq
  (BLK) dlq uslowiq neustranimoj o{ibki, predstawlena nive  w
  tabl. 18 (bajt 52 rawen 1).

                                                  tABLICA 18
              informaciq o neustranimoj o{ibke
   ----------------------------------------------------------
     slowo 1     !              poqsnenie
   ----------------------------------------------------------
          0      ! net dopolnitelxnoj informacii (wkl`~aet
                 ! o{ibku pariteta i wse drugie,
                 ! ne pere~islennye nive)
                 !
          1      ! lentoprotqvnyj mehanizm ne podkl`~en
                 !
          2      ! poterqna poziciq lenty; pri woznikowenii
                 ! |toj o{ibki lentu sleduet peremotatx
                 ! nazad dlq opredeleniq mestopoloveniq
                 !
          3      ! ukazana nesu}estwu`}aq pamqtx
                 !
          4      ! lenta blokirowana dlq zapisi
                 !
          5      ! poslednij s~itannyj blok imel bolx{u`
                 ! dlinu, ~em ukazano w operacii ~teniq
                 ! informacii; drajwer mm wozwra}aet ~islo
                 ! nes~itannyh slow (wo wtorom slowe bloka
                 ! sostoqniq)
                 !
          6      ! byl s~itan korotkij blok (raznostx mevdu
                 ! mevdu ~islom trebuemyh i s~itannyh bajtow
                 ! wydaetsq w slowe 2 bloka BLK).

       apparatnyj drajwer wydaet neustranimu` o{ibku, esli on
  polu~aet makrokomandu, otli~nu` ot nefajlowoj  makrokomandy
  .LOOKUP, .CLOSE ili makrokomandy .SPFUN, neopredelennu` dlq
  apparatnogo drajwera.

       pri rabote s RT11XM blok sostoqniq (BLK) dlq soob}eniq
  ob o{ibkah wsegda dolven otravatxsq.



       8.1.2.2. ~tenie i zapisx fizi~eskih blokow



       apparatnyj drajwer ~itaet i  zapisywaet  bloki  l`bogo
  razmera. operacii ~teniq i zapisi proizwolxnogo ~isla  slow
  osu}estwlq`tsq dwumq kodami makrokomandy .SPFUN.

       makrokomanda .SPFUN  dlq  ~teniq  proizwolxnogo  ~isla
  slow imeet sledu`}ij format:

          .SPFUN AREA,CHAN,#370,BUF,WCNT,BLK[,CRTN]

   gde

  370    - kod operacii s~itywaniq;

                            - 127 -




  BLK    - adres ~etyrehslownogo bloka diagnostiki i  bloka  sostoqniq,
           ispolxzuemogo dlq wozwrata soob}enij ob o{ibke;

  CRTN   - neobqzatelxnyj  argument,  kotoryj  opredelqet  podprogrammu
           zawer{eniq, podleva}u` wwodu posle wypolneniq makrokomandy;

       soob}eniq o wozmovnyh o{ibkah, woznik{ih pri  wypolne-
  nii |toj makrokomandy, priwedeny w tabl. 19. dopolnitelxnaq
  informaciq ob o{ibke sodervitsq w perwyh dwuh slowah  bloka
  sostoqniq (BLK).

                                                  tABLICA 19
                      o{ibki  .SPFUN
   ----------------------------------------------------------
    kod w    !   kod   !        informaciq
   52 bajte  ! slowa 1 !
   ----------------------------------------------------------
     EOF     !     1   ! lenta pered EOF (marker obnaruven)
   zna~enie=0!     2   ! lenta pered EOt (marker ne obnaruven
             !     3   ! lenta pered EOF i EOT (marker
             !         ! obnaruven)
             !         !
    grubaq   !     0   ! net dopolnitelxnoj informacii
    o{ibka   !     1   ! lentoprotqvnyj mehanizm ne podkl`~en
   zna~enie=1!     2   ! kontroller poterql pozici` lenty
             !     3   ! wybrana nesu}estwu`}aq pamqtx
             !     4   ! lenta blokirowana dlq zapisi
             !     5   ! poslednij pro~itannyj blok imel
             !         ! bolx{e informacii. drajwer
             !         ! MM wozwra}aet ~islo nepro~itannyh
             !         ! slow (wo wtorom slowe sostoqniq)
             !     6   ! byl pro~itan korotkij blok. wo wtoro
             !         ! slowe sostoqniq nahoditsq raznica
             !         ! trebuemyh i pro~itannyh slow

       makrokomanda .SPFUN  dlq  zapisi  proizwolxnogo  ~isla
  slow imeet sledu`}ij format:

          .SPFUN AREA,CHAN,#371,BUF,WCNT,BLK[,CRTN]

   gde

  371    - kod operacii zapisi.

       soob}eniq o wozmovnyh o{ibkah pri wypolnenii |toj mak-
  rokomandy priwedeny w tabl. 20.  dopolnitelxnaq  informaciq
  ob o{ibke nahoditsq w perwyh dwuh  slowah  bloka  sostoqniq
  (BLK).

                                                  tABLICA 20
                      o{ibki  .SPFUN
   ----------------------------------------------------------
    kod w    !   kod   !        informaciq
   52 bajte  ! slowa 1 !
   ----------------------------------------------------------
     EOF     !     1   ! lenta pered EOF (marker obnaruven)
   zna~enie=0!     2   ! lenta pered EOt (marker ne obnaruven
             !     3   ! lenta pered EOF i EOT (marker
             !         ! obnaruven)

                            - 128 -




                                        pRODOLVENIE TABL. 20
   ----------------------------------------------------------
    kod w    !   kod   !        informaciq
   52 bajte  ! slowa 1 !
   ----------------------------------------------------------
             !         !
    grubaq   !     0   ! net dopolnitelxnoj informacii
    o{ibka   !     1   ! lentoprotqvnyj mehanizm ne podkl`~en
   zna~enie=1!     2   ! kontroller poterql pozici` lenty
             !     3   ! wybrana nesu}estwu`}aq pamqtx
             !     4   ! lenta blokirowana dlq zapisi




       8.1.2.3. peremotka wpered/nazad



       apparatnyj drajwer dopuskaet wypolnenie komandy  pere-
  motki lenty wpered ili nazad poblo~no  ili  do  obnaruveniq
  markera. esli obnaruven marker lenty,  drajwer  soob}aet  o
  nem i  o  ~isle  neprojdennyh  blokow.  |ti  komandy  mogut
  ispolxzowatxsq dlq wypolneniq peremotki k markeru, pri ~is-
  le propuskow bolx{em, ~em maksimalxnoe ~islo blokow na len-
  te. lenta budet pozicionirowana  posle  markera  ili  posle
  poslednego bloka.

       formaty makrokomandy .SPFUN  dlq  peremotki  magnitnoj
  lenty sledu`}ie:

       1) prqmaq poblo~naq peremotka

          .SPFUN AREA,CHAN,#376,,WCNT,BLK[,CRTN]

   gde

  376    - kod operacii prqmoj peremotki;

  WCNT   - s~et~ik blokow dlq peremotki (ne movet prewy{atx 65534);

  CRTN   - neobqzatelxnyj  argument,  kotoryj  opredelqet  podprogrammu
           zawer{eniq, podleva}u` wwodu posle wypolneniq makrokomandy;

       |ta makrokomanda wozwra}aet  kod  o{ibki  w  bajte  52
  (tabl. 21) i dopolnitelxnu` informaci`, kotoraq  pome}aetsq
  w perwye dwa slowa bloka sostoqniq (BLK).

                                                  tABLICA 21
                        o{ibki  .SPFUN
   ----------------------------------------------------------
    kod w    !   kod   !        informaciq
   52 bajte  ! slowa 1 !
   ----------------------------------------------------------
     EOF     !     1   ! lenta pered EOF (marker obnaruven)
   zna~enie=0!     2   ! lenta pered EOt (marker ne obnaruven
             !     3   ! lenta pered EOF i EOT (marker
             !         ! obnaruven);
             !         ! wtoroe slowo bloka sostoqniq

                            - 129 -




                                        pRODOLVENIE TABL. 21
   ----------------------------------------------------------
    kod w    !   kod   !        informaciq
   52 bajte  ! slowa 1 !
   ----------------------------------------------------------
             !         ! sodervit trebuemoe ~islo blokow
             !         ! dlq peremotki (WCNT) minus ~islo
             !         ! peremotannyh blokow, esli marker
             !         ! lenty ili BOT obnaruveny. w protiwno
             !         ! slu~ae ego zna~enie ne opredeleno
             !         !
    grubaq   !     0   ! net dopolnitelxnoj informacii
    o{ibka   !     1   ! lentoprotqvnyj mehanizm ne podkl`~en
   zna~enie=1!     2   ! kontroller poterql pozici` lenty


       pRIME^ANIE. iz-za apparatnyh ograni~enij  ne  rekomen-
  duetsq, ~toby komanda prqmoj peremotki ne wydawalasx,  esli
  lenta pozicionirowana posle markera EOT;

       2) obratnaq poblo~naq peremotka

       makrokomanda peremotki nazad poblo~no imeet  sledu`}ij
  format:

          .SPFUN AREA,CHAN,#375,,WCNT,BLK[,CRTN]

   gde

  375    - kod operacii obratnoj peremotki.

       |ta makrokomanda wozwra}aet  kod  o{ibki  w  bajte  52
  (tabl. 22) i pome}aet dopolnitelxnu`  informaci`  w  perwye
  dwa slowa bloka sostoqniq (BLK).

                                                  tABLICA 22
                        o{ibki  .SPFUN
   ----------------------------------------------------------
    kod w    !   kod   !        informaciq
   52 bajte  ! slowa 1 !
   ----------------------------------------------------------
     EOF     !     1   ! lenta pered EOF (marker obnaruven)
   zna~enie=0!     2   ! lenta pered EOt (marker ne obnaruven
             !     3   ! lenta pered EOF i EOT (marker
             !         ! obnaruven)
             !     4   ! lenta pered BOT (marker ne
             !         ! obnaruven); wtoroe slowo bloka
             !         ! sostoqniq sodervit trebuemoe ~islo
             !         ! blokow dlq peremotki (WCNT) minus
             !         ! ~islo peremotannyh blokow, esli
             !         ! marker lenty ili BOT obnaruveny. w
             !         ! protiwnom slu~ae ego zna~enie ne
             !         ! opredeleno
             !         !
    grubaq   !     0   ! net dopolnitelxnoj informacii
    o{ibka   !     1   ! lentoprotqvnyj mehanizm ne podkl`~en
   zna~enie=1!     2   ! kontroller poterql pozici` lenty

                            - 130 -




       8.1.2.4. peremotka k metke BOT



       drajwer movet wypolnqtx komandu peremotki lenty k met-
  ke wot (na to~ku zagruzki).  drajwery  MM  i  MT  ne  mogut
  wypolnqtx drugie makrokomandy do teh  por,  poka  ne  budet
  zawer{ena operaciq polnoj peremotki (w otli~ii ot  drajwera
  MS).

       makrokomanda peremotki imeet sledu`}ij format:

          .SPFUN AREA,CHAN,#373,,,BLK[,CRTN]

   gde

  373    - kod operacii polnoj peremotki;

  CRTN   - argument (neobqzatelxnyj), kotoryj  opredelqet  podprogrammu
           zawer{eniq, podleva}u` wwodu posle wypolneniq makrokomandy.

       |ta makrokomanda wozwra}aet  kod  o{ibki  w  bajte  52
  (tabl. 23) i pome}aet dopolnitelxnu` informaci` w blok sos-
  toqniq (BLK).

                                                  tABLICA 23
                        o{ibki  .SPFUN
   ----------------------------------------------------------
    kod w    !   kod   !        informaciq
   52 bajte  ! slowa 1 !
   ----------------------------------------------------------
   grubaq    !     0   ! net dopolnitelxnoj informacii
   o{ibka    !         !
   zna~enie=0!     1   ! lentoprotqvnyj mehanizm ne podkl`~en




       8.1.2.5. obratnaq  peremotka  i  ustanowka  w   awtonomnom
                revime



       |ta makrokomanda takaq ve, kak i makrokomanda peremot-
  ki k metke wot, za iskl`~eniem togo, ~to ona perewodit ust-
  rojstwo w awtonomnyj revim, a zatem  perematywaet  lentu  k
  wot. drajwer swoboden dlq priema  komand  posle  togo,  kak
  budet na~ata peremotka.

       makrokomanda peremotki w awtonomnom revime imeet  sle-
  du`}ij format:

          .SPFUN AREA,CHAN,#372,,,BLK[,CRTN]

   gde

  372    - kod operacii obratnoj peremotki w awtonomnom revime;

  CRTN   - neobqzatelxnyj  argument,  kotoryj  opredelqet  podprogrammu

                            - 131 -




           zawer{eniq, podleva}u` wwodu posle wypolneniq makrokomandy.

       |ta makrokomanda wydaet te ve kody o{ibok  i  dopolni-
  telxnu` informaci`, ~to i makrokomanda obratnoj peremotki.



       8.1.2.6. zapisx s ras{irennymi promevutkami



       |ta makrokomanda pozwolqet osu}estwlqtx zapisx na len-
  tah s  defektnymi  u~astkami.  ona  identi~na  makrokomande
  zapisi za iskl`~eniem togo, ~to kod operacii zapisi s  ras-
  {irennym promevutkom rawen 374.  o{ibki  |toj  makrokomandy
  takve identi~ny o{ibkam makrokomandy zapisi.



       8.1.2.7. zapisx markera lenty



       apparatnyj drajwer  movet  wypolnqtx  zapisx  markera.
  makrokomanda imeet sledu`}ij format:

          .SPFUN AREA,CHAN,#377,,,BLK[,CRTN]

   gde

  377    - kod operacii zapisi markera lenty.

       |ta makrokomanda wozwra}aet  kod  o{ibki  w  bajte  52
  (tabl. 24) i zapisywaet dopolnitelxnu` informaci` w  perwyh
  dwuh slowah bloka sostoqniq (BLK).

                                                  tABLICA 24
                        o{ibki  .SPFUN
   ----------------------------------------------------------
    kod w    !   kod   !        informaciq
   52 bajte  ! slowa 1 !
   ----------------------------------------------------------
     EOF     !     1   ! lenta pered EOF (marker obnaruven)
   zna~enie=0!         !
             !         !
    grubaq   !     0   ! net dopolnitelxnoj informacii
    o{ibka   !     1   ! lentoprotqvnyj mehanizm ne podkl`~en
   zna~enie=1!     2   ! kontroller poterql pozici` lenty
             !     4   ! lenta blokirowana dlq zapisi



       8.1.2.8. algoritm obrabotki o{ibok



       l`bye o{ibki, obnaruvennye wo wremq operacij  peremot-
  ki, wyzywa`t ostanow i soob}enie o neustranimoj o{ibke.


                            - 132 -




       pri ~tenii kak drajwer fajlowoj struktury, tak i appa-
  ratnyj drajwer wypolnq`t sledu`}ie operacii w slu~ae  obna-
  ruveniq o{ibki pariteta:

        1) lenta  perematywaetsq  nazad  na   blok,   i   blo
           powtorno s~itywaetsq; |ta operaciq powtorqetsq  do
           pqti neuda~nyh popytok;

         2) wozwrat na  pqtx  blokow,  prodwivenie  wpered  n
           4 bloka, zatem s~itywanie zapisi;

         3) {agi 1 i 2 powtorq`tsq wosemx raz ili do teh  por
           poka blok ne budet uspe{no s~itan.

       posle obnaruveniq o{ibki pariteta pri zapisi  apparat-
  nyj drajwer wypolnqet sledu`}ie dejstwiq:

         1) wozwra}aet lentu na odin blok nazad;

         2) stiraet tri bloka lenty i powtorqet zapisx  bloka
           nikogda ne delaetsq  popytka  perepisatx  blok  na
           defektnyj u~astok, ~to movet pozdnee wyzwatx prob-
           lemu;

         3) powtorqet {agi 1 i 2 do  teh  por,  poka  blok  n
           budet s~itan uspe{no. esli takim  obrazom  propus-
           kaetsq 7.5  m  lenty,  soob}aetsq  o  neustranimoj
           o{ibke.



       8.1.2.9. nefajlowaq makrokomanda .LOOKUP



       apparatnyj  drajwer  dopuskaet  wypolnenie  nefajlowoj
  makrokomandy .LOOKUP. |to neobhodimo  pri  otkrytii  kanala
  dlq ustrojstwa do togo, kak budet wypolnena l`baq  operaciq
  wwoda/wywoda. pri |tom drajwer fiksiruet, ~to  lentoprotqv-
  nyj mehanizm zanqt, i nikakoj drugoj kanal  ne  movet  bytx
  otkryt dlq |togo lentoprotqvnogo mehanizma do teh por, poka
  ne budet wypolnena makrokomanda .CLOSE.

       makrokomanda .LOOKUP imeet sledu`}ij format:

          .LOOKUP AREA,CHAN,DBLK,SEGNUM

  gde

  SEGNUM - argument, opredelq`}ij wozmovnostx obratnoj peremotki lenty:

            zna~enie argumenta        wypolnqemaq operaciq
                  SEGNUM

                    0                 lenta perematywaetsq
                   -1                 lenta ne perematywaetsq

       makrokomanda .LOOKUP wozwra}aet soob}eniq ob  o{ibkah,
  predstawlennye w tabl. 25.

                            - 133 -




                                                  tABLICA 25
                       o{ibki  .LOOKUP
   ----------------------------------------------------------
        kod w         !          poqsnenie
       bajte 52       !
   ----------------------------------------------------------
        0 ili 1       ! nesu}estwenno dlq dannoj makrokomandy
        2             ! ustrojstwo ispolxzuetsq
                      ! wybrannyj lentoprotqvnyj mehanizm
                      ! uve zakreplen za drugim kanalom
        3             ! lentoprotqvnyj mehanizm ne podkl`~en
        4             ! obnaruven nedopustimyj argument:
                      ! bylo zadano imq fajla ili argument
                      ! SEGNUM ne byl rawen 0 ili -1



       8.1.2.10. makrokomanda .CLOSE



       apparatnyj drajwer  wypolnqet  makrokomandu  .CLOSE  i
  oswobovdaet lentoprotqvnyj mehanizm.

       |ta makrokomanda imeet sledu`}ij format:

          .CLOSE CHAN



       8.1.2.11. nefajlowye makrokomandy .WRIT*



       apparatnyj drajwer dopuskaet  wypolnenie  makrokomand,
  kotorye zapisywa`t proizwolxnoe ~islo slow w blok na lente.
  pole nomera bloka ignoriruetsq.

       |ti makrokomandy ime`t sledu`}ie formaty:

          .WRIT* AREA,CHAN,BUF,WCNT[,,CRTN]

       makrokomandy .WRIT* wozwra}a`t o{ibki,  predstawlennye
  w tabl. 26. dopolnitelxnaq informaciq otsutstwuet.

                                            tABLICA 26
                       o{ibki  .WRIT*
         ----------------------------------------------
           kod w  !               poqsnenie
         52 bajte !
         ----------------------------------------------
            0     ! obnaruven marker konca lenty (EOT)
            1     ! neustranimaq o{ibka na kanale
            2     ! kanal ne otkryt

                            - 134 -




       8.1.2.12. nefajlowye makrokomandy .READ*



       |ti makrokomandy s~itywa`t proizwolxnoe ~islo slow  iz
  bloka na lente. oni ignoriru`t marker EOT, i  tolxko  soob-
  }a`t o konce fajla  pri  obnaruvenii  markera  lenty.  pole
  nomera bloka ignoriruetsq.

       format makrokomand sledu`}ij:

          .READ* AREA,CHAN,BUF,WCNT[,,CRTN]

       |ti makrokomandy wozwra}a`t soob}eniq ob o{ibkah, opi-
  sanye w tabl. 27. dopolnitelxnaq informaciq otsutstwuet.

                                               tABLICA 27
                         o{ibki  .READ*
        --------------------------------------------------
           kod w   !            poqsnenie
          52 bajta !
        --------------------------------------------------
             0     ! popytka s~itatx posle markera lenty;
                   ! |ta o{ibka movet generirowatxsq pri
                   ! sli{kom bolx{om bloke
             1     ! neustranimaq o{ibka na kanale
             2     ! kanal ne otkryt



       8.1.3. ~tenie lent zapisannyh w drugih sistemah



       RT11 movet ~itatx fajly, zapisannye  w  drugih  opera-
  cionnyh sistemah, obespe~iwa`}ih  standartnye  metki  ANSI.
  nive priwodqtsq primery zapisi lent ANSI  w  drugih  opera-
  cionnyh sistemah sm |wm. sleduet pomnitx, ~to krome sowmes-
  timosti metok i formata, ime`tsq i inye faktory  (naprimer,
  plotnostx zapisi, paritet i ~islo dorovek). polnaq informa-
  ciq ob ispolxzowanii magnitnyh lent w razli~nyh  operacion-
  nyh sistemah predstawlena w sootwetstwu`}ej dokumentacii na
  |ti sistemy.



       8.1.3.1. ~tenie lent zapisannyh w dos kp



       operacionnaq sistema dos kp podderviwaet dwa tipa for-
  mata magnitnyh lent: DOS i ANSI.  w  primerah,  priwedennyh
  nive, DD predstawlqet imq  drajwera  magnitnoj  lenty.  dlq
  zapisi fajlow w formate ANSI neobhodimo  zadatx  komandy  w
  sledu`}em porqdke:

      komandy                           dejstwiq

   ASSIGN DDN:.ANSI              nazna~aet  ustrojstwo   dlq

                            - 135 -




                                 zadaniq i  garantiruet,  ~to
                                 ispolxzuetsq struktura  faj-
                                 low ANSI;
   RUN $PIP
   DDN:XXXXXX/ZE                 PIP  inicializiruet  lentu;
                                 XXXXXX  qwlqetsq identifika-
                                 torom toma;
   REALLY ZERO DDN:? YES         PIP wydaet  podskazku  pered
                                 inicializaciej lenty;
   PIP DDN:=PROG1.TXT,PROG2.TXT  PIP kopiruet fajly na lentu;
   DEASSIGN DDN:                 otmenqet nazna~enie
                                 ustrojstwa.



       8.1.3.2. ~tenie lent zapisannyh w os-rw



       operacionnaq sistema os-rw trebuet  sledu`}ie  komandy
  dlq dostupa k magnitnoj lente:

       komandy                    dejstwiq

   ALL DDN:                zakreplqet ustrojstwo s nomerom N;
   INIT DDN:RAFOS          inicializiruet magnitnu` lentu
                           i priswaiwaet imq RAFOS
                           w ka~estwe identifikatora toma;
   MOU DDN:RAFOS           montiruet tom lenty;
   PIP DDN:=[12,17]PROG1.TXT,PROG2.TXT
                           kopiruet fajly na lentu;
   DMO DDN:RAFOS           demontiruet tom lenty;
   DEA DDN:                otmenqet nazna~enie ustrojstwa.



       8.1.4. ~tenie lent zapisannyh w RSX-11D i IAS





       8.1.5. semidorove~naq lenta



       semidorove~nye lenty sodervat {estx dorovek informacii
  i odnu dorovku ~etnosti. takim  obrazom,  w  odnom  simwole
  dannyh movet nahoditxsq maksimum {estx bitow.  w  semidoro-
  ve~nyh lentah drajwer MT proizwodit operacii w  {estibitnom
  revime ili w revime operatiwnoj pamqti.  {estibitnyj  revim
  ne sowmestim s dannymi, sozdawaemymi operacionnymi sistema-
  mi sm |wm; on obespe~iwaetsq dlq pereda~i dannyh  w  drugie
  sistemy i iz nih. pomimo |togo, w |tom revime ne mogut bytx
  wypolneny operacii fajlowoj struktury. pri plotnosti zapisi
  w 200 ili 556 BPI (7,87 ili 21,89 bit/mm)  magnitnaq  lenta
  wsegda rabotaet w  {estibitnom  revime.  revim  operatiwnoj
  pamqti sowmestim s sistemami sm |wm. pri plotnosti 800  BPI
  (31,50 bit/mm) movet osu}estwlqtsq pereda~i  semidorove~nyh

                            - 136 -




  lent libo w {estibitnom revime (SET MT:DENSE=807),  libo  w
  revime operatiwnoj pamqti (po umol~ani`). ris. 19 ill`stri-
  ruet razli~iq mevdu |timi revimami.

                     semidorove~naq  lenta
                     ---------------------


   15                       08  07                         00
   ----------------------------------------------------------
   !              B            !              A             !
   ----------------------------------------------------------
                         9-dorove~naq lenta
            na lentu zapisywa`tsq polnye 8-bitnye bajty



    15 14 13                   08 07 06 05                00
   ----------------------------------------------------------
   !  !  !          B            !  !  !        A           !
   ----------------------------------------------------------
              7-dorove~naq lenta (6-bitnyj revim)
          na lentu zapisywa`tsq tolxko 6 bitow kavdogo
       8-bitnogo bajta. bity 6,7,14 i 15 - ne ispolxzu`tsq


    15         12 11         08 07          04 03         00
   ----------------------------------------------------------
   !      D      !      C      !       B      !      a      !
   ----------------------------------------------------------
              7-dorove~naq lenta (revim pamqti)
          na lentu zapisywa`tsq polnye 8-bitnye bajty,
               ispolxzuq dwa 4-bitnyh simwola


                                       !---------------!
                 /---I---I---I---I-----!               !----/
                 >   D   C   B   A     !  zagolowok    !    >
                 \---I---I---I---I-----! ~teniq/zapisi !----\
                                       !               !
                 naprawlenie --------> !---------------!
                 dwiveniq lenty

                          ris. 19

       pri ~tenii w 6-bitnom revime drajwer  pome}aet  kavdyj
  6-bitnyj simwol lenty, wyrawnennyj w bajte po prawomu kra`;
  dwa star{ih bita bajta ustanawliwa`tsq w 0.  pri  zapisi  w
  6-bitnom  revime  drajwer  zapisywaet  6  mlad{ih  bitow  w
  ka~estwe dannyh simwola lenty; dwa star{ih  bita  ne  pere-
  da`tsq.

       w revime pamqti kavdyj bajt sm-4  razdelqetsq  na  dwa
  simwola lenty. pri zapisi na lentu drajwer pi{et 4  mlad{ih
  bita bajta sm-4 kak 4 mlad{ih bita perwogo simwola lenty; 4
  star{ih bita bajta sm-4 zapisywa`tsq  kak  4  mlad{ih  bita
  sledu`}ego simwola lenty. dwa star{ih bita kavdogo  simwola
  lenty ustanawliwa`tsq w nulx. pri  ~tenii  lenty  woznikaet
  obratnyj process: 4 mlad{ih bita perwogo simwola lenty sta-

                            - 137 -




  nowqtsq ~etyrxmq mlad{imi bitami bajta sm-4; 4 mlad{ih bita
  sledu`}ego simwola lenty stanowqtsq star{imi ~etyrxmq bita-
  mi bajta sm-4. dwa star{ih bita kavdogo  simwola  lenty  ne
  pereda`tsq, hotq oni wkl`~a`tsq w  wy~islenie  ~etnosti.  w
  revime operatiwnoj pamqti fakti~eskoe ~islo  pro~itannyh  i
  zapisannyh simwolow lenty qwlqetsq udwoennym trebuemym ~is-
  lom bajtow sm-4 dlq pereda~i. |to  prewra}enie  (konwersiq)
  wypolnqetsq kontrollerom magnitnoj lenty.



       8.2. drajwer kassetnoj magnitnoj lenty (CT)



       drajwer CT movet rabotatx w dwuh revimah: apparatnom i
  programmnom. programmnyj revim - |to oby~nyj revim  raboty,
  kotoryj takve ispolxzuetsq dlq raboty s  ustrojstwom  l`boj
  sistemnoj programmoj RT11.  w  programmnom  revime  drajwer
  awtomati~eski podderviwaet zagolowki  fajlow  i  ispolxzuet
  dlq pereda~i dannyh zapisi fiksirowannoj dliny w 64 slowa.

       apparatnyj revim pozwolqet polxzowatel` s~itywatx  ili
  zapisywatx l`boj trebuemyj format i ispolxzowatx l`boj raz-
  mer zapisi. w |tom revime  drajwer  interpretiruet  s~et~ik
  slow kak razmer fizi~eskoj zapisi.

       kogda drajwery perwona~alxno zagruva`tsq libo makroko-
  mandoj .FETCH, libo komandoj  monitora  LOAD,  to  dopustim
  tolxko programmnyj revim raboty. dlq perehoda iz  programm-
  nogo revima w apparatnyj dolvna bytx wypolnena  libo  pere-
  motka, libo  nefajlowaq  makrokomanda  .LOOKUP  (nefajlowaq
  makrokomanda .LOOKUP - |to makrokomanda .LOOKUP, w  kotoroj
  perwoe slowo imeni fajla rawno  nul`,  t.e.  imq  fajla  ne
  zadano).

       drajwer CT movet wypolnqtx sledu`}ie funkcii:

  .ENTER - otkrytie nowogo fajla dlq wywoda;

  .LOOKUP
         - otkrytie su}estwu`}ego fajla dlq wwoda/wywoda;

  .DELETE
         - udalenie su}estwu`}ego fajla;

  .CLOSE - zakrytie fajla, kotoryj byl otkryt makrokomandoj .LOOKUP ili
           .ENTER;

  .READ*/.WRITE*
         - wypolnenie zaprosow pereda~i dannyh.

       w makrokomandah .ENTER, .LOOKUP i .DELETE  movet  bytx
  ukazan neobqzatelxnyj argument "s~et~ik fajlow":

      0  - do operacii wypolnqetsq peremotka lenty k na~alu;

     >0  - peremotka ne wypolnqetsq; zna~enie wosprinimaetsq kak  ~islo
           fajlow, kotorye nuvno  prosmotretx  do  wypolneniq  operacii

                            - 138 -




           (naprimer, pri zna~enii s~et~ika, rawnom 2,  prosmatriwaetsq
           samoe bolx{ee 2 fajla;  pri  zna~enii  s~et~ika,  rawnom  1,
           prosmatriwaetsq tolxko sledu`}ij fajl);

     <0  - peremotka wypolnqetsq; absol`tnoe zna~enie argumenta w dalx-
           nej{em ispolxzuetsq w ka~estwe s~et~ika.

       esli fajl, ukazannyj w makrokomande, najden do  is~er-
  paniq s~et~ika, to poisk uspe{en i prekra}aetsq w |toj to~-
  ke.

       primer 1:

          .LOOKUP #AREA,#0,#PTR,#5
          BCS    A1
          .
          .
          .
   AREA:  .BLKW   10.
   PTR:   .RAD50  /CT0/
          .RAD50  /SAMPLEMAC/

       w |tom slu~ae s~et~ik fajlow bolx{e nulq  (rawen  +5),
  sledowatelxno, peremotka ne dolvna wypolnqtxsq, i  na  st0:
  dolven bytx proizweden poisk ukazannogo fajla (SAMPLE.MAC).
  esli fajl ne najden posle propuska ~etyreh fajlow ili w |to
  wremq budet najden konec lenty, to  poisk  prekra}aetsq,  i
  lenta pozicioniruetsq libo u  konca  lenty  (EOT),  libo  u
  na~ala pqtogo fajla. esli fajl SAMPLE.MAC budet obnaruven w
  predelah pqti fajlow, to  lenta  pozicioniruetsq  u  na~ala
  najdennogo fajla. esli EOT wstretitsq ranx{e,  to  makroko-
  manda zawer{aetsq po o{ibke:

       primer 2:

          .LOOKUP #AREA,#0,#PTR,#-5

       w |tom primere wypolnqetsq peremotka, a zatem  ispolx-
  zuetsq s~et~ik fajlow 5, kak i w predydu}em primere.



       8.2.1. funkcii drajwera



       nive opisany funkcii, wypolnqemye drajwerom  kassetnoj
  lenty.



       8.2.1.1. makrokomanda .LOOKUP



       esli imq fajla ne zadano (perwoe slowo rawno nul`), to
  operaciq wosprinimaetsq kak nefajlowaq. |ta operaciq  usta-
  nawliwaet drajwer w apparatnyj revim,  i  peremotka  wypol-
  nqetsq po umol~ani`.

                            - 139 -




       esli imq fajla zadano, drajwer pytaetsq najti  ukazan-
  nyj fajl. makrokomanda  .LOOKUP  ispolxzuet  neobqzatelxnyj
  argument "s~et~ik fajlow", kak  opisano  wy{e.  razre{a`tsq
  tolxko operacii programmnogo revima.



       8.2.1.2. makrokomanda .DELETE



       makrokomanda .DELETE udalqet s ustrojstwa fajl s  uka-
  zannym imenem. makrokomanda .DELETE takve ispolxzuet  s~et-
  ~ik fajlow i movet udalqtx fajl kak po  nomeru,  tak  i  po
  ukazannomu imeni. kogda fajl udalqetsq, sozdaetsq swobodnaq
  oblastx. odnako, newozmovno ispolxzowatx |tu  oblastx,  kak
  |to wypolnqetsq  na  ustrojstwe  s  prqmym  dostupom.  zona
  ostaetsq neispolxzowannoj do teh por, poka ne budet powtor-
  no inicializirowan i perepisan tom. esli imq fajla otsutst-
  wuet, wypolnqetsq nefajlowaq makrokomanda .DELETE, i  lenta
  obnulqetsq.



       8.2.1.3. makrokomanda .ENTER



       makrokomandoj .ENTER otkrywaetsq nowyj fajl s  ukazan-
  nym imenem. |ta makrokomanda ispolxzuet  s~et~ik  fajlow  i
  movet sozdawatx fajl po imeni ili po nomeru. esli  proizwo-
  ditsq sozdanie fajla po imeni, drajwer udalqet wse fajly  s
  takim ve imenem. esli fajl sozdaetsq po nomeru, to  propus-
  kaetsq ukazannoe ~islo fajlow, i  lenta  pozicioniruetsq  w
  na~ale sledu`}ego fajla.


       pRIME^ANIE. neobhodimo  bytx  osobo  wnimatelxnym  pri
  wypolnenii makrokomand .ENTER, ispolxzu`}ih nomera  fajlow,
  t.k. movno sozdatx fajl w seredine lenty (na meste  su}est-
  wu`}ih fajlow). w |tom slu~ae fajly, raspolovennye za tolx-
  ko ~to sozdannym fajlom, stanowqtsq nedostupnymi  dlq  ~te-
  niq. fakti~eski  wsq  informaciq  posle  zapisannogo  fajla
  budet poterqna.
       movno sozdatx bolee odnogo fajla s odnim i tem ve ime-
  nem. esli  wypolnqetsq  makrokomanda  .ENTER  so  s~et~ikom
  bolx{e 0, to obratnaq peremotka  ne  proizwoditsq  i,  esli
  fajl s takim ve imenem nahoditsq na lente do teku}ej  pozi-
  cii, to drajwer ne movet ego udalitx.  nefajlowaq  makroko-
  manda .ENTER wypolnqet taku` ve funkci`, kak  i  nefajlowaq
  makrokomanda .LOOKUP, no  lenta  nazad  ne  perematywaetsq.
  t.k. obe funkcii dopuska`t zapisx na  lente  nezawisimo  ot
  struktury lenty, to sleduet bytx wnimatelxnym pri ispolxzo-
  wanii ih na lente s fajlowoj strukturoj.

                            - 140 -




       8.2.1.4. makrokomanda .CLOSE



       makrokomanda .CLOSE zawer{aet  operacii  s  fajlom  na
  kassete  i  razre{aet   drajweru   wypolnenie   makrokomand
  .LOOKUP, .ENTER ili .DELETE na dannom ustrojstwe.

       esli makrokomanda .CLOSE  ne  wypolnqetsq  dlq  fajla,
  sozdannogo po .ENTER, marker konca lenty ne zapisywaetsq  i
  na |tom tome ne mogut bytx sozdany nowye fajly. w |tom slu-
  ~ae poslednij fajl na lente dolven bytx perepisan i  zakryt
  dlq isprawleniq toma.



       8.2.1.5. makrokomandy .READ/.WRITE



       makrokomandy .READ i  .WRITE  qwlq`tsq  edinstwennymi,
  kotorye mogut bytx wypolneny i w apparatnom, i w  programm-
  nom revimah. w programmnom revime (fajl otkryt po  makroko-
  mande .LOOKUP ili .ENTER) zapisywa`tsq bloki fiksirowannogo
  razmera (64 slowa). s~et~ik, ukazannyj w operacii, preobra-
  zuetsq w koli~estwo blokow.

       pri makrokomande .READ ostaw{aqsq ~astx bufera polxzo-
  watelq zapolnqetsq  nulqmi,  esli  s~et~ik  slow  prewy{aet
  ob'em ime`}ihsq dannyh.

       nive opisywaetsq  ispolxzowanie  razli~nyh  argumentow
  dlq makrokomand .READ i .WRITE:

       1) nomer bloka (BLK)

       wypolnq`tsq  tolxko  posledowatelxnye  operacii.  esli
  nomer bloka 0, to kasseta perematywaetsq  k  na~alu  fajla.
  l`boj drugoj nomer bloka ignoriruetsq;

       2) s~et~ik slow (WCNT)

       esli s~et~ik slow rawen nul`,  to  wozmovny  sledu`}ie
  situacii:

         - operaciq zakl`~aetsq  w  poiske  imeni  fajla;  nomer  bloka
           ispolxzuetsq kak argument "s~et~ik fajlow", pri |tom  wypol-
           nq`tsq te ve dejstwiq, ~to i w primere makrokomandy .LOOKUP;
           adres bufera ukazywaet na specifikaci` fajla (imq ustrojstwa
           i imq fajla w kode RADIX-50); |to swojstwo pozwolqet  wypol-
           nqtx makrokomandu .LOOKUP asinhronno;  standartnaq  makroko-
           manda .LOOKUP ne peredaet uprawlenie programme  polxzowatelq
           do teh por, poka lenta ne budet ustanowlena prawilxno, togda
           kak asinhronnaq makrokomanda peredaet uprawlenie  nemedlenno
           i osu}estwlqet prerywanie posle obnaruveniq fajla;

         - woznikaet o{ibka (ustanawliwaetsq bit "C").

                            - 141 -




       pRIME^ANIE. polxzowatelx  movet  wypolnitx  sinhronnu`
  makrokomandu .LOOKUP s polovitelxnym argumentom "nomer blo-
  ka" dlq tolxko ~to najdennogo fajla, izbegaq takim  obrazom
  dlitelxnogo sinhronnogo poiska na lente.



       8.2.2. specialxnye funkcii kassety



       nive opisywa`tsq funkcii, dopustimye  dlq  drajwera  w
  apparatnom revime, A takve da`Tsq primery ih ispolxzowaniq.
  specialxnye funkcii wyzywa`tsq makrokomandoj .SPFUN. prime-
  ry ispolxzowaniq dA`tsq posle opisaniq kavdoj funkcii. spe-
  cialxnye funkcii trebu`T nomer kanala w ka~estwe argumenta.
  kanal movet bytx perwona~alxno otkryt  nefajlowoj  makroko-
  mandoj .LOOKUP, kotoraq ustanawliwaet drajwer w  apparatnyj
  revim.

       format makrokomandy .SPFUN sledu`}ij:

          .SPFUN AREA,CHAN,FUNC,BUF,WCNT,BLK,CRTN

   gde

  FUNC   - kod funkcii, podleva}ej wypolneni`.







      8.2.2.1. po |toj makrokomande proishodit peremotka len-
  ty nazad, w to~ku zagruzki. proizwoditsq perewod drajwera w
  apparatnyj revim takim ve sposobom,  kak  i  po  nefajlowoj
  makrokomande .LOOKUP, posle ~ego mogut bytx wypolneny l`bye
  drugie funkcii. esli ne opredelena podprogramma zawer{eniq,
  uprawlenie ne peredaetsq polxzowatel` do teh por,  poka  ne
  budet wypolnena obratnaq peremotka. format |toj makrokoman-
  dy:

          .SPFUN #AREA,#0,#373,#0,#0,#0,#CRTN
                                      ;peremotka kassety;
                                      ;kanal 0

   gde

  CRTN   - adres podprogrammy zawer{eniq, kotoraq budet wypolneniq pos-
           le operacii.

                            - 142 -




       8.2.2.2. poslednij fajl



       po |toj makrokomande kasseta perematywaetsq i ustanaw-
  liwaetsq neposredstwenno pered LEOT (metka logi~eskogo kon-
  ca lenty). format  makrokomandy  to~no  takoj,  kak  i  dlq
  obratnoj peremotki, za iskl`~eniem togo,  ~to  ispolxzuetsq
  kod 377.

          .SPFUN #AREA,#0,#377,#0,#0,#0[,#CRTN]



       8.2.2.3. poslednij blok



       po |toj  makrokomande  budet  osu}estwlqtxsq  obratnaq
  peremotka na odnu zapisx. format makrokomandy sledu`}ij:

          .SPFUN #AREA,#0,#376,#0,#0,#0[,#CRTN]



       8.2.2.4. sledu`}ij fajl



       po makrokomande kasseta perematywaetsq wpered do  sle-
  du`}ego fajla. format makrokomandy:

          .SPFUN #AREA,#0,#375,#0,#0,#0[,#CRTN]



       8.2.2.5. sledu`}ij blok



       po |toj makrokomande kasseta perematywaetsq wpered  na
  odnu zapisx. format makrokomandy:

          .SPFUN #AREA,#0,#374,#0,#0,#0[,#CRTN]



       8.2.2.6. zapisx promevutka mevdu fajlami



       po |toj  makrokomande  zapisywaetsq  promevutok  mevdu
  fajlami, i zawer{aetsq fajl, zapisannyj programmoj  polxzo-
  watelq w apparatnom revime. format makrokomandy:

          .SPFUN #AREA,#0,#372,#0,#0,#0[,#CRTN]

       primer sinhronnoj zapisi promevutkow mevdu fajlami:

                            - 143 -




          .SPFUN #AREA,#0,#372,#0,#0,#0

       primery wypolneniq asinhronnoj operacii zapisi  prome-
  vutkow mevdu fajlami:

          .SPFUN #AREA,#0,#372,#0,#0,#0,#1
          .SPFUN #AREA,#0,#372,#0,#0,#0,#CRTN



       8.2.3. opredelenie konca fajla na kassete



       Tak Kak kasseta - |to  ustrojstwo  s  posledowatelxnym
  dostupom, to drajwer |togo ustrojstwa ne  movet  predwidetx
  ~islo blokow w  opredelennom  fajle.  po|tomu  konec  fajla
  opredelqetsq pri popytke s~itywaniq mevfajlowogo  promevut-
  ka. programmy  polxzowatelq  mogut  ispolxzowatx  sledu`}ie
  procedury dlq opredeleniq,  wstretilsq  li  konec  fajla  w
  programmnom ili apparatnom revime.

       esli w programmnom revime byli zapisany nekotorye dan-
  nye i wstre~en konec fajla wo wremq s~itywaniq, to  drajwer
  kassety zapolnqet ostatok bufera nulqmi i wozwra}aet upraw-
  lenie wyzywa`}Ej programme. pri sledu`}ej popytke  s~itywa-
  niq na |tom kanale ustanawliwa`tsq bit "C"  i  bajt  o{ibki
  (absol`tnaq q~ejka 52) s  ukazaniem  popytki  ~teniq  posle
  konca fajla.

       w apparatnom revime drajwer kassety ne soob}aet o kon-
  ce fajla, kak |to on delaet  w  programmnom  revime.  ~toby
  opredelitx konec fajla, w programme polxzowatelq neobhodimo
  otsleviwatx ~tenie promevutka mevdu fajlami. dlq |togo sle-
  duet prowerqtx registr sostoqniq ustrojstwa posle  zawer{e-
  niq kavdogo s~itywaniq w apparatnom revime.

       primer:

          CTCS  = 177500  ; registr komand i sostoqnij
                          ; kassety
          CTEOF =   4000  ; bit eoF w registre CTCS
          CTEOT =  20000  ; bit EOT w registre CTCS
          .
          .
          .
          .READW #AREA,#CHNL,#BUFF,#400,BLKNUM  ; s~itywanie
                         ; s kassety
          BCS    EMTERR  ; prowerka o{ibki
          TST    @#CTCS  ; bit o{ibki ustanowlen w CTCS ?
          BPL    NOERR   ; esli net o{ibki
          BIT    #CTEOF,@#CTCS ; da, byl |to konec fajla ?
          BNE    EOF     ; da!
          .
          .
          .
   EOF:                  ; wstre~en konec fajla na kassete
          .
          .

                            - 144 -




          .
   ; esli trebuetsq, oba bita EOF i EOT mogut
   ; bytx prowereny:
   ;
          BIT     #MTSEOF+MTSEOt,@MTS   ; MT EOF ili EOT ?
          BIT     #CTEOF+CTEOt,@#CTEOT  ; CT EOF ili EOT ?



       8.3. drajwery gibkih magnitnyh diskow (DX i DY)



       makrokomanda .SPFUN ispolxzuetsq dlq togo, ~toby obes-
  pe~itx s~itywanie i zapisx absol`tnyh  sektorow  na  gibkih
  magnitnyh diskah. drajwer DY dopuskaet wypolnenie  dopolni-
  telxnoj wozmovnosti  makrokomandy  .SPFUN  dlq  opredeleniq
  razmera (w 256-slownyh blokah) toma, zagruvennogo  s  konk-
  retnogo ustrojstwa. na gibkih diskah s  dwojnoj  plotnostx`
  dlina sektorow rawna 128 simwolam. oby~no RT11 s~itywaet  i
  zapisywaet ih gruppami po 2 sektora. na gibkih diskah oby~-
  noj plotnosti dlina sektorow sostawlqet 64  slowa.  RT11  w
  |tom slu~ae s~itywaet i zapisywaet ih gruppami po 4  sekto-
  ra.  k  sektoram  movno  imetx  indiwidualxnyj  dostup  pri
  ispolxzowanii makrokomandy .SPFUN sledu`}im obrazom:

          .SPFUN AREA,CHAN,FUNC,BUF,WCNT,BLK,CRTN

   gde

  FUNC   - kod wypolnqemoj funkcii. kody sledu`}ie:

              377 - ~tenie fizi~eskogo sektora;
              376 - zapisx fizi~eskogo sektora;
              375 - zapisx fizi~eskogo sektora s
                    udalennym markerom dannyh;
              374 - zarezerwirowano;
              373 - opredelqet razmer ustrojstwa (toma)
                    w 256-slownyh blokah  (tolxko DY);

  BUF    - dlq kodow funkcij 377, 376, 375: adres  129-slownogo  bufera
           (dlq gibkih diskow s  dwojnoj  plotnostx`)  ili  65-slownogo
           bufera (dlq gibkih diskow s normalxnoj  plotnostx`).  perwoe
           slowo bufera (flavok) oby~no ustanawliwaetsq w 0;  esli  ono
           ustanawliwaetsq w 1, proizwoditsq ~tenie na fizi~eskom  sek-
           tore,  soderva}em  udalennyj  marker   dannyh.   fakti~eskaq
           oblastx dannyh ras{irqetsq ot wtorogo slowa do konca bufera;

         - dlq koda funkcii 373: adres odnoslownogo wufera,  w  kotoryj
           wozwra}aetsq razmer toma ukazannogo ustrojstwa  (dlq  gibkih
           diskow normalxnoj plotnosti wozwra}aetsq  494;  dlq  dwojnoj
           plotnosti - 988);

  WCNT   - absol`tnyj nomer dorovki (0-76), kotoryj  budet  s~itan  ili
           zapisan (dlq funkcij 377,  376,  375);  dlq  funkcii  373  -
           rezerwiruetsq i dolven bytx ustanowlen w 1;

  BLK    - absol`tnyj nomer sektora (0-26), kotoryj  budet  s~itan  ili
           zapisan (dlq funkcij 377,  376,  375);  dlq  funkcii  373  -

                            - 145 -




           rezerwiruetsq i dolven bytx ustanowlen w 0.

       sleduet otmetitx, ~to gibkie  magnitnye  diski  otkry-
  wa`tsq s pomo}x` nefajlowoj makrokomandy .LOOKUP i argumen-
  ty BUF, WCNT i BLK pri |tom ime`t otli~nye  ot  standartnyh
  zna~eniq.

       primer:

          .SPFUN #RDLIST,#377,#BUF,#0,#7,#0
                          ; wypolnitx sinhronnoe s~itywanie
                          ; s dorovki 0 sektor 7 w
                          ; 65-slownu` oblastx bufera

       drajwery DX i DY podderviwa`t po dwa kontrollera, kav-
  dyj iz kotoryh obsluviwaet dwa  mehanizma.  naprimer,  esli
  drajwer DX generiruetsq dlq dwuh kontrollerow, to on  obes-
  pe~it ~etyre ustrojstwa: DX0, DX1, DX2, DX3.  ustrojstwa  s
  imenami DX0 i DX1 qwlq`tsq mehanizmami s  nomerami  0  i  1
  standartnogo gibkogo diska  s  wektorom  prerywaniq  264  i
  registrom komand  i  sostoqnij  (CSR)  177170,  DX2  i  DX3
  qwlq`tsq mehanizmami s nomerami 0 i 1 drugogo  kontrollera.
  za  odin  cikl  movet  wypolnqtxsq  tolxko  odna   operaciq
  wwoda/wywoda, hotq  imeetsq  dwa  kontrollera.  drajwer  ne
  movet osu}estwlqtx perekrytiq operacij wwoda/wywoda po wre-
  meni.



       8.4. drajwer ustrojstwa wwoda s perfokart (CR)



       drajwer ustrojstwa wwoda s perfokart movet  peredawatx
  dannye kak otobravenie kolonok (w revime SET CR: IMAGE).  w
  revime koi-7 (SET CR: NOIMAGE) nedopustimye kombinacii per-
  forirowaniq dekodiru`tsq kak simwol  o{ibki  134  (obratnaq
  drobnaq ~erta). w revime IMAGE (otobraveniq) l`baq kombina-
  ciq qwlqetsq dopustimoj;  kavdaq  kolonka  s~itywaetsq  kak
  12-bitnoe slowo, wyrawnennoe  po  prawoj  pozicii  w  slowe
  bufera wwoda. drajwer prodolvaet  s~itywanie  do  teh  por,
  poka ne budet is~erpan s~et~ik slow pereda~i  ili  poka  ne
  wstretitsq  standartnaq   karta   konca   fajla   (probiwka
  12-11-0-1-6-7-8-9 w perwoj kolonke).  ostalxnye  kolonki  w
  |toj karte ne  rassmatriwa`tsq.  posle  s~itywaniq  kolonki
  "konec fajla"  bufer  zapolnqetsq  nulqmi,  i  makrokomanda
  uspe{no zawer{aetsq. popytka wypolnitx  sledu`}u`  makroko-
  mandu wwoda s perfokart priwedet k  o{ibke  "konec  fajla".
  esli s~et~ik slow pri pereda~e is~erpan u kolonki,  kotoraq
  ne  qwlqetsq  granicej  karty,  to  sledu`}aq  makrokomanda
  wypolnqetsq ot |toj pozicii karty  bez  poteri  informacii.
  esli magazin poda~i perfokart  opusto{aetsq  do  zawer{eniq
  makrokomandy na pereda~u, to drajwer ovidaet, poka  magazin
  ne zagruzitsq powtorno i knopka "pusk" na s~itywa`}em  ust-
  rojstwe ne budet snowa navata. zatem pereda~a  prodolvaetsq
  do teh por, poka ona ne budet zawer{ena ili poka magazin ne
  opusteet. drajwer perehodit w revim ovidaniq, esli  magazin
  opusto{aetsq wo wremq  pereda~i,  nezawisimo  ot  sostoqniq
  komandy "SET CR: HANG/NOHANG".

                            - 146 -




       esli drajwer CR ustanawliwaetsq w revim CRLF ili  TRIM
  i s~itywanie proishodit w revime IMAGE, to mogut wozniknutx
  nepredwidennye rezulxtaty.

       drajwer ustrojstwa wwoda s perfokart ispolxzuet  argu-
  ment BLK sistemnoj  makrokomandy  .READ*  dlq  opredeleniq,
  dolvna li s~itywatxsq nowaq karta.

       format makrokomandy sledu`}ij:

          .READ* AREA,CHAN,BUF,WCNT,BLK

       esli BLK=0, to wwoditsq nowaq karta, i argument "s~et-
  ~ik slow" zapolnqetsq simwolami |toj karty.  pri  neobhodi-
  mosti s~itywa`tsq posledu`}ie karty  dlq  zawer{eniq  s~eta
  slow. esli BLK ne rawen nul`, to  argument  "s~et~ik  slow"
  sna~ala zapolnqetsq simwolami,  ostaw{imisq  ot  predydu}ej
  makrokomandy  na  s~itywanie  kart,  i,  esli   neobhodimo,
  ~ita`tsq dopolnitelxnye karty.



       8.5. drajwer perfolento~nogo  ustrojstwa  wwoda/wywoda
            (PC)



       do wyda~i komandy wwoda s perfolento~nogo  ustrojstwa,
  lenta dolvna bytx  ustanowlena  w  s~itywa`}ee  ustrojstwo,
  ina~e poqwitsq o{ibka wwoda.

       drajwer PC osu}estwlqet wwod s perfolenty i  wywod  na
  perfolentu. movet bytx sgenerirowan drajwer, obespe~iwa`}ij
  tolxko s~itywanie s perfolent. esli pri wwode s  perfolenty
  kon~ilasx informaciq dlq s~itywaniq, drajwer  PC  zapolnqet
  ostaw{u`sq ~astx bufera nulqmi. pri posledu`}ej makrokoman-
  de s~itywaniq drajwer PC ustanawliwaet priznak EOF w  bajte
  52 i bit "C" w PS.



       8.6. drajwer sistemnogo terminala (TT)



       sistemnyj terminal ispolxzuetsq kak oby~noe ustrojstwo
  pri obra}enii k drajweru TT. neobhodimo otmetitx sledu`}ee:

       1) simwol (^) pe~ataetsq, kogda drajwer gotow dlq wwo-
  da;

       2) <CTRL/Z> movet bytx ispolxzowan dlq ukazaniq  konca
  wwoda s TT. posle <CTRL/Z> ne  trebuetsq  wozwrat  karetki.
  esli <CTRL/Z> ne pe~ataetsq, drajwer tt  prinimaet  simwoly
  do teh por, poka ne budet is~erpan s~et~ik slow, zadannyj w
  zaprose wwoda;

       3) <CTRL/O> pri wwode s tt wyzywaet ignorirowanie wse-
  go bufera wywoda;

                            - 147 -




       4) pri wwode informacii s tt navatie  odnogo  <CTRL/C>
  priwodit k zawer{eni` operacii wwoda i pereda~e  uprawleniq
  monitoru. esli pri rabote s RT11FB proishodit wywod na  tt,
  to  dlq  pereda~i  uprawleniq  monitoru  trebuetsq   navatx
  <CTRL/C> dwa raza. w RT11SJ dlq zawer{eniq wywoda trebuetsq
  navatx <CTRL/C> tolxko odin raz;

       5) drajwer tt movet ispolxzowatxsq tolxko odnim  zada-
  niem (fonowym ili operatiwnym) i tolxko dlq  odnoj  funkcii
  (wwod ili  wywod).  swqzx  s  terminalom  dlq  zadaniq,  ne
  ispolxzu`}ego tt, ne izmenqetsq;

       6) polxzowatelx movet wywoditx na tt.  wywod  simwolow
  iz kolxcewogo bufera wwoda proizwoditsq pered obra}eniem  k
  KMON. zawer{a`}ij <CTRL/Z> movet bytx takve wyweden na tt;

       7) esli zadanie ispolxzuet TT dlq wwoda, i podprogram-
  ma zawer{eniq wypolnqet makrokomandu  .TTYIN,  to  wwodimye
  simwoly budut peredawatxsq s o{ibkoj i w .TTYIN, i na tt;

       8) esli zadanie peredaet dannye dlq wywoda  na  tt,  a
  zatem wypolnqet makrokomandy .TTYOUT ili .PRINT,  to  wywod
  na tt zaderviwaetsq do teh por, poka  drajwer  ne  zawer{it
  swo` pereda~u. esli operaciq wywoda  na  tt  na~ata,  kogda
  kolxcewoj bufer monitora wywoda s terminala sodervit dannye
  (t.e. do zawer{eniq pe~ati), to drajwer zawer{aet  operaci`
  pereda~i do raspe~atki sodervimogo bufera.



       8.7. drajwer paketa smennyh diskow (DM)



       drajwer paketa smennyh  diskow  (DM)  imeet  nekotorye
  swojstwa, kotorye ne qwlq`tsq standartnymi dlq  bolx{instwa
  drajwerow RT11. |ti swojstwa sledu`}ie:

         1) obespe~enie zameny plohih blokow;

         2) ispolxzowanie makrokomandy .SPFUN  dlq  ~teniq  (
           zapisi) absol`tnyh blokow s diska (na disk);

         3) wozmovnostx inicializacii  tablicy  zameny  plohi
           blokow makrokomandoj .SPFUN;

         4) wozwrat informacii ob o{ibke makrokomandy .SPFUN;
         5) opredelenie razmera toma makrokomandoj  .SPFUN,
           ustanowlennogo na opredelennom ustrojstwe.



       8.7.1. zamena plohogo bloka



       poslednij cilindr paketa diskow  DM  ispolxzuetsq  dlq
  zameny plohogo bloka i informacii  ob  o{ibke.  RT11  movet
  zamenitx na |tih diskah do 32 plohih blokow.  informaciq  o

                            - 148 -




  plohom bloke hranitsq w  bloke  1  na  dorovke  0  nulewogo
  cilindra. bloki zameny hranqtsq na dorovkah 0 i 1 posledne-
  go cilindra. tablica zameny plohih blokow sozdaetsq w bloke
  1 sistemnoj programmoj DUP pri inicializacii  diska.  kogda
  wstre~aetsq plohoj blok i w drajwere ne prisutstwuet tabli-
  ca |togo toma, to drajwer DM ~itaet tablicu zameny iz bloka
  1 diska i hranit ee w drajwere.

       pri obnaruvenii o{ibki plohogo sektora (BSE) ili o{ib-
  ki dopustimosti zagolowka (HVRC) wo wremq ~teniq ili  zapi-
  si, drajwer DM  zamenqet  plohoj  blok  na  sootwetstwu`}ij
  horo{ij iz dorovek zameny. swojstwo  zameny  plohih  blokow
  RT11 trebuet, ~toby bloki s 0-go po 5-j i  dorovki  0  i  1
  poslednego cilindra byli horo{imi. |ta  procedura  wyzywaet
  zadervku wwoda/wywoda, poskolxku  s~itywa`}ie  golowki  dlq
  ~teniq/zapisi dolvny peredwigatxsq iz ih teku}ej pozicii na
  diske w oblastx zameny i wozwra}atxsq nazad.

       esli |ta zadervka wwoda/wywoda su}estwenna po wremeni,
  to disk movet bytx inicializirowan bez  wozmovnosti  zameny
  plohih blokow. w takom  slu~ae  plohie  bloki  zapisywa`tsq
  (pokrywa`tsq) fajlami tipa .BAD. pri |tom ne budet  obespe-
  ~en dostup ni k plohim blokam, ni k dorovkam zameny.

       pri inicializacii polxzowatelx opredelqet,  zapisywatx
  li plohie bloki fajlami .BAD ili sozdawatx  tablicu  zameny
  dlq nih i zamenqtx horo{imi blokami wo wremq  wwoda/wywoda.
  preimu}estwo ispolxzowaniq zameny plohih blokow zakl`~aetsq
  w tom, ~to prowerka diska na plohie bloki ni~ego ne pokazy-
  waet. s drugoj storony, zapisx plohih blokow  fajlami  .BAD
  fragmentiruet disk. tak kak fajly RT11  dolvny  hranitsq  w
  smevnyh blokah, to  |ta  fragmentaciq  ograni~iwaet  razmer
  naibolx{ego fajla, kotoryj movet bytx zapisan na diske.

       tolxko o{ibki BSE i HVRC dopuska`t w drajwere DM meha-
  nizm zameny plohogo bloka. esli pri rabote poqwilsq  plohoj
  blok, kotoryj ne imeet o{ibki BSE ili HVRC, to disk  dolven
  bytx powtorno sformatirowan s tem, ~toby on  soderval  |tot
  nowyj blok w  mehanizme  zameny.  powtornoe  formatirowanie
  dolvno obnaruvitx nowyj plohoj blok, otmetitx, kaku` o{ibku
  on generiruet (BSE ili HVRC), i dobawitx nomer |togo  bloka
  k informacii plohih blokow na diske. zatem disk dolven bytx
  inicializirowan dlq wozmovnosti dobawleniq plohih blokow  k
  tablice zameny.

       fajl monitora ne movet raspolagatxsq w bloke,  kotoryj
  sodervit o{ibku BSE, esli ispolxzuetsq zamena  plohih  blo-
  kow. pri wozniknowenii |toj situacii poqwlqetsq o{ibka  pri
  na~alxnoj zagruzke sistemy.  w  |tom  slu~ae  monitor  nado
  peremestitx w drugoe mesto, ~toby on ne raspolagalsq w blo-
  ke s o{ibkoj BSE.

                            - 149 -




       8.7.2. makrokomanda .SPFUN



       drajwer DM ispolxzuet makrokomandu .SPFUN so sledu`}i-
  mi kodami funkcij:

           kod                     dejstwie
           377      operaciq ~teniq bez wypolneniq zameny
                    plohogo bloka, wozwra}aet  informaci`
                    ob o{ibke
           376      operaciq zapisi bez wypolneniq zameny
                    plohogo bloka, wozwra}aet  informaci`
                    ob o{ibke
           374      powtorno ~itaet tablicu zameny plohih
                    blokow w drajwere (programma izmenila
                    ee)
           373      opredelqet razmer opredelennogo  toma
                    w 256-slownyh blokah

       format makrokomandy .SPFUN  standartnyj,  za  iskl`~e-
  niem:

         - dlq kodow funkcij 377 i 376 razmer bufera dlq ~teniq i zapi-
           si dolven bytx na odno slowo bolx{e, ~em trebuetsq dlq  dan-
           nyh;

         - perwoe slowo bufera sodervit informaci` ob  o{ibke,  wozwra-
           }aemu` makrokomandoj .SPFUN. |ta informaciq wozwra}aetsq dlq
           operacij ~teniq ili zapisi .SPFUN, i peredannye dannye  sle-
           du`t za informaciej ob o{ibke. nive priwedeny kody o{ibok  i
           informaciq o nih:

         kody                   zna~eniq
        100000         operaciq wwoda/wywoda uspe{no zawer{en
        100200         obnaruven  plohoj  blok  (o{ibka   BSE
        100001         o{ibka ECC isprawlena
        100002         o{ibka  byla  ustranena  pri  powtorno
                       popytke
        100004         o{ibka  byla  ustranena  pri  powtorno
                       sme}enii
        100010         o{ibka  byla  ustranena  pri  powtorno
                       kalibracii
        1774XX         o{ibka ne byla ustranena

         - dlq koda funkcii 374 argumenty BUF, WCNT i BLK  dolvny  bytx
           rawny nul`;

         - dlq koda funkcii 373 BUF qwlqetsq odnoslownym buferom,  kuda
           wozwra}aetsq razmer ukazannogo toma  w  256-slownyh  blokah.
           argument WCNT dolven bytx 1,  a  argument  BLK  dolven  bytx
           rawen nul`.

                            - 150 -




       8.8. nulx-drajwer (NL)



       nulx-drajwer      wypolnqet      wse      makrokomandy
  s~itywaniq/zapisi. pri operaciqh wywoda on ignoriruet  dan-
  nye. pri wyzowe NL:, on  nemedlenno  wozwra}aet  uprawlenie
  monitoru, ukazywaq, ~to wywod zawer{en. NL-drajwer ne wozw-
  ra}aet o{ibok i ne wyzywaet prerywanij. pri operaciqh wwoda
  NL: peredaet soob}enie o EOF dlq wseh zaprosow, i dannye ne
  pereda`tsq. po|tomu sodervimoe whodnogo bufera ne izmenqet-
  sq.






















































                                                                                                                                                                                                                                         