Ecëè Bû xoòèòe ïoëó÷èòü êaêèe-ëèáo cëoæíûe çâóêè, òo Bû äoëæíû ïpÿìo
ïpoãpaììèpoâaòü ìèêpocxeìó òaéìepa 8253. Kaíaë 2 ýòoé ìèêpocxeìû ïpÿìo
câÿçaí c äèíaìèêoì êoìïüþòepa. Koãäa ýòoò êaíaë ïpoãpaììèpóeòcÿ â
peæèìe 3, òo oí ïocûëaeò ïpÿìoóãoëüíûe âoëíû äaííoé ÷acòoòû. Èç-ça
ïpocòoòû äèíaìèêa oí cãëa- æèâaeò êpaÿ ïpÿìoóãoëüíoé âoëíû, ïoëó÷aÿ
áoëee ïpèÿòíóþ äëÿ cëóxa cèíócoèäaëüíóþ âoëíó. K coæaëeíèþ, ìèêpocxeìa
8253 íe ìoæeò ìe- íÿòü aìïëèòóäó âoëíû, ïoýòoìó ìû íe ìoæeì ìeíÿòü
ãpoìêocòü çâóêa, èçäaâaeìoão äèíaìèêoì.
Äèíaìèê èìeeò íe oäèí, a äâa âxoäa äëÿ ãeíepaöèè çâóêa. ×acòoòa èì-
ïóëücoâ êaæäoé ìèêpocxeìû ìoæeò áûòü èçìeíeía, ïoýòoìó êoìáèíèpóÿ
âoçäeécòâèÿ ýòèx äâóx ècòo÷íèêoâ ìû ìoæeì ïoëó÷aòü cïeöèaëüíûe çâóêoâûe
ýôôeêòû.
1. Ãeíepaöèÿ òoía.
Äëÿ ýòoão äocòaòo÷ío çaïpoãpaììèpo- âaòü ìèêpocxeìó òaéìepa 8253,
êoòopaÿ paáoòaeò íeçaâècèìo oò ïpoöeccopa. B ïpèâeäeííoì çäecü ìeòoäe
ïpoöeccop íeïocpeäcòâeíío óïpaâëÿeò äèíaìèêoì, ïoýòoìó ïpoãpaììe
ïpèxoäèòcÿ âûïoëíÿòü paáo- òó, êoòopóþ ìoæeò âûïoëíÿòü ìèêpocxeìa
òaéìepa. Xoòÿ ýòoò cïocoá áoëee òpóäeí, ío oí äoïócêaeò cóùecòâeíío
áoëüøèé êoíòpoëü íaä äèíaìèêoì è coçäaíèe áoëüøèícòâa cïeöèaëüíûx
çâóêoâûx ýôôeêòoâ ocíoâûâaeòcÿ í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
×acòoòû ía oêòaâó âûøe ìoæío ïoëó÷èòü, óäâaèâaÿ ýòè çía÷eíèÿ, ía äâe
oêòaâû âûøe - eùe paç óäâaèâaÿ ÷acòoòû. È íaoáopoò, ÷acòoòû ía oêòaâó
íèæe paâíû ïpèáëèçèòeëüío ïoëoâèíe ýòèx çía÷eíèé (xopo- øo íacòpoeííoe
ïèaíèío òo÷ío íe cëeäóeò apèôìeòè÷ecêèì èíòepâa- ëaì).
Hèçêèé ópoâeíü.
Ãeíepaöèÿ çâóêa c ïoìoùüþ aäaïòepa èíòepôeéca c ïepèôepèeé 8255
cocòoèò âo âêëþ÷eíèè è âûêëþ÷eíèè c æeëaeìoé ÷acòoòoé áèòa ïopòa B,
êoòopûé câÿçaí c äèíaìèêoì (áèò 1). Ïopò B èìeeò aäpec 61H (xoòÿ AT íe
èìeeò ìèêpocxeìû èíòepôeéca c ïepèôepèeé 8255 êaê òaêoâoé, oí ècïoëü-
çóeò äëÿ ýòoé öeëè òoò æe aäpec ïopòa è òoò æe áèò). Ecëè ïpoãpaììa
ïepeêëþ÷aeò çía÷eíèe áèòa c ìaêcèìaëüío âoçìoæíoé ÷acòoòoé, òo ÷acòoòa
cëèøêoì âûcoêaÿ, ÷òoáû áûòü ïoëeçíoé. Ïoýòoìó ìeæäó äâóìÿ ïepeêëþ÷eíèÿ-
ìè íaäo âcòaâëÿòü ïócòoé öèêë. Ïoìíèòe, ÷òo áèò 0 ïopòa B óïpaâëÿeò
âopoòaìè êaíaëa 2 ìèêpocxeìû òaéìepa, êoòopûé â câoþ o÷epeäü câÿçaí c
äèíaìèêoì. Ïoýòoìó ýòoò áèò äoëæeí áûòü cápoøeí, oòcoeäèíÿÿcü oò êaíaëa
òaéìepa.
B cëeäóþùeì ïpèìepe ââeäeíû äâe ïepeìeííûe. Oäía, oáoçía÷eííaÿ
"FREQUENCY", ècïoëüçóeòcÿ â êa÷ecòâe c÷eò÷èêa â ïócòoì öèêëe ìeæäó
äeécòâèÿìè âêëþ÷eíèÿ è âûêëþ÷eíèÿ. ×eì ìeíüøe ee çía÷eíèe, òeì áûcòpee
ïpoècxoäèò èçìeíeíèe áèòa è òeì áoëüøe ÷acòoòa. Ïepe- ìeííaÿ æe
"NUMBER_CYCLES" ócòaíaâëèâaeò ïpoäoëæèòeëüíocòü òoía. Oía ãoâopèò
cêoëüêo paç äoëæeí áûòü ïoâòopeí ïpoöecc âêëþ÷eíèÿ è âûêëþ÷eíèÿ. ×eì
áoëüøe ýòo ÷ècëo, òeì äoëüøe çâó÷èò äaííûé çâóê.
- 2 -
Oòìeòèì, ÷òo äëÿ ýòoé ïpoöeäópû aïïapaòíûe ïpepûâaíèÿ äoëæíû áûòü
çaïpeùeíû. Ïpè÷èía ýòoão â òoì, ÷òo ïpepûâaíèe òaéìepa ïpoècxoäèò c
òaêoé ÷acòoòoé è peãóëÿpíocòüþ (18.2 paça â ceêóíäó), ÷òo oío áóäeò
cóùecòâeíío âëèÿòü ía ÷acòoòó. Èìeéòe ââèäó, ÷òo ïoêa ïpepûâaíèÿ
çaïpeùeíû, c÷eò÷èê âpeìeíè cóòoê BIOS íe áóäeò paáoòaòü. Ecëè çaòeì
ïpo÷èòaòü eão çía÷eíèe, òo oío áóäeò oòëè÷aòücÿ ía íeêoòopóþ âeëè÷èíó
oò peaëüíoão, äo òex ïop, ïoêa íe áóäeò cäeëaío cooòâeòcòâóþùee
èçìeíeíèe.
NUMBER_CYCLES EQU 1000
FREQUENCY EQU 300
PORT_B EQU 61H
CLI ;çaïpeò ïpepûâaíèé
MOV DX,NUMBER_CYCLES ;äëèòeëüíocòü òoía â DX
IN AL,PORT_B ;ïoëó÷aeì çía÷eíèe èç ïopòa B
AND AL,11111110B ;oòêëþ÷aeì äèíaìèê oò òaéìepa
NEXT_CYCLE: OR AL,00000010B ;âêëþ÷aeì äèíaìèê
OUT PORT_B,AL ;ïocûëaeì êoìaíäó â ïopò B
MOV CX,FREQUENCY ;çaäepæêa ía ïoë-öèêëa â CX
FIRST_HALF: LOOP FIRST_HALF ;äeëaeì çaäepæêó
AND AL,11111101B ;âûêëþ÷aeì äèíaìèê
OUT PORT_B,AL ;ïocûëaeì êoìaíäó â ïopò B
MOV CX,FREQUENCY ;çaäepæêa ía ïoë-öèêëa â CX
SECOND_HALF: LOOP SECOND_HALF ;äeëaeì çaäepæêó
DEC DX ;âû÷èòaeì eäèíèöó èç c÷eò÷èêa
JNZ NEXT_CYCLE ;ecëè 0, òo íaäo êoí÷aòü
STI ;paçpeøaeì ïpepûâaíèÿ
2. Ãeíepaöèÿ çâóêa oäíoâpeìeíío c äpóãèìè äeécòâèÿìè.
Ïocêoëüêó ìèêpocxeìa òaéìepa 8253 paáoòaeò íeçaâècèìo oò
ïpoöeccopa, òo o÷eíü ïpocòo ãeíepèpoâaòü çâóê, êoòopûé èçäaeòcÿ
oäíoâpeìeíío c âûïoëíeíèeì äpóãèx oïepaöèé. Bû äoëæíû ïpocòo
çaïpoãpaììèpoâaòü êaíaë 2 ýòoé ìèêpocxeìû äëÿ ãeíepaöèè oïpeäeëeííoé
÷acòoòû, a çaòeì ïepeïpoãpaììèpoâaòü ìèêpocxeìó äëÿ âûêëþ÷eíèÿ çâóêa.
Hèçêèé ópoâeíü.
Mèêpocxeìa äoëæía áûòü ïpeäâapèòeëüío paçpeøeía ÷epeç ïopò B ìèêpocxeìû
èíòepôeéca c ïepèôepèeé 8255 (aäpec 61H). Bû÷ècëèòe òpeáóeìoe çía÷eíèe
c÷eò÷èêa äëÿ çaäâèæêè, paçäeëèâ 1.19 ìèëëèoíoâ ía òpeáóeìóþ ÷acòoòó â
ãepöax. Çâóê áóäeò ïpoäoëæaòücÿ äo òex ïop, ïoêa íe áóäóò çaêpûòû
âopoòa êaíaëa 2. Ïoýòoìó Bû äoëæíû cápocèòü áèò 1 ïopòa B â 0, èía÷e
çâóê áóäeò ïpoäoëæaòücÿ áecêo- íe÷ío è ìoæeò áûòü ïpeêpaùeí òoëüêo
ïepeçaãpóçêoé êoìïüþòepa. Äëÿ òo÷íoão peãóëèpoâaíèÿ äëèòeëüíocòè çâóêa
ìoæío ècïoëüçoâaòü c÷eò÷èê âpeìeíè cóòoê BIOS, êaê óêaçaío â [2.1.6]. B
äaííoì ïpèìepe ãeíepèpóeòcÿ ÷acòoòa 440 ãepö. Çâóê ïpeêpaùaeòcÿ ïocëe
íaæaòèÿ ëþáoé êëaâèøè ía êëaâèaòópe.
;---papeøeíèe êaíaëa 2 ócòaíoâêoé ïopòa B ìèêpocxeìû 8255
PORT_B EQU 61H ;ócòaíoâêa aäpeca ïopòa B
IN AL,PORT_B ;÷òeíèe eão çía÷eíèÿ
OR AL,3 ;ócòaíoâêa äâóx ìëaäøèx áèòoâ
OUT PORT_B,AL ;ïocûëaeì áaéò â ïopò B
;---ócòaíoâêa peãècòpoâ ââoäa/âûâoäa
COMMAND_REG EQU 43H ;aäpec êoìaíäíoão peãècòpa
CHANNEL_2 EQU 42H ;aäpec êaíaëa 2
MOV AL,10110110B ;öeïo÷êa áèòoâ äëÿ êaíaëa 2
OUT COMMAND_REG,AL ;çacûëêa â êoìaíäíûé peãècòp
- 3 -
;---çacûëêa c÷eò÷èêa â çaäâèæêó
MOV AX,2705 ;c÷eò÷èê = 1190000/440
OUT CHANNEL_2,AL ;ïocûëaeì ìëaäøèé áaéò
MOV AL,AH ;cäâèãaeì ìëaäøèé áaéò â AL
OUT CHANNEL_2,AL ;ïocûëaeì còapøèé áaéò
;---æäeì íaæaòèÿ êëaâèøè
MOV AH,1 ;íoìep ôóíêöèè ïpepûâaíèÿ 21H
INT 21H ;âûçûâaeì ïpepûâaíèe
;---âûêëþ÷eíèe çâóêa
IN AL,PORT_B ;ïoëó÷aeì áaéò èç ïopòa B
AND AL,11111100B ;cápacûâaeì äâa ìëaäøèx áèòa
OUT PORT_B,AL ;ïocûëaeì áaéò oápaòío
3. Ãeíepaöèÿ íaáopa òoíoâ.
B ýòoì ïoäpaçäeëe ïoêaçaío êaê ãeíepèpoâaòü öeïo÷êó çâóêoâ, êoãäa
êoìïüþòep íè÷eì äpóãèì íe çaíÿò; â cëeäóþùeì áóäeò ïoêaçaío êaê
âûïoëíèòü òó æe çaäa÷ó, êoãäa êoìïüþòep çaíÿò äpóãoé paáoòoé. Koãäa
êoìïüþòep íè÷eì äpóãèì íe çaíÿò, òo ìoæío âûâoäèòü ìeëoäèþ èëè
ïpoèçâoäèòü cïeöèaëüíûe çâóêoâûe ýôôeêòû; êoãäa æe êoìïüþòep çaíÿò
äpóãoé paáoòoé, òo íeëüçÿ ïpoèçâoäèòü çâóêoâûe ýôôeêòû.
Coçäaíèe çâóêoâûx còpoê ÿâëÿeòcÿ oäíoé èç ìoùíeéøèx âoçìoæíoc- òeé,
ïpeäocòaâëÿeìûx Áeécèêoì. Ïocòpoeíèe æe còpoê çâóêoâ â ac- ceìáëepe
òpeáóeò áoëüøoé paáoòû. Moæeò áûòü ècïoëüçoâaí ëþáoé èç äâóx ìeòoäoâ
ãeíepaöèè çâóêa. Äëÿ oáoèx ìeòoäoâ íaäo ïpocòo ãeíepèpoâaòü oäèí òoí â
òe÷eíèè çaäaííoão âpeìeíè, çaòeì cëeäóþùèé è ò.ä. Kaæäaÿ çâóêoâaÿ
còpoêa ôopìèpóeòcÿ èç äâóx còpoê äaííûx, oäía èç êoòopûx coäepæèò
÷acòo- òû ïocëeäoâaòeëüíûx òoíoâ, a äpóãaÿ xpaíèò èx äëèòeëüíocòè (ïpè
ócëoâèè, ÷òo òpeáóþòcÿ paçíûe äëèòeëüíocòè). Ïpoäoëæèòeëüíocòü çâó÷aíèÿ
oïpeäeëÿeòcÿ c ècïoëüçoâaíèeì c÷eò÷èêa âpeìeíè cóòoê BIOS [2.1.6].
Hèçêèé ópoâeíü.
B ïpèìepe äëÿ ãeíepaöèè çâóêa ècïoëüçóeòcÿ ìèêpocxeìa òaéìepa 8253.
Çäecü ïpocòo ècïoëíÿþòcÿ 8 íoò, ío íeáoëüøaÿ ìoäèôèêaöèÿ ìoæeò cèëüío
pacøèpèòü âoçìoæíocòè ýòoé ïpoöeäópû. Èìeeòcÿ òpè còpoêè äaííûx. Ïepâaÿ
ócòaíaâëèâaeò äëèòeëüíocòü êaæäoé íoòû, êaê êpaòíoe ïpoèçâoëüíoão
ïepèoäa çaäepæêè (èçìeíÿÿ ýòoò ïepèoä ça- äepæêè, ìoæío èçìeíÿòü òeìï).
Bòopaÿ còpoêa coäepæèò ÷acòoòû êaæäoé èç 8 íoò; ýòè çía÷eíèÿ äoëæíû
áûòü ïoìeùeíû â cäâèãaòücÿ âïpaâo ïoäa÷eé oäíoão èëè
íecêoëüêèx cèìâoëâo ïpoáeëa èëè òaáóëÿöèè è âëeâo ïoäa÷eé oäíoão èëè
íecêoëüêèx cèìâoëoâ "âoçâpaò ía øaã" èëè cèìâoëa âoçâpaòa êapeòêè.
Äâèæeíèÿ ocóùecòâëÿþòcÿ íeïpepûâío - íe âocïpèíèìaéòe èx êaê
cooòâeòcòâóþùèe ïocëeäoâaòeëüíocòè ía oáû÷íoé ïèøóùeé ìaøèíêe. Äo òex
ïop, ïoêa Baøa ïpoãpaììa çíaeò ía- ÷aëüíoe ïoëoæeíèe ïe÷aòaþùeé ãoëoâêè
oía ìoæeò êoìáèíaöèeé ïepe- âoäoâ còpoêè, ïpoáeëoâ, òaáóëÿöèé è
âoçâpaòoâ ía øaã ôopìaòèpo- âaòü Baø âûâoä â cooòâeòcòâèè c Baøèìè
ïoæeëaíèÿìè. Ïpèíòepû, êoòopûe óìeþò âûïoëíÿòü oápaòíûé ïeepâoä còpoêè
ìoãóò ècïoëüço- âaòücÿ è êaê ãpaôoïocòpoèòeëè.
B ãpaôè÷ecêèx peæèìax âoçìoæío ïepeìeùeíèe ãoëoâêè ía ìaëûe äoëè
äþéìa. Ïpè ïe÷aòè òeêcòa Bû ìoæeòe âoéòè â ãpaôè÷ecêèé pe- æèì, ÷òoáû
äoáèòücÿ paçíûx ïpoìeæóòêoâ ìeæäó cëoâaìè.
Èìeeòcÿ cïeöèaëüíûé êoä, êoòopûé çacòaâëÿeò ãoëoâêó âceãäa
- 5 -
âoçâpaùaòücÿ â êpaéíþþ ëeâóþ ïoçèöèþ ïepeä ïe÷aòüþ o÷epeäíoé còpoêè,
oòìeíÿÿ äâóíaïpaâëeííóþ ïe÷aòü. Xoòÿ ýòo çía÷èòeëüío çaìeäëÿeò ïe÷aòü,
oäíaêo ïpè ýòoì äocòèãaeòcÿ áoëee òo÷íoe ïoçèöèoíèpoâaíèe ãoëoâêè. Ýòo
ocoáeíío ïoëeçío ïpè paáoòe â ãpaôè÷ec- êoì peæèìe. ×òoáû âêëþ÷èòü
oäíoíaïpaâëeííóþ ïe÷aòü íaäo ïocëaòü êoä 27,85,1, a ÷òoáû âepíóòücÿ ê
äâóíaïpaâëeííoé ïe÷aòè - êoä 27,85,0.
7. Èçìeíeíèe øpèôòa ïe÷aòè.
Øèpèía còpaíèöû 8 1/2 äþéìa ïoçâoëÿeò íaïe÷aòaòü â còpoêe äo 80-òè
oáû÷íûx cèìâoëoâ, ecëè âce oíè èìeþò oäèíaêoâóþ øèpèíó.
Ïpoïopöèoíaëüíaÿ ïe÷aòü ïoçâoëÿeò ïoìecòèòü â còpoêe eùe íecêoëüêo
cèìâoëoâ. C äpóãoé còopoíû, ïëoòíaÿ ïe÷aòü ïoçâoëÿeò âûâecòè â còpoêe
132 cèìâoëa, ïe÷aòü c äâoéíoé øèpèíoé - 40 cèìâoëoâ, a ïëoòíaÿ ïe÷aòü c
äâoéíoé øèpèíoé - 64 cèìâoëa. Èìeéòe ââèäó, ÷òo ècïoëüçoâaíèe ïe÷aòè c
paçíoé øèpèíoé â oäíoé còpoêe ïpèâeäeò ê òpóäíocòÿì c ôopìaòèpoâaíèeì.
Áoëüøèícòâo ìaòpè÷íûx ïpèíòepoâ ïpeäocòaâëÿþò íaáop peæèìoâ ïe÷aòè
cïeöèaëüíûìè øpèôòaìè. Boò ïepe÷eíü còaíäapòíûx âoçìoæíoc- òeé
ïpeäocòaâëÿeìûx ãpaôè÷ecêèì ïpèíòepoì IBM:
Ïëoòíaÿ ïe÷aòü:
Äëÿ âêëþ÷eíèÿ peæèìa ïëoòíoé ïe÷aòè íaäo ïocëaòü oäíoáaéòíûé
óïpaâëÿþùèé êoä 15. Äëÿ âûêëþ÷eíèÿ ýòoão peæèìa - êoä 18. Còaíäapòíaÿ
còpaíèöa øèpèíoé 8 1/2 äþéìa ïoçâoëÿeò íaïe÷aòaòü 132 cèìâoëa â còpoêe
â ýòoì peæèìe.
Ïe÷aòü c äâoéíoé øèpèíoé:
Äëÿ òoão, ÷òoáû ïpèíòep ía÷aë ïe÷aòaòü c äâoéíoé øèpèíoé íaäo
ïocëaòü ía íeão óïpaâëÿþùèé êoä 14. Peæèì ïe÷aòè c äâoéíoé øèpèíoé
íeoáû÷eí òeì, ÷òo ïpèíòep aâòoìaòè÷ecêè âûêëþ÷aeò ýòoò peæèì, êoãäa
âcòpe÷aeò cèìâoë âoçâpaòa êapeòêè èëè ïepeâoäa còpoêè. Ïocêoëüêó òaêoé
âèä ïe÷aòè oáû÷ío ècïoëüçóeòcÿ äëÿ oäíocòpo÷íûx çaãoëoâêoâ, òo ýòo
câoécòâo óäoáío. ×òoáû âûêëþ÷èòü ýòoò peæèì â cepeäèíe còpoêè ïoøëèòe
êoä 20.
Bûäeëeííaÿ ïe÷aòü:
Ïpè âûäeëeííoé ïe÷aòè êaæäûé cèìâoë ïe÷aòaeòcÿ äâa paça â oäíoé è
òoé æe ïoçèöèè. Ýòo äeëaeò òo÷êè òeìíee, ÷òo coçäaeò ýôôeêò âûäeëeíèÿ.
Cêopocòü ïe÷aòè ïpè ýòoì óìeíüøaeòcÿ âäâoe. Äëÿ âêëþ÷eíèÿ ýòoão peæèìa
ïoøëèòe êoä 27,69. Äëÿ âûêëþ÷eíèÿ - 27,70.
Ïe÷aòü ça äâa ïpoxoäa:
B peæèìe ïe÷aòè ça äâa ïpoxoäa áóìaãa cäâèãaeòcÿ ía 1/216 äþéìa
ïepeä âòopûì ïpoxoäoì ïe÷aòaþùeé ãoëoâêè. Ïpè ýòoì ïoëó÷aþòcÿ áoëee
çaïoëíeííûe áóêâû, êoòopûe ê òoìó æe âûãëÿäÿò ÿp÷e. Cêopocòü ïe÷aòè
óìeíüøaeòcÿ âäâoe. Ýòoò peæèì âêëþ÷aeòcÿ óïpaâëÿþùèì êoäoì 27,71, a
âûêëþ÷aeòcÿ êoäoì 27,72.
Ïe÷aòü c ïoä÷epêèâaíèeì:
Ïe÷aòü c ïoä÷epêèâaíèeì ìoæeò âûïoëíÿòücÿ äâóìÿ cïocoáaìè.
Ãpaôè÷ecêèé ïpèíòep èìeeò peæèì ïoä÷epêèâaíèÿ, â êoòopoì ïoä÷epê
ïe÷aòaeòcÿ ïoä êaæäûì cèìâoëoì, âêëþ÷aÿ ïpoáeëû. Äëÿ ãpaôè÷ecêoão
ïpèíòepa IBM ýòoò peæèì âêëþ÷aeòcÿ êoäoì 27,45,1, a âûêëþ÷aeòcÿ êoäoì
27,45,0. Ïpèíòepû, íe èìeþùèe peæèìa ïoä÷epêèâaíèÿ ìoãóò cäeëaòü
ïoä÷epêè ïpè âòopoì ïpoxoäe ïo òoé æe còpoêe, ïe÷aòaÿ cèìâoëû
ïoä÷epêèâaíèÿ (ASCII 95) â òex ìecòax, ãäe oío íóæío è ïpoáeëû (ASCII
32) âo âcex ocòaëüíûx ïoçöèöèÿx. Bòopoé ïpoxoä äocòèãaeòcÿ òeì, ÷òo
ïocëe ïepâoão ïpoxoäa ïoäaeòcÿ êoä âoçâpaòa êapeòêè áeç êoäa ïepeâoäa
còpoêè. Bòopoé ïpoxoä íe ìeøaeò ïpèíòe- pó ïpaâèëüío ïoäc÷èòûâaòü
- 6 -
còpoêè ïpè âû÷ècëeíèè paçìepa còpaíèöû.
Ïe÷aòü c âepxíèìè è íèæíèìè èíäeêcaìè:
Ha ãpaôè÷ecêèx ïpèíòepax òeêcò c âepxíèìè è íèæíèìè èíäeêcaìè
cæèìaeòcÿ âepòèêaëüío. Äëÿ ïe÷aòè âepxíeão èíäeêca ïoøëèòe óïpaâëÿþùèé
êoä 27,83,0, a äëÿ ïe÷aòè íèæíeão - 27,83,1. Moæío ïpÿìo ïepexoäèòü oò
oäíèx èíäeêcoâ ê äpóãèì. Äëÿ âûêëþ÷eíèÿ ïe÷aòè èíäeêcoâ, c òeì, ÷òoáû
ïpèíòep oêaçaëcÿ ía òeêóùeé còpoêe ïoøëèòe óïpaâëÿþùèé êoä 27,84.
Heêoòopûe peæèìû íe ìoãóò ècïoëüçoâaòücÿ â êoìáèíaöèè c äpóãèìè.
Ecëè Bû xoòèòe ècïoëüçoâaòü 4 peæèìa oäíoâpeìeíío, òo ïpoêoícóëü-
òèpóéòecü co cëeäóþùeé òaáëèöeé. B êaæäoì èç øecòè còoëáöoâ ïpèâeäeía
äoïócòèìaÿ êoìáèíaöèÿ.
Koìáèíaöèÿ 1 2 3 4 5 6
íopìaëüíûé X X
cæaòûé X X
âûäeëeííûé X X
ça äâa ïpoxoäa X X X
c èíäeêcaìè X X X
äâoéíoé øèpèíû X X X X X X
c ïoä÷epêèâaíèeì X X X X X X
8. Ïocûëêa äaííûx ía ïpèíòep.
Ïocûëêa äaííûx ía ïpèíòep òpèâèaëüía â ÿçûêax âûcoêoão ópoâíÿ, a äëÿ
ïpoãpaììècòa ía ÿçûêe acceìáëepa èìeeòcÿ pÿä ôóíêöèé oïepa- öèoííoé
cècòeìû, êoòopûe äeëaþò çaäa÷ó òaêæe äocòaòo÷ío ïpocòoé.
Ïpoãpaììèpoâaíèe ía íèçêoì ópoâíe òpeáóeò áoëüøe paáoòû, ío çaòo
ïpeäocòaâëÿeò áoëüøe âoçìoæíocòeé. Kaê ïpaâèëo, ïpoöeäópû ïe÷aòè
íèçêoão ópoâíÿ ïocûëaþò cèìâoë ía ïpèíòep, a çaòeì ïocòoÿíío ïpoâepÿeò
peãècòp còaòóca ââoäa ïopòa, ê êoòopoìó ïpècoeäèíeí ïpèíòep. Cëeäóþùèé
cèìâoë ïocûëaeòcÿ òoëüêo òoãäa, êoãäa ïpèíòep cèãíaëèçèpóeò, ÷òo oí
ãoòoâ (ïpèíòep ìoæeò íe ïe÷aòaòü cèìâoë cpaçó, a çaïacaòü eão â câoeì
áóôepe, äo òex ïop ïoêa íe áóäeò ïoëó÷eía öeëaÿ còpoêa cèìâoëoâ äëÿ
ïe÷aòè).
Kpoìe òoão, ïpoöeäópû íèçêoão ópoâíÿ ìoãóò ècïoëüçoâaòü ïpepûâaíèe
ïpèíòepa èëè ìoãóò èìèòèpoâaòü äeécòâèe ýòoão ïpepûâaíèÿ. C ïoìoùüþ
cïeöèaëüíoão ïpoãpaììèpoâaíèÿ ìoæío cäeëaòü òaê, ÷òo ïpèíòep áóäeò
äeëaòü ïpepûâaíèe ïpoöeíccopa, êoãäa oí ãoòoâ ê ïpèeìó cëeäóþùeão
cèìâoëa. Ïpoöeäópa oápaáoòêè ïpepûâaíèÿ ïocûëaeò cëeäóþùèé cèìâoë,
ïocëe ÷eão ïpoöeccop ìoæeò ïpoäoëæaòü çaíèìaòücÿ câoèìè äeëaìè. Ýòoò
ìeòoä ècïoëüçóeòcÿ äëÿ ôoíoâoé ïe÷aòè (êoòopóþ íaçûâaþò òaêæe cïó-
ëèíãoì). Ïocêoëüêó ôèçè÷ecêèe ï äëèía còpaíèöû
çaïècûâaeòcÿ â ôopìe 0,n, ãäe n ìoæeò áûòü oò 1 äo 22 äþéìoâ. Äëÿ
còaíäapòíoé còpaíèöû íaäo ïocëaòü êoìaíäó 27,67,0,11.
6. Óïpaâëeíèe ïoëoæeíèeì ïe÷aòaþùeé ãoëoâêè.
Ïe÷aòaeìûé òeêcò pacïpeäeëÿeòcÿ ïo còpaíèöe ÷acòè÷ío ça c÷eò
äâèæeíèÿ áóìaãè, a ÷acòè÷ío ça c÷eò äâèæeíèÿ ïe÷aòaþùeé ãoëoâêè.
Ãoëoâêa ìoæeò áûòü ïoçèöèoíèpoâaía â ëþáoe ìecòo, ío íe ïóòeì çaäaíèÿ
ee êoopäèíaò. Bìecòo ýòoão óêaçûâaeòcÿ ee cìeùeíèe, oòíocèòeëüío caìoé
ëeâoé ïoçèöèè, êoòopóþ oía ìoæeò äocòèãaòü. Ó ïpèíòepa íeò äaò÷èêoâ,
cooáùaþùèx òeêóùee ïoëoæeíèe ãoëoâêè. Baøa ïpoãpaììa äoëæía oòcëeæèâaòü
ïoëoæeíèe ãoëoâêè, ecëè oío äoëæío áûòü èçâecòíûì. Ïpè ýòoì xopoøeé
ïpaêòèêoêé ÿâëÿeòcÿ ía÷èíaòü ïe÷aòü c ïoäa÷è óïpaâëÿþùeão êoäa 27,60,
êoòopûé cäâèãaeò ãoëoâêó â caìóþ ëeâóþ ïoçèöèþ, íe äeëaÿ ïepeâoäa
còpoêè (òo æe caìoe äeëaeò è êoä âoçâpaòa êapeòêè).
Ïpè ïe÷aòè òeêcòa èìeeòcÿ íecêoëüêo cïocoáoâ ïepeäâèíóòü ão- ëoâêó â
íóæíoe ïoëoæeíèe. Oía ìoæeò B ;áepeì còaòóc ïopòa B
OR AL,00000011B ;paçpeøaeì äèíaìèê è òaéìep
OUT PORT_B,AL ;ïocûëaeì áaéò oápaòío
MOV SI,0 ;óêaçaòeëü ía còpoêè
MOV AL,0B6H ;èíèöèaëèçaöèÿ êaíaëa 2 òaéìepa
OUT COMMAND_REG,AL ;ïocûëaeì â êoìaíäíûé peãècòp
MOV FIRST_NOTE?,0 ;cápacûâaeì ôëaã ïepâoé íoòû
;---èùeì íoòó, ïoëó÷aeì ee ÷acòoòó, ïocûëaeì â êaíaë 2
NEXT_NOTE: LEA BX,MELODY ;áepeì cìeùeíèe còpoêè ìeëoäèè
MOV SI,WHICH_NOTE ;óêaçaòeëü ía òeêóùóþ íoòó
MOV AL,[BX][SI] ;êoä òeêóùeé íoòû còpoêè
CMP AL,0FFH ;ïpoâepÿeì ïpèçíaê êoíöa
JE NO_MORE ;ecëè äa, òo ía êoíeö
CBW ;èía÷e â cëoâíûé ôopìaò
;ïoëó÷aeì ÷acòoòó
MOV BX,OFFSET FREQUENCY ;cìeùeíèe òaáëèöû ÷acòoò
DEC AX ;ía÷èíaeì oòc÷eò c íóëÿ
SHL AX,1 ;óìíoæaeì ía 2, ò.ê. cëoâíaÿ
MOV DI,AX ;aäpecóeìcÿ ÷epeç DI
MOV DX,[BX][DI] ;ïoëó÷aeì ÷acòoòó èç òaáëèöû
;ía÷èíaeì ècïoëíeíèe íoòû
MOV AL,DL ;ãoòoâèì ìëaäøèé áaéò ÷acòoòû
OUT LATCH2,AL ;ïocûëaeì â peãècòp çaäâèæêè
MOV AL,DH ;ãoòoâèì còapøèé áaéò
OUT LATCH2,AL ;ïocûëaeì eão
;---ïócòoé öèêë, oïpeäeëÿþùèé äëèòeëüíocòü íoò
TIME_IT: MOV AH,0 ;ôíóêöèÿ ÷òeíèÿ c÷eò÷èêa
INT 1AH ;ïoëó÷aeì çía÷eíèe c÷eò÷èêa
MOV BX,OFFSET BEAT ;cìeùeíèe còpoêè äëèí íoò
MOV CL,[BX][SI] ;äëèòeëüíocòü òeêóùeé íoòû
MOV CH,0 ;
MOV BX,DX ;ìëaäøee cëoâo çía÷eíèÿ c÷eò÷èêa
ADD BX,CX ;äoáaâëÿeì äëèíó â èìïóëücax
MOV END_NOTE,BX ;çaïoìèíaeì âpeìÿ oêoí÷aíèÿ
TIME_CHECK: MOV AH,0 ;ôóíêöèÿ ÷òeíèÿ c÷eò÷èêa
INT 1AH ;÷èòaeì c÷eò÷èê
CMP DX,END_NOTE ;cpaâíèâaeì c íóæíûì
JNE NOT_NOW ;ecëè íepaâío, òo âûxoäèì
MOV SI,WHICH_NOTE ;èía÷e, áepeì cëeäóþùóþ íoòó
INC SI ;óâeëè÷èâaeì íoìep íoòû
MOV WHICH_NOTE,SI ;çaïoìèíaeì eão
JMP NEXT_NOTE ;ía÷èíaeì cëeäóþùóþ íoòó
;---çaâepøeíèe ïpoöeäópû
NO_MORE: IN AL,PORT_B ;áepeì còaòóc ïopòa B
AND AL,0FCH ;âûêëþ÷aeì äèíaìèê
OUT 61H,AL ;âoçâpaùaeì áaéò
MOV SOUND_NOW?,0 ;âoccòaíaâëèâaeì ïepeìeííûe
MOV FIRST_NOTE?,1 ;
NOT_NOW: POP DS ;âoccòaíaâëèâaeì peãècòpû
POP SI ;
- 7 -
POP DI ;
POP DX ;
POP CX ;
POP BX ;
POP AX ;
IRET ;âoçâpaò èç ïpepûâaíèÿ
MELODY2 ENDP
5. Coçäaíèe ïëaâíoão ïepexoäa òoíoâ.
Ïëaâíûe ïepexoäû òoíoâ ïpoèçâoäÿòcÿ ça c÷eò íeïpepûâíoão èçìe- íeíèÿ
÷acòoòû. Ýòoò çâóêoâoé ýôôeêò ìoæío cäeëaòü áoëee âûpaçèòeëüíûì, ecëè
íeìíoão óìeíüøaòü äëèòeëüíocòü êaæäoão ceãìeíòa òoía ïpè ïoâûøeíèè
çâóêa èëè cëeãêa óâeëè÷èâaòü äëèòeëüíocòü ïpè ïoíèæeíèè.
Hèçêèé ópoâeíü.
Ïpoùe âceão ècïoëüçoâaòü ìeòoä ãeíepaöèè çâóêa, óïpaâëÿeìûé
ìèêpocxeìoé èíòepôeéca c ïepèôepèeé 8255. Ïpocòo ìeíÿéòe çía÷eíèe áèòa
1 ïopòa B ìeæäó 0 è 1, ècïoëüçóÿ äëÿ oòc÷eòa âpeìeíè ïócòoé öèêë. Ïpè
ía÷aëe êaæäoão íoâoão ïócòoão öèêëa, çac÷eò çacûëêè çía÷eíèÿ â CX,
cëeãêa èçìeíÿéòe ýòo çía÷e- íèe. Çäecü òoí ïoâûøaeòcÿ:
;---çaïpeò ìèêpocxeìû òaéìepa
PB EQU 61H ;aäpec ïopòa B ìèêpocxeìû 8255
IN AL,PB ;ïoëó÷aeì èç íeão áaéò
OR AL,1 ;cápacûâaeì áèò 0
OUT PB,AL ;âoçâpaùaeì áaéò â ïopò
;---ócòaíoâêa ÷acòoòû è äëèòeëüíocòè çâóêa
MOV BX,9000 ;ía÷aëüíoe çía÷eíèe c÷eò÷èêa
MOV DX,3000 ;äëèòeëüíocòü çâóêa 3000 öèêëoâ
REPEAT: ;cþäa âoçâpaùaeìcÿ ïocëe öèêëa
;---ócòaíoâêa áèòa äèíaìèêa
OR AL,00000010B ;ócòaíaâëèâaeì áèò 1
OUT PB,AL ;ïocûëaeì áaéò â ïopò B
MOV CX,BX ;ócòaíoâêa c÷eò÷èêa äëÿ 1/2 öèêëa
CYCLE1: LOOP CYCLE1 ;ïócòoé öèêë ía 1000 ïoâòopoâ
;---cápoc áèòa äèíaìèêa
AND AL,11111101B ;cápacûâaeì áèò 1
OUT PB,AL ;ïocûëaeì áaéò â ïopò
MOV CX,BX ;ócòaíoâêa c÷eò÷èêa
CYCLE2: LOOP CYCLE2 ;ïócòoé öèêë
;---ïepexoä ê cëeäóþùeìó öèêëó
DEC BX ;óâeëè÷èâaeì ÷acòoòó, óìeíüøaÿ
DEC BX ;c÷eò÷èê
DEC DX ;óìeíüøaeì ocòaâøóþcÿ äëèòeëüíocòü
JNZ REPEAT ;ecëè DX íe 0, òo íoâûé öèêë
Ýòoò ïpocòoé ìeòoä ïpèâoäèò ê òoìó, ÷òo âûcoêèe òoía ïpoxoäÿò
çía÷èòeëüío áûcòpee, ÷eì íèçêèe. Äëÿ êopoòêèx èíòepâaëoâ òaêoé ýôôeêò
ìoæeò áûòü æeëaòeëüíûì, a êoãäa oí íe íóæeí, íaäo äoáaâèòü êoä, êoòopûé
ïpè ïoâûøeíèè òoía ïepecûëaeò â DX áoëüøèe çía÷eíèÿ ía cëeäóþùeì öèêëe.
6. Coçäaíèe çâóêoâûx ýôôeêòoâ.
Çâóêoâûe ýôôeêòû oáû÷ío äocòèãaþòcÿ íeïpepûâíûì èçìeíeíèeì ÷acòoòû
òoía.
Hèçêèé ópoâeíü.
- 8 -
Àcceìáëep ïoçâoëÿeò ãeíepèpoâaòü íe÷ècòûe òoía, êoãäa èíòepâaë, â
òe÷eíèe êoòopoão äèíaìèê âêëþ÷eí, íe paâeí èíòepâaëó, â òe÷eíèe
êoòopoão oí âûêëþ÷eí. Taêoe íapóøeíèe cèììeòpèè ìoæeò ïpèâoäèòü ê
æóææaùèì è ápÿêaþùèì çâóêaì. Koãäa oòíoøeíèe ýòèx èíòepâaëoâ
cocòaâëÿeò, cêaæeì 50 ê 1, òo ïoëó÷aeì æóææaíèe. Ecëè óâeëè÷èòü
oòíoøeíèe eùe â 10 - 20 paç, òo æóææaíèe ïepexoäèò â oòäeëüíûe
ápÿêaþùèe çâóêè. B ëþáoì cëó÷ae çâóê ãeíepèpóeòcÿ ìèêpocxeìoé
èíòepôeéca c ïepèôe- pèeé 8255.
Boò ïpèìep æóææaíèÿ:
NUMBER_CYCLES EQU 300 ;÷ècëo ïepeêëþ÷eíèé äèíaìèêa
FREQUENCY1 EQU 50 ;âpeìÿ, êoãäa äèíaìèê âêëþ÷eí
FREQUENCY2 EQU 3200 ;âpeìÿ, êoãäa äèíaìèê âûêëþ÷eí
PORT_B EQU 61H ;aäpec ïopòa B ìèêpocxeìû 8255
CLI ;çaïpeò ïpepûâaíèé
MOV DX,NUMBER_CYCLES;DX c÷èòaeò äëèíó òoía
IN AL,PORT_B ;ïoëó÷aeì còaòóc ïopòa
AND AL,11111110B ;oòêëþ÷aeì äèíaìèê oò òaéìepa
NEXT_CYCLE: OR AL,00000010B ;âêëþ÷aeì äèíaìèê
OUT PORT_B,AL ;ïocûëaeì êoìaíäó
MOV CX,FREQUENCY1 ;çaäepæêa äëÿ ïepâoé ÷acòè
FIRST_HALF: LOOP FIRST_HALF ;
AND AL,11111101B ;âûêëþ÷aeì äèíaìèê
OUT PORT_B,AL ;ïocûëaeì êoìaíäó
MOV CX,FREQUENCY2 ;çaäepæêa äëÿ âòopoé ÷acòè
SECND_HALF: LOOP SECND_HALF ;
DEC DX ;óìeíüøaeì ÷ècëo öèêëoâ
JNZ NEXT_CYCLE ;ecëè 0, òo ïopa êoí÷aòü
STI ;paçpeøaeì ïpepûâaíèÿ
Äëÿ coçäaíèÿ ápÿêaþùèx çâóêoâ ìoæío ècïoëüçoâaòü ýòoò æe êoä, ío
íaäo çaìeíèòü çía÷eíèe FREQUENCY2 ía âeëè÷èíó oêoëo 40000.
7. Oäíoâpeìeííaÿ ãeíepaöèÿ paçíûx çâóêoâ.
Toëüêo ìèêpocxeìa ãeíepaòopa çâóêa, èìeþùaÿcÿ â PCjr, ïoçâo- ëÿeò
oäíoâpeìeíío ãeíepèpoâaòü paçíûe çâóêè. Oäíaêo acceìáëep ïoçâoëÿeò
oáúeäèíèòü äâa cïocoáa ãeíe- paöèè çâóêa, ÷òo coçäaeò èìèòaöèþ
oäíoâpeìeííoé ãeíepaöèè äâóx paçíûx çâóêoâ. Èíòepôepeíöèÿ ýòèx äâóx
cèãíaëoâ ïpèâoäèò ê cëoæíoé ôopìe çâóêoâoé âoëíû. Kaæäûé èç äâóx çâóêoâ
èìeeò ìeíüøóþ ãpoìêocòü, ïoýòoìó â peçóëüòaòe ïoëó÷aeòcÿ cêopee
æóææaíèe, ÷eì äâa paçíûx ãoëoca. Ýòoò ïpèeì peaëüío ïoëeçeí òoëüêo äëÿ
coçäaíèÿ çâóêoâûx ýôôeêòoâ.
Hèçêèé ópoâeíü.
Haäo ïpocòo oáúeäèíèòü äâa ìeòoäa ãeíepaöèè çâóêa. Ha÷íèòe çâóê
÷epeç êaíaë 2 ìèêpocxeìû òaéìe- pa. Çaòeì ìoäóëèpóéòe âûxoä äèíaìèêa,
ça c÷eò áèòa 1 ïopòa B ìèêpocxeìû èíòepôeéca c ïepèôepèeé. Bòopoe
äeécòâèe oïpeäeëÿeò ïpoäoëæèòeëüíocòü çâóêa. He çaáóäüòe âûêëþ÷èòü
ìèêpocxeìó òaéìepa ïpè çaâepøeíèè.
;---ía÷èíaeì ãeíepaöèþ çâóêa ÷epeç êaíaë 2 òaéìepa
IN AL,61H ;ïoëó÷aeì áaéò èç ïopòa B
OR AL,3 ;ócòaíaâëèâaeì ìëaäøèe äâa áaéòa
OUT 61H,AL ;ïocûëaeì áaéò oápaòío
MOV AL,10110110B ;öeïo÷êa äëÿ êoìaíäíoão peãècòpa 8253
OUT 43H,AL ;ïocûëaeì â peãècòp
MOV AX,600H ;c÷eò÷èê äëÿ êaíaëa 2
- 9 -
OUT 42H,AL ;ïocûëaeì ìëaäøèé áaéò
MOV AL,AH ;ãoòoâèì còapøèé áaéò
OUT 42H,AL ;ïocûëaeì còapøèé áaéò
;---ãeíepèpóeì âòopóþ ÷acòoòó ìèêpocxeìoé 8255
NUMBER_CYCLES EQU 9000 ;÷ècëo ïepeêëþ÷eíèé
FREQUENCY EQU 150 ;çaäepæêa äëÿ ïoëoâèíû öèêëa
CLI ;çaïpeò ïpepûâaíèé
MOV DX,NUMBER_CYCLES ;DX c÷èòaeò äëèíó òoía
IN AL,61H ;ïoëó÷aeì còaòóc ïopòa
AND AL,11111111B ;oòêëþ÷aeì äèíaìèê oò òaéìepa
NEXT_CYCLE: OR AL,00000010B ;âêëþ÷aeì äèíaìèê
OUT 61H,AL ;ïocûëaeì íaçaä â ïopò
MOV CX,FREQUENCY ;çaäepæêa ía 1/2 öèêëa
FIRST_HALF: LOOP FIRST_HALF ;
AND AL,11111101B ;âûêëþ÷aeì äèíaìèê
OUT 61H,AL ;ïocûëaeì êoìaíäó â ïopò
MOV CX,FREQUENCY ;çaäepæêa ía 1/2 öèêëa
SECOND_HALF: LOOP SECOND_HALF ;
DEC DX ;ìeíÿeì c÷eò÷èê öèêëoâ
JNZ NEXT_CYCLE ;ecëè 0, òo ïopa êoí÷aòü
STI ;paçpeøaeì ïpepûâaíèÿ
;---âûêëþ÷eíèe êaíaëa 2 ìèêpocxeìû òaéìepa
IN AL,61H ;ïoëó÷aeì còaòóc ïopòa
AND AL,11111100B ;cápacûâaeì 2 ìëaäøèx áèòa
OUT 61H,AL ;ïocûëaeì áaéò oápaòío
|