PPU-49c96996b6f3c0b32422375978c41e0c7ed95183: # Uncharted 3 BCES01175 1.00
  #- [ be32, 0x0072031c, 0x2f890001 ] #Nasty Hack
  - [ be32, 0x00720340, 0x480009ac ] #MLAA
  - [ be32, 0x0072fba0, 0x38000001 ] #Debug
  - [ be32, 0x0072fba4, 0x980b2163 ] #Menu
  - [ be32, 0x0074c2f8, 0x48000010 ] #Spu Lightning


PPU-664fb0e4a94c62c15a6474841c202fb2bf80ce16: # Uncharted 3 GOTY BCES01670 1.10
  #- [ be32, 0x00728c88, 0x2f890001 ] #Nasty Hack
  - [ be32, 0x00728cac, 0x480009ac ] #MLAA
  - [ be32, 0x00738540, 0x38000001 ] #Debug
  - [ be32, 0x00738544, 0x980b2163 ] #Menu
  - [ be32, 0x00754da0, 0x48000010 ] #Spu Lightning


PPU-02a88c3c6cd415b0bb81f1606bc743835881a4ba: # Uncharted 3 BCES01175 1.19
  #- [ be32, 0x0073a1b4, 0x2f890001 ] #Nasty Hack
  - [ be32, 0x0073a1d8, 0x480009ac ] #MLAA
  - [ be32, 0x00737e4c, 0x38000001 ] #Debug
  - [ be32, 0x00737e50, 0x980b2163 ] #Menu
  - [ be32, 0x007653c0, 0x48000010 ] #Spu Lightning

PPU-9df60dc1aa5005a0c80e9066e4951dc0471553e6: #TLOU BCUS98174, BCES01585 v1.00
  - [ be32, 0x00a46ad0, 0x38000001 ] #Debug
  - [ be32, 0x00a46ad4, 0x980b2db0 ] #Menu
  #- [ be32, 0x00a51a8c, 0x48000a64 ] #MLAA
  - [ be32, 0x00afeb24, 0x48000010 ] #SPU Lightning

PPU-38e5c927cd4e2b18ad9613c607822aca2798c172: #TLOU BCES01585 v1.06
  - [ be32, 0x00a82258, 0x38000001 ] #Debug
  - [ be32, 0x00a8225c, 0x980b2db0 ] #Menu
  - [ be32, 0x00a6fc20, 0x48000a64 ] #MLAA
  - [ be32, 0x00b182f4, 0x48000010 ] #SPU Lightning

PPU-120fb71f7352d62521c639b0e99f960018c10a56: # TLOU BCES01585, BCUS98174 v1.11
  #- [ be32, 0x00a80350, 0x48000ab8 ] #MLAA
  - [ be32, 0x00b294ec, 0x48000010 ] #SPU Lightning

PPU-83681f6110d33442329073b72b8dc88a2f677172: # BLUS30443
# Set 60FPS with no frameskip
# by Gibbed
  - [ be16, 0x25ed8, 0x981f ]

# delta time
# by Whatcookie
  - [ be32, 0x0001b964, 0x496ac2cd ] # jump to code cave

# get mftb
  - [ be32, 0x016c7c30, 0x7eac42e6 ] # mftb r21              // Move from timebase register (clock)

# get mftb delta
  - [ be32, 0x016c7c34, 0x3ec00185 ] # lis r22,0x0185        // load high bits of address
  - [ be32, 0x016c7c38, 0x3ad62608 ] # addi r22,r22,0x2608   // load low bits of address
  - [ be32, 0x016c7c3c, 0x7e96a02a ] # ldx r20,r22,r20       // load previous frames mftb reading
  - [ be32, 0x016c7c40, 0xfab60000 ] # std r21,0x0(r22)      // store this frames mftb reading
  - [ be32, 0x016c7c44, 0x7e74a850 ] # subf r19,r21,r20      // subtract previous mftb reading from this mftb frames reading

# mftb delta to float
  - [ be32, 0x016c7c48, 0xfa760018 ] # std r19,0x18(r22)     // store mftb delta (to be loaded into FPR)
  - [ be32, 0x016c7c4c, 0xcbd60018 ] # lfd f30,0x18(r22)     // load mftb delta into FPR
  - [ be32, 0x016c7c50, 0xffc0f69c ] # fcfid f30,f30         // convert integer to double
  - [ be32, 0x016c7c54, 0xffc0f018 ] # frsp f30,f30          // round to single precision

# mftb delta to seconds
  - [ be32, 0x016c7c58, 0x3e40016c ] # r18,0x16c             // load high bits constants pointer
  - [ be32, 0x016c7c5c, 0x3a527c30 ] # addi r18,r18,0x7c30   // load low bits of constants pointer
  - [ be32, 0x016c7c60, 0xc3b20054 ] # lfs f29,0x54(r18)     // load timebase frequency constant
  - [ be32, 0x016c7c64, 0xc3920058 ] # lfs f28,0x58(r18)     // load maximum timestep size
  - [ be32, 0x016c7c68, 0xeffee824 ] # fdivs f31,f30,f29     // divide timebase delta by timebase frequency

# check timestep size
  - [ be32, 0x016c7c6c, 0xff9fe000 ] # fcmpu cr7,f31,f28     // compare current delta time to maximum timestep
  - [ be32, 0x016c7c70, 0x419c0008 ] # blt +0x08             // don't return the maximum timestep size

# set maximum timestep
  - [ be32, 0x016c7c74, 0xffe0e090 ] # fmr f31,f28           // move maximum timestep to be returned

# cleanup
  - [ be32, 0x016c7c78, 0x7e94a278 ] # xor r20,r20,r20       // zero r20
  - [ be32, 0x016c7c7c, 0x7e94a278 ] # xor r19,r19,r19       // zero r19
  - [ be32, 0x016c7c80, 0x4e800020 ] # blr                   // return

# constants
  - [ be32, 0x016c7c84, 0x4c989680 ]  # timebase frequency as hexfloat (80mhz)
  - [ bef32, 0x016c7c88, 0.05000000 ] # maximum timestep size (50ms or 20FPS)

PPU-5446a2645880eefa75f7e374abd6b7818511e2ef: # BLES00932
# Set 60FPS with no frameskip
# by Gibbed
  - [ be16, 0x26ac0, 0x981f ]

# delta time
# by Whatcookie
  - [ be32, 0x0001c534, 0x496ada1d ] # jump to code cave

# get mftb
  - [ be32, 0x016c9f50, 0x7eac42e6 ] # mftb r21              // Move from timebase register (clock)

# get mftb delta
  - [ be32, 0x016c9f54, 0x3ec00185 ] # lis r22,0x0185        // load high bits of address
  - [ be32, 0x016c9f58, 0x3ad62608 ] # addi r22,r22,0x2608   // load low bits of address
  - [ be32, 0x016c9f5c, 0x7e96a02a ] # ldx r20,r22,r20       // load previous frames mftb reading
  - [ be32, 0x016c9f60, 0xfab60000 ] # std r21,0x0(r22)      // store this frames mftb reading
  - [ be32, 0x016c9f64, 0x7e74a850 ] # subf r19,r21,r20      // subtract previous mftb reading from this mftb frames reading

# mftb delta to float
  - [ be32, 0x016c9f68, 0xfa760018 ] # std r19,0x18(r22)     // store mftb delta (to be loaded into FPR)
  - [ be32, 0x016c9f6c, 0xcbd60018 ] # lfd f30,0x18(r22)     // load mftb delta into FPR
  - [ be32, 0x016c9f70, 0xffc0f69c ] # fcfid f30,f30         // convert integer to double
  - [ be32, 0x016c9f74, 0xffc0f018 ] # frsp f30,f30          // round to single precision

# mftb delta to seconds
  - [ be32, 0x016c9f78, 0x3e40016c ] # r18,0x16c             // load high bits constants pointer
  - [ be32, 0x016c9f7c, 0x62529f50 ] # ori r18,r18,0x9f50    // load low bits of constants pointer
  - [ be32, 0x016c9f80, 0xc3b20054 ] # lfs f29,0x54(r18)     // load timebase frequency constant
  - [ be32, 0x016c9f84, 0xc3920058 ] # lfs f28,0x58(r18)     // load maximum timestep size
  - [ be32, 0x016c9f88, 0xeffee824 ] # fdivs f31,f30,f29     // divide timebase delta by timebase frequency

# check timestep size
  - [ be32, 0x016c9f8c, 0xff9fe000 ] # fcmpu cr7,f31,f28     // compare current delta time to maximum timestep
  - [ be32, 0x016c9f90, 0x419c0008 ] # blt +0x08             // don't return the maximum timestep size

# set maximum timestep
  - [ be32, 0x016c9f94, 0xffe0e090 ] # fmr f31,f28           // move maximum timestep to be returned

# cleanup
  - [ be32, 0x016c9f98, 0x7e94a278 ] # xor r20,r20,r20       // zero r20
  - [ be32, 0x016c9f9c, 0x7e94a278 ] # xor r19,r19,r19       // zero r19
  - [ be32, 0x016c9fa0, 0x4e800020 ] # blr                   // return

# constants
  - [ be32, 0x016c9fa4, 0x4c989680 ]  # timebase frequency as hexfloat (80mhz)
  - [ bef32, 0x016c9fa8, 0.05000000 ] # maximum timestep size (50ms or 20FPS)




SPU-9001b44fd7278b5a6fa5385939fe928a0e549394: # Soul Calibur V, Yakuza Ishin, Journey, Yakuza 5, Tokyo Jungle, Oddworld: Stranger's Wrath HD, Soul Calibur Lost Swords, Binary Domain, Puppeteer
#SPUNAME: 'PS3_Release/edgepost-mlaa-task.s'
  - [ be32, 0x000031f4, 0x40800003 ] # il r3 0
  - [ be32, 0x0000349c, 0x40800017 ] # il r23 0 # Comment this line out to fix the blackscreen in Puppeteer

SPU-969cf3e9db75f52a6b41074ccbff74106b709854: # Sly 4, Motorstorm Apocalypse, Motorstorm RC, DmC DMC, Red Faction Armageddon, Ace Combat Assault Horizon
#SPUNAME: 'objs/release/edgepost-mlaa-task.' // NOTE: has asserts!
  - [ be32, 0x0000325c, 0x40800003 ] # il r3 0
  - [ be32, 0x00004C00, 0x40800091 ] # il r17 1

SPU-931132fd48a40bce0bec28e21f760b1fc6ca4364: # captain america, Yakuza dead souls, Need for Speed Shift 2
#SPUNAME: 'PS3_Release/edgepost-mlaa-task.s'
  - [ be32, 0x000031f4, 0x40800003 ] # il r3 0
  - [ be32, 0x0000349c, 0x40800017 ] # il r23 0

SPU-7b5ea49122ec7f023d4a72452dc7a9208d9d6dbf: # Dragon age 2
#SPUNAME: 'PS3_Release/edgepost-mlaa-task.s'
  - [ be32, 0x000031f4, 0x40800003 ] # il r3 0
  - [ be32, 0x0000349c, 0x40800017 ] # il r23 0

SPU-e3780fe1dc8953f849ac844ec9688ff4da3ca3ae: # Metro Last Light
#SPUNAME: 'u:\bin_ps3_SNC\edgepost_mlaa_ta'
  - [ be32, 0x000031f4, 0x40800003 ] # il r3 0
  - [ be32, 0x000034a4, 0x40800017 ] # il r23 0

SPU-794795c449beef176d076816284849d266f55f99: # Macross 30
#SPUNAME: 'PS3_Release/edgepost-mlaa-task.s'
  - [ be32, 0x000031f4, 0x40800003 ] # il r3 0
  - [ be32, 0x000034a4, 0x40800017 ] # il r23 0

SPU-df5b1c3353cc36bb2f0fb59197d849bb99c3fecd: # Shadow of the collosus, Medieval Moves: Deadmund's Quest, Sports Champions 2
#SPUNAME: 'PS3_Release/edgepost-mlaa-task.s'
  - [ be32, 0x000031f4, 0x40800003 ] # il r3 0
  - [ be32, 0x0000349c, 0x40800017 ] # il r23 0

SPU-5177cbc4bf45c8a0a6968c2a722da3a9e6cfb28b: # Prince of Persia: The Sands of Time, Prince of Persia: The Two Thrones, Prince of Persia: Warrior Within
#SPUNAME: 'PS3_Release/edgepost-mlaa-task.s'
  - [ be32, 0x000031f4, 0x40800003 ] # il r3 0
#  - [ be32, 0x0000349c, 0x40800017 ] # il r23 0 # blackscreen

SPU-ac189d7f87091160a94e69803ac0cff0a8bb7813: # ico mlaa
#SPUNAME: 'PS3_Release/edgepost-mlaa-task.s'
  - [ be32, 0x000031f4, 0x40800003 ] # il r3 0
  - [ be32, 0x0000349c, 0x40800017 ] # il r23 0

SPU-530c255936b07b25467a58e24ceff5fd4e2960b7: # gow 3 mlaa // Almost certainly specific to GOW3
#SPUNAME: 'mlaascanline.PS3_Release/mlaasca'
  - [ be32, 0x00005948, 0x40800094 ] # il r20 1
  - [ be32, 0x0000690c, 0x40800027 ] # il r39 0

SPU-2239af4827b17317522bd6323c646b45b34ebf14: # gow 3 patch 1.03
#SPUNAME: 'mlaascanline.PS3_Release/mlaasca'
  - [ be32, 0x00005948, 0x40800094 ] # il r20 1
  - [ be32, 0x0000690c, 0x40800027 ] # il r39 0

SPU-976d2128f08c362731413b75c934101b76c3d73b: # Early versions of LBP2
#SPUNAME: 'PS3_Release/edgepost-mlaa-task.s'
  - [ be32, 0x000036d4, 0x4080001d ] # il r29 0
  - [ be32, 0x000033d0, 0x40800005 ] # il r5 0

SPU-a129a01a270246c85df18eee0e959ef4263b6510: # Other early versions of LBP2
#SPUNAME: 'C:\dev\CW_br2_move_final-output\'
  - [ be32, 0x00003744, 0x4080001e ] # il r30 0
  - [ be32, 0x00003430, 0x40800006 ] # il r6 0

SPU-702d0205a89d445d15dc0f96548546c4e2e7a59f: # Little big planet 2 and 3
#SPUNAME: 'PS3_Release/edgepost-mlaa-task.s'
  - [ be32, 0x000036bc, 0x4080001c ] # il r28 0
  - [ be32, 0x000033c0, 0x40800005 ] # il r5 0

SPU-45f98378f0837fc6821f63576f65d47d10f9bbcb: # yakuza 0, yakuza kiwami
#SPUNAME: 'PS3_Release\edgepost-mlaa-task.s'
  - [ be32, 0x000033b0, 0x40800017 ] # il r23 0
  - [ be32, 0x0000373c, 0x4080001f ] # il r31 0

SPU-82b3399c8e6533ba991eedb0e139bf20c7783bac: # Twisted Metal
#SPUNAME: 'PS3_Release/edgepost-mlaa-task.s'
  - [ be32, 0x000033b0, 0x40800017 ] # il r23 0
  - [ be32, 0x0000373c, 0x4080001f ] # il r31 0

SPU-191fe1c92c8360992b3240348e70ea37d50812d4: # Alice madness returns
#SPUNAME: 'E:\Alice2\Development\Intermedia'
  - [ be32, 0x00003344, 0x40800003 ] # il r3 0
  - [ be32, 0x000037b4, 0x4020007f ] # spu nop

SPU-7cd211ff1cbd33163eb0711440dccbb3c1dbcf6c: # God of War Ascension
#SPUNAME: 'z:/export/jenkins/workspace/int6'
  - [ be32, 0x00004440, 0x40800002 ] # il r2 0
  - [ be32, 0x000056C4, 0x4080008a ] # il r10 0

SPU-1549476fe258150ff9f902229ffaed69a932a9c1: # God of War Ascension
#SPUNAME: 'Z:/output/EURint6/SPUMLAATask/PS'
  - [ be32, 0x00004440, 0x40800002 ] # il r2 0
  - [ be32, 0x000056C4, 0x4080008a ] # il r10 0

SPU-58fb5172bd99336a4ac96eefb00e739ce41f788b: # test drive unlimited 2
#SPUNAME: 'PS3_Release/edgepost-mlaa-task.s'
#TODO: check this game later

SPU-273bd5a0640e71876c11878ba9496d928d608f9e: # Socom 4
#SPUNAME: '.imogen/ps3_gold/edgemlaa.elf'
#TODO: check this game later, doesn't yet go ingame

SPU-239ea3f6ee242d11d857c844820aeda5157691c3: # Also Socom 4
#SPUNAME: '.imogen/ps3_gold_3d/edgemlaa3d.e'
#TODO: check this (yes, two different elfs for the same game)

SPU-1dbc4a6d4925b004b25b41d9ae2cf7a6e60e793a: # Starhawk single player demo
#SPUNAME: 'C:\spin\Branch\SPDemo\RT\PS3_Can' // Different for full game?
#TODO: check this, doesn't yet go ingame

SPU-8acb4f81726084c67d74ceceb5461681fcabf45b: # Retro/Grade
#SPUNAME: 'PS3_Release/edgepost-mlaa-task.s'
#TODO: check this

SPU-cc438f40a4d7d2ce312a064b8a99ae1b6217bd71: # Ace Combat Infinity
#SPUNAME: 'PS3_Release\edgepost-mlaa-task.s'
#TODO: This game is online only, and if this variant doesn't appear in other titles it will remain unpatched