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

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

История

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

PERQ (также известный как Three Rivers PERQ или ICL PERQ) — компьютерная рабочая станция, выпускавшаяся в начале 1980-х годов.

Рабочая станция была задумана пятью выпускниками и работниками Университета Карнеги-Мэлона, организовавшими в 1974 году компанию Three Rivers Computer Corporation (3RCC). Один из основателей, Брайан Розен, также работал в Xerox PARC над рабочей станцией Dolphin. Проект PERQ был вдохновлен оригинальной рабочей станцией Xerox Alto, и был первой коммерчески выпускаемой персональной рабочей станцией. Прототип был показан на конференции SIGGRAPH в 1979 году. Название «PERQ» происходит от слова «perquisite» (рус. приработок, дополнительный доход).[1]

Разумеется большой интерес вызывает прежде всего аппаратная часть:

Центральный процессор PERQ был реализован в виде микропрограммируемой дискретной логики, а не микропроцессора. В его основе были раздельные АЛУ 74181 и контроллер адреса Am2910. Процессор PERQ был необычен тем, что имел 20-битные регистры и перезаписываемое хранилище управляющей программы (WCS), что позволяло изменять микропрограмму.[3] Центральный процессор имел цикл выполнения микрокоманд в 170 нс (5,88 МГц).[4]

В СССР такие системы не поставлялись, поэтому увидеть вживую всю эту красоту ни вы ни ваши родители скорее всего не имели возможности.

Небольшое видео тех лет с демонстрацией рабочей станции и ее интерфейса:

А вот так выглядит эмулятор Perq в современном окружении:

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

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

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

Эмулятор

Все началось с того, что я случайно наткнулся на статью об этой удивительной системе, в которой обнаружилось совсем уж невероятное:

Just when I was thinking there was no hope of me ever seeing the Perq software in action, Josh Dersch has created a Perq emulator! Give this guy a medal!

Один из бывших пользователей смог реализовать полноценный эмулятор для столь уникальной системы из 70х!

Правда с битой ссылкой на скачивание и уже немного заброшенный, но это было хоть что-то, от чего можно отталкиваться. Дальнейший поиск вывел на github автора, откуда и был выгружен оригинальный исходный код.

Эмулятор написан на C# под старую 3.5 версию .NET Framework, но еще собирается под современными версиями Windows.

В случае с Linux все не так просто:

хоть у эмулятора и была поддержка сборки с помощью Mono, но активная разработка самого Mono прекращена а его сборки постепенно пропадают из дистрибутивов.

Вместо Mono ныне продвигается .NET Core, разрабатываемый уже самой Microsoft с официальной поддержкой ключевых дистрибутивов Linux и MacOS (помимо Windows).

К большому сожалению .NET Core сильно отличается от предыдущих верcий и имеет проблемы с совместимостью — говоря официально словами самой Microsoft:

ваш проект необходимо портировать с «.NET Framework» на «.NET Core» для нормальной работы и дальнейшего развития.

Так что я взял на себя смелость портировать проект эмулятора на «.NET Core 7», который ныне вполне неплохо собирается и работает даже под FreeBSD — вот до чего прогресс дошел!

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

Все шаги хоть и производились на FreeBSD, но повторимы под любым линуксом, MacOS и даже Windows.

Сборка

Забираем исходный код из репозитория на Github:

git clone https://github.com/alex0x08/PERQemu.git

Затем устанавливаем пакеты с помощью nuget:

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 (называемая Q-Code) была оптимизирована под Паскаль (особенно, расширенный PERQ Pascal). Команды Q-Code могли выполняться со скоростью до 1 млн команд в секунду.[12] Это породило альтернативную расшифровку названия PERQ: Pascal Evaluation Real Quick (по-настоящему быстрое выполнение Паскаля).

Мне удалось найти руководство по разработке от 1984го года для этой редкой системы, в которой в том числе были примеры исходного кода, удивительно похожие на мой школьный Turbo Pascal начала 90х:

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

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

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

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

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

0x08 Software

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

Оживляем давно умершеечиним никогда не работавшее и создаем невозможное — затем рассказываем об этом в своих статьях.

Комментарии (19)


  1. kenomimi
    22.08.2024 18:40
    +1

    Центральный процессор имел цикл выполнения микрокоманд в 170 нс (5,88 МГц).[4]

    Команды Q-Code могли выполняться со скоростью до 1 млн команд в секунду.

    Немаленькая скорость для тех лет...


  1. Advisers
    22.08.2024 18:40
    +1

    Интересная статья, спасибо!

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


    1. alex0x08 Автор
      22.08.2024 18:40

      Я если честно «те самые времена» не застал (не настолько старый), но замечу что ни Xerox ни Perq не были доступны массовому потребителю даже близко, их использовали ученые‑исследователи, архитекторы и инженеры‑проектировщики — техническая элита тех лет.

      А что касается бизнеса, так компания создавшая Perq достаточно быстро прогорела, не выдержав конкуренции с американскими компаниями и была продана вместе со всеми наработками.

      Обратите внимание на версию 5с в найденном документе по разработке — это фактически самый конец существования компании, поскольку 5я версия так и осталась невыпущенной.


      1. unreal_undead2
        22.08.2024 18:40

        По крайней мере Alto след в истории оставила (в основном благодаря Кею и Smalltalk).


  1. Remers24
    22.08.2024 18:40

    В качестве бонуса будет компилятор Pascal из далеких 70х.

    По мере поступления COBOL, Asembler, PL/1, Fortran, Pascal это сильно нас напрягало. Странно все это - это ПО еще до сих пор кому -то надо.


    1. anonymous
      22.08.2024 18:40

      НЛО прилетело и опубликовало эту надпись здесь


    1. alex0x08 Автор
      22.08.2024 18:40
      +2

      Надо и еще как: вы же видите насколько далеко в историю уходят уши современного ПО, рюшечки меняются а основа остается.


  1. victor_1212
    22.08.2024 18:40
    +3

    PERQ был интересный проект, небольшое дополнение, типа про корни -

    примерно в середине 70х стало понятно, что для разработки VLSI необходимы графические рабочие станции в огромном количестве, желательно недорогие, т.е. то что Sun и Silicon Graphics в массовом количестве производили в 80х, графические станции типа IBM 2250 были, но стоили супер дорого, darpa поддерживала эти проекты (как и создание сети) одновременно в нескольких местах на конкурсной основе, в том числе MIT, Stanford, и Carnegie Mellon, где проект назывался SPICE, типа Scientific Personal Environment, типа Xerox Apollo только дешевле, это и был PERQ, в Stanford тем временем работали над Stanford University Terminal (=SUN), который получился дешевле и лучше + использовал UNIX (BSD), в 1981 PERQ заинтересовалась ICL и начала производство в UK, сначала с Accent OC, позже MPOS, и UNIX, в середине 80х стало ясно, что соревнование с SUN в общем проиграно, в 1985 работы закрылись, хотя позже были неудачные попытки продолжить

    ps

    первая хорошая книга про VLSI - "Introduction to VLSI" Conway, Mead (1979), тоже имеет прямое отношение к этим работам


    1. alex0x08 Автор
      22.08.2024 18:40

      А откуда все эти интересные подробности если не секрет?


      1. victor_1212
        22.08.2024 18:40
        +3

        30+ лет работы в us, обсуждение с коллегами, в том числе свидетелями событий


        1. alex0x08 Автор
          22.08.2024 18:40

          Ух ты! Живой свидетель тех лет!


  1. vasan
    22.08.2024 18:40

    Причем в качестве основного языка разработки в Perq выступает Pascal:

    А что тогда эмулятор написан на C#, а не на Delphi/Lazarus?


    1. alex0x08 Автор
      22.08.2024 18:40
      +2

      Автор был недостаточно идейным видимо.

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


    1. Zara6502
      22.08.2024 18:40
      +3

      когда я пишу на ASM 6502 то вспомогательно пишу на C# и даже не представляю зачем бы мне писать на ассемблере для x86. Мне кажется выбор языка для написания эмулятора никак не связан с эмулируемой платформой.


      1. vasan
        22.08.2024 18:40

        А я бы на современном Object Pascal (Delphi или Lazarus) этот эмулятор реализовал, так сказать отдать дань уважения к изначальным разработчикам. Тем более по ссылке на гитхаб кое какие кода на древнем Паскале имеются.


        1. Zara6502
          22.08.2024 18:40

          А я не уважаю все языки, где для присваивания нужно писать :=, это как программирование через дырочку в заборе.

          PS: вы же понимаете насколько это глупо? я 7 лет писал на Бейсике, 5 лет на Clipper/FoxPro, 10 на Делфи, в промежутках был ассемблер и C, а потом и питон, но когда попал за C# я понял - это мой идеальный ЯП. Он буквально такой как я хочу чтобы был язык высокого уровня. Ты не успеваешь подумать что бы тебе такое реализовать чтобы было удобно, а майки уже всё запихали и тебе нужно только написать a.b() и смотреть на результат. У питона масса своих плюшек, но для меня это настолько вырвиглазный синтаксис, что у меня глаза кровоточат.


          1. vasan
            22.08.2024 18:40

            На вкус и цвет как говорится. А мне наоборот C# не нравится, не буду писать по каким причинам, это займёт уйму времени. Мой идеальный ЯП это С++.


            1. Zara6502
              22.08.2024 18:40

              я на с++ в 90-е писал, недавно решил проверить сколько времени и кода нужно чтобы переписать простую утилиту консольную на с++ с С#, оказалось что дольше на 40% и код на 50% длиннее Так что для меня это оптимальный выбор, когда концентрируешься на самой программе а не на том, как реализовать простейшие вещи.

              ну и как по мне - нет плохих языков, просто для разных задач разный инструмент.


              1. alex0x08 Автор
                22.08.2024 18:40

                Справедливости ради C++ уже тоже далеко не тот что был в 90е, помимо появления библиотек вроде Boost развивается и сам стандарт.

                Вот для примера код на современном C++ 17 одного сетевого фреймворка, который я портировал с Linux на FreeBSD в прошлом году.

                Его объем вполне сопоставим с версией на С#.