Еще один клон Радио-86РК
- воскресенье, 2 марта 2025 г. в 00:00:12
Как-то так получилось, что неожиданно у меня образовалось хобби – делать свои версии ретрокомпьютеров. Т.е. не просто найти схему, сдуть с нее пыль и спаять как это было когда-то придумано, а сделать свой вариант. Но обязательно с настоящим процессором и другими основными микросхемами, а не эмулятор на микроконтроллере.
Замечу, что мне интересен сам процесс сборки. Как-то пользоваться тем, что в итоге получается, я не вижу смысла.
Сегодня будет рассказ про Радио-86РК.
Про сам компьютер, который в свое время произвел фурор в среде советских радиолюбителей, сказано уже достаточно, повторяться не буду. Это рассказ про мою версию.
Итак, дошла у меня очередь до РК после всяких спектрумов. В свое время он прошел как-то мимо меня. В 86-м году я еще был слишком мал и не читал журнал «Радио», а когда стал постарше, всех домашних восьмибитников уже затмил великий Спектрум.
Делать я решил классическую версию 32кБ, но со следующими особенностями:
Процессор Z80. Он был у меня в наличии, и плюс к этому он по всем параметрам лучше i8080.
Выход на монитор VGA 640х480. Никаких телевизоров. 21 век все-таки.
Память на двух 41464 вместо 8 или 16 К565РУ… Эти (41464) тоже были у меня в наличии. Получается 64кБ, а не 32. Но это не важно.
Параллельный порт К580ВВ55 только один на клавиатуру – внешних устройств для подключения у меня нет, поэтому второй порт не пригодится.
Всякую мелкую логику реализовать в ПЛИС.
Монтаж проводами на макетной плате.
Вот и весь план. Набросал реально в уме эскиз будущей конструкции, заказал макетную плату размером А4 и основные микросхемы.
Когда все пришло, начал делать.
Плату разрезал по ширине так, чтобы примерно одна треть ушла на будущую клавиатуру, а две трети на «материнку».
Далее следовало разобраться с видеоконтроллером. В РК он реализован на К580ВГ75 (i8275). В те годы, когда придумали эту микросхему, от мониторов ожидали совсем не много, и по всем расчетам выходило, что для режима 640х480 этот контроллер должен работать на запредельной для себя скорости. Поэтому чтобы быть уверенным в успехе, я начал с небольшого макета, в котором можно было запрограммировать эту БИС и убедиться, что она будет работать. Вообще, я видел схемы, где это работало, но читал также, что не все экземпляры позволяют разгонять себя так.
Макет (прямо на будущей «материнке») получился такой:
В качестве основы взял STC8H8K64U. Написал нехитрый код и довольно быстро убедился, что никаких проблем нет, видеосигнал формируется, все работает.
Тут я сделаю небольшое отступление. Я заканчивал институт в 1995 году и темой моего диплома была программная эмуляция К580ВГ75. Я писал программу, которая позволяла загрузить конфигурацию в виртуальную ВГ75 и в окошке на экране увидеть работу микросхемы как бы на мониторе. Предполагалось, что после меня студенты будут делать лабораторные работы на этом стенде по теме видеоконтроллеров. Что там было потом на самом деле, я не знаю. И вот, спустя 30 лет, я встретился с этой микросхемой вживую.
Убедившись, что видеоконтроллер работает, я подумал, что убирать STC, которая уже подключена к шине данных и прочим сигналам, нет никакого смысла. Она еще может пригодиться в проекте.
В РК есть две ПЗУ. Одна стоит между видеконтроллером и монитором, и в ней хранится знакогенератор. Или, как сейчас говорят, фонт или шрифт – начертания символов на экране. Во второй ПЗУ записана программа с названием «Монитор». В те годы так называли то, что потом стало называться BIOS. Ну почти. Разница есть, но суть именно в том, что этой программе передается управление при старте компьютера. Помню, что в детстве, когда я смотрел в журналах на распечатки дампов, я реально не мог понять, где здесь телевизор, если это монитор. Соответствующего круга общения у меня тогда не было. Интернета тоже.
Итак, этот монитор я решил не прошивать в ПЗУ, а загружать в оперативную память, которой у меня предполагалось полные 64кБ, при старте компьютера. STC имеет достаточно флеш-памяти, чтобы хранить эти 2 кБайта в виде простого статического массива байтов, и она уже подключена. Это позволяет легко модифицировать код монитора без перезаписи ПЗУ, а это потребуется для точной настройки видеорежима.
Чуть позже я нашел еще одно применение этой опции. Дело в том, что РК имеет довольно странный алгоритм запуска. Монитор расположен по адресу F800H, а по сбросу процессор начинает работать с адреса 0000Н. Не знаю, что побудило авторов РК сделать так. Весомых аргументов для самодельного компьютера я не вижу. Тот же Спектрум начинает работу с нулевого адреса, где лежит его ПЗУ. Может быть авторы хотели, чтобы программисты могли использовать в своем коде команды типа RST n, которые запускают код в начальных адресах ОЗУ. Впрочем, это не такое уж нестандартное решение. Не только РК так был устроен. В компьютере предусмотрена специальная схема, которая при включении или сбросе «перемещает» ПЗУ на нулевой адрес, а после исполнения первой команды возвращает его обратно. Первая команда монитора, как это видно на скрине дампа, - это JP F836, т.е. переход к адресу F836H. Я просто «поручил» STC записать в ОЗУ не только сам монитор, но и эти три байта в самое начало ОЗУ. Таким образом, при старте процессор переходит к монитору самым естественным образом. А потом эти начальные адреса ОЗУ могут использоваться как обычно.
Тут конечно есть еще один момент. РК не очищает память при сбросе. Т.е. если программа загружена в ОЗУ и использует нулевые адреса, то сброс не испортит ее. А у меня получается, что испортит. Но это такое сомнительное преимущество. Надо прямо придумать кейс, где это важно. С другой стороны я мог сделать альтернативный сброс непосредственно на ЦПУ без STC. Тогда стартует код с нулевого адреса, а это для 90% программ процедура нормального старта. Можно запускать программы не вводом «G0 + Ввод», а просто аппаратной кнопкой. Но такую кнопку я так и не сделал.
Т.к. я использовал неродной процессор, то пришлось внести еще ряд изменений в схему. Для всякой логической мелочи использовал ПЛИС EPM3032, но как всегда пинов оказалось недостаточно, поэтому обычные микросхемы мелкой логики тоже появились в конструкции. В итоге получилось так:
Пока без клавиатуры и звука.
И вот такое на экране:
Компьютер запустился, но точно не нормально.
Было ощущение, что есть какие-то проблемы с ОЗУ. Может что-то с регенерацией. Я добавил в схему желтый светодиодик возле STC, а в саму STC процедурку проверки загрузки. Т.е. STC сначала загружает монитор в ОЗУ, а потом считывает его из ОЗУ обратно и проверяет. Если есть ошибки, то зажигает этот индикатор. Ошибки случались через раз, но как потом оказалось не из-за ОЗУ.
Потратив какое-то время на безуспешный поиск проблемы, я решил просто изменить схему и использовать статическое ОЗУ. Всего одна микросхема и никаких мультиплексоров с RAS&CAS.
Установил UM61512, и … стало совсем плохо. Компьютер вообще не запускался, хотя всякие самодельные тесты проходил. Т.е. процессор работал по загружаемым в ОЗУ тестовым программам, но изображения не было. Я только осциллографом мог видеть, что код исполняется правильно. Использовал для этого выход ЦПУ IORQ на котором выводил импульсы с заданной периодичностью. Видел логическим анализатором, что ЦПУ переходит к монитору и загружает конфигурацию в видеоконтроллер и контроллер клавиатуры. Но экран был или пустой или просто замусоренный.
Я наверно недели полторы мучился с ним пока постепенно не разобрался. Спасибо осциллографу и логическому анализатору. Схема в принципе была рабочая, но были проблемы с фазами сигналов. Проще говоря, микросхемы конфликтовали друг с другом на общих шинах или не успевали друг за другом. Еще пришлось добавить двунаправленный буфер К580ВА86 между шиной данных и STC. Нагрузка на пины оказалась слишком высокой (там единички очень слабые по току), что и приводило к ошибкам загрузки монитора. С буфером ошибки исчезли полностью. Попутно я заменил все SMD на DIP (кроме одной) и конструкция получилась уже такая:
Здесь уже есть звук и клавиатура, которая надевается вторым этажом так, что все выглядит следующим образом:
(Там рядом с кнопками видно индикатор рус/лат)
Ну и экран:
Все работает.
Контроллер клавиатуры я разместил на плате с кнопками. Сначала я думал, что это позволит упростить шлейф, т.к. в сторону ЦП смотрит только шина данных и несколько управляющих сигналов, а в сторону кнопок 24 провода, но в итоге использовал 40-пиновый разъем, а не шлейф. Можно было бы разместить микросхему вместе со всеми, но переделывать уже не стал.
Раскладка клавиш неоригинальная. Просто не хватило ширины для «нумпада» и кнопки стрелок и F1..F4 расположил в строке с пробелом. Получилось неудобно для игр. Об этом чуть ниже.
Отдельно стоит рассказать о звуке. Тут РК тоже отличился, использовав для звука выход процессора, который предназначен для информирования периферии о том разрешены сейчас прерывания или нет. У Z80 такого выхода нет. Есть этот флаг где-то внутри, но наружу не выходит. Поэтому нужна схема, которая перехватывает команды EI и DI и переключает состояние звукового выхода. Я ее реализовал на двух дешифраторах 74139 (ИД14 по-нашему). В сети есть вариант на мелкой логике, но он точно бы не работал хорошо, там используется только сигнал M1 Z80 и шина данных, но оказалось, что надо еще добавить проверку RD, иначе динамик будет похрюкивать. Видимо по шине данных перед командой гуляют остатки предыдущей выборки из ОЗУ.
Для знакогенератора использовал М27С128, емкость которой значительно больше чем нужно. Поэтому три старших адреса сидят на земле. Но мне не жалко, такая микросхема у меня уже была, не было смысла искать 2716 (попробуй еще найди ее по разумной цене).
Сам знакогенератор я взял от другой, более продвинутой, версии РК. Оригинальный вариант имеет шину символов 6 пикселей, что делает их довольно уродливыми. Но умельцы уже давно (почти сразу) разработали нормальную версию шириной 8 пикселей, которую я и применил.
Кроме того, пришлось увеличить высоту символов со стандартных 10 до максимальных 16 пикселей (строк экрана). Это потребовалось для согласования с частотой строк и кадров. Родных строк в кадре получалось слишком мало. Визуально это просто увеличенный интервал между символьными строками.
Цвет, как видно на картинках, использовал зеленый. Подумал, что так будет атмосфернее, словно монитор из той эпохи. Я знаю, что были версии РК с цветным монитором, но как и многое другое, что добавили энтузиасты в исходную конструкцию, это не получило широкого распространения, и программ, поддерживающих цвет очень мало.
Отдельно хочется рассказать про вход для загрузки программ с магнитофона. В оригинальной схеме используется операционный усилитель. Но я в очередной раз применил простой каскад на одном транзисторе BC547 с общим эмиттером. И как обычно он работает идеально. Не знаю в чем тут дело. Или транзисторы стали такие хорошие делать, или сигнал со смартфона такой замечательный, но работает сразу и очень хорошо. В Спектруме тоже так делал.
Выход на магнитофон не распаивал, хотя он есть. Мне просто нечего сохранять на «ленте».
STC не сильно загружена работой после старта. Используются только два таймера, которые делят писксельную частоту 25.175 МГц для получения сигналов синхронизации видео и ЦПУ. Примерно 3.1 и 1.75 МГц соответственно.
Логика, реализованная в ПЛИС, выглядит так:
Не особенно сложно и ресурсов в микросхеме осталось еще достаточно, чтобы разместить там все остальное, но вот свободных пинов слишком мало.
Каждый раз так получается. С другой стороны, «следующий размер» на 100 ног уже слишком большой.
К сожалению, программ для РК было написано очень мало по сравнению, например, со Спектрумом. Поэтому найти их не так-то просто. Многие ссылки с форумов 10-15 летней давности уже никуда не ведут. Но есть отличный онлайн-эмулятор РК rk86.ru. Там нет опции скачивания программ, но сайт довольно простой по конструкции. При запуске программы он просто загружает в браузер файл с кодом, который несложно найти по F12 и скачать отдельно.
А еще нашелся конвертор (rk2wav), который может превратить этот код в wav. Дальше уже просто.
Получив доступ к программам, я смог нормально протестировать свой РК.
Тут и оказалось, что мизерное несоответствие в работе с флагами между i8080 и Z80 приводит к неработоспособности большого количества программ. И все из-за одной стандартной процедуры монитора - вывода строки символов на экран. Даже из-за одной команды в нем. Я уже с тоской думал о самостоятельной пересборке монитора с исправлением, но тут мне попался другой эмулятор РК, в котором можно было выбрать версию процессора Z80. Монитор от этого эмулятора прекрасно решил проблему. Эмулятор Emu80 – спасибо его авторам, если они вдруг читают это.
Вообще осталось вероятность, что несовместимость будет в коде загружаемых программ, но тут уже ничего не поделать.
Окончательный вид такой:
На этот раз я заморочился с изготовлением корпуса из вспененного ПВХ. Не уверен, что это была хорошая идея (ПВХ), но получилось довольно хорошо, чего нельзя сказать о клавиатуре.
Хотя все кнопки работают, нажатие очень невнятное и играть вообще неудобно. Хорошо, что я и не планировал, а то бы пришлось переделывать. Раньше я делал клавиатуру для Спектрума на обычных тактовых кнопках. Она работала хорошо, но очень жестко. Сейчас я решил взять кнопки с мягкими «пипками». Надеялся, что будет лучше, но нет. Слишком большой ход и нет четкого нажатия.
Была еще мысль сделать джойстик. Использовать спектрумовский Синклер-джойстик, который будет просто замыкать кнопки клавиатуры через ключи на полевых транзисторах. Но т.к. сама-по себе конструкция обещала быть довольно скучной – просто пять одинаковых ключей по самой обычной схеме, а играть я не собирался, то решил не тратить время на это.
Кроме кнопок клавиатуры, на фасаде брутальная кнопка сброса и индикаторы питания и раскладки.
Окончательная схема компьютера выглядит так:
Вот ссылка на картинку в хорошем качестве, если кому-то интересно: здесь
Для любителей треша традиционное фото со стороны монтажа:
Печатной платы по понятным причинам не было и не будет. Тут весь интерес этой истории в том, чтобы на ходу пробовать разные варианты и искать решения проблем. Опыт показывает, что навесной монтаж для таких конструкции вполне себя оправдывает, если делать все аккуратно. Ну или хотя бы как я.
Всего получилось 18 микросхем против 29 в оригинальной конструкции. В свое время авторы очень гордились тем, что уложилсь в такое небольшое количество. В принципе, если бы у них были микросхемы SRAM как у меня, вышло бы тоже около 20. По большому счету, Радио-86РК - это компьютер, проще которого просто не могло быть в то время. В этом его сила и слабость. Легко сделать (если удалось купить все детали), но мало что можно на нем накодить интересного.