1. Настройка окружения Open Watcom и основы защищенного режима DOS4GW
Настройка окружения Open Watcom и основы защищенного режима DOS4GW
Приветствую, коллега! На дворе 2026 год. Казалось бы, зачем нам MS-DOS, когда существуют нейросети, пишущие код за нас, и фотореалистичные движки? Ответ прост: чтобы создавать шедевры уровня Fallout 1 или Touhou, нужно понимать, как компьютер «думает». DOS — это идеальная песочница, где между вашим кодом и железом нет десятков слоев абстракции.
Вы упомянули, что обучение языку C идет медленно. Это нормально. Изучать C в вакууме скучно. Мы пойдем другим путем: будем изучать язык C через практику создания игр. Каждая строчка кода будет иметь смысл и видимый результат.
Сегодня мы настроим инструменты и разберем фундамент: память, защищенный режим и базовый синтаксис C, необходимый для старта.
Архитектура: почему 16 бит — это мало?
Чтобы написать игру масштаба Fallout, нам нужно много оперативной памяти. Стандартный MS-DOS работает в реальном режиме (Real Mode), который ограничивает нас 16-битными адресами.
Что такое 16 бит? Это размер регистра процессора. Максимальное число, которое в него помещается, вычисляется так:
где — максимальное значение адреса, — основание двоичной системы, а — количество бит.
Это всего 64 Килобайта памяти, доступной напрямую. Чтобы адресовать 1 МБ памяти в старом DOS, использовалась сложная формула сегментации:
где — физический адрес в памяти, — адрес начала блока памяти (сегмента), а — смещение внутри этого блока.
Для новичка это ад. Вы не можете просто создать огромный массив для карты игрового мира.
Решение: Защищенный режим и 32 бита
Мы будем использовать Open Watcom и расширитель DOS4GW. Это переводит процессор в защищенный режим (Protected Mode). Процессор становится 32-битным.
Посчитаем доступную память:
где — адресное пространство в 32-битном режиме.
В этом режиме память — это сплошная линия (Flat Memory Model). Хотите загрузить спрайт размером 5 МБ? Просто выделяете память и работаете. Именно так были написаны Doom и Duke Nukem 3D.
Экспресс-курс C для DOS-игр
Прежде чем писать код, давайте разберем базу языка C, которая критически важна для игр. C — это язык строгой типизации. Это значит, что вы должны четко сказать компьютеру, что именно лежит в ячейке памяти: буква, целое число или дробное.
1. Переменные и типы данных
В 32-битном DOS (Open Watcom) основные типы выглядят так:
char (1 байт): Используется для хранения символов или цвета пикселя (от 0 до 255). В Touhou*-подобных играх это основной тип для графики в 256-цветном режиме.
* short (2 байта): Короткое целое число (до 32 767). Экономит память.
* int (4 байта): Стандартное целое число (до 2 миллиардов). Используется для координат игрока, здоровья, очков.
* float (4 байта): Число с запятой. Нужно для плавной физики движения.
2. Функция main
Любая программа на C начинается с функции main. Это точка входа.
3. Библиотеки
C сам по себе умеет мало. Чтобы вывести текст на экран или считать нажатие клавиши, мы подключаем библиотеки командой #include.
* #include <stdio.h> — Standard Input/Output (ввод-вывод). Нужна для printf.
* #include <conio.h> — Console Input/Output. Специфична для DOS, нужна для работы с клавиатурой (getch).
Установка инструментов (Версия 2026)
Нам нужен компилятор и эмулятор.
Шаг 1: Open Watcom v2
C:\WATCOM. Пути без пробелов — это закон DOS.Шаг 2: DOSBox-Staging
Используйте DOSBox-Staging. Он лучше эмулирует современное железо и работает стабильнее на новых ОС.
C:\DOSGAMES.[autoexec]) пропишите:Практика: Пишем код и разбираем синтаксис
Создайте файл game.c в папке C:\DOSGAMES. Напишем программу, которая покажет мощь 32-битного режима.
Компиляция и запуск
Самый важный момент. Мы должны сказать компилятору: «Собери это для 32-битного защищенного режима».
Разбор команды:
* wcl386 — Watcom Compile and Link для процессора 386 (первый 32-битный процессор Intel).
* /l=dos4g — Linker option. Мы связываем программу с расширителем DOS4/GW.
* game.c — ваш файл.
После компиляции появится game.exe. Запустите его в DOSBox.
Вы должны увидеть:
Если вы видите Size of int: 4 bytes, поздравляю! Вы официально программируете в защищенном режиме. У вас есть доступ ко всей памяти компьютера (в рамках эмулятора), и вы готовы загружать тяжелую графику.
Что дальше?
Вы сделали первый шаг. Вы не просто скопировали код, а разобрали базовые типы данных C (int, char) и поняли, как работает память в DOS.
В следующем уроке мы применим эти знания для работы с указателями — самой сложной, но мощной темой в C. Мы будем использовать указатели, чтобы напрямую менять байты в видеопамяти и рисовать графику, как это делали создатели Doom. Готовьтесь, будет интересно!