- PVSM.RU - https://www.pvsm.ru -

PERQ: оживляем чудо из 1970-х

Рассказ про процесс оживления и запуска в эмуляторе еще одной легендарной системы, существовавшей еще до моего рождения и никогда официально не поставлявшейся в СССР. В качестве бонуса будет компилятор Pascal из далеких 70х.

Знакомьтесь:  PERQ, первая коммерческая рабочая станция с графическим интерфейсом. Была создана, продавалась и работала когда меня еще на свете не было.

Знакомьтесь: PERQ, первая коммерческая рабочая станция с графическим интерфейсом. Была создана, продавалась и работала когда меня еще на свете не было.

История

Начнем с небольшого экскурса в историю:

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 в современном окружении:

Да это снова FreeBSD и C#.

Да это снова FreeBSD и C#.

Для сравнения редкое цветное фото этой рабочей станции в жизни:

PERQ: оживляем чудо из 1970-х - 3

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

PERQ: оживляем чудо из 1970-х - 4

Эмулятор

Все началось с того, что я случайно наткнулся на статью [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»:

PERQ: оживляем чудо из 1970-х - 5

Теперь запускаем сборку эмулятора:

/opt/app/dotnet/dotnet build

Если сборка прошла удачно, в конце должно быть сообщение «0 Error (s)»:

PERQ: оживляем чудо из 1970-х - 6

В каталоге «bin/Debug/net7.0/PERQemu» будет собранный и готовый к использованию эмулятор.

Запуск

Запуск осуществляется следующим образом:

alex@albuquerque:/opt/src/PERQemu/PERQemu % /opt/app/dotnet/dotnet run bin/Debug/net7.0/PERQemu

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

Результат запуска вас немного удивит:

PERQ: оживляем чудо из 1970-х - 7

Эмулятор выдает такие эффекты и в оригинальной версии, так что я оставил их как есть — для истории. Помимо окна со спецэффектами, появится интерактивный шелл, в котором надо вводить команды управления эмулятором.

Первым делом необходимо загрузить образ диска, вводим:

load harddisk Disks/f1.phd

Затем необходимо запустить эмуляцию:

go

Начнется загрузка и вместо спецэффектов появится первый в мире коммерческий графический интерфейс.

С мышкой.

Вот так выглядит весь процесс запуска эмулятора PERQ записанный на видео:

Разумеется я не мог не поделиться с читателями как выглядит самый стильный процесс компиляции на из всех виденных:

PERQ: оживляем чудо из 1970-х - 8

Вот весь процесс, записанный на видео и сохраненный для потомков:

Причем в качестве основного языка разработки в 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х:

PERQ: оживляем чудо из 1970-х - 9

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

PERQ: оживляем чудо из 1970-х - 10

RS232 [32] (тот самый «COM‑порт» для пользователей) оказывается имеет очень долгую историю применения — документ выше был напечатан за 20 лет до моих школьных лет, когда мы использовали RS232 и соединение по «нуль модему» для игры в Doom на школьных компьютерах.

Словом, в очередной раз убеждаюсь что у всех известных, очевидных и популярных вещей в ИТ есть долгая и непростая история, про которую мало кто из простых пользователей догадывается.

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

Это немного отцезурированная и доработанная версия статьи, оригинал [33] которой публиковался на ЛОРе [34] и доступен в нашем блоге.

0x08 Software

Мы небольшая команда ветеранов ИТ‑индустрии, создаем и дорабатываем самое разнообразное программное обеспечение, наш софт автоматизирует бизнес‑процессы на трех континентах, в самых разных отраслях и условиях.

Оживляем давно умершее [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