TGViewer
UfoStation UfoStation @xufostation · 3.05K subscribers
Post #1053 668
WebAssembly. Вместо введения

В прошлом я пытался повторить по шагам рендеринг как в doom, а сегодня задался вопросом: что если и мне попытаться сделать свой эксперимент по портированию Doom в браузер? Тем более в век вайбкодинга экспериментировать и проверять гипотезы стало намного дешевле по времени.

Как портировать старую программу в браузер? Программа была написана на языке X, запускалась в операционной системе Y, которая работала на железе (или хотя бы на процессоре) Z. Получается, концептуально (или на high-level) вариантов не так много.

Первый вариант: переписываем все с C на другой язык, то есть на JavaScript. Вместо API операционной системы для работы с графикой, звуком и клавиатурой используем браузерные API: Canvas API, Audio API, DOM API и прочие. К сожалению, переписывать все вручную дорого.

Первый порт Doom в браузер произошёл ещё в 2011 году силами компании Mozilla. Все благодаря проекту Emscripten, который в то время позволял компилировать код, написанный на C, в JavaScript. Отсюда получаем второй способ портирования. К сожалению, сейчас игру в сети не найти: порт после публикации удалили, говорят, возникли сомнения в соблюдении лицензии на игровые ресурсы.

Третий способ это скомпилировать исходники программы в WebAssembly код; тем более современная версия компилятора Emscripten, как раз этим и занимается. Кстати, существуют и другие примеры компиляции в WebAssembly. Здесь хочет показать проект wasm-fizzbuzz, где автор делится своими тонкостями портирования оригинального Doom.

Четвертый способ, и одновременно с этим пятый, это сделать эмуляцию или операционной системы, на которой запускается программа, или платформы и запустить оригинал программы на них, возможно с небольшими дополнениями. Кажется сложно? Но..

В своем эксперименте я реализовал навайбкодил эмуляцию архитектуры RISC-V. На выходе получился совсем небольшой проект. Базовая целочисленная архитектура умещается в несколько сотен строк на любом языке (можно как-нибудь поговорить и об этом). Затем я нашел специально модифицированную версию Doom для портирования, doomgeneric, которая затем была собрана как ELF-файл, чтобы запускаться как раз на этой архитектуре. И собственно на этом всё. Получившийся порт работает также благодаря технологии WebAssembly.
  • 🔥 13
  • ❤ 2
  • 👍 1
More from @xufostation
  1. Oct 2, 2026RISC-V Doom Эмуляция архитектуры RISC-V с запускаемой на ее базе Doom (ее свободно распрос…
  2. Sep 1, 2026Результаты розыгрыша: Комментарий с порядковым номером 4 побеждает (среди тех, что с тэгам…
  3. Aug 27, 2026В этом году также как в прошлом и в позапрошлом хочу подарить случайному подписчику канала…
  4. Aug 12, 2026Литания о Фронтенде Некоторое время назад у меня было желание рассказывать о своем погруже…
  5. Aug 12, 2026Переключился на тему webassembly и готовлю для вас медленно, но верно, свои заметки. А пок…
  6. Jul 21, 2026Post #1048
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →