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

Вот и молодой разработчик буквально прилип взглядом к ее точеной фигуре. А затем к нам заходили Нил, Каспер, Сэм, Гарольд, Линкольн. С последним мы вообще не представлены. И все как бы ко мне, узнать, как моё здоровье и показать свой порт Тетриса. Прямо Белоснежка и семь гномов, то есть гиков. И даже отравленное надкушенное яблочко в нашей версии истории присутствует — на логотипе Эппл 2.

Почему-то почти каждый приходил с конфетами и цветами. Всё принималось вежливо, с достоинством, улыбкой и подмигиванием, что Елену откровенно бесило.

— Орале! Нет, ты посмотри на нее! Еще один! Ты что с ними делаешь, бруха? Выбери себе одного и встречайтесь! Зачем остальные? — орала Елена, если находилась дома в момент, когда Каспер или Нил уходили, вручив подношения.

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

Кушать принесенные «дульсес», то есть сладости, традиционно приходилось мне или Линде, как не боящимся потолстеть, а даже стремящимся набрать немного веса. Никогда еще столько рафаэлок не кушал, точнее, конфет и шоколадок от «Херши», некоторые из которых по вкусу получились один в один как те самые лакомства с белым шоколадом и кокосовой стружкой.

Иногда еще Джон помогал. Тихий разраб в гости зачастил, но ко мне и Атари 2600, а не к прекрасной «Белль». Хм… эту песню я помню довольно-таки хорошо, англоязычную ее вариацию похуже, но додумаю, если что. Готовый мировой хит, который надо лишь как-то обосновать для «Бесконечности тьмы». Подождет, дойдет еще очередь.

В мою сторону, кроме регулярных попыток накормить, Изабелла никаких поползновений не совершала, соблюдая договор с сестрой. И даже футболку начала носить без оголенного плеча. А с Линдой даже почти подружилась, найдя общие женские темы. Косметика и парни, внезапно!

Не знаю, кто подсказал Белле аналогию, не исключаю, что сама додумалась. Но когда фигуристая латина сказала «представь, что твоё лицо — это картина», обычно равнодушная к макияжу азиатка поплыла и вскоре они начали обсуждать «как нарисовать себе красоту».

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

Так вот, Джон искренне старался помочь в моем сражении против детища Атари. Эта консоль ужасна! Настоящая миерда! Если существует ад для программистов, то там пишут именно под Атари 2600. Хм. А не в нём ли я в итоге оказался? И вся моя жизнь в роли Криса — лишь подводка к персональному котлу.

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

Вся проблема в видеопамяти. Если кратко — её нет. Ну, не то, чтобы совсем нет — три регистра, суммарным объемом в двадцать байт при ширине игрового поля в сорок символов. Хватает на одну строку половины экрана. Но все, что рисуется слева — тут же повторяется в правой части дисплея в зеркальном отражении.

То есть Макаронный монстр или Омниссия посылали мне намёки на грядущие кошмары, отзеркалив мой фингал на лице Монтгомери Синклера. Вот и не верь после такого в предсказания. То-то экран в Питфоле, в который я чуточку погонял, дабы немного понять консоль, подозрительно симметричный.

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

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

В нормальных железках ты кладешь кадры в видеопамять и аппаратная часть всё сама нарисует. Тут же натуральная порнография! Приходится разбираться в физике работы электронно-лучевой трубки!

Естественно, поток исполнения кода единственный и синхронный, то есть посылать команды на отрисовку нужно в промежутках между выполнением остальной программы? Семьдесят шесть тактов процессора на каждую строку развертки кинескопа! Верните мне рваную видеопамять Эппл 2! Там она хотя бы в принципе есть! Я всё понял и осознал!

— Наверняка эту миерду придумал какой-нибудь Стив! — раздраженно бросил я, когда при помощи Джона и документации осознал, как глубока кроличья нора. В шутку, естественно, нет у меня никакой стивофобии.

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

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

Ладно-ладно. Если есть ад, то нам необходим крутой парень с дробовиком и бензопилой, который вынесет всех демонов, раздавая им пинками чингасос. Не на того напали! Кажется, я уже придумал, как выйду из ситуации.

Глава 22

— Джон, я не рассказывал тебе, что такое безумие? Безумие — это повторение одного и того же действия раз разом в надежде на изменение. Разработка под Атари 2600 — вот что есть безумие, — обратился я к молчаливому программеру, пришедшему с распечаткой своего порта Тетриса под Атари 800 и начавшего карандашиком проставлять такты процессора в листинге, прикидывая, как уместить нехитрую логику в концепцию «нарисовать половину экрана за заданное число команд».

Веселья добавляло то, что действия стоимостью в один такт у процессора MOS6507, слегка урезанной версии 6502, как, собственно, и у изначального предка, нет. Минимум два. То есть нам надо нарисовать половину стакана за действия, оцененные четко в 38 попугаев, и добить остальные за оставшуюся длину удава, чтобы в итоге получилось заветное 76.

— Да, очень сложная платформа, я потому и вызвался помогать, так как это вызов, интересная задача, — подтвердил юноша, — мистер Уильямс был против, но я его убедил.

— И решать ее при помощи карандаша и бумаги — истинное безумие.

— Так делали разработчики, которых Кен нанял для переноса моей Зубодробилки. Да, он занял полгода, но получилось хорошо. Не представляю, как ты собираешься справиться за два месяца.

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

Идея моя оказалась проста, как двадцать пять центов — запилить анализатор синтаксиса, который подсчитает такты вместо меня. Пройдется по коду модуля, проставит накладные затраты на каждое действие и подобьет итог. Линтер — так подобные скрипты называют в светлом айтишном будущем. Но, кажется, в нынешние лохматые времена хотя бы сам термин уже придумали. Скармливаем ему ассемблерный код и видим прогноз, сколько процессорных действий он займет. Пожалуй, я преуменьшил, когда говорил про дробовик. У нас выйдет если и не БФГ, то, по крайней мере, ракетная установка.