Прошивка ПЗУ 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

Продолжение следует...

#zx #spectrum