- PVSM.RU - https://www.pvsm.ru -
Некоторые вещи с годами становятся только лучше. Например, классические игры, разработанные в эпоху DOS завораживают. Каждая из них — штучный продукт сделанный с большой любовью. К сожалению DOS платформа ушла в прошлое и вместе с ней уходят замечательные продукты. Вернуть их в современный мир — это ли не настоящий подарок?
Как? Очень просто! Интересующийся читатель, конечно же, помнит о проекте emscripten, благодаря которому C++ код может быть преобразован в JavaScript для работы в браузере. Именно с его помощью для браузера были адаптированы игры DOOM, Dune 2, TTD, X-COM и множество других. Однако этот путь долог и труден. На один проект может уйти до полугода. А если хочется все и сразу? Есть ли другой путь?
Есть другой путь — использовать DosBox. Действительно, зачем портировать каждый проект по отдельности, когда можно портировать всю DOS платформу (если быть точным, эмулятор MS-DOS). Эту гениальную идею воплотил Boris Gjenero в проекте em-dosbox [1]. Это порт DosBox в JavaScript выполненный с помощью emscripten.
Итак, сейчас я расскажу, как перенести «почти любую» DOS программу в браузер.
Ингредиенты:
Во время работы браузер загружает dosbox.js и пакет данных с программой (обычно это бинарный файл с упакованной директорией исходной программы). Скрипт dosbox.js есть ни что иное, как DosBox портированный в JavaScript, выполняясь он эмулирует платформу DOS с запущенной в ней программой.
Все просто. Клонируем репозиторий em-dosbox и компилируем с помощью autotools и make
git clone git@github.com:dreamlayers/em-dosbox.git
cd em-dosbox
./configure
make
В случае успеха в папке src появится dosbox.html и dosbox.js
dosbox_LDFLAGS = -s TOTAL_MEMORY=67108864 --pre-js pre.js --memory-init-file 0
В файле src/dosbox.cpp рекомендую выполнить замену
emscripten_set_main_loop(em_main_loop, 100, 1);
на
emscripten_set_main_loop(em_main_loop, 0, 1);
Эта правка позволит увеличить производительность на порядок. Но нужно учесть, что целевая программа должна быть достаточно умна и способна выполняться с одинаковой скоростью вне зависимости от производительности компьютера, иначе ваша программа будет работать слишком быстро.
Для ускорения работы эмулятора добавьте строки в функцию main в файле src/gui/sdlmain.cpp:
#ifdef EMSCRIPTEN
EM_ASM("SDL.defaults.copyOnLock = false; SDL.defaults.discardOnLock = true; SDL.defaults.opaqueFrontBuffer = false;");
#endif
em-dosbox поставляется со скриптом позволяющим упаковать директорию с программой в бинарный файл, который может быть использован совместно с dosbox.js. Например, что бы получить пакетный файл игры Dune 2, достаточно выполнить:
#python src/packager.py <имя пакета> <путь до директории> <исполняемый файл>
python src/packager.py dune2 ~/dune2 dune2.exe
В случае успеха буду созданы файлы dune2.html и dune2.data. HTML файл создается по шаблону dosbox.html (напомню, он лежит в папке src).
#86 строка
f.write("Module['arguments'] = [ '-conf', './dosbox.conf', './" + EXECUTABLE + "' ];n</script>n")
Итак, мы имеем три файла:
Разместив их на сервере мы сможем запустить программу в браузере.
Счастливого нового года.
50 новогодних подарков. [2]
Автор: Caiiiycuk
Источник [3]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/javascript/78488
Ссылки в тексте:
[1] em-dosbox: https://github.com/dreamlayers/em-dosbox
[2] 50 новогодних подарков.: http://js-dos.com/
[3] Источник: http://habrahabr.ru/post/247049/
Нажмите здесь для печати.