What's new

Mupen 64bit

Richard42

Emulator Developer
I finally got around to compiling this...
Mupen compiled with no effort, installed it and it works perfectly.

I had some trouble getting the rice plugin to compile at first but it was just that the configure script does not detect the gtk2 development packages if you are in a remote shell. It worked fine when I was actually on the machine.

Once I got rice compiled... I cannot get rice to work at all for about 75% of the games I tried (probably tried about 30 of them). Most games just segfault immediately. For the few that actually do something, I was only able to play 2 of them, Excite Bike and some other random racing game. Some games would show the company logos and then segfault right before the main menu and others would die when I tried to start gameplay. Nothing interesting was output.

Are there any debugging flags I could use so I could provide you with something useful? I am running 32 bit Fedora 7, and I am using the nvidia drivers from the livna repos

Don't worry about the previously-posted Mupen64 and RiceVideo source; I've fixed a bunch of bugs since then. I'm going to make a release tonight of the latest in my SVN repository. I'm hoping that people will download and play with this new release; if you find problems with it (I'm mostly interested in segfaults), just tell me what game you were playing and what you were doing when it crashed. If I can duplicate any segfault I can probably fix it. It's much harder for me to fix things like display problems (ie, Star Wars Ep 1 racer) because that's a result of the emulator not accurately emulating the real N64 system. Without technical documentation for the N64 itself there's no way that I can tell what is correct or incorrect behavior. :)
 

sl1pkn07

New member
ricevideo-64bits

sdl-config --cflags
-I/usr/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT

sl1pkn07@SpinFlo:/ cat /home/sl1pkn07/aplicaciones/mupen64-64bits-svn/ricevideo610-64bit/config.log
lun nov 12 11:42:09 CET 2007
./config.temp: En la función ‘main’:
./config.temp:3: error: falta carácter terminando "
./config.temp:4: error: falta carácter terminando "
./config.temp:4: error: expected expression at end of input
./config.temp:4: error: expected declaration or statement at end of input
./config.temp:4: error: expected declaration or statement at end of input
sl1pkn07@SpinFlo:/etc/fonts/conf.d$

mupen64-64bits

compile options: make all GTK=20 (for compilling a 64bit binary)
make results:

......
gcc -o r4300/x86/gr4300.o -Wall -pipe -O3 -march=athlon64 -ffast-math -funroll-loops -fexpensive-optimizations -fno-strict-aliasing `sdl-config --cflags` `pkg-config gtk+-2.0 --cflags` -D_GTK2 -c r4300/x86/gr4300.c
r4300/x86/gr4300.c: En la función ‘gennotcompiled’:
r4300/x86/gr4300.c:60: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c: En la función ‘gendebug’:
r4300/x86/gr4300.c:83: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c: En la función ‘gencallinterp’:
r4300/x86/gr4300.c:104: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c: En la función ‘genj’:
r4300/x86/gr4300.c:219: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c: En la función ‘genj_out’:
r4300/x86/gr4300.c:244: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c: En la función ‘genjal’:
r4300/x86/gr4300.c:299: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c: En la función ‘genjal_out’:
r4300/x86/gr4300.c:331: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c: En la función ‘gentest’:
r4300/x86/gr4300.c:438: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c:446: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c: En la función ‘gentest_out’:
r4300/x86/gr4300.c:478: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c:487: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c: En la función ‘gentestl’:
r4300/x86/gr4300.c:999: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c:1008: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c: En la función ‘gentestl_out’:
r4300/x86/gr4300.c:1041: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c:1051: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c: En la función ‘genlb’:
r4300/x86/gr4300.c:1320: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c:1322: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c: En la función ‘genlh’:
r4300/x86/gr4300.c:1360: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c:1362: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c: En la función ‘genlw’:
r4300/x86/gr4300.c:1405: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c:1407: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c: En la función ‘genlbu’:
r4300/x86/gr4300.c:1444: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c:1446: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c: En la función ‘genlhu’:
r4300/x86/gr4300.c:1486: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c:1488: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c: En la función ‘genlwu’:
r4300/x86/gr4300.c:1533: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c:1535: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c: En la función ‘gensb’:
r4300/x86/gr4300.c:1575: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c:1596: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c:1596: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c:1601: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c:1601: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c: En la función ‘gensh’:
r4300/x86/gr4300.c:1632: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c:1653: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c:1653: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c:1658: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c:1658: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c: En la función ‘gensw’:
r4300/x86/gr4300.c:1694: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c:1714: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c:1714: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c:1719: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c:1719: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c: En la función ‘genlwc1’:
r4300/x86/gr4300.c:1781: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c: En la función ‘genldc1’:
r4300/x86/gr4300.c:1820: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c: En la función ‘genld’:
r4300/x86/gr4300.c:1865: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c:1867: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c: En la función ‘genswc1’:
r4300/x86/gr4300.c:1908: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c:1928: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c:1928: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c:1933: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c:1933: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c: En la función ‘gensdc1’:
r4300/x86/gr4300.c:1966: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c:1988: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c:1988: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c:1993: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c:1993: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c: En la función ‘gensd’:
r4300/x86/gr4300.c:2026: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c:2048: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c:2048: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c:2053: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gr4300.c:2053: aviso: conversión de puntero a entero de tamaño diferente
gcc -o r4300/x86/gregimm.o -Wall -pipe -O3 -march=athlon64 -ffast-math -funroll-loops -fexpensive-optimizations -fno-strict-aliasing `sdl-config --cflags` `pkg-config gtk+-2.0 --cflags` -D_GTK2 -c r4300/x86/gregimm.c
gcc -o r4300/x86/gspecial.o -Wall -pipe -O3 -march=athlon64 -ffast-math -funroll-loops -fexpensive-optimizations -fno-strict-aliasing `sdl-config --cflags` `pkg-config gtk+-2.0 --cflags` -D_GTK2 -c r4300/x86/gspecial.c
r4300/x86/gspecial.c: En la función ‘genjr’:
r4300/x86/gspecial.c:167: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gspecial.c:167: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gspecial.c:169: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gspecial.c:169: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gspecial.c:171: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gspecial.c:171: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gspecial.c:201: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gspecial.c:215: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gspecial.c:219: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gspecial.c:222: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gspecial.c: En la función ‘genjalr’:
r4300/x86/gspecial.c:236: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gspecial.c:236: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gspecial.c:238: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gspecial.c:238: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gspecial.c:240: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gspecial.c:240: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gspecial.c:276: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gspecial.c:290: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gspecial.c:294: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/gspecial.c:297: aviso: conversión de puntero a entero de tamaño diferente
gcc -o r4300/x86/gtlb.o -Wall -pipe -O3 -march=athlon64 -ffast-math -funroll-loops -fexpensive-optimizations -fno-strict-aliasing `sdl-config --cflags` `pkg-config gtk+-2.0 --cflags` -D_GTK2 -c r4300/x86/gtlb.c
gcc -o r4300/x86/regcache.o -Wall -pipe -O3 -march=athlon64 -ffast-math -funroll-loops -fexpensive-optimizations -fno-strict-aliasing `sdl-config --cflags` `pkg-config gtk+-2.0 --cflags` -D_GTK2 -c r4300/x86/regcache.c
r4300/x86/regcache.c: En la función ‘free_register’:
r4300/x86/regcache.c:78: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/regcache.c:78: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/regcache.c: En la función ‘lru_register’:
r4300/x86/regcache.c:135: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/regcache.c:137: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/regcache.c: En la función ‘lru_register_exc1’:
r4300/x86/regcache.c:150: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/regcache.c:152: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/regcache.c: En la función ‘allocate_register’:
r4300/x86/regcache.c:203: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/regcache.c:205: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/regcache.c: En la función ‘allocate_register_w’:
r4300/x86/regcache.c:371: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/regcache.c:373: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/regcache.c: En la función ‘build_wrapper’:
r4300/x86/regcache.c:790: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/regcache.c:808: aviso: conversión de puntero a entero de tamaño diferente
gcc -o r4300/x86/rjump.o -Wall -pipe -O3 -march=athlon64 -ffast-math -funroll-loops -fexpensive-optimizations -fno-strict-aliasing `sdl-config --cflags` `pkg-config gtk+-2.0 --cflags` -D_GTK2 -c r4300/x86/rjump.c
r4300/x86/rjump.c: En la función ‘dyna_jump’:
r4300/x86/rjump.c:41: aviso: conversión de puntero a entero de tamaño diferente
r4300/x86/rjump.c:43: aviso: conversión de puntero a entero de tamaño diferente
......

compile OK

crash by segfault on config blight's SDL input plugin 0.0.10 (pulse button config on options menu)

compile options: make all BITS=32 GTK=20 (for compilling a 32bit binary)
make results:

.......
gcc main/adler32.o main/ioapi.o main/md5.o main/mupenIniApi.o main/plugin.o main/rom.o main/savestates.o main/unzip.o memory/dma.o memory/flashram.o memory/memory.o memory/pif.o memory/tlb.o r4300/r4300.o r4300/bc.o r4300/compare_core.o r4300/cop0.o r4300/cop1.o r4300/cop1_d.o r4300/cop1_l.o r4300/cop1_s.o r4300/cop1_w.o r4300/exception.o r4300/interupt.o r4300/profile.o r4300/pure_interp.o r4300/recomp.o r4300/special.o r4300/regimm.o r4300/tlb.o r4300/x86/assemble.o r4300/x86/debug.o r4300/x86/gbc.o r4300/x86/gcop0.o r4300/x86/gcop1.o r4300/x86/gcop1_d.o r4300/x86/gcop1_l.o r4300/x86/gcop1_s.o r4300/x86/gcop1_w.o r4300/x86/gr4300.o r4300/x86/gregimm.o r4300/x86/gspecial.o r4300/x86/gtlb.o r4300/x86/regcache.o r4300/x86/rjump.o main/gui_gtk/main_gtk.o main/gui_gtk/translate.o main/gui_gtk/messagebox.o main/gui_gtk/aboutdialog.o main/gui_gtk/configdialog.o main/gui_gtk/support.o main/gui_gtk/rombrowser.o main/gui_gtk/romproperties.o main/gui_gtk/config.o main/gui_gtk/dirbrowser.o -m32 -m elf_i386 -lz -lm -lpng `sdl-config --libs` -L/usr/X11R6/lib -lGL `pkg-config gtk+-2.0 --libs` -Wl,-export-dynamic -z execstack -lpthread -ldl -o mupen64
/usr/bin/ld: skipping incompatible /usr/lib/libz.so when searching for -lz
/usr/bin/ld: skipping incompatible /usr/lib/libz.a when searching for -lz
/usr/bin/ld: skipping incompatible /usr/lib/libm.so when searching for -lm
/usr/bin/ld: skipping incompatible /usr/lib/libm.a when searching for -lm
/usr/bin/ld: skipping incompatible /usr/lib/libpng.so when searching for -lpng
/usr/bin/ld: skipping incompatible /usr/lib/libpng.a when searching for -lpng
/usr/bin/ld: skipping incompatible /usr/bin/../lib/libpng.so when searching for -lpng
/usr/bin/ld: skipping incompatible /usr/bin/../lib/libpng.a when searching for -lpng
/usr/bin/ld: skipping incompatible /usr/lib/libpng.so when searching for -lpng
/usr/bin/ld: skipping incompatible /usr/lib/libpng.a when searching for -lpng
/usr/bin/ld: cannot find -lpng
collect2: ld devolvió el estado de salida 1
make: *** [mupen64] Error 1

libpng + libpng-dev (64bits) (1.2.15-beta5) + ia32-libs + ia32-libs-dev (32bits)(2.1) installed
zlib + zlib-devel + zlib-bin (64bits) + lib32z1+lib32z1-dev (32bits)(1.2.3.3) installed
libc6 + libc6-devel (64bits) + libc6-386 + libc6-386-devel (32bits)(2.6.1) installed

mupen64-64bit and ricevideo610-64bit downloading from SVN (rev50)
 
Last edited:

Richard42

Emulator Developer
Well i was using rev 50 from your SVN. Look forward to the release.

I'm in the middle of putting things together for release right now. I'm surprised you got RiceVideo to work for a 32-bit build with any games at all. I found a couple of problems - one was in Mupen64: a segfault caused any time it would try to write the EEPROM to a directory without permissions.. There was another one that was even worse - the SSE code in RiceVideo would crash in SSEVec3Transform. I didn't even try to debug that one because the Position Independent Code was way more complicated than it was worth, so I nuked it and replaced it with inline AT&T style asm derived from the 64-bit stuff I wrote a month ago. Hopefully the release will work better for you. :)
 

Richard42

Emulator Developer
@sl1pkn07:

Glad to see that other people are using the SVN repository as well. The fact that you were able to build without the 'configure' script proves that it was a problem with the script and not your system; that's good.

Regarding your 64-bit build; that appeared to work, which is great. Were you able to run any games? I gather that you hit a segfault when you tried to do the 'pulse button config' on the options menu? That's probably a legitimate bug which needs to be added to the Todo list.

Your 32-bit build failed because the compiler didn't find a 32-bit version of a file called "libpng.a". It skipped over several incompatible versions of this file; they were 64-bit versions. The libpng.a file is a 'stub' static library which contains the necessary dlopen/dlsym/dlclose code to handle the dynamically loaded stuff. It's not surprising that the compiler couldn't find it - the bugs aren't all worked out of these systems yet. I would suggest trying the 32-bit release that I'll hopefully make later tonight, though I assume that the earlier bug which you found will still be present.
 

sl1pkn07

New member
i found error (and fix) in configure script on ricevideo plugin:

before:

echo "int main(void) { if (SDL_Init( 0 ) < 0) { printf( \"SDL_Init(): %s\\n\", SDL_GetError() ); return 1; } return 0; }" >> "$FILE"

after:

echo "int main(void) { if (SDL_Init( 0 ) < 0) { printf( \"SDL_Init(): %s\", SDL_GetError() ); return 1; } return 0; }" >> "$FILE"

sl1pkn07@SpinFlo:~/aplicaciones/mupen64-64bits-svn/ricevideo610-64bit$ ./configure
Found a working C compiler (gcc).
Found a working C++ compiler (g++).
Checking SDL...
Found SDL version 1.2.11.
Checking GTK 1.2...
Found GTK version 1.2.10.
Checking GTK 2...
Found GTK version 2.12.0.
Your system support both GTK 1.2 and GTK 2, do you want to compile mupen64 with GTK 2 support ?
(Y)es or (N)o [Default is Yes]: y
Mupen64 will use GTK 2

Writing config.h...
sl1pkn07@SpinFlo:~/aplicaciones/mupen64-64bits-svn/ricevideo610-64bit$

compile plug in OK (no warnings and no message)

Version SVN= 80

mupen64-64bit: fail build

gcc -o main/gui_gtk/configdialog.o -Wall -pipe -O3 -march=athlon64 -ffast-math -funroll-loops -fexpensive-optimizations -fno-strict-aliasing `sdl-config --cflags` `pkg-config gtk+-2.0 --cflags` -D_GTK2 -c main/gui_gtk/configdialog.c
make: *** No hay ninguna regla para construir el objetivo `main/gui_gtk/support.o', necesario para `mupen64'. Alto.
 

Richard42

Emulator Developer
gcc -o main/gui_gtk/configdialog.o -Wall -pipe -O3 -march=athlon64 -ffast-math -funroll-loops -fexpensive-optimizations -fno-strict-aliasing `sdl-config --cflags` `pkg-config gtk+-2.0 --cflags` -D_GTK2 -c main/gui_gtk/configdialog.c
make: *** No hay ninguna regla para construir el objetivo `main/gui_gtk/support.o', necesario para `mupen64'. Alto.

Sorry about that. The Makefile got broken in SVN, which caused that error. I've fixed it now, so you can do an update and it should build.

BTW Good call on the configure script. The escape characters to make a newline didn't work right in your shell. I'll update the copy in SVN also.
 
Last edited:
OP
N

nmn

Mupen64Plus Dev.
Whoops sorry bout the makefile, forgot to update that when i did away with ugly pixmaps... Also, I haven't gotten the CD stuff down because i was improving a couple of other things. The only thing i've decided worked better improved was the Rom List, which now has scroll bars on it... This means it should not stretch the configuration window out when you add a very large directory name to your list. If theres any problems with that let me know and i can try to trace them, but i'm pretty sure that not much can go wrong with it.

Oh, and yeah, that whole configure script thing was one we'd never had noticed.
 

Richard42

Emulator Developer
Oh, and yeah, that whole configure script thing was one we'd never had noticed.

I tested that on my machine, before and after making the change which fixed it for sl1pkn07. Oddly enough, the original source didn't cause a problem for me, so he must have a different version of BASH or a different shell. This is one of the reasons why open source is so awesome; we can all contribute and make it better for everyone. All of you guys testing this thing and reporting bugs are just as important as us programmers fixing them, because you can't fix what you don't know is broken. :)
 

sl1pkn07

New member
sl1pkn07@SpinFlo:~/aplicaciones/mupen64-64bits-svn/mupen64-64bit$ yakuake --version
Qt: 3.3.7
KDE: 3.5.8
Yakuake: 2.8
sl1pkn07@SpinFlo:~/aplicaciones/mupen64-64bits-svn/mupen64-64bit$ bash --version
GNU bash, version 3.2.25(1)-release (x86_64-pc-linux-gnu)
Derechos Reservados (C) 2005 Free Software Foundation, Inc.
sl1pkn07@SpinFlo:~/aplicaciones/mupen64-64bits-svn/mupen64-64bit$

OpenSource POWA! XD
 
Last edited:

Top