Цитата Сообщение от ASDT Посмотреть сообщение
Нужно доработать - до ДМА без торможения ЦП ...
Однако не везде это получится
Получится, но нужно в коренном смысле изменить архитектуру спека, уж больно Зетник ревностно относится к памяти.
Еще, у ВТ37 есть режим совместимости, при котором она тратит 4 такта на выборку 1 байта, 2 такта из них тратится на wait, с целью, чтоб устройства, не совместимые по временным характеристикам успели переключиться, именно в этом режиме все расчеты и проводились - если твоя память и зетник успеет отработать в режиме с отключенной совместимостью - вперед Скорость работы ДМА будет 2 раза быстрее, и торможение Зетника будет еще 2 раза меньше

Цитата Сообщение от psb Посмотреть сообщение
ну, от этого-то можно защититься, если сделать бутблок.
Опять же без паяльника и скальпеля тут не обойтись.
Что касается подключения ДМА к компу, если ты пошел на то чтоб порезать один проводник - недалек от того, чтоб порезать еще 3-4. Если нет на то смелости и умений, то опять же, Пентагоны частенько вылетали из-за плохого питания, или еще чего-то, куда ты понесешь его ремонтровать? Правильно, к дяде, а ему пофиг сколько проводков перерезать и ДМА он подключит без проблем. Опять же, в начале темы обсуждалось внедрение ДМА или ГС в новый комп, на ПЛИС и прочих матрицах. Что проще и дешевле реализовать в этом случае? Однозначно ДМА, т.к. эмулить зетника с ПЗУ никто не будет, а если наворачивать схему, то уже намного дороже будет, на что не каждый пользователь согласится - неоправданная для него стоимость, если к звуку у него рвения нет.
Про паяльник и скальпель еще, а как ты сделаешь расширенный экран без скальпеля? Однако он есть у многих

Цитата Сообщение от psb Посмотреть сообщение
тока в если в тех клонах, которые с разьемом уже..
В частности у каждого клона свой разъем, в большинстве случаев не совместимый с другими, хотя бы по распиновке, от паяльника ты уже не избавишься.

Цитата Сообщение от psb Посмотреть сообщение
голословное утверждение.. посчитаем? для проигрывания на частоте 48кГц, между сэмплами есть 72,9 тактов, за это время надо успеть запустить новый буфер
Знаешь, ты меня убедил Я подавлен и огорчен, что же делать? Но... Но... Но...
Забыл, а что мы слушаем? Ах-да, мы с винта читаем и воспроизводим оцифровочку... напомню ГС-у это вообще не по зубам Даже с таким бешеным джитером, коего даже самый ушастый не услышит.

Ладно, твой приведенный код можно несколько оптимизировать, причем имеется на вскидку 2 варианта, но подробности особо приводить не буду, только идею, т.к. эта тема уже превращается в мастерство программирования ДМА, а не см. сабжект.
Не будем говорить про то, что команды, не обращающиеся к памяти и выполняемые не в ПЗУ TR-DOS, на проце Z80 с 7МГц выполняются в 1.8-1.9 раза быстрее. Про то, что турба есть у большинства населения планеты Спектрум, мы тоже говорить не станем, это факт.
1. Это не совсем "правильный" со стороны ушей вариант, но не дает того джитера о коротом ты вел речь, однако появляется другой побочный эффект хоть и тоже не очень заметный, но скажи, что это не вариант Во время считывания с винта проц не будет заниматься графикой, правильно? Да. Во время проигрывания оцифровки мы не будем играть мод, правильно? Да. Значит у нас задействован только один канал, остальные простаивают (ну если успеем считать достаточно инфы, то 2 задействованы, 2 стоят). вариант заключается в том, что мы запускаем проигрывание звука на канале А, инициализируем канал В, и в это время читаем в буфер, на который настроили канал В, с винта оцифровку. По приходу прерывания нам надо всего лишь забросить в регистр масок новое значение, т.е. что-то типа:
int ;17 - вызов прерывания
ld b,#ac ;7 - по-любому надо
out(c),a ;12 - запуск проигрывания
Сколько тактов?
Начинается воспроизведение второго буфера на канале В и мы неспеша инициализируем канал А и заполняем его буфер.
2. Идея только что, по дороге на работу явилась. Но для ее реализации необходимо 64кб памяти, но опять же, при считывании с винта звуковых данных мы больше ничем другим, как-то графикой, генерированием сверхсложных сцен и пением, заниматься не будем - все равно не успеем, поэтому этот вариант тоже имеет право на существование. ДМА не обнуляет регистры по окончанию передачи, счетчик устанавливается на следующий байт, когда проигрывается блок 64кб, хочешь, не хочешь, а при переполнении 16битного регистра он обнулится, на этом и сыграем. Делим эту область на 4 буфера, по 16кб, пока играется первый буфер - читаем во второй следующую порцию данных, потом по приходу прерывания - не загружая адрес начала сэмпла, только его длину, загружаем регистр масок - играем второй буфер, читаем в третий... и так далее по кольцу.

psb, я спрашивал у тебя на счет проигрывателя на ГС, как он умудряется воспроизводить звук интерполируя его на лету (хотя эта операция не очень быстро выполняется), обрабатывать паттерны мода, отыскивая новую ноту, и как кто-то упоминал, при этом получая команду на проигрывание эффекта во время игры, которую он самостоятельно обрабатывает, запихивая этот звук в нужный канал.
И это с учетом того, что ты вчера доказал, что между тиками при проигрывании не особо с вычислениями-то и разгонишься, пусть даже при частоте дискретизации 37.5кГц период будет и по-более, частота проца у ГС выше, но все же, надо обработать все 4 канала одновременно.
Ты утверждаешь, что в прошивке ГСа нет ошибок? Ты просчитал все тайминги его проигрывателя и утверждаешь что он не воспроизводит звук с джитером?