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

Обстоятельно изложил Джону концепцию.

— Но у тебя ведь очень сжатые сроки, — напомнил коллега, — разумно ли тратить время на инструмент, который не факт, что поможет?

— Лучше день потерять, затем за пять минут долететь, — цитату из советского мультфильма собеседник понять шансов не имел даже теоретически, так как на экранах знаменитое «Главное — хвост!» появится только через несколько лет. — Распиши мне количество процессорных тактов в каждой ассемблерной команде, я их наизусть не помню.

Да вообще не помню, кроме того, что взятая как из лексикона Трейси команда NOP, то есть «ничего не делать», стоит два такта, а однотактовых совсем нет, что очень усложняет жизнь и заставляет ненавидеть саму математическую концепцию четности и нечетности!

Ночь — она звала меня. И Джона вместе со мной. Справились ли мы с задуманным к утру? Решительное нет. Я, может быть, благословлен Омниссией и вообще инженер, но если бы подобные в чем-то революционные штуки писались за одну ночь, то их бы уже кто-нибудь создал. Нельзя просто так взять и написать парсер до рассвета.

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

Джон реально умный парень, быстро понял мою идею и, притащив из дома свой собственный Эппл 2, начал помогать: сначала заполнять таблицу со стоимостью действий в виде структуры на Паскале, а затем еще и отдельные процедуры писать.

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

У нас ушли две недели практически безостановочной разработки с редкими перерывами на сон и еду. Есть такая шутка, что если один программист напишет программу за неделю, то два — за две! Не наш случай. Помощь Джона на самом деле бесценной оказалась, главным образом за счет досконального знания ассемблера под процессоры семейства 6502. Я, со своей стороны, вкладывался знанием приемов командной разработки и общим пониманием принципов устройства линтеров. Мои навыки из будущего и его из прошлого, которое для меня настоящее, отлично друг друга дополнили.

Вообще, групповая разработка на технологиях 1982 — та еще боль, сопоставимая с фрустрацией от столкновения с недоконсолью. Джон с ухмылкой назвал её «Сникернет». То есть кроссовочная сеть. Ты записываешь код на дискету и несешь ее к соседнему столу ножками, после чего другой программер наполовину вручную объединяет ваши листинги.

Банальный копипаст «выделить-скопировать-вставить» в эпоху ретро-компьютеров выглядит, как тот еще цирк с конями. Нельзя просто так взять, открыть файл, скопировать кусок текста и вставить в другой файл. Не умеют так редакторы, в том числе самый продвинутый из имеющихся, включенный в среду UCSD Pascal.

Тут Скопировать/Вставить даже внутри файла нельзя! И это при том, что у меня есть древняя привычка копипаcтитть ключевые слова, включая банальный PRINT. Каменный век предлагает лишь Вырезать/Вставить. В чем здесь логика — я не выкупил. Так что и горячие клавиши для работы с текстом я тоже создам и в обиход введу. Причем сразу угодные богу-машине Ctrl-C и Ctrl-V, а не Ctrl-Ins и Shift-Ins, привычные всяким староверам. Если успею себе честь присвоить раньше Стива Джобса. Всегда есть какой-то Стив, который вводит инновации быстрее тебя!

Но система контроля версий и совместного написания кода станет одним из первых нововведений в офисе Каналья Геймс, когда я развернусь в Эль-Серрито. На полноценный версионник по типу Гит возможностей железа не хватит. А вот что-то похожее на SVN почему бы и не изобразить. И мне ведь не обязательно всё делать в одно лицо — найму разрабов.

В случае с Паскалем мы пришли к самому простому решению: разделению зон ответственности по файлам. Джон писал модуль JH.PAS, я — СС.PAS и периодически передавали друг дружке дискету со стола на стол.

И я бы даже не сказал, что это было мучительно, хотя и тяжело физически света белого не видеть. Всё компенсировал чистый кайф от понимания того, что создаешь нечто особенное, а уж когда скрипт заработал и четко раскидал нам тайминги, а затем и подсветил проблемы, где мы не укладываемся — вообще песня. Мы с Джоном аж пятюню друг другу отбили, когда поняли, что готово. Крутой он кодер, гениальный, почище Синклера. Может быть, мне его схантить, раз Кен у меня мистера Лоу увёл?

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

Джона у меня Кен отобрал и еще около двух недель ушли уже у меня одного на доводку и тестирование созданного при помощи нового инструмента прототипа. Он выглядел откровенно неказистым, примитивным, монохромным, но работал безукоризненно — плавно и без мерцания. А геймплей — тот самый. Никогда бы не подумал, что найду повод для гордости в написании тетриса. А вон оно как. Кажется, я под конец уже начал видеть Матрицу. Смотрю в экран и вместо падающего L-блока вижу такты и тайминги. Я избранный и нет никакой ложки!

Прекрасным летним утром 20 августа я вооружился тросточкой и сел вместе с Линдой в Короллу, чтобы поехать к Уильямсам. Жизненные события прошедшего месяца вылетели у меня из головы. Мозг сохранил лишь два вида информации: код линтера на Паскале и код Тетриса на Ассемблере. В кармане у меня лежал отладочный картридж для Атари 2600, на который я при помощи притараненного моим братаном Джоном программатора прошил созданную игру.

— Ну, парень, покажи, ради чего ты отнял у меня больше чем на неделю нашего лучшего программиста, — с легким нажимом предложил Кен.

— Дорогой! — вступилась Роберта. — Ты же знаешь, какой Джон Харрис упрямый.

Добрый и злой полицейский, всё по классике. Меня сейчас будут разводить на уступки. Например, скажут, что если Джон сделал половину работы, то и половина роялти тоже ему причитается. А нифига. Не виноватый я, он сам пришел!

— Сэр, Джон очень уважает вас и я уверен, что если бы вы ему сказали, он бы вернулся к другим задачам. Давайте к демонстрации.

И мы вернулись к показу. Я подключил кусок миерды от Атари, по недосмотру великих Древних названный игровой консолью, к телевизору и дал в руки Кену джойстик.

— Паузу, увы, сделать не смог, для нее не хватает элементов управления, — начал рассказывать я. У Атари 2600 кнопка на джойстике всего одна и она пошла на поворот фигуры по часовой стрелке.

На половине консолей, что показывали парни, развлекавшиеся портированием, та же беда — ужасные, отвратительные геймпады. Нет, точно нужно заняться патентованием прототипа сонивского «Дуалшока».

— Да кому нужна эта пауза! — с внезапной эмоциональностью воскликнула Роберта. — Как вы с Джоном убрали мерцание? У меня от Атари 2600 голова всегда болит, так как картинка дрожит.

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

Всё ведь они знают, наверняка ж уже батька расспросил Джона, чем они занимались. Я подсознательно ожидал разговора о лицензировании линтера, но молчок. Что, мой напарник так хорошо запомнил весь код? Ну так-то да, быть может, даже получше меня самого.

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