Содержание статьи

В браузере пока нельзя эмулировать PlayStation 2, но это лишь вопрос времени: Linux туда уже загружают, и он работает. Это кажется чудом, но никакого чуда нет: внутри такие эмуляторы очень просты.

 

Вступление

Эмуляция при помощи JavaScript стала возможна по двум причинам. Во-первых, тег Canvas. Скажи спасибо Apple: десять лет назад именно эта компания разработала и встроила в WebKit технологию, которая позволяет при помощи JavaScript манипулировать отдельными пикселями на HTML-странице. Сейчас Canvas поддерживают все распространенные браузеры.

Во-вторых, время. Большинство платформ, пригодных для эмуляции в браузере, появились в восьмидесятые годы прошлого века. Современные компьютеры на много порядков быстрее устройств, которые были в ходу четверть века назад. Относительно невысокой производительности JavaScript с лихвой хватает для того, чтобы имитировать работу старинного железа.

JSLinux эмулирует в браузере компьютер, способный загрузить полноценный Linux
JSLinux эмулирует в браузере компьютер, способный загрузить полноценный Linux

Исключение составляет JSLinux, нашумевший эмулятор ПК. Его в 2011 году разработал известный французский программист Фабрис Беллар — создатель FFmpeg, популярного средства кодирования и декодирования видео, которое используют VLC, MPlayer и YouTube, и универсального эмулятора аппаратного обеспечения QEMU. ПК и Linux — это вовсе не ретро, так ведь?

Почти. Это уже не восьмидесятые, но и не сегодняшний день. Эмулятор Беллара представляет собой модель тридцатидвухразрядного процессора, напоминающего Intel 80486, к которому подключены контроллер прерываний, таймер, блок управления памятью, интерфейс IDE для взаимодействия с виртуальным жестким диском и последовательный порт. Автор выкинул из процессора все, без чего можно обойтись, в том числе поддержку вычислений с плавающей точкой, а вместо графического дисплея использовал алфавитно-цифровой терминал — так проще.

Тем, кто желает разобраться, как устроен JSLinux, можно порекомендовать аннотированную версию исходников проекта, выложенную на GitHub. В отличие от оригинала, они снабжены подробными комментариями, которые поясняют, какой именно функциональности x86-совместимого процессора или других элементов ПК соответствует тот или иной фрагмент кода.

Как и в любом другом эмуляторе, центральную роль в JSLinux играет объект, моделирующий работу процессора. В данном случае соответствующий класс называется CPU_X86 и содержит переменные, в которых хранятся значения всех регистров и флагов, а также ссылки на «оперативную память» виртуального компьютера и методы для работы с ней. В принципе, ОЗУ можно было бы представить и в виде обычного целочисленного массива (так устроены многие другие эмуляторы), но Беллар нашел более эффективный вариант: он использовал типизированные массивы (их добавили в JavaScript относительно недавно для работы с бинарными данными в WebGL). Кроме процессора, в эмуляторе имеются отдельные объекты, имитирующие работу программируемого контроллера прерываний, последовательного порта и таймеров.

Продолжение доступно только подписчикам

Вариант 1. Оформи подписку на «Хакер», чтобы читать все материалы на сайте

Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке

Вариант 2. Купи один материал

Заинтересовала информация, но нет возможности оплатить подписку? Тогда этот вариант для тебя! Обрати внимание: этот способ покупки доступен только для материалов, опубликованных более двух месяцев назад.


Оставить мнение

Check Also

Чемоданчик суперюзера. Лучшие приложения для Android, которым нужен root

Обладание правами суперпользователя снижает безопасность хранения данных, зачастую приводи…