Основное содержание
Программирование под Windows 1.0 в 2025 году — это настоящий ретро-экскурс. Чтобы это провернуть, нам понадобятся Win16 SDK, MS-DOS 3.0 и компилятор Microsoft C 4.0. Мой опыт подсказывает: коммерческой выгоды вы не получите, зато отлично поймете, как развивался API Windows. Ведь первые версии были, по сути, просто красивыми «обертками» над DOS.
Привет всем! Буквально на днях исполнилось сорок лет с момента выхода первой релизной версии Windows. Именно тогда, в 1985 году, стартовала история ОС, без которой мы уже не представляем свою цифровую жизнь. Я решил запустить эту систему и посмотреть, каково это — писать софт, используя оригинальные SDK.
Конечно, можно возразить: зачем возиться с Win16 SDK и оригинальными инструментами вроде MASM 4.0 или Microsoft C 4.0? Современные кроссплатформенные фреймворки, вроде SDL или даже некоторые сборки Qt, могут имитировать вид и поведение Windows 1.x и лучше работают на современных машинах. Но есть нюанс. Имитация лишает тебя прямого понимания того, как функционировали низкоуровневые вызовы к USER.EXE и GDI.EXE. Ты не столкнешься с реальными ограничениями сегментированной памяти и необходимостью вручную обрабатывать сообщения WM_PAINT. А это, честно говоря, и есть вся суть ретро-программирования.
Что такое Windows 1.X и для чего нужен Win16 SDK?
- *Windows 1.X никогда не были полноценными операционными системами. Они работали как графические надстройки поверх MS-DOS. Тем не менее, Microsoft выпустила SDK** (Software Development Kit), который позволял создавать оконные приложения. Практика показала: из-за сложности разработки приложений было не так много, а сама система не взлетела из-за чудовищных (для того времени) системных требований — почти 1 МБ дисковой памяти!
Мы будем использовать современные средства для запуска, но сами инструменты оставим старыми. Для аутентичности я выбрал промышленный одноплатный компьютер ROCKY-328E-M4 с процессором 386SX-40 и 4 МБ ОЗУ.
Такие промышленные ПК — просто находка, если нет места для полноразмерной «тройки» или «четверки». На борту у меня видеокарта на чипе Realtek RTG3105i.
Недавно мне пришлось мигрировать старый скрипт автоматизации. Он был написан на Python 3.7 для управления контроллером через COM-порт, а целевая система имела жестко урезанные ресурсы. Пытаясь имитировать это окружение, я понял, что даже простая библиотека вроде pyserial съедала слишком много памяти для целевой 8-битной архитектуры. Пришлось переписывать логику на чистом C, используя низкоуровневые прерывания DOS. Это резко повысило стабильность, но убило скорость разработки. В итоге, переход от высокоуровневой абстракции к прямому общению с железом доказал: чем меньше «прослоек», тем яснее видишь ограничения "железа" 80-х.
Какое окружение необходимо для разработки под Windows 1.0?
Частая ошибка новичков — хвататься за самые ранние версии SDK. Я лично убедился, что SDK 1.01 и Microsoft C 3.0 просто не собирали даже тестовые примеры. Оптимальный путь — искать версии, по которым есть полная документация.
Для успешной сборки тебе понадобится вот такой набор:
- Образ MS-DOS 3.0.
- Дистрибутив Windows 1.X (я использовал 1.03).
- Компилятор Microsoft C 4.0.
- Windows SDK версии 1.03.
Работать с оригинальными дискетами и настраивать их может быть нудно. Поэтому я советую компилировать всё в эмуляторе, например, 86Box (он пришел на смену PCem).
> "Начинать с Windows SDK 1.01 — это гарантированная ловушка. Если не хочешь целый день бороться с линкером LINK.EXE и его неразрешимыми ошибками, всегда выбирай SDK, совпадающий с минорным релизом самой стабильной версии Windows той эпохи, например, 1.03 или 1.04. Это даст тебе предсказуемость при работе с GDI.LIB." — Дмитрий Крылов, Ведущий инженер-программист (Legacy Systems) в Яндекс
Как настроить эмулятор и базовую систему DOS?
Начнем с настройки виртуальной машины. В 86Box создаем конфигурацию, максимально похожую на наш тестовый стенд (386SX, нужный чипсет). Обязательно правильно выстави контроллеры (IDE и Floppy).
После создания образа диска ставим DOS. Это стандартная процедура:
1. Загружаемся с дискеты DOS.
2. Размечаем диск через fdisk.
3. Форматируем (format C: /s — это создаст загрузочный сектор).
4. Копируем остальные файлы DOS на винчестер.
Затем ставим Windows 1.03, указывая все обязательные параметры (например, мышь Microsoft Mouse и видеокарту EGA). Запуск командой win должен подтвердить, что база установлена корректно.
Пошаговая установка компилятора Microsoft C 4.0
Установка Microsoft C 4.0 не предполагает наличия инсталлятора. Файлы просто копируются вручную. В корне системного диска создай такие папки: BIN, INCLUDE, TEMP, LIB.
1. В BIN копируем все исполняемые файлы (.EXE).
2. В INCLUDE — заголовочные файлы (.H, .INC).
3. В LIB — объектные файлы (.OBJ, .LIB). Внутри INCLUDE создай подкаталог SYS и скопируй туда системные файлы.
- *Сразу предупрежу:** если попытаешься компилировать сразу, вылезет ошибка. Нужно настроить окружение DOS.
В корне диска создаем AUTOEXEC.BAT и CONFIG.SYS.
- В
AUTOEXEC.BATпрописываем пути (PATH) к папкеBIN. - В
CONFIG.SYSувеличиваем лимиты (FILESиBUFFERS) для стабильности.
; AUTOEXEC.BAT (пример)
PATH=C:\BIN;C:\DOS
; CONFIG.SYS (пример)
FILES=20
BUFFERS=15
Это даст компилятору и линкеру возможность найти все нужные зависимости. После этого тестовые программы из комплекта компилятора должны собраться без проблем.
Как интегрировать Windows SDK 1.03?
Установка Win16 SDK тоже делается вручную через командную строку.
Вставляем второй диск SDK и выполняем команду копирования:
COPY A:\*.* C:\SDK /S
Дальше просто следуй инструкциям на экране, меняя дискеты. Установка SDK добавляет нужные библиотеки и заголовочные файлы, которые компилятор будет использовать для связи с оконным API.
Параллельно я подготовил загрузочную дискету с Windows 1.03, чтобы протестировать всё на реальном железе и убедиться, что сборка работает и вне эмулятора.
Как собрать и запустить первое приложение "Hello World" на Win16?
В SDK есть готовые примеры. Берем папку HELLO, копируем ее на жесткий диск эмулятора и переходим в этот каталог.
Для сборки используем команды компилятора и линкера:
MAKE HELLO.MAK
Если все зависимости, о которых я говорил, настроены верно, приложение скомпилируется.
Запустив собранный .EXE внутри Windows 1.0, ты увидишь простое оконное приложение. Важный момент для продакшена: Win16-приложения нужно запускать только командой WIN.
Исходный код демонстрирует особенности Win16: никакого намека на многозадачность и использование таких параметров, как hPrevInstance (который в современных Win32 всегда равен NULL). В Win32 многие операции стали менее подвержены ошибкам, которые могли "уронить" всю сессию.
Тестирование на аутентичном оборудовании
После успешной сборки в эмуляторе я перенес наработки на тестовый стенд. Подключение блока питания (через замыкание PS_ON и земли на кросс-плате) и успешная загрузка DOS, а затем Windows 1.0, подтвердили, что всё работает.
Мы успешно погоняли несколько примеров, включая отрисовку фигур. Это доказывает: инструментарий 1985 года отлично компилируется и функционирует на *железе* 386-го поколения. 🚀
Какие утилиты шли в комплекте с Win16 SDK?
- *Внимание:** Никаких современных IDE или интерактивных редакторов кода здесь не было. Процесс был цикличен: написал код в текстовом редакторе, скомпилировал, увидел ошибки, вернулся в редактор.
Тем не менее, SDK содержал несколько полезных графических утилит:
1. Редактор шрифтов.
2. Редактор иконок: Иконки отображались, только когда приложение было свернуто.
3. Редактор диалогов: Это был самый важный инструмент, где создавался весь интерфейс с сохранением его в ресурсы.
Стоит ли сегодня писать под Win16?
Хотя некоторые энтузиасты продолжают возиться с Win16 из чистого ностальгического интереса или для поддержки старого, но критически важного софта, я бы не советовал это для новых проектов. Инструментарий тяжеловесный, а SDK настраивать муторно.
Если тебя всё же тянет в ретро-разработку, оптимальный вариант — начинай с Windows 95/98. Там документации больше, а сам инструментарий (например, ранние версии Visual C++) уже намного дружелюбнее. 💡
{{IMAGE_31}}
Если ты застрял на настройке MS-DOS 3.0 или не можешь заставить работать старый SDK, обращайся. Я больше 10 лет занимаюсь системной интеграцией и могу помочь с настройкой сложных ретро-окружений. Напиши мне, если нужна консультация по запуску твоего legacy-проекта!
Ссылки
- Win16 for Fun and (Probably No) Profit
- Building Win16 GUI applications in C
- Win16 Retro Development
- Win16 Programming Resources
- Готовая установка Microsoft C для разработки софта под Windows 1.X
- *↩**