<feed xmlns='http://www.w3.org/2005/Atom'>
<title>dolphin/Source/Core/Common/Debug/MemoryPatches.cpp, branch 2506a</title>
<subtitle>GameCube and Wii emulator</subtitle>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/'/>
<entry>
<title>Simplify `std::find_if` with `std::ranges::find` and projections</title>
<updated>2025-03-09T20:26:35+00:00</updated>
<author>
<name>mitaclaw</name>
<email>140017135+mitaclaw@users.noreply.github.com</email>
</author>
<published>2024-09-21T21:43:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=62b2b939b5825e48c89b8a3ebb97d9fc38cb59e5'/>
<id>62b2b939b5825e48c89b8a3ebb97d9fc38cb59e5</id>
<content type='text'>
In LabelMap.cpp, the code is currently unused so I was unable to test it.

In WiiUtils.cpp, the magic value `1u` was replaced by the constant value `DiscIO::PARTITION_UPDATE`.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
In LabelMap.cpp, the code is currently unused so I was unable to test it.

In WiiUtils.cpp, the magic value `1u` was replaced by the constant value `DiscIO::PARTITION_UPDATE`.
</pre>
</div>
</content>
</entry>
<entry>
<title>Modernize `std::any_of` with ranges</title>
<updated>2024-12-16T03:54:16+00:00</updated>
<author>
<name>mitaclaw</name>
<email>140017135+mitaclaw@users.noreply.github.com</email>
</author>
<published>2024-10-01T00:26:50+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=140252ffc0ae71e8b5309bff7d6550189c602702'/>
<id>140252ffc0ae71e8b5309bff7d6550189c602702</id>
<content type='text'>
In WiimoteReal.cpp, JitRegCache.cpp, lambda predicates were replaced by pointers to member functions because ranges algorithms are able invoke those.

In ConvertDialog.cpp, the `std::mem_fn` helper was removed because ranges algorithms are able to handle pointers to member functions as predicates.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
In WiimoteReal.cpp, JitRegCache.cpp, lambda predicates were replaced by pointers to member functions because ranges algorithms are able invoke those.

In ConvertDialog.cpp, the `std::mem_fn` helper was removed because ranges algorithms are able to handle pointers to member functions as predicates.
</pre>
</div>
</content>
</entry>
<entry>
<title>DolphinQt: Properly lock CPU before accessing emulated memory</title>
<updated>2023-02-12T10:27:50+00:00</updated>
<author>
<name>JosJuice</name>
<email>josjuice@gmail.com</email>
</author>
<published>2023-02-12T10:07:11+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=7cecb28bdf6443362a6ab20e0042ddb3b407ebec'/>
<id>7cecb28bdf6443362a6ab20e0042ddb3b407ebec</id>
<content type='text'>
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.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
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.
</pre>
</div>
</content>
</entry>
<entry>
<title>Core: add ability to add memory patches to the patch engine that will be executed each frame</title>
<updated>2022-12-23T09:13:03+00:00</updated>
<author>
<name>iwubcode</name>
<email>iwubcode@users.noreply.github.com</email>
</author>
<published>2022-12-22T23:38:08+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=2f2f906bf567ab6d89e10161c62404a1dcd8ee1e'/>
<id>2f2f906bf567ab6d89e10161c62404a1dcd8ee1e</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Make SetPatch responsible for overwriting old patches</title>
<updated>2022-10-27T03:46:49+00:00</updated>
<author>
<name>JoshuaMK</name>
<email>60854312+JoshuaMKW@users.noreply.github.com</email>
</author>
<published>2022-10-23T23:44:12+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=e2f4400f4941def98af3e2b30696f531baada7a7'/>
<id>e2f4400f4941def98af3e2b30696f531baada7a7</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Have UnsetPatch only unset the argument address</title>
<updated>2022-10-23T23:42:34+00:00</updated>
<author>
<name>JoshuaMK</name>
<email>60854312+JoshuaMKW@users.noreply.github.com</email>
</author>
<published>2022-10-23T23:42:34+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=2594447c2589a2575d71129291151fb99b9a1f3f'/>
<id>2594447c2589a2575d71129291151fb99b9a1f3f</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix patch corruption using find_if instead of remove_if</title>
<updated>2022-10-23T23:41:15+00:00</updated>
<author>
<name>JoshuaMK</name>
<email>60854312+JoshuaMKW@users.noreply.github.com</email>
</author>
<published>2022-10-23T23:41:15+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=e10b3308c2b5b046f138f534477068d857e2b5c8'/>
<id>e10b3308c2b5b046f138f534477068d857e2b5c8</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>treewide: convert GPLv2+ license info to SPDX tags</title>
<updated>2021-07-05T02:35:56+00:00</updated>
<author>
<name>Pierre Bourdon</name>
<email>delroth@gmail.com</email>
</author>
<published>2021-07-05T01:22:19+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=e149ad4f0a9874f354221a7fc76d8f1841e47808'/>
<id>e149ad4f0a9874f354221a7fc76d8f1841e47808</id>
<content type='text'>
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.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
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.
</pre>
</div>
</content>
</entry>
<entry>
<title>Common/MemoryPatches: Silence variable shadowing warnings</title>
<updated>2018-06-20T01:33:50+00:00</updated>
<author>
<name>Lioncash</name>
<email>mathew1800@gmail.com</email>
</author>
<published>2018-06-20T01:21:52+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=dddac76b8ce68ddf3f6fdfbe8e5ed0c992ceef46'/>
<id>dddac76b8ce68ddf3f6fdfbe8e5ed0c992ceef46</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>MemoryPatches: In-class initialize is_enabled state for MemoryPatch instances</title>
<updated>2018-05-29T22:04:06+00:00</updated>
<author>
<name>Lioncash</name>
<email>mathew1800@gmail.com</email>
</author>
<published>2018-05-29T22:03:12+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=397b27e6652a3f81875669036ac0e50aaea6bb48'/>
<id>397b27e6652a3f81875669036ac0e50aaea6bb48</id>
<content type='text'>
Given this is what occurs in both constructors (as one just passes
through to another), we can just initialize the member directly.

While we're at it, amend the struct to follow the general ordering
convention of:

&lt;new types&gt;
&lt;functions&gt;
&lt;variables&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Given this is what occurs in both constructors (as one just passes
through to another), we can just initialize the member directly.

While we're at it, amend the struct to follow the general ordering
convention of:

&lt;new types&gt;
&lt;functions&gt;
&lt;variables&gt;
</pre>
</div>
</content>
</entry>
</feed>
