←ïðåäûäóùàÿ ñëåäóþùàÿ→
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...
ä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
←ïðåäûäóùàÿ ñëåäóþùàÿ→
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...
|
|