Этот сайт — моя персональная записная книжка. Интересны мне, по большей части, программирование, история и события из моей жизни.

Хаки в «Электронике МК-61»

Очень интересно разбирать хаки, которые разные люди изобретали, чтобы уместить свои программы в 105 байт памяти калькулятора «Электроники МК-61». Их там действительно просто нереальное количество, они разной сложности, но один из них показателен в своей простоте.

В коде программы «Рембо-III» есть несколько похожих мест (я буду приводить код на языке «МК-Про» для наглядности):

fn lost() {
  halt("ЕГГОГ")
}

fn front_stop() {
    …
    if cells[7] < 0 {
      lost()
    }
    …
}

Если некое проверяемое значение меньше нуля (в двух остальных местах — меньше или равно нулю), то пишем на экране «ЕГГОГ» — слово «error», это одно из немногих слов, которое калькулятор способен отобразить, так как у него есть специальная логика для отображения некоторых букв, поэтому его часто используют для обозначения проигрыша.

Мой оптимизатор умеет заменять halt("ЕГГОГ") одним опкодом, потому что это «встроенное» в калькулятор слово, но тут он пишет относительно много кода — проверка условия и вызов, тогда как проверку и вывод «еррора» можно объединить в один опкод — F √ или F lg в зависимости от условия.

Если число строго меньше нуля, квадратный корень из него даст ту же ошибку, как и логарифм от числа, которое меньше или равно нулю.

В «Рембо-III» это сокращает программу на четыре байта. Это существенно, когда у доступно так мало памяти.