Я хотел создать производительный компьютер, а это означало, что в нем должны присутствовать микропроцессор и динамическая оперативная память (для экономии денег и деталей). Терминал у меня уже был. Дело оставалось за языком программирования. Да, у меня был компьютер с 4 Кбайтами ОЗУ. Он мог выполнять программы, но у меня не было языка программирования для микропроцессора. Поэтому, с одной стороны, я был немного разочарован, а с другой, пребывал в радостном возбуждении, поскольку собирался стать его творцом. Я надеялся, что это принесет мне определенную известность. Однако прославиться я мог лишь при условии, что сделаю все на высочайшем уровне.
Вот так получилось, что я был вынужден написать язык программирования для микропроцессора, но не забывайте, что раньше я этого не делал, не слушал лекций и не ходил на занятия по данному предмету. Поэтому я просто открыл руководство для сотрудников Hewlett‑Packard и прочел в нем описание языка Basic. Там я вычитал все команды Basic и приступил к созданию синтаксической таблицы, определяющей правила этого языка: какие команды в нем существуют, какие их последовательности допускаются, как заносить имена в переменные, как работать с числами, какого размера и формата они могут быть. Затем возникла идея (не знаю, откуда она ко мне пришла), сводившаяся к следующему: когда пользователь введет оператор, я буду просто сканировать его символ за символом, слева направо, и проверять на соответствие синтаксической таблице. Последнюю я занес в память. Я решил так: «Буду просматривать память, и, если оператор пользователя совпадет с записью в синтаксической таблице, то при переводе строки я буду знать все введенные символы». В этом и заключалась идея. Я не был знаком с правилами программирования микропроцессоров. И по сегодняшний день не знаю, как пишутся компиляторы.
Кроме того, мне было известно о существовании цифр и переменных, а также арифметических действиях. Цифры представляли собой субъекты, а арифметические действия – предикаты. Даже в операторе PRINT слово «print» становилось предикатом. Таким образом, я получил списки предикатов и теперь у меня были стек субъектов и стек предикатов. Оставалось только определить правила их взаимодействия и последовательность записи, например, с помощью обратной нотации.
Я был хорошо знаком с правилами обратной нотации из книг, которые прочел в колледже (а также из распечаток, сделанных для меня другом). Кроме того, в калькуляторах Hewlett‑Packard тоже применялась обратная польская нотация. Согласно этой форме записи уравнение «5 + 4» превращается в «5 ENTER 4 +», т. е. оператор записывается после операндов. Но как преобразовать эти данные? Для меня это оказалось посильной задачей, поскольку в данной области я имел некоторые знания.
Итак, я создал свою версию языка Basic, и она работала. Это был самый трудный проект в моей жизни. Как правило, вы просто устанавливаете программу в компьютер. Это единственный способ заставить его функционировать. Ввод программы осуществляется с помощью клавиатуры или карт. Но мне пришлось вручную записать свою программу на левой половине страницы, а затем преобразовать команды на понятный компьютеру язык – в машинный код, состоящий из последовательности нулей и единиц. Если в программе требовалось выполнить смещение на 19 байт, то приходилось записывать число 19 в двоичном коде (в виде нулей и единиц). Я делал это вручную, поскольку у меня не было программы‑компилятора, которая выполнила бы данную задачу за меня. То есть я программировал на самом низком из существующих уровней. Что касается самого компьютера, то я не только начертил его на бумаге (я любил чертить все свои устройства на чертежной доске), но и соединил все его детали, определил, когда их можно реализовать в виде плат, а также смонтировал их на платах.
Оставаясь верным минималистскому подходу, я сделал соединения на платах как можно короче и тоньше, а не такими спутанными, как на стандартных платах того времени. Кроме того, я был хорошим техническим специалистом, поэтому тестировал каждое свое действие, проверял напряжение и наличие сигналов, анализировал ошибки. У меня возникали новые идеи, и я добавлял новые микросхемы. Я был технарем и создал компьютер Apple своими руками.