Программирование на Ассемблере
тия клавиш: ;** Producing a beep tone ***
ctlw = $DFF096 ;регистр управления DMA
c0thi = $DFF0A0 ;старшее слово регистра адреса таблицы
c0tlo = c0thi + 2 ;младшее слово регистра адреса таблицы
c0tl = c0thi + 4 ;регистр размера таблицы
c0per = c0thi + 6 ;регистр периода звука
c0vol = c0thi + 8 ;регистр громкости beep: ;генерация короткого звукового сигнала
move.l #table,c0thi ;записываем начало таблицы
move #8,c0tl ;записываем размер таблицы
move #400,c0per ;записываем период тона
move #65,c0vol ;записываем громкость
move #$8201,ctlw ;запускаем DMA
move #20000,D0 ;длительность тона
loop:
dbra D0,loop ;соответствующая задержка
still:
move #1,ctlw ;выключаем канал
rts ;все table: dc.b 40,70,90,100,90,70,40,0,-4,0 end Paula может в обычном режиме воспроизводить до четырех независимых звуковых
таблиц (каналы 0-3). Существует и другой интересный режим воспроизведения,
в котором некоторые каналы могут использоваться для модуляции других
каналов.
В качестве примера рассмотрим программу, генерирующую звук сирены. Конечно,
можно это сделать задав полную огибающую звука в одной большой таблице,
однако используя режим модуляции такой звук воспроизвести гораздо легче.
Будем использовать два канала: первый - для основного тона и нулевой - для
задания огибающей частоты первого канала. На самом деле Paula позволяет
задавать не только частотную модуляцию, но и амплитудную (а также обе
одновременно), однако на примере мы рассмотрим только частотную модуляцию: ;** Modulated sound generated via hardware registers **
ctlw = $DFF096 ;регистр
|