Uzix | микроблог

#Pc

Сдул пыль со старого проекта - PCI-OPL3...

Сдул пыль со старого проекта - PCI-OPL3. Полтора года назад остановился на том, что в некотором софте карта определяется через раз. Как работает алгоритм детекта? Код записывает значение в регистр чипа OPL для запуска таймера, ждёт некоторое время, а затем читает регистр статуса - переполнился таймер или нет. Чтение и запись регистров на карте работают стабильно и без ошибок. Но, как оказалось, слишком быстро. Чтобы не реализовывать полноценную задержку на системном таймере, авторы некоторого софта полагались на то, что длительность инструкции чтения/записи регистров будет фиксирована, и для создания задержки просто делали несколько чтений в цикле. Для ISA это работало, для PCI уже нет.

В своей карте я применил PCI-ISA мост CH365P. Он довольно примитивный и не умеет растягивать I/O циклы, а значит это придётся делать софтово. Для этого вместе с кодексом я набросал простой драйвер, который через EMM386 перехватывает обращения к портам карты и вставляет дополнительные циклы ожидания.

На первый взгляд это работает нормально. Попроверяю ещё - и можно релизить.

Раздумываю над следующей ревизией Харона 386...

Раздумываю над следующей ревизией Харона 386. Предварительно хочу добавить на борт 8 Мб ОЗУ, видео на Сirrus Logic вместо Trident, PicoGUS (вместе с текущим звуком от ESS), выход MIDI, питание от USB Type C и SD-карту вместо Compact Flash.

К последнему больше всего вопросов - опенсорсных переходников IDE/SD мне найти не удалось, а микросхем, которые применяются на широко доступных китайских конвертерах, в открытой продаже нет. Придётся изобретать свой софт и железо для такого переходника, а т.к. экспериментировать на плате Харона - дорогое удовольствие - то нарисовал отдельную плату под это дело, на базе микроконтроллера RP2350. Если всё получится, встрою её на будущий Харон.

Запустил пикогуся...

Запустил пикогуся. Пришлось повозиться с пайкой RP2040 - всё же QFN пока даётся мне сложно - но результат того стоил. С GUS я раньше не был знаком и для меня стало сюрпризом, что с ним 386 без запинок тянет даже тяжёлые треки в формате XM с кучей каналов - с любой другой звуковой картой плеер упирается в процессор и результат варьируется от “иногда икает, можно слушать” до “можно слушать только заткнув уши”.

Бонусом GUS довольно неплохо умеет играть MIDI-файлы, хотя я не уверен, что он сможет потягаться со специализированным синтезатором на SAM2695 или, тем более, внешним синтезатором с SF2-банками по несколько сотен мегабайт. Пока что жду пока приедет последний оставшийся чип - регулятор громкости для SAM2695, тогда и можно будет послушать.

Откопал в запасах одноплатный компьютер...

Откопал в запасах одноплатный компьютер. Это практически полноценная 386 машина с шиной PC/104, памятью. накопителем и видео на борту, только звука не хватает. Звук под PC/104 в продаже найти практически невозможно, а открытых проектов, которые можно было бы воспроизвести, кот наплакал. Поэтому переразвёл под эту шину карту PicoGUS.

PicoGUS (https://github.com/polpo/picogus) - открытый проект звуковой карты за авторством Ian Scott под шину ISA на базе микроконтроллера RP2040. Эта карта реализует GUS (Gravis Ultrasound), Sound Blaster 2.0, AdLib (OPL2), CMS/Game Blaster, звук Tandy, MPU-401 (ака MIDI выход), а так же позволяет подключать USB-джойстик. На оригинальной плате ещё предусмотрен разъём для дочерних плат MIDI, но в своём варианте я вместо него сразу на борту разместил синтезатор SAM2695.

Одна беда у этой карты - плата на 4 слоя, а в PCBWave за всё что больше 2 слоёв хотят каких-то неразумных денег.

Собрал открытый стенд на сокете 370...

Собрал открытый стенд на сокете 370 с AGP, PCI и ISA слотами. Удобная штука оказалась, можно свободно работать с крупными исашными платами прямо на ходу, не боясь что они будут колыхаться как парус от каждого прикосновения. По этому поводу починил давно уже валяющуюся SB16 CT2700 (одна из тех моделей, на которые ещё ставили настоящий чип OPL3. Позднее его заменили на спорный CQM).

Запаял новую плату - карту OPL3...

Запаял новую плату - карту OPL3 (грубо говоря, AdLib) на шину PCI. Запустилась почти что с первой попытки - если не считать перевёрнутого танталового конденсатора и неисправного ЦАП YAC512 с али. Но конденсатор был легко перепаян за несколько секунд (и он даже не взорвался т.к. не хватило тока от маломощного стабилизатора), а неисправный ЦАП заменён на вполне живой. И вот, она запела! :-)

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

Давно не садился за электронное хобби...

Давно не садился за электронное хобби, но сегодня решил сдуть пыль с пары небольших давно готовых проектов, оформить и опубликовать их:

Компактный бэкплейн ISA16: https://github.com/UzixLS/pc-isa16-backplane

Переходник PC104-ISA16: https://github.com/UzixLS/pc104-isa-adapter

Результат немного предсказуем...

Результат немного предсказуем. Но вот что я не мог предсказать - что цвета после каждого сброса будут меняться - всего насчитал 4 варианта. Похоже, что при каждом сбросе фаза выводимых пикселей относительно color burst смещается. Наверное, можно было бы организовать коррекцию фазы на ПЛИС… Штош, не очень то и хотелось :)