Программирование на Ассемблере
Биты 0-3 Включают/выключают соответствующий звуковой канал
(1 - канал включен). Для того, чтобы включить DMA для воспроизведения нашего тона, нам нужно
написать: move #$8000+$200+1,$DFF096 ;запуск DMA
Теперь приведем пример программы, воспроизводящей синусоидальный тон: ;** Sound generation using hardware registers ** (5.5A)
ctlw = $DFF096 ;регистр управления DMA
c0thi = $DFF0A0 ;старшее слово регистра адреса таблицы
c0tlo = c0thi + 2 ;младшее слово регистра адреса таблицы
c0tl = c0thi + 4 ;регистр размера таблицы
c0per = c0thi + 6 ;регистр периода звука
c0vol = c0thi + 8 ;регистр громкости run: ;генерация простого тона
move.l #table,c0thi ;записываем начало таблицы
move #8,c0tl ;записываем размер таблицы
move #400,c0per ;записываем период тона
move #40,c0vol ;записываем громкость
move #$8201,ctlw ;запускаем DMA
rts ;все data ;!!!!! данные в CHIP-памяти table: dc.b -40,-70,-40,0,40,70,40,0 end Загрузите эту программу в отладчик и запустите. Вы услышите ожидаемый
звук.
Чтобы остановить звучание, нужно просто обнулить бит 0 регистра DMA. Для
этого мы запишем 0 в бит 15 (после чего все установленные в операнде биты
будут очищаться в регистре $DFF096) и 1 в бит 0: still: ;выключить звук
move #1,ctlw ;обнуляем бит 0 регистра ctlw, не
;трогая остальные биты
rts ;и все Теперь мы можем написать программу для воспроизведения короткого звука,
который, например, можно использовать для индикации нажа
|