spamsink: (Default)
[personal profile] spamsink
  • Расшифровка манускрипта Войнича
  • Расшифровка письменности Linear A
  • Расшифровка письменности ронго-ронго


Пардон, перечисленного выше не хватает в большом мире. А в маленьком мире нам не хватает вот чего (из того, что в принципе реализуемо с помощью имеющегося софта):

Хардверное:

  • эмуляция 29 Мб дисков (работает на одном направлении, нужны детали отличия реализации для ОС Диспак и ОС Дубна, но можно считать, что сделано)
  • правильная эмуляция линеек дисков (УКВП) сделано
  • работающая эмуляция каналов "Консула" (работает только режим выдачи в КОИ-7 для "Видеотона-340" c параметром генерации VIDI, а родная кодировка ГОСТ не работает вовсе)
  • работающая эмуляция лент БЭСМ-6 (работают все 4 направления), включая разметку для аутентичности (для разметки нужны тонкости времянок)
  • эмуляция интерфейса графопостроителя (как на него выдавать, уже известно)
  • (желательно) эмуляция ЕС-овских лент
  • (желательно) эмуляция ЕС-овских устройств ввода-вывода (УВВК, ПИ, ПЛ, АЦПУ) - нужна коррекция кода драйвера: есть места, забитые СТОПами


Софтверное:

  • дизассемблирование БЕМШевских модулей сделано
  • восстановление функциональности драйвера аппаратуры сопряжения с терминалами в процессе
  • дизассемблирование ДИСПАКа БЭСМ-6 (сделано)
  • восстановление функциональности системы хранения данных "МАРС" (переписано на С++ и понято)
  • дизассемблирование "Монитора-80" в процессе
  • декомпиляция системы подготовки документов "СИПРОД"
  • восстановление функциональности сохранения выходного потока в область (раздел паспорта БАЦ) - нужны детали структуры области ARFA.ПЕРЕХВАТ перехват в автоматически создаваемую область работает
  • восстановление функциональности системного диалогового отладчика "ЯНУС" в процессе
  • восстановление функциональности системы ГРАФОР (в МС Дубна - более или менее, в Мониторе-80 - предстоит), реализация работы с графопостроителями в эмуляторах режима пользователя (dubna - практически готово, dispak - частично), и SIMH (предстоит)



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

Если я что-то забыл, дополняйте.

Upd: отдельно, список известных улучшений Паскаль-компилятора, сделанных для кросс-разработки ПО Эльбруса-Б, которые ещё предстоит реализовать:

  • соглашение о связях ASSEMBLER
  • операция сдвига, например, с синтаксисом shift(выражение, выражение), как в Паскаль-автокоде;
  • инициализация глобальных файлов (в частности, input и output) не в самом начале модуля, а непосредственно перед кодом собственно главной программы, после кода всех процедур
spamsink: (Default)
[personal profile] spamsink
 Невзирая на сильное пересечение аудиторий разных бэсмовских форумов, напишу и здесь: проект https://github.com/leobru/pas2c-metamorph посвящен переделке компилятора Паскаль-Монитор в компилятор Си.

Ограничения, вызванные спецификой архитектуры:
  • Разрядность целых - 48 бит, но работающий диапазон значений для арифметических операций - 41. Сравнение "меньше 0" проверяет не старший бит, а 41-й. 
  • Для unsigned более или менее эффективными полноразрядными могут быть только сложение и вычитание; желательны два режима: быстрый с использованием СЛЦ (ARX) невзирая на риск циклического переноса, и аккуратное сложение по модулю 2^48. Умножение и деление будут, соответственно, медленным и безумно медленным.
  • Применение сдвигов влево к целым числам может приводить к UB (полезна будет опция явного зануления 48-42 разрядов).
  • Т. к. стек растет вверх, компиляция vararg functions потребует двух frame registers.
  • Объявление register будет полезно только для словных указателей и (в будущем) для "unsigned short". Регистровый unsigned short будет 15-битный. 
Ограничения, вызванные спецификой платформы/системы программирования:
  • При раздельной компиляции для глобальных переменных linkage по умолчанию будет static. Это позволит более эффективное обращение к этим переменным с помощью базового регистра. Глобальные переменные, требующие обращения из нескольких файлов, должны будут быть объявлены как  extern везде и быть одной длины (ср. фортрановский common block).
  • У main (поначалу?) не будет параметров. 
  • Работа с файлами будет рудиментарная. 
  • Последовательность байтов в слове будет для совместимости - от старшего к младшему.
  • Пребразование между (int*) и (char*) - номинальное. *(int*)charPtr обратится к слову, где-то в котором находится указываемый символ. Обращение *(char*)intPtr, если intPtr не был получен из char*, пойдёт в никуда (прочитается 0, запись не приведет к изменению памяти). 
  • Использование вложенных функций, минимизируя необходимость передавать параметры, экономит много памяти. Это, возможно, стоит сохранить. 

Если что забыл, буду добавлять.

 Что пока не сделано

spamsink: (Default)
[personal profile] spamsink
Я решил перевести диагностики Паскаль-компилятора (обратно) на английский язык, воспользовавшись при этом Cerebras Cloud, потребовав сохранение длин сообщений. Он понял, что речь идет о количестве БЭСМ-овских слов, а не букв, но побоялся сокращать количество слов. :)

Вот результат (несмотря на то, что буквы ABEKMHOPCTYX были латинские, он разобрался):

TPEБYETCЯ ЛOГИЧECKOE BЫPAЖEHИE LOGICAL EXPRESSION REQUIRED
HET HИ ЗAПЯTOЙ HИ TOЧKИ C ЗAПЯTOЙ NO COMMA OR PERIOD OR WITH COMMA
ИДEHTИФИKATOP YЖE OПPEДEЛEH IDENTIFIER ALREADY DEFINED
HET ИДEHTИФИKATOPA NO IDENTIFIER
ИДEHT HE ИДEHT TИПA IDENT NOT IDENT TYPE
TPEБYETCЯ ПPOCTOЙ TИП SIMPLE TYPE REQUIRED
HET KOHCTAHTЫ NO CONSTANT
TPEБYETCЯ KOHCTAHTA ИHOГO TИПA CONSTANT OF OTHER TYPE REQUIRED
HE ИHДEKCH TИП NO INDEX TYPE
TИП HE ДOЛЖEH БЫTЬ ФAЙЛOВЫM TYPE MUST NOT BE FILE
KOHCTAHTA HE ДИKP-YПOP TИПA CONST NOT SCALAR TYPE
ИДEHTИФИKATOP HE OПPEДEЛEH IDENTIFIER NOT DEFINED
HEПPABИЛЬHЫЙ CИMBOЛ ILLEGAL SYMBOL
ПEPEMEHHAЯ HE YKAЗATEЛЬ VARIABLE NOT POINTER
BЫPAЖ HE ЦEЛOГO TИПA EXPR NOT OF INTEGER TYPE
B OПEPATOPЕ BRANCH HEЛЬЗЯ C ЦEЛЫMИ METKAMИ IN BRANCH OP CANT USE INTEGER LABELS
METKA HE OПPEДEЛEHA B CПИCKE METOK БЛOKA LABEL NOT DEFINED IN BLOCK LABEL LIST
METKA YЖE OПPEДEЛEHA B CTPOKE LABEL ALREADY DEFINED IN LINE
METKA HE OПPEДEЛEHA LABEL NOT DEFINED
HE ДOЛЖHO БЫTЬ BЫPAЖEHИE CTPYKTYPHOГO TИПA NO STRUCTURED TYPE EXPRESSION ALLOWED
ЦИФPA БOЛЬШE 7 DIGIT ABOVE 7
TPEБYЮTCЯ ДPYГИE TИПЫ OПEPAHДOB OTHER OPERAND TYPES REQUIRED
HEПPABИЛЬHЫЙ TИП ПEPEMEHHOЙ ПEPEД ILLEGAL TYPE OF VARIABLE PRECEDING
ИДEHTИФИKATOP TИПA BMECTO ПEPEMEHHOЙ IDENT OF TYPE INSTEAD OF VARIABLE
BЫPAЖEHИЯ B KOHCTPYKTOPE MHOЖECTB HECOBM TИПA EXPR IN SET CONSTRUCTOR OF INCOMP TYPE
BЫPAЖEHИE HE ДИCКP YПOP TИПA EXPR NOT DISCR OF SCALAR TYPE
KAK ПAPAMETPЫ CTАHД ПРОЦ И ФУНКЦИИ HE ПЕРЕДАЮТСЯ PARAMETERS OF STD PROC AND FUNC NOT PASSED
HYЖHA ПEPEMEHHAЯ-CTOИT BЫPAЖEHИE VARIABLE NEEDED BEFORE EXPRESSION
PAБOTA C ПEPEMEHHOЙ ПOCЛE ИHДEKСАЦИИ YПAK MACC WORK WITH VAR AFTER INDEXING PACK ARRAY
ИHДEKC HE ЛEЖИT B TPEБYEМOM OТPEЗKE INDEX NOT IN REQUIRED RANGE
HET ПPOCTOЙ ПEPEM ДЛЯ ЦИKЛА NO SIMPLE VAR FOR LOOP
HE COOTB TИПЫ ПEPEMEHHOЙ ЦИKЛA И BЫP NO MATCH TYPE OF LOOP VAR AND EXPR
HEПPABИЛЬHO HAЧИHAETCЯ OПEPATOP OPERATOR DOES NOT START RIGHT
HEДOПYCT TИПЫ ПPИ ПPИCBAИBAHИИ ILLEGAL TYPES IN ASSIGNMENT
TИП HE COOTBETCT TИПY ЭЛЕMEHTA ФAЙЛA TYPE DOES NOT FIT FILE ELEM TYPE
BTOPOЙ CПEЦИФИKATOP ДЛЯ WRITE TOЛЬKO ДЛЯ REAL 2ND SPEC FOR WRITE ONLY FOR REAL
MAЛO ПAPAMETPOB FEW PARAMETERS
ФAЙЛA INPUT HET B CПИCKE ПAPAMETPOB ПPOГPAMMЫ INPUT FILE NOT IN PROGRAM PARAM LIST
MHOГO ПAPAMETPOB MANY PARAMETERS
HECOOTBEТCTBИE BИДOB ПAPAMETPOB ПPИ BЫЗOBE ARGUMENT KIND MISMATCH IN CALL
HECOOTBEСТCTBИE TИПOB ПAPAMETPOB ПPИ BЫЗOBE ARGUMENT TYPE MISMATCH IN CALL
HET ЗAПЯT ИЛИ CKOБKИ ИЛИ MAЛO ПAPAMETPOB NO COMMA OR BRACE OR FEW PARAMS
HET CПИCKA ПAPAMETPOB NO PARAM LIST
CЛИШKOM БOЛЬШOE ЧИCЛO TOO MANY NUMBERS
HEПPABИЛЬHOE YПOTP ИДEHT CTAHД ПPOЦ ИЛИ ФYHKЦИИ ILLEGAL USE OF STD PROC OR FUNC IDENT
HET OTKP CKOБ ДЛЯ CTAHД ПPOЦ NO OPEN BRACE FOR STD PROC
HET ПEPEMEHHOЙ ДЛЯ CTAHД ПPOЦ NO VAR FOR STD PROC
HET ПEPEMEHHOЙ TИПA ФAЙЛ NO VAR OF FILE TYPE
CЛИШKOM CЛOЖHAЯ ПEPEMEHHAЯ TOO COMPLEX VARIABLE
CЛИШKOM MHOГO KOМАHД B БЛОKE TOO MANY CMDS IN BLOCK
ПEPEПOЛHEHA TAБЛИЦA OПИCAHИЙ OVERFLOW OF DECL TABLE
ПEPEПOЛ TAБ ДЛИH ИДEHT OVERFLOW ID LENGTH
BCTPETИЛCЯ KOHEЦ ФAЙЛA END OF FILE ENCOUNTERED
CЛИШKOM MHOГO OШИБOK TOO MANY ERRORS
OШИБKA B ПCEBДOKOMMEHTAPИИ ERROR IN PSEUDO COMMENT
B ЧИCЛE БOЛЬШE 16 ЦИФP NUMBER ABOVE 16 DIGITS
ПOCЛE TOЧKИ HET MAHTИC AFTER DOT NO MANTISSA
HET ПOPЯДKA ЧИCЛA ПOCЛE E NO EXPONENT AFTER E
ПOPЯДOK БOЛЬШE 18 EXPONENT ABOVE 18
B CTPOKE EOLN TRUE IN LINE EOLN TRUE
ЦИФPA ПOCЛЕ TOЖДECTBA БOЛЬШE 3 1ST DIGIT IN BYTE ABOVE 3
ПYCTAЯ CTPOKA EMPTY LINE
HET ЦEЛOГO NO INTEGER
HEПPAB TИП ДЛЯ БAЗOBOГO TИПA MHOЖECTB ILLEGAL TYPE FOR BASE SET TYPE
OШИБKA ПPИ OПPEДEЛEHИИ TИПA OTPEЗKA ERROR IN RANGE TYPE DEFINITION
HEЛЬЗЯ ПCEBДO K0 И NEW CANT USE PSEUDO K0 AND NEW
TPEБYETCЯ ИHOЙ TИП ИHДEKCА INDEX TYPE REQUIRED
ПOCЛE ИHДEKCOB HET KB CKOБKИ NO BRACKETS AFTER INDEXES
ИCПOЛЬЗOBAHИE ПPOЦEДYPЫ B BЫPAЖEHИИ USE OF PROCEDURE IN EXPRESSION
MИHYC HE K REAL И HE K INTEGER MINUS NOT TO REAL OR INTEGER
HET HИ TO HИ DOWNТО NEITHER TO NOR DOWNTO
OПEPATOP WITH HE OT ЗAПИCИ OPERATOR WITH NOT FROM RECORD
OПEPATOP WITH HE OT ПEPEMEHHOЙ OPERATOR WITH NOT FROM VAR
ДBE PABHЫE METKИ BЫБOPA TWO EQUAL CASE LABELS
PAЗHЫE TИПЫ CASE METOK И BЫPAЖEHИЯ DIFF TYPES OF CASE LABELS AND EXPR
HEЛЬЗЯ ПPИCB ФAЙЛЫ CANT ASSIGN FILES
HEПP HOMEP ДЛЯ BHEШ ФAЙЛA ILLEGAL UNIT FOR EXTERNAL FILE
HET OUTPUT NO OUTPUT
ПPEДOПPEДEЛEH KAК YKAЗATEЛЬ PREDEF AS POINTER
HE ДOOПPEДEЛEH NOT REDEFINED
HE OПPEДEЛEH BHEШHИЙ ФAЙЛ EXTERNAL FILE NOT DEFINED
CЛИШKOM БOЛЬШAЯ BЛOЖEHHOCTЬ ПPOЦEДYP TOO HIGH PROCEDURE NESTING
ПPEДЫДYЩEE OББЯBЛEHИE HE БЫЛO FORWARD PREV DECL WAS NOT FORWARD
ПOBTOP ПPEДOПPEДEЛEHИЯ REDEFINITION OF PREDEF
OШИБKA B PAЗДEЛE OББЯBЛEHИЙ ERROR IN DECL SECTION
HE ДOOПPEДEЛ ПPOЦEДYPЫ PROC NOT FORWARD DECLARED
ТРЕБУЕТСЯ REQUIRED
MHOГO BXOД ПPOЦ MANY PROC ENTRY
PAЗHЫE TИПЫ CASE METOK И BЫPAЖ DIFF TYPES CASE LABELS AND EXPR
ЦEЛOE INTEGER
ОПРЕД МЕТКИ В БЛОКЕ DEFINED LABELS IN BLOCK
ЛЕВАЯ СКОБКА LEFT BRACKET
ПРАВАЯ СКОБКА RIGHT BRACKET
ПРАВ КВ СКОБКА RIGHT BRACE
ЗАПЯТАЯ COMMA
ТОЧКА С ЗАПЯТОЙ SEMICOLON
TOЧKA PERIOD
ДВОЕТОЧИЕ COLON
ПРИСВАИВАНИЯ ASSIGNMENT


В нескольких местах был использован знак >, который я заменил на ABOVE, в одном месте слегка переформулировав ("DIGIT AFTER EQ > 3" смысла не имеет, но ему простительно, он контекста не знал).
[personal profile] cobaltmth
Добрый день! Заранее прошу прощения за расплывчатые и, возможно, глуповатые вопросы. Недавно из интереса небольшой компанией решили приобщиться к истории и пощупать эмулятор БЭСМ-6. Начинания в количестве нескольких дней закончились выводом, что информации в достаточной для понимания полноте мы найти не смогли, даже несмотря на всю имеющуюся документацию на гите, да и в целом ни на что из того, что нам знакомо, это не похоже. Из того, что получилось: по инструкции подключить ОС Диспак, создать пользователя через серп, запустить некую игру, просмотреть паспорта второго уровня. Но не более того. В частности, споткнулись о подключение лент и запуск программ, которые вместе с эмулятором были в папке. Подскажите, пожалуйста, с чего вообще стоит начинать разбираться? Включая теоретические нюансы. Вводить команды из документаций с переменным успехом, конечно, у нас немного получается, но не более того, проблема в том, что нет совершенно никакого понимания, что конкретно мы делаем и как.
spamsink: (Default)
[personal profile] spamsink
Допустим, захотелось нам в Фортране сделать указатель на функцию PF и сделать его указывающим на функцию F.
Пишем
      PROGRAM MAIN
      EXTERNAL F
      PF = F
      END

Так, разумеется, нельзя. Все три компилятора, указывая на строку присваивания, говорят
Форекс: ФYHKЦ F БEЗ APГ
Фортран-Дубна:
HEПPABИЛЬHO ИCПOЛЬЗOBAHO HAИMEHOBAHИE ФYHKЦИИ.

OШИБOЧHЫЙ OПEPATOP ЛИБO ПPOПYЩEH ЗHAK OПEPAЦИИ.

Фортран-ГДР: IMPROPER USE OF IDENTIFIER >F<
А дальше? )
spamsink: (Default)
[personal profile] spamsink
Насколько можно судить, система DMS ("Диалоговая мониторная система") позволяла пользователям записывать пакеты задачи полностью в форме МС "Дубна" путем изобретения карт "заказа ресурсов" и преобразовывала их в разделы паспорта при формировании задачи. Это требовало наличия поддержки со стороны "Монитора-80", который обладал бы ровно тем же знанием о наборе и формате карт заказа ресурсов, чтобы уметь их или игнорировать, или как-то ещё дополнительно обрабатывать.

Вот какие были карты заказа ресурсов в таблице дешифратора. Для большинства из них соответствующий раздел паспорта Диспака очевиден, но не для всех. Некоторые - явный договорняк между DMS и Монитором-80; остальные - загадка.

PASS - это, возможно, механизм указания пароля на шифр
GRIF - раздел паспорта ГРИФ
REPEA - ПОВТ
RESPO - ???
WAIT - ЖДЕМ
TIME - ВРЕМ
LINE - АЦПУ
PAGE - ЛИСТ
///// - ???
LIBRA - неясно, зачем она здесь, ведь *LIBRA разрешается в любом месте пакета
ATAPE - ???
FTAPE - ???
LTAPE - ???
DISC - ДИСК
CHECK - ???
TAPE - ЛЕНТ
NEW - ???
DRUM - ТРАК
MEMO - ОЗУ
PRIO - ???
TELE - ТЕЛЕ
PRINT - ПЕЧ ?
ASSIG - *ASSIGN трактуется как ошибка
BLERR - ???
FILE - связь с DMS FS?
JSPC - --""--
JLIB - --""--
JFILE - --""--
DUMON - ???
BUGJE - явно имелся в виду BUDGET, но такого раздела паспорта я не припомню
BESM - МАШ
MS - ???
spamsink: (Default)
[personal profile] spamsink
Вот пишете вы, скажем, компилятор — для простоты, ассемблер — с языка, в котором бывают литеральные константы (не таков был покойный Марк Германович Чайковский).

Как вы организуете уникальность литеральных констант? Посмотрим на БЕМШ и попробуем в нём тест
OШИБKИ   HПK  CBOБ ПEPEM AДPEC KOMAHДA    A ИCП N ГEH N ИCX METKA  OПEPAЦИЯ OПEPAHД   KOMMEHTAPИЙ
                                                 0001  0001 TEST   START 1
         001             00001 00 010 0005       0002  0002        XTA   =B’4’
                               00 010 0006       0003  0003        XTA   =B’1’
                         00002 00 010 0007       0004  0004        XTA   =B’7’
                               00 010 0010       0005  0005        XTA   =B’3’
                         00003 00 010 0011       0006  0006        XTA   =B’6’
                               00 010 0012       0007  0007        XTA   =B’2’
                         00004 00 010 0013       0008  0008        XTA   =B’5’
                               00 22
                                                 0009  0009        FIN
                         00005  0000000000000004
                         00006  0000000000000001
         002             00007  0000000000000007
                         00010  0000000000000003
                         00011  0000000000000006
                         00012  0000000000000002
                         00013  0000000000000005

Как видим, в каком порядке литералы были упомянуты в коде, в таком и получились в блоке данных. Если разных литералов не безумные тыщи, то цикл линейного поиска, помещающийся в БРС, вполне адекватен, и добавление нового литерала в конец массива не требует копирования памяти.

А теперь попробуем Мадлен:ну попробуем )
spamsink: (Default)
[personal profile] spamsink
В дампе диска встретился текст:

PCAM: O PECYHЯTA П ИЛИ COHЧEHA HE OK````````````ЗАДАЧА

Что это значит и зачем так?
spamsink: (Default)
[personal profile] spamsink
Смотрите, что нашлось:
  BREEDING:,NAME,
C*
C***   1.10.85.   A.П.CAПOЖHИKOB
C*             ( C ПOДAЧИ P.EГИKЯHA )
C*
C*   *CALL BREEDING:NAME(N1,N2,...,NN)
C*   "PAЗMHOЖEHИE" ЗAДAHHOЙ ПPOГPAMMЫ
C*   BO BPEMEHHOЙ БИБЛИOTEKE.
C*
C*   ИЗ-ЗA OTCYTCTBИЯ B ФOPTPAHE PEKYPCИИ
C*   PEKYPCИBHЫE ПO CBOEЙ CYTИ BЫЗOBЫ
C*   ПOДПPOГPAMM ПPИXOДИTCЯ ПOДMEHЯTЬ
C*   OБPAЩEHИEM K KOПИЯM ЭTИX ПOДПPOГPAMM,
C*   ИMEЮЩИM ДPYГИE ИMEHA.  ПPИ ЭTOM
C*   ЧИCЛO KOПИЙ ДOЛЖHO COOTBETCTBOBATЬ
C*   ГЛYБИHE PEKYPCИИ.
C*     ПPOГPAMMA   BREEDING  ПPEДCTABЛЯET
C*   ИЗ CEБЯ MEXAHИЗM ДЛЯ ПOPOЖДEHИЯ HYЖ-
C*   HOГO KOЛИЧECTBA TAKИX KOПИЙ.  ПPOГ-
C*   PAMMA C ИMEHEM  NAME  PAЗЫCKИBAETCЯ
C*   BO BPEMEHHOЙ БИБЛИOTEKE (ИЛИ CPEДИ
C*   ЗAKAЗAHHЫX OБCП).  ЗATEM KATAЛOГ
C*   BPEMEHHOЙ БИБЛИOTEKИ ДOПOЛHЯETCЯ
C*   ИMEHAMИ  N1,N2,...,NN,  ПPИЧEM
C*   YKAЗATEЛИ MECTOПOЛOЖEHИЯ ПPOГPAMM
C*   N1,N2,...,NN  ДYБЛИPYЮT YKAЗATEЛЬ
C*   ДЛЯ  NAME.
C*


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

К сожалению, не работает. Отсутствующие в каталоге процедуры диагностирует
*CALL BREEDING:NOTEXIST(FOO)
  OTCYTCTBYET :
                    NOTEXIST
, но если дать существующую, то тихо ничего не делает
*CALL BREEDING:BREEDING(FOO)
*CALL TCATALOG
                                             17 ABГ 25 14.25
                      TEMPORARY LIBRARY
                     CBOБOДHO  21 03 25
   BREEDING   21 02 00  00106
spamsink: (Default)
[personal profile] spamsink
Задача: за минимальное количество команд получить на сумматоре всеед, не используя никаких литеральных констант.

За 11 команд это делается тривиально:
 14,vtm,7777b . УИА '7777'(М16)
 ,ita,14      . СЧИ М16
 ,asn,64-12   . СДА 64-12
 ,its,14      . СЧИМ М16
 15,aex,      . НТЖ (М17)
 ,asn,64-12   . СДА 64-12
 ,its,14      . СЧИМ М16
 15,aex,      . НТЖ (М17)
 ,asn,64-12   . СДА 64-12
 ,its,14      . СЧИМ М16
 15,aex,      . НТЖ (М17)

Кто меньше? Если для решения важен конкретный режим АУ, можно считать, что он уже установлен.

По идее это должно быть можно сократить как минимум на пару-тройку команд (таки можно, попробуйте).
spamsink: (Default)
[personal profile] spamsink
Теперь мы умеем писать интроспективные программы (quine) на БЭСМ-6 на всех Фортранах
      РRОGRАМQ
      RЕАLХ(14)
      DАТА  Х /84Н(6Х8НРRОGRАМQ/6Х9НRЕАLХ(14)/6Х12НDАТА  Х /84Н9А6/5Х1НС
     С5А6,1Н//6Х9НРRINТ Х,Х/6Х3HЕND)/
      РRINТ Х,Х
      ЕND

(для Форекса, не требующего PROGRAM, можно чуть короче),
на Паскале-Мониторе
PROGRAM MAIN(OUTPUT);TYPE STRING=PACKED ARRAY[1..60]OF CHAR;
VAR L:ARRAY[1..6]OF STRING; I,J:INTEGER; Q,S:CHAR; BEGIN
L[1]:=’PROGRAM MAIN(OUTPUT);TYPE STRING=PACKED ARRAY[1..60]OF CHAR;’;
L[2]:=’VAR L:ARRAY[1..6]OF STRING; I,J:INTEGER; Q,S:CHAR; BEGIN    ’;
L[3]:=’Q:=ZZZZ; FOR I:=1 TO 2 DO WRITELN(L[I]); FOR I := 1 TO 6 DO ’;
L[4]:=’WRITELN(ZL[Z,I:1,Z]:=Z,Q,L[I],Q,Z;Z); FOR I:=3 TO 6 DO BEGIN’;
L[5]:=’FOR J:=1 TO 60 DO BEGIN S:=L[I][J]; IF S=ZZZ THEN IF J<>43  ’;
L[6]:=’THEN S:=Q; WRITE(S) END; WRITELN END END.                   ’;
Q:=’’’’; FOR I:=1 TO 2 DO WRITELN(L[I]); FOR I := 1 TO 6 DO
WRITELN(’L[’,I:1,’]:=’,Q,L[I],Q,’;’); FOR I:=3 TO 6 DO BEGIN
FOR J:=1 TO 60 DO BEGIN S:=L[I][J]; IF S=’Z’ THEN IF J<>43
THEN S:=Q; WRITE(S) END; WRITELN END END.

(на Паскале-Автокоде тоже можно, в принципе)
и на АЛГОЛе-ГДР
 ’BEGIN’’STRING’’ARRAY’L[1:7];’INTEGER’I,J;’STRING’Q,R,S;
 ’PROCEDURE’P(S);’STRING’S;’BEGIN’’FOR’J:=1’STEP’1’UNTIL’
 LENGTH(S)’DO’PRINT(’IF’J’NE’45’AND’S[J] = ’’/’’ ’THEN’ Q
 ’ELSE’ S[J]); PRINT(NEWLINE) ’END’; R := ’’1234567’’;
 L[1]:=’’/BEGIN//STRING//ARRAY/L[1:7];/INTEGER/I,J;/STRING/Q,R,S;’’;
 L[2]:=’’/PROCEDURE/P(S);/STRING/S;/BEGIN//FOR/J:=1/STEP/1/UNTIL/’’;
 L[3]:=’’LENGTH(S)/DO/PRINT(/IF/J/NE/45/AND/S[J] = ///// /THEN/ Q’’;
 L[4]:=’’/ELSE/ S[J]); PRINT(NEWLINE) /END/; R := //1234567//;’’;
 L[5]:=’’Q:=///47///;/FOR/ I:=1,2,3,4/DO/P(L[I]); /FOR/I:=1,2,3,4,’’;
 L[6]:=’’5,6,7/DO/PRINT(//L[//,R[I],//]:=//,Q,Q,L[I],Q,Q,//;//,’’;
 L[7]:=’’NEWLINE);/FOR/ I:=5,6,7 /DO/ P(L[I]); /END//EOP/’’;
 Q:=’’’47’’’;’FOR’ I:=1,2,3,4’DO’P(L[I]); ’FOR’I:=1,2,3,4,
 5,6,7’DO’PRINT(’’L[’’,R[I],’’]:=’’,Q,Q,L[I],Q,Q,’’;’’,
 NEWLINE);’FOR’ I:=5,6,7 ’DO’ P(L[I]); ’END’’EOP’

На АЛГОЛЕ-БЭСМ им. Курочкина, по-видимому, это невозможно: неизвестен способ напечатать закрывающую кавычку.
На ассемблерах, очевидно, тоже можно, но ломает.
spamsink: (Default)
[personal profile] spamsink
Подумалось - и удивительно, что раньше никогда не приходило в голову достаточно ясно, чтобы быть сформулированным: а ведь с МС "Дубна" БЕМШ состыковали, а автокод ИТМ - вовсе нет, хотя были люди, кроме М. Г. Чайковского, которые на нём программировали.

То ли тут личные качества Чайковского сыграли роль, то ли слишком узок был круг тех людей, и не очень-то и хотелось, сейчас уже и не узнаешь.
spamsink: (Default)
[personal profile] spamsink
Типичная ситуация: в организации установлено несколько версий некоторого развивающегося продукта.
Желательно, чтобы пользователям не нужно было знать, какая из установленных версий на этой неделе "текущая" и где она находится, а она вызывалась бы по умолчанию просто по имени продукта, и чтобы процесс смены текущей версии делался с минимальными затратами труда.

Сегодня это делается с помощью символических ссылок, а вот как это делалось 45 лет назад:

В каталоге стандартных оверлеев Монитора-80 видим цельный компилятор Форекс
        FОRЕХ*       60 0044 03   20664   01770
        LО*SУN       60 0046 03   33466   22654
        LО*GЕN       60 0062 35   33712   22654

который, будучи вызван с помощью *FOREX, печатает
F О R Е Х ИПМ АН СССР ВЕРСИЯ 2.02 ОТ 15.07.80
и работает.

Также в каталоге видим
        FОRЕХ3*      60 0152 17   00136   01770
        LВ304010     60 0152 22   00011   02126

(подозрительно короткий) и в дампе диска можно увидеть, что оверлей с этим именем вызывается по управляющей карте *FORX3.

Однако (в режиме *SYSTEM LOAD LIST),
           *FОRХ3
                   FОRЕХ3*     01770

   ОТСУТСТВУЕТ  FОRЕХ3*
          СВОБОД   01770

Постойте-ка, как это он отсутствует, когда вот он только что нашёлся и загрузился в 01770? Да точно так же, как сейчас, когда симлинк битый, он в выдаче ls (без -l) виден как файл, а при попытке обратиться к нему получается No such file or directory.

Вот как это работало:

Короткая программка длиной 136₈ слов, когда грузится как оверлей, видит в памяти лист с содержимым каталога оверлеев, из которого она загрузилась, ищет в этом каталоге вхождение имени вида LBnnzzzz, читает зону nnzzzz в лист каталога оверлеев, берёт своё имя из своего заголовка оверлея и идёт снова в загрузчик.
Содержимое фиктивного оверлея LBnuzzzz непринципиально, он никогда не загружается.

Тут же видно, что образ Монитора-80, который достался организации К-71, дрался в другой организации с какого-то 29-мегабайтного диска (зоны 4010₈ на обычном 7.25-Мб диске не бывает). Форекс 3 у нас есть, например, на образе диска 2048 из ИТМиВТ (2148), откуда его надо было вызывать с помощью *TRANS:FOREX3*,,nu1550 (кто ж это упомнит, особенно две запятые подряд).

Корректируем симлинк: закажем в паспорте ДИС 31(2148), правим на диске 2048 ровно одно слово (LB304010 на LB311550), и voilà:
           *FОRХ3
                   FОRЕХ3*     01770
                   FОRЕХ3*     01770
                                                      19.07.25 М1
                   LО*SУN      31561
                   LО*GЕN      31561
F О R Е Х ИПМ АН СССР 4.12 ОТ 25.06.85 ВРЕМЯ:  00.00
vak: (бэсм-6)
[personal profile] vak
Рылся в старой почте, набрёл на последнее письмо от Игоря Григорьевича Пасынкова. Перепощу его здесь для памяти. Со всеми колоритными авторскими опечатками.

Две вещи привлекли моё внимание. Первое: что БЭСМ-6 была ответом на британский Atlas-2. Второе - контроллер дисков был подсмотрен у Generаl Electric.
Thu, Aug 27, 2009 at 6:18 PM

Сергей!
Спасибо за приглашение в чисто настальгически-воспоминатнльную группу, в которой готова вся инфраструктура для этого.
Прежде, чем перейти в эту группу, сообщаю что я все рассылки чисто технологических проблем "реинкарнации" БЭСМ-6 записал в особый раздел своей почты.
Через Анатолия Леженко я был в курсе контактов с Сосновым Бором ещё на ранних этапах, когда в это НИИ съездил Томилин.
Прочитал и о Вашей надежде перенести ЭТОТ ЭКЗЕМПЛЯР в Политехнический музей (тьфу ... тьфу, чтоб это вышло!).
Ты даже звонил по этому поводу к Маргарите Петровичевой!!! От всей Вашей почты веяло добром и радостью от настальгии, от того, что это, ЧЁРТ ПОБЕРИ, работает в эмуляционном режимеме. Если это все О'кэй "in vintro", тогда будет всё О'кэй "in vivo".
--------
Это где-то в других странах и континентах. Но в это "ЕвроЖопии" все шиворот на выворот.
Об этом моя грусть и печаль.
-------
Два года назад мы сформировали рабочую группу по созданию САЙТА истории АТОМНОЙ промышленности СССР-РОССИИ за 70 лет. Была студия в помещении бывшей АТС в Обнинске при ФЭИ. Это там, где была запущена первая АЭС в августе 1954 году по МИРНОМУ ИСПОЛЬЗОВАНИЮ АТОМНОЙ ЭНЕРГИИ.
Чистой воды совковая пропаганда тех и последующих лет!!! На самом деле это был прототип РБМК Чернобольского типа 26 апреля 1986 года.
Но всё же что-то было и позитивное "бомбе для Сталина". Итоговая ГЕОПОЛИТИЧЕСКАЯ СТАБИЛЬНОСТЬ этого "...ного мира".
Баз него хотя бы посто Вы, молодое поколение, не родились,
А главное, была группа студентов-практикантов из Обнинского филиала МИФИ. Всего-то надо было 30-50 К$ от целой отрасли РосАтом, где Миллиардные обороты всяких средств.
Фига, ничего не дали!!! Всем всё пофигу, если ЭТО не на личный офшорный счёт на Кипре.

------ Теперь более свежий пример --------
Из этого музея, из 2-го подъезда "вышибли" группу, точнее фирму, Стаса Клименко как раз в этот понедельник 24 августа, где она за 6 месяцев развернула студию виртуальной реальности, точнее 3-D графики. Планировалось, что этот коллектив обеспечит проведение экспозиций ДЛЯ ПОСЕТИТЕЛЕЙ как в "живую"(для пенсионеров и других осколков 20 века), так и по Интернету, т.е. с любых точек ПЛАНЕТЫ ("домена Земля-XXI") по ВИРТУАЛЬНЫМ МУЗЕЯМ любой тематической РОССИЙСКОЙ направленности,
Суть "вышибания" очень проста - гони "МОНЕТУ" в ОДИН МИЛЛИОН ДОЛЛАРОВ В ГОД. Место локализации Музея уникально и каждый метр этой площади дороже ЗОЛОТА воспоминаний и настальгий!!!
Теперь по новой группе (я это повторю в открытую).
Успех БЭСМ-6 - в её родовитости:
1) Это наш клон ATLAS-2 из UK. Специалисты из KDF UK читали в ИТМиВТ лекции и был выпуск по этой ЭВМ в ИТМиВТ в 1963 году.
2) После 1970 года к ней подсоединили по 32 МД 7.5 Мбайт (в Арзамасе и Снеженски) и к 1974 году завод САМ на м. Бауманское запустил этот контролер в серию.
Взяли всё с двух ЭВМ Generel Electric, купленных для видимости КИАЭ и ИТЭФ.
Контролер на бэсмовских ячейках полностью повторял (по описанию) 12 разрядный контролер для дисков на GE. У нас в ВЦ Виктор Козик повторил эти спецификации на 155 серии МИС (малые интегральные схемы советского производства), да еще у нас подключили мини ЭВМ HP-2100 (16-разрядная с очень "не ортогональной системой команд" - для прибористов, так как в то время - в 1970 году HP была сугубо приборостроительная фирма по акустики кино, медприборам и т.д. и т.п. В 1974 году, по следам нашей закупки этой мини-МиниЭВМ пошел Северо-Донецк и появилась М-6000 и М-7000 для атомной промышленности).
Потом методом ползучей эволюции в нашем ВЦ дошли до 16 болгарских дисков МД-29МГбайт, подключенных к ТРЕМ БЭСМ-6, HP-2100 и М-6000 - такой гетерогенный кластер).
Но для всех заводских БЭСМ-6 был заводской вариант на больших-больших платах БЭСМ-6.
Но важен результат. Тем самым БЭСМ-6, будучи по железу ЭВМ Второго Поколения, по сути обходила наши союзные ЕС ЭВМ, жульнически тянутые с IBM-360, которые были уже Третьего Поколения (на МИС).
Ну и отдельно нужно говорить о программном обеспечении - о двух загранкомандировках двух программистов СССР:
1) о Николае Николаевиче Говоруне из ЛВТ ОИЯТ (г. Дубна) в ЦЕРН
- результат -> реализация (по машинным распечаткам на CDC-3200 в ВЦ Церна) Фортрана + библиотеки стандартных программ + МС "Дубна". Толик Волков в 600 раз ускорил ассемблер SiBESM-6 Жоголева (ВЦ МГУ), который написал его заочно, ещё не имея живой машины - только по списку команд в 1966 году. Ассемблер назвали "Madlen", обидев патриарха из МГУ.
Шесть БЭСМ-6 было у ГДР и их программисты из ОИЯИ, поехав к себе на родину,
сделали свою версию ассемблера (ускорение в 700 раз) SiBesm-6, Фортан-ГДР (Фортран-4) и Алгол-ГДР.
2) о Всеволоде Штаркмане из ВЦ ИПМ им.Келдыша в США на фирму ИБМ
- результат -> автокод БЭМШ, ОС ДИСПАК и ОС ДИАПАК.
Ничего подобного не было с ЭВМ МИНСК-32. Все прилавки в 1970 году были завалены этой ЭВМ для экономики и наши ребята в ИФВЭ сделали даже Кобол для этой ЭВМ.
Но без постоянной модернизации и по МД и по терминальной сети эта ЭВМ была сметена
ЕС ЭВМ 45. В Японии же удвоили машинное слово - с 37 до 74 разряда и в режиме Супер ЭВМ производили до 1995 года
--- А это чистый исторический трёп, но очень Интересный по смыслу!!! ------
На этих ЭВМ GE в США была система разделения времени Maltix, которая "позволяла делать многое и всегда плохо". Именно эта ОС была на ЭВМ в Bell Labaratory и на которой "игрались" будующие создатели Unix, которые взревели от этого "монстрообразного" шедевра
и поклялись функционально слелать то же самое, т.е. Систему Разделения Времени, но где будет иная архитектура из принципа "каждая программка делает что-то одно, но отлично!!!"
Сначала на ассемблере сделали это на 8-разрядной ЭВМ PDP-8, а через пару лет уже на PDP-11 (16 разрядная), но сначала написали универсальный Ассемблер C+, скрестив BLIS (безтиповый мобильный Ассемблер) с идеями почти неподъемного Algol-68 (шедевр "тёмного немецкого гения", совсем почти по Гегелю; от Алгола-68 взвыл Н.Вирт и создал Pascal).

Замечу, что многие GE обслуживали через OS Multics серию товарных фьючерсных бирж в двух небоскребых "близнецах" с 1973 года, и так было лет 10. И я в 1974 году входил из Сокольников по телеграфным линиям на эту биржу - был там такой стенд в год подготовки к полету "Апполон-Союз" в 1975 году.

--
Passynkov Igor, igormoscow1@rambler.ru
vak: (Default)
[personal profile] vak
Если уж мечтать, то по крупному. Не взяться ли нам запустить юникс на БЭСМ-6? На виртуальной машине, конечно, то есть на SIMH. Затея была бы масштабная, но тем и интересная. Что для этого нужно с практической точки зрения?

1. Сделать ассемблер, выдающий объектный файл в формате a.out. У нас есть аналогичный ассемблер для Эльбруса-Б - фактически надо его упростить до системы команд БЭСМ-6.

2. Сделать линкер, связывающий объектные файлы и библиотеки в формате a.out. Аналогично, переделываем линкер от Эльбруса-Б.

3. Написать на ассемблере начальный старт машины, инициализацию регистров, выдачу на консоль, обработку прерываний. Отладить на SIMH.

4. Сделать компилятор Си для БЭСМ-6. Это отдельная большая тема. Компилятор должен уметь обработать исходники ядра. Тренироваться можно на исходниках ядра из проекта v7x86.

5. Доработать ядро с учётом особенностей БЭСМ-6. Словная адресация штука коварная.

6. Написать юниксные драйверы для бэсмовской периферии. Оживить таймер, консольный терминал, барабаны, диски.

7. Переписать libc и libm для БЭСМ-6.

8. Перенести основные системные бинарники /etc/init, /bin/sh, /etc/getty, /etc/mount, /etc/fsck и прочие.

9. Сделать утилиту создания образа файловой системы БЭСМ-6 из Линукса. За основу взять fsutil и проекта bkunix.

10. Перенести остальные утилиты из /bin и /usr/bin.

Для переноса на БЭСМ-6 лучше всего подойдёт Unix v7. Размер его ядра на i486 около 50 килобайт. На БЭСМ увеличится до 100 килобайт - вполне поместится в 192 килобайта адресного пространства БЭСМ. Есть два проекта Unix v7, откуда можно заимствовать исходники: v7x86 и 32V.

RetroBSD не кандидат, к сожалению. Там размер около 170 килобайт на mips32, да ещё распухнет немного, да ещё данных надо хотя бы килобайт 60 - никак не лезет.

Фантазий громадьё, но мечты имеют шанс стать реальностью. Мы точно знаем, что юникс на БЭСМ-6 возможен: в конце 80-х Андрей Основич и Коля Молчанов запускали Unix v6. Я своими глазами видел, стоял за пультом той машины. 😀
vak: (Default)
[personal profile] vak
Сейчас в Би внешний массив транслируется в BSS блок, оформленный как отдельная функция. Пример:
buf[1024];
превращается в:
 buf: ,name,
, ,
, , *+1
,bss, 1024
,end,
Я подумал, а ведь можно маленько хакнуть парсер и сделать страничные массивы похожим образом. Скажем, добавим плюсик:
buf[1024]+;
И пусть это станет:
 buf: ,name,
pp ,block, page(1024)
, ,
, , page
,end,

vak: (Default)
[personal profile] vak
Кодировка ГОСТ на БЭСМ-6 нам дана от бога. Точнее, от разработчиков АЦПУ-128. Расположение символов в таблице в точности соответствует позиции буковок на вращающемся барабане АЦПУ.



Откуда мы знаем порядок символов? А у нас имеется так называемый диагональный тест. Незадолго до демонтажа последней БЭСМ-6 мне удалось попросить их главного инженера запустить тест АЦПУ и отсканировать результат. Суть теста в том, что в каждой строчке молоточки АЦПУ срабатывают с задержкой ровно на одну букву. Так что мы видим все символы один за одним.



Вот таблица кодировки ГОСТ:
 000 0  020 ⏨  040 А  060 Р  100 F  120 ∨
 001 1  021 ↑  041 Б  061 С  101 G  121 ∧
 002 2  022 (  042 В  062 Т  102 I  122 ⊃
 003 3  023 )  043 Г  063 У  103 J  123 ¬
 004 4  024 ×  044 Д  064 Ф  104 L  124 ÷
 005 5  025 =  045 Е  065 Х  105 N  125 ≡
 006 6  026 ;  046 Ж  066 Ц  106 Q  126 %
 007 7  027 [  047 З  067 Ч  107 R  127 ◇
 010 8  030 ]  050 И  070 Ш  110 S  130 |
 011 9  031 *  051 Й  071 Щ  111 U  131 ―
 012 +  032 ‘  052 К  072 Ы  112 V  132 _
 013 -  033 ’  053 Л  073 Ь  113 W  133 !
 014 /  034 ≠  054 М  074 Э  114 Z  134 "
 015 ,  035 <  055 Н  075 Ю  115 ‾  135 Ъ
 016 .  036 >  056 О  076 Я  116 ⩽  136 °
 017    037 :  057 П  077 D  117 ⩾  137 ′

Получить её можно, запустив "dispak -x gost-encoding.b6". Или "dubna gost-encoding.dub".

Между dispak и dubna есть тонкая разница: в форме буквы У. В дубне это Y. Так сделано намеренно, ведь в дубне в основном вывод делается на латинице, и русская буква слишком выпячивала бы.
vak: (Default)
[personal profile] vak
В симуляторе dubna заработал компилятор с языка программирования Би. Подробности смотрите в списке рассылки: besm6/c/cRbp6A-dUXc/m/_al8inGlDQAJ

Чем Би может быть нам полезен? Во первых, в чисто познавательном отношении. Из его исходников многое видно и понятно. Во вторых, Би может помочь разобраться, что и как надо делать в компиляторе Си.

Стоит ли улучшать сам компилятор Би? Судя по сдержанной реакции публики, никто так и не заглянул в порождаемый ассемблерный код. Там нельзя сказать чтобы совсем ужас-ужас, но можно многое улучшить. Это одно потенциальное направление развития. Другое направление - вместо ассемблерного текста выдавать сразу бинарный объектный модуль. Но честно говоря, я не вижу, кто собирается пользоваться этим компилятором. Так что актуальность низкая.

Как улучшить качество генерируемого кода? Сейчас код выдаётся сразу непосредственно из парсера. По этой причине никакая пост-обработка невозможна. Надо вместо немедленной выдачи кода через printf (или write) складывать его в некий буфер. Это может быть массив размером, скажем на 100 машинных команд или больше, там видно будет. Для каждой команды можно хранить четыре слова:
  • номер индекс регистра
  • код машинной команды
  • тип адреса
  • значение адреса
Смысл значения адреса зависит от типа адреса. Для глобальных переменных это индекс в таблице имён. Для локальных переменных это смещение относительно базового регистра r7. Для формальных параметров функции это смещение относительно базового регистра r6. Для литералов это собственно содержимое слова-литерала. Для меток это уникальный индекс метки.

После каждого добавления машинной команды в этот буфер вызывается функция оптимизации. Она реализует набор эвристик. Смотрит на последнюю команду и на предыдущие, и при возможности заменяет их на более оптимальную последовательность. К примеру, сейчас присваивание "x = y" генерится как:
  14,VTM,X
,ITA,14
14,VTM,Y
,ITS,14
,ATI,14
14,XTA,
15,WTC,
,ATX,
Это безобразие должно преобразовываться в:
    ,XTA,Y
,ATX,X
Как выдавать бинарный модуль? У нас имеется реализация формата бэсмовского модуля на Си: stdobj.c, stdobj.h. Переписать это дело на Би и вызывать вместо печати мадленовского текста.

Придётся переделать размещение строковых литералов. Проще всего писать их на временный барабан, а в конце каждой функции добавлять в конец бинарного модуля.
spamsink: (Default)
[personal profile] spamsink

 Вон, даже для PDP-1 сделали!
 

https://github.com/fkokosinski/pdp1-playground

vak: (Default)
[personal profile] vak
Оказывается, книжка Мазного, что я вручил Джону Холлару пятнадцать лет назад, не потерялась, а хранится в компьютерном музее.

https://www.computerhistory.org/collections/catalog/102727535

Жаль нельзя её листать удалённо.

Profile

Сообщество любителей БЭСМ-6

May 2026

S M T W T F S
     12
3456789
101112131415 16
17181920212223
24252627282930
31      

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 5th, 2026 12:07 pm
Powered by Dreamwidth Studios