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

    Метки:
    Поделиться публикацией
    Похожие публикации
    Комментарии 52
    • 0
      Пользовался DosBox'ом 6 лет назад, чтобы снова поиграть в потрясающую игру детства — The Legend of Kyrandia.
      • +2
        Я пытался её портировать в браузер, но не успел к новому году. После новогодних какникул думаю добавлю и её.
        • +1
          Может тогда лучше портировать в браузер не игру, а ScummVM? Исходники открытые, а результат универсальнее.
      • 0
        Лучше сразу уж ScummVM, чем браузер. Выполняться будет быстрее значительно, плюс система настроек и сохранений.
    • 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
        про игру в джунглях — я тоже очень надеялся на flashback. Но нет, пока будем его запускать в отдельном досбоксе…
    • 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
        Нам нужны разработчик под android и windows, что бы привести в порядок интерфейсы под эти платформы
        Так же нужнен разработчик под Lua, для сценариев и ИИ.

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

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