Прошивка ПЗУ ZX Spectrum на Linux
Описан запуск программатора XGecu T48 (TL866-3G) на XUbuntu 22.04. Статья написана по материалам сайта https://boseji.com/posts/running-tl866ii-plus-in-manjaro/.
1. Длинное вступление, которое никто не читает
Началось всё довольно банально — в один не очень прекрасный день я пришел в мастерскую, привычным движением завел свой потрепанный жизнью спектрум (он у меня это... для вдохновения :)), старичок недовольно крякнул, зашуршал дисководом и выдал Disk Error.
Не менее привычным движением, попробовал поменять дискету, потом другую, потом поменял дисковод... В итоге разобрал старый комп и проверил на нем дисковод самого спектрума — увы, всё указывало на то, что накрылся контроллер. Вскрытие контроллера показало, что внутри всё очень интересно, но ничего не понятно. Тогда я еще не представлял, насколько глубока кроличья нора.
Замена ВГ-шки результатов не дала, а попытка поменять еще пару микросхем (наугад) привела к тому, что отвалилась половина дорожек на плате (шучу, отвалились вообще все дорожки, я талантливый).
Поскольку спектрум у меня не очень стандартный — выпущен производством НПП Волна — о готовых решениях и схемах можно забыть.
А с дискет загружаться хочется. Нет, конечно можно просто использовать эмулятор магнитофона, но это такой костыль, что прям обидно. Не говоря уже о том, что потрачено весьма приличное время на раскурку мануалов по TR-DOS (создать себе проблем и героически их решать — умею, практикую!).
В общем, решено, паяем новый контроллер!
Плюс у меня есть еще два спектрума, которые удалось найти на Авито. Первый — «Урал 64 Кб». В реальности 48 Кб. Потому что 16 Кб традиционно отведены под ПЗУ — маркетинг был силен уже тогда. Второй компьютер называется «BYTE» — это я рассчитывал получить модель с подробными схемами и инструкциями, в итоге же оказалось, что BYTE не имеет ничего общего с популярным «Байтом».
И для них тоже хочется дисковод. А схем контроллера под них нет. В итоге непонятно, откуда брать контакт DOS, который переключает Basic/TR-DOS. Для моей Волны методом исключения такой контакт был найден вдумчивой медитацией с мультиком и осликом над помершим контроллером. Для остальных компьютеров представляется более практичным зашить TR-DOS в основное ПЗУ рядом с бейсиком и организовать переключение между банками ПЗУ через вывод DOS контроллера.
Да... а еще прогресс не стоит на месте и появились например довольно дешевые W27C512 на 64 Кб, которые прошиваются и перепрошиваются электрически (не нужно развлекаться с УФ-лампами).
Под это дело купил программатор XGecu T48 (TL866-3G) — дорогой, конечно, но хотелось без лишних хлопот, как говорится, Plug and Play.
К сожалению, результат немного предсказуем — софт поддерживается только под Windows. Ставить ради этого отдельную винду не хочется, потому будем использовать Wine.
2. Начинаем установку
Часть шагов оригинальной статьи можно пропустить, потому что программу прошивальщика я буду запускать под sudo.
Итак, сначала устанавливаем сам wine и unrar
sudo apt update
sudo apt install wine unrarДалее скачиваем на официальном сайте http://www.xgecu.com/EN/download.html (XXI век, HTTP, ага). Файл допустим сохранили как XgproV1290_Setup.rar (зеркало).
Распаковываем
unrar x XgproV1290_Setup.rarЗапускаем wine (можно пока без sudo)
wine XgproV1290_Setup.exeКак будет у вас не знаю, мне немного не повезло и открылось окно с кракозябрами.

Но когда это нас останавливало! Меняем в строке (1) букву на C (у меня там был путь к D), нажимаем кнопку (2), ждем, после установки возможно будет ошибка, не обращаем внимания, нажимаем ОК.
Далее скачиваем библиотеку для wine (зеркало)
wget https://github.com/radiomanV/TL866/raw/refs/heads/master/wine/setupapi.dllи кладем ее в папку с программатором
cp setupapi.dll ~/.wine/drive_c/Xgpro/setupapi.dllТеперь подключаем программатор к USB и запускаем wine уже под sudo
sudo wine ~/.wine/drive_c/Xgpro/Xgpro.exeВидим заветное Programmer is connected

Всё, можно читать/прошивать!
3. Запуск под юзером
Если всё же хочется запускать через значки рабочего стола (wine заботливо их генерит), да и просто без sudo, то делаем
lsusbполучаем device/product id:
Bus 001 Device 004: ID a466:0a53 Haikou Xingong Electronics Co.,Ltd TL866II Plus Device Programmer [MiniPRO]теперь создаем файл:
sudo vi /etc/udev/rules.d/80-minipro.rulesсодержимое файла:
BUS!="usb", ACTION!="add", SUBSYSTEM!=="usb_device", GOTO="minipro_rules_end"
ATTRS{idVendor}=="a466", ATTRS{idProduct}=="0a53", MODE="0666"
LABEL="minipro_rules_end"Вместо a466 и 0a53 ставим свои значения.
Ребутаем udevadm
sudo udevadm triggerВсё, можно проверять!
wine ~/.wine/drive_c/Xgpro/Xgpro.exeПрограмматор должен определиться. Если не определился, то либо неправильно указали device/product id, либо нужен ребут компьютера.
И да, не забудьте вернуть владельца (если раньше запускали Xgpro.exe под sudo)
sudo chown -R user123 ~/.wine/drive_c/Xgpro/Xgpro.exeПродолжение следует...