Выбрать главу

Помню, как я программировал «Пакмана» на ассемблере. Прежде всего пришлось вспомнить, как именно выглядят персонажи. Потом постараться нарисовать их в цвете на листке с сеткой 16 на 16. Если есть талант художника, то может выйти неплохо. Но у такого маляра, как я, получились лишь жалкие карикатуры на персонажей «Пакмана».

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

Но ошибся.

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

Писал я и собственные игры. Но тут нужен особый склад ума. Для игр настолько важна производительность, что приходится залезать очень глубоко в аппаратное нутро компьютера. Это я мог, но мозги у меня не игрового плана. Сама по себе большая скорость или крутая графика еще не делают игру классной. Тут важнее всего какая-то зацепка – то, что заставляет в нее играть. Это как с кино. Спецэффекты – это вещь, но нужен еще и сюжет. А у моих игр сюжет всегда хромал. В игре важно развитие событий, идея. Часто развитие заключается в простом ускорении действия. Как, например, в «Пакмане». Иногда сменяется лабиринт или чудовища начинают все искуснее тебя ловить.

При программировании «Пакмана» меня увлекла такая задача: как сделать, чтобы картинка не мерцала. В старых компьютерных играх это был типичный дефект, потому что без специального оборудования персонажи непременно мерцают. Для того чтобы переместить героя, нужно убрать его старое изображение и нарисовать новое. При плохой синхронизации момент, когда изображения нет, становится заметен и картинка мигает. От этого можно избавляться разными путями. Например, вначале нарисовать нового персонажа, а потом убрать старого. Тут нужна осторожность: важно не стереть ту часть старой картинки, которая перекрывается новой. При этом вместо неприятного мерцания иногда возникает эффект тени персонажа на экране. Это гораздо лучше для восприятия: вместо мерцания появляется легкая размытость, которая создает иллюзию движения. Однако такое решение требует множества ресурсов, и пишутся такие программы медленно.

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

У нынешних компьютеров скорости для всего хватает. Единственное, что напрягает оборудование до предела – это игры в реальном времени, например, популярные сегодня трехмерные приключения. По существу только в играх явно видно, когда что-то не происходит в реальном времени. При работе с текстом секунда там, секунда здесь – особого значения не имеют. Но в игре заметна даже задержка на одну десятую секунды. Раньше игры были довольно примитивными. Сегодня же само программирование составляет лишь незначительную часть игры. Есть музыка, есть сюжет. Если провести аналогию с кино, то программист сродни оператору.

На Sinclair QL я работал три года. За это время я кончил гимназию, поступил в Университет Хельсинки, прошел армию. Это был прекрасный компьютер, но наши пути начали расходиться. Примерно в последний год я начал замечать его ограниченность. Процессор 68008 был неплох, но я прочел о процессорах следующего поколения – 68020 – и узнал о таких достоинствах, как управление памятью и страничная подкачка. Новые компьютеры могли делать очень важные для программирования на низком уровне вещи.

В Sinclair QL меня особенно бесило, что, хотя операционная система поддерживала мультизадачность, все могло в любой момент рухнуть, потому что не было защиты памяти. Если какая-то задача замышляла недоброе, она могла угробить все сразу.

После выпуска Sinclair QL Клайв Синклер перестал заниматься разработкой и изготовлением компьютеров. Одна из причин: модель не имела коммерческого успеха. Это было интересное технологическое решение, но у компании возникли производственные проблемы, сбои в обеспечении качества, появились неизбежные нелестные отзывы в прессе. А кроме того, росла конкуренция на рынке.

В конце 80-х уже начало складываться представление, что со временем компьютер будет у каждого, хотя бы для работы с текстовым процессором. Причем на первый план стали выходить PC. Да, выпускавшиеся IBM компьютеры стали наводнять прилавки и приносить пользу, даже несмотря на свое техническое несовершенство. В конце концов эти вездесущие бежевые создания несли на себе печать качества IBM, а это многое значило. И еще один плюс: периферийные устройства были стандартными и продавались повсюду.

Я читал обо всех этих новых ЦП, которые могли делать то, что мне нужно. Становилось ясно, что казавшийся интересным 68020 – это путь в никуда. Я мог бы купить для QL новый процессор. Но в те времена это означало коренную переделку машины. Да и операционка не ведала об управлении памятью, так что пришлось бы писать собственную версию. Поэтому вопрос стоял так: это был бы большой шаг вперед, но новый компьютер стоит дорого.

А покупка дополнений к моему компьютеру доставляла все больше головной боли. Нельзя было просто взять каталог для Sinclair QL, поднять трубку и заказать модуль памяти. Вся эта возня с получением посылки из Англии пахла нафталином. (Отсутствие готового ПО меня не волновало – его я и сам мог написать.)

Однако не было бы счастья, да несчастье помогло. Когда я задумал избавиться от машины, то решил продать периферию: дополнительное ОЗУ и настоящий жесткий диск, который купил, потому что не мог больше ни секунды терпеть микропривод. Но за этим оборудованием не охотились толпы жаждущих, поэтому пришлось дать объявление в компьютерный журнал, ждать и молиться. Вот так я и познакомился с моим другом Йоуко Виерумаки. Похоже, он был единственным в Финляндии владельцем Sinclair QL, кроме меня. Он откликнулся на мое объявление, приехал из Лахти на поезде и купил часть периферии. А потом научил меня играть в снукер.

II

На первом году моей учебы в университете Sinclair QL стоял у меня на столе возле окна (мы жили тогда на первом этаже, на Петерсгатан), но программированием я особо не занимался. Отчасти потому, что был полностью поглощен учебой. А еще я просто не смог найти задачу, которую можно было бы делать на компьютере. Когда нет интересной задачи, и желание программировать пропадает. Всегда нужен какой-то стимул.

Казалось, пришла пора пойти в армию (раз от этого все равно не уйти): мне – девятнадцать, недостатки компьютера раздражают, да и стоящих идей нет. Я сел на поезд и отправился в Лапландию.

Как я уже говорил, я совершенно не представлял себе, какие требования – в частности, к физической подготовке – предъявляет армия. Поэтому после одиннадцати месяцев физических упражнений с оружием я почувствовал себя в полном праве провести остаток жизни в блаженном бездействии. Я готов выполнять только два упражнения: нажимать на клавиши и обхватывать стакан пльзенского. (И на самом деле я не занимался спортом почти десять лет после демобилизации, пока Дэвид не вынудил меня поплясать на доске в убийственных волнах залива Хаф-Мун. Я тогда чуть не утонул, и ноги потом неделю болели.)

Служба в армии кончилась седьмого мая 1990 года. При том что (Туве подтвердит!) я никак не могу запомнить дату нашей свадьбы, день демобилизации я запомнил на всю жизнь.

Первым делом я решил завести кота.

У моего друга как раз за несколько недель до этого окотилась кошка, и я купил у него последнего оставшегося котенка – прекрасного белоснежного котика. Поскольку первые недели своей жизни он провел на воле, то был готов к жизни как внутри, так и вне квартиры моей матери. Я назвал его Ранди, сокращенно от Митрандир (белый маг из «Властелина колец»). Сейчас ему одиннадцать лет, и он вместе со своим владельцем совершенно освоился с жизнью в Калифорнии.