Тезисно отвечу:
1. Если успевается подчитать байты всех каналов и вмикшировать их в выходное слово за период (1/37500 с), то и буфер выходного канала не нужен вовсе! Рестартить ДМА по идее нужно 50 раз в секунду (или сколкьо там БПМ), а само по себе ДМА либо остановится (семпл без лупа) или залупится (с лупом), до момента пока проц в тех же 50 разах в секунду не решит луп остановить или вообще переключить канал на другой семпл с другим рейтом и т.д.
2. Если рассчитывать что ДМА будет дмачить только кусочками по 128-256 байт, то тогда и буфер выходного канала нужен и стейт ДМА передавать процессором(!) по границе этих кусков. Имхо жуткий оверхед.
3. Начало семплов конечно можно выравнять по 256б, но проблема в том, что хранить всё равно 22 бита адреса надо (4 мегабайта), т.е. вроде как экономии в буфере с заданиями никакой.
[по поводу счёта дробных шагов всё понятно]
В конце выборку должна быть возможность прочитать , на каком адресе остановилась выборка.
Нужно ли это если ДМА фигачит семпл целиком? Помоему нет.
ДМА при запись первого канала должен делать сложение не с буфером а с 32768.
Ну да, с нулём (c средним уровнем)
Круто, если луп будет двух видов, с начала или вперед назад
Важная для меня инфа (в моде на амиге такого нету)
то в один складывать а в другой вычитать
аналогично
Будет писать в память ДМА машины через два порта.
Я тут думаю вот что:
1. если буфер с командами ДМА еще и читать процессором, это совсем грустно получится (получается как бы 4-портовая память, 2 писателя и и 2 читателя). Притом это осложняется тем, что запись процессора можно и забуферировать/отложить на пару тактов (сама машинка дампит резалты далеко не каждый такт), а вот с чтением неудобно -- в NGS останавливать процессор никак нельзя, ни вейтом, ни клоком (можно БАСКРом, но он не останавливает уже идущий цикл чтения/записи).
Потому есть такая идея: замапить буфер с заданиями на память. Запись в этот кусочек одновременно идёт и в буфер -- и так будет быстрее для Z80 чем через любые порты. А чтение -- обычное чтение из ОЗУ ранее записанного. Статусы можно сунуть в отдельные порты (опять же если они нужны -- см выше я спрашивал, действительно ли они нужны).
Ну да - будет ступенька, но она и в оригинале и в МОД и в s3m и в it есть, и автор пишет слыша её и делая где нужно ресамплинг. В impulstracker-r конечно можно включить линейную интерполяцию, но там и 16 бит сэмплы есть. А стоит ли это делать в 8 битном компьютере? - не уверен, хотя было бы красиво.
Вот и я о чём -- в амиге ступеньки так и оставались, а в штатной прошивке GS вроде как на низких частотах семплирования делается линейная интерполяция (я не уверен на 100%). И если вдруг это можно сделать простыми средствами то наверное и нужно? Если делать линейную интерполяцию всегда безусловно (используя дробные значения текущей позиции в семпле) -- сильно ли это засрёт семплы с высокими частотами дискретизации?