Pull to refresh

UKNC Back to Life!

Reading time 4 min
Views 6.5K

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


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
Tags:
Hubs:
+33
Comments 15
Comments Comments 15

Articles