Русский English
VI международная конференция
«РАЗВИТИЕ ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ В РОССИИ, СТРАНАХ БЫВШЕГО СССР И СЭВ»
Россия, Нижний Новгород, НИУ ВШЭ, 25–27 сентября 2023 года
Восстановление исходных текстов программ на языке Паскаль-БЭСМ-6 (ностальгические заметки об эмуляции БЭСМ-6)

Восстановление исходных текстов программ на языке Паскаль-БЭСМ-6 (ностальгические заметки об эмуляции БЭСМ-6)

Аннотация

В сообщении рассказывается об источнике интереса автора к БЭСМ-6, ее программному обеспечению, и об истории создания и развития эмуляторов БЭСМ-6 – режима пользователя и полной машины – а также приводятся замечания и наблюдения, касающиеся восстановления исходного текста Паскаль-компилятора БЭСМ-6 и игры «Калах» в составе информационно-развлекательной системы «ДЖИН».

Ключевые слова – БЭСМ-6, эмуляция, Диспак, мониторная система “Дубна”, АЛГОЛ-60, ФОРТРАН, Паскаль, ДЖИН.

I. Введение. Знакомство автора с БЭСМ-6

В школьные годы, в начале 1980-х, автор занимался в Московском городском Дворце пионеров и школьников в кружке программирования под руководством С. З. Рачинского.

У Дворца пионеров была договорённость с ВЦ АН СССР, расположенном в 20 минутах ходьбы, о допуске кружковцев в здание ВЦ для сдачи написанных ими программ на перфорацию и выполнении их на БЭСМ-6.

Практически уникальной особенностью этого кружка было то, что участие в нём приравнивалось к производственному обучению для старшеклассников (так называемый УПК – “учебно-производственный комбинат”). Тем самым, в течение двух старших классов один из дней в неделю автор был свободен от школьных занятий, и посвящал досуг посещению ВЦ АН, оставаясь ждать результатов очередного запуска программы после конца рабочего дня, и через некоторое время достиг достаточного доверия у операторов, благодаря чему получал по вечерам доступ в машинный зал. Во время этих визитов автор познакомился с В. Ф. Тюриным – главным разработчиком ОС ДИСПАК, и его командой из ИТМ и ВТ, в частности, с М. Ю. Ярославцевым, позднее одним из соавторов эмулятора БЭСМ-6.

В студенческие годы, автор в течение одного лета работал на ВЦ АН СССР оператором БЭСМ-6.

II. Зарождение эмулятора. Эмуляция режима пользователя

Работа над эмулятором режима пользователя началась в 1995 году, когда из ИТМ и ВТ были получены ленты с образами дисков ОС (резервная копия тома 2053 от Эльбруса-1К2 “СВС”), систем программирования (резервная копия тома 2048) и исходных текстов ОС ДИСПАК для Эльбруса-1К2 (резервная копия тома 2113).

За основу была взята реализация базового эмулятора команд БЭСМ-6, доступных пользователю, ранее написанная Сергеем Вакуленко.

В процессе отладки эмулятора, в частности, обнаружилось, что эмуляция команды арифметического деления (A/X, код операции 016) с помощью деления с плавающей точкой в формате IEEE не достигает аутентичности: тест арифметического устройства БЭСМ-6, имевшийся на системном диске, диагностировал расхождение в младшем разряде на одном из тестовых примеров. Хотя это расхождение результатов не оказывало никакого заметного влияния на выполнение программ, реализация команды деления была изменена. Использованный в новой реализации алгоритм деления, функционально эквивалентный SRT-делению по основанию 2[1], обеспечил прохождение теста АУ.

Особый интерес вызывает тот факт, что операция деления оставляла один из регистров машины – так называемый регистр младших разрядов, РМР – в состоянии, не специфицированном в описании архитектуры. Существовала возможность, что в каких-либо целях (например, чтобы определить, произошло ли деление нацело) за время существования БЭСМ-6 разработчики ПО могли произвести реверс-инжиниринг и пользоваться содержимым РМР после операции деления. На сегодняшний день таких программ замечено не было.

Первоначальная версия эмулятора режима пользователя, в дополнение к командам, содержала реализации минимального набора системных вызовов (экстракодов), например, необходимых для обращения к внешним устройствам. Это позволило запустить под эмулятором компиляцию и выполнение программ на ФОРТРАНе, АЛГОЛе-ГДР и Паскале в рамках мониторной системы “Дубна”.

Так, например, в целях демонстрации курьёзных возможностей системы программирования был реализован экстракод перфорации перфокарт и возможность ввода двоичных образов нетекстовых перфокарт: таким образом в эмуляторе можно выдавать перемещаемые объектные модули в двоичном виде на “перфокарты” и вводить их.

 Рис. 1 . Пример компиляции и выполнения программы

Рис. 1 . Пример компиляции и выполнения программы


В примере выше можно заметить, что компилятор “Фортран-Дубна” ошибочно распознает синтаксически некорректную конструкцию IF (I=J) как допустимую, в то время как правильно IF (I.EQ.J), и компилирует ее как ложное условие. Вызывает интерес вопрос, содержалась ли аналогичная ошибка в ФОРТРАН-компиляторе для CDC 1604, переписыванием которого в коды БЭСМ-6 и был получен компилятор “Фортран-Дубна”[2].

Впоследствии Михаил Ярославцев добавил к эмулятору рудиментарный “режим супервизора”, в котором работал модифицированный им резидент ОС ДИСПАК. Это позволило исполнять системные вызовы, реализация которых непосредственно в эмуляторе требовала бы знания недокументированных особенностей ОС. Таким образом удалось запустить на выполнение диалоговую сервисную программу СЕРП, просмотреть с ее помощью список шифров и ФИО пользователей системы, список «стандартных паспортов» (наборов заказа ресурсов и команд запуска стандартных систем программирования и диалоговых программ), получить возможность формировать задачи с помощью системного вызова, пользоваться всеми возможностями системного вызова печати на АЦПУ, и т.п. Этот режим позволил вернуть к жизни и систему “АЛГОЛ БЭСМ-6”. Замечу, что и АЛГОЛ БЭСМ-6, и АЛГОЛ-ГДР в системе “Дубна” успешно проходят тест “Мальчик или муж” Д. Кнута[3] с минимальными системно-зависимыми изменениями.

В результате поиска программ, пригодных для запуска в эмуляторе, на образе диска 2048 была найдена игра “Калах”, работавшая в составе информационно-развлекательной системы “Джин” (см. В. В. Кобелев. ...). Хотя основная часть системы и была утрачена, собственно игру удалось запустить.

Из-за отсутствия как исходных текстов ОС ДИСПАК для БЭСМ-6, так и выполняемого кода ОС, работа над эмулятором была временно прекращена.

III. Эмулятор полной машины

В 2008 году нам стало известно, что до сих пор существует работающая БЭСМ-6 в учебном центре

подводного флота в Сосновом Бору. Сергей Вакуленко сумел организовать визит в учебный центр, где получил в свое распоряжение оригинальные образы дисков 2053 (ОС) и 2048 (системы программирования). Это позволило возобновить работы по развитию эмулятора полной машины в рамках проекта SIMH[4]).

Пользуясь Частью IX технического описания БЭСМ-6 (Полное описание системы команд и методики использования аппаратуры машины), Сергей Вакуленко и автор портировали эмуляцию команд режима пользователя в SIMH, добавили эмуляцию команд и регистров режима супервизора (исключая флаги частичного выполнения команд в УУ в момент прерывания, т. к. эмуляция конвейера не реализовывалась), последовательных каналов терминалов, магнитных барабанов, АЦПУ и ввода с перфоленты, а также рудиментарное графическое представление передней панели БЭСМ-6, имитирующее индикацию содержимого основных регистров БЭСМ-6.

Определенную трудность составила эмуляция магнитных дисков, т. к. они были добавлены в конфигурацию БЭСМ-6 позднее и не были включены в техническое описание. Первые попытки реализовать эмуляцию путем трассировки обращения к регистрам управления ввода-вывода и догадок относительно содержимого регистра состояния, соответствующего успешному завершению операции обмена, методом проб и ошибок не увенчались успехом.

К счастью, примерно в то же время нам оказались доступны исходные тексты ОС «Дубна», выложенные в открытый доступ одним из ее разработчиков Михаилом Поповым[5]. С их помощью удалось определить необходимые значения регистра состояния и запустить ОС ДИСПАК. В настоящее время реализованы:

  • работа с магнитными барабанами

  • работа с магнитными дисками емкостью 7.25 Мб, включая разметку

  • пакетный ввод с перфоленты с имитацией ввода «сырых» образов перфокарт (так наз. «ввод по А3»)

  • печать на АЦПУ, включая имитацию надпечатки (управляющий символ + в Фортране)
  • работа с терминалами Видеотон-340, подключенными по телеграфным каналам
    перфорация перфокарт

К сожалению, работу с терминалами, подключенными по параллельным каналам («Консул-254» или аппаратуру сопряжения), что было бы более эффективно, а также работу с магнитными дисками емкостью 29 Мб, оживить не удалось. Возможно, некоторые элементы системы были изменены в Сосновом Бору вцелях комплексирования со спецоборудованием, а интерфейс подключения МД 29 Мб в ОИЯИ, использовавшем ОС «Дубна» и организациях, использовавших ОС ДИСПАК, отличался.

Тем не менее, реализованный набор достаточно полон для того, чтобы демонстрировать мультипрограммную работу ОС ДИСПАК на эмуляторе SIMH как в пакетном, так и в диалоговом режимах.

IV. Декомпиляция Паскаль-компилятора

В состав системного ПО БЭСМ-6 входило два компилятора с языка Паскаль авторства С. И.

Пирина (ВЦ АН СССР): «Паскаль-БЭСМ-6», также известный как «Паскаль-Автокод» в составе диалоговой системы «Пульт», разработанной в ВЦ АН СССР, и созданный на его основе компилятор в составе МС «Дубна», также известный как «Паскаль-Монитор». Последний широко использовался как язык системного программирования; в частности, в ИТМ и ВТ на нем была написана кросс-система программирования для Эльбруса-1КБ (С.З. Рачинским и Г. Н. Акимовым), а также множество разнообразных системных утилит. Потому восстановление именно этого компилятора и представляло интерес в первую очередь.

На имевшемся у нас с прошлого тысячелетия образе диска с мониторной системой «Дубна» Паскаль-компилятор был представлен в двух видах: предзагруженного неперемещаемого образа, сконфигурированного для вызова по команде *PASCAL, и, по счастливой случайности, перемещаемого объектного модуля в составе рантайм-библиотеки. Благодаря тому, что Паскаль-компиляторы традиционно пишутся на Паскале, представляла интерес возможность декомпиляции объектного модуля ради сравнительного анализа компилятора для БЭСМ-6 с другими компиляторами того же периода, рассмотрения приемов программирования в условиях ограниченного объема ОЗУ и т. п.

Увы, уже первый шаг – дизассемблирование объектного модуля в читаемый вид – был сопряжен с трудностями, так как его размер превышал возможности штатного дизассемблера DTRAN. В отсутствие документации реверс-инжиниринг формата объектного модуля казался неблагодарным занятием, и декомпиляция была отложена в долгий ящик. Как оказалось позднее, на образах дисков ОС «Дубна» нашелся исходный текст DTRAN, в комментариях к которому было и описание формата объектного модуля.

Это позволило написать дизассемблер на языке С++, корректно обрабатывающий объектные модули произвольного размера (и порождающий результат, идентичный выводу DTRANна языке ассемблера «Мадлен» для модулей приемлемого для DTRAN размера), и дизассемблировать Паскаль-компилятор с уверенностью в правильности результата.

Далее по результатам экспериментов с компиляцией тестовых программ, содержащих процедуры и функции с различным числом формальных параметров и локальных переменных, разнообразные операторы и выражения, стандартные функции и т. п. был написан скрипт на языке Perl, превращающий выдачу дизассемблера в текст, размеченный на процедуры и функции с указанием их уровня вложенности, количества формальных параметров и локальных переменных, с использованием последовательно назначаемых идентификаторов для глобальных переменных (например, gl123z – глобальная переменная со смещением 123), формальных параметров (например, l2a3z – аргумент 3 у подпрограммы 2-го уровня) и локальных переменных (например, l3a4z – локальная переменная со смещением 4 в подпрограмме 3-го уровня), cвозможностью переименования подпрограмм и глобальных переменных согласно списку замены, а также превращающий простые условные выражения, операторы присваивания и вызовы подпрограмм в удобочитаемый вид.

Например, скрипт способен восстанавливать такие сложные выражения как

[minel(l4var5z-intZero)+1..47]

что значит «множество целых чисел, состоящее из элементов от следующего за минимальным элементом разности множеств l4 var 5z и int Zero, до 47 включительно».

Существенным подспорьем для окончательной ручной декомпиляции, по крайней мере машинно-независимой части компилятора для БЭСМ-6, послужил исходный текст оригинального Паскаль-компилятора для CDC 6600[6] или аналогичный. Благодаря ему были восстановлены исходные имена констант для перечислимых типов токенов и лексем, а также некоторые имена подпрограмм и переменных.

Интересно отметить следующие детали:

  • версия компилятора в формате объектного модуля содержит несколько оптимизаций, отсутствующих в компиляторе как части мониторной системы, хотя номер и дата версии у них совпадают(PASCAL COMPILER 15.0 (15.02.82)). По этой причине для достижения полного совпадения рекомпилированного объектного модуля с исходным в нескольких местах пришлось вводить намеренные деоптимизации;

  • замечу в качестве курьёза, что задача декомпиляции[7], т. е. получения текста программы на Паскале, компиляция которой порождает объектный модуль, идентичный исходному, была завершена 15 августа 2017 года – ровно через 35 с половиной лет после даты версии компилятора, в День археолога;

  • тексты сообщений об ошибках не присутствуют непосредственно в объектном модуле компилятора, что и уменьшает его размер, и обеспечивает удобство адаптации компилятора для пользователей, чей родной язык отличен от русского;

  • ради сокращения объема памяти, занимаемой компилятором, тексты сообщений закодированы 6-битным кодом (кодировка TEXT, близкая к ECMA-1), в котором отсутствует и буква «твердый знак», и апостроф, отчего автор решил записать последнее слово в сообщении «ошибка в разделе объявлений» как «ОББЯВЛЕНИЙ», несмотря на то, что использовать мягкий знак вместо твердого было бы куда как более логично;

  • в списке сообщений об ошибках присутствует неиспользуемое, имеющее смысл только для довольно эзотерического оператора BRANCH, по функциональности напоминающего оператор throwв С++, добавленного в первый из реализованных для БЭСМ-6 Паскаль-компилятор («Паскаль-Автокод»), и, насколько можно судить, оказавшегося и настолько громоздким в реализации, и настолько непонятным для пользователей, что из компилятора Паскаля для МС «Дубна» его реализация была исключена;

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

    PROGRAM MAIN(OUTPUT);
    PROCEDURE CALLANDPRINT(FUNCTION F:INTEGER); (* аргумент – функция *)BEGIN
    WRITELN(F)
    END;
    PROCEDURE TODO(PROCEDURE WHATTODO; FUNCTION F:INTEGER);
    BEGIN
    WHATTODO(F)
    END;
    FUNCTION F:INTEGER;
    BEGIN
    F := 12345
    END;
    BEGIN
    TODO(CALLANDPRINT, F)
    END.

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

    PROGRAM MAIN(OUTPUT);
    PROCEDURE PRINTVAL(I:INTEGER); (* аргумент – целое *)
    BEGIN
    WRITELN(I)
    END;
    PROCEDURE TODO(PROCEDURE WHATTODO; FUNCTION F:INTEGER);
    BEGIN
    WHATTODO(F)
    END;
    FUNCTION F:INTEGER;
    BEGIN
    F := 12345
    END;
    BEGIN
    TODO(PRINTVAL, F)
    END.

    В системе «Пульт», в составе которой работает компилятор «Паскаль-Автокод», при выполнении вышеприведенной программы диагностируется ошибка в типах формальных параметров. В обоих случаях для правильного выполнения программы нужно писать WHATTODO((F)).

  • Имеется ошибка в синтаксическом анализаторе, из-за чего программа

    PROGRAM MAIN(OUTPUT);
    FUNCTION F:INTEGER; BEGIN F := 5 END;
    PROCEDURE X(I:INTEGER); BEGIN WRITELN(I) END;
    BEGIN
    X(F + 5);
    END.

    считается синтаксически некорректной (в позиции знака + компилятор выдает диагностику «нет запятой или скобки или мало параметров»), и нужно писать или X(5 + F), или X((F + 5)), в то время как компилятор Паскаль-Автокод этой ошибки не содержит.

В то же время можно отметить, что подмножество языка, поддерживаемое «Паскаль-Монитором» шире, чем подмножество, поддерживаемое «Паскаль-Автокодом»: так, например, в последнем нельзя объявлять константы строчного типа.

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

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

V. Декомпиляция игры «Калах»

В состав популярной диалоговой информационно-развлекательной системы «Джин», разработанной в ИТМ и ВТ В. В. Кобелевым на базе системы «Пульт», входила игра «Калах», реализованная достаточно эффективно, чтобы расходовать на каждую партию всего единицы секунд ЦП и далеко не максимально доступный объем ОЗУ. Отдельные фрагменты системы «Джин» – и в частности, «Калах» в частично-функциональном виде – сохранились на имеющемся у нас образе диска. Эта программа также представляет некоторый культурологический интерес, поскольку содержит элементы «восточного колорита», приличествующего виртуальной персоне «джинна», от имени которого велась игра. Воодушевившись успехом декомпиляции «Паскаль-Монитора» автор счёл, что декомпиляция «Калаха» будет посильной задачей.

Пользуясь тем, что компилятор «Паскаль-Автокод» пользуется статически размещенной библиотекой времени выполнения и порождает промежуточное представление программы на языке «Автокод ИТМ», удалось понять структуру кода и соглашение о связях, и создать модифицированную версию программы-дизассемблера, выдающую результат, пригодный для обработки вышеупомянутым Perl-скриптом.

Благодаря тому, что набор используемых типов и структур данных в программе «Калах», в силу ее специфики, оказался существенно уже, чем в компиляторе, и тому, что имеющаяся версия компилятора, по-видимому, не сильно отличалась от использованной в своё время для порождения двоичного кода игры, в процессе ручной доводки существенных трудностей не встретилось. В данном случае подспорьем оказался найденный на образе того же диска исходный текст программы графического блока «Джина», рисовавшей различные узоры на графическом дисплее, из которой, в частности, была скопирована подпрограмма-генератор случайных чисел, состоящая по большей части из ассемблерной вставки. Приведу её в оригинальном виде ради демонстрации синтаксиса «Автокода ИТМ». Знаки равенства отделяют команду в левой половине машинного слова от команды в правой половине, запятые разделяют машинные слова. Обратите внимание на восьмеричную константу ARAND, выглядящую как десятичная запись корня из 2 – типичное число «у меня в рукаве пусто» (nothing-up-my-sleeve number).

_FUNСТIONRАNDОМ:RЕАL; (* СЛУЧАЙНОЕ ЧИСЛО В (0,1)*)
_(СОDЕ(К;ВР77=17ЗЧ1, РА3=СЧХRАND, АУАRАND=МР,
ЦССRАND=ЛУЕВПИЛ, ЛСЕСОРВ=ЗЧХRАND, РА=АС, 17РК1=ПБЮЮR,
С;ХRАND:0, АRАND:4004142135623735,
СRАND:0003303130564677, ЕВПИЛ:0017777777777777,Л;ЕСОРВ:В1/57,
К;ЮЮR:ЗЧ=,);RАNDОМ:=;_); (*ЕNDRАNDОМ*)

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

Для примера приведу без комментариев несколько сокращенных цитат из подпрограммы «разговора» с игроком. (Входной язык требовал предварять служебные слова символами подчеркивания, но позволял для краткости записывать служебные слова _beginи _endкак _( и _); efendi – флаг высшего уровня игрока из четырёх: юниор, кандидат, участник, эфенди). Для восстановленных по смыслу имён переменных использовались англоязычные идентификаторы ради удобства редактирования.

_if ((known Gender = MASC) _or (known Gender = FEM)) _and (age > 0) _then _(

_select
(age < 20): write('ЮН'); (age < 50): write('УВАЖАЕМ');
true: write('ПОЧТЕНН')

_end;

_if (known Gender = MASC) _then write('ЫЙ ') _else write('АЯ ');

_);

...

_if (l3v4z = 13) _and efendi _and ((known Gender = MASC) _or (known Gender = FEM)) _then

_(

l3v4z := chkRandom( 6 );

write('НЕТ ТЕБЕ РАВНО');

_if (knownGender = FEM) _then write('Й') _else write('ГО');

write(' СРЕДИ ');

_if (l3v4z = 1) _then write('АРАБОВ')

_else _if (l3v4z = 2) _then write('МАВРОВ')

_else _if (l3v4z = 3) _then write('БЕДУИНОВ')

_else _if (l3v4z = 4) _then write('ЧЕРНОКОЖИХ')

_else _if (l3v4z = 5) _then write('ТУАРЕГОВ')

      _else write('ЭФИОПОВ');

_);

...

_if (l3v4z = 3) _and (known Gender = FEM) _and (age < 25) _and (age > 0) _then

write ('ТЫ, НАВЕРНОЕ, ТОНКА, КАК КИПАРИС !')

_else _if (l3v4z = 4) _then write('СОВЕРШИ МОЛИТВУ В ТРИ РАКАТА !')

_else _if (l3v4z = 5) _and (known Gender = FEM) _and (age < 22) _and (age > 0) _then

write ('ХОТЕЛ БЫ ПОСМОТРЕТЬ НА ТЕБЯ, ДОРОГАЯ !')

_else _if (l3v4z = 6) _thenwrite ('Я ЗНАЮ ВЕЛИЧАЙШЕЕ ИЗ 99 ИМЕН АЛЛАХА!')

_else _if (l3v4z = 7) _then write('ПЕЧАТЬ СОЛОМОНА МНЕ НЕ СТРАШНА !')_else _if (l3v4z = 8) _then write('КУПИ СЕБЕ ВЕРБЛЮДА !')
_else write('АЛЛАХ ВЕЛИК !!!');

Замечу лишь, что беседа была односторонняя. Для «поддержания разговора» пользователю достаточно было время от времени набирать произвольный текст после числа, определяющего ход, иначе Джин говорил РАЗ ТЫ МОЛЧИШЬ, ТО И Я БУДУ МОЛЧАТЬ.

По существу алгоритма игры можно заметить, что перед игрой с пользователем, находящимся на уровне участника или эфенди, программа пытается прочитать «таблицу дебютов», вычислявшуюся отдельной вспомогательной программой (В. Долматов, pers. comm.) Впоследствии, если использованный дебют привел к проигрышу «Джина», опционально вносились правки в таблицу «коррекции дебютов».

Детали реализации[8], качество функции, использовавшейся для оценки позиции, и сравнение силы игры «Джина» с аналогичными программами, ещё ждут своего исследователя.

IV. Выводы и заключение

В силу того, что компиляторы с языка Паскаль, доступные на БЭСМ-6, не обладали развитыми средствами оптимизации, при наличии возможности рекомпиляции и инкрементного сравнения, декомпиляция программ на Паскале представляет собой посильную задачу как из перемещаемого объектного кода, так и из статического кода, путем локального сопоставления с шаблонами и контекстных замен, с разумной по трудоёмкости ручной доводкой.

Полученные результаты могут представлять интерес как с точки зрения истории инженерии программного обеспечения– становится возможен анализ методов разработки путем сравнения с исходными текстами аналогичных программ для других ЭВМ того же периода, предпринятых авторами декомпилированных программ мер по оптимизации по времени выполнения и расходу оперативной памяти, оценке объема работ по отладке и тестированию на основании обнаруженных ошибок и т.п. – так и с точки зрения истории культуры общения, имевшей хождение в научных учреждениях СССР в 70-х-80-х годах прошлого века.

Источник финансирования. Благодарности 

Работа выполнена автором в качестве хобби.

Автор благодарит С. В. Вакуленко и М. Ю. Ярославцева за многолетнее плодотворное сотрудничество в разработке эмулятора БЭСМ-6, С.З. Рачинского за предоставленные магнитные носители, что позволило начать работу над эмулятором режима пользователя, М. Попова за сохранение ПО ОС «Дубна», без чего доведение эмулятора полной машины до рабочего состояния было бы сильно затруднено.

Список литературы

  1. Тюрин В.Ф. Операционная система Диспак, Наука, Москва, 1985
  2. Мазный Г.Л. Программирование на БЭСМ-6 в системе «Дубна», Наука, Москва, 1978
  3. Универсальная вычислительная машина БЭСМ-6. Техническое описание. Часть IX. Полное описание системы команд и методики использования аппаратуры машины. ИТМиВТ АН СССР, 1967
  4. Универсальная вычислительная машина БЭСМ-6. Техническое описание. Часть IV. Арифметическое устройство. ИТМиВТ АН СССР, 1967
  5. Пирин С.И. Язык Паскаль-Монитор и его использование, ВЦАН СССР,Москва,1980
  6. ПиринС.И.Паскаль-БЭСМ-6. Руководство по программированию ,ВЦАН СССР, Москва,1979

Примечания

1.https://en.wikipedia.org/wiki/Division_algorithm#SRT

2.Весь транслятор был разбит на блоки, и каждый докладывал свой блок... Списывали, по правде говоря, с транслятора на CDC-1604 (https://www.chitalnya.ru/work/133863/)

3.https://en.wikipedia.org/wiki/Man_or_boy_test

4.https://ru.wikipedia.org/wiki/SIMH

5.https://github.com/mrp149/DUBNA

6.http://www.moorecad.com/standardpascal/CDC6000_Pascal_Compiler_Pascal_1972.pdf

7.Результат декомпиляции доступен на https://github.com/besm6/pascal-re

8.Результат декомпиляции доступен на https://github.com/besm6/kalah-re

Об авторе: SynopsysInc,Санта Клара, Калифорния, США
Balakirev1949@yandex.ru
Материалы международной конференции Sorucom 2020
автора 26.06.2021