230 Commits
Author SHA1 Message Date
Henrik RydgårdandClaude Opus 5.5 1288c294fd Savedata dialog: Draw icons over black, with alpha blending
The PSP blends save icons over a black background, so their transparent
parts come out black. 0a5fa27957 turned blending off instead, which is
wrong for icons that rely on it. Revert that, and draw a black rectangle
under each icon. Fixes #22280.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-09-29 13:21:24 -06:00
Henrik RydgårdandClaude Opus 5.5 8663ce2a33 Savestate: Save state that was missing from several modules
sceMpeg's AVC resource flag, whether the VSH is running, sceReg's handle
counter, sceNet's pending apctl events and product code block, and the
save dialog's copy of the original request (without which the first
Update after a load reloaded the request and lost its results).

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-09-28 11:32:07 -06:00
Henrik RydgårdandClaude Opus 5.5 6dffcc91d2 Utility: Check request sizes like the firmware
InitStart sizes: Netconf and NpSignin accepted any size, then wrote
common.size bytes back from a 64-68 byte host struct, copying host memory
into PSP RAM. GamedataInstall looked for install files before checking the
size, and the HtmlViewer read options before checking the whole request was
in memory. All the dialogs now check the address, then the sizes
sceUtility_Driver accepts (utility/dialog/sizes), before anything else, as
the firmware does (a bad address is INVALID_ADDRESS), and write back no more
than the struct.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-09-25 12:50:41 -06:00
Henrik RydgårdandClaude Opus 5.5 9e69c1f9aa Savedata: Keep the IO thread out of the dialog's state
Replaces the temporary fix that did the hidden modes' IO inside Update.

The IO thread read and wrote the dialog's request, display state and save
list, all shared with the emulator thread, which kept using them to draw the
dialog and reload the request from the game.

Now the IO thread works on its own copy of the request, its own SavedataParam
and directory names resolved up front, and shares nothing else with the
emulator thread but the (locked) file system, MemoryStick_FreeSpace's cached
use and sceChnnlsv's scratch buffer and kirk state, the last two now under
locks too. It still reads and writes the game's buffers directly, like a PSP's
utility threads and sceIoReadAsync do, so a savestate waits for it before it
saves or loads memory. Save
bookkeeping, the save indicator and display changes happen on the emulator
thread when the results are taken, and only the request fields the IO changed
are copied back, so a game's own edits in the meantime survive.

Hidden modes take the results at the next Update (or, with Host IO timing,
the first Update that finds them done). The visible dialogs keep drawing and
take them once the IO is done; save and load used to stall the emulator
thread for the whole operation. Savestates keep results that haven't been
taken yet.

When the results land in PSP memory doesn't matter to games, so
utility/savedata/filelist now only prints them once the utility has finished.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-09-25 12:50:39 -06:00
Henrik RydgårdandClaude Opus 5.5 157b233865 Savedata: TEMP TEST FIX: Do the hidden modes' IO inside Update, not on a host thread
The IO thread wrote results (file lists, sizes, loaded data) straight into
PSP memory while the game kept running, so they landed at an arbitrary
point in its code. utility/savedata/filelist caught it now and then: a
poll saw the entries written but the counts still zero. On a PSP it's all
there when Update returns. Host IO timing still uses the thread.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-09-23 19:41:41 -06:00
Henrik Rydgård 0a5fa27957 Disable alpha for save/load icons in sceUtility UI 2026-09-21 10:41:35 -06:00
Henrik Rydgård c5e4d0d90d Rename the get-memory-pointer functions to make it clear where CPU exceptions can happen. 2026-08-12 14:06:16 +02:00
Henrik Rydgård 3c81d6b121 More manual Read_U32 cleanup
Buildfix
2026-08-11 10:28:36 +02:00
Henrik Rydgård 0eef5d0164 Use shared HasPathTraversal utility for savedata name validation
Replace the inline lambdas in the savedata dialog with the new
HasPathTraversal() helper in Core/Util/PathUtil.
2026-08-01 13:16:21 +02:00
Henrik Rydgård 779cae6232 Reject path traversal in savedata name fields
gameName/saveName/fileName and the saveNameList entries are
guest-controlled and get concatenated into host filesystem paths, so a
crafted request could escape the save directory with ../ sequences.

- PSPSaveDialog::Init rejects requests whose name fields contain a path
  separator ('/' or '\') or are bare dot components.
- SavedataParam::SetPspParam rejects saveNameList entries the same way.
2026-08-01 13:16:21 +02:00
Ren 459aefb48b Savedata dialog: serialize ioThreadStatus (bump section to v3)
The s > 2 branch in PSPSaveDialog::DoState has been dead code since it
was written - the section version was never raised past 2, so
ioThreadStatus was reset to SAVEIO_NONE on every savestate load.
Loading a state that was saved while a savedata operation was in
flight then repeated the operation (or left the dialog waiting on a
completion that had already happened), instead of resuming from the
recorded status.

Restoring the value is safe: DoState joins the IO thread before
serializing, so the stored status is only ever SAVEIO_NONE or
SAVEIO_DONE, and the operation's effects are already part of the
serialized emulated RAM. Old (v2) states still load through the reset
path.
2026-07-27 16:19:26 +02:00
Henrik Rydgård 8304d8622a Hide the save/load indicator by default, add a (developer) setting. Also sneak in an adhoc server list bug fix.
Fixes #21523
2026-04-06 10:04:09 -06:00
Henrik Rydgård d0b25f186b Fix tracking for the savedata reminder for several invisible save types 2025-07-13 23:18:13 +02:00
Henrik Rydgård f410b7e6ea Show a tiny indicator in the top left of the screen when the game is saving or loading. 2025-07-10 15:11:59 +02:00
Henrik Rydgård 85a3635bfe Correct save/load detection for the reminder.
Was missing some critical logic.. oops.
2025-06-11 10:09:32 +02:00
Henrik Rydgård 2fe004eb90 Savedata iothread: Don't alloc the std::thread 2025-04-30 15:53:55 +02:00
Henrik Rydgård 9bee4192ba Implement exit confirmation when closing the window on Windows. 2025-02-17 13:09:11 -06:00
Henrik Rydgård 408d1b0916 Track execution time after save, add new setting for exit confirmation 2025-02-17 12:29:23 -06:00
Henrik Rydgård d2c1c7b54f Consolidate even more error codes 2025-02-04 12:32:11 -06:00
oltolm f11674b2d6 get rid of more __MINGW32__ ifdefs 2025-01-19 10:33:22 +01:00
Henrik Rydgård c91169e702 Restore removed <algorithm> includes.
Turns out these were needed after all. For some reason, on Windows and
Mac, <algorithm> gets auto-included by something else so I don't notice
when it's missing, and MSVC's include dependency tracker doesn't see it
either.
2024-12-19 09:53:07 +01:00
Henrik Rydgård 3e198c53b2 More include cleanup 2024-12-18 13:57:26 +01:00
Henrik Rydgård 843fe22968 Remove superfluous .c_str() 2024-10-17 22:21:07 +02:00
Henrik Rydgård c2a38181ad Alternate solution for ModNation Racers metadata overwrite (see #18430 comments) 2024-09-10 19:06:22 +02:00
Henrik Rydgård f18715bb7c Some renaming 2024-07-16 22:04:41 +02:00
Henrik Rydgård f8bf0bfbb5 Add some new logging to sceUtility to try to figure out the Silent Hill problem 2024-07-16 22:04:41 +02:00
Henrik Rydgård e01ca5b057 Logging API change (refactor) (#19324)
* Rename LogType to Log

* Explicitly use the Log:: enum when logging. Allows for autocomplete when editing.

* Mac/ARM64 buildfix

* Do the same with the hle result log macros

* Rename the log names to mixed case while at it.

* iOS buildfix

* Qt buildfix attempt, ARM32 buildfix
2024-07-14 14:42:59 +02:00
Herman Semenov 17ecee1715 Fixed return copies from functions and const ref params 2024-04-02 18:37:00 +03:00
Henrik Rydgård c5791764d8 Make the i18n T function use std::string_view
Buildfixes, crashfixes

One more

Android buildfix

Buildfix Qt
2024-02-12 18:44:39 +01:00
Herman Semenov af41281761 [Core/Dialog/ELF/FileSystems/HLE/HW/Util] Added const reference for function params 2023-12-14 14:22:24 +03:00
Henrik Rydgård ee6234ecb6 I18N: Switch to getting categories by index instead of by string lookup
Also gets rid of the shared_ptr usage, and generally makes things nicer.

Needed for later config refactorings, good to get in early.
2023-04-07 10:35:01 +02:00
Unknown W. Brackets fcc1abc7c3 Dialog: Update by button flag consistently.
Always check for the flag to change in Update().
2023-02-08 19:02:37 -08:00
Unknown W. Brackets dea9cac16c Core: Add range checks to some helpers and similar. 2023-01-09 16:56:18 -08:00
Henrik Rydgård 7e374c9324 Address feedback, more fixes 2023-01-05 08:38:53 +01:00
Unknown W. Brackets a7b7bf7826 Global: Set many read-only params as const.
This makes what they do and which args to use clearer, if nothing else.
2022-12-10 21:13:36 -08:00
Henrik Rydgård f954013d0b Fix (?) the savestate bug in PSPSaveDialog/SaveDataParam
PSPSaveDialog::DoState called SetPspParam in non-READ modes, which could
modify it.
2022-12-02 22:46:39 +01:00
Unknown W. Brackets 29e7a53b5d Savedata: Update filelist on file erasure.
Also stop reporting as "not coded."
2022-10-16 09:20:04 -07:00
Unknown W. Brackets db5011d7f1 Savedata: Cache SFO data during processing.
This only caches between touching PSP code, in case something changes.
Reduces cases of multiple SFO lookups and reads.
2022-10-09 14:42:31 -07:00
Unknown W. Brackets 5bed35b293 Savedata: Skip and defer texture exist check.
We can skip if there's no UI.
2022-10-09 14:42:31 -07:00
Unknown W. Brackets ce80900b75 Savedata: Return errors more correctly on load.
If the buffer isn't large enough, return an error.  See #14687, thanks
sum2012 and gid15.
For many error cases, ensure SFO data and bind are not updated on failure,
and that dataSize is forced to zero on data errors.
2022-09-13 00:10:27 -07:00
Unknown W. Brackets e75d2a097b Savedata: Fix indeterminate timing of field update.
This makes the test pass consistently, instead of depending on thread
timing.
2022-01-26 00:31:30 -08:00
Unknown W. Brackets 29aa81be9e Savedata: Respect IO timing method setting. 2021-09-12 07:05:51 -07:00
Unknown W. Brackets eba67d5fcd SaveState: Show a warning if saved after savestate.
If you load a save state from before you created savedata (or from a
different path of savedata), some games will refuse to save.  This shows a
warning since it can be a confusing situation.

We could potentially add an undo for loading state, to give an option for
getting back after this warning.
2021-08-07 00:01:20 -07:00
Henrik Rydgård f4a6d291e1 Common: Capitalize setCurrentThreadName(). 2021-04-30 23:02:36 -07:00
Unknown W. Brackets 7b5d8bc38f Utility: Move dialog classes to heap.
This makes it easier to properly reset them on game reset.
2021-04-06 21:59:40 -07:00
Unknown W. Brackets fe83f21df5 PPGe: Remove ENTR hack, fix string concat.
Sanitize first, then concatenate.  This replicates the firmware behavior
nicely.
2021-03-29 00:21:26 -07:00
Unknown W. Brackets 88fe2e9863 Dialog: Use dialog type header more consistently. 2021-02-27 13:43:12 -08:00
Unknown W. Brackets aa13f5afb7 Dialog: Track type id on dialog class. 2021-02-27 12:01:52 -08:00
Unknown W. Brackets e7b968be73 Debugger: Notate Memcpys directly as well. 2021-02-15 15:01:23 -08:00
Henrik Rydgård 5ed5947804 Merge pull request #13943 from unknownbrackets/dialog
Dialog: Simulate volatile memory lock behavior
2021-02-15 16:47:06 +01:00