NeoGS for 32-channel XM, IT, S3M

NeoGS software and hardware

Postby нолька » 19 Apr 2010, 19:56

в .it сэмплы пакованые
я проснулся среди ночи и понял, что всё...
всё идет по плану
User avatar
нолька
рОвный
 
Posts: 264
Joined: 08 Apr 2007, 21:12
Group: Registered users

Postby lvd » 19 Apr 2010, 20:05

TS-Labs wrote:Могу согласиться с тем сомнительным аргументом, что ГС можно юзать как сопроцессор

Как показала дема на ЦЦ, НГС уже вполне можно юзать, как нехилый сопроцессор. В отличие от олдгс.
TS-Labs wrote:на совместимость (на уровне интерфейса ГС) это не повлияет

Интерфейс ГС это не только загрузка модов и команды играть-неиграть, это ещё загрузка Z80 кода и его выполнение. Именно из-за этого была выбрана с самого начала аппаратная совместимость и Z80 в НГС.

TS-Labs wrote:и если писать для АВР

А если писать для АРМа? ;-)


TS-Labs wrote:Я не очень знаю возможности ФПГА

TS-Labs wrote:Прошивку для ФПГА я тоже собираюсь писать сам.

Ниосилил. Ты знаешь verilog/VHLD? Умеешь сделать на fpga хотя бы мигание светодиодиком?

TS-Labs wrote:- собственный доступ к памяти с целью чтения 44100 раз в секунду байта (или 2 байт - 16битные инструменты)

такое уже почти сделано, точнее сделаны механизмы DMA, к которым можно прикрутить выбиратор по конкретным адресам.
TS-Labs wrote:- увеличивать значение адреса на дробную величину (1 байт до запятой и 2 после) - обычный 24 битный сумматор (2 байта для "суб-адреса")

Это не проблема, но может не хватить фпга на хранение 32 таких счётчиков. Но возможны варианты, конечно, с извратами :)
TS-Labs wrote:- интерполяция (алгоритм прост как двери, но требуется апаратное умножение)

Можно формулу с указанием битности аргументов?
TS-Labs wrote:- прочитанную выборку умножать на коэф. громкости для левого, а потом для правого канала - требуется апаратное умножение, значения суммировать отдельно

Аналогично.
TS-Labs wrote:следить, чтоб они не перевалили за 16 бит

Ниосилил, как можно это уследить. Можно оценить статически, по кол-ву каналов. Но тогда зачем вообще следить?

Да, по поводу 16битных семплов. Они потребуют 24битного (или вообще 32битного) умножителя, это имхо чересчур. Особенно с учётом того, что аппаратных умножителей нет, и потому обычный умножитель или сожрёт дохера ресурсов, или будет работать несколько тактов (=сколько бит на вход, столько и тактов).
Многого нет здесь: http://lvd.nedopc.com
Image
User avatar
lvd
 
Posts: 1786
Joined: 07 Apr 2007, 22:28
Group: Registered users

Postby jdigreze » 20 Apr 2010, 05:16

у меня от прочтения возникло мнение, что катастрофически не хватает dsp.
jdigreze
 
Posts: 12
Joined: 01 Aug 2008, 07:49
Location: Агбан
Group: Registered users

Postby lvd » 20 Apr 2010, 08:14

TS-Labs wrote:48MHz/44100/32

24MHz/37500Hz/32 = 20
44100 как самоцель не имеет смысла.
2 умножения 8х8 столбиком впихнутся, не более. Это если ресурсы не тиражировать.
Многого нет здесь: http://lvd.nedopc.com
Image
User avatar
lvd
 
Posts: 1786
Joined: 07 Apr 2007, 22:28
Group: Registered users

Postby lvd » 20 Apr 2010, 09:09

еще по формулам. После линейной интерполяции по идее уже не 8 бит, а 16 получается, но можно ТУТ забить, так как результат лежит между 2 последовательными байтами.
Далее масштабирование по громкости, и тут-то уж нельзя забивать на 16 бит, надо все 32 раз по 16 бит складывать, и далее получать 21 бит и старшие 16 пихать в ЦАП.
По поводу коэффициента, думаю, что самое логичное - делать этот коэффициент степенями двойки. То есть из суммы 17-32 каналов выбирать старшие 16 бит, 9-16 - старшие 16 без самого старшего и т.д.
Ещё - исходя из интерполяции, получается всего 256 значений частот семпла, от 18750Гц до 73Гц, не маловато ли?
Многого нет здесь: http://lvd.nedopc.com
Image
User avatar
lvd
 
Posts: 1786
Joined: 07 Apr 2007, 22:28
Group: Registered users

Postby lvd » 20 Apr 2010, 10:55

TS-Labs wrote:А насколько их можно тиражировать? 4 умножателя столбом сделать можно? тогда, это уже 80 тактов.

в еп1к30 1728 ЛЕ и 6х512 байт памяти.
ЛЕ=триггер и 4входовая LUT
TS-Labs wrote:Если мы начали говорить про 37кГц, то давайте вспомним, что многие породистые компакты раньше выпускались в 12 битах (младший байт тупо шел с 4-мя младшими нулями, сдирал треки, видел вот этими глазами). То бишь, 12 бит - это "эверест" качества, тем более для трекерных музонов. Причем ДЛЯ РЕЗУЛЬТИРУЮЩЕГО ЗВУКА. То есть, выборку для 1 канала (после интерполяции и громкости) можно хранить в виде 8 бит и не париться.

Думаю, что фигня. Громкость 8битные семплы только уменьшает в размахе, и если громкость вместо 255 стоит на 16, то семпл вместо 8 бит становится 4. Потому ТУТ надо все биты сохранять.
TS-Labs wrote:Да. Но это когда количество каналов равно степени 2. А когда их 20?

Когда 20 - коэфф. такой же как и для 32.
TS-Labs wrote:Лолшто.

лолто. В твоей схеме только 1 байт определяет 'частоту дискретизации' для семпла. Если 255 - то почти 37500 Гц (макс. частота в семпле - 18750), и далее умножаем 18750 на (1..255)/256
Многого нет здесь: http://lvd.nedopc.com
Image
User avatar
lvd
 
Posts: 1786
Joined: 07 Apr 2007, 22:28
Group: Registered users

Postby breeze » 20 Apr 2010, 13:26

Так когда ждать тестовый прототип прошивки ? :)
User avatar
breeze
 
Posts: 764
Joined: 07 Feb 2009, 17:19
Location: Оттуда
Group: Registered users

Postby lvd » 20 Apr 2010, 14:16

TS-Labs wrote:Да, но мы же не будем слушать 1 канал на максимальной громкости колонок. А так, в общем потоке 1/16 громкости и будет звучать как 1/16 громкости.

Как оцифровка на АУке.
TS-Labs wrote:и громкость=20/32=0,625 от максимальной. Ну, в принципе, можно подогнать через индивидуальные громкости.

В принципе, можно (и нужно) забить. амплитудное отличие 0.6 это не та величина, которой стоит париться. Многие моды имеют больший разброс громкостей.
TS-Labs wrote:(блин, есть какой-то термин для этого?)

Называется "арифметика с фиксированной точкой"
TS-Labs wrote: используется 1 байт до запятой и 2 байта после

Противоречие вот с этим:
TS-Labs wrote:Имеем, ADDR - адрес выборки wave-формы, SADDR - субадрес (1 байт). Читаем байт из ADDR - B(ADDR). Формула:DAC=PSM*(256-SADDR)+B(ADDR)*SADDR.Далее, увеличиваем SADDR на некий шаг, если перевалило за нуль, то 1) B(ADDR)->PSM, 2) ADDR+1->ADDR.
Многого нет здесь: http://lvd.nedopc.com
Image
User avatar
lvd
 
Posts: 1786
Joined: 07 Apr 2007, 22:28
Group: Registered users

Postby lvd » 20 Apr 2010, 14:17

TS-Labs wrote:- между тем занимаюсь раздуплением VHDL и FPGA (по срокам, к приезду железа уже буду писать на обоях вхдл)

верилог лучше. Букф меньше. :)
TS-Labs wrote:Ситуация такая:

Ниосилил, причём тут атмелка и НГС.
НГС - законченная железяка, и менять её архитектуру какбэ не планируется.

да, и нафиг авр32? АРМ делают всё, даже ленивые, а авр32 - только атмел.
Last edited by lvd on 20 Apr 2010, 14:20, edited 1 time in total.
Многого нет здесь: http://lvd.nedopc.com
Image
User avatar
lvd
 
Posts: 1786
Joined: 07 Apr 2007, 22:28
Group: Registered users

Postby lvd » 20 Apr 2010, 14:24

TS-Labs wrote:Опишите кто-нибудь, по какой технологии используют ГС как сопроцессор: для него код пишется отдельно, или он как-то эмулирует основной компьютер? Если код пишется отдельно, то что стоит писать его под атмел? ПРОФИТ!!!

Жду дему для твоей железки с атмелкой, воткнутой в спектрум.
Перед этим жду твою железку в продаже, с софтовой поддержкой.
Многого нет здесь: http://lvd.nedopc.com
Image
User avatar
lvd
 
Posts: 1786
Joined: 07 Apr 2007, 22:28
Group: Registered users

PreviousNext

Return to NeoGS - софт и железо

Who is online

Users browsing this forum: No registered users and 1 guest