Commit graph

2672 commits

Author SHA1 Message Date
Richard Goedeken
763237d1dd Merge pull request #14 from littleguy77/cheat_file_fixes
Cheat file fixes
2014-02-16 21:51:46 -08:00
Richard Goedeken
3cd2b27eb4 update build helper and install scripts to account for new desktop/icon files included in mupen64plus-ui-console 2014-02-16 21:49:22 -08:00
littleguy77
062c30dabe Remove leading/trailing whitespace in some cheat strings. 2014-02-15 22:24:31 -05:00
littleguy77
acf66e85f4 Fix duplicate entries and broken formatting in cheat files.
There may be others, but these are the obvious ones that tripped our
parser.
2014-02-15 22:09:33 -05:00
Richard Goedeken
53129660c7 Merge pull request #12 from ecsv/ini_cheats
Move workaround cheats from cheat to PJ64-like ini settings
2014-02-10 22:35:17 -08:00
Sven Eckelmann
1bd9ab6edb Add missing read mode check in flashram_command -> execute 2014-02-10 21:43:13 +01:00
Sven Eckelmann
252fa6f1d4 Add workaround to make Pokemon Snap controls working and images selectable
The controller problem seems to be related to the graphics plugin. A quote from
darkmaster14

"I believe the Pokemon Snap input issue is closely related to the missing red
 dot issue. If you recall, in the original hardware, when you first arrive on
 the beach, there's a small tutorial where you can't move the cursor until you
 take a picture of the first few Pokemon that show up. Once you finish the mini
 tutorial, you can move the cursor around as you please. Well, the red dot
 doesn't work on most plugins, so the game doesn't detect the cursor locking
 onto the first few Pokemon, so the tutorial doesn't work, and thus the input
 never gets unlocked.

 Well, I got a hold of a very buggy port of FatCat's software renderer plugin
 for Mupen64Plus, and the red dot works on that, which lets you do the tutorial,
 and thus the cursor movement is unlocked and you can play the game as normal.
 So really, the problem most likely lies in the video plugins rather than the
 emulation core. I'm guessing on Project64, however, they added a hack to force
 the cursor to move around despite the red dot not working, which is why it
 works on that emulator."
2014-02-10 21:40:23 +01:00
Sven Eckelmann
3cff0c2c25 Add note about (broken) Pilotwing64 shadow fix
This fix is used in PJ64 to avoid the big landing shadow block. But it can
cause hangs when the user presses Quit (can be reproduced in PJ64+m64p when
using the rocket in 3FCD4969F9A080BD2BCB913EC5D7A3BD).
2014-02-10 21:14:19 +01:00
Sven Eckelmann
9bab8a0e0d Parse cheats from from mupen64plus.ini
The workaround cheats are easier to manage over the mupen64plus.ini instead of
hardcoding them inside the mupen64plus-core source code.
2014-02-09 22:53:44 +01:00
Sven Eckelmann
95cd64e358 Add Zelda OoT cheats to mupen64plus.ini
It is a lot easier to add the workaround cheats to the mupen64plus.ini instead
of having them hardcoded in the cheat engine. The data is currently not used
because it still has to be parsed by the romdatabase before these general
workaround cheats are supported.
2014-02-09 21:09:05 +01:00
Sven Eckelmann
301b879d75 Use normal cheat engine to run workaround cheats
Instead of hardcoding special commands in cheat_apply_cheats, it is easier to
just use add the codes to the active cheats list when the the rom is started.
This avoids having more string compares and similar things in this regularly
called routine when more workaround cheats are added.

This is especially helpful against the slowdowns in the Zelda debug roms caused
by the "Warning: Ocarina of Time version could not be determined.  No fixes
applied." spam on the console.
2014-02-09 20:36:01 +01:00
Sven Eckelmann
aed0881a7b Don't overwrite rom specific settings during resolve phase
The behavior of the romdatabase_resolve was to overwrite any setting when the
referenced rom had non-default settings. This made it impossible to use
references when the referenced rom has different settings than the rom who
references it.
2014-02-09 19:24:56 +01:00
Sven Eckelmann
5f5add729f Only resolve using complete rom database entries
The old rom database algorithm tried to resolve (refMD5) entries immediately in
romdatabase_open without checking the referenced entry. This algorithm caused
entries to be used when they are still have uninitialized fields because the
referenced entry still has some other entries which it referenced.

Using only complete (resolved) entries also allows to detect loops
(unresolvable references) as seen before
304bf8c4de ("Fix self-references in
mupen64plus.ini")
2014-02-09 18:01:09 +01:00
Richard Goedeken
98c27a25d8 Merge pull request #11 from krnlyng/neon
add option to build for hard floating point arm environments
2014-02-04 18:42:23 -08:00
Franz-Josef Haider
64d5cb22b3 add option to build for hard floating point arm environments 2014-02-04 20:07:20 +01:00
littleguy77
2e9d1ccb25 Merge remote-tracking branch 'upstream/master' 2014-01-30 08:26:41 -05:00
Richard Goedeken
7638597691 Merge pull request #10 from ecsv/cheats
Levitate cheat fixes
2014-01-29 21:47:22 -08:00
Suttiwit Sukpinit
fa280a6b4e Use same precondition for all parts of the Mario64 Leviate cheat
The cheat code consists of three pairs of precondition and actual write. The
original code used two different preconditions (one for the first write and two
for the second/third write). This caused problems like the inability to finish
a level. Using the same precondition everywhere seems to fix this problem.
2014-01-29 22:12:11 +01:00
Sven Eckelmann
c1636fdc75 Allow multiple preconditions per cheat
Each cheat code can have multiple preconditions which all have to be fulfilled
before it can be executed. The default implementation in mupen64plus could not
handle these extra test codes because a failed test only caused a jump over the
next cheatcode (ignoring whether is also a test or a non-test cheatcode).

Therefore, all (negative) results before a non-test cheat code have to be
aggregated. The first non-test cheatcode evaluates the result of the
preconditions and only executes the non-test cheatcode when no precondition
test failed. The earlier results are always dropped after a non-test cheatcode
to allow a fresh start.
2014-01-29 21:15:32 +01:00
littleguy77
9ea32653b0 Merge remote-tracking branch 'upstream/master' 2014-01-29 08:08:38 -05:00
Richard Goedeken
b0720b5b92 Merge pull request #9 from ecsv/interpreter_link
Save link information in *AL(L) instructions unconditionally
2014-01-28 17:44:58 -08:00
Richard Goedeken
c757653137 Merge pull request #8 from ecsv/sdl2_compat
Avoid SDL_GetWindowSurface to fix crashes on wayland
2014-01-28 17:35:01 -08:00
Sven Eckelmann
cb891a0e76 Save link information in *AL(L) instructions unconditionally
All "Jump and link" and "Branch and link" like instructions save the PC in the
target register unconditionally and not only when the branch/jump is taken.
The specification is not clear whether the store is actually made before or
after the delay slot and therefore the behavior of the dynarecs ("link" before
delay slot) is used.

Reported-by: Nebuleon <nebuleon.fumika@gmail.com>
2014-01-29 00:22:12 +01:00
ptitSeb
29c224f012 new_dynarec: Fix MULT 64bits (still wrong maybe).
This fixes Doom 64 in mupen64plus-ae.  It also fixes some (but not all)
collision detection bugs in Donkey Kong 64.

See
ce68e3b9f8
040b15fe91
2014-01-28 17:48:58 -05:00
littleguy77
2d8f392fb9 r4300: Add hack-fix for Perfect Dark freezes.
See
http://code.google.com/p/mupen64plus/issues/detail?id=553
802d8f81d4
2014-01-28 17:42:41 -05:00
littleguy77
0f9fea14ce build: Add android makefile. 2014-01-28 17:42:24 -05:00
Sven Eckelmann
a1da3a34bd Avoid SDL_GetWindowSurface to fix crashes on wayland
Instead of trying to access the wayland window through SDL_GetWindowSurface,
it seems to be easier to just use a pseudo surface which is not really used by
anyone (except the size information).
2014-01-27 21:11:19 +01:00
Richard Goedeken
94d76772a9 Zuzma says that Hydro Thunder plays without freezing if the CountPerOp is set to 1 2014-01-26 09:29:36 -08:00
Richard Goedeken
90f58f3808 Merge pull request #7 from ecsv/sdl2_compat
Cleanup SDL2 compat code to avoid problems in non-VidExt m64py
2014-01-25 09:20:24 -08:00
Sven Eckelmann
7a5acb1839 Close SDL2 window when quitting Video subsystem
SDL2 doesn't close windows anymore when the video subsystem is closed.
Therefore, the window created by the SDL2 compat layer has to be closed
manually to avoid orphan windows in frontends like m64py in non-VidExt mode.
2014-01-25 11:23:02 +01:00
Sven Eckelmann
38233c4223 Remove unused SDL2 surface in compat code
mupen64plus doesn't support 2D video output because it forces OPENGL mode.
Unfortunately, the rest of the compat code still assumes that surfaces for 2D
data are used and overwrites the data when the window is changed.

The surface code can be removed to avoid these problems.
2014-01-25 11:23:02 +01:00
Richard Goedeken
e119553374 Merge pull request #6 from littleguy77/master
Fix some RefMD5 values in mupen64plus.ini
2014-01-22 22:05:39 -08:00
Richard Goedeken
39ac14aaa7 Merge pull request #5 from ecsv/countperop_db
Load CountPerOp info from mupen64plus.ini
2014-01-22 22:04:25 -08:00
Richard Goedeken
0356e78d23 Merge pull request #4 from Nebuleon/master
Optimisations.
2014-01-22 21:52:49 -08:00
littleguy77
8060e3e8dd Fix incorrect md5 references in mupen64plus.ini. 2014-01-22 19:07:42 -05:00
littleguy77
304bf8c4de Fix self-references in mupen64plus.ini. 2014-01-22 17:52:09 -05:00
Sven Eckelmann
380bd31348 Avoid level restart through lianes swinging in Donkey Kong 64 (U/J) 2014-01-22 23:08:19 +01:00
Sven Eckelmann
5aef58cc18 Add CountPerOp info to mupen64plus.ini
The CountPerOp settings has to be adjusted for each ROM. It is easier for the
enduser when the default value is not hardcoded in mupen64plus and instead
this dynamic information is retreived from the mupen64plus.ini.
2014-01-22 22:42:03 +01:00
Sven Eckelmann
86fe11d2f7 Allow to load CountPerOp info from mupen64plus.ini
The CountPerOp settings has to be adjusted for each ROM. It is easier for the
enduser when the default value is not hardcoded in mupen64plus and instead
this dynamic information is retreived from the mupen64plus.ini.
2014-01-22 22:42:03 +01:00
Nebuleon
1ef073e49e Remove a native test and branch from inter-block jumps. 2014-01-19 05:12:19 +00:00
Nebuleon
636ef6b14b Do not set the rounding mode before floating-point widening conversions.
The rounding mode is completely unneeded when converting from W (32-bit integer) or S (32-bit floating-point) to D (64-bit floating-point), and is actually unused on MIPS processors.

Quoting from the MIPS Programmer's Manual, volume 2, for CVT.D.fmt:
The value in FPR fs, in format fmt, is converted to a value in double floating point format and rounded according to the current rounding mode in FCSR. The result is placed in FPR fd. If fmt is S or W, then the operation is always exact.
2014-01-18 10:28:42 +00:00
Nebuleon
c61eb6feef Do not set the rounding mode before exact floating-point operations.
Setting the rounding mode on some host architectures (including x86, according to <http://www.mega-nerd.com/FPcast/>) empties the floating-point unit's pipeline, resulting in poorer performance. Omitting the rounding mode before exact operations restores some performance.

Affected opcodes are CVT.W.S, CVT.W.D, CVT.L.S, CVT.L.D, ABS.S, MOV.S, NEG.S, ABS.D, MOV.D and NEG.D.
2014-01-18 07:09:52 +00:00
Richard Goedeken
f2247c5a29 Merge pull request #3 from ecsv/llvm
Fix LLVM warnings and OpenBSD build failures
2014-01-13 21:47:18 -08:00
Sven Eckelmann
d54b026d6d Provide definition of __GNUC_PREREQ for OpenBSD
OpenBSD doesn't seem to have the definition for __GNUC_PREREQ and thus fails to
i386 with PIC enabled (which is the default now).
2014-01-11 01:05:23 +01:00
Sven Eckelmann
2d9c882275 Fix interpreter marks for unused JR_IDLE and JALR_IDLE
The JR_IDLE and JALR_IDLE functions are unused in the pure interpreter and
cached interpreter. Thus these functions are marked with the attribute
"unused". Unfortunatelly, the declaration did not precede the definition. Also
the definition conflicted with the declaration.
2014-01-11 00:59:52 +01:00
Sven Eckelmann
b9ccfe4f51 Fix subscreen credits Zelda workaround
The second part of the credit cheat were executed independenly of the first
part. This was caused but the wrong syntax used for the if statement in commit
8e14cc9ba5 ("Add Missing Subscreen Delay Fix for
Ocarina of Time")
2014-01-11 00:52:58 +01:00
Richard Goedeken
83e85d4839 Merge pull request #2 from ecsv/const_rdramb
Avoid constant address resolution via a pointer in memory.c without -flto
2013-12-20 11:03:07 -08:00
Richard Goedeken
7a59bee230 Merge pull request #1 from ecsv/github
Change from Bitbucket Hg to Github repositories
2013-12-20 11:00:59 -08:00
Sven Eckelmann
5d0ffe2226 Avoid constant address resolution via a pointer in memory.c without -flto
GCC cannot identify the rdramb pointer as const and therefore not remove any
indirection when using it without link-time optimization. The missing const
reduces the performance slightly in (read|write)_rdram[bhd]? because extra
instructions have to be generated to get the value of rdramb from memory.

Reported-by: Nebuleon Fumika
2013-12-20 17:49:55 +01:00
Sven Eckelmann
6bec8ef7d9 Change build_bundle/_modules to github repositories 2013-12-18 15:50:06 +01:00