Commit Graph

33561 Commits

Author SHA1 Message Date
JMC47
dcbcfed12a
Merge pull request #14499 from JosJuice/gpu-desync-no-report
Remove "please report it to the developers" from unknown opcode message
2026-03-25 13:31:55 -04:00
Ma-Rang
7ef7b6e3e9 NoGUI: Add Escape key to close emulation on Windows
PlatformX11 already handles XK_Escape to trigger RequestShutdown().
Add the equivalent WM_KEYDOWN / VK_ESCAPE handler to PlatformWin32
for parity.
2026-03-25 08:56:29 -05:00
Dentomologist
81192d96cf
Merge pull request #14498 from JosJuice/invalid-access-wording
Reword the invalid read/write panic alert
2026-03-24 20:07:47 -07:00
JosJuice
ff4a7c8a95 Reword the invalid read/write panic alert
Some users seem to be under the impression that the panic alert is
saying that enabling MMU will fix the issue, but that's not what it
actually says. Let's try to make this a bit clearer.
2026-03-24 22:25:01 +01:00
Dentomologist
f5dfb7e3d3 AudioCommon: Use left const for non-pointer variables 2026-03-23 16:30:30 -07:00
Sintendo
f6a67aa6e7 Use more std::span arguments 2026-03-23 23:55:09 +01:00
Jordan Woyak
c05b231015
Merge pull request #14496 from Dentomologist/audiopane_fix_wasapi_default_device_combo_selection
AudioPane: Fix WASAPI default device combo selection
2026-03-23 15:27:29 -05:00
Jordan Woyak
cddffd2e2a
Merge pull request #14497 from JosJuice/linux-gba-select
Fix default GBA Select binding on Linux
2026-03-22 16:11:25 -05:00
JosJuice
f2055fe0b8 Remove "please report it to the developers" from unknown opcode message
I think we've gotten all the useful reports we can get from this now.
Nowadays we're just getting repeated reports of issues we already know
about, like https://bugs.dolphin-emu.org/issues/12321.
2026-03-22 14:23:46 +01:00
JosJuice
5af4fedd92 Fix default GBA Select binding on Linux 2026-03-22 13:51:01 +01:00
JMC47
85e63dc32f
Merge pull request #14482 from jordan-woyak/triforce-ic-card
Triforce: ICCardReader and DeckReader improvements.
2026-03-21 23:57:05 -04:00
Dentomologist
6b2a8eff15 AudioPane: Fix WASAPI default device combo selection
Set the default value of `Config::MAIN_WASAPI_DEVICE` to `default`
instead of `Default`. This fixes an issue where `AudioPane`'s `Output
Device` combo would be blank if `WASAPI` was selected and the user had
never changed the value of `Output Device`.

We don't have to worry about backward compatibility with users who have
`Default` in their config because config values aren't written unless
they've been changed at some point from the default, and the combo has
always saved `default` instead of `Default`.

Audio still worked during emulation in this situation because the
fallback for an unrecognized device name is the default device.

To help prevent similar situations in the future references to
`MAIN_WASAPI_DEVICE`'s default value now call `GetDefaultValue` instead
of hardcoding the expected default, or use the new helper function
`Config::IsDefaultValue`.
2026-03-21 15:07:42 -07:00
OatmealDome
26e58ea349
VulkanContext: Drop support for BUG_BROKEN_DISCARD_WITH_EARLY_Z workaround 2026-03-21 11:16:15 -04:00
OatmealDome
5a94e63e42
UberShaderPixel: Fix missing check for framebuffer fetch for BUG_BROKEN_DISCARD_WITH_EARLY_Z workaround 2026-03-21 11:16:15 -04:00
OatmealDome
98ca653774
DriverDetails: Mark BUG_BROKEN_DISCARD_WITH_EARLY_Z as fixed in macOS 14.0+ 2026-03-21 11:16:15 -04:00
OatmealDome
750c6ed705
DriverDetails: Use macOS version as the driver version 2026-03-21 11:16:14 -04:00
OatmealDome
36d8dbc590
CommonFuncsObjC: Make function to fetch the current macOS version common 2026-03-21 11:16:14 -04:00
TellowKrinkle
56845b2b93 VideoCommon: Fix no mips hack 2026-03-21 00:35:06 -05:00
Lilly Jade Katrin
529b696fcb Remove AchievementManager ChangeDisc call from Eject
This was causing the achievement runtime to shutdown in the middle
of a disc change even if the resulting disc was valid, which was
causing achievements like the ones in Resident Evil for completing
the entire game in a single session to break midway through.

Also adds a log to notify the user when the disc change is invalid
(e.g. different game inserted).
2026-03-20 21:42:05 -04:00
Jordan Woyak
680ee9b65f State: Increase STATE_VERSION. 2026-03-19 21:35:31 -05:00
Jordan Woyak
85400539ba Triforce: ICCardReader and DeckReader improvements.
Significantly rewrote ICCardReader and DeckReader functionality.
Dual IC card slots of VirtuaStriker4 + Gekitou now work.
IC cards are automatically inserted/ejected in VirtuaStriker4 + Gekitou + Avalon.
IC card data is saved to a file.
Avalon deck contents are loaded from a JSON file.
Added IOPorts class to handle bespoke GPIO functionality.
2026-03-19 21:35:31 -05:00
Jordan Woyak
b5bc70a6cc Triforce/SerialDevice: Add PassThroughTxBytes function and some minor cleanups. 2026-03-18 22:39:12 -05:00
Jordan Woyak
816e3a654a MagneticCardReader: Simplify checksum logic. 2026-03-18 22:39:12 -05:00
Jordan Woyak
7fbe96d42e SI_DeviceAMBaseboard: Remove "card system" from JVS-IO board features. It doesn't seem to be accurate (or related to the Magnetic/IC cards) and it causes warnings in the JVSIOCommand::CoinInput handler. 2026-03-18 22:39:12 -05:00
Jordan Woyak
f074cdb08b
Merge pull request #14237 from JulienBernard3383279/gcc-adapter-hotswap
GC adapter fixes (hotplugging, claim retries, Dolphin shutdown)
2026-03-18 16:56:30 -05:00
Jordan Woyak
c9c4b79a7e AMMediaboard: Prevent MediaBoardRange end from exceeding the underlying buffer size. 2026-03-18 04:54:05 -05:00
Jordan Woyak
2640f194f7 AMMediaboard: Add a GetSpanForMediaboardAddress function to eliminate the hardcoded network buffer base addresses. 2026-03-18 04:54:05 -05:00
Jordan Woyak
de44626d23
Merge pull request #14400 from sepalani/tri-fd-gen
AMMediaboard: Change the way socket descriptors are assigned
2026-03-18 00:34:51 -05:00
OatmealDome
a8c5f6ddfc
Merge pull request #14481 from JosJuice/retroachievements-change-disc
RetroAchievements: Block loading discs that don't match current title
2026-03-17 17:57:09 -04:00
JMC47
f6bcb31435
Merge pull request #14480 from JosJuice/page-table-fastmem-setting
Disable page table fastmem for TimeSplitters: Future Perfect
2026-03-17 15:56:40 -04:00
JosJuice
6fdd45ddf6 RetroAchievements: Block loading discs that don't match current title 2026-03-17 19:58:28 +01:00
JosJuice
3564a256bf
Merge pull request #14478 from JosJuice/wii-menu-headache
Move achievements code out of DVDInterface::SetDisc
2026-03-17 19:07:41 +01:00
Dentomologist
1ab9a867f6
Merge pull request #14396 from cscd98/fmt-fix
fmt: replace <fmt/base.h> with <fmt/format.h> as not available until fmt>=11
2026-03-17 10:34:00 -07:00
JosJuice
989a95a177 Core: Add INI-only setting for page table fastmem 2026-03-17 18:27:05 +01:00
JosJuice
e123962bca Move achievements code out of DVDInterface::SetDisc
This should stop AchievementManager::LoadGame from being called for the
default ISO when CBoot::BootUp is booting something other than a disc or
IPL (most notably, the Wii Menu), while still detecting all disc changes
that happen while a disc game is running.
2026-03-17 09:07:34 +01:00
JosJuice
8ac767e032
Merge pull request #14474 from Dentomologist/fifoplayer_fix_screenshot_hang_during_playback
FifoPlayer: Fix hang when taking screenshot during FIFO log playback
2026-03-16 18:47:25 +01:00
Dentomologist
3e7ba69205 FifoPlayer: Fix hang when taking screenshot during FIFO log playback
Don't copy null terminators from the log's `header.gameid` into
`FifoDataFile`'s `m_game_id`.

Doing so would cause an infinite loop in `Core::GenerateScreenshotName`
as the various concatenations and `fmt::format` calls would then
effectively drop all the timestamps and disambiguating arbitrary numbers
since they followed the null terminator in the gameid, and so the
`File::Exists` calls would always return true.

Fixes https://bugs.dolphin-emu.org/issues/14002.
2026-03-16 00:49:38 -07:00
OatmealDome
4dc5ead172
Merge pull request #14469 from OatmealDome/backend-warning
GeneralWidget: Add protections against invalid values in BackendWarning()
2026-03-15 20:13:41 -04:00
OatmealDome
d60942d3cb
Merge pull request #14461 from Dentomologist/wasapistream_handle_getbuffer_errors
WASAPIStream: Fix crash when GetBuffer call fails
2026-03-15 20:09:28 -04:00
cristian64
3eea3a90b5 Triforce: Check only first byte in region flag.
In some Triforce games (e.g. _F-Zero AX_), the bytes that follow the
region flag in the `boot.id` file (at `0x38`) happen to be `0x00`.
However, in other games (e.g _Mario Kart Arcade GP 2_), it seems the
region flag is padded with `0xFF`.

_Mario Kart Arcade GP 2_ (`boot.id` in the USA version):
```
00000 0000:  42 54 49 44 00 00 01 E0  00 00 00 01 00 00 00 01  BTID.... ........
00000 0010:  FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF  ........ ........
00000 0020:  47 43 41 4D 00 00 01 C0  07 D3 05 0F 00 00 00 07  GCAM.... ........
00000 0030:  53 42 4E 4C 00 00 00 00  0E FF FF FF FF FF FF FF  SBNL.... ........
                                      -----------
                                           ^
                                           |
                                      region flag
```

When the region flag was tested in `switch` statements (where a single
byte was expected in the `case`s), the test would fail, depending
on the game.

This issue would lead to the wrong calculation of the country in
`VolumeDisc::GetCountry()`, which was then used to build the game ID in
`VolumeDisc::GetGameID()`.

The solution is to test using only the least meaningful byte in the
region flag.

Unexpected game IDs were first noticed with USA version of _Mario Kart
Arcade GP 2_, which was wrongly assigned the same game ID that is given
to the Japan version (i.e. `GNLJ82`). The correct game ID for the USA
version is `GNLE82`.
2026-03-15 18:43:00 +00:00
OatmealDome
aba842c09a
GeneralWidget: Add protections against invalid values in BackendWarning() 2026-03-15 14:08:41 -04:00
Craig Carnell
4caddbc12b fmt: change use of fmt/base.h to fmt/format.h as not provided until fmt>=11.0 2026-03-15 08:37:00 +00:00
Dentomologist
2aba231915 System: Use forward declarations in System.h 2026-03-14 10:53:45 -07:00
Mihai Brodschi
f9c3f06f0a Move PerformanceMetrics from global variable to System
This avoids the static initialization order fiasco between Core and VideoCommon

Co-authored-by: Jordan Woyak <jordan.woyak@gmail.com>
2026-03-14 16:42:21 +02:00
Sepalani
5bddb6e244 AMMediaboard: Increase NetworkCommandAddress2 range 2026-03-14 12:45:28 +04:00
Sepalani
9cb2229601 AMMediaboard: Change the way socket descriptors are assigned 2026-03-14 12:45:28 +04:00
Dentomologist
e8a78ed95f WASAPIStream: Fix crash when GetBuffer call fails
Check the return value of calls to `GetBuffer` and stop the `WASAPI
handler` sound thread if they fail.

This prevents a crash due to a null pointer dereference if `GetBuffer`
is unable to retrieve a buffer, which could be triggered during
emulation by disabling the selected WASAPI output device in the Windows
Sound settings.
2026-03-13 20:29:58 -07:00
Dentomologist
7a45ede688
Merge pull request #14123 from JosJuice/fix-logical-page-mappings
Memmap: Fix populating m_logical_page_mappings
2026-03-13 12:11:01 -07:00
Dentomologist
7209cf87cb GameList: Add status bar with game count
The status bar shows the number of games in your collection. If any
games are hidden by the platform, region, or search filters it will also
show how many games are visible and how many are filtered.

The visibility of the status bar can be toggled from the menu by
selecting `View`->`Show Game Count`.

Implements https://bugs.dolphin-emu.org/issues/9517.
2026-03-13 11:26:32 -07:00
Jordan Woyak
51a15f42a9 HW/Triforce/SerialDevice: Add missing include to fix FreeBSD build. 2026-03-12 21:35:30 -05:00
JMC47
d4e97f6bd7
Merge pull request #14409 from sepalani/tri-rw-log
AMMediaboard: Improve recv/send log messages
2026-03-12 21:51:29 -04:00
JMC47
2336753a24
Merge pull request #14408 from sepalani/tri-eagain
AMMediaboard: Check for EAGAIN in WSAGetLastError
2026-03-12 21:51:10 -04:00
JMC47
f0096310bf
Merge pull request #14452 from jordan-woyak/triforce-avalon-touchscreen
Triforce: Implement The Key of Avalon's touchscreen.
2026-03-12 21:49:08 -04:00
Jordan Woyak
12d790a54a
Merge pull request #14442 from Dentomologist/performancemetrics_use_state_changed_hookableevent
PerformanceMetrics: Use HookableEvent for state changed callback
2026-03-12 19:54:13 -05:00
JMC47
9143c4cc95
Merge pull request #14172 from sepalani/usb-iso-ret
IOS/USB: Add helper to set return values of IsoMessage's packets
2026-03-12 16:33:07 -04:00
Dentomologist
e550e1ff7c
Merge pull request #14345 from TryTwo/cheat_search_work
CheatSearch: Add ability to breakpoint the selected lines.
2026-03-12 12:35:51 -07:00
Dentomologist
e26b61dcee
Merge pull request #14440 from JosJuice/optimize-remove-page
Core: Optimize RemoveHostPageTableMappings
2026-03-12 12:31:53 -07:00
JMC47
161f9e82c1
Merge pull request #14427 from Simonx22/qt/cheats-gecko-download-error-message
DolphinQt: Improve Gecko code download failure message
2026-03-12 15:25:41 -04:00
Jordan Woyak
cca880de16 State: Increase STATE_VERSION. 2026-03-12 03:58:01 -05:00
Jordan Woyak
3e8430440a Triforce: Implement The Key of Avalon's touchscreen.
Added SerialDevice base class interface.
Adapted MagneticCardReader to use the SerialDevice interface.
Implemented The Key of Avalon touchscreen SerialDevice.
Altered CSIDevice_AMBaseboard to use SerialDevice.
Made serial reads happen every GCAMCommand rather than only upon write.
2026-03-12 03:57:47 -05:00
Jordan Woyak
b77cf5e0f2 State: Increase STATE_VERSION. 2026-03-12 02:48:31 -05:00
Jordan Woyak
b1000496a2 SI_DeviceAMBaseboard: Clean up RunBuffer.
Eliminated outer loop.
Reduced memcpy'ing.
2026-03-12 02:48:07 -05:00
Jordan Woyak
4fa93e402d SI/SI_DeviceAMBaseboard: Expose the buffer size of 128 to eliminate some magic numbers. 2026-03-12 02:48:07 -05:00
Jordan Woyak
1234a4e479 SI_DeviceAMBaseboard: Use CreateStatusResponse to fix "RunSIBuffer: expected_response_length" WARN_LOGs. 2026-03-12 02:48:07 -05:00
Jordan Woyak
8da0a94ab9 SI_DeviceAMBaseboard: Add baseboard 0x70 command to SerialInterface::EBufferCommands enum to eliminate BaseBoardCommand enum. 2026-03-12 02:48:07 -05:00
Jordan Woyak
cda384d40f SI_DeviceAMBaseboard: Remove unnecessary code. 2026-03-12 02:48:07 -05:00
Jordan Woyak
fe2d604060
Merge pull request #14401 from naari3/master
AMMediaboard: stub Triforce NETWORK TEST command handling
2026-03-12 02:47:37 -05:00
Stavros Kosmas
d09436cd1a DolphinQt: Improve TAS UI Widgets
Made Stick and IR Widgets bigger
Improved Stick and IR layouts to better utilize space
Made Stick and IR Widgets Scale at a fixed ratio when window is resized
Added Scrollbars to Stick and IR Widgets
Reduced Spinbox padding in dark style
2026-03-12 04:59:49 +02:00
Dentomologist
252ec7452c PerformanceMetrics: Use HookableEvent for state changed callback
Use the normal state changed `HookableEvent` instead of having
`Core::NotifyStateChanged` call `g_perf_metrics.OnEmulationStateChanged`
directly.

The direct call was added in bad78cfed4 to
avoid a crash. At the time state changed callbacks were stored in a
vector, and the crash was caused by `g_perf_metric`'s destructor trying
to remove the callback from the already-destroyed vector.

Later a97627e736 switched state changed
callbacks to use `HookableEvent`, which is specifically designed to
handle the case where a hook outlives its associated event.

Since the workaround is no longer necessary replace it with a standard
`EventHook`.
2026-03-07 12:50:59 -08:00
JosJuice
a3b37c041a Core: Optimize RemoveHostPageTableMappings
This switches from an O(log(N) * M) algorithm to an O(N * log(M))
algorithm. This is advantageous because N, the size of `mappings`, is
usually much smaller than M, the size of `m_page_table_mapped_entries`.

RemoveLargePageTableMapping already did something similar, so we can
even deduplicate some code between it and RemoveHostPageTableMappings.

Speeds up Rogue Squadron 3 by roughly 3% on my PC.
2026-03-07 12:56:36 +01:00
JosJuice
d25ef67d6f DolphinQt: Save when closing settings window
If Dolphin crashes, changes that have been made to settings are often
lost. This has been a minor annoyance for me when developing, but it has
become a much bigger issue recently due to the problem where Dolphin
freezes on shutdown for ROG Ally users.

Instead of saving the config when certain arbitrary settings are
changed, let's save the config when the user closes the settings window.
2026-03-04 22:26:25 +01:00
JMC47
43def54de2
Merge pull request #14435 from Simonx22/fix/metal-early-stop-shutdown
Metal: Always run endEncoding on command encoders
2026-03-03 12:25:16 -05:00
Simonx22
d2e381090c DolphinQt: Improve Gecko code download failure message 2026-03-03 11:09:39 -05:00
Simonx22
03bcd564c5 Metal: Always run endEncoding on command encoders
Fixes a macOS Metal crash when stopping immediately after boot starts.

m_upload_encoder and m_texture_upload_encoder could be dealloc'd during shutdown before endEncoding could be called, which causes a Metal assertion failure.

Co-authored-by: OatmealDome <julian@oatmealdome.me>
2026-03-03 09:49:42 -05:00
Dentomologist
edb576f4c0 VertexLoaderManager: Fix crash caused by invalid array base
Don't set cached array bases to invalid pointers. If a game tries to set
an invalid base just keep the old one, which might cause game problems
but won't crash the emulator.
2026-03-02 13:02:51 -08:00
Dentomologist
15f24c56e4
Merge pull request #14327 from Dentomologist/performancemetrics_fix_graph_size_and_spacing
PerformanceMetrics: Fix graph size and spacing
2026-03-02 11:01:37 -08:00
TellowKrinkle
80762e0575 DSU: Don't crash on bad hostname 2026-03-01 00:08:08 -06:00
JMC47
63fc9d7ca3
Merge pull request #14425 from JosJuice/android-wiimote-crash
Android: Fix Wii Remote connection crashes
2026-02-28 16:16:20 -05:00
JosJuice
5a914e5247 Android: Use DeleteLocalRef more in WiimoteAndroid
Doesn't matter a lot, but we're supposed to do this to be nice citizens.
2026-02-28 16:13:36 +01:00
JosJuice
faa861f1ab Android: Fix Wii Remote connection crashes
Users are reporting a crash at the point where WiimoteAndroid::IORead
tries to use m_java_wiimote_payload. This commit solves the problem by
making m_java_wiimote_payload a global reference.

The code for setting up m_java_wiimote_payload has also been moved to
the constructor just because that way it's impossible for it to run
twice. (If the code as written were to run a second time, the old global
reference would be leaked. ConnectInternal should only run once, so this
is just to be on the safe side.)

Fixes https://bugs.dolphin-emu.org/issues/13960.
2026-02-28 16:10:58 +01:00
JosJuice
1a08708a75
Merge pull request #14418 from LillyJadeKatrin/retroachievements-wii-menu
RetroAchievements - Close game on switch to null hash
2026-02-28 15:15:50 +01:00
Dentomologist
f898d75bf3
Merge pull request #14317 from JosJuice/jit-cache-macro-loop
Jit: Use RangeSet for physical_addresses
2026-02-26 19:25:29 -08:00
Julien Bernard
0e8db4fa22 Send neutral stick positions when disconnected rather than down-left 2026-02-25 23:06:50 +01:00
Julien Bernard
afc2920a5f Gcc adapter fixes (hotplugging, claim retries, shutdown, bad yields) 2026-02-25 22:55:48 +01:00
naari3
65f8c8f6cc AMMediaboard: derive TestHardware phase2 delay from tick rate
Use the existing system reference instead of Core::System::GetInstance(),
and calculate the phase 2 scheduling delay from GetTicksPerSecond()
instead of hardcoding 50000 ticks.
2026-02-26 00:49:24 +09:00
Lilly Jade Katrin
713d557d5e RetroAchievements - Close game on switch to null hash
Mistakenly thought the change media call would close the current
game if the new media failed to hash. This wasn't the case so
instead I'll close the current game myself. This fixes an issue
where a default ISO would immediately load achievements when
starting up the Wii menu.
2026-02-24 22:55:30 -05:00
JosJuice
7b372db559 DiscIO: Only allow alphanumeric ASCII in game IDs
We often use game IDs in paths, so we should try to make sure path
traversal is impossible in game IDs. Admittedly, doing any kind of real
attack using the six bytes available in game IDs is unrealistic, but no
game ID should contain non-alphanumeric or non-ASCII characters anyway.

Might also fix https://bugs.dolphin-emu.org/issues/13982 by skipping
converting between encodings for game IDs.
2026-02-24 21:36:02 +01:00
JosJuice
1d74321212 DiscIO: Move DecodeString to Volume.cpp
This had to be in the header back when it was templated, but 083faa8b
made it not templated.
2026-02-24 21:09:12 +01:00
JMC47
ff27147a71
Merge pull request #14407 from jordan-woyak/mag-card-fixup
MagneticCardReader: Minor fixup to writing card data.
2026-02-23 19:09:23 -05:00
JosJuice
c1a26808ce Jit: Use RangeSet for physical_addresses
This makes JitBaseBlockCache::ErasePhysicalRange around 50% faster and
PPCAnalyzer::Analyze around 40% faster. Rogue Squadron 2's notoriously
laggy action of switching to and from cockpit view is made something
like 20-30% faster by this, though this is a very rough measurement.
2026-02-23 23:01:49 +01:00
JosJuice
36f45dce44 Move RangeSet from Externals to Common
This is a very small libary, and as I understand it, it was more or less
developed for Dolphin.

This moves the two relevant files from Externals to Common, changes the
namespace to Common, reformats the code, and adds Dolphin copyright
notices. The change in copyright notice and license was approved by
AdmiralCurtiss.
2026-02-23 22:55:38 +01:00
Martino Fontana
a108fb849f AchievementManager: APPROVED_LIST_HASH quality of life improvements
APPROVED_LIST_HASH is moved to a separate file, making tests compilation faster after changing it.
The error message prints the hash in a way that it can be directly copy-pasted (though it still needs clang-format).
2026-02-22 00:22:46 +01:00
Admiral H. Curtiss
0d359e23da
Merge pull request #14212 from cscd98/cast-func
mingw: use reinterpret_cast for function→void* conversion to satisfy C++ standard
2026-02-21 18:27:50 +01:00
Admiral H. Curtiss
fee2b0ee03
Merge pull request #14209 from cscd98/static-cast-fix
mingw: replace static_cast with reinterpret_cast as not permitted between void* and function params
2026-02-21 18:27:22 +01:00
Sepalani
0950999d08 AMMediaboard: Check for EAGAIN in WSAGetLastError 2026-02-21 13:41:39 +04:00
Sepalani
543d5f89e6 AMMediaboard: Improve recv/send log messages 2026-02-21 12:27:04 +04:00
Jordan Woyak
97a88dd7db MagneticCardReader: Minor fixup to writing card data.
Ensure the 3rd track is written even if the 2nd track isn't.
Moved GetHexDump helper function to StringUtil.
2026-02-21 01:01:57 -06:00
naari3
ab0d300041 AMMediaboard: extract TestHardware "TEST OK" magic numbers to named constants
Replace raw hex literals with TEST_OK_WORD0/TEST_OK_WORD1 constexpr
constants and consolidate the endianness explanation at the definition
site.
2026-02-21 14:40:22 +09:00
naari3
adbecd00ec AMMediaboard: fix TestHardware string endianness in legacy Execute path
The legacy Execute1 path (offset=0, length=0) was using Write_U32
(big-endian) to write the "TEST OK" status string. However, the PPC
display code in segaboot reads this buffer with lwz followed by manual
bswap32, so the data must be stored in little-endian. Use Write_U32_Swap
to match the other two TestHardware paths.
2026-02-21 14:38:38 +09:00
naari3
a297bb8068 State: bump version to 178 for Triforce NETWORK TEST command handling 2026-02-21 13:29:09 +09:00
naari3
402042b9bc AMMediaboard: add Triforce NETWORK TEST support
Implement the MediaBoard commands and response protocol needed for
the segaboot NETWORK TEST to pass:

- TestHardware (0x0301) two-phase response via CoreTiming: phase 1
  echoes test_type with 0x80 acknowledgment flag, phase 2 sends
  result with testStatus=2 and checkProgress=100
- GetNetworkConfig (0x0104) with trinetcfg.bin read intercept
- Separate Execute1/Execute2 last-response buffers to prevent
  cross-clobber on the shared s_media_buffer
- Generic 0x80xx cleanup command acknowledgment
- Network config persistence for SET IP ADDRESS
2026-02-21 13:29:09 +09:00
TryTwo
3ea93641b2 CheatSearch: Add ability to breakpoint the selected lines.
Adds three options, on read, on write, and both. Always Breaks and Logs.
2026-02-20 20:57:19 -07:00
Jordan Woyak
2eeff845bd
Merge pull request #14387 from Dentomologist/cheatsmanager_update_tabs_on_creation
CheatsManager: Update code tabs on creation
2026-02-20 19:31:40 -06:00
Jordan Woyak
2b590b12e6
Merge pull request #14402 from sepalani/tri-osd-bind
AMMediaboard: Replace bind PanicAlert with OSD message
2026-02-20 19:28:07 -06:00
Jordan Woyak
ddedae327f
Merge pull request #14395 from sepalani/tri-connect
AMMediaboard: Add more connect log messages
2026-02-20 19:25:59 -06:00
Jordan Woyak
b5a1a06f6c
Merge pull request #14394 from sepalani/tri-log
AMMediaboard: Add more log messages
2026-02-20 19:24:24 -06:00
cristian64
643fcaec03 DolphinQt: Restore log font current index accurately.
The logic in the code was deliberately avoiding index `2` (**Selected
Font**; the debug font) by using `std::min(index, 1)`. Presumably, the
reason was that there was no debugger in Qt version of Dolphin at the
time.

Test plan:

- Select a debug font via the **Options > Font...** action.
- Show the **Log** tab via the **View > Log** action.
- In the **Log** tab, choose the **Selected Font** item in the combobox.
- Restart Dolphin.

**Without** the patch, the **Monospaced Font** item is wrongly selected
in the combobox.

**With** the patch, the **Selected Font** item is now properly restored
from the saved settings, and the selected debug font is correctly used
in the log messages.
2026-02-20 22:14:35 +00:00
JMC47
981b7df420
Merge pull request #14335 from TixoRebel/joycon-config
Core: Add SDL Hints settings
2026-02-20 02:44:52 -05:00
Andrew Strauss
61c36b0cc8 Add new window to configure SDL hints and store them in the main ini file
Signed-off-by: Andrew Strauss <astrauss11@gmail.com>
2026-02-20 02:05:35 -05:00
Dentomologist
3d16e0c5be
Merge pull request #14343 from TryTwo/toggle_breaking
BreakpointsWidget: Add option to toggle all breaking
2026-02-19 21:55:38 -08:00
TryTwo
f9c7731f4d Debugger/ BreakpointsWidget: Add option to disable/enable all breaking without affecting individual breakpoint enabled states.
Allows you to quickly stop breaking, play the game, then re-enable breaking. useful if you have many active breakpoints, but need to run the game.
2026-02-19 16:23:42 -07:00
Sepalani
989586433a AMMediaboard: Replace bind PanicAlert with OSD message 2026-02-20 02:43:51 +04:00
Dentomologist
02db73c8dc
Merge pull request #14344 from TryTwo/cheatsearch_work2
Cheat Search: Add ability to delete items and fix duplicate commands
2026-02-19 14:36:54 -08:00
Sepalani
81b414c9c9 AMMediaboard: Add more connect log messages 2026-02-19 13:30:17 +04:00
Sepalani
b92cef5001 AMMediaboard: Add more log messages 2026-02-18 19:00:06 +04:00
Jordan Woyak
9674b1fa8f MagneticCardReader: Automatically insert a blank card when Command_A0_Clean is received. 2026-02-16 18:59:57 -06:00
Craig Carnell
bd728d1c20 mingw: replace static_cast with reinterpret_cast as not permitted between void* and function params 2026-02-16 13:28:11 +00:00
Jordan Woyak
bc0c3d9f6a HW/GCPad: Make Android default to shaking the device for Triforce coin input. 2026-02-16 00:46:50 -06:00
Jordan Woyak
c28ec7a6d3 Triforce: Rename IPOverrides to IPRedirections. 2026-02-15 23:13:18 -06:00
Jordan Woyak
cbd43914a5 Network: Improve IPv4PortRange::ToString to support CIDR notation and only last octet difference. 2026-02-15 23:13:18 -06:00
Jordan Woyak
0ff8fb71a3 Triforce: Minor cleanups. 2026-02-15 20:14:15 -06:00
Jordan Woyak
282e14cce6 AMMediaboard: Move things from global namespace to AMMediaboard namespace. 2026-02-15 20:14:15 -06:00
Jordan Woyak
f00b1c590e DolphinQt: Add Triforce tab to main settings window. 2026-02-15 20:14:15 -06:00
Jordan Woyak
0fc8f463f2 DolphinQt/Debugger/NetworkWidget: Minor cleanups. 2026-02-15 20:14:15 -06:00
Sepalani
2d9b3c4118 Debugger/NetworkWidget: Add Triforce support 2026-02-15 20:14:15 -06:00
Jordan Woyak
f657b32521 HW: Rewrite MagCard features of SI_DeviceAMBaseboard in new MagneticCardReader class.
A huge thank you goes to GXTX and https://github.com/GXTX/YACardEmu which this code is based on.
2026-02-15 20:14:15 -06:00
Jordan Woyak
d893565b78 AMMediaboard: IP override improvements and other cleanups.
Overrides now also apply in reverse for accepted connections.
IP Override UI now includes a description.
Mario Kart Arcade GP 4x Multicabinet now works on one PC without any tricky IP configurations.
Added AMMBCommandBind, NetDIMMBind, and some helper functions.
Removed redundant settings.
2026-02-15 20:14:15 -06:00
Jordan Woyak
cf8573421c AMMediaboard: Clean up the defined memory ranges. 2026-02-15 20:14:15 -06:00
Jordan Woyak
93565eb8fa AMMediaboard: Save the IP from AMMBCommandModifyMyIPaddr for later use. 2026-02-15 20:14:15 -06:00
Joshua Vandaële
dc4645d255 SI_DeviceAMBaseboard: Shadowed variable "command" 2026-02-15 20:14:15 -06:00
Jordan Woyak
b2bbbb64bd SI_DeviceAMBaseboard: Fix signed/unsigned comparison. 2026-02-15 20:14:15 -06:00
Joshua Vandaële
7b0ee77840 SI_DeviceAMBaseboard: Comparing an unsigned int and an int 2026-02-15 20:14:15 -06:00
Joshua Vandaële
2c2bfc1fe1 Enums: Unhandled switch statement 2026-02-15 20:14:15 -06:00
Jordan Woyak
535c81c8df Triforce: Automatically set SuggestedAspectRatio as ForceStandard to work around widescreen heuristic issues. 2026-02-15 20:14:15 -06:00
Jordan Woyak
e14a58c1d8 AMMediaboard: Make AMMBCommandSocket determine socket protocol from domain and type rather than forcing TCP. 2026-02-15 20:14:15 -06:00
Jordan Woyak
32e4d88aa9 AMMediaboard: Improve connect() and bind() logging. 2026-02-15 20:14:15 -06:00
Jordan Woyak
a4fd5f8343 Triforce: Lazily load the game into memory using CachedBlobReader. 2026-02-15 20:14:15 -06:00
Jordan Woyak
3681cade41 DiscIO: Add IsCached virtual function to BlobReader. 2026-02-15 20:14:15 -06:00
Jordan Woyak
aaa7094442 Triforce: Implement save states. 2026-02-15 20:14:15 -06:00
Jordan Woyak
63dc3b1972 AMMediaboard: Adjust the verbosity of many LOG entries. 2026-02-15 20:14:15 -06:00
Jordan Woyak
bd3739ce08 AMMediaboard: Flatten the NetDIMMConnect function. 2026-02-15 20:14:15 -06:00
Jordan Woyak
0d7aef298e AMMediaboard: Increase size of NetworkBufferAddress3 area to fix Mario Kart Arcade GP multicab. 2026-02-15 20:14:15 -06:00
Jordan Woyak
af5e90a160 AMMediaboard: Introduce GuestSocketAddress to fix bad sin_family values.
I think the "family" field is only one byte.
2026-02-15 20:14:15 -06:00
Jordan Woyak
f8f74b58fd AMMediaboard: Clean up AMMBCommandModifyMyIPaddr. 2026-02-15 20:14:15 -06:00
Jordan Woyak
0075313dc9 AMMediaboard: Don't swap32 the IPv4 result in AMMBCommand::InetAddr. 2026-02-15 20:14:15 -06:00
Jordan Woyak
a876529a02 AMMediaboard: Minor adjustments to logging. 2026-02-15 20:14:15 -06:00
Jordan Woyak
7ab2672698 DolphinQt: Add user interface for Triforce IP address overrides. 2026-02-15 20:14:15 -06:00
Jordan Woyak
3e2b7fee46 AMMediaboard: Allow IP address overrides to be configured. 2026-02-15 20:14:15 -06:00
Jordan Woyak
5545798e00 Common/Network: Add structs: IPv4Port, IPv4PortRange and functions: IPAddressToString, ParseIPv4PortRange. 2026-02-15 20:14:15 -06:00
Jordan Woyak
97ad5ad1a1 StringUtil: Add SplitStringIntoArray function template. 2026-02-15 20:14:15 -06:00
Jordan Woyak
84b136c994 BootManager: Fix "enumeration value not handled in switch" warning. 2026-02-15 20:14:15 -06:00
Jordan Woyak
17027f0173 MainWindow: Remove the check preventing Triforce volumes from booting without the Baseboard hardware attached.
The hardware is now automatically attached later in the boot process.
2026-02-15 20:14:15 -06:00
Jordan Woyak
b15c593eec BootManager: Automatically attach Triforce Baseboard hardware. 2026-02-15 20:14:15 -06:00
Jordan Woyak
6a53c8f512 AMMediaboard: Make timeout 0ms in NetDIMMAccept to improve performance. 2026-02-15 20:14:15 -06:00
Jordan Woyak
4c61b9e009 AMMediaboard: Replace select() with PlatformPoll in NetDIMMConnect. 2026-02-15 20:14:15 -06:00
Jordan Woyak
587c825a9e AMMediaboard: Clean up and make a function for AMMBCommandAccept. 2026-02-15 20:14:15 -06:00
Jordan Woyak
5f6cd84ad7 AMMediaboard: Emulate AMMBCommandSelect using poll/WSAPoll. 2026-02-15 20:14:15 -06:00
Jordan Woyak
f25c467154 Common/UnixUtil: Only define CreateEventFD on Linux. 2026-02-15 20:14:15 -06:00
Jordan Woyak
0713045d4f AMMediaboard: Deduplicate code into AMMBCommandModifyMyIPaddr. 2026-02-15 20:14:15 -06:00
Jordan Woyak
ce85c4d81d AMMediaboard: Deduplicate code into AMMBCommandRecv. 2026-02-15 20:14:15 -06:00
Jordan Woyak
f7ff93bea6 AMMediaboard: Deduplicate code into AMMBCommandSend. 2026-02-15 20:14:15 -06:00
Jordan Woyak
69c143d8f0 AMMediaboard: Deduplicate code into AMMBCommandSocket. 2026-02-15 20:14:15 -06:00
Jordan Woyak
65def4e235 AMMediaboard: Deduplicate code into AMMBCommandSetSockOpt. 2026-02-15 20:14:15 -06:00
Jordan Woyak
6940309c2d AMMediaboard: Translate between guest and host FDs to fix AMMBCommand::Select behavior. 2026-02-15 20:14:15 -06:00
Jordan Woyak
cda344329a Common/BitUtils: Make SetBit constexpr. 2026-02-15 20:14:15 -06:00
Jordan Woyak
12df15eded AMMediaboard: Fix value in s_mediaboard_ranges array. 2026-02-15 20:14:15 -06:00
Jordan Woyak
f4b3f3cf0f AMMediaboard: Use SetPlatformSocketOptions and SEND_FLAGS. 2026-02-15 20:14:15 -06:00
Jordan Woyak
5d2e93fa3e Common: Add SetPlatformSocketOptions function and SEND_FLAGS constant to Network.h to deal with OS-specific SIGPIPE behavior. 2026-02-15 20:14:15 -06:00
Sepalani
2ffa7cec07 SI_DeviceAMBaseboard: Fix log issues related to GeneralDriverOutput 2026-02-15 20:14:15 -06:00
Sepalani
cbc7c2d385 SI_DeviceAMBaseboard: Add missing bounds checks
VolumeDisc: Fix Triforce's GetGameID memcpy by checking MakerID's size
2026-02-15 20:14:15 -06:00
Sepalani
0acb6145f7 Triforce: Fix remaining issues 2026-02-15 20:14:15 -06:00
Sepalani
355a4d8188 AMMediaboard: Fix several warnings 2026-02-15 20:14:15 -06:00
Sepalani
f3321b2893 SI_DeviceAMBaseboard: Improve bounds checking 2026-02-15 20:14:15 -06:00
Sepalani
bfd83f3a77 SI_DeviceAMBaseboard: Add validate_jvs_io helper 2026-02-15 20:14:15 -06:00
Sepalani
1c54e41a60 SI_DeviceAMBaseboard: Improve logging and validation edge cases 2026-02-15 20:14:15 -06:00
Sepalani
77cb65313d SI_DeviceAMBaseboard: Add validate_data_in_out helper 2026-02-15 20:14:15 -06:00
Sepalani
fcb4d27f1a AMBaseboard: Convert union ICCommand into struct 2026-02-15 20:14:14 -06:00
Sepalani
85707891cf Triforce: Address some logging and error checks 2026-02-15 20:14:14 -06:00
Sepalani
71ef512516 Triforce: Minor cleanups related to coding style and documentation 2026-02-15 20:14:14 -06:00
Jordan Woyak
2d9d7e4d89 AMMediaboard: Replace magic number 15 with a MAX_IPV4_STRING_LENGTH constant. 2026-02-15 20:14:14 -06:00
Jordan Woyak
a5eca09967 AMMediaboard: Add NetworkCMDBufferCheck calls for reading of timeout in Select commands. 2026-02-15 20:14:14 -06:00
Jordan Woyak
95442a2b6a Triforce: Warning silencing and other minor cleanups. 2026-02-15 20:14:14 -06:00
crediar
56ed7817de Triforce: Code fixes.
Fixed a bug caused by static usage of Core::System::GetInstance()
Removed unused headers
Removed unneeded code
Optimised code
Added sanity checks
Added SafeCopyFromEmu/SafeCopyToEmu
Set Triforce buttons to be translatable
2026-02-15 20:14:14 -06:00
crediar
ce802f1e62 Triforce: Optimized code
Removed unneeded code
Removed unused code
Added EINPROGRESS to fix networking on Linux systems
Added function NetworkBufferCheck and NetworkCMDBufferCheck  to verify buffer sizes
Added NetworkCMDBufferRead/NetworkCMDBufferWrite/NetworkBufferRead/NetworkBufferWrite
Added multiply buffer size checks
Rewrote GetGameType()
Moved AMMediaboard::Shutdown to DVDInterface::Shutdown()
Changed JVSIOMessage overrun check
Changed SwapBuffers function to be a member function
Added sanity checks for buffer sizes
Added translation prefix for Triforce buttons
Updated text for misconfigurations when trying to boot normal games with Triforce hardware connected
Fixed NAMCAM for Mario Kart GP
2026-02-15 20:14:14 -06:00
Jordan Woyak
be2da8dc7b Triforce: Code cleanups. 2026-02-15 20:14:14 -06:00
Jordan Woyak
083faa8b21 DiscIO: Make Volume::DecodeString take a std::span so it can work with std::array. 2026-02-15 20:14:14 -06:00
crediar
2c62214875 Added Triforce support 2026-02-15 20:14:14 -06:00
spaceage64
c08db74e6b Add classic controller support code for RUUE01 - Animal Crossing: City Folk (NTSC-U)
Added control scheme to codes.

Split .ini files based on Rev 0/1.

Added controller mapping instructions.

Added other regions and removed redundant lines.

Added Grass Deterioration cheats.

Changed wording regarding Right Stick variant.

Removed credits from RA Verified list.

Update ApprovedInis.json from PatchAllowlist test.

Updated approved list hash to match AchievementManager.

Attempted to fix the approved hash list again.

Update approved INI list and PatchAllowlist verification data
2026-02-15 19:41:40 +01:00
Martino Fontana
c9457cf906 Jit: Emit Branch Watch code only if it's enabled
JIT code related to Branch Watch was emitted if the debugging UI was active: the emitted code would dynamically check whether Branch Watch is active.
However, this causes two problems:
1. It decreases performance by just having the debugging UI enabled
2. It clutters the host assembly in the JIT tab, making it harder to read (unaware readers will wonder what these instructions are for)

With this PR, code related to Branch Watch is emitted only if Branch Watch itself is active, fixing the issues above.
The JIT cache will now be wiped whenever the feature is toggled, causing a slight stutter. However, this isn't the kind of feature that is toggled over and over, so IMO it is an acceptable trade-off.
2026-02-15 11:03:02 +01:00
JMC47
e387fa3732
Merge pull request #14385 from dreamsyntax/cpu-clock-max
Qt/Android: CPU Clock Override max to 500%
2026-02-15 03:38:23 -05:00
Dentomologist
0fbe38118e CheatsManager: Update code tabs on creation
Call `OnStateChanged` when creating CheatsManager to update the AR and
Gecko code tabs with codes for the currently running game (if any).

Previously, creating CheatsManager while a game was running wouldn't
show any codes until the next time the core state changed (excluding
Starting or Stopping which had no effect).

Fixes https://bugs.dolphin-emu.org/issues/13977.
2026-02-14 20:32:07 -08:00
Dentomologist
b398dc38e0
Merge pull request #12917 from JosJuice/transfer-sysconf-control
Explicitly transfer control of SYSCONF to emulated system
2026-02-14 11:35:59 -08:00
JosJuice
1cc9e8352f
Merge pull request #14329 from JosJuice/android-hotplug
Android: Rework input device hotplug
2026-02-14 17:43:38 +01:00
JosJuice
5440c7737f Explicitly transfer control of SYSCONF to emulated system
The functions SaveToSYSCONF and LoadFromSYSCONF contain checks for
whether emulation is running. The intent of this is that when we're
emulating a Wii, the emulated system may write to SYSCONF whenever it
likes and does not expect anything else to write to SYSCONF, so the
host code shouldn't access SYSCONF while emulation is ongoing. However,
Core::IsRunning is an imperfect proxy for whether we've handed over
control of SYSCONF to the emulated system yet, as the actual handover
happens at a slightly different point in time than when the emulation
state is changed. This usually isn't a problem, but in theory it could
be a determinism problem if a setting is changed right as emulation is
starting, or it could cause the emulated software to briefly misbehave
if a setting is changed right as emulation is stopping.

Things got worse in 72cf2bdb87 when I
replaced the Core::IsRunning calls with !Core::IsUninitialized. With
IsRunning, there was be a period of time where SYSCONF should have been
protected but wasn't. With !IsUninitialized, there was a period of time
where SYSCONF shouldn't have been protected but was, and crucially, this
period of time included the moments where we do setup and teardown of
the emulated NAND, which broke transferring SYSCONF settings between the
host and the guest. 72cf2bdb87 was
reverted because of this.

This commit adds a flag that we explicitly flip when control is handed
over to or from the emulated system. This protects the SYSCONF file
for exactly as long as is needed.
2026-02-14 10:05:27 +01:00
TryTwo
954219f781 Cheat Search: Add ability to delete items and fix duplicate commands when multiple row items are selected.
Changes it to select rows then extracts one item from each row to operate on. The behavior and data across each item in a row was already identical, so using rows doesn't change anything.
2026-02-13 16:45:00 -07:00
Martino Fontana
fdbc2883ef VideoCommon: Invert interaction between Arbitrary Mipmap Detection and GPU Texture Decoding (the former disables the latter)
Split from #14293.
It makes sense for a setting that changes visual output to have priority over a setting that barely makes any difference.
2026-02-13 13:57:43 +01:00
dreamsyntax
e1e1485582 Qt/Android: CPU Clock Override max to 500% 2026-02-12 18:39:05 -07:00
JosJuice
ea80945912
Merge pull request #14342 from sepalani/hdr-mic
IOS/USB: Add missing vector header in Emulated/Microphone.h
2026-02-11 20:25:34 +01:00
Sepalani
6f3282e073 IOS/USB: Add missing vector header in Emulated/Microphone.h 2026-02-11 18:25:15 +04:00
Sepalani
ddcf0413c1 EXI_Device: Add missing include for PanicAlertFmtT 2026-02-11 18:08:41 +04:00