Mupen64 - N64 Emulator running


#1

Hey folks,

I finally got it to work. Mupen64 is running on my GameShell. Pretty decent performance as far as I could test. Have to map controls next and test some graphic tweaks/plugins. Have a quick look at this handsome yellow GameShell running my favorite game of all time.

Tutorial will follow soon - I’m going to get some sleep now… But I was so excited to share :smiley:

The Emulator is not running within RetroArch. I’m thinking about a submenu-style installation from within the GS Launcher with automatic Rom Images and game loading. Imagine how nice it would be just to place some roms on the device and getting a neat icon and launch-script automatically deployed.

Videos:
Banjo & Kazooie Main Screen
Start Procedure


Nintendo 64 emulator
#2

Thanks for your taking the time to research how to make this emulator to work. Did you actually need to compile it yourself or did you just download the binaries from some repository? In case you compiled it, could you upload the files to a GitHub repository?

Although I don’t understand the last paragraph very well. Why would we need an icon to install the emulator? The only thing we would need once is installed, and this is why it would be important to know the procedure and then simplify its installation with a bash script, is an icon to open the roms in mupen64 from the launcher. And I must say, this last thing is fair easy to do, so it would be a good a idea to also include that procedure in the installation bash script.


#3

Hey there,

  1. Yes, I had to build it from source - pretty straight process, if you want to look at that on your own. :slight_smile:
    I still have to sort things out, since I installed a lot of plugins / ui that wasn’t even required. Currently using the console interface for passing DISPLAY and stuff to get things working (see video).

  2. Nah, that happens when I try to be an English person when its late :relieved:. I didn’t mean to install the Emulator via “Icon” but having a routine automatically crawling all N64 roms placed on the device and creating menu entries/start scripts for the Emulator to achieve a “Click’n’Play” experience. I personally don’t like using RetroArch that much.

tl;dr: Launcher for Roms on the Emulator, not the Installation/Emulator itself.


#4

Mmh…I’ll try to compile it myself this afternoon since yesterday I didn’t have time at all. I think what you’re talking about is a pretty straight proccess, just to create a folder and action.config file for the emulator within the Menu folder of the launcher and another folder in ~/apps/games/{emulator} to put the roms there. Then it could be possible to open the roms directly from the menu.


#5

It defenitely is, but also has to be written down/done. Just sayin‘ that I wanted to achieve that too :slight_smile:

Still having problems regarding z-buffer - have to fiddle around with plugins, but I fiddled a script that downloaded and compiled successfully.

#!/bin/bash
# Script to build and install mupen64 emulator on ClockworkPi GameShell from source.
# Script written by Hawanna
# For ClockworkPi GameShell
# ClockworkOS 0.3
# Inspired by knuxyl
# For ASUS Tinker Board
# ------------------------------------------------------------

# If you are not using the default user account, please change the user variable below to your username
user="cpi"

# Build source locations
if [[ ! -d "mupen" ]]; then
    mkdir "mupen"
    cd "mupen"
    mkdir "zip"
    mkdir "source"
else
    sudo rm -R mupen
    mkdir "mupen"
    cd "mupen"
    mkdir "zip"
    mkdir "source"
fi
clear

# ------------------------------------------------------------
# Installing dependencies
# ------------------------------------------------------------

sudo apt-get install -y libfreetype6 libfreetype6-dev libpng-dev zlib1g-dev zlib1g libsdl2-2.0-0 libsdl2-dev python-pyqt5 pyqt5-dev-tools python-pyqt5.qtopengl qt5-default git p7zip-full python-pip python-setuptools libboost-dev libboost-filesystem-dev
clear
cd "source"

# ------------------------------------------------------------
# Downloading the latest packages and putting them in archives for backup
# ------------------------------------------------------------

echo "------------------------------------------------------------"
echo "--- Downloading mupen64plus-core ---"
echo "------------------------------------------------------------"
git clone --recursive --quiet https://github.com/mupen64plus/mupen64plus-core
7za a ../zip/mupen64plus-core.zip mupen64plus-core
echo "------------------------------------------------------------"
echo "--- Downloading mupen64plus-audio-sdl ---"
echo "------------------------------------------------------------"
git clone --recursive --quiet https://github.com/mupen64plus/mupen64plus-audio-sdl
7za a ../zip/mupen64plus-audio-sdl.zip mupen64plus-audio-sdl
echo "------------------------------------------------------------"
echo "--- Downloading mupen64plus-input-sdl ---"
echo "------------------------------------------------------------"
git clone --recursive --quiet https://github.com/mupen64plus/mupen64plus-input-sdl
7za a ../zip/mupen64plus-input-sdl.zip mupen64plus-input-sdl
echo "------------------------------------------------------------"
echo "--- Downloading mupen64plus-ui-console ---"
echo "------------------------------------------------------------"
git clone --recursive --quiet https://github.com/mupen64plus/mupen64plus-ui-console
7za a ../zip/mupen64plus-ui-console.zip mupen64plus-ui-console
echo "------------------------------------------------------------"
echo "--- Downloading mupen64plus-rsp-hle ---"
echo "------------------------------------------------------------"
git clone --recursive --quiet https://github.com/mupen64plus/mupen64plus-rsp-hle
7za a ../zip/mupen64plus-rsp-hle.zip mupen64plus-rsp-hle
echo "------------------------------------------------------------"
echo "--- Downloading mupen64plus-rsp-cxd4 ---"
echo "------------------------------------------------------------"
git clone --recursive --quiet https://github.com/mupen64plus/mupen64plus-rsp-cxd4
7za a ../zip/mupen64plus-rsp-cxd4.zip mupen64plus-rsp-cxd4
echo "------------------------------------------------------------"
echo "--- Downloading mupen64plus-rsp-z64 ---"
echo "------------------------------------------------------------"
git clone --recursive --quiet https://github.com/mupen64plus/mupen64plus-rsp-z64
7za a ../zip/mupen64plus-rsp-z64.zip mupen64plus-rsp-z64
echo "------------------------------------------------------------"
echo "--- Downloading mupen64plus-video-glide64mk2 ---"
echo "------------------------------------------------------------"
git clone --recursive --quiet https://github.com/mupen64plus/mupen64plus-video-glide64mk2
7za a ../zip/mupen64plus-video-glide64mk2.zip mupen64plus-video-glide64mk2
echo "------------------------------------------------------------"
echo "--- Downloading mupen64plus-video-arachnoid ---"
echo "------------------------------------------------------------"
git clone --recursive --quiet https://github.com/mupen64plus/mupen64plus-video-arachnoid
7za a ../zip/mupen64plus-video-arachnoid.zip mupen64plus-video-arachnoid
echo "------------------------------------------------------------"
echo "--- Downloading mupen64plus-video-rice ---"
echo "------------------------------------------------------------"
git clone --recursive --quiet https://github.com/mupen64plus/mupen64plus-video-rice
7za a ../zip/mupen64plus-video-rice.zip mupen64plus-video-rice
echo "------------------------------------------------------------"
echo "--- Downloading mupen64plus-video-z64 ---"
echo "------------------------------------------------------------"
git clone --recursive --quiet https://github.com/mupen64plus/mupen64plus-video-z64
7za a ../zip/mupen64plus-video-z64.zip mupen64plus-video-z64

# ------------------------------------------------------------
# Building all the packages and installing them
# ------------------------------------------------------------

echo "------------------------------------------------------------"
echo "--- Building core ---"
echo "------------------------------------------------------------"
cd mupen64plus-core/projects/unix
make NEON=1 VFP_HARD=1 USE_GLES=1 all
sudo NEON=1 VFP_HARD=1 USE_GLES=1 make install
echo "------------------------------------------------------------"
echo "--- Building audio-sdl ---"
echo "------------------------------------------------------------"
cd ../../../mupen64plus-audio-sdl/projects/unix
make NEON=1 VFP_HARD=1 USE_GLES=1 all
sudo make install
echo "------------------------------------------------------------"
echo "--- Building input-sdl ---"
echo "------------------------------------------------------------"
cd ../../../mupen64plus-input-sdl/projects/unix
make NEON=1 VFP_HARD=1 USE_GLES=1 all
sudo NEON=1 VFP_HARD=1 USE_GLES=1 make install
echo "------------------------------------------------------------"
echo "--- Building ui-console ---"
echo "------------------------------------------------------------"
cd ../../../mupen64plus-ui-console/projects/unix
make NEON=1 VFP_HARD=1 PIE=1 USE_GLES=1 all
sudo NEON=1 VFP_HARD=1 USE_GLES=1 make install

echo "------------------------------------------------------------"
echo "--- Building rsp-hle ---"
echo "------------------------------------------------------------"
cd ../../mupen64plus-rsp-hle/projects/unix
make NEON=1 VFP_HARD=1 USE_GLES=1 all
sudo NEON=1 VFP_HARD=1 USE_GLES=1 make install
echo "------------------------------------------------------------"
echo "--- Building rsp-cxd4 ---"
echo "------------------------------------------------------------"
cd ../../../mupen64plus-rsp-cxd4/projects/unix
make NEON=1 VFP_HARD=1 USE_GLES=1 all
sudo NEON=1 VFP_HARD=1 USE_GLES=1 make install
echo "------------------------------------------------------------"
echo "--- Building rsp-z64 ---"
echo "------------------------------------------------------------"
cd ../../../mupen64plus-rsp-z64/projects/unix
make NEON=1 VFP_HARD=1 USE_GLES=1 all
sudo NEON=1 VFP_HARD=1 USE_GLES=1 make install
echo "------------------------------------------------------------"
echo "--- Building video-glide64mk2 ---"
echo "------------------------------------------------------------"
cd ../../../mupen64plus-video-glide64mk2/projects/unix
make NEON=1 VFP_HARD=1 USE_GLES=1 all
sudo NEON=1 VFP_HARD=1 USE_GLES=1 make install
echo "------------------------------------------------------------"
echo "--- Building video-arachnoid ---"
echo "------------------------------------------------------------"
cd ../../../mupen64plus-video-arachnoid/projects/unix
make NEON=1 VFP_HARD=1 USE_GLES=1 all
sudo NEON=1 VFP_HARD=1 USE_GLES=1 make install
echo "------------------------------------------------------------"
echo "--- Building video-rice ---"
echo "------------------------------------------------------------"
cd ../../../mupen64plus-video-rice/projects/unix
make NEON=1 VFP_HARD=1 USE_GLES=1 all
sudo NEON=1 VFP_HARD=1 USE_GLES=1 make install
echo "------------------------------------------------------------"
echo "--- Building video-z64 ---"
echo "------------------------------------------------------------"
cd ../../../mupen64plus-video-z64/projects/unix
make NEON=1 VFP_HARD=1 USE_GLES=1 all
sudo NEON=1 VFP_HARD=1 USE_GLES=1 make install

Load a Game:

export DISPLAY=:0; mupen64plus --fullscreen /home/cpi/roms/n64/Banjo-Kazooie\ \(U\)\ \[\!\].z64

Config file:

# 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 = True
# 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 = False
# 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 = "./"
# Filename of video plugin
VideoPlugin = "mupen64plus-video-rice.so"
# 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 = 0
# 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 = 1
# Force to use normal alpha blender
NormalAlphaBlender = True
# Use a faster algorithm to speed up texture loading and CRC computation
FastTextureLoading = False
# 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 = False
# N64 Texture Memory Full Emulation (may fix some games, may break others)
FullTMEMEmulation = False
# Enable vertex clipper for fog operations
OpenGLVertexClipper = False
# Enable/Disable SSE optimizations for capable CPUs
EnableSSE = True
# If this option is enabled, the plugin will skip every other frame
SkipFrame = False
# If enabled, texture enhancement will be done only for TxtRect ucode
TexRectOnly = False
# If enabled, texture enhancement will be done only for textures width+height<=128
SmallTextureOnly = False
# Select hi-resolution textures based only on the CRC and ignore format+size information (Glide64 compatibility)
LoadHiResCRCOnly = True
# 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 = 2
# Enable, Disable fog generation (0=Disable, 1=Enable)
FogMethod = 1
# Force to use texture filtering or not (0=auto: n64 choose, 1=force no filtering, 2=force filtering)
ForceTextureFilter = 0
# 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 = 0
# 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 = 0
# OpenGL level to support (0=auto, 1=OGL_FRAGMENT_PROGRAM)
OpenGLRenderSetting = 0
# 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

#6

Thanks. I compiled everything and I get sound but not video at all. I even tried with the same rom as you and I don’t see anything a part from a black screen when I open the rom.

This is the output I get from the command:

Mupen64Plus Console User-Interface Version 2.5.9

UI-Console: attached to core library 'Mupen64Plus Core' version 2.5.9
UI-Console:             Includes support for Dynamic Recompiler.
Core: Using full mem base
Core: Goodname: Banjo-Kazooie (U) (V1.0) [!]
Core: Name: Banjo-Kazooie
Core: MD5: B29599651A13F681C9923D69354BF4A3
Core: CRC: A4BF9306 BF0CDFD1
Core: Imagetype: .z64 (native)
Core: Rom size: 16777216 bytes (or 16 Mb or 128 Megabits)
Core: Version: 1448
Core: Manufacturer: Nintendo
Core: Country: USA
UI-Console Status: Cheat codes disabled.
UI-Console: using Video plugin: 'Mupen64Plus OpenGL Video Plugin by Rice' v2.5.9
UI-Console: using Audio plugin: 'Mupen64Plus SDL Audio Plugin' v2.5.9
UI-Console: using Input plugin: 'Mupen64Plus SDL Input Plugin' v2.5.9
UI-Console: using RSP plugin: 'Z64 RSP Plugin' v2.0.0
Input: 0 SDL joysticks were found.
Input: N64 Controller #1: Using manual config with no SDL joystick (keyboard/mouse only)
Input: 1 controller(s) found, 1 plugged in and usable in the emulator
Input Warning: Couldn't open rumble support for joystick #1
Input Warning: Couldn't open rumble support for joystick #2
Input Warning: Couldn't open rumble support for joystick #3
Input Warning: Couldn't open rumble support for joystick #4
Input: Mupen64Plus SDL Input Plugin version 2.5.9 initialized.
RSP Status: INITIATE RSP
Core: Using video capture backend: dummy
Core: Game controller 0 (Standard controller) has a Memory pak plugged in
Core: Game controller 1 (Standard controller) has a Memory pak plugged in
Core: Game controller 2 (Standard controller) has a Memory pak plugged in
Core: Game controller 3 (Standard controller) has a Memory pak plugged in
Core: Using CIC type X103
Video: Disabled SSE processing.
Video: Found ROM 'Banjo-Kazooie', CRC 0693bfa4d1df0cbf-45
Video: Initializing OpenGL Device Context.
Core: Setting 32-bit video mode: 320x240
Video Warning: Failed to set GL_BUFFER_SIZE to 32. (it's 24)
Video Warning: Failed to set GL_DEPTH_SIZE to 16. (it's 32)
Video: Using OpenGL: Gallium 0.4 on llvmpipe (LLVM 3.9, 128 bits) - OpenGL ES 3.0 Mesa 13.0.6 : VMware, Inc.
Audio: Using resampler trivial
Audio: Initializing SDL audio subsystem...
Input Warning: Couldn't open rumble support for joystick #1
Input Warning: Couldn't open rumble support for joystick #2
Input Warning: Couldn't open rumble support for joystick #3
Input Warning: Couldn't open rumble support for joystick #4
Core: Initializing 4 RDRAM modules for a total of 8 MB
Core: Starting R4300 emulator: Dynamic Recompiler
Core: Init new dynarec
Core: ARM CPU Features:, Half, Thumb, FastMult, VFP, ESDP, NEON, VFPv3, TLS, VFPv4, IDIVa, IDIVt
Audio: Initializing SDL audio subsystem...

#7

I had the same results as @doodom. I installed the game into /home/cpi/Nintendo64/ according to GameShell standards, but adjusted the command to the new address. My output did differ slightly:

Mupen64Plus Console User-Interface Version 2.5.9

UI-Console: attached to core library 'Mupen64Plus Core' version 2.5.9``
UI-Console:             Includes support for Dynamic Recompiler.
Core: Using full mem base
Core: Goodname: Banjo-Kazooie (U) (V1.0) [!]
Core: Name: Banjo-Kazooie       
Core: MD5: B29599651A13F681C9923D69354BF4A3
Core: CRC: A4BF9306 BF0CDFD1
Core: Imagetype: .z64 (native)
Core: Rom size: 16777216 bytes (or 16 Mb or 128 Megabits)
Core: Version: 1448
Core: Manufacturer: Nintendo
Core: Country: USA
UI-Console Status: Cheat codes disabled.
UI-Console: using Video plugin: 'Mupen64Plus OpenGL Video Plugin by Rice' v2.5.9
UI-Console: using Audio plugin: 'Mupen64Plus SDL Audio Plugin' v2.5.9
UI-Console: using Input plugin: 'Mupen64Plus SDL Input Plugin' v2.5.9
UI-Console: using RSP plugin: 'Z64 RSP Plugin' v2.0.0
Input: 0 SDL joysticks were found.
Input: N64 Controller #1: Using manual config with no SDL joystick (keyboard/mouse only)
Input: 1 controller(s) found, 1 plugged in and usable in the emulator
Input Warning: Couldn't open rumble support for joystick #1
Input Warning: Couldn't open rumble support for joystick #2
Input Warning: Couldn't open rumble support for joystick #3
Input Warning: Couldn't open rumble support for joystick #4
Input: Mupen64Plus SDL Input Plugin version 2.5.9 initialized.
RSP Status: INITIATE RSP
Core: Using video capture backend: dummy
Core: Game controller 0 (Standard controller) has a Memory pak plugged in
Core: Game controller 1 (Standard controller) has a Memory pak plugged in
Core: Game controller 2 (Standard controller) has a Memory pak plugged in
Core: Game controller 3 (Standard controller) has a Memory pak plugged in
Core: Using CIC type X103
Video: Disabled SSE processing.
Video: Found ROM 'Banjo-Kazooie', CRC 0693bfa4d1df0cbf-45
Video: Initializing OpenGL Device Context.
Core: Setting 32-bit video mode: 320x240
Video Warning: Failed to set GL_BUFFER_SIZE to 32. (it's 24)
Video Warning: Failed to set GL_DEPTH_SIZE to 16. (it's 32)
Video: Using OpenGL: Gallium 0.4 on llvmpipe (LLVM 3.9, 128 bits) - OpenGL ES 3.0 Mesa 13.0.6 : VMware, Inc.
Audio: Using resampler trivial
Audio: Initializing SDL audio subsystem...
Input Warning: Couldn't open rumble support for joystick #1
Input Warning: Couldn't open rumble support for joystick #2
Input Warning: Couldn't open rumble support for joystick #3
Input Warning: Couldn't open rumble support for joystick #4
Core: Initializing 4 RDRAM modules for a total of 8 MB
Core: Starting R4300 emulator: Dynamic Recompiler
Core: Init new dynarec
Core: ARM CPU Features:, Half, Thumb, FastMult, VFP, ESDP, NEON, VFPv3, TLS, VFPv4, IDIVa, IDIVt
Audio: Initializing SDL audio subsystem...

and leaves me with a black screen. Entering Menu resulted in:

Core Status: Stopping emulation.
Core: R4300 emulator finished.
RSP Status: cache hit 0 miss 0 nan%
Core Status: Rom closed.

Menu exits, but doesn’t return control to Launcher. Eventually, control does return…


#8

Okay, I‘ll dig into that later today.

Did all the dependencies install correctly?


#9

No problems at all on installing the dependencies, at least the ones from the apt repository.

Although I must say I saw a few errors when compiling one of the libraries, and I’m talking about errors, not warnings (mupen64plus-rsp-hle, mupen64plus-rsp-cxd4, mupen64plus-rsp-z64… not sure about it, i’ll check it today again). Everything happened so fast that I couldn’t scroll to the top to review the output from the make command because the lines exceeded the buffer of the terminal.

Could be related… or not. Maybe you had already installed a deb package that we haven’t and that could be the cause of the problem compiling. In fact I think the script should check that the last make command did its work successfully (exit code = 0) or throw an error and stop if something unexpected happens.


#10

Jep, I agree about that script - just didn’t want you to wait for my attempts before creating a complete installation script. :slight_smile:


#11

I ran the script again, directing the output to a log file. That left just the Warnings and Errors output to the console.

mupen64.log
mupen64.errors


#12

I managed to make it work. The script has a few errors. In the following block:

echo "------------------------------------------------------------"
echo "--- Building rsp-hle ---"
echo "------------------------------------------------------------"
cd ../../mupen64plus-rsp-hle/projects/unix
make NEON=1 VFP_HARD=1 USE_GLES=1 all
sudo NEON=1 VFP_HARD=1 USE_GLES=1 make install

… should be…

echo "------------------------------------------------------------"
echo "--- Building rsp-hle ---"
echo "------------------------------------------------------------"
cd ../../../mupen64plus-rsp-hle/projects/unix
sudo make NEON=1 VFP_HARD=1 USE_GLES=1 all
sudo NEON=1 VFP_HARD=1 USE_GLES=1 make install

The relative path was incorrect (it was missing a ../). It was also needed to use sudo on the first make, otherwise it was going to throw a permission error.

I also installed the libsamplerate0-dev and libspeexdsp-dev development libraries because the compiler was whining about not having those when uninstalling de audio plugin (I uninstalled it before downloading and compiling it again from scratch):

apt install libsamplerate0-dev libspeexdsp-dev

The only plugin I could not compile and install was mupen64plus-rsp-cxd4 but I don’t know if it’s actually needed. This is what I get when I tried to compile it:

Makefile:111: Architecture "armv7l" not officially supported.'
    CC  _obj/vu/multiply.o
In file included from ../..//vu/../my_types.h:36:0,
                 from ../..//vu/vu.h:22,
                 from ../..//vu/multiply.h:19,
                 from ../..//vu/multiply.c:16:
../..//vu/../sse2neon/SSE2NEON.h: In function ‘_mm_castps_si128’:
../..//vu/../sse2neon/SSE2NEON.h:934:2: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
  return *(const __m128i *)&a;
  ^~~~~~
../..//vu/../sse2neon/SSE2NEON.h: In function ‘_mm_castsi128_ps’:
../..//vu/../sse2neon/SSE2NEON.h:940:2: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
  return *(const __m128 *)&a;
  ^~~~~~
../..//vu/multiply.c: In function ‘mulf_v_msp’:
../..//vu/multiply.c:118:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_L = prod_lo;
     ^
../..//vu/multiply.c:120:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_M = prod_hi;
     ^
../..//vu/multiply.c:134:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_H = negative; /* 2*i16*i16 only fills L/M; VACC_H = 0 or ~0. */
     ^
../..//vu/multiply.c: In function ‘mulu_v_msp’:
../..//vu/multiply.c:180:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_L = prod_lo;
     ^
../..//vu/multiply.c:182:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_M = prod_hi;
     ^
../..//vu/multiply.c:193:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_H = negative; /* 2*i16*i16 only fills L/M; VACC_H = 0 or ~0. */
     ^
../..//vu/multiply.c: In function ‘mudl_v_msp’:
../..//vu/multiply.c:223:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_L = vs;
     ^
../..//vu/multiply.c:224:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_M = vt;
     ^
../..//vu/multiply.c:225:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_H = vt;
     ^
../..//vu/multiply.c: In function ‘mudm_v_msp’:
../..//vu/multiply.c:257:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_L = prod_lo;
     ^
../..//vu/multiply.c:258:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_M = prod_hi;
     ^
../..//vu/multiply.c:261:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_H = prod_hi;
     ^
../..//vu/multiply.c: In function ‘mudn_v_msp’:
../..//vu/multiply.c:295:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_L = prod_lo;
     ^
../..//vu/multiply.c:296:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_M = prod_hi;
     ^
../..//vu/multiply.c:298:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_H = prod_hi;
     ^
../..//vu/multiply.c: In function ‘mudh_v_msp’:
../..//vu/multiply.c:324:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_L = _mm_setzero_si128();
     ^
../..//vu/multiply.c:325:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_M = vs; /* acc 31..16 storing (VS*VT)15..0 */
     ^
../..//vu/multiply.c:326:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_H = prod_high; /* acc 47..32 storing (VS*VT)31..16 */
     ^
../..//vu/multiply.c: In function ‘macf_v_msp’:
../..//vu/multiply.c:373:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     acc_lo = *(v16 *)VACC_L;
     ^~~~~~
../..//vu/multiply.c:374:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     acc_md = *(v16 *)VACC_M;
     ^~~~~~
../..//vu/multiply.c:375:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     acc_hi = *(v16 *)VACC_H;
     ^~~~~~
../..//vu/multiply.c:378:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_L = acc_lo;
     ^
../..//vu/multiply.c:26:5: warning: implicit declaration of function ‘_mm_cmplt_epi16’ [-Wimplicit-function-declaration]
     _mm_cmplt_epi16(                            \
     ^
../..//vu/multiply.c:379:16: note: in expansion of macro ‘_mm_cmplt_epu16’
     overflow = _mm_cmplt_epu16(acc_lo, prod_lo); /* a + b < a + 0 ? ~0 : 0 */
                ^~~~~~~~~~~~~~~
../..//vu/multiply.c:379:14: error: incompatible types when assigning to type ‘v16’ from type ‘int’
     overflow = _mm_cmplt_epu16(acc_lo, prod_lo); /* a + b < a + 0 ? ~0 : 0 */
              ^
../..//vu/multiply.c:382:18: error: incompatible types when assigning to type ‘v16’ from type ‘int’
     overflow_new = _mm_cmplt_epu16(acc_md, prod_hi);
                  ^
../..//vu/multiply.c:386:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_M = acc_md;
     ^
../..//vu/multiply.c:391:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_H = acc_hi;
     ^
../..//vu/multiply.c: In function ‘macu_v_msp’:
../..//vu/multiply.c:440:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     acc_lo = *(v16 *)VACC_L;
     ^~~~~~
../..//vu/multiply.c:441:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     acc_md = *(v16 *)VACC_M;
     ^~~~~~
../..//vu/multiply.c:442:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     acc_hi = *(v16 *)VACC_H;
     ^~~~~~
../..//vu/multiply.c:445:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_L = acc_lo;
     ^
../..//vu/multiply.c:446:14: error: incompatible types when assigning to type ‘v16’ from type ‘int’
     overflow = _mm_cmplt_epu16(acc_lo, prod_lo); /* a + b < a + 0 ? ~0 : 0 */
              ^
../..//vu/multiply.c:449:18: error: incompatible types when assigning to type ‘v16’ from type ‘int’
     overflow_new = _mm_cmplt_epu16(acc_md, prod_hi);
                  ^
../..//vu/multiply.c:453:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_M = acc_md;
     ^
../..//vu/multiply.c:458:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_H = acc_hi;
     ^
../..//vu/multiply.c:463:14: error: incompatible types when assigning to type ‘v16’ from type ‘int’
     overflow = _mm_cmplt_epi16(acc_md, vs);
              ^
../..//vu/multiply.c: In function ‘madl_v_msp’:
../..//vu/multiply.c:502:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     acc_lo = *(v16 *)VACC_L;
     ^~~~~~
../..//vu/multiply.c:503:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     acc_md = *(v16 *)VACC_M;
     ^~~~~~
../..//vu/multiply.c:504:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     acc_hi = *(v16 *)VACC_H;
     ^~~~~~
../..//vu/multiply.c:507:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_L = acc_lo;
     ^
../..//vu/multiply.c:509:14: error: incompatible types when assigning to type ‘v16’ from type ‘int’
     overflow = _mm_cmplt_epu16(acc_lo, prod_hi); /* overflow:  (x + y < y) */
              ^
../..//vu/multiply.c:511:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_M = acc_md;
     ^
../..//vu/multiply.c:520:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_H = acc_hi;
     ^
../..//vu/multiply.c: In function ‘madm_v_msp’:
../..//vu/multiply.c:583:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     acc_lo = *(v16 *)VACC_L;
     ^~~~~~
../..//vu/multiply.c:584:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     acc_md = *(v16 *)VACC_M;
     ^~~~~~
../..//vu/multiply.c:585:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     acc_hi = *(v16 *)VACC_H;
     ^~~~~~
../..//vu/multiply.c:588:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_L = acc_lo;
     ^
../..//vu/multiply.c:590:14: error: incompatible types when assigning to type ‘v16’ from type ‘int’
     overflow = _mm_cmplt_epu16(acc_lo, prod_lo); /* overflow:  (x + y < y) */
              ^
../..//vu/multiply.c:593:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_M = acc_md;
     ^
../..//vu/multiply.c:595:14: error: incompatible types when assigning to type ‘v16’ from type ‘int’
     overflow = _mm_cmplt_epu16(acc_md, prod_hi);
              ^
../..//vu/multiply.c:599:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_H = acc_hi;
     ^
../..//vu/multiply.c: In function ‘madn_v_msp’:
../..//vu/multiply.c:644:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     acc_lo = *(v16 *)VACC_L;
     ^~~~~~
../..//vu/multiply.c:645:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     acc_md = *(v16 *)VACC_M;
     ^~~~~~
../..//vu/multiply.c:646:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     acc_hi = *(v16 *)VACC_H;
     ^~~~~~
../..//vu/multiply.c:649:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_L = acc_lo;
     ^
../..//vu/multiply.c:651:14: error: incompatible types when assigning to type ‘v16’ from type ‘int’
     overflow = _mm_cmplt_epu16(acc_lo, prod_lo); /* overflow:  (x + y < y) */
              ^
../..//vu/multiply.c:654:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_M = acc_md;
     ^
../..//vu/multiply.c:656:14: error: incompatible types when assigning to type ‘v16’ from type ‘int’
     overflow = _mm_cmplt_epu16(acc_md, prod_hi);
              ^
../..//vu/multiply.c:660:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_H = acc_hi;
     ^
../..//vu/multiply.c: In function ‘madh_v_msp’:
../..//vu/multiply.c:718:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     acc_mid = *(v16 *)VACC_M;
     ^~~~~~~
../..//vu/multiply.c:720:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_M = vs;
     ^
../..//vu/multiply.c:721:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     vt = *(v16 *)VACC_H;
     ^~
../..//vu/multiply.c:732:8: error: incompatible types when assigning to type ‘v16’ from type ‘int’
     vs = _mm_cmplt_epu16(vs, acc_mid); /* acc.mid + prod.low < acc.mid */
        ^
../..//vu/multiply.c:734:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     *(v16 *)VACC_H = vt;
     ^
../..//vu/multiply.c:736:5: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     vs = *(v16 *)VACC_M;
     ^~
Makefile:327: recipe for target '_obj/vu/multiply.o' failed
make: *** [_obj/vu/multiply.o] Error 1


What I know is that at least in my case the emulation is choppy and laggy as hell, almost unplayable at all. I also detected the screen becomes black if I don’t press any button for a while, even when it shoudn’t because of the plan energy. The only thing I can do when that happens is to reboot.

Here you can see how bad performs this emulator in my case:

It’s clear that I’m missing something or that plugin I couldn’t install is more important that it seems. I tried both with Fbturbo and Lima graphic drivers without any difference at all on the performance.


#13

@Hawanna Could please install checkinstall, generate a .deb package from every source you have already compiled and upload them somewhere in order to let me and other people try your binaries?

To install checkinstall:

apt install checkinstall

Then do this after make install to generate a .deb package inside the ./projects/unix folder of every source folder.

sudo NEON=1 VFP_HARD=1 USE_GLES=1 checkinstall

Finally please remember to rename the packages to something relatable (for example, you could rename unix_20190215-1_armhf.deb to mupen64plus-core_gameshell_20190215-1_armhf.deb in the case of the source code of the core). This way I won’t be able to fix my problem but at least we will have functional binaries to upload them to a git repository.

The final objective is to make an installation script that installs the deb packages, the configuration file and creates an option in the launcher for this emulator. I already made this last thing and it works perfectly, I even created an icon for it.


#14

I made the changes you suggested. Still no-go. Just the audio.


#15

Do you have your console launcher and debian packages up to date? I updated the debian OS of the GameShell a few days ago via $ apt update && apt upgrade and that could cause different results depending of the versions of the libraries we have installed.


#16

Okay… Did the update and upgrade, but still no video. :frowning:


#17

Sorry to hear that. Maybe tomorrow Hawanna will share his compiled deb packages.

I will share mine anyways (I’m in bed right now) so you can try if it does a difference for you. It’s not as perfect in performance as it should but at least there is video output.


#18

I know I’ll eventually get it up and running. Until then I’ve taken the liberty to create the icons and script for it. The first icon will go into the folder /home/cpi/apps/Menu/Mupin64:

Mupin64

Then into a subfolder Banjo-Kazooie:

Banjo-Kazooie

…with the script Banjo-Kazooie.sh containing:

mupen64plus --fullscreen /home/cpi/games/Nintendo64/Banjo-Kazooie\ \(U\)\ \[\!\].z64

#19

This is the icon I made (I asked for a pull request to this repository but still no news from the creator):

image

It’s more alike to the default icons so yours look better and more colorful. I guess it’s a matter of personal preference.

I also created an action.config file inside /home/cpi/launcher/Menu/GameShell/20_Retro\ Games/N64 and put the roms in /home/cpi/games/N64 so it scans the z64 files in that folder and shows them in a list.

When we have it working we could upload everything to a repository and make a pull request for that emulator to be included by default in the launcher, just as it already happens with Pcsx (which is an external git repo that its actually added as a submodule inside the launcher repo).


#20

Well I don’t see you passing export DISPLAY=:0; to mupen64plus before starting. Did you configure something else to skip that?