"Роберт Джордайн. Справочное пособие программиста - 2 (ассемблер, операционная система MS DOS)" - читать интересную книгу авторакратное произвольного периода задержки (изменяя этот период за-
держки, можно изменять темп). Вторая строка содержит частоты каждой из 8 нот; эти значения должны быть помещены в регистр задвижки канала 2 микросхемы 8253 для исполнения желаемых тонов. Третья строка содержит мелодию в виде кодовых номеров от 1 до 8, которые соответствуют восьми частотам. Эта строка завершается кодом 0FFH, который служит признаком конца мелодии. Процедура просто читает очередную ноту мелодии, находит соответствующую частоту и помещает ее в канал 2. Затем длительность для этой ноты помещается в счетчик цикла задержки, который использует счетчик времени суток, а когда задержка кончается, то переходим к обра- ботке следующей ноты. На рис. 2-5 показана работа этой процедуры. ;---в сегменте данных BEAT DB 10,9,8,7,6,5,4,3,2 ;длительность нот FREQUENCY DW 2280,2031,1809,1709 ;таблица частот DW 1521,1353,1207,1139 MELODY DB 1,2,3,4,5,6,7,8,0FFH ;номер частоты ноты ;---инициализация PORT_B EQU 61H COMMAND_REG EQU 43H LATCH2 EQU 42H IN AL,PORT_B ;получаем текущий статус OUT PORT_B,AL ;заменяем байт MOV SI,0 ;инициализируем указатель MOV AL,0B6H ;установка для канала 2 OUT COMMAND_REG,AL ;посылаем в командный регистр ;---смотрим ноту, получаем ее частоту и помещаем в канал 2 NEXT_NOTE: LEA BX,MELODY ;берем смещение для мелодии MOV AL,[BX][SI] ;берем код n-ной ноты строки CMP AL,0FFH ;проверка на конец строки JE NO_MORE ;если конец, то на выход CBW ;переводим в слово ;получение частоты MOV BX,OFFSET FREQUENCY ;смещение таблицы частот DEC AX ;начинаем отсчет с 0 SHL AX,1 ;умножаем на 2, т.к. слова MOV DI,AX ;адресуем через DI MOV DX,[BX][DI] ;получаем частоту из таблицы ;начинаем исполнение ноты MOV AL,DL ;готовим младший байт частоты OUT LATCH2,AL ;посылаем его MOV AL,DH ;готовим старший байт частоты |
|
|