 10
                            Coae a.

 Ec B  xoe o ae-o coe 㪨,  o B o po
popapoa pocxe aepa 8253.  Kaa 2 o pocxe po
ca  c  ao  oepa.  Koa  o  aa popapec 
pee 3,  o o ocae pooe  o  ao  aco.  -a
poco  aa  o  ca- ae pa pooo o,  oa
oee p  cxa ccoa o.  K coae, pocxea
8253  e  oe  e-   a o,  oo  e oe e
pooc a, aaeoo ao.
   a ee e o,  a a xoa  eepa樨 a. acoa -
co ao  pocxe  oe    eea,  oo  op
oec⢨ x x co筨o  oe oa ceae oe
e.

                          1. eepa oa.

   oo ocaoo apopapo-  a  pocxe  aepa  8253,
oopa  paoae eaco o poeccopa.  B peeo ec eoe
poeccop  eocpeceo  pae  ao,   oo   popae
pxoc  o  pao-  ,  oop  oe  o pocxea
aepa.  Xo o coco oee pe,  o o  ocae  ceceo
o訩  opo  a  ao    coae  o設ca ceax
ox eo ocoaec a e.

                 C(o)              523.3
                 D(pe)              587.3
                 E()              659.3
                 F(a)              698.5
                 G(co)            784.0
                 A()              880.0
                 B(c)              987.7

aco a oa e oo o,  㤢aa  ae,  a  e
oa e - ee pa 㤢aa aco.   aoopo,  aco a oa
e pa peo ooe x ae (xopo- o  acpoeoe
ao oo e cee apeec epa- a).

   H poe.

   eepa a  c  oo  aaepa  epeca  c epepe 8255
coco o e  몫e c eaeo  acoo  a  opa  B,
oop ca c ao ( 1).  op B ee apec 61H (xo AT e
ee pocxe epeca c epepe 8255 a aoo,  o  co-
e    o  e o e apec opa  o e ).  Ec popaa
epeae aee a c acao ooo acoo,  o acoa
co coa, o  oeo. oo e  epee-
 ao ca co 横.  oe,  o  0 opa  B  pae
opoa  aaa 2 pocxe aepa,  oop  co oepe ca c
ao. oo o  oe  cpoe, ocoec o aaa
aepa.
   B cee  pepe  ee  e  epeee.  Oa,  ooaea
"FREQUENCY",  coec    aece  ce稪a   co 横e e
ec⢨ﬨ e  몫e.  e ee ee aee, e cpee
pocxo  eee  a    e  oe  acoa.  epe-  ea e
"NUMBER_CYCLES"  caaae  pooeoc  oa.  Oa   oop
coo  pa  oe  oope poecc e  몫e.  e
oe o co, e oe  a .

                                     - 2 -
   Oe⨬, o    o  poep aapae pepa o 
apee.  p稭a oo  o,  o pepae aepa  pocxo  c
ao  acoo    pepoc (18.2 paa  ce㭤),  o oo e
ceceo   a  aco.  ee  ,  o  oa  pepa
apee,  ce稪  pee  co BIOS e e paoa.  Ec ae
poa eo aee,  o oo e o⫨ac a eoop  e稭
o  peaoo,  o  ex  op,  oa  e  e  ceao cooecee
eee.

NUMBER_CYCLES  EQU   1000
FREQUENCY      EQU   300
PORT_B         EQU   61H
               CLI                 ;ape pepa
               MOV   DX,NUMBER_CYCLES  ;eoc oa  DX
               IN    AL,PORT_B     ;oae aee  opa B
               AND   AL,11111110B  ;o⪫ae a o aepa
NEXT_CYCLE:    OR    AL,00000010B  ;ae a
               OUT   PORT_B,AL     ;ocae oa  op B
               MOV   CX,FREQUENCY  ;aepa a o-横a  CX
FIRST_HALF:    LOOP  FIRST_HALF    ;eae aep
               AND   AL,11111101B  ;몫ae a
               OUT   PORT_B,AL     ;ocae oa  op B
               MOV   CX,FREQUENCY  ;aepa a o-横a  CX
SECOND_HALF:   LOOP  SECOND_HALF   ;eae aep
               DEC   DX            ;ae e  ce稪a
               JNZ   NEXT_CYCLE    ;ec 0, o ao oa
               STI                 ;papeae pepa

         2. eepa a oopeeo c p㣨 ec⢨ﬨ.

    oco pocxea    aepa   8253   paoae   eaco   o
poeccopa,  o  oe  poco  eeppoa  ,  oop   aec
oopeeo   c   oee   p㣨x   oepa権.  B  o  poco
apopapoa aa 2 o pocxe    eepa樨  opeeeo
aco, a ae epepopapoa pocxe  몫e a.

   H poe.

Mpocxea oa  peapeo papeea epe op B pocxe
epeca c epepe 8255 (apec 61H).  Bce peeoe aee
ce稪a   a,  pae 1.19 oo a pee aco 
epax.   e pooac o ex  op,  oa  e    ap
opoa  aaa 2.  oo B o cpoc  1 opa B  0,  ae
 e pooac eco- eo    oe    pepae  oo
epeap㧪o oepa.   ooo pe㫨poa eoc a
oo cooa ce稪 pee co BIOS, a aao  [2.1.6]. B
ao  pepe eeppec acoa 440 ep.   pepaaec oce
aa o a a aape.

;---papeee aaa 2 caoo opa B pocxe 8255
PORT_B     EQU  61H           ;caoa apeca opa B
           IN   AL,PORT_B     ;ee eo ae
           OR   AL,3          ;caoa x ax o
           OUT  PORT_B,AL     ;ocae a  op B
;---caoa pecpo oa/oa
COMMAND_REG  EQU  43H         ;apec oaoo pecpa
CHANNEL_2    EQU  42H         ;apec aaa 2
             MOV  AL,10110110B    ;eoa o  aaa 2
             OUT  COMMAND_REG,AL  ;ac뫪a  oa pecp

                                     - 3 -
;---ac뫪a ce稪a  a
           MOV  AX,2705       ;ce稪 = 1190000/440
           OUT  CHANNEL_2,AL  ;ocae a訩 a
           MOV  AL,AH         ;cae a訩 a  AL
           OUT  CHANNEL_2,AL  ;ocae cap訩 a
;---e aa a
           MOV  AH,1          ;oep 㭪樨 pepa 21H
           INT  21H           ;ae pepae
;---몫ee a
           IN   AL,PORT_B     ;oae a  opa B
           AND  AL,11111100B  ;cpacae a ax a
           OUT  PORT_B,AL     ;ocae a opao

                      3. eepa aopa oo.

   B o  opaee  oaao a eeppoa eo o,  oa
oep e  p㣨  e  a;    cee  e  oaao  a
o    e aa,  oa oep a po paoo.  Koa
oep  e  p㣨  e  a,  o  oo  o  eo  
poo  ceae  oe  e;  oa  e oep a
po paoo, o e poo oe e.
   Coae ox  cpo ec oo  oex oooc- e,
peocaex eco.  ocpoee e cpo o    ac-  ceepe
pee  oo  pao.  Moe  cooa o  x eoo
eepa樨 a.   oox eoo ao poco eeppoa o o 
ee  aaoo  pee,  ae  ce騩   ..  Kaa oa
cpoa oppec  x  cpo  ax,  oa    oopx  coep
aco-  oceoaex oo,  a pa xpa x eoc (p
co, o pec pae eoc). pooeoc a
opeeec c cooae ce稪a pee co BIOS [2.1.6].

   H poe.

   B pepe   eepa樨 a coec pocxea aepa 8253.
ec poco coc 8 o,  o eoa o䨪a oe  co
pacp oooc o poep. eec p cpo ax. epa
caaae  eoc  ao  o,  a  paoe  poooo
epoa aep (e o epo a- ep, oo e e).
Bopa cpoa coep aco ao  8  o;    ae  o
   oee     cac  pao  oae  ooo 
eco쪨x coo poea  a樨  eo  oae  ooo  
eco쪨x  coo  "opa  a  a"   coa opaa ape⪨.
e  ocec⢫c  epep뢭o  -   e   ocpae   x   a
cooece  oceoaeoc a oo e a設e.  o ex
op, oa Baa popaa ae a- aoe ooee eaae oo
oa  oe  oae  epe-  oo  cpo,  poeo,  a権  
opao a a opapo- a Ba  o    cooec⢨  c  Ba訬
oeaﬨ.  pep, oope e o opa eepo cpo
o coo- ac  a paoocpoe.
   B paecx  peax  ooo  epeeee  oo a ae o
a.  p ea eca B oee o  paec pe- ,  o
oc pax poeo e coa.
   eec cea   o,   oop   acae   oo   cea

                                     - 5 -
opaac    pa  e o epe ea oepeo cpo,
oe apae ea.  Xo o aeo aee ea,
oao p o oc⨣aec oee ooe oopoae oo.  o
ocoeo oeo p paoe   paec-  o  pee.  o  
ooapae  ea ao oca o 27,85,1,  a o epc 
apaeo ea - o 27,85,0.

                      7. eee pa ea.

   pa cpa 8 1/2 a ooe aeaa  cpoe  o  80-
ox    coo,    ec   ce   o   e   oao   p.
poopoaa ea ooe  oec    cpoe  ee  ecoo
coo.  C po copo,  oa ea ooe ec  cpoe
132 coa, ea c oo po - 40 coo, a oa ea c
oo po - 64 coa.  ee , o cooae ea c
pao po  oo cpoe pee  p㤭oc c opapoae.
   o設co apx  pepo  peoca aop peo ea
cea묨  pa.  Bo  epee   caapx   oooc-   e
peocaex paec pepo IBM:

oa ea:
    e  pea  oo  ea  ao   oca   ooa
pa騩 o 15.   몫e oo pea - o 18.  Caapa
cpaa po 8 1/2 a ooe aeaa 132 coa   cpoe
 o pee.

ea c oo po:
    oo,  o pep  aa  eaa  c  oo  po  ao
oca  a  eo  pa騩  o 14.  Pe ea c oo po
eoe e,  o pep aoaec 몫ae  o  pe,  oa
cpeae co opaa ape⪨  epeoa cpo.  oco ao
 ea oo coec    oocpox  aooo,  o  o
coco  oo.  o 몫 o pe  cepee cpo o諨e
o 20.

Beea ea:
   p eeo  ea  a  co eaaec a paa  oo 
o e o樨.  o eae o窨 eee, o coae e ee.
Copoc ea p o eaec oe.   e oo pea
o諨e o 27,69.  몫e - 27,70.

ea a a poxoa:
   B pee  ea  a  a  poxoa  aa caec a 1/216 a
epe op poxoo eaae oo.  p  o  oac  oee
aoee  㪢,  oope   o e 룫 pe.  Copoc ea
eaec oe.  o pe aec pa騬  oo  27,71,  a
몫aec oo 27,72.

ea c oepae:
   ea c   oepae   oe   oc      cocoa.
paec  pep  ee  pe  oepa,    oopo  oep
eaaec o  a  coo,  a  poe.    paecoo
pepa  IBM o pe aec oo 27,45,1,  a 몫aec oo
27,45,0.  pep,  e  ee  pea  oepa  o  cea
oep   p  opo  poxoe  o  o  e  cpoe,  eaa  co
oepa (ASCII 95)  ex ecax,  e oo 㦭o  poe  (ASCII
32)  o  cex ocax ox.  Bopo poxo oc⨣aec e,  o
oce epoo poxoa oaec o opaa ape⪨ e  oa  epeoa
cpo.  Bopo  poxo  e  eae  pe-  p pao oca

                                     - 6 -
cpo p ce paepa cpa.

ea c epx   eca:
   Ha paecx  pepax  ec  c  epx      eca
caec ep⨪ao.   ea epxeo eca o諨e pa騩
o 27,83,0,  a  ea eo - 27,83,1. Moo po epexo o
ox eco  p㣨.   몫e ea eco,  c e, o
pep oaac a ee cpoe o諨e pa騩 o 27,84.

   Heoope pe  e  o  cooac   oa樨 c p㣨.
Ec B xoe  cooa  4  pea  oopeeo,  o  pooc-
pec  co cee ae.  B ao  ec coo peea
oc⨬a oa.

   Koa           1  2  3  4  5  6

   opa           X  X
   ca                     X  X
   ee                       X  X
   a a poxoa       X     X     X
   c eca             X     X     X
   oo p       X  X  X  X  X  X
   c oepae     X  X  X  X  X  X


                     8. oc뫪a ax a pep.

   oc뫪a ax a pep paa  ax cooo po, a 
popaca a e acceepa eec  p  㭪権  oepa-  oo
cce,    oope    ea    aa   ae   ocaoo   poco.
popapoae a  o  poe  pee  oe  pao,  o  ao
peocae   oe  oooce.  Ka  pao,  poep  ea
oo po oca co a pep,  a ae ocoﭭo poepe
pecp caca oa opa,   oopo pcoee pep. Ce騩
co ocaec oo oa,  oa pep  cape,  o  o
oo  (pep oe e eaa co cpa,  a aaca eo  coe
epe,  o ex op oa e e oea ea  cpoa  coo  
ea).
   Kpoe oo,  poep oo po o cooa  pepae
pepa    o  poa ec⢨e oo pepa.  C oo
ceaoo popapoa oo  cea  a,  o  pep  e
ea  pepae  poeccopa,  oa  o  oo   pe ceeo
coa.  poepa opao⪨  pepa  ocae  ce騩  co,
oce  eo  poeccop oe pooa aac co ea.  o
eo coec  ooo  ea  (oop  aa  ae  c-
o).  oco  䨧ece   a   cpa
acaec    ope  0,n,  e  n oe  o 1 o 22 o.  
caapo cpa ao oca oa 27,67,0,11.

             6. paee ooee eaae oo.

   eaae ec  pacpeeec  o  cpae  aco   a   ce
e  a,  a  aco  a  ce  e  eaae oo.
ooa oe  oopoaa  oe eco,  o e e  aa
ee oopa.  Beco oo aaec ee ceee, ooceo cao
eo o樨,  oop oa oe oc⨣a.   pepa e  a稪o,
cooax eee ooee oo. Baa popaa oa ocea
ooee oo,  ec oo oo  ec.  p  o  xopoe
pa⨪o  ec  a稭a ea c oa paeo oa 27,60,
oop cae oo   ca  e  o,  e  ea  epeoa
cpo (o e caoe eae  o opaa ape⪨).
   p ea eca eec ecoo cocoo epe o- o 
㦭oe  ooee.  Oa  oe B     ;epe cac opa B
              OR   AL,00000011B  ;papeae a  aep
              OUT  PORT_B,AL     ;ocae a opao
              MOV  SI,0          ;aae a cpo
              MOV  AL,0B6H       ;aa aaa 2 aepa
              OUT  COMMAND_REG,AL   ;ocae  oa pecp
              MOV  FIRST_NOTE?,0    ;cpacae a epo o
;---e o, oae ee aco, ocae  aa 2
NEXT_NOTE:    LEA  BX,MELODY     ;epe ceee cpo eo
              MOV  SI,WHICH_NOTE ;aae a e o
              MOV  AL,[BX][SI]   ;o ee o cpo
              CMP  AL,0FFH       ;poepe pa oa
              JE   NO_MORE       ;ec a, o a oe
              CBW                ;ae  co opa
   ;oae aco
              MOV  BX,OFFSET FREQUENCY  ;ceee a aco
              DEC  AX            ;a稭ae oce c 
              SHL  AX,1          ;㬭oae a 2, .. coa
              MOV  DI,AX         ;apecec epe DI
              MOV  DX,[BX][DI]   ;oae aco  a
   ;a稭ae coee o
              MOV  AL,DL         ;oo a訩 a aco
              OUT  LATCH2,AL     ;ocae  pecp a
              MOV  AL,DH         ;oo cap訩 a
              OUT  LATCH2,AL     ;ocae eo
;---co 横, opee騩 eoc o
TIME_IT:      MOV  AH,0          ; e ce稪a
              INT  1AH           ;oae aee ce稪a
              MOV  BX,OFFSET BEAT  ;ceee cpo  o
              MOV  CL,[BX][SI]   ;eoc ee o
              MOV  CH,0          ;
              MOV  BX,DX         ;aee coo ae ce稪a
              ADD  BX,CX         ;oae   cax
              MOV  END_NOTE,BX   ;aoae pe ooa
TIME_CHECK:   MOV  AH,0          ;㭪 e ce稪a
              INT  1AH           ;ae ce稪
              CMP  DX,END_NOTE   ;cpaae c 㦭
              JNE  NOT_NOW       ;ec epao, o xo
              MOV  SI,WHICH_NOTE ;ae, epe ce o
              INC  SI            ;e稢ae oep o
              MOV  WHICH_NOTE,SI ;aoae eo
              JMP  NEXT_NOTE     ;a稭ae ce o
;---aepee poep
NO_MORE:      IN   AL,PORT_B     ;epe cac opa B
              AND  AL,0FCH       ;몫ae a
              OUT  61H,AL        ;opaae a
              MOV  SOUND_NOW?,0  ;occaaae epeee
              MOV  FIRST_NOTE?,1 ;
NOT_NOW:      POP  DS            ;occaaae pecp
              POP  SI            ;

                                     - 7 -
              POP  DI            ;
              POP  DX            ;
              POP  CX            ;
              POP  BX            ;
              POP  AX            ;
              IRET               ;opa  pepa
MELODY2       ENDP

                 5. Coae aoo epexoa oo.

   ae epexo oo pooc a ce epep뢭oo e- e
aco.  o oo e oo cea oee pae,  ec
eoo ea eoc  aoo  ceea  oa  p  oe
a  cea e稢a eoc p oe.

   H poe.

   poe ceo   cooa   eo   eepa樨   a,  pae
pocxeo epeca c epepe 8255.  poco ee aee a
1 opa B e 0  1,  co  ocea pee co 横.  p
aae aoo ooo coo 横a,  ace  ac뫪  ae    CX,
cea ee o ae- e. ec o oaec:

;---ape pocxe aepa
PB       EQU  61H        ;apec opa B pocxe 8255
         IN   AL,PB      ;oae  eo a
         OR   AL,1       ;cpacae  0
         OUT  PB,AL      ;opaae a  op
;---caoa aco  eoc a
         MOV  BX,9000    ;aaoe aee ce稪a
         MOV  DX,3000    ;eoc a 3000 横o
REPEAT:                  ;ca opaaec oce 横a
;---caoa a aa
         OR   AL,00000010B   ;caaae  1
         OUT  PB,AL          ;ocae a  op B
         MOV  CX,BX          ;caoa ce稪a  1/2 横a
CYCLE1:  LOOP CYCLE1         ;co 横 a 1000 oopo
;---cpoc a aa
         AND  AL,11111101B   ;cpacae  1
         OUT  PB,AL          ;ocae a  op
         MOV  CX,BX          ;caoa ce稪a
CYCLE2:  LOOP CYCLE2         ;co 横
;---epexo  cee 横
         DEC  BX             ;e稢ae aco, ea
         DEC  BX             ;ce稪
         DEC  DX             ;eae ocac eoc
         JNZ  REPEAT         ;ec DX e 0, o o 横
o poco   eo   po    o,  o  coe  oa  poxo
aeo cpee,  e e.   opo⪨x epao ao e
oe  eae, a oa o e e, ao oa o, oop
p oe oa epecae  DX oe ae a cee 横e.

                    6. Coae ox eo.

   oe e oo oc⨣ac epep뢭  eee  aco
oa.

   H poe.


                                     - 8 -
   cceep ooe  eeppoa ece oa,  oa epa,  
eee  oopoo  a  e,  e  pae  epa,    eee
oopoo  o  몫e.  Taoe  apee  cep  oe po 
㦦a騬    pa騬  a.   Koa   ooee   x   epao
cocae,  cae  50    1,  o  oae  㦦ae.  Ec e
ooee ee   10  -  20  pa,  o  㦦ae  epexo    oee
pae   㪨.   B   o  cae    eeppec  pocxeo
epeca c epe- pe 8255.
Bo pep 㦦a:

NUMBER_CYCLES  EQU  300     ;co epee aa
FREQUENCY1     EQU  50      ;pe, oa a e
FREQUENCY2     EQU  3200    ;pe, oa a 몫e
PORT_B         EQU  61H     ;apec opa B pocxe 8255
            CLI                  ;ape pepa
            MOV  DX,NUMBER_CYCLES;DX cae  oa
            IN   AL,PORT_B       ;oae cac opa
            AND  AL,11111110B    ;o⪫ae a o aepa
NEXT_CYCLE: OR   AL,00000010B    ;ae a
            OUT  PORT_B,AL       ;ocae oa
            MOV  CX,FREQUENCY1   ;aepa  epo ac
FIRST_HALF: LOOP FIRST_HALF      ;
            AND  AL,11111101B    ;몫ae a
            OUT  PORT_B,AL       ;ocae oa
            MOV  CX,FREQUENCY2   ;aepa  opo ac
SECND_HALF: LOOP SECND_HALF      ;
            DEC  DX              ;eae co 横o
            JNZ  NEXT_CYCLE      ;ec 0, o opa oa
            STI                  ;papeae pepa

  coa pax o oo cooa o e o, o
ao ae aee FREQUENCY2 a e稭 ooo 40000.

               7. Oopeea eepa pax o.

   Too pocxea eepaopa a,  eac  PCjr,  oo-  e
oopeeo  eeppoa  pae  㪨.  Oao  acceep ooe
oe  a  cocoa  ee-  pa樨  a,  o  coae   a
oopeeo  eepa樨  x  pax o.  epepe x x
cao po  coo ope oo o. Ka  x o
ee   e  pooc,  oo    peae  oaec  copee
㦦ae,  e a pax ooca. o pe peao oee oo 
coa ox eo.

   H poe.

   Hao poco  oe  a  eoa  eepa樨 a.  Ha筨e 
epe aa 2 pocxe ae- pa.  ae o㫨pe xo  aa,
a  ce  a  1  opa  B pocxe epeca c epepe.  Bopoe
ec⢨e opeee  pooeoc  a.  He  ae  몫
pocxe aepa p aepe.

;---a稭ae eepa a epe aa 2 aepa
      IN   AL,61H          ;oae a  opa B
      OR   AL,3            ;caaae ae a aa
      OUT  61H,AL          ;ocae a opao
      MOV  AL,10110110B    ;eoa  oaoo pecpa 8253
      OUT  43H,AL          ;ocae  pecp
      MOV  AX,600H         ;ce稪  aaa 2

                                     - 9 -
      OUT  42H,AL          ;ocae a訩 a
      MOV  AL,AH           ;oo cap訩 a
      OUT  42H,AL          ;ocae cap訩 a
;---eeppe op aco pocxeo 8255
NUMBER_CYCLES  EQU  9000           ;co epee
FREQUENCY      EQU  150            ;aepa  oo 横a
               CLI                 ;ape pepa
               MOV  DX,NUMBER_CYCLES  ;DX cae  oa
               IN   AL,61H         ;oae cac opa
               AND  AL,11111111B   ;o⪫ae a o aepa
NEXT_CYCLE:    OR   AL,00000010B   ;ae a
               OUT  61H,AL         ;ocae aa  op
               MOV  CX,FREQUENCY   ;aepa a 1/2 横a
FIRST_HALF:    LOOP FIRST_HALF     ;
               AND  AL,11111101B   ;몫ae a
               OUT  61H,AL         ;ocae oa  op
               MOV  CX,FREQUENCY   ;aepa a 1/2 横a
SECOND_HALF:   LOOP SECOND_HALF    ;
               DEC  DX             ;ee ce稪 横o
               JNZ  NEXT_CYCLE     ;ec 0, o opa oa
               STI                 ;papeae pepa
;---몫ee aaa 2 pocxe aepa
               IN   AL,61H         ;oae cac opa
               AND  AL,11111100B   ;cpacae 2 ax a
               OUT  61H,AL         ;ocae a opao

