spamsink: (Default)
[personal profile] spamsink posting in [community profile] besm6
Наконец, у меня дошли руки попробовать АЛГОЛ-БЭСМ-6 имени В. М. Курочкина на SIMH. В Сосновом Бору его не было, на диске СВС в стандартном паспорте была область архива, но я когда-то это дело разобрал и оно у меня работало в онлайн-эмуляторе.
Для SIMH потребовались, и ещё потребуются, некоторые изменения. Вот этот пакет работает в SIMH:
ШИФР 419999^
ФИЗО МБ21^
ТРАК 32^
ЛИСТ 0-27^
ВХОД 36^
ВРЕМ 240^
АЦПУ 3^
ЛЕНТ 57(2148)^
ЛЕНТ 30(1С)^
РОСП 0^
АВОС^
СПЕЦ^
Е
В 36
К 00 010 0043 00 050 0112
К 00 010 0042
К 15 24 00100
К 00 066 0011 00 000 0100
С 0000 0000 0057 0002
C 0000 0000 0057 0300
EB1A3
$АЛГО
_begin
    _comment Целые числа от 2 до 100: решето Эратосфена;
    _integer _array prime [2:100];
    _integer n, k;

    _comment Обнулим prime;
    _for n:=2 _step 1 _until 100 _do
        prime [n] := 1;

    _comment Вычислим prime;
    _for n:=2 _step 1 _until 100 _do
        _if prime[n] = 1 _then
            _for k:=n+n _step n _until 100 _do
                prime [k] := 0;

    _comment Печать prime;
    _for n:=2 _step 1 _until 100 _do
        _if prime[n] = 1 _then
            output (`z4d', n);
_end
``````
ЕКОНЕЦ


Одно различие заключается в том, что версия ДИСПАКа для SIMH не понимает указание сдвига по диску в паспорте, как в https://github.com/besm6/besm6.github.io/blob/master/wiki/examples/algol-besm6.b6 (ЛЕНТ 57(2148-300)^), и поэтому приходится выдавать экстракод сдвига явно. Но такой способ несовместим с эмулятором ДИСПАКа для СВС (размер сдвига нужно задавать в других единицах). Так что я заведу в МГУ стандартный паспорт ЗС3, как было принято (и с ЕЕВ1А3, по традиции).

Другое различие - требования к кодированию концов строк для АЛГОЛа. По умолчанию он делает из входного потока "кирпич":
СИСТЕМА АЛГОЛ-БЭСМ6. ВАРИАНТ 01-05-79.




СЧЕТ БЕЗ КОНТРОЛЯ




   1.   _ВЕGIN    _СОММЕNТ ЦЕЛЫЕ ЧИСЛА ОТ 2 ДО 100: РЕШЕТО ЭРАТОСФЕНА;    _INТЕGЕR _АRRАУ РRIМЕ [2:100];    _INТЕGЕR N, К;    _С
ОММЕNТ ОБНУЛИМ РRIМЕ;    _FОR N:=2 _SТЕР 1 _UNТIL 100 _DО        РRIМЕ [N] := 1;    _СОММЕNТ ВЫЧИСЛИМ РRIМЕ;    _FОR N:=2 _SТЕР
1 _UNТIL 100 _DО        _IF РRIМЕ[N] = 1 _ТНЕN            _FОR К:=N+N _SТЕР N _UNТIL 100 _DО                РRIМЕ [К] := 0;    _
СОММЕNТ ПЕЧАТЬ РRIМЕ;    _FОR N:=2 _SТЕР 1 _UNТIL 100 _DО        _IF РRIМЕ[N] = 1 _ТНЕN            ОUТРUТ (‘Z4D’, N);_ЕND


――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――





             2   3   5   7  11  13  17  19  23  29  31  37  41  43  47  53  59  61  67  71  73  79  83  89  97














                                                                                                                             1


――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――


Для разбиения программы на строки используется символ с кодом 0174 (в кодировке ГОСТ), который сейчас вводится в SIMH как ctrl-^ (record separator).
(В эмуляторе Диспак для этого используется ^M (carriage return), потому что эмулятор Диспака используется только в среде UNIX, в отличие от SIMH, который должен одинаково понимать строки с LF (UNIX) и CR-LF (Windows) на конце ради переносимости.

По-хорошему нужно придумать какой-то более изящный способ. Можно, например, изменить таблицу в SIMH, чтобы и символ \ тоже перекодировался в 0174, а не в пробел, как сейчас.


Паспорт С3 занят чем-то непонятным; я завёл паспорт АЛ, так что
ШИФР 419999ЗАЛ^
ЕЕВ1А3
$АЛГО
_begin
    _comment Целые числа от 2 до 100: решето Эратосфена;
    _integer _array prime [2:100];
    _integer n, k;

    _comment Обнулим prime;
    _for n:=2 _step 1 _until 100 _do
        prime [n] := 1;

    _comment Вычислим prime;
    _for n:=2 _step 1 _until 100 _do
        _if prime[n] = 1 _then
            _for k:=n+n _step n _until 100 _do
                prime [k] := 0;

    _comment Печать prime;
    _for n:=2 _step 1 _until 100 _do
        _if prime[n] = 1 _then
            output (`z4d', n);
_end
``````
ЕКОНЕЦ


должно работать.

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 11:16 am
Powered by Dreamwidth Studios