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
        Я пытался её портировать в браузер, но не успел к новому году. После новогодних какникул думаю добавлю и её.
      • 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
                                                У них такие же проблемы со звуком, как и у меня, жаль (

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