Introducing Socket Firewall: Free, Proactive Protection for Your Software Supply Chain.Learn More
Socket
Book a DemoInstallSign in
Socket

nes-emu

Package Overview
Dependencies
Maintainers
1
Versions
56
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

nes-emu

A NES emulator

latest
npmnpm
Version
1.0.52
Version published
Maintainers
1
Created
Source

NesCore

A NES Emulator made in JavaScript for educational purposes. Try it!

Its main objective is to reflect the NES internals as simply as possible by using clean, object-oriented code. It doesn't have any complex bitwise operations, huge switch-case statements or files with lots of magic numbers.

rlabs Created by [r]labs.

⚠️ This is not a cycle-accurate emulator and performance is not the main concern.

Features

  • 👾 It emulates the NES
  • 👨‍🔧 It plays Super Mario Bros. 3!
  • 💻 CPU
    • All official instructions are implemented
    • nestest passes ✔️
  • Fully functional 🖥️ PPU and 🔊 APU
  • 🔌 Supported mappers
  • 🐏 SRAM support
  • 💾 Save states support
  • 🌎 Web frontend with Gamepad support

Usage

npm install --save nes-emu

// configure video and audio:
const onFrame = (frameBuffer) => {
  // write `frameBuffer` (a Uint32Array) to screen...
};
const onSample = (sample) => {
  // write `sample` (a number) to audio buffer...
};

// create an instance:
const nes = new NES(onFrame, onSample);

// load a game:
nes.load(rom); // rom = Uint8Array

// run at 60 fps, or as fast as you can:
{
  nes.setButton(1, "BUTTON_A", true); // player = 1, button = A, pressed = true
  nes.setButton(2, "BUTTON_DOWN", false); // player = 2, button = DOWN, pressed = false
  // ...set the rest of the buttons
  nes.frame();
}

// save / restore states:
const saveState = nes.getSaveState();
nes.setSaveState(saveState);

👀 Have a look at the demo implementation for more details.

Full API

MethodParametersDescription
constructoronFrame, onSample, loggerCreates an emulator's instance. All properties can be set at any time.
loadrom, saveFileBytesLoads a ROM. If a saveFileBytes array is provided, it sets the SRAM content.
frameRuns the emulation for a whole video frame.
samplesrequestedSamplesRuns the emulation until the audio system generates requestedSamples.
scanlineRuns the emulation until the next scanline.
setButtonplayer, button, isPressedSets the button state of player to isPressed. The button can be one of: ["BUTTON_A", "BUTTON_B", "BUTTON_SELECT", "BUTTON_START", "BUTTON_UP", "BUTTON_DOWN", "BUTTON_LEFT", "BUTTON_RIGHT"]
clearButtonsplayerSets all buttons of player to a non-pressed state.
getSaveFileReturns an array with the SRAM bytes, or null.
getSaveStateReturns an object with a snapshot of the current state.
setSaveStatesaveStateRestores a saveState.

Screenshots

nestest screenshot

Debugging

You can inspect the emulator state by using the global window.debug object.

Also, if you add ?debug to the URL and use a gamepad, shoulder buttons will behave as follows:

2--4
1--3

1: Enter debug mode
2: Exit debug mode
3: Hold to run frame
4: Hold to run scanline

Keywords

nes

FAQs

Package last updated on 06 Sep 2025

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts