arctic-engineers-club

Open full view…

Arctic DOS

bladez-fate
Thu, 28 Nov 2019 14:18:11 GMT

Делаю небольшую библиотеку, которая позволит собрать старые DOS-приложения написанные на Turbo C++ под компилятор Borland C 3.1. Я уже портировал три приложения с использованием этой библиотеки. Есть поддержка режима 640x480/16colors: реализовал на арктическом движке BGI: функции graphics.h. Пока не все, только те которые мне были нужны. Есть поддержка режима 320x200/256colors: эмуляция VGA драйвера, прерывания 10h и памяти по адресу 0xA0000000. Сделал свою через реализацию функции geninterrupt(), которая эмулирует поведение VGA-контроллера и поддерживает режим 13h. Можно задавать палитру использую запись в hardware порты устройства (inp()/outp()). Вместо прямого доступа к видеопамяти я подсовываю буфер, который периодически рисуется на экран. Рисование происходит не в каком-то отдельном треде, а в определенных точках синхронизации (delay()/bioskey()/getch()). По факту это те точки, когда пользователь должен увидеть картинку или предпринять действия. Можно такую точку вставить в программу явно и она нарисует кадр, если его давно не было. Поддержку текстового режима пока не делал. Есть поддержка sound(freq)/nosound(). Звук PC Speaker эмулируется генерацией ШИМ-сигнала заданной частоты через arctic::Sound, который перепроигрывается в точках синхронизации если требуется. Ну и есть поддержка всяких функций разбросанных по остальным заголовочным файлам Borland C 3.1. Далеко не всех, а скорее тех которые мне понадобились при портировании трех игр. Портирование игры сводится сейчас к созданию проекта через arctic/wizard, затаскиванию в него старого кода и кода моей библиотеки. Плюс нужно сделать некоторое количество замен в старом кода (нужно будет сделать автоматический инструмент для них). Замены вида int -> int_dos, long -> long_dos, "string literal" -> "string literal"_dos, #include "graphics.h" -> #include "dos/graphics.h" и т.п. Структуры оборачиваются в #pragma push(pack, 1). Инициализация сетчика выносится наружу из цикла. Ну и дальше надо собирать и справлять ошибки. У меня их оставалось немного, в основно предупреждения, которые легко исправляются. Хочется узнать насколько эта библиотека может быть кому-нибудь здесь полезна и интересна? Есть ли у кого-то старые игры с исходниками? какие графические/текстовые режимы используются? Интересна ли такая библиотека как отдельная запчасть движка?