Чеклист анти-Тьмы

Пока идёт отладка и оптимизация, предлагаю подготовить список испытаний для «волшебной кнопки», избавляющей римейк МК-61 от «Тьмы» и других «неизлечимых» глюков, обнаруженных в советских ПМК. Пожалуйста, добавляйте в комментариях, от чего ещё вам хотелось бы наконец-то получить палочку-выручалочку (и примеры-тесты, где их пока нет):

1. Каноничная Тьма, тест 1а: 1 ВП 70 Fx2 «ЕГГOГ» Fx2 «3ГГOГ» Fx2. Тоже самое при вычислениях по программе, тест 1б: Cx 70 F10x Fx2 Fx2 Fx2 КНОП Cx С/П.

2. Тьма в мире хвостов 0С-оборотней (оборотни первого порядка от 1 ВП 450 до 9,9999999 ВП 469 и оборотни второго порядка от 1 ВП 445 до 9,9999999 ВП 446), включая захваченные ею смежные искажённые этажи С-EГГ0Г’ов. Восемь тестов этой серии, разбитых на две группы по 4 теста, см. в комментариях.

3. Недокументированная команда с кодом 5F, вызывающая зависание процессора ввода/вывода К745ИК1302-2 (Тьму).

4. Зависание математического процессора К745ИК1303-2, опубликованное Сергеем Фроловым: 55 В↑ К ИНВ К {x} ВП 1 К [x] ÷ (не совсем Тьма, но все функции начинают выдавать EГГ0Г).

5. «Пустышка» F в старшем разряде мантиссы регистра X. ПМК не зависает, но начинает глючить. Похоже, что от возникновения фальшивой метки (или даже нескольких) стек, регистры и шаги программы начинают непоследовательно записываться и считываться из разнообразных областей кольца, включая обычно недоступную область Ms. Разработка кнопки «сброс Тьмы» позволит проверить этот диагноз и вылечивать ПМК после «пустышки» без его выключения.

6. Грубейшая ошибка при поимке чудовища 4 этажа: Сx ВП 50 Fx2 Fx2 FВx × С/П ↔ F АВТ. Чудовище переводит ПМК в режим счёта, оно же останавливает счёт на команде с кодом F0 (недокументированный аналог КНОП), но будучи на экране в автоматическом режиме, снова запускает программу и так далее. Кнопка безопасности должна уметь диагностировать эту проблему (незамаскированное чудовище 4 этажа в регистре X) и выводить ПМК из бесконечного цикла, способов много. Лучший из простых это F ПРГ. Чуть похуже Cx, самый еггогологичный — устроить EГГ0Г (сработает ли К- в канале связи?), замаскировав им дикое чудовище (точно также можно «ловить» и Тьму).

7. Убрано. (Было предложено чистить стек возвратов, чтобы В/О возвращал на шаг 01, как после включения ПМК. Но лучше просмотр и очистку стека возвратов сделать отдельным пунктом меню, не смешивая с Анти-Тьмой. Всё же стек возвратов несёт информацию о мантиссе «сверхчисла», устроившего зависание. Она может оказаться полезной.)

8. Вызвать C-EГГ0Г из регистра C. В принципе, вторая серия тестирует похожие «хвосты», но не помешает отдельно проверить зависание и на классических C-EГГ0Г’ах, не связанных с 0C-оборотнями.

Комментарии

Это список тестов на аутентичность :)
Убедиться, что эмулятор после оптимизаций все еще тот же

Тесты на аутентичность тоже надо разработать. Но здесь задача — сделать в железке мягкую перезагрузку, позволяющую выводить эмулятор из известных случаев зависания, сохраняя как минимум содержимое регистров и памяти программ. Плюс список тестов, создающих такие зависания, разного рода.

P.S. В идеале и стек хорошо бы сохранить, и счётчик команд, и стек возвратов — вопреки пункту 7. Это всё помогает расследовать ситуацию, приведшую к зависанию. Вообще чем меньше изменений, тем лучше. Может, убрать лишнюю метку в кольце, поправить порядок и старшую цифру числа в RX — но лишь в тех случаях, когда они и есть причина возникших проблем.

Восемь тестов второй серии используют одну и ту же «водолазную» программу. Ниже она записана по 10 шагов в строке, после первых пяти стоит ромб. Дойдя до него, убедитесь, что счётчик команд заканчивается на 5. При проверке на советском ПМК вам придётся вводить эту программу заново перед каждым тестом или загружать её из ППЗУ «Электроники МК-52». На эмуляторе перед каждым тестом надо убедиться, что все регистры обнулены.

Три завершающие команды (шаги 13-15) добавлены на случай проблем с эмуляцией. Они не исполнятся на аутентичном ПМК. Второй останов в тестах 2б, 2г, 2е и 2ж должен произойти перед ними, по команде ИП9. Две команды по адресам 09-10 стирают все следы «сверхчисел» в стеке. Это нужно для чистоты эксперимента, чтобы при обнаружении ошибки было проще её отследить.

В↑ 5   0   F10ˣ Fx² ◆ Fx² Fx² × П9 Сx
×  С/П ИП9 Сx   1   ◆ С/П

Первая группа тестов 2а-2г проверяет Тьму и зависание C-EГГ0Г’ов, полученных как хвосты 0C-оборотней первого порядка. Генерация опасного хвоста в регистре С проверяется как в автоматическом режиме, так и при недокументированном аварийном останове по команде ИП9. На мой взгляд этого пока достаточно, хотя позже можно добавить ещё 8 тестов на проверку зависания при выводе этих разновидностей Тьмы в режиме счёта, как во втором тесте первой серии.

Когда в тесте встречается «0», вам надо проверить, что на индикаторе (регистр X) действительно отображается ноль. В некоторых случаях под этим нулём скрывается 0С-оборотень, внешне они неразличимы. Перед первым выводом 0C-оборотня из регистра 9 мы трижды проверяем регистр С, чтобы убедиться в честности записанного там нуля — трижды, так как оборотней выше третьего порядка не существует.

Если всё сделано верно, на последней команде ИПС аутентичный калькулятор должен зависнуть с потухшим индикатором. Это норма. © Если зависание удаётся сбросить кнопкой безопасности — тест кнопки пройден успешно. Поздравляю, МК61S успешно победил Тьму, о чём на советских ПМК мы только мечтали!

2а. 1 ВП 50 В/О С/П «0» 
    ИПС «0» ИПС «0» ИПС «0» ИП9 «0» ИПС

2б. 1 ВП 50 В/О С/П «0» 
    ИПС «0» ИПС «0» ИПС «0» С/П «0» ИПС

2в. 1 ВП 60 В/О С/П «0» 
    ИПС «0» ИПС «0» ИПС «0» ИП9 «0» ИПС

2г. 1 ВП 60 В/О С/П «0»
    ИПС «0» ИПС «0» ИПС «0» С/П «0» ИПС

Вторая группа тестов 2д-2ж проверяет опасные хвосты оборотней второго порядка. Как и ранее, ПМК должен зависнуть после двух последних ИПС и успешно отвиснуть после нажатия суперкнопки.

2д. 1 ВП 45 В/О С/П «0»
    ИПС «0» ИПС «0» ИПС «0»
    ИП9 «0» ИПС «0» ИПС

2е. 1 ВП 45 В/О С/П «0»
    ИПС «0» ИПС «0» ИПС «0»
    С/П «0» ИПС «0» ИПС

2ё. 1 ВП 46 В/О С/П «0»
    ИПС «0» ИПС «0» ИПС «0»
    ИП9 «0» ИПС «0» ИПС

2ж. 1 ВП 46 В/О С/П «0»
    ИПС «0» ИПС «0» ИПС «0»
    С/П «0» ИПС «0» ИПС

Среди хвостов оборотней третьего порядка ни Тьмы, ни зависающих C-EГГ0Г’ов не обнаружено. Проверять этот факт ещё одной группой тестов мы сейчас не будем, положившись на исследования Михаила Пухова.

Все восемь тестов второй серии (2а-2ж) проверены на «Электронике МК 56» — где, увы, кнопки «отвисания» не предусмотрено. По понятным причинам эти тесты не вызовут зависания ни «Электроники МК-152», ни «Электроники МК-161».

Я попробовал тест 2а на MK61s. Похоже, что эмулятор завис. Поведение экрана, конечно, не как в оригинале - ничего не менялось, но на клавиатуру больше не реагировал.

Вопрос - а кто-нибудь проверял эти оборотни на нашем официальном консольном эмуляторе?

Тесты второй серии сложные, требуют специальную программу и опираются на недокументированное поведение 0С-оборотней. Борьбу с зависаниями советую начать с простейшего теста 1а:

1 ВП 70 Fx2 «ЕГГOГ»  Fx2 «3ГГOГ»  Fx2

Когда будет разработан способ реанимации эмулятора после этой простейшей Тьмы, этот способ уже можно проверить на 1б и на второй серии тестов. Полный набор тестов позволит дальше доработать «Сброс Тьмы». Ну и удостоверится, что все зависания, замеченные за 30 лет, в МК61S исправлены.

Попробовал тест 1а:

1 ВП 70 Fx2

ЕГГОГ

Fx2

ЗГГОГ

Fx2

Зависла намертво.

Главный цикл эмулятора:

         if (keyParserResult == MK61_OK) {
             MK61Emu_Exec();
             lcd2004_set_cursor(0, 3);
             lcd2004_write_string(MK61Emu_GetIndicatorStr());
             // TODO MK61_SERIAL_TRACE(MK61Emu_GetIndicatorStr());
         }

Виснет где-то в глубине

MK61Emu_Exec() -> MK61Emu_DoStep() -> MK61Emu_Cycle() -> ...

Наверное, надо организовать таймер и в его прерывании опрашивать нажатие "кнопки реанимации". Что, наверное, плохо скажется на производительности.
А можно просто нажать кнопку RESET на "синей таблетке" :)

Не знал, что Тьма прямо вешает цикл эмуляции. Весьма странно. Перед зависающей частью можно засечь время:

iLatch = timer;
DoUnsafe();
iLatch = 0; \\ зависания не было

Кнопка реанимации может висеть на прерывании и сравнивать таймер с засечкой iLatch. Если прошло слишком много времени без выхода из цикла, проводить расследование и принимать экстренные меры.

Да, вочдог таймер на цикле это можно сделать.
Экстренные меры, кроме как вызвать функцию

void MK61Emu_Cleanup() {
    memset(ringM,0,sizeof(ringM));
    IK1302_Clear();
    IK1303_Clear();
    IK1306_Clear();
}

А вообще надо быстрее делать печатную плату и, чтобы желающие могли себе заказать набор для сборки, или даже собранный конструктор

Да, главное - железка, а прошивку потом доработаем. Перепрошивка, надеюсь, будет предусмотрена, в отличие от? :)

Конечно, предусмотрена! :)
Пока через ST-link, он стоит очень недорого.
А потом можно будет через специальный бутлоадер упросить процедуру

Такие «меры» это секир башка в ответ на зубную боль. Смысл же не передёрнуть вкл-выкл, а сбросить Тьму и продолжить работу, сохранив как минимум программу и регистры.

Перед печатной платой лучше продумать, как будет устроена кнопка спасения. Если главный цикл зависает, обычный опрос матрицы в этом цикле ничего не даст. Тут надо либо кнопку на отдельное прерывание вешать, либо действительно опрашивать матрицу по таймеру, как на «Ямахах».

Тут вопрос возникает - а для чего нужен такой функционал? В Тьму на обычных программах не попасть, для чего продолжать работу, сохранив программу и регистры?
Если это только для изучения Тьмы, то тогда лучше взять эмулятор для PC с консольным интерфейсом, понаставить там точек останова и изучать в дебаггере.

Целевая аудитория «железного» эмулятора — аксакалы эпохи советских ПМК, знакомые с еггогологией. Кнопка мягкой перезагрузки (с сохранением регистров и программы) делает еггогологические исследования безопасными. Можно будет разрабатывать новые алгоритмы еггогологии, без боязни потерять часы труда. В конце концов Михаил Пухов опубликовал свою «Охоту на инопланетных чудовищ», как ещё одну электронную игру.

Сделав кнопку анти-Тьмы, просмотрщик стека возвратов и разных областей кольца, можно серьёзно продвинуть вперёд еггогологию, дав увлечённым исследователям новый мощный инструмент. Исследовать железку интересней, чем программу на десктопе. У советских ПМК есть 30 лет исследований, поисков багов. Это наше богатство. Теперь реально им воспользоваться и безопасно устранить все выявленные зависания.

Кого же еггогология не интересует, для тех есть МК-161. Быстрее, больше памяти и т.п. Возможность играть в «Электронный океан», совместимый с исследованиями Михаила Пухова — существенный плюс проекта. Она может и больше народу привлечь в сообщество. Тех владельцев ПМК, кто их забросил, но приятные воспоминания сохранил.

"Гонятся" по кругу какие то данные или данные не изменяются и идёт цикл на каких то командах?

Данные в stm32-железке не проверял, нечем. Если есть желание, лучше это подебажить в PC консольном эмуляторе, сильно проще будет