"Роберт Джордайн. Справочное пособие программиста - 2 (ассемблер, операционная система MS DOS)" - читать интересную книгу автора 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 ;заменяем байт .h3 2.2.6 Генерация строки тонов, одновременно с другими операциями. Хотя в Бейсике это делается очень просто, на самом деле это нетривиальный трюк программирования в реальном времени. Для реше- ния этой задачи нужно использовать генерацию звука через микрос- хему 8253 [2.2.3], так как метод, использующий микросхему 8255 [2.2.2], занимает процессор. Соответственно, только строки чистых музыкальных тонов могут производиться таким методом - всякого рода звуковые эффекты при этом недоступны. Основная техника прог- раммирования в реальном времени показана в [2.1.7]. Программы, работающие в реальном времени, модифицируют прерывание таймера, которое останавливает процессор 18.2 раз в секунду, чтобы изме- нить показание счетчика времени суток. Расширение процедуры пре- рывания сравнивает новое значение счетчика времени суток со зна- чением, показывающим время завершения генерации тона, и когда это значение достигнуто, прерывает звук, начинает генерацию другого тона и устанавливает время его окончания. Высокий уровень. Генерация строки звуков одновременно с другими операциями является одной из возможностей очень мощного оператора PLAY, который детально обсуждался в [2.2.5]. Надо просто добавить в начало управляющей строки MB. Это сокращение от Music Background (фоновая музыка); для того чтобы заставить PLAY прекратить все |
|
|