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.

1600x900 Letterboxed

Why 900p? Yes 720p will allow for less GPU time but it caused visual issues.

1600x900
1280x720

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

1600x900 Letterbox Removed

Patch

Patch Code

Supporters

Thanks to the patrons who supported me on various platforms! You guys are awesome!

Patreon:

  • ac2pic
  • alessaro92
  • faith
  • GarnetSunset
  • Ioritree
  • Jeff Eberlin
  • YveltalGriffin

Github Sponsors:

  • Asinine
  • regal.
  • projectrez
  • gorshco

BuyMeACoffee and Ko-fi:

  • John
  • InquisitionImplied
  • YveltalGriffin
  • Maestruleduardo
  • Ryan N