Sobre o projeto

JSNES é um emulador completo do Nintendo Entertainment System (NES) escrito em JavaScript. Funciona tanto no navegador quanto em ambientes Node.js, tornando-o adequado para projetos de jogos retrô na web, emuladores embarcados ou ferramentas do lado do servidor. A biblioteca oferece dois pontos de entrada principais: - `jsnes.Browser` — um wrapper de alto nível que cuida automaticamente da renderização em canvas, reprodução de áudio via Web Audio API, entrada de teclado e gamepad e temporização de quadros. Pode carregar ROMs a partir de URLs ou dados brutos e fornece métodos para capturas de tela, pausa/retomada e limpeza. - `jsnes.NES` — um núcleo de baixo nível para integrações personalizadas. Emite buffers de quadros brutos (256×240 ARGB Int32Array) e amostras de áudio por meio de callbacks, deixando a temporização, renderização e tratamento de entrada a cargo do desenvolvedor. Os principais recursos incluem: - Suporte a controles padrão do NES (dois jogadores) com mapeamentos de teclas configuráveis persistidos no localStorage. - Suporte à API Gamepad para controles modernos. - Emulação da pistola de luz Zapper. - Persistência de SRAM com bateria por meio de callbacks para estados salvos. - Serialização de salvar/carregar estado (`toJSON`/`fromJSON`). - Taxa de quadros ajustável e monitoramento de FPS. - Exemplo de componente React incluído; um frontend React completo está no diretório `web/`. A instalação é feita via npm (`npm install jsnes`) ou diretamente por tag de script do CDN unpkg. O build usa formatação Prettier e inclui uma suíte de testes. O JSNES originou-se do vNES de James Sanders e foi inspirado no JSSpeccy de Matt Wescott. É mantido ativamente e usado em projetos como o NEStation para NES multiplayer pela internet.