TeleBolkNote
183 subscribers
1.46K photos
4 videos
1.6K links
Моя персональная записная книжка. Интересна мне, по большей части, история, своя жизнь, большие языковые модели и программирование. Совпадает с сайтом bolknote.ru
Download Telegram
Three Rivers PERQ
Евгений Степанищев (RSS)

Ура! Несмотря на все сложности, мне всё-таки удалось запустить эмулятор PERQ, про который я писал вчера.

Тот момент, когда я увидел наконец рабочий интерфейс этого компьютера на экране своего современного «Макбука», вызвал непередаваемые чувства. Будто я подключился к историческому континууму и снова очутился в том времени, когда компьютерные системы только начинали приобретать современные очертания.

Эмулятор компьютера Three Rivers PERQ в «Видоуз», запущенном в эмуляторе компьютера с процессором Intel

Что же мы имеем после запуска?

В системе доступно всего несколько команд, список которых можно посмотреть, набрав ?. Среди них есть знакомые ls, cd и понятная edit. На скриншоте как раз видно как я вызвал на редактирование программу на Паскале, которая лежит в домашней папке. Рядом лежит скомпилированный бинарник, но программу можно скомпилировать и самостоятельно.

Экран у системы вертикальный, это было заметно ещё на том снимке рабочей системы, который я публиковал вчера. Судя по спецификации, разрешение экрана — 1024×768 точек. В брошюре записано именно в таком порядке, хотя как будто бы должно быть указано наоборот, — 768×1024.

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

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

Теперь хочу попробовать набрать в тамошнем Паскале «песню о пиве», если хватит терпения. Но для начала надо понять как работать в редакторе, пока я даже не понял как из него выйти.

https://bolknote.ru/all/three-rivers-perq/
👍2
Одноглазый Дисплей
Евгений Степанищев (RSS)

Ездили вчера за город, пожить на природе, недавно вернулись. Рядом с местом где мы были, находится лошадиная ферма и мои девочки, конечно, не отказали себе в удовольствии покататься на лошадях.

Я не фанат конного спорта, поэтому просто прогулялся рядом. Пока гулял, заметил, что у коня жены, гнедого Дисплея, что-то не то с левым глазом.

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

И вот в одном из таких боёв Дисплей получил копьём в глаз. Рана давно зажила, но, судя по состоянию глаза, если он им что-то и видит, то чрезвычайно плохо. Очень жалко коня.

Дисплей и Дакота везут моих девочек на прогулку

https://bolknote.ru/all/odnoglazy-displey/
Тёмная и светлая темы
Евгений Степанищев (RSS)

Теперь, надеюсь, никто не будет говорить, что тёмная и светлая темы — это какая-то новая мода?

Разбирался немного с системой компьютеров PERQ в эмуляторе, который мне удалось запустить на днях. Как я недавно писал, хочу попробовать небольшую программу под неё написать, поэтому решил изучить её чуть поглубже.

И, читая встроенное руководство, обратил внимание, что при логине можно указать цветовую тему, с которой будет работать система — режим чёрного на белом или белого на чёрном.

Выбор происходит командой LOGIN /CursorFunction=5.Тут «5» как раз означает, что надо выбрать «тёмную». И это в 1982-м году, судя по тому что написано в верхнем правом углу!

Тёмная и светлая темы в операционной системе компьютера PERQ

https://bolknote.ru/all/tyomnaya-i-svetlaya-temy/
Редактор в PERQ
Евгений Степанищев (RSS)

Поскольку я всё ещё не оставил идею написать «Песню о пиве» на местном Паскале в эмуляторе персонального компьютера PERQ, осваиваю тамошний редактор. С той скоростью эмуляции, которую выдаёт мой ноутбук, редактирование выглядит очень печально, но деваться некуда, — поскольку в процессе написания кода возникли совершенно неожиданные для меня ошибки, пришлось учиться редактировать код.

Двигаюсь с черепашьей скоростью.

Нерабочая программа в процессе редактирования

Редактор очень похож на знаменитый vi. Как и в vi, тут присутствуют два режима — набора текста и команд. Правда большинство команд другие, но некоторые точно такие же. Например, надо нажать Q, чтобы выйти.

Очень удобно, что некоторые команды написаны прямо вверху окна редактирования — это I (вставка), D (удаление), F (поиск), R (замена) и S (замена выделенного).

Как видите, если знать английский, то запомнить их элементарно.

Все команды работы с текстом работают c выделенным участком. Например, чтобы удалить какой-то кусок текста, его надо сначала найти в редакторе командой F (или выделить другим способом, коих масса), а потом нажать D.

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

https://bolknote.ru/all/redaktor-v-perq/
👍2
«99 бутылок пива» на PERQ Pascal
Евгений Степанищев (RSS)

Мои читатели знают, что последние несколько дней я возился с эмулятором PERQ. PERQ — это персональный компьютер, выпускавшийся в начале 1980-х годов, первый коммерчески успешный ПК с графическим интерфейсом. Такой олдскул мил моему сердцу, поэтому я потратил несколько вечеров, чтобы попробовать хоть на базовом уровне разобраться что из себя представляла операционная система тех компьютеров.

Последние пару дней я пытался написать на тамошнем «Паскале» «песню о пиве», но поскольку на моём ноутбуке потребовалась двойная эмуляция, скорость работы встроенного в систему редактора была ниже плинтуса. Писать было очень сложно, а править ошибки — ещё сложнее. Тем не менее, я справился.

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 для каждого числа, выводимого на экран.

В какой-то момент я так устал редактировать код со скоростью улитки, стал использовать обычный редактор своего ноутбука. Потом я просто запускал небольшую программу, написанную на «Пайтоне», которая печатала код за меня прямо внутрь окна с эмулятором PERQ:

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). У обеих команд есть параметр, где указывается имя файла, с которым мы работаем.

Но если мы открывали на редактирование какой-то файл,
🔥1
его имя указывать не надо — операционная система его где-то запоминает и команды COMPILE и LINK знают с каким файлом мы работаем. Очень удобно.

Результат запуска «Песни о пиве» под эмулятором компьютера PERQ

https://bolknote.ru/all/99-butylok-piva-na-perq-pascal/
Вечная мышь
Евгений Степанищев (RSS)

Я иногда заглядываю в тред про «неубиваемые» вещи, про который я как-то писал, — посмотреть не появилось ли там чего-либо актуального для меня. Сегодня в очередной раз заглянул и задумался, — а есть ли у меня что-то такое же неубиваемое?

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

Это беспроводная и безбатареечная мышь компании «A4Tech», которая питается индуктивным образом от специального коврика. Сносу ей нет, работает без нареканий и, если помрёт, попробую найти и купить такую же, они вроде ещё даже производятся.

https://bolknote.ru/all/vechnaya-mysh/
👍1
Программа с именем 0xFF
Евгений Степанищев (RSS)

В ДОСе, как может кто-то ещё помнит, была своя, отличная от всего, кодировка русских букв, так называемая CP866. Это однобайтовая кодировка, то есть в таблице символов всего 256 позиций.

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

Не помню, использовалось ли это свойство для чего-то полезного или интересного, но на днях прочитал как развлекались с его помощью в те времена:


А 255 символ запретили? 30 лет назад, еще под MSDOS, переименовали утилиту переворота экрана в 255 символ и вставили в autoexec.bat. Хозяин компа уже психовать начал и монитор переворачивать :)) Показали ему прикол...


Ну то есть переименовали программу так, чтобы её имя выглядело как пробельный символ и добавили её в скрипт автозагрузки, хозяин компьютера, видимо, проверял скрипт, ничего не находил и не понимал что происходит.

Мне стало интересно проверить — действительно ли это работает? Благо ДОС можно сейчас запустить даже в браузере.

При этом очевидно, что «настоящий» пробел для этого не годится — ДОС просто не распознает его в автозагрузке как имя файла для запуска.

Я не знаю как раньше вводили символ с кодом 255 в командную строку, поэтому просто набросал программу на ассемблере, которая переименовывает файл mem.exe (которая обычно есть в составе ДОСа) в  .com:

org 100h

section .data
oldName db 'MEM.EXE', 0
newName db 255, '.COM', 0

section .text
global _start

_start:
mov ah, 56h
lea dx, oldName
lea di, newName
int 21h

mov ax, 4C00h
int 21h
Необходимое пояснение: расширение обязательно, иначе ДОС не поймёт, что файл запускаемый. При запуске его можно не указывать — операционка догадается сама что именно подставить.

На следующем шаге я скомпилировал программу у себя прямо в «МакОСи» и вывел в шестнадцатеричном виде:

$ hexdump -C <(nasm -f bin rename.asm -o /dev/stdout)
00000000 b4 56 8d 16 14 01 8d 3e 1c 01 cd 21 b8 00 4c cd |.V.....>...!..L.|
00000010 21 00 00 00 4d 45 4d 2e 45 58 45 00 ff 2e 43 4f |!...MEM.EXE...CO|
00000020 4d 00 |M.|
00000022
Далее набрал её в кодах при помощи команды DEBUG и запустил. В текущей директории появилась программа с нужным именем:

Для последнего шага мне нужно было как-то снова получить символ 255 в командной строке. Для этого я перенаправил вывод команды DIR в файл START.BAT и отредактировал получившееся при помощи команды EDIT — убрал всё лишнее, кроме символа с именем команды (кажется у меня в файла попали ещё и лишние переводы строки, но они роли не играют).

Попробовал запустить, сработало!

https://bolknote.ru/all/programma-s-imenem-0xff/
😁3🔥1
Письма в спектрумовские журналы
Евгений Степанищев (RSS)

Вспоминали сегодня с братишкой за обедом «Спектрум» — первый компьютер, который появился у нас дома и второй, на котором мы когда-либо программировали. Вспомнили, как писали в тематические журналы, я даже как-то пытался найти наши письма в интернет-архивах.

Тогда я делал это вручную, но с тех пор я научился использовать распознавание текста, встроенное в «МакОСь» и решил попробовать посмотреть не упустил ли я что-нибудь. Написал скрипт, который перегоняет скачанные мной журналы, посвящённые «Спектруму», в картинки, потом преобразует их в текст и ищет мою фамилию.

«ZX-Форум», №1, Москва, 1994, страница 122

POKES, про которые пишут в этом отрывке, это команда встроенного в «Спектрум» Бейсика, позволяющая вносить изменения в памяти по какому-либо адресу. Таким образом в код игр и других программ вносились правки.

«ZX-Ревю», №6, 1994, Москва, страница 67

«ZX-Ревю», №3, 1995, Москва, страница 60

Adventureland — текстовый квест 1983 года. Локации рисуются картинкой, к которой даётся текстовое описание. Все команды так же вводятся текстом. Игрушки этого жанра обычно понимали крайне упрощённые англоязычные конструкции вида «глагол», либо «глагол существительное».

Movie — изометрическая аркадная игра 1986 года, где действие происходит в криминальном Нью-Йорке 1930-х годов.

«ZX-Ревю», №4, 1994, Москва, страница 51

«Компаньон» — это клон «Спектрума», который был у нас с братишкой. Отечественная промышленность тогда активно импортозамещала эти компьютеры, внося, как это водится, некие улучшения. В нашем клоне их было два — неизвестного назначения разъём с правого торца и русификация.

Русификация производилась добавлением второго набора символов в неиспользуемые части ПЗУ. Переключение на русский набор и обратно происходило, когда процедура печати встречала в потоке какой-то символ, код которого я уже не помню.

Прерывание второго рода — это вид аппаратных прерываний. Обычно через него в «Спектруме» делались какие-нибудь фоновые процессы, типа проигрывания звука в играх. Адрес, куда передаётся управление при прерывании вычислялся достаточно сложно: старший байт адреса брался из регистра I, младший — из какого-то порта (по умолчанию там было число 255), по этому адресу читался адрес на который уже и передавалось управление.

Так как ПЗУ в «Спектруме» находится в младших адресах, то какие-то значения регистра I приводили к чтению адреса из ПЗУ. Большинство авторов игр знать не знали, где-то в России в ПЗУ вносят какие-то изменения и считали его неизменным (оно действительно было постоянным и не обновлялось). Поэтому в играх нередко использовались адреса из ПЗУ для адресации прерываний второго рода, что приводило к проблемам в российских клонах.

Эти проблемы приходилось чинить самостоятельно. Мы с братишкой читали ассемблерный код, находили использование таких прерываний и подбирали им другой адрес. Либо записывали нужный адрес куда-то в ОЗУ (так сделано для игры «Саботёр 2», пробелы там нужны, так как адрес записывается в область для встроенного Бейсика).

ZX-Ревю, №6, 1994, Москва, страница 56

MONS-3 — ассемблерный отладчик, почему он вис, понятно, в общем-то: команда ассемблера HALT переводит процессор в состояние паузы до наступления прерывания. Так как во время выполнения MONS-3 прерыванию поступить неоткуда, программа зависала навсегда, нужно было перезагружаться. Думаю, в следующих версии отладчик просто игнорировал эту команду, поэтому и не зависал.

https://bolknote.ru/all/pisma-v-spektrumovskie-zhurnaly/
Карбон перепилился
Евгений Степанищев (RSS)

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

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

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

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

https://bolknote.ru/all/karbon-perepelilsya/
1