Пользователь
0,0
рейтинг
31 декабря 2014 в 05:00

Разработка → em-dosbox и 50 подарков на новый год

Некоторые вещи с годами становятся только лучше. Например, классические игры, разработанные в эпоху DOS завораживают. Каждая из них — штучный продукт сделанный с большой любовью. К сожалению DOS платформа ушла в прошлое и вместе с ней уходят замечательные продукты. Вернуть их в современный мир — это ли не настоящий подарок?


Как? Очень просто! Интересующийся читатель, конечно же, помнит о проекте emscripten, благодаря которому C++ код может быть преобразован в JavaScript для работы в браузере. Именно с его помощью для браузера были адаптированы игры DOOM, Dune 2, TTD, X-COM и множество других. Однако этот путь долог и труден. На один проект может уйти до полугода. А если хочется все и сразу? Есть ли другой путь?

em-dosbox


Есть другой путь — использовать DosBox. Действительно, зачем портировать каждый проект по отдельности, когда можно портировать всю DOS платформу (если быть точным, эмулятор MS-DOS). Эту гениальную идею воплотил Boris Gjenero в проекте em-dosbox. Это порт DosBox в JavaScript выполненный с помощью emscripten.

Итак, сейчас я расскажу, как перенести «почти любую» DOS программу в браузер.

Ингредиенты:
  • Браузер
  • em-dosbox (dosbox.js)
  • Программа корректно работающая в DosBox


Во время работы браузер загружает dosbox.js и пакет данных с программой (обычно это бинарный файл с упакованной директорией исходной программы). Скрипт dosbox.js есть ни что иное, как DosBox портированный в JavaScript, выполняясь он эмулирует платформу DOS с запущенной в ней программой.

Компиляция dosbox.js


Все просто. Клонируем репозиторий em-dosbox и компилируем с помощью autotools и make
git clone https://github.com/dreamlayers/em-dosbox.git
cd em-dosbox
./configure
make

В случае успеха в папке src появится dosbox.html и dosbox.js

Повышение производительности em-dosbox
Добавляем к dosbox_LDFLAGS в src/Makefile.am опцию --memory-init-file 0. Эта опция отключает генерацию файла памяти, который используется для ускорения загрузки. В нашем случае этот файл будет размером порядка тридцати мегабайт, что не применимо для браузера.
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).

Изменение настроек dosbox
По умолчанию, dosbox будет запущен со стандартной конфигурацией. Что бы её изменить просто создайте в папке с программой файл dosbox.conf. И измените скрипт сборки следующим образом:
#86 строка
f.write("Module['arguments'] = [ '-conf', './dosbox.conf', './" + EXECUTABLE + "' ];\n</script>\n")


Запуск


Итак, мы имеем три файла:
  • program.html
  • program.data
  • dosbox.js


Разместив их на сервере мы сможем запустить программу в браузере.

Счастливого нового года.
50 новогодних подарков.

Список адаптированных игр
С помощью em-dosbox были адаптированы для браузера следующие игры:
  • Abuse
  • Alley Cat
  • Another World
  • Arcade Volleyball
  • Arkanoid
  • Battle Chess
  • Budokan: The Martial Spirit
  • CD-Man
  • Colorado
  • Dangerous Dave in the Haunted Mansion
  • DeathTrack
  • Digger
  • Disney's Duck Tales: The Quest for Gold
  • Doom
  • Doom 2
  • Dune 2
  • Dyna Blaster
  • Earthworm Jim 2
  • Fire & Forget II
  • Goblins 1-3
  • Golden Axe
  • Heretic: Shadow of the Serpent Riders
  • Incredible Machine
  • The
  • IndyCar Racing
  • Krypton Egg
  • Lamborghini: American Challenge
  • Lode Runner
  • Lost Vikings
  • The
  • Metal Mutant
  • Micro Machines
  • Mine Bombers
  • Mortal Kombat
  • Pac-Man
  • Prehistorik
  • Prehistorik 2
  • Prince of Persia
  • Scorched Earth: The Mother of All Games
  • SimCity
  • Stunts
  • Supaplex
  • Test Drive
  • Tetris
  • Tower Toppler
  • Tyrian 2000
  • Ugh!
  • WarCraft: Orcs & Humans
  • Wings of Fury
  • Winter Supersports 92
  • Wolfenstein 3D
  • Xonix

Александр @Caiiiycuk
карма
165,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (52)

  • 0
    Пользовался DosBox'ом 6 лет назад, чтобы снова поиграть в потрясающую игру детства — The Legend of Kyrandia.
    • +2
      Я пытался её портировать в браузер, но не успел к новому году. После новогодних какникул думаю добавлю и её.
      • +1
        Может тогда лучше портировать в браузер не игру, а ScummVM? Исходники открытые, а результат универсальнее.
        • +1
          Так уже wiki.scummvm.org/index.php/The_Legend_of_Kyrandia
          Причем все 3 части.
        • +1
          Уже пару лет как это сделано. Включает все скрипты по упаковке данных игр в браузеры.
    • 0
      Лучше сразу уж ScummVM, чем браузер. Выполняться будет быстрее значительно, плюс система настроек и сохранений.
  • 0
    Спасибо за подборку игр. Хотел узнать: алгоритм в шахматах из оригинальной игры или измененный?
    • 0
      Оригинальный
  • +2
    Недалёкое будущее, хабр, заголовок поста: «Запускаем Windows 95 в браузере».
    • –1
      вот аналогично подумал :) а при инвазии гаджетов в нашу жизнь, можно и в часах будет запустить :)))
    • 0
      Будущее наступило: https://win95.ajf.me/
  • +1
    Угадал автора по тэгам =)
    Спасибо за подборку к новому году.
    • +1
      Во-во, люблю автора за вклад в Emscripten и окружение. Сашусик, вы красавчик!
      • 0
        Всей ветке: Спасибо большое, очень приятно за то что цените мои труд!
  • 0
    Сижу, давлю ностальгическую лыбу =) Красота =0
  • 0
    Supaplex — супер! ностальгия!
  • 0
    Спасибо большое. Добавил в закладки. Очень удобный сервис, давно о таком мечтал, чтобы не заморачиваясь открыть и поиграть.
  • 0
    Как думаете, какой браузер лучше всего справляется, ff, chrome?
    • 0
      Раньше chrome рулил. Но теперь они примерно на одном уровне благодаря asm.js. Для медленного ПК рекомендую все же chrome.
  • +1
    Да что ж вы делаете-то!
    Теперь вместо резки салатов мучаю старые игры!

    Что интересно, как двадцать лет назад не мог выиграть в AV у компьютера, так и сейчас не могу. Видимо, мне не дано :(
    • +1
      Это не сложно, но нужно войти в определённое, полу-медитативное состояние.
  • 0
    Эти времена… Помню кошек и Башню. Была еще игра в джунглях, но, вроде, в списке ее не вижу.

    Спасибо огромное за дополнительно-хорошее настроение в предновогодний день.
    • 0
      про игру в джунглях — я тоже очень надеялся на flashback. Но нет, пока будем его запускать в отдельном досбоксе…
      • 0
        Вы про Вьетнам? NAM?
  • 0
    Этот день мы приближали как могли!
    Спасибо за прекрасный новогодний подарок.
  • 0
    А какая нужна производительность/ОС/браузер чтобы игры шли без тормозов? У меня i7-2600K разогнанный на 4.5GHz, Linux, nvidia-drivers, Firefox 31.3.0 (в настройках включено «по возможности использовать аппаратное ускорение») — и при этом в арканоиде и AV на глаз FPS примерно 10, т.е. играть можно, но удовольствие получать — нет.
    • 0
      Производительность предсказать сложно. Некоторые игры работали слишком быстро, например в Fire And Forget II пришлось ограничить число эмулируемых циклов процессора, что бы можно было играть. А вот тот же казалось бы простой Scorch работает не так быстро как хочется. Единственное что могу посоветовать, — попробуйте хром.
  • –2
    Но зачем?
    www.80stopgames.com
    • 0
      Во имя ассемблера, конечно! А за ссылку — спасибо.
    • 0
      Флэш же %)
  • 0
    Спасибо, сейчас зажжем во что-нибудь старое )))

    Зы. Лучше
    git clone https://github.com/dreamlayers/em-dosbox.git
    

    первый вариант дает premission denied (наверное, в зависимости от того, помещали ли вы свой публичный ключ на github)
  • 0
    Для тех кто захочет поиграть в stunts

    Page Line Word Question
    1    12   2    ...and *destructive* stunts that can smash your car...
    3    2    1    *track* selection screen.  Your goal is to be on it.
    3    13   4    In addition, *previewing* might give you a better...
    4    4    4    ...time than missing *three* pieces of regular...
    4    8    1    *proper* direction.  If you get on the track...
    5    12   3    hit the *cables* and crash...
    6    3    7    while you are driving through the *loop*...
    6    5    8    ...more than *110* MPH
    7    2    1    *displaying* the current car, an acceleration curve...
    7    5    7    ...retail price), and a set of *buttons*.
    8    5    7    Just your everyday type of vehicle.  *You*...
    9    3    9    Interrupted while driving with a *query*
    10   3    5    ...your driving performance.  This *button* is...
    10   6    1    *camera* mode while in this viewing mode.
    11   2    1    *directory*.  Highlight the desired replay...
    12   2    1    *around*, you can choose to race any one at a time.
    13   4    11   ...bird's eye view of the *currently*...
    14   6    1    *selected* piece is the area upon which it...
    
  • 0
    спасибо очень интересно! Вот только болдер даша не увидел — может будет добавлен? ;)
  • 0
    Чешутся руки адаптировать что-то говорящее. Под Windows это все не скомпилируешь, пока не пройдешь через все грабли( И то не факт, что скомпилируется. Вы могли бы выложить отдельно dosbox.js и все что необходимо для адаптации досовских приложений? Достаточно ли мне для этого будет установить Emscripten SDK + dosbox.js + еще что-то?
    • 0
      Нужен emscripten, а так же packager.py, dosbox.html из репозитория em-dosbox. Начните с чего-нибудь простого, например, с digger (используйте packager.py как написано в статье). Ссылка: dosbox.js
      • 0
        Я не нашел dosbox.html. Весь репозиторий обыскал.
        • 0
          Упс… Файл появляется после компиляции (его генерирует emscripten). Вот, можете попробовать этот.
          • 0
            Заработало. Спасибо пребольшое!
            Я так понимаю выводом Wave на SB оно не дружит?
            • 0
              Там Sound Blaster AWE 16 по умолчанию и звук работает (IRQ 7, DMA 1), можете у меня на сайте проверить.
              • +1
                Звук какой-то пластиковый и приглушенный. Вот мой пример с музыкой. Иногда даже прерывается. Никакого сравнения с оригинальным DosBox.
                • 0
                  Тут проблема скорее в emscripten, его реализация SDL_mixer не очень хорошая. Звук может прерываться по многим причинам. Из за того что javascript одно поточный звуковой буфер не успевает заполняться. worker`ы могут помочь, но пока это все очень экспериментально. Может быть поможет поиграться с настройками dosbox (dosbox.conf).
                • 0
                  Не-не-не, Дэвид Блэйн! xtc-play, так гораздо лучше (см. коммит).
                  • 0
                    Здорово:) Пропало эхо.
                  • 0
                    Уже есть официальный фикс проблемы со звуком.
  • 0
    Всех любителей игры M.A.X. приглашаю собственно к самой игре, а так же к помощи в разработке.
    Тема на gamedev: www.gamedev.ru/projects/forum/?id=190123
    facebook: www.facebook.com/groups/1420889268172393/
    VK: vk.com/maxtouch
    • 0
      Я тоже пилю свой «MAXimus», но на js и Nodejs — с той лишь разницей что у меня не квадраты, а хексы :)
      • 0
        А где можно посомтреть и пощупать ваш вариант?
        • 0
          пока недоступно для общества, но сущесвует отдельными кусками как тесты и прикидки, пока еще и сам учусь поэтому стесняюсь показывать пока нету демы :) на гамедеве подписался и на фб — так что будем общаться
          • 0
            Тут есть еще версия онлайн игры jumangee.net/max/
    • 0
      Нам нужны разработчик под android и windows, что бы привести в порядок интерфейсы под эти платформы
      Так же нужнен разработчик под Lua, для сценариев и ИИ.

      По проекту язык разработки: С++
      -iOS/Mac: Obj-c/Cocoa
      -Android: JNI
      -Windows: Win32
  • 0
    Больше игр в em-dosbox: geektimes.ru/post/243887/
    • 0
      У них такие же проблемы со звуком, как и у меня, жаль (

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.