Skip to content

[Bug] Very large N64 games refuse to load #1173

@PokemonHacker1337

Description

@PokemonHacker1337

Make sure your issue doesn't get closed! Make sure you have done the following items

  • I have collected a FULL log of the console, with EJS_DEBUG_XX set to true, and uploaded it straight to GitHub.
  • I have not made any changes to the EmulatorJS instance I am running into this bug on.
  • I am on the latest version of EmulatorJS
  • I have not attached any images or logs via external sites. I have uploaded them straight to GitHub and acknowledge that external sites may pose a security issue.
  • I have included, IN DETAIL, the steps to reproduce the bug.

I posted about this in the Discord server, but I figured it is worth mentioning here too. N64 games larger than 64 MB appear to not work. I noticed this with the ROM hack B3313 version 1.0.2 (note: the download is to a patch file, not a ROM).

This is known in other emulators and has a bit of a writeup at https://docs.chlorobyte.me/2023/mupen_readme/. B3313 is 96 MB, exceeding the 64 MB limit. The other cores in emulatorjs do not help either (if loaded by an HTML outside of the demo where I can specify the core used). This is not an issue with B3313 otherwise as it works in other emulators like RMG. Also, earlier builds of B3313 that conform to the file size do work perfectly fine.

Attempting to boot larger games like this gives me these errors in the console:

emulator.min.js:1 Failed to start game RuntimeError: memory access out of bounds
at d726c45b-77db-44d7-940e-215f5deaf1c8:0x170edb
at d726c45b-77db-44d7-940e-215f5deaf1c8:0x320834
at ret. [as resetCheat] (9b7b4be4-6683-4e67-afb5-b7738c3687ae:13:153569)
at EJS_GameManager.resetCheat (emulator.min.js:1:425007)
at EmulatorJS.updateCheatUI (emulator.min.js:1:406474)
at EmulatorJS.startGame (emulator.min.js:1:233715)
at emulator.min.js:1:232293
startGame @ emulator.min.js:1
(anonymous) @ emulator.min.js:1
await in (anonymous)
downloadFiles @ emulator.min.js:1
(anonymous) @ emulator.min.js:1
Promise.then
initModule @ emulator.min.js:1
(anonymous) @ emulator.min.js:1
script
createElement @ emulator.min.js:1
initGameCore @ emulator.min.js:1
(anonymous) @ emulator.min.js:1
Promise.then
t @ emulator.min.js:1
(anonymous) @ emulator.min.js:1
Promise.then
downloadGameCore @ emulator.min.js:1
startButtonClicked @ emulator.min.js:1
createStartButton @ emulator.min.js:1
EmulatorJS @ emulator.min.js:1
(anonymous) @ loader.js:150
await in (anonymous)
(anonymous) @ loader.js:170
PendingScript
(anonymous) @ (index):201Understand this warning
emulator.min.js:1 RuntimeError: Aborted(undefined). Build with -sASSERTIONS for more info.
at Object.abort (9b7b4be4-6683-4e67-afb5-b7738c3687ae:13:3089)
at emulator.min.js:1:417866

In the regular window, it just throws a red "Failed to start game" error. The emulator does not attempt to launch the game because of the size. This isn't going to be an issue with any official N64 game, but games that are larger than 64 MB (exclusively ROM hacks and maybe very large homebrew games if those ever get created) will fail to load.

I admit that this is quite low priority as the number of ROM hacks I know of that are bigger than 64 MB can be counted on 1 hand (B3313 and Dream64), but for compatibility, could the memory limit for N64 ROMs be increased to 256 MB instead of just 64?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions