How to Push the R36S to the Max for Heavy PSP Games (Ghost of Sparta)
Share
This is the September 2026 “push it to the max” recipe for heavy 3D PSP on an RK3326 handheld — God of War: Ghost of Sparta as the torture test. After PPSSPP 2021, skip-buffer, a 20 FPS cap, and clocks that actually stay high, our overlay read 15/19 at ~101% speed: full logical speed, frameskip doing the choppy part. It will not become 60 FPS. It becomes playable.
Works on HN-R36S-WiFi (3.5") and R36S Plus (4.0" / 720×720). Plus units often never list 1.51 GHz until the device tree is grafted — that is a separate, workshop-level step in why the R36S Plus stops at 1.30 GHz. The SSH / PPSSPP half of this guide needs WiFi (or you edit the SD in a PC reader).
What “max” actually means
Stock Ghost of Sparta on current ArkOS PPSSPP sat at 10–13 FPS and slow-mo on the Plus we opened. After this stack, the overlay was 15 drawn / 19 logical at ~101% speed. Combat moves at the game’s intended pace; you see every other frame because frameskip is 2. Hold R2 to unthrottle menus and cutscenes.
Use a dump you own. We do not link ISOs. For which PSP titles are actually full-speed on this chip, start with the PSP tier list. Ghost of Sparta is Tier 3 — the honest “heavy 3D” bucket.
The four things that were actually wrong
- Wrong PPSSPP. Newest standalone is fine for light games. Heavy 3D on this Mali wants standalone-2021.
-
Compat silently undid skip-buffer. Setting Skip Buffer Effects on is not enough. Game compatibility was forcing it off until we set
IgnoreCompatSettings = SkipBufferEffects. - 70°C thermal trip. God of War walks ~90–105°C. Stock IPA trips at 70°C, so the chip sits at ~1.01 GHz / 400 MHz GPU while the UI still says “performance”.
-
Plus clock cap (Plus only). The 720×720 DTB never listed 1.51 GHz. And even after grafting it, ArkOS
perfmaxwas hardcoded to 1296 MHz on every game launch — so the extra OPP never got used.
If you only change PPSSPP settings and skip heat + clocks, Ghost of Sparta still feels like it is running underwater. If you only raise clocks and stay on new PPSSPP with skip-buffer off, you still get 10–13 FPS.
What you need
- Handheld on the same 2.4 GHz WiFi as your PC (5 GHz dongles on these boards often do nothing)
- Windows / Mac / Linux with
ssh(already in Windows Terminal) - ISO on the PSP folder — how to add PSP games. Prefer ISO over CSO on heavy 3D.
- Game not running while you edit files (PPSSPP copies ini back on exit)
1. Turn Remote Services on (and keep it on)
EmulationStation → Options → Enable Remote Services. Note the IP under Network Info.
That starts SSH (port 22), Filebrowser (port 80, title “ArkOS Browser”), and Samba. If SSH later says connection refused, the handheld slept or Remote Services stopped — run the option again.
Open http://YOUR-IP/ on a PC. Use SSH when you want to paste the Python block or watch clocks live while the game is running.
Default SSH login is ark / ark unless you changed it:
ssh ark@192.168.1.43
ArkOS ppsspp.sh copies ppsspp.ini.sdl → ppsspp.ini on start and copies back on exit. Edit while Ghost of Sparta is running and your changes vanish when you quit.
2. Switch the game to PPSSPP 2021
Highlight the game → Select → Edit this game's metadata → Emulator standalone-2021 → save.
On ArkOS the EmulationStation system for this card is often named ppsspp (folder still /roms2/psp/), not psp. After launch you want a process like /opt/ppsspp-2021/PPSSPPSDL:
pgrep -af PPSSPPSDL
You can also stamp the default for the whole system in ~/.emulationstation/es_settings.cfg:
<string name="ppsspp.emulator" value="standalone-2021" />
Restart EmulationStation if the picker looks stale.
3. The PPSSPP file that actually moves the needle
Persistent files sit next to the ROMs:
- SD1:
/roms/psp/ppsspp/PSP/SYSTEM/ppsspp.iniandppsspp.ini.sdl - SD2:
/roms2/psp/ppsspp/PSP/SYSTEM/ppsspp.iniandppsspp.ini.sdl
Patch both files. The line most people miss is IgnoreCompatSettings — without it, Ghost of Sparta’s compatibility profile turns Skip Buffer Effects back off.
| Setting | Value | Why |
|---|---|---|
| SkipBufferEffects | True | Biggest extra FPS; water/shadows may glitch |
| IgnoreCompatSettings | SkipBufferEffects | Stops the game profile undoing the line above |
| FrameSkip | 2 | Draw every other frame so combat keeps moving |
| AutoFrameSkip | True | Adds skip only when a scene is heavy |
| ForceMaxEmulatedFPS | 20 | Stops the game aiming at 30–60 the chip cannot hold |
| InternalResolution | 1 | Native 1×. 2× looks the same on these panels and tanks FPS |
| BloomHack | 3 | Aggressive bloom skip on this title |
| DisableSlowFramebufEffects | True | Drops expensive framebuffer passes |
| DisableStencilTest | True | Cheaper 3D on Mali |
| SkipGPUReadbackMode | 1 | Avoids stalling the GPU for CPU readbacks |
| MemBlockTransferGPU | False | Less GPU memcpy work |
| CPUSpeed | 222 | Less emulated PSP work than the default 333 |
| IOTimingMethod | 0 | Fast I/O timing |
| VSyncInterval | False | Do not wait on the display |
| RenderDuplicateFrames | True | Smoother presentation at the 20 cap |
| ShowFPSCounter | 3 | FPS + speed % overlay so you can verify |
Paste this after SSH (change /roms2/ to /roms/ if the ISO is on SD1). It only rewrites keys that already exist; it adds IgnoreCompatSettings if missing:
python3 - << 'PY'
import os, re
paths = [
"/roms2/psp/ppsspp/PSP/SYSTEM/ppsspp.ini",
"/roms2/psp/ppsspp/PSP/SYSTEM/ppsspp.ini.sdl",
]
u = {
"FrameSkip": "2", "AutoFrameSkip": "True", "ForceMaxEmulatedFPS": "20",
"InternalResolution": "1", "SkipBufferEffects": "True",
"IgnoreCompatSettings": "SkipBufferEffects",
"BloomHack": "3", "DisableSlowFramebufEffects": "True",
"DisableStencilTest": "True", "SkipGPUReadbackMode": "1",
"MemBlockTransferGPU": "False", "CPUSpeed": "222",
"IOTimingMethod": "0", "VSyncInterval": "False",
"RenderDuplicateFrames": "True", "HardwareTransform": "True",
"SoftwareSkinning": "True", "ShowFPSCounter": "3",
"SplineBezierQuality": "0", "HardwareTessellation": "False",
}
for p in paths:
if not os.path.exists(p):
print("skip missing", p); continue
text = open(p, errors="replace").read()
for k, v in u.items():
pat = r"(?m)^" + re.escape(k) + r" = .*$"
line = "%s = %s" % (k, v)
if re.search(pat, text):
text = re.sub(pat, line, text)
else:
text += "\n" + line + "\n"
open(p, "w").write(text)
print("patched", p)
PY
Leave the overlay on for one session. Target is ~20 logical FPS at ~100% speed, not a locked 30. Turn the counter off later in the PPSSPP menu (L2 on ArkOS). If skip-buffer makes water unreadable, turn it off in-menu — you will lose FPS; that is the trade.
4. Fast-forward on R2
Stock mappings often put Unthrottle on a keyboard key. PSP games do not use R2. In /roms2/psp/ppsspp/PSP/SYSTEM/controls.ini (or the /roms/psp/... twin):
Unthrottle = 1-61,10-195,10-105
Hold R2 for menus, boats, and cutscenes. It will not 2× a heavy fight.
5. Confirm you are not thermally clipped
With Ghost of Sparta running, SSH a second session:
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
cat /sys/devices/system/cpu/cpufreq/policy0/scaling_available_frequencies
cat /sys/devices/platform/ff400000.gpu/devfreq/ff400000.gpu/cur_freq
awk '{print $1/1000 " C"}' /sys/class/thermal/thermal_zone0/temp
cat /sys/class/thermal/thermal_zone0/trip_point_0_temp
| What you see | Meaning |
|---|---|
| CPU 1512000, GPU 520000000, ~90°C | Healthy top gear (3.5" units, or a Plus that already has the extra OPP) |
| CPU 1296000 and available list ends at 1296000 | Plus device tree never listed 1.51 GHz — see the Plus clock article |
| Available includes 1512000 but in-game max is still 1296000 | ArkOS perfmax is hardcoding 1296 on launch. Max must follow cpuinfo_max_freq
|
| CPU 1008000, GPU 400000000, SoC already >70°C | Stock IPA trip. Settings will not save you |
GPU max on both trees we measured is already 520 MHz. RAM is 786 MHz. There is no extra GPU overclock hiding in a menu.
Workshop thermal unlock (heat is real)
Stock IPA trip0 is 70°C. Ghost of Sparta sits above that within minutes. In the workshop we persist trip0 105°C / trip1 110°C and leave critical shutdown at 115°C. A conservative home test (does not survive reboot unless you also edit /etc/rc.local) is 90°C:
echo 90000 | sudo tee /sys/class/thermal/thermal_zone0/trip_point_0_temp
echo 105000 | sudo tee /sys/class/thermal/thermal_zone0/trip_point_1_temp
echo 0 | sudo tee /sys/class/thermal/cooling_device0/cur_state
At 1.51 GHz in Ghost of Sparta the Plus SoC we logged walked ~90→105°C, then IPA oscillated (1.51 GHz ↔ ~1.01 GHz, GPU 520 ↔ 400 MHz) until the game closed. Keep vents clear. Do not play under a pillow. Stop if the back is uncomfortable to hold. This is not a voltage overclock — it is letting the chip use the clocks the OPP table already has.
To survive reboot, the same echoes belong in /etc/rc.local (use #!/bin/sh, not sh -e, and || true on any optional sysfs writes) and in /usr/local/bin/perfmax so every game launch re-applies them. Backup those two files first. If that sounds like more than you want to own, book the video call — we will show a unit that already has it.
6. Plus-only: 1.51 GHz is missing from the device tree
Classic 3.5" ArkOS images we see already expose 1512 MHz. Plus boots rk3326-r36plus-linux.dtb so the square panel works — and that file simply omits the top CPU step. Same RK3326 silicon. Do not copy rg351mp-kernel.dtb over it or the screen goes wrong.
The graft, restore file, and the perfmax 1296 trap are written up in why the R36S Plus stops at 1.30 GHz. If you are not comfortable restoring a DTB from a PC card reader, skip that article’s workshop section and stay at 1.30 GHz — the PPSSPP 2021 + skip-buffer + 20 FPS cap still does most of the “playable” work.
What “good” looks like
| Moment | Expect |
|---|---|
| Overlay | ~15 drawn / ~19 logical at ~100% speed on Ghost of Sparta |
| Menus / shops | Smooth; hold R2 to skip through |
| Linear combat | Playable at the 20 FPS cap |
| Particle fights, water, big set pieces | Still dips. That is the chip |
| After 15–20 minutes | SoC near the IPA trip; clocks may oscillate. Take a break |
Frequently asked questions
Can the R36S actually play Ghost of Sparta?
Yes, as a 20 FPS, frameskipped, thermally hot experience. It is playable, not pretty. Showcase 3D PSP is the weak spot of every RK3326 handheld.
Is this the same as the August God of War SSH article?
Same family of changes. This September write-up adds IgnoreCompatSettings (skip-buffer staying on), the Plus 1.30 GHz DTB cap, the perfmax 1296 trap, and the 105°C workshop trip we measured in-game. Keep the original SSH walkthrough for the shorter path.
Do I need the WiFi model?
For live SSH / Filebrowser, yes. Base non-WiFi units can still get the ini from a PC card reader; you just cannot watch clocks while playing.
Will this break other PSP games?
One shared ppsspp.ini will make lighter titles more frameskipped than they need. Prefer per-game emulator metadata, or keep a backup of ppsspp.ini.sdl.
ISO or CSO?
ISO. CSO spends CPU decompressing. Ghost of Sparta is already GPU-heavy.
Want Ghost of Sparta on a real unit before you buy?
Free 10-minute video call. We will open an HN-R36S-WiFi or R36S Plus, load the game, and show the FPS overlay plus current clocks. Ships from Gurgaon in 24–48h, GST-inclusive, COD/UPI, 7-day returns.
HN-R36S-WiFi R36S Plus Book a video callHobbyist Nirvana · Happiness Awaits You