НЕДОКУМЕНТИРОВАННЫЕ ОСОБЕННОСТИ КАЛЬКУЛЯТОРОВ

("ЕГГОГология")

Термин "ЕГГОГология" впервые появился на страницах журнала "Техника Молодежи" в середине 80-х годов прошлого века. С тех пор он используется всеми любителями ПМК в качестве названия науки, изучающей их недокументированные возможности и особенности. Название объясняется сообщением "ЕГГОГ" (от англ. "error" - "ошибка"), которое появляется на индикаторе ПМК в случае возникновения ошибки, некорректной операции и т.д.

Скрытые особенности имеют все устройства, но в случае ПМК этих особенностей оказалось так много и они столь серьезны (а часто очень полезны), что многие программисты этих ПМК всерьез занимались подобными исследованиями. В этом разделе представлено краткое обобщение достижений "эррорологии" на основе литературных данных и собственного опыта автора (я тоже много занимался этим предметом). Речь пойдет о ПМК ряда "БЗ-34".


Практически все пользователи ПМК знают о замкнутости программной памяти, благодаря чему ячейка с адресом 98 соответствует ячейке с номером 00. Правда, память "продолжается" только для нескольких ячеек, но этого достаточно, чтобы сэкономить несколько байт памяти. Другая важная особенность программной памяти состоит в том, что для адресации ячеек можно использовать не только десятичные, но и шестнадцатеричные числа. Это позволяет совмещать в одной ячейке коды команд и адреса переходов (т.н. "адресно-кодовая связка").

Весьма распространенным приемом также было использование регистра памяти R0 в виде RE. Как известно, ряд "БЗ-34" имел 14 регистров памяти: от 0 до 9, а также A, B, C и D. Так вот, можно было использовать и регистр E, который на самом деле был физически эквивалентным регистру 0. Но с одной разницей: если косвенные операции с регистром 0 уменьшали его значение на 1, то те же операции с регистром E значение в этом регистре не меняли. Это позволяло существенно увеличить эффективность программирования и экономить дефицитные ячейки программной памяти.

Разумеется, поскольку эта особенность не была оговорена в Руководстве, то и разработчик за нее не отвечал. И, когда появились ПМК следующей серии ("MK-52" "MK-61"), связь между регистрами была разорвана. Новые модели имели официальный 15-й регистр E, но при этом был приведен в негодность весь огромный наработанный годами и сотнями программистов банк программ. Я совсем не уверен, что лишний регистр памяти стоил этой жертвы...


Еще одна особенность ПМК была в свое время замечена мною, но опубликовать свои наблюдения в прессе я тогда не успел. Возможно, что это открытие сделали и другие пользователи ПМК, но я не читал про это в журналах и напишу только о том, что заметил я и чем пользовался сам.

Все, наверно, замечали, что во время вычислений по программе на индикаторе ПМК мелькают какие-то знаки. На первый взгляд они кажутся случайными, но мне удалось не только найти там закономерности, но и с успехом использовать эти наблюдения для отладки программ, не применяя точки прерывания.

Ниже в таблице приведены выполняемые ПМК команды и соответствующие им показания индикатора.

    Условные обозначения:
  • ХХ - код операции;
  • Z есть 0, если число в регистре Х положительно, или 9, если отрицательно;
  • Y - число на 1 меньше числа цифр в целой части числа в регистре Х;
  • vvvvvvvv - текущее содержимое регистра Х.
Выполняемые операцииПоказания индикатора
L0, L1, L2, L3 (нет); КБП; КПП 0.70000000XX.E
L0, L1, L2, L3 (да) 0.00000000XX.E
X>=0, X<0, X=0 (нет); БП; ПП Z.vvvvvvvvXX.E
X>=0, X<0, X<>0 (да) 9.vvvvvvvvXX.E
КX>=0, КX<0, КX<>0 (да) 9.vvvvvvvvXX.E
X=0, КX=0 (да) 6.00000000XX.E
X<>0 (нет) 3.00000000XX.E
КX>=0, КX<0, KX=0, КX<>0 (нет) 0.70000000XX.E
ИП, КИП, ввод, Вх, ВП, ., /-/, Сх, С/П  .vvvvvvvvXX.E
<->, кольцо, π, +, -, *, / Z.vvvvvvvvXX.E
П, КП Y.ZvvvvvvvXX.E
В/О 0.YZvvvvvvXX.E

Эта информация позволяет по содержимому индикатора отслеживать ход выполнения программы, подсчитывать число выполняемых циклов и видеть моменты зацикливания, и даже видеть содержимое регистра индикации (при некоторой тренировке).


Но самая интересная (на мой взгляд) часть эррорологии изучает "числовой океан" ПМК. Официально ПМК работают с числами от 1*10-99 до 9.9999999*1099. Однако, на самом деле многие и многие пользователи ПМК замечали другое. А именно, что показатель степени десятки находится в диапазоне от 000 до 999. Обобщая опыт других и результаты своих собственных исследований, я составил 26-ти этажную таблицу, характеризующую весь "океан" чисел ПМК (видимость знака "минус" зависит от знака числа в регистре Х).


ГлубинаОбитателиВнешний видУдаление
000 - 099Положительные порядки-X.XXXXXXX XX клавиша Cx
100 - 199ЕГГОГ'и ЕГГОГ клавиша Cx
200 - 2993ГГОГ'и 3ГГОГ клавиша Cx
300 - 399Вредители  .X XX XX XX (FПРГ)(ШГвлево)(Cx)(С/П)(FАВТ)
400 - 409Е-плюс хвостыXX.XXXXXXE XXCx
410 - 419ЕГГОГ'и - мутанты ЕГГОГ клавиша Cx
420 - 4293ГГОГ'и - мутанты 3ГГОГ клавиша Cx
430 - 439Вредители  .X XX XX XX (FПРГ)(ШГвлево)(Cx)(С/П)(FАВТ)
440 - 440ЕЕ-плюс мутанты-X.XXXXXЕE XXCx
441 - 441ЕГГОГ'и - мутанты ЕГГОГ клавиша Cx
442 - 4423ГГОГ'и - мутанты 3ГГОГ клавиша Cx
443 - 443Вредители  .X XX XX XX (FПРГ)(ШГвлево)(Cx)(С/П)(FАВТ)
444 - 444ЕЕЕ-числа мутанты X.XXXXEЕE XXCx
445 - 446ТьмаНе имеетНевозможно
447 - 447ОборотниXXXXXХХХХX XFАВТ Cx Cx
448 - 448Нуль 0.Сх
449 - 449ЕЕ-минус мутанты-X.XXXXXЕE-XXCx
450 - 469ТьмаНе имеетНевозможно
470 - 479ОборотниXXXXXХХХХX XFАВТ Cx Cx
480 - 490Нуль 0.Сх
491 - 499Е-минус хвостыXX.XXXXXXE-XXCx
500 - 599ТьмаНе имеетНевозможно
600 - 699НевидимкиНе выходятНе требуется
700 - 799ОборотниXXXXXХХХХX XFАВТ Cx Cx
800 - 899Нуль 0.Сх
900 - 999Отрицательные порядки-X.XXXXXXX-XX клавиша Cx

Как видно, числа с отрицательным порядком - это диапазон степеней от 900 до 999 (первая 9 и означает фактически "минус" в представлении ПМК). Зато другие диапазоны таят в себе поистине сказочных обитателей, о которых необходимо рассказать. Многие из них, несмотря на свой ужасный вид, на самом деле являются числами, их можно записывать в регистры, извлекать оттуда и проводить с ними вычисления.

Стоит заметить, что порядки от 400 до 500 повторяют весь диапазон "чудовищ" в сжатом виде, а порядки от 440 до 450 тоже в еще более сжатом виде повторяют весь диапазон. Внутренний мир ПМК таит в себе не меньше, чем внутренность Земли! Итак, рассмотрим жителей подробнее.


  1. ЕГГОГ'и

    На самом деле, это - обычные числа в диапазоне степеней десятки от 100 до 199. В ручном режиме счета их получение вызывает сообщение ЕГГОГ, но в режиме счета по программе с ними выполняются любые действия и сообщения не выводятся. В случае чего, всегда можно разделить ЕГГОГ на 1099 (например) и узнать истинное значение "замаскированного" числа.

  2. ЗГГОГ'и

    Это - тоже числа, в диапазоне степеней десятки от 200 до 299. Но, в отличие от "эрроров", их нельзя реально использовать, потому что даже в режиме счета по программе из появление вызывает аварийный останов. Но если 3ГГОГ разделить на 1099, получится ЕГГОГ, а разделив и его на 1099, можно получить значение мантиссы и вычислить значение порядка исходного "Згогга". Правда, этот "зверь" имеет одно коварное свойство: он засоряет стек возврата, после его появления нарушается работа подпрограмм. Стек следует очистить (см. далее).

  3. Мутанты

    Мутанты по внешнему виду полностью соответствуют своему прототипу, но практического применения не имеют.

  4. Вредители

    Если при вычислениях получаются числа в диапазоне существования Вредителей, последствия уже не так безобидны. ПМК выводит на индикатор участок памяти команд, но с точкой и с испорченным значением текущей команды. Если нажать FАВТ (что кажется естественным), ПМК бросится считать по программе, но зациклится на испорченной команде и его придется выключить с потерей всех данных...

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

  5. Разные Е-числа

    Эти "числа" странного вида, как и их мутантные модификации, не представляют опасности, но и не имеют никакой ценности.

  6. Тьма

    Это - наиболее страшное создание числового океана ПМК. Название объясняется тем, что появление этого чудовища вызывает полное гашение индикатора. На современном языке это - зависание компьютера (нечто похожее, во всяком случае). Тьму удалить невозможно, только выключить и снова включить ПМК. Разумеется, с потерей всех данных...

  7. Невидимки

    Невидимки никогда сами на индикатор не выходят, поэтому внешность их никто и не знает. Вместо себя они вызывают на индикатор содержимое регистра С. Особой опасности они не представляют, но если в регистре С окажется не простое число, а какое-либо чудовище, то эффект может быть очень неприятным...

  8. Оборотни

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

  9. Нуль

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

Помимо числового океана ПМК хранят и другие секреты. Некоторые из них забавны, некоторые полезны. Например, есть "негласная" возможность очистить стек возврата последовательностью нажимаемых клавиш: "Сх ↑ ÷ ВП Fx2 Cx <-> Cx"

Необходимость очистки стека возникает не только при появлении ЗГГОГа, но и при любом нарушении в работе подпрограмм. Опять же, обычное использование команды ПП предполагает четкую парность записи в стек и извлечения из него адреса. Но есть и одна полезная негласная возможность у команды В/О - при ее выполнении вне подпрограммы она передает управление на адрес 01. Собственно, это и происходит потому, что пустой стек возврата заполнен нулями. И если в программе используется этот трюк, то чистота стека должна быть обязательной.


Еще одной забавной (хотя и довольно бесполезной) особенностью ПМК является т.н. "ПСЧ-режим работы" (псевдо-счетный). Если выполнить последовательность 15 команд "1 ВП 6 ВП 99 ВП ПД ИПД ВП . 0 В/О В/О БП В/О", не обращая внимание на показания индикатора, то калькулятор перейдет в ПСЧ-режим (выйти из режима можно простым нажатием F АВТ).

В этом режиме можно работать с ПМК как с обычным калькулятором, но кроме этого, можно еще работать и кодами. Каждая команда может быть введена последовательностью "БП код команды". Например, "БП 09" выведет на индикатор цифру 9. Команда "БП 22" возведет ее в квадрат (на индикаторе будет 81). Команда "БП 4 /-/" запишет это число в регистр В. Ну и т.д. При этом каждое нажатие клавиши БП может выводить на индикатор абракадабру, но это не имеет значения.


Еще один "житель недров ПМК" - это Пустышка. Ее получить легко - "Сх ÷ ВП . ↑". На индикаторе - просто одинокая точка. Если нажать Сх и несколько раз стрелку вверх, то ничего страшного не будет, Пустышка уйдет без следа. Но если ее саму загнать в стек, или в регистр памяти, то она превратится в мину замедленного действия. Вы будете спокойно работать с ПМК, но в какой-то момент вместо результата операции на экране окажется Пустышка. А в тяжелых случаях Пустышка может превратиться в Тьму...


Про тайны ПМК можно говорить много, я выбрал наиболее интересные и важные моменты. Можно еще рассказать про формирование буквенных сообщений на БЗ-34, про АСО-анализ и т.д. Но тогда статья превратится в диссертацию...

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




Rambler's Top100
nick ErichWare