Namco 3-channel Waveform Sound Generator (WSG) использовался в аркадных платформах Galaxian, Pac-Man и других. Позволяет использовать три канала с независимой регулировкой громкости, частоты и формы + шумовой генератор. Все функции зависят от 4-я битных регистров:
Регистр | За что отвечает |
---|---|
00h-04h | Частотный счётчик Voice #1 |
05h | Форма волны Voice #1 (использует 3 бита) |
06-09h | Частотный счётчик Voice #2 |
0Ah | Форма волны Voice #2 (использует 3 бита) |
0Bh-0Eh | Частотный счётчик Voice #3 |
0Fh | Форма волны Voice #3 (использует 3 бита) |
10h-14h | Частота Voice #1 |
15h | Громкость Voice #1 |
16h-19h | Частота Voice #2 |
1Ah | Громкость Voice #2 |
1Bh-1Eh | Частота Voice #3 |
1Fh | Громкость Voice #3 |
20-битные значения частот и счётчиков хранятся в порядке начиная с наименьшего значащего полубайта. Каналы #2 и #3 не имеют регистра для наименьшего значащего полубайта, и его значение для этих каналов предполагается равным нулю.
Регистры обычно отображаются в адресное пространство памяти процессора. В аппаратном обеспечении Pacman регистры отображены в ячейки памяти с адресами 5040-505Fh, так что, например, запись значение по адресу 505Ah производит установку уровня громкости канала #2.
Генерация звука основана на таблице, содержащей 8 различных форм волны, где каждая из них описывается 32 4-битными записями. Для гибкости и возможности повторного использования, таблица хранится вне звукового чипа, на 256-байтном модуле PROM.
Звуковой чип тактируется частотой 96 кГц, равной частоте основного процессора (3.072 МГц), поделенной на 32. В ходе цикла частотный счётчик каждого из канала увеличивается на текущее значение частоты, после чего 5 наиболее значащих битов используются как индекс для получения текущего сэмпла волны из таблицы. После этого призводится умножение сэмпла на значение громкости канала, и результат отправляется на усилитель для воспроизведения. Стоит отметить, что канал заглушен, если его частота или громкость установлены в 0.