Commit Graph
68 Commits
Author SHA1 Message Date
JMC47andGitHub 72397ccd87 Merge pull request #13909 from Dentomologist/codewidgets_show_code_approval_in_hardcore_mode
CodeWidgets: Show code approval in Hardcore mode
2025-09-28 14:01:59 -04:00
Martino Fontana 64a20c74fc PatchEngine: OSD message showing number of enabled patches and cheats 2025-08-30 16:51:51 +02:00
Dentomologist 44f6743a5b CodeWidgets: Show code approval in Hardcore mode
When Hardcore mode is enabled, show an icon for each code in
ARCodeWidget and GeckoCodeWidget indicating whether it's an approved
code or not.
2025-08-25 12:31:38 -07:00
LillyJadeKatrin 0615ade725 Fixed Multi Config Code Approvals
Refactors the AR/Gecko/Patch code approval process to verify from every possible game ini, not just the base game ID. This fixes codes on specific revisions or codes general to any region.
2025-03-15 07:57:16 -04:00
LillyJadeKatrin 13a1956cfa Add Gecko Code Whitelist Approval 2024-11-27 21:21:25 -05:00
mitaclaw 5a95951751 DolphinQt: Signal Host::JitCacheInvalidation in more places 2024-10-23 23:43:25 -07:00
mitaclaw e8d5fb89e4 C++20: Synthesize operator!= From operator==
The inequality operator is automatically generated by the compiler if `operator==` is defined.
2024-10-10 20:23:55 -07:00
mitaclaw 671958f141 GeckoCode: Remove Dead Code 2024-09-21 15:33:40 -07:00
mitaclaw cf74c0d683 PPCCache: Avoid Global System Accessor 2024-04-08 19:49:57 -07:00
Admiral H. Curtiss 9a3e770c23 Migrate SConfig::bWii to System. 2024-01-31 12:54:07 +01:00
Lioncache cea58759d9 Core/GeckoCode: unsigned int -> u32
Same thing for all intents and purposes, less to read.
2023-12-18 16:39:04 -05:00
Lioncache bb866248cf Core/GeckoCode: Avoid signed conversion in RunCodeHandler()
i is being used alongside unsigned types, so it should be unsigned as well.
2023-12-18 16:38:41 -05:00
Lioncache 1ceaa8c52a Core/GeckoCode: Remove global system accessor
We can use the CPUThreadGuard instance to retrieve the system instance instead.
2023-12-18 16:35:52 -05:00
LillyJadeKatrin 3aebbbb3e7 Disable cheats in hardcore mode
RetroAchievements does not allow cheats such as Action Replay or Gecko in hardcore mode, for fairness.
2023-12-02 16:41:17 -05:00
Admiral H. Curtiss 8dabd1a025 PowerPC/MMU: Refactor to class, move to System. 2023-03-28 03:47:51 +02:00
JosJuice 7cecb28bdf DolphinQt: Properly lock CPU before accessing emulated memory
This fixes a problem I was having where using frame advance with the
debugger open would frequently cause panic alerts about invalid addresses
due to the CPU thread changing MSR.DR while the host thread was trying
to access memory.

To aid in tracking down all the places where we weren't properly locking
the CPU, I've created a new type (in Core.h) that you have to pass as a
reference or pointer to functions that require running as the CPU thread.
2023-02-12 11:27:50 +01:00
Lioncash adb4c0492d Core/GeckoCode: Make use of std::span where applicable
Generifies the interface a little by not strictly requiring the use of
std::vector.
2023-01-30 12:53:50 -05:00
Admiral H. Curtiss 30de91d843 GeckoCode: Avoid ppcState global. 2023-01-27 15:22:46 +01:00
Admiral H. Curtiss 0a343007cb PowerPC: Parametrize LR macro. 2023-01-27 15:22:43 +01:00
Admiral H. Curtiss 0f301829d2 PowerPC: Remove rPS macro. 2023-01-27 15:22:42 +01:00
Admiral H. Curtiss 8fccefa3aa PowerPC: Remove GPR macro. 2023-01-27 15:22:42 +01:00
Admiral H. Curtiss 2f3187eba9 PowerPC: Remove NPC macro. 2023-01-27 15:22:41 +01:00
Admiral H. Curtiss be8d0b76ca PowerPC: Remove PC macro. 2023-01-27 15:22:41 +01:00
JosJuice fa0525f826 Port Enable Cheats to the new config system 2021-08-11 18:07:43 +02:00
Pierre Bourdon e149ad4f0a treewide: convert GPLv2+ license info to SPDX tags
SPDX standardizes how source code conveys its copyright and licensing
information. See https://spdx.github.io/spdx-spec/1-rationale/ . SPDX
tags are adopted in many large projects, including things like the Linux
kernel.
2021-07-05 04:35:56 +02:00
Lioncash a8b0661fb0 Core: Make use of C++17 deduction guides with locks
C++17 allows omitting the mutex type, which makes for both less reading
and more flexibility (e.g. The mutex type can change and all occurrences
don't need to be updated).
2020-12-29 16:06:17 -05:00
Lioncash 958cbf38a4 Core: Convert logging over to fmt pt. 1
Converts up to the DSP-related files for easier reviewing, the rest will
be progressively moved over after this change gets merged.
2020-11-19 14:21:06 -05:00
CrystalGamma e3075f3834 PowerPC: Factor out CR helpers into POD class 2019-03-08 20:42:09 +01:00
Lioncash 244d083f0e PowerPC: Remove separate macros for paired singles
Previously, PowerPC.h had four macros in it like so:

\#define rPS0(i) (*(double*)(&PowerPC::ppcState.ps[i][0]))
\#define rPS1(i) (*(double*)(&PowerPC::ppcState.ps[i][1]))

\#define riPS0(i) (*(u64*)(&PowerPC::ppcState.ps[i][0]))
\#define riPS1(i) (*(u64*)(&PowerPC::ppcState.ps[i][1]))

Casting between object representations like this is undefined behavior.
Given this is used heavily with the interpreter (that is, the most
accurate, but slowest CPU backend), we don't exactly want to allow
undefined behavior to creep into it.

Instead, this adds a helper struct for operating with the paired singles,
and replaces the four macros with a single macro for accessing the
paired-singles/floating-point registers.

This way, it's left up to the caller to explicitly decide how it wants to interpret
the data (and makes it more obvious where different interpretations of
the same data are occurring at, as there'll be a call to one of the
[x]AsDouble() functions).
2018-12-25 10:35:09 -05:00
Vin BertinelliandPierre Bourdon 469f29350f Netplay: Sync codes
Adds a tickbox to the server's window to syncronize codes. Codes
are temporarily sent to each client and are used for the duration of the
session.

Saves the "sync codes" tickbox as per PR Netplay: Properly save hosting
settings #7483
2018-10-29 23:00:51 +01: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
spycrab 40bb9974f2 Reformat all the things! 2018-04-12 21:28:39 +02:00
Lioncash dd4203bec8 Core: Remove unnecessary includes
Also moves a cpp file's related header file to the top of the inclusions if it isn't already there.
2017-06-15 18:52:22 -04:00
Leo LamandGitHub dda42c3c92 Revert "GeckoCode: install code handler even if no codes are activated" 2017-06-03 22:52:42 +02:00
XeR d30eb7ea70 GeckoCode: install code handler even if no codes are activated
This let users use the gecko code handler debugging protocol with existing
tools even when no gecko codes are enabled.
2017-05-19 23:54:22 +02:00
Lioncash e8cd5a3979 GeckoCode: Provide operator== and operator!= overloads
Same thing but allows both GeckoCode and Code to be utilized directly
without predicates for equality/inequality in stardard algorithms

The size check for std::vectors is unnecessary, as this is built into std::vector's operator==
2016-10-03 02:32:43 -04:00
EmptyChaos 09372a55da GeckoCode: Save installation state to savestates
Because of the way this works, randomly overwriting the handler
when loading a savestate will break things because of the
self-modifying nature of the handler.
2016-10-03 16:27:42 +11:00
EmptyChaos b3547870ee PatchEngine/GeckoCode: Heuristic stack checks
Try to make sure the stack is sane before calling into the
codehandler. This is intended to reduce the possibility of random
memory corruption.
2016-10-03 16:27:42 +11:00
EmptyChaos c3cef54910 PatchEngine: Handle MSR more cleanly
Instead of fiddling with the MSR value, just reschedule and try again
after the game fixes it itself.
2016-10-03 16:27:42 +11:00
EmptyChaos 83407263e5 HLE/GeckoCode: Add new HLE hook exit trampoline
Dolphin emulates GeckoCodes by fiddling with the CPU state when a
VI Interrupt occurs. The problem with this is that we don't know
where the PC is so it's non-deterministic and not necessarily
suitable for use with the codehandler.

There are two options: Patch the game like Gecko OS either directly
or using HLE::Patch, or use a trampoline so we can branch from any
PC even if it would otherwise not be valid. The problem with Gecko OS
patches is there are 10 of them and they have to be configured
manually (i.e. Game INIs to would need to have a [Core]GeckoHookType
property).

HLE_Misc::GeckoReturnTrampoline enables the Code Handler to be
entered from anywhere, the trampoline restores all the registers that
had to be secretly saved to the stack.
2016-10-03 16:27:42 +11:00
EmptyChaos 249d8a76e1 GeckoCode: Don't spam retry after the install fails
If the installation fails because codehandler.bin is missing or
unusable then Dolphin will try again every single frame even though
it's highly unlikely a disk file will have changed. Better to just
fail once then only try again when the active code set is changed.

Suppresses generating 60 log messages per second.
2016-10-03 16:27:42 +11:00
EmptyChaos 541a42a7e3 GeckoCode: Use named constants in ICache flush hack
Turns out one of the magic numbers was very magic. The gameid is
an ad-hoc comm protocol with HLE_Misc to control the number of times
the ICache is reset.
2016-10-03 16:27:18 +11:00
EmptyChaos 4fef9d8d64 GeckoCode: Don't truncate codes that won't fit
The code table builder cuts off the end of codes that won't fit
after already writing part of it. That seems quite unlikely to
work the way anyone would find useful since the codes can contain
actual PPC instructions.
2016-10-03 16:27:18 +11:00
EmptyChaos e91c0222b4 GeckoCode: Cleanup
The active codes vector cannot safely be used outside the mutex,
move the lock out into RunCodeHandler. s_code_handler_installed was
also racing against SetActiveCodes since it's being written both
inside and outside the lock.

General cleanup. Add s_ prefixes, use constexpr, remove C casts.
2016-10-03 16:27:18 +11:00
EmptyChaos cf8ac5c09c GeckoCode: Don't run PPC code in a CoreTiming callback
Executing PPC code inside an external events callback is a bad idea.
CoreTiming::Advance does not support recursion properly which will
cause timing glitches. The interpreter has a slice length hack that
counters this but without it this would cause a 20000 cycles time
skip. It isn't clear what this was supposed to accomplish that just
changing the current PC would not. Changing the PC works fine.
2016-10-03 16:26:30 +11:00
aldelaro5 f0aa9b3751 Reorganise a ton of logs level
Most of this commits changes performance decreasing logs from info to debug and also cleans up innacurate levels.
2016-10-01 15:50:28 -04:00
Pierre Bourdon 3570c7f03a Reformat all the things. Have fun with merge conflicts. 2016-06-24 10:43:46 +02:00
degasus c375111076 Options: merge SCoreStartupParameter into SConfig 2015-06-12 19:07:45 +02:00
Lioncash d9b51f74be Core: Pass several parameters by const reference 2015-06-04 14:19:25 -04:00
Rohit Nirmal c59bfd2b7f Fix building with PCH disabled. 2015-05-26 22:44:51 -05:00