Mupen64 - N64 Emulator running

From memory, the n64 emulator here has an uninstall script. Assuming you haven’t changed anything underlying in the architecture of the Gameshell OS, ie nothing re: Debian 10 or the likes, and the N64 emulator is a stand-alone emulator, non dependent on retroarch, doing a fresh install of the n64 emulator should solve your problems.

I appreciate the reply, but I would have no idea how to do it from scratch.

Re: Debian 10, Buster, it’s just the current version of the underlying Linux distro the Gameshell is built on, updating all the tools etc to current version, ready for the “future”. It’s not necessarily the best thing in the world to update just for fun, since a lot of what the Gameshell is built on could be dependent on older version for speed/compatibility. In a nutshell, I don’t recommend doing it unless you know your way around a command line well and what it means to update. Just wanted to check to see what your configuration was so others can help out.

There’s a fair bit of information here in this thread, and a lot of troubleshooting. It’s all up here after a lot of scrolling, but in the past, others have had a similar no screen and sound only problem. I haven’t experienced it myself, so wouldn’t know how to address it.

For now, have a look a this. This is a good start, re: starting from scratch.

Do you know how to SSH, and change directories etc from within a command line? That’s about as much as you’ll need to do in order to get this up and running.

1 Like

Thanks for the easy way to install mupen! I’m really looking forward to seeing future developments and optimizations of it.

1 Like

Speaking of optimizations: will this emulator ever be in a state where the games run smoothly on a Gameshell? I tried some and even Mischief Makers (a 2D game) ran very poorly. I love the N64, but I’m a bit pessimistic when it comes to N64 emulation on the GS.

The first post of this thread shows banjo kazooie running “okay”

It’s about optimising it yourself, on a per game basis. Given that banjo kazooie is a 256 megabit game, and mischief makers is … 96 megabit (from memory), without any special instructions, adding in the optimisations mentioned in this thread, on a trial and error adhoc basis will eventually end up with most games running “okay”

Mupen itself can run most things fine. It’s just a community collaboration to optimise it to run more games on the Gameshell. So I guess in short, eventually, yes the Gameshell will run smoothly, if the community continue to help one another. :slight_smile:

can someone share an “optimal” mupen64plus.cfg
I know its not yet “optimal” but I want to see…

1 Like

It’s a bit more involved than just a config file, but actually compiling it yourself.

This post was one user’s tutorial. (Ie just scrolling up)

There’s references to using the NEON instructions that are present in the gameshell, and possibly a contributing factor re: speed optimisation. This is also something you should do when updating cores in retroarch, and mentioned in this thread. (Nothing to do with mupen64, but for the sake of context re NEON)

I added this to my action.config but for some reason it still won’t start :man_shrugging:t5:

Do you have a blank screen with sound too? I’ve been stuck with that

@blkxltng

It just says “loading”, goes black, then takes me back to the menu. I don’t even get sound :pensive:

Those modifications just point the built in emulator to the assets and dependencies mentioned in this thread. You’ll still need to install them, as has been mentioned a few times in this post. Look at my post a few back from this one. I’ve referenced it there.

If you click on the link, the github page has instructions on how to install it. Just installing it as is will give you video and audio. It’s a matter of following the tweaks and configuration in this forum that users submit to make it run better.

So what would I do with the existing n64 emulator built in?
@javelinface

The existing emulator is also mupen from what it seems is downloaded. Ie, it’s the same one. The only difference is, it doesn’t have any of the dependencies. That’s what the post above “fixed”
Without it, basically, it doesn’t work.
Installing the above emulator won’t do anything to the existing n64 emulator. At the same time, the preinstalled emulator currently doesn’t nothing unless you install the above emulator.
I guess you could choose to delete the existing one if you wanted?

i did not follow any steps or anything here to get mine working, JUST the modification i stated. however i DID do a “sudo apt-get update && sudo apt-get upgrade -y” which may have installed the dependancies. I am a FIRM speaker to the point of do NOT use OS 0.4 they rushed it out, did not complete or test anything. I myself am not even using it any longer. using the forums here I have all the updates and more… as a matter of fact I’m mere weeks from releasing my own 0.3 started based OS that uses an APT source for updates instead of GIT. just working on re-packaging a few more things and testing testing testing.

1 Like

Just a random follow up. Here’s a SUPER ROUGH config file. Runs quick, and dirty. Also as a side affect, may have some different parameters to make the video appear. I have no idea what the config files of the no video people is like.
It’s in the .config/mupen64 directory.

# Mupen64Plus Configuration File

# This file is automatically read and written by the Mupen64Plus Core library

[64DD]

# Filename of the 64DD IPL ROM

IPL-ROM = ""

# Filename of the disk to load into Disk Drive

Disk = ""

[Audio-SDL]

# Mupen64Plus SDL Audio Plugin config parameter version number

Version = 1.000000

# Frequency which is used if rom doesn't want to change it

DEFAULT_FREQUENCY = 33600

# Swaps left and right channels

SWAP_CHANNELS = False

# Size of primary buffer in output samples. This is where audio is loaded after it's extracted from n64's memory.

PRIMARY_BUFFER_SIZE = 16384

# Fullness level target for Primary audio buffer, in equivalent output samples. This value must be larger than the SECONDARY_BUFFER_SIZE. Decreasing this value will reduce audio latency but requires a faster PC to avoid choppiness. Increasing this will increase audio latency but reduce the chance of drop-outs.

PRIMARY_BUFFER_TARGET = 2048

# Size of secondary buffer in output samples. This is SDL's hardware buffer. The SDL documentation states that this should be a power of two between 512 and 8192.

SECONDARY_BUFFER_SIZE = 1024

# Audio resampling algorithm. src-sinc-best-quality, src-sinc-medium-quality, src-sinc-fastest, src-zero-order-hold, src-linear, speex-fixed-{10-0}, trivial

RESAMPLE = "trivial"

# Volume control type: 1 = SDL (only affects Mupen64Plus output) 2 = OSS mixer (adjusts master PC volume)

VOLUME_CONTROL_TYPE = 1

# Percentage change each time the volume is increased or decreased

VOLUME_ADJUST = 5

# Default volume when a game is started. Only used if VOLUME_CONTROL_TYPE is 1

VOLUME_DEFAULT = 80

# Synchronize Video/Audio

AUDIO_SYNC = False

[Core]

# Mupen64Plus Core config parameter set version number. Please don't change this version number.

Version = 1.010000

# Draw on-screen display if True, otherwise don't draw OSD

OnScreenDisplay = False

# Use Pure Interpreter if 0, Cached Interpreter if 1, or Dynamic Recompiler if 2 or more

R4300Emulator = 2

# Disable compiled jump commands in dynamic recompiler (should be set to False)

NoCompiledJump = False

# Disable 4MB expansion RAM pack. May be necessary for some games

DisableExtraMem = True

# Increment the save state slot after each save operation

AutoStateSlotIncrement = False

# Activate the R4300 debugger when ROM execution begins, if core was built with Debugger support

EnableDebugger = False

# Save state slot (0-9) to use when saving/loading the emulator state

CurrentStateSlot = 0

# Path to directory where screenshots are saved. If this is blank, the default value of ${UserDataPath}/screenshot will be used

ScreenshotPath = ""

# Path to directory where emulator save states (snapshots) are saved. If this is blank, the default value of ${UserDataPath}/save will be used

SaveStatePath = ""

# Path to directory where SRAM/EEPROM data (in-game saves) are stored. If this is blank, the default value of ${UserDataPath}/save will be used

SaveSRAMPath = ""

# Path to a directory to search when looking for shared data files

SharedDataPath = ""

# Force number of cycles per emulated instruction

CountPerOp = 0

# Randomize PI/SI Interrupt Timing

RandomizeInterrupt = True

# Duration of SI DMA (-1: use per game settings)

SiDmaDuration = -1

# Gameboy Camera Video Capture backend

GbCameraVideoCaptureBackend1 = ""

[CoreEvents]

# Mupen64Plus CoreEvents config parameter set version number. Please don't change this version number.

Version = 1.000000

# SDL keysym for stopping the emulator

Kbd Mapping Stop = 27

# SDL keysym for switching between fullscreen/windowed modes

Kbd Mapping Fullscreen = 0

# SDL keysym for saving the emulator state

Kbd Mapping Save State = 286

# SDL keysym for loading the emulator state

Kbd Mapping Load State = 288

# SDL keysym for advancing the save state slot

Kbd Mapping Increment Slot = 0

# SDL keysym for resetting the emulator

Kbd Mapping Reset = 290

# SDL keysym for slowing down the emulator

Kbd Mapping Speed Down = 291

# SDL keysym for speeding up the emulator

Kbd Mapping Speed Up = 292

# SDL keysym for taking a screenshot

Kbd Mapping Screenshot = 293

# SDL keysym for pausing the emulator

Kbd Mapping Pause = 112

# SDL keysym for muting/unmuting the sound

Kbd Mapping Mute = 109

# SDL keysym for increasing the volume

Kbd Mapping Increase Volume = 93

# SDL keysym for decreasing the volume

Kbd Mapping Decrease Volume = 91

# SDL keysym for temporarily going really fast

Kbd Mapping Fast Forward = 102

# SDL keysym for advancing by one frame when paused

Kbd Mapping Frame Advance = 47

# SDL keysym for pressing the game shark button

Kbd Mapping Gameshark = 103

# Joystick event string for stopping the emulator

Joy Mapping Stop = ""

# Joystick event string for switching between fullscreen/windowed modes

Joy Mapping Fullscreen = ""

# Joystick event string for saving the emulator state

Joy Mapping Save State = ""

# Joystick event string for loading the emulator state

Joy Mapping Load State = ""

# Joystick event string for advancing the save state slot

Joy Mapping Increment Slot = ""

# Joystick event string for resetting the emulator

Joy Mapping Reset = ""

# Joystick event string for slowing down the emulator

Joy Mapping Speed Down = ""

# Joystick event string for speeding up the emulator

Joy Mapping Speed Up = ""

# Joystick event string for taking a screenshot

Joy Mapping Screenshot = ""

# Joystick event string for pausing the emulator

Joy Mapping Pause = ""

# Joystick event string for muting/unmuting the sound

Joy Mapping Mute = ""

# Joystick event string for increasing the volume

Joy Mapping Increase Volume = ""

# Joystick event string for decreasing the volume

Joy Mapping Decrease Volume = ""

# Joystick event string for fast-forward

Joy Mapping Fast Forward = ""

# Joystick event string for advancing by one frame when paused

Joy Mapping Frame Advance = ""

# Joystick event string for pressing the game shark button

Joy Mapping Gameshark = ""

[Input-SDL-Control1]

# Mupen64Plus SDL Input Plugin config parameter version number. Please don't change this version number.

version = 2.000000

# Controller configuration mode: 0=Fully Manual, 1=Auto with named SDL Device, 2=Fully automatic

mode = 0

# Specifies which joystick is bound to this controller: -1=No joystick, 0 or more= SDL Joystick number

device = -1

# SDL joystick name (or Keyboard)

name = "Keyboard"

# Specifies whether this controller is 'plugged in' to the simulated N64

plugged = True

# Specifies which type of expansion pak is in the controller: 1=None, 2=Mem pak, 4=Transfer pak, 5=Rumble pak

plugin = 2

# If True, then mouse buttons may be used with this controller

mouse = False

# Scaling factor for mouse movements. For X, Y axes.

MouseSensitivity = "2.00,2.00"

# The minimum absolute value of the SDL analog joystick axis to move the N64 controller axis value from 0. For X, Y axes.

AnalogDeadzone = "4096,4096"

# An absolute value of the SDL joystick axis >= AnalogPeak will saturate the N64 controller axis value (at 80). For X, Y axes. For each axis, this must be greater than the corresponding AnalogDeadzone value

AnalogPeak = "32768,32768"

# Digital button configuration mappings

DPad R = "key(100)"

DPad L = "key(97)"

DPad D = "key(115)"

DPad U = "key(119)"

Start = "key(13)"

Z Trig = "key(104)"

B Button = "key(106)"

A Button = "key(107)"

C Button R = "key(23)"

C Button L = "key(57)"

C Button D = "key(117)"

C Button U = "key(105)"

R Trig = "key(108)"

L Trig = "key(121)"

Mempak switch = "key(44)"

Rumblepak switch = "key(46)"

# Analog axis configuration mappings

X Axis = "key(276,275)"

Y Axis = "key(273,274)"

[Input-SDL-Control2]

# Mupen64Plus SDL Input Plugin config parameter version number. Please don't change this version number.

version = 2.000000

# Controller configuration mode: 0=Fully Manual, 1=Auto with named SDL Device, 2=Fully automatic

mode = 2

# Specifies which joystick is bound to this controller: -1=No joystick, 0 or more= SDL Joystick number

device = -1

# SDL joystick name (or Keyboard)

name = ""

# Specifies whether this controller is 'plugged in' to the simulated N64

plugged = False

# Specifies which type of expansion pak is in the controller: 1=None, 2=Mem pak, 4=Transfer pak, 5=Rumble pak

plugin = 2

# If True, then mouse buttons may be used with this controller

mouse = False

# Scaling factor for mouse movements. For X, Y axes.

MouseSensitivity = "2.00,2.00"

# The minimum absolute value of the SDL analog joystick axis to move the N64 controller axis value from 0. For X, Y axes.

AnalogDeadzone = "4096,4096"

# An absolute value of the SDL joystick axis >= AnalogPeak will saturate the N64 controller axis value (at 80). For X, Y axes. For each axis, this must be greater than the corresponding AnalogDeadzone value

AnalogPeak = "32768,32768"

# Digital button configuration mappings

DPad R = ""

DPad L = ""

DPad D = ""

DPad U = ""

Start = ""

Z Trig = ""

B Button = ""

A Button = ""

C Button R = ""

C Button L = ""

C Button D = ""

C Button U = ""

R Trig = ""

L Trig = ""

Mempak switch = ""

Rumblepak switch = ""

# Analog axis configuration mappings

X Axis = ""

Y Axis = ""

[Input-SDL-Control3]

# Mupen64Plus SDL Input Plugin config parameter version number. Please don't change this version number.

version = 2.000000

# Controller configuration mode: 0=Fully Manual, 1=Auto with named SDL Device, 2=Fully automatic

mode = 2

# Specifies which joystick is bound to this controller: -1=No joystick, 0 or more= SDL Joystick number

device = -1

# SDL joystick name (or Keyboard)

name = ""

# Specifies whether this controller is 'plugged in' to the simulated N64

plugged = False

# Specifies which type of expansion pak is in the controller: 1=None, 2=Mem pak, 4=Transfer pak, 5=Rumble pak

plugin = 2

# If True, then mouse buttons may be used with this controller

mouse = False

# Scaling factor for mouse movements. For X, Y axes.

MouseSensitivity = "2.00,2.00"

# The minimum absolute value of the SDL analog joystick axis to move the N64 controller axis value from 0. For X, Y axes.

AnalogDeadzone = "4096,4096"

# An absolute value of the SDL joystick axis >= AnalogPeak will saturate the N64 controller axis value (at 80). For X, Y axes. For each axis, this must be greater than the corresponding AnalogDeadzone value

AnalogPeak = "32768,32768"

# Digital button configuration mappings

DPad R = ""

DPad L = ""

DPad D = ""

DPad U = ""

Start = ""

Z Trig = ""

B Button = ""

A Button = ""

C Button R = ""

C Button L = ""

C Button D = ""

C Button U = ""

R Trig = ""

L Trig = ""

Mempak switch = ""

Rumblepak switch = ""

# Analog axis configuration mappings

X Axis = ""

Y Axis = ""

[Input-SDL-Control4]

# Mupen64Plus SDL Input Plugin config parameter version number. Please don't change this version number.

version = 2.000000

# Controller configuration mode: 0=Fully Manual, 1=Auto with named SDL Device, 2=Fully automatic

mode = 2

# Specifies which joystick is bound to this controller: -1=No joystick, 0 or more= SDL Joystick number

device = -1

# SDL joystick name (or Keyboard)

name = ""

# Specifies whether this controller is 'plugged in' to the simulated N64

plugged = False

# Specifies which type of expansion pak is in the controller: 1=None, 2=Mem pak, 4=Transfer pak, 5=Rumble pak

plugin = 2

# If True, then mouse buttons may be used with this controller

mouse = False

# Scaling factor for mouse movements. For X, Y axes.

MouseSensitivity = "2.00,2.00"

# The minimum absolute value of the SDL analog joystick axis to move the N64 controller axis value from 0. For X, Y axes.

AnalogDeadzone = "4096,4096"

# An absolute value of the SDL joystick axis >= AnalogPeak will saturate the N64 controller axis value (at 80). For X, Y axes. For each axis, this must be greater than the corresponding AnalogDeadzone value

AnalogPeak = "32768,32768"

# Digital button configuration mappings

DPad R = ""

DPad L = ""

DPad D = ""

DPad U = ""

Start = ""

Z Trig = ""

B Button = ""

A Button = ""

C Button R = ""

C Button L = ""

C Button D = ""

C Button U = ""

R Trig = ""

L Trig = ""

Mempak switch = ""

Rumblepak switch = ""

# Analog axis configuration mappings

X Axis = ""

Y Axis = ""

[Rsp-HLE]

# Mupen64Plus RSP HLE Plugin config parameter version number

Version = 1.000000

# Path to a RSP plugin which will be used when encountering an unknown ucode.You can disable this by letting an empty string.

RspFallback = ""

# Send display lists to the graphics plugin

DisplayListToGraphicsPlugin = True

# Send audio lists to the audio plugin

AudioListToAudioPlugin = False

[Transferpak]

# Filename of the GB ROM to load into transferpak 1

GB-rom-1 = ""

# Filename of the GB RAM to load into transferpak 1

GB-ram-1 = ""

# Filename of the GB ROM to load into transferpak 2

GB-rom-2 = ""

# Filename of the GB RAM to load into transferpak 2

GB-ram-2 = ""

# Filename of the GB ROM to load into transferpak 3

GB-rom-3 = ""

# Filename of the GB RAM to load into transferpak 3

GB-ram-3 = ""

# Filename of the GB ROM to load into transferpak 4

GB-rom-4 = ""

# Filename of the GB RAM to load into transferpak 4

GB-ram-4 = ""

[UI-Console]

# Mupen64Plus UI-Console config parameter set version number. Please don't change this version number.

Version = 1.000000

# Directory in which to search for plugins

PluginDir = "/usr/local/lib/mupen64plus/"

# Filename of video plugin

VideoPlugin = "mupen64plus-video-rice"

# Filename of audio plugin

AudioPlugin = "mupen64plus-audio-sdl.so"

# Filename of input plugin

InputPlugin = "mupen64plus-input-sdl.so"

# Filename of RSP plugin

RspPlugin = "mupen64plus-rsp-hle.so"

[Video-General]

# Use fullscreen mode if True, or windowed mode if False

Fullscreen = True

# Width of output window or fullscreen width

ScreenWidth = 320

# Height of output window or fullscreen height

ScreenHeight = 240

# If true, activate the SDL_GL_SWAP_CONTROL attribute

VerticalSync = False

[Video-Rice]

# Mupen64Plus Rice Video Plugin config parameter version number

Version = 1

# Frame Buffer Emulation (0=ROM default, 1=disable)

FrameBufferSetting = 1

# Frequency to write back the frame buffer (0=every frame, 1=every other frame, etc)

FrameBufferWriteBackControl = 1

# Render-to-texture emulation (0=none, 1=ignore, 2=normal, 3=write back, 4=write back and reload)

RenderToTexture = 0

# Control when the screen will be updated (0=ROM default, 1=VI origin update, 2=VI origin change, 3=CI change, 4=first CI change, 5=first primitive draw, 6=before screen clear, 7=after screen drawn)

ScreenUpdateSetting = 5

# Force to use normal alpha blender

NormalAlphaBlender = False

# Use a faster algorithm to speed up texture loading and CRC computation

FastTextureLoading = True

# Use different texture coordinate clamping code

AccurateTextureMapping = True

# Force emulated frame buffers to be in N64 native resolution

InN64Resolution = False

# Try to reduce Video RAM usage (should never be used)

SaveVRAM = False

# Enable this option to have better render-to-texture quality

DoubleSizeForSmallTxtrBuf = False

# Force to use normal color combiner

DefaultCombinerDisable = False

# Enable game-specific settings from INI file

EnableHacks = True

# If enabled, graphics will be drawn in WinFrame mode instead of solid and texture mode

WinFrameMode = True

# N64 Texture Memory Full Emulation (may fix some games, may break others)

FullTMEMEmulation = False

# Enable vertex clipper for fog operations

OpenGLVertexClipper = True

# Enable/Disable SSE optimizations for capable CPUs

EnableSSE = True

# If this option is enabled, the plugin will skip every other frame

SkipFrame = True

# If enabled, texture enhancement will be done only for TxtRect ucode

TexRectOnly = True

# If enabled, texture enhancement will be done only for textures width+height<=128

SmallTextureOnly = True

# Select hi-resolution textures based only on the CRC and ignore format+size information (Glide64 compatibility)

LoadHiResCRCOnly = Falae

# Enable hi-resolution texture file loading

LoadHiResTextures = False

# Enable texture dumping

DumpTexturesToFiles = False

# Display On-screen FPS

ShowFPS = False

# Use Mipmapping? 0=no, 1=nearest, 2=bilinear, 3=trilinear

Mipmapping = 0

# Enable, Disable fog generation (0=Disable, 1=Enable)

FogMethod = 0

# Force to use texture filtering or not (0=auto: n64 choose, 1=force no filtering, 2=force filtering)

ForceTextureFilter = 1

# Primary texture enhancement filter (0=None, 1=2X, 2=2XSAI, 3=HQ2X, 4=LQ2X, 5=HQ4X, 6=Sharpen, 7=Sharpen More, 8=External, 9=Mirrored)

TextureEnhancement = 0

# Secondary texture enhancement filter (0 = none, 1-4 = filtered)

TextureEnhancementControl = 0

# Color bit depth to use for textures (0=default, 1=32 bits, 2=16 bits)

TextureQuality = 16

# Z-buffer depth (only 16 or 32)

OpenGLDepthBufferSetting = 16

# Enable/Disable MultiSampling (0=off, 2,4,8,16=quality)

MultiSampling = 0

# Color bit depth for rendering window (0=32 bits, 1=16 bits)

ColorQuality = 1

# OpenGL level to support (0=auto, 1=OGL_FRAGMENT_PROGRAM)

OpenGLRenderSetting = 1

# Enable/Disable Anisotropic Filtering for Mipmapping (0=no filtering, 2-16=quality). This is uneffective if Mipmapping is 0. If the given value is to high to be supported by your graphic card, the value will be the highest value your graphic card can support. Better result with Trilinear filtering

AnisotropicFiltering = 0

# If true, use polygon offset values specified below

ForcePolygonOffset = False

# Specifies a scale factor that is used to create a variable depth offset for each polygon

PolygonOffsetFactor = 0.000000

# Is multiplied by an implementation-specific value to create a constant depth offset

PolygonOffsetUnits = 0.000000
1 Like

If anyone didn‘t notice - my config lies here:

1 Like

Ah good to see you’re still here!
I remember seeing something saying this was optimised for banjo kazooie. I’m guessing it should run just as well, seeing as it’s the same console. But just confirming, there wasn’t any blaring compatibility issue with other roms?

1 Like

Hey there - strange enough: Banjo Kazooie runs just fine. Super Mario 64 has major visual problems. Didn‘t test any other game yet.

1 Like

I’m so lost, I took your advice and built from the ground up, then used your config file and @Hawanna config file, but still no video, just sound, but I can still control the game. Please help
Trying to play Doom 64