- PVSM.RU - https://www.pvsm.ru -
Рассказ про процесс оживления и запуска в эмуляторе еще одной легендарной системы, существовавшей еще до моего рождения и никогда официально не поставлявшейся в СССР. В качестве бонуса будет компилятор Pascal из далеких 70х.
Начнем с небольшого экскурса в историю:
PERQ (также известный как Three Rivers PERQ или ICL PERQ) — компьютерная [1] рабочая станция [2], выпускавшаяся в начале 1980-х [3] годов.
Рабочая станция была задумана пятью выпускниками и работниками Университета Карнеги-Мэлона [4], организовавшими в 1974 году компанию Three Rivers Computer Corporation [5] (3RCC). Один из основателей, Брайан Розен, также работал в Xerox PARC [6] над рабочей станцией Dolphin [7]. Проект PERQ был вдохновлен оригинальной рабочей станцией Xerox Alto [8], и был первой коммерчески выпускаемой персональной рабочей станцией. Прототип был показан на конференции SIGGRAPH [9] в 1979 году. Название «PERQ» происходит от слова «perquisite» (рус. [10] приработок, дополнительный доход).[1] [11]
Разумеется большой интерес вызывает прежде всего аппаратная часть [12]:
Центральный процессор [13] PERQ был реализован в виде микропрограммируемой дискретной логики, а не микропроцессора [14]. В его основе были раздельные АЛУ [15] 74181 [16] и контроллер адреса Am2910 [17]. Процессор PERQ был необычен тем, что имел 20-битные регистры [18] и перезаписываемое хранилище управляющей программы (WCS), что позволяло изменять микропрограмму.[3] [19] Центральный процессор имел цикл выполнения микрокоманд в 170 нс (5,88 МГц).[4] [20]
В СССР такие системы не поставлялись, поэтому увидеть вживую всю эту красоту ни вы ни ваши родители скорее всего не имели возможности.
Небольшое видео тех лет с демонстрацией рабочей станции и ее интерфейса:
А вот так выглядит эмулятор Perq в современном окружении:
Для сравнения редкое цветное фото этой рабочей станции в жизни:

И в рекламе тех лет:

Все началось с того, что я случайно наткнулся на статью [21] об этой удивительной системе, в которой обнаружилось совсем уж невероятное:
Just when I was thinking there was no hope of me ever seeing the Perq software in action, Josh Dersch [22] has created a Perq emulator [23]! Give this guy a medal!
Один из бывших пользователей смог реализовать полноценный эмулятор для столь уникальной системы из 70х!
Правда с битой ссылкой на скачивание и уже немного заброшенный, но это было хоть что-то, от чего можно отталкиваться. Дальнейший поиск вывел на github [24] автора, откуда и был выгружен оригинальный исходный код.
Эмулятор написан на C# под старую 3.5 версию .NET Framework, но еще собирается под современными версиями Windows.
В случае с Linux все не так просто:
хоть у эмулятора и была поддержка сборки с помощью Mono, но активная разработка самого Mono прекращена а его сборки постепенно пропадают из дистрибутивов.
Вместо Mono ныне продвигается .NET Core [25], разрабатываемый уже самой Microsoft с официальной поддержкой ключевых дистрибутивов Linux и MacOS (помимо Windows).
К большому сожалению .NET Core сильно отличается от предыдущих верcий и имеет проблемы с совместимостью — говоря официально словами самой Microsoft:
ваш проект необходимо портировать с «.NET Framework» на «.NET Core» для нормальной работы и дальнейшего развития.
Так что я взял на себя смелость портировать проект эмулятора на «.NET Core 7», который ныне вполне неплохо собирается [26] и работает даже под FreeBSD — вот до чего прогресс дошел!
Процесс портирования был не особо сложным, но поскольку проект очень специфический — описание процесса портирования вряд ли вызовут интерес у широкой публики, поэтому эту часть я описывать не стал.
Все шаги хоть и производились на FreeBSD, но повторимы под любым линуксом, MacOS и даже Windows.
Забираем исходный код из репозитория на Github:
git clone https://github.com/alex0x08/PERQemu.git
Затем устанавливаем пакеты с помощью nuget [27]:
cd /opt/src/PERQemu
/opt/app/dotnet/dotnet restore
.NET Core развернут в каталоге /opt/app/dotnet, второй dotnet в пути — непосредственно исполняемый файл, которым запускается как сам эмулятор так и его сборка.
Если все прошло успешно, в самом конце появится сообщение «All projects are up-to-date for restore»:

Теперь запускаем сборку эмулятора:
/opt/app/dotnet/dotnet build
Если сборка прошла удачно, в конце должно быть сообщение «0 Error (s)»:

В каталоге «bin/Debug/net7.0/PERQemu» будет собранный и готовый к использованию эмулятор.
Запуск осуществляется следующим образом:
alex@albuquerque:/opt/src/PERQemu/PERQemu % /opt/app/dotnet/dotnet run bin/Debug/net7.0/PERQemu
Запускать необходимо из каталога с проектом эмулятора, указав относительный путь до собранного выше бинарника.
Результат запуска вас немного удивит:

Эмулятор выдает такие эффекты и в оригинальной версии, так что я оставил их как есть — для истории. Помимо окна со спецэффектами, появится интерактивный шелл, в котором надо вводить команды управления эмулятором.
Первым делом необходимо загрузить образ диска, вводим:
load harddisk Disks/f1.phd
Затем необходимо запустить эмуляцию:
go
Начнется загрузка и вместо спецэффектов появится первый в мире коммерческий графический интерфейс.
С мышкой.
Вот так выглядит весь процесс запуска эмулятора PERQ записанный на видео:
Разумеется я не мог не поделиться с читателями как выглядит самый стильный процесс компиляции на из всех виденных:

Вот весь процесс, записанный на видео и сохраненный для потомков:
Причем в качестве основного языка разработки в Perq выступает Pascal:
Изначальная система команд PERQ похожая на p-Code [28] (называемая Q-Code) была оптимизирована под Паскаль [29] (особенно, расширенный PERQ Pascal). Команды Q-Code могли выполняться со скоростью до 1 млн команд в секунду.[12] [30] Это породило альтернативную расшифровку названия PERQ: Pascal Evaluation Real Quick (по-настоящему быстрое выполнение Паскаля).
Мне удалось найти руководство по разработке [31] от 1984го года для этой редкой системы, в которой в том числе были примеры исходного кода, удивительно похожие на мой школьный Turbo Pascal начала 90х:

А как вам например такое:

RS232 [32] (тот самый «COM‑порт» для пользователей) оказывается имеет очень долгую историю применения — документ выше был напечатан за 20 лет до моих школьных лет, когда мы использовали RS232 и соединение по «нуль модему» для игры в Doom на школьных компьютерах.
Словом, в очередной раз убеждаюсь что у всех известных, очевидных и популярных вещей в ИТ есть долгая и непростая история, про которую мало кто из простых пользователей догадывается.
Если вдруг кто‑то из читателей сталкивался с такими машинами — отзовитесь, очень интересует ваш опыт, без которого с эмулируемой системой можно сделать не очень много.
Это немного отцезурированная и доработанная версия статьи, оригинал [33] которой публиковался на ЛОРе [34] и доступен в нашем блоге.
Мы небольшая команда ветеранов ИТ‑индустрии, создаем и дорабатываем самое разнообразное программное обеспечение, наш софт автоматизирует бизнес‑процессы на трех континентах, в самых разных отраслях и условиях.
Оживляем давно умершее [35], чиним никогда не работавшее [36] и создаем невозможное [37] — затем рассказываем об этом в своих статьях.
Автор: alex0x08
Источник [38]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/pascal/394331
Ссылки в тексте:
[1] компьютерная: https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80
[2] рабочая станция: https://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D0%B1%D0%BE%D1%87%D0%B0%D1%8F_%D1%81%D1%82%D0%B0%D0%BD%D1%86%D0%B8%D1%8F
[3] 1980-х: https://ru.wikipedia.org/wiki/1980-%D0%B5
[4] Университета Карнеги-Мэлона: https://ru.wikipedia.org/wiki/%D0%A3%D0%BD%D0%B8%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D1%82%D0%B5%D1%82_%D0%9A%D0%B0%D1%80%D0%BD%D0%B5%D0%B3%D0%B8_%E2%80%94_%D0%9C%D0%B5%D0%BB%D0%BB%D0%BE%D0%BD
[5] Three Rivers Computer Corporation: https://ru.wikipedia.org/wiki/Three_Rivers_Computer_Corporation
[6] Xerox PARC: https://ru.wikipedia.org/wiki/Xerox_PARC
[7] Dolphin: https://ru.wikipedia.org/w/index.php?title=Xerox_Dolphin&action=edit&redlink=1
[8] Xerox Alto: https://ru.wikipedia.org/wiki/Xerox_Alto
[9] SIGGRAPH: https://ru.wikipedia.org/wiki/SIGGRAPH
[10] рус.: https://ru.wikipedia.org/wiki/%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9_%D1%8F%D0%B7%D1%8B%D0%BA
[11] [1]: https://ru.wikipedia.org/wiki/PERQ#cite_note-1
[12] аппаратная часть: https://ru.wikipedia.org/wiki/PERQ
[13] Центральный процессор: https://ru.wikipedia.org/wiki/%D0%A6%D0%B5%D0%BD%D1%82%D1%80%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%BE%D1%80%D0%BD%D0%BE%D0%B5_%D1%83%D1%81%D1%82%D1%80%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%BE
[14] микропроцессора: https://ru.wikipedia.org/wiki/%D0%9C%D0%B8%D0%BA%D1%80%D0%BE%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%BE%D1%80
[15] АЛУ: https://ru.wikipedia.org/wiki/%D0%90%D1%80%D0%B8%D1%84%D0%BC%D0%B5%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE-%D0%BB%D0%BE%D0%B3%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D1%83%D1%81%D1%82%D1%80%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%BE
[16] 74181: https://ru.wikipedia.org/w/index.php?title=74181&action=edit&redlink=1
[17] Am2910: https://ru.wikipedia.org/w/index.php?title=Am2910&action=edit&redlink=1
[18] регистры: https://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80_%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%BE%D1%80%D0%B0
[19] [3]: https://ru.wikipedia.org/wiki/PERQ#cite_note-hardware-faq-3
[20] [4]: https://ru.wikipedia.org/wiki/PERQ#cite_note-sus-leaflets-1985-4
[21] статью: http://toastytech.com/guis/perq.html
[22] Josh Dersch: http://yahozna.dyndns.org/about/index.html
[23] Perq emulator: http://yahozna.dyndns.org/projects/PERQemu/index.html
[24] github: https://github.com/jdersch/PERQemu
[25] .NET Core: https://dotnet.microsoft.com/en-us/download
[26] собирается: https://teletype.in/@alex0x08/dotnet-on-freebsd-yeee
[27] nuget: https://en.wikipedia.org/wiki/NuGet
[28] p-Code: https://ru.wikipedia.org/w/index.php?title=P-Code&action=edit&redlink=1
[29] Паскаль: https://ru.wikipedia.org/wiki/%D0%9F%D0%B0%D1%81%D0%BA%D0%B0%D0%BB%D1%8C_(%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)
[30] [12]: https://ru.wikipedia.org/wiki/PERQ#cite_note-12
[31] руководство по разработке: https://doc.lagout.org/science/0_Computer%20Science/0_Computer%20History/old-hardware/perq/pos_G5/PERQ_POS_G.5_Programming_Examples_Mar84.pdf
[32] RS232: https://en.wikipedia.org/wiki/RS-232
[33] оригинал: https://blog.0x08.ru/perq-emulator-from-70s
[34] ЛОРе: https://www.linux.org.ru/gallery/screenshots/17419689?ysclid=m05jsk4zaz703823851
[35] давно умершее: https://blog.0x08.ru/xerox-alto-bcpl-hello-world
[36] чиним никогда не работавшее: https://blog.0x08.ru/running-from-websphere-esb
[37] невозможное: https://blog.0x08.ru/call-webservice-from-dos
[38] Источник: https://habr.com/ru/articles/837908/?utm_campaign=837908&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.