Mupen64Plus is a cross-platform N64 emulator that works with many ROMs that are publically available. It is maintained by richard42 and was originally based off of mupen64, created by Hacktarux.

Mupen64Plus runs in the command line by default. Install a frontend like mupen64plus-qt or M64Py to use mupen64plus with a GUI.


apt-get install mupen64plus-ui-console

or to install Mupen64Plus-Qt:

apt-get install mupen64plus-qt

or to install M64Py:

sudo dpkg -i m64py_0.2.3-0_all.deb
sudo apt-get install -f


Just run the command with a path to the ROM:

mupen64plus <rom.n64>

Any options you pass once will be saved in the configuration and won't need to be repeated:

mupen64plus --resolution 800x600 --fullscreen <rom.n64>
mupen64plus <rom.n64> # runs fullscreen in 800x600

Key Commands


Quit the emulator


Select virtual 'slot' for save/load state (F5 and F7) commands


Save emulator state


Load emulator state


Reset emulator


slow down emulator by 5%


speed up emulator by 5%


take screenshot


Toggle between windowed and fullscreen

p or P

Pause on/off

m or M

Mute/unmute sound

g or G

Press "Game Shark" button (only if cheats are enabled)

/ or ?

single frame advance while paused


Fast Forward (playback at 250% normal speed while F key is pressed)


Decrease volume


Increase volume

Set Custom Controls

Open the ~/.config/mupen64plus/mupen64plus.cfg file with a text editor and navigate to the "[Input-SDL-ControlX]" section (X being the N64 controller port to configure, starting at 1).

First, change mode = 2 to mode = 0 to override the autoconfiguration.


# Mupen64Plus SDL Input Plugin config parameter version number.  Please don't change this version number.
version = 2
# 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 = 0
# Specifies whether this controller is 'plugged in' to the simulated N64
plugged = True

If you're using a joystick:

Install jstest-gtk (or joystick for jstest in command-line). This is required to view button presses in real-time with an interface.

Change the device value to the joystick index (/dev/input/jsX). Now, run jstest-gtk (or jstest /dev/input/jsX) and press buttons on the controller. Edit the fields in the file that correspond with the buttons you activate (for instance, Start = "button(9)", 9 is the number on jstest-gtk that lights up when pressing the middle button). Buttons can be set to an axis ID and direction as well (usually for C-buttons).

jstest-gtk while pressing buttons|

If you're using a keyboard:

Download this file to get the corresponding key IDs from their names. Edit each button field in the section, providing a name = "key(X)", where X is the key ID found in the downloaded file.

If you ever need to reset the controls back to their autoconfigured state, change mode = 0 back to mode = 2 and restart the emulator.

An example button configuration:

# Digital button configuration mappings
DPad R = "axis(4+)"
DPad L = "axis(4-)"
DPad D = "axis(5+)"
DPad U = "axis(5-)"
Start = "button(9)"
Z Trig = "button(6)"
B Button = "button(3)"
A Button = "button(2)"
C Button R = "axis(3+)"
C Button L = "axis(3-)"
3 Button D = "axis(2+)"
C Button U = "axis(2-)"
R Trig = "button(7)"
L Trig = "button(4)"
Mempak switch = ""
Rumblepak switch = ""
# Analog axis configuration mappings
X Axis = "axis(0-,0+)"
Y Axis = "axis(1-,1+)"

N64 controller face

Recommended Xbox controller mapping

Enabling Rumble Pak support:

The DualShock, Xbox 360 and many other controllers support force feedback. On the Nintendo 64, this was achieved with an additional controller expanasion called the "Rumble Pak". Mupen64Plus can emulate the insertion of a Rumble Pak by mapping a button to Rumblepak switch. Many games such as Star Fox, Super Smash Bros and Ocarina of Time support this feature.

See Also