Sound System

FPGA, CPLD

Postby MVV » Sun, 15.03.2015 17:03:50

Модуль ПДП звуковой карты на VHDL для CPU0 в конфигурации ReVerSE-U16 QuadSpeccy (см. в приложении). Сейчас дизайн DMA Sound занимает около 2К LE.
Исходники (ссылка).

Реализовано 8-мь звуковых канала, каждый играет 8-разрядный (signed) звуковой образ (при необходимости в дальнейшей версии может быть расширен). Индивидуальная частота, громкость, стартовая позиция и длина. Возможность зацикливания (loop) с произвольного места.

Для управления звуком выбран диапазон портов 0x0050-0x8250 (младший байт всегда 0x50).


Управление каналами:
0x8050: Стерео микшер 0-7 (7..0) т.е. биты (3..0)=1 то каналы 0-3 (правые) слышны ещё и слева, если биты (7..4)=1 то каналы 4-7 (левые) слышны ещё и справа.
0x8150: Зацикливание каналов 0-7 (7..0) т.е. бит 0=1 разрешает зацикливание канала 0
0x8250: Разрешает работу каналов 0-7 (7..0) т.е. бит 0=1 разрешает работу канала 0. Чтение порта возвращает текущее состояние каналов, т.е. если бит 0=1 то канал 0 работает. Если бит 0=0, то канал закончил работу.

Канал 0:
0x0050: Стартовый адрес (7..0) т.е. 0x000000-0xFFFFFF
0x0150: Стартовый адрес (15..8)
0x0250: Стартовый адрес (23..16)
..
0x0450: Длина (7..0) т.е. 0x000000=1 байт .. 0xFFFFFF=0x1000000 байт
0x0550: Длина (15..8)
0x0650: Длина (23..16)
..
0x0850: Частота (7..0) т.е. 0=3,5MHz .. 65535=53,4..Hz
0x0950: Частота (15..8)
0x0A50: Громкость (5..0) т.е. 0=минимальная .. 63=максимальная

Канал 1:
0x1050: Стартовый адрес (7..0) т.е. 0x000000-0xFFFFFF
0x1150: Стартовый адрес (15..8)
0x1250: Стартовый адрес (23..16)
..
0x1450: Длина (7..0) т.е. 0x000000=1 байт .. 0xFFFFFF=0x1000000 байт
0x1550: Длина (15..8)
0x1650: Длина (23..16)
..
0x1850: Частота (7..0) т.е. 0=3,5MHz .. 65535=53,4..Hz
0x1950: Частота (15..8)
0x1A50: Громкость (5..0) т.е. 0=минимальная .. 63=максимальная

и так далее...

Code: Select all
DS_CH0_ADDRESS   equ #0050
DS_CH0_LENGTH   equ #0450
DS_CH0_TIMER   equ #0850
DS_CH0_VOLUME   equ #0A50
DS_CH_MIXING   equ #8050
DS_CH_LOOP   equ #8150
DS_CH_ENABLE   equ #8250

;Опрос наличия DMA-SOUND
Test      xor a         ;запретить работу каналов 0-7
      ld bc,DS_CH_ENABLE   ;порт DMASOUND_EN_CH
      out (c),a      ;запись в порт
      in a,(c)      ;чтение
      or a         ;0?
      jr z,Player      ;DMA-SOUND отсутствует
noDMA      
      ret

;Проигрывание семпла
ch0_rate   equ 16         ;частота выборки 16кГц
ch0_adr15to0   equ #0000      ;линейный адрес, т.е.
ch0_adr23to16   equ #00         ;0x000000-0x003FFF=стр.0 и т.д.
ch0_len15to0   equ #2000      ;длина семпла 8кБ, т.е.
ch0_len23to16   equ #00         ;0x002000
ch0_volume   equ #3F         ;максимальная громкость
channel_enable   equ %00000001      ;разрешаем канал 0

Player      ld a,ch0_adr23to16
      ld hl,ch0_adr15to0
      ld bc,DS_CH0_ADDRESS
      call Port_out
      ld a,ch0_len23to16
      ld hl,ch0_len15to0
      ld bc,DS_CH0_LENGTH
      call Port_out
      ld a,ch0_volume
      ld hl,3500/ch0_rate
      ld bc,DS_CH0_TIMER
      call Port_out
      ld a,channel_enable
      ld hl,#0101      ;зацикливаем, будет слышен и слева
      ld bc,DS_CH_MIXING
Port_out
      out (c),l
      inc b
      out (c),h
      inc b
      out (c),a
      ret


В общем требуется тестирование и разработка проигрывателя. Сейчас пока можно испытать работу с BASIC, программка в приложении.
Attachments
reverse_u16_quad_speccy_v22(20150317).zip
Конфигурация для платы ReVerSE-U16 (DMA-Sound)
(346.4 KiB) Downloaded 98 times
dmasound.zip
Тест канала 0
(3.84 KiB) Downloaded 77 times
Last edited by MVV on Fri, 10.04.2015 13:19:57, edited 2 times in total.
MVV
 
Posts: 446
Joined: Sun, 01.12.2013 22:48:17

Postby TS-Labs » Sun, 15.03.2015 17:34:06

MVV wrote:3К LE

Госпаде О_о, что там на 3кЛЕ?
User avatar
TS-Labs
 
Posts: 4870
Joined: Thu, 26.07.2012 01:29:56

Postby MVV » Sun, 15.03.2015 17:55:23

Пока это только не оптимизированный набросок DMA Sound. Сделал, чтобы все каналы обслуживались поочередно. Отсюда и размеры. Может есть пример, как просто сделать циклическую смену приоритетов, чтобы самый низкий приоритет присваивался каналу после его обслуживания? Да, и как у тебя сделано?
MVV
 
Posts: 446
Joined: Sun, 01.12.2013 22:48:17

Postby TS-Labs » Sun, 15.03.2015 18:26:59

MVV wrote:Да, и как у тебя сделано?

Скинул в личку многабукаф.
User avatar
TS-Labs
 
Posts: 4870
Joined: Thu, 26.07.2012 01:29:56

Postby TS-Labs » Sun, 15.03.2015 18:58:57

Аааа, ну так .jic никому не интересно. Я уже было ломанулся глянуть сорец, ага.
Вангую, что у тебя таблицы каналов лежат в регах, а надо в альтеропамяти.
User avatar
TS-Labs
 
Posts: 4870
Joined: Thu, 26.07.2012 01:29:56

Postby MVV » Fri, 10.04.2015 13:22:18

Оптимизировал и доработал. В первом сообщении дал ссылку на исходники.
MVV
 
Posts: 446
Joined: Sun, 01.12.2013 22:48:17


Return to HDL

Who is online

Users browsing this forum: No registered users and 1 guest

x