Please note that you are required to have a exploited PlayStation 4 console on firmware 9.00 or lower to run the patches mentioned in this article.
Intro
Quantic Dream pushing last gen hardware to the limits on PS3, now remastered on PS4. Fans of the original PS3 version wished for the removal of the blackbars and myself for 60 Frames Per Second. annnnd we got none of that in the remaster.
Fine, I’ll do it myself.
Part 1 - Resolution and Framerate Unlocking
Searching for framerate limiter came up easy; a simple search for kernel function sceVideoOutSetFlipRate
lands us here:
007d953e be 01 00 MOV ESI,0x1
00 00
007d9543 e8 98 dd CALL sceVideoOutSetFlipRate
a7 00
MOV
to ESI
with 0x0
does the trick easliy.
Resolution? Same deal. 4 byte int of 1920
came up with a few results but two results is of intrest.
004003c2 c7 45 c0 MOV dword ptr [RBP + local_48],0x780
80 07 00 00
004003c9 c7 45 b0 MOV dword ptr [RBP + local_58],0x438
38 04 00 00
004003d0 be 80 07 MOV ESI,0x780
00 00
004003d5 ba 38 04 MOV EDX,0x438
00 00
004003da eb 03 JMP LAB_004003df
The first row does nothing but the second row does.
Why 900p? Yes 720p will allow for less GPU time but it caused visual issues.
Part 2 - Letterbox Be Gone
I searched for Ratio and found this. UseCinemaRatio
**************************************************************
* FUNCTION *
**************************************************************
FUN_00404260 XREF[1]: FUN_00400200:00400686(c)
...
00404277 48 8d 05 LEA RAX,[PTR_s_UseCinemaRatio_0164eff8]
7a ad 24 01
...
00400686 e8 d5 3b CALL FUN_00404260
00 00
0040068b 0f b6 f8 MOVZX EDI,AL
0040068e e8 ad 13 CALL FUN_00461a40
06 00
Hmm, MOVZX
from AL
to EDI
and a function call.. What could this be.
**************************************************************
* FUNCTION *
**************************************************************
undefined FUN_00461a40()
undefined AL:1 <RETURN>
FUN_00461a40 XREF[3]: FUN_00400200:0040068e(c),
01382d28(*), 01479398
00461a40 48 8d 05 LEA RAX,[DAT_01860ed3]
8c f4 3f 01
00461a47 0f b6 08 MOVZX ECX,byte ptr [RAX]=>DAT_01860ed3
00461a4a 40 0f b6 f7 MOVZX ESI,DIL
00461a4e 39 f1 CMP ECX,ESI
00461a50 74 1b JZ LAB_00461a6d
00461a52 40 88 38 MOV byte ptr [RAX]=>DAT_01860ed3,DIL
LAB_00461a6d
00461a6d c3 RET
Looks a little complicated. UseCinemaRatio
variable might load a byte from somewhere, MOVZX EDI,AL
then moves the value into register EDI
.
A simple jump switch from Jump Zero
to Jump Not Zero
did the trick!
This skips storing byte and went straight to return.
Results
Patch
Supporters
Thanks to the patrons who supported me on various platforms! You guys are awesome!
Monthly supporters:
-
- ac2pic
- Alexa
- Brett
- Ciril
- GarnetSunset
- Mmmmmhno
- Paul
- PlayStation5Mods
- RazzySxPB
- Ryan
- Voredy
- YveltalGriffin
- Zackery
- alessaro92
- ashenC
- embee
- erdosadam24
- faith
- maplemiyazaki
- patrick
- rudi
-
- VIPO777
- WardFail
- Whitehawkx
- gorshco
- jrson83
- regal.
- suwagawaki