vak: (Default)
[personal profile] vak posting in [community profile] besm6
В форматной печати языка Фортран есть интересная особенность: если первый символ строки это '+', то строка печатается поверх предыдущей. Переход на новую строку не происходит. Эта штука работала и на БЭСМ-6.

К примеру, программа на Фортране:
        print 1000
1000 format(' --' / '+foobar')
напечатает одну строку с минусами поверх букв OO:
FO̵O̵BAR
Симулятор dispak с флагом --native, то есть с реализацией экстракода Э64, взятой в бинарниках из кода Диспак, выдаст максимально возможное подобие: две строки, где первая заканчивается символом '\', означающим наложение.

Выдача dispak --native:
  F--\
OOBAR
Заметьте, что буква F "проваливается" в первую строку. То есть для символов из строки наложения сначала делается попытка поместить их в первую строку, если там пробелы. Если же там занято, то первая строка выводится целиком, и формируется новая строка из оставшихся символов.

Посмотрим, как выглядит поток байтов на уровне экстракода Э64. Интересно, что есть разница между ОС Диспак и ОС Дубна.

Трассировка dispak:
017 017 017 013 013 172
--
017 212 100 056 056 042 040 107 172
FOOBAR
Трассировка dubna:
017 017 017 013 013 231
--
212 017 100 056 056 042 040 107 231
FOOBAR
Видим, что режим наложения задаётся символом '212'. В Дубне он стоит в первой позиции, за ним пробел '017'. В Диспаке символ '212' стоит на второй позиции, и пробел перед ним. Странно.

Читаем диспаковское описание Э64:
Наложение (212b) - обеспечивает наложение той строки, в которой данный код использован, на предыдущую строку; для этого код 212b должен содержаться во второй (при нумерации с единицы) позиции; при печати он будет заменен пробелом.
Должен содержаться во второй позиции! Я пробовал ставить '212' в первой или третьей позициях - действительно, наложения не происходит. Вместо этого делается "прыжок" на 12-ю позицию текущей строки.

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

Date: 2023-04-07 08:19 pm (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Минусы получились поверх букв O и B.

Profile

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

December 2025

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

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 14th, 2026 01:47 pm
Powered by Dreamwidth Studios