НЕДОКУМЕНТИРОВАННЫЕ ОСОБЕННОСТИ КАЛЬКУЛЯТОРОВ
("ЕГГОГология")
Термин "ЕГГОГология" впервые появился на страницах журнала "Техника Молодежи" в середине 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 - 299 | 3ГГОГ'и | 3ГГОГ | клавиша Cx |
300 - 399 | Вредители | .X XX XX XX | (FПРГ)(ШГвлево)(Cx)(С/П)(FАВТ) |
400 - 409 | Е-плюс хвосты | XX.XXXXXXE XX | Cx |
410 - 419 | ЕГГОГ'и - мутанты | ЕГГОГ | клавиша Cx |
420 - 429 | 3ГГОГ'и - мутанты | 3ГГОГ | клавиша Cx |
430 - 439 | Вредители | .X XX XX XX | (FПРГ)(ШГвлево)(Cx)(С/П)(FАВТ) |
440 - 440 | ЕЕ-плюс мутанты | -X.XXXXXЕE XX | Cx |
441 - 441 | ЕГГОГ'и - мутанты | ЕГГОГ | клавиша Cx |
442 - 442 | 3ГГОГ'и - мутанты | 3ГГОГ | клавиша Cx |
443 - 443 | Вредители | .X XX XX XX | (FПРГ)(ШГвлево)(Cx)(С/П)(FАВТ) |
444 - 444 | ЕЕЕ-числа мутанты | X.XXXXEЕE XX | Cx |
445 - 446 | Тьма | Не имеет | Невозможно |
447 - 447 | Оборотни | XXXXXХХХХX X | FАВТ Cx Cx |
448 - 448 | Нуль | 0. | Сх |
449 - 449 | ЕЕ-минус мутанты | -X.XXXXXЕE-XX | Cx |
450 - 469 | Тьма | Не имеет | Невозможно |
470 - 479 | Оборотни | XXXXXХХХХX X | FАВТ Cx Cx |
480 - 490 | Нуль | 0. | Сх |
491 - 499 | Е-минус хвосты | XX.XXXXXXE-XX | Cx |
500 - 599 | Тьма | Не имеет | Невозможно |
600 - 699 | Невидимки | Не выходят | Не требуется |
700 - 799 | Оборотни | XXXXXХХХХX X | FАВТ Cx Cx |
800 - 899 | Нуль | 0. | Сх |
900 - 999 | Отрицательные порядки | -X.XXXXXXX-XX | клавиша Cx |
Как видно, числа с отрицательным порядком - это диапазон степеней от 900 до 999 (первая 9 и означает фактически "минус" в представлении ПМК). Зато другие диапазоны таят в себе поистине сказочных обитателей, о которых необходимо рассказать. Многие из них, несмотря на свой ужасный вид, на самом деле являются числами, их можно записывать в регистры, извлекать оттуда и проводить с ними вычисления.
Стоит заметить, что порядки от 400 до 500 повторяют весь диапазон "чудовищ" в сжатом виде, а порядки от 440 до 450 тоже в еще более сжатом виде повторяют весь диапазон. Внутренний мир ПМК таит в себе не меньше, чем внутренность Земли! Итак, рассмотрим жителей подробнее.
- ЕГГОГ'и
На самом деле, это - обычные числа в диапазоне степеней десятки от 100 до 199. В ручном режиме счета их получение вызывает сообщение ЕГГОГ, но в режиме счета по программе с ними выполняются любые действия и сообщения не выводятся. В случае чего, всегда можно разделить ЕГГОГ на 1099 (например) и узнать истинное значение "замаскированного" числа.
- ЗГГОГ'и
Это - тоже числа, в диапазоне степеней десятки от 200 до 299. Но, в отличие от "эрроров", их нельзя реально использовать, потому что даже в режиме счета по программе из появление вызывает аварийный останов. Но если 3ГГОГ разделить на 1099, получится ЕГГОГ, а разделив и его на 1099, можно получить значение мантиссы и вычислить значение порядка исходного "Згогга". Правда, этот "зверь" имеет одно коварное свойство: он засоряет стек возврата, после его появления нарушается работа подпрограмм. Стек следует очистить (см. далее).
- Мутанты
Мутанты по внешнему виду полностью соответствуют своему прототипу, но практического применения не имеют.
- Вредители
Если при вычислениях получаются числа в диапазоне существования Вредителей, последствия уже не так безобидны. ПМК выводит на индикатор участок памяти команд, но с точкой и с испорченным значением текущей команды. Если нажать FАВТ (что кажется естественным), ПМК бросится считать по программе, но зациклится на испорченной команде и его придется выключить с потерей всех данных...
Но если нажать указанную в таблице последовательность клавиш, потеряются только два шага программной памяти, их можно откорректировать и работать дальше.
- Разные Е-числа
Эти "числа" странного вида, как и их мутантные модификации, не представляют опасности, но и не имеют никакой ценности.
- Тьма
Это - наиболее страшное создание числового океана ПМК. Название объясняется тем, что появление этого чудовища вызывает полное гашение индикатора. На современном языке это - зависание компьютера (нечто похожее, во всяком случае). Тьму удалить невозможно, только выключить и снова включить ПМК. Разумеется, с потерей всех данных...
- Невидимки
Невидимки никогда сами на индикатор не выходят, поэтому внешность их никто и не знает. Вместо себя они вызывают на индикатор содержимое регистра С. Особой опасности они не представляют, но если в регистре С окажется не простое число, а какое-либо чудовище, то эффект может быть очень неприятным...
- Оборотни
Оборотни формально тоже являются числами, но использовать их невозможно, да и удалить с индикатора не так просто. Бояться их не нужно, но лучше и не связываться...
- Нуль
Внешне, да и по своим свойствам, этот "зверь" ничем не отличается от обычного нуля. Поскольку и находится он как бы "под" числами с отрицательным порядком, его вполне можно считать областью машинного нуля, как, собственно, и должно быть.
Помимо числового океана ПМК хранят и другие секреты. Некоторые из них забавны, некоторые полезны. Например, есть "негласная" возможность очистить стек возврата последовательностью нажимаемых клавиш: "Сх ↑ ÷ ВП Fx2 Cx <-> Cx"
Необходимость очистки стека возникает не только при появлении ЗГГОГа, но и при любом нарушении в работе подпрограмм. Опять же, обычное использование команды ПП предполагает четкую парность записи в стек и извлечения из него адреса. Но есть и одна полезная негласная возможность у команды В/О - при ее выполнении вне подпрограммы она передает управление на адрес 01. Собственно, это и происходит потому, что пустой стек возврата заполнен нулями. И если в программе используется этот трюк, то чистота стека должна быть обязательной.
Еще одной забавной (хотя и довольно бесполезной) особенностью ПМК является т.н. "ПСЧ-режим работы" (псевдо-счетный). Если выполнить последовательность 15 команд "1 ВП 6 ВП 99 ВП ПД ИПД ВП . 0 В/О В/О БП В/О", не обращая внимание на показания индикатора, то калькулятор перейдет в ПСЧ-режим (выйти из режима можно простым нажатием F АВТ).
В этом режиме можно работать с ПМК как с обычным калькулятором, но кроме этого, можно еще работать и кодами. Каждая команда может быть введена последовательностью "БП код команды". Например, "БП 09" выведет на индикатор цифру 9. Команда "БП 22" возведет ее в квадрат (на индикаторе будет 81). Команда "БП 4 /-/" запишет это число в регистр В. Ну и т.д. При этом каждое нажатие клавиши БП может выводить на индикатор абракадабру, но это не имеет значения.
Еще один "житель недров ПМК" - это Пустышка. Ее получить легко - "Сх ÷ ВП . ↑". На индикаторе - просто одинокая точка. Если нажать Сх и несколько раз стрелку вверх, то ничего страшного не будет, Пустышка уйдет без следа. Но если ее саму загнать в стек, или в регистр памяти, то она превратится в мину замедленного действия. Вы будете спокойно работать с ПМК, но в какой-то момент вместо результата операции на экране окажется Пустышка. А в тяжелых случаях Пустышка может превратиться в Тьму...
Про тайны ПМК можно говорить много, я выбрал наиболее интересные и важные моменты. Можно еще рассказать про формирование буквенных сообщений на БЗ-34, про АСО-анализ и т.д. Но тогда статья превратится в диссертацию... Кстати, некоторые особенности работы МК-85 я вынес на отдельную страницу. Масштаб не сравнить, но все же...
Конечно, все это сейчас выглядит как шумерские летописи. Но с другой стороны, и древние летописи могут оказаться полезными... Могу только сказать, что исследования ПМК были занятием очень интересным и полезным. Именно увлечение программированием этих машинок, исследованиями их возможностей, сыграло очень большую роль в моем приходе в программирование настоящее. Те навыки и сейчас помогают при отладке программ...