«Hello Habr!» на Xerox Alto

Xerox Alto — компьютер, разработанный в исследовательском центре Xerox PARC в 1973 году. Первый в мире компьютер, использовавший метафору «рабочего стола» и графический пользовательский интерфейс. Это легенда компьютерной индустрии, оказавшая огромное влияние на все дальнейшее развитие компьютеров и ПО.

С помощью эмуляции мы погрузимся в то замечательное время, напишем и скомпилируем тестовую программу на BCPL — прадеде языка С.

Слева эмулятор, справа - один из сохранившихся оригиналов.

Слева эмулятор, справа — один из сохранившихся оригиналов.

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

Один такой энтузиаст из солнечной Калифорнии занимается восстановлением до полной работоспособности сохранившейся рабочей станции и описывает процесс в своем блоге.

Получается с трудом, с помощью большого опыта, работы с осциллорафом и сообщества фанатов-учетных со всей планеты.

Вот так например выглядит жесткий диск:

Как вам размерчик?

Как вам размерчик?

Эмуляторы

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

ContrAltoJS

Реализация эмулятора на Javascript, работает в браузере:

This is a pure JavaScript implementation of the ContrAlto Xerox Alto emulator. The end goal is a usable, performant Xerox Alto emulator running in your web browser.

Исходники находятся вот тут.

Это наверное самый легкий способ посмотреть Xerox Alto, но к сожалению эта реализация очень медленная, имейте ввиду сей прискорбный факт.

ContrAlto на современном компьютере в музее. На мониторе Smalltalk - далекий предок современной Java

ContrAlto на современном компьютере в музее. На мониторе Smalltalk — далекий предок современной Java

ContrAlto

Современный эмулятор на C#, созданный сотрудником Living Computers Museium, собираемый и запускаемый без особых проблем как на Windows так и на Linux:

Living Computers» Engineer Josh Dersch spent more than a year creating this emulator of the Xerox Alto, a pioneering computer workstation developed at the Palo Alto Research Center (PARC) in 1973. The Alto introduced several experimental concepts, including the graphical user interface, object-oriented programming, and Ethernet networking.

Исходники находятся тут, доступна также бинарная сборка.

Собирается из исходников без особых проблем как в Windows так и в линуксе. Бинарная сборка запускается и на FreeBSD тоже (с Mono), но официально это не заявлено.

На заглавной картинке к статье запущен именно этот эмулятор.

Salto

Наверное самый «хардкорный» вариант — на чистом Си, актуальные исходники проекта находятся вот тут:

SALTO — Xerox Alto I/II Simulator. Not a project of mine, just to keep this code from getting lost

Поскольку код был выложен 11 лет назад, думаю вы и сами догадываетесь что проект слегка устарел и так просто уже не собирается — пришлось немного поправить.

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

BCPL

Но прежде чем переходить к тыканью по кнопкам и вводу команд в эмуляторе, стоит все же немного рассказать и о самом BCPL:

BCPL (Basic Combined Programming Language) — язык программирования, разработанный Мартином Ричардсом в 1966 году в Кембриджском университете.

Разумеется столь сухое описание из википедии даже близко не передает ни его мощи ни легендарности. А ведь этот язык — важная веха развития программирования, сильно повлиявший на появившейся много позже Си:

BCPL has had a productive life of its own, but my interest in it is more in the basis it provided for the development of the B language and then in the history of C. This influence is traced, with gratitude, in the latter paper. As it tells, the BCPL language definition when B was developed was just the manual recorded here, together with the compiler that Richards contemporaneously wrote for the CTSS system.

Цитата выше между прочим с сайта Bell Labs, той самой Bell Labs, которая присутствует в любой книжке по компьютерной истории начиная с изобретения телефона.

Для иллюстрации вот так выглядел код на BCPL в далеком 1972 м (взято из исходников самого компилятора):

if SourceName!0 eq 0 do Error("No source file name")
if SourceDevice!0 eq 0 do Movestring(SourceName, SourceDevice)
if BinName!0 eq 0 do Error("No binary file name")

test SWTTOfile % (SWOutput & not SWTTOtype)
   ifso
      [
      if OutputName!0 eq 0 then Error("No output file name")
      OutputStream = OpenOutput(OutputName)
      ]
   ifnot [ OutputStream = TTOstream; OutputName!0 = 0 ]

test SWTTOfile
   ifso ErrorStream = OutputStream
   ifnot ErrorStream = TTOstream
...

На мой взгляд читабельней даже современных языков, не находите?

Обнаружилось еще более удивительное — силами «фанатов‑историков» компилятор BCPL был портирован на x86-архитектуру: раз и два.

Также один из этих портов я смог собрать и использовать для компиляции тестового приложения (см. оригинал статьи) на x86 машине, уже безо всякой эмуляции, но чтобы не отвлекаться от темы — пропустим.

«Hello world» на Xerox Alto

Все манипуляции проводились на обычном Linux, использовался эмулятор ContrAlto. Из требований к среде только наличие установленного Mono:

mono --version
Mono JIT compiler version 6.12.0.182 (tarball Fri May  5 03:10:06 UTC 2023)
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
        TLS:           __thread
        SIGSEGV:       altstack
        Notifications: epoll
        Architecture:  amd64
        Disabled:      none
        Misc:          softdebug 
        Interpreter:   yes
        LLVM:          supported, not enabled.
        Suspend:       hybrid
        GC:            sgen (concurrent by default)

Образы дисков можно скачать вот отсюда, для работы с компилятором будет нужен файл tdisk4.dsk.Z

По какой‑то неведомой причине, казалось бы более актуальный образ bcpl.dsk содержит сломанный редактор (bravo), поэтому у меня не получилось его использовать.

Образ диска необходимо распаковать перед использованием — оказалось что ContrAlto (в отличие от Salto) не умеет работать с архивированными образами:

zcat tdisk4.dsk.Z > tdisk4.dsk

Скачиваем эмулятор с раздела Releases в Github-репозитории проекта, нужный файл: ContrAlto-mono.zip

Распаковываем и запускаем:

mkdir contralto
cd contralto
unzip ../ContrAlto-mono.zip
mono ./Contralto.exe

В запущенном эмуляторе появится своя собственная консоль, со своими командами:

mono ./Contralto.exe
ContrAlto v1.2.3.0 (c) 2015-2018 Living Computers: Museum+Labs.
Bug reports to joshd@livingcomputers.org

You are at the ContrAlto console.  Type 'show commands' to see
a list of possible commands, and hit Tab to see possible command completions.
>

Нужно загрузить образ диска:

>load disk 0 disks/tdisk4.dsk
Drive 0 loaded.
>             

И вызвать команду запуска эмуляции:

>start                       
Alto started.


Появится графическое окно эмулятора, с запущенным Xerox Alto внутри:

Окно как и оригинальная система имеет

Окно как и оригинальная система имеет «портретное» соотношение сторон, поэтому может не влезть в экран

Внутри все. крайне необычно для современного пользователя:

8a4906c3c26c7780c8e894bffce30b1f.png

Команда '?' покажет список файлов на диске — только файлов, если я ничего не упустил то концепции каталога тогда еще не было.

Все файлы с расширением .RUN являются запускаемыми, для запуска достаточно ввести имя такого файла без учета регистра и он запустится.

Например для просмотра содержимого файла используется команда type (TYPE.RUN):

Кто-то тестировал работу цикла в 1983м году

Кто-то тестировал работу цикла в 1983 м году

Насладиться версией сборки можно командой release:

Этот релиз был за ~2 месяца до моего рождения

Этот релиз был за ~2 месяца до моего рождения

Насладившись единением с историей, запускаем наконец текстовый редактор bravo:

Да, это самый первый WYSIWYG редактор на свете.

Да, это самый первый WYSIWYG редактор на свете.

Нажимаем клавишу i (INSERT) и вводим вот такой код:

// Hello world demo
get "streams.d"
external
[
Ws
]

let Main() be
[
Ws("Hello Habr!*N")
]

После ввода нажимаем ESC, затем клавишу p и вводим имя файла:

hello.bcpl

Затем опять нажимаем ESC (НЕ Enter!) и запустится процесс сохранения, визуально медленный.

После сохранения на диск будет сообщение:

341a4d140777f0a206a131f50bf75244.png

Нажимаем клавишу q и затем Enter для выхода из этого замечательного редактора.

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

bcpl hello.bcpl

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

0100b60398b8e6dd1fb994bff08dbaca.png

Теперь запускаем линковщик (да да это все еще 1972 год!):

bldr/d/l/v hello

Обратите внимание на передачу параметров линковщику:

bldr это само приложение, а /d/l/v — параметры, которые идут подряд сразу после имени приложения и без пробелов.

Вот так выглядит результат работы линковщика:

130368625e560ab3f7b4e7edd31994e5.png

Наконец запускаем само приложение:

hello

Результат:

b7a28ef760a9772126cace1b4a995536.png

Поздравляю — вы только что прикоснулись собственными руками к истории ИТ индустрии,  практически вживую.

Эпилог

Проект Xerox Alto это в чистом виде история всей компьютерной индустрии. Важная ступень развития, определившая все дальнейшее развитие компьютеров.

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

Запустить эмулятор этой станции и увидеть ее вживую — означает прикоснуться к истокам всей ИТ-индустрии, увидеть откуда пошли принципы построения программ, графические редакторы да и сам интерфейс вообще.

А лазая по выложенному архиву исходного кода Xerox Alto, можно воочию убедиться насколько на самом деле стары принципы работы компьютеров и разработки ПО.

Невероятный опыт, рекомендую.

0×08 Software

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

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

© Habrahabr.ru