Эмулятор x86 на JavaScript

    Virtual x86 — еще один эмулятор платформы x86 на языке программирования JavaScript. Как и JSLinux от Фабриса Беллара, для запуска Linux здесь достаточно только браузера. После загрузки образа нормально работают все встроенные команды Linux, работают компилированные программы, файловая система и проч., хотя сетевых интерфейсов пока нет.



    Кроме Linux, можно загрузить KolibriOS (графический интерфейс с курсором мыши), FreeDOS и OpenBSD.



    Например, так выглядит KolibriOS.



    Автор эмулятора говорит, что его программа очень похожа на работу Беллара, но он добавил лучшую аппаратную поддержку: эмулятор может загружать настоящий SeaBIOS.

    Эмулятор работает на виртуальном процессоре Pentium 60 с тактовой частотой 1,3 МГц.

    Файл v86_all.js занимает 125 КБ в сжатом виде, 262 КБ в несжатом, 9765 строк кода. К сожалению, здесь тоже обошлось без публикации исходников в нормальном виде. Автор сейчас раздумывает, под какой лицензией их опубликовать (UPD: исходники опубликованы 6 ноября 2013 г.).

    По теме:
    Список эмуляторов на JavaScript
    Support the author
    Share post

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 43

      +10
      Крутота неимоверная. А если сеть прикрутят, то будет просто пушка.
        0
        Сеть не получится прикрутить по техническим причинам. Из JavaScript'а только по HTTP можно стучать, уровнем ниже не спуститься. И только в рамках текущего домена.
          +5
          github.com/ewiger/jsmodem

          Для jslinux такая штука есть
            +4
            Действительно. Не подумал, что можно на хосте запустить сервер, который будет прокси для модема виртуальной машины.
            +2
            Можно сделать IP over HTTP и через сервер ходить.
              0
              а WebRTC?
                0
                Webrtc, разумеется, не дает открывать полноценные сокеты, но, тем не менее, технологию таки можно было бы применить. Например, как я описал тут: habrahabr.ru/post/198192/#comment_6873444
              +4
              Безусловно. Непонятно только, какое реальное практическое применение может быть у такого рода продукта.
                +4
                Понастольгировать
                  +2
                  Пока никакой, но со временем можно получить более сносный эмулятор виртуальной машины в браузере. Как минимум это позволило бы перенести некоторый софт в веб. Например, те же инструменты разработчика: редакторы кода разные(вимы, эклипсы), локальный веб сервер для разработки, и многое другое.

                  Проблему производительности можно заметно улучшить путем перехода на asm.js. Работу с сетью — через удаленный прокси, например.
                    +2
                    Но есть и более интересные применения. К примеру, можно организовать альтернативный клиент-серверный веб тому, что есть сейчас. Соединять пользователей не через http с реальными серверами, а через webrtc: браузер к браузеру. И веб сервера разворачивать с помощью таких вот виртуальных машин, запущенных опять же в браузерах.

                    Более того, такую сеть можно было бы организовать на более-менее анонимной основе. Нечто наподобее tor/i2p.

                    Конечно, на первый взгляд, делать такие вещи через браузерный js — это костыли. Но они, на мой взгляд, стоят того. Ведь уровень вхождения в такую сеть чрезвычайно низок: открываешь браузер, и все.
                      +2
                      Добавлю еще. Если допилить скорость такой виртуалки на js до более приемлемого уровня(asm.js-ом хотя бы), то мы могли бы получить уже существующие анонимайзеры вроде tor/i2p просто из коробки: распространяя образ оси с предустановленным необходимым ПО.
                  +5
                  А что, все довольно честно и культурно.

                  Загрузил фридос, набил oldjoke.asm:

                  org 100h
                  start:
                  cli
                  jmp start

                  собрал присутствующим nasm'ом, запустил — виртуалка висит, на CAD не реагирует :)
                    +1
                    там можно было не компилить а сделать com файл с двумя или тремя (раньше коды помнил) командами в текстовом редакторе, сохранить и запустить
                      0
                      > с двумя или тремя (раньше коды помнил) командами

                      ъф — в вин кодировке, насколько я помню.
                        +1
                        А в байтах это будет FA F4 (я относительно недавно тестил эмулятор 8086 и от него остались образы флопиков)
                        image

                        Любопытно (и это при работающей KolibriOS), что Ms-Dos 7.1 не грузится — «Unimplemented: into instruction Execution stopped», ну а шестой, как и фридос естественно работают.

                        Вообще, качество эмулятора ещё далеко от идеала — не работают дос-программы работоспособные даже на 8086 (Insight, Checkit).
                        +1
                        cat aaa.com
                        alt+250
                        alt+235
                        alt+253
                        ctrl+z

                        так, емнип
                        fa eb fd
                      0
                      del
                        +13
                        К сожалению скорость на уровне Bosch, при том что Bosch все же полезнее. А Qemu так вообще рвет этот эмулятор. Если бы поднять скорость раз в 5 хотя бы, то можно было бы проверять, да и даже писать программы под самой Колибри. Вообще я лично запускал Колибри на реальной железке с частотой в 50 МГц (AMD 586 без MMX). В общем подождем, может авторы чего-нибудь с производительностью порешают со временем. Спасибо за статью.
                          +8
                          Мне очень интересно мнение минусющих мой комментарий людей — чем я вас лично задел? Тем что упомянул Колибри, которую и так упомянул автор поста и она поставлена в качестве одного из загрузочных образов по ссылке оригинальным автором вообще? Или тем что я объективно оценил скоростные характеристики эмулятора? Или тем что привел пример из своего собственного опыта? Или вы просто ненавидите меня и/или проект Колибри? Объяснитесь пожалуйста — не ведите себя в школьном стиле «толкни и беги».
                            +2
                            Лично мне очень приятно, что из 4 предлагаемых для запуска операционных систем, есть твоя (при сотнях существующих ОС), причём она единственная, работающая в графическом режиме.
                              0
                              Ну, он не моя, а наша же. :-)
                            +9
                            Bochs, не Bosch. Т.е. «бокс», а не «бош» :)
                              +6
                              О спасибо! А я думаю за что минусуют :-)
                              +4
                              Приношу извинение за неправильное написание названия эмулятора Bochs, название которого очень близко к написанию названия фирмы Bosch. Постараюсь впредь быть внимательней.
                                +2
                                Нужно это произведение искусства в виде asm.js оформить.
                                  +1
                                  Это даст прирост скорости?
                                    +6
                                    Должно
                                      +2
                                      Эмулятор c s-macke.github.io/jor1k/ получает от asm.js заметный прирост. Он правда не x86, а OpenRISC 1000 (и вероятно быстрейший на js).
                                        +1
                                        Да, этот эмулятор выдаёт 4 mips, а тот — 80.
                                  +15
                                  Знатное извращение
                                    +2
                                    ReactOS не взлетел :(
                                    i.imgur.com/PpFOxde.png
                                      0
                                      У последнего билда ReactOS на LiveCD не работает из-за самого эмулятора:
                                      Unimplemented: #NP handler
                                      Execution stopped
                                      +2
                                      Сделать версию для nodejs с поддержкой сети и собрать кластер =)
                                        +17
                                        И запустить на нем node.js.
                                        Warning: Данный комментарий перенасыщен сарказмом
                                          +8
                                          дикаприо.jpg
                                        0
                                        Прикольно, только я нашел в KolibriOS в папке DEMOS демку FIREWORK, на которую система ругается «unsupported processor instruction» — ей не хватает какого-нибудь MMX/SSE/...?
                                          0
                                          Да. Из комментария к программе: "; NOTE: Needs MMX & SSE"
                                            +5
                                            и по всей видимости нет ни того ни другого

                                            cpuid

                                            Желаю автору успехов в развитии проекта, эмулятору есть куда расти.
                                          +2
                                          Печально что нет исходников, JavaScript-код этой поделки — обфусцирован. У Белларда в LinuxJS код так же обфусцирован. А так хотелось понять как работает код эмуляторов.
                                          +1
                                          В коде есть ссылка на source map, но она по этому url просто не загружается :(

                                          Only users with full accounts can post comments. Log in, please.