Книга Икона DOOM. Жизнь от первого лица. Автобиография - Джон Ромеро
Шрифт:
Интервал:
Закладка:
– Понятия не имею, что это, – ответил я. – Но если все этим занимаются, то и мне стоит браться за дело.
Роб напечатал «800L», после чего на экране появился код в формате языка ассемблера.
– Это язык ассемблера, – объяснил Лэвлок. – То, что написал программист.
Он объяснил, что программа с таким названием приняла код и пересобрала его в машинный язык.
Приближалось Рождество 1982 года, и я попросил у родителей две книги: Assembly Lines: The Book Роджера Вагнера, настоящую библию программиста, и Apple Graphics and Arcade Game Design Джеффри Стэнтона, повествующую о создании аркадных игр на ассемблере. Родители по-прежнему не догоняли происходящее, но уже куда меньше осуждали мое увлечение и продолжали надеяться, что я займусь разработкой «полезных» программ. 25 декабря книги уже лежали под елкой. Счастью не было предела.
– Наконец-то я смогу выучить ассемблер! – раздался мой возглас.
У меня уже имелось справочное руководство для Apple II, однако я не мог понять указанную там продвинутую информацию об ассемблере, потому что важнейшие начальные шаги авторы не описывали. Я будто смотрел на двадцатый этаж, стоя у лестницы, которой не хватало ступенек с первого по девятнадцатый пролеты. Все надежды возлагались на книгу Вагнера, которая открыла бы все тайны, а книге Стэнтона предстояло обучить меня фокусам разработчиков коммерческих видеоигр.
К тому моменту мой самодельный экспресс-курс обучения программированию вышел на запредельные скорости. Я твердо настроился зазубрить про ассемблер все. Почти сразу выяснилось, что машинный язык, показанный мне Робом, делал все то же, что и BASIC, и даже больше, но куда быстрее. Цифровая белиберда оказалась шестнадцатеричным кодом, серией шестнадцати цифр или символов в двадцати четырех рядах. Код ассемблера – это обычный текст, но обязательно нужна программа, которая превратит его в машинный код.
Первым делом требовалось выучить шестнадцатеричную систему счисления, потому что именно ее Apple II использовал для языка ассемблера. Изучаемая в начальной школе десятичная система состоит из десяти цифр от нуля до девяти. Шестнадцатеричная же использует шестнадцать цифр: от нуля до девяти и от A до F. Вот наглядный пример: число 11 из десятичной системы в шестнадцатеричной отображается как буква B. А число 94 обозначается в шестнадцатеричной системе как 5E[10]. Такие переводы я научился делать на автомате, как школьник, заучивающий, что 12×12 – это 144.
На первых порах Роб стал моим лучшим соратником и учителем. Когда дома появился Apple II+, я сразу же принялся за создание своей версии Crazy Climber, нашей любимой аркады, но ничего не получалось. Лэвлок взглянул на код и спросил, почему я не использовал переменные. Ответ звучал очень просто: я не знал, что это такое.
Роб объяснил, что переменные содержали в себе значения, которые могли меняться в ответ на действия геймера или на какие-либо внутриигровые события. Например, переменной «Жизнь» присваивалось значение 3. Если герой получал дополнительную жизнь, показатель увеличивался на один пункт. Переменные использовались для координат осей X и Y, количества патронов, а также всего остального, что не стоило упускать из виду. Это одна из самых базовых концепций программирования, и я ничего о ней не знал. Выражаясь совсем уж простым языком: представьте, что у вас на кухне стоит миска – это переменная. В ней может помещаться как триста горошин, так и десять. Миска не меняется, но ее содержимое переменно.
Я закончил свою версию Crazy Climber, но из-за дилетантства случайно ее удалил – моя первая игра для Apple II+ в истории попросту испарилась! Однако огорчения я не испытал, просто подумал, что следующие разработки будут лучше. Началась работа над Dodge ’Em, в которой кораблю играющего требовалось уворачиваться от выстрелов инопланетян.
Благодаря Робу, рассказавшему про машинный код и переменные, а также подаренным родителями книгам я узнал, как получить доступ к внутренним механизмам Apple II+. Неделя, в которую я получил книгу про ассемблер, стерлась из памяти. Мозг постоянно обрабатывал получаемую информацию об Apple II+, о коде, на котором она работает, и о том, что я могу запустить на этом компьютере. Apple II+ и другие первые домашние ЭВМ можно было изучить «от и до». У моей первой машины имелось 64 килобайта памяти – 65 536 байт. У меня появилось четкое желание знать, за что отвечает каждый байт. Верхние 25 % памяти отводились постоянному запоминающему устройству (ПЗУ), в котором хранились программы, определяющие, как работает Apple II+. Любому, кто писал программу для этого компьютера, требовалось знать точное расположение различных функций в ROM машины. Существовали книги, в которых расписывалась «географическая адресация» ПЗУ Apple II+. Для ускорения обучения я вел заметки, выписывал адреса и пользовался плакатами, на которых указывались важнейшие места памяти, – в частности листовкой Peeks, Pokes and Pointers от компании Beagle Bros. Я твердо вознамерился запомнить про компьютер все: как работает микропроцессор 6502, как устроен экран высокого разрешения с чересстрочной разверткой. Еще хотелось заучить все возможное про ПЗУ и нулевую страницу[11].
Я неспроста так себя нагружал. Во-первых, мне очень хотелось нагнать программистов, которые ушли далеко вперед: я не знал, кто они, но постоянно запускал их игры. Речь про Насира Джебелли, Билла Баджа и других. Во-вторых, у меня был серьезный для всего этого повод: не успев понять, как на самом деле работает компьютер, я мог его лишиться.
Не успела начаться моя учеба в десятом классе, как отчиму предложили работу на военной базе в Англии с увеличением заработной платы на 50 %. Он согласился на три года перевестись на базу королевских ВВС в Алконбери. Переезжать мы собирались в самом начале нового 1983 года.
По общему замыслу грузчики должны были собрать наши пожитки и медленно везти их в Великобританию. Беспокоивший меня больше всего Apple II+ должен был оказаться в коробке спустя какую-то неделю после того, как я получил свои книги по ассемблеру. Я жадно поглощал все их содержимое, программируя по мере прочтения. Я вступил в схватку со временем и вновь столкнулся с необходимостью удержать информацию всеми силами. После пяти страниц первой книги я вбил машинный код в наш Apple II+ и запустил. Заработало! Начало было положено.
Неделей позже компьютер поехал в сторону Англии, а за ним помчались и мы.
Разлука меня не останавливала: я начал писать код в тетрадках. В колонке справа писал код ассемблера, а потом пересобирал его по соседству, вручную делая машинный код. После этого я разыскивал неподалеку Apple II+, чтобы вбить свой шестнадцатеричный код