Об этом проекте

JSNES — это полнофункциональный эмулятор Nintendo Entertainment System (NES), написанный на JavaScript. Он работает как в браузере, так и в среде Node.js, что делает его подходящим для веб-проектов ретро-игр, встраиваемых эмуляторов или серверных инструментов. Библиотека предлагает две основные точки входа: - `jsnes.Browser` — высокоуровневая обёртка, которая автоматически обрабатывает рендеринг на canvas, воспроизведение через Web Audio API, ввод с клавиатуры и геймпада, а также синхронизацию кадров. Она может загружать ROM из URL или сырых данных и предоставляет методы для снимков экрана, паузы/возобновления и очистки. - `jsnes.NES` — низкоуровневое ядро для пользовательских интеграций. Оно выдаёт сырые кадровые буферы (256×240 ARGB Int32Array) и аудиосэмплы через колбэки, оставляя синхронизацию, рендеринг и обработку ввода разработчику. Ключевые особенности: - Поддержка стандартных контроллеров NES (два игрока) с настраиваемыми привязками клавиш, сохраняемыми в localStorage. - Поддержка Gamepad API для современных контроллеров. - Эмуляция светового пистолета Zapper. - Сохранение SRAM с батарейным питанием через колбэки для состояний сохранения. - Сериализация сохранения/загрузки состояния (`toJSON`/`fromJSON`). - Регулируемая частота кадров и мониторинг FPS. - Включён пример React-компонента; полноценный React-фронтенд находится в каталоге `web/`. Установка выполняется через npm (`npm install jsnes`) или напрямую через тег script с unpkg CDN. Сборка использует форматирование Prettier и включает набор тестов. JSNES возник из vNES Джеймса Сандерса и был вдохновлён JSSpeccy Мэтта Уэскотта. Проект активно поддерживается и используется в таких проектах, как NEStation для многопользовательской игры на NES через интернет.