в Санта-Кларе. В тот день, когда они были готовы приступать к работе, комплектующие извлекли из кладовой, занесли в отчет и принялись паять. После этого у нас было 30 дней на оплату.
Первая партия наших плат была готова к январю 1976 года. На рынке были комплекты вроде «Альтаира», но не предлагалось ничего подобного тому, что сделали мы. Помню, как ждал их – тогда я был счастливейшим человеком на свете. На самом деле я никогда не думал, что мы заработаем денег на Apple. Единственное, что приходило в голову: ух ты, я открыл, на что способен микропроцессор, и теперь ему есть столько применений, столько возможностей! Я был уверен, что обеспечил себя инструментом вычислений до конца своей жизни.
Я думал о потенциале Apple I и чуть не рехнулся. Скажем, я очень интересовался видеоиграми. И вот оказывается, что на моем маленьком компьютере можно еще и в игры играть. Я воображал, как однажды текстовые редакторы заменят печатные машинки. Я быстро печатал и понимал, что нам было еще далеко до замены печатных машинок компьютерами, но живо мог себе это представить. Я воображал, как компьютер будет помогать мне в инженерной работе в HP. У меня просто дух захватывало. О чем бы я ни задумывался, обязательно оказывалось, что компьютер может тут быть серьезным подспорьем. Я видел это совершенно ясно. И только об этом мог тогда думать.
Когда платы были готовы, мы подрядили друга Стива, Дэна Котке, и сестру Стива Пэтти вставлять чипы в разъемы, по 1 доллару за плату. Стив приносил нам с производства по 10–20 собранных плат за раз. И вот мы сидели за верстаком в гараже родителей Стива на Крист-авеню, и я подключал каждую собранную плату к телевизору и клавиатуре и проверял, работает ли она.
Если все было в порядке, то я засовывал ее в коробку. Если нет, то выяснял, что за провод не попал в разъем или что за контур замкнулся. Нерабочие платы я чинил и опять-таки складывал в коробку. Как только у нас набирались дюжина-две плат, Стив отвозил их в магазин Пола Террелла и получал деньги.
Это, конечно, не были готовые компьютеры в том смысле, в каком их понимают сегодня. Полу Терреллу приходилось подключать к ним мониторы, клавиатуры, трансформаторы и даже вставлять в корпуса. Не уверен, что именно на это он рассчитывал. Кажется, со слов Стива Джобса он решил, что получит совершенно готовые компьютеры.
Тогда у нас был недостаточный объем производства, чтобы работать с пластмассовыми корпусами. Поэтому Пол поставлял компьютеры в деревянных корпусах, часто из полинезийского дерева коа. Это было стильно.
Нам нужно было определиться с розничной ценой на наши платы. Ведь не только Полу мы собирались их поставлять.
Мы решили установить цену в 666,66 долларов за плату. Эту цену придумал я, любитель повторяющихся цифр. (В сущности, речь шла о 500 долларах плюс 30 % маржи.)
И знаете что? Никто из нас и не подумал, что это число может ассоциироваться с сатанизмом, пока Стиву не стали приходить письма об этом. Что-что? Число Зверя? Честно, у меня и мысли такой не было. Я не видел фильма «Изгоняющий дьявола». И Apple I совсем не казался мне зверем.
В конечном счете написание интерпретатора для «Бейсика» оказалось самым долгим и самым сложным моим проектом для Apple.
Тогда я лишь хмыкал при мысли о «Бейсике». По сравнению с «Фортраном» это был слабый, легковесный язык. Мне казалось, что никто не станет писать на нем изощренные программы, какими пользуются инженеры и ученые. Я видел, к чему все идет. В той книге, о которой я уже говорил, «Компьютерные игры на “Бейсике” для чайников», упоминалось, что можно просто вбить текст программы и получить готовую игру.
Я писал интерпретатор «Бейсика» для Apple I, основанного на процессоре MOS 6502. Я прикинул, что если напишу этот язык действительно быстро – если буду работать над ним днем и ночью и получу что-то работоспособное, – тогда я могу стать почти что знаменитостью. Люди станут говорить, что Стив Возняк написал первый «Бейсик» для 6502, как Билл Гейтс – для «Альтаира». Писать исходный код весьма увлекательно.
Я никогда по-настоящему не изучал разработку языков программирования. Когда я только начинал обучение в колледже, Аллен Баум копировал учебники в MIT, где он учился, и отправлял их мне. Так я кое- что узнал.
Я понял, что у языков программирования есть грамматическая структура, как у любого языка, и выяснил, как они устроены.
Я не знал, что интерпретаторы «Бейсика» для разных компьютеров, например для DEC и для HP, различались практически во всем. Я-то думал, что они все одинаковые и что разработка Билла Гейтса ничем не отличалась от других.
Так что я стянул на работе пару руководств по «Бейсику» для HP и изучил их. Я стал записывать на бумаге синтаксическую таблицу – грамматику компьютерного языка. Она определяет, какие команды может ввести программист.
Например, если бы в нашем языке была синтаксическая таблица, она бы объясняла, что личные местоимения вроде «он» или «она» – это примерно то же самое, что существительные, и обычно они становятся подлежащими в предложениях вроде: «Он бросил мяч». В этой таблице перечислялись бы все возможные глаголы, в том числе «бросил». И в ней были бы названы все возможные объекты, к которым они применяются, – вроде «мяча». В нашем языке миллионы вариантов для подлежащих, глаголов и объектов, но в языке типа «Бейсика» их число можно ограничить.
Нужны были правила. Допустим, вы написали часть уравнения:
5 + 3 ? 7. Если написать ее без скобок, математик поймет, что сначала нужно умножить, а потом сложить. Так что на самом деле речь идет о 5 + 21. Вот это правило – какое действие выполнять первым – и есть пример того, что определяется в синтаксической таблице.
Я ничего не знал о том, как другие писали свои языки программирования. Но мне казалось очевидным, что нужен «стек» для «существительных», где хранились бы числа, стек для «глаголов» (в том числе действий вроде сложения и умножения) и набор приоритетов для каждого глагола.
Основу своего «Бейсика» я написал примерно за четыре месяца. В итоге я исключил возможность вводить десятичные дроби (это также называют вычислениями с плавающей точкой) и использовал только целые числа. Кажется, это сэкономило мне около месяца времени. Я решил, что для игр и компьютерных симуляций – двух главных областей применения моего «Бейсика» – хватит и целых чисел.
Многие важнейшие в моей жизни программы, в том числе те, что я использовал в Колорадо, оперировали лишь целыми числами. Так что я запрограммировал свой «Бейсик» на работу лишь с числами от –32 768 до +32 787.
Я записал всю программу на бумаге – слева машинные коды, справа эквивалент в шестнадцатеричной системе счисления. Все это пришлось делать от руки, я не мог использовать программу для компоновки, как обычно. Точно так же мне пришлось писать небольшую программу для монитора.
И я решил: я же могу написать код сам, своими руками. Зачем мне компьютер?
Кстати, у меня все еще есть тот блокнот, в котором я писал свой «Бейсик». Кажется, его теперь можно выставлять в музее!
Так или иначе, в результате, когда мой «Бейсик 6502» был загружен в компьютер, я мог вводить маленькие программы с клавиатуры. Например, заставить компьютер спросить: «Как вас зовут?» И если вы печатали ответ, то ваше имя начинало летать по всему экрану. Сегодня это кажется таким простым, но тогда никто еще не имел опыта работы на маленьком компьютере, где можно было вводить программы с клавиатуры и тут же их исполнять.
Даже на машинах вроде «Альтаира» программировать было очень дорого: нужно было подключать специальную карту и длинный кабель для соединения с огромным уродливым телетайпом и его клавиатурой.
Несколько раз после собраний Клуба я показывал свой компьютер с «Бейсиком», и всякий раз у присутствующих глаза лезли на лоб.
Но возникла проблема. У Apple I не было постоянной памяти – ни жесткого диска, ни дискет, ни CD- дисковода, как у сегодняшних компьютеров. Так что каждый раз, когда мне нужно было запустить «Бейсик», приходилось включать компьютер и вбивать туда всю программу из блокнота. Эта программа занимала 4000