1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-v86

Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
Readme.md

v86 эмулирует процессор и оборудование, совместимые с x86. Во время выполнения машинный код преобразуется в модули WebAssembly для достижения приемлемой производительности. Вот список эмулируемого оборудования:

  • Процессор, совместимый с x86. Набор команд соответствует уровню Pentium 4, включая полную поддержку SSE3. Отсутствуют некоторые функции, в частности:
    • Таскгейты, дальние вызовы в защищённом режиме.
    • Некоторые функции 16-битного защищённого режима.
    • Пошаговое выполнение (флаг трапа, регистры отладки).
    • Некоторые исключения, особенно связанные с плавающей точкой и SSE.
    • Многоядерность.
    • 64-битные расширения.
  • Модуль с плавающей запятой (FPU). Расчёты выполняются с использованием библиотеки Berkeley SoftFloat и должны быть точными (но медленными). Тригонометрические и логарифмические функции эмулируются с помощью 64-разрядных чисел с плавающей запятой и могут быть менее точными. Поддерживаются не все исключения FPU.
  • Контроллер гибких дисков (8272A).
  • Контроллер клавиатуры PS/2 (8042). С поддержкой мыши.
  • Программируемый интервальный таймер (PIT) 8254.
  • Программируемый контроллер прерываний (PIC) 8259.
  • Частичная поддержка APIC.
  • Часы реального времени (RTC) CMOS.
  • Универсальная видеокарта с поддержкой SVGA и расширениями Bochs VBE.
  • Шина PCI. Частично неполная и используется не каждым устройством.
  • IDE-контроллер диска.
  • Сетевая карта NE2000 (RTL8390) PCI.
  • Файловая система VirtIO.
  • Звуковая карта SoundBlaster 16.

Демоверсии

9frontArch LinuxAndroid-x86 1.6-r2Android-x86 4.4-r2BasicLinuxBuildroot LinuxDamn Small LinuxELKSFreeDOSFreeBSDFiwixOSHaikuSkiffOSReactOSWindows 2000Windows 98Windows 95Windows 1.01MS-DOS 6.22OpenBSDOberonKolibriOSSkiftOSQNX

Документация

Как это работаетСетевое взаимодействиеНастройка Alpine Linux в качестве гостевой ОСНастройка Arch Linux в качестве гостевой ОСНастройка Windows 2000/XP в качестве гостевой ОСФайловая система 9pLinux rootfs на 9pПрофилированиеСнижение нагрузки на ЦП

Совместимость

Вот обзор операционных систем, поддерживаемых в v86:

  • Linux работает довольно хорошо. 64-битные ядра не поддерживаются.
    • Работает Damn Small Linux (ядро 2.4.31).
    • Работает Fedora 30.
    • Работают все протестированные версии TinyCore.
    • Buildroot можно использовать для создания минимальной сборки. humphd/browser-vm и darin755/browser-buildroot содержат полезные скрипты для сборки.
    • SkiffOS (основана на Buildroot) может кросс-компилировать пользовательскую сборку.
    • Archlinux работает. См. archlinux.md для создания образа.
    • Debian работает.
    • Ubuntu работает до последней версии, которая поддерживала i386 (16.04 LTS или 18.04 LTS для некоторых вариантов).
    • Alpine Linux работает. Образ можно создать из Dockerfile, см. Перевод текста на русский язык:

tools/docker/alpine/

  • ReactOS работает.
  • FreeDOS, Windows 1.01 и MS-DOS работают очень хорошо.
  • KolibriOS работает.
  • Haiku работает.
  • Android-x86 был протестирован до версии 4.4-r2.
  • Windows 1, 3.x, 95, 98, ME, NT и 2000 работают достаточно хорошо.
    • В Windows 2000 и выше тип ПК должен быть изменён с ACPI PC на Standard PC.
    • Есть некоторые известные проблемы с загрузкой (#250, #433, #507, #555, #620, #645).
  • Windows XP, Vista и 8 работают при определённых условиях (см. #86, #208).
  • Многие хобби-операционные системы работают.
  • 9front работает.
  • Plan 9 не работает.
  • QNX работает.
  • OS/2 не работает.
  • FreeBSD работает.
  • OpenBSD работает с определённой конфигурацией загрузки. На приглашении boot> введите boot -c, затем на приглашении UKC> отключите mpbios и выйдите.
  • NetBSD работает только с пользовательским ядром, см. #350.
  • SerenityOS работает (только 32-битные версии).
  • SkiftOS работает.

Вы можете получить некоторую информацию о дисках здесь: https://github.com/copy/images.

Как собрать, запустить и встроить?

Вам потребуется:

  • make;
  • Rust с целью wasm32-unknown-unknown;
  • Версия clang, совместимая с Rust;
  • java (для Closure Compiler, не требуется при использовании debug.html);
  • nodejs (требуется последняя версия, известна работа с версией 16.11.1);
  • Для запуска тестов: nasm, gdb, qemu-system, gcc, libc-i386 и rustfmt.

См. tools/docker/test-image/Dockerfile для полной настройки на Debian или WSL (https://docs.microsoft.com/en-us/windows/wsl/install).

  • Запустите make, чтобы собрать отладочную версию (в debug.html).
  • Запустите make all, чтобы собрать оптимизированную версию (в index.html).
  • Образы дисков и ROM загружаются через XHR, поэтому если вы хотите попробовать index.html локально, убедитесь, что вы обслуживаете его с локального веб-сервера. Вы можете использовать make run, чтобы обслуживать файлы с помощью модуля Python http.
  • Если вы хотите только встроить v86 в веб-страницу, вы можете использовать libv86.js. Для использования ознакомьтесь с примерами (examples/). Вы можете скачать его из раздела релизов.

Альтернативно, для сборки с использованием docker

  • Если у вас установлен docker, вы можете запустить всю систему внутри контейнера.
  • См. tools/docker/exec, чтобы найти Dockerfile, необходимый для этого.
  • Вы можете запустить docker build -f tools/docker/exec/Dockerfile -t v86:alpine-3.19 . из корневого каталога, чтобы создать образ docker.
  • Затем вы можете просто запустить docker run -it -p 8000:8000 v86:alpine-3.19, чтобы запустить сервер.
  • Проверьте localhost:8000 для размещённого сервера.

Запуск через Devcontainer

  • Если вы используете IDE, поддерживающую Devcontainers, такую как Github Codespaces, VSCode Remote Container extension или, возможно, другие, такие как Jetbrains IDEA, вы можете настроить среду разработки в контейнере Dev.
  • Следуйте инструкциям вашей среды разработки, чтобы настроить контейнер.
  • Выполните задачу «Получить образы» для загрузки образов для тестирования.

Тестирование

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

wget -P images/ https://k.copy.sh/{linux3.iso,linux.iso,linux4.iso,buildroot-bzimage.bin,openbsd-floppy.img,kolibri.img,windows101.img,os8.img,freedos722.img}

Запустите интеграционные тесты: make tests.

Запустите все тесты: make jshint rustfmt kvm-unit-test nasmtests nasmtests-force-jit expect-tests jitpagingtests qemutests rust-test tests.

Подробнее см. в tests/Readme.md.

Примеры API

  • Базовый (examples/basic.html).
  • Программно с использованием последовательного терминала (examples/serial.html).
  • Интерпретатор Lua (examples/lua.html).
  • Два экземпляра в одном окне (examples/two_instances.html).
  • Сохранение и восстановление эмулятора. Использование v86 для собственных целей так же просто, как:
var emulator = new V86({
    screen_container: document.getElementById("screen_container"),
    bios: {
        url: "../../bios/seabios.bin",
    },
    vga_bios: {
        url: "../../bios/vgabios.bin",
    },
    cdrom: {
        url: "../../images/linux.iso",
    },
    autostart: true,
});

См. starter.js (src/browser/starter.js).

Лицензия

v86 распространяется на условиях упрощённой лицензии BSD, см. LICENSE. Следующие сторонние зависимости включены в репозиторий под их собственными лицензиями:

  • lib/softfloat/softfloat.c
  • lib/zstd/zstddeclib.c
  • tests/kvm-unit-tests/
  • tests/qemutests/

Благодарности

  • Тестовые случаи процессора через QEMU.
  • Дополнительные тесты через kvm-unit-тесты.
  • Поддержка zstd включена для лучшего сжатия образов состояния.
  • Включён Berkeley SoftFloat для точного эмулирования 80-битных чисел с плавающей запятой.
  • Проект jor1k для драйверов 9p, файловой системы и uart.
  • Источники некоторых старых операционных систем от WinWorld.

Ещё вопросы?

Отправьте мне электронное письмо на copy@copy.sh. Пожалуйста, сообщайте об ошибках на GitHub.

Автор

Фабиан Хеммер (https://copy.sh/, copy@copy.sh)

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

Вы можете оставить комментарий после Вход в систему

Введение

v86 — это открытый проект, основанный на Rust и WebAssembly. Он имитирует совместимый с x86 центральный процессор и оборудование, что позволяет запускать виртуальную машину прямо в браузере. Развернуть Свернуть
BSD-2-Clause
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/mirrors-v86.git
git@api.gitlife.ru:oschina-mirror/mirrors-v86.git
oschina-mirror
mirrors-v86
mirrors-v86
master