ROM tester online: play and test a patched ROM

Use rom-weaver's ROM tester online to test a patched ROM before downloading it. Open Test to play local games through EmulatorJS. Play NES, SNES, Game Boy, GBA, Nintendo 64, Nintendo DS, and PlayStation games.

Your ROM stays on your device; no upload or account is required.

To verify the exact file a patch requires, use Checksum to compare its hash with the author's expected value, or Identify to look up a known game, region, and revision. Playing a game successfully does not verify its checksum.

If you need a practice file, open guided Test. It loads a tiny homebrew NES ROM from this project.

Check platform support

  1. Check browser emulator support for your game's platform and the bundled core limitations.
  2. For GameCube, Wii, Nintendo 3DS, Dreamcast, or PlayStation 2 games, use an emulator for that platform. Converting, patching, or identifying a ROM in rom-weaver does not mean the browser player supports it.
  3. Keep the original ROM and use a copy when testing a patch.

Load a ROM

  1. Open Test.
  2. Drop a ROM onto 0x01 Load a game, or select that area to choose a file.
  3. If the player shows START GAME, select it. Touch devices can require this tap before playback starts.
  4. Use the controls inside the emulator player.

You can also add a ZIP or 7z archive. rom-weaver shows the extraction progress, then opens a supported ROM from the archive.

A CHD that rom-weaver identifies as Sony PlayStation or Sega Mega Drive or Genesis opens without extraction. A CHD identified as Sega CD or Mega-CD has no bundled core and does not play. The emulator core reads the CHD directly, so a multi-track CD plays as one file. Add the .chd file itself, not an archive that contains it. A CHD for any other platform, including Saturn, is extracted first.

Saturn games run on the bundled SaturnOpenBios BIOS. Earlier versions of rom-weaver used the emulator's built-in BIOS emulation instead, so a save state made with one of them may not resume correctly.

Saturn games start with the 4 MB RAM expansion cartridge inserted, because some games need it to boot. If a game misbehaves with it, open the emulator's settings, choose Backend Core Options, set yabause addon cartridge to none, then reload Test and start the game again. The emulator's Restart button keeps the cartridge. The browser remembers the choice for that game. In-game saves keep working, but loading a save state never restores the cartridge's memory, so a game that uses the cartridge can show broken graphics or freeze after you load one.

Browser emulator support lists the platforms with bundled cores.

Test player showing the HELLO WORLD homebrew ROM and its SHA-1 fingerprint in the light theme Test player showing the HELLO WORLD homebrew ROM and its SHA-1 fingerprint in the dark theme
The supplied homebrew ROM runs in Test. The fingerprint identifies the file used for stored saves.

Test an Apply result

To test a patched ROM online, send the Apply result directly to the browser player:

  1. Load your ROM and patches on the Apply Patches page.
  2. Set Open Test after patching under Options, then apply the patches. If the option warns that the platform cannot be tested, use another emulator or the target hardware.
  3. Select Open in the Test tab after Apply finishes.
  4. Play far enough to exercise the patched content.
  5. Return to Apply and download the result if you have not downloaded it.

The Open Test after patching option can open Test automatically or hide the Test button. Apply skips automatic testing for unsupported platforms. Its disabled Test button names the unsupported platform.

Use Download after patching to choose whether Apply downloads the result automatically.

An emulator test does not prove that every part of a patch works. Keep the clean original and test important paths on the target hardware when possible.

Switch games or stop

Select Choose another ROM to replace the current game. Select Stop to unload the game and return to the Test start screen.

The emulator pauses when you leave the Test page or hide the browser tab. It resumes when you return.

A paused game larger than 128 MiB, such as a disc image, closes when another action starts, for example Apply or Compress. It also closes when you add more than 1 GiB of files at once on another page. This frees memory for that work. A banner on the other pages warns while such a game is paused. rom-weaver stores the game's in-game save when it pauses, but progress since the last in-game save is lost. Load the game again to continue.

Use saves and fullscreen

Use the emulator menu to create a save state or save the game's SRAM. rom-weaver stores the save bytes in this browser.

Each save uses the ROM's SHA-1 checksum as its identity. The record also stores the file name as a display name. Thus, the same ROM finds its save after you rename the file.

The panel above EmulatorJS shows the current file name and complete SHA-1. Storage shows the same value as a ROM fingerprint. You only need these values when you troubleshoot a save mismatch.

Use the fullscreen button above the player to enter or leave fullscreen. On iPhone and iPad, the button uses a full-viewport player because Safari does not offer fullscreen for this type of content.

Export and restore a save

Export a save before you clear browser data or move to another browser.

  1. Load the ROM on the Test page.
  2. Create a save state or save the game's SRAM from the emulator menu.
  3. Open Settings, then select Saves & storage.
  4. Find the ROM under Emulator saves.
  5. Select Export and keep the downloaded ZIP file.

Restore the save in a browser that has the same ROM:

  1. Open Settings, then select Saves & storage.
  2. Select Import save.
  3. Choose the exported rom-weaver ZIP file.
  4. Confirm that the ROM name and SHA-1 appear under Emulator saves.
  5. Load the same ROM on the Test page.
  6. Select Load State from the emulator menu.

Saves & storage also accepts the older uncompressed JSON export.

To back up every game, select Export all saves in Saves & storage. Keep the downloaded ZIP separately from browser data. It contains one JSON backup per game. Extract the ZIP, then import each JSON file to restore its save.

You can also drop an exported ZIP or JSON file on any page. Saves & storage opens with the file ready to import; select Import to restore it. If the drop also holds ROMs, those are opened first.

An import replaces the stored save for that ROM. When one exists, the import form names it and when it last changed, so you can export it first.

To import a raw SRAM or save-state file:

  1. Open Settings, then select Saves & storage.
  2. Select Import save.
  3. Choose the file exported by the emulator settings.
  4. Select SRAM or Save state.
  5. Enter the ROM's 40-character SHA-1.

The import merges with any other save part for the same SHA-1. You can select Delete before the import if you want to test the complete restore process.

To load a raw SRAM file without its SHA-1:

  1. Drop the .sav, .srm, .sra, .eep, .fla, .mpk, .mcr, or .mcd file on the home page or on Test. You can drop its ROM with it.
  2. If you dropped the save alone, add the ROM for that game on Test, unless the game is already loaded.

The game restarts with the save. rom-weaver stores the save for that ROM if the ROM has no stored SRAM. Otherwise the save plays as a preview: Test says so, and progress in it is not stored. Import it in Saves & storage to replace the stored save.

Only one save loads at a time. When you drop several, Test names the ones it ignored.

A save dropped alone plays in the game that is already loaded when its system fits; otherwise it waits on Test until you add a ROM. A .eep, .sra, .fla, or .mpk file only opens a Nintendo 64 ROM, and a .mcr or .mcd file only a PlayStation ROM. A save waiting for a ROM does not replace one the Save editor sent to Test. While save storage is off, it is kept only until you reload or close the page, and Test shows a warning.

Keep tested ROMs across visits

  1. Open Settings and enable Keep tested ROMs on this device.
  2. Select Save. Accept the browser's persistent-storage prompt if shown.
  3. Open a ROM on Test and start the game.
  4. After keeping finishes, reload Test. Find it under Kept Test ROMs.
  5. Select Play to prepare the original file again and load its matching save.

The setting starts off. It keeps original files, including compressed archives, after the game starts. A failed copy shows a notice while the game keeps running. Apply outputs and created patches are excluded.

Select Remove on Test, or Delete beside the ROM's size in Saves & storage. These actions keep its save. Turning the setting off stops new copies and keeps existing ones.

When storage fills, select Open Saves & storage in the job's error message. Delete unneeded kept ROMs, close Storage, then select Try again. The app never evicts kept ROMs automatically.

Use Protect saves and ROMs from automatic removal in Saves & storage to request persistent storage separately. Browsers can decline. Back up saves before clearing site data; see Privacy for browser-removal limits.

Disable save storage

  1. Open Settings.
  2. Clear Store emulator saves on this device.
  3. Select Save.

New save states and SRAM are not stored while this setting is off. Existing saves remain in Saves & storage until you delete them.

Use the Delete action in Saves & storage to remove one game. Use your browser's site-data controls to remove all rom-weaver data.

Fix a game that does not start

  • No emulator core for this system: check browser emulator support.
  • WebGL 2 is required: enable hardware acceleration or use a browser that supports WebGL 2.
  • An archive does not load: extract it yourself, then add the ROM file.
  • A save does not appear: load the same ROM bytes. rom-weaver uses the ROM's SHA-1 checksum to find its saves.
  • An imported save does not load: confirm that its SHA-1 matches the ROM shown in Storage.
  • The player has no sound on iPhone or iPad: start the game inside the player. Safari requires that direct tap before it enables audio.

The emulator and its cores download from rom-weaver's own origin. With Keep an offline copy on, the offline download includes every core, so offline use needs no per-system step.