Здесь вы можете закачать новую версию программы Эмулятор 3000 [Версия 6.1 от 04.03.2004]
.
Также вы можете посмотреть на внешний вид эмулятора:
Эмулятор 3000 (или Э3000) – это эмулятор советских и зарубежных компьютеров, таких как Микроша, Вектор-06Ц, Пылдин-601 и других. Программа работает на операционных системах Windows 95/98/NT/ME/2000/XP.
На данный момент программа эмулирует:
Для запуска программы рекомендуется:
Процессор: Pentium II 233 МГц и выше.
Память: 32 Мб и больше.
Видео: Любой 16/24/32 битный видеорежим, любой видеоакселератор.
Также необходима поддержка DirectDraw.
Рекомендуется поддержка DirectSound, но не обязательно.
Примечание: Новую версию обязательно нужно распаковать в новый пустой каталог, то есть без старой версии.
Программное обеспечение ко всем эмулируемым компьютерам вы можете найти на других сайтах посвященных эмуляторам. Здесь вы можете скачать программы и игры к некоторым компьютерам:
эмулятор компьютеров, бытовой компьютер, бытовые компьютеры, эмулятор бытовых компьютеров, эмулятор домашних компьютеров, домашние компьютеры, домашний компьютер.
Исторически, первым массовым радиолюбительским компьютером был Радио-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-м - Орион начал глючить все забористее (не грузился с первого раза, приходилось много раз перезагружать...) и под конец перестал работать совсем. Отремонтировать я его тогда не мог, и все эти годы он пролежал без движения, но не забытым.
Этим летом я наконец решил попробовать его отремонтировать - что из этого получилось (а также обзор архитектуры и некоторых программных особенностей) - под катом.
В самых верхних адресах находится ППЗУ Монитор-а (BIOS). Он сделан интересно - все его функции вызываются через таблицу в самых верхних адресах памяти, которые просто выполняют безусловный переход на место фактической реализации функции, таким образом при изменении реализаций функций адреса вызова остаются прежними, и остается возможность их добавления (таблица растет «вниз»).
Порты ввода вывода - были отображены на память, т.е. если при декодировании адреса мы видели что адрес=адресу порта, то происходила запись в регистр порта. Адреса портов находились в области Монитора, куда все равно записывать нельзя. Порты были сделающие:
0F400H - порт клавиатуры 0F500H - порт пользователя № 1 0F600H - порт пользователя № 2 0F700H - порт платы расширения 0F800H - управление графическим режимом (только для записи) 0F900H - переключение страниц памяти (только для записи) 0FA00H - переключение адреса экранной области памяти (только для записи) 0FB00H - системный порт № 4 (только для записи, не используется)
Вывод графики реализован следующим образом: двоичные счетчики постоянно перебирают текущий адрес видеопамяти. Мультиплексоры могут подключать к адресным выводам памяти то адресную шину процессора (когда ему это надо), то адрес перебираемый счетчиками. Каждый адрес видеопамяти - читается 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
- скачать
Сугоняко В., Сафронов В., Коненков К.
- за создание компьютера Орион-128
Чунину Роману (CHRV)
- за сохранение наследия Ориона
Акимову Сергею (Error404)
- за преданность Ориону и за то, что своей активностью не дает забыть об этом
славном компьютере
Исторически, первым массовым радиолюбительским компьютером был Радио-86РК , требовавший для построения всего 29 микросхем. Его существенным ограничением был то, что он поддерживал только текстовый режим и требовал трудно-доставаемых микросхем. Орион-128 - был логическим продолжением - также ориентирован на сборку радиолюбителями, имел больше памяти (128кб против 16/32кб) и поддерживал графический режим: 384 × 256 (в режиме 2 цвета, 4 цвета, и 2 цвета из палитры 16 цветов на каждые 8 пикселей). Ориентировочный размер популяции Орион-ов в период его пика популярности - около 30-40 тыс. компьютеров.
Орион появился у меня в 94-м году, и именно на Орионе я запускал свои первые программы (до него их приходилось писать «в стол»). К моменту приобретения первой PC-шки в 97-м - Орион начал глючить все забористее (не грузился с первого раза, приходилось много раз перезагружать...) и под конец перестал работать совсем. Отремонтировать я его тогда не мог, и все эти годы он пролежал без движения, но не забытым.
Этим летом я наконец решил попробовать его отремонтировать - что из этого получилось (а также обзор архитектуры и некоторых программных особенностей) - под катом.
В самых верхних адресах находится ППЗУ Монитор-а (BIOS). Он сделан интересно - все его функции вызываются через таблицу в самых верхних адресах памяти, которые просто выполняют безусловный переход на место фактической реализации функции, таким образом при изменении реализаций функций адреса вызова остаются прежними, и остается возможность их добавления (таблица растет «вниз»).
Порты ввода вывода - были отображены на память, т.е. если при декодировании адреса мы видели что адрес=адресу порта, то происходила запись в регистр порта. Адреса портов находились в области Монитора, куда все равно записывать нельзя. Порты были сделающие:
0F400H - порт клавиатуры 0F500H - порт пользователя № 1 0F600H - порт пользователя № 2 0F700H - порт платы расширения 0F800H - управление графическим режимом (только для записи) 0F900H - переключение страниц памяти (только для записи) 0FA00H - переключение адреса экранной области памяти (только для записи) 0FB00H - системный порт № 4 (только для записи, не используется)
Вывод графики реализован следующим образом: двоичные счетчики постоянно перебирают текущий адрес видеопамяти. Мультиплексоры могут подключать к адресным выводам памяти то адресную шину процессора (когда ему это надо), то адрес перебираемый счетчиками. Каждый адрес видеопамяти - читается 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 - пониженная нагрузочная способность и скорость, видимо в этом и была изначальная причина замены.