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

Описания, советы, ремонт, эксплуатация старых IBM PC-совместимых ПК
Аватара пользователя
uav1606
Advanced Member
Сообщения: 5969
Зарегистрирован: 16.01.2008,22:04
Откуда: Енакиево
Контактная информация:

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

Сообщение uav1606 » 29.03.2018,00:16

scg писал(а):Так и не разобрался как выделить память размером с сегмент или немного больше.
А с чем конкретно возникли проблемы?
Используются вот эти функции:
http://www.datadoctor.biz/data_recovery ... age23.html
Единственный нюанс, который я помню, это что по умолчанию DOS запускаемой программе (особенно это касается COM-файла) выделяет всю доступную память, и, соответственно, выделить её функцией 48h не получится. Помнится, я её сначала освобождал, а потом заново выделял. :-) Как-то так:

Код: Выделить всё

	mov ah,4ah 
	mov bx, 1000h
	int 21h
	
	mov ah, 48h
	mov bx, 100
	int 21h
	
	mov Buf1Addr, ax
Первая функция (4ah) уменьшает уже выделенную память, вторая её выделяет. Естественно, число 1000h подходило для моей маленькой программы, у Вас оно будет другое.

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

Сообщение scg » 29.03.2018,11:06

uav1606 писал(а):Единственный нюанс, который я помню, это что по умолчанию DOS запускаемой программе (особенно это касается COM-файла) выделяет всю доступную память, и, соответственно, выделить её функцией 48h не получится. Помнится, я её сначала освобождал, а потом заново выделял. :-)
Этого я не знал. С другой стороны, во-первых, не понятно, сколько нужно оставить памяти, тем более, что программа использует димамическое выделение объектов. А во-вторых, я правильно понимаю, что по умолчанию вся доступная память доступна для аллокатора c++? Однако, у меня не получается выделить 2 блока по 64К: по выходу из программы появляется о шибка о проблемах с памятью и невозможностью запустить command.com. На самом деле памяти нужно не очень много: 64K - RAM, 64K - ROM и IO, еще 64K временно на загрузку файла, плюс немного на динамические структуры и объекты. 640К действительно должно хватить, но не хвататет. Сейчас смотрю в сторону EMS.

Аватара пользователя
uav1606
Advanced Member
Сообщения: 5969
Зарегистрирован: 16.01.2008,22:04
Откуда: Енакиево
Контактная информация:

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

Сообщение uav1606 » 29.03.2018,14:16

А в C++ Вы потом память освобождаете через free? В конце программы?

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

Сообщение scg » 29.03.2018,14:45

uav1606
Разумеется. Только не через free(), а через delete.

Аватара пользователя
uav1606
Advanced Member
Сообщения: 5969
Зарегистрирован: 16.01.2008,22:04
Откуда: Енакиево
Контактная информация:

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

Сообщение uav1606 » 29.03.2018,16:17

Может, тогда попробуете через malloc и free? А то насчёт delete я вообще не уверен, под DOS'ом не пользовался. Если что, я сейчас про Turbo С++.

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

Сообщение scg » 30.03.2018,10:17

uav1606 писал(а):Может, тогда попробуете через malloc и free?
Как это ни странно, помог farmalloc() и только с huge указателем. Причем, превод компилятора в huge режим эффекта не давал. Пришлось менять типы указателей по всему коду. Удалось выделить два буфера для эмулятора процессора и загрузить файл SID. Посмотрим, что будет дальше.

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

Сообщение scg » 04.04.2018,00:11

Готов релиз для DOS версии: https://stdio.ru/download/ssi-2001/osp2001-0.1.zip
Поскольку исходники Open Cubic Player распространялись под лицензией GPL2, то я тоже обязан их опубликовать.
Исходный код и последние релизы можно найти здесь: https://stdio.ru/download/ssi-2001/

Было бы неплохо, если бы кто-нибудь проверил минимальную конфигурацию машины, на которой DOS проигрывателя cохранит работоспособность.
По поим ощущениям 20-30МГц должно хватить. Запас производительности можно прикинуть нажатием кнопки 'F' (Fast Forward). В этом случае симуляция не синхронизируется с таймером и идет с максимально возможной скоростью. Также, если запустить программу с ключом /V (verbose), то в строке времени отобразится поле TE (Timer Error). Его значение увеличивается каждый раз, когда прерывание от таймера приходит раньше чем завершится обработка предыдущего - то есть тормозит симуляция.

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

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

Сообщение Fagear » 06.04.2018,21:39

scg писал(а):Было бы неплохо, если бы кто-нибудь проверил минимальную конфигурацию машины, на которой DOS проигрывателя cохранит работоспособность.
Не сочтите за рекламу, но именно этим я сейчас займусь онлайн, вот тут.

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

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

Сообщение Fagear » 07.04.2018,21:10

scg писал(а):Было бы неплохо, если бы кто-нибудь проверил минимальную конфигурацию машины, на которой DOS проигрывателя cохранит работоспособность.
По поим ощущениям 20-30МГц должно хватить.
В общем, получил некоторые результаты.
Версию под win9x проверял вплоть до Pentium (на Socket 5) на частоте 60x1.5=90 МГц. Тянет без проблем, запас ещё большой по скорости.
Версия под DOS дала такие результаты: 386DX-33 хватает с минимальным запасом, 386SX-40 тоже вроде хватает, но запаса практически нет. 286-20 уже явно не хватает, воспроизведение заторможенное.

Сюрпризом же стало то, что оно завелось даже на TurboXT машине! Единственное, была выведена только одна строка (название композиции), а имя автора, копирайт и время не вывелось. Однако воспроизведение пошло! Пусть и ооооочень медленно, но тем не менее.

Однако, при ближайшем сравнении я обнаружил, что этот плеер звучит немного иначе, чем старый вариант под win9x под кодовым именем "ssidpl9x" (он же "ssid_w9x").
Вот один пример.
Кусок на ssid_w9x
Кусок на osp2001-win

На мой слух osp2001 съедает часть звуков, комбинированные звуки "рассыпаются" по времени, в целом звучит немного странно. Возможно, слишком редко отправляет данные в SID?

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

Сообщение scg » 07.04.2018,23:04

Fagear писал(а):В общем, получил некоторые результаты.
Спасибо, посмотрел запись вашего стрима. Я хоть и знал, что на 286-м он не пойдет, но надеялся до последнего. :)
Fagear писал(а):На мой слух osp2001 съедает часть звуков, комбинированные звуки "рассыпаются" по времени, в целом звучит немного странно. Возможно, слишком редко отправляет данные в SID?
По правде говоря, скорость обновления задается в заголовке файла, либо выставляется настройкой Коммодоровского таймера CIA1. И то и другое я учитываю. Тут нужно брать конкретный SID и разбираться.
С другой стороны, есть SID файлы, в которых передача данных на SID идет постоянно, поэтому требуется точная потактовая симуляция процессора 6510. Такие файлы называются RSID (Real SID) и у них специально изменен Magic Dword в заголовке, чтобы отличать их от обычных SID. Кроме Magic'ов эти два вида файлов никак не отличаются. Так вот, ssidpl9x умеет играть такие файлы, а osp2001 - нет (там симуляция процессора более грубая). Человек, который грабил этот SID вполне мог по ошибке указать неверный тип.
Тут, повторюсь, мне нужно где-то взять этот файл и поразбираться - возможно что и у меня баг.

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

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

Сообщение Fagear » 08.04.2018,07:56

scg писал(а):С другой стороны, есть SID файлы, в которых передача данных на SID идет постоянно, поэтому требуется точная потактовая симуляция процессора 6510. Такие файлы называются RSID (Real SID) и у них специально изменен Magic Dword в заголовке, чтобы отличать их от обычных SID.
Увы, я пока в технические детали ни эмуляции, ни формата *.SID не углублялся, но, если что, это был файл Zardax_One.sid. (Joe Barwick (Stainless Steel)).
Более широкого сравнения пока не проводил, потыкал только несколько треков.

Если позволите, есть немного пожеланий с софтине:
1) я пока не разобрался, как переключать несколько композиций внутри одного файла, софтина пишет что их несколько, но кнопок переключения не нашёл;
2) не пробовал пока, но предполагаю, что вряд ли заработает, поддержку файлов "_2SID", они явно ориентированы на воспроизведение на системах, где установлены сразу два чипа SID; ssidpl9x их не воспроизводит (по-моему вообще вылетает); как следствие - хотелось бы видеть ключи для задания I/O адреса для каждого из SID'ов (ну или хотя бы одного, если поддержка 2-х будет сложной или невозможной); P.S. Плагин к foobar2000 умеет воспроизводить такие "двойные" файлы.
3) в виду того, что я не разбирался в деталях эмуляции - я не в курсе... но всё же, есть какая-то возможность отследить, когда мелодия зацикливается? очень много *.SID'ов (которые, очевидно, были в качестве фоновой музыки) зацикливаются и когда пытаешься сделать их запись - сидишь гадаешь в неведении, где же этот стык... было бы отлично иметь либо индикацию "пошло по N кругу" или возможность остановки по факту зацикливания;
4) на какую частоту чипа SID рассчитывает плеер? DuoSID сейчас умеет и частоту C64 PAL, и частоту C64 NTSC, и частоту SSI-2001, и даже HardSID. Если есть возможность, то ключик для частоты тоже неплохо бы видеть;
5) приятно бы заиметь функции, аналогичные ssidpl9x: возможность отключать раздельно каждый "голос" чипа и фильтры; последнее особенно полезно для воспроизведения на "подбитых" чипах;

#зажрался

Ответить