Реплика Innovation SSI 2001 (Воссоздание участниками форума этой ISA8 карты.)

Описания, советы, ремонт, эксплуатация старых IBM PC-совместимых ПК
scg
Full Member
Сообщения: 201
Зарегистрирован: 27.02.2017,23:35

Сообщение scg » 08.04.2018,20:41

Fagear писал(а):но, если что, это был файл Zardax_One.sid
Скачал, посмотрю, как будет свободное время. У меня, к сожалению, в ближайший месяц перегруз по работе намечается, поэтому скоро не обещаю.
Fagear писал(а):Если позволите, есть немного пожеланий с софтине:
1) Инструкция появляется, если запустить программу без параметров или с ключом /?. Не совсем очевидно, поэтому в следующем релизе добавлю usage в Readme.txt
2) Не думаю, что это будет сложно. Сделаю.
3) А вот это действительно проблема. Музыка в формате SID - это на самом деле программа для C64, и по этому невозможно определить ни начала музыки, ни окончания. Я попробую что-нибудь придумать, но вряд ли это получится.
4) Здесь не совсем понял. Частота SID'а обычно указывается в заголовке файла. Проигрыватель ее может учитывать только для эмуляции SID'а, эмуляции процессора (если модель точная) и настройки таймера. Поскольку SID у нас аппаратный то частоту мы можем только вывести на экран (она и выводится, если запустить программу с ключом /V ), а перемычки придется выставлять вручную. Может и можно попробовать скорректировать значения регистров, которые зависят от времени, но там разница в частотах всего около 3.7%, а разрядность регистров не особенно большая. Но, можно подумать.
5) Я хоть и не собирался это делать, но ничего сложного в такой доработке нет. Сделаю.

Аватара пользователя
Fagear
Advanced Member
Сообщения: 1477
Зарегистрирован: 22.01.2010,11:23
Откуда: Москва, САО

Вклад в сообщество

Сообщение Fagear » 10.04.2018,08:17

scg
1) Ага, надо ознакомиться. В общем, стандартный ключ хэлпа для DOS-программ, но я ожидал в readme увидеть мануал.
2) Шикарно, если так.
3) Да, я уже в курсе, что *.SID - это по сути образ программы для всего C64, а не просто музыка.
У меня из мыслей только сохранить при старте воспроизведения адреса, с которых выполняется программа на протяжение, допустим, полусекунды, а потом, во время выполнения программы смотреть - вернулось ли исполнение на те же адреса... Но это чисто предположение от человека, который не видел структуру программ на C64. По хардкору - отмечать вообще все адреса флагом "выполнялось", но на это потребуется откусить ломоть ОЗУ. И когда выполнение попадёт в уже отмеченный адрес - значит зациклились.
Или, может быть, смотреть разницу адресов для выполнении команды перехода, если она слишком велика (предполагаем, что прогармма равномерно "уходит" от стартового адреса со временем), то регистрируем зацикливание.
Причём есть композиции (которые уже отдельно композиции, а не фоновые), которые по завершению мелодии не зацикливают воспроизведение, а замолкают.
4) Насчёт пересчёта или коррекции ясно. Но вывод целевой частоты в любом случае пригодится по-умолчанию. Вообще, чем больше информации будет выводиться из файла - тем лучше.

Заранее спасибо за Ваш труд!

А вообще бродят мысли и создании/адаптации формата чисто для потока команд для чипа SID, чтобы не тратить время на эмуляцию. Т.о. я почти уверен, что совершенно спокойно можно будет воспроизвести все композиции и на IBM XT на штатной частоте, ибо задача слива по таймеру "тонкого" потока команд напрямую в плату видится категорически лёгкой в плане вычислений.
В идеале - всё в составе одной программы. Запустили по-умолчанию *.SID - воспроизводим в реал-тайме эмуляцию на SSI-2001/DuoSID, запустили со спец ключом *.SID - "воспроизводим" эмуляцию на максимальной скорости в файл-дамп нужного формата. Запустили дамп некого формата (*.RSD? Raw SID Dump?..) - воспроизводим этот "лёгкий" дамп-файл в SSI-2001/DuoSID.

scg
Full Member
Сообщения: 201
Зарегистрирован: 27.02.2017,23:35

Сообщение scg » 15.04.2018,21:30

За выходные успел сделать поддержку 2SID и, чтобы два раза не вставать, 3SID: https://stdio.ru/download/ssi-2001/osp2 ... .0pre1.zip
Порты задаются ключом /p и разделяются двоеточием. Например: /p 0x280:0x2A0 - для 2-x SID'ов и /p 0x280:0x2A0:0x2C0 - для 3-х.
Это пока не релиз, а так, на попробовать, так как не успел доделать выключение каналов и фильтров. Какие-то заготовки я сделал, но потом выяснилось, что каналов может быть до 9-ти, да и фильтров 3 штуки.

По по поводу определения loop'а и частоты чипа по прежнему не знаю, как это сделать. С частотой лучше вообще не заморачиваться, так как на слух она не так цепляет.
К тому же, основная часть музыки написана под PAL, так как музыкой увлекались в основном европейцы. По поводу зацикливания - попробую записать несколько первых секунд трека и потом искать их в потоке. Но ресурсов это будет жрать изрядно, и предчувствую ложные срабатывания. Адрес программы отслеживать бесполезно, так как он там один и тот же: раз 50-60 в секунду вызывается обработчик прерываний.

А вот по поводу неправильно звучащей Zardax_One.sid. Я честно слушал в наушниках первую и вторую запись но так и не уловил каких-либо различий. Эффект невпопад звучащих нот я ловил и там и там :)
Даже щелчки в одном и том же месте. В любом случае, для переделки на два SID'а я изменил механизм записи в регистры чипа, сохранив оригинальных порядок и исключив повторные записи в регистры, которые не трогались. Может теперь звучать лучше будет.

Аватара пользователя
Кай
Почётный пользователь
Сообщения: 19738
Зарегистрирован: 08.08.2010,21:44
Откуда: СПб, Ульянка-Лигово
Контактная информация:

Вклад в сообщество

Сообщение Кай » 18.04.2018,02:46

Неожиданно. С Днём Рождения. Макс "Fagear"!
(Лучше - поздно, чем никогда)
- Студент, принесите из вивария живую мышь и подготовьте её к опыту.
Полученную кашицу...

Аватара пользователя
Fagear
Advanced Member
Сообщения: 1477
Зарегистрирован: 22.01.2010,11:23
Откуда: Москва, САО

Вклад в сообщество

Сообщение Fagear » 21.04.2018,03:43

scg
Проверил новую версию.
С уверенностью могу сказать: воспроизведение "*_2SID.SID" файлов работает! :thumbup:
Насладился их звучанием в разных конфигурациях DuoSID'а... но записи позже.

Сразу есть небольшое пожелание: раз программа умеет определять число требуемых SID'ов (видел в /v), то неплохо бы сделать так, чтобы в случае указания в параметре /p разных адресов поток команд лился во все адреса одинаковый. Это позволит не перекоммутировать постоянно перемычки адреса на DuoSID'е, переключаясь между "труЪ стерео" и "псевдостерео".
scg писал(а):не успел доделать выключение каналов и фильтров
Отключение голосов и фильтров таки не работает совсем - ни "на лету", ни через параметры запуска.
scg писал(а):С частотой лучше вообще не заморачиваться, так как на слух она не так цепляет.
Согласен, её только нужно выводить при воспроизведении, чтобы было понятно, как должна быть сконфигурирована плата. Для "0,985 МГц (PAL)" или "1,023 МГц (NTSC)".

С воспроизведением подавляющего большинства треков проблем не отмечено, как ни прислушивался. Однако есть целый набор треков, где ошибки очевидны.

Вот файл, где набросаны эти треки. Сначала идёт воспроизведение при помощи osp2001-win-1.0pre1, затем "правильный вариант" при помощи ssidpl9x.

Juha-Matti Hilpinen (AMJ) - Selfmade Executable (Selfmade_Executable.sid)
Трек воспроизводится слегка быстрее, чем нужно. Попутно портятся звуки: ударные то "съедаются", то рассыпаются на составляющие, которые то "чиркают", то "дрынькают", есть посторонние щелчки.

Norbert Folkens (Sabre) - Eternal - Funk Remix (Eternal-Funk_Remix.sid)
По всей видимости, проигрыватель не определяет треки для 60-Гц региона (даже частота выводится как 0,985, а не 1,023). Как следствие - медленное воспроизведение.

Edwin van Santen - Dutch Breeze Advertisement (Dutch_Breeze_Advertisement.sid)
Те же проблемы со "съеданием" и "рассыпанием" звуков, что в случае Selfmade Executable. Только скорость нормальная. Куча лишних писков и шипений, где их быть не должно, причём непостоянно.

Edwin van Santen - Blackmail Tune 1 (Blackmail_Tune_1.sid)
Проблемы со скачками громкости (похожее было у раннего SIDTEST), а также снова проблемы с расползанием составляющих звуков - лишние непостоянные призвуки.

Norbert Folkens (Sabre) - Attitude (Attitude.sid)
Та же проблема, что у Eternal - Funk Remix - медленное воспроизведение трека для 60 Гц.
Кай писал(а):С Днём Рождения. Макс "Fagear"!
(Лучше - поздно, чем никогда)
Спасибо большое!

UPD.
Тут прошёл ещё один стрим, в т.ч. с отслушиванием в режиме "2SID":
Вложения
Скриншот 2018-04.png

scg
Full Member
Сообщения: 201
Зарегистрирован: 27.02.2017,23:35

Сообщение scg » 22.04.2018,20:19

https://stdio.ru/download/ssi-2001/osp2 ... .0pre2.zip
[+] добавлена возможность отключать каналы и фильтры
[+] добавлен режим Pseudo Stereo, который включается когда файл поддерживает только один чип, но в параметрах командной строки указаны адреса более одного. К сожалению, пришлось пожертвовать дефолтными адресами второго и третьего чипов, поэтому для стерео карточки параметр /p теперь нужно указывать всегда.
[!] исправлен баг с неправильным определением частоты в треках: Eternal-Funk_Remix.sid и Attitude.sid. Там, в оригинальных исходниках была ошибка - они не смотрели на некоторые биты флага.

Кроме того, в файле Selfmade_Executable.sid, если оставить только первый канал, действительно ясно слышны косяки. Здорово, что вы это заметили. Буду разбираться.

scg
Full Member
Сообщения: 201
Зарегистрирован: 27.02.2017,23:35

Сообщение scg » 10.07.2018,12:16

8-bit Guy протестировал эту карту: https://www.youtube.com/watch?v=TUCNDNJHItw

scg
Full Member
Сообщения: 201
Зарегистрирован: 27.02.2017,23:35

Сообщение scg » 26.08.2018,23:42

Появилось свободное время и решил я позаниматься с этими косяками. Я записал на диск чистый поток команд на SID чип а потом воспроизводил его с помощью простейшей программы, которая вообще не создавала никакой нагрузки на CPU. Так вот, в этом случае при одинаковом потоке передаваемых на чип данных артефакты проявлялись в случайных местах. То есть, артефакты никак не связаны симулятором.
В общем, я пришел к выводу, что виновата во всем неточность функции Sleep(). Проблемный трек переводит таймер C64 на более высокую частоту: около 80Гц и создаваемые им инструменты крайне чувствительны к стабильности этой частоты. Опоздание таймера на 1-2мс и приводит к косякам.
Интернет подсказал, что для таких вещей, в доисторической Винде есть более точный Multimedia Timer. Перевел движок на него.
Ситуация значительно улучшилась, но, к сожалению, абсолютно полностью проблема не ушла. Видимо, на моем первом пне разрешение таймера все-таки недостаточно. Есть надежда, что на более быстрых машинах с HPET проблема уйдет полностью.

Скачать новую версию можно здесь: https://stdio.ru/download/ssi-2001/osp2001-win-1.0.zip

scg
Full Member
Сообщения: 201
Зарегистрирован: 27.02.2017,23:35

Сообщение scg » 10.09.2018,23:08

Исправил еще одну ошибку, связанную с тем, что я не выставлял минимальный период ММ таймера.
https://stdio.ru/download/ssi-2001/osp2001-win-1.1.zip
https://stdio.ru/download/ssi-2001/osp2 ... .1-src.zip

Аватара пользователя
Fagear
Advanced Member
Сообщения: 1477
Зарегистрирован: 22.01.2010,11:23
Откуда: Москва, САО

Вклад в сообщество

Сообщение Fagear » 12.10.2018,11:45

Прошу прощения, что временно выпал из прогресса по проекту.
scg снова благодарю за труд, нужно будет протестировать работу софтины. Как раз есть подборка треков, которые бы надо воспроизвести и записать.
К слову, а DOS-версия осталась старой, её апдейт не планируется?

Между делом, готовлю к релизу DuoSID и пока сделал записи треков, которые хорошо дают псевдо-стерео:

scg
Full Member
Сообщения: 201
Зарегистрирован: 27.02.2017,23:35

Сообщение scg » 15.10.2018,17:53

Fagear писал(а):К слову, а DOS-версия осталась старой, её апдейт не планируется?
Я не планирую усложнять функциональность DOS версии. Предполагается, что она предназначена для оригинальной SSI-2001. :) Мне и так еле удалось в два сегмента влезть. Однако, косяк с воспроизведением там тоже был, и я его исправил.

Ответить