[personal profile] azizz8618 posting in [community profile] besm6
По просьбе С. Вакуленко переношу сюда дискуссию, ведующуюся в теме "Посадка на Луну".
Итак паспорта ПУЛЬТа были успешно исправлены.
Текст "Посадки" был успешно введен при помощи экспект-скрипта в массив "ПОСАД" находящийся в архиве ИГРА (см. ниже). Создан массив ПОСАДТ для трансляции туда содержимого файла "ПОСАД" через
ПАС ПОСАД-ЗОНГП ПОСАДТ. На сегодня результат идентичен тому, что было и до исправления паспортов
CИCTEMA ПУЛЬT 23.10.80
АРХ ИГРА,41,5000,1000
ECTЬ
КТЛ
ИMЯ HAЧAЛО ДЛИHA
ПОCAД 022 020
ПОCAДT 042 001
РЕД ПОСАДТ
ПPОЧTEHО (415042:1)
С
ФAЙЛ ПУCTОЙ
В1
HET CTPОKИ C HОMEPОM 1
В
0001 А
0002
З
B ФAЙЛ ПОCAДT ЗAПИCAHО ЗОH: 1 (415042:1)
К
ПАС ПОСАД-ЗОНГП ПОСАДТ
ПACKAЛЬ-ABTОKОД 9.(09.12.88)
ABОCT 000016
PASCALИHФ О CTEKE CBEPXУ
1. AДPEC CTEKA=26423БEЗ PMД
2. AДPEC CTEKA=26386БEЗ PMД
3. AДPEC CTEKA=26379БEЗ PMД
4. AДPEC CTEKA=26342БEЗ PMД
5. AДPEC CTEKA=12287БEЗ PMД
ЭTО БЫЛ PMD ПPОГPAMMЫ...

Date: 2020-10-23 07:56 pm (UTC)
vak: (Default)
From: [personal profile] vak
Это собственно машинные команды и данные, размещаемые в памяти по указанным адресам. Фактически самый нижний уровень представления программ для БЭСМ-6. Никаких компиляторов, ассемблеров и линкеров: чисто программирование в кодах. Все числа восьмеричные. Где-то этот формат описан, не помню где.

в 2000 - задаёт адрес для ввода последующей информации.

к 00 070 3000 - машинная команда, одна в слове. Размещается в левой половине слова, а правая половина остаётся нулевой. Команда состоит из трёх полей: индекс-регистр, код операции и адрес.

к 00 010 3001 00 000 0041 - две машинные команды в слове.

с 0010 0000 0040 0040 - восьмеричная константа, одно слово, 48 бит. Слева дополняется нулями, если нужно.

б ПУЛЬТ - текстовая константа в кодировке ГОСТ, шесть символов. Здесь начинается с пробела.

Date: 2020-10-24 04:32 am (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Похоже, у нас есть проблемы. Простая программа компилируется и работает:
З БУФ=ТТ
_PROGRAM A; _( WRITELN('HELLO') _).
//
MCB   БУФ    H=000 Д=001
ПАС БУФ
 ПACKAЛЬ-ABTОKОД 9.(09.12.88)
HELLО
BCE CДEЛAHО.


А чуть более сложная - уже нет:
З БУФ=ТТ
_PROGRAM A;_VAR A:CHAR;
_( BIND('PROMPT: ');
_WHILE _NOT EOF(INPUT) _DO _( GET(INPUT); WRITE(INPUT@) _);
_).
//
MCB   БУФ    H=000 Д=001
ПАС БУФ
 ПACKAЛЬ-ABTОKОД 9.(09.12.88)
ABОCT 000016
PASCALИHФ О CTEKE CBEPXУ
1. AДPEC CTEKA=26386БEЗ PMД
2. AДPEC CTEKA=26379БEЗ PMД
3. AДPEC CTEKA=26342БEЗ PMД
4. AДPEC CTEKA=12287БEЗ PMД
ЭTО БЫЛ PMD ПPОГPAMMЫ...


Это деление на нуль. С другой стороны, компилятор на диске 2248, которым я всё время пользовался в эмуляторе Диспака, падает с авостом 41(8) - обращение к незаказанной МЛ.

На всякий случай проверьте, пожалуйста, что ваши образы дисков 2148 и 2248 идентичны находящимся здесь: https://github.com/besm6/besm6.github.io/tree/master/download/disks


Кстати,

АРХ ИГРА,41,5000,1000

Почему 5000? На 7.25 Мб дисках всего 1744(8) зоны.

Date: 2020-10-24 06:21 am (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Имеем следующее. В эмуляторе Диспака в Паскале версии 09.12.88 несколько предыдущих перед делением на нуль команд такие:
27100: xta 5(2)             (=0000000000064000) acc=0000000000041402 r[2]=63422
27101: atx 6(2)             (=0000000000042271) acc=0000000000064000 r[2]=63422
       63430: store 0000000000064000
27101: uj  27060            (=1010000600120011) acc=0000000000064000
27060: xta 6(2)             (=0000000000064000) acc=0000000000064000 r[2]=63422
27060: aex 11               (=0000000000064000) acc=0000000000064000
27061: uza 27102            (=0410006300120040) acc=0000000000000000
27102: xta 63(1)            (=0000000000000026) acc=0000000000000000 r[1]=27777
27102: aex 40               (=0000000000000026) acc=0000000000000026
27103: uza 27105            (=0010001204166214) acc=0000000000000000
27105: xta 12               (=0000000000000000) acc=0000000000000000
27105: a/x 6214(1)          (=0000000000000000) acc=0000000000000000 r[1]=27777

а в Паскале версии 17.05.88 деления вообще нет, а в соответствующих адресах команды такие:
27100: xta 5(2)             (=0000000000064000) acc=0000000000041402 r[2]=61422
27101: atx 6(2)             (=0000000000042271) acc=0000000000064000 r[2]=61422
       61430: store 0000000000064000
27101: uj  27060            (=1010000600120011) acc=0000000000064000
27060: xta 6(2)             (=0000000000064000) acc=0000000000064000 r[2]=61422
27060: aex 11               (=0000000000064000) acc=0000000000064000
27061: uza 27102            (=0410006300120040) acc=0000000000000000
27102: xta 63(1)            (=0000000000000026) acc=0000000000000000 r[1]=27777
27102: aex 40               (=0000000000000026) acc=0000000000000026
27103: uza 27105            (=0010001204000065) acc=0000000000000000
27105: xta 12               (=0000000000000000) acc=0000000000000000
27105: atx 65(1)            (=0000000000000001) acc=0000000000000000 r[1]=27777
       30064: store 0000000000000000

То есть всё предыдущее совпадает, кроме слова по адресу 27105.

Оказывается, на диске 2148 в зоне 1114 два слова побились серьёзно:

1105)  00 010 0012 01 016 6214   --- 2148
       00 010 0012 01 000 0065   --- 2248, как должно быть
1106)  04 123 1156 00 000 0000   --- мусор
       16 31 06157 00 000 0000   --- 2248, но должно быть со смещением 1, т. е. 16 31 06156 00 000 0000


Я у себя исправил, теперь работает.

Почему работающий в эмуляторе Диспака компилятор на диске 2248 даёт ошибку обращения к незаказанному устройству при запуске под эмулятором машины, ещё предстоит разобраться.

Сколько ещё таких побитых мест в образах дисков, прочитанных с лент, т.е. 2148 и 2248 - бог весть.

Date: 2020-10-24 06:30 am (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Я исправил в МГУ. Вроде работает:
PULT2 5216
 Ф001
  CИCTEMA ПУЛЬT   24.10.80
З БУФ=ТТ
_PROGRAM MAIN; 
_( BIND('PROMPT: _172');
_WHILE _NOT EOF(INPUT) _DO _( WRITE(INPUT@); GET(INPUT) _);
WRITELN _).
//
MCB   БУФ    H=000 Д=001
ПАС БУФ
 ПACKAЛЬ-ABTОKОД 9.(09.12.88)
PRОMPT: ЙЦУКЕН
ЙЦУКЕН
BCE CДEЛAHО.



Date: 2020-10-25 03:55 am (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Попробуйте писать в ещё не существующий массив.

Date: 2020-10-25 04:49 pm (UTC)
spamsink: (Default)
From: [personal profile] spamsink
После успешной компиляции
ПАС -ВЫП ПОСАДТ
должно заработать.

Date: 2020-10-27 10:10 pm (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Оно как бы работает
ПАС -ВЫП ПОСАДТ
ENGLISH / PУCCKИЙ ?1720000000E00000P?03?????2A?3-2?/2????0,??З000Е
MISSIОN CОNTRОL CALLING LUNAR MОDULE:
MANUAL CОNTRОL IS NECESSARУ FОR LANDING.
WHAT IS УОUR EXPERIENCE:
 0 1 2(STANDARD) 3 4 5 6 7 8 9(NО EXPERIENCE) ? 
WHAT IS УОURS ? 17200000ЧTО У BAC ? 172000К
MISSIОN CОNTRОL ОUT. 


Но дело в том, что для ввода метасимвола "тождество" (≡ - код ГОСТ 0125) для задания восьмеричного кода символа 172, обозначающего конец приглашения, я сделал изменение в эмуляторе Диспака, чтобы фигурная скобка перекодировалась в него. При переносе файла в архив Пульта этот символ пропал. Я разобрался, как его надо записывать (_==) и отредактировал файл.

Попробуйте зайти в Пульт и сделать ПАС -ВЫП ПОСАДТ

Date: 2020-10-25 10:21 pm (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Увы, мы так и не знаем, как создавать файлы желаемой длины, а не 20 зон.


Насчет 5000 не понял - на диске нет столько зон. Для дисков объёмом 7.25 Мб номер зоны брался из младших 10 разрядов инф. слова экстракода, поэтому архив реально находится, начиная с 1000 зоны. Если я в СЕРПе просматриваю зону 1000, то вижу заголовок архива.

Нужно сделать паспорт, который читает две зоны программы в листы 0 и 1, а также административную систему Паскаля в один из двух последних листов
Экспериментировать гораздо удобнее в эмуляторе Диспака.

Date: 2020-10-27 10:11 pm (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Я поправил, попробуйте ещё раз.

Profile

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

December 2025

S M T W T F S
 123456
78910111213
14151617181920
21222324252627
282930 31   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 13th, 2026 03:23 am
Powered by Dreamwidth Studios