Добавить в корзинуПозвонить
Найти в Дзене
Цифровая Переплавка

🍊 DONKEY.BAS: как игра про осла стала памятником рождению IBM PC

В 1981 году владельцу новенького IBM PC предлагали сесть за руль пиксельного автомобиля и уворачиваться от ослов, возникающих посреди дороги. Управление состояло фактически из одной кнопки: пробел перебрасывал машину с одной полосы на другую. Не успел нажать — столкновение, надпись «BOOM!» и очко ослу. Сегодня DONKEY.BAS выглядит почти анекдотом. Однако перед нами не просто примитивная игра из компьютерной древности, а компактная демонстрация возможностей первого IBM PC, ранний образец программирования графики на домашнем компьютере и неожиданная часть наследия Билла Гейтса. Теперь игру можно снова запустить прямо в браузере. Современная версия воспроизводит характерную графику CGA, звуки и механику оригинала с помощью JavaScript. Получился своеобразный интерактивный музейный экспонат: внешне — несколько цветных прямоугольников, внутри — целый пласт истории персональных компьютеров. Правила DONKEY.BAS можно объяснить за несколько секунд. В нижней части экрана находится автомобиль, доро
Оглавление

В 1981 году владельцу новенького IBM PC предлагали сесть за руль пиксельного автомобиля и уворачиваться от ослов, возникающих посреди дороги. Управление состояло фактически из одной кнопки: пробел перебрасывал машину с одной полосы на другую. Не успел нажать — столкновение, надпись «BOOM!» и очко ослу.

Сегодня DONKEY.BAS выглядит почти анекдотом. Однако перед нами не просто примитивная игра из компьютерной древности, а компактная демонстрация возможностей первого IBM PC, ранний образец программирования графики на домашнем компьютере и неожиданная часть наследия Билла Гейтса.

Теперь игру можно снова запустить прямо в браузере. Современная версия воспроизводит характерную графику CGA, звуки и механику оригинала с помощью JavaScript. Получился своеобразный интерактивный музейный экспонат: внешне — несколько цветных прямоугольников, внутри — целый пласт истории персональных компьютеров.

Игра, в которой осёл тоже ведёт счёт

Правила DONKEY.BAS можно объяснить за несколько секунд. В нижней части экрана находится автомобиль, дорога разделена на две полосы, а сверху время от времени появляется осёл. Машина движется вперёд автоматически, поэтому игроку остаётся только вовремя менять полосу.

Пробел переключает положение автомобиля. Клавиша Esc возвращает на заставку или завершает игру. Если машина избегает препятствия, очко получает водитель. Если сталкивается с ослом, очко записывается в колонку Donkey.

Именно эта предельная простота делает игру занятной и сейчас. Здесь нет разгона, торможения, поворота руля, уровней или сложной системы очков. Решение всегда двоичное: остаться на текущей полосе или перейти на соседнюю. По сути, DONKEY.BAS сводит автомобильную игру к проверке реакции.

Современные игры часто пытаются удержать человека десятками механик одновременно. DONKEY.BAS действует наоборот: один объект, две полосы, одна кнопка и немедленно понятное последствие ошибки. Это почти лабораторный образец игрового цикла.

🎮 Сначала игрок замечает препятствие.

👀 Затем сравнивает полосу осла с положением автомобиля.

⌨️ Если полосы совпадают, нажимает пробел.

💥 Если решение принято слишком поздно, машина разлетается на части.

🏁 После короткой паузы начинается следующий заезд.

Конечно, назвать это глубоким игровым процессом трудно. Но в 1981 году главная задача программы состояла не в том, чтобы конкурировать с игровыми автоматами. Она должна была показать, что новый персональный компьютер умеет выводить цветную графику, рисовать движущиеся объекты, принимать команды с клавиатуры и издавать звуки.

Зачем IBM понадобилась такая демонстрация

Ранние персональные компьютеры продавались не только характеристиками. Покупателю нужно было буквально показать, что с машиной можно делать. Сейчас мы ожидаем увидеть готовый рабочий стол, браузер, магазин приложений и набор предустановленных программ. В начале восьмидесятых компьютер нередко встречал человека строкой приглашения и мигающим курсором.

DONKEY.BAS поставлялась с ранними версиями IBM PC DOS и запускалась в BASICA — варианте BASIC, использовавшем встроенный в IBM PC интерпретатор. Для владельца компьютера это была одновременно игра, техническая демонстрация и учебный материал. Программу можно было запустить, а затем просмотреть её исходный текст и попробовать что-нибудь изменить.

В этом заключается важное отличие от большинства современных приложений. DONKEY.BAS не прятала устройство игры за исполняемым файлом. Пользователь видел строки программы, номера команд, переходы, циклы и координаты объектов. Любопытный подросток мог поменять скорость осла, положение машины или звуковой эффект — и сразу получить другую игру.

Можно сказать, что DONKEY.BAS выполняла роль интерактивного руководства по программированию. Она не объясняла каждую команду, но давала работающий пример, который разрешалось разбирать по частям. Для целого поколения именно такой метод — загрузить чужую программу, изменить несколько чисел и посмотреть, что сломается, — стал первым уроком разработки.

Билл Гейтс действительно писал этот код?

История особенно запомнилась благодаря авторам. Игру связывают с сооснователем Microsoft Биллом Гейтсом и программистом Нилом Конзеном. Сам Гейтс позднее рассказывал, что они работали над программой около четырёх часов утра в маленькой запирающейся комнате, где стоял опытный экземпляр IBM PC.

Условия секретности были серьёзными: IBM требовала держать прототип под замком. По воспоминаниям Гейтса, подходящее помещение больше напоминало тесный чулан, в котором к тому же было очень жарко. В этой обстановке разработчики писали небольшую программу, способную продемонстрировать встроенный BASIC, цветную графику и звук будущего компьютера.

Есть занятная деталь: в распространённых копиях исходного текста наверху указаны IBM, название программы и версия, но имена Гейтса и Конзена там не видны. Поэтому авторство известно прежде всего из позднейших воспоминаний и публичных рассказов, а не из заметной подписи в самом листинге.

Этот эпизод полезно вспоминать, когда Билла Гейтса представляют исключительно руководителем корпорации. На раннем этапе Microsoft её основатели не только заключали сделки и выбирали направление бизнеса, но и лично писали программы. DONKEY.BAS — далеко не самый выдающийся код Гейтса, зато, пожалуй, самый обаятельно неловкий.

Что происходит внутри программы

Исходный текст DONKEY.BAS занимает немногим больше сотни строк, если считать только содержательные пронумерованные строки сохранившейся версии. Но в нём умещаются заставка, проверка оборудования, построение дороги, создание изображений, обработка клавиатуры, подсчёт очков, звук и анимация аварии.

Программа сначала переключает компьютер в графический режим с разрешением 320 × 200 точек. Для CGA это был один из основных цветных режимов. По нынешним меркам разрешение крошечное: современный экран смартфона содержит во много раз больше точек даже по одной стороне. В 1981 году сам факт появления управляемой цветной картинки на экране персонального компьютера уже производил впечатление.

Дорога строится командами рисования линий и закрашенных прямоугольников. Центральная разметка создаётся короткими отрезками, которые повторяются через равные интервалы. Автомобиль и осёл тоже не загружаются из готовых файлов. Программа рисует их командами BASIC, захватывает получившиеся участки экрана в массивы и затем переносит эти изображения в нужные координаты.

Иными словами, привычных нам файлов с картинками здесь нет. Спрайт сначала создаётся непосредственно на экране, после чего его пиксели сохраняются в памяти. Для вывода используются команды GET и PUT: первая забирает прямоугольную область, вторая помещает сохранённое изображение обратно.

⚙️ Координата автомобиля хранится в переменной CX.

🫏 Полоса осла выбирается случайным образом между двумя возможными позициями.

🛣️ Ощущение движения создаёт перемещение препятствия вниз по экрану и обновление разметки.

⌨️ Любое подходящее нажатие во время заезда меняет полосу по выражению CX = 252 − CX.

🔊 Команда SOUND выдаёт короткие сигналы при движении, переключении полосы и столкновении.

Формула смены полосы особенно хороша своей лаконичностью. Вместо проверки «если машина слева, перенести направо, иначе перенести налево» программа вычитает текущую координату из постоянного числа. Для одной допустимой позиции получается координата второй, а для второй — первой. Одно выражение заменяет условное ветвление.

Столкновение определяется ещё проще. Программа проверяет, совпадает ли горизонтальная координата машины с полосой осла и успело ли препятствие опуститься до автомобиля. Никакой сложной геометрии или физической модели нет. Для игры с двумя фиксированными полосами этого достаточно.

Авария как маленький технический фокус

Самый выразительный момент DONKEY.BAS — столкновение. Машина и осёл не просто исчезают. Программа делит оба изображения на части, сохраняет фрагменты и несколько раз выводит их во всё более удалённых координатах. Одни куски летят к краям, другие смещаются вверх или вниз. Одновременно компьютер воспроизводит серию низких случайных звуков.

Получается примитивный, но узнаваемый взрыв. Это хороший пример того, как разработчики обходили ограничения оборудования. Вместо полноценной покадровой анимации используются уже имеющиеся кусочки изображения и несколько математических преобразований координат.

Любопытен и способ организации задержек. В коде встречаются пустые циклы: компьютер просто много раз увеличивает переменную, не выполняя полезной работы. Так программа даёт человеку время увидеть сообщение об аварии или победе. Сегодня подобный подход считается плохим решением: скорость задержки зависит от быстродействия машины, а процессор всё это время занят бессмысленными вычислениями. Но на компьютере с фиксированной и хорошо известной конфигурацией такой приём был дешёвым и понятным.

В исходнике также заметны особенности эпохи: множество переходов GOTO, номера строк, несколько команд в одной строке и короткие имена переменных. Читать подобный код современному разработчику непривычно. Однако было бы несправедливо оценивать его только по нынешним правилам. Перед авторами стояла задача быстро подготовить демонстрацию для конкретного компьютера, языка и интерпретатора с весьма ограниченными ресурсами.

Почему над DONKEY.BAS смеялись

У игры с самого начала были критики. Разработчики Macintosh вспоминали DONKEY.BAS как особенно неудачный пример программного обеспечения IBM PC: грубая графика, дёрганое движение, странная идея с ослом посреди дороги. Их реакцию легко понять. Если сравнивать игру с аркадными автоматами того времени, она и правда выглядит бедно.

Но подобное сравнение не совсем честно. DONKEY.BAS создавалась не как большой коммерческий проект. Это был демонстрационный образец, написанный в сжатые сроки для ещё не выпущенного компьютера. Его ценность находилась не только на экране, но и в возможности открыть исходный текст.

Более того, неуклюжесть игры помогла ей пережить десятилетия. Тысячи гораздо более качественных программ той эпохи сейчас помнят только специалисты. А нелепая гонка с ослом стала легендой именно потому, что сочетает громкие имена, историческое железо и почти абсурдный игровой замысел.

В 2001 году Microsoft даже показала трёхмерное переосмысление Donkey, написанное на Visual Basic .NET. Оно должно было продемонстрировать, насколько далеко язык BASIC продвинулся за двадцать лет. В новой версии появились трёхмерная графика, многопоточность, веб-службы и другие современные на тот момент технологии.

История, однако, сыграла хорошую шутку. Старая программа остаётся читаемой и воспроизводимой спустя четыре с лишним десятилетия, а более сложная версия столкнулась с проблемами совместимости из-за зависимости от устаревшего DirectX 8. Чем больше у программы внешних зависимостей, тем труднее сохранить её для будущих платформ.

Зачем переносить игру в браузер

Браузерная версия DONKEY.BAS не пытается превратить старую игру в современную гонку. Она сохраняет двухполосную дорогу, ограниченную палитру, резкие звуки и минимальное управление. Разработчики допускают некоторые отступления от оригинала, но общая логика остаётся прежней.

Это разумный подход к цифровой реставрации. Если заменить пиксельную машину объёмной моделью, добавить реалистичную физику и десятки препятствий, получится другая игра. А здесь важна именно возможность почувствовать ограничения IBM PC начала восьмидесятых — пусть и без настройки эмулятора, поиска образов дискет и изучения команд DOS.

JavaScript в данном случае становится своеобразным мостом между эпохами. Оригинал обращался к возможностям BASICA и CGA, а новая реализация использует средства современного браузера. Пользователь нажимает пробел, программа обновляет состояние игры, перерисовывает изображение и воспроизводит синтезированный звук. Конкретные механизмы другие, но наблюдаемое поведение узнаваемо.

Такие проекты нужны не только ради ностальгии. Интерактивная копия помогает понять старую программу лучше, чем фотография или видеозапись. Можно самому почувствовать задержку управления, оценить скорость осла, услышать звук аварии и заметить, насколько мало информации требовалось для полноценного игрового цикла.

Чему DONKEY.BAS может научить современных разработчиков

Первая мысль после знакомства с исходником обычно звучит так: «Неужели программы действительно писали подобным образом?» Да, писали — и на этом оборудовании такой код работал.

Но интереснее другой вывод. Технологии меняются, а основные задачи остаются удивительно знакомыми. Разработчику всё так же нужно хранить состояние, принимать ввод, обновлять координаты, обнаруживать столкновения, рисовать кадр и сообщать пользователю о результате.

DONKEY.BAS напоминает и о ценности законченных маленьких проектов. Игра примитивна, но она запускается, объясняет управление, ведёт счёт, реагирует на ошибки и позволяет начать заново. Это завершённый продукт, а не грандиозная задумка, остановившаяся на заставке.

Наконец, программа показывает, как ограничения способны дисциплинировать замысел. Две полосы позволяют заменить сложное управление одним переключением. Простые изображения создаются прямо кодом. Анимация взрыва собирается из фрагментов уже нарисованных объектов. Почти каждое решение продиктовано нехваткой памяти, быстродействия и инструментов — и именно поэтому его интересно разбирать.

Осёл, который пережил платформу

DONKEY.BAS вряд ли заслуживает места среди величайших игр. Зато она точно заслуживает места в музее вычислительной техники. В нескольких килобайтах здесь сошлись ранний IBM PC, история Microsoft, язык BASIC, цветная графика CGA и представление о компьютере как о машине, которую пользователь может не только запускать, но и перепрограммировать.

Браузерное возрождение игры подчёркивает парадокс цифровой истории. Программа, написанная на рассвете массовых персональных компьютеров, продолжает жить благодаря открытым копиям исходного текста и новым реализациям. Для её запуска больше не нужен IBM PC, дисковод или BASICA — достаточно открыть страницу.

Мой прогноз прост: ценность подобных восстановлений будет расти. Чем сложнее становятся современные программы, тем важнее сохранять ранние образцы, в которых весь механизм можно охватить взглядом. DONKEY.BAS интересна не вопреки своей примитивности, а благодаря ей. Это маленькое окно в эпоху, когда одна кнопка, четыре цвета и нарисованный командами осёл могли наглядно показать будущее персонального компьютера.

И да, спустя более сорока лет столкновение всё ещё заканчивается тем же убедительным «BOOM!».

Источники