
Research
/Security News
Weaponizing Discord for Command and Control Across npm, PyPI, and RubyGems.org
Socket researchers uncover how threat actors weaponize Discord across the npm, PyPI, and RubyGems ecosystems to exfiltrate sensitive data.
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.
Created by [r]labs.
⚠️ This is not a cycle-accurate emulator and performance is not the main concern.
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.
Method | Parameters | Description |
---|---|---|
constructor | onFrame , onSample , logger | Creates an emulator's instance. All properties can be set at any time. |
load | rom , saveFileBytes | Loads a ROM. If a saveFileBytes array is provided, it sets the SRAM content. |
frame | Runs the emulation for a whole video frame. | |
samples | requestedSamples | Runs the emulation until the audio system generates requestedSamples . |
scanline | Runs the emulation until the next scanline. | |
setButton | player , button , isPressed | Sets 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"] |
clearButtons | player | Sets all buttons of player to a non-pressed state. |
getSaveFile | Returns an array with the SRAM bytes, or null. | |
getSaveState | Returns an object with a snapshot of the current state. | |
setSaveState | saveState | Restores a saveState . |
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
FAQs
A NES emulator
We found that nes-emu demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
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.
Research
/Security News
Socket researchers uncover how threat actors weaponize Discord across the npm, PyPI, and RubyGems ecosystems to exfiltrate sensitive data.
Security News
Socket now integrates with Bun 1.3’s Security Scanner API to block risky packages at install time and enforce your organization’s policies in local dev and CI.
Research
The Socket Threat Research Team is tracking weekly intrusions into the npm registry that follow a repeatable adversarial playbook used by North Korean state-sponsored actors.