Еггогология

Источник: МАТЕМАТИКА
Автор: 

Изучение недокументированных возможностей микрокалькуляторов. 

Происхождение

Название происходит от сообщения об ошибке «ЕГГОГ», которую выдавали программируемые микрокалькуляторы второго поколения советского производства.   Термин впервые появился в журнале «Техника — молодёжи» после цикла статей, посвященных программированию на микрокалькуляторах серии «Электроника Б3-34» и серии из девяти рассказов об увлекательном фантастическом путешествим с Луны на Землю под общим названием «„Кон-Тики“: путь к Земле». В этом цикле, кроме игровых программ, описывались различные недокументированные возможности микрокалькуляторов и видеосообщения, многие из которых получались путем манипуляций с клавишами после появления сообщения об ошибке «ЕГГОГ».
 Читатели журнала с огромным энтузиазмом откликнулись на рассказ об обнаруженных недокументированных возможностях микрокалькуляторов, стали искать новые, и по окончании цикла «Кон-Тики…» появился небольшой раздел «Новости еггогологии». С помощью опубликованных в нём недокументированных приёмов было написано множество новых игровых программ, большинство из которых просто не могло быть создано стандартными средствами, в силу ограниченности ресурсов калькуляторов семейства Б3-34.

Направления еггогологии

Одним из основных направлений еггогологии было расширение диапазона обрабатываемых чисел, и изучение реакции микрокалькулятора на попытки произвести операции с числами за пределами стандартного диапазона.
Другое направление еггогологии изучало реакцию микрокалькулятора на недокументированные последовательности нажатия программных клавиш и способы ввода недокументированных команд, а также исполнение микрокалькуляторами таких команд.

«Нестандартные» числа

Еггогология утверждает, что порядок диапазона обрабатываемых микрокалькулятором чисел ограничено по модулю 1000 и делит этот диапазон на так называемые этажи или «ярусы». Каждый ярус — это сотня из диапазона от 0 до 999. То есть нулевой ярус — это числа с основанием степени от 0 до 99, первый ярус — числа с основанием степени от 100 до 199 и т. д. Всего ярусов десять, причем минус первый ярус эквивалентен девятому, минус второй — восьмому и т. д.
Документацией максимальное значение чисел, над которыми можно производить математические действия, ограничивалось значением ±9.9999999 × 10. В самом деле, если ввести в микрокалькулятор число 1 × 10 и возвести его в квадрат, то получаем сообщение на дисплее «ЕГГОГ». Такая индикация по документации является признаком сообщения об ошибке, так как число 1 × 10 выходит за пределы «стандартного» диапазона. Оказывается, что это не сообщение об ошибке, а способ индикации чисел первого яруса, и с этим числом можно производить обычные операции: складывать, умножать, делить, вычислять значения функций, запоминать его в регистре памяти, вызывать из регистра. Таким же образом можно работать с числами второго яруса. Чтобы выяснить реальные значения таких чисел, их нужно было разделить на 1 × 10 или другие подобные числа для приведения к числу из нулевого яруса.
Другими словами, давался способ расширения диапазона чисел, обрабатываемых стандартными действиями, до ±9.9999999 × 10. Также было возможно с некоторыми ухищрениями получать числа до ±9.9999999 × 10 и анализировать их значение. С помощью таких «вычислений» доказывалось, что девятый ярус представляет собой числа с отрицательным значением основания степени. Числа восьмого яруса невозможно сохранить после их получения, так как они немедленно преобразовывались в обычный нуль, независимо от того, с какой стороны к ним «подбираться».

Классификация числовых ярусов

Числовой ярус - Название чисел - Диапазон чисел - Краткая характеристика числа из этого диапазона
Нулевой Обычные числа с неотрицательным порядком От ±1 до ±9.9999999 × 10 Можно производить обычные вычисления
Первый «ЕГГОГи» От ±1 × 10 до ±9.9999999 × 10 Можно производить обычные вычисления, но отображаются на дисплее как
Второй «3ГГОГи» От ±1 × 10 до ±9.9999999 × 10 Можно производить обычные вычисления, но отображаются на дисплее как . Выполняют безусловный переход на адрес, совпадающий с двумя первыми цифрами порядка
Третий «Неукротимые чудовища» От ±1 × 10 до ±9.9999999 × 10 Способны произвольно перевести микрокалькулятор в режим исполнения программы или привести к его зависанию
Четвертый «ОС-оборотни» От ±1 × 10 до ±9.9999999 × 10 Копируют в искажённом виде структуру ярусов, применяются для анализа других чисел. Искажают содержимое регистра С
Пятый «Тьма» От ±1 × 10 до ±9.9999999 × 10 При попытке вывода на дисплей приводят к зависанию микрокалькулятора. Индикатор гаснет, работоспособность восстанавливается после выключения и включения
Шестой «С-ЕГГОГ-оборотни» От ±1 × 10 до ±9.9999999 × 10 Искажают содержимое регистра С
Седьмой «Длинные монстры» От ±1 × 10 до ±9.9999999 × 10 Копируют в искажённом виде структуру ярусов, применяются для анализа других чисел
Восьмой «Нули» От ±1 × 10 до ±9.9999999 × 10 или от ±1 × 10 до ±9.9999999 × 10 Немедленно преобразовывается в обычный ноль
Девятый Обычные числа с отрицательным порядком От ±1 × 10 до ±9.9999999 × 10 Можно производить обычные вычисления

Подробное описание
«ОС-оборотни»

От ±1 × 10 до ±9.9999999 × 10
При вытаскивании «ОС-оборотня» из регистра он заносит свой «хвост» в регистр С. «Хвост» также является сверхчислом, чьи две первые цифры порядка являются последними двумя цифрами порядка «ОС-оборотня». Если «хвост» также является «ОС-оборотнем», то он также заносит свой «хвост» в регистр С. Существуют оборотни 3-го порядка — числа с порядком 444.
Пример:
В/О FПРГ Fx Fx × Fx ХПС Сх С/П FАВТ В/О 1 ВП 22 В↑ 1 ВП 50 С/П
ПХС на экране 0
ПХС на экране 0
ПХС на экране 0
ПХС на экране последний «Хвост» с тремя буквами Е.

«С-ЕГГОГ-оборотни»

От ±1 × 10 до ±9.9999999 × 10
Если «С-ЕГГОГ-оборотня» вытащить из регистра, то он прикроется содержимым регистра C, а сам переместится в регистр Y. При выполнении над ним арифметической операции — Г.ГГОГ
На основе свойств «С-ЕГГОГ-оборотня» придуман т. н. «АСО-анализ»:
В регистр 0 помещаем «С-ЕГГОГ-оборотень»
В регистр А помещаем ЕГГОГ.
ПXA ПX0 PX — содержимое регистра C — мантисса и 3-х значная степень
/-/ — содержимое P0

Меры предосторожности при работе с «С-ЕГГОГ-оборотнями»:
«Тьма» наступает:
если после «АСО-анализа» нажать ВП, FАВТ
если сразу после формирования ЕГГОГА вытащить «С-ЕГГОГ-оборотня»
если вытащить «С-ЕГГОГ-оборотня» при «ПСЧ-режиме»
если «С-ЕГГОГ-оборотень» вытаскивает из регистра C сам себя

«Длинные монстры»

Другое название — «К-числа»
От ±1 × 10 до ±9.9999999 × 10
На индикаторе при появлении «Длинного монстра» появляется следующее число:
1,2345678×10 = Где первая цифра 5 на индикаторе это третья цифра порядка, а последняя цифра 3 на индикаторе это вторая цифра порядка. А сам «Длинный монстр» записывается на 73 адрес программы, что соответствует первым двум цифрам порядка числа.

Недокументированные команды

Команды «со стрелками» в Б3-34

    На микрокалькуляторе Б3-34 существуют недокументированные команды КИП↑, КП↑ и др., которые обеспечивают косвенный доступ к регистру 0, но, в отличие от соответствующих команд КИП0, КП0 и др., не уменьшают его значения. Этот способ использования регистра 0 в некоторых случаях упрощал вычисления в программах. На микрокалькуляторах МК-61 и МК-52 такая команда не работает, так как в архитектуре МК-61/52 добавлен регистр Е, и коды недокументированных команд Б3-34 «со стрелками» совпадают с кодами соответствующих документированных команд МК-61/52 для косвенного доступа к регистру Е. Следует заметить, что обозначениям клавиш П, ИП и ↑ в Б3-34 соответствуют Х→П, П→Х и Е в МК-61 и МК-52.

Коды команд   Команды Б3-34   Команды МК-61, МК-52
7E                         Kx≠0↑                    Kx≠0E
8E                         КБП↑                     КБПЕ
9E                         Kx≥0↑                    Kx≥0E
-E                          КПП↑                    КППЕ
LE                         КП↑                       КX→ПЕ
CE                        Кх<0↑                    Kx<0E
ГE                        КИП↑                     КП→ХЕ
EE                        Kx=0↑                    Kx=0E

Некорректные операции с клавишей К

  На микрокалькуляторе Б3-34 большинство недокументированных операций с клавишей К вызывает сообщение ЕГГОГ. Это команды К3—К9, К+, К−, К×, К÷, К↑, К/−/, КВП, КСх и К десятичная запятая. Команды К1 и К2 эквивалентны операции КНОП.
   На МК-61 и МК-52 к сообщению ЕГГОГ приводят только команды К−, К×, К÷. Команды К1 и К2 также эквивалентны операции КНОП. Коды остальных команд документированы и используются для преобразования временных и угловых мер, определения модуля и знака числа, целой и дробной частей числа, большего из двух чисел, логических операций и генерации случайного числа.
   Некорректной операцией на МК-61 и МК-52 является также перевод минут в градусы и , если величина минут или секунд более или равна 60.
   Сообщение ЕГГОГ, полученное с помощью некорректных операций с клавишей К, не является «сверхчислом» первого «яруса» и не может быть сохранено в регистре памяти, но может быть использовано для вывода на индикатор символов 16-ричных цифр, например:
   1 К− ВП ВП ↑.
   Полученную букву Е можно сохранять в регистрах памяти и извлекать оттуда, а с помощью регистров 0—3 также и преобразовывать в символы других 16-ричных цифр:
    П0 КИП0 ИП0 КНОП КИП0 ИП0 КНОП КИП0 ИП0 КНОП КИП0 ИП0 КНОП КИП0 ИП0 КНОП и т. д.
    Подобные приёмы использовались для формирования видеосообщений, например, в игровых программах.  
   Получение видеосообщения, начинающегося с цифры F может нарушить нормальную работу микрокалькулятора. Избежать этого можно, сразу же «изгнав» его командой ↑, подаваемой не менее четырёх раз, не пытаясь проводить какие-либо другие операции.

Искусственный ввод кодов команд

   В одном шаге программной памяти микрокалькулятора могут содержаться две шестнадцатеричные цифры, то есть теоретически может существовать 256 различных кодов команд. Из них в руководстве пользователя МК-61/52 документированы 214. Существует искусственный приём, позволяющий ввести 12 из 42 недокументированных кодов. Для этого вводится одна из команд переходов, например БП и за ней две 16-ричные цифры, воспринимаемые калькулятором как адрес перехода. После этого команда перехода затирается командой-«пустышкой» КНОП, а последующий шаг при выполнении программы будет воспринят калькулятором уже не как адрес перехода, а как команда. Отметим, что некоторые из этих кодов можно ввести также путём недокументированных операций с клавишей К, описанных в предыдущем подразделе.

Коды команд Действия команд                                                         Ввод через клавишу К
27                    Вызывает сообщение ЕГГОГ                                                              K−
28                    Вызывает сообщение ЕГГОГ                                                              К×
29                    Вызывает сообщение ЕГГОГ                                                              K÷
2L                    Вызывает сообщение ЕГГОГ                                                              Нет
2С                    Вызывает сообщение ЕГГОГ                                                              Нет
2Г                    Вызывает сообщение ЕГГОГ                                                              Нет
2E                    Вызывает сообщение ЕГГОГ                                                              Нет
3С                   Вызывает сообщение ЕГГОГ                                                               Нет
3Г                   Ничего не делает
                       По другим сведениям — копирует содержимое регистра Х в Х1    Нет
          Перемещает содержимое регистра Х в Х1, копирует содержимое регистра Y в Х. 
3Е                   Содержимое регистров Y, Z и Т сохраняется.                                   Нет
55                   Ничего не делает                                                                                   К1
56                   Ничего не делает                                                                                   К2

    Коды 55 и 56 использовались во входных языках малосерийных аналогов МК-52.
   Данный приём неприменим для ввода остальных 30 недокументированных кодов команд, содержащих 16-ричную цифру F, поскольку на клавиатуре микрокалькулятора нет клавиши для ввода цифры F. Некоторые способы ввода таких кодов будут рассмотрены в следующем подразделе.

Ввод кодов команд, содержащих цифру F

    В микрокалькуляторе МК-52 существует возможность формирования любого из 256 кодов команд по любому из адресов программной памяти. Для этого используется следующая особенность записи программ в ППЗУ. При нормальном процессе записи программы необходимо сначала стереть соответствующий участок памяти ППЗУ. Если же этого не сделать, то происходит побитовое логическое сложение кодов команд из ОЗУ с кодами, имевшимися в ППЗУ ранее. Так, если в ППЗУ по некоторому адресу записана команда БП, а по соответствующему адресу в ОЗУ находится команда В↑, то результатом логического сложения будет команда с кодом 5F. Действия команд с кодами, содержащими цифру F, приведены в следующей таблице:

Коды команд           Действия  команд
0F                             Документированная команда FBx
1F, 2F, 3F                 Ничего не делают
4F                             Равнозначна команде X→П0
5F              Приводит к зависанию микрокалькулятора. Индикатор гаснет, работоспособность восстанавливается после отключения и включения питания.
6F                            Равнозначна команде П→Х0
7F                             Равнозначна команде Кх≠00
8F                            Равнозначна команде КБП0
9F                            Равнозначна команде Кх≥00
-F                            Равнозначна команде КПП0
LF                           Равнозначна команде КХ→П0
CF                           Равнозначна команде Кх<00
ГF                            Равнозначна команде КП→Х0
EF                            Равнозначна команде Кх=00
F0, F1, ... FF            Ничего не делают

   К сожалению, недокументированные команды 7F, 8F, … EF, осуществляющие косвенный доступ к регистру 0, уменьшают его содержимое, так же как и их документированные аналоги с кодами 70, 80, … Е0 и не могут служить заменой командам «со стрелками» в Б3-34.
   В Б3-34 и МК-61, не имеющих ППЗУ, также существует возможность ввода некоторых команд с кодами, содержащими цифру F, но лишь по нескольким фиксированным адресам. Один способ состоит в использовании команд В/0 КППN в режиме ручных вычислений, N — любой из регистров. При этом микрокалькулятор переходит в режим програмирования и вставляет код FN по адресу 30+N. Заметим, что при использовании регистров 0—6 результат зависит от их содержимого Другой способ использует воздействие некорректной операции «ВП десятичная запятая» на «сверхчисла» первого «яруса». Для этого сначала создаётся «сверхчисло» двукратным применением команды ВП с суммой порядков более 99, а затем, после появления сигнала ЕГГОГ, нажатием клавиш «ВП десятичная запятая 0». Это также переводит микрокалькулятор в режим программирования, и в данном примере по адресу 51 будет записана команда F1. Второй знак и адреса, и команды определяется первым знаком порядка в первой команде ВП 
    Коды 55 и 56 использовались во входных языках малосерийных аналогов МК-52.
   Данный приём неприменим для ввода остальных 30 недокументированных кодов команд, содержащих 16-ричную цифру F, поскольку на клавиатуре микрокалькулятора нет клавиши для ввода цифры F. Некоторые способы ввода таких кодов будут рассмотрены в следующем подразделе.

Недокументированное применение десятичной запятой в программе

   Команда «десятичная запятая», использованная в программе, заменяет значение в регистре Х на то, которое было в нём после последней из команд 0, 1, … 9, В↑, П→Х0, П→Х1, … П→Х9, П→ХА, … П→ХЕ. 

Недокументированные способы диагностики ошибок

   При возникновении сигнала ЕГГОГ при счёте по программе существует два недокументированных способа определить, в результате какой операции произошёл останов:
   Нажатие клавиши ↑ в Б3-34. Если на индикаторе по-прежнему ЕГГОГ, то произошло переполнение, а если число — некорректная операция, «виновником» которой является это число.
   Нажатие клавиши ВП. Возможные показания индикатора и соответствующие им ошибки: 

  • ЕГГОГ 00» — переполнение
  • Г.ГГОГ 00» — деление на нуль, вычисление логарифма от нуля, степенной функции 0, некорректная операция с клавишей К.
  • ЕГ.ГОГ 00» — вычисление tg 90°.
  • Е.ГГОГ 00» — вычисление арксинуса или арккосинуса от числа, большего 1.
  • ЕГГОГ 00» — положительный аргумент показательной функции больше допустимого
  • −ЕГГОГ 00» — отрицательный аргумент показательной функции по модулю больше допустимого, или извлечение квадратного корня из отрицательного числа.

   Второй способ не работает после первого, и наоборот. Чтобы применить обе диагностики, необходимо дважды запустить программу с одинаковыми исходными данными.

Команда В/0 вне подпрограммы

    Команда В/0, предназначенная для завершения подпрограмм, при использовании в основной программе, как правило, осуществляет переход на адрес 01. Этим иногда пользуются для сокращения программы, заменяя две команды БП 01 одной В/0. Особенно часто эта особенность используется при нестандартном использовании адресного пространства программы. Однако иногда использование этой особенности приводит к неправильному результату.
    Причина этой особенности в том, что адреса, с которых вызываются подпрограммы, записываются в пятирегистровый стек возврата, а по команде В/0 извлекаются из него и происходит возврат на адрес, на единицу больший. Если в стек возврата ничего не было записано, в нём хранятся нули и по команде В/0 происходит переход на адрес 01. То же самое произойдёт, если в стек возврата заносилось не более четырёх адресов при вызовах подпрограмм и все они были извлечены при возвратах — следующий извлекаемый адрес будет нулём.
    Однако если в стек возврата занесено пять адресов, при извлечении первого из них в последнем регистре формируется «адрес-диверсант», обе цифры которого совпадают с последней цифрой адреса, находившегося там ранее. По мере извлечения остальных адресов из стека возврата, «адрес-диверсант» заполняет все его регистры, и затем, в случае использования команды В/0 вне подпрограммы, переход будет осуществлён неправильно. 
    Очистить стек возврата можно с помощью ЗГГОГа с нулевой мантиссой: Сх В↑ ÷ ВП Fх Сх ↔ Сх

Косвенное обращение к регистру, содержащему число вне допустимого диапазона

    Если в каком-либо из регистров 7—Е находится число, по модулю меньшее единицы, то при косвенном обращении к нему формируется адрес перехода, определяемый мантиссой и последней цифрой порядка

Последняя цифра порядка  Адрес перехода
1                                             М7М8
2                                             М7М8
3                                             М7М8
4                                             М6М7
5                                             М5М6
6                                             М4М5
7                                             М2М3
8                                             М2М3
9                                             М1М2
0                                             0М1

ПСЧ-режим

     «Псевдосчётный режим» — методика формирования на экране микрокалькулятора произвольных буквенно-цифровых комбинаций, т. н. «слов». Основан на переводе ПМК в особый режим работы, в котором происходит считывание на индикатор записанных в программной памяти кодов. Описан в заметке «Новости еггогологии» «Техники — молодежи» № 6 за 1987 год. В этой статье первооткрывателями ПСЧ-режима названы С. Банников, И. Емельянов, Б. Мурадов. Также приведены альтернативные названия режима — «ненормальный», «режим сбора».
     Перед вводом ПМК в ПСЧ-режим в память записывается короткая программа, коды команд которой начинаются со всех возможных символов.
     Непосредственно вход в ПСЧ-режим осуществляется выдачей команд 6 F10 K- ВП . 0 В/О В/О БП В/О. Данная процедура по сути представляет собой способ получения команды «пусто-пусто». Также существует возможность входа в ПСЧ-режим из области «длинных монстров».
   В ПСЧ-режиме меняются значения клавиш. В/О и С/П служат теперь для переключения из автономного режима в программный и наоборот. Команды FПРГ и FАВТ, а также любое «сверхчисло» возвращают ПМК в нормальный режим работы. Клавиши ШГ дают возможность перемещаться вдоль записанной в память программы. Клавиши БП и ПП переносят точку просмотра и считывания на 10 адресов вглубь программы, а также позволяют оперировать с числом на индикаторе непосредственно кодами команд.
    Клавиша ВП считывает в первый регистр индикатора символ из текущего адреса программной памяти. Формирование «слов» начинается с заготовки вида 11111111, из соответствующей ячейки программной памяти считывается нужный символ, а затем с помощью команд ВП /-/ 1 ПА КИПА ИПА от заготовки отбрасывается последний регистр, а на место первого записывается ноль, который с помощью команды ВП может быть заменен следующим символом.
    Метод позволяет вводить в буквенно-цифровые комбинации и пробел. Пробел считывается из любого адреса «темной зоны». Однако из-за особенностей работы ПМК после появления «пустышки» при этом необходимы дополнительные действия.
Недокументированные особенности команды ВП
   Команда ВП превращает 0 в 1. Это используется в программе вычисления факториала для её сокращения, заменяя несколько команд одной командой ВП.

Ошибки в микрокалькуляторах

Кроме недокументированных возможностей, некоторые микрокалькуляторы содержали ошибки.

Ошибки в Б3-21 некоторых выпусков

    В первых выпусках микрокалькулятора Б3-21 возникала ошибка при сложении числа, содержащего семь девяток в мантиссе и цифру более 4 в восьмом разряде мантиссы, с большим по порядку числом; например, при сложении 9,9999999 и 10 получалось 120.
    Также в некоторых Б3-21 при вычислении сложных операций могло исказиться содержимое одного из регистров кольцевого стека.
    Некоторые Б3-21 неправильно выполняли оператор вызова подпрограммы ПП, если он находился по одному из адресов 55, 65, 70, 80, 91 или 92. Вместо перехода к подпрограмме в них выполнялся оператор, код которого равен адресу подпрограммы. 

Ошибки в Б3-34 некоторых выпусков

    В некоторых микрокалькуляторах Б3-34 операция возведения в степень Fx выполнялась с ошибкой, если предыдущая операция была двухместной и в её результате получилось число, имеющее в восьмом разряде мантиссы цифру 5 или 7. Этой ошибки можно избежать, если перед выполнением операции Fx нажать дополнительно клавиши F1/x F1/x . Другие «взаимоисключающие» операции для этой цели менее пригодны, так как могут привести к переполнению.
    В ранних выпусках микрокалькуляторов нельзя было заканчивать подпрограмму командами одноместных операций Fsin, Flg, F√ и др., а также производить смену знака результата вычислений клавишей /−/ 

Ошибки в МК-61 и МК-52

    Операция Kmax в МК-61 и МК-52 считает нуль самым большим числом. Эта ошибка использовалась в некоторых программах 
     При некоторых операциях, например, определении дробной части отрицательного числа, возникает «отрицательный нуль», который при условных переходах ведёт себя как отрицательное число.
 
Ошибки и нерациональные решения в блоках расширения памяти БРП-3 и БРП-4

    В блоке БРП-3, программе 16 использована неправильная формула x = eln x вместо x = e, соответственно неправильно составлена и программа. Там же для определения аргумента комплексного числа a + bi используется формула ϕ = arctg без учёта как знаков a и b, так и того, что действительная часть может быть нулём. В результате при a < 0 происходит ошибка в определении аргумента на 180°, а при a = 0 — останов деления на нуль.
   В блоке БРП-4 в «лунолётной» игровой программе «Космическая посадка» физическая модель совершенно ошибочна, что может приводить к бессмысленным результатам. Например, при свободном падении космического аппарата на Луну с большой высоты глубина кратера может составлять менее 8 мм, хотя скорость в момент соприкосновения с лунной поверхностью превышает 3000 м/с. В том же блоке микрокалькулятор «нарушает правила» в игровых программах «Жизнь» и «Магараджа». Целый ряд программ составлен нерационально и поддаётся значительным сокращениям. Например, программа для отыскания минимальной поверхности Smin или минимальной длины сварных швов Lmin цилиндрической банки заданного объёма V может быть сокращена на 15 шагов при использовании более простых формул.

Поделиться

 

Сейчас на сайте 0 пользователей и 0 гостей.

Контакты

222397, Минская обл.
г. Мядель, ул. 17 Сентября, 6
Тел. (017-97) 40-3-38

гимназия

 

Робототехника в гимназии

Akavita CY-PR.com

Туристический портал Нарочанского края: туризм, отдых, услуги, здравницы, новости, информация  Национальный правовой Интернет-портал Республики Беларусь