UKNC Back to Life!

    История разработки одного эмулятора


    1. Зачем?

    Можно сказать, что всю свою программерскую жизнь я был программистом-прикладником. Участвовал в разработке и коробочных продуктов, и под заказ, в небольших компаниях и побольше. Это интересная и разнообразная работа. Но ничего близко связанного с железом я до этого ни разу писал, и по цифровой схемотехнике имел довольно поверхностные знания, если не сказать — никакие. Зато моя программерская юность прошла за освоением C++ под Win32/MFC :) В какой-то степени мне хотелось проверить свои силы — смогу ли.

    2. Почему УКНЦ?

    Работал на этих машинах в школе (это было году этак в 1992-93), хотя ничего сложнее Бейсика и ползания по дискетам на учительской машине делать не приходилось. Т.е. никаких серьёзных познаний об эмулируемой машине у меня не было. Своей УКНЦ у меня в распоряжении тоже не было, как собственно нет и до сих пор.

    Толчком к созданию эмулятора послужил сайт Арсения Гордина, на котором он уже несколько лет собирает всю имеющуюся информацию об УКНЦ и других PDP-11 совместимых машинах. Точнее даже, не столько сам сайт, а то что на нём обнаружился архив «Снятие имиджа ПЗУ и ОЗУ», автор — Александр Стрелец (кстати, спасибо ему огромное!). В архиве была описана процедура получения образов ПЗУ на реальной машине, и (о чудо!) обнаружились снятые образы. Вот тут ручки зачесались уже довольно ощутимо… Это был примерно июнь 2006 года. К слову, на тот момент не было ни одного эмулятора УКНЦ. (Да и сейчас их в общем-то не особенно много...)

    3. Первые потуги

    После этого я начал искать от чего оттолкнуться — написать всё с нуля было бы для меня (на тот момент) просто неподъёмной задачей. Поиск показал, что эмуляторов процессора ВМ2 в наличии нету, ни одного даже вживую, не говоря уже об исходниках. Зато уже давно есть эмуляторы с реализацией ВМ1 — как нетрудно догадаться, это эмуляторы БК. Выбор пал на эмулятор Юрия Калмыкова — во-первых, он был в исходном коде, а во-вторых, он был для меня ближе, поскольку написан под MFC. От эмулятора Калмыкова был взят код только код процессора и дизассемблер, и сейчас от исходного варианта наверное практически ничего не осталось — код перерабатывался множество раз.

    Спустя неделю-полторы будущий эмулятор уже показывал состояния процессоров, памяти, дизассемблированный фрагмент, и в ручном режиме бодро прошагивал первые команды. Дальше предстояла длииинная такая дорога по уточнению процессора, программированию всех устройств УКНЦ… Некоторое время я потихоньку топал в этом направлении, особых результатов при этом не демонстрируя. Где-то в январе 2007 пришёл к выводу, что начал не с того — мне сильно нехватало информации об устройстве машины и детального понимания работы процессора. Поэтому засел за документ, суммирующий и систематизирующий мои знания по предмету.

    4. Совместное творчество

    А уже в феврале 2007 работа по эмулятору резко ускорилась. На Арсения Гордина вышел Феликс Лазарев, уже имеющий опыт написания эмулятора 3DO, желающий написать эмулятор УКНЦ и ищущий соратников. Развернули SVN для совместной работы, и понеслась.

    В понимании работы УКНЦ я был на два порядка слабее, поэтому в основном работал над интерфейсом и отладчиком, пока Феликс перетряхивал процессор и устройства. К концу февраля был сделан отрисовщик экрана. К середине марта мы уже увидели текст об ошибках ОЗУ и ПЗУ, выдаваемый стартовым тестом.

    Примерно в это время проекту стал активно помогать Алексей Кислый. У Алексея есть реальная УКНЦ, которую он изучил буквально вдоль и поперёк. Он предоставил нам тексты программы ПЗУ УКНЦ, дизассемблированное вручную — то чего так существенно не хватало в то время для отладки эмулятора.
    Более того, у Алексея был даже эмулятор УКНЦ (!) написанный им на ассемблере. Его эмулятор работал как «половинка» реальной машины: эмулировал только ЦП и межпроцессорные каналы, наличие ПП имитировалось для ЦП. Последние 2,5 года Алексей консультирует нас по всем деталям работы машины, его вклад в проект просто неоценим.

    19 марта 2007 впервые увидели загрузочное меню. 20 марта 2007 — прошли встроенный тест.
    Ближе к концу марта Арсению удалось получить дамп единственного известного картриджа ПЗУ для УКНЦ — со специальной «кассетной» версией Бейсика. И 27 марта 2007 он уже загружался в эмуляторе. А 28 марта уже заработала загрузка с дискеты (только чтение, без записи на диск).



    И после этого оба разработчика взяли тайм-аут путём глубокого погружения в свою основную работу…

    В июне 2007 сделал инсталлятор и скрипты сборки проекта.
    21 июня 2007 разослал первый инсталлер бета-тестерам. Целью было — убедиться что делаю нужное дело и собрать фидбек по эмулятору.

    В августе 2007 получил от Влада Жигалова рукопись «Ресурсы УКНЦ» — его исследования о том что эта машина предоставляет программисту. Так я и не закончил сканирование этого документа, а надо бы… То что сосканировано — здесь.

    28 сентября 2007 выложил первую публичную бету — ту же версию что рассылал ограниченным тиражом. В октябре-ноябре 2007 вышло три релиза. Сделана утилита rt11dsk для работы с образами дисков без запуска эмулятора.

    С помощью Алексея начал подробно разбираться в устройстве контроллера НГМД УКНЦ — для того чтобы сделать запись на диск. 27 января 2008 — бета-6. Заработала запись на диск!

    5. В открытую

    3 марта 2008 — бета-9. Проект переходит в опен-сорс. code.google.com/p/ukncbtl
    Летом 2008 выходит ещё два релиза, и авторы в очередной раз забивают на проект…

    4 апреля 2009 — Феликс выпустил бету-12. Улучшены тайминги процессора, в результате получили реалистичный звук. Дальше опять кладём большой болт…

    Наконец, с ноября 2009, последние два месяца работы идут практически каждые выходные, выпущены три релиза. Обнаружились приёмо-сдаточные тесты процессоров ВМ1 и ВМ2, которые досконально проверяют работу во всех режимах. Благодаря коммитам Алексея, эти тесты мы уже проходим.

    6. Выводы
    1. Ничего невозможного нет — в общем и целом я доказал себе что «могу».
    2. Но строго говоря, в одиночку я «могу» слишком медленно, а по-настоящему «могу» только в команде со знающими людьми. В деле ретрокомпьютинга кооперация имеет огромное значение.
    3. Работа не окончена, и сложно сказать, когда можно будет поставить точку: уже сейчас работает 99% софта, но эмулятор ещё далеко не идеален и не закончен. Есть куда развиваться как в плане точности и полноты эмуляции (магнитофон, принтер, стык С2, сеть...), так и удобства (полный экран, сохранение состояния...) и в плане переносимости (Qt, SDL...).

    image

    Сайт проекта: code.google.com/p/ukncbtl
    Скриншоты: code.google.com/p/ukncbtl/wiki/Screenshots

    P.S. 14 ноября 2009 на основе кода UKNCBTL начат проект BKBTL, уже худо-бедно эмулирующий БК-0010: code.google.com/p/bkbtl
    Поддержать автора
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 15

      +2
      Здорово, когда такое делается Just For Fun, проверить самого себя. А игрушка точь в точь похожая на Hot Line была ещё в школе на информатике)
        +1
        Хочу БК-0010 и Королевство Эйфория в оригинале… :)
          0
          Эмуляторы БК уже есть :)
            0
            а вот Королевства нету… точнее никак найти не могу… :)
              0
              Ну поиграйте на Спектруме. Там вроде есть… а учитывая, что игра текстовая, разница будет невелика :)
                +1
                Пробовал… не то… душа просит именно для БК-0010… :)
            0
            На БК-0010 был не оригинал. Оригинал был на БЭСМ-6.

            Можно поиграть под RT-11 на эмуляторе УКНЦ:
            nzeemin.livejournal.com/228854.html
            +1
            Браво, ребята, браво!

            Я учился на УКНЦ. У нас был клавиатурный тренажер для него.
            В нашем СЮТ стоял целый класс из них, объединенный в сеть (что-то вроде TokenRing если не ошибаюсь), с сервером, с которого все грузились, и у которого даже был винчестер и принтер!!!
              0
              Я в такой сети (году эдак в 1996 по-моему) участвовал в районной олимпиаде по информатике. При виде компов немного взгрустнулось т.к. дома уже года три стояла Электроника МС-1502/2 (Intel 8088 5.33MHz + 5.25" FDD) а в школе сеть из вторых Поисков.
              +2
              о… УКНЦ. у меня такой на шкафу лежит, как раз глава от обучающего комплекса, с самодельным ide 2.5" контроллером, винтом на 180 метров и отсоединяемой сетевухой, еще где-то лежит блок НГМД с двумя дисководами — один стандартный от Электроники, другой кажется TEAC. еще был монитор, но он благополучно умер от старости, работает секунды три и гаснет.

              на винте, помню, было куча игр и софта, какая-то база данных, и пара *.dsk образов других дисков, управлялось как полагается RT-11. ide контроллер от старости потерял пару-тройку проводков идущих к винту и УКНЦ уже его не видит, но я думаю это можно починить.

              Позавчера разгребал хлам и нашел инструкцию от граф. редактора Ahead под УКНЦ, почитал, такая настольгия (: Увы, как оказалось, саму дискету потерял.

              Великий был компьютер.
                +2
                Не хотите продать? А то у меня своего так и нет.
                  +1
                  написал в хабрапочту.
                0
                помню у меня в школе в 5 классе еще были УКНЦ, шла загрузка по сети с учительского компьютера, а мы программировали/рисовали в ЛОГО и еще была программа-игра Рифмовщик. Ностальгия…
                  +1
                  О, Боже, где ж она моя прекрасная Роюотландия и Замок гоблинов :) Народ, вы просто молодцы!
                    0
                    Будьте добры, объясните на пальцах, как запустить «Замок гоблинов». Прочел UsersManual, но все равно не пойму логику работы системы.

                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                    Самое читаемое