Эмулятор орион 128 с играми. Разбираемся, что же не работает

Эмулятор 3000

Здесь вы можете закачать новую версию программы Эмулятор 3000 [Версия 6.1 от 04.03.2004] .
Также вы можете посмотреть на внешний вид эмулятора:

Если у вас есть любая информация по следующим компьютерам, просьба связаться с автором (eugeneprogrammer !@! mail.ru):
  • Корвет
  • БК-0010
  • БК-0011М
  • УК-НЦ
  • Агат-7
  • Агат-9
  • Орион-128
  • Партнёр 01.01
  • Апогей БК-01
  • Любой другой которого нет в списке с эмулированных

Описание

Эмулятор 3000 (или Э3000) – это эмулятор советских и зарубежных компьютеров, таких как Микроша, Вектор-06Ц, Пылдин-601 и других. Программа работает на операционных системах Windows 95/98/NT/ME/2000/XP.

Возможности

На данный момент программа эмулирует:

  • Микро-80
  • Радио-86РК
  • Микроша
  • ЮТ-88
  • Партнёр 01.01
  • Апогей БК-01
  • Специалист
  • Специалист МХ
  • Орион-128
  • Вектор-06Ц ,[Программы и игры в формате WinRAR 3.0]
  • Башкирия-2М
  • Львов ПК-01
  • ZX Спектрум 48
  • ZX Спектрум 128
  • ZX Спектрум +2
  • ZX Спектрум +2А
  • ZX Спектрум +3
  • ZX Спектрум +3Е
  • ZX Спектрум +4
  • ZX Пентагон 512К (пока отключен)
  • ZX Скорпион 256К (пока отключен)
  • ZX Профи 1024К (пока отключен)
  • Commodore 64
  • Электроника БК-0010
  • Электроника БК-0010.01
  • Электроника БК-0011М
  • Пылдин-601
  • Пылдин-601У
  • Пылдин-601А
  • Пылдин-601М
  • Пылдин-601Т
  • Агат-7 (пока аналог Агат-9)
  • Агат-9
  • Колеко Вижн
  • Денди

Системные требования

Для запуска программы рекомендуется:
Процессор: Pentium II 233 МГц и выше.
Память: 32 Мб и больше.
Видео: Любой 16/24/32 битный видеорежим, любой видеоакселератор.
Также необходима поддержка DirectDraw.
Рекомендуется поддержка DirectSound, но не обязательно.

Загрузка

Примечание: Новую версию обязательно нужно распаковать в новый пустой каталог, то есть без старой версии.

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

  • Специалист МХ
    Скачайте в архиве WinRAR 3.0. Размер 600 Кб. Все программы в этом архиве взяты с сайта Александра Шевцова (http://avshsoftware.by.ru/). Скачайте в архиве WinRAR 3.20. Размер 363 Кб. Все образы дискет в этом архиве взяты с сайта Александра Шевцова (http://avshsoftware.by.ru/).
  • Вектор-06Ц
    Скачайте в архиве WinRAR 3.0. Размер 2.6 Мб. Все программы в этом архиве взяты с сайта Александра Тимошенко (http://www.vector06c.narod.ru/). Скачайте в архиве WinRAR 3.20. Размер 2.8 Мб. Все образы дискет в этом архиве взяты с сайта Александра Тимошенко (http://www.vector06c.narod.ru/).
  • Орион-128
    Скачайте в архиве WinRAR 3.20. Размер 1.9 Мб. Все программы, которые находятся в этом архиве прислал Андрей Маркелов (http://www.markelov.net/, http://www.rus-emulators.ru/).
  • БК-0010 и БК-0011
    Вы можете подписаться на рассылку посвященную компьютерам серии БК. Для этого в начале отправьте письмо по адресу [email protected]. Тема и содержимое этого письма может быть любым. Затем Вам придет подтверждение. Далее, по инструкции, отправьте ещё одно письмо. Всё, Вы подписаны!

Ключевые слова

эмулятор компьютеров, бытовой компьютер, бытовые компьютеры, эмулятор бытовых компьютеров, эмулятор домашних компьютеров, домашние компьютеры, домашний компьютер.

Исторически, первым массовым радиолюбительским компьютером был Радио-86РК , требовавший для построения всего 29 микросхем. Его существенным ограничением был то, что он поддерживал только текстовый режим. Орион-128 - был логическим продолжением - также ориентирован на сборку радиолюбителями, имел больше памяти (128кб против 16) и поддерживал графический режим: 384 × 256 (в режиме 2 цвета, 4 цвета, и 2 цвета из палитры 16 цветов на каждые 8 пикселей). Ориентировочный размер популяции Орион-ов в период его пика популярности - около 30-40 тыс. компьютеров.

Орион появился у меня в 94-м году, и именно на Орионе я писал свои первые программы. К моменту приобретения первой PC-шки в 97-м - Орион начал глючить все забористее (не грузился с первого раза, приходилось много раз перезагружать…) и под конец перестал работать совсем. Отремонтировать я его тогда не мог, и все эти годы он пролежал без движения, но не забытым.

Этим летом я наконец решил попробовать его отремонтировать - что из этого получилось (а также обзор архитектуры и некоторых программных особенностей) - под катом.

Архитектура

Сердце компьютера - процессор КР580ВМ80А, аналог Intel 8080. Для упрощения конструкции - слово состояния процессора не захватывалось (там процессор «говорит» когда пишет в стек, читает или пишет в порты ввода/вывода). Также отсутствует контроллер прерываний.

В самых верхних адресах находится ППЗУ Монитор-а (BIOS). Он сделан интересно - все его функции вызываются через таблицу в самых верхних адресах памяти, которые просто выполняют безусловный переход на место фактической реализации функции, таким образом при изменении реализаций функций адреса вызова остаются прежними, и остается возможность их добавления (таблица растет «вниз»).

Порты ввода вывода - были отображены на память, т.е. если при декодировании адреса мы видели что адрес=адресу порта, то происходила запись в регистр порта. Адреса портов находились в области Монитора, куда все равно записывать нельзя. Порты были сделающие:

0F400H - порт клавиатуры 0F500H - порт пользователя № 1 0F600H - порт пользователя № 2 0F700H - порт платы расширения 0F800H - управление графическим режимом (только для записи) 0F900H - переключение страниц памяти (только для записи) 0FA00H - переключение адреса экранной области памяти (только для записи) 0FB00H - системный порт № 4 (только для записи, не используется)

Процессор КР580ВМ80А - имеет 16-и битную шину адреса, и соответственно может адресовать только 64кб памяти, порт переключения страниц позволяет процессору выбирать текущую страницу памяти. Но если мы переключаем страницу - и программа будет выполнятся из другой страницы по тому же адресу! Т.к. в таких условиях работать сложно, обычно всю работу с дополнительными страницами делает монитор (т.к. он «виден в памяти» на всех страницах), но это конечно не слишком быстро.

Вывод графики реализован следующим образом: двоичные счетчики постоянно перебирают текущий адрес видеопамяти. Мультиплексоры могут подключать к адресным выводам памяти то адресную шину процессора (когда ему это надо), то адрес перебираемый счетчиками. Каждый адрес видеопамяти - читается 2 раза, но если был конфликт с процессором, то прочитанное значение не сохраняется (т.е. один раз из двух - конфликта гарантировано не будет, т.к. процессор относительно редко обращается к памяти).

Видео-память читается одновременно из обоих страниц, и прочитанные 16 бит - затем попадают в сдвиговые регистры (параллельная загрузка - последовательный вывод), на основе выхода которых и формируется видео-сигнал. В монохромном режиме - вторая страница памяти не используется, а вот в цветном - приходится писать и во вторую страницу. А это как мы помним медленно, т.к. возможно только через вызов подпрограмм монитора.

Тут и находится основной недостаток Ориона - скорость вывода текста очень низкая (около секунды на страницу текста в цветном режиме), особенно по сравнению с Радио-86РК.

Ремонт

У меня была заводская версия Ориона, в корпусе УКНЦ:

Т.к. компьютер был заводской, печатная плата отличалась от журнального варианта, и были некоторые отличия в схеме, что не облегчало задачу. Также на проводах (в левой части платы) висел счетчик К155ИЕ5 - конечно я понятия не имел, зачем он там висит, еще одна загадка.

По советам - заменил советские керамические конденсаторы на новые. Блок питания был больным местом Ориона (и у меня выдавал неправильные напряжения) - его я полностью заменил на новые импульсные. Орион требовал напряжения +5, +12 и -5В (вернее, эти напряжения требовал процессор КР580ВМ80А, всему остальному достаточно было +5).

Но компьютер не заработал: двухфазный синхросигнал на процессор приходил, видно было что на шине адреса и данных что-то происходит, но компьютер не работал, на экране был мусор без признаков сознательной деятельности.

Первой моей мыслью было то, что за 20 лет испортилось содержимое Монитора (защитное окошко не было заклеено изолентой) - заказал программатор TL866 , слил прошивку - и к моему сожалению она совпала до байта с журналом. Печаль. Идей не было никаких.

Я знал, что если с -5 и 12В напряжениями есть проблемы - процессор может сгореть. Поэтому заменил процессор и шинный формирователь на шине данных - но это не дало никакого результата.

Сигналы RAS и CAS - похожи на правду (т.к. это наиболее высокочастотные сигналы - с ними также бывают проблемы).

Заметил, что один из битов шины данных - всегда 1. Оказалось, я случайно закоротил его на +5В когда перепаивал конденсаторы. Только сейчас я начал понимать, зачем на печатных платах паяльная маска 🙂

Тест памяти заработал, но очень странно, после тестирования первой страницы памяти - снова тестировал первую, а не вторую. Подозрения пало на регистр текущей страницы памяти (порт 0F900H) - или не проходит запись, или потом это значение не переключает страницу.

Для того, чтобы легче было дебажить - написал программу вместо Монитора, которая постоянно переключает страницу памяти. Достал из Ориона старую EEPROM КС573РФ2, и начал стирать… Через пол часа под кварцевой лампой - прошивка все еще совпадала байт в байт (более современные EEPROM 27512 - стирались за 35-45 секунд)… Только через час прожарки микросхема была чистой. Но при попытке её записать - меня постигла былинная неудача, как оказалось, программатор может выдавать напряжение программирования не выше 21В, а КС573РФ2 требует 26.

Можно было конечно хакать программатор, но я решил припаять более современную флешку с электрическим стиранием - расположение выводов конечно не совпадало, и припаивать пришлось на проводах («многоэтажная» печатная плата не влезала по высоте). Переключатели - позволяют выбирать один из нескольких залитых Мониторов, и припаяны к первым неиспользуемым битам адреса с подтяжкой к 0 (КС573РФ2 - 2кб, 11 бит, значит переключатели на 12-13-14 битах):

Оказалось, в момент, когда отрабатывает декодер, выдающей единичку на запись в порт переключения страницы - на шине данных моментально становится 0, и регистр не успевает записать номер новой страницы памяти (справа - желтая - бит шины данных, синяя - строб записи в порт).

Если немного задержать строб записи конденсатором - то запись проходит, и в нужную страницу памяти происходит запись, но это слишком грязный хак, и я в него не верил.

Идей далее не было. Заметил, что на выходах двух микросхем памяти нет данных, заменил их. Старый текстолит проявлял себя с худшей стороны - чернел при пайке феном (про чернеющий от фена текстолит мне рассказывала страшные сказки мама - но я не верил), дорожки отваливались… Депрессивное зрелище. В отпаивании без фена - помогал паяльник с оловоотсосом (чудесное изобретение, расплавляешь припой, жмешь кнопку - и он все всасывает, главное потом плату не заляпать), и медная оплетка (solder wick), коей изведена была целая куча:

После замены микросхем памяти - внезапно все перестало работать. Снова мусор на экране без признаков жизни. Честно говоря, тут я уже был готов опустить руки, и признать, что не все в этой жизни может быть сделано.

После пристального изучения платы с лупой - удалось найти еще 2 КЗ, которые сделал я, но тест памяти работать не начинал. Тогда я прозвонкой обнаружил, что на шине данных еще один КЗ - но просмотрев всю шину данных его я не нашел. Пришлось конкретный бит шины данных разрезать на кусочки, чтобы сузить круг поисков. Наконец КЗ нашлось - оно оказалось настолько микроскопическим, что его едва было видно в лупу. Причина по которой у меня так легко получались КЗ оказалось простой - я по ошибке вместо обычного припоя ПОС60 взял легкоплавкий с Висмутом (температура плавления 144 градуса). При контакте с паяльником с температурой 250 градусов - флюс мгновенно вскипал, и мельчайшие капли припоя разбрасывал вокруг. А я еще ломал голову, почему после пайки поверхность получается матовая…

Тест памяти заработал, и похоже найденные в процессе осмотра КЗ решили проблему с переключением страницы, теперь шина данных в 0 не сбрасывалась в самый ответственный момент, и переключение страницы работает стабильно:

Однако загрузка ORDOS с внешнего ROM-диска все еще не работала. Прочитав 3 байта с ром-диска руками через порты (команды для этого есть в Мониторе-1), увидел что 2 бита данных приходят неправильные (сравнивал с образом ROM-диска слитым на программаторе). После пропайки ромдиска - ORDOS загрузился! Радости не было предела:

Однако проблемы еще оставались: тест памяти показывал ошибку памяти на второй странице после прогрева, иногда пропадало изображение на телевизоре, особенно часто при тесте второй страницы памяти, и нужно было что-то делать с висящей на проводах мистической К155ИЕ5:

Микросхему памяти заменить было легко, а вот с пропаданием изображения пришлось помучатся. Подозрение упало на сигнал разрешения записи данных из видеопамяти в регистры формирования видеосигнала (запись туда запрещается когда процессор обращается к памяти). Дорожка была длинная (~50см), и поскольку никакого согласования импеданса нет - сигнал отражался от концов дорожки, превышая допустимый уровень 0 в TTL логике (0.4В) - это могло вызвать проблемы. Поэтому я реализовал последовательное терминирование - резистор 220 Ом рядом с источником сигнала - звон пропал, но проблема осталась:

Мистики добавляло то, что при подключении земли осциллографа - пропадания изображения прекращались. Оказалось, проблема была в плохом сетевом блоке питания 12В, у которого видимо сэкономили на фильтрации - на земле было много мусора (т.е. между землей и 12В шиной - всегда 12В, но относительно земли телевизора или осцилографа - огромный шум). Заменив блок питания на более качественный (от FPGA демоборды) - проблему удалось полностью разрешить.

После отслеживания К155ИЕ5 на проводах - оказалось, что она частично заменяет К1533ИЕ5, впаянную в плату. Зачем нужно было оставлять её висящую на проводах - мне не ясно. К1533ИЕ5 выкусил, К155ИЕ5 впаял - и все работает! 1533 серия - это буржуйская ALS, 155 - обычная ТТЛ. У ALS - пониженная нагрузочная способность и скорость, видимо в этом и была изначальная причина замены.

Общий вид в законченном виде:

Небольшая платка в левой части -

схема сдвига экрана вниз (иначе первая строчка на ЖК-телевизорах обрезается)

Исторически, первым массовым радиолюбительским компьютером был Радио-86РК , требовавший для построения всего 29 микросхем. Его существенным ограничением был то, что он поддерживал только текстовый режим и требовал трудно-доставаемых микросхем. Орион-128 - был логическим продолжением - также ориентирован на сборку радиолюбителями, имел больше памяти (128кб против 16/32кб) и поддерживал графический режим: 384 × 256 (в режиме 2 цвета, 4 цвета, и 2 цвета из палитры 16 цветов на каждые 8 пикселей). Ориентировочный размер популяции Орион-ов в период его пика популярности - около 30-40 тыс. компьютеров.

Орион появился у меня в 94-м году, и именно на Орионе я запускал свои первые программы (до него их приходилось писать «в стол»). К моменту приобретения первой PC-шки в 97-м - Орион начал глючить все забористее (не грузился с первого раза, приходилось много раз перезагружать...) и под конец перестал работать совсем. Отремонтировать я его тогда не мог, и все эти годы он пролежал без движения, но не забытым.

Этим летом я наконец решил попробовать его отремонтировать - что из этого получилось (а также обзор архитектуры и некоторых программных особенностей) - под катом.

Архитектура

Сердце компьютера - процессор КР580ВМ80А, советский аналог Intel 8080 . Для упрощения конструкции - слово состояния процессора не захватывалось (там процессор «говорит» когда пишет в стек, читает или пишет в порты ввода/вывода). Также отсутствует контроллер прерываний.

В самых верхних адресах находится ППЗУ Монитор-а (BIOS). Он сделан интересно - все его функции вызываются через таблицу в самых верхних адресах памяти, которые просто выполняют безусловный переход на место фактической реализации функции, таким образом при изменении реализаций функций адреса вызова остаются прежними, и остается возможность их добавления (таблица растет «вниз»).

Порты ввода вывода - были отображены на память, т.е. если при декодировании адреса мы видели что адрес=адресу порта, то происходила запись в регистр порта. Адреса портов находились в области Монитора, куда все равно записывать нельзя. Порты были сделающие:

0F400H - порт клавиатуры 0F500H - порт пользователя № 1 0F600H - порт пользователя № 2 0F700H - порт платы расширения 0F800H - управление графическим режимом (только для записи) 0F900H - переключение страниц памяти (только для записи) 0FA00H - переключение адреса экранной области памяти (только для записи) 0FB00H - системный порт № 4 (только для записи, не используется)

Процессор КР580ВМ80А - имеет 16-и битную шину адреса, и соответственно может адресовать только 64кб памяти, порт переключения страниц позволяет процессору выбирать текущую страницу памяти. Но если мы переключаем страницу - и программа будет выполнятся из другой страницы по тому же адресу! Т.к. в таких условиях работать сложно, обычно всю работу с дополнительными страницами делает монитор (т.к. он «виден в памяти» на всех страницах), но это конечно не слишком быстро.

Вывод графики реализован следующим образом: двоичные счетчики постоянно перебирают текущий адрес видеопамяти. Мультиплексоры могут подключать к адресным выводам памяти то адресную шину процессора (когда ему это надо), то адрес перебираемый счетчиками. Каждый адрес видеопамяти - читается 2 раза, но если был конфликт с процессором, то прочитанное значение не сохраняется (т.е. один раз из двух - конфликта гарантировано не будет, т.к. процессор относительно редко обращается к памяти).

Видео-память читается одновременно из обоих страниц, и прочитанные 16 бит - затем попадают в сдвиговые регистры (параллельная загрузка - последовательный вывод), на основе выхода которых и формируется видео-сигнал. В монохромном режиме - вторая страница памяти не используется, а вот в цветном - приходится писать и во вторую страницу. А это как мы помним медленно, т.к. возможно только через вызов подпрограмм монитора.

Тут и находится основной недостаток Ориона - скорость вывода текста очень низкая (около секунды на страницу текста в цветном режиме), особенно по сравнению с Радио-86РК. Процессор делает 300-500 тыс. операций в секунду (при тактовой частоте 2.5Мгц), а запись на дополнительную страницу памяти - это по меньшей мере десяток операций.

Разбираемся, что же не работает

У меня была заводская версия Ориона:

Т.к. компьютер был заводской, печатная плата отличалась от журнального варианта, и были некоторые отличия в схеме, что не облегчало задачу. Также на проводах (в левой части платы) висел счетчик К155ИЕ5 - конечно я понятия не имел, зачем он там висит, еще одна загадка.

По советам - заменил советские керамические конденсаторы на новые. Блок питания был больным местом Ориона (и у меня выдавал неправильные напряжения) - его я полностью заменил на новые импульсные. Орион требовал напряжения +5, +12 и -5В (вернее, эти напряжения требовал процессор КР580ВМ80А, всему остальному достаточно было +5).


Но компьютер не заработал: двухфазный синхросигнал на процессор приходил, видно было что на шине адреса и данных что-то происходит, но компьютер не работал, на экране был мусор без признаков сознательной деятельности.

Первой моей мыслью было то, что за 20 лет испортилось содержимое Монитора (защитное окошко не было заклеено изолентой) - заказал программатор TL866 , слил прошивку - и к моему сожалению она совпала до байта с журналом. Печаль. Идей не было никаких.

Я знал, что если с -5 и 12В напряжениями есть проблемы - процессор может сгореть. Поэтому заменил процессор и шинный формирователь на шине данных - но это не дало никакого результата.

Сигналы RAS и CAS - похожи на правду (т.к. это наиболее высокочастотные сигналы - с ними также бывают проблемы).

Заметил, что один из битов шины данных - всегда 1. Оказалось, я случайно закоротил его на +5В когда перепаивал конденсаторы. Только сейчас я начал понимать, зачем на печатных платах паяльная маска:-)

Тест памяти заработал, но очень странно, после тестирования первой страницы памяти - снова тестировал первую, а не вторую. Подозрения пало на регистр текущей страницы памяти (порт 0F900H) - или не проходит запись, или потом это значение не переключает страницу.

Для того, чтобы легче было дебажить - написал программу вместо Монитора, которая постоянно переключает страницу памяти. Достал из Ориона старую EEPROM КС573РФ2, и начал стирать… Через пол часа под кварцевой лампой - прошивка все еще совпадала байт в байт (более современные EEPROM 27512 - стирались за 35-45 секунд)… Только через час прожарки микросхема была чистой. Но при попытке её записать - меня постигла былинная неудача, как оказалось, программатор может выдавать напряжение программирования не выше 21В, а КС573РФ2 требует 26.

Можно было конечно хакать программатор, но я решил припаять более современную флешку с электрическим стиранием - расположение выводов конечно не совпадало, и припаивать пришлось на проводах («многоэтажная» печатная плата не влезала по высоте). Переключатели - позволяют выбирать один из нескольких залитых Мониторов, и припаяны к первым неиспользуемым битам адреса с подтяжкой к 0 (КС573РФ2 - 2кб, 11 бит, значит переключатели на 12-13-14 битах):

Оказалось, в момент, когда отрабатывает дешифратор, выдающей единичку на запись в порт переключения страницы - на шине данных моментально становится 0, и регистр не успевает записать номер новой страницы памяти (справа - желтая - бит шины данных, синяя - строб записи в порт).

Если немного задержать строб записи конденсатором - то запись проходит, и в нужную страницу памяти происходит запись, но это слишком грязный хак, и я в него не верил.

Идей далее не было. Заметил, что на выходах двух микросхем памяти нет данных, заменил их. Старый текстолит проявлял себя с худшей стороны - чернел при пайке феном (про чернеющий от фена текстолит мне рассказывала страшные сказки мама - но я не верил), дорожки отваливались… Депрессивное зрелище. В отпаивании без фена - помогал паяльник с оловоотсосом (чудесное изобретение, расплавляешь припой, жмешь кнопку - и он все всасывает, главное потом плату не заляпать), и медная оплетка (solder wick), коей изведена была целая куча:

После замены микросхем памяти - внезапно все перестало работать. Снова мусор на экране без признаков жизни. Честно говоря, тут я уже был готов опустить руки, и признать, что не все в этой жизни может быть сделано.

После пристального изучения платы с лупой - удалось найти еще 2 КЗ, которые сделал я, но тест памяти работать не начинал. Тогда я тотальной прозвонкой обнаружил, что на шине данных еще один КЗ - но просмотрев всю шину данных его я не нашел. Пришлось конкретный бит шины данных разрезать на кусочки, чтобы сузить круг поисков. Наконец КЗ нашлось - оно оказалось настолько микроскопическим, что его едва было видно в лупу. Причина по которой у меня так легко получались КЗ оказалось простой - я по ошибке вместо обычного припоя ПОС60 взял легкоплавкий с Висмутом (температура плавления 144 градуса). При контакте с паяльником с температурой 250 градусов - флюс мгновенно вскипал, и мельчайшие капли припоя разбрасывал вокруг. А я еще ломал голову, почему после пайки поверхность получается матовая…

Тест памяти заработал, и похоже найденные в процессе осмотра КЗ решили проблему с переключением страницы, теперь шина данных в 0 не сбрасывалась в самый ответственный момент, и переключение страницы работает стабильно:

Однако загрузка ORDOS с внешнего ROM-диска все еще не работала. Прочитав 3 байта с ром-диска руками через порты (команды для этого есть в Мониторе-1), увидел что 2 бита данных приходят неправильные (сравнивал с образом ROM-диска слитым на программаторе). После пропайки ромдиска - ORDOS загрузился! Радости не было предела:

Однако проблемы еще оставались: тест памяти показывал ошибку памяти на второй странице после прогрева, иногда пропадало изображение на телевизоре, особенно часто при тесте второй страницы памяти, и нужно было что-то делать с висящей на проводах мистической К155ИЕ5:

Микросхему памяти заменить было легко, а вот с пропаданием изображения пришлось помучатся. Подозрение упало на сигнал разрешения записи данных из видеопамяти в регистры формирования видеосигнала (запись туда запрещается когда процессор обращается к памяти). Дорожка была длинная (~50см), и поскольку никакого согласования импеданса нет - сигнал отражался от концов дорожки, превышая допустимый уровень 0 в TTL логике (0.4В) - это могло вызвать проблемы. Поэтому я реализовал последовательное терминирование - резистор 220 Ом рядом с источником сигнала - звон пропал, но проблема осталась:

Суть последовательного терминирования

Допустим волновое сопротивление дорожки - 220 Ом. Без терминирования - 5В импульс дойдет до конца дорожки, отразится, и мгновенное напряжение там будет 10В. Большая часть конечно срежеться на защитных диодах внутри микросхемы, но всплеск до 10В будет. Если же мы поставим резистор 220Ом рядом с источником сигнала - то по дорожке пойдет 2.5В (т.к. у нас получается делитель напряжения), когда 2.5В дойдет до конца дорожки и отразится обратно - как раз получится 5В, ровно столько, сколько нужно.

Волновое сопротивление дорожки зависит от её ширины и близости к земле, для тонких дорожек без земляного полигона под ней - оно высокое, сотни Ом.


Мистики добавляло то, что при подключении земли осциллографа - пропадания изображения прекращались. Оказалось, проблема была в плохом сетевом блоке питания 12В, у которого видимо сэкономили на фильтрации - на земле было много мусора (т.е. между землей и 12В шиной - всегда 12В, но относительно земли телевизора или осцилографа - огромный шум). Заменив блок питания на более качественный (от FPGA демоборды) - проблему удалось полностью разрешить.

После отслеживания К155ИЕ5 на проводах - оказалось, что она частично заменяет К1533ИЕ5, впаянную в плату. Зачем нужно было оставлять её висящую на проводах - мне не ясно. К1533ИЕ5 выкусил, К155ИЕ5 впаял - и все работает! 1533 серия - это буржуйская ALS, 155 - обычная ТТЛ. У ALS - пониженная нагрузочная способность и скорость, видимо в этом и была изначальная причина замены.

В этом разделе будет описан вариант компьютера под корпус УКНЦ. Пока осмысливаю содержимое этой страницы:)

Краткая спецификация:

Процессор

КР580ВМ80А

Разрядность

Быстродействие (ОП./СЕК.)

0,5 млн. операций регистр-регистр

ОЗУ

128 Кб

ПЗУ

2 Кб

Графика

384x256 точек, до 16 цветов

Знакогенератор

загружаемый

Устройство отображения

бытовой телевизор

Внешняя память

кассетный магнитофон, ROM-диск

Звук

одноканальный биппер

Операционная система

системный МОНИТОР

Проект:

1. Оригинальная схема электрическая принципиальная в формате PCAD 4.5 - скачать
2. Оригинальная печатная плата в формате PCAD 4.5 - скачать
3. Оригинальная библиотека элементов в формате PCAD 4.5 - скачать
4. Оригинальные схема, печатная плата и сборочный чертеж в формате png - скачать
5. Конверсия оригинальной печатной платы в формате PCAD2002, - скачать
6. Перерисованная оригинальная схема электрическая принципиальная в формате PCAD2002 - скачать
7. Оригинальная печатная плата в формате PCAD2002, привязанная к схеме из пункта 6 - скачать
8. Перерисованная оригинальная схема электрическая принципиальная в формате pdf - скачать
9. Краткие замечания по сборке компьютера по оригинальной схеме в формате pdf. Настоятельно рекомендуется с ними ознакомится до начала процесса сборки. - скачать
10. Откорректированный сборочный чертеж оригинальной схемы в формате pdf. Настоятельно рекомендуется осуществлять по нему сборку компьютера. - скачать
11. Библиотека элементов формате PCAD2002 - скачать

Внимание: оригинальная схема и плата содержат ошибки, в результате которых компьютер не будет работать, это касается пукнтов 1..8. Использовать их для производства плат не рекомендуется. Благодарности:

Сугоняко В., Сафронов В., Коненков К. - за создание компьютера Орион-128
Чунину Роману (CHRV) - за сохранение наследия Ориона
Акимову Сергею (Error404) - за преданность Ориону и за то, что своей активностью не дает забыть об этом славном компьютере

Исторически, первым массовым радиолюбительским компьютером был Радио-86РК , требовавший для построения всего 29 микросхем. Его существенным ограничением был то, что он поддерживал только текстовый режим и требовал трудно-доставаемых микросхем. Орион-128 - был логическим продолжением - также ориентирован на сборку радиолюбителями, имел больше памяти (128кб против 16/32кб) и поддерживал графический режим: 384 × 256 (в режиме 2 цвета, 4 цвета, и 2 цвета из палитры 16 цветов на каждые 8 пикселей). Ориентировочный размер популяции Орион-ов в период его пика популярности - около 30-40 тыс. компьютеров.

Орион появился у меня в 94-м году, и именно на Орионе я запускал свои первые программы (до него их приходилось писать «в стол»). К моменту приобретения первой PC-шки в 97-м - Орион начал глючить все забористее (не грузился с первого раза, приходилось много раз перезагружать...) и под конец перестал работать совсем. Отремонтировать я его тогда не мог, и все эти годы он пролежал без движения, но не забытым.

Этим летом я наконец решил попробовать его отремонтировать - что из этого получилось (а также обзор архитектуры и некоторых программных особенностей) - под катом.

Архитектура

Сердце компьютера - процессор КР580ВМ80А, советский аналог Intel 8080 . Для упрощения конструкции - слово состояния процессора не захватывалось (там процессор «говорит» когда пишет в стек, читает или пишет в порты ввода/вывода). Также отсутствует контроллер прерываний.

В самых верхних адресах находится ППЗУ Монитор-а (BIOS). Он сделан интересно - все его функции вызываются через таблицу в самых верхних адресах памяти, которые просто выполняют безусловный переход на место фактической реализации функции, таким образом при изменении реализаций функций адреса вызова остаются прежними, и остается возможность их добавления (таблица растет «вниз»).

Порты ввода вывода - были отображены на память, т.е. если при декодировании адреса мы видели что адрес=адресу порта, то происходила запись в регистр порта. Адреса портов находились в области Монитора, куда все равно записывать нельзя. Порты были сделающие:

0F400H - порт клавиатуры 0F500H - порт пользователя № 1 0F600H - порт пользователя № 2 0F700H - порт платы расширения 0F800H - управление графическим режимом (только для записи) 0F900H - переключение страниц памяти (только для записи) 0FA00H - переключение адреса экранной области памяти (только для записи) 0FB00H - системный порт № 4 (только для записи, не используется)

Процессор КР580ВМ80А - имеет 16-и битную шину адреса, и соответственно может адресовать только 64кб памяти, порт переключения страниц позволяет процессору выбирать текущую страницу памяти. Но если мы переключаем страницу - и программа будет выполнятся из другой страницы по тому же адресу! Т.к. в таких условиях работать сложно, обычно всю работу с дополнительными страницами делает монитор (т.к. он «виден в памяти» на всех страницах), но это конечно не слишком быстро.

Вывод графики реализован следующим образом: двоичные счетчики постоянно перебирают текущий адрес видеопамяти. Мультиплексоры могут подключать к адресным выводам памяти то адресную шину процессора (когда ему это надо), то адрес перебираемый счетчиками. Каждый адрес видеопамяти - читается 2 раза, но если был конфликт с процессором, то прочитанное значение не сохраняется (т.е. один раз из двух - конфликта гарантировано не будет, т.к. процессор относительно редко обращается к памяти).

Видео-память читается одновременно из обоих страниц, и прочитанные 16 бит - затем попадают в сдвиговые регистры (параллельная загрузка - последовательный вывод), на основе выхода которых и формируется видео-сигнал. В монохромном режиме - вторая страница памяти не используется, а вот в цветном - приходится писать и во вторую страницу. А это как мы помним медленно, т.к. возможно только через вызов подпрограмм монитора.

Тут и находится основной недостаток Ориона - скорость вывода текста очень низкая (около секунды на страницу текста в цветном режиме), особенно по сравнению с Радио-86РК. Процессор делает 300-500 тыс. операций в секунду (при тактовой частоте 2.5Мгц), а запись на дополнительную страницу памяти - это по меньшей мере десяток операций.

Разбираемся, что же не работает

У меня была заводская версия Ориона:

Т.к. компьютер был заводской, печатная плата отличалась от журнального варианта, и были некоторые отличия в схеме, что не облегчало задачу. Также на проводах (в левой части платы) висел счетчик К155ИЕ5 - конечно я понятия не имел, зачем он там висит, еще одна загадка.

По советам - заменил советские керамические конденсаторы на новые. Блок питания был больным местом Ориона (и у меня выдавал неправильные напряжения) - его я полностью заменил на новые импульсные. Орион требовал напряжения +5, +12 и -5В (вернее, эти напряжения требовал процессор КР580ВМ80А, всему остальному достаточно было +5).


Но компьютер не заработал: двухфазный синхросигнал на процессор приходил, видно было что на шине адреса и данных что-то происходит, но компьютер не работал, на экране был мусор без признаков сознательной деятельности.

Первой моей мыслью было то, что за 20 лет испортилось содержимое Монитора (защитное окошко не было заклеено изолентой) - заказал программатор TL866 , слил прошивку - и к моему сожалению она совпала до байта с журналом. Печаль. Идей не было никаких.

Я знал, что если с -5 и 12В напряжениями есть проблемы - процессор может сгореть. Поэтому заменил процессор и шинный формирователь на шине данных - но это не дало никакого результата.

Сигналы RAS и CAS - похожи на правду (т.к. это наиболее высокочастотные сигналы - с ними также бывают проблемы).

Заметил, что один из битов шины данных - всегда 1. Оказалось, я случайно закоротил его на +5В когда перепаивал конденсаторы. Только сейчас я начал понимать, зачем на печатных платах паяльная маска:-)

Тест памяти заработал, но очень странно, после тестирования первой страницы памяти - снова тестировал первую, а не вторую. Подозрения пало на регистр текущей страницы памяти (порт 0F900H) - или не проходит запись, или потом это значение не переключает страницу.

Для того, чтобы легче было дебажить - написал программу вместо Монитора, которая постоянно переключает страницу памяти. Достал из Ориона старую EEPROM КС573РФ2, и начал стирать… Через пол часа под кварцевой лампой - прошивка все еще совпадала байт в байт (более современные EEPROM 27512 - стирались за 35-45 секунд)… Только через час прожарки микросхема была чистой. Но при попытке её записать - меня постигла былинная неудача, как оказалось, программатор может выдавать напряжение программирования не выше 21В, а КС573РФ2 требует 26.

Можно было конечно хакать программатор, но я решил припаять более современную флешку с электрическим стиранием - расположение выводов конечно не совпадало, и припаивать пришлось на проводах («многоэтажная» печатная плата не влезала по высоте). Переключатели - позволяют выбирать один из нескольких залитых Мониторов, и припаяны к первым неиспользуемым битам адреса с подтяжкой к 0 (КС573РФ2 - 2кб, 11 бит, значит переключатели на 12-13-14 битах):

Оказалось, в момент, когда отрабатывает дешифратор, выдающей единичку на запись в порт переключения страницы - на шине данных моментально становится 0, и регистр не успевает записать номер новой страницы памяти (справа - желтая - бит шины данных, синяя - строб записи в порт).

Если немного задержать строб записи конденсатором - то запись проходит, и в нужную страницу памяти происходит запись, но это слишком грязный хак, и я в него не верил.

Идей далее не было. Заметил, что на выходах двух микросхем памяти нет данных, заменил их. Старый текстолит проявлял себя с худшей стороны - чернел при пайке феном (про чернеющий от фена текстолит мне рассказывала страшные сказки мама - но я не верил), дорожки отваливались… Депрессивное зрелище. В отпаивании без фена - помогал паяльник с оловоотсосом (чудесное изобретение, расплавляешь припой, жмешь кнопку - и он все всасывает, главное потом плату не заляпать), и медная оплетка (solder wick), коей изведена была целая куча:

После замены микросхем памяти - внезапно все перестало работать. Снова мусор на экране без признаков жизни. Честно говоря, тут я уже был готов опустить руки, и признать, что не все в этой жизни может быть сделано.

После пристального изучения платы с лупой - удалось найти еще 2 КЗ, которые сделал я, но тест памяти работать не начинал. Тогда я тотальной прозвонкой обнаружил, что на шине данных еще один КЗ - но просмотрев всю шину данных его я не нашел. Пришлось конкретный бит шины данных разрезать на кусочки, чтобы сузить круг поисков. Наконец КЗ нашлось - оно оказалось настолько микроскопическим, что его едва было видно в лупу. Причина по которой у меня так легко получались КЗ оказалось простой - я по ошибке вместо обычного припоя ПОС60 взял легкоплавкий с Висмутом (температура плавления 144 градуса). При контакте с паяльником с температурой 250 градусов - флюс мгновенно вскипал, и мельчайшие капли припоя разбрасывал вокруг. А я еще ломал голову, почему после пайки поверхность получается матовая…

Тест памяти заработал, и похоже найденные в процессе осмотра КЗ решили проблему с переключением страницы, теперь шина данных в 0 не сбрасывалась в самый ответственный момент, и переключение страницы работает стабильно:

Однако загрузка ORDOS с внешнего ROM-диска все еще не работала. Прочитав 3 байта с ром-диска руками через порты (команды для этого есть в Мониторе-1), увидел что 2 бита данных приходят неправильные (сравнивал с образом ROM-диска слитым на программаторе). После пропайки ромдиска - ORDOS загрузился! Радости не было предела:

Однако проблемы еще оставались: тест памяти показывал ошибку памяти на второй странице после прогрева, иногда пропадало изображение на телевизоре, особенно часто при тесте второй страницы памяти, и нужно было что-то делать с висящей на проводах мистической К155ИЕ5:

Микросхему памяти заменить было легко, а вот с пропаданием изображения пришлось помучатся. Подозрение упало на сигнал разрешения записи данных из видеопамяти в регистры формирования видеосигнала (запись туда запрещается когда процессор обращается к памяти). Дорожка была длинная (~50см), и поскольку никакого согласования импеданса нет - сигнал отражался от концов дорожки, превышая допустимый уровень 0 в TTL логике (0.4В) - это могло вызвать проблемы. Поэтому я реализовал последовательное терминирование - резистор 220 Ом рядом с источником сигнала - звон пропал, но проблема осталась:

Суть последовательного терминирования

Допустим волновое сопротивление дорожки - 220 Ом. Без терминирования - 5В импульс дойдет до конца дорожки, отразится, и мгновенное напряжение там будет 10В. Большая часть конечно срежеться на защитных диодах внутри микросхемы, но всплеск до 10В будет. Если же мы поставим резистор 220Ом рядом с источником сигнала - то по дорожке пойдет 2.5В (т.к. у нас получается делитель напряжения), когда 2.5В дойдет до конца дорожки и отразится обратно - как раз получится 5В, ровно столько, сколько нужно.

Волновое сопротивление дорожки зависит от её ширины и близости к земле, для тонких дорожек без земляного полигона под ней - оно высокое, сотни Ом.


Мистики добавляло то, что при подключении земли осциллографа - пропадания изображения прекращались. Оказалось, проблема была в плохом сетевом блоке питания 12В, у которого видимо сэкономили на фильтрации - на земле было много мусора (т.е. между землей и 12В шиной - всегда 12В, но относительно земли телевизора или осцилографа - огромный шум). Заменив блок питания на более качественный (от FPGA демоборды) - проблему удалось полностью разрешить.

После отслеживания К155ИЕ5 на проводах - оказалось, что она частично заменяет К1533ИЕ5, впаянную в плату. Зачем нужно было оставлять её висящую на проводах - мне не ясно. К1533ИЕ5 выкусил, К155ИЕ5 впаял - и все работает! 1533 серия - это буржуйская ALS, 155 - обычная ТТЛ. У ALS - пониженная нагрузочная способность и скорость, видимо в этом и была изначальная причина замены.