Введение: С чего начиналась эра персональных компьютеров

Когда вы в очередной раз настраиваете Docker-контейнер или подключаете тяжеловесную библиотеку для тривиальной задачи (потому что написать три строчки самому — это слишком просто, а поставить 500 Мб зависимостей из npm — в самый раз), представьте себе разработчика, у которого в распоряжении есть всего 16 килобайт оперативной памяти и палящие лампы отельного номера. Представили? Именно в таких условиях рождался код, изменивший мир навсегда.

Ровно 45 лет назад свет увидел культовый код, ставший культурным артефактом целой эпохи — программу DONKEY.BAS. Написанная всего за 131 строку на интерпретируемом BASIC, она поставлялась с самыми первыми версиями IBM PC DOS (1981 год). Утилита не просто демонстрировала возможности железа, но и доказывала: персональный компьютер может быть интерактивным.

В этой статье мы разберем исторический контекст создания утилиты, заглянем внутрь ее исходного кода и посмотрим, чему современные разработчики могут научиться у пионеров индустрии.

Исторический контекст: IBM, Microsoft и рождение легендарного железа

В конце 1970-х годов рынок захватывали домашние компьютеры вроде Apple II и TRS-80. Корпорация IBM, доминировавшая на рынке мейнфреймов, поняла, что упускает революцию микрокомпьютеров. Так родился секретный проект «Chess» (Шахматы) по созданию массового ПК.

Для разработки софта IBM привлекла молодую компанию Microsoft. Требовалось создать надежный интерпретатор BASIC, способный работать на ограниченном железе. Итогом стало решение, зашитое в ПЗУ (ROM) или поставляемое на дискетах с PC-DOS. Но чистому движку нужна была витрина — приложение, способное продать концепцию нового устройства не инженерам, а обычным людям. И здесь на сцену вышли ночные дедлайны.

Авторы проекта: Билл Гейтс и Нил Палмер за работой

Один из самых интересных фактов о DONKEY.BAS — ее авторство. Игра была написана Биллом Гейтсом и инженером IBM Нилом Палмером в спешке, буквально за несколько часов до презентации нового компьютера руководству IBM.

«Мы сидели в комнате в отеле до четырех часов утра, пытаясь закончить код. Билл постоянно засыпал прямо за клавиатурой, но игра была готова вовремя», — вспоминал Пол Аллен.

Сценарий классический для IT-индустрии: горящие глаза, кофе рекой и продукт, рожденный вопреки здравому смыслу, физической усталости и принципам Clean Code (тут царствовал сплошной GOTO, но никто не жаловался).

Анатомия кода: разбираем 131 строку BASIC

Давайте посмотрим, как выглядел код классической мини-игры ранней эпохи ПК. Ниже приведена концептуальная выдержка из оригинального интерпретатора:

10 RANDOMIZE TIMER
20 SCREEN 1,0: COLOR 0,1
30 LOCATE 12,10: PRINT "DONKEY.BAS"
40 ' Инициализация игровой логики и позиций спрайтов
50 X = 160: Y = 170
60 IF INKEY$ = "" THEN 60
75 ' Главный цикл отрисовки препятствий
80 CLS
90 DRAW "BM +0,-1"

Код демонстрирует ключевые особенности того времени:

  • Ручное управление памятью и состоянием экрана (команда SCREEN 1 для работы с разрешением 320x200 в четырех цветах).
  • Отсутствие структурированного программирования: повсеместное использование номеров строк и переходов по меткам через GOTO.
  • Прямая работа с прерываниями клавиатуры (INKEY$).

В эпоху, когда даже простой скроллинг требует мегабайтов фреймворков, этот олдскульный синтаксис заставляет по-новому взглянуть на производительность.

Наследие и влияние на современный гемдев

Сегодня DONKEY.BAS воспринимается как забавный артефакт (и отличный повод поностальгировать для тех, кто застал перфокарты или хотя бы дискеты 5.25), но в свое время он заложил важные принципы разработки игр под ограничения ресурсов. Когда современные разработчики борются за каждый килобайт в WebAssembly или оптимизируют мобильные игры под бюджетные чипсеты, они решают ту же задачу, что и Гейтс в 1981 году — как выжать максимум из имеющегося железа.

В конце концов, даже самые сложные современные движки вырастают из таких вот простейших циклов обработки ввода и отрисовки пикселей.

Заключение