[3. Три числа] [Оглавление] [5. Указующий перст]
МК с тобой на века
В 1985 году я впервые прочел, причем сразу в двух журналах - "Техника Молодежи" и "Наука и Жизнь", о программируемых калькуляторах и, в частности, о Б3-34 - чуде советской инженерной мысли, как оказалось в последствии - весьма неплохо повторяющем одно из детищ инженеров Hewlett Packard с опозданием всего на 10 лет. Я читал в этих журналах о том, какие замечательные программы можно написать и заставить работать на этих маленьких машинках, и мне страстно захотелось испробовать это самому.
И вот в самом начале 1986 года на день рождения моему папе, которому тогда стукнуло 50 лет, сослуживцы подарили это чудо техники. Оно хранится у меня до сих про и при этом прекрасно работает. Модель калькулятора была поновее, чем Б3-34, и называлась МК-61. Стоило чудо 85 рублей - немалые денежки по тем временам. Я тут же начал писать первые программы - сначала немудреные, всего в 10-20 операций, потом все сложнее и сложнее.
Работала эта машина, прямо скажем, не спеша - несколько операций в секунду, зато поддерживала все основные функции программирования - условные и безусловные переходы, косвенную адресацию. Мне даже удавалось писать на ней самомодифицирующий код, используя косвенную адресацию регистров. Я написал немало программ. Некоторые из них были раза в два короче своих аналогов, опубликованных в журналах.
Самой сложной была игра "Звездные войны". Первый, черновой, вариант занимал около 200 шагов программы и 25 регистров. Однако в МК-61 было всего 16 регистров и 105 шагов. Я долго оптимизировал свое интерактивное творение, которое показывало полет корабля на мигающем экране без остановки программы. Управление велось переключателем Градусы-Грады-Радианты. В результате я сократил программу всего до 15 регистров и 98 шагов. В далеком 1986 я еще не знал, что приемы, с помощью которых мне удалось сжать эту программу, называются самомодифицирующимся кодом и достаточно нетривиальны.
Использовал я и такие приемы, как разночтение двухтактных команд. Например, команда с кодом 50, означала остановку. Однако, когда управление передавалось на один шаг до нее, на команду безусловного перехода на число в следующей ячейки, то выполнялся переход на 50. То есть, одна и та же ячейка памяти хранила в первом случае команду, а во втором данные. Здесь проявлялась особенность архитектуры фон Неймана (Ноймана), которая не различает код и данные. Но я узнал об этом только на средних курсах института.
[3. Три числа] [Оглавление] [5. Указующий перст]