DEC AX ;начинаем отсчет с 0
SHL AX,1 ;умножаем на 2, т.к. слова
MOV DI,AX ;адресуем через DI
MOV DX,[BX][DI] ;получаем частоту из таблицы
;начинаем исполнение ноты
MOV AL,DL ;готовим младший байт частоты
OUT LATCH2,AL ;посылаем его
MOV AL,DH ;готовим старший байт частоты
OUT LATCH2,AL ;посылаем его
;-создание цмкла задержки
MOV AH,0 ;номер функции чтения счетчика
INT 1AH ;получаем значение счетчика
MOV BX,OFFSET BEAT ;смещение таблицы длин
MOV CL,[BX][SI] ;берем длину очередной ноты
MOV CH,0 ;
MOV BX,DX ;берем младшее слово счетчика
ADD BX,CX ;определяем момент окончания
STILL_SOUND: INT 1AH ;берем значение счетчика
CMP DX,BX ;сравниваем с окончанием
JNE STILL_SOUND ;неравны - продолжаем звук
INC SI ;переходим к следующей ноте
JMP NEXT_NOTE ;
;-завершение
NO_MORE: IN AL,PORT_B ;получаем статус порта B
AND AL,0FCH ;выключаем динамик
OUT 61H,AL ;заменяем байт
2.2.6 Генерация строки тонов, одновременно с другими операциями.
Предыдущая страница 115 Следующая страница
230864669
|