Техническое чудо 90-х: как Quake работал в DOS и Windows 95 с одним исполняемым файлом
Середина 90-х годов, возможно, была периодом самых стремительных изменений в истории ПК. Появление видеокарт с 3D-ускорением, переход от текстовой операционной системы DOS к графической Windows 95 и зарождение интернета — всё это создавало серьёзные вызовы для разработчиков игр, которым приходилось выбирать, под какую платформу писать свои проекты.
В чрезвычайно детальном материале Фабьен Санглар объясняет, как оригинальный «Quake» получил поддержку TCP/IP и, по сути, стал единственной игрой того времени, которая использовала один и тот же исполняемый файл с нативной поддержкой обеих операционных систем.
Многие игры той эпохи, такие как «Fallout», «Grand Theft Auto» и «Mortal Kombat 3», поставлялись с отдельными исполняемыми файлами для DOS и Windows 95. Однако id Software хотела, чтобы «Quake» использовал практически один и тот же исполняемый файл (и кодобазу), и чтобы игра имела поддержку TCP/IP — интернет-протокола связи. Игра по сети с более чем одним человеком тогда была в новинку; настоящий мультиплеер часто ограничивался домашними или офисными сетями.
Выполнить оба требования одновременно для «Quake» было непростой задачей. DOS к моменту разработки игры уже устарела и требовала множества костылей, чтобы использовать все аппаратные возможности того времени, в частности, но не только, более 640 КБ оперативной памяти.
Чтобы обойти ограничения DOS, игры начали включать расширители DPMI (DOS Protected Mode Interface), такие как Watcom's DOS/4GW или CWSDPMI. Эти расширители предлагали стандартизированный интерфейс памяти, многозадачность и другие возможности. Расширитель технически служил микроядром, так что думайте о нём как о замене DOS. Обычно игры поставлялись с целевым DPMI-сервером и были его единственным клиентом.
Во время разработки «Quake» id хотела перейти от (на тот момент) проприетарного компилятора Watcom, использовавшегося в «Doom», к опенсорсному инструментарию djgpp, чтобы сделать кроссплатформенную разработку гораздо проще. У «Quake» даже был порт для DEC Alpha, если кто-то ещё помнит такие. В отличие от обычной практики, id попросила инженеров djgpp обеспечить, чтобы их DPMI-клиент поддерживал встроенный DPMI-сервер Windows 95 в дополнение к CWSDPMI.
Проблема была в том, что хотя DPMI и был стандартом, его спецификация не была окончательно утверждена до конца 90-х. Это означало, что на практике клиентское программное обеспечение обычно зависело от одного конкретного сервера. Но команда djgpp справилась, и старший инженер ядра Microsoft Рэймонд Чен прямо заявил:
«Тот факт, что программы, похоже, работают более-менее нормально, несмотря на запуск под чужим расширителем, либо совершенно поразителен, либо совершенно очевиден, в зависимости от вашей точки зрения».
В «Quake» действительно была встроена нативная поддержка TCP/IP, но поскольку игра была кроссплатформенной, ей нужен был способ взаимодействовать с TCP/IP-слоем Winsock в Windows 95. Кроме того, внутриигровые браузеры матчей/серверов в то время были новой концепцией, поэтому id убила двух грантов одной ракетой, воспользовавшись помощью Mpath Interactive и интегрировав её программное обеспечение для подбора матчей Mplayer в «Quake».
Программное обеспечение Mplayer состояло из двух частей: «Gizmo» — браузер игр, который автоматически обнаруживал любые установленные игры, совместимые с Mplayer, и показывал списки игровых комнат для них, и решение под названием «Chunnel» — компонент, который фактически общался с TCP/IP-стеком Windows.
Структурная схема кроссплатформенности Quake. Изображение: Fabien Sanglard
Для завершения кроссплатформенности «Quake» также поставлялся с genvxd.dll от Mpath. Это виртуальный драйвер устройства, который преобразовывал сетевые функции DOS (которые сами используют теперь стандартные вызовы функций BSD-сокетов) в Winsock Windows 95. После его установки путь наконец был завершён, и «Quake» мог беспрепятственно работать как в DOS, так и в Windows, без необходимости в отдельных установщиках или исполняемых файлах.
Чтобы ознакомиться с техническими деталями, обязательно посетите глубокий разбор Фабьена Санглара. Если этот разговор вызвал у вас желание снова поиграть в оригинальную игру, смело берите её ремастированную версию.
Источник: Tomshardware.com










0 комментариев