spamsink: (Default)
[personal profile] spamsink posting in [community profile] besm6
Что-то в Э64 в эмуляторе Диспака у нас ещё не слава богу.


ШИФР 419900ЗС5‾ОЗУ 32‾ЕЕВ1А3
*NАМЕ BAD E64
*NО LО
*ВЕМSН
БПК◇◇◇
ВВД◇◇◇
ЕСКС СТАРТ ’1000’
Э64 Л0
КОНЕЦ
Л0 КОНК А(НЛ)
КОНК А(КЛХ)
КОНД М23В’1’
НЛ НОП
КОНД (2)П’0 ’М40В’175’
КОНД П’.-00. ’М24В’174’М16В’42’
КОНД П’0 ’М40В’175’
КОНД П’I ’
КОНД (3)П’ ’
КОНД П’I Э1-К’
КОНД П’Б ’
КОНД П’I ’
КОНД П’0 ’М40В’175’
КОНД П’I-00I-’М24В’174’М16В’26’
КОНД П’00I ’М40В’174’М32В’12’
КОНД П’0 ’М40В’175’
КОНД П’I ’
КОНД (3)П’ ’
КОНД П’I ’
КОНД П’ ’
КОНД П’I ’
КОНД П’0 ’М40В’175’
КОНД П’I-00I-’М24В’174’М16В’26’
КОНД П’00I ’М40В’174’М32В’12’
КОНД П’0 ’М40В’175’
КОНД П’I ’
КОНД (3)П’ ’
КОНД П’I ’
КОНД П’ ’
КОНД П’I ’
КОНД П’0 ’М40В’175’
КОНД П’I-00I-’М24В’174’М16В’26’
КОНД П’00I ’М40В’174’М32В’12’
КОНД П’0 ’М40В’175’
ТЕКСТ П’I ИСПОЛН. I I I ПЛОТН.ЗП. I’
КОНД П’000I00’М40В’175’М32В’173’М24В’5’М8В’173’В’7’
КОНД П’ ’
КОНД П’ I ’
КОНД (2)П’ I ’
КОНД П’ ’
КОНД П’/ММ I ’
КОНД П’0 ’М40В’175’
КОНД П’’’-00’’ ’М24В’174’М16В’42’
КОНД (2)П’0 ’М40В’175’
КЛХ КОНД П’ 0’В’377’
ФИНИШ
КВЧ◇◇◇
ТРН◇◇◇
БТМАЛФ
КНЦ◇◇◇
*MAIN ECKC
*ЕХЕСU
*ЕND F
``````
ЕКОНЕЦ


Должна печатать (и печатает, будучи вызвана через dispak -x)



.-----------------------------------.
I I Э1-КБ I
I-----------------------I-----------I
I I I
I-----------------------I-----------I
I I I
I-----------------------I-----------I
I ИСПОЛН. I I I ПЛОТН.ЗП. I
I I I I /ММ I
’-----------------------------------’


а печатает по умолчанию



.---.
I I Э1-КБ I
I-------I-----------I
I I I
I-------I-----------I
I I I
I-------I-----------I
I ИСПОЛН. I I I ПЛОТН.ЗП. I
I I I I /ММ I
’---’


Date: 2024-03-24 06:16 pm (UTC)
vak: (Default)
From: [personal profile] vak
Интересно, как будто хитрый повтор символа какой-то. Давай я гляну. Надо для сравнения запустить через dubna.

Date: 2024-03-25 07:43 am (UTC)
vak: (Default)
From: [personal profile] vak
Да, действительно, глючит. Завтра попробую починить.
$ dubna bad_e64.dub
...
     .---.
     I                       I Э1-KБ     I
     I-------I-----------I
     I                       I           I
     I-------I-----------I
     I                       I           I
     I-------I-----------I
     I ИCПOЛH.  I      I     I ПЛOTH.ЗП. I
     I          I      I     I       /MM I
     ’---’

https://github.com/besm6/dubna/blob/main/examples/bad_e64.dub

Date: 2024-03-26 07:10 am (UTC)
vak: (Default)
From: [personal profile] vak
Я раскопал место, где ошибка. Выдаём последовательность в коде ГОСТ:
016 013 174 042 016 175
Должно получиться:
.-----------------------------------.
Имеем:
.---.
Смотрим посимвольно.
016   .   GOST_DOT
013   -   GOST_MINUS
174       GOST_EOLN
042       десятичное 34
016   .   GOST_DOT
175       GOST_CARRIAGE_RETURN
Символ GOST_EOLN обрабатывается как повтор предыдущего символа указанное число раз. Очевидно, в этом коде что-то неладно.
        case GOST_EOLN:
        case GOST_REPEAT:
            // Repeat last symbol as many times, as defined by next byte.
            ch = bp.get_byte();
            if (ch == 040) {
                // fill line by last symbol (?)
                std::fill(e64_line.begin(), e64_line.end(), last_ch);
                e64_emit_line();
            } else {
                while ((ch-- & 017) != 0 && e64_position < LINE_WIDTH) {
                    if (e64_line[e64_position] == GOST_SPACE) {
                        e64_putchar(last_ch);
                    } else {
                        e64_position += 1;
                    }
                }
            }
            break;
Надо будет добавить побольше юнит тестов для символов GOST_EOLN и GOST_REPEAT. Проверить на всём диапазоне значений счётчика повторения.
Edited Date: 2024-03-26 07:12 am (UTC)

Date: 2024-03-27 08:51 am (UTC)
vak: (Default)
From: [personal profile] vak
Я починил э64 - глянь изменения и тесты.
Заодно поправил другие тесты, которые сломались из-за правильного э67.

Date: 2024-03-29 02:25 am (UTC)
vak: (Default)
From: [personal profile] vak
Тесты наше всё. 😀
Если забыл проверить тесты и закоммитил - Гитхаб пришлёт email, что билд не прошёл.
Там изменился адрес финального останова. Сломались только тесты, которые его проверяли.

Перетащу правку в Диспак сегодня.

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. 13th, 2026 06:32 pm
Powered by Dreamwidth Studios