Uzix | микроблог

Продолжение истории про отсутствие звуковых эффектов в Tyrian на Хароне...

Продолжение истории про отсутствие звуковых эффектов в Tyrian на Хароне-386. Чтобы убедиться, что дело не в ошибке в схеме или в разводке плат Харона, приобрёл одноплатный компьютер на базе такого же чипа M6117D. И оказалось, что на нём точно такая же проблема. Наверное, лучшим выходом было бы использовать в Хароне стандартный 386 процессор + чипсет, но китайцы таковые не продают, а распаивать старые платы ради новоделов у меня рука не поднимется.

Играюсь с воспроизведением MIDI-музыки на Хароне-386...

Играюсь с воспроизведением MIDI-музыки на Хароне-386 через COM-порт. Raspberry Pi 1, к сожалению, никак не поддерживается проектом MT32-PI (даже сборку под ARMv6 не делают), зато на Raspberry Pi 3 и на обычном Wintel ПК (через связку Hairless MIDI Serial Bridge + loopMIDI + Midi Player) всё удалось настроить влёт. В принципе, особого смысла в такой конфигурации нет – т.к. на Хароне есть довольно неплохой встроенный MIDI-синтезатор на SAM2695 – но заставить работать всю эту цепочку было интересно.

ZX MIDI Player v1.0

Представляю релиз первой версии моего проигрывателя MIDI файлов для ZX Spectrum.

ТТХ:

  • Работает на любом ZX Spectrum 128-совместимом компьютере с MIDI синтезатором;
  • Поддерживаются файлы размером до 64Кб форматов RMI и MID (типов 0 и 1);
  • Поддержка до 60 дорожек в файле. Для тяжёлых файлов желателен турбо режим процессора;
  • Поддерживается работа на 3.5, 3.54, 7, 14, 28 МГц (процессор должен работать без вейтов);
  • Поддержка загрузки файлов с BDI/TR-DOS. В планах работа с FAT32/SD-картами.

Проигрыватель протестирован на Sizif-512, ZX Evolution + Multisound и на ZX UNO 1010, но должен работать и на других компьютерах с TR-DOS. Так же можно запустить в эмуляторе - например, в Es.pectrum - в нём есть поддержка MIDI.

Проект с открытым исходным кодом, лицензия GPLv3.

Ссылка на исходный код: https://github.com/UzixLS/zx-midiplayer

Ссылка на скачивание: https://github.com/UzixLS/zx-midiplayer/releases

ПК-01 Львов...

ПК-01 Львов. Я нечасто покупаю ретро железо - предпочитаю паять новоделы - но тут было, прямо скажем, вкусное предложение, да ещё и в моём городе. Советский компьютер на базе процессора ВМ80 с 64КБ ОЗУ, практически мой ровесник.

Выложил свой вариант прошивки для ZXKit1...

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

Github: https://github.com/UzixLS/zxkit1-vga-scandoubler-firmware

Обсуждение на форуме zx-pk.ru: https://zx-pk.ru/threads/10548-zxkit1-plata-vga-amp-pal.html?p=1177544&viewfull=1#post1177544

Моя небольшая находка на али...

Моя небольшая находка на али - девайс, развязывающий земли соединённых аудиокабелем устройств.

Частая беда при подключении спектрумов или подобных устройств к линейному входу ПК - это фоновый гул, который зависит от выводимого этим устройством на экран изображения, при том при отключении видеовыхода этот гул пропадает. Происходит это из-за относительно больших токов, протекающих в цепях аналогового видеосигнала. А у любого тока есть прямой путь (от устройства к монитору) - это сигналы цветности RGB (или композитное видео, в зависимости от устройства) - и возвратный (от монитора у устройству) - земляной проводник. Т.к. видеокабели не идеальны и сопротивление земляной жилы в них не нулевое, то ток стремится растечься, достичь цели всеми возможными путями (пропорционально сопротивлению/падению напряжения каждого пути). Если земля монитора соединена с землёй ПК, а земля ПК с землёй нашего источника видеосигнала (например, через линейных вход) - то ток потечёт по этому пути, вызывая колебания напряжения на АЦП линейного входа. Называется это явление земляной петлёй.

Этот девайс как раз и делает то, что разрывает этот нежелательный путь. Схема на самом деле элементарная, но китайцы продают уже готовое и упакованное в красивый корпус. Найти его можно по ключевым словам “Ground Loop Noise Isolator”.

Столкнулся с неработоспособностью DOSLFN на Хароне...

Столкнулся с неработоспособностью DOSLFN на Хароне-386: программы с поддержкой длинных имён файлов либо не видели их, либо (если запущен EMM) падали с сообщением об ошибке. Сначала грешил на проблемную CF-карту, на битую память, на ошибку в схеме по части подключения CF, но в итоге стало понятно что проблема, скорее всего, программная. Я долго не хотел лезть в эту проблему т.к. совершенно ничего не знаю ни об отладке в MSDOS, ни даже ассемблера x86 (спойлер: если бы знал, проблема бы решилась спустя 30 минут после прочтения сообщения об ошибке). В общем, пришлось погрузиться в этот мир на пару вечеров. В обнимку с debug.exe (а позднее уже и Turbo Debugger) и документацией по DOS API, скачанной с самых задворков интернета, написал небольшую программку, которая всё что делает - это простое обращение к LFN API для поиска файла по длинному имени. Ожидаемо, на Хароне это обращение проваливалось - с ошибкой “файл не найден”, в то время как на любой другой машине проходило.

Долго ли, коротко ли - трассировка привела к замечательной функции в исходниках DOSLFN:

proc GlobbingEx
 mov di,[CurPathComp]
 xchg si,di
 call Globbing
 xchg si,di
 db 0D6h ;setalc
 or al,al
_glob_ret:
 ret
endp

Эта функция вызывается для каждого файла в каталоге и сопоставляет его длинное имя с искомым. И трассировка показала, что именно в этой функции есть странная инструкция “db 0D6h ;setalc”, которая на Хароне выполняется не так, как на других машинах! Оказалось, это недокументированная инструкция, которая по факту есть во всех процессорах начиная с 8086. Во всех, но, не в M6117D, который используется в Хароне! И который вроде как заявляется как полностью 386SX-совместимый. После замены этой инструкции на стандартную “sbb al,al”, которая делает то же самое, но занимает на 1 байт больше места (вот так “экономия”!), DOSLFN прекрасно заработал. Вот такой мини-детектив. Письмо мейнтейнеру DOSLFN я написал, надеюсь, это исправление войдёт в следующую версию.

Давненько ничего не писал про Харон-386...

Давненько ничего не писал про Харон-386. Ещё в прошлом году столкнулся с проблемой в работе звукового чипа ES1868 - назначался неправильный IRQ при загрузке драйвера. Т.е., например, драйвер назначает карте IRQ 5, а она оказывается на IRQ 7. Искал проблему в схеме, на плате, перебирал драйвера, перечитывал документацию, прозванивал, сравнивал с аналогичными картами - всё без результата. Так и забросил на полку почти на полгода. Сейчас просто решил сдуть чип и запаять другой - и всё завелось как надо… Что это было? Может быть перемаркировка другого чипа, или, может быть на заводе зашили другое содержимое встроенного ПЗУ (в котором и хранятся номера IRQ) - непонятно.

Движемся дальше - нет звуковых эффектов в Tyrian (а MIDI/FM музыка есть). Посмотрим сколько времени займёт эта проблема…