Uzix | микроблог

#Kharon-386

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

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

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

Подружил Выдру...

Подружил Выдру (ака OtterlyMIDI) с Хароном. У Харона нет миди выхода (точнее, к нему подключен миди чип внутри самого компа), но есть COM-порт, на который с помощью драйвера SoftMPU можно виртуально перенаправить выход миди. Совместимость этого драйвера далеко не 100%, но Monkey Island запускается и поёт :)

А теперь грустная новость: MT32-PI - титанический проект, на чьих плечах стоит OtterlyMIDI - похоже, всё https://t.me/yellow_room_nerdcave/1166 :-(

Релиз Kharon-386

Публикую свой небольшой хобби-проект - Kharon-386. Это миниатюрный IBM-PC совместимый компьютер с 386 процессором, интегрированным VGA видео и звуком.

Технические характеристики:

  • M6117D SoC со встроенным ядром 386SX40 (по большей части совместимым с обычным i386) и чипсетом M1217B
  • 4 Мб ОЗУ
  • TVGA9000i VGA видео
  • ES1868F SoundBlasterPro-совместимый звук
  • SAM2695 MIDI-синтезатор
  • ESP8266 WiFi-модуль
  • PS/2 разъёмы для мыши и клавиатуры
  • 2xCOM порты
  • Слот CompactFlash
  • Встроенные часы с батарейкой
  • PC-спикер
  • Питание от microUSB БП 5.1В (можно использовать БП от Raspberry Pi)
  • Две четырёхслойные печатные платы размером 10x10см + печатная плата передней/задней заглушки корпуса
  • Корпус G738 или G706

Проект открытый и некоммерческий, исходники распространяются под лицензией CC-BY-SA-4.0. Все исходные файлы, файлы для производства и прочая информация доступны по ссылке:

https://github.com/UzixLS/pc-kharon-386

Продолжение истории про отсутствие звуковых эффектов в 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 – но заставить работать всю эту цепочку было интересно.

Столкнулся с неработоспособностью 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 музыка есть). Посмотрим сколько времени займёт эта проблема…

Наладил TCP/IP через WiFi на Хароне...

Наладил TCP/IP через WiFi на Хароне, но пока весьма костыльным способом - поднял на Linux-машине SLIP-туннель на виртуальном последовательном порте, расшарил с помощью socat этот порт через TCP, на Хароне в WiFi-модем залил прошивку Zimodem, подключился через неё на этот TCP-порт, и, наконец, подключил к COM-порту wifi-модема пакетный драйвер с поддержкой SLIP - ethersl. В общем, “в зайце утка, в утке яйцо”… Эту цепочку можно сильно сократить если использовать прошивку esp_slip_router, но этим займусь уже потом.