Spectrum-совместимые компьютеры «Байт»,«Байт-01» и прочие раритеты

8 / 4 240

Компьютер ЮТ-88

В 1989-1990 годах в приложении к журналу "Юный техник" был опубликован цикл статей о радиолюбительском компьютере "ЮТ-88" на основе процессора КР580ВМ80. Отличительной особенностью была возможность сборки компьютера поэтапно.

Обложка спецномера «ЮТ Для умелых рук №2/1989», посвящённого компьютеру «ЮТ-88»
Обложка спецномера «ЮТ Для умелых рук №2/1989», посвящённого компьютеру «ЮТ-88»

Компьютер минимальной конфигурации

Сначала предлагалось собрать компьютер в так называемой "минимальной конфигурации" - 1КБ ОЗУ, 1КБ ПЗУ, вывод информации на 6-разрядный семисегментный светодиодный индикатор. Ввод информации с клавиатуры из 17 клавиш (16 клавиш для ввода 16-ричного числа и одна клавиша "шаг назад" для перемещения на один байт назад). В ПЗУ размещалась простая программа-монитор, которая, несмотря на малый объём, позволяла программировать в 16-ричных кодах и даже загружать/выгружать программы на ленту. К слову, несмотря на кажущуюся убогость такого программирования, я сам когда-то начинал знакомиться с ассемблером для Z-80 программируя в 16-ричных кодах, и не считал это сильно неудобным. В компьютере была своя система прерываний, один раз в секуду. Это нужно было для хода программных часов, при этом время могло выводиться на индикаторы.

Авторский вариант ЮТ-88 минимальной конфигурации (из журнала «ЮТ Для умелых рук №2/1989»)
Авторский вариант ЮТ-88 минимальной конфигурации (из журнала «ЮТ Для умелых рук №2/1989»)

Компьютер не имел возможность воспроизводить звук, но это легко обходилось тем, что можно было выводить звук через магнитофонный порт. Для этого включали магнитофон на запись в режиме паузы. Одной из первых программ, демонстрирующих возможности компьютера, была программа "гамма" для проигрывания звуков различной тональности.

Немного о схемотехнике компьютера "минимальной конфигурации":
Схема проста - процессор КР580ВМ80, задающий генератор КР580ГФ24, шинный формирователь КР580ВК38, буферы шины адреса КР580ИР82, ПЗУ на двух КР556РТ5, ОЗУ на двух КР541РУ2, адресный дешифратор на К155ИД3. В компьютере вся память была разбита на сегменты по 4КБ, и таким образом одной К155ИД3 можно было делать выборку для любого из 16 сегментов памяти (или портов). Для уменьшения количества корпусов в качестве формирователей кода нажатой клавиши использовались две КР556РТ4, а для индикатора использовалась К155РЕ3, запрограммированная как преобразователь 4-разрядного двоичного кода в код для семисегментного индикатора. Индикаторы были включены в динамическом режиме, для чего автором остроумно были использованы две микросхемы ОЗУ К155РП1:

К155РП1

Не знаю как тогда, в 1989 году, но сейчас я эти раритеты не смог найти, пришлось делать замену, но об этом позже. Ещё было пару микросхем мелкой логики. И всё.

Уже потом выяснилось, что К155РП1 вроде бы можно заменить на К155ИР32 или ИР26 без доработок, т.е. "один в один". К155ИР32 от ИР26 отличается только тем, что имеет выходы с открытым коллектором.

Пару слов о ПЗУ. В своё время, читая все эти публикации про самодельные компьютеры, у меня появлялся вопрос - а как же программировать ПЗУ? Уже потом, изучив этот вопрос более основательно, я смог найти и схемы программаторов, и в конце-концов сделать самому универсальный программатор для ZX-Spectrum, который "шьёт" почти все УФ-ПЗУ и ПЗУ 556-й серии. Но тогда вопрос о программировании ПЗУ стоял остро. Хорошо было тем, кто мог отдать ПЗУ на какой-нибудь завод и "по знакомству" запрограммировать его. Но с моей точки зрения было бы правильнее сначала дать хотя бы минимальную информацию об этом вопросе. К слову, статьи по программированию К155РЕ3 появились только в номере №2/1991, а по программированию КР556РТ4 - в №6/1991 журнала. Впрочем если не брать в расчёт ПЗУ, то в параллели с публикацией описания конструкции компьютера были даны справочные материалы по основным микросхемам компьютера.

Вдобавок ко всему в журнале были ошибки как в схемах, так и в описаниях, что осложняло сборку. К тому же многие радиолюбители испытывали сложности с приобретением некоторых микросхем (той же К155РП1). Поэтому в №12/1989 журнала была опубликована статья "Отвечаем на вопросы", где были исправлены ошибки предыдущих публикаций и была дана схема компьютера на элементной базе, которую было проще найти.

Для компьютера даже была разработана дополнительная прошивка ПЗУ для арифметических операций (№3/1989 "ЮТ-88 в роли калькулятора"). ПЗУ представляло собой библиотеку подпрограмм как для простых вычислений, так и для вычисления тригонометрических, показательных и логарифмических функций для чисел с плавающей запятой. Исходные данные записывались в определённые ячейки памяти, вызывалась нужная подпрограмма, результат помещался тоже в ячейки памяти. Для работы ЮТ-88 в роли калькулятора нужно было впаять в схему дополнительное ПЗУ на 2КБ.

Видеоконтроллер

Следующим шагом было оснащение компьютера видеоконтроллером и полноценной клавиатурой. Как ни крути, но на одних индикаторах далеко не уедешь. В №4/1989 журнала появилась статья "От индикаторов к экрану", где описывалось как добавить к компьютеру простой видеоконтроллер.

Авторский вариант видеоконтроллера (из журнала «ЮТ Для умелых рук» №4/1989)
Авторский вариант видеоконтроллера (из журнала «ЮТ Для умелых рук» №4/1989)

Схема похожа на схему замены КР580ВГ75 для "Радио-86РК" (Журнал "Радио" №5,6/1987г). Принцип работы видеоконтроллера таков - имеется своё собственное видео-ОЗУ объёмом 2КБ, к которому может обращаться как процессор, так и сам видеоконтроллер. Процессору отдан наивысший приоритет, т.е. в момент обращения процессора к видеопамяти вывод изображения на экран приостанавливается. Визуально это проявляется в небольших помехах (мусор на экране):

Помехи на мониторе в момент записи в экранное ОЗУ

В те моменты, когда процессор не обращается к видеопамяти, видеоконтроллер сканирует всё видео-ОЗУ, выводя параллельно из него изображение на экран. Схема сканирования выполнена на куче счётчиков. Данные из видео-ОЗУ посылаются на ПЗУ знакогенератора, где закодированы графические изображения символов, которые свою очередь отправляются на сдвиговый регистр (К155ИР13), с выхода которого посылаются на экран телевизора. В ПЗУ "прошит" знакогенератор на 128 символов (точно такой, как в Радио-86РК). Для выбора кода символа используются 7 бит, а оставшийся 8-й бит применяется как признак наличия курсора в данной ячейке видео-ОЗУ.

Зато видеоконтроллер выполнен в виде самостоятельного устройства, которое жёстко не привязано к остальной схеме компьютера и работает по сути само по себе. Его можно подключить к чему угодно, хоть к микрокалькулятору, и оно будет исправно показывать изображение на экране монитора или телевизора :)

Экран в ЮТ-88 разбит на 28 строк по 64 символа в строке. Однако на самом деле видео-ОЗУ объёмом в 2КБ позволяет адресовать 32 строки (32*64=2048). При наладке ЮТ-88, покрутив настройки монитора, можно добиться видимости всех 32 строк.

Полноценная клавиатура включает в себя матрицу 7*8 кнопок (56 шт) и три дополнительных клавиши (РУС, СС, УС). Обращение к клавиатуре реализовано через порт на КР580ВВ55.

Вместе с видеоконтроллером расширялось основное ОЗУ на 1КБ и добавлялось ещё одно ПЗУ на 2КБ, где был записан монитор для обслуживания видеоконтроллера ("Монитор-F"). Таким образом количество ПЗУ в компьютере уже достигло трёх штук. Потом ОЗУ расширялось ещё на 2КБ, потому что имеющегося ОЗУ могло быть недостаточно для работы программ.

В качестве тестовой программы для проверки функционирования видеоконтроллера предлагалась игра "Тетрис".

ЮТ-88, экран игры Тетрис

Монитор-F мог работать как совместно с монитором-0, так и без него. Основная проблема была в том, что монитор-F стартовал с адреса #F800, а по сбросу процессор начинал работу с адреса #0000. Например, для обхода этой проблемы в компьютере "Радио-86РК" был предложено изящное решение, когда по сбросу в адресное пространство ОЗУ с адреса #0000 подставлялось содержимое ПЗУ монитора (сам монитор находился по адресу #F800), а после выполнения первой команды монитора (JP #F836) конфигурация адресного пространства возвращается в нормальное состояние. В ЮТ-88 предлагалось загружаться со включенным монитором-0, стартовать из него монитор-F, затем тубмлером отключить ПЗУ с монитор-0 и включить на его место ОЗУ. Потом вручную занести по адресу #0000 команду перехода на монитор-F и по адресу #0038 (обработчик прерываний) команду перехода на обработчик прерываний монитора-F. Лишь тогда по сбросу можно было перейти прямо на монитор-F. Вот так вот.

Распределение памяти

Карта памяти компьютера неоднородна:

#0000-#03FF - ПЗУ монитор-0 (1КБ)
#0400-#0FFF - повторяется три раза монитор-0 (1КБ) (при условии, что не установлено ПЗУ с калькулятором)
#0800-#0FFF - ПЗУ с калькулятором

#3000-#7FFF - дополнительное ОЗУ для монитора-F (2КБ)
#3800-#3FFF - повторяется дополнительное ОЗУ для монитора-F

#9000,#9001,#9002 - семисегментые индикаторы

#C000-#C3FF - ОЗУ монитора-0 (1КБ)
#C400-#CFFF - повторяется 3 раза ОЗУ монитора-0

#E000-#E7FF - видео-ОЗУ (2КБ)
#E800-#EFFF - повторяется видео-ОЗУ (2КБ)
#F400-#F7FF - ОЗУ монитора-F (1КБ)
#F800-#FFFF - ПЗУ монитор-F

Мириться с такой организацией памяти было нельзя, поэтому в журнале №11/1989г появилась статья "Модуль дополнительного ОЗУ". В ней предлагалось расширить ОЗУ компьютера до 64КБ на восьми микросхемах КР565РУ5. Теперь адресное пространство ОЗУ становилось непрерывным. Все прежние установленные микросхемы ОЗУ можно было отключить или вообще выкинуть из схемы, за исключением видео-ОЗУ.

Операционная система "ОС ЮТ-88"

Описанию операционных систем для ЮТ-88 был посвящён целый номер журнала (№2/1990г)

Для "ЮТ-88" была своя простая ОС под названием "ОС ЮТ-88". Она представляла собой собственный монитор, отладчик, редактор и ассемблер. Собственный монитор работал вместо монитора-F, поэтому ПЗУ с монитором-F надо было отключать. Реально это выглядело следующим образом - ОС представляла собой загрузочный модуль, который после запуска предлагал отключить все ПЗУ и включить непрерывное адресное пространство ОЗУ #0000-#FFFF. Естественно это надо было делать тумблерами. После этого загрузчик "рассовывал" компоненты ОС на свои места в памяти и запускал монитор. Монитор был с более расширенными возможностями по сравнению с монитором-F.

"ОС ЮТ-88" не является полноценной операционной системой, т.к. нет файловой организации программ и данных.

Операционная система "CP/M"

Для "ЮТ-88" даже была адаптирована ОС CP/M (под названием "CP/M 64"). Ввиду отсутствия дискового интерфейса работа с файлами преполагалась через квазидиск, который был расположен в памяти компьютера. Сами файлы могли загружаться или записываться на ленту. Квазидиск мог быть разного объёма - от 64КБ до 256КБ. Нужно было добавить к имеющейся памяти ещё несколько КР565РУ5 (для квазидиска на 64К - 8 микросхем памяти, 128К - 16 микросхем и т.д.) и небольшую схему управления памятью. Доступ к квазидиску осуществляется через стек. Естественно, что после выключения питания компьютера вся информация на квазидиске терялась. В журнале высказывалось предложение автономного питания квазидиска от автомобильного аккумулятора, чтобы не приходилось после включения компьютера перезагружать все программы заново.

Если не было возможности спаять квазидиск, автором предлагалась немного переделанная версия системы CP/M 35, которая работала только с основной памятью компьютера.

На данный момент добиться полной работоспособности ОС ЮТ-88 и CP/M мне не удалось. Так что в компьютере, описание которого будет ниже, эти системы присутствуют чисто для ознакомления с их интерфейсом :)

Квазидиск

Очень интересная идея для организации хранения данных на дополнительном ОЗУ. Реализации идеи способствует тот факт, что компьютер построен на процессоре КР580ВМ80. Суть квазидиска в том, что доступ к нему организуется через стек и никак более.

Почему КР580ВМ80? Дело в том, что процессор не имеет "на борту" контроллера для организации шины управления. В нём нет, как в Z80 готовых выходов для обращения к памяти и внешним устройствам. Для КР580ВМ80 эти сигналы формирует внешний контроллер, в ЮТ-88 это специализированная микросхема КР580ВК38. По сигналу /STB (который является синхронизированным с тактовой частотой проинвертированным сигналом SYNC) процессор через шину данных передаёт так называемое управляющее слово, в котором "зашифрован" текущий режим работы. Это слово распознаётся контроллером КР580ВК38, и он формирует на своих выходах требуемые сигналы (чтение/запись, память/внешнее устройство).

В управляющем слове бит D2=1 означает операции работы со стеком. Поэтому для обращения к памяти квазидиска берётся бит 2 шины данных процессора, выделяется из управляющего слова, и в момент работы со стеком основное ОЗУ откючается и вместо него подставляется ОЗУ квазидиска.

На практике это выглядит так: допустим требуется записать в квазидиск по адресам #0000 и #0001 два байта - #11 и #22. Для этого делаем следующие операции:

1) Включаем возможность работы с квазидиском. Записываем в порт #40 требуемое значение. Оно зависит от той области данных квазидиска, доступ к которой нужно получить. Квазидиск разбит на куски объёмом по 64КБ. Бит 0=0 включает первые 64К квазидиска. Бит 1=0 включает вторые 64К квазидиска, бит 2=0 включает третьи 64К квазидиска и бит 3=0 включает четвертые 64К квазидиска. Итого квазидиск может иметь объём от 64К до 256К. Одновременная установка нескольких бит порта #40 в 0 не допускается!
В нашем случае требуется доступ к первым 64К памяти квазидиска, поэтому пишем в порт #40 значение %11111110 или 254 в десятичной форме:
LD A,#FE
OUT (#40),A

2) ОЗУ квазидиска нельзя "увидеть" кроме как через операции работы со стеком. Поэтому для записи данных на квазидиск может использоваться команда PUSH (я совсем не силён в мнемониках команд ВМ80, поэтому программирую для ВМ80 на Спектруме, где используются мненоники команд Z80). Команда PUSH сохраняет на стек сразу два байта данных и работает по следующем алгоритму:

SP=SP-1
старший байт регистровой пары -> (SP)
SP=SP-1
младший байт регистровой пары -> (SP)

Для записи требуемых значений делаем так:
LD SP,#0002
LD HL,#2211
PUSH HL

3) Выключаем доступ к квазидиску:
LD A,#FF
OUT (#40),A

4) Для извлечения записанных данных с адреса #0000 квазидиска делаем следующие операции:
LD A,#FE
OUT (#40),A
LD SP,#0000
POP HL
На выходе будет L=#11, H=#22

Дополнительная периферия

Для "ЮТ-88" можно было собрать программатор для ПЗУ К573РФ2(5). Схема программатора и управляющая программа были опубликованы с журнале №5/1990г.

Немного справочной информации:

Коды клавиш в компьютере минимальной конфигурации:

Клавиша "0" - #10
Клавиша "1" - #01
...
Клавиша "F" - #0F
Клавиша "ШН" - #80
Не нажата никакая клавиша - из порта читается #00

Порты КР580ВВ5 (расширенная клавиатура):

Порт A - #07
Порт B - #06
Порт C - #05
РУС - #04

Порт клавиатуры (в компьютере минимальной конфигурации) - #A0 (ввод)
Чтение с ленты - #B0 (ввод, бит 0)
Запись на ленту - #B0 (вывод, бит 0)
Порт для включения квазидиска - #40 (вывод)

Нововведение - звуковой синтезатор на КР580ВИ53. Принцип работы такой же, как компьютере "Байт" - деление частоты (в данном случае 1,77 МГц) и вывод трёхканального звука. В данный момент звуковой синтезатор не поддерживается ни в одном из мониторов (0 и F), но есть демонстрационная программа под названием Decode, которая из-под Monitor-0 проигрывает мелодию на КР580ВИ53. Программу можно скачать (или посмотреть и послушать как она работает) здесь.
Порты трёх каналов ВИ53 - #50, #51, #52
Управляющий регистр ВИ53 - #53

Не забываем, что как и в случае с ВИ53 в компьютере "Байт", в ЮТ-88 при включении питания из динамика будут раздаваться неприятные звуки. Для устранения этого необходимо при старте компьютера глушить ВИ53 так же, как это сделано в "Байте". С поправкой на порты ЮТ-88 это можно сделать следующим образом:

      LD A,#3A
      OUT (#53),A
      ADD A,#40
      OUT (#53),A
      ADD A,#40
      OUT (#53),A

Этот код необходимо встроить в самое начало Monitor-0. В моём самодельном ЮТ-88 этот код встроен в начальный загрузчик.

Программное обеспечение

Количество программ, написанных или адаптированных для ЮТ-88 весьма скудно, но благодаря энтузиазму пользователей форума zx.pk.ru дело постепенно поправляется.

Список программ для ЮТ-88 вынесен на отдельную страницу.

Самодельный компьютер "ЮТ-88"

Собственно говоря ради этого и была создана эта страница :)

Ввиду редкости и экзотичности компьютера я решил собрать его. Однако схему компьютера пришлось несколько переделать по нескольким причинам:
- не все микросхемы удалось найти (в частности К155РП1)
- чтобы не заморачиваться с пайкой огромного количества микросхем ОЗУ я решил сделать всю память на статических ОЗУ.
- чтобы уйти от кучи тумблеров для выбора конфигурации я решил всё ПО "засунуть" в одно ПЗУ, написать свой загрузчик конфигурации, а для управления всем этим добром ввёл дополнительный порт с адресом #B0.

Схему компьютера можно скачать в конце этой страницы.

Кратко опишу схему:
Нумерация микросхем дана вразброс, потому что приходилось компоновать одну схему из нескольких.
Процессор DD1 (КР580ВМ80) тактируется от генератора DD2 (КР580ГФ24). На DD3 (К176ИЕ5) сделан генератор импульсов прерываний. Шинный формирователь DD8 (КР580ВК38) буферирует шину данных и вырабатывает сигналы управления доступом к памяти и портам. На DD5,DD6 (КР580ИР82) сделаны буферы для шины адреса. DD7 (К155ИД3) выбирает к какому сегменту памяти (сегменты по 4КБ) идёт обращение, параллельно она же выбирает номер порта (при обращении к портам адрес порта дублируется на старших разрядах A8-A15 шины адреса). DD221,DD223,DD225 (КР1533ИР37) - в них записывается выводимая на индикаторы информация (один индикатор - половинка порта). Динамическое отображение информации на индикаторах выполнено на DD220,DD219,DD218,DD222,DD224,DD226. DD23 (К155РЕ3) преобразует 4-разрядный код в код для сегментов индикатора. Я использовал индикатор с общим анодом, поэтому для обеспечения достаточного тока для сегментов индикатора используется повторитель DD228 (КР1533ЛП16). На DD209 (КР1533ИД7) сделан дешифратор для записи в регистры индикатора. В минимальной конфигурации для формирования кодов клавиатуры используются ПЗУ DD15,DD16 (КР556РТ4).

Порт для выбора конфигурации сделан на DD207 (КР1533ИР35). На DD210 (КР1533КП12) сделана схема выбора обращения к ПЗУ/ОЗУ в зависимости от того, какая конфигурация в данный момент выбрана. DD211 (КР1533КП11) управляет микросхемами ОЗУ (ОЗУ сделано на микросхемах по 32К, поэтому DD211 выбирает в зависимости от А15 какая микросхема ОЗУ должна работать). DD243 (КР1533КП16) управляет выбором страниц ПЗУ (по 4КБ).

На микросхеме DD105 (КР580ВИ53) выполнен звуковой синтезатор. Обращаю внимание, что при включении компьютера из-за особенностей работы КР580ВИ53 из динамика будет раздаваться мерзкий писк. Поэтому при старте машины микросхему необходимо "глушить", например, как на компьютере "Байт". В моём случае процедура глушения внесена в начальный загрузчик компьютера.

Видеоконтроллер выполнен почти без изменений, как в журнале.

DD244 (КР1533ТМ2) управляет доступом к квазидиску. DD119 (КР580ВВ55) - клавиатурный порт.

Список портов компьютера и их описание есть на схеме.

По сбросу компьютера запускается загрузчик, из которого можно выбрать в каком режиме будет работать компьютер. Сам загрузчик написан на ZX-Spectrum.

Компьютер собран на макетной плате.

Самодельный ЮТ-88 на макетке в процессе отладки
Самодельный ЮТ-88 на макетке в процессе отладки
Плата самодельного ЮТ-88 (КР580ВИ53 ещё не установлена)
Плата самодельного ЮТ-88 (КР580ВИ53 ещё не установлена)
Самодельный ЮТ-88 на макетке в процессе отладки
Плата самодельного ЮТ-88 (КР580ВИ53 ещё не установлена)

Плата самодельного ЮТ-88, монтаж проводом МГТФ
Плата самодельного ЮТ-88, монтаж проводом МГТФ
Клавиатура самодельного ЮТ-88
Клавиатура самодельного ЮТ-88
Плата самодельного ЮТ-88, монтаж проводом МГТФ
Клавиатура самодельного ЮТ-88

Самодельный компьютер ЮТ-88 в сборе
Самодельный компьютер ЮТ-88 в сборе
Самодельный компьютер ЮТ-88 в сборе
Самодельный компьютер ЮТ-88 в сборе
Самодельный компьютер ЮТ-88 в сборе

Скачать:
Мой вариант схемы ЮТ-88 (редакция от 1.06.2014)
Прошивки ПЗУ
Прошивка ПЗУ с загрузчиком,всеми ОС и мониторами для моей схемы (редакция от 1.06.2014)
Исходники загрузчика (написаны на ZX-Spectrum, ZASM3, trd-файл) (редакция от 1.06.2014)
Тестовое ПЗУ для проверки памяти ЮТ-88 в различных конфигурациях (редакция от 9.06.2014)Описание работы и исходник находятся внутри архива
Программное обеспечение:
Описание, скриншоты и видео работы программ находятся на отдельной странице
Игра Tetris (rku-файл)
Демка dEC0dE (rku-файл и wav-файл)
Игра 2048 (rka-файл)
Игра Klad (rku-файл)
Демка-гифт Trigona Kalanda (rku-файл)
Книги:
Простейшая микро-ЭВМ (Буреев Л.Н.)Пособие по проектированию и сборке компьютера, аналогичного ЮТ-88 минимальной конфигурации
Микро-ЭВМ своими руками (Тищенко В.Г.)особие по проектированию, изготовлению и наладке самодельной микро-ЭВМ наподобие ЮТ-88 в минимальной конфигурации
От самоделок на логических элементах до микро-ЭВМ (Бартенев В.Г.)Собственно тут собраны все журнальные материалы по ЮТ-88 плюс много теории
Ссылки:
Ещё один самодельный ЮТ-88.
Архив журналов "Юный техник". Отсюда можно скачать приложения к журналу "ЮТ Для умелых рук" со статьями по "ЮТ-88"
ЮТ-88 в "Википедии"
ЮТ-88 на retro.h1.ru
Сайт Башкирия-2М. Тут есть хороший эмулятор "ЮТ-88".
Обсуждение ЮТ-88 на zx.pk.ru
Сайт emu80. Здесь есть немного программ для ЮТ-88, а также эмулятор Emu80, с дополнительными утилитами, которые позволяют загружать файлы прямо с выхода звуковой карты компьютера в ЮТ-88