Каждый раз, когда я прибегал с идеей к Биллу, он лопал ее, как мыльный пузырь.
– Для этого нужен батальон народу и куча денег, – говорил он.
Или:
– Ну, это уж чересчур сложно.
Слишком свежи были его воспоминания о крахе нашей Traf-O-Data.
– Мы не боги в аппаратном обеспечении, Пол, – повторял он мне. – Наше дело – программы.
И он был прав. Мои идеи или опережали время, или были нам не по зубам. И подумать было смешно, что два пацана из Бостона побьют IBM на их поле. Здравый смысл Билла не давал нам тратить время там, где нам вообще не светила удача.
И когда в декабре появилась реальная возможность, я в нее вцепился.
Некоторые считают наш Бейсик для «Альтаира» серьезным достижением, потому что мы создали язык, не видя «Альтаира» и даже не имея микропроцессора Intel 8080, на котором строилась машина. Мы в самом деле добились небывалого, но не все понимают, что у нас просто не было выбора. «Альтаир» практически представлял собой коробку с центральным процессором внутри. В нем не было жесткого диска, дисковода для гибких дисков, негде было редактировать и хранить программы. И даже будь у него все это, отладка программ на 8080-м с ограниченной памятью была бы долгим и трудным занятием.
И любой программист, решивший представить в Альбукерке Бейсик для 8080-го, столкнулся бы с громадными проблемами. Он должен был бы для начала сообразить, что нужен симулятор, а затем создать его с нуля на большом компьютере или мини-компьютере. Мы с Биллом получили серьезное преимущество в скорости и производительности за счет средств разработки для нашей Traf-O-Data. Но могли ли мы на самом деле написать интерпретатор Бейсика?
Работу мы строили так же, как и при создании Traf-O-Data. Я должен был создать средства, макроассемблер и симулятор, а Билл занимался структурой интерпретатора. В отличие от пожирающего ресурсы компилятора, который преобразует целый файл исходного кода в Ассемблер или машинный язык, интерпретатор выполняет по одному фрагменту кода, что позволяет снизить издержки пользователей «Альтаира». В то время четыре килобайта памяти стоили в розницу чуть меньше трехсот долларов – приличная сумма для 1975 года, но не препятствие для безумного любителя. Задача была сложная, но мы были уверены, что втиснем упрощенный вариант интерпретатора в эти четыре килобайта, чтобы еще осталось место для маленьких программ, написанных пользователем.
Один важный участок нашего Бейсика оставался белым пятном: операции с плавающей запятой, которые необходимы при работе с большими числами и десятичными дробями в экспоненциальной форме
[3]. Однажды мы с Биллом ужинали в кафе «Кариер-Хауса», где продвинутые студенты-математики болтали о гиперкубах и геометрии пяти измерений. Я вслух пожаловался, что придется самому писать математические подпрограммы, и тут кучерявый новичок, сидевший напротив, неожиданно сказал:
– Я делал их для PDP-8.
Мы потащили его в комнату Билла обсуждать наши проблемы – и так мы нашли Монте Давидоффа (Монте выторговал за работу 400 долларов сразу и еще несколько тысяч за доработку в Альбукерке).
Решив затруднение, мы отправились в гарвардскую «Вычислительную лабораторию Айкена» на Оксфорд-стрит – одноэтажное бетонное здание, где стояли обычно незанятые терминалы разделенного времени. Сроки поджимали нас с самого начала. Билл сказал Эду Робертсу, что наш Бейсик почти готов, и Эд ответил, что хотел бы посмотреть его примерно через месяц. На деле же у нас не было даже инструкции по эксплуатации 8080-го. Купив инструкцию, я принялся за работу. У 8080-го оказалось в два с лишним раза больше команд, чем у 8008-го, а значит предстояло написать множество макросов. Но основы архитектуры у двух этих чипов были сходные, так что общий подход оставался прежним. Мне снова требовалось превратить программы PDP-10 в Ассемблер для микропроцессора. Я закончил макросы за пару дней.
Мой симулятор для 8080-го получился больше, но по сути таким же, что и для Traf-O-Data; и я снова модифицировал отладчик PDP-10, чтобы мы могли остановить программу и заглянуть внутрь нашего Бейсика. Бывают в жизни программиста моменты, когда все складывается, когда мозг работает на полную мощность; для меня это был один из таких моментов. Меня воодушевил новый видеомонитор у Айкена (или «стеклянный телетайп» – на жаргоне того времени) – DEC VT05. Очень помог доступ к высокоскоростному принтеру и жесткому диску PDP-10. Через месяц у нас были средства разработки для нового чипа, каких не было больше нигде. Пакет программ для 8080-го получился быстрым и мощным. Я до сих пор горжусь им.
Мои средства разработки дали нам начальный толчок, а программистский талант Билла позволил быстро двигаться вперед. К тому времени, как я доделал набор инструментов, Билл уже продумал структуру интерпретатора. Как сейчас вижу: Билл то шагает по комнате, то сидит, раскачиваясь на стуле, а потом начинает писать в желтом разлинованном блокноте; у него пальцы были в пятнах от разноцветных фломастеров. Когда я закончил симулятор, Билл пересел за терминал. Он, раскачиваясь, проглядывал записи, затем стремительно набивал код, держа руки в своей странной манере, и снова читал. Он мог сидеть так часами без перерыва.
Создавая наш доморощенный Бейсик, мы заимствовали кое-что из предыдущих версий – давнишняя программистская традиция. Языки развиваются, идеи смешиваются; в компьютерной технике мы все стоим на чьих-то плечах. Шли недели, задача все больше захватывала нас. Насколько нам было известно, мы создавали первый язык программирования высокого уровня специально для микропроцессора. Иногда мелькало подозрение, что какая-нибудь группа в Массачусетском технологическом или в Стэнфорде может опередить нас, но мы отбрасывали эти мысли. Мы справимся? Мы можем завершить работу и отчитаться в Альбукерке? Да, можем! Мы энергичны и умелы, мы ни за что не упустим такую возможность.
Мы работали без перерыва, в две смены по выходным. Билл практически забросил учебу. Монте как-то проспал занятия по французскому, которые начинались в час дня. Я игнорировал работу в Honeywell, появляясь в офисе в обед. Дотерпев до половины шестого, я возвращался к Айкену, где сидел часов до трех утра. Я сохранял файлы, спал часов пять-шесть – и все сначала. Мы обедали в гарвардской пиццерии или брали по тарелке «пупу» в «Аку-Аку» – местной версии ресторанов «У торговца Вика». Я очень любил их яичные роллы и жареные креветки.
Во время наших ночных бдений я иногда замечал, что Билл дремлет у терминала. Порой он на середине строки начинал клониться вперед, пока не тыкался носом в клавиатуру. Продремав час или два, Билл открывал глаза, приглядывался к экрану и, моргнув пару раз, продолжал точно с того места, где остановился, – потрясающий дар концентрации.
Работая в таком тесном сотрудничестве, мы трое сдружились. Поскольку наша программа выполнялась на верхнем уровне многопользовательской операционной системы TOPS-10, мы могли работать одновременно. Мы устраивали соревнования: кто напишет подпрограмму с меньшим числом команд; разбредались с блокнотами в разные углы и начинали строчить. Потом кто-нибудь подавал голос: