Grey wrote:Это только при стандартном темпе 125 длина одного кадра в секундах равна 5/(BPM*2). = 0,02 или 1/50. Но темп например часто задают 140.
А не надо даже и в 1/37500 - при стандартном темпе 125 я подсчитал, что обновление данных - 1 раз а 750 байт (как раз 1/50 секунды реально там с точностью до байта меняется при изменении теипа). При более быстром темпе период уменьшится но при максимальном темпе 255 он будет около 370 байт - пол фрэйма . А вот передать новые данные в память ДМА машины - 512 байт, да - нудно успеть за 1/37500, но я думаю что если сэмпл где то на 1 - 2 байта, - это будет не критично.
1. В прошивке GS прям есть табличка которая преобразует BPM в отсчёты на частоте 37500.
2. передать все 512 байт за 1/37500 не получится, на это нужно около 6600 тактов z80 (а 1/37500 -- это 640 тактов)
3. пока переписываются разные позиции в памяти машинки ДМА, она может работать и схватить неверные данные. Потому видимо нужны отдельные биты ENABLE каждому каналу отдельно в LE. Если бит установлен в 0, то канал, даже если машинка в середине работы с ним, сразу же выключается.
Или обмен должен быть типа такого:
1. поставили все каналы которые хотим обновить в стоп (бит в памяти 512 байт)
2. начали их менять. за время от начала 1 до начала 2 должно пройти времени не меньше чем время обхода всех каналов.
3. убрали стоп в тех же каналах.