PERQ
«99 бутылок пива» на PERQ Pascal
Мои читатели знают, что последние несколько дней я возился с эмулятором PERQ. PERQ — это персональный компьютер, выпускавшийся в начале
Последние пару дней я пытался написать на тамошнем «Паскале» «песню о пиве», но поскольку на моём ноутбуке потребовалась двойная эмуляция, скорость работы встроенного в систему редактора была ниже плинтуса. Писать было очень сложно, а править ошибки — ещё сложнее. Тем не менее, я справился.
79. PERQ Pascal — диалект некогда широко распространённого в учебных учреждениях языка «Паскаль». Компилируемый язык,
Не думаю, что
{$MESSAGE Written by Evgeny Stepanischev, 2024}
PROGRAM BOTTLES_OF_BEER;
const
MAX_BOTTLES = 99;
Function BotStr(count: integer): string;
begin
if count = 1 then
BotStr := ' bottle of beer'
else
BotStr := ' bottles of beer';
end;
Procedure SingSong;
var
i: integer;
b: string;
begin
for i := MAX_BOTTLES downto 1 do
begin
b := BotStr(i);
writeln(i:0, b, ' on the wall,');
writeln(i:0, b, '!');
writeln('Take one down, pass it around,');
if i > 1 then
begin
b := BotStr(i-1);
writeln((i - 1):0, b, ' on the wall!')
end
else
writeln('No more bottles of beer on the wall!');
writeln;
end;
writeln('No more bottles of beer on the wall,');
writeln('No more bottles of beer!');
writeln('Go to the store and buy some more,');
b := BotStr(MAX_BOTTLES);
writeln(MAX_BOTTLES:0, b, ' on the wall!');
end;
begin
SingSong;
end.Из того, с чем мне пришлось столкнуться, когда я писал программу.
Больше всего ушло времени на ошибку Error 116: Error in type of standard procedure parameter. Речь тут, вроде, идёт о том, что я
Оказалось, что вызов функции BotStr нельзя напрямую поместить во writeln, надо обязательно использовать промежуточную переменную (у меня это b). Учитывая, что скорость работы с эмулятором не позволяет быстро попробовать разные варианты, пришлось изрядно поскрипеть мозгом, чтобы дойти до сути.
Вторая вещь оказалась проще для исправления. В этом диалекте «Паскаля» вывод чисел происходит с отступом. В моём случае выглядит это неаккуратно. К счастью убрать его просто — нужно добавить параметр :0 для каждого числа, выводимого на экран.
import pyautogui, time
FILE_PATH = '99.pas'
time.sleep(5)
with open(FILE_PATH, 'r') as file:
for line in file:
for x in line.lstrip():
pyautogui.typewrite(x)
time.sleep(.6)
time.sleep(1)Вчера ночью всё наконец запустилось и я смог посмотреть как работает моя первая (и наверняка единственная) программа для PERQ.
Кстати, вот ещё одна интересная деталь.
Чтобы получить исполняемый файл, надо исходный код программы сначала скомпилировать командой COMPILE в объектный файл (.SEG), потом скомпоновать командой LINK в исполняемый (.RUN). У обеих команд есть параметр, где указывается имя файла, с которым мы работаем.
Но если мы открывали на редактирование
Редактор в PERQ
Поскольку я всё ещё не оставил идею написать «Песню о пиве» на местном Паскале в эмуляторе персонального компьютера PERQ, осваиваю тамошний редактор. С той скоростью эмуляции, которую выдаёт мой ноутбук, редактирование выглядит очень печально, но деваться некуда, — поскольку в процессе написания кода возникли совершенно неожиданные для меня ошибки, пришлось учиться редактировать код.
Двигаюсь с черепашьей скоростью.
Редактор очень похож на знаменитый vi. Как и в vi, тут присутствуют два режима — набора текста и команд. Правда большинство команд другие, но некоторые точно такие же. Например, надо нажать Q, чтобы выйти.
Очень удобно, что некоторые команды написаны прямо вверху окна редактирования — это I (вставка), D (удаление), F (поиск), R (замена) и S (замена выделенного).
Как видите, если знать английский, то запомнить их элементарно.
Все команды работы с текстом работают c выделенным участком. Например, чтобы удалить
Учится всё это очень быстро, мне понравилось. Единственное, к чему пришлось привыкать дольше — ввод параметров для команд завершается клавишей Escape, а не Enter. Это, по всей видимости, сделано для того, чтобы можно было работать с многострочными участками текста.
Тёмная и светлая темы
Теперь, надеюсь, никто не будет говорить, что тёмная и светлая темы — это
Разбирался немного с системой компьютеров PERQ в эмуляторе, который мне удалось запустить на днях. Как я недавно писал, хочу попробовать небольшую программу под неё написать, поэтому решил изучить её чуть поглубже.
И, читая встроенное руководство, обратил внимание, что при логине можно указать цветовую тему, с которой будет работать система — режим чёрного на белом или белого на чёрном.
Выбор происходит командой LOGIN /CursorFunction=5.Тут «5» как раз означает, что надо выбрать «тёмную». И это
Three Rivers PERQ
Ура! Несмотря на все сложности, мне
Тот момент, когда я увидел наконец рабочий интерфейс этого компьютера на экране своего современного «Макбука», вызвал непередаваемые чувства. Будто я подключился к историческому континууму и снова очутился в том времени, когда компьютерные системы только начинали приобретать современные очертания.
Что же мы имеем после запуска?
В системе доступно всего несколько команд, список которых можно посмотреть, набрав ?. Среди них есть знакомые ls, cd и понятная edit. На скриншоте как раз видно как я вызвал на редактирование программу на Паскале, которая лежит в домашней папке. Рядом лежит скомпилированный бинарник, но программу можно скомпилировать и самостоятельно.
Экран у системы вертикальный, это было заметно ещё на том снимке рабочей системы, который я публиковал вчера. Судя по спецификации, разрешение экрана — 1024×768 точек. В брошюре записано именно в таком порядке, хотя как будто бы должно быть указано наоборот, — 768×1024.
Интересно, что в системе есть графический курсор и поддерживается указательное устройство. У реальной машины это был графический планшет, похожий на те, которым сейчас пользуются иногда дизайнеры, а в эмуляторе курсор движется за указателем мыши
Ещё из интересного — компьютер комплектовался восьмидюймовым дисководом со скоростью передачи 62,5 килобайт в секунду. Я такие дисководы живьём не видел, но дискеты этого размера в руках держал — папа в моём детстве приносил с работы списанные, я их передал в музей техникума, где тогда учился.
Теперь хочу попробовать набрать в тамошнем Паскале «песню о пиве», если хватит терпения. Но для начала надо понять как работать в редакторе, пока я даже не понял как из него выйти.
UTM
Люблю посмотреть на программы далёкого прошлого.
Недавно увидел статью, где рассказывалось об эмуляторе, позволяющем запустить операционную систему компьютеров Three Rivers PERQ, — их выпускали в начале восьмидесятых. Я их никогда не видел, даже не слышал про них ничего, поэтому взглянуть особо интересно.
К сожалению, первая попытка провалилась — эмулятор не заработал на моём «Макбуке» (думаю потому, что у меня ARM). Я не сдался — попробовал виртуализировать «Винду» и запустить его там, но и тут меня ждал неуспех. Теперь я решил скачать эмулятор x86, запустить «Виндоуз» там. Это уже третий подход к снаряду.
Как это сделать я не знал, поэтому пришлось гуглить. Из того, что быстро нашлось, мне понравилась программа UTM (это обёртка над QEMU). Поставилось всё без нерешаемых проблем, единственное, в одном месте инструкцию по установке пришлось скорректировать:
brew install aria2
brew tap minacle/chntpw
brew install cabextract wimlib cdrtools minacle/chntpw/chntpw
sh uup_download_macos.shЯ поставил chntpw из другого источника, так как версия из оригинальной статьи падала в процессе установки с ошибкой — после компиляции одной из зависимостей она не проходила тесты.
«Виндоуз» внутри UTM еле ворочается, но работает. Попробую попозже вечером запустить эмулятор в эмуляторе и посмотреть на интересующую меня операционку. Надеюсь хоть это сработает.