Все не так плохо оказалось — прозвонил кабель питания, открыл корпус внешнего БП и довольно скоро узрел проблему — сгоревший предохранитель. Стеклянная колбочка с тонкой проволокой внутри, в норме прозрачная, ныне закопченная.
— Вот, гляди, — объяснил своему джуну, в чем проблема.
— Я съезжу в магазин и куплю запасной! — вызвался воспылавший энтузиазмом Ким.
— Нет, не надо, мистер Конг нам одолжит свой предохранитель.
И правда, зачем мотаться в Радиорубку и еще раз сталкиваться с неприятным Стивом, когда у нас здесь и сейчас огромная толпа добровольных доноров. Достав сгоревшую деталь, отыскал аналогичную по номиналу в корпусе Донки Конга. Все равно у бедолаги гориллы плата разломана и как ее чинить — я не знаю.
Еще десять минут возни и попытка номер два. По крайней мере, зеленый огонек на верхней грани кирпича БП сообщил, что питалово появилось. Я щелкнул ручкой включения ТВ и нажал на совсем неинтуитивно расположенную кнопку запуска компьютера — внизу сзади на корпусе-клавиатуре. Пришлось ее немного поискать.
Экран телевизора расцвёл помехами и почернел, возникла надпись:
MEMORY SIZE?
В каком смысле — размер памяти? Да макаронный монстр его знает, сколько там? Мне что, корпус вскрывать? Или перебором? Что за угадайка? А девичью фамилию матери Криса им не назвать? Я ее помню, Гарсия.
Ввел «4KB», ответом стало
?SN ERROR
А если в байтах: 4096?
RADIO SHACK LEVEL II BASIC
READY
ДА! ДА! ДА! Я сделал это! Рядом восхищенно ахнул Ким.
Я супергерой, и у меня есть супер-рука,
Этой рукой я ломаю почту и пароли VK,
Удаляю ссылки из сети, да кстати,
Я обладаю суперпрокачанным навыком телепатии!
И как мне с этим жить? Начал с простого.
PRINT «HELLO WORLD»
И допотопный бейкик поздоровался с миром, как я и просил. Восхищенный астматический вздох Кима, больше напоминающий всхлип, стал мне наградой.
— Дружище, ты приносишь мне удачу! — хлопнул помощника по плечу. — Давай запилим игру!
Вероятно, слишком самонадеянно вот так вот сесть за древний слабый компьютер и сразу нырнуть с головой в разработку. Но на что я вообще тогда собираюсь рассчитывать, если не смогу вот так просто взять и войти в Мордор? То есть в геймдев.
По-хорошему, сначала следовало разобраться с блоком расширения и магнитофоном, чтобы иметь возможность сохранить код. Но тут бы мануалы сначала почитать. Только сам Император и Бог-машина знают, какие сложности возникнут с их подключением. А нужный код у меня уже в голове!
Когда-то в далеком будущем, являясь простым российским школьником, я впервые сел за учебный советский ЭВМ «Корвет» на отечественном клоне процессора Интел 8080. И после первых нескольких уроков с PRINT «ПРИВЕТ МИР» учитель информатики дал нам задание написать простую игру. Не всем, безусловно, а талантливым ребятам, загоревшимся интересом к компьютерам. Таким, как я или во все глаза пялящийся на священнодействие Ким.
На создание и отладку кода на бейсике для простейшей игрушки у меня тогда ушла, наверное, неделя. Никакой графики, сплошь текстовые элементы. Я в тот раз написал давно уже всему миру известную змейку, ту самую игру с телефонов Нокия, на тот момент еще не начавших покорять мир. Никакой графики, сплошь текстовые элементы: хвост змеи из букв «o», звездочка, изображающая яблоко. Стирание кончика хвоста, печатью поверх него пробела. Термин ASCII я узнал намного позднее.
Примитивный математический просчет коллизий. Неделю провозившись с кодом, будучи зеленым школьником, я запомнил его наизусть навсегда. ПЕРВАЯ ИГРА, написанная мной самостоятельно! Учитель только идею и подсказал, до остального я сам допёр, благо мне, как отличнику, разрешили зависать в компьютерном классе после уроков.
Меньше трехсот строк листинга. Я их помню намного лучше, чем отрывки из «Евгения Онегина» или «Бородино», какие требовалось зубрить на литературе. То есть их тоже любой образованный человек процитировать способен, но фрагментарно, а тут я сел и воспроизвел. Руки-то помнят!
Глядя, как мои пальцы мелькают над клавиатурой, Ким наверняка рисковал превратиться в персонажа из аниме за счет безумно расширившихся глаз. Палюсь со страшной силой, но я не могу иначе. Разработка и игры — моя страсть. Наглядно видеть, как твой код оживает на экране — эйфория лучше, чем секс. Хотя против последнего я тоже ничего не имею.
Поехали!
10 CLS: RANDOM: DIM X(100), Y(100)
20 PRINT @ 20, «MEGA-SNAKE»;
…
260 PRINT @ 466, «GAME OVER! SCORE: »; TAILLENGTH × 10
270 GOTO 270
Готово! Набранный счет равен длине хвоста, умноженной на 10.
Ну, попробуем запустить? Как там это делалось? Работайте, молодые мозги! Думай, голова, я тебе шапку куплю! Шапка мне и в самом деле бы не помешала, учитывая, какой дубак иногда случается по утрам в солнечной Калифорнии. Вспомнил! RUN!
Ввел команду на исполнение кода и…
?SN ERROR IN 150
READY
Ошибка в 150 строке. Нашел! Вместо PRINT я набрал PRNT, самая банальная опечатка, пропущенная буква. Пальцы не поспели за мыслью. Подсветки синтаксиса ведь нет! Вот и не заметил сразу. Еще одна мегаполезная вещь, за какую все программисты мира сбросятся мне на памятник из бронзы, а то и чистого золота, когда реализую. На TRS-80, правда, не получится. Тут экран монохромный. Эх… с болью в сердце вспоминаю логотип с цветным надкушенным яблочком на коробках с крадеными компами. Знаю, что правильно поступил, не став связываться с криминалом, а то бы еще в соучастники угодил. Но как же мучительно больно от осознания уплывших перспектив!
— Всё хорошо. Если код запустился с первого раза и без ошибок, то возникает повод задуматься, что программист сделал не так, — пояснил я Киму. — Сейчас исправлю опечатку и… — ступор. А как мне ее исправить? На Корветах я просто подводил курсор к нужной части программы, стирал неправильное и печатал как надо. А тут, гадство, нет курсора! Не изобрели! Правильный ответ, как всегда, в RTFM, но мануалов и нет.
А что, если набрать всю строку целиком? Начиная с номера? Не заменит ли новый код неправильный? Вообще, стиль оформления кода, требующий обязательной нумерации строчек — дикий архаизм! Мне кажется, что даже в 1982-м сей подход устарел! Но в отечественных Корветах мы тоже нумеровали строки и потому шоком для меня диалект Бейсика из каменного века не стал. Мне стоит подумать про транспайлер — программу, что возьмет нормальный код на продвинутом современном диалекте Бейсика и превратит в оформленный по стандартам эпохи мезозоя. Несложно будет автоматически нумера строк проставить. Или вообще Ктулху в щупальца этот бейсик, начать транслировать код из Питона? Можно, но как-то пока незачем.
И не стоит ли мне идею транспайлера запатентовать? И подсветку тоже! И вообще кучу идей! Как-то патентный троллинг грязная штука, но способен принести кучу денег, какие я потом пущу на добрые дела. Например, на развитие опенсорса. Разрешу свободное использование «своих» запатентованных идей в некоммерческих целях. Обдумаю еще попозже. Ну а пока… RUN!
Идея набрать строку в исправленном виде оказалась рабочей. Посреди экрана быстро пополз короткий червяк из трех букв «o».
— Крис! Настоящая игра! Это потрясающе! Ты невероятен! — прямо-таки заверещал от восторга Ким. Такое впечатление, что мой животворящий код ему астму подлечил — даже голос несколько поменялся.
— Пока что первая и неказистая, но ты представь перспективы! Хочешь попробовать? Управление на кнопках WASD.
— А почему на них, а не стрелках? — с живым интересом спросил паренёк.
— Я пока не знаю клавиатурных кодов клавиш стрелок, а четыре кнопки под левую руку однажды станут стандартом в игровой индустрии, поверь моей интуиции.
Уступил Киму место, он попробовал. Червяк бодро начал расти, но чем длиннее становился он, тем печальнее я. Вместе со змеей рос и счетчик примитивных циклов на его отрисовку и расчет коллизий и где-то на двадцати сожранных яблочках-звёздочках производительность упала катастрофически, программа перестала успевать ловить команды управления.