Commit Graph
49831 Commits
Author SHA1 Message Date
Henrik RydgårdandClaude Opus 5.5 ee4f09d22f Lang: Fill in untranslated Romanian strings
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 08:26:37 +01:00
Henrik RydgårdandClaude Opus 5.5 7d32791a0c Lang: Fill in untranslated Lithuanian strings
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 08:26:36 +01:00
Henrik RydgårdandClaude Opus 5.5 3f68aaaf78 Lang: Fill in untranslated Hebrew strings
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 08:26:34 +01:00
Henrik RydgårdandClaude Opus 5.5 1a0b0862a6 langtool: Add import-language, to merge a file of translations into a language
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 08:11:10 +01:00
Henrik RydgårdandClaude Opus 5.5 793703b550 Lang: Add missing keys as English placeholders (copy-missing-lines)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 08:09:57 +01:00
Henrik Rydgård 43a69b1c84 Merge pull request #22802 from hrydgard/more-ui-work
More UI design work and tweaks
2026-10-26 23:49:09 +01:00
Henrik Rydgård 4d26021a9b More round stuff 2026-10-26 23:08:25 +01:00
Henrik Rydgård e93c71b337 More UI cleanup 2026-10-26 23:01:21 +01:00
Henrik RydgårdandClaude Opus 5.5 849c5c10e4 SystemInfoScreen: Use ChoiceGroups instead of collapsible sections
The name lists (extensions, flags) become InfoItems, which have the
background a ChoiceGroup needs.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-26 23:01:21 +01:00
Henrik Rydgård 5c2a17f120 Give InfoItem backgrounds 2026-10-26 23:01:21 +01:00
Henrik Rydgård acc9fe9283 Somewhat better organization of UI settings 2026-10-26 23:01:21 +01:00
Henrik Rydgård 734d56a1d3 Tweaks to RetroAchievements screen 2026-10-26 23:01:21 +01:00
Henrik Rydgård 7e2b68cc19 Minor code cleanups 2026-10-26 23:01:21 +01:00
Henrik Rydgård 9ac9b2c23d Add a left-pointing chevron, more ChoiceGroup 2026-10-26 23:01:21 +01:00
Henrik RydgårdandClaude Opus 5.5 49115bed93 Settings: Make the navigation bar fit square buttons, use chevrons between path parts
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-26 23:01:21 +01:00
Henrik RydgårdandClaude Opus 5.5 8e72082d3e Settings: Show a chevron on choices that open another screen
Links to other pages already had one. SettingItem::OpensScreen() gives the same to
choices (and custom items that are choices) that open a full screen, like control
mapping or the savedata manager. Ones that open popups don't get it.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-26 23:01:21 +01:00
Henrik Rydgård 7b96bbfbc2 Merge pull request #22801 from hrydgard/fix-kernel-logic
Kernel: Fix savestate MipsCall actions, sysclib strchr, TLS leak, FPL counter, module id list
2026-10-26 22:31:36 +01:00
Henrik RydgårdandClaude Opus 5.5 e9fa393546 Kernel: Match GetModuleIdList and heap allocation to hardware
pspautotests modules/idlist shows that sceKernelGetModuleIdList still
writes a partial entry at the end of the buffer (a size of 6 gives two
entries), which the previous commit had stopped. A NULL buffer or a
negative size returns ILLEGAL_ADDR without writing the count.

sysmem/kernel/heap shows sceKernelAllocHeapMemory returning null for
sizes near 4GB, rather than wrapping. The WithOption variant already
checked this. The plain one now does too.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-26 22:05:55 +01:00
Henrik RydgårdandClaude Opus 5.5 22b6fcbf22 Kernel: Fix sysclib strchr/strrchr, TLS pool leak, FPL counter
- sysclib strchr/strrchr searched for the whole string, not the
  character, so they returned 0 for any nonzero c.
- A thread ending with blocks from more than one TLS pool leaked every
  other block, since the restarted loop's ++iter skipped an entry.
- FPL's nextBlock grew by up to numBlocks per allocation and eventually
  overflowed into a negative block index. Old states with a negative one
  now reset it rather than failing to load.
- sysclib strncpy bounded its copy by the source's valid size only, not
  the destination's.
- sceKernelAllocHeapMemory wrapped for sizes near 4GB, and
  sceKernelGetModuleIdList could write a partial entry past the buffer
  size and dereferenced a missing module.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-26 21:42:06 +01:00
Henrik RydgårdandClaude Opus 5.5 210be3b311 Savestate: Keep MipsCall actions of type 0
Action type IDs start at 0, and the first one registered is
ActionAfterMipsCall, but MipsCall::DoState used 0 to mean no action.
So every call made with __KernelCallAddress lost its action chain on
load: the thread's wait state was never restored when the call
returned, and chained actions never ran.

Version 2 of the section marks a missing action with -1.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-26 20:13:59 +01:00
Henrik Rydgård e77f0e46b8 Merge pull request #22799 from hrydgard/gamepacker-jni-attach
GamePacker: Attach the worker thread to JNI
2026-10-26 18:11:53 +01:00
Henrik RydgårdandClaude Opus 5.5 ec6c21a300 GamePacker: Attach the worker thread to JNI
Games in Android's scoped storage are opened through JNI, and getEnv()
asserts on a thread that isn't attached, so compression crashed on its
first file access.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-26 18:09:42 +01:00
Henrik Rydgård 9f9f0ac104 Merge pull request #22798 from hrydgard/docker-drop-ffmpeg-step
Docker: Drop the ffmpeg build step
2026-10-26 18:02:51 +01:00
Henrik RydgårdandClaude Opus 5.5 687ca704e0 Docker: Drop the ffmpeg build step
FFmpeg is now built from ext/ffmpeg as part of the CMake build, so the
submodule's build script the Dockerfile ran no longer exists.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-26 17:59:12 +01:00
Henrik Rydgård 85f9d8985b Merge pull request #22797 from hrydgard/ui-naming-translations
Translation sweep: missing strings, wrong categories, and a langtool scanner
2026-10-26 17:54:26 +01:00
Henrik Rydgård d5fc6ad334 Merge pull request #22796 from hrydgard/debugger-kb
ImDebugger: Touch helpers (compact menu, quick scroll, soft keyboard)
2026-10-26 17:05:14 +01:00
Henrik RydgårdandClaude Opus 5.5 1b60f76e58 Translate error messages once, from keys the source names
GameManager translated install errors when storing them, and the install
screens then looked the translated text up again as a key. It now stores the
category and key, and translates when asked. The raw ISO install error gets
the existing "Installation failed" string.

Some other errors went around as strings that were then used as keys:
- A missing savestate file now has its own error code, ERROR_FILE_MISSING,
  instead of a key in the failure reason.
- The PKG reader's reasons are technical English, so they're now shown
  untranslated under the translated "This PKG file isn't a PSP game update".
- The netconf dialog looked up the channel number. Only "Auto" is translated
  now, using the WLAN Channel setting's string.
- Adds the missing "Failed to read old directory" for memstick moves.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-26 17:04:20 +01:00
Henrik RydgårdandClaude Opus 5.5 da411d5837 langtool: Add find-missing-keys, which scans the source for untranslated lookups
Lists the T() calls, settings page texts, config labels and choice lists whose
key isn't in en_US.ini. With --dynamic, it lists the lookups whose key is only
known at runtime instead, which it can't check.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-26 16:44:38 +01:00
Henrik RydgårdandClaude Opus 5.5 097f5e7023 Lang: Fix the wording of some UI strings
The MIPSTracer page's "log file" is the trace file, and some strings had odd
spacing, grammar or capitalization. The auto load savestate toast now uses the
setting's key instead of a duplicate one, and the English fallbacks in code
match en_US.ini.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-26 16:41:12 +01:00
Henrik RydgårdandClaude Opus 5.5 b3717e800e ImDebugger: Make the menu bar taller on phones
A "Bar height" setting in the Misc menu, 166% by default on phones.
The item spacing in the bar grows along with it, so the menu titles can
be hit anywhere in the bar's height. The menus themselves keep the
normal style.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-26 16:36:49 +01:00
Henrik RydgårdandClaude Opus 5.5 3c398657df ImDebugger: Route the soft keyboard through the System request layer
Instead of a hook and four Android_* functions declared in
ImDebugger.cpp, the debugger calls System_SetSoftKeyboardForced(), and
the platform reports a closed keyboard with
UIMessage::SOFT_KEYBOARD_HIDDEN.

"Keep keyboard after switching apps" is passed along with the request,
and the activity's onStop ends a keyboard that shouldn't persist, so the
native side no longer tracks app pauses.

The debugger is now also told when it's hidden. Frame() isn't called
then, so hiding it with the hotkey used to leave the keyboard up.

The keyboard button and its Misc menu options are only shown when
SYSPROP_KEYBOARD_IS_SOFT is set, which Android now reports too. iOS and
UWP on Xbox report it as well, but don't implement the request yet.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-26 16:36:49 +01:00
KiwiYuandClaude Opus 5.5 1c1b7c9f50 ImDebugger: Add a soft keyboard toggle, implemented on Android
A "Show Keyboard" button in the menu bar brings up the soft keyboard and
keeps it up, typing into the debugger. On Android, NativeSurfaceView
acts as a text editor while it's forced, so showSoftInput actually works
for it, and passes typed text and key presses on to the native side.
Closing the keyboard with Back unticks the toggle.

The Misc menu can hide the button (which also turns the keyboard off)
and choose whether the keyboard comes back after switching apps.
Other platforms can provide an implementation through
ImDebugger_SetSoftKeyboardHook.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-26 16:36:49 +01:00
KiwiYuandClaude Opus 5.5 2d4e633fe6 ImDebugger: Add a quick scroll strip for touch screens
A thin floating strip on the right edge with Top, PgUp, Up, Down, PgDn
and End buttons, acting on the last debugger window the user touched
(its name is shown under the buttons). Regular ImGui windows are
scrolled directly. The CPU disassembly and the memory viewers get key
presses instead, and Top/End go to the start or end of RAM.

The strip can be collapsed to a single button, or turned off from the
Misc menu.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-26 16:36:49 +01:00
KiwiYuandClaude Opus 5.5 559a7429ea ImDebugger: Add a compact menu layout and a bar left margin
The menus are split into lambdas, so they can be shown either side by
side or as submenus of a single "Menu" dropdown. The compact layout is
used on narrow screens, or when chosen from the Misc menu (the default
on phones).

The bar also gets an adjustable left margin (to keep the first button
clear of rounded screen corners, on by default on phones), slightly
taller menu rows in the compact layout, and a Running/Stepping
indicator.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-26 16:36:49 +01:00
Henrik RydgårdandClaude Opus 5.5 3b1854b682 Lang: Translate the strings that were missing from the language files
AI translated. Languages without a reliable translation (mostly dr_ID, ku_SO,
km_KH, lo_LA, jv_ID, tg_PH) keep the English placeholder.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-26 16:32:18 +01:00
Henrik RydgårdandClaude Opus 5.5 c48398fa54 Lang: Add the UI strings that were missing from the language files
Found by scanning the source for lookups whose key isn't in en_US.ini. They get
the English string as a placeholder in every language for now.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-26 16:20:05 +01:00
Henrik RydgårdandClaude Opus 5.5 a2170728f5 UI: Look up strings in the sections where they're translated
These were looked up in a different section from the one with the translation,
so they always showed in English (the savedata error messages, "Done!" after
moving the memstick, "Switch UMD", "Ask for network permission" and others).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-26 16:20:03 +01:00
Henrik RydgårdandClaude Opus 5.5 a6cbc9c27f Graphics settings: Rename the "Rendering Mode" header to "Rendering"
Also adds the missing "Latency" key for the header of that name, and removes
the unused "Performance" key.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-26 16:14:19 +01:00
Henrik Rydgård 5d9f127dcd Merge pull request #22794 from hrydgard/settings-stale-draw-context
Fix crash after changing Display resolution on Android, and other stale draw context uses
2026-10-26 15:56:34 +01:00
Henrik Rydgård a2f86f5aac Merge pull request #22795 from hrydgard/fix-core-filters
Fix Core.vcxproj.filters, broken by the POPS boot commit
2026-10-26 15:24:26 +01:00
Henrik RydgårdandClaude Opus 5.5 b43e119ea1 GPU: Don't keep state from before a device loss
- Metal: Load the shader cache again in DeviceRestore, like Vulkan. DeviceLost
  saves it and throws everything away, so the next save (the next app switch,
  or quitting) overwrote it with only what had been drawn since.
- Software renderer: Bring the post-shader back after a device loss.
  DestroyDeviceObjects asks for it with restorePostShader_, but
  CreateDeviceObjects cleared the flag again before BeginFrame could act on
  it. The hardware backends recover through renderResized_.
- Forget pointers into the old device's objects in DeviceLost, rather than
  relying on BeginFrame to come before the next flush: Vulkan's last pipeline
  and bound views, Metal's UBO allocations, the GLES last linked shader and
  bound texture.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-26 15:16:33 +01:00
Henrik RydgårdandClaude Opus 5.5 c1f9f77a9e Fix Core.vcxproj.filters, broken by the POPS boot commit
0b1e1a9bb3 put the PopsMMIO entries inside the MeMMIO ones, leaving
unclosed tags, so Visual Studio couldn't load the filters. Also adds
the missing Util\KL4E.h.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-26 15:11:29 +01:00
Henrik RydgårdandClaude Opus 5.5 247e764b97 UI: Don't use draw objects from before a device loss
The system info screen's "Copy summary" kept the draw context it was
created with, and the GPU driver test screen kept its pipelines and
sampler, using and finally releasing them into a deleted context after
Android lost the surface. Look up the draw context when clicked, and
release the test objects on device loss (they're recreated on draw).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-26 15:04:00 +01:00
Henrik RydgårdandClaude Opus 5.5 ac8440e35d Settings: Don't keep the draw and UI contexts in page callbacks
Android replaces both when it loses the surface (a recreate, which
changing the display resolution does, or switching away), but the
settings screen and its views live on. The external display setting's
enabled check, which runs on every draw, then called into the deleted
DrawContext ("Pure virtual function called!"). The UI scale and
"Reload UI atlas" handlers had the same problem with the UIContext.
Look them up through the screen manager when needed instead.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-26 15:00:41 +01:00
Henrik Rydgård aa9dfa85f6 Merge pull request #22788 from hrydgard/iphone-duo
iOS: iPhone Duo support (insets on the cover and inner screens)
2026-10-26 14:04:22 +01:00
Henrik Rydgård 17a61343d1 Merge pull request #22792 from hrydgard/more-ui-fixes
Settings: General tab, pause screen save state refresh, UI polish
2026-10-26 12:59:33 +01:00
Henrik Rydgård fe76beb04e Merge pull request #22789 from LunaMoo/xmb-home-exit
Xmb home exit
2026-10-26 12:59:17 +01:00
Henrik Rydgård d85de7bc68 Merge pull request #22793 from hrydgard/hprm-peeklatch
sceHprm: Write zeroes to the latch buffer in sceHprmPeekLatch too
2026-10-26 12:51:21 +01:00
Henrik Rydgård e443e84d3c sceHprm: Write zeroes to the latch buffer in sceHprmPeekLatch too
We don't support the headphone remote buttons, so we just leave
the buffer all zeroes. Previously we didn't write, which could cause
games to register a ghost "track forward" or the other buttons.

Should fix the DJ Max 2 OST track-forwarding problem in #7468.
2026-10-26 12:46:31 +01:00
Henrik Rydgård 4cb7ddb50c More misc UI polish 2026-10-26 12:10:10 +01:00