 13
                              Bo/o.

                 1. oc  oceoaeo op.

   p acxpoo c裡 a設a ocae  pae a opa樨
o  oo  .  Bpeee   epa   e   aa   p   o
ecece,  o  peea  e oe묨 a aa oe a.
Ca  a    oe    cooo     oo   po,   o
cooece oec   ee,   oop, o  oeea
(marking),  oa poe co,   ca (spacing),  oa  poe
.
    oepaec    oeeo  cocoﭨ,  oa  o  e  e
epea  ax.  p  aae epea aa ax ca aae  0,
oea capo  .  ae  ce  oce  o  ax  (oa
ee)    e aopa cox  x poe.  oce  ax
oe  copooac  o  eoc,  coe    oape
o訡o, a ae  oceoaeoc ac 1  oee co-o,
oop  cooece  co   poe.      co-   a稭a
oeeoe  cocoﭨe,  oopoe  e coxpac o ex op,  oa e
aec  epeaa  ceeo   aa   ax;   co   coex
co-o ceceo,  oco o caaa aoe pe,
oopoe oo po epe ce騬 capo o.
   Koeo, epeaa    pea  ca樨 o cooa o 
o e pooo  x eoe o  o o pao- a c  oo
  o  e  copoc oea (epeo  ax  ce㭤,  aaex
ae oa).  p oee o eo oa o訡, oo o-
aooe   oopoae  peocae  paoopa  opa  o
cace a caoo opa,  a  pcoeeoo  e oea. aae
oea  ec peopaoa- e caa,  eeppeoo opo o-
a樨,   acec ca,  oop oe ae   epea  o
eeoo    aa.    o設co   oeo   peoca   ae
ooee o㭨a- oe oooc, ae a aoaec
o  oe, oope e oepac ca opo o㭨a樨.

               2. popapoae pocxe UART 8250.

   oceoaea c   acoo   coa,  o  뫨  papaoa
ceae  pocxe,   oe   pao   o   oppoa   
cxpoa樨 cpo o,  cocax oceoaee ae. Tae
pocxe aa 㭨epca  acxpo  peo-epea稪o
(universal asynchronous receiver transmitter  UART).  IBM PC co-
e UART 8250 p Intel.
   Oepaoa ccea oepae 2 opa o㭨a樨,  oo-  
a設e ec 2  pocxe.  x  aoe  apeca  xpac    ee
0040:0000  COM1  0040:0002  COM2. (ao apec o 2-xao
apec opa,  oop ec a訬  p㯯 apeco opo, ax
oc  UART.) Ha cex a設ax COM1 ee ao apec 3F8H, a COM2 -
2F8H;
   Mpocxea 8250  ee  10 popapex ooax pecpo,  c
oo oopx paec  opopec op  o㭨a樨.  o-
設co   x aac aae opa,  po- ecco,  oop
oe  oe co.  oc  ⨬ 10 pe- cpa  ocec⢫ec
epe  ce apeco opo c oepa 3F8H - 3FEH ( 2F8H - 2FEH).  B
 cax pecp,   oopo oae oc  epe  a  op,
ac  o  oo,  a  caoe    7   pecpe opo ,
oop ec ece pecpo c apeco opa 3FBH.  Bo  
pecp:


                                     - 2 -
3F8H (OUT,  7 = 0  3FBH)   Pecp xpae epea稪a
3F8H (IN,  7 = 0  3FBH)    Pecp ax pea
3F8H (OUT,  7 = 1  3FBH)   ee copoc oea (a訩)
3F9H (IN,  7 = 1  3FBH)    ee copoc oea (cap訩)
3F9H (OUT,  7 = 0  3FBH)   Pecp papee pepa
3FAH (IN)                      Pecp e䨪a樨 pepa
3FBH (OUT)                     Pecp pae 
3FCH (OUT)                     Pecp pae oeo
3FDH (IN)                      Pecp caca 
3FEH (IN)                      Pecp caca oea

    ec pecpo  oo  ec  eoxo    poco  oce-
oaeo  c裡.  Pecp xpae epea稪a coep a ax,
oope    oca,  a  pecp  ax  pea   -   oce
oe  a ax.  Pecp pae  caca  a-
p    pa   e   c裡,   co   copoc   oea,
coepac   x pecpax ee copoc oea.   ocaxc
epex pecpo pecp pae-   caca  oea  coc
oo  c裡 epe oe , a a pecpa, cax c pepaﬨ
coc oo  poepax, paex pepaﬨ.
   pepa coc  p  c裡   ex e⨢oc.  Oa
o㭨aoa poepa epep뢭o poepe pecp ca-  ca  -
,  oa  ooo  coa    aa,  o ce oo- o 
epea ceeo aa ax.  oco poeccop aoo cpee,
e  oe  copoc c oop묨 epeac oc- eoaee ae,
o o eo apaco pacxoe poeccop- oe  pe,  oopoe  oe
cooac    opao⪨ ocax  epeaaex ax.  o
o p稭e pocxea 8250 oe  caoea  pe, a騩
pepae  p  oe  coa,  ooe  o訡  ..  o
pepae oeao  oe  poep  Bae  popa,  oopa,
cae,  e  epea-  a  ce騩  co    o㭨aooo
epa.

               3. aa oceoaeoo opa.

   p aa樨 opa  o㭨a樨  ("op⨨")  caaac
ce  eo  apaep.    apaep    coa,  co  co-o,
cao eoc  copoc oea.  a  coa  o  co  o,
oopoe opae oco e ax. Ec  paoae c p묨
opﬨ o 8 o, o 7 o ocao  caapx ao ASCII
(  oopx  ce  co e o,  e peae ASCII 128),   o
pe a  epea cex ax ocaoo op権 o 4 a.

   Cpe poe.

   㭪 0 pepa 14H BIOS ape op o㭨a- 樨.  B
DX oe aac oep o㭨aooo aaa (COM1 = 0, COM2 = 1).
B AL oe coepac a aaox ax,  aee  o
oopoo ceee:

    1-0   a coa. 10 = 7 o, 11 = 8 o.
          2   co co-o. 0 = 1, 1 = 2.
        4-3   eoc. 00  10 = e, 01 = ee., 11 = e.
        7-5   copoc oea. 000 = 110 o
                               001 = 150 o
                               010 = 300 o
                               011 = 600 o
                               100 = 1200 o
                               101 = 2400 o

                                     - 3 -
                               110 = 4800 o
                               111 = 9600 o

   B ao  pepe  op apec co coo  8 o,  o
co-o  eo eoc. Copoc oea 1200 o.

;---pcaae ae apaepo epee
   MOV  WORDLENGTH,00000011B   ;a coa 8 o
   MOV  STOPBITS,00000000B     ;1 co-
   MOV  PARITY,00011000B       ;ea eoc
   MOV  BAUDRATE,10000000B     ;copoc 1200 o

;---ape COM1
   MOV  AL,0                   ;c⨬ AL
   OR   AL,WORDLENGTH          ;caaae 㦭e 
   OR   AL,STOPBITS            ;
   OR   AL,PARITY              ;
   OR   AL,BAUDRATE            ;
   MOV  AH,0                   ;㭪 aa樨 opa
   MOV  DX,0                   ;롨pae COM1
   INT  14H                    ;ape op

   H poe.

   Heaco o oo, aaec   oo  oo, a 
4  pecpa  pocxe  8250 o  apoa  oepa権
oea. o pecp ee copoc oea, pe- cp opo 
 pecp papee pepa.
   ee copoc  oea  o  co,  a  oopoe  ao  pae
aco  ccex  aco  (1190000  ep),  o  o   eae
copoc  oea.  Hapep,    copoc  oea  1200  o ee
copoc oea oe  pae 96,  oco 1190000/96 peo
pao 1200.  e oe ee,  e ee copoc oea. Copoc
oea 300  ee pe xaoo ca    ee.  Cap訩
a  ocaec   3F9H ( 2F9H),  a a訩  3F8H (2F8H).  B oox
cax  7 pecpa pae   oe    caoe    1
epe  ac뫪o  ae;    po-  ⨢o cae o ⨬  apeca
ae    apecoa    p㣨e  pecp  (c.  [7.1.0]).   Bo
eoope ae, peee  ox copoce oea:

   Copoc oea             3F9H            3F8H

        110                     04H             17H
        300                     01H             80H
        600                     00H             C0H
       1200                     00H             60H
       1800                     00H             40H
       2400                     00H             30H
       3600                     00H             20H
       4800                     00H             18H
       9600                     00H             0CH

   Bcea caaae pecp copoc oea ep묨,  a a o
ecee,  oope  pe,  o  caoe  7  pecpe
opo .  oce oo ao e coepoe pecpa opo
,  cpaca 7- , o ce ocae oc  pecpa 뫨
pa묨. oco pecp opo  ec pecpo oo
   ac,  o  e  cocoa  ep-      7  opao    1  e
oopeeo cao cex ocax o oo  pecpa.

                                     - 4 -
   aee o  pecpa opo ,  apec opa oopoo pae
3FBH ( 2FBH), ceee:

    1-0   a coa. 00 = 5 o, 01 = 6 o
                             10 = 7 o, 11 = 8 o
          2   co co-o. 0 = 1, 1 = 1.5, ec a
                                , ae 2.
          3   eoc. 1 = eeppec  eoc, 0 = e.
          4   T eoc. 0 = eea, 1 = ea
          5   ca eoc. acae  eoc cea
               0  1. 0 = oeea
                  1 = cea 1, ec  3 = 1 &  4 = 0
               1 = cea 0, ec  3 = 1 &  4 = 1
               1 = e eoc, ec  3 = 0
          6   caoa epepa. Bae o cpo e
               aece caa oaeo ca樨.
              0 = apeeo, 1 = epep
          7   Mee apeca opo p㣨x pecpo

Oo  5-7 cpoe    0.  Ocae  oca  ae,  ope-
eee poooo oea.
   ae ec  B  e  coee  pepa,  ce  pao  B   o
poec   ac      pecp  papee  pepa,  o  
epe, o pepa apee. poco oece  o pecp 0.
Pecp e䨪a樨 pepa oo oppoa.
   aa ocax pecpo  caa  c  oea.  co,  o
oe  㦭  oo    c裡  c ae묨 cpoca,  a e 
pae ea騬 cpoca,  a  a  oceoa-  e
pep.
   B ao pepe  oac ax BIOS epec ao apec  COM1,
oce eo pae pecp apc  copoc oea 1200
o, cex ax, eo eoc  ooo co-a.

;---oae ao apec COM1
   MOV  AX,40H          ;ES aae a oac ax BIOS
   MOV  ES,AX           ;
   MOV  DX,ES:[0]       ;oae ao apec COM1
;---ape pecp ee copoc oea a 1200 o
   ADD  DX,3            ;aae a pecp opo 
   MOV  AL,10000000B    ;caaae  7
   OUT  DX,AL           ;ocae a
   DEC  DX              ;aae a cap訩 a ee
   DEC  DX              ;copoc oea
   MOV  AL,0            ;cap訩 a  1200 o
   OUT  DX,AL           ;ocae cap訩 a  1200 o
   DEC  DX              ;aae a a訩 a ee
   MOV  AL,60H          ;a訩 a ee  1200 o
   OUT  DX,AL           ;ocae a訩 a
;---ape pecp opo 
   MOV  AL,0            ;oe AL
   OR   AL,10B          ;a ax 7 o
   OR   AL,000B         ;1 co-
   OR   AL,1000B        ;eeppec  eoc
   OR   AL,10000B       ;ea eoc
   ADD  DX,3            ;aae a pecp opo 
   OUT  DX,AL           ;ocae aaooe aee

;---ape pecp papee pepa
   DEC  DX              ;aae a pecp papee

                                     - 5 -
   DEC  DX              ;pepa
   MOV  AL,0            ;apeae pepa
   OUT  DX,AL           ;ocae a

            4. caoa eeo o㭨aooo opa.

   ec a cocoa,  oop묨 popaa oe opee,  ao 
o㭨aox opo oe cooac. O  cocoo coco
 aa oepa aaa  oepaope popa. Bopo coco coco 
aca  popa    oea epe op COM1,  o ee o-
aooo aaepa, oc  oopo e epe COM1.
   Oac ax   BIOS   coep   eco      epex  2-xax
epeex,  oope coepa aoe apeca  o㭨aox  aao
(MS DOS oepae oo epe a  x). ao apec opa o
a訩  p㯯 apeco opo, epe oope oo o oc 
ao  o㭨aoo  aa.  ao  apec  COM1 xpac 
ee 0040:0000,  a  COM2 -  ee 0040:0002.    ce  o-
aox  opo  ao  poco oe  a ae.  oopa
cea ae pee  epoa- ao aae opo.

   Cpe poe.

   Ec popaa opaaec  o㭨aoo op epe pepae
14H BIOS, o COM op opeeec coep DX, oopoe pao 0  1
( COM1  COM2). Beco oo, o pcaa DX eocpeceoe
aee,  aoe eo  epe- eo, oopo oe  pcoeo
aee 0  1.  popa, coe o㭨aoe 㭪樨 3 
4 pepa 21H cea apecc  COM1.  B o cae ao oe
aoe apeca:

;---oe aox apeco  COM1  COM2
   MOV  AX,40H        ;ES aae a oac ax BIOS
   MOV  ES,AX         ;
   MOV  DX,ES:[0]     ;oeae 1- ao apec  DX
   MOV  AX,ES:[2]     ;oeae 2- ao apec  AX
   MOV  ES:[0],AX     ;oeae apeca
   MOV  ES:[2],DX     ;

            5. Opeeee caca o㭨aooo opa.

   Pecp caca  pocxe UART 8250 opeee pooo  c-
.  o  pecp  ee  apec  opa a 5 oe,  e ao apec
aoo aaa. Oo o ocoﭭo pocapaec  po- ecce o-
aooo oea. p epeae ax pecp cooae, o pe-
騩 co e oca,  oo popae aca o co oepx
eo.  p  pee  ax  pecp  oppe popa o oc㯫e
ceeo coa,  c e o popaa oa poa  eo  pee
e  o  e  㭨oe  ce- 騬 p訬.  aee o oo
pecpa ceee:

    0   1 = a ax oe
       1   1 = oee ae 뫨 epeaca (pe騩
               co e  ope ca)
       2   1 = o訡a eoc (epoo, -a a  )
       3   1 = o訡a ope (epeaa e cxpooaa)
       4   1 = oape epep (oea a cpoa e,
               pa, o pa ca apa訢ae
               oe epea)
       5   1 = pecp xpae epea稪a c ( o pecp

                                     - 6 -
               o oeac epeaaee ae)
       6   1 = pecp ca epea稪a c (o pecp o-
               ae ae  pecpa xpae  peopae
               x  oceoae )
       7   1 = aa (cpoco e cao c a設o)

   Cpe poe.

   㭪 3  pepa 14H BIOS opaae  AH pecp caca 
(AL oae pecp caca  oea  [7.1.5]).  p  xoe  DX  oe
coepa  oep  o㭨aooo  opa,    oopo ocec⢫ec
oc,  e COM1 = 0,  a COM2 =  1.  Ka    pe騩  pep,  o
poepe ae epepa:

   MOV  AH,3          ;oep 㭪樨
   MOV  DX,1          ;롨pae COM2
   INT  14H           ;oae a caca
   TEST AH,10000B     ;oape epep?
   JNZ  BREAK_DETECT  ;ec a, o a poep opao⪨

   H poe.

   oac  ax  BIOS  caec ao apec o㭨aooo
aaa,   e oaec 5, a ae  oeoo apeca opa c-
aec a caca.

   MOV  AX,40H          ;ES aae a oac ax BIOS
   MOV  ES,AX           ;
   MOV  DX,ES:[2]       ;oae ao apec COM2
   ADD  DX,5            ;oae 5  pecpa caca
   IN   AL,DX           ;oae a caca
   TEST AL,10000B       ; 5 caoe?
   JNZ  BREAK_DETECT    ;ec a, o a opao epepa

                6. aa  paee oeo.

   eec 6   ,  o  oop  oe  cac  c  oepo
(coepecoae oe o e oaoe  o  epec
RS232). Bo x aa, copae  㭪樨:

O oepa  oe:

Data Terminal Ready (DTR)        oppe oe, o oep
oooc oepa            e  oo  c裡.

Request To Send (RTS)            oppe oe, o oep
apoc a oc뫪                oae oc뫪 ax.

O oea  oep:

Data Set Ready (DSR)             oppe oep, o oe
oooc oea                e  oo.

Clear To Send (CTS)              oppe oep, o oe
oooc  oc뫪e             oo aa epea ax.

Data Carrier Detect (DCD)        oppe oep, o oe
Oape oce ax        ca c p㣨 oeo.


                                     - 7 -
Ring Indicator (RI)              oppe oep, o ee-
aop oa                 oa , o oopo pcoe-
                                 e oe ee oo.

   Caaa oep caaae ca  DTR,  a  ae  cpe
oe cac c aeo cae.  oce oo,  a oe cao
c o caaae ca DSR.  o ca oppe  oep,
o  oe  oo    c裡    o oe oep oe cao
ca RTS. Koa oe oe cao CTS, o epeaa a稭aec.
   e caape  ,  o  oop  oep  pae  oeo,
oc㯭 epe pecp  opo  oea  pocxe  UART  8250.  o
pecp ee apec opa a 4 oe,  e ao apec coeoo
o㭨aooo aaa. Bo aee eo o:

Pecp opo oea:

    7-5     (cea 0)
          4     1 = xo UART a a xo
          3     oao ooae aae a o #2
          2     oao ooae aae a o #1
          1     1 = "apoc a oc뫪" a⨢e
          0     1 = "oooc oepa" a⨢a

   Oo caoe  0  1 pecpa opo oea,  a ocae
pa 0.   2 pae 0,  a cee cae,  oa  pooe
oea  peaa稫  eo    ceaoo  coo-  a.    3
caoe oo  cae,  oa coc pe-  pa  [7.1.8].
Haoe,   4 peocae oooc ecpoa o㭨aox
popa e caoe peao c裡.  Bxoo  ca  pocxe
UART  oaec  a  xo,  a  o  UART  pae oceoaee
ae. o coco oo c- ooa  ecpoa paoc
pao cao   pocxe.  Oo  eoc㯭o  p  cooa  o-
aox poep pepa 14H BIOS.
   epe ,  o  oop  oe  oca  opa  oep,
pac pecpo caca oea. o pecp pacooe o apec
opa  a  6 oe,  e ao apec coeoo o㭨aooo
aaepa. Bo aee eo o:

Pecp caca oea:

    7      1 = DCD
       6      1 = RI
       5      1 = DSR
       4      1 = CTS
       3      1 = eee  DCD
       2      1 = eee  RI
       1      1 = eee  DSR
       0      1 = eee  CTS

   popaa epep뢭o  poepe        xoe o㭨aox
oepa権.  Oe⨬,  o 4 ax  a  apae  cap訬  epe
a.      caaac   1 oo oa,  oa pocxo
eee  cace cooeceo capeo a  c  ex  op,  oa
pecp  ac  oce  pa.  Bce  4  ax  a  aoaec
cpacac p e pecpa.  popa oo po o  po
a o pecp. po oooc ec cooae 㭪樨
3 pepa 14H BIOS,  oopa opaae pecp caca oea   AL
(p o  AH e coep- ac pecp caca ). p xoe DX
oe coepa oep o㭨aooo aaa (0  1).

                                     - 8 -
   o設co oeo ee aoo oe oooce,  o cpae
c e,  o opae  x cax  c  oeo  pecpax.  ec
oooc  aoaeco  c裡    aoaecoo oea,  oope
opopc pae cpoo.  a cpoa ocaec  oe, a
o epeac oe ae. Moe ee  cpo  ax o
ceao  co,  coe-  o  oo    aa  aaa
pae  cpo.  o  co  oe   peopeee (aco
coec o Esc - ASCII 27)   롨pae  ooaee.  Moe
cocoe  opee  ac-  oo  o  oa  aa cpoa,
oo o ooa  cpo  o  o  paccapae  xo騩  oo
opa樨 a ae. Ka oe ee co aop oa.

   H poe.

   Bo a e caa cxea a e acceepa:

;---caaae ca DTR
   MOV  DX,BASE_ADDRESS    ;a稭ae c aooo apeca
   ADD  DX,4               ;aae a pecp opo oea
   MOV  AL,1               ;caaae  1
   OUT  DX,AL              ;ocae  op
;---ocae pa cpo oe  oa
    .
   (o o pa  pax oeo)
    .
;---oae oa e caoe ca DSR
   INC  DX                 ;aae a pecp caca oea
   INC  DX                 ;
TRY_AGAIN:  IN   AL,DX     ;oae coepoe
   TEST AL,10B             ;poepe opo 
   JZ   TRY_AGAIN          ;e oa o e e pae 1

;---caaae  RTS
   DEC  DX                 ;opaaec  pecp pae
   DEC  DX                 ;
   MOV  AL,3               ;caaae ca RTS
   OUT  DX,AL              ;ocae  op
;---oae caa CTS
   INC  DX                 ;opaaec  pecp caca
   INC  DX                 ;
ONCE_MORE:  IN   AL,DX     ;oae a caca
   TEST AL,1               ;poepe  CTS
   JZ   ONCE_MORE          ;e pooae oa o e caoe
;---eep oo oca ae

                          6. epeaa ax.

   epeaa ax poe e pe,  oco popaa  ee  o
opo  a  cocao  ax    copoc,  c  oopo  o  o
ocac.  Te e eee  poep  epea  o    ocaoo
co묨,   ec   o  opaaa  ae  o  epe  oo,  a  o
ocac.  Mo      ae   poe   c   cxpoae   p
cooa  poooa XON/XOFF.  o pooo coe o ASCII
17(XON)  19(XOFF),  oo o capoa pae ca樨,
o  epea稪  xoe  poo epea peeo pepaoo ooa
ax.  o p  ca,  popaa oa epep뢭o aa-
poa paee co p epeae ( oo㯫eco pee,  
oopo oo paoa oe, ca oopeeo   oe copo
o  eeoo aa).  Kpoe oo,  o oap㦨,  o aea

                                     - 9 -
ca ocae cpo e,    aece  caa  epepa,  oe
epe-  p뢭o  aapoac  cac a epepa (oep 4) pecpa
caca .
   Cpe poe.

   㭪 1  pepa 14H BIOS ocae co,  coepa騩c  AL 
o㭨ao aa.  p xoe DX coep oep opa (0    1).
p  opae  AH  coep  a  caca,   oopo  7 = 1,  ec
oepa ecea. B o cae e aee cee :

 4   oape epep (ca "co" o pae ca樨)
    5   pecp ca epea稪a c
    6   pecp xpae epea稪a c

   MS DOS  ee  㭪    epea  o  o㭨aoo  aa
coa,  oeaeoo  DL.  o 㭪 oep 4 pepa 21H, o oa
e ee ax peec epe 㭪e  BIOS;  oa  e  opaae
caco opa樨  e ooe aaa ao  o㭨aox
opo ao cooa (cea coec COM1).
   o ec  cpo a coe 㭪 40H pepa 21H.
o  oa  㭪  oa    cex   ao      cpoc   p
cooa  eoa  oca  ecpopa  ao.  COM1  ee  pe-
opeee oep #3.  oece oep aa    BX,  a  co  epe-
aaex ao  CX. c DS:DX aa a ep ox ax 
ae 㭪.

   MOV  AH,40H         ;oep 㭪樨
   MOV  BX,3           ;peopeee oep aa  COM1
   MOV  CX,50          ;o 50 ao
   LEA  DX,DATA_BUFFER ;DS:DX aa a ep ax
   INT  21H            ;ocae ae
   JC   COM_ERROR      ;xo a opao o訡

   H poe.

   Koa a  ax oeaec  pecp xpae epea稪a,  o o
aoaec oc  oceoae aa epe  pecp  ca
epea稪a,  oop cepae ae.  He eoxooc  ce
a cpoa,  a o eaec  cae a- paeoo aaepa.  5
pecpa   caca     oaae  cooe    pecp  xpae
epea稪a  pea ax.  Pe- cp ocoﭭo poepec o  ex
op,  oa    5  e cae pa 1.  oce oo  pecp xpae
epea稪a  ocaec  oepeo  a    oo  eca,  oa  o
epc.  B  poecce  epea    5 pae 0  oo oa o o
cae pa 1,  o  pecp xpae epea稪a oe    oca
ce騩 co. o poecc oopec o ex op, oa o 㦭o.
   B cee  pepe  a  ocoe  o  o  o   poepe.
Koeo,  oa  oe    ceaa  eoao  coo  ( acoc,
popapoae c裡 pee ocoo  aex  poep  oape
o訡o    occaoe  p  cox).  B pepe peoaaec,  o
o㭨ao op  oe  e  apoa.

;---e oa ce e ooo  oc뫪 coa
KEEP_TRYING:  MOV  DX,BASE_ADDRESS   ;ao apec
   ADD  DX,5              ;aae a pecp caca 
   IN   AL,DX             ;oae a caca
   TEST AL,00011110B      ;poepe a o訡
   JNZ  ERROR_ROUTINE     ;ec ec, o a poep opao⪨
   TEST AL,00000001B      ;poepe oe  ae

                                     - 10 -
   JNZ  RECEIVE           ;ec a, o a poep pea
   TEST AL,00100000B      ;poepe oooc  epeae
   JZ   KEEP_TRYING       ;ec e, o opaaec aa
;---epeae co pae c aap
   MOV  AH,1              ;㭪 poep aa a
   INT  16H               ;pepae aap BIOS
   JZ   KEEP_TRYING       ;opa, ec e o aa
   MOV  AH,0              ;㭪 oe oa c aap
   INT  16H               ;eep 㦭 co  AL
   SUB  DX,5              ;apec pecpa xpae epea稪a
   OUT  DX,AL             ;ocae co
   JMP  SHORT KEEP_TRYING ;opaaec  aa 横a

                         7. oee ax.

   Ko㭨aoa popaa ooa pa ae a  oo  -
apoa  o㭨ao  op    caoea  c c aeo
cae. pe ax oa ooc e oee o epea ax,
oco  popae  oe  opeo- ac oca ca XOFF (ASCII
19), o ocao oo ax, ec o oca co cpo 
oa e ceae x opaaa.  Ko XON (ASCII 17) cooae aeo
ca樨, o oo poo epea.
   B acoc   o   cooc   coeoo   poooa   oea,
paee ae o peoa poco  coo opao⪨. Te 
x,  oope  c  opaeﬨ  ax ae oap㦨ac p
cxpoo oee.  p oe oaex coo a pa  ae
ﭨe coo epeoa cpo (ASCII 10),  oco eoope 모
(a ec) aoaec ca epeo cpo oce  opaa
ape⪨;    o  cae  cae  epeo  cpo   paex
ax, o ea cx cpo p oe.

   Cpe poe.

   㭪 2 pepa 14H BIOS oae  co    oceoaeoo
opa,  oeae  eo    AL  p  oe    ae  opaaec  
popa.  p xoe ao  oec  oep  opa  (0-1)    DX.  p
opae  AX pae ,  ec e o o訡.  Ec AH e pae 0,  o
oe  opae a caca,   oopo e aee  oo  5
o. o cee :

  1   o訡a epeoe (o co oc㯨  pae,  e
          ae cap)
     2   o訡a eoc (epoo, -a poe  )
     3   o訡a oope (capo  co- eep)
     4   oape epep (oea a cpoa o 0)
     5   o訡a aaa (e oe ca DSR)

   MS DOS  ae  peocae  o㭨ao  㭪    pea
ooo coa, o 㭪 3 pepa 21H. 㭪 oae co 
COM1  oeae eo  AL.  Oe⨬,  o  p  o  e  㭪樨  -
aa樨   opa,  oop  ao  ea  epe  poep  BIOS  
eocpeceo,  a oaao  [7.1.2].  o oa op  a-
pec co aeﬨ 2400 o, e opo eoc, o co- 
8 o a co. a 㭪 e ee ax ococ o cpae
c 㭪e BIOS  e opaae opa樨 o cace.

   H poe.

   p oe   ax   e  cooa  o㭨aooo  pe-

                                     - 11 -
pa popaa oa ocoﭭo  poep  pecp  caca  ,
apec  opa  oopoo a 5 oe aooo apeca coeoo o-
aooo aaepa.   0 oo pecpa e pae ,  o  ex
op  oa  e e oe co  pe- cp ax pea.  Koa
 0 caoc pa 1,  o ao eeeo ca eo  pecpa,
c e o a eo e ao- c ce騩 pae co.  oce
oo a co ca,   0 o caoc  pa  0    ocaec
ao, oa e pe o co.
   Xo ec o o  e  oopoc,  o  o㭨aoe  poep
oo  coa 横ec ep  copa ocax co- o.  B
o ae a,  o ec ocae ae oaa a  pa  co
copoc 1200 o, o poepa ca paa BIOS e e ce- a
 pooe epeoee.  pocoe  peee  x  poe  coco  
cooa o㭨aooo pepa.
   Ce騩 pep aco 㡫pe coepoe peeo  paea,
ooceoc   epeae coo.  Ka   o cae o a稭aec c
ecoeoo 横a.

KEEP_TRYING:   MOV  DX,BASE_ADDRESS   ;ao apec
   ADD  DX,5           ;aae a pecp caca 
   IN   AL,DX          ;oae a caca
   TEST AL,00011110B   ;poepe a o訡
   JNZ  ERROR_ROUTINE  ;ec a, o a opao o訡

   TEST AL,00000001B   ;poepe oe  ae
   JNZ  RECEIVE        ;a poep pea ax
   TEST AL,00100000B   ;poepe oooc  epeae
   JZ   KEEP_TRYING    ;ec e, o  aa 横a
    .
   (ec pacooea poepa epea - c. [7.1.6])
    .
;---oae ae  o x a pa
RECEIVE:   MOV  DX,BASE_ADDRESS        ;ao apec
   IN   AL,DX          ;ae oe co
   CMP  AL,19          ;poepa a XOFF
   JE   XOFF_ROUTINE   ;
    .
   ( ..)
    .
   MOV  DL,AL          ;oo co  oa a pa
   MOV  AH,2           ;㭪 oa coa
   INT  21H            ;o eo
   JMP  SHORT KEEP_TRYING   ;opaaec a aao 横a

  8. oc뫪a/oee ax c oo o㭨aooo pepa.

   Xopoa o㭨aoa popaa ee co oo pao, o
oc  ce eo o/o.  ocae ae o aa-
poac,  epeaaee ae o  copac,  a  oe  o
ax  o  acac  a  c    cac c eo.  Ko-
aooe pepae ooe popae  e  pa  a  o/o
oe   pee,  e  o  oo  pee.  Hapep,  oce  cao
pepa,  paee epeaec poepe epe- a a oo 
o  cae,  oa  pecp  xpae  epea稪a c  opaaec
popae,  a oo oca a ax,  oo e pooa co
pao  o  ex  op,  oa pecp xpae epea稪a e e coa
oo.
   IBM PC   oo  a  aapax  pepa    o㭨aox
aao,  oep 3 (COM1)  4 (COM2).  Mpocxea UART 8250 ocae  4

                                     - 12 -
acca  pepa   aoo aaa,  co ce- e oe
ooe ca:

   00     eee  pecpe caca oea
   01     pecp xpae epea稪a c
   10     oe ae
   11     o訡a pea,  oeo coe epepa

   o  coepac  ax 2-1 pecpa e䨪a樨 pepa- ,
apec opa oopoo a  2  oe,  e  ao  apec  coeoo
o㭨aooo  aaepa.    0 oo pecpa caaaec p
ooe pepa,  a ocae  e c- oc   cea
pa 0.
   o pa oo  oee pepa,  ao  apopapo-  a
pecp  papee  pepa,  apec  oopoo  a 1 oe aooo
apeca. aee eo o aoe:

 0     1 = pepae p oe ax
    1     1 = pepae oa pecp xpae epea稪a c
    2     1 = pepae p o訡e pea ax
    3     1 = pepae p ee pecpa caca oea
  7-4     e coc, cea 0

  Koa oo  x co⨩  pocxo,  o  樨pec  aapaoe
pepae,  oaee    pocxee  opao⪨  pepa  8259 o
aa 3    COM1    o  aa  4    COM2.  poepa  opao⪨
pepa   epeae   paee  o  o,  a  oop  aae
cooec騩  eop  pepa.  oco  o  aapaoe   pe-
pae,   o  oo  oe    acpoao.  oe,  o  poepa
opao⪨ pepa oa aepac  caap  oo  xoa  
aapaoo  pepa  MOV  AL,20H/OUT 20H,AL.  Ha pc.  7-3 oaao
o㭨aooe pepae.
   oe co  ⨯o pepa oe  papeeo oopeeo.  Ho
ec papee oee e o ⨯,  o  poepa  opao⪨  pepa
oa  caa  opee ao  ⨯o pepa pooe,  poep
pecp e䨪a樨 pepa.  Oopeeo o pocxo oee
e oo pepae,  oo  0 pe- cpa e䨪a樨 cooae o
o,  o  oc㯨o  ee  oo  pe-  pae.  Koa  a    oee
pepa   oc㯨o     o    o  e  oe  pee,  o  o
opaaac    op浪e,  aao      epeeo   ae.
oaoe  pepa o  opa- oa o aepe poep
opao⪨ pepa.  co peecx pepa "oec" c
oo ec⢨, peex  pao coe cee a:

Ko             T               ec⢨  "cpoca"

 11       o訡a  epep     ee pecpa caca 
 10       oe ae        ee pecpa pea ax
 01       epea稪 oo       o coa  pecp xpae
                                 epea稪a
 00    eee caca oea  ee pecpa caca oea

   H poe.

   Bo  oa  opa popa,  opaaae  o㭨aoe
pepa:

;---caoa eopa o㭨aooo pepa
   PUSH DS                  ;coxpae DS

                                     - 13 -
   MOV  DX,OFFSET IO_INT    ;DS:DX aa a poep
   MOV  AX,SEG IO_INT       ;
   MOV  DS,AX               ;
   MOV  AL,0BH              ;oep eopa  COM1
   MOV  AH,25H              ;㭪 ee eopa
   INT  21H                 ;ee eop pepa
;---aa pecpa papee pepa (COM1)
   MOV  AX,40H              ;DS aae a ae BIOS
   MOV  DS,AX               ;
   MOV  DX,DS:[0]           ;oae ao apec COM1
   INC  DX                  ;aae a pecp papee
   MOV  AL,3                ;pepa  papeae pepa
   OUT  DX,AL               ;pea  epea
   POP  DS                  ;occaaae pecp

;---poepa opao⪨ pepa - caaa opeee eo ⨯
IO_INT      PROC FAR
NEXT_INT:   MOV  DX,BASEADDRESS     ;ao apec
   INC  DX                  ;aae a pecp e䨪a樨
   INC  DX                  ;pepa
   IN   AL,DX               ;ae eo aee
   TEST AL,10B              ;o pepae epea稪a?
   JNZ  TRANSMIT            ;ec a, o a epea

RECEIVE:                    ;ae a pe
   .
   .
   JMP SHORT ANOTHER        ;poepe e  poo pepa

TRANSMIT:                   ;ec o  epea
   .
   .

;---epe xoo, poepe e  poo pepa
ANOTHER:   MOV  DX,BASEADDRESS       ;ao apec
   INC  DX                  ;aae a pecp e䨪a樨
   INC  DX                  ;pepa
   IN   AL,DX               ;ae eo aee
   TEST AL,1                ;poepe  1
   JNZ  NEXT_INT            ;ec o caoe, o a aao
   MOV  AL,20H              ;ae o aepe aapaoo
   OUT  20H,AL              ;pepa
   IRET
IO_INT      ENDP

