# Title : Demon's Souls # Subject : Unlock FPS # Author : Whatcookie, Gibbed # Game versions : BLUS30443, BLES00932 # Patch version : 2.0 # Notes : Patch version 2.0 is not compatible with the settings used for the previous patch. # Clocks scale and Vblank rate must be set to the defaults. # Vblank rate can be modified to increase the framelimit beyond 60FPS, however it's not recommended as # users may encounter physics issues. BLUS30443_FpsUnlock: &BLUS30443_FpsUnlock # 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, 0xfffee824 ] # fdiv 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) BLES00932_FpsUnlock: &BLES00932_FpsUnlock # 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, 0xfffee824 ] # fdiv 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) # Title : Demon's Souls # Subject : Disable Dynamic Exposure # Author : Whatcookie # Game versions : BLUS30443, BLES00932 # Patch version : 1.0.1 # Notes : Can disable Write Color Buffers for 20% faster performance. Enable this patch if you experience flickering. BLUS30443_DynamicExposure: &BLUS30443_DynamicExposure - [ be16, 0x00025edc, 0x981f ] BLES00932_DynamicExposure: &BLES00932_DynamicExposure - [ be16, 0x00026ac4, 0x981f ] # Title : Demon's Souls # Subject : Skip Intro Videos # Author : GalCiv # Game versions : BLUS30443, BLES00932 # Patch version : 1.0 # Notes : NA BLUS30443_LogoSkip: &BLUS30443_LogoSkip - [ be32, 0x008eef78, 0x38000003 ] # Intro logos skip - [ be32, 0x008eef7c, 0x901c0100 ] BLES00932_LogoSkip: &BLES00932_LogoSkip - [ be32, 0x008f0928, 0x38000003 ] # Intro logos skip - [ be32, 0x008f092c, 0x901c0100 ] # Title : Demon's Souls # Subject : 21:9 Aspect Ratio # Author : Whatcookie # Game versions : BLUS30443, BLES00932 # Patch version : 1.0 # Notes : UI Elements will be stretched BLUS30443_Ratio219: &BLUS30443_Ratio219 - [ be32, 0x018cefbc, 0x4017b9aa ] # 21:9 aspect ratio - [ be32, 0x0190433c, 0x4017b9aa ] BLES00932_Ratio219: &BLES00932_Ratio219 - [ be32, 0x018cf13c, 0x4017b9aa ] # 21:9 aspect ratio - [ be32, 0x01904494, 0x4017b9aa ] # Title : Demon's Souls # Subject : 32:9 Aspect Ratio # Author : Whatcookie # Game versions : BLUS30443 # Patch version : 1.0 # Notes : UI Elements will be stretched BLUS30443_Ratio329: &BLUS30443_Ratio329 - [ bef32, 0x018cefbc, 3.5555556 ] # 32:9 aspect ratio - [ bef32, 0x0190433c, 3.5555556 ] BLES00932_Ratio219: &BLES00932_Ratio329 - [ bef32, 0x018cf13c, 3.5555556 ] # 32:9 aspect ratio - [ bef32, 0x01904494, 3.5555556 ] # Comment a line with # if you wish to disable a particular mod PPU-83681f6110d33442329073b72b8dc88a2f677172: #BLUS30443 - [ load, BLUS30443_FpsUnlock ] # - [ load, BLUS30443_DynamicExposure ] - [ load, BLUS30443_LogoSkip ] # - [ load, BLUS30443_Ratio219 ] # - [ load, BLUS30443_Ratio329 ] # Comment a line with # if you wish to disable a particular mod PPU-5446a2645880eefa75f7e374abd6b7818511e2ef: #BLES00932 - [ load, BLES00932_FpsUnlock ] # - [ load, BLES00932_DynamicExposure ] - [ load, BLES00932_LogoSkip ] # - [ load, BLES00932_Ratio219 ] # - [ load, BLUS30443_Ratio329 ]