Commit Graph

10533 Commits

Author SHA1 Message Date
spycrab
f7887a442f Qt/NetPlayDialog: Stop games properly 2018-07-04 16:27:16 +02:00
spycrab
d8212fd927 Core/Core: Fix getting stuck when Stop is called without emulation running 2018-07-04 00:52:53 +02:00
Jonathan Hamilton
431b9e76be Set arbitrary mipmap detection threshold default to 14
Now the detection heuristic has changed, the old value is no longer
valid.

Some example thresholds for known mipmap effects that should trigger:

SMG's lava has a mimimum difference of ~17.8, SMG2's clouds have a
minimum difference of ~14.8, and Wind Waker's foam has a minimum
difference of ~15

Non-triggering examples were tested and all had a calculated difference
lower than 3.

So a value of 14 should lean towards false-negatives instead of
positives, but this is clearly incomplete testing and may require
further tweaks later.
2018-07-02 09:53:54 -07:00
spycrab
3e2e813607 HW/WiimoteEmu: Make "Upright / Sideways Wii Remote" mutually exclusive 2018-07-02 15:27:03 +02:00
Techjar
bc15eb2d57 Expose arbitrary mipmap detection toggle in UI 2018-07-01 04:42:47 -04:00
Mike Ravenelle
8218de0762 QT: Removed iterative input in options groups. 2018-06-30 14:38:42 -05:00
Techjar
5adeca4087 Add "Reduce Polling Rate" option to NetPlay
Normally, SI is polled at a rate defined by the game, and we have to send the pad state to other clients on every poll or else we'll desync. This can result in fairly high bandwidth usage, especially with multiple controllers, mostly due to UDP/IP overhead.

This change introduces an option to reduce the SI poll rate to once per frame, which may introduce up to one frame of additional latency, but will reduce bandwidth usage substantially, which is useful for users on very slow internet connections.

Polling SI less frequently than the game asked for did not seem to cause any problems in my testing, so this should be perfectly safe to do.
2018-06-30 13:13:44 -04:00
Pierre Bourdon
212adc7b87
Merge pull request #7115 from Sintendo/double2singleopt
Jit64Common: Eliminate branch in ConvertDoubleToSingle
2018-06-25 01:45:11 +02:00
Pierre Bourdon
307d705654
Merge pull request #7152 from lioncash/dsp-interp
DSPIntExtOps: Minor cleanups
2018-06-25 01:42:42 +02:00
Pierre Bourdon
8129a3db6c
Merge pull request #7156 from lioncash/psq
Interpreter_LoadStorePaired: Generate a program exception if non-indexed paired-single load/stores are used and HID2.LSQE is not set
2018-06-25 01:41:48 +02:00
Pierre Bourdon
4200d2e5e3
Merge pull request #7155 from degasus/arm_registers
JitArm64: Drop the plattform register.
2018-06-25 01:38:29 +02:00
Pierre Bourdon
2cfdf89898
Merge pull request #6983 from yourWaifu/add-discord-rpc-support
Add Discord Rich Presence support
2018-06-25 00:06:27 +02:00
Lioncash
135398fcea BTEmu: Get rid of a few pointer casts
Maintains the same behavior without invoking undefined behavior.
2018-06-22 21:24:49 -04:00
Lioncash
bc8f932f0c BTEmu: Make WriteToEndpoint's reference parameter const
This function doesn't modify anything being referenced.
2018-06-22 20:59:00 -04:00
Léo Lam
971972069c
Merge pull request #7148 from lioncash/build
Common, DSP: Only compile in x86-64 emitter related utilities on x86 platforms
2018-06-22 23:55:37 +02:00
Léo Lam
1da868ee82
Merge pull request #7150 from lioncash/naming
BTEmu: Amend variable naming
2018-06-22 22:50:48 +02:00
Léo Lam
d07e599a74
Merge pull request #7151 from lioncash/const
Movie: Make pointer parameters const where applicable
2018-06-22 22:50:25 +02:00
Léo Lam
e16cadf982
Merge pull request #7153 from lioncash/deduplicate
DSPTables: Deduplicate FindByOpcode() implementations in DSP opcode tables
2018-06-22 22:49:16 +02:00
Lioncash
8d9f74b762 DSPEmitter: Make member functions, aliases and constants private where applicable
Given we now use a base class for the interface, we can make all member
functions, types and constants that aren't directly related to
instructions private.
2018-06-21 17:29:33 -04:00
Lioncash
47acf794c7 Interpreter_LoadStorePaired: Generate a program exception if non-indexed paired-single load/stores are used and HID2.LSQE is not set
HID2.LSQE is the Load/store quantize enable bit for non-indexed format
instructions (which are psq_l, psq_lu, psq_st, and psq_stu). If this bit
is not set and any of these instructions are attempted to be executed,
then a program exception is supposed to occur.
2018-06-21 17:16:54 -04:00
degasus
ecf86bbf7b JitArm64: Drop the plattform register.
This register is defined as "optional reserved" within the aarch64 ABI.
Linux doesn't use it, but we must not modify it on ios or windows.
As we have plenty of registers on aarch64, let's just always skip this one.
2018-06-21 22:39:15 +02:00
Lioncash
fd1ad02c5c DSPTables: Deduplicate FindByOpcode() implementations in DSP opcode tables
This function was duplicated across all the opcode tables: the main info
tables, the interpreter tables, and the x86-64 JIT tables. However, we
can just make the type of the std::array parameter a template type and
get rid of this duplication.
2018-06-21 13:35:06 -04:00
Lioncash
fdf057efce DSPIntExtOps: Remove unnecessary const from function prototypes
const on a parameter being passed by value in a prototype doesn't actually signify
anything, these are only applicable in the definition, where they make
the opcode parameter immutable.
2018-06-21 13:00:08 -04:00
Lioncash
42846e6ef1 DSPIntExtOps: Correct casing of functions
Corrects several functions to conform to our coding style.
2018-06-21 12:53:22 -04:00
Lioncash
4367e3aeda DSPIntExtOps: Make IsSameMemArea internally linked
inline has external linkage, which doesn't really make sense here, given
the function is only used within this translation unit. So we can
replace inline with static.

While we're at it, the code within the function can also be compressed
to a single return statement.
2018-06-21 12:46:01 -04:00
Lioncash
2354d933c8 Movie: Make pointer parameters const where applicable
A few functions don't actually modify the data being pointed to, so
these can be made pointer-to-const.
2018-06-21 12:27:30 -04:00
Lioncash
25e3ec23f8 BTEmu: Rename AccessWiiMote to AccessWiimote
Everywhere else throughout the codebase we use "Wiimote" when referring
to the Wii Remote as a shorthand. This makes the casing consistent.
2018-06-21 11:36:02 -04:00
Lioncash
56b8d1803e BTEmu: Amend parameter and local variable naming 2018-06-21 11:35:31 -04:00
Lioncash
16c6e9fa57 BTEmu: Amend class member variable naming 2018-06-21 10:53:07 -04:00
Lioncash
c4fb07f428 Common, DSP: Only compile in x86-64 emitter related utilities on x86 platforms
Previously these were required to be built into the executable so that
the JIT portion of the DSP code would build properly, as the
x86-64-specifics were tightly coupled to the DSP common code. As this is
no longer the case, this is no longer necessary.
2018-06-21 06:53:31 -04:00
Markus Wick
630c3f0805
Merge pull request #7147 from lioncash/emitter
DSP: Replace x64 JIT pointer with a pointer to an architecture-agnostic base
2018-06-21 12:34:13 +02:00
Markus Wick
52990d215d
Merge pull request #7145 from lioncash/mtspr
Interpreter_SystemRegisters: Handle mtspr to HID1 and PVR properly
2018-06-21 11:36:12 +02:00
Lioncash
b7301bee29 DSP: Replace x64 JIT pointer with a pointer to an architecture-agnostic base
This adds a base class that is used to replace the concrete instance of
the x64 JIT pointer within DSPCore. This fully removes the direct use
(read: non-ifdefed) usage of x86-64-specifics within the main DSP code.

Said base can also be used for creating JITs for other architectures,
such as AArch64, etc.
2018-06-21 05:20:22 -04:00
Mat M
8b68a7d88a
Merge pull request #7109 from degasus/cached_interpreter
CachedInterpreter: Implement breakpoints.
2018-06-21 04:23:38 -04:00
Markus Wick
5f7dc31a9f
Merge pull request #7138 from lioncash/dsp-table
DSPTables: Separate interpreter and JIT functions from main info table
2018-06-21 10:23:03 +02:00
Lioncash
474c1bb4f7 DSPTables: Separate interpreter and JIT functions from main info table
This is one of the last things that needed to be done in order to
finally separate the x86-64-specific code from the rest of the common
DSP code. This splits the tables up similar to how it's currently done
for the PowerPC CPU tables.

Now, the tables are split up and within their own relevant source files,
so the main table within the common DSP code acts as the "info" table
that provides specifics about a particular instruction, while the other
tables contain the actual instruction.

With this out of the way, all that's left is to make a general base for
the emitters and we can then replace the x64 JIT pointer in DSPCore with
it, getting all x64 out of the common code once and for all.

While shuffling all the code around, the removal of the DSPEmitter
includes in some places uncovered indirect inclusions, so this also
fixes those as well.
2018-06-21 04:21:44 -04:00
Markus Wick
0459a1a9e6
Merge pull request #6875 from JonnyH/WIP/mipmap-heuristic-tweaks
Make arbitrary mipmap detection a config option
2018-06-21 10:19:47 +02:00
Markus Wick
d8ba3034c3
Merge pull request #7133 from lioncash/assembler
DSPAssembler: Minor changes
2018-06-21 10:02:36 +02:00
Markus Wick
b4b9b53239
Merge pull request #7143 from lioncash/bt-helper
BTEmu: Make m_WiiMotes private
2018-06-21 10:00:28 +02:00
Markus Wick
4ca05810be
Merge pull request #7144 from lioncash/cast
ActionReplay: Use Common::BitCast instead of reinterpret_cast in Subtype_AddCode()
2018-06-21 09:56:05 +02:00
Markus Wick
9f03d8ca6a
Merge pull request #7139 from lioncash/tb
PowerPC: Add functions to read/write the full timebase value
2018-06-21 09:52:13 +02:00
Markus Wick
3816e825c9
Merge pull request #7135 from JosJuice/cant-load-state
Only show savestate version mismatch OSD message when relevant
2018-06-21 09:28:47 +02:00
Lioncash
d0fbba9ac1 Interpreter_SystemRegisters: Handle mtspr to HID1 and PVR properly
Despite both being documented as read-only registers, only one of them
is truly read-only. An mtspr to HID1 will steamroll bits 0-4 with
bits 0-4 of whatever value is currently in the source register, the rest
of the bits are not modified as bits 5-31 are considered reserved, so
these ignore writes to them.

PVR on the other hand, is truly a read-only register. Attempts to write
to it don't modify the value within it, so we model this behavior.
2018-06-20 18:50:33 -04:00
Lioncash
7eb86cdb67 BTEmu: Add helper function for accessing WiimoteDevice instances by index
This makes it much more straightforward to access WiimoteDevice
instances and also keeps the implementation details of accessing those
instances in one spot.

Given as all external accesses to the WiimoteDevice instances go through
this function, we can make the other two private.
2018-06-20 17:05:54 -04:00
Lioncash
0e437c41e5 ActionReplay: Use Common::BitCast instead of reinterpret_cast in Subtype_AddCode()
Using reinterpret_cast (or a C-styled equivalent) to reinterpret
integers as floating-point values and vice-versa invokes undefined
behavior. Instead, use BitCast, which does this in a well-defined
manner.
2018-06-20 16:38:30 -04:00
Lioncash
e4b6d7626b WiimoteDevice: Make Callback_WiimoteInterruptChannel() accept its data as a u8* rather than void*
All current usages of the function pass in either u8 arrays or pointers,
so we can make this part of the function a concrete type.
2018-06-20 16:04:10 -04:00
Lioncash
2b60fe684c BTEmu: Make m_WiiMotes private
We can already utilize the public interface to access the necessary
instance without exposing a private data member.
2018-06-20 15:15:05 -04:00
yourWaifu
63f03455f3 Discord Rich Presence CMake integration
I have no idea if this works or not. Hopefully the build bot will tell me.
2018-06-19 22:43:03 -04:00
Lioncash
72e21bc679 Interpreter_FPUtils: Handle the FPSCR.ZE and FPSCR.VE flags with arithmetic instructions
According to PEM 3.3.6.1, if a division by zero occurs and FPSCR.ZE is
set, then the result of the instruction operation is unchanged (see
table 3-13). Similarly, if an invalid operation occurs and FPSCR.VE is
set, then the destination should also remain unchanged (see table 3-12).
Hardware also matches this behavior.

We were handling this for other relevant instructions, but we weren't
doing so for the arithmetic instructions. This corrects that.

This also alters our NI_* functions to return an FPResult type, which
allows us to see which kind of exception in particular is set in
exceptional cases. This is necessary for cases like the fdiv
instructions, which requires handling both ZE and VE being potentially
set.
2018-06-19 18:09:03 -04:00
Lioncash
562d2a700b PowerPC: Add functions to read/write the full timebase value
Allows us to get rid of a silly pointer cast and deduplicate some code
from the front-end when it comes to reading the value.
2018-06-19 13:26:08 -04:00
JosJuice
860a89b943 Only show savestate version mismatch OSD message when relevant
We used to show it for all failed savestate loads, no matter what the
failure reason was. Fixes https://bugs.dolphin-emu.org/issues/9815
2018-06-19 16:15:18 +02:00
Lioncash
9c3c92329e DSPAssembler: Remove commented out code
This is just dead line noise sitting around, so we can get rid of it.
2018-06-18 16:24:38 -04:00
Lioncash
549bedd30b BTEmu: Make read-only arrays const
Several arrays within this source file are only ever read from, so the
data can be made immutable.
2018-06-18 16:03:05 -04:00
Lioncash
b36cdbdda5 DSPAssembler: Convert typedef into a using alias 2018-06-18 15:45:59 -04:00
Lioncash
af41a8efba DSPAssembler: Make member variable naming consistent
Previously the class was intermixing m_ prefixed variables and
non-prefixed ones, which can be misleading. Instead, we make the
prefixing consistent across the board.
2018-06-18 15:44:13 -04:00
Lioncash
1389bf35bd DSPAssembler: In-class initialize members where applicable
Avoids repeating ourself in the initializer list and makes the class
have a predictable initial state.
2018-06-18 15:35:58 -04:00
JosJuice
091efcc41d
Merge pull request #7125 from lioncash/enum
ConfigManager: Convert GPUDeterminismMode into an enum class
2018-06-18 18:22:31 +02:00
Lioncash
eb76dc9600 DSPCore: Make ExceptionType an enum class
Makes the values strongly typed and avoids polluting the DSP namespace.
2018-06-17 17:42:54 -04:00
Lioncash
8459d2bc5d DSPCore: Make DSPCore_SetException() take an enum type instead of a u8
Makes it more immediately indicative which values are intended to be
passed to this function.
2018-06-17 16:02:56 -04:00
Lioncash
de9c5fd375 ConfigManager: Convert GPUDeterminismMode into an enum class
Makes the values strongly-typed and gets more identifiers out of the
global namespace.

We are forced to use anything that is not "None" to mean none, because
X11 is garbage in that it has:

\#define None 0L

Because clearly no one else will ever want to use that identifier for
anything in their own code (and is why you should prefix literally
any and all preprocessor macros you expose to library users in public
headers).
2018-06-15 14:45:30 -04:00
Léo Lam
0ee9b884ca
Merge pull request #7123 from lioncash/enum
DSPCore: Convert core type enum into an enum class
2018-06-15 19:52:57 +02:00
Lioncash
6f473b96d0 PowerPC: Convert CPUCore enum into an enum class
Makes the enum values strongly-typed and prevents the identifiers from
polluting the PowerPC namespace. This also cleans up the parameters of
some functions where we were accepting an ambiguous int type and
expecting the correct values to be passed in.

Now those parameters accept a PowerPC::CPUCore type only, making it
immediately obvious which values should be passed in. It also turns out
we were storing these core types into other structures as plain ints,
which have also been corrected.

As this type is used directly with the configuration code, we need to
provide our own overloaded insertion (<<) and extraction (>>) operators
in order to make it compatible with it. These are fairly trivial to
implement, so there's no issue here.

A minor adjustment to TryParse() was required, as our generic function
was doing the following:

N tmp = 0;

which is problematic, as custom types may not be able to have that
assignment performed (e.g. strongly-typed enums), so we change this to:

N tmp;

which is sufficient, as the value is attempted to be initialized
immediately under that statement.
2018-06-15 10:27:59 -04:00
Lioncash
161dffe2f9 DSPCore: Rename JIT core type to JIT64
This changes the identifier to represent the x86-64 DSP emitter. If any
other JITs for the DSP are added in the future, they all can't use the
same generic identifier.
2018-06-15 07:59:05 -04:00
Lioncash
98af5e4c10 DSPCore: Convert core type enum into an enum class
Prevents pollution of the surrounding scope and makes the values
strongly-typed.
2018-06-15 07:55:31 -04:00
Léo Lam
58606702f7
Merge pull request #7107 from lioncash/mac
Common/Network: Get rid of out parameters for MAC address utilities
2018-06-14 19:44:09 +02:00
Léo Lam
c7280707ec
Merge pull request #7113 from lioncash/mask
Gekko: Centralize bitmasking of the FPSCR within UReg_FPSCR
2018-06-14 18:28:11 +02:00
Léo Lam
59cd9a5af7
Merge pull request #7118 from lioncash/hotkey-str
HotkeyManager: Minor changes
2018-06-14 18:26:03 +02:00
Lioncash
189d277cfc Common/Random: Add convenience template for simple arithmetic values
In cases where we just want a random value for a primitive arithmetic
type, we can wrap this in a template to allow convenient direct
assignment instead of keeping declaration and initialization separate
(making it more difficult to use values uninitialized). This also allows
the use of Common::Random with functions such as std::generate, making
it more flexible in how random values can be generated.
2018-06-14 10:31:13 -04:00
Lioncash
410792d922 HotkeyManager: Add missing s_ prefixes to internally-linked file-scope variables
Previously there was an intermixing of no prefixing and prefixing. This
makes the notation consistent.
2018-06-14 10:07:22 -04:00
Lioncash
d22d32372e HotkeyManager: Use std::array where applicable 2018-06-14 10:07:01 -04:00
Lioncash
aae06f1cf7 HotkeyManager: Move HotkeyGroupInfo struct into the cpp file
This is only ever used internally. Also change the std::string name over
to a const char*, so that we don't need to potentially allocate anything
on the heap at immediate runtime.
2018-06-14 09:12:19 -04:00
Lioncash
d459470fee HotkeyManager: Convert file-scope std::string array to constexpr const char* array
Previously, a total of 114 std::string instances would need to construct
(allocating on the heap for larger strings that can't be stored with
small string optimizations). We can just use an array of const char*
strings instead, which allows us to avoid this.
2018-06-14 09:04:57 -04:00
Markus Wick
1f49a9c87c
Merge pull request #7116 from lioncash/log
JitCommon/JitBase: Rename x86-specific logging define to be platform agnostic
2018-06-14 15:00:34 +02:00
Lioncash
065aba43e2 JitBase: Remove unused rewriteStart data member from JitState 2018-06-14 08:46:34 -04:00
Lioncash
ace24c2932 JitCommon/JitBase: Rename x86-specific logging define to be platform agnostic
Given JitBase shouldn't include platform specifics, we can generalize this
preprocessor define and allow any JIT to use it to indicate that generated code should be logged.

While we're at it, also move these defines beneath the includes with the
rest of the defines.
2018-06-14 08:35:35 -04:00
Sintendo
78bc9690e2 Eliminate branch in ConvertDoubleToSingle 2018-06-13 23:02:50 +02:00
degasus
03c88c83ac CachedInterpreter: Implement breakpoints.
There were missed on the initial implementation of the cached interpreter.
2018-06-13 08:33:57 +02:00
Lioncash
0049ef3a2a Gekko: Centralize bitmasking of the FPSCR within UReg_FPSCR
Rather than introduce this handling in every system instruction that modifies
the FPSCR directly, we can instead just handle it within the data structure
instead, which avoids duplicating mask handling across instructions.

This also allows handling proper masking from the debugger register
windows themselves without duplicating masking behavior there either.
2018-06-12 14:15:50 -04:00
Léo Lam
f3a18db9e0
Merge pull request #7106 from lioncash/name
WiimoteDevice: Amend variable naming
2018-06-11 11:12:08 +02:00
Lioncash
59846378b3 BTReal: Handle case where a link key may be invalid within LoadLinkKeys()
This can only occur if a user purposely corrupts their config file, but
still, we may as well protect users from themselves.
2018-06-10 16:11:36 -04:00
Lioncash
ce69201f33 Common/Network: Get rid of out parameters for MAC address utilities
Given we have std::array and std::optional, we can use these in
conjunction with one another to avoid the need for out parameters.
2018-06-10 15:43:26 -04:00
Mat M
b6592723a7
Merge pull request #7103 from leoetlino/master
BTReal: Fix unsafe reinterpret_casts
2018-06-10 14:27:19 -04:00
Lioncash
925348cdd1 WiimoteDevice: Amend variable naming for class member variables
Gets rid of inconsistencies related to class variables concerning casing
and the lack of prefixes on some variables, while others contain them.
2018-06-10 14:23:36 -04:00
Lioncash
eaace415d3 WiimoteDevice: Amend variable naming for non-class member variables
This file is quite out of sync when it comes to our naming conventions,
this brings it back in line with it.
2018-06-10 14:23:31 -04:00
Markus Wick
70417c8d16
Merge pull request #7096 from lioncash/jit-buffer
JitBase: Centralize location of code buffer
2018-06-10 17:59:41 +02:00
Lioncash
0d0f58005b WiimoteDevice: Make channel reference const qualified
This is only used for reading data, not modifying it, so make the type
system enforce that.
2018-06-10 09:08:33 -04:00
Lioncash
5548316d32 WiimoteDevice: Remove unnecessary cast in ExecuteL2capCmd()
pData is already a u8*, so a cast isn't necessary here.
2018-06-10 09:04:42 -04:00
Léo Lam
fca6d80740
Merge pull request #7101 from lioncash/ios
WiimoteDevice: Minor changes
2018-06-10 14:35:41 +02:00
Léo Lam
8bb08d1ca6 BTReal: Fix unsafe reinterpret_casts
Using reinterpret_cast like that is possibly UB.
Replace them with structs/memcpy calls where applicable.
2018-06-09 23:04:04 +02:00
Lioncash
c825eecbc9 ChunkFile: Remove unnecessary includes
ChunkFile doesn't use any of the file utilities, so we can drop these
headers to avoid pulling in unnecessary dependencies. This also
uncovered a few indirect inclusions.
2018-06-09 16:49:59 -04:00
Lioncash
647da59679 WiimoteDevice: Move channel state booleans into a struct
These were essentially duplicated for both channels, when they could be
implemented in terms of a struct, which allows for simplifying the reset
case.
2018-06-09 16:35:32 -04:00
Lioncash
94fd8505d6 WiimoteDevice: Make DoesChannelExist() a const member function
This only queries internal class state, it doesn't modify it.
2018-06-09 16:35:32 -04:00
Lioncash
f906785e88 WiimoteDevice: Make EventPagingChanged() a const member function
This only queries internal state, it doesn't modify it. With minor
adjustments to BTEmu, this also allows us to make its usage instance a
constant reference.
2018-06-09 16:35:32 -04:00
Lioncash
38d155f993 WiimoteDevice: Make ConnectionState enum an enum class
Avoids polluting class scope and makes it strongly typed.
2018-06-09 16:35:27 -04:00
Léo Lam
f564c28040
Merge pull request #7099 from lioncash/compiler
Common: Add Compiler.h header for compiler-specifics
2018-06-09 20:19:49 +02:00
Lioncash
b5d89294f7 WiimoteHIDAttr: Make file-scope packet data arrays immutable
Given these are only ever returned from a function as const u8*, we can
go ahead and make these fully immutable.
2018-06-09 13:46:28 -04:00
Lioncash
d8f6d60189 Compiler: Rename UNUSED macro to DOLPHIN_UNUSED
UNUSED is quite a generic macro name and has potential to clash with
other libraries, so rename it to DOLPHIN_UNUSED to prevent that, as well
as make its naming consistent with the force inline macro
2018-06-09 12:20:29 -04:00
Lioncash
03414e8e84 Common: Add header for compiler-specifics
Instead of globbing things under an ambiguous Common.h header, move
compiler-specifics over to Compiler.h. This gives us a dedicated home
for anything related to compilers that we want to make functional across
all compilers that we support.

This moves us a little closer to eliminating Common.h entirely.
2018-06-09 12:10:05 -04:00
Lioncash
e18824e3f3 PPCAnalyst: get rid of code buffer size variable
Rather than have a separate independent variable that we need to keep
track of in conjunction with the JIT code buffer size itself, amend the
analyst code to use the code buffer constant in JitBase.

Now if the size ever changes, then the analyst will automatically adjust
to handle it.
2018-06-09 08:17:17 -04:00
Lioncash
a3f2941173 JitBase: Centralize location of code buffer
Given the code buffer is something truly common to all JIT
implementations, we can centralize it in the base class and avoid
duplicating it all over the place, while still allowing for differently
sized buffers.
2018-06-09 08:16:53 -04:00
Lioncash
61ff11c266 DSPDisassembler: Remove unnecessary includes
Gets rid of an inclusion dependency with the DSP interpreter, as well as
a header-based dependency on the DSP opcode tables. This also uncovered
an indirect inclusion on the logger within DSPSymbols.cpp
2018-06-08 18:55:57 -04:00
JosJuice
ca3d68cee5
Merge pull request #7076 from JosJuice/android-gamelist-uicommon
Use UICommon's game list code on Android
2018-06-08 13:59:45 +02:00
Léo Lam
d23c3e9524
Merge pull request #7093 from lioncash/log
Interpreter_SystemRegisters: Change PanicAlert to INFO_LOG in mtspr()
2018-06-07 19:01:39 +02:00
Lioncash
5db2137538 Interpreter_SystemRegisters: Change PanicAlert to INFO_LOG in mtspr()
As peculiar as this may be, decrementer exceptions by means of setting
the decrementer's zeroth bit from 0 to 1 is valid behavior by software
(and is defined in Programming Environments for 32-bit Microprocessors
in section 2.3.14.1 -- Decrementer operation). Given it's valid behavior,
it doesn't necessarily make sense to use a panic alert and halt, as this
isn't a condition where everything should be considered in a critical
state.

Instead, change it to an info log, so we still make note of it, but
without potentially tearing down state or halting emulation.
2018-06-07 12:14:46 -04:00
Pierre Bourdon
de0fe0e210
Merge pull request #6928 from leoetlino/random
Common: Add Random utilities
2018-06-08 00:41:08 +09:00
Léo Lam
b51fbaa5b0
Merge pull request #7084 from lioncash/mask
Interpreter_SystemRegisters: Ensure FPSCR modifying instructions don't set bit 20
2018-06-07 16:51:36 +02:00
Léo Lam
dd7c558be3
Merge pull request #7092 from JosJuice/wii-devkit
Set 0x0000002C to NDEV 2.1 when running a debug-signed Wii disc
2018-06-07 15:52:07 +02:00
JosJuice
af5d9f693a Set 0x0000002C to NDEV 2.1 when running a debug-signed Wii disc
This fixes the The Last Story prototype that GerbilSoft was testing,
because the apploader is a bit more lenient with the max size of DOL
sections when it detects that you're using a devkit console.
2018-06-07 10:14:32 +02:00
Sleepy Flower Girl
57bd13a0ce Use new config system for Discord Rich Presence option
This doesn't feel like a mirror change to me.
2018-06-07 00:59:31 -04:00
JosJuice
1c027bc148 Use UICommon's game list code on Android
Deduplicates code, and gets rid of some problems the old code had
(such as: bad performance when calling native functions, only one
disc showing up for multi-disc games, Wii banners being low-res,
unnecessarily much effort being needed for adding more metadata).
2018-06-06 17:34:07 +02:00
Lioncash
11a35d47ef Interpreter_SystemRegisters: Ensure FPSCR modifying instructions don't set bit 20
Bit 20 is defined as being reserved and attempts to set it are ignored
by hardware, so we should be doing the same thing.
2018-06-05 16:27:10 -04:00
Léo Lam
85baca386a ES: Return ReturnCode in DiVerify for consistency
No reason to return a s32 instead of an IOS return code (like every
other function in the ES API)
2018-06-05 22:07:59 +02:00
Léo Lam
21d0d6711f
Merge pull request #7073 from leoetlino/fix
WiiSave: Fix the way paths are handled
2018-06-05 18:32:13 +02:00
Lioncash
25d38c0a23 Interpreter_LoadStorePaired: Simplify type aliases in QuantizeAndStore() and LoadAndDequantize()
These can just use the _t variant of make_unsigned, which eliminates the
need to pull the type from the ::type member type.
2018-06-04 17:57:05 -04:00
Léo Lam
14d37e0493 WiiSave: Fix the way paths are handled
All paths in SaveFile are relative to the title data directory, not
absolute. Fixes an accidental regression from 5.0-7988 (PR #7059).
2018-06-04 23:31:00 +02:00
Léo Lam
8fe7f8d80d
Merge pull request #7072 from lioncash/emitter
DSPEmitter: Make m_unresolved_jumps private
2018-06-04 22:26:24 +02:00
JosJuice
5e0da225ee
Merge pull request #7068 from lioncash/const
DSPAccelerator: const qualify pointer parameter for Read()
2018-06-04 22:05:26 +02:00
Lioncash
bbd2fd080e DSPEmitter: Make m_unresolved_jumps private
By making the jitted function a private static function of DSPEmitter,
we can allow access to data members within the context of the function
without making them public overall.

This finally makes all data members for the x64 DSP emitter private.
2018-06-04 15:46:08 -04:00
Léo Lam
5f29e891d3
Merge pull request #7063 from lioncash/fifr
Interpreter: Unset FPSCR.FI and FPSCR.FR for QNaN and infinity input operands
2018-06-04 20:53:58 +02:00
Léo Lam
6ce9c96d91
Merge pull request #7027 from leoetlino/cleanup
Use some C++17 features available since GCC 6
2018-06-04 20:50:50 +02:00
Lioncash
1e3e11d0f5 DSPAccelerator: const qualify pointer parameter for Read()
The data pointed to is only ever read, so make this explicit.
2018-06-04 14:50:42 -04:00
Léo Lam
9b43180731
Merge pull request #7040 from JMC47/enableadouble2single
[JIT] Enable Accurate Double to Single Conversion
2018-06-04 20:29:15 +02:00
JMC47
2795376b61 Enable Accurate Double to Single Conversion 2018-06-04 11:49:12 -04:00
Léo Lam
8e0ea92ec3
Merge pull request #7058 from JosJuice/move-titledatabase-usage
Don't store custom names from TitleDatabase in GameFileCache
2018-06-04 14:59:05 +02:00
JosJuice
85e94cc510 Don't store custom names from TitleDatabase in GameFileCache
This saves us from having to update the GameFileCache when the
TitleDatabase changes (for instance when the user changes language).
2018-06-04 07:45:22 +02:00
Lioncash
9068109b3e Interpreter: Unset FPSCR.FI and FPSCR.FR for QNaN and infinity input operands
This hardware behavior makes sense, as the FI bit is used to signify an
inexact result. An inexact result is a form of value that results during
the rounding phase of denormalization. If any bits of the significand
are lost during said rounding, then the result is considered to be
inexact.

However NaN and infinity are not classed as subnormals and therefore
don't undergo the denormalization step, making loss of precision not
possible (in NaN's case, numerically rounding something that is
literally Not a Number doesn't even make sense).

FR is set to indicate whether or not the last arithmetic or rounding and
conversion instruction that rounded the intermediate result incremented
the fractional portion of the result. Given neither input types would be
affected by this, this should also be unset.

This corrects more of the exceptional case handling for these values to
match hardware.
2018-06-03 18:15:47 -04:00
Léo Lam
0ecec33567 WiiRoot: Use a namespace alias for FS to reduce noise 2018-06-03 21:37:28 +02:00
Sleepy Flower Girl
d9351a5b45 Added INI setting for Discord Rich Presence 2018-06-03 15:29:21 -04:00
Sleepy Flower Girl
d5303ddf0b Add Discord Rich Presence support 2018-06-03 15:27:20 -04:00
Léo Lam
c1428b6da0 WiiRoot: Use new filesystem interface
This gets rid of remaining direct accesses to the Wii filesystem
in WiiRoot by using WiiSave to copy saves and the FS interface
2018-06-03 21:21:32 +02:00
Léo Lam
8fce18e4ff
Merge pull request #7059 from leoetlino/fs-wiisave
WiiSave: Use new filesystem interface
2018-06-03 21:05:22 +02:00
Léo Lam
6b9aef7042 FS: Add a struct for modes
As suggested here: https://dolp.in/pr7059#pullrequestreview-125401778

More descriptive than having a std::tuple of FS::Mode, and lets us
give names to known triplets of modes (like in ES). Functions that
only forward mode arguments are slightly less verbose now too.
2018-06-03 20:45:35 +02:00
Lioncash
06056d4f45 Gekko: Make register constructors explicit where applicable
Prevents implicit conversions to types and requires explicitly
specifying them in order to construct instances of them. Given these are
used within emulation code directly, being explicit is always better
than implicit.
2018-06-03 12:37:17 -04:00
Léo Lam
d1a8661709 WiiSave: Save and restore files and banner with correct mode 2018-06-03 17:23:40 +02:00
Léo Lam
fd3472442d WiiSave: Use new filesystem interface
Converts WiiSave to the new filesystem interface.
2018-06-03 17:01:14 +02:00
Léo Lam
c22205cd7e
Merge pull request #7053 from lioncash/frfi
Interpreter_FPUtils/FloatingPoint/Paired: Amend cases where FPSCR.FR and FPSCR.FI should be unset
2018-06-03 15:36:12 +02:00
Lioncash
3e63d71046 Gekko: Add helper function for clearing both FPSCR.FI and FPSCR.FR 2018-06-03 08:27:18 -04:00
Léo Lam
1e51e263e0
Merge pull request #6988 from leoetlino/wii-save-refactor
WiiSave: Refactor the import/export code
2018-06-03 12:05:43 +02:00
Léo Lam
86368fcd4d
Merge pull request #6499 from Ebola16/SettingsGroup
Android: Initial implementation of Interface submenu
2018-06-03 12:02:56 +02:00
Lioncash
d6bafbfaaf Interpreter_Paired: Handle signaling NaNs within ps_res and ps_rsqrte
Like regular fres and frsqrte, these also signal whether or not either
of the inputs are signaling NaNs.
2018-06-02 20:47:18 -04:00
Lioncash
d05c2ef90d Interpreter_Paired: Unset FPSCR.FI and FR in ps_res and ps_frsqrte in exceptional cases
If invalid operation exceptions or zero divide exceptions occur in
either of these instructions, FI and FR are supposed to be unset.
2018-06-02 20:42:47 -04:00
Lioncash
83774f72ad Interpreter_FloatingPoint: Unset FPSCR.FI and FPSCR.FR if a division by zero exception occurs in fres and frsqrte
Within the programming environments manual, part of the behavior of a
zero divide exception condition is that FI and FR be cleared.
2018-06-02 20:26:20 -04:00
Lioncash
468efb7243 Interpreter_FPUtils: Unset FPSCR.FI and FPSCR.FR if an invalid operation occurs in NI_* functions
If an invalid operation occurs, FI and FR bits are defined to be cleared
to zero for arithmetic operations.
2018-06-02 20:18:51 -04:00
Anthony
0f7370a22c
Merge pull request #7051 from lioncash/frsqrte
Interpreter_FloatingPoint: Don't store to destination in frsqrte if VE or ZE is set and a relevant exception occurs
2018-06-02 13:49:09 -07:00
Léo Lam
396810c450
Merge pull request #7050 from lioncash/ptr
WiimoteDevice: Get rid of pointer casting in CBigEndianBuffer
2018-06-02 21:35:43 +02:00
Lioncash
21add26b71 Interpreter_FloatingPoint: Clear FPSCR.FI and FPSCR.FR in invalid operation cases
As explained within 179d73ac0d, the table
within the Programming Environments Manual for PowerPC lists the FI and
FR bits as cleared for invalid operation cases. So, we amend the
relevant cases here in order to be accurate to hardware.
2018-06-02 15:30:56 -04:00
Lioncash
b71a9e658f Interpreter_FloatingPoint: Don't store to destination in frsqrte if VE or ZE is set and a relevant exception occurs
As explained within commit a08ad82ace, if
an invalid exception occurs and VE is set, then the destination register
should remain unchanged. Ditto for when ZE is set and a zero divide
exception occurs.
2018-06-02 15:27:14 -04:00
Lioncash
f6c4c05d93 WiimoteDevice: Make CBigEndianBuffer's constructor explicit
Prevents implicit construction of buffers.
2018-06-02 15:10:51 -04:00
Lioncash
4601136b08 WiimoteDevice: Get rid of pointer casting in CBigEndianBuffer
Gets rid of more places where we can violate alignment requirements and
aliasing rules.
2018-06-02 15:02:03 -04:00
Lioncash
13e828fd4d WiimoteDevice: Move CBigEndianBuffer to the cpp file
This is only used internally, so we don't need to expose it in the
header. This also allows getting rid of inclusion of the byte swapping
utilities in the header as well.
2018-06-02 14:55:05 -04:00
Anthony
8d1b2f9cae
Merge pull request #7045 from lioncash/fres
Interpreter_FloatingPoint: Don't store to destination in fres if VE or ZE is set and a relevant exception occurs
2018-06-02 11:42:34 -07:00
Lioncash
b1c7ce75e4 EXI_DeviceIPL: Replace superfluous virtual with override on destructor 2018-06-02 14:18:49 -04:00
Lioncash
0d89650950 EXI_DeviceIPL: Use std::array where applicable 2018-06-02 14:18:02 -04:00
Lioncash
bf4775f95f EXI_DeviceIPL: Normalize variable names
Makes naming consistent with our coding style.
2018-06-02 14:14:08 -04:00
Lioncash
b6203c66c2 EXI_DeviceIPL: In-class initialize data members where applicable 2018-06-02 14:08:01 -04:00
Léo Lam
62fdef0e6c
Merge pull request #7046 from lioncash/priv
EXI_DeviceMic: Make data members of CEXIMic private
2018-06-02 11:53:07 +02:00
spycrab
0e8db9fd1d Analytics: Report update track 2018-06-02 05:59:03 +02:00
Lioncash
3906859984 EXI_DeviceMic: Remove unimplemented StreamLog function prototype 2018-06-01 20:43:28 -04:00
Lioncash
9e068ad2c4 EXI_DeviceMic: Make data members of CEXIMic private
Given they were only made public so that the callback could access class
state, we can simply make the callback a private static function of
CEXIMic, which allows access to members from the callback function
without making all of said members public.
2018-06-01 20:43:28 -04:00
Lioncash
179d73ac0d Interpreter_FloatingPoint: Clear FPSCR.FI and FPSCR.FR if an SNaN is an input to fres
In the PEM manual, within Table 3-12, which lists what should occur for
invalid operation exceptions, the FPSCR.FI and FPSCR.FR bits are listed
as "Cleared" for when FPSCR.VE is unset and set. So we clear these bits
as well to match hardware behavior.
2018-06-01 20:21:13 -04:00
Lioncash
a08ad82ace Interpreter_FloatingPoint: Don't store to destination in fres if VE or ZE is set and a relevant exception occurs
In the PowerPC Microprocessor Family: The Programming Environments
Manual for 32 and 64-bit Microprocessors, in section 3.3.6.1, Table
3-12 lists what should occur if an invalid operation exception occurs in
situations where VE is set and when VE is not set. In the case where VE
is set, it lists the frD as "Unchanged". It also lists the FPRF flags as
"Unchanged".

Further down in Table 3-13, the listings for what should occur when zero
divide exceptions occur is listed, both for when ZE is set, and when it
isn't. When ZE is set, it lists frD as "Unchanged". It also lists the
FPRF flags as "Unchanged" as well.

This also alters the code so that we don't even calculate the result if
we don't need to compute it, making it a little bit less wasteful.
2018-06-01 20:21:09 -04:00
Léo Lam
69abaf3ec4 WiiSave: Merge Header and DataBinHeader to reduce noise
DataBinHeader is not used anywhere in the code other than via Header,
so let's merge them to reduce noise when accessing header fields
(currently we have to do header.hdr which looks silly).
2018-06-01 23:45:58 +02:00
Léo Lam
210377816d WiiSave: Get rid of some magic numbers
It would make sense for 0x80 and 0xf0c0 to be respectively
sizeof(BkHeader) and sizeof(Header) as Nintendo is signing anything
that comes after the header, including the BkHeader.
2018-06-01 23:44:24 +02:00
Léo Lam
8eafd1928e WiiSave: Move user interaction to UI frontends 2018-06-01 20:46:35 +02:00
Léo Lam
4df266f943 WiiSave: Use the correct length for paths
Paths can never exceed 0x40 characters as this is the maximum length
that is allowed by IOS (and probably the common FS library too).
2018-06-01 20:46:35 +02:00
Léo Lam
8af16fdd28 WiiSave: Use an enum class for save file type 2018-06-01 18:58:34 +02:00
Léo Lam
94953670f2 WiiSave: Move overwrite prompt to Import
WriteHeader should just write the header and not do anything else.
2018-06-01 00:14:48 +02:00
Léo Lam
a46a8dd378 WiiSave: Refactor import/export code
The current WiiSave code is extremely messy, as it exposes all kinds of
implementation details in the header (including internal struct
definitions and magic numbers that don't have to be).

The read/write code is intermingled, so it's hard to tell which members
are used, or when/where they are set at all.

It also implicitly relies on some functions being called in a specific
order since it doesn't seek manually every time, which makes the code
even more fragile.

The logic is also hardcoded to only support bin->nand or nand->bin,
even though it would be useful to support nand->nand (for the
Movie save copying code, for example).

This commit attempts to solve these problems by getting rid of the
WiiSave class:

* Read/write code is moved to new Storage classes (NandStorage and
  DataBinStorage) with small, clear functions that do one and only
  one thing.

* The import/export logic was refactored into a generic Copy function
  that takes two storages as parameters.

* The existing import and export functions are now just small wrappers
  that call Copy with the appropriate storages.
2018-05-31 20:52:01 +02:00
Léo Lam
60dd2553c6
Merge pull request #7033 from lioncash/jitarm
JitArm64_BackPatch: Correct usage of an invalidated iterator after a std::map erase() call in HandleFastmemFault()
2018-05-31 18:05:47 +02:00
Léo Lam
fff1db9730 Common: Add Random utilities
This makes it easier to generate random numbers or fill a buffer with
random data in a cryptographically secure way.

This also replaces existing usages of RNG functions in the codebase:

* <random> is pretty hard to use correctly, and std::random_device does
  not give enough guarantees about its results (it's
  implementation-defined, non cryptographically secure and could be
  deterministic on some platforms).
  Doing things correctly is error prone and verbose.

* rand() is terrible and should not be used especially in crypto code.
2018-05-31 17:54:43 +02:00
Anthony
a9a03d1565
Merge pull request #7034 from lioncash/override
JitArm64/Jit_Util: Add missing override specifiers
2018-05-31 08:48:35 -07:00
Mat M
dd77ace56a
Merge pull request #7005 from lioncash/div
Interpreter_FPUtils: Correct setting the FPSCR's zero divide exception flag in the 0/0 case in NI_div()
2018-05-31 11:22:45 -04:00
Mat M
f1b7259446
Merge pull request #6978 from lioncash/fcti
Interpreter_FloatingPoint: Handle NaN flag setting within fctiw and fctiwz
2018-05-31 11:22:04 -04:00
Lioncash
bffcaf3218 JitArm64_BackPatch: Correct usage of an invalidated iterator after a std::map erase() call in HandleFastmemFault()
Given the iterator gets invalidated within the erase() call, just keep a
temporary around to store the pointer address.
2018-05-30 11:08:11 -04:00
Lioncash
ba6c371746 JitArm64/Jit_Util: Add missing override specifiers 2018-05-30 10:50:11 -04:00
Lioncash
038bb9b3e1 AudioInterface: Use member initializers where applicable for unions
Migrates more code to the initialization capabilities available since C++11
2018-05-30 09:49:28 -04:00
Lioncash
b59cda1435 AudioInterface: Amend variable naming
Normalizes variable names to conform to our coding conventions.
Previously we were signifying some variables as externally linked
globals, which wasn't the case.
2018-05-30 09:47:08 -04:00
Léo Lam
fb124c2eb0 Use nested namespaces for IOS HLE
Pretty much all of the source files contain the following:

    namespace IOS
    {
    namespace HLE
    {
    namespace <name>
    {
    // actual code here
    }  // namespace <name>
    }  // namespace HLE
    }  // namespace IOS

which is really verbose boilerplate, because most of the files inside
of Core/IOS are for IOS HLE.

This commit replaces that with a more concise `namespace IOS::HLE`
or `namespace IOS::HLE::(name)`.
2018-05-30 11:40:05 +02:00
Lioncash
986d644a01 JitAsmCommon: Make CommonAsmRoutinesBase a struct
This is just used as a means of carting around routines. It's not meant
to directly have functionality embedded within it--this is the job of
the inheriting data structure--so we can just make this a basic struct.

Particularly given all the data members were public to begin with.
2018-05-30 05:22:41 -04:00
Lioncash
f5f4c10fd1 JitAsmCommon: Amend member variable names for CommonAsmRoutinesBase 2018-05-30 05:22:36 -04:00
JosJuice
ae4aa0b25c
Merge pull request #7010 from leoetlino/can-of-worms
Don't switch to blank NAND in the middle of emulation
2018-05-30 08:00:15 +02:00
JosJuice
6cb81ca851
Merge pull request #7015 from lioncash/pcap
PcapFile: Namespace code under the Common namespace
2018-05-30 07:45:09 +02:00
JosJuice
2f561dafd9
Merge pull request #7014 from lioncash/const
DSPEmulator: Make the IsLLE() member function const-qualified
2018-05-30 07:40:44 +02:00
Lioncash
97c5a840db PcapFile: Namespace code under the Common namespace
Brings more common code under the Common namespace.
2018-05-29 17:56:15 -04:00
Lioncash
a7de492696 DSPEmulator: Make the IsLLE() member function const-qualified
This function only queries state and doesn't modify it, so this can be
made a const member function
2018-05-29 17:45:07 -04:00
degasus
bde65d8b42 Jit64: Fix MORE_ACCURATE_DOUBLETOSINGLE.
This is broken since 3d12849967.
2018-05-29 23:25:30 +02:00
Léo Lam
a4ec3ddef1 Don't switch to blank NAND in the middle of emulation
Switching to blank NAND when emulation is running is an extremely bad
idea. It's akin to opening up a Wii and replacing the NAND chip while
you're playing a game on it.

Except we're not even replacing it with a NAND that has the same
contents. The blank NAND has nothing in it except the save file for
the current game, which is likely to result in the emulated software
getting inconsistent results and possibly even crashing depending on
how it caches title information.

An example of games that check the saves for other games is
Mario Kart Wii -- it checks the filesystem for Super Mario Galaxy saves
to decide whether to unlock characters. With this 'switch NAND
while emulation is active' misfeature, this will likely break.
And that's the main problem: it encourages sloppy emulation and no one
really knows how many things it can break.

Just don't let the user do horrible things like that during emulation.
If they want to use a blank NAND, they can do so by starting input
recording before launching a game. It's likely they will want to do
this if they plan to share their DTM anyway.
2018-05-29 15:41:11 +02:00
Léo Lam
00d91db2ec
Merge pull request #7008 from spycrab/ddos_sux
Fix "Download Codes" hitting DDOS protection
2018-05-29 14:42:24 +02:00
Lioncash
c33228e466 DSPEmulator: Default destructor in the cpp file
This gets rid of a -Wweak-vtables warning
2018-05-29 07:54:39 -04:00
spycrab
c086f894b1 Core/GeckoCodeConfig: Circumvent DDOS protection 2018-05-29 03:56:28 +02:00
Lioncash
7bfeffe32f Interpreter_FPUtils: Unset FPSCR.FI and FPSCR.FR when FPSCR.ZX is set in NI_div()
Another bit of behavior that we weren't performing correctly is the
unsetting of FPSCR.FI and FPSCR.FR when FPSCR.ZX is supposed to be set.
This is supported in PEM's section 3.3.6.1 where the following is
stated:

"
When a zero divide condition occurs, the following actions are taken:

- Zero divide exception condition bit is set FPSCR[ZX] = 1.
- FPSCR[FR, FI] are cleared.
"

And so, this fixes that behavior.
2018-05-28 16:03:59 -04:00
Lioncash
3deadd1fff Interpreter_FPUtils: Correct setting the FPSCR's zero divide exception flag in the 0/0 case
FPSCR[ZX] is the bit defined to represent the zero divide exception
condition bit, and is defined as (according to PowerPC Microprocessor
Family: The Programming Environments Manual for 32 and 64-bit
Microprocessors, which will be referred to as "PEM" for the rest of this
commit message) at section 3.3.6.1:

"
A zero divide exception condition occurs when a divide instructions is
executed with a zero divisor value and a finite, nonzero dividend value
or when a floating reciprocal estimate single (fres) or a floating
reciprocal square root estimate (frsqrte) instruction is executed with a
zero operand value.
"

Note that it states the divisor must be zero and the dividend must be
nonzero in order for ZX to be set. This means that the interpreter was
performing the wrong behavior for the case where 0/0 (with any sign on
the zeros) is performed. We would incorrectly set the ZX bit when only
the VXZDZ bit should be set.

It's also worth pointing out that N/0 (where N is any finite nonzero
value) and 0/0 are not within the same exception class. N/0 is a zero
divide exception case, while 0/0 is considered an invalid operation
exception case, which is also indicated in the PEM section 3.3.6.1 as
well where it lists the criteria for invalid operation exceptions.

Therefore we should only be setting the VXZDZ bit in the 0/0 case, not
VXZDZ and ZX. This was also verified via hardware tests to ensure that
this behavior indeed holds.
2018-05-28 16:00:23 -04:00
Léo Lam
f05eb10026
Merge pull request #7003 from lioncash/host
Common: Move host communication enum to Host.h
2018-05-28 20:57:34 +02:00
Lioncash
4288bfe0f9 Common: Move host communication enum to Host.h
Given this is actually a part of the Host interface, this should be
placed with it.

While we're at it, turn it into an enum class so that we don't dump its
contained values into the surrounding scope. We can also make
Host_Message take the enum type itself directly instead of taking a
general int value.

After this, it'll be trivial to divide out the rest of Common.h and
remove the header from the repository entirely
2018-05-28 14:34:59 -04:00
Lioncash
78a934bb12 Interpreter_FloatingPoint: Handle cases when FPSCR.VE is set and exceptions occur in fctiw and fctiwz
If invalid operation exceptions are enabled and an invalid operation
occurs, then the destination value remains untouched. This fixes issues
that may arise when using these two instructions where the destination
gets steamrolled by an infinity or NaN value.
2018-05-28 14:05:12 -04:00
Lioncash
8c4aa133ca Interpreter_FloatingPoint: Handle NaN flag setting within fctiw and fctiwz
If a NaN of any type is passed as the operand to either of these
instructions, we shouldn't go down the regular code path, as we end up
potentially setting the wrong flags. For example, we wouldn't set the
FPSCR.VXCVI bit properly. We'd also set FPSCR.FI, when in actuality it
should be unset.

If an SNaN is passed as an operand, we also need to set the FPSCR.VXSNAN
bit as well.

The flag setting behavior for these can be found in Appendix C.4.2 in
PowerPC Microprocessor Family: The Programming Environments Manual for
32 and 64-bit Microprocessors.
2018-05-28 14:05:08 -04:00
Lioncash
0125d9b099 Interpreter_FloatingPoint: Factor out common code from fctiw and fctiwz
fctiwz functions in the same manner as fctiw, with the difference being
that fctiwz always assumes the rounding mode being towards zero. Because
of this, we can implement fctiwz in terms of fctiw's code, but modify it
to accept a rounding mode, allowing us to preserve proper behavior for
both instructions.

We also move Helper_UpdateCR1 to a temporary home in
Interpreter_FPUtils.h for the time being. It would be more desirable to
move it to a new common header for all the helpers, so that even JITs
can use them if they so wish, however, this and the following changes
are intended to only touch the interpreter to keep changes minimal for
fixing instruction behavior.

JitCommon already duplicates the Helper_Mask function within
JitBase.cpp/.h, and the ARM JIT includes the Interpreter header in order
to call Helper_Carry. So a follow up is best suited here, as this
touches two other CPU backends.
2018-05-28 13:28:44 -04:00
Léo Lam
a9f022a067
Merge pull request #6993 from lioncash/nan
Interpreter_FPUtils: Set VXSNAN if any input operands are a signaling NaN in remaining NI_* functions
2018-05-28 18:49:13 +02:00
Léo Lam
0cba9bb218
Merge pull request #7000 from lioncash/wii-extension
WiimoteEmu: Get rid of pointer casting in extension GetState() functions
2018-05-28 12:39:01 +02:00
Markus Wick
9e102e1584
Merge pull request #6943 from lioncash/overflow
Interpreter/Jit64/JitArm64: Correct negative overflow handling for divw
2018-05-28 09:49:19 +02:00
Markus Wick
a4d25537a1
Merge pull request #6990 from leoetlino/save
Config: Fix path settings not being saved
2018-05-28 09:46:27 +02:00
Lioncash
6ad6781bd3 WiimoteEmu: Get rid of pointer casting in extension GetState() functions
We can just memcpy the data instead of pointer-casting data, which is
alignment-safe and doesn't run afoul of aliasing rules.

Previously it also made it seem as if data itself pointed to valid
usable data, but it doesn't, it simply functions as an out parameter
where we push data built up from the GetState() functions into it.
2018-05-27 22:33:26 -04:00
Lioncash
a745666a60 ColorUtil: Amend function name casing
Makes the function names conform to our coding style.
2018-05-27 21:04:48 -04:00
Lioncash
ac474ff1da ColorUtil: Namespace code under the Common namespace
Given this is within Common, it should be in the Common namespace
itself.
2018-05-27 21:00:54 -04:00
Lioncash
470b09fe9d CDUtils: Amend function names
Amends the function names to follow our coding style.
2018-05-27 18:48:09 -04:00
Lioncash
1f75fa0aff CDUtils: Namespace code under the Common namespace 2018-05-27 18:30:58 -04:00
Lioncash
f4ec419929 SymbolDB: Namespace code under the Common namespace
Moves more common code into the Common namespace where it belongs.
2018-05-27 18:01:40 -04:00
Lioncash
e9b9797a86 SymbolDB: Normalize variable names
Normalizes variable naming so that it adheres to our coding style

While we're at it do minor cleanup relating to modified lines
2018-05-27 17:23:10 -04:00
Lioncash
a4cc854351 Interpreter_FPUtils: Set FPSCR.VXSNAN if any operand to NI_msub is a signaling NaN
If any operand is a signaling NaN, we need to signify this by setting
the VXSNAN bit.

Fixes NaN flag setting for fmsub, fmsubs, fnmsub, fnmsubs, ps_msub, and
ps_nmsub instructions.
2018-05-27 16:41:57 -04:00
Lioncash
3ebd713c33 Interpreter_FPUtils: Set FPSCR.VXSNAN if any operand to NI_madd is a signaling NaN
If any operand is a signaling NaN, we need to signify this by setting
the VXSNAN bit.

Fixes NaN flag setting for fmadd, fmadds, fnmadd, fnmadds, ps_madd,
ps_nmadd, ps_madds0, and ps_madds1
2018-05-27 16:41:47 -04:00
Lioncash
b18dd442f7 Interpreter_FPUtils: Set FPSCR.VXSNAN if either operand to NI_sub is a signaling NaN
If either operand is a signaling NaN, we need to signify this by setting
the VXSNAN bit.

This fixes NaN flag setting for fsub, fsubs, and ps_sub instructions.
2018-05-27 16:29:42 -04:00
Lioncash
f4c5ceba1c Interpreter_FPUtils: Set FPSCR.VXSNAN if either operand to NI_div is a signaling NaN
If either operand is a signaling NaN, we need to signify that by setting
the VXSNAN bit.

This fixes NaN flag setting for fdiv, fdivs and ps_div instructions.
2018-05-27 16:29:42 -04:00
Léo Lam
44879f163e Config: Fix path settings not being saved
Forgot to add a few lines while cherry-picking the config changes
for https://dolp.in/pr6950

Fixes https://bugs.dolphin-emu.org/issues/11171
2018-05-27 21:03:01 +02:00
Léo Lam
145258ad27 Debug: Add missing override specifiers 2018-05-27 14:39:01 +02:00
Léo Lam
bea1e38c67 Move ECCSignature to Common::ec and give it a less confusing name 2018-05-27 14:01:38 +02:00
Léo Lam
44827ba369 Use CertECC struct instead of hardcoded offsets 2018-05-27 14:01:38 +02:00
Lioncash
054c1b32eb Interpreter_FPUtils: Set FPSCR.VXSNAN if either operand to NI_add() is a signaling NaN
This corrects VXSNAN flag setting for fadd, fadds, ps_add, ps_sum0, and ps_sum1
2018-05-26 16:05:33 -04:00
Léo Lam
f568e41fac
Merge pull request #6972 from JosJuice/default-jit
When CPU core is invalid, fall back to JIT instead of interpreter
2018-05-26 20:18:31 +02:00
JosJuice
792446e1da When CPU core is invalid, fall back to JIT instead of interpreter
This might happen if someone moves settings between e.g. a PC and
an Android device, or if someone was using JITIL and updates Dolphin.

I also made the panic alert a bit more explanatory.
2018-05-26 14:19:53 +02:00
spycrab
a196dfe50d AudioCommon: Implement WASAPI 2018-05-26 13:08:10 +02:00
Léo Lam
92ec97f899
Merge pull request #6947 from JosJuice/unencrypted-wii-disc
Make the support for unencrypted Wii disc images less broken
2018-05-26 11:56:51 +02:00
Léo Lam
3f81c30e8a
Merge pull request #6949 from leoetlino/stop
Remove useless BootManager::Stop
2018-05-26 11:45:14 +02:00
Léo Lam
98e288cb4b
Merge pull request #6966 from lioncash/fmul
Interpreter_FPUtils: Set FPSCR.VXSNAN if either operand to NI_mul() is a signaling NaN
2018-05-26 11:43:11 +02:00
Léo Lam
f802dc14c1 Remove useless BootManager::Stop
It's not used anywhere other than in DolphinQt2, where the usage is
incorrect and stupid since we shouldn't be trying to stop the core
and 'restore config' that was changed by the core at app exit time,
but immediately when the core is being shut down.
2018-05-26 11:33:13 +02:00
Léo Lam
f64cbc86b1
Merge pull request #6968 from lioncash/mmu
MMU: Normalize parameter naming
2018-05-26 11:18:32 +02:00
Lioncash
b60ad2425d Common: Namespace GekkoDisassembler.cpp/.h
Moves more common code into the Common namespace where it belongs
2018-05-25 16:55:09 -04:00
Lioncash
5d42f31539 MMU: Normalize parameter naming
Makes all of the naming consistent with our code style, and makes
parameters match their header equivalents.

Essentially just a clean-up of things that weren't migrated over
already.
2018-05-25 16:14:47 -04:00
Lioncash
3da751f054 Interpreter_FPUtils: Set FPSCR.VXSNAN if either operand to NI_mul() is a signaling NaN
If either of the operands are signaling NaNs, then an invalid operation
exception needs to be indicated within the FPSCR.

This corrects SNaN flag setting for fmul, fmuls, ps_mul, ps_muls0, and
ps_muls1.
2018-05-25 12:15:02 -04:00
Léo Lam
3d44dc3981
Merge pull request #6958 from lioncash/rsqrte
Interpreter_FloatingPoint: Handle SNaN flag setting in frsqrte
2018-05-25 15:11:28 +02:00
Léo Lam
56217fd42f
Merge pull request #6956 from lioncash/flag
Interpreter_FPUtils: Set the FPSCR.VX bit if any invalid operation exception bits are set
2018-05-25 15:10:05 +02:00
Léo Lam
9d1785718f
Merge pull request #6955 from lioncash/nan
Interpreter_FloatingPoint: Set FPSCR.VXSNAN if input to fres is a signaling NaN
2018-05-25 15:09:04 +02:00
Léo Lam
647309a650
Merge pull request #6959 from leoetlino/gcc
ES/Formats: Work around a GCC bug
2018-05-25 13:08:57 +02:00
Léo Lam
7c6844e895 ES/Formats: Work around a GCC bug
In old GCC versions, capturing 'this' does not work for some lambdas.
The workaround is to not use auto for the parameter (even though the
type is obvious). This can be dropped once we require GCC 7.
2018-05-24 21:27:40 +02:00
Lioncash
155bcb1649 Interpreter_FloatingPoint: Set FPSCR.VXSNAN if the input to frsqrte is a signaling NaN
If the input is a signaling NaN, then we need to signal that via setting
the FPSCR.VXSNAN bit. We also shouldn't update the FPRF flags if
FPSCR.VE is set.
2018-05-24 14:37:09 -04:00
Lioncash
31504f85a7 Interpreter_FloatingPoint: Don't update FPRF in frsqrte in certain exceptional cases
If the FPSCR.VE bit is set and an invalid operand is passed in, then the FPRF
shouldn't be updated. Similarly this is also the case when the FPSCR.ZE bit
is set and negative or positive zero is passed in as the operand.
2018-05-24 14:32:40 -04:00
Lioncash
34adc529a7 Interpreter_FloatingPoint: Don't update the FPRF in fres in certain exceptional cases
If FPSCR.ZE is set and a divide by zero exception is signaled, then the
FPRF shouldn't be updated with a result. Similarly, if the input is an
SNaN and FPSCR.VE is set, then the FPRF shouldn't be updated.
2018-05-23 23:31:58 -04:00
Lioncash
dfea5cb00d Interpreter_FPUtils: Set the FPSCR.VX bit if any invalid operation exception bits are set
The VX bit is intended to be a summary bit indicating the occurrence of
any kind of invalid operation. Therefore, whenever an invalid operation
exception is set, also set VX.

This corrects our CR flag setting for multiple instructions in certain
scenarios. This corrects flag setting cases in fadd, fadds, fctiw, fctiwz, fdiv,
frsp, frsqrte, fsub, and fsubs (and technically every floating-point
instruction that we make more accurate in the future with regards to
flag setting).
2018-05-23 21:53:37 -04:00
Lioncash
8a79f9099c Interpreter_FloatingPoint: Set FPSCR.VXSNAN if input to fres is a signaling NaN
fres is defined as having the VXSNAN bit set if an input to the
instruction is a signaling NaN
2018-05-23 21:13:02 -04:00
spycrab
7620e1d5f8
Merge pull request #6950 from leoetlino/nand-path
Port FS, SD and dump path to onion config
2018-05-23 20:39:23 +02:00
Léo Lam
c99ac40700 Port FS, SD and dump path to onion config
This ports the Wii filesystem root, Wii SD card path and dump path
settings to the new config system (OnionConfig).

My initial plan was to wait until DolphinWX was removed before porting
most of the Main (Core, DSP, General) settings to onion config, but
I've decided to submit a small part of those changes to fix
[issue 10566](https://bugs.dolphin-emu.org/issues/10566).

Removes the need to manually set the FileUtil path in the UI frontends
and gets rid of some more members that don't really belong in SConfig.

Also fixes a bug which would cause the dump path not to get created
after change.
2018-05-23 16:07:18 +02:00
Léo Lam
4fd1674c49 Core: Only init Wii FS contents in Wii mode
There's no filesystem when not in Wii mode, so... bad things
would happen.
2018-05-23 13:39:53 +02:00
Léo Lam
da03ff2e25
Merge pull request #6944 from leoetlino/init-fs-contents
Move Wii FS content init to happen after Boot
2018-05-23 11:37:10 +02:00
JosJuice
58743416bb Make the support for unencrypted Wii disc images less broken
These disc images are only used on dev units and not retail units.
There are two important differences compared to normal Wii disc images:

- The data starts 0x8000 bytes into each partition instead of 0x20000
- The data of a partition is stored unencrypted and contains no hashes

Our old implementation was just guesswork and doesn't work at all.
According to testing by GerbilSoft, this commit's implementation
is able to read and extract files in the filesystem correctly,
but the tested game still isn't able to boot. (It's thanks to their
info about unencrypted disc images that I was able to make this commit.)
2018-05-23 08:40:37 +02:00
Lioncash
6a4f12d785 JitArm64: Correct negative overflow handling for divw 2018-05-22 13:52:56 -04:00
Lioncash
5abe6c264a Jit64: Correct negative overflow handling for divw 2018-05-22 13:52:51 -04:00
Léo Lam
0e9255c469
Merge pull request #6932 from sepalani/debug-patches
DebugInterface: MemoryPatches methods added
2018-05-22 19:15:51 +02:00
Léo Lam
593f58be6c Move Wii FS content init to happen after Boot
Initialising Wii filesystem contents should be done after Boot and
not in HW to ensure that we operate with the correct title context
and to make sure required title directories exist (so that Movie and
Netplay code can copy data from and to the temporary NAND).
2018-05-22 19:05:45 +02:00
Lioncash
2ca1ac3370 Interpreter_Integer: Correct negative overflow handling for divw
Previously, given cases such as 0x80000000 / 0xFFFFFFFF we'd incorrectly
set the destination register value to zero. If the dividend is negative,
then the destination should be set to -1 (0xFFFFFFFF), however if the
dividend is positive, then the destination should be set to 0.

Note that the 750CL documents state that:

"If an attempt is made to perform either of the divisions --
0x80000000 / -1 or <anything> / 0, then the contents of rD are
undefined, as are the contents of the LT, GT, and EQ bits of the CR0
field (if Rc = 1). In this case, if OE = 1 then OV is set."

So this is a particular behavior of the hardware itself.
2018-05-22 10:39:08 -04:00
Lioncash
22ece80f19 BreakPoints: Make OverlapsMemcheck() a const member function
This doesn't modify class state, it only queries said state.
2018-05-22 09:42:20 -04:00
Sepalani
8fa898fe9a DebugInterface: MemoryPatches methods added
CodeView: Restore instruction added
2018-05-22 10:31:31 +04:00
Lioncash
9a088e008f Interpreter: Check processor privilege level when executing supervisor instructions
Executing a supervisor-level instruction in user mode is supposed to
cause a program exception to occur.

The following supervisor instructions are present:

- dcbi
- mfmsr
- mfspr
- mfsr
- mfsrin
- mtmsr
- mtspr
- mtsr
- mtsrin
- rfi
- tlbie
- tlbsync

In 0337ca116a checks within mfspr and
mtspr were added. This change adds the trivial checks to the other
instructions.
2018-05-21 23:47:49 -04:00
Lioncash
3e996dc0f1 Interpreter_SystemRegisters: Get rid of implicit sign conversions
Keeps signed values out of bit arithmetic (not that there's any issues
that could arise from it in these situations, but it does look more
consistent, and silences compiler warnings)
2018-05-21 13:45:47 -04:00
Léo Lam
cb850707c0 WiiSave: Fix typo 2018-05-21 16:41:15 +02:00
Léo Lam
af97df74e1
Merge pull request #6895 from leoetlino/hardcoded
IOSC: Fix hardcoded MS and CA IDs
2018-05-21 15:27:31 +02:00
Léo Lam
12e2012465 IOSC: Fix hardcoded MS and CA IDs
The values that are used for the MS and CA IDs come from the SEEPROM.
Also, the default CA and MS values are respectively 2 and 3,
not 1 and 2.
2018-05-21 15:11:25 +02:00
Lioncash
3edf0f1cf9 Interpreter: Move common exception functions to ExceptionUtils.h
Keeps all of the interpreter-specific exception handling functions
together in a reusable way across translation units, similar to
FPUtils.h for reusable floating-point functions.
2018-05-20 18:25:32 -04:00
Léo Lam
3d8e63fffd
Merge pull request #6914 from leoetlino/verifysign
ES: Implement VerifySign (last remaining unimplemented, actually used ioctlv)
2018-05-20 23:11:49 +02:00
Léo Lam
79edd57b96
Merge pull request #6920 from lioncash/priv
Interpreter_SystemRegisters: Check processor privilege level in mfspr and mtspr
2018-05-20 23:08:59 +02:00
Lioncash
edb38ff144 MMU: Avoid sign conversions in EFB_Read and EFB_Write
There's no reason to use int here as opposed to an unsigned value.
Video_AccessEFB() takes its arguments as u32 values, so we'd be doing
sign conversions for no reason here (along with causing avoidable
compiler warnings).
2018-05-20 16:13:53 -04:00
Lioncash
0337ca116a Interpreter_SystemRegisters: Check processor privilege level in mfspr and mtspr
If a program executing in user mode tries to write to any SPRs other than
XER, LR, or CTR registers, then a program exception occurs. Similarly
this also applies for reading SPRs as well, however the upper and lower
timebase halves can also be read (but not written to).
2018-05-20 15:51:52 -04:00
Léo Lam
4284952538
Merge pull request #6919 from lioncash/nop
Interpreter_LoadStore: No-op dcbt and dcbtst if HID0.NOOPTI is set
2018-05-20 20:33:38 +02:00
Lioncash
d05c1b257c Interpreter_LoadStore: No-op dcbt and dcbtst if HID0.NOOPTI is set
If HID0.NOOPTI is set, then dcbt and dcbtst are no-oped globally. We
currently don't perform data cache emulation, but we put this in anyway
so this detail isn't forgotten about if data cache emulation is
introduced at some point in the future.
2018-05-20 14:23:51 -04:00
Léo Lam
5ce1b83d97
Merge pull request #6918 from lioncash/cast
Interpreter_LoadStore: Remove unnecessary cast in lhzx()
2018-05-20 20:21:16 +02:00
Lioncash
940f41f593 Interpreter_LoadStore: Remove unnecessary cast in lhzx()
This is only moving a smaller unsigned integral type into a larger
unsigned integral type, so there's no loss of information that could
occur.
2018-05-20 14:06:59 -04:00
Léo Lam
4b0f8d9f85 ES: Implement VerifySign
This implements ES_VerifySign which is notably used by the system menu
when importing saves.

Now *all* ES commands that are actually used by titles are implemented.
2018-05-20 20:04:53 +02:00
Léo Lam
cec7fded60 IOSC: Implement VerifyPublicKeySign for ECC 2018-05-20 20:04:53 +02:00
Léo Lam
b86f1ea7b3 ES / IOSC: Add support for ECC certificates 2018-05-20 20:04:53 +02:00
Léo Lam
355b1b5d5b ec: Improve readability and clarity
- Move all of the ec functions into the Common::ec namespace.

- Give the public functions better names and some usage information.

- Move all of the "elt" related functions into an "elt" class including
  all of the arithmetic operations, so that the logic becomes clearer
  and feels less like assembly.

  This also makes it much more obvious what the parameters are, instead
  of only using unsigned char* (which doesn't tell anything about what
  the pointer is used for or the size).

- Similarly, add a new "Point" class and move point functions there.
  Overload the arithmetic operators to make calculations easier to read
2018-05-20 19:59:26 +02:00
Léo Lam
e83591f188 ec: Avoid exposing internal function 2018-05-20 19:59:26 +02:00
Lioncash
ced806a00a PPCAnalyst: Replace memset usages with list initialization
Allows the use of non-trivially-copyable objects within the relevant
structs should it ever be needed.
2018-05-19 18:37:54 -04:00
Lioncash
5de99288bf PPCAnalyst: Clean up indexing expressions in Analyze()
Given we just access the same member repeatedly, just use a reference
and avoid repeated unnecessary indexing.
2018-05-19 15:31:38 -04:00
Tillmann Karras
1993eb436c Fix -Wignored-qualifiers warnings 2018-05-19 17:18:45 +01:00
Léo Lam
fc525bdf8f
Merge pull request #6898 from leoetlino/certreader
ES/Formats: Deduplicate signed blob reading code
2018-05-19 12:11:02 +02:00
Léo Lam
d399b0f59e
Merge pull request #6900 from lioncash/buffer
PPCAnalyst: Make CodeBuffer an alias for std::vector<CodeOp>
2018-05-19 12:10:19 +02:00
Lioncash
9ad7d9ff87 Jit64/JitArm64: Remove unnecessary code buffer parameter for DoJit()
This function in both JITs is only ever called by passing the JIT's code
buffer into it. Given this is already accessible, since the functions
are part of the respective JIT class, we can just remove this parameter.
This also cleans up accesses with the new code buffer, as we don't need
to do janky looking dereference-then-index expressions.
2018-05-18 17:19:49 -04:00
Lioncash
3a8a67025e PPCAnalyst: Make CodeBuffer an alias for std::vector<CodeOp>
This class effectively acted as a "discount vector", that would simply
allocate memory and then delete it in the destructor when it goes out of
scope.

We can just use a std::vector directly to reduce this boilerplate.
2018-05-18 17:19:45 -04:00
Léo Lam
33c5fd6f5a IOSC: Verify that RSA signature size is correct 2018-05-18 23:12:07 +02:00
Léo Lam
964d00447d IOSC: Reuse CertReader for cert imports 2018-05-18 23:12:07 +02:00
Léo Lam
90e86fa9a6 ES/Formats: Move sha1 calculation to SignedBlobReader 2018-05-18 22:40:38 +02:00
Léo Lam
fbf79f837f
Merge pull request #6896 from leoetlino/title-import
ES: Fix content check in ImportTitleDone
2018-05-18 22:38:55 +02:00
Lioncash
dc788042ef MMU: Use Common::BitCast where applicable
Gets rid of more memcpy boilerplate for properly reinterpreting bits.
2018-05-18 16:05:49 -04:00
Léo Lam
f82e2f0b92 ES: Fix content check in ImportTitleDone
ImportTitleDone only checks if all required contents have been imported
for system titles.

This fixes the system menu not being able to recreate title directories
to copy a save back to the NAND by using title import functionality.
2018-05-18 20:59:33 +02:00
Léo Lam
473cbfa951 ES: Add more logging in title import functions
...to make troubleshooting easier.
2018-05-18 20:59:29 +02:00
Lioncash
9911e51c8f Interpreter_Branch: Make type of the bitmask in rfi a u32 instead of int
Given this is a bitmask, we should be using an unsigned type to store it
(especially given it's outside the range an int can represent properly
without being considered negative).

No behavior change is caused by this, it just silences a sign conversion
warning.
2018-05-18 13:39:56 -04:00
Lioncash
b9aad3310e PowerPC: Move MMU-specifics from PowerPC.h to MMU.h
PowerPC.h at this point is pretty much a general glob of stuff, and it's
unfortunate, since it means pulling in a lot of unrelated header
dependencies and a bunch of other things that don't need to be seen by
things that just want to read memory.

Breaking this out into its own header keeps all the MMU-related stuff
together and also limits the amount of header dependencies being
included (the primary motivation for this being the former reason).
2018-05-17 19:18:55 -04:00
Lioncash
dbe550f7ef Interpreter_LoadStorePaired: Use Common::BitCast where applicable
Gets rid of more memcpy boilerplate code to reinterpret bits. This also
allows us to make variables const where applicable as well.
2018-05-17 15:27:07 -04:00
Markus Wick
87a29eb602
Merge pull request #6881 from lioncash/build
Interpreter_FloatingPoint: Fix build in frspx()
2018-05-17 11:05:18 +02:00
Lioncash
abefbf032e Interpreter_FloatingPoint: Fix build in frspx()
Github didn't detect conflicts here, however, since the float handling
functions were moved into the Common namespace, this would cause a build
failure.
2018-05-17 04:55:48 -04:00
Markus Wick
bc8d87bbfd
Merge pull request #6880 from lioncash/macro
PowerPC: Parenthesize GQR macro argument
2018-05-17 10:55:19 +02:00
Lioncash
ddbe292d54 PowerPC: Parenthesize GQR macro argument
Ideally none of these macros would exist (long-term goal), however in
the meantime at least make sure expressions always evaluate correctly
(thankfully no current usages rely on this).
2018-05-17 04:48:29 -04:00
Markus Wick
6ed3f8b474
Merge pull request #6634 from lioncash/frsp
Interpreter_FloatingPoint: Handle SNaNs and QNaNs properly in frsp
2018-05-17 10:43:14 +02:00
Markus Wick
3e6a706858
Merge pull request #6878 from lioncash/type
PowerPC/Interpreter: Avoid sign conversion with utility functions
2018-05-17 10:04:26 +02:00
Markus Wick
1424964678
Merge pull request #6856 from lioncash/cached-hook
PowerPC: Factor common part of function hooking code out of the interpreter and JITs
2018-05-17 09:45:17 +02:00
Lioncash
3f19aa6469 PowerPC/Interpreter: Avoid sign conversion with utility functions
Given we're operating with flags and bit representations, lets avoid
signed values here. It lessens the amount of sign conversion warnings
and lessens the amount of things to think about screwing you over when
making changes to the interpreter among other things.
2018-05-16 22:21:26 -04:00
Tilka
5b96abf7aa
Merge pull request #6872 from lioncash/exi
EXI_DeviceEthernet: Minor cleanup
2018-05-17 02:17:22 +01:00
Tilka
82d9dea245
Merge pull request #6873 from lioncash/bit
Interpreter_FPUtils: Use Common::BitCast where applicable
2018-05-17 02:12:07 +01:00
Tilka
975a10b3bd
Merge pull request #6876 from lioncash/var
Interpreter_SystemRegisters: Clean up variable naming
2018-05-17 02:09:25 +01:00
Jonathan Hamilton
8be5cdfcad Make the arbitrary mipmap detection threshold configureable
This is likely a "superuser" option at best, but I want to be able to play with
it without rebuilding if I want to tweak the heuristics
2018-05-16 17:49:19 -07:00
Lioncash
d80552b34a Interpreter_SystemRegisters: Clean up variable naming
Cleans up remnant instances of Hungarian notation being used in variable
names along with other spotted deviations.
2018-05-16 20:41:34 -04:00
Jonathan Hamilton
29b7e33c14 Make arbitrary mipmap detection a config option
Under GFX::Enhancements::ArbitraryMipmapDetection - default enabled
2018-05-16 17:15:38 -07:00
Lioncash
b29b56c61a Interpreter_Integer: Clean up casting in mulhwx() and mulhwux()
These can be expressed in a slightly cleaner manner without so many
casts. While we're at it, also get rid of unnecessary indexing (we
already have the result nearby).
2018-05-16 19:45:17 -04:00
Lioncash
3400165171 Jit64: Factor function hooking out of DoJit() 2018-05-16 19:00:39 -04:00
Lioncash
f3c13402e8 Interpreter: Factor function hooking code out of SingleStepInner() 2018-05-16 18:56:40 -04:00
Lioncash
4b25538f2f CachedInterpreter: Factor function hooking code out of Jit()
Extracts the self-contained code into its own function to clean up the
flow of Jit() a little more.

This also introduces a helper function to HLE.h that will be used to
reduce the boilerplate here and in the interpreter and Jit64 in the
following commits.

This function performs all of the preliminary checks required prior to
attempting to hook/replace a function at a given address. The function then
calls a provided object that satisfies the FunctionObject concept in the
C++ standard library. This can be a lambda, a regular function pointer,
an object with an overloaded function call operator, etc. The only
requirement is that the function return a bool, indicating whether or
not the function was replaced, and that it can take parameters in the
form: fn(u32 function, HLE::HookType type)
2018-05-16 18:55:49 -04:00
Lioncash
c7cd1424f4 Interpreter_FPUtils: Use Common::BitCast where applicable
Gets rid of now-unnecessary memcpy boilerplating for different bit
representations between integral and fp types.
2018-05-16 17:48:30 -04:00
Lioncash
e7403e121e EXI_DeviceEthernet: In-class initialize members
Gets rid of a second pair of ifdefs in the constructor. This also makes
sure the fd on Unix/BSD platforms is uniformly initialized. Previously
fd would be in an inconsistent state on FreeBSD or OpenBSD due to the
BSD OS checks not being present in the #elif within the constructor.
2018-05-16 16:55:07 -04:00
Lioncash
fc78a4c993 EXI_DeviceEthernet: Make internal members and functions private
Previously, the entirety of CEXIETHERNET was exposed publically, which
wasn't necessary. We simply make the thread function part of the
internal interface, which gives it access to internal data members,
while keeping everything else outside of it.
2018-05-16 16:55:02 -04:00
Markus Wick
b547f72878
Merge pull request #6871 from lioncash/virtual
DSPHLE/UCodes: Replace unnecessary virtual keywords with override
2018-05-16 22:16:26 +02:00
Lioncash
a7b8b15e7f DSPHLE/UCodes: Replace unnecessary virtual keywords with override
Given these HLE classes inherit from a common base with a virtual
destructor, override is more appropriate here, as virtual propagates to
these destructors anyway.

This is also safer. If the base class' destructor is ever made
non-virtual, then these classes will cause a compilation error if they
aren't taken into account, as they'd be overriding a non-virtual
function (the destructor).
2018-05-16 15:57:55 -04:00
Lioncash
011ee110bc Common/Hash: Namespace code under the Common namespace
Brings more common code under the Common namespace.
2018-05-16 15:39:23 -04:00
Lioncash
947fa271be Common: Add MemArena.h/cpp to the Common namespace
Brings more common code under the Common namespace.
2018-05-15 18:27:32 -04:00
Markus Wick
b4324847fb
Merge pull request #6863 from booto/jit-ps-dsi
Prevent paired singles routines clobbering PC,SRR0
2018-05-15 11:07:21 +02:00
booto
c880302c6b Prevent paired singles routines clobbering PC,SRR0
Paired single (ps) instructions can call asm_routines that try to update
PowerPC::ppcState.pc. At the time the asm_routine is built, emulation has
not started and the PC is invalid (0). If the ps instruction causes an
exception (e.g. DSI), SRR0 gets clobbered with the invalid PC.

This change makes the relevant ps instructions store PC before calling out
to asm_routines, and prevents the asm_routine from trying to store PC
itself.
2018-05-14 20:49:13 -04:00
Markus Wick
db4d8d7ad3
Merge pull request #6854 from lioncash/access
Jit/CachedInterpreter: Minor cleanup to code buffer accesses
2018-05-14 07:49:22 +02:00
Lioncash
7437f2efdc JitArm64: Clean up code buffer accesses in DoJit()
Done for the same reason this was done for Jit64. Avoids constantly
indexing for the same known object instance over and over.
2018-05-13 22:11:01 -04:00
Lioncash
f4affa3d1d CachedInterpreter: Clean up code buffer accesses in Jit()
Done similarly for the reasons Jit64 was done. Localizes indexing to one
place instead of repeatedly indexing the same place.
2018-05-13 22:11:01 -04:00
Lioncash
a16c0a6e16 Jit64: Clean up code buffer accesses in DoJit()
Moves the codebuffer access variables closer to their first use, and
gets rid of multiple indexing expressions. We already know which op
we're accessing in particular, so just make a reference to it and access
it instead of duplicating the expression all over the place.
2018-05-13 22:10:56 -04:00
Léo Lam
f8e5e7126c
Merge pull request #6849 from leoetlino/oops
WiiSave: Fix out-of-bounds read
2018-05-13 23:34:32 +02:00
Léo Lam
3fbfa4335e WiiSave: Fix out-of-bounds read
Fixes the count argument for WriteArray. (I used it like WriteBytes.)
Whoops.
2018-05-13 23:18:28 +02:00
spycrab
c7a0b6c9f8
Merge pull request #6831 from spycrab/qt_memcard_fixes
Qt/GCMemcardManager: Fix multiple issues
2018-05-13 23:14:46 +02:00
Léo Lam
2be8c35d6d
Merge pull request #6844 from leoetlino/wii-save-cleanup2
WiiSave: Reuse IOS services where possible
2018-05-13 23:08:28 +02:00
Lioncash
5fd8cec7ea PatchEngine: Add s_ prefix to file-scope variables
Brings the translation unit in line with the convention used elsewhere
in the codebase.
2018-05-13 15:46:55 -04:00
Lioncash
0995cfef6a PatchEngine: Make PatchType an enum class
Makes the enum strongly typed. A function for retrieving the string
representation of the enum is also added, which allows hiding the array
that contains all of the strings from view (i.e. we operate on the API,
not the exposed internals). This also allows us to bounds check any
querying for the strings.
2018-05-13 15:46:51 -04:00
Léo Lam
b405a1fbb1 WiiSave: Reuse ES::GetInstalledTitles
Same thing, less code, no manual FS access.
2018-05-13 21:28:35 +02:00
Léo Lam
a2ffe010f3 WiiSave: Reuse IOSC::Sign for signing 2018-05-13 21:28:35 +02:00
Léo Lam
07caac1d23 WiiSave: Reuse IOSC for AES decryption/encryption
The SD key is already in IOSC.

This also prevents WiiSave from exposing an external library as part
of its interface.
2018-05-13 21:25:58 +02:00
Lioncash
a166cf2481 PatchEngine: Give Patch and PatchEntry default member initializers
Avoids potentially using the values uninitialized. While we're at it,
also drop the prefixed underscores from one of the constructors.
2018-05-13 15:08:32 -04:00
Léo Lam
80b3d7ccb8 WiiSave: Allow users to specify export directory
Export and ExportAll now open a directory picker (that defaults to the
previous default directory, i.e. the Dolphin user dir).

Also removes the need to return the path in the export functions since
the user knows which path they chose.
2018-05-13 17:42:56 +02:00
Léo Lam
87e5cd73dc WiiSave: Use std::array instead of C arrays
Makes copying, comparing more readable
2018-05-13 17:42:55 +02:00
Léo Lam
a93d816c28 WiiSave: Move dialogs to UI code
This moves the result dialogs to DolphinQt2, since WiiSave should not
really be responsible for interacting with the user as a simple
Wii save importing/exporting class.

This also fixes Wii save import/export showing result dialogs twice,
once from WiiSave, and another time from DolphinQt2.
2018-05-13 17:42:55 +02:00
Léo Lam
41c4486c65 WiiSave: Clean up constructors
Move the import/export operation into separate functions, as it doesn't
really make sense for the constructor to do *everything*, including
printing success/failure message boxes.

The existing constructor was split into two: one that takes a path,
and another taking a title ID. This makes it more obvious what is
actually done when a path/TID is passed and also clarifies what
parameters should be passed. (No more magic 0 or "" value.)
2018-05-13 17:42:55 +02:00
Léo Lam
fbf36b85d2 WiiSave: Remove unused Extract() member function 2018-05-13 17:42:55 +02:00
Léo Lam
956df21bd7 WiiSave: Use Common::BigEndianValue to simplify parsing
Gets rid of the need to manually cast when reading/writing, which is
error prone and repetitive.
2018-05-13 17:42:55 +02:00
Léo Lam
fb39efbf90 WiiSave: Fix struct member naming 2018-05-13 17:42:55 +02:00
Léo Lam
bae8bcde0a WiiSave: Do not expose internal constants 2018-05-13 17:42:55 +02:00
Léo Lam
00bc1f28f2 Rename CWiiSaveCrypted to WiiSave 2018-05-13 17:42:55 +02:00
Léo Lam
5564150dd6
Merge pull request #6833 from leoetlino/dns
Use resolver to get default DNS nameserver
2018-05-13 15:49:50 +02:00
Dexter Gerig
73bc20ead4 Use resolver to get default DNS nameserver 2018-05-13 14:05:23 +02:00
Léo Lam
ad5a69be79
Merge pull request #6826 from spycrab/qt_netplay2
Qt/NetPlayDialog: Improve player list
2018-05-13 01:17:51 +02:00
Mat M
a4de3922e9
Merge pull request #6832 from leoetlino/wiiroot
WiiRoot: Copy initial NAND files with proper metadata
2018-05-12 18:25:21 -04:00
Lioncash
411fc01262 DolReader/ElfReader: Remove unnecessary FileUtil.h includes
These can be replace with File.h, as the only file-related things
necessary is the declaration of IOFile (which resides in File.h).
2018-05-12 17:41:17 -04:00
Lioncash
f7bc75ae6d Boot: Make BootExecutableReader's constructor take a std::vector by value
This allows avoiding two copies of the executable data being created in
the following scenario (using pseudocode):

some_function()
{
  std::vector<u8> data = ...;
  DolReader reader{data};

  ...
}

In this scenario, if we only use the data for passing it to DolReader,
then we have to perform a copy, as the constructor takes the std::vector
as a constant reference -- you cannot move from a constant reference,
and so we copy data into the DolReader, and perform another copy in the
constructor itself when assigning the data to the m_bytes member
variable. However, we can do better.

Now, the following is allowable as well:

some_function()
{
  std::vector<u8> data = ...;
  DolReader reader{std::move(data)};

  ...
}

and now we perform no copy at any point in the reader's construction, as
we just std::move the data all the way through to m_bytes.

In the case where we *do* want to keep the executable data around after
constructing the reader, then we can just pass the vector without
std::move-ing it, and we only perform a copy once (as we'll std::move
said copy into m_bytes). Therefore, we get a more flexible interface
resource-wise out of it.
2018-05-12 17:40:34 -04:00
Léo Lam
48fa835bd3 WiiRoot: Copy initial NAND files with proper metadata 2018-05-12 22:54:34 +02:00
Léo Lam
f91b729b61
Merge pull request #6825 from leoetlino/onion-types
Config: Fix implicit conversions/enum config types
2018-05-12 21:59:43 +02:00
Léo Lam
e1169ef9ee
Merge pull request #6824 from aldelaro5/custom-rtc-no-bias
RTC: Write 0 to the counter bias if we are on custom RTC
2018-05-12 21:59:13 +02:00
spycrab
b094cda929 Core/GCMemcard: Fix checksums after modifying the memcard 2018-05-12 21:39:13 +02:00
Lioncash
5677e5d74a SettingsHandler: Namespace code under the Common namespace
Adds another file in Common to the Common namespace.
2018-05-12 13:39:37 -04:00
spycrab
d8a95834f3 Qt/NetPlayDialog: Improve player list 2018-05-12 18:25:38 +02:00
Léo Lam
6763a3fce1 Config: Add support for enums
This makes it possible to use enums as the config type.
Default values are now clearer and there's no need for casts
when calling Config::Get/Set anymore.

In order to add support for enums, the common code was updated to
handle enums by using the underlying type when loading/saving settings.

A copy constructor is also provided for conversions from
`ConfigInfo<Enum>` to `ConfigInfo<underlying_type<Enum>>`
so that enum settings can still easily work with code that doesn't care
about the actual enum values (like Graphics{Choice,Radio} in DolphinQt2
which only treat the setting as an integer).
2018-05-12 18:10:26 +02:00
Léo Lam
94dc746351 Copy Wii NAND data to user NAND in WiiRoot
Dolphin doesn't use any of the WC24 files, so this can be done when
actually starting emulation in WiiRoot. The benefit of moving the
copy is that we don't need to handle temporary NANDs in a special way.
2018-05-12 17:08:50 +02:00
Léo Lam
5f567b38fe WiiRoot: Move content manipulation to separate functions
{Initialize,Shutdown}WiiRoot should only be responsible for setting the
SESSION_WII_ROOT or managing the temporary NAND directory.

Move all the content manipulation out of these functions to ensure
separation of concerns and call them after/before WiiRoot init/shutdown
to make sure they operate on the correct root.
2018-05-12 17:06:31 +02:00
Stenzek
a446b096cb Jit64: Invalidate cached constant values w/o host register on flush
If we don't flush the values, they persist in the register cache,
potentially resulting in the values being out of sync with PPCSTATE.

This was causing random crashes in games, mainly booting, when certain
JIT instructions were disabled, or forced to fall back to interpreter.
2018-05-13 00:50:31 +10:00
Léo Lam
7dca7c237e Config: Fix template deduction for implicit conversions
This excludes the second argument from template deduction.

Otherwise, it is required to manually cast the second argument to
the ConfigInfo type (because implicit conversions won't work).

e.g. to set the value for a ConfigInfo<std::string> from a string
literal, you'd need a ugly `std::string("yourstring")`.
2018-05-12 14:30:18 +02:00
aldelaro5
4b2906c569
RTC: Write 0 tot he counter bias if we are on custom RTC
This can be considered a hack, but it essentially neuter the bias applied on boot for both console on the RTC.  This avoids having the time on boot be changes significantly while the user would want a specific RTC and it also avoids possible underflow of the RTC if it is near the epoch.
2018-05-12 01:37:48 -04:00
Anthony
968779e623
Merge pull request #6814 from lioncash/sd
SDCardUtil: Minor changes
2018-05-11 12:39:17 -07:00
Léo Lam
1b070c4b6f IOS/KD: Migrate to new filesystem interface 2018-05-11 20:30:22 +02:00
Lioncash
3b0139b258
SDCardUtil: Namespace SDCardUtil
Brings yet another header in the common library under the Common
namespace.
2018-05-11 09:19:30 -04:00
Léo Lam
e1866d35e5
Merge pull request #6807 from leoetlino/boot
Boot: Migrate to new filesystem interface
2018-05-11 10:41:00 +02:00
Lioncash
ba01f6dba3 CommonFuncs: Convert ROUND_UP_POW2 macro to a function
Also move it to MathUtils where it belongs with the rest of the
power-of-two functions. This gets rid of pollution of the current scope
of any translation unit with b<value> macros that aren't intended to be
used directly.
2018-05-10 19:42:20 -04:00
Léo Lam
a977a56434 Boot: Migrate to new filesystem interface 2018-05-10 22:34:03 +02:00
Léo Lam
e6c489f1d4 ES: Move title dir creation logic into separate function
Since we're going to need it in the boot code, move it out to a
separate, easily reusable function. This also makes the InitImport
logic clearer.
2018-05-10 22:33:49 +02:00
Léo Lam
09d2afa91f SettingsHandler: Migrate to new filesystem interface
Change SettingsHandler to take a buffer instead of assuming that the
setting file to read is always on the host filesystem for more
flexibility and make it possible to use the new filesystem interface.
2018-05-10 21:35:27 +02:00
Léo Lam
e56387970a Move all UID constants to a single file
Keeps them all next to each other and deduplicates a few constants,
notably the PPC UIDs. Apparently I forgot that I already added them
for SetupStreamKey.
2018-05-09 21:08:24 +02:00
Léo Lam
274f418f4b
Merge pull request #6789 from leoetlino/rename-bug
IOS/FS: Fix rename not handling existing target correctly
2018-05-09 19:07:39 +02:00
Léo Lam
1016674242
Merge pull request #6791 from aldelaro5/wii-epoch-fix
Wii: Fix the Wii epoch and make the IPL.CB 0 by default
2018-05-09 19:06:25 +02:00
aldelaro5
224a9426db
Fix the Wii epoch and make the IPL.CB 0 by default
It was off by about 8 years because it was actually the same as the GC epoch, however, the reason it worked all this time was because the default RTC counter bias of the Wii was not 0, but a value that is about 8 years in seconds.  This broke custom RTC as a custom RTC of the gc epoch was underflowing b ecause the wii epoch was thought to be much later.
2018-05-09 02:45:56 -04:00
Léo Lam
7feabcd096 IOS/FS: Fix rename not handling existing target correctly
The existing backend did not handle cases where the target exists
correctly.

This is a bug that has been around forever but was only recently
exposed when ES started to use our FS code.

Also adds some unit tests to make sure this won't get broken again.
2018-05-08 23:55:13 +02:00
Léo Lam
71afe6b4a6 IOS: Make file creation + open more concise
Creating a file then opening it in read write mode is a pretty common
operation. This commit adds a helper function that makes it easier
to read and clearer.
2018-05-08 13:07:30 +02:00
Léo Lam
90f869e940
Merge pull request #6772 from leoetlino/fs-es
IOS/ES: Migrate to new filesystem interface
2018-05-08 11:55:52 +02:00
Lioncash
86018b503b Common: Move floating-point utility functions to FloatUtils.h/.cpp
Keeps all of the floating-point utility functions in their own file to
keep them all together. This also provides a place for other
general-purpose floating-point functions to be added in the future,
which will be necessary when improving the flag-setting within the
interpreter.
2018-05-07 02:56:32 -04:00
Markus Wick
756ef54ab6
Merge pull request #6770 from lioncash/ile
PowerPC: Fix copying of the MSR.ILE bit to MSR.LE
2018-05-07 08:52:05 +02:00
Markus Wick
b007210761
Merge pull request #6774 from lioncash/enum
Interpreter_FPUtils: Make FPCC enum an enum class
2018-05-07 08:48:22 +02:00
Markus Wick
6ec1e742ae
Merge pull request #6773 from lioncash/fpscr
PowerPC: Make the PowerPCState's fpscr member variable a UReg_FPSCR instance
2018-05-07 08:47:14 +02:00
Lioncash
64d1865448 Interpreter_FPUtils: Properly update the FPSCR's FEX bit in UpdateFPSCR()
FPSCR.FEX is supposed to be a logical OR of all floating-point exception
bits masked by their respective enable bits.

Currently UpdateFPSCR() isn't called by anything in the interpreter
except for mcrfs and mffs, so this doesn't alter existing behavior that much.
However, this will be necessary in future PRs when making the interpreter more
accurate in how it sets flags.
2018-05-06 21:40:00 -04:00
Lioncash
d5de49f9aa Interpreter_FPUtils: Make FPCC enum an enum class
Avoids dumping two letter identifiers into global scope
2018-05-06 19:32:09 -04:00
Lioncash
69a0aaebd4 Gekko: Make UReg_FPSCR's single argument constructor explicit
Prevent implicit conversions to UReg_FPSCR. Given the semantics of a
random magic value and the FPSCR are different, make explicit
conversions a requirement to signify intent.
2018-05-06 18:46:57 -04:00
Lioncash
cb5926c1ca PowerPC: Make the PowerPCState's fpscr member variable a UReg_FPSCR instance
Gets rid of the need to cast the actual member to access information without bit shifts and masking.
2018-05-06 18:46:52 -04:00
Léo Lam
606d25213b ES: Create system directories with correct metadata 2018-05-06 23:19:34 +02:00
Léo Lam
f47f916afb ES: Use new filesystem interface in main code 2018-05-06 23:19:34 +02:00
Léo Lam
923b450268 ES: Use new filesystem interface in TitleManagement 2018-05-06 23:19:34 +02:00
Léo Lam
9ee2654be6 ES: Use new filesystem interface in NandUtils 2018-05-06 23:16:35 +02:00
Léo Lam
359a5dcb54 ES: Use new filesystem interface for content handling 2018-05-06 23:16:35 +02:00
Léo Lam
3dafc66c36 ESFormats: Migrate to new filesystem interface 2018-05-06 23:16:35 +02:00
Léo Lam
5dbf6cd0c9 IOS/FS: Make ConvertResult usable from ES
ES makes extensive use of FS and most of the time returns its error
codes directly.
2018-05-06 22:08:31 +02:00
Lioncash
707615ef82 PowerPC: Fix copying of the MSR.ILE bit to MSR.LE
The MSR.LE bit is supposed to be set to the value of MSR.ILE upon
entering an exception vector to control whether the environment in said
vector operates as little endian or big endian. If this bit is ORed into
the LE bit, then the scenario of operating in little endian but wanting
to take exceptions in big endian will be incorrectly handled.
2018-05-06 14:24:58 -04:00
Léo Lam
fb1d075330 IOS/NCD: Migrate to new filesystem interface
A followup for the migration work started in 8317a66
2018-05-06 14:26:51 +02:00
Léo Lam
89713c5889 IOS/FS: Add CreateFullPath helper
Analogous to File::CreateFullPath, but for the Wii filesystem so this
ensures that directories and files receive proper attributes.

(This function is technically not part of the FS sysmodule but it's in
an internal FS library that is reused in several IOS sysmodules.)
2018-05-06 14:22:44 +02:00
Léo Lam
8e3cad948c
Merge pull request #6758 from leoetlino/fs-wiiutils
WiiUtils: Migrate to new filesystem interface
2018-05-06 14:04:30 +02:00
Léo Lam
76b031184c
Merge pull request #6341 from sepalani/debug-watches
DebugInterface: Watches methods added
2018-05-06 13:25:26 +02:00
Léo Lam
32235f974d
Merge pull request #6612 from leoetlino/movie-array
Movie: Replace some C style arrays with std::array
2018-05-06 13:23:45 +02:00
Lioncash
0043b77ccd Gekko: Make UReg_MSR's single-argument constructor explicit
Prevents implicit construction of MSR instances from integral values.
This is beneficial, considering MSR values have an intended
representation while a regular magic value doesn't. So make these
conversions required to be explicit.
2018-05-05 17:59:45 -04:00
Lioncash
ffcf107dd2 PowerPC: Make the PowerPCState's msr member variable a UReg_MSR instance
Gets rid of the need to construct UReg_MSR values around the the actual
member in order to query information from it (without using shifts and
masks). This makes it more concise in some areas, while helping with
readability in some other places (such as copying the ILE bit to the LE
bit in the exception checking functions).
2018-05-05 17:59:30 -04:00
Léo Lam
75d056bc48 Movie: Replace some C style arrays with std::array
This replaces some C style arrays with std::array to make copying
and comparing arrays slightly nicer.
2018-05-05 23:40:23 +02:00
Léo Lam
72a6674b73 WiiUtils: Migrate to new filesystem interface
A followup for the migration work started in 8317a66e
2018-05-05 19:21:56 +02:00
Tillmann Karras
41a553e33e Jit64: warn about code cache flushing
The game Go Vacation (SGVEAF) currently stutters a lot because it keeps
overflowing the far code cache and all code needs to be re-jitted.
Logging this warning gives a useful hint as to what is causing the
stuttering.
2018-05-05 14:21:57 +01:00
Léo Lam
d8549d172c
Merge pull request #6651 from leoetlino/nand-paths
NandPaths: Return paths that are relative to Wii NAND
2018-05-05 11:01:35 +02:00
Léo Lam
983d500d14
Merge pull request #6614 from leoetlino/auto-close
IOS: Do not manually close devices in destructor
2018-05-05 10:53:06 +02:00
aldelaro5
fee92cd4fc
INI: Create a new INI setting for toggling the debugger UI
Qt introduced a checkbox to toggle the debugger UI, this makes it work into a setting stored in the INI, it also makes the -d argument only in effect when enabled, in such case, it will override the INI by overriding it.
2018-05-04 19:23:03 -04:00
Léo Lam
8317a66ea5 NandPaths: Return paths that are relative to Wii NAND
Since all FS access will go through the new FS interface (PR #6421)
in order to keep track of metadata properly, there is no need to return
absolute paths anymore.

In fact, returning host paths is a roadblock to using the FS interface.

This starts the migration work by adding a way to get paths that are
relative to the Wii NAND instead of always getting absolute paths
on the host FS.

To prepare for future changes, this commit also makes returned paths
canonical by removing the trailing slash when it's unneeded.

Eventually, once everything has been migrated to the new interface,
we can remove the "from" parameter.
2018-05-04 19:52:17 +02:00
Ryan Meredith
c2355d4f63 Android Interface submenu: Add Show OSD Messages 2018-05-03 16:05:22 -04:00
Ryan Meredith
25179258b7 Android: Initial implementation of Interface submenu 2018-05-03 16:05:22 -04:00
Mat M
a2c12f1503
Merge pull request #6735 from JosJuice/ui-ini
Remove code related to UI.ini
2018-05-02 15:47:28 -04:00
JosJuice
6e96f62b41 Remove code related to UI.ini
We don't use it for anything, we just create it and leave it empty.
2018-05-02 18:18:27 +02:00
spycrab
a984d18a14 Core/ConfigManager: Rename Track to UpdateTrack 2018-05-02 17:23:41 +02:00
Stenzek
c46882142b
Merge pull request #6369 from stenzek/xfb-copy-filter
Implement copy filter (deflickering/brightness) and XFB gamma
2018-05-01 19:31:54 +10:00
Stenzek
9e798eec94 Implement EFB copy filter and gamma in hardware backends
Also makes y_scale a dynamic parameter for EFB copies, as it doesn't
make sense to keep it as part of the uid, otherwise we're generating
redundant shaders.
2018-04-29 19:05:20 +10:00
Lioncash
167b92ff2c Jit_Integer: Make arrays const in MultiplyImmediate() and twX()
These are only ever read from, so make the data immutable to be explicit about that
2018-04-28 14:13:02 -04:00
Mat M
0cd46f4d21
Merge pull request #6690 from lioncash/nand
Common/NandPaths: Minor cleanup
2018-04-28 13:43:33 -04:00
Tilka
6bb880457f
Merge pull request #6711 from lioncash/handler
Common/MemTools: Make handler function internally linked on Windows
2018-04-28 18:41:10 +01:00
Lioncash
8183360832 Common/MemTools: Make handler function internally linked on Windows
This doesn't need to be an externally linked function.
2018-04-28 12:55:38 -04:00
Sepalani
74d4a4478f DebugInterface: Watches methods added
Move Watches to Common
2018-04-28 17:46:51 +04:00
Léo Lam
4f427de924 IOS/SO: Clean up variable declarations
Move them closer to their usage and fix the naming.
2018-04-28 11:13:03 +02:00
Léo Lam
393663a0a3 IOS/SO: Use an enum for result codes 2018-04-27 23:35:40 +02:00
Léo Lam
32d51f1699 IOS/SO: Re-implement GetInterfaceOpt(0x4003)
Use the newly added GetSystemDefaultInterfaceOrFallback() to return
actual information for the default interface, not just dummy
interface details.

This also fixes GetInterfaceOpt(0x4003) and gethostid() returning
inconsistent information. Prior to this change, GetInterfaceOpt(0x4003)
would return 10.0.1.30 and gethostid would give a totally unrelated IP.
2018-04-27 23:35:40 +02:00
Léo Lam
3ce271991b IOS/SO: Implement GetSystemDefaultInterface for non-Windows
This fixes gethostid on non-Windows platforms.

Except on Android, where this is left unimplemented because Android
does not support getifaddrs.
2018-04-27 23:35:40 +02:00
Léo Lam
25b198cac8 IOS/SO: Move default interface code into a separate function
...so that the function can be more easily reused.
2018-04-27 23:35:40 +02:00
Léo Lam
e4276f2983 IOS/SO: Handle invalid GetInterfaceOpt requests 2018-04-27 23:35:40 +02:00
spycrab
7749e18ecc ConfigManager: Enable Auto-Updater by default 2018-04-26 15:12:15 +02:00
Lioncash
62242331d8 NandPaths: Remove unused header inclusions 2018-04-22 23:49:16 -04:00
Léo Lam
2fcc633c28
Merge pull request #6649 from leoetlino/fs-tests
UnitTests: Add tests for the Wii filesystem
2018-04-20 21:34:06 +02:00
Tilka
4c8de9638a
Merge pull request #6674 from Tilka/jit64
Jit64: avoid an unnecessary load
2018-04-20 19:23:28 +01:00
Léo Lam
f9340424c8
Merge pull request #6669 from lioncash/thread-local
Core: Use thread_local directly
2018-04-20 18:11:32 +02:00
Léo Lam
1176ae6512 IOS/FS: Fix ReadDirectory file list copying
Each entry can take up to 13 bytes (including the terminating null
character) but should not be aligned to 13 bytes.
2018-04-20 00:02:32 +02:00
Léo Lam
4c47417a0e IOS/FS: Fix ReadDir returning wrong number of entries
ReadDir should always write the actual number of entries in the
directory list (`min(max_count, number_of_entries_on_nand)`).
2018-04-20 00:02:32 +02:00
Tillmann Karras
1737f1bee8 Jit64: avoid an unnecessary load 2018-04-19 21:49:12 +01:00
Léo Lam
396204248d
Merge pull request #6667 from lioncash/si
SI: Remove unnecessary declarations of internally linked functions
2018-04-18 18:49:44 +02:00
Lioncash
e6405f7b2b
Core: Use thread_local directly
Both Android and OSX now support it, allowing us to remove the fallback code.
2018-04-17 19:03:24 -04:00
Mat M
df44aa7335
Merge pull request #6668 from JosJuice/remove-hybrid-wiimote
Remove Hybrid Wii Remote
2018-04-17 18:09:58 -04:00
JosJuice
2953cf201d Remove Hybrid Wii Remote
It simply doesn't seem to work for anything useful, and nobody seems
to care about maintaining it.
2018-04-17 22:40:21 +02:00
Lioncash
d1d8300a46
SI: Remove unnecessary declarations of internally linked functions
These aren't dependent on calling order so we can just organize all of the statics together
instead of splitting them up over the file. This also allows us to organize a common spot for
file static variables as well.
2018-04-17 16:33:11 -04:00
Mat M
8bb0e0ee96
Merge pull request #6662 from Tilka/fix_warnings
Fix some warnings
2018-04-17 10:17:01 -04:00
Tillmann Karras
4cfd900c67 Fix some warnings 2018-04-17 14:10:05 +01:00
Sepalani
04cfddca33 HLE_VarArgs: PowerPC::HostRead_F64 used 2018-04-17 16:25:43 +04:00
Mat M
c78b3f6ab6
Merge pull request #4507 from sepalani/host_f
PowerPC: HostR/W float/double added
2018-04-17 08:02:07 -04:00
Sepalani
048513183e PowerPC: HostR/W float/double added 2018-04-17 08:29:47 +04:00
Lioncash
ca6a2970ea
TraversalClient: Make data externally read-only members private
These are only ever queried for state, not written. Therefore, prevent writing to the members
and make them private.
2018-04-16 16:46:44 -04:00
JosJuice
0efbaebe17 Minor fixes to translatable strings
The usual deduplication between DolphinWX and DolphinQt2, plus the removal
of a now unused ubershader string and a fix for the Euphoria i18n comment.
2018-04-16 19:08:58 +02:00
Mat M
6224b9bd37
Merge pull request #6642 from leoetlino/stm
IOS/STM: Reset the event hook at the correct time
2018-04-16 09:04:12 -04:00
Léo Lam
3355ddcfb3 FileSystem: Fix member destruction order 2018-04-15 14:29:27 +02:00
Léo Lam
0a481c0663 WiimoteEmu: Fix turntable_button_names size
Three elements were removed, but because of an oversight the array
size was not changed to match.
2018-04-14 23:52:10 +02:00
Léo Lam
371f807e67
Merge pull request #6615 from leoetlino/sysconf
SysConf: Migrate to new filesystem interface
2018-04-14 23:29:25 +02:00
Léo Lam
ee955e37a9
Merge pull request #6564 from JosJuice/translate-certain-button-names
Translate certain button names but not all
2018-04-14 23:20:39 +02:00
Léo Lam
8bae4b7e51 IOS/STM: Reset the event hook at the correct time
Just re-disassembled STM and found out I have made a mistake when
I changed STM stuff back in 2016.

I accidentally made STM reset the event hook on close when it should
have been done in the destructor (i.e. when IOS gets reset on console).

Verified in IDA that STM just `IOS_ResourceReply(request, IOS_OK)`
without ever resetting the hook.
2018-04-13 23:34:35 +02:00
Léo Lam
52905a5fae
Merge pull request #6627 from sepalani/map-strip
PPCSymbolDB: Do not truncate fixed size symbols
2018-04-13 20:48:28 +02:00
Lioncash
b256f873ca
CMakeLists: Link in zlib privately where applicable
Also, use the target name introduced via find_package(ZLIB) instead
of hardcoding the 'z' name in the link libraries.
2018-04-13 08:29:46 -04:00
JosJuice
7ed28297b2 ControllerEmu: Use enum instead of bool for translatability 2018-04-13 13:04:26 +02:00
JosJuice
3f13dbe087 Translate certain button names but not all
Some button names should be translated, for instance Up, Left and such.
At the same time, some other button names shouldn't be translated,
for reasons that might be less obvious. In 0146456af, I removed the
_trans markers for button names that never need to be translated
(such as A and B), but that isn't actually enough to ensure that
DolphinWX won't try to translate them anyway. This commit adds a bool
that explicitly tells the GUI whether a button name should be translated.
Otherwise we'll have problems like the GUI treating the button name "B"
(which isn't supposed to be translated) as matching the translatable
string "B" (being an abbreviation of "bytes"), meaning that the button
"B" will be labeled "o" when running Dolphin in French (after
translations get pulled from Transifex the next time).

By the way, while it turned out that DolphinWX translated all button
names, it also turned out that DolphinQt2 translated *no* button names.
Go figure. This commit makes them consistent with each other.
2018-04-13 13:04:26 +02:00
JosJuice
e604641b12 Remove leftovers of projection hack support 2018-04-13 12:52:42 +02:00
Markus Wick
71dd2d9d4c
Merge pull request #6632 from lioncash/fp
Interpreter: Don't use a union to type-pun between integral and FP types
2018-04-13 11:12:01 +02:00
Lioncash
a36bf438cd
Interpreter_FloatingPoint: Handle QNaNs properly in frsp
Essentially the same behavior as the SNaN path, minus the conditional result and setting of the VXSNAN FPSCR bit.
2018-04-12 19:47:10 -04:00
Lioncash
965b963a6f
Interpreter_FloatingPoint: Handle SNaNs properly in frsp
If FPSCR[VE] is set, a result isn't supposed to be written to the destination,
just the FPSCR[VXSNAN] bit gets set, and FPSCR[FR] and FPSCR[FI] get set to zero.

If FPSCR[VE] isn't set, then we do write out a result, however, the FPSCR[FPRF]
field is updated to signify a QNaN (yes, a QNaN, the FPRF field doesn't have
a bit configuration for SNaNs).
2018-04-12 19:47:06 -04:00
Lioncash
e28d063539 x64Emitter: Make the Align* functions return a non-const data pointer
There's no real requirement to make this const, and this should also
be decided by the calling code, considering we had places that would
simply cast away the const and carry on.
2018-04-12 19:46:55 -04:00
Lioncash
ab25eb6449 Interpreter_LoadStorePaired: Don't use a union to type-pun between integral and FP types 2018-04-12 19:44:31 -04:00
Lioncash
7a3158a693 Interpreter_FPUtils: Don't use a union to type-pun between integral and FP types
The previous code invokes undefined behavior. memcpy will optimize away
to the relevant loads and stores while maintaining well-defined
behavior.
2018-04-12 19:44:31 -04:00
Léo Lam
a287bbc3bd Move SysConf to Core
It's not common code that could be reused for, say, Citra;
it's absolutely specific to Wii emulation and only used by the Dolphin
core, so let's move it there.

Another reason for doing this is to avoid having Common depend on Core.
2018-04-12 22:16:37 +02:00
Léo Lam
0856d4a68a SysConf: Migrate to new filesystem interface
It was discovered that some titles rely on filesystem metadata to work
properly. Currently, in master they either simply won't find their
save files (for example Bolt) or will complain about the Wii system
memory being corrupted (on first use or every time depending on
the title).

In order to even be able to keep track of file metadata, we first need
to eliminate all direct accesses to the NAND and make all kinds of
operations go through the filesystem code added in PR 6421.

This commit starts the migration process by making SysConf use
the new FS interface.
2018-04-12 22:16:37 +02:00
Léo Lam
3744a6d3f5 FileSystem: Add some more wrappers for convenience 2018-04-12 22:16:37 +02:00
Léo Lam
95aae11164 IOS: Do not manually close devices in destructor
This used to be necessary for properly cleaning up the FS state because
the old FS implementation used static state and only performed cleanup
in the close function, not in the destructor.

Now that the static state is gone, we do not need to close devices
manually anymore.
2018-04-12 22:16:10 +02:00
spycrab
40bb9974f2 Reformat all the things! 2018-04-12 21:28:39 +02:00
Sepalani
7d36165489 PPCSymbolDB: Do not truncate fixed size symbols
Fix comparison warning
2018-04-10 21:50:33 +04:00
Sepalani
9b8866ba78 PPCSymbolDB: Replace alert with LOG message 2018-04-10 21:49:47 +04:00
Markus Wick
0bfeb37a1f
Merge pull request #6604 from lioncash/dcbz_l
Interpreter_LoadStore: Generate a program exception if dcbz_l is executed when HID2[LCE] is zero
2018-04-09 23:04:09 +02:00
JosJuice
7aaaf44229
Merge pull request #6611 from leoetlino/remove-workaround
Boot_WiiWAD: Remove a timing issue workaround
2018-04-09 15:46:39 +02:00
Léo Lam
67f8e6e60a
Merge pull request #6620 from lioncash/dvd
DVDInterface: Deduplicate code in UpdateInterrupts()
2018-04-09 12:52:38 +02:00
Léo Lam
cb88e1256f
Merge pull request #6617 from lioncash/ppcanalyst
PPCAnalyst: Minor cleanup
2018-04-09 12:48:16 +02:00
Léo Lam
783cbef638
Merge pull request #6618 from lioncash/symboldb
PPCSymbolDB: Minor cleanup
2018-04-09 12:46:28 +02:00
Lioncash
1b3dae918a StreamADPCM: Turn the ADPCM decoder into a class
Migrates the state to be instance-based as opposed to being a flat
namespace. This keeps behavior localized to its own instantiable unit
(and forces uses of the class to also be localized, lest they cart around
an instance all over the place).
2018-04-09 03:49:18 -04:00
Lioncash
a8088b7365 ProcessorInterface: Remove prefixed underscores from parameters
These are reserved by the implementation for any use.
2018-04-09 03:21:59 -04:00
Lioncash
419ed1b46a DVDInterface: Deduplicate code in UpdateInterrupts() 2018-04-09 03:18:51 -04:00
Lioncash
a0f943178b Profiler: Move BlockStat and ProfileStats structures into the Profiler namespace
These should be part of the namespaced API and not be sitting in the
global namespace.
2018-04-08 22:29:48 -04:00
Lioncash
0461709c8d PPCSymbolDB: Use auto for iterators where applicable 2018-04-08 22:03:11 -04:00
Lioncash
b44eb90ee4 PPCSymbolDB: Default destructor and pass to member variables in the constructor initializer-list 2018-04-08 21:56:24 -04:00
Lioncash
d6d17eea60 PPCSymbolDB: Remove unused function pointer typedef 2018-04-08 21:54:50 -04:00
Lioncash
9c5115a627 PPCAnalyst: Simplify boolean assignments in SetInstructionStats()
Ternaries here aren't necessary if all we're checking against is if
something is non-zero
2018-04-08 21:42:43 -04:00
Lioncash
f2b2f5b4c7 PPCAnalyst: Make ReorderType an enum class
Makes the values strongly typed and doesn't dump them into the class
itself.
2018-04-08 21:38:19 -04:00
Lioncash
5e5a56bd9b PPCAnalyst: Remove unnecessary includes from header 2018-04-08 21:34:12 -04:00
Lioncash
4bd3b28823 PPCAnalyst: in-class initialize PPCAnalyzer's members
Eliminates the need to assign in the constructor initializer list.
2018-04-08 21:32:15 -04:00
Lioncash
433a56636b PPCAnalyst: Move public interface above private interface 2018-04-08 21:31:19 -04:00
Léo Lam
8894b902df Boot_WiiWAD: Remove a timing issue workaround
This was necessary to work around a FS timing issue which caused small
writes to take much longer than they should.

Now that we emulate timings for the FS module including its file cache,
we don't need to maintain this workaround anymore.
2018-04-08 11:23:18 +02:00
Léo Lam
9dbc760bb7
Merge pull request #6606 from lioncash/bochs
CMakeLists: Link bochs in privately where applicable
2018-04-08 11:08:12 +02:00
Lioncash
f1be7cd4a0
CMakeLists: Link bochs in privately where applicable
Everything that links in core doesn't need to see anything related to bochs, because it's only used internally.
Anything else that relies on bochs should be linking it in explicitly.
2018-04-08 04:59:58 -04:00
Léo Lam
0a290f5d11
Merge pull request #6607 from lioncash/ppc
PPCDebugInterface: Remove redundant HostRead_U32() call in Disassemble()
2018-04-08 10:25:43 +02:00
Léo Lam
2a535d5a55
Merge pull request #6608 from lioncash/gekko
Gekko: In-class initialize members where applicable
2018-04-08 10:23:42 +02:00
Lioncash
5d1349f9c7 Gekko: Remove unused UFPR union
Using this in its current form would invoke undefined behavior, as it's
using a union to type pun between data types. It's also, well, unused,
so we don't need to keep it around.
2018-04-07 22:30:26 -04:00
Lioncash
d5555b49e9 Gekko: In-class initialize members where applicable
Allows defaulting the default constructor. Also moves assignment to
initializer lists where applicable as well.
2018-04-07 22:26:24 -04:00
Lioncash
3e50b0e320 PPCDebugInterface: Remove redundant HostRead_U32() call in Disassemble()
We already read the necessary information with the
HostRead_Instruction() call. Internally, it calls HostRead_U32() as
well, so there's no difference in behavior.
2018-04-07 22:20:59 -04:00
Léo Lam
f4a2ad3c88 IOS/FS: Emulate read/write/close/seek timing
Also bumps up the state version.
2018-04-07 23:35:28 +02:00
Léo Lam
42983c0bd3 IOS/FS: Emulate superblock write timing 2018-04-07 23:35:28 +02:00
Léo Lam
b74577ff43 IOS/FS: Emulate GetAttr() timing 2018-04-07 23:35:28 +02:00
Léo Lam
896d875187 IOS/FS: Emulate Open() timing 2018-04-07 23:35:28 +02:00
Léo Lam
32b1409cbd IOS/FS: Use hardware tested minimum reply time
...instead of an arbitrary guess.
2018-04-07 23:35:28 +02:00
Léo Lam
7dff069659
Merge pull request #6605 from spycrab/gc_fix_rumble
[RFC] Core/GC: Fix rumble for "Luigi's Mansion"
2018-04-07 23:23:30 +02:00
spycrab
eed066e8a7 Core/GC: Fix rumble for "Luigi's Mansion" 2018-04-07 22:13:01 +02:00
Lioncash
181539e049
Interpreter_LoadStore: Generate a program exception if dcbz_l is executed when HID2[LCE] is zero
If the locked cache isn't enabled, dcbz_l is illegal to execute
(locked cache is off, locked cache instructions don't work, makes sense)

This makes exception handling more accurate. It was previously possible to hit the DSI exception
handler when HID2[LCE] is set to zero, which isn't correct.

With this change we no longer hit the DSI handler, however we still have a lingering issue elsewhere
likely to do with exception precedence, we seem to hit the Floating Point exception handler instead
in some cases. This isn't due to the instruction itself directly however, so this is just another bug
to fix elsewhere.
2018-04-06 23:53:44 -04:00
Léo Lam
a957bd1ecc
Merge pull request #6421 from leoetlino/fs-interface
IOS: Refactor the filesystem code
2018-04-06 12:17:09 +02:00
Markus Wick
a9cd67125c
Merge pull request #6597 from lioncash/fp-load-store
Interpreter_LoadStore: Generate alignment exceptions if an FP load/store instruction's effective address is not word aligned
2018-04-05 09:55:49 +02:00
Lioncash
912c9490c0 Interpreter_LoadStore: Generate alignment exceptions if an FP load/store instruction's effective address is not word aligned
This is one of the conditions for an alignment exception documented in
the 750CL architecture reference manual in section 4.5.6, which also
applies to the Gekko microprocessor.
2018-04-05 00:30:53 -04:00
Lioncash
980f1641b5 Interpreter_LoadStore: Generate alignment exceptions if dcbz or dcbz_l are executed with the data cache disabled
This is an exception condition documented within section 4.5.6 in the
architecture reference manual for the PPC 750CL, which also applies to
the Gekko microprocessor.

Also moves dcbz_l's implementation out of Interpreter_Paired and beside
dcbz where it belongs.
2018-04-04 18:44:17 -04:00
Markus Wick
c6d0d9a01f
Merge pull request #6578 from JosJuice/remove-projection-hacks
Remove support for projection hacks
2018-04-04 09:10:32 +02:00
Lioncash
3ea0a37d72 Interpreter_LoadStore: Generate alignment exceptions if lmw, lswi, lswx, stmw, stswi, or stswx is executed when the MSR[LE] bit is set
Improves exception accuracy regarding an admittedly very unlikely
scenario.
2018-04-03 20:47:40 -04:00
Markus Wick
1e0f72f2da
Merge pull request #6585 from lioncash/exception
Interpreter_LoadStore: Handle alignment exceptions in lmw, lwarx, stmw, and stwcx + fixes for eciwx and ecowx
2018-04-03 09:52:36 +02:00
Lioncash
de0ed1a5fb
Interpreter_LoadStore: Update the DAR if a DSI exception occurs in eciwx and ecowx
Also once a DSI exception occurs, execution is supposed to leave the
instruction immediately. It doesn't finish execution.
2018-04-02 08:34:32 -04:00
Lioncash
a013638dcb
Interpreter_LoadStore: Properly update the DAR whenever an alignment exception occurs within eciwx and ecowx
These should be updating the DAR when an alignment exception occurs,
just like every other instruction that can cause an alignment exception.
2018-04-02 08:34:32 -04:00
Lioncash
c1b78106e7
Interpreter_LoadStore: Flag alignment exceptions on misaligned addresses in lwarx, lmw, stmw, and stwcx
The effective address given to these instructions must be word (4 byte) aligned,
and if the address is not aligned like that, then an alignment exception
gets triggered.

We currently don't update the DSISR in this case properly, since we
didn't really handle alignment exceptions outside of ecowx and eciwx,
and even then the handling of it isn't really that great, considering
the DAR isn't updated with the address that caused the exception to
occur.

The DSISR will eventually be amended to be properly updated.
2018-04-02 08:34:26 -04:00
Markus Wick
2449be7f0c
Merge pull request #6571 from lioncash/rotate
CommonFuncs: Generify rotation functions and move them to BitUtils.h
2018-04-02 12:18:22 +02:00
Léo Lam
bf8ffe5bfb
Merge pull request #6582 from lioncash/const
Jit64/JitRegCache: Make member functions const qualified where applicable
2018-04-01 23:32:58 +02:00
Léo Lam
7d561c7e0e
Merge pull request #6579 from lioncash/socket
IOS/Socket: Minor changes to WiiSocket
2018-04-01 23:31:47 +02:00
Lioncash
0f6c3c7b35 Jit64/JitRegCache: Make member functions const qualified where applicable
None of these member functions modify class state.

Also makes the parameter name for ScoreRegister's implementation
consistent with its declaration.
2018-04-01 16:53:00 -04:00
JosJuice
c6931ee5b8
Merge pull request #6577 from lioncash/memcard
EXI_DeviceMemoryCard: Get rid of magic number in SetCS()
2018-04-01 22:08:36 +02:00
JosJuice
621e1758fb
Merge pull request #6581 from lioncash/const
DSPJitRegCache: Make FindFreeReg() a const member function
2018-04-01 22:05:48 +02:00
Lioncash
6cfa9fda6b DSPJitRegCache: Make FindFreeReg() a const member function
This member function doesn't modify class state.
2018-04-01 16:01:25 -04:00
Lioncash
fe9d989765 DSPJitRegCache: Remove unnecessary casts in FlushRegs()
We can just use the proper printf specifiers instead.
2018-04-01 15:49:21 -04:00
JosJuice
91732e2baf Remove support for projection hacks
This isn't really useful for anything anymore as far as I know.
2018-04-01 21:41:18 +02:00
Lioncash
ad17d9a979 IOS/Socket: Delete WiiSocket's copy constructor
If the copy assignment operator is deleted, then the copy constructor
should be deleted as well, otherwise it's a hole in the API where copies
can be made (and if this were an intended case, it should be
documented).

So we delete the copy constructor and explicitly default the move
assignment and move constructor to signify this is intended to be a
move-only type.
2018-04-01 15:38:37 -04:00
Lioncash
ad575a1556 IOS/Socket: Place WiiSocket's private interface below the public interface
In the rest of the codebase we try to position the private interface
below the public interface (unless it's otherwise not possible).
2018-04-01 15:38:33 -04:00
Lioncash
abb33637a3 IOS/Socket: In-class initialize WiiSocket members 2018-04-01 15:27:58 -04:00
Lioncash
8fbd6e2a87 EXI_DeviceMemoryCard: Get rid of magic number in SetCS()
Keeps the code consistent with other usages of the same constant
2018-04-01 15:21:20 -04:00
Léo Lam
aaf9f4759f
Merge pull request #6570 from lioncash/lzo
CMakeLists: Remove lzo from the LIBS variable and make linkage private
2018-04-01 11:51:06 +02:00
Lioncash
a4420d6d94 Jit64: Make CheckMergedBranch() a const member function
This function doesn't modify class state.
2018-03-31 20:12:53 -04:00
Lioncash
c3483a1823 CommonFuncs: Generify rotation functions and move them to BitUtils.h
These are bit manipulation functions, so they belong within BitUtils.

This also gets rid of duplicated code and avoids relying on compiler
reserved names existing or not existing to determine whether or not we
define a set of functions.

Optimizers are smart enough in GCC and clang to transform the code to a
ROR or ROL instruction in the respective functions.
2018-03-31 18:09:45 -04:00
Lioncash
eee32c030b
CMakeLists: Remove lzo from the LIBS variable and make linkage private
The only place this library is needed (core) is already linked in the core target.
Also make the linkage private to create linkage failures if the dependency isn't
explicitly linked in elsewhere where it should be.

Reduces the dependency on the LIBS variable.
2018-03-31 15:01:05 -04:00
Mat M
76e1a5b892
Merge pull request #6569 from JosJuice/kill-emu-state
Remove EmuState
2018-03-31 14:04:30 -04:00
Shawn Hoffman
6a0c15491b Remove EmuState 2018-03-31 16:21:17 +02:00
Léo Lam
c82da2b978 Remove dead code
Unused, old code that is intended to be removed should not be left in
comments -- that is what version control is for.
2018-03-31 14:56:27 +02:00
Léo Lam
329622120f
Merge pull request #6567 from JosJuice/discio-enums-case
DiscIO: Don't use all uppercase for enum values
2018-03-31 14:37:26 +02:00
JosJuice
4387432436 DiscIO: Don't use all uppercase for enum values
Also removing some prefixes that we don't need now that we're
using enum classes instead of plain enums.
2018-03-31 14:11:32 +02:00
Léo Lam
4e547772da IOS/FS: Make the NAND root path a parameter
Cleaner than having the backend figure out which NAND root to use.
2018-03-31 10:58:49 +02:00
Léo Lam
c56f31906c IOS/FS: Remove some redundant log messages
The FS IPC code already logs all commands, so keeping the log messages
in the backend is redundant.
2018-03-31 10:58:49 +02:00
Léo Lam
2d8be6a77d IOS/FS: Make it harder to forget closing FDs
Return a FileHandle which will automatically close the FD when
the handle goes out of scope. For the rare cases where this behaviour
is undesirable, the FD can be released from the handle.
2018-03-31 10:58:48 +02:00
Léo Lam
de15e09a4f Log: Rename IOS_FILEIO to IOS_FS
Let's use the actual name of the system module.

Also, the FS code is not all about files.
2018-03-31 10:58:37 +02:00
Léo Lam
5a7b966b6d IOS: Rewrite FS to use FileSystem
This is the large change in the branch.

This lets us use either the host filesystem or (in the future) a NAND
image exactly the same way, and make sure the IPC emulation code
behaves identically. Less duplicated code.

Note that "FileIO" and "FS" were merged, because it actually doesn't
make a lot of sense to split them: IOS handles requests for both
/dev/fs and files in the same resource manager, and as it turns out,
/dev/fs commands can *also* be sent to non /dev/fs file descriptors!
If we kept /dev/fs and files split, there would be no way to
emulate that correctly. I'm not aware of anything that does that (yet?)
but I think it's important to be correct.
2018-03-31 10:58:37 +02:00
Léo Lam
78478a651d Boot: Move CreateVirtualFATFilesystem to Boot_WiiWAD
It has nothing to do in the filesystem code.

(It also smells like a workaround for some kind of timing issue.)
2018-03-31 10:58:37 +02:00
Léo Lam
fcfe4e2a26 IOS: Change GetFS() to return a FileSystem
Now that we have a proper filesystem interface, it makes more sense
to return it instead of the emulated IOS device (which isn't
really usable for any purpose other than emulated IPC).
2018-03-31 10:45:44 +02:00
Léo Lam
1eec459e30 IOS: Extract existing FS code into a host backend
Extract the existing FS code into a HostBackend implementing
the filesystem interface.

Compared to the original code, this uses less static state.
The open host files map is now a member variable
as it should have been. Filesystem handles are now also easier
to savestate. Some variable names and log messages were cleaned up.
Nothing else has been changed.
2018-03-31 10:45:44 +02:00
Léo Lam
f1dbb8952c IOS: Introduce a new FileSystem interface
Add a new FileSystem class that can be used to perform operations
on the emulated Wii filesystem.

This will allow separating the IPC code (reading from and writing to
memory to handle IOS FS commands) and the actual filesystem code
in a much better way.

This also paves the way for implementing another filesystem backend
in the future -- NAND images for more complete emulation, including
filesystem metadata like permissions or file orders, which some games
and homebrew actually care about -- without needing to make any more
changes to the other parts of the codebase, in addition to making
filesystem behaviour tests easier to write.
2018-03-31 10:45:44 +02:00
Lioncash
e93159e54a
CMakeLists: Link in system framework libraries explicitly on macOS
Makes our libraries explicitly link in which libraries they need.
This makes our dependencies explicit and removes the reliance on the
LIBS variable to contain the libraries that they need.
2018-03-30 16:14:10 -04:00
JosJuice
b065f86270 Translate the netplay chat info message about QoS 2018-03-29 22:44:23 +02:00
JMC47
3cd9465f91 Fix JIT64 mtsmsr issue after PIE support again. 2018-03-28 04:16:41 -04:00
spycrab
016ef43b27 Core: Check for initialized GCPad before resetting rumble 2018-03-27 16:26:36 +02:00
Markus Wick
9b5726fc23
Merge pull request #6534 from lioncash/dspjit
DSPEmitter: Remove uses of the DSP JIT global in CompileCurrent()
2018-03-26 21:12:46 +02:00
Léo Lam
2e1edb49b0
Merge pull request #6524 from lioncash/global
JitArm64/JitAsm: Remove usages of the JIT global
2018-03-26 18:59:05 +02:00
Léo Lam
674ab6a8ef
Merge pull request #6532 from lioncash/interp
Interpreter: Remove static state within SingleStepInner()
2018-03-26 18:50:26 +02:00
Lioncash
4a4538abbf
Interpreter_LoadStore: Amend variable naming
Amends variable names to follow our code style. Also makes code const correct where possible.
2018-03-26 07:47:50 -04:00
Léo Lam
97e4d3d56f
Merge pull request #6523 from lioncash/cast
Interpreter_LoadStore: Remove unnecessary casts
2018-03-26 12:47:09 +02:00
Léo Lam
eb489c0a5e
Merge pull request #6529 from lioncash/utils
DSPCodeUtil: Don't return data via an out parameter
2018-03-26 12:46:16 +02:00
Léo Lam
3272fda3ee
Merge pull request #6525 from lioncash/dead-code
Jit64/Jit_Integer: Remove dead code in arithXex()
2018-03-26 12:43:01 +02:00
Léo Lam
ccfdea696a
Merge pull request #6527 from lioncash/typedef
DSPTables: Remove opc_t typedef
2018-03-26 12:39:27 +02:00
Léo Lam
8e8603fcc9
Merge pull request #6528 from lioncash/enum-asm
DSPAssembler: Make error code enum an enum class
2018-03-26 12:38:06 +02:00
Léo Lam
ea5808759e
Merge pull request #6531 from lioncash/mmu-enum
MMU: Make TLBLookupResult and XCheckTLBFlag enum classes
2018-03-26 11:39:37 +02:00
Lioncash
1519e4dbb3 DSPEmitter: Remove uses of the DSP JIT global in CompileCurrent()
With this, the DSPEmitter itself no longer makes use of the DSP JIT global
2018-03-26 01:14:17 -04:00
Kekker-git
d40ae9f569 Fix indefinite rumble on emulation pause 2018-03-26 00:04:58 -04:00
Lioncash
8b29997ed1 Interpreter: Remove an unnecessary UReg_MSR& cast from SingleStepInner
This is technically undefined behavior, but regardless of that, it's not
even necessary since we can just make a temporary around the MSR value
and just discard it when done with it, since all we do is query the FP
bit value with it.
2018-03-25 21:36:39 -04:00
Lioncash
b0efcdc8ef Interpreter: Get rid of static state within SingleStepInner()
Given how the hooking operates, we may not execute an instruction.
Instead of making the state a static local to the function, just make it
part of the lifecycle of the Interpreter class.
2018-03-25 21:30:00 -04:00
Lioncash
c4a597171c MMU: Make XCheckTLBFlag an enum class 2018-03-25 19:51:47 -04:00
Lioncash
9967c24f5d MMU: Make TLBLookupResult an enum class 2018-03-25 19:44:14 -04:00
Lioncash
0f25627614 DSPCodeUtil: Don't return data via an out parameter
We can just return directly in these cases.
2018-03-25 18:55:08 -04:00
Lioncash
e42db3594b DSPAssembler: Make error code enum an enum class
Prevents the error codes from littering the surrounding scope.
2018-03-25 18:19:08 -04:00
Lioncash
8c421ffbb7 DSPTables: Remove opc_t typedef
This was only ever used by the DSP assembler, and even then it was
sparsely used. Get rid of it to be consistent with types in other
sections of the DSP code.
2018-03-25 17:53:23 -04:00
Lioncash
7bd41a3b55 Jit64/Jit_Integer: Remove dead code in arithXex()
The conditional this code is within already checks whether d == b, so this
conditional will never be true.
2018-03-25 15:35:02 -04:00
Lioncash
efcdb3debb JitArm64/JitAsm: Remove usages of the JIT global
With this, the entire ARM JIT makes no use of the JIT global whatsoever.
2018-03-25 15:23:49 -04:00
Lioncash
a45631c4ca Interpreter_LoadStore: Remove unnecessary casts
These aren't necessary as the type being stored into a u32 are of the
same signedness and are smaller in data size, so there's no truncation
being performed.
2018-03-25 15:09:32 -04:00
Stenzek
2f1a7cbee1 Implement "Skip" ubershader mode
Skip ubershader mode works the same as hybrid ubershaders in that the
shaders are compiled asynchronously. However, instead of using the
ubershader to draw the object, it skips it entirely until the
specialized shader is made available.

This mode will likely result in broken effects where a game creates an
EFB copy, and does not redraw it every frame. Therefore, it is not a
recommended option, however, it may result in better performance on
low-end systems.
2018-03-26 01:57:41 +10:00
Léo Lam
5c83e18fbd
Merge pull request #6515 from lioncash/cast
Interpreter_FPUtils: Get rid of a pointer cast
2018-03-25 11:27:38 +02:00
Léo Lam
e9976c27c0
Merge pull request #6518 from lioncash/namespace
Interpreter: Don't dump the MathUtils namespace into scope in Interpreter_FloatingPoint and Interpreter_Paired
2018-03-25 11:24:24 +02:00
Lioncash
48e2e9a41d CachedInterpreter: Use using aliases instead of typedef 2018-03-25 02:57:25 -04:00
Lioncash
9829083241 CachedInterpreter: Use an enum class for instruction type 2018-03-25 02:57:16 -04:00
Lioncash
89df65aa25 Interpreter_Integer: Correct precedence of overflow check in nego
The overflow check needs to occur before the condition register update
due to the fact that the summary overflow (SO) bit is used in the
updating of the condition register. If we set any overflow bits after
updating the CR, then we can potentially incorrectly report that an
overflow did not happen (in the case the SO bit wasn't set previously).
2018-03-24 20:48:05 -04:00
Lioncash
96014e74a3 Interpreter_Paired: Don't dump the entire MathUtils namespace into scope
Functions from the namespace are only used four times within the entire
file.
2018-03-24 19:42:14 -04:00
Lioncash
46f61a48c7 Interpreter_FloatingPoint: Don't dump the entire MathUtils namespace into scope
Given functions from the MathUtils namespace are only used six times in
the whole file, dumping the namespace seems a little excessive.
2018-03-24 19:40:22 -04:00
Lioncash
27611d55ff Interpreter_FPUtils: Get rid of a pointer cast
This is undefined behavior according to the standard. We can just use
the built in means of retrieving a quiet NaN.
2018-03-24 19:33:44 -04:00
Léo Lam
328ac424c0
Merge pull request #6517 from lioncash/ppctables
PPCTables: Namespace all exposed functions
2018-03-24 22:17:36 +01:00
Lioncash
8a7abd72b4 PPCTables: Remove prefixed underscores from parameter names 2018-03-24 16:46:49 -04:00
Lioncash
2381aeecc3 PPCTables: Namespace all exposed functions
It's somewhat inconsistent to have two straggler functions outside the
namespace.
2018-03-24 16:46:12 -04:00
Lioncash
397b3fb976 CPUCoreBase: Make the GetName() member function const qualified
This function should have no need to modify internal class state.
2018-03-24 16:17:39 -04:00
Lioncash
c738ddc4aa CPUCoreBase: Default the virtual destructor 2018-03-24 16:09:19 -04:00
Lioncash
ef6e747a68 PowerPC: Remove commented out PanicAlert 2018-03-24 14:52:22 -04:00
Lioncash
3dc3b0caa5 Interpreter_LoadStore: Remove commented out code
Also removes long separation lines that aren't really necessary.
2018-03-24 14:49:18 -04:00
Lioncash
f9e0645b99 Interpreter_SystemRegisters: Remove commented out code 2018-03-24 14:45:46 -04:00
Lioncash
288b579c09 Interpreter_Integer: Remove commented out code in subfic 2018-03-24 14:43:25 -04:00
Markus Wick
3ab88742fd
Merge pull request #6492 from lioncash/nop
Jit_Integer: Make NOP check more flexible for ori and expand NOP checking to oris, xori, and xoris
2018-03-24 08:53:21 +01:00
Pierre Bourdon
894d4c99a8
Merge pull request #6495 from lioncash/namespace
PowerPC: Namespace all header contents for PowerPC.h
2018-03-23 12:09:09 +01:00
Lioncash
fc16a78f6a Jit_Integer: Handle NOP case for xori and xoris
Like ori and oris, xori and xoris can also be used to introduce a NOP.
In that case, just don't do anything.
2018-03-22 22:51:43 -04:00
Lioncash
007f9e5309 Jit_Integer: Handle NOP case for oris as well
Like ori, this can also be used as a NOP under the same conditions.
2018-03-22 22:49:02 -04:00
Lioncash
42fce74f39 Jit_Integer: Handle NOP case where RA == RS for ori
ori can be used as a NOP if the two register operands are the same, and
the immediate is zero, not only if the two register operands are r0.

Also removes the check for !inst.Rc, as ori only has one encoding, and
said encoding doesn't even have a record bit in it.
2018-03-22 22:47:19 -04:00
Mat M
71846a6daa
Merge pull request #6469 from lioncash/cmake
Core/CMakeLists: Migrate off add_dolphin_library
2018-03-22 21:52:44 -04:00
Lioncash
4c97deb364 PowerPC: Namespace all header contents for PowerPC.h
Puts everything under the same namespace. Previously the header was only
partially namespaced, which is inconsistent.
2018-03-22 19:01:47 -04:00
Léo Lam
5e76f3a6d4
Merge pull request #6488 from aldelaro5/symbols-log
LOG: Add a log type for Symbols
2018-03-22 22:06:04 +01:00
aldelaro5
c54e56793a
Add a log type for Symbols and move symbols related logs to it
This fix the awkwardness of having the symbols detection, parsing and loading related logs be in OS HLE while they don't have anything to do with that.
2018-03-22 14:57:28 -04:00
Lioncash
796d67e1ec Interpreter_Integer: Handle OE bit for subf, subfc, subfe, subfme, and subfze
With this, overflow flag support is now fully implemented for all
instructions that support it.
2018-03-22 13:08:03 -04:00
Markus Wick
59c5bc964f
Merge pull request #6486 from lioncash/add-oe
Interpreter_Integer: Handle overflow flag when OE bit is set in add, addc, adde, addme, and addze
2018-03-22 14:15:58 +01:00
Lioncash
9d21425449 Interpreter_Integer: Handle overflow flag when OE bit is set in add, addc, adde, addme, and addze 2018-03-22 09:09:31 -04:00
Léo Lam
2e92d95888
Merge pull request #6487 from sepalani/dsp-doc
DSP: Fix typos in DSP LoadStore doc
2018-03-22 07:51:29 +01:00
Sepalani
4ed06da2b4 DSP: Fix typos in DSP LoadStore doc 2018-03-22 09:24:58 +04:00
Lioncash
e53fffeb90 PowerPC: Properly unset the overflow bit
The OV bit is non-sticky. Therefore, after an overflow-enabled
instruction executes, if an overflow does *not* occur, then OV is
cleared. SO is sticky however, so it staying set in this case is
correct.
2018-03-21 23:59:15 -04:00
Anthony
23bc50704a
Merge pull request #6484 from lioncash/mul
Interpreter_Integer: Handle the overflow flag when the OE bit is set for mullw
2018-03-21 18:18:00 -07:00
Lioncash
355509653e Interpreter_Integer: Handle the overflow flag when the OE bit is set for mullw 2018-03-21 20:28:37 -04:00
Michael M
1ba43e6c27 DSPSymbols: remove unused ReadAnnotatedAssembly
It's unused, and it used a weird format, something like:

```
void label_name() {
   asm $REG1, $REG2
   // etc
}
```
2018-03-21 17:07:27 -07:00
Michael M
ed56f319b5 DSPHost: don't try to read old annotated assembly files
They don't exist anymore!
2018-03-21 17:06:30 -07:00
Markus Wick
8308d6b464
Merge pull request #6476 from lioncash/dispatch
JitAsm: Eliminate use of the JIT global variable
2018-03-21 09:55:04 +01:00
Lioncash
7a2d98b948 JitAsm: Remove use of the JIT global in Generate()
With this, JitAsm code doesn't have any reliance on the JIT global
variable. This means the core JIT64 code no longer relies on said
global at all. The Jit64 common code, however, still has some offenders.

Notably, EmuCodeBlock and Jit64AsmCommon are the remaining places in the
common code that make use of the global variable.
2018-03-21 04:41:37 -04:00
Lioncash
e0165a62da JitBase: Remove use of the JIT global in Dispatch() and JitTrampoline()
Trims down a few more uses of the global variable by just passing the
JIT instance we're dispatching or trampolining with as a parameter.
2018-03-21 04:41:30 -04:00
Pierre Bourdon
fe600ab0ed
Merge pull request #6146 from HannesMann/qos-support
Netplay: Add Quality of Service (QoS) support
2018-03-21 02:46:46 +01:00
Anthony
ad8c31699f
Merge pull request #6463 from delroth/auto-update
Initial implementation of the Dolphin auto-updater for Windows
2018-03-20 11:28:26 -07:00
Pierre Bourdon
66b41c5509 UICommon: Add AutoUpdate module + placeholder Qt implementation
The AutoUpdate module is a generic update checker mechanism which can be
used by UI backends to trigger an auto-update check as well as the
actual update process.

Currently only configurable through .ini and the Qt implementation is
completely placeholder-y -- blocking the main thread on a network
request on startup, etc.
2018-03-20 19:21:19 +01:00
Markus Wick
43c92c8b16
Merge pull request #6451 from leoetlino/default-mmu
Config: Set bMMU to true by default on x64
2018-03-20 14:40:40 +01:00
Markus Wick
35bfa64dfc
Merge pull request #6470 from lioncash/ov-flag
Interpreter: Handle setting the overflow flag when the OE bit is set in divw, divwu, and neg
2018-03-20 11:08:12 +01:00
spycrab
44ce78c969 Qt: Remove in-development warning 2018-03-19 21:59:50 +01:00
Anthony
50588034ba
Merge pull request #6472 from lioncash/jit-init
JitBase: Ensure JitOptions and JitState instances are consistently initialized
2018-03-19 13:20:40 -07:00
Lioncash
51cfeb8c7d JitBase: Ensure JitOptions and JitState instances are consistently initialized
Ensures that upon construction of a JitBase instance, that all
underlying members within the option and state structs are guaranteed
to be initialized.

This prevents potentially using a member uninitialized in some form.
2018-03-19 15:58:32 -04:00
Léo Lam
16f74cee70
Merge pull request #6467 from lioncash/breakpoint
Breakpoints: Remove direct usages of the JIT global
2018-03-19 18:42:10 +01:00
Lioncash
2fa0cb91a1 Interpreter_Integer: Set the overflow flag if the OE bit is set for neg
Also amends the condition that was being checked. Previously it was
checking if the destination register value was 0x80000000, however it's
actually the source register that should be checked.
2018-03-19 13:27:36 -04:00
Lioncash
675d2fb774 Interpreter_Integer: Set the overflow flag if the OE bit is set for divw and divwu
divw and divwu won't panic now if the OE bit is set for these instructions.
2018-03-19 11:51:10 -04:00
Lioncash
f129c936e7 PowerPC: Add functions for getting and setting the XER OV bit
While we're at it, change GetXER_SO's return value to u32
to prevent potential sign bit wonkyness given we're performing bit arithmetic.
2018-03-19 11:51:04 -04:00
Markus Wick
8c1be29cef
Merge pull request #6466 from lioncash/mffs
Interpreter_SystemRegisters: Handle mffs, mtfsb0, mtfsb1, mtfsf and mtfsfi with the record bit set
2018-03-19 09:37:01 +01:00
Markus Wick
0c0a342483
Merge pull request #6464 from lioncash/using
JitArm64_RegCache: Remove using namespace declaration from header
2018-03-19 09:11:45 +01:00
Lioncash
3a4c3bbe01 Core/CMakeLists: Migrate off add_dolphin_library
This macro (that has unfortunately become the de-facto way of
introducing targets) has a lot of disadvantages that outweigh the fact
that you avoid writing two extra lines of CMake script.

- It encourages the use of variables. In a build system the last thing
we want to care about is mutable state that can be avoided.

- It only handles linking in the libraries and nothing else. It's a
laziness macro.

- We should be explicit about what we're doing by introducing the target
first, not last.

This gets the ball rolling by migrating Core off the macro. Note that
this is essentially 1-to-1 unrolling of the macro, therefore we're
still linking in all libraries as public, even though that may not be
necessary.

This can be revisited once everything is off the macro for a quicker
transition period.
2018-03-19 04:02:12 -04:00
Markus Wick
22aba8c56d
Merge pull request #6468 from lioncash/downcast
JitInterface: Remove a downcast within InitJitCore
2018-03-19 09:00:56 +01:00
Lioncash
14b204a9bb JitInterface: Remove a downcast within InitJitCore
This isn't necessary as JitBase is already within the type hierarchy that
CPUCoreBase is.
2018-03-19 03:13:16 -04:00
Lioncash
a0164e14bc BreakPoints: Avoid direct use of the JIT global
Trims the direct usages of the global by making the code go through the
JIT interface (where it should have been going in the first place).

This also removes direct JIT header dependencies from the breakpoints as
well. Now, no code uses the JIT global other than JIT code itself, and
the unit tests.
2018-03-19 03:08:57 -04:00
Lioncash
b4cd11c7c9 BreakPoints: Invert if statements where reasonable
Puts the early-exit condition first, unindenting code that doesn't need
to be.
2018-03-19 03:08:53 -04:00
Lioncash
3137d4f75f BreakPoints: Use std algorithms where applicable 2018-03-19 03:08:17 -04:00
Lioncash
eea99de118 Interpreter_SystemRegisters: Handle mffs, mtfsb0, mtfsb1, mtfsf, and mtfsfi with the record bit set
All of these with the record bit set update condition register 1 with the
contents of the FPSCR's FX, FEX, VX and OX bits.

Helper_UpdateCR1() does exactly that, so we use it here to perform this
for us.
2018-03-19 00:05:00 -04:00
Lioncash
6ae8a2b5f8 JitArm64_RegCache: Remove using namespace declaration from header
Dumping a namespace in a header file should be avoided since it can
cause random name and type clashing in unexpected ways.
2018-03-18 19:39:58 -04:00
Lioncash
6428cee939 PPCTables: Make the op type enum an enum class
Reduces the amount of identifiers dropped into the global namespace when
the PPCTables header is included.
2018-03-18 18:53:58 -04:00
Pierre Bourdon
0c128f3abe
Merge pull request #6450 from leoetlino/nandboot
Boot: Set TYPE_NANDBOOT when booting from NAND
2018-03-18 20:44:44 +01:00
Léo Lam
b86947264b
Merge pull request #6453 from leoetlino/remove-unused
State: Remove unused Verify functions
2018-03-18 11:24:37 +01:00
Lioncash
826c11ba3b MainBase: Remove unused s_beginFieldArgs struct
This is only ever memset to zero and never used again.

This also gets rid of an instance of undefined behavior considering the
draft standard for C++17 (N4659) states at [dcl.type.cv] paragraph 5:

"
The semantics of an access through a volatile glvalue are implementation-defined.
If an attempt is made to access an object defined with a volatile-qualified type
through the use of a non-volatile glvalue, the behavior is undefined.
"
2018-03-17 18:07:08 -04:00
Léo Lam
6aa6be2804 State: Remove unused Verify functions
These were unused in the entire codebase.
2018-03-16 22:56:54 +01:00
Léo Lam
f2b9a6696d Config: Set bMMU to true by default on x64
This prevents Dolphin from crashing when the emulated software crashes.
AFAIK, there is absolutely no performance to enabling this with the
x64 JIT.

Eventually, we should probably just remove bMMU
(https://github.com/dolphin-emu/dolphin/pull/1831). We can't do that
yet because of the ARM JIT.
2018-03-16 21:08:23 +01:00
Léo Lam
25704a2494 Boot: Set TYPE_NANDBOOT when booting from NAND
It makes more sense to set TYPE_NANDBOOT than TYPE_RETURN. The latter
is normally only set when returning to the system menu from a game.
2018-03-16 20:17:43 +01:00
Léo Lam
a63aaeecee IOS: Fix "kernel FD table full" error code 2018-03-16 18:51:08 +01:00
Léo Lam
d029f2a7b6 IPC: Clear X1 when acknowledging a reply
Hardware tests indicate that IOS clears X1 when it acknowledges
an IPC request.
2018-03-16 18:51:08 +01:00
Léo Lam
1a71076e50 IPC: Remove incorrect guess about acks
A very basic hardware test shows that the ARMMSG doesn't change until
IOS replies. (People could have disassembled IOS to verify this too...)

Console:

sending request at 00034640 - ARMMSG 133e0fa0
00000000000000000000000000000010(ack) - ARMMSG 133e0fa0
00000000000000000000000000000100(reply) - ARMMSG 00034640

Dolphin, prior to this fix:

sending request (00034640) - ARMMSG 133e0fa0
00000000000000000000000000000011(ack) - ARMMSG 00034640
00000000000000000000000000000100(reply) - ARMMSG 00034640

Dolphin, after this fix:

sending request at 00034640 - ARMMSG 133e0fa0
00000000000000000000000000000011(ack) - ARMMSG 133e0fa0
00000000000000000000000000000100(reply) - ARMMSG 00034640

(Yes, note that the X1 bit is still set. This is a bug that I will
fix in the next commit.)
2018-03-16 18:51:08 +01:00
Léo Lam
b9f7d67667 IPC: Fix missing interrupt when writing to Y1/Y2
The IPC interrupt is triggered when IY1/IY2 is set and Y1/Y2 is written
to even when this results in clearing the bit.

This shouldn't change anything in practice but it's a difference
that Dolphin wasn't taking into account, which made me waste some time
when I was writing a hwtest :/
2018-03-16 18:51:08 +01:00
Léo Lam
35e3775a77 IOS: Remove outdated comment 2018-03-16 18:51:08 +01:00
Léo Lam
fa89614b07 IOS: Adjust IPC timing based on hardware tests
This adjusts IOS IPC timing to be closer to actual hardware:

* Emulate the IPC interrupt delay. On a real Wii, from the point of
  view of the PPC, the IPC interrupt appears to fire about 100 TB ticks
  after Y1/Y2 is seen.

* Fix the IPC acknowledgement delay. Dolphin was much, much too fast.

* Fix Device::GetDefaultReply to return more reasonable delays. Again,
  Dolphin was way too fast. We now use a more realistic, average reply
  time for most requests.

  Note: the previous result from https://dolp.in/pr6374 is flawed.
  GetTicketViews definitely takes more than 25µs to reply.
  The reason the reply delay was so low is because an invalid
  parameter was passed to the libogc wrapper, which causes it to
  immediately return an error code (-4100).

* Fix the response delay for various replies that come from the kernel:
  fd table full, unknown resource manager / device, invalid fd,
  unknown IPC command.

Source: https://github.com/leoetlino/hwtests/blob/af320e4/iostest/ipc_timing.cpp
2018-03-16 18:51:07 +01:00
Lioncash
75f5fcdfee Assert: Remove unused parameter from DEBUG_ASSERT
This brings the macro in line with the regular ASSERT macro, which only has one
macro parameter.
2018-03-16 13:01:11 -04:00
Lioncash
50a476c371 Assert: Uppercase assertion macros
Macros should be all upper-cased. This is also kind of a wart that's
been sticking out for quite a while now (we avoid prefixing
underscores).
2018-03-14 22:03:12 -04:00
Lioncash
9f2a46b08d DSPCore: Use nested namespace specifiers for the x64 JIT
Slims down the amount of lines needed for namespacing.
2018-03-13 18:57:25 -04:00
Lioncash
b3fd79b45a DSPCore: Rename namespace to match moved x64 JIT files
Maintains consistency between location and code
2018-03-13 18:48:16 -04:00
Lioncash
ab5b90bf15 DSPCore: Move x64 JIT source files into an x64 subdirectory
While the code is namespaced out properly, the files weren't separated
into their own directory. This moves the files so that introducing a general
interface is easier in the future for supporting other architectures.
2018-03-13 18:26:26 -04:00
Stenzek
e31cc1f679 ShaderCache: Implement background shader compilation
This enables shaders to be compiled while the game is starting, instead
of blocking startup. If a shader is needed before it is compiled,
emulation will block.
2018-03-10 16:11:19 +10:00
Stenzek
9fa24700b6 VideoConfig: Collapse ubershader configuration fields to a single value 2018-03-10 15:56:45 +10:00
Léo Lam
63838c013b
Merge pull request #6281 from JosJuice/unify-gamelist-code
Unify ISOFile (wx) with GameFile (Qt) and put it in UICommon
2018-03-09 20:39:02 +01:00
JosJuice
0e2690f40b FileMonitor: Store last file offset instead of path
This saves us from having to call GetPath when the same file is being
read over and over. (GetPath is more expensive than GetOffset due to
it iterating through parts of the file system and creating strings.)
2018-03-09 15:18:32 +01:00
JosJuice
1f1dae367d Unify ISOFile (wx) with GameFile (Qt) and put it in UICommon
The original reason I wanted to do this was so that we can replace
the Android-specific code with this in the future, but of course,
just deduplicating between DolphinWX and DolphinQt2 is nice too.

Fixes:

- DolphinQt2 showing the wrong size for split WBFS disc images.

- DolphinQt2 being case sensitive when checking if a file is a DOL/ELF.

- DolphinQt2 not detecting when a Wii banner has become available
after the game list cache was created.

Removes:

- DolphinWX's ability to load PNGs as custom banners. But it was
already rather broken (see https://bugs.dolphin-emu.org/issues/10365
and https://bugs.dolphin-emu.org/issues/10366). The reason I removed
this was because PNG decoding relied on wx code and we don't have any
good non-wx/Qt code for loading PNG files right now (let's not use
SOIL), but we should be able to use libpng directly to implement PNG
loading in the future.

- DolphinQt2's ability to ignore a cached game if the last modified
time differs. We currently don't have a non-wx/Qt way to get the time.
2018-03-09 13:08:38 +01:00
Hannes Mann
41682a07cb Add Quality of Service (QoS) support 2018-03-09 00:11:18 +01:00
Sepalani
4f1c0ca3e9 HLE: Improve format string detection heuristic 2018-03-06 21:21:56 +04:00
Léo Lam
a436c6182b
Merge pull request #6388 from leoetlino/merge
Consolidate ec_wii functions into IOSC
2018-03-02 23:14:37 +01:00
Léo Lam
96e4e01564
Merge pull request #6416 from Ebola16/Warning
Remove DSPLLE ReadAnnotatedAssembly error log entry
2018-03-02 23:10:43 +01:00
Ryan Meredith
c94cd4a275 Remove DSPLLE ReadAnnotatedAssembly error log entry 2018-03-02 02:25:25 -05:00
Léo Lam
4e014f996b IOS: Fix invalid FD being returned after an open
Fixes a regression introduced by 80b1bf13c2.

The return value for open replies should be overwritten with the new
file descriptor.
2018-02-28 15:56:03 +01:00
Léo Lam
80b1bf13c2 IOS: Change devices to always return IPCCommandResult
This commit changes devices to always return IPCCommandResult rather
than just a return code for Open() and Close() in order to be able
to better emulate reply timing.

In hindsight, I should have considered we would want to emulate
timing when I cleaned up the device interface, but alas.
This rectifies that mistake.
2018-02-27 21:12:07 +01:00
Léo Lam
9282be1058 IOS: Fix regression affecting BC launch
8e06257f19 caused Dolphin not to consider BC as emulated anymore.
2018-02-27 18:16:05 +01:00
spycrab
a3fd99032c IsSettingSavable: Make GFX_CACHE_HIRES_TEXTURES savable 2018-02-26 19:04:06 +01:00
JosJuice
619f98b97b
Merge pull request #6389 from spycrab/fix_wiimote
Fix emulated Wiimotes
2018-02-20 21:37:30 +01:00
spycrab
de1af2e45d Fix emulated Wiimotes 2018-02-20 20:41:29 +01:00
Léo Lam
f9445bb119 IOS: Remove ec_wii functions 2018-02-19 20:34:06 +01:00
Léo Lam
5e5c9e1772 IOSC: Add Sign
Equivalent of IOSC_GenerateCertificate + IOSC_GeneratePublicKeySign.

This is copied from ec_wii/MakeAPSigAndCert.
2018-02-19 20:34:06 +01:00
Léo Lam
b3c7874a3a IOSC: Add GetDeviceId and GetDeviceCertificate 2018-02-19 20:34:06 +01:00
Léo Lam
f3c63b3108 IOSC: Load built-in key entries directly from keys.bin
Preliminary commit for merging ec_wii into IOSC.
2018-02-19 20:34:06 +01:00
Léo Lam
1f4ddea5f7 IOSC: Change misc_data to a u32
It's always 4 bytes long, so let's just make it a u32.
2018-02-19 20:34:05 +01:00
Markus Wick
a2d2a0a356
Merge pull request #6384 from jeffythedragonslayer/master
Jit64: fixed some signed to unsigned integer warnings
2018-02-19 15:28:06 +01:00
Anthony
4876b9d8e0
Merge pull request #6362 from spycrab/qt_indicators
Qt/Mapping: Implement indicators
2018-02-18 11:45:12 -08:00
Jeff Linahan
caf721fb3f Jit64: fixed some signed to unsigned integer warnings 2018-02-16 17:41:16 -05:00
Markus Wick
e7d0aae5be
Merge pull request #6335 from stenzek/membp
Jit64: Fix incorrect PC in PPC state during fastmem trampoline
2018-02-15 11:13:52 +01:00
spycrab
ec54b421a4 Qt/Mapping: Implement indicators 2018-02-15 05:01:44 +01:00
Léo Lam
dbdf964f2e
Merge pull request #6376 from sepalani/es-fix
ES: Make it not fail on something that isn't IOS
2018-02-13 16:42:17 +01:00
Sepalani
68f7a03d05 ES: Make it not fail on something that isn't IOS 2018-02-13 15:47:38 +01:00
Anthony
35c43e74d0
Merge pull request #6371 from rukai/dolphinQtHotkeyFixes
Qt: Various fixes to hotkeys
2018-02-12 09:28:58 -08:00
Léo Lam
8e06257f19
Merge pull request #6374 from sepalani/ios-reload
ES: Make it fail on unsupported installed IOSes
2018-02-12 10:02:43 +01:00
Sepalani
a663fcb977 IOS: Adjust reply timing to be closer to real hardware 2018-02-11 18:42:19 +01:00
Sepalani
2ce7fff819 ES: Make it fail on unsupported installed IOSes 2018-02-11 18:42:02 +01:00
Stenzek
93fb0e1e1c TextureCache: Add an option to disable EFB copies to VRAM
The option is named DisableCopyToVRAM under the Hacks section in
GFX.ini. It is intentionally not exposed to the GUI, as users should not
need to use it under normal circumstances. The main use is debugging
issues in the EFB-to-RAM shaders.
2018-02-11 15:48:46 +10:00
Rukai
4b5373b25b Remove hardcoded esc hotkey, make pause/stop hotkey actually toggle rather than just pausing, fix frame advance hotkey 2018-02-10 23:30:59 +11:00
Anthony
c30ac55cf4
Merge pull request #6354 from leoetlino/hle
HLE: Minor cleanup
2018-02-07 23:36:31 -08:00
Léo Lam
3deb8ce074 HLE: Use enum classes for HookType and HookFlag 2018-02-04 14:50:55 +01:00
Léo Lam
a184ab93b6 HLE: Remove an unused function
There is nothing using PanicAlert in either official titles or libogc.
2018-02-04 14:41:55 +01:00
Stenzek
15efd42eba Jit64: Don't flush PC in exception block
These blocks can only be executed as a result of a DSI exception from a
loadstore, where we now flush the PC register prior to the loadstore.
2018-01-27 22:32:57 +10:00
Stenzek
8933fe599c Jit64: Update PC before slowmem reads as well as writes 2018-01-27 22:29:39 +10:00
Stenzek
7f3c31d78d Jit64: Set correct PC when emitting slowmem trampoline 2018-01-27 18:19:42 +10:00
Stenzek
d96e8c9d76 VideoBackends: Combine Initialize/Prepare and Cleanup/Shutdown methods
Also allows the work previously done in Prepare to return a failure
status.
2018-01-27 13:53:55 +10:00
Stenzek
04027a7da7 Core: Improve ordering of boot
- Smplification of graphics backend startup/shutdown.
- Don't send complete message until CPU is ready to execute.
- Remove redundant stop message.
- Remove OSD message with backend name.
2018-01-27 13:53:55 +10:00
Stenzek
f9053527a9 Core: Don't spawn an extra thread in single-core mode
We don't need a message pump thread for the video backend, as the window
is created on the UI thread, not the "idle" emu thread.
2018-01-27 13:53:55 +10:00
Sepalani
df9611255a PPCSymbolDB: two columns symbol map support added 2018-01-24 12:43:23 +01:00
Léo Lam
a972892821
Merge pull request #6320 from sepalani/dwc_printf
HLE: DWC_Printf debug added
2018-01-24 10:29:02 +01:00
Sepalani
6ffb5dbaaa HLE: DWC_Printf debug added 2018-01-23 19:02:32 +01:00
degasus
0b466249e0 CustomTextures: Drop format convertion. 2018-01-20 16:39:04 +01:00
gyroninja
9628e22916 Changed PPCDebugInterace to check memory only after the emulator has finished starting 2018-01-12 15:18:29 -08:00
JosJuice
c492a5a86a Don't involve host thread when booting from savestate
Suggested by https://github.com/dolphin-emu/dolphin/pull/6271#discussion_r159868704
2018-01-05 14:14:12 +01:00
Markus Wick
e705d43312
Merge pull request #6270 from mahdihijazi/suppport_restore_state
[Android] Support restore emulator state
2018-01-05 13:45:36 +01:00
Léo Lam
637fbec35d
Merge pull request #6274 from myfreeweb/freebsd-libusb-no-detach
passthrough: do not detach kernel driver on FreeBSD
2018-01-04 10:39:58 +01:00
Vlad Firoiu
330881ae80 Allow users to specify the encoder used for framedumping. 2018-01-03 13:23:10 +01:00
JosJuice
82a6701f79 Optionally delete savestate that gets loaded at boot 2017-12-28 23:15:48 +01:00
JosJuice
9dd88d76dd Redesign the ability to load state at boot
BootParameters can now contain the path of a savestate to load at boot.
Movie has been made to use this instead of poking at Core.cpp's state.
2017-12-26 20:39:03 +01:00
Greg V
5c1c67d4d8 passthrough: do not detach kernel driver on FreeBSD
libusb_detach_kernel_driver() always fails as a regular non-root user:
https://lists.freebsd.org/pipermail/freebsd-usb/2016-March/014161.html
2017-12-26 21:50:50 +03:00
JosJuice
f41273fe79 GameConfigLoader: Map whole sections, not just individual keys
There are two reasons for this change:

1. It removes many repetitive lines of code.

2. I think it's a good idea to enable the use of old-style section
names even for settings that previously haven't been settable in game
INIs. Mixing the two styles in INIs (using the new style only for new
settings) is not ideal, and people on the forums don't even seem to
know that the new style exists (nobody knew a way to set ubershader
settings per game, for instance). Encouraging everyone to start using
only the new style might work long-term, but it would take take time
and effort to make everyone get used to it. Considering that this commit
*reduces* the amount of code by adding the ability to use old-style
names for more settings, I'd say that adding this ability is worth it.
2017-12-23 18:59:27 +01:00
JosJuice
5296ee6d3d Reduce the indentation level of MapINIToRealLocation 2017-12-23 18:25:49 +01:00
JosJuice
4973ae9952 Rename GFX_HACK_COPY_EFB_ENABLED to GFX_HACK_COPY_EFB_SCALED
Not sure why it was named like this... It doesn't affect whether
the copy happens or not, only what resolution it uses.
2017-12-18 21:55:02 +01:00
Leo Lam
4733bbd8f3
Merge pull request #6166 from ligfx/invokedeviceschangedcallbacks
ControllerInterface: cleanup callbacks API and logic
2017-12-15 21:05:17 +01:00
Leo Lam
fa0cf5c038
Merge pull request #6247 from leoetlino/homebrew
Boot: Minor fixes for Wii homebrew
2017-12-15 20:47:02 +01:00
Markus Wick
eb1ae38304
Merge pull request #6027 from JonnyH/WIP/chained-signal-handler-android-debuggerd
Call the previously-set sigaction in fastmem handler if it's not our fault
2017-12-10 00:18:13 +01:00
Léo Lam
3dd777be70 Boot: Add default exception handlers
Some homebrew expect exception handlers to be present -- which is
almost always the case on console, since most of the time homebrew are
launched from either a libogc or SDK title) -- and break if they are
not. To fix this, we just need to include default, dummy handlers.
2017-12-09 17:24:04 +01:00
Léo Lam
520039ab28 Boot: Use values from libogc for booting Wii homebrew
Set HID0, HID4, GPR1 to values that are used by libogc for
initialisation. This makes boots more similar to a launch
from the HBC or another loader, since normally the registers
have already been initialised by the loader.

This fixes a crash in homebrew that assume GPR1 points to a correct
location and attempt to use it before initialising registers.
2017-12-09 17:24:03 +01:00
Léo Lam
ecd7191b5a Boot: Fix BAT setup in Wii mode
HID4.SBE must be set before calling PowerPC::Update{D,I}BAT, otherwise
extended BATs will not be enabled.
2017-12-09 17:24:03 +01:00
Anthony
3b887388cd
Merge pull request #6234 from amolloy/high_sierra
Fix Wiimote support on macOS 10.13 High Sierra
2017-12-07 12:04:37 -08:00
Pierre Bourdon
8a830074b6
Merge pull request #6220 from leoetlino/utf8
WX: Fix argument parsing
2017-12-07 15:16:39 +01:00
JosJuice
9d8a82e1d9 Don't use wrong encoding for paths when opening streams on Windows 2017-12-05 21:23:35 +01:00
Andrew Molloy
f5839f854a Fix whitespace in and around WiimoteScannerDarwin::~WiimoteScannerDarwin() (linter). 2017-12-03 12:31:18 -05:00
Andrew Molloy
8354e89cf1 Break out of the loop waiting for the SearchBT to be done in WiimoteScannerDarwin::FindWiimotes() when the object is destroyed. Allows the application to quit correctly when Continuous Scanning is enabled on macOS. 2017-12-03 11:41:06 -05:00
Andrew Molloy
d306397bbc -[deviceInquiryComplete:error:aborted:] comes in on the main thread in macOS 10.13, so instead of using CFRunLoopRun()/CFRunLoopStop(), just let the run loop do one pass. This is already in a loop waiting for done to be false. This also means -[deviceInquiryComplete:error:aborted:] should no longer call CFRunLoopStop(). Fixes connecting to Wiimotes in macOS 10.13+, should continue to work as before in 10.12 and below. 2017-12-03 10:32:07 -05:00
JosJuice
05879875f6 Make USB keyboard input respect the background input setting 2017-12-02 18:12:04 +01:00
Léo Lam
05c8d229af Config: Handle unknown system strings better
Currently, a simple typo in the system name will trigger an assert
message that complains about a "programming error". This is not
user friendly and misleading.

So this changes GetSystemFromName to return an std::optional, which
allows for callers to check whether the system exists and handle
failures better.
2017-11-26 18:24:01 +01:00
Michael M
ebc547030d BootManager: RestoreSYSCONF without resetting all other config
This was causing an issue where DolphinQt couldn't save graphics options
(DolphinWX doesn't hit this code path), because this function was being
called before the in-memory config was flushed to disk.

With this PR, the in-memory config isn't reset, and only SYSCONF-related
variables may get changed.
2017-11-19 17:17:59 -08:00
spycrab
474b1c2d5c Qt: Implement FIFO Player 2017-11-19 22:06:32 +01:00
spycrab
aa8bf71333 FifoRecorder: Implement IsRecordingDone() 2017-11-19 21:49:29 +01:00
spycrab
aac1b386b9 FifoPlayer: Implement IsPlaying() 2017-11-19 21:49:29 +01:00
JosJuice
b3b58b586c
Merge pull request #5943 from leoetlino/features
IOS: Check for available features when adding devices
2017-11-19 21:43:54 +01:00
JosJuice
d0b9923b0a Move XFB settings in DTM header back to where they were
7f0834c9 moved the locations of the Real XFB (now XFB to RAM) and
Disabled XFB (now Immediate Mode) settings. There are programs
other than Dolphin that parse DTM headers, so this is not good.

Note that Immediate XFB actually is the inversion of Disabled XFB.
I hope that's not too much of a problem...
2017-11-19 19:03:03 +01:00
Michael Maltese
c62d83a34b GCPadEmu: only connected if default device connected
This lets Dolphin know if a configured GameCube Controller should actually
be treated as connected or not.

Talked to @JMC47 a bit about this last night. My use-case is that all of
my controllers are the same hardware (Xbox One controllers) so share the
same configuration (modulo device number). Treating them all as always
connected isn't a problem for most games, but in some (Smash Bros.) it
forces me to go find a keyboard/mouse and unconfigure any controllers
that I don't actually have connected. Hotplugging devices (works on macOS,
at least) + this patch remove my need to ever touch the Controller Config
dialog while in a game.

This patch makes the following changes:

- A new `BooleanSetting` in `GCPadEmu` called "Always Connected", which
  defaults to false.
- `ControllerEmu` tracks whether the default device is connected on every
  call to `UpdateReferences()`.
- `GCPadEmu.GetStatus()` now sets err bit to `PAD_ERR_NO_CONTROLLER` if
  the default device isn't connected.
- `SIDevice_GCController` handles `PAD_ERR_NO_CONTROLLER` by imitating the
  behaviour of `SIDevice_Null` (as far as I can tell, this is the only use
  of the error bit from `GCPadStatus`).

I wanted to add an OSD message akin to the ones when Wiimotes get
connected/disconnected, but I haven't yet found where to put the logic.
2017-11-19 16:07:00 +01:00
Michael Maltese
379e28b58c Add GCPadStatus.isConnected boolean 2017-11-19 16:01:08 +01:00
Michael Maltese
bb1c794657 Remove unused GCPadStatus.err 2017-11-19 16:01:07 +01:00
Leo Lam
80bcc0d58d
Merge pull request #6186 from lioncash/enum-class
VideoConfig: Make AspectMode and StereoMode enum classes
2017-11-19 15:08:16 +01:00
Leo Lam
a75546747e
Merge pull request #6164 from leoetlino/usb-hid
IOS/USB: Implement HIDv5
2017-11-19 14:13:57 +01:00
JosJuice
b8c83dd5f3
Merge pull request #5973 from ligfx/renamefifoqueue
Rename Common::FifoQueue to Common::SPSCQueue
2017-11-19 13:51:22 +01:00
Markus Wick
9178a6e636
Merge pull request #6197 from degasus/GP
Jit: Optimize gather pipe usage.
2017-11-19 11:52:20 +01:00
Lioncash
5337e58284 VideoConfig: Make StereoMode an enum class
Makes for more strongly-typed identifiers (and doesn't pollute
surrounding namespaces)
2017-11-18 23:19:53 -05:00
Lioncash
10697bcbe3 VideoConfig: Make AspectMode an enum class
Makes for more strongly-typed identifiers (and doesn't pollute
surrounding namespaces)
2017-11-18 23:17:56 -05:00
Pierre Bourdon
609a17a0cd
Merge pull request #5498 from iwubcode/hybrid_xfb
Hybrid xfb
2017-11-19 04:58:59 +01:00
degasus
6ea3f538b4 JitArm64: Inline GP check in Cleanup.
We're calling this function up to 2M times per second. Let's inline the pre-check.
2017-11-18 17:43:38 +01:00
degasus
6c9bb67ca0 JitArm64: Optimize gather pipe writes. 2017-11-18 17:43:38 +01:00
degasus
6ad63c1b35 Jit64: Inline GP fast check in Cleanup. 2017-11-18 17:43:38 +01:00
degasus
36ad887a19 Jit64: Inline GP writes.
As we're down to 4 instructions now, it is always worth to inline those writes.
2017-11-18 14:45:09 +01:00
degasus
4feddd7748 PowerPC: Include the gather pipe pointer in the ppc state. 2017-11-18 14:14:45 +01:00
iwubcode
a129a53e56 Video Common: Improve texture dumping to work with fifoci and
fifo_comparer
2017-11-17 22:11:32 -06:00
iwubcode
53684701fa HybridXFB: Fix lint errors 2017-11-17 22:11:31 -06:00
iwubcode
7f0834c919 Add 'immediate xfb' which reduces xfb latency at the cost of graphical errors 2017-11-17 22:11:30 -06:00
iwubcode
5a372020ea FifoPlayer: Generate fake VideoInterface updates 2017-11-17 22:11:29 -06:00
iwubcode
65cd085f9b Add new GUI option to skip XFBToRam and remove old XFB options 2017-11-17 22:11:28 -06:00
iwubcode
198d3b69b4 Add ability to dump xfb copies to texture for debugging purposes 2017-11-17 22:11:28 -06:00
Anthony
aa4088a494 [UI] Remove fullscreen resolution UI. 2017-11-17 13:05:50 -08:00
MerryMage
4c24629b95 Config: Flatten structures
Originally, Layer contained a std::map of Sections, which containted a std::map
containing the (key, value) pairs. Here we flattern this structure so that only
one std::map is required, reducing the number of indirections required and
vastly simplifying the code.
2017-11-15 18:04:40 +00:00
MerryMage
c8f970e2b0 Config: Remove recursive layer 2017-11-15 18:04:40 +00:00
Pierre Bourdon
169028e8f5 IOS: Warn on blocking IPC handlers.
This should help us identify them and figure out which ones need to be
fixed.
2017-11-15 15:34:10 +01:00
Tom Boshoven
1fc7cf3cb4 Off-by-one in SDHC detection
Also update name and description of SDHC constant.
2017-11-14 18:46:41 +01:00
Michael M
1ed7532af8 ControllerInterface: HotplugCallbacks -> DevicesChangedCallbacks 2017-11-10 13:37:42 -08:00
Markus Wick
7e7b5af4c7
Merge pull request #6173 from JosJuice/dtk-savestate
Fix DTK audio not working after loading a savestate
2017-11-08 12:03:05 +01:00
Anthony
835eff15a1
Merge pull request #6162 from JosJuice/nand-check-save-game-name
When NAND is damaged, show title names from save files
2017-11-06 23:11:34 -08:00
JosJuice
b00ef39c1c Fix DTK audio not working after loading a savestate
The main problem was that the volume of the mixer wasn't savestated.
The volume is typically 0 at the beginning of a game, so loading a
savestate at the beginning of a game would lead to silent DTK audio.

I also added savestating to StreamADPCM.cpp.
2017-11-06 09:15:14 +01:00
JosJuice
88d851ca45 Remove "Force Console as NTSC-J"
Nowadays that Dolphin detects regions of discs properly and doesn't
force programs with unknown regions (such as homebrew) into running
under a certain region, the "Force Console as NTSC-J" option is
practically useless for making anything run correctly. Enabling it
is however an easy way to totally break many non-Japanese games.
2017-11-06 08:23:30 +01:00
degasus
3a36c964f5 WiimoteEmu: Don't set pack pragma for STL objects. 2017-11-05 13:13:25 +01:00
degasus
47f7e5b454 WiiUtils: Be more explicit about packing. 2017-11-05 10:52:37 +01:00
JosJuice
6902bbb696 When NAND is damaged, show title names from save files
The earlier code always tried to use TitleDatabase for getting
title names, but that didn't work for disc-based games, because
there was no way to get the maker ID.
2017-11-03 23:17:36 +01:00
Léo Lam
18a947a1bc USB: Work around a gcc bug that affects lambdas
https://stackoverflow.com/questions/32097759
2017-11-03 19:01:49 +01:00
Léo Lam
5d82635449 USB_HIDv5: Implement CancelEndpoint 2017-11-03 19:01:48 +01:00
Léo Lam
22310dfc3e USBv5: Read transfer parameters from the correct vector
This is why static analysis is essential.
2017-11-03 19:01:48 +01:00
Léo Lam
ac3b866083 USB_HIDv5: Submit interrupt transfers to the correct endpoint
Unlike VEN, the endpoint is determined by the value at 8-12.
If it's non-zero, HID submits the request to the interrupt OUT
endpoint. Otherwise, the request is submitted to the IN endpoint.

This commit changes HIDv5 to keep track of endpoints (like IOS does)
and use them when submitting interrupt transfers.
2017-11-03 19:01:48 +01:00
Léo Lam
ff52333b14 USB: Implement HIDv5
This implements /dev/usb/hid v5, found in IOS57, IOS58 and IOS59.

This is an initial implementation that ignores some differences
with VEN because I lack understanding of what IOS is actually doing
sometimes. These are documented on the WiiBrew article:
https://wiibrew.org/wiki//dev/usb/hid_(v5)

One major difference that this implementation handles is about IDs.
It turns out Nintendo has decided to include the interface number in
the top byte of HIDv5 device IDs, unlike VEN -- even though everything
else about ioctl 1 is otherwise the same!
2017-11-03 19:01:48 +01:00
Léo Lam
180ad8076c USB: Move common USBv5 IOS code to prepare for HIDv5
USBv5 IOS resource managers share most of their code. Some ioctls
are even completely the same! So let's separate the common code
from the VEN specific stuff to make HIDv5 easier to implement.
2017-11-03 19:01:48 +01:00
Léo Lam
6bb03d900c USB: Separate the descriptor copy logic
The descriptor copy code is not actually the same in HIDv4 and VEN,
so it did not make a lot of sense to put it in USB/Common.cpp.
Separate and move it to HIDv4 and VEN.

This cleanup is important because there are even more differences
between HIDv4 and HIDv5.
2017-11-03 19:01:48 +01:00
Léo Lam
c6038155cc USB_VEN: Move internal constant to .cpp 2017-11-03 19:01:47 +01:00
Léo Lam
ef8b3cb960 USB_VEN: Construct device IDs properly
Fix the device ID struct to reflect the actual structure used by IOS.

It turns out that offset 2 is the internal device index. The reason
that field seemed to be "0x1e - interface_number" is that IOS only
keeps track of 32 devices and always looks for free entries from
the end of the internal array. With each USB interface being exposed
as a separate USBv5 device, "0x1e - interface_number" was mostly
correct... but wrong!

We also made the assumption that the interface number can be
identified from just a USBV5 device ID, which is definitely not true.
VEN (and HID) keep track of the interface number in the internal struct
instead of "reconstructing" it from the device ID (which is normally
not possible if we were generating IDs correctly)

This commit fixes all of these inaccuracies.
2017-11-03 19:01:47 +01:00
Leo Lam
a58df9fe3d
Merge pull request #6163 from JosJuice/simple-ini-ir
Revert "Convert to/from old EFB scale numbering"
2017-11-03 13:46:40 +01:00
JosJuice
2d3dd5ede7 Revert "Convert to/from old EFB scale numbering"
This reverts commit 1fc910b3ea,
replacing the old INI setting EFBScale with a new INI setting
called InternalResolution, which has a simpler mapping:

                  | EFBScale             | InternalResolution
----------------- | -------------------- | --------------------
Auto (fractional) | 0                    |
Auto (integral)   | 1                    | 0
1x                | 2                    | 1
1.5x              | 3                    |
2x                | 4                    | 2
2.5x              | 5                    |
3x                | 6                    | 3
4x                | 7                    | 4
5x                | 8                    | 5
6x                | 9                    | 6

All the fractional IRs were removed in f090a943.
2017-11-02 21:39:05 +01:00
Léo Lam
f2eee368e0 WiiUtils: Ignore missing contents for DLC titles
It is not possible to tell whether DLC contents are supposed to be
present on the NAND or not, because they're treated as "optional".
So this commit changes the NAND check to not consider missing
contents for DLC titles as an issue.
2017-11-02 17:59:53 +01:00
Léo Lam
1cd4be1d0f WiiUtils: Unify the check and repair functions
Makes it clearer what actions will be taken for every issue
that is found.
2017-11-02 11:34:13 +01:00
Leo Lam
d6ac8ce928
Merge pull request #6147 from sepalani/send-log
Socket: Move IOCTLV_SO_SEND(TO) to INFO_LOG
2017-10-29 10:29:25 +01:00
Sepalani
d49e4044c6 Socket: Move IOCTLV_SO_SEND(TO) to INFO_LOG 2017-10-28 20:13:42 +02:00
Léo Lam
4cc1bd972a CommonTitles: Add a named constant for IOS TIDs 2017-10-24 11:41:55 +02:00
Léo Lam
dedb61e5bf Boot: Install WADs temporarily
Because the Wii NAND size is finite, mark titles that were installed
only for booting as temporary, and remove them whenever we need to
install another title (to make room). This is exactly what the
System Menu does for temporary SD card title data.
2017-10-24 11:41:55 +02:00
Léo Lam
346ca009f9 Remove NANDContentManager 2017-10-24 11:41:54 +02:00
Léo Lam
ff6b3eb9ac [Cleanup] IOS: Clean up the way ARM binaries are loaded
This commit removes the last usage of NANDContentManager in IOS code.

Another cleanup change is that loading ARM (IOS) binaries is now done
by the kernel in the BootIOS syscall, instead of being handled as a
special case in the MIOS code. This is more similar to how console
works and lets us easily extend the same logic to other IOS binaries
in the future, if we decide to actually load them.
2017-10-24 11:41:54 +02:00
Léo Lam
63a52fa707 [Cleanup] IOS/ES: Remove usages of NANDContentManager 2017-10-24 11:41:54 +02:00
Léo Lam
a7e21bca13 IOS/ES: Add a helper function to get a content path 2017-10-24 11:41:54 +02:00
Léo Lam
44fc6d878a IOS/ES: Fix a missing check in ReadCertStore
Without this, some operations can fail when trying to read an existing
cert store, as it may not exist when signature checks are disabled.
2017-10-24 11:41:54 +02:00
Léo Lam
689ed2a0ce [Cleanup] Move FindSignedTicket to IOS/ES
For consistency and because NANDContentManager is going to be removed.
2017-10-24 11:41:54 +02:00
Léo Lam
0476c0e60e [Cleanup] Remove static state in ES 2017-10-24 11:41:54 +02:00
Léo Lam
9000a042e4 Drop the direct WAD launch hack
This removes the hack that enables directly booting from WADs
without installing them first for the following reasons:

1. It makes the NAND content handling much more complicated than what
   it should be and makes future changes like permissions or booting
   NAND titles without a WAD more annoying to implement.

   Because of this hack, we needed an extra level of abstraction
   (NANDContent*) which has to read tons of things from the NAND, even
   most of the time it's useless. This in turn forces us to have
   caching, which is known to break titles and requires manual cache
   invalidations. Annoying and error prone.

2. It prevents the WAD boot code from being easily accurate. With this
   change, we can simply reuse the existing launch code, and ask IOS
   to launch the title from the NAND.

3. The hack did not work that well since it did not cover a lot of ES
   commands. And it works even less since the ES accuracy fixes.
   This results in Dolphin returning inconsistent results: a
   lot of the ES "DI" commands will just fail because the active title
   is not installed on the NAND. uid.sys is not changed, etc.

   And I'm not even talking about FS stuff -- where this would still
   totally fail, unless we add even more unnecessary hacks.

   This is not just theoretical -- the system menu and the Wii Shop are
   known to behave strangely because the hack damages the NAND
   structure, and we've already had several users report issues.

This commit makes it so WADs are always installed prior to launching.
A future commit will remove any code that was there only for the hack.
2017-10-24 11:41:54 +02:00
Léo Lam
60ba382799 Boot: Add support for booting NAND titles with just the ID 2017-10-24 11:41:54 +02:00
Léo Lam
62be010ac6 WiiUtils: Improve the error message on import failure
Now shows the import return code and also skips showing the message
altogether if the user cancelled the import for an unsigned WAD.
2017-10-24 11:41:54 +02:00
Léo Lam
dd5c468c63 WiiUtils: Allow reusing existing IOS/WAD instance 2017-10-24 11:41:54 +02:00
Léo Lam
6a03a24822 WiiUtils: Warn before overwriting during WAD import 2017-10-24 11:41:54 +02:00
Léo Lam
0bdeb63894 WiiUtils: Skip WAD import if it's already installed
The check is fairly quick, and this allows saving a lot of time and
resources for larger WADs.
2017-10-24 11:41:54 +02:00
JMC47
a8bf9c5cbe Fix GameCube Sample Rate
The GameCube's sample rate is slightly different due to a hardware bug.
The exact numbers are (54000000 / 1124) for GameCube and (54000000 / 1125)
on Wii.  I also modified 32KHz mode.  This fixes audio desyncs in several
GameCube games and severe issues in Sonic Mega Collection.
2017-10-23 13:16:40 -04:00
Leo Lam
b002d9d94f Merge pull request #6132 from ligfx/updatecubeb
Externals: update cubeb to kinetiknz/cubeb@c2bd582
2017-10-22 15:39:39 +02:00
Michael M
d6985fc3e8 AudioCommon: rename ClearAudioBuffer(mute) to SetSoundStreamRunning(running) 2017-10-21 16:28:04 -07:00
Michael M
aa40c4a7ce Externals: update cubeb to kinetiknz/cubeb@c2bd582
A bunch of changes, looks mainly like bug fixes and code cleanup.

Notable changes:
- `cubeb_get_min_latency`'s signature was changed to take params via
  pointer, requiring Dolphin code to be tweaked in two places.
- A fix for kinetiknz/cubeb#320, as reported by @shuffle2
- Fixed build on FreeBSD (kinetiknz/cubeb#344), as contributed by @endrift
2017-10-21 14:28:39 -07:00
Leo Lam
d26eda3023 Merge pull request #6096 from leoetlino/wii-fsck
Add a way to check the NAND for issues and fix them
2017-10-11 13:01:39 +02:00
Leo Lam
ceed4d6f93 Merge pull request #6101 from sepalani/symbol-map-data
PPCSymbolDB: Handle data symbols in SymbolMap properly
2017-10-11 13:00:40 +02:00
Léo Lam
02e17594b0 WiiUtils: Attempt to fix the NAND more aggressively
Change the repair logic to fix issues more aggressively by deleting bad
titles. This is necessary because of a bug in Dolphin's WAD boot code.

The UI code was updated to inform the user about titles that will be
deleted if they continue a repair, before deleting anything.
2017-10-08 18:57:58 +02:00
Léo Lam
e1c0b8d011 TitleDatabase: Add GetTitleName for title IDs 2017-10-08 18:31:43 +02:00
Léo Lam
239167245d Add a way to check the NAND for issues and fix them
Old versions of Dolphin are so broken regarding NAND handling that
we need this to repair common issues and avoid issues with titles
like the System Menu or the Wii Shop.

This isn't an exhaustive check, but this will catch most issues
and offer to fix them automatically (if possible).
2017-10-08 18:31:42 +02:00
Léo Lam
2974c56e50 ESFormats: Make Content easier to compare 2017-10-08 18:31:42 +02:00
Vladimir Panteleev
187a599b36
ActionReplay: Fix logging in Subtype_AddCode
The addition was being repeated (for logging) after it was committed
to memory, thus causing bogus values to appear in the log.
2017-10-06 13:17:15 +00:00
Vladimir Panteleev
e691ec126f
ActionReplay: Fix implementation of memory-copy zero codes
This fixes the implementation of the non-standard size-3 zero codes to
conform to kenobi's specification.
2017-10-06 12:47:10 +00:00
Sepalani
f65dcdcdca DebugInterface: Rename InsertBLR to Patch 2017-10-05 20:22:16 +02:00
Sepalani
0a301c0eec PPCSymbolDB: Save data symbols properly
Data symbols were previously saved as function symbols.
2017-10-05 19:55:34 +02:00
Sepalani
aed0ac0543 PPCSymbolDB: Load more SymbolMap symbols
Allows to load data symbols from symbol map files.

Symbols from all sections are loaded.

The data/function symbol type is set accordingly.
2017-10-05 19:55:33 +02:00
Leo Lam
d790660b59 Merge pull request #6088 from leoetlino/personalised-import
IOS: Assume ticket is unpersonalised for WAD imports
2017-10-03 19:59:52 +02:00
JosJuice
db77549502 Show event name when scheduling from wrong thread 2017-09-30 16:14:59 +02:00
Mush Man
0e7e7f6fc6 Change Wii Save Import alerts
Bracketed plurals in dialogue boxes and removed a prompt by moving a
backup message to another warning.
2017-09-29 20:13:14 +10:00
PEmu1
93e1235a54 More Capitalization Changes 2017-09-27 21:37:44 +02:00
Léo Lam
c0c1cb3010 IOS: Assume ticket is unpersonalised for WAD imports
The newer title dumpers don't clobber tickets anymore (that's good!),
which means personalised tickets still have the console specific data
used to decrypt the title key in them. Dolphin should ignore that data
when importing WADs, because the title key has already been decrypted,
and we must not try to decrypt it *again*.
2017-09-27 10:48:52 +02:00
Léo Lam
6484776920 DSP: Fix a missing mask for the predscale register 2017-09-24 20:48:29 +02:00
Léo Lam
de6e807364 DSP: Handle two accelerator loop edge cases properly
There are two special cases that the DSP accelerator handles in a
special way: when the end address is of the form xxxxxxx0 or
xxxxxxx1.

For these two cases, the normal overflow handling doesn't apply.
Instead, the overflow check is different, the ACCOV exception never
fires at all, the predscale register is not updated, reads are not
suspended, and if the end address is 16-byte aligned, the DSP loops
back to start_address + 1 instead of the regular start_address.
2017-09-24 20:48:29 +02:00
Léo Lam
bd03f2e46e DSP: Fix ACCOV not suspending accelerator reads
When an ACCOV is triggered, the accelerator stops reading back anything
and updating the current address until the YN2 register is set.

This is kept track of internally by the DSP; this state is not exposed
via any register.

However, we need to emulate this behaviour correctly because some
ucodes rely on it (notably AX GC); failure to emulate it will result
in reading past the end and start address for non-looped voices.
2017-09-24 20:48:29 +02:00
Léo Lam
8310a672b0 DSP: Fix the predscale update logic
When the current address is xxxxxxxf, after doing the standard ADPCM
decoding and incrementing the current address as usual to get the
next address, the DSP will update the predscale register by reading
2 bytes from memory, and add two to get the next address.

This means xxxxxx10 cannot be a current address, as the DSP goes
from 0f to 12 directly.

A more serious issue with the old code is that if the start address
is 16-byte aligned, some samples will always be skipped, even when
that should not be the case.

An easy way to test whether this behaviour is correct is to check
the current address register and the predscale after each read.

Old code:
...
ACCA=00000002, predscale=<value>
ACCA=00000003, predscale=<value>
...
ACCA=0000000f, predscale=<value>
ACCA=00000010, predscale=<another value>
ACCA=00000013, predscale=<another value>
ACCA=00000014, predscale=<another value>
...

New code (and console):
...
ACCA=00000002, predscale=<value>
ACCA=00000003, predscale=<value>
...
ACCA=0000000f, predscale=<value>
ACCA=00000012, predscale=<another value>
ACCA=00000013, predscale=<another value>
...
2017-09-24 20:48:29 +02:00
Léo Lam
003dba5275 DSP: Convert accelerator to a C++ class
Slightly cleaner, allows DSP accelerator behaviour to be
added to both HLE and LLE pretty easily, and makes the accelerator
easier to unit test.

I chose to include all accelerator state as private members, and
to expose state that is accessible via registers with getters/setters.
It's more verbose, yes, but it makes it very clear what is part of
the accelerator state and what isn't (e.g. coefs).

This works quite well for registers, since the accelerator can do
whatever it wants internally. For example, the start/end/current
addresses are masked -- having a getter/setter makes it easier to
enforce the mask.
2017-09-24 20:48:28 +02:00
Léo Lam
017bfcda2b DSP: Fix gdsp_ifx_write to take a u16 value
And change the JIT to clear the upper 16 bits when calling the write
function to work around bugs in some compilers like clang.
2017-09-24 20:48:28 +02:00
Leo Lam
c9f790dca4 Merge pull request #6072 from JosJuice/eject-disc
Add an option to eject the disc
2017-09-18 12:47:47 +02:00
Pierre Bourdon
3f481a70be Fix sample wrapping with new DSP ADPCM decoding
Fixes possible regression from #6069.
2017-09-18 02:54:58 +02:00
Pierre Bourdon
755253948b Merge pull request #6069 from leoetlino/common-accelerator
DSP: Deduplicate the accelerator code
2017-09-17 23:20:37 +02:00
JosJuice
e4faabb763 Add an option to eject the disc 2017-09-17 11:44:48 +02:00
JosJuice
3c770693a2 DVDInterface: Remove a (mostly) outdated comment 2017-09-17 11:44:32 +02:00
JosJuice
b6bc3bc7c9 Remove DVDInterface::ChangeDiscAsHost
There isn't much point in keeping this utility function around
now that RunAsCPUThread provides a simple way of running things
on the CPU thread.
2017-09-17 11:44:27 +02:00
Léo Lam
7022a18e9a IOS/SSL: Show built-in cert error once per session
See: https://bugs.dolphin-emu.org/issues/10546
2017-09-16 20:43:49 +02:00
Léo Lam
38a7196ec6 DSP: Deduplicate the accelerator code
The logic is entirely the same; only the inputs and outputs are
different, so deduplicating makes sense.

This will make fixing accelerator issues easier.
2017-09-16 16:47:43 +02:00
Leo Lam
7cb8d6612c Merge pull request #5870 from JosJuice/lazy-filesystem
DiscIO: Use Common::Lazy more
2017-09-15 19:30:05 +02:00
Leo Lam
2b4bf8662a Merge pull request #5577 from ligfx/separateexpressionparsingandbinding
ControlReference/ExpressionParser: separate parsing from binding
2017-09-15 19:11:57 +02:00
JosJuice
38304da947 DiscIO: Use Common::Lazy for loading filesystems
This simplifies FileMonitor a lot and also lets us
clean up FilesystemPanel.
2017-09-15 18:57:05 +02:00
Leo Lam
0d07821935 Merge pull request #6024 from ligfx/coreonstatechangedcallback
Qt: use Settings::EmulationStateChanged
2017-09-15 18:45:17 +02:00
Michael M
738acb6c07 FifoRecorder: move function definitions out of header 2017-09-14 17:28:39 -07:00
Michael M
a47ce0d625 FifoRecorder: remove use of volatile 2017-09-14 17:28:39 -07:00
Michael M
31f1c06226 ControlReference: don't reparse expression when references are updated 2017-09-14 12:53:35 -07:00
Michael M
8e805dcbf4 Core: SetOnStoppedCallback -> SetOnStateChangedCallback 2017-09-13 17:30:18 -07:00
Michael M
22a9a08b24 Add Core::State::Starting 2017-09-13 17:30:18 -07:00
Michael M
d217e797f2 move Movie::DoFrameStep to Core::DoFrameStep 2017-09-13 17:30:18 -07:00
gamemasterplc
4908d79a71 Remove Function Address Symbol Mask
The upper 4 bits were masked out of function addresses prior when generating symbols.
2017-09-11 15:39:22 -05:00
Léo Lam
cc40931d64 PPCSymbolDB: Optimise symbol lookups 2017-09-10 11:42:12 +02:00
Léo Lam
8cd8e9d905 JIT: Don't always look up symbols for blocks
With tons of symbols, this results in noticeable stuttering, so
skip lookups if the perf dir option isn't set anyway.
2017-09-10 11:42:12 +02:00
Lioncash
696e1b40b5 Common: Move version strings to their own header
Ideally Common.h wouldn't be a header in the Common library, and instead be renamed to something else, like PlatformCompatibility.h or something, but even then, there's still some things in the header that don't really fall under that label

This moves the version strings out to their own version header that doesn't dump a bunch of other unrelated things into scope, like what Common.h was doing.

This also places them into the Common namespace, as opposed to letting them sit in the global namespace.
2017-09-09 19:28:10 -04:00
Stenzek
b969040534 Merge pull request #5923 from degasus/profiler
JitCommon: Update the block profiler
2017-09-08 18:20:35 +10:00
Léo Lam
a8849f87f1 Core: Fix warnings
Fixes two -Wmissing-declarations warnings
2017-09-07 20:35:17 +02:00
Jonathan Hamilton
7925de66b2 RFC: Call the previously-set sigaction in fastmem handler if it's not our address
This "fixes" the android crash handler, so it now correctly shows a
backtrace and other debug info on crash instead of scary kernel messages
on arm64
2017-09-05 17:37:24 -07:00
Léo Lam
3475ba8918 DSP: Fix missing masking for accelerator registers
Based on hardware tests, masking occurs for the accelerator registers.

This fixes Red Steel and Far Cry Vengeance, which rely on this behavior
when reading back the current playback position from the DSP.
2017-09-04 00:26:13 +02:00
JosJuice
3528c93edf DVDThread: Don't show an error message for all 0-length reads 2017-09-03 15:09:14 +02:00
JosJuice
0341a6052b DVDInterface: Reply to 0-length commands
This regression from the chunking PR was making a few games hang.
2017-09-03 15:09:14 +02:00
degasus
992893ba41 Jit64: Use ImmPtr. 2017-09-02 14:33:07 +02:00
degasus
da79ddbde7 JitArm64: Rewrite Exit functions.
The gpr must not be touched in the Exit functions as they are maybe conditional.
So just allocate everything here manually.
2017-09-02 13:45:24 +02:00
degasus
304e601ad3 JitArm64: Reimplement aarch64 cycle counters.
CNTVCT_EL0 is force-enabled on all linux plattforms.
Windows is untested, but as this is the best way to get *any* low
overhead performance counters, they likely use it as well.
2017-09-02 13:24:37 +02:00
degasus
9080192a65 Jit64: Move profiler to the end of th block.
Within Cleanup(), it is called at *every* end of the block. This generates bigger code,
but it is the only way to handle blocks with multiple exit nodes.
2017-09-02 13:05:58 +02:00
degasus
958b75b707 JitCommon: Restructure the profiler calls. 2017-09-02 13:05:58 +02:00
degasus
8ab34b1a3e Jit64: Inline the profiler calls. 2017-09-02 13:05:58 +02:00
Michael M
b58f8d19ab Rename Common::FifoQueue to Common::SPSCQueue
Since all queues are FIFO data structures, the name wasn't informative
as to why you'd use it over a normal queue. I originally thought it had
something to do with the hardware graphics FIFO.

This renames it using the common acronym SPSC, which stands for
single-producer single-consumer, and is most commonly used to talk about
lock-free data structures, both of which this is.
2017-08-23 17:00:52 -07:00
Léo Lam
52f26d462e WiimoteReal: Fix device handles not being closed
fail.

I have no idea how this didn't cause issues for more people.
2017-08-23 23:05:29 +02:00
Léo Lam
e4ea4da782 IOS: Check for available features when adding devices
Prevents resource managers that shouldn't be visible from being exposed
to titles.

This adds a new function to get features for an IOS version, and also
moves the version checks from the modules themselves to VersionInfo.
This hopefully documents some of the differences between IOS better
and should be slightly cleaner than having random version checks.
2017-08-23 15:18:12 +02:00
Léo Lam
24e7b465be IOS: Rename MemoryValues to VersionInfo 2017-08-23 14:44:51 +02:00
Léo Lam
ef888ef168 WFS: Fix logging types. 2017-08-22 23:41:38 +02:00
Léo Lam
344228ec10 WFSI: Implement noop ioctl 0x8f. 2017-08-22 23:41:38 +02:00
Léo Lam
70cb0cb126 WFSI: Implement GET_VERSION.
This ioctl writes a constant value to the output buffer.
2017-08-22 23:41:38 +02:00
Léo Lam
8a5d24ab4b WFSI: Implement IOCTL_WFSI_IMPORT_TITLE_CANCEL.
It gets called for cleaning up whenever something goes wrong, and
also when cancelling an update.
2017-08-22 23:41:38 +02:00
Léo Lam
5cc18bf116 WFSI: Add missing functionality to ImportTitleInit. 2017-08-22 23:41:38 +02:00
Léo Lam
f0aeeeaef6 WFSI: Implement internal Cancel{Title,Patch}Import. 2017-08-22 23:41:38 +02:00
Léo Lam
c1817b2c6d WFSI: Rename 2 ioctls to better reflect their purposes.
* IOCTL_WFSI_PREPARE_DEVICE -> IOCTL_WFSI_IMPORT_TITLE_INIT
  (equivalent of ES_ImportTitleInit, also the official name)

* IOCTL_WFSI_IMPORT_TITLE -> IOCTL_WFSI_IMPORT_TITLE_CANCEL
  (equivalent of ES_ImportTitleCancel)
2017-08-22 23:41:38 +02:00
Léo Lam
7423563386 WFSI: Fix the TMD size check. 2017-08-22 23:41:37 +02:00
Pierre Bourdon
a641609857 WFSI: Implement patch install finalization. 2017-08-22 23:41:37 +02:00
Pierre Bourdon
76bbfbb511 WFSI: Adapt FINALIZE_TITLE_INSTALL for patch support. 2017-08-22 23:14:00 +02:00
Pierre Bourdon
db24c94c6e WFSI: More work to support patching: split off current_tid/gid and import_tid/gid 2017-08-22 23:14:00 +02:00
Pierre Bourdon
aa445806a5 WFSI: Rename a few ioctl handlers. 2017-08-22 23:14:00 +02:00
Pierre Bourdon
5ed3a3f12d WFSI: Get the patch info from PREPARE_DEVICE. 2017-08-22 23:14:00 +02:00
Léo Lam
e004709b69 WFSI: Implement CHECK_HAS_SPACE. 2017-08-22 23:13:59 +02:00
Léo Lam
15f25783a8 WFS: Implement RENAME. 2017-08-22 23:13:58 +02:00
Pierre Bourdon
2a8d9a53b7 WFS: Share error codes with WFSI. 2017-08-22 23:13:14 +02:00
Pierre Bourdon
e6e00f6c8d WFSI: Implement install finalization. 2017-08-22 23:13:14 +02:00
Pierre Bourdon
88580b8d5f WFSI: Fix install directories creation. 2017-08-22 23:13:14 +02:00
Pierre Bourdon
e79392cb8e WFS: Implement WRITE and WRITE_ABSOLUTE. 2017-08-22 23:13:14 +02:00
Pierre Bourdon
dca70844a6 WFS: Implement CREATE_OPEN along with OPEN. 2017-08-22 23:13:14 +02:00
Pierre Bourdon
ef3232cd74 WFSI: Create meta/work/save dirs when applying title profile. 2017-08-22 23:13:14 +02:00
Pierre Bourdon
c0b3a68441 WFS: Implement MKDIR. 2017-08-22 23:13:13 +02:00
Pierre Bourdon
e45bb77512 WFS: Add a basic GET_ATTRIBUTES implementation. 2017-08-22 23:13:13 +02:00
Pierre Bourdon
56aa3cc558 WFSI: Implement both GET_TMD ioctls. 2017-08-22 23:13:13 +02:00
Pierre Bourdon
c81636d9a8 WFSI: Stub out SET_FST_BUFFER. 2017-08-22 23:13:13 +02:00
Pierre Bourdon
92387cb052 WFS: Implement CLOSE_2 as a clone of CLOSE. 2017-08-22 23:13:13 +02:00
Leo Lam
c12418788a Merge pull request #5963 from JMC47/mtmsrfix
Fix JIT64 mtmsr issue after PIE support.
2017-08-22 22:12:13 +02:00
Nick
3d01eeef00 Fix OSX hotkey defaults 2017-08-22 21:31:19 +02:00
Markus Wick
3094d6531d Merge pull request #5962 from degasus/arm-fixes
JitArm64: Fix rlwinmx.
2017-08-22 20:27:45 +02:00
JosJuice
09f3f9b41a Remove NonCopyable
The class NonCopyable is, like the name says, supposed to disallow
copying. But should it allow moving?

For a long time, NonCopyable used to not allow moving. (It declared
a deleted copy constructor and assigment operator without declaring
a move constructor and assignment operator, making the compiler
implicitly delete the move constructor and assignment operator.)
That's fine if the classes that inherit from NonCopyable don't need
to be movable or if writing the move constructor and assignment
operator by hand is fine, but that's not the case for all classes,
as I discovered when I was working on the DirectoryBlob PR.

Because of that, I decided to make NonCopyable movable in c7602cc,
allowing me to use NonCopyable in DirectoryBlob.h. That was however
an unfortunate decision, because some of the classes that inherit
from NonCopyable have incorrect behavior when moved by default-
generated move constructors and assignment operators, and do not
explicitly delete the move constructors and assignment operators,
relying on NonCopyable being non-movable.

So what can we do about this? There are four solutions that I can
think of:

1. Make NonCopyable non-movable and tell DirectoryBlob to suck it.

2. Keep allowing moving NonCopyable, and expect that classes that
   don't support moving will delete the move constructor and
   assignment operator manually. Not only is this inconsistent
   (having classes disallow copying one way and disallow moving
   another way), but deleting the move constructor and assignment
   operator manually is too easy to forget compared to how tricky
   the resulting problems are.

3. Have one "MovableNonCopyable" and one "NonMovableNonCopyable".
   It works, but it feels rather silly...

4. Don't have a NonCopyable class at all. Considering that deleting
   the copy constructor and assignment operator only takes two lines
   of code, I don't see much of a reason to keep NonCopyable. I
   suppose that there was more of a point in having NonCopyable back
   in the pre-C++11 days, when it wasn't possible to use "= delete".

I decided to go with the fourth one (like the commit title says).
The implementation of the commit is fairly straight-forward, though
I would like to point out that I skipped adding "= delete" lines
for classes whose only reason for being uncopyable is that they
contain uncopyable classes like File::IOFile and std::unique_ptr,
because the compiler makes such classes uncopyable automatically.
2017-08-22 16:40:34 +02:00
JMC47
f7b133b39a Fix JIT64 mtmsr - PIE support caused the codesize
to get bigger, breaking an optimization.  This forces the emitter to use a
32bit pointer instead of an 8bit one, fixing the issue at the expense of
efficiency.
2017-08-22 06:44:38 -04:00
degasus
b00c60618b JitArm64: Fix rlwinmx.
Seems like I was wrong that ANDI2R doesn't require a temporary register here.
There is *one* case when the mask won't fit in the ARM AND instruction:
mask = 0xFFFFFFFF
But let's just use MOV instead of AND here for this case...
2017-08-22 08:47:43 +02:00
Mat M
5aed9a67ef Merge pull request #5904 from leoetlino/indirect-include
PowerPC: Fix indirect includes for GDBStub
2017-08-20 19:59:53 -04:00
Léo Lam
4b4e488189 WFS: Use a separate log type for WFS related logs
Makes it easier to turn off general IOS messages that can be
distracting (e.g. /dev/net/ssl being opened hundreds of time...)
without losing the ability to view WFS messages.
2017-08-16 22:27:29 +02:00
Leo Lam
799b01b6af Merge pull request #5751 from leoetlino/region
Config: Fall back to the system menu region
2017-08-17 03:40:19 +08:00
Leo Lam
a53b01360c Merge pull request #5898 from ligfx/extractupnp
Common: extract UPnP namespace from NetPlayServer
2017-08-17 03:11:41 +08:00
Leo Lam
70931f460d Merge pull request #5929 from JonnyH/PR/fix-oprofile-build-linked-as-needed
Fix OPROFILE linux build with -Wl,--as-needed
2017-08-17 03:06:59 +08:00
Leo Lam
3748384008 Merge pull request #5746 from leoetlino/disc-updates
Add support for installing disc updates from the game list
2017-08-16 19:02:42 +08:00
Sepalani
93b5a5369b SymbolDB: Blank stripped symbol name fixed 2017-08-16 04:07:19 +01:00
Pierre Bourdon
9b79e0ac72 Merge pull request #5930 from delroth/wfs
Fix Dragon Quest X offline mode on Dolphin
2017-08-15 22:40:56 +02:00
Pierre Bourdon
40c70469e5 WFS: Implement GET_HOMEDIR. 2017-08-15 22:35:45 +02:00
Pierre Bourdon
1e75455ef5 WFS: Return a proper ENOENT code on failed OPEN. 2017-08-15 22:35:45 +02:00
Pierre Bourdon
397f5e54e0 WFS: Implement READ_ABSOLUTE (merged with READ implementation). 2017-08-15 22:35:45 +02:00
Pierre Bourdon
49a4712f33 WFS: Implemented the GET_SIZE ioctl. 2017-08-15 22:35:45 +02:00
Pierre Bourdon
2f5ddf12a9 WFS: Normalize paths before opening. 2017-08-15 22:35:45 +02:00
Pierre Bourdon
425cf18bf7 USB: Add a stub HIDv5 implementation and use it for IOS59. 2017-08-15 22:35:45 +02:00
Pierre Bourdon
f810f1edb2 WFS/NAND: Better handle GID. 2017-08-15 22:29:10 +02:00
Pierre Bourdon
f8e5f4296f WFS: Document WFSSRV ioctl 0x0c as being mkdir. 2017-08-15 22:29:10 +02:00
Pierre Bourdon
c14ab0dd53 WFS: Implement current/home path expansion. 2017-08-15 22:29:10 +02:00
Jonathan Hamilton
2a66b88d01 Fix OPROFILE linux build with -Wl,--as-needed
The opagent library was (incorrectly) marked as a dependency for "Core"
instead of "Common".

When linked with --as-needed, any symbols the linker can tell are not
used are discarded. As the link is done in command-line order, and the
Core library (and dependencies) are processed before Common, it would
link in Core, then opagent, but as at that point no opagent symbols are
used the whole opagent library would be discarded.

Moving the opagent library to be a dependency of Common fixes this, as
after the Common library is linked, there *are* opagent symbols used.
2017-08-14 14:38:44 -07:00
Michael M
b5d070b0cf NetPlayServer: handle port forwarding in constructor 2017-08-13 18:50:52 -07:00
Michael M
4b50e77a26 NetPlayClient/Server: apply Parameter Object pattern to traversal parameters 2017-08-13 18:50:52 -07:00
Michael M
3386543a9c Common: extract UPnP namespace from NetPlayServer 2017-08-13 18:50:51 -07:00
Markus Wick
06da1973a8 Merge pull request #5919 from degasus/arm
JitArm64: Small performance optimizations.
2017-08-14 00:01:27 +02:00
Markus Wick
f92562c652 Merge pull request #5917 from degasus/cmp
JitArm64: Fix and improve the cmpXX instructions.
2017-08-14 00:00:54 +02:00
Pierre Bourdon
5a4900bc96 WFS: Stub WFSSRV's flush command. 2017-08-12 15:17:34 +02:00
Pierre Bourdon
f3224dc726 WFS: Stub out unimplemented ioctl 0x08. 2017-08-12 15:17:34 +02:00
Pierre Bourdon
f0ba0f617f WFS: Fix shutdown behavior with long hanging requests. 2017-08-12 15:17:34 +02:00
Pierre Bourdon
385f063be1 ES: Split out GetTitleId to a separate method. 2017-08-12 15:17:34 +02:00
Pierre Bourdon
58624ef409 ES: Fix wrong log message. 2017-08-12 15:17:34 +02:00
Markus Wick
d791e5d3a8 JitArm64: Use the updated wrappers.
They are faster, no need to use the slow path in the CPU.
2017-08-12 00:00:41 +02:00
Markus Wick
5ee7f86199 JitArm64: Optimize rlwinmx.
The new code adds fast paths for most usages which fits in one
instruction with one cycle latency.
2017-08-12 00:00:41 +02:00
Markus Wick
ec5cfd2aae JitArm64: Update CR helpers to reflect their usage.
This helpers are not for general CR calculation, they are just for the
common case of the sign extended result of integer instructions if the
rc bit is set.
They must not be used by other instructions like cmp, so there is no
need to be as flexible.
2017-08-11 21:17:13 +02:00
Markus Wick
7d4c14feba JitArm64: Fix and improve the cmpXX instructions. 2017-08-11 21:17:13 +02:00
Ryan Meredith
7154c0f0ff m_bt_wiimote_motor rename and tooltip addition 2017-08-11 15:15:51 -04:00
Markus Wick
b89e4b5258 Interpreter: Fix cmpi.
cmpi shall compare two signed 32 bit values. The used difference a-b
may overflow and so the resulting 32 bit value can't represent it.
A correct way would be cr = s64(a) - s64(b) and it should be done in
this way in the JITs, but the Interpreter shall implement the most
readable way.

Also drops the now unused helper function.
2017-08-11 17:35:22 +02:00
Leo Lam
5767309670 Merge pull request #5914 from sepalani/rso-data
RSO: Import data symbols
2017-08-11 21:02:28 +08:00
Léo Lam
1bd7fefec1 Config: Set DOL/ELF region to UNKNOWN
This allows the region to be chosen by the user.
2017-08-11 20:28:33 +08:00
Léo Lam
bec35b287e Config: Fall back to the system menu region
Since we don't want users to have to configure the region manually
and always enforce one automatically, we should fall back to a region
that was likely to be chosen by the user instead of always using
PAL whenever the title region cannot be detected.

Dolphin doesn't mess with installed NAND titles like the system menu,
so it is a reliable indicator of what region the user wants.
2017-08-11 20:28:33 +08:00
Leo Lam
c91211b6ce Merge pull request #5867 from leoetlino/widescreen
GameINI: Replace Wii.Widescreen with AspectRatio
2017-08-11 18:23:54 +08:00
Léo Lam
940cc843ed Config: Fix Movie config loading/saving
* Add missing Language setting loading/saving. This was added after the
  original OnionConfig PR, which is why support for it was missing.

* Change MovieConfigLoader to reuse ConfigInfos. Less duplication.

* Extract MovieConfigLoader::Save into SaveToDTM. The DTM should use
  the current config and not just the movie layer. This makes more
  sense than just saving the movie layer, which may not always exist,
  and also fixes a crash that would happen when creating a new
  recording because the movie layer wouldn't exist in that case.

  (Plus, having to get the loader from the layer and call ChangeDTM
  on it manually is not very pretty.)
2017-08-11 15:36:32 +08:00
Léo Lam
fa7e3e55d2 Config: Add MainSettings
Not really used anywhere yet, but useful for not having to duplicate
config locations and for getting rid of conflicts when I get around
to rebase my Main.Core and Main.DSP porting PR.
2017-08-11 15:36:32 +08:00
Léo Lam
b2c41cec0a Config: Include SYSCONF in base layer
Settings that come from the SYSCONF are now included in Dolphin's
config system as part of the base layer. They are handled in a
special way compared to other settings to make sure they are only
loaded from and saved to the SYSCONF (to avoid different, possibly
contradicting sources of truth).
2017-08-11 15:36:31 +08:00
Sepalani
ae4790ff25 RSO: Import data symbols 2017-08-10 21:30:32 +01:00
Michael M
fcb1eb9d3b dsp_rom: skip bootucode_ax when running from entrypoint
This could cause the first branch of the bootucode procedure, which
takes its parameters from the AX registers, to run during the ROM init
sequence. Since the ROM doesn't set any of the AX registers, the values
aren't meaningful, and can cause bad DMA transfers and crashes.
2017-08-10 10:53:12 -07:00
Léo Lam
916deb9004 WiiUtils: Add a disc updater 2017-08-10 23:47:18 +08:00
Léo Lam
5976d3934d WiiUtils: Refactor InstallWAD
Allows using an existing instance of IOS and WiiWAD.
2017-08-10 23:47:18 +08:00
Léo Lam
bc588948c9 WiiUtils: Move ShouldInstallTitle to the online updater
The disc updater uses different conditions.
2017-08-10 23:47:18 +08:00
Léo Lam
71f403d05b BTBase: Fix a file deletion issue on Windows
> The process cannot access the file because it is being used by another process.
2017-08-10 23:30:52 +08:00
Leo Lam
e41a9905c0 Merge pull request #5744 from JosJuice/remove-non-integer-irs
Remove non-integer IRs
2017-08-10 17:10:26 +08:00
Leo Lam
15e46cb216 Merge pull request #5900 from ligfx/fixupnpinit
Fix UPnP init
2017-08-10 14:41:50 +08:00
Michael M
6faacbeea5 TraversalClient: make FailureReason an enum class 2017-08-08 15:29:56 -07:00
JosJuice
1fc910b3ea Convert to/from old EFB scale numbering 2017-08-08 12:09:50 +02:00
JosJuice
f090a94319 Remove non-integer IRs 2017-08-08 12:09:50 +02:00
Léo Lam
e10e42c09e PowerPC: Fix indirect includes for GDBStub 2017-08-08 17:47:20 +08:00
Michael M
9e81fec816 NetPlayServer: encapsulate m_upnp_inited in initUPnP() 2017-08-07 11:35:13 -07:00
Michael M
6a8c0ca70b NetPlayServer: actually set m_upnp_inited 2017-08-07 11:35:13 -07:00
Leo Lam
a25f7b9b4c Merge pull request #5892 from leoetlino/sysmenu-emu-fixes
Boot/BS2: Accuracy fixes
2017-08-08 01:33:05 +08:00
JosJuice
cbe43e58a7 Merge pull request #5890 from leoetlino/sd-fixes
IOS/SDIO: Small fixes
2017-08-07 17:03:18 +02:00
Michael M
2abf13ae36 NetPlayServer: remove goto statements 2017-08-06 23:06:38 -07:00
Léo Lam
9f36499f9e IOS/SDIO: Make GetCSDv1/v2 const member functions 2017-08-07 00:48:51 +08:00
Léo Lam
c24418a822 IOS/SDIO: Fix warnings about missing braces 2017-08-07 00:48:16 +08:00
Léo Lam
d86d5d62ad IOS/SDIO: Add missing save calls in DoState 2017-08-07 00:48:16 +08:00
Léo Lam
6d73c3e8e3 Boot/BS2: Don't write part of the debugger hook
Writing to 0x60 does actually not "init exception[s]" or anything like
that. Not at all. Rather, it *breaks* a check in Nintendo's SDK, which
makes it fail to realise that the hook hasn't been set up.

This prevents the SDK initialisation routines from writing the rest of
the hook instructions (total: 0x20 bytes), which in turn causes an
anti-piracy check to fail in some Ubisoft games (including Tintin).

Dolphin can be really amazing sometimes.
2017-08-07 00:36:35 +08:00
Léo Lam
d612416ce8 Boot/BS2: Write to 0x3194 and 0x3198 2017-08-07 00:36:35 +08:00
Léo Lam
0bdcabdfa9 Boot/BS2: Write the "devkit boot program version" 2017-08-07 00:36:34 +08:00
Léo Lam
81b298f747 Boot/BS2: Set the proper value for 0x000030d8
No clue where people got the 0 value from, or why it's labelled as
"time". As far as I can tell, it is always set to 0xffffffff by
official NAND titles, including the system menu.
2017-08-07 00:36:34 +08:00
Léo Lam
29b1276548 Boot/BS2: Update state file 2017-08-07 00:36:34 +08:00
Léo Lam
363bf27cce Boot/BS2: Write empty play record 2017-08-07 00:36:34 +08:00
Léo Lam
8489d9da90 Boot: Move StateFlags from Boot_WiiWAD to Boot
It's not specific to WADs. The BS2 emulation boot code will also need
to update the state file.

Move the struct to Boot and add a helper function that will handle
reading + computing the checksum + writing the state file.
2017-08-07 00:36:34 +08:00
Leo Lam
84ecc0ecc9 Merge pull request #5842 from TBoshoven/sdhc-support
Add support for SDHC
2017-08-06 11:17:50 +08:00
Tom Boshoven
10c615d7db Added proper SDHC initialization to protocol v2. 2017-08-05 19:55:08 +02:00
Tom Boshoven
b29c8c1a63 Redid initialization logic.
Looks like initialization is done automatically by IOS versions that support SDHC.
2017-08-05 18:51:24 +02:00