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.
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.
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.
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")
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
Different operation systems (Unix vs. Windows) use different line ending types.
It can easily happen that users from different systems edit files and replace
all line endings of a file with the system specific version. This screws up
diffs and makes merges harder.
Git can normalize line endings for specific files and avoid this problem.
Binary files should be marked to avoid accidentally normalization.
Titles like Banjo Tooie are known to hang because the interrupt after the SI
read/write is delayed. But there are also titles which are known to have
problems when delay is enabled. Examples are
* Body Harvest
* City Tour Grandprix - Zennihon GT Senshuken
* Cruis'n USA
* GT 64 - Championship Edition
* Nightmare Creatures
* Ucchan Nanchan no Hono no Challenger - Denryuu Ira Ira Bou
Some ROMs require a different average cycles per instruction count than the
default one (2 per emulated instruction). This setting is necessary because
mupen64plus is not cycle accurate. A complete simulation of pipeline, cache,
bus and so on is necessary to get it perfectly without this workaround.
Known titles which require a CounterPerOp of 1 are
* 64 de Hakken!! Tamagotchi - Minna de Tamagotchi World
* 64 Oozumou
* A Bug's Life
* Airboarder 64
* Bass Hunter 64
* Bass Rush - ECOGEAR PowerWorm Championship
* Bassmasters 2000
* Biohazard 2
* Body Harvest
* California Speed
* Carmageddon 64
* Charlie Blast's Territory
* City Tour Grandprix - Zennihon GT Senshuken
* Destruction Derby 64
* Disney's Tarzan
* Donkey Kong 64
* Duck Dodgers Starring Daffy Duck
* Duke Nukem - ZER0 H0UR
* Excitebike 64
* Fighting Force 64
* Flying Dragon
* Fushigi no Dungeon - Fuurai no Shiren 2 - Oni Shuurai! Shiren Jou!
* GT 64 - Championship Edition
* Hamster Monogatari 64
* Harvest Moon 64
* Hercules - The Legendary Journeys
* Hexen
* Hiryuu no Ken Twin
* In-Fisherman Bass Hunter 64
* International Superstar Soccer 64
* Itoi Shigesato no Bass Tsuri No. 1 Kettei Ban!
* Jikkyou G1 Stable
* Jikkyou World Soccer 3
* Madden NFL 2000
* Madden NFL 2001
* Madden NFL 2002
* Madden NFL 99
* Mario Party
* Mario Party 2
* Mario Party 3
* Mario Story
* Monopoly
* Mystical Ninja 2 Starring Goemon
* NBA In the Zone '99
* NBA Showtime - NBA on NBC
* Nightmare Creatures
* Nintama Rantarou 64 Game Gallery
* Nuclear Strike 64
* Nushi Duri 64
* Nushi Duri 64 - Shiokaze ni Notte
* Paper Mario
* Pro Mahjong Kiwame 64
* Pro Mahjong Tsuwamono 64 - Jansou Battle ni Chousen
* Quake II
* Razor Freestyle Scooter
* Ready 2 Rumble Boxing Round 2
* Resident Evil 2
* Roadsters Trophy
* Rush 2 - Extreme Racing USA
* San Francisco Rush 2049
* Shadow Man
* Tigger's Honey Hunt
* Toy Story 2
* Triple Play 2000
* Ucchan Nanchan no Hono no Challenger - Denryuu Ira Ira Bou
* Vigilante 8
* Vigilante 8 - 2nd Offence
* Virtual Pool 64
* War Gods
* WCW-nWo Revenge
* Wipeout 64
* HardCoded by Iceage
* Spacer by Memir (POM '99)
Known titles which require a CounterPerOp of 3 are
* BattleTanx
* BattleTanx - Global Assault
* Beetle Adventure Racing!
* Disney's Donald Duck - Goin' Quackers
* Donald Duck - Quack Attack
* HSV Adventure Racing
* Jikkyou Powerful Pro Yakyuu Basic Ban 2001
* LEGO Racers
* Monster Truck Madness 64
* Pilotwings 64
* Road Rash 64
* Wave Race 64 - Shindou Edition
* WCW Nitro
* Wetrix
Mupen64plus contains built-in cheats for Ocarina of Time, which activates the
essential subscreen delay fix. However, the built-in code for Master Quest
only works for the (E) version of Master Quest, and not the (U) version. The
file also does not include the (U) (GC) version of Ocarina of Time. Master
Quest and the GC versions of Ocarina of Time also need the End Credits Fix,
otherwise these games will crash when the credits are displayed.
Issue pinpointed by xperia64 and discussed in greater length here:
http://www.paulscode.com/forum/index.php?topic=1199.msg11751#msg11751
This may be just a band-aid to a deeper issue. Was discovered in Android while
trying to reload save states for Perfect Dark and Goldeneye from the latest
master revision of mupen64plus-ae. Recent changes to mupen64plus-ae have elim-
inated the blanket call to System.exit() it was using previously, which may have
been masking this issue before now. AE is also different from the upstream PC
version because it loads ui-console dynamically and calls main as a subroutine
of a larger multi-threaded android process (rather than ui-console being an
entry point to a new process). Not sure of all the ramifications, or if this is
even the correct fix, but it does fix the problem in AE.
SDL 2.0 cannot store unicode anymore. Pre-2.0 versions provided this
field but it was removed right before the 2.0 release. Still using it
makes the compile fail.
The IDs for SDL scancodes don't start from SDL_SCANCODE_0 and end at
SDL_SCANCODE_9. Therefore, SDL_SCANCODE_9 is bigger than SDL_SCANCODE_0 (which
violates a precondition of the key check) and this makes it impossible to
select a saveslot using the numbers on the keyboard.
Using a special (order independent) function which translates to the slot ids
avoids this problem and can still be optimized to a simple range check +
calculation by the compiler.
The implementation of the SI regiser DMA busy bit caused regressions in games
like Mischief Makers (no gamepad input is detected by the game). The only known
benefit seems to be the reduced message spam about duplicated interrupts.
The message spam caused by some ROMS can be tolerated until the cause of the
regression is better understood.
This reverts 734b67b8ff647cc355b5f6b781799c42e75e81ea ("Implement SI register
DMA busy bit")
It is easier for a user to keep the old SDL1.2 values for the keys in the
config instead of converting them by hand. This is extreme important when the
default (automatic) config is used.
The joysticks in SDL2 use reference counting and return just a new reference
when trying to reopen a joystick. SDL_JoystickOpened is not needed in SDL2.
Only the lower 8 bits are checked by the country code to system type check to
decide whether a PAL or NTSC system should be emulated. 8707bea8b73c
("1. Update msvc11 project file to visual studio 2012 (msvc11)") changed the type to
be checked to 16 bit and forgot to mask the upper 8 bits out when doing the
system check.
Doing free'ing user managed msg will cause an double-free later. Also free'ing
messages without deleting them from the list will lead to bad reads after the
resize finished.
2. Capture SDL_VIDEORESIZE events and call video plugin ResizeVideoOutput() function.
3. In VidExt_ResizeWindow(), destroy and re-create OSD when re-setting the screen size
4. Fix bug when checking video api version for <2.2.0 fallback
localtime_r is prefered because it has no shared states. It creates less
problems when using threads or calling it multiple times with different
parameters. Mupen64plus doesn't do this right now, but has many workarounds for
windows compilers which don't work all the time and need extra workarounds
later. Using localtime instead may be the easiest solution right now.
- extended read_memory_32() in debugger/dbg_memory.c to be able to read from special memory blocks like RDRAMREG, RSPREG, RSP, DP, VI, AI, etc
- fixed byte order bugs in read_memory_32_unaligned() and write_memory_32_unaligned()
- extended get_memory_flags() in debugger/dbg_memory.c to return new flags and cover special memory spaces
Architectures like armel, armhf, arm64, avr32, powerpc, s390 and s390x use a
unsigned type definition for char. Therefore, the macro for sign extension is
just a nop instruction there. Being more specific on these arches about the
signedness avoids this problem.