Можно ли запустить Doom на первом советском суперкомпьютере?
Я уже рассказывал про выставку, посвящённую Сергею Лебедеву и его главному детищу — компьютеру БЭСМ-6. Естественно, мне не могли не задать вопрос «А можно ли запустить на нём Doom?».
Давайте разбираться!
Вообще запуск Doom на не предназначенных для того устройствах — это уже своего рода спорт. На чём только не заставляли работать легендарный шутер 1993 года — умные часы, банкоматы, принтеры, фотоаппараты, научные калькуляторы... Кто-то вспомнит даже тест на беременность, но я посмотрел внимательно — в том опыте он использовался только как экран, так что незачёт.
В любом случае, на фоне таких смешных девайсов мощнейшая ЭВМ своего времени, рассчитывавшая ответ на главный вопрос Вселенной термоядерные реакции и изменения климата в масштабах всей планеты, уж наверняка должна выступить достойно? А вот, оказывается, не всё так просто.
Первая трудность очевидна: Doom предназначен для компьютеров с совершенно иной архитектурой. Взять исполняемый файл готовой игры нельзя, нужно обращаться к исходному коду. Отдельные фрагменты игрового движка написаны на языке ассемблера для процессоров x86, которые по системе команд с БЭСМ-6 несовместимы. Основная часть, впрочем, написана на C, и в принципе C-компилятор под БЭСМ-6 существует, хотя и скорее экспериментальный. В любом случае, тем, кто захотел бы запустить Doom на тёплом ламповом транзисторном суперкомпьютере, пришлось бы потратить немало труда, адаптируя и отлаживая код игры.
Но даже если эту работу удалось бы успешно завершить, следом встал бы вопрос вычислительных ресурсов. БЭСМ-6 показывала хорошую производительность в научных расчётах, для которых характерны операции с плавающей запятой. Иными словами, она могла с равной точностью обрабатывать очень большие и очень малые числа и не тратить время на их преобразование.
Но движок Doom в основном использует операции с фиксированной запятой либо вовсе целочисленные. То, что БЭСМ-6 имеет разрядность 48 бит против 32 бит у процессоров 1990-х годов, тоже особенно ни к чему: точность для динамичных игрушек не важна, важна скорость. Например, в первой PlayStation все координаты вершин вообще могли быть только целочисленными — и ничего, на ней вполне прилично смотрелись 3D-игры своего времени (включая тот же Doom).
Минимальная конфигурация для запуска игры на PC (и играть на ней было страданием — дядя пожил, дядя помнит) — процессор i386 с частотой 33 МГц и 4 Мб оперативной памяти. Такой камень имеет производительность около 4,3 MIPS (миллионов операций в секунду), тогда как БЭСМ-6 — всего 1 MIPS, да и памяти у советской машины только 800 Кб, если пересчитать с машинных слов на байты.
К тому же ЭВМ 1960-х годов, рассчитанная на пакетное решение задач с выводом результатов в текстовом формате, просто не имела достаточно быстрых периферийных устройств для отображения игровой графики. Иными словами, пришлось бы изобретать для неё ещё и какой-то аналог RAMDAC (преобразователя битовой карты в памяти в видеосигнал).
В общем, ответ на вопрос «А можно ли?» — «А нельзя!». И это лишний повод задуматься о скорости прогресса в вычислительной технике. Даже игрушка 30-летней давности, которую, кажется, уже можно запустить даже на брелке для ключей, оказалась слишком требовательной для одного из мощнейших суперкомпьютеров 1960-х годов. И это не проблема конкретно БЭСМ-6: её заграничные современники вроде CDC 6400 тоже не справились бы с задачей. А ведь это были машины стоимостью в миллионы советских рублей и миллионы долларов.
Сильно ли грустили работники советских НИИ от того, что не могли отстреливать какодемонов в 35 fps? Едва ли. У них было достаточно игр, которые ЭВМ тех лет вполне могли потянуть, причём я сейчас не о Tetris или Pac-Man. Первые игры для больших машин начали появляться в СССР ещё в 1970-х. Самая ранняя — предположительно игра в слова, похожая на «Балду». Известно, что она могла самообучаться, запоминая слова, составленные игроками. По легенде, это же её и погубило: шутники-программисты научили программу матерным словам, и когда начальство увидело, что компьютер выдаёт нецензурщину, играть запретили. Текст этой игры пока не найден.
До наших дней дошли логическая игра «Калах» (популярная в США разновидность игр типа манкала, или «игр в зёрна»), игра «Волки и овцы» на упрощённом поле и игра «Посадка на Луну». Это локализованная версия игры Lunar Lander, изначально написанной на языке Fuckall Фокал для миникомпьютера DEC PDP-8 в 1969 году. Единственное, чем управлял в ней игрок, это расход топлива. Отслеживая скорость и массу модуля и его высоту над поверхностью Луны, нужно было менять интенсивность сжигания горючего, чтобы в итоге совершить мягкую посадку. Если вы обсчитались, игра писала, что «на Луне возник новый кратер глубиной N футов».
Да, в те времена с геймерами никто не сюсюкался.
В целом нельзя сказать, что советские программисты были изолированы от мирового развития игровой индустрии. Окольными путями в СССР попадали исходные тексты культовых западных игр, в частности, Colossal Cave Adventure и Star Trek. Их переводили на русский язык, адаптировали к имеющемуся оборудованию, иногда даже совершенствовали. По воспоминаниям сотрудников, когда в конце 1980-х в Институте точной механики и вычислительной техники появилась версия Star Trek, в которой можно было соревноваться друг с другом, работа на несколько дней оказалась парализована.
Ну а с массовым распространением IBM PC-совместимых персоналок начался современный этап развития игровой культуры, но это уже, как говорится, совсем другая история.