Ultra 2.6|R1

This commit is contained in:
redraz 2025-09-05 17:12:01 +03:00
parent 844a878bfe
commit 90908e1cf4
131 changed files with 2246 additions and 1891 deletions

View File

@ -8,7 +8,7 @@
### Ultra - это функциональная кастомная прошивка для Nintendo Switch, с упором в разгон и улучшенный пользовательский опыт. ### Ultra - это функциональная кастомная прошивка для Nintendo Switch, с упором в разгон и улучшенный пользовательский опыт.
### [Ultra 2.5|R2](https://github.com/Ultra-NX/UltraNX/releases) Поддерживает все HOS, включая 20.3.0 ### [Ultra 2.6|R1](https://github.com/Ultra-NX/UltraNX/releases) Поддерживает все HOS, включая 20.4.0
@ -60,8 +60,8 @@
- **`Ultra OC (sys-clk)`**, мод [sys-clk](https://github.com/ppkantorski/sys-clk) - Оверлей для управления модулем sys-clk. Немного изменен мной, но без копания в исходниках (Так как они закрыты). - **`Ultra OC (sys-clk)`**, мод [sys-clk](https://github.com/ppkantorski/sys-clk) - Оверлей для управления модулем sys-clk. Немного изменен мной, но без копания в исходниках (Так как они закрыты).
- [Status Monitor](https://github.com/ppkantorski/Status-Monitor-Overlay), форк [Status Monitor](https://github.com/hanai3Bi/Status-Monitor-Overlay) - Оверлей позволяющий следить за параметрами консоли в реальном времени. Может выступать в качестве счетчика FPS. Сменить пресет Micro-оверлея можно в Tuner. - [Status Monitor](https://github.com/ppkantorski/Status-Monitor-Overlay), форк [Status Monitor](https://github.com/hanai3Bi/Status-Monitor-Overlay) - Оверлей позволяющий следить за параметрами консоли в реальном времени. Может выступать в качестве счетчика FPS. Сменить пресет Micro-оверлея можно в Tuner.
- [FPSLocker](https://github.com/masagrator/FPSLocker) - Оверлей, позволяющий разблокировать 60 FPS в играх. - [FPSLocker](https://github.com/masagrator/FPSLocker) - Оверлей, позволяющий разблокировать 60 FPS в играх.
- [EdiZon](https://github.com/proferabg/EdiZon-Overlay) - Оверлей для использования читов, включая графические. - [EdiZon](https://github.com/ppkantorski/EdiZon-Overlay) - Оверлей для использования читов, включая графические.
- [ReverseNX-RT](https://github.com/ppkantorski/ReverseNX-RT) - Оверлей для переключения запущенной игры в портатив\док, меняет настройки графики\разрешения в играх. - [ReverseNX-RT](https://github.com/masagrator/ReverseNX-RT) - Оверлей для переключения запущенной игры в портатив\док, меняет настройки графики\разрешения в играх.
- [Sysmodules](https://github.com/ppkantorski/ovl-sysmodules) - Оверлей для включения\отключения установленных системных модулей. - [Sysmodules](https://github.com/ppkantorski/ovl-sysmodules) - Оверлей для включения\отключения установленных системных модулей.

View File

@ -6,7 +6,7 @@
# #
### Ultra is a functional custom firmware for Nintendo Switch, with a focus on overclocking and an improved user experience. ### Ultra is a functional custom firmware for Nintendo Switch, with a focus on overclocking and an improved user experience.
### [Ultra 2.5|R2](https://github.com/Ultra-NX/UltraNX/releases) Supports all HOS, including 20.3.0 ### [Ultra 2.6|R1](https://github.com/Ultra-NX/UltraNX/releases) Supports all HOS, including 20.4.0
@ -56,8 +56,8 @@
- **`Ultra OC (sys-clk)`**, a mod of [sys-clk](https://github.com/ppkantorski/sys-clk) - Overlay for controlling sys-clk module. Slightly modified by me, but without digging into sources (Since they're closed). - **`Ultra OC (sys-clk)`**, a mod of [sys-clk](https://github.com/ppkantorski/sys-clk) - Overlay for controlling sys-clk module. Slightly modified by me, but without digging into sources (Since they're closed).
- [Status Monitor](https://github.com/ppkantorski/Status-Monitor-Overlay), a fork of [Status Monitor](https://github.com/masagrator/Status-Monitor-Overlay) - Overlay that allows you to monitor console parameters in real time. It can act as an FPS counter. You change preset of Micro-overlay appearance in Tuner. - [Status Monitor](https://github.com/ppkantorski/Status-Monitor-Overlay), a fork of [Status Monitor](https://github.com/masagrator/Status-Monitor-Overlay) - Overlay that allows you to monitor console parameters in real time. It can act as an FPS counter. You change preset of Micro-overlay appearance in Tuner.
- [FPSLocker](https://github.com/masagrator/FPSLocker) - An overlay that allows you to unlock 60 FPS in games. - [FPSLocker](https://github.com/masagrator/FPSLocker) - An overlay that allows you to unlock 60 FPS in games.
- [EdiZon](https://github.com/proferabg/EdiZon-Overlay) - An overlay for using cheats. - [EdiZon](https://github.com/ppkantorski/EdiZon-Overlay) - An overlay for using cheats.
- [ReverseNX-RT](https://github.com/ppkantorski/ReverseNX-RT) - An overlay for switching a running game to a handheld\dock mode, which changes the graphics and resolution settings in games. - [ReverseNX-RT](https://github.com/masagrator/ReverseNX-RT) - An overlay for switching a running game to a handheld\dock mode, which changes the graphics and resolution settings in games.
- [Sysmodules](https://github.com/ppkantorski/ovl-sysmodules) - Overlay for enabling\disabling installed system modules. - [Sysmodules](https://github.com/ppkantorski/ovl-sysmodules) - Overlay for enabling\disabling installed system modules.

View File

@ -58,3 +58,7 @@ X0100423009358000
;Splatoon 3 ;Splatoon 3
;10.0.0 upwards crashes after online match ;10.0.0 upwards crashes after online match
X0100C2500FC20000 X0100C2500FC20000
;Hollow Knight: Silksong
;1.0.28324 crash on boot
X010013C00E930000

View File

@ -6,12 +6,12 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Remove double buffer # Remove double buffer
- -
type: bytes type: asm_a64
main_offset: 0x6440 main_offset: 0x6440
value_type: uint32 instructions: [
value: [mov, w2, 3],
- 0x52800062 [madd, x1, x8, x2, x9]
- 0x9B022501 ]
- -
type: bytes type: bytes
main_offset: 0xC5A6D8 main_offset: 0xC5A6D8
@ -23,62 +23,65 @@ MASTER_WRITE:
value_type: uint32 value_type: uint32
value: 0x188CC50 value: 0x188CC50
- -
type: bytes type: asm_a64
main_offset: 0xC56550 main_offset: 0xC56550
value_type: uint32 instructions: [
value: [ldr, x0, [x26, 0x10]],
- 0xF9400B40 [cbz, x0, +24],
- 0xB40000C0 [adrp, x8, 0x1758000],
- 0xD0005808 [ldr, x8, [x8, 0x90]],
- 0xF9404908 [ldr, x8, [x8]],
- 0xF9400108 [blr, x8],
- 0xD63F0100 [b, +16],
- 0x14000004 [mov, w0, 0xc0],
- 0x321A07E0 [bl, 0x735480],
- 0x97EB7BC4 [str, x0, [x26, 0x10]],
- 0xF9000B40 [ldr, x22, [x27]],
- 0xF9400376 [adrp, x27, 0x1757000],
- 0xB000581B [ldr, x21, [x25]],
- 0xF9400335 [ldr, x27, [x27, 0xf38]],
- 0xF9479F7B [adrp, x23, 0x1758000],
- 0xD0005817 [ldr, x8, [x27]],
- 0xF9400368 [ldr, x23, [x23, 0xa70]],
- 0xF9453AF7 [mov, x0, x23],
- 0xAA1703E0 [blr, x8],
- 0xD63F0100 [mov, x2, x0],
- 0xAA0003E2 [mov, x0, x21],
- 0xAA1503E0 [mov, x1, x22],
- 0xAA1603E1 [bl, 0x1a90],
- 0x97CEAD3A [mov, x21, x0],
- 0xAA0003F5 [ldr, x0, [x25]],
- 0xF9400320 [bl, 0x1ad0],
- 0x97CEAD47 [ldr, x8, [x28]],
- 0xF9400388 [mov, x1, x0],
- 0xAA0003E1 [mov, x0, x23],
- 0xAA1703E0 [mov, x2, x21],
- 0xAA1503E2 [blr, x8],
- 0xD63F0100 [ldr, x0, [x26, 0x10]],
- 0xF9400B40 [ldr, x8, [x24]],
- 0xF9400308 [mov, x1, x23],
- 0xAA1703E1 [blr, x8],
- 0xD63F0100 [adrp, x22, 0x1758000],
- 0xD0005816 [b, 0x5eec]
- 0x17CEBE43 ]
- -
type: bytes type: asm_a64
main_offset: 0x5EE8 main_offset: 0x5EE8
value_type: uint32 instructions: [
value: 0x1431419A [b, 0xc56550]
]
- -
type: bytes type: asm_a64
main_offset: 0x5FC0 main_offset: 0x5FC0
value_type: uint32 instructions: [
value: 0x52800061 [mov, w1, 3]
]
- -
type: bytes type: asm_a64
main_offset: 0x5F8C main_offset: 0x5F8C
value_type: uint32 instructions: [
value: 0xD2A032A2 [mov, x2, 0x1950000]
]
ALL_FPS: ALL_FPS:
# dummy # dummy
- -

View File

@ -14,13 +14,13 @@ MASTER_WRITE:
# Redirect Dynamic Resolution target reading to MAIN + 0x30C3F00 # Redirect Dynamic Resolution target reading to MAIN + 0x30C3F00
# REF: 28 11 91 52 08 A1 A7 72 03 01 27 1E # REF: 28 11 91 52 08 A1 A7 72 03 01 27 1E
- -
type: bytes type: asm_a64
main_offset: 0x147BE04 main_offset: 0x147BE04
value_type: uint32 instructions: [
value: [adrp, x8, 0x30c3000],
- 0x9000E248 # ADRP X8, 0x30C3000 [ldr, s3, [x8, 0xf00]],
- 0xBD4F0103 # LDR S3, [X8, 0xF00] [nop]
- 0xD503201F # NOP ]
## Default values ## Default values
- -
type: bytes type: bytes
@ -33,4 +33,4 @@ ALL_FPS:
type: evaluate_write type: evaluate_write
address: [MAIN, 0x30C3F00] address: [MAIN, 0x30C3F00]
value_type: float value_type: float
value: "0.8 / FPS_TARGET" value: "0.8 / FPS_TARGET"

View File

@ -7,16 +7,18 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Remove double buffer # Remove double buffer
- -
type: bytes type: asm_a64
main_offset: 0xAD40FC main_offset: 0xAD40FC
value_type: uint32 instructions: [
value: 0x52800068 [mov, w8, 3]
]
# Block switching back to 30 FPS mode on loading screens # Block switching back to 30 FPS mode on loading screens
- -
type: bytes type: asm_a64
main_offset: 0x6173B0 main_offset: 0x6173B0
value_type: uint32 instructions: [
value: 0xD503201F [nop]
]
ALL_FPS: ALL_FPS:
# Switch to 60 FPS Mode # Switch to 60 FPS Mode
- -
@ -34,4 +36,4 @@ ALL_FPS:
type: evaluate_write type: evaluate_write
address: [MAIN, 0x1C38C28, 0x14C] address: [MAIN, 0x1C38C28, 0x14C]
value_type: float value_type: float
value: FPS_TARGET value: FPS_TARGET

View File

@ -7,16 +7,18 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Remove double buffer # Remove double buffer
- -
type: bytes type: asm_a64
main_offset: 0xAD40FC main_offset: 0xAD40FC
value_type: uint32 instructions: [
value: 0x52800068 [mov, w8, 3]
]
# Block switching back to 30 FPS mode on loading screens # Block switching back to 30 FPS mode on loading screens
- -
type: bytes type: asm_a64
main_offset: 0x6173B0 main_offset: 0x6173B0
value_type: uint32 instructions: [
value: 0xD503201F [nop]
]
ALL_FPS: ALL_FPS:
# Switch to 60 FPS Mode # Switch to 60 FPS Mode
- -
@ -34,4 +36,4 @@ ALL_FPS:
type: evaluate_write type: evaluate_write
address: [MAIN, 0x1C38C28, 0x14C] address: [MAIN, 0x1C38C28, 0x14C]
value_type: float value_type: float
value: FPS_TARGET value: FPS_TARGET

View File

@ -6,10 +6,11 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Remove double buffer # Remove double buffer
- -
type: bytes type: asm_a64
main_offset: 0x6B41E4 main_offset: 0x6B41E4
value_type: uint32 instructions: [
value: 0xB20007E8 [mov, x8, 0x300000003]
]
ALL_FPS: ALL_FPS:
# DUMMY # DUMMY
- -
@ -17,3 +18,4 @@ ALL_FPS:
address: [MAIN, 0x4740500] address: [MAIN, 0x4740500]
value_type: uint8 value_type: uint8
value: 0 value: 0

View File

@ -6,10 +6,11 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Remove double buffer # Remove double buffer
- -
type: bytes type: asm_a64
main_offset: 0xEA22EC main_offset: 0xEA22EC
value_type: uint32 instructions: [
value: 0xB20007E8 [mov, x8, 0x300000003]
]
ALL_FPS: ALL_FPS:
# DUMMY # DUMMY
- -

View File

@ -7,44 +7,44 @@ MASTER_WRITE:
# Redirect Dynamic Resolution timings to MAIN + 0x3189F00 # Redirect Dynamic Resolution timings to MAIN + 0x3189F00
# 38.0 # 38.0
- -
type: bytes type: asm_a64
main_offset: 0xFFEAFC main_offset: 0xFFEAFC
value_type: uint32 instructions: [
value: [adrp, x10, 0x3189000],
- 0xF0010C4A [ldr, s1, [x10, 0xf00]]
- 0xBD4F0141 ]
# 22.0 # 22.0
- -
type: bytes type: asm_a64
main_offset: 0xFFEB0C main_offset: 0xFFEB0C
value_type: uint32 instructions: [
value: [ldr, s1, [x10, 0xf04]]
- 0xBD4F0541 ]
# 43.5 # 43.5
- -
type: bytes type: asm_a64
main_offset: 0xFFEAD4 main_offset: 0xFFEAD4
value_type: uint32 instructions: [
value: [adrp, x10, 0x3189000],
- 0xF0010C4A [ldr, s1, [x10, 0xf08]]
- 0xBD4F0941 ]
# 58.0 # 58.0
- -
type: bytes type: asm_a64
main_offset: 0xFFEAE4 main_offset: 0xFFEAE4
value_type: uint32 instructions: [
value: [adrp, x10, 0x3189000],
- 0xF0010C4A [ldr, s1, [x10, 0xf0c]]
- 0xBD4F0D41 ]
# 47.0 | 34.0 # 47.0 | 34.0
- -
type: bytes type: asm_a64
main_offset: 0xFFEB20 main_offset: 0xFFEB20
value_type: uint32 instructions: [
value: [adrp, x11, 0x3189000],
- 0xF0010C4B [ldr, s1, [x11, 0xf10]],
- 0xBD4F1161 [ldr, w12, [x11, 0xf14]]
- 0xB94F156C ]
# Default values: # Default values:
- -
type: bytes type: bytes
@ -65,3 +65,4 @@ ALL_FPS:
address: [MAIN, 0x3189F00] address: [MAIN, 0x3189F00]
value_type: float value_type: float
value: ["(38.0 / (1000/30)) * FRAMETIME_TARGET", "(22.0 / (1000/30)) * FRAMETIME_TARGET", "(43.5 / (1000/30)) * FRAMETIME_TARGET", "(58.0 / (1000/30)) * FRAMETIME_TARGET", "(47.0 / (1000/30)) * FRAMETIME_TARGET", "(34.0 / (1000/30)) * FRAMETIME_TARGET"] value: ["(38.0 / (1000/30)) * FRAMETIME_TARGET", "(22.0 / (1000/30)) * FRAMETIME_TARGET", "(43.5 / (1000/30)) * FRAMETIME_TARGET", "(58.0 / (1000/30)) * FRAMETIME_TARGET", "(47.0 / (1000/30)) * FRAMETIME_TARGET", "(34.0 / (1000/30)) * FRAMETIME_TARGET"]

View File

@ -1,4 +1,4 @@
# Kingdom Come: Deliverance - Royal Edition JP 1.9.6H # Kingdom Come: Deliverance - Royal Edition 1.9.6H
# BID: 7A450848CFDEC18E # BID: 7A450848CFDEC18E
# Some prerendered cutscenes are still pushed at 30 FPS # Some prerendered cutscenes are still pushed at 30 FPS
@ -7,22 +7,24 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Block updating DR timings, REF: 00 01 27 1E 48 40 A8 52 # Block updating DR timings, REF: 00 01 27 1E 48 40 A8 52
- -
type: bytes type: asm_a64
main_offset: 0x1CA806C main_offset: 0x1CA806C
value_type: uint32 instructions: [
value: 0xD503201F [nop]
]
- -
type: bytes type: asm_a64
main_offset: 0x1CA8074 main_offset: 0x1CA8074
value_type: uint32 instructions: [
value: 0xD503201F [nop]
]
- -
type: bytes type: asm_a64
main_offset: 0x1CA8094 main_offset: 0x1CA8094
value_type: uint32 instructions: [
value: [nop],
- 0xD503201F [nop]
- 0xD503201F ]
# Write default DR timings # Write default DR timings
- -
type: bytes type: bytes
@ -51,3 +53,4 @@ ALL_FPS:
- -
type: block type: block
what: timing what: timing

View File

@ -1,4 +1,4 @@
# Momotaro Dentetsu: Showa, Heisei, Reiwa mo Teiban! Asia Edition 1.0.1 # Momotaro Dentetsu: Showa, Heisei, Reiwa mo Teiban! Asia Edition 1.0.1
# BID: B2D4462B71536EC6 # BID: B2D4462B71536EC6
unsafeCheck: true unsafeCheck: true
@ -6,15 +6,17 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Remove double buffer # Remove double buffer
- -
type: bytes type: asm_a64
main_offset: 0x1B630 main_offset: 0x1B630
value_type: uint32 instructions: [
value: 0x52800061 [mov, w1, 3]
]
- -
type: bytes type: asm_a64
main_offset: 0x5774C main_offset: 0x5774C
value_type: uint32 instructions: [
value: 0x52800061 [mov, w1, 3]
]
ALL_FPS: ALL_FPS:
# REF: 20 59 60 BC # REF: 20 59 60 BC
# Internal FPS Lock # Internal FPS Lock
@ -48,4 +50,5 @@ ALL_FPS:
type: evaluate_write type: evaluate_write
address: [MAIN, 0x10D8028] address: [MAIN, 0x10D8028]
value_type: uint32 value_type: uint32
value: "VSYNC_TARGET - 1"
value: "VSYNC_TARGET - 1"

View File

@ -8,12 +8,12 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Change location of GPU frametime double divider to MAIN+0x32C6D00 # Change location of GPU frametime double divider to MAIN+0x32C6D00
- -
type: bytes type: asm_a64
main_offset: 0x921768 main_offset: 0x921768
value_type: uint32 instructions: [
value: [adrp, x8, 0x32c6000],
- 0xB0014D28 [ldr, d1, [x8, 0xd00]]
- 0xFD468101 ]
# Default value # Default value
- -
type: bytes type: bytes
@ -27,3 +27,4 @@ ALL_FPS:
address: [MAIN, 0x32C6D00] address: [MAIN, 0x32C6D00]
value_type: double value_type: double
value: "(30 / FPS_TARGET) * 1000000" value: "(30 / FPS_TARGET) * 1000000"

View File

@ -0,0 +1,27 @@
# 창세기전 ~회색의 잔영~ / The War of Genesis: Remnants of Gray 1.1.0
# BID: EC983B9153629AC8
unsafeCheck: true
ALL_FPS:
# r.DynamicRes.FrameTimeBudget
-
type: evaluate_write
address: [MAIN, 0x771FD78, 0]
value_type: float
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x774DA38, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
# r.VSync
-
type: write
address: [MAIN, 0x6F518D8, 0]
value_type: uint32
value: [0, 0]
-
type: block
what: timing

View File

@ -7,10 +7,11 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Remove FPS Lock # Remove FPS Lock
- -
type: bytes type: asm_a64
main_offset: 0x4835A4 main_offset: 0x4835A4
value_type: uint32 instructions: [
value: 0xD503201F [nop]
]
ALL_FPS: ALL_FPS:
# Switch game to 60 FPS mode # Switch game to 60 FPS mode
- -
@ -41,3 +42,4 @@ ALL_FPS:
address: [MAIN, 0xEFFC60, 0x50] address: [MAIN, 0xEFFC60, 0x50]
value_type: float value_type: float
value: "1 / FPS_TARGET" value: "1 / FPS_TARGET"

View File

@ -7,12 +7,12 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Redirect DR frametime target to MAIN+0x36D4F00 # Redirect DR frametime target to MAIN+0x36D4F00
- -
type: bytes type: asm_a64
main_offset: 0x17358B4 main_offset: 0x17358B4
value_type: uint32 instructions: [
value: [adrp, x13, 0x36d4000],
- 0xF000FCED # adrp x13, #0x36D4000 [ldr, s2, [x13, 0xf00]]
- 0xBD4F01A2 # ldr s2, [x13, #0xf00] ]
# default value # default value
- -
type: bytes type: bytes
@ -24,4 +24,5 @@ ALL_FPS:
type: evaluate_write type: evaluate_write
address: [MAIN, 0x36D4F00] address: [MAIN, 0x36D4F00]
value_type: float value_type: float
value: FRAMETIME_TARGET
value: FRAMETIME_TARGET

View File

@ -1,7 +1,7 @@
# Demon Slayer -Kimetsu no Yaiba- The Hinokami Chronicles 1.53 # Demon Slayer -Kimetsu no Yaiba- The Hinokami Chronicles 1.53
# BID: 14C878ECCA9D7CB5 # BID: 14C878ECCA9D7CB5
unsafeCheck: true unsafeCheck: false
ALL_FPS: ALL_FPS:
# Disable bUseFixedFrameRate to unlock framerate # Disable bUseFixedFrameRate to unlock framerate
@ -36,3 +36,4 @@ ALL_FPS:
- -
type: block type: block
what: timing what: timing

View File

@ -12,15 +12,17 @@ MASTER_WRITE:
value: 0x3236 value: 0x3236
# Change egl Interval to lock game by default to 30 FPS # Change egl Interval to lock game by default to 30 FPS
- -
type: bytes type: asm_a64
main_offset: 0x141580 main_offset: 0x141580
value_type: uint32 instructions: [
value: 0x52800041 [mov, w1, 2]
]
- -
type: bytes type: asm_a64
main_offset: 0x1415A8 main_offset: 0x1415A8
value_type: uint32 instructions: [
value: 0x52800041 [mov, w1, 2]
]
ALL_FPS: ALL_FPS:
# DUMMY # DUMMY
- -
@ -28,3 +30,4 @@ ALL_FPS:
address: [MAIN, 0x15ABF3C0] address: [MAIN, 0x15ABF3C0]
value_type: uint8 value_type: uint8
value: 0 value: 0

View File

@ -12,15 +12,17 @@ MASTER_WRITE:
value: 0x3236 value: 0x3236
# Change egl Interval to lock game by default to 30 FPS # Change egl Interval to lock game by default to 30 FPS
- -
type: bytes type: asm_a64
main_offset: 0x135D10 main_offset: 0x135D10
value_type: uint32 instructions: [
value: 0x52800041 [mov, w1, 2]
]
- -
type: bytes type: asm_a64
main_offset: 0x135D38 main_offset: 0x135D38
value_type: uint32 instructions: [
value: 0x52800041 [mov, w1, 2]
]
ALL_FPS: ALL_FPS:
# DUMMY # DUMMY
- -
@ -28,3 +30,4 @@ ALL_FPS:
address: [MAIN, 0x161BCF8] address: [MAIN, 0x161BCF8]
value_type: uint8 value_type: uint8
value: 0 value: 0

View File

@ -6,34 +6,35 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Redirect DynamicResolution$$LowerResSW Max Target in MS to MAIN+0x3BE1200 # Redirect DynamicResolution$$LowerResSW Max Target in MS to MAIN+0x3BE1200
- -
type: bytes type: asm_a64
main_offset: 0x2426988 main_offset: 0x2426988
value_type: uint32 instructions: [
value: [b, 0x2426a94]
- 0x14000043 ]
- -
type: bytes type: asm_a64
main_offset: 0x2426A94 main_offset: 0x2426A94
value_type: uint32 instructions: [
value: [adrp, x19, 0x3be1000],
- 0xF000BDD3 [ldr, d1, [x19, 0x200]],
- 0xFD410261 [b, 0x242698c]
- 0x17FFFFBC ]
# Redirect DynamicResolution$$LowerResSW Min Target in MS to MAIN+0x3BE1208 # Redirect DynamicResolution$$LowerResSW Min Target in MS to MAIN+0x3BE1208
- -
type: bytes type: asm_a64
main_offset: 0x24269F4 main_offset: 0x24269F4
value_type: uint32 instructions: [
value: [b, 0x2426ea4]
- 0x1400012C ]
- -
type: bytes type: asm_a64
main_offset: 0x2426EA4 main_offset: 0x2426EA4
value_type: uint32 instructions: [
value: [adrp, x8, 0x3be1000],
- 0xF000BDC8 [ldr, d1, [x8, 0x208]],
- 0xFD410501 [b, 0x24269f8]
- 0x17FFFED3 ]
# Write default values # Write default values
- -
type: bytes type: bytes
@ -46,3 +47,4 @@ ALL_FPS:
address: [MAIN, 0x3BE1200] address: [MAIN, 0x3BE1200]
value_type: double value_type: double
value: ["0.93 * FRAMETIME_TARGET", "0.87 * FRAMETIME_TARGET"] value: ["0.93 * FRAMETIME_TARGET", "0.87 * FRAMETIME_TARGET"]

View File

@ -6,14 +6,15 @@ unsafeCheck: true
# Disable setting double buffer, REF: 28 63 A8 9B B8 5F 6E 29 2B F7 01 51 B9 83 57 B8 # Disable setting double buffer, REF: 28 63 A8 9B B8 5F 6E 29 2B F7 01 51 B9 83 57 B8
MASTER_WRITE: MASTER_WRITE:
- -
type: bytes type: asm_a64
main_offset: 0x5DB12C main_offset: 0x5DB12C
value_type: uint32 instructions: [
value: 0x52800079 [mov, w25, 3]
]
ALL_FPS: ALL_FPS:
# interval, REF: 29 00 80 52 16 00 08 8B 08 A0 8C 52 28 00 A0 72 # interval, REF: 29 00 80 52 16 00 08 8B 08 A0 8C 52 28 00 A0 72
- -
type: evaluate_write type: evaluate_write
address: [MAIN, 0x3412388] address: [MAIN, 0x3412388]
value_type: int32 value_type: int32
value: VSYNC_TARGET value: VSYNC_TARGET

View File

@ -7,34 +7,34 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Redirect FPS Lock and Dynamic Resolution target values to MAIN + 0x21036F00 # Redirect FPS Lock and Dynamic Resolution target values to MAIN + 0x21036F00
- -
type: bytes type: asm_a64
main_offset: 0x13281C main_offset: 0x13281C
value_type: uint32 instructions: [
value: [adrp, x8, 0x21036000],
- 0x90107828 # ADRP X8, 0x21036000 [ldr, x8, [x8, 0xf00]]
- 0xF9478108 # LDR X8, [X8, 0xF00] ]
- -
type: bytes type: asm_a64
main_offset: 0x3E324C main_offset: 0x3E324C
value_type: uint32 instructions: [
value: [adrp, x8, 0x21036000],
- 0xF0106288 # ADRP X8, 0x21036000 [ldr, x8, [x8, 0xf00]]
- 0xF9478108 # LDR X8, [X8, 0xF00] ]
# NOP updating Dynamic Resolution target value # NOP updating Dynamic Resolution target value
- -
type: bytes type: asm_a64
main_offset: 0x2D94E8 main_offset: 0x2D94E8
value_type: uint32 instructions: [
value: [adrp, x9, 0x21036000],
- 0xB0106AE9 # ADRP X9, 0x21036000 [ldr, w9, [x9, 0xf08]]
- 0xB94F0929 # LDR W9, [X9, 0xF08] ]
- -
type: bytes type: asm_a64
main_offset: 0x597C5C main_offset: 0x597C5C
value_type: uint32 instructions: [
value: [adrp, x9, 0x21036000],
- 0xF01054E9 # ADRP X9, 0x21036000 [ldr, w9, [x9, 0xf08]]
- 0xB94F0929 # LDR W9, [X9, 0xF08] ]
# Default values # Default values
- -
type: bytes type: bytes
@ -57,4 +57,5 @@ ALL_FPS:
type: evaluate_write type: evaluate_write
address: [MAIN, 0x21036F08] address: [MAIN, 0x21036F08]
value_type: float value_type: float
value: FRAMETIME_TARGET
value: FRAMETIME_TARGET

View File

@ -7,18 +7,19 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Force game to use dynamic speed instead of fixed speed # Force game to use dynamic speed instead of fixed speed
- -
type: bytes type: asm_a64
main_offset: 0xE7BC90 main_offset: 0xE7BC90
value_type: uint32 instructions: [
value: 0x52800048 [mov, w8, 2]
]
# Redirect DR timing to MAIN + 0x9DBAEB8 # Redirect DR timing to MAIN + 0x9DBAEB8
- -
type: bytes type: asm_a64
main_offset: 0xE88250 main_offset: 0xE88250
value_type: uint32 instructions: [
value: [adrp, x8, 0x9dba000],
- 0xD0047988 [ldr, s0, [x8, 0xeb8]]
- 0xBD4EB900 ]
# Default value # Default value
- -
type: bytes type: bytes
@ -32,3 +33,4 @@ ALL_FPS:
address: [MAIN, 0x9DBAEB8] address: [MAIN, 0x9DBAEB8]
value_type: float value_type: float
value: FRAMETIME_TARGET value: FRAMETIME_TARGET

View File

@ -7,90 +7,92 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Block game from updating interval # Block game from updating interval
- -
type: bytes type: asm_a64
main_offset: 0x7264 main_offset: 0x7264
value_type: uint32 instructions: [
value: 0xD503201F [nop]
]
- -
type: bytes type: asm_a64
main_offset: 0x721C main_offset: 0x721C
value_type: uint32 instructions: [
value: 0xD503201F [nop]
]
# Remove double buffer # Remove double buffer
- -
type: bytes type: asm_a64
main_offset: 0xC5B08 main_offset: 0xC5B08
value_type: uint32 instructions: [
value: [mov, w8, 3]
- 0x52800068 ]
- -
type: bytes type: asm_a64
main_offset: 0xC5BB0 main_offset: 0xC5BB0
value_type: uint32 instructions: [
value: [mov, w2, 3]
- 0x52800062 ]
- -
type: bytes type: asm_a64
main_offset: 0xC5720 main_offset: 0xC5720
value_type: uint32 instructions: [
value: [sub, sp, sp, 0x50],
- 0xD10143FF [stp, x22, x21, [sp, 0x20]],
- 0xA90257F6 [stp, x20, x19, [sp, 0x30]],
- 0xA9034FF4 [stp, x29, x30, [sp, 0x40]],
- 0xA9047BFD [add, x29, sp, 0x40]
- 0x910103FD ]
- -
type: bytes type: asm_a64
main_offset: 0xC5744 main_offset: 0xC5744
value_type: uint32 instructions: [
value: [stp, xzr, xzr, [sp, 0x10]]
- 0xA9017FFF ]
- -
type: bytes type: asm_a64
main_offset: 0xC5758 main_offset: 0xC5758
value_type: uint32 instructions: [
value: [mov, w2, 3]
- 0x52800062 ]
- -
type: bytes type: asm_a64
main_offset: 0xC5780 main_offset: 0xC5780
value_type: uint32 instructions: [
value: [ldp, x29, x30, [sp, 0x40]],
- 0xA9447BFD [ldp, x20, x19, [sp, 0x30]],
- 0xA9434FF4 [ldp, x22, x21, [sp, 0x20]],
- 0xA94257F6 [add, sp, sp, 0x50]
- 0x910143FF ]
- -
type: bytes type: asm_a64
main_offset: 0xC57A0 main_offset: 0xC57A0
value_type: uint32 instructions: [
value: [sub, sp, sp, 0x50],
- 0xD10143FF [stp, xzr, x21, [sp, 0x18]],
- 0xA901D7FF [stp, x20, x19, [sp, 0x30]],
- 0xA9034FF4 [stp, x29, x30, [sp, 0x40]],
- 0xA9047BFD [add, x29, sp, 0x40]
- 0x910103FD ]
- -
type: bytes type: asm_a64
main_offset: 0xC57CC main_offset: 0xC57CC
value_type: uint32 instructions: [
value: [mov, w2, 3]
- 0x52800062 ]
- -
type: bytes type: asm_a64
main_offset: 0xC57E4 main_offset: 0xC57E4
value_type: uint32 instructions: [
value: [str, x8, [sp]]
- 0xF90003E8 ]
- -
type: bytes type: asm_a64
main_offset: 0xC580C main_offset: 0xC580C
value_type: uint32 instructions: [
value: [ldp, x29, x30, [sp, 0x40]],
- 0xA9447BFD [ldr, x21, [sp, 0x20]],
- 0xF94013F5 [ldp, x20, x19, [sp, 0x30]],
- 0xA9434FF4 [add, sp, sp, 0x50]
- 0x910143FF ]
ALL_FPS: ALL_FPS:
# Interval # Interval
- -

View File

@ -6,22 +6,22 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# redirect reading Dynamic Resolution timing min & max to MAIN + 0xC3C0A50 # redirect reading Dynamic Resolution timing min & max to MAIN + 0xC3C0A50
- -
type: bytes type: asm_a64
main_offset: 0x6171A0 main_offset: 0x6171A0
value_type: uint32 instructions: [
value: [nop],
- 0xD503201F [ldr, s3, [x11, 0xe04]],
- 0xBD4E0563 [fadd, s1, s1, s3],
- 0x1E232821 [adrp, x12, 0xc3c0000],
- 0xB005ED4C [ldr, s2, [x12, 0xa50]]
- 0xBD4A5182 ]
- -
type: bytes type: asm_a64
main_offset: 0x6171F0 main_offset: 0x6171F0
value_type: uint32 instructions: [
value: [adrp, x11, 0xc3c0000],
- 0xB005ED4B [ldr, s2, [x11, 0xa54]]
- 0xBD4A5562 ]
# Default DR timings # Default DR timings
- -
type: bytes type: bytes
@ -41,3 +41,4 @@ ALL_FPS:
address: [MAIN, 0xC3C0A50] address: [MAIN, 0xC3C0A50]
value_type: float value_type: float
value: ["0.72 * FRAMETIME_TARGET", "0.93 * FRAMETIME_TARGET"] value: ["0.72 * FRAMETIME_TARGET", "0.93 * FRAMETIME_TARGET"]

View File

@ -7,12 +7,12 @@ MASTER_WRITE:
# Patch code to divide last frametime by float scale factor stored in MAIN+0x61EE400 # Patch code to divide last frametime by float scale factor stored in MAIN+0x61EE400
# To match it to Dynamic Resolution calculations # To match it to Dynamic Resolution calculations
- -
type: bytes type: asm_a64
main_offset: 0x9F1DDC main_offset: 0x9F1DDC
value_type: uint32 instructions: [
value: [adrp, x8, 0x61ee000],
- 0xB002BFE8 [ldr, s1, [x8, 0x400]]
- 0xBD440101 ]
# Write default dynamic resolution timing factor # Write default dynamic resolution timing factor
- -
type: bytes type: bytes
@ -25,3 +25,4 @@ ALL_FPS:
address: [MAIN, 0x61EE400] address: [MAIN, 0x61EE400]
value_type: float value_type: float
value: "(FPS_TARGET / 30) * 1000" value: "(FPS_TARGET / 30) * 1000"

View File

@ -7,54 +7,55 @@ MASTER_WRITE:
# Dynamic speed mod for stuff like UI, lipsync, grass and rain # Dynamic speed mod for stuff like UI, lipsync, grass and rain
## Redirect nvnQueuePresentTexture call to code cave at MAIN+0x1735050 ## Redirect nvnQueuePresentTexture call to code cave at MAIN+0x1735050
- -
type: bytes type: asm_a64
main_offset: 0x95EED8 main_offset: 0x95EED8
value_type: uint32 instructions: [
value: 0x1437585E [b, 0x1735050]
]
## Code Cave (save floats for speed factor to MAIN+0x47BE268, frametime as FPS in MAIN+0x47BE26C, frametime in s in MAIN+0x47BE270) ## Code Cave (save floats for speed factor to MAIN+0x47BE268, frametime as FPS in MAIN+0x47BE26C, frametime in s in MAIN+0x47BE270)
- -
type: bytes type: asm_a64
main_offset: 0x1735050 main_offset: 0x1735050
value_type: uint32 instructions: [
value: [blr, x8],
- 0xD63F0100 [bl, 0x1732500],
- 0x97FFF52B [adrp, x8, 0x47be000],
- 0xB0018448 [ldr, x7, [x8, 0x260]],
- 0xF9413107 [str, x0, [x8, 0x260]],
- 0xF9013100 [cbnz, x7, +8],
- 0xB5000047 [b, 0x95eedc],
- 0x17C8A79D [sub, x0, x0, x7],
- 0xCB070000 [bl, 0x1732510],
- 0x97FFF528 [adrp, x8, 0x47be000],
- 0xB0018448 [ldr, w1, [x8, 0x300]],
- 0xB9430101 [cmp, x1, x0],
- 0xEB00003F [b.lt, +8],
- 0x5400004B [mov, x0, x1],
- 0xAA0103E0 [mov, x1, 0x40aa],
- 0xD2881541 [movk, x1, 0x3f9, 16],
- 0xF2A07F21 [cmp, x1, x0],
- 0xEB00003F [b.gt, +8],
- 0x5400004C [mov, x0, x1],
- 0xAA0103E0 [ucvtf, d0, x0],
- 0x9E630000 [adrp, x0, 0x17eb000],
- 0xD00005A0 [ldr, d1, [x0, 0xd58]],
- 0xFD46AC01 [fdiv, d0, d0, d1],
- 0x1E611800 [mov, x0, 1000],
- 0xD2807D00 [ucvtf, d1, x0],
- 0x9E630001 [fdiv, d1, d1, d0],
- 0x1E601821 [adrp, x0, 0x47be000],
- 0xB0018440 [fcvt, s1, d1],
- 0x1E624021 [str, s1, [x0, 0x26c]],
- 0xBD026C01 [fmov, s2, 30.0],
- 0x1E27D002 [fdiv, s2, s2, s1],
- 0x1E211842 [str, s2, [x0, 0x268]],
- 0xBD026802 [mov, x1, 1000],
- 0xD2807D01 [ucvtf, d1, x1],
- 0x9E630021 [fdiv, d1, d0, d1],
- 0x1E611801 [fcvt, s1, d1],
- 0x1E624021 [str, s1, [x0, 0x270]],
- 0xBD027001 [b, 0x95eedc]
- 0x17C8A77E ]
## Default values for code cave ## Default values for code cave
- -
type: bytes type: bytes
@ -68,91 +69,95 @@ MASTER_WRITE:
value: 33333333 value: 33333333
## Function 1 to speed factor // Usage unknown ## Function 1 to speed factor // Usage unknown
- -
type: bytes type: asm_a64
main_offset: 0x286968 main_offset: 0x286968
value_type: uint32 instructions: [
value: [adrp, x21, 0x47be000],
- 0x900229D5 [ldr, x0, [x8, 0xe18]],
- 0xF9470D00 [ldr, s10, [x21, 0x268]]
- 0xBD426AAA ]
## Function 3 to speed factor // Usage unknown ## Function 3 to speed factor // Usage unknown
- -
type: bytes type: asm_a64
main_offset: 0xA16F00 main_offset: 0xA16F00
value_type: uint32 instructions: [
value: [adrp, x0, 0x47be000],
- 0x9001ED40 [ldr, s8, [x0, 0x268]]
- 0xBD426808 ]
## Function 4 to FPS // UI Speed ## Function 4 to FPS // UI Speed
- -
type: bytes type: asm_a64
main_offset: 0xA1F060 main_offset: 0xA1F060
value_type: uint32 instructions: [
value: [adrp, x0, 0x47be000],
- 0xF001ECE0 [fmov, s0, w8],
- 0x1E270100 [ldr, s0, [x0, 0x26c]]
- 0xBD426C00 ]
## Function 5 to FPS // Usage unknown ## Function 5 to FPS // Usage unknown
- -
type: bytes type: asm_a64
main_offset: 0x2672DC main_offset: 0x2672DC
value_type: uint32 instructions: [
value: [adrp, x0, 0x47ae000],
- 0xF0022A20 [fmov, s0, w8],
- 0x1E270100 [ldrh, w8, [x19, 0x68]],
- 0x7940D268 [ldr, s5, [x0, 0x26c]]
- 0xBD426C05 ]
## Function 6 to FPS ## Function 6 to FPS
- -
type: bytes type: asm_a64
main_offset: 0x26DB70 main_offset: 0x26DB70
value_type: uint32 instructions: [
value: [adrp, x0, 0x47be000],
- 0xB0022A80 [ldr, s0, [x0, 0x26c]],
- 0xBD426C00 [fcvtzu, w0, s0],
- 0x1E390000 [mov, w9, 6],
- 0x528000C9 [udiv, w8, w0, w9]
- 0x1AC90808 ]
## Function 7 to Frametime in s // Gameplay + cutscene speed ## Function 7 to Frametime in s // Gameplay + cutscene speed
- -
type: bytes type: asm_a64
main_offset: 0x1E2924 main_offset: 0x1E2924
value_type: uint32 instructions: [
value: 0x90022EE9 [adrp, x9, 0x47be000]
]
- -
type: bytes type: asm_a64
main_offset: 0x1E2938 main_offset: 0x1E2938
value_type: uint32 instructions: [
value: 0xBD427120 [ldr, s0, [x9, 0x270]]
]
# Adjust various elements related to fighting # Adjust various elements related to fighting
- -
type: bytes type: asm_a64
main_offset: 0x1E8F48 main_offset: 0x1E8F48
value_type: uint32 instructions: [
value: 0x1455308B [b, 0x1735174]
]
## Code cave ## Code cave
- -
type: bytes type: asm_a64
main_offset: 0x1735174 main_offset: 0x1735174
value_type: uint32 instructions: [
value: [adrp, x9, 0x47be000],
- 0xB0018449 [ldr, s0, [x9, 0x268]],
- 0xBD426920 [b, 0x1e8f4c]
- 0x17AACF74 ]
## Fix gun speed ## Fix gun speed
- -
type: bytes type: asm_a64
main_offset: 0x30FACC main_offset: 0x30FACC
value_type: uint32 instructions: [
value: 0xD503201F [nop]
]
# Redirect DR Target to MAIN+0x47BEF00 # Redirect DR Target to MAIN+0x47BEF00
- -
type: bytes type: asm_a64
main_offset: 0x13A90B4 main_offset: 0x13A90B4
value_type: uint32 instructions: [
value: [adrp, x8, 0x47be000],
- 0xB001A0A8 [ldr, s0, [x8, 0xf00]]
- 0xBD4F0100 ]
## Default value ## Default value
- -
type: bytes type: bytes
@ -162,157 +167,165 @@ MASTER_WRITE:
# Adjust camera speed rotation dynamically # Adjust camera speed rotation dynamically
## Code cave ## Code cave
- -
type: bytes type: asm_a64
main_offset: 0x1735108 main_offset: 0x1735108
value_type: uint32 instructions: [
value: [adrp, x8, 0x47be000],
- 0xB0018448 [ldr, s8, [x8, 0x268]],
- 0xBD426908 [fmul, s0, s8, s0],
- 0x1E200900 [fcmp, s0, 0.0],
- 0x1E202008 [b.ge, +20],
- 0x540000AA [fneg, s0, s0],
- 0x1E214000 [fsqrt, s0, s0],
- 0x1E21C000 [fneg, s0, s0],
- 0x1E214000 [ret],
- 0xD65F03C0 [fsqrt, s0, s0],
- 0x1E21C000 [ret]
- 0xD65F03C0 ]
## Connect function 1 ## Connect function 1
- -
type: bytes type: asm_a64
main_offset: 0x1E17A0 main_offset: 0x1E17A0
value_type: uint32 instructions: [
value: 0x94554E5A [bl, 0x1735108]
]
## Connect function 2 ## Connect function 2
- -
type: bytes type: asm_a64
main_offset: 0x1E17B0 main_offset: 0x1E17B0
value_type: uint32 instructions: [
value: 0xAD7D03A1 [ldp, q1, q0, [x29, -0x60]]
]
- -
type: bytes type: asm_a64
main_offset: 0x1E17BC main_offset: 0x1E17BC
value_type: uint32 instructions: [
value: 0x94554E53 [bl, 0x1735108]
]
# Force 1s sleep to synchronize audio if cutscene detected # Force 1s sleep to synchronize audio if cutscene detected
## Use function responsible for writing type 4 of cutscene ## Use function responsible for writing type 4 of cutscene
- -
type: bytes type: asm_a64
main_offset: 0x2FB0D8 main_offset: 0x2FB0D8
value_type: uint32 instructions: [
value: 0x1450E820 [b, 0x1735158]
]
### Code cave ### Code cave
- -
type: bytes type: asm_a64
main_offset: 0x1735158 main_offset: 0x1735158
value_type: uint32 instructions: [
value: [mov, w20, 4],
- 0x52800094 [adrp, x0, 0x1fef000],
- 0xD00045C0 [str, w20, [x0, 0xaf4]],
- 0xB90AF414 [mov, x0, 0xca00],
- 0xD2994000 [movk, x0, 0x3b9a, 16],
- 0xF2A77340 [bl, 0x17320d0],
- 0x97FFF3D9 [b, 0x2fb0dc]
- 0x17AF17DB ]
# Adjust Field Action gauge bar speed # Adjust Field Action gauge bar speed
- -
type: bytes type: asm_a64
main_offset: 0xE5E00 main_offset: 0xE5E00
value_type: uint32 instructions: [
value: [adrp, x0, 0x47be000],
- 0xB00236C0 [adrp, x9, 0x1d54000],
- 0xF000E369 [ldr, s8, [x0, 0x268]]
- 0xBD426808 ]
## Fix for FN Site ## Fix for FN Site
- -
type: bytes type: asm_a64
main_offset: 0xE5858 main_offset: 0xE5858
value_type: uint32 instructions: [
value: 0x14593E24 [b, 0x17350e8]
]
### Code cave ### Code cave
- -
type: bytes type: asm_a64
main_offset: 0x17350E8 main_offset: 0x17350E8
value_type: uint32 instructions: [
value: [ldr, s0, [x19, 0xd0]],
- 0xBD40D260 [adrp, x0, 0x47be000],
- 0xB0018440 [ldr, s1, [x0, 0x268]],
- 0xBD426801 [fmul, s0, s0, s1],
- 0x1E210800 [b, 0xe585c]
- 0x17A6C1D9 ]
# Fix long jump when not running # Fix long jump when not running
- -
type: bytes type: asm_a64
main_offset: 0x23EF70 main_offset: 0x23EF70
value_type: uint32 instructions: [
value: 0x1453D863 [b, 0x17350fc]
]
## Code cave ## Code cave
- -
type: bytes type: asm_a64
main_offset: 0x17350FC main_offset: 0x17350FC
value_type: uint32 instructions: [
value: [fmov, s11, 30.0],
- 0x1E27D00B [fadd, s11, s11, s11],
- 0x1E2B296B [b, 0x23ef74]
- 0x17AC279C ]
# Adjust QTE Speed # Adjust QTE Speed
## Code cave ## Code cave
- -
type: bytes type: asm_a64
main_offset: 0x1735134 main_offset: 0x1735134
value_type: uint32 instructions: [
value: [adrp, x20, 0x47be000],
- 0xB0018454 [ldr, s1, [x20, 0x268]],
- 0xBD426A81 [b, 0x17351a8]
- 0x1400001B ]
- -
type: bytes type: asm_a64
main_offset: 0x17351A8 main_offset: 0x17351A8
value_type: uint32 instructions: [
value: [ldr, s2, [x19, 0x120]],
- 0xBD412262 [fmul, s1, s2, s1],
- 0x1E210841 [b, 0x5c6284]
- 0x17BA4435 ]
## Connect function ## Connect function
- -
type: bytes type: asm_a64
main_offset: 0x5C6280 main_offset: 0x5C6280
value_type: uint32 instructions: [
value: 0x1445BBAD [b, 0x1735134]
]
# Adjust Overdrive counter, Follow Ball speed # Adjust Overdrive counter, Follow Ball speed
## Code cave ## Code cave
- -
type: bytes type: asm_a64
main_offset: 0x1735180 main_offset: 0x1735180
value_type: uint32 instructions: [
value: [adrp, x0, 0x47be000],
- 0xB0018440 [ldr, s0, [x0, 0x270]],
- 0xBD427000 [ret]
- 0xD65F03C0 ]
## Connect function ## Connect function
- -
type: bytes type: asm_a64
main_offset: 0x67354 main_offset: 0x67354
value_type: uint32 instructions: [
value: 0x945B36AB [bl, 0x1734e00]
]
# Fix fog speed # Fix fog speed
- -
type: bytes type: asm_a64
main_offset: 0x296AE0 main_offset: 0x296AE0
value_type: uint32 instructions: [
value: [adrp, x8, 0x47be000],
- 0x90022948 [ldr, s2, [x8, 0x268]],
- 0xBD426902 [bl, 0x17351b4]
- 0x945279B3 ]
## Code cave ## Code cave
- -
type: bytes type: asm_a64
main_offset: 0x17351B4 main_offset: 0x17351B4
value_type: uint32 instructions: [
value: [fsqrt, s2, s2],
- 0x1E21C042 [fmadd, s0, s1, s2, s0],
- 0x1F020020 [ret]
- 0xD65F03C0 ]
ALL_FPS: ALL_FPS:
# FPS Target # FPS Target
- -

View File

@ -6,25 +6,25 @@ unsafeCheck: false
MASTER_WRITE: MASTER_WRITE:
# Redirect FPS target to MAIN+0x55E9A00 # Redirect FPS target to MAIN+0x55E9A00
- -
type: bytes type: asm_a64
main_offset: 0x706FA4 main_offset: 0x706FA4
value_type: uint32 instructions: [
value: [adrp, x1, 0x55e9000]
- 0xF0027701 ]
- -
type: bytes type: asm_a64
main_offset: 0x7070B0 main_offset: 0x7070B0
value_type: uint32 instructions: [
value: [ldr, d0, [x1, 0xa00]]
- 0xFD450020 ]
# Redirect game speed to MAIN+0x55E9A08 # Redirect game speed to MAIN+0x55E9A08
- -
type: bytes type: asm_a64
main_offset: 0x667900 main_offset: 0x667900
value_type: uint32 instructions: [
value: [adrp, x8, 0x55e9000],
- 0xD0027C08 [ldr, s8, [x8, 0xa08]]
- 0xBD4A0908 ]
# Write default value # Write default value
- -
type: bytes type: bytes
@ -68,3 +68,4 @@ ALL_FPS:
- -
type: block type: block
what: timing what: timing

View File

@ -7,71 +7,78 @@ unsafeCheck: false
MASTER_WRITE: MASTER_WRITE:
# Remove double buffer # Remove double buffer
- -
type: bytes type: asm_a64
main_offset: 0x745E94 main_offset: 0x745E94
value_type: uint32 instructions: [
value: 0x52800069 [mov, w9, 3]
]
# Fix helper functions to not corrupt stack # Fix helper functions to not corrupt stack
- -
type: bytes type: asm_a64
main_offset: 0x745F70 main_offset: 0x745F70
value_type: uint32 instructions: [
value: 0x52800062 [mov, w2, 3]
]
- -
type: bytes type: asm_a64
main_offset: 0x75908C main_offset: 0x75908C
value_type: uint32 instructions: [
value: 0x52800062 [mov, w2, 3]
]
- -
type: bytes type: asm_a64
main_offset: 0x675198 main_offset: 0x675198
value_type: uint32 instructions: [
value: [sub, sp, sp, 0x50],
- 0xD10143FF [stp, x22, x21, [sp, 0x20]],
- 0xA90257F6 [stp, x20, x19, [sp, 0x30]],
- 0xA9034FF4 [stp, x29, x30, [sp, 0x40]],
- 0xA9047BFD [add, x29, sp, 0x40]
- 0x910103FD ]
- -
type: bytes type: asm_a64
main_offset: 0x6751EC main_offset: 0x6751EC
value_type: uint32 instructions: [
value: 0x52800062 [mov, w2, 3]
]
- -
type: bytes type: asm_a64
main_offset: 0x675210 main_offset: 0x675210
value_type: uint32 instructions: [
value: [ldp, x29, x30, [sp, 0x40]],
- 0xA9447BFD [ldp, x20, x19, [sp, 0x30]],
- 0xA9434FF4 [ldp, x22, x21, [sp, 0x20]],
- 0xA94257F6 [add, sp, sp, 0x50]
- 0x910143FF ]
- -
type: bytes type: asm_a64
main_offset: 0x74A510 main_offset: 0x74A510
value_type: uint32 instructions: [
value: 0x52800062 [mov, w2, 3]
]
- -
type: bytes type: asm_a64
main_offset: 0x7590F8 main_offset: 0x7590F8
value_type: uint32 instructions: [
value: 0x52800062 [mov, w2, 3]
]
- -
type: bytes type: asm_a64
main_offset: 0x7BDCD4 main_offset: 0x7BDCD4
value_type: uint32 instructions: [
value: 0x52800062 [mov, w2, 3]
]
# Block transparency in some 2D elements to avoid issue with flickering at triple buffer # Block transparency in some 2D elements to avoid issue with flickering at triple buffer
- -
type: bytes type: asm_a64
main_offset: 0x6A58C8 main_offset: 0x6A58C8
value_type: uint32 instructions: [
value: [mov, x9, 0x102],
- 0xD2802049 [ldr, w10, [x10, 0x840]],
- 0xB948414A [add, x20, x8, 0x820],
- 0x91208114 [lsl, x12, x10, 3],
- 0xD37DF14C [str, x9, [x20]]
- 0xF9000289 ]
ALL_FPS: ALL_FPS:
# Interval (Setting it to 0 unlocks framerate and sets dynamic game speed) # Interval (Setting it to 0 unlocks framerate and sets dynamic game speed)
- -
@ -85,3 +92,4 @@ ALL_FPS:
address: [MAIN, 0xA726B0, 0x140, 0x1B0, 0x20, 0x34] address: [MAIN, 0xA726B0, 0x140, 0x1B0, 0x20, 0x34]
value_type: float value_type: float
value: ["(30 / FPS_TARGET) * 1.95", "(30 / FPS_TARGET) * 1.7"] value: ["(30 / FPS_TARGET) * 1.95", "(30 / FPS_TARGET) * 1.7"]

View File

@ -6,39 +6,41 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Detect prerendered cutscenes # Detect prerendered cutscenes
- -
type: bytes type: asm_a64
main_offset: 0xB1A810 main_offset: 0xB1A810
value_type: uint32 instructions: [
value: 0x14005CF6 [b, 0xb31be8]
]
- -
type: bytes type: asm_a64
main_offset: 0xB31BE8 main_offset: 0xB31BE8
value_type: uint32 instructions: [
value: [str, x19, [sp, -0x20], "!"],
- 0xF81E0FF3 [mov, w1, 1],
- 0x52800021 [adrp, x19, 0x24e7000],
- 0xD000CDB3 [str, w1, [x19, 0xff0]],
- 0xB90FF261 [mov, x19, x0],
- 0xAA0003F3 [mov, w0, 0xca00],
- 0x52994000 [movk, w0, 0x3b9a, 16],
- 0x72A77340 [svc, 0xb],
- 0xD4000161 [mov, x0, x19],
- 0xAA1303E0 [b, 0xb1a814]
- 0x17FFA302 ]
- -
type: bytes type: asm_a64
main_offset: 0xB1A9BC main_offset: 0xB1A9BC
value_type: uint32 instructions: [
value: 0x14005C95 [b, 0xb31c10]
]
- -
type: bytes type: asm_a64
main_offset: 0xB31C10 main_offset: 0xB31C10
value_type: uint32 instructions: [
value: [mov, w1, wzr],
- 0x2A1F03E1 [adrp, x2, 0x24e7000],
- 0xD000CDA2 [str, w1, [x2, 0xff0]],
- 0xB90FF041 [b, 0xb24ec0]
- 0x17FFCCA9 ]
ALL_FPS: ALL_FPS:
# Internal FPS Lock # Internal FPS Lock
- -
@ -54,4 +56,4 @@ ALL_FPS:
compare_address: [MAIN, 0x24E7FF0] compare_address: [MAIN, 0x24E7FF0]
address: [MAIN] address: [MAIN]
value_type: refresh_rate value_type: refresh_rate
value: 30 value: 30

View File

@ -7,22 +7,22 @@ MASTER_WRITE:
# Redirect reading DR timing in DynamicResolution::LowerResSW() to MAIN + 0x7C22F00 # Redirect reading DR timing in DynamicResolution::LowerResSW() to MAIN + 0x7C22F00
# REF: 01 f0 67 1e # REF: 01 f0 67 1e
- -
type: bytes type: asm_a64
main_offset: 0x38E7ECC main_offset: 0x38E7ECC
value_type: uint32 instructions: [
value: [adrp, x20, 0x7c22000],
- 0xF00219D4 # adrp x20, #0x7c22000 [ldr, d1, [x20, 0xf00]],
- 0xFD478281 # ldr d1, [x20, #0xf00] [fcmpe, d0, d1],
- 0x1E612010 # fcmpe d0, d1 [ldp, s9, s8, [x19, 0x40]],
- 0x2D482269 # ldp s9, s8, [x19, #0x40] [b.le, 0x38e7f34],
- 0x540002CD # b.le #0x38e7f34 [ldr, s10, [x19, 0x60]]
- 0xBD40626A # ldr s10, [x19, #0x60] ]
- -
type: bytes type: asm_a64
main_offset: 0x38E7F34 main_offset: 0x38E7F34
value_type: uint32 instructions: [
value: [ldr, d1, [x20, 0xf08]]
- 0xFD478681 # ldr d1, [x20, #0xf08] ]
# Default handheld value # Default handheld value
- -
type: bytes type: bytes
@ -36,3 +36,4 @@ ALL_FPS:
address: [MAIN, 0x7C22F00] address: [MAIN, 0x7C22F00]
value_type: double value_type: double
value: ["0.93 * FRAMETIME_TARGET", "(0.93 * FRAMETIME_TARGET) - 2"] value: ["0.93 * FRAMETIME_TARGET", "(0.93 * FRAMETIME_TARGET) - 2"]

View File

@ -7,10 +7,11 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Remove double buffer # Remove double buffer
- -
type: bytes type: asm_a64
main_offset: 0x55DFDC main_offset: 0x55DFDC
value_type: uint32 instructions: [
value: 0xD2800068 [mov, x8, 3]
]
ALL_FPS: ALL_FPS:
# DUMMY # DUMMY
- -

View File

@ -9,12 +9,12 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Move loading FPS lock time to MAIN+0x2B31200 # Move loading FPS lock time to MAIN+0x2B31200
- -
type: bytes type: asm_a64
main_offset: 0x511818 main_offset: 0x511818
value_type: uint32 instructions: [
value: [adrp, x9, 0x2b31000],
- 0x90013109 [ldr, w9, [x9, 0x200]]
- 0xB9420129 ]
# Default value # Default value
- -
type: bytes type: bytes
@ -23,35 +23,35 @@ MASTER_WRITE:
value: 33333333 value: 33333333
# Write game's loop time as float to MAIN+0x2B31204 # Write game's loop time as float to MAIN+0x2B31204
- -
type: bytes type: asm_a64
main_offset: 0x511884 main_offset: 0x511884
value_type: uint32 instructions: [
value: [b, 0x5117f4]
- 0x17FFFFDC ]
- -
type: bytes type: asm_a64
main_offset: 0x5117F4 main_offset: 0x5117F4
value_type: uint32 instructions: [
value: [str, d0, [x8, 0x20]],
- 0xFD001100 [fcvt, s4, d0],
- 0x1E624004 [b, 0x511a84]
- 0x140000A2 ]
- -
type: bytes type: asm_a64
main_offset: 0x511A84 main_offset: 0x511A84
value_type: uint32 instructions: [
value: [adrp, x8, 0x2b31000],
- 0x90013108 [str, s4, [x8, 0x204]],
- 0xBD020504 [b, 0x511888]
- 0x17FFFF7F ]
- # Read lowest timing float factor from MAIN+0x2B31204 - # Read lowest timing float factor from MAIN+0x2B31204
type: bytes type: asm_a64
main_offset: 0x5E5EC main_offset: 0x5E5EC
value_type: uint32 instructions: [
value: [adrp, x8, 0x2b31000],
- 0xF0015688 [fminnm, s1, s1, s2],
- 0x1E227821 [ldr, s2, [x8, 0x204]]
- 0xBD420502 ]
- # Default value - # Default value
type: bytes type: bytes
main_offset: 0x2B31204 main_offset: 0x2B31204
@ -63,3 +63,4 @@ ALL_FPS:
address: [MAIN, 0x2B31200] address: [MAIN, 0x2B31200]
value_type: uint32 value_type: uint32
value: 11111111 value: 11111111

View File

@ -7,13 +7,13 @@ MASTER_WRITE:
# Redirect DR to MAIN + 0x2F5CFF0 # Redirect DR to MAIN + 0x2F5CFF0
# REF: A9 24 89 52 49 A2 A7 72, second REF # REF: A9 24 89 52 49 A2 A7 72, second REF
- -
type: bytes type: asm_a64
main_offset: 0x10AAEE4 main_offset: 0x10AAEE4
value_type: uint32 instructions: [
value: [adrp, x9, 0x2f5c000],
- 0xD000F589 # adrp x9, 0x2F5C000 [ldr, s1, [x9, 0xff0]],
- 0xBD4FF121 # ldr s1, [x9, 0xFF0] [nop]
- 0xD503201F # nop ]
## Default value ## Default value
- -
type: bytes type: bytes
@ -34,3 +34,4 @@ ALL_FPS:
address: [MAIN, 0x2F5CFF0] address: [MAIN, 0x2F5CFF0]
value_type: float value_type: float
value: "1.01 / FPS_TARGET" value: "1.01 / FPS_TARGET"

View File

@ -0,0 +1,38 @@
# 유미아의 아틀리에 ~추억의 연금술사와 창환의 땅~ 1.3.0
# BID: 6CB3E54C5F648410
unsafeCheck: false
MASTER_WRITE:
# Redirect DR to MAIN + 0x2F5CFF0
# REF: A9 24 89 52 49 A2 A7 72, second REF
-
type: asm_a64
main_offset: 0x10AAEE4
instructions: [
[adrp, x9, 0x2f5c000],
[ldr, s1, [x9, 0xff0]],
[nop]
]
## Default value
-
type: bytes
main_offset: 0x2F5CFF0
value_type: float
value: 0.035714
ALL_FPS:
# Disable FPS Lock
# REF: 88 46 40 F9 03 11 40 F9, first ADRP+LDR above it
-
type: write
address: [MAIN, 0x2F23C00, 0xE0, 0x294]
value_type: uint8
value: 0
# DR Target
-
type: evaluate_write
address: [MAIN, 0x2F5CFF0]
value_type: float
value: "1.01 / FPS_TARGET"

View File

@ -0,0 +1,12 @@
# EA SPORTS FC 25 1.7e.e73a
# BID: 39296BB1FD4A3F20
unsafeCheck: true
ALL_FPS:
# Internal FPS Lock
-
type: evaluate_write
address: [MAIN, 0xCEEFA88, 8]
value_type: double
value: FPS_TARGET

View File

@ -6,19 +6,19 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Redirect DR timing targets to MAIN + 0x21E4F30 # Redirect DR timing targets to MAIN + 0x21E4F30
- -
type: bytes type: asm_a64
main_offset: 0x4C82D0 main_offset: 0x4C82D0
value_type: uint32 instructions: [
value: [adrp, x10, 0x21e4000],
- 0x9000E8EA [ldr, s2, [x10, 0xf30]]
- 0xBD4F3142 ]
- -
type: bytes type: asm_a64
main_offset: 0x4C8300 main_offset: 0x4C8300
value_type: uint32 instructions: [
value: [adrp, x8, 0x21e4000],
- 0x9000E8E8 [ldr, s2, [x8, 0xf34]]
- 0xBD4F3502 ]
# Default values # Default values
- -
type: bytes type: bytes
@ -31,3 +31,4 @@ ALL_FPS:
address: [MAIN, 0x21E4F30] address: [MAIN, 0x21E4F30]
value_type: float value_type: float
value: ["0.99 * FRAMETIME_TARGET", "0.84 * FRAMETIME_TARGET"] value: ["0.99 * FRAMETIME_TARGET", "0.84 * FRAMETIME_TARGET"]

View File

@ -6,33 +6,34 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Redirect DR timings to MAIN + 0x2BE6F00, [Bad, Optimal, Good] # Redirect DR timings to MAIN + 0x2BE6F00, [Bad, Optimal, Good]
- -
type: bytes type: asm_a64
main_offset: 0x9BF3E4 main_offset: 0x9BF3E4
value_type: uint32 instructions: [
value: [adrp, x12, 0x2be6000],
- 0xF001112C [ldr, s3, [x12, 0xf00]]
- 0xBD4F0183 ]
- -
type: bytes type: asm_a64
main_offset: 0x9BF434 main_offset: 0x9BF434
value_type: uint32 instructions: [
value: [adrp, x12, 0x2be6000],
- 0xF001112C [ldr, w12, [x12, 0xf04]]
- 0xB94F058C ]
- -
type: bytes type: asm_a64
main_offset: 0x9BF484 main_offset: 0x9BF484
value_type: uint32 instructions: [
value: [fcsel, s3, s4, s0, gt],
- 0x1E20CC83 [adrp, x12, 0x2be6000],
- 0xF001112C [ldr, s0, [x12, 0xf04]],
- 0xBD4F0580 [nop]
- 0xD503201F ]
- -
type: bytes type: asm_a64
main_offset: 0x9BF4A8 main_offset: 0x9BF4A8
value_type: uint32 instructions: [
value: 0xBD4F0980 [ldr, s0, [x12, 0xf08]]
]
# Default values # Default values
- -
type: bytes type: bytes
@ -45,3 +46,4 @@ ALL_FPS:
address: [MAIN, 0x2BE6F00] address: [MAIN, 0x2BE6F00]
value_type: float value_type: float
value: ["1.35 * FRAMETIME_TARGET", "0.9603 * FRAMETIME_TARGET", "0.9 * FRAMETIME_TARGET"] value: ["1.35 * FRAMETIME_TARGET", "0.9603 * FRAMETIME_TARGET", "0.9 * FRAMETIME_TARGET"]

View File

@ -6,45 +6,48 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Redirect Dynamic Resolution Timings to read always not from .text # Redirect Dynamic Resolution Timings to read always not from .text
- -
type: bytes type: asm_a64
main_offset: 0x2EE9A90 main_offset: 0x2EE9A90
value_type: uint32 instructions: [
value: 0x1E204020 [fmov, s0, s1]
]
- -
type: bytes type: asm_a64
main_offset: 0x2EE9AA8 main_offset: 0x2EE9AA8
value_type: uint32 instructions: [
value: 0x1E221C42 [fcsel, s2, s2, s2, ne]
]
# Redirect Dynamic Resolution Timings readings to MAIN+0x453B300 # Redirect Dynamic Resolution Timings readings to MAIN+0x453B300
- -
type: bytes type: asm_a64
main_offset: 0x2EE9A38 main_offset: 0x2EE9A38
value_type: uint32 instructions: [
value: 0xD000B28B [adrp, x11, 0x453b000]
]
- -
type: bytes type: asm_a64
main_offset: 0x2EE9A40 main_offset: 0x2EE9A40
value_type: uint32 instructions: [
value: [adrp, x12, 0x453b000],
- 0xD000B28C [ldr, s1, [x11, 0x300]],
- 0xBD430161 [ldr, s2, [x12, 0x304]]
- 0xBD430582 ]
- -
type: bytes type: asm_a64
main_offset: 0x2EE9A50 main_offset: 0x2EE9A50
value_type: uint32 instructions: [
value: [adrp, x13, 0x453b000],
- 0xD000B28D [add, x13, x13, 0x308]
- 0x910C21AD ]
- -
type: bytes type: asm_a64
main_offset: 0x2EE9A7C main_offset: 0x2EE9A7C
value_type: uint32 instructions: [
value: [adrp, x9, 0x453b000],
- 0xD000B289 [add, x9, x9, 0x310],
- 0x910C4129 [adrp, x11, 0x453b000],
- 0xD000B28B [add, x11, x11, 0x318]
- 0x910C616B ]
# Write default values # Write default values
# MAIN + 0x333FAFC # MAIN + 0x333FAFC
- -
@ -122,3 +125,4 @@ ALL_FPS:
- -
type: block type: block
what: timing what: timing

View File

@ -7,27 +7,27 @@ MASTER_WRITE:
# REF: 09 49 A8 52 21 01 27 1E 00 20 21 1E # REF: 09 49 A8 52 21 01 27 1E 00 20 21 1E
# Use FPS Target instead of vsync value for Dynamic Resolution max delta # Use FPS Target instead of vsync value for Dynamic Resolution max delta
- -
type: bytes type: asm_a64
main_offset: 0x6E3AF0 main_offset: 0x6E3AF0
value_type: uint32 instructions: [
value: [adrp, x1, 0x1021000],
- 0xD00049E1 # ADRP X1, 0x1021000 [ldr, s1, [x1, 0xe10]]
- 0xBD4E1021 # LDR S1, [X1, 0xE10] ]
# Redirect DR Targets to MAIN+0x1477F00 # Redirect DR Targets to MAIN+0x1477F00
- -
type: bytes type: asm_a64
main_offset: 0x6E3B94 main_offset: 0x6E3B94
value_type: uint32 instructions: [
value: [adrp, x9, 0x14bf000],
- 0x90006EE9 # ADRP X9, 0x14BF000 [ldr, s1, [x9, 0xf00]]
- 0xBD4F0121 # LDR S1, [X9, 0xF00] ]
- -
type: bytes type: asm_a64
main_offset: 0x6E3BA4 main_offset: 0x6E3BA4
value_type: uint32 instructions: [
value: [adrp, x9, 0x14bf000],
- 0x90006EE9 # ADRP X9, 0x14BF000 [ldr, s1, [x9, 0xf04]]
- 0xBD4F0521 # LDR S1, [X9, 0xF04] ]
# Default values # Default values
- -
type: bytes type: bytes
@ -72,4 +72,5 @@ ALL_FPS:
type: evaluate_write type: evaluate_write
address: [MAIN, 0x14BFF00] address: [MAIN, 0x14BFF00]
value_type: float value_type: float
value: ["1.5 * FRAMETIME_TARGET", "1.2 * FRAMETIME_TARGET"]
value: ["1.5 * FRAMETIME_TARGET", "1.2 * FRAMETIME_TARGET"]

View File

@ -7,17 +7,19 @@ MASTER_WRITE:
# NOP internal FPS Lock # NOP internal FPS Lock
# REF: 00 00 23 1E E1 02 27 1E 00 08 21 1E # REF: 00 00 23 1E E1 02 27 1E 00 08 21 1E
- -
type: bytes type: asm_a64
main_offset: 0x7E4AA4 main_offset: 0x7E4AA4
value_type: uint32 instructions: [
value: 0xD503201F [nop]
]
# Set window present interval to 2 to get default 30 FPS lock # Set window present interval to 2 to get default 30 FPS lock
# REF: 34 14 9F 1A # REF: 34 14 9F 1A
- -
type: bytes type: asm_a64
main_offset: 0x22FCB88 main_offset: 0x22FCB88
value_type: uint32 instructions: [
value: 0x52800054 [mov, w20, 2]
]
ALL_FPS: ALL_FPS:
# DUMMY # DUMMY
- -
@ -25,3 +27,4 @@ ALL_FPS:
address: [MAIN, 0x5226F00] address: [MAIN, 0x5226F00]
value_type: uint8 value_type: uint8
value: 0 value: 0

View File

@ -7,12 +7,12 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Redirect reading DR GPU time factor to MAIN + 0x4FC0E00 # Redirect reading DR GPU time factor to MAIN + 0x4FC0E00
- -
type: bytes type: asm_a64
main_offset: 0x470E80 main_offset: 0x470E80
value_type: uint32 instructions: [
value: [adrp, x9, 0x4fc0000],
- 0x90025A89 [ldr, s2, [x9, 0xe00]]
- 0xBD4E0122 ]
# Default value (= 0.5 / FPS) # Default value (= 0.5 / FPS)
- -
type: bytes type: bytes
@ -38,3 +38,4 @@ ALL_FPS:
address: [MAIN, 0x4FC0E00] address: [MAIN, 0x4FC0E00]
value_type: float value_type: float
value: "0.5 / FPS_TARGET" value: "0.5 / FPS_TARGET"

View File

@ -6,18 +6,19 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Remove double buffer # Remove double buffer
- -
type: bytes type: asm_a64
main_offset: 0x7E4ED8 main_offset: 0x7E4ED8
value_type: uint32 instructions: [
value: 0x9409328A [bl, 0xa31900]
]
- -
type: bytes type: asm_a64
main_offset: 0xA31900 main_offset: 0xA31900
value_type: uint32 instructions: [
value: [mov, w22, 3],
- 0x52800076 [str, w22, [x1, 8]],
- 0xB9000836 [b, 0xa305c0]
- 0x17FFFB2E ]
ALL_FPS: ALL_FPS:
# DUMMY # DUMMY
- -
@ -25,3 +26,4 @@ ALL_FPS:
address: [MAIN, 0x13E5400] address: [MAIN, 0x13E5400]
value_type: uint8 value_type: uint8
value: 0 value: 0

View File

@ -7,22 +7,24 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Block updating DR timings, REF: 00 01 27 1E 48 40 A8 52 # Block updating DR timings, REF: 00 01 27 1E 48 40 A8 52
- -
type: bytes type: asm_a64
main_offset: 0x1CA806C main_offset: 0x1CA806C
value_type: uint32 instructions: [
value: 0xD503201F [nop]
]
- -
type: bytes type: asm_a64
main_offset: 0x1CA8074 main_offset: 0x1CA8074
value_type: uint32 instructions: [
value: 0xD503201F [nop]
]
- -
type: bytes type: asm_a64
main_offset: 0x1CA8094 main_offset: 0x1CA8094
value_type: uint32 instructions: [
value: [nop],
- 0xD503201F [nop]
- 0xD503201F ]
# Write default DR timings # Write default DR timings
- -
type: bytes type: bytes
@ -51,3 +53,4 @@ ALL_FPS:
- -
type: block type: block
what: timing what: timing

View File

@ -7,21 +7,21 @@ MASTER_WRITE:
# Redirect Dynamic Resolution timings to MAIN + 0x23774F00 # Redirect Dynamic Resolution timings to MAIN + 0x23774F00
# 38.0 # 38.0
- -
type: bytes type: asm_a64
main_offset: 0xF57294 main_offset: 0xF57294
value_type: uint32 instructions: [
value: [adrp, x9, 0x23774000],
- 0xB01140E9 [fmul, s0, s0, s1],
- 0x1E210800 [ldr, s1, [x9, 0xf00]]
- 0xBD4F0121 ]
# 32.0 # 32.0
- -
type: bytes type: asm_a64
main_offset: 0xF572B8 main_offset: 0xF572B8
value_type: uint32 instructions: [
value: [ldr, s1, [x9, 0xf04]],
- 0xBD4F0521 [nop]
- 0xD503201F ]
# Default values: # Default values:
- -
type: bytes type: bytes
@ -41,4 +41,4 @@ ALL_FPS:
type: evaluate_write type: evaluate_write
address: [MAIN, 0x23774F00] address: [MAIN, 0x23774F00]
value_type: float value_type: float
value: ["(38.0 / (1000/30)) * FRAMETIME_TARGET", "(32.0 / (1000/30)) * FRAMETIME_TARGET"] value: ["(38.0 / (1000/30)) * FRAMETIME_TARGET", "(32.0 / (1000/30)) * FRAMETIME_TARGET"]

View File

@ -8,14 +8,14 @@ MASTER_WRITE:
# Patch code to multiply last frametime by float scale factor stored in MAIN+0x3B4D800 # Patch code to multiply last frametime by float scale factor stored in MAIN+0x3B4D800
# To match it to Dynamic Resolution calculations # To match it to Dynamic Resolution calculations
- -
type: bytes type: asm_a64
main_offset: 0xB40638 main_offset: 0xB40638
value_type: uint32 instructions: [
value: [adrp, x9, 0x3b4d000],
- 0xB0018069 [ldr, s0, [x9, 0x800]],
- 0xBD480120 [fmul, s9, s8, s0],
- 0x1E200909 [nop]
- 0xD503201F ]
# Write default dynamic resolution timing factor # Write default dynamic resolution timing factor
- -
type: bytes type: bytes
@ -28,3 +28,4 @@ ALL_FPS:
address: [MAIN, 0x3B4D800] address: [MAIN, 0x3B4D800]
value_type: float value_type: float
value: "FPS_TARGET / 30" value: "FPS_TARGET / 30"

View File

@ -8,19 +8,19 @@ MASTER_WRITE:
# Patch code to multiply last frametime by float scale factor stored in MAIN+0x4276B00 # Patch code to multiply last frametime by float scale factor stored in MAIN+0x4276B00
# To match it to Dynamic Resolution calculations # To match it to Dynamic Resolution calculations
- -
type: bytes type: asm_a64
main_offset: 0xBDBE44 main_offset: 0xBDBE44
value_type: uint32 instructions: [
value: [adrp, x8, 0x4276000],
- 0xF001B4C8 [ldr, s0, [x8, 0xb00]]
- 0xBD4B0100 ]
- -
type: bytes type: asm_a64
main_offset: 0xBDBE58 main_offset: 0xBDBE58
value_type: uint32 instructions: [
value: [fmul, s0, s8, s0],
- 0x1E200900 [nop]
- 0xD503201F ]
# Write default dynamic resolution timing factor # Write default dynamic resolution timing factor
- -
type: bytes type: bytes
@ -33,3 +33,4 @@ ALL_FPS:
address: [MAIN, 0x4276B00] address: [MAIN, 0x4276B00]
value_type: float value_type: float
value: "FPS_TARGET / 30" value: "FPS_TARGET / 30"

View File

@ -8,12 +8,12 @@ MASTER_WRITE:
# Patch code to divide last frametime by float scale factor stored in MAIN+0x4422800 # Patch code to divide last frametime by float scale factor stored in MAIN+0x4422800
# To match it to Dynamic Resolution calculations # To match it to Dynamic Resolution calculations
- -
type: bytes type: asm_a64
main_offset: 0xAD51A0 main_offset: 0xAD51A0
value_type: uint32 instructions: [
value: [adrp, x8, 0x4422000],
- 0xB001CA68 [ldr, s1, [x8, 0x800]]
- 0xBD480101 ]
# Write default dynamic resolution timing factor # Write default dynamic resolution timing factor
- -
type: bytes type: bytes
@ -26,3 +26,4 @@ ALL_FPS:
address: [MAIN, 0x4422800] address: [MAIN, 0x4422800]
value_type: float value_type: float
value: "(FPS_TARGET / 30) * 1000" value: "(FPS_TARGET / 30) * 1000"

View File

@ -19,43 +19,46 @@ MASTER_WRITE:
value: 0x36 value: 0x36
# Allow variable game speed instead of fixed # Allow variable game speed instead of fixed
- -
type: bytes type: asm_a64
main_offset: 0x36D880 main_offset: 0x36D880
value_type: uint32 instructions: [
value: [adrp, x8, 0x15d0000],
- 0xF0009308 [add, x8, x8, 0x80c]
- 0x91203108 ]
- -
type: bytes type: asm_a64
main_offset: 0x36D88C main_offset: 0x36D88C
value_type: uint32 instructions: [
value: 0x528002C9 [mov, w9, 0x16]
]
- -
type: bytes type: asm_a64
main_offset: 0x36D894 main_offset: 0x36D894
value_type: uint32 instructions: [
value: [adrp, x8, 0x15cd000],
- 0x90009308 [add, x8, x8, 0x109]
- 0x91042508 ]
- -
type: bytes type: asm_a64
main_offset: 0x36D89C main_offset: 0x36D89C
value_type: uint32 instructions: [
value: 0x52800269 [mov, w9, 0x13]
]
# Force interval to 2 to maintain original 30 FPS lock by default # Force interval to 2 to maintain original 30 FPS lock by default
- -
type: bytes type: asm_a64
main_offset: 0x92BB84 main_offset: 0x92BB84
value_type: uint32 instructions: [
value: 0x52800055 [mov, w21, 2]
]
# Redirect DR timing target to MAIN + 0x1C5DF00 # Redirect DR timing target to MAIN + 0x1C5DF00
- -
type: bytes type: asm_a64
main_offset: 0xA38B18 main_offset: 0xA38B18
value_type: uint32 instructions: [
value: [adrp, x1, 0x1c5d000],
- 0xB0009121 [ldr, s0, [x1, 0xf00]]
- 0xBD4F0020 ]
ALL_FPS: ALL_FPS:
# DR timing = 1/FPS # DR timing = 1/FPS
- -
@ -69,3 +72,4 @@ ALL_FPS:
address: [MAIN, 0x1C49DD0, 0x39E0] address: [MAIN, 0x1C49DD0, 0x39E0]
value_type: uint32 value_type: uint32
value: "VSYNC_TARGET - 1" value: "VSYNC_TARGET - 1"

View File

@ -6,10 +6,11 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Block from reapplying t.MaxFPS by game, REF: 01 E4 00 2F 00 AC 21 1E 08 00 40 F9 08 75 41 F9, nop BLR X8 after LDR X8, [X8,#0x2E8] # Block from reapplying t.MaxFPS by game, REF: 01 E4 00 2F 00 AC 21 1E 08 00 40 F9 08 75 41 F9, nop BLR X8 after LDR X8, [X8,#0x2E8]
- -
type: bytes type: asm_a64
main_offset: 0x3780DD0 main_offset: 0x3780DD0
value_type: uint32 instructions: [
value: 0xD503201F [nop]
]
ALL_FPS: ALL_FPS:
# r.DynamicRes.FrameTimeBudget # r.DynamicRes.FrameTimeBudget
- -
@ -28,4 +29,4 @@ ALL_FPS:
type: evaluate_write type: evaluate_write
address: [MAIN, 0x7AD5858, 0] address: [MAIN, 0x7AD5858, 0]
value_type: float value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET] value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]

View File

@ -1,4 +1,4 @@
# Gear.Club Unlimited 2 # Gear.Club Unlimited 2 1.7.2
# BID: FE757B10B45C3444 # BID: FE757B10B45C3444
unsafeCheck: true unsafeCheck: true
@ -7,58 +7,60 @@ MASTER_WRITE:
# Edit Eden.Graphics.IGraphicsQualityProfile::set_VSyncCount to get interval from MAIN + 0x5FBAF20 # Edit Eden.Graphics.IGraphicsQualityProfile::set_VSyncCount to get interval from MAIN + 0x5FBAF20
# If not edited, light is flickering at > 30 FPS # If not edited, light is flickering at > 30 FPS
- -
type: bytes type: asm_a64
main_offset: 0x14B4990 main_offset: 0x14B4990
value_type: uint32 instructions: [
value: [adrp, x1, 0x5fba000],
- 0xD0025821 [ldr, w1, [x1, 0xf20]],
- 0xB94F2021 [str, w1, [x0, 0x54]],
- 0xB9005401 [ret]
- 0xD65F03C0 ]
# Edit UnityEngine.QualitySettings::set_vSyncCount to get interval from MAIN + 0x5FBAF20 # Edit UnityEngine.QualitySettings::set_vSyncCount to get interval from MAIN + 0x5FBAF20
# If not edited, light is flickering at > 30 FPS # If not edited, light is flickering at > 30 FPS
- -
type: bytes type: asm_a64
main_offset: 0x1B46EE4 main_offset: 0x1B46EE4
value_type: uint32 instructions: [
value: [adrp, x0, 0x5fba000],
- 0x900223A0 [ldr, w0, [x0, 0xf20]],
- 0xB94F2000 [ldp, x29, x30, [sp, 0x20]],
- 0xA9427BFD [ldp, x20, x19, [sp, 0x10]],
- 0xA9414FF4 [add, sp, sp, 0x30],
- 0x9100C3FF [br, x1]
- 0xD61F0020 ]
# Edit Eden.Graphics.GraphicsQualityManager::SetTargetFrameRate to get interval from MAIN + 0x5FBAF20 # Edit Eden.Graphics.GraphicsQualityManager::SetTargetFrameRate to get interval from MAIN + 0x5FBAF20
# If not edited, it locks to 30 FPS # If not edited, it locks to 30 FPS
- -
type: bytes type: asm_a64
main_offset: 0x14AB578 main_offset: 0x14AB578
value_type: uint32 instructions: [
value: 0x947E69DC [bl, 0x3445ce8]
]
- -
type: bytes type: asm_a64
main_offset: 0x3445CE8 main_offset: 0x3445CE8
value_type: uint32 instructions: [
value: [adrp, x1, 0x5fba000],
- 0xB0015BA1 [ldr, w1, [x1, 0xf20]],
- 0xB94F2021 [mov, w19, w1],
- 0x2A0103F3 [ret]
- 0xD65F03C0 ]
# Edit Eden.Graphics.DynamicResolutionScaler::UpdateScaling to get DR target timing from MAIN + 0x5FBAF28 # Edit Eden.Graphics.DynamicResolutionScaler::UpdateScaling to get DR target timing from MAIN + 0x5FBAF28
# If not edited, performance is much worse at > 30 FPS # If not edited, performance is much worse at > 30 FPS
- -
type: bytes type: asm_a64
main_offset: 0x14988BC main_offset: 0x14988BC
value_type: uint32 instructions: [
value: 0x947EB50F [bl, 0x3445cf8]
]
- -
type: bytes type: asm_a64
main_offset: 0x3445CF8 main_offset: 0x3445CF8
value_type: uint32 instructions: [
value: [adrp, x0, 0x5fba000],
- 0xB0015BA0 [ldr, s0, [x0, 0xf28]],
- 0xBD4F2800 [ret]
- 0xD65F03C0 ]
# Default values # Default values
- -
type: bytes type: bytes
@ -81,3 +83,5 @@ ALL_FPS:
address: [MAIN, 0x5FBAF28] address: [MAIN, 0x5FBAF28]
value_type: float value_type: float
value: "1.1 * FPS_TARGET" value: "1.1 * FPS_TARGET"

View File

@ -7,30 +7,34 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Change minimal game speed to half of default value # Change minimal game speed to half of default value
- -
type: bytes type: asm_a64
main_offset: 0x91DC94 main_offset: 0x91DC94
value_type: uint32 instructions: [
value: 0x1E2C1001 [fmov, s1, 0.5]
]
- -
type: bytes type: asm_a64
main_offset: 0x91DCA0 main_offset: 0x91DCA0
value_type: uint32 instructions: [
value: 0x1E2C1001 [fmov, s1, 0.5]
]
- -
type: bytes type: asm_a64
main_offset: 0x91DCAC main_offset: 0x91DCAC
value_type: uint32 instructions: [
value: 0x52A7E008 [mov, w8, 0x3f000000]
]
# Block cutscenes from having speed fixed to 30 FPS # Block cutscenes from having speed fixed to 30 FPS
- -
type: bytes type: asm_a64
main_offset: 0x91DC10 main_offset: 0x91DC10
value_type: uint32 instructions: [
value: [nop]
- 0xD503201F ]
ALL_FPS: ALL_FPS:
- -
type: evaluate_write type: evaluate_write
address: [MAIN, 0xCCB7AF0, 0x420] address: [MAIN, 0xCCB7AF0, 0x420]
value_type: uint32 value_type: uint32
value: "VSYNC_TARGET - 1" value: "VSYNC_TARGET - 1"

View File

@ -7,42 +7,42 @@ MASTER_WRITE:
# Redirect all hardcoded doubles in DynamicResolutionHandler::Update to MAIN+0x909EF00 # Redirect all hardcoded doubles in DynamicResolutionHandler::Update to MAIN+0x909EF00
## REF: c8 aa 8a f2 28 07 e8 f2 ## REF: c8 aa 8a f2 28 07 e8 f2
- -
type: bytes type: asm_a64
main_offset: 0x21FE1E4 main_offset: 0x21FE1E4
value_type: uint32 instructions: [
value: [adrp, x8, 0x909e000],
- 0x90037508 # adrp x8, #0x909E000 [ldr, d0, [x8, 0xf00]]
- 0xFD478100 # ldr d0, [x8, #0xf00] ]
- -
type: bytes type: asm_a64
main_offset: 0x21FE3E0 main_offset: 0x21FE3E0
value_type: uint32 instructions: [
value: [adrp, x8, 0x909e000],
- 0x90037508 # adrp x8, #0x909E000 [ldr, d1, [x8, 0xf00]]
- 0xFD478101 # ldr d1, [x8, #0xf00] ]
- -
type: bytes type: asm_a64
main_offset: 0x21FE43C main_offset: 0x21FE43C
value_type: uint32 instructions: [
value: [adrp, x8, 0x909e000],
- 0x90037508 # adrp x8, #0x909E000 [ldr, d1, [x8, 0xf00]]
- 0xFD478101 # ldr d1, [x8, #0xf00] ]
- -
type: bytes type: asm_a64
main_offset: 0x21FE7D4 main_offset: 0x21FE7D4
value_type: uint32 instructions: [
value: [adrp, x8, 0x909e000],
- 0x90037508 # adrp x8, #0x909E000 [ldr, d0, [x8, 0xf00]]
- 0xFD478100 # ldr d0, [x8, #0xf00] ]
## REF: c8 aa 8a f2 28 07 f8 f2 ## REF: c8 aa 8a f2 28 07 f8 f2
- -
type: bytes type: asm_a64
main_offset: 0x21fE550 main_offset: 0x21fE550
value_type: uint32 instructions: [
value: [adrp, x8, 0x909e000],
- 0x90037508 # adrp x8, #0x909E000 [ldr, d0, [x8, 0xf00]],
- 0xFD478100 # ldr d0, [x8, #0xf00] [fneg, d0, d0]
- 0x1E614000 # fneg d0, d0 ]
# default value # default value
- -
type: bytes type: bytes
@ -54,4 +54,4 @@ ALL_FPS:
type: evaluate_write type: evaluate_write
address: [MAIN, 0x909EF00] address: [MAIN, 0x909EF00]
value_type: double value_type: double
value: "FRAMETIME_TARGET * 0.76" value: "FRAMETIME_TARGET * 0.76"

View File

@ -6,12 +6,12 @@ unsafeCheck: false
MASTER_WRITE: MASTER_WRITE:
# Redirect DR frametime target reading to .bss code cave [MAIN, 0x236AB00] # Redirect DR frametime target reading to .bss code cave [MAIN, 0x236AB00]
- -
type: bytes type: asm_a64
main_offset: 0x124F518 main_offset: 0x124F518
value_type: uint32 instructions: [
value: [adrp, x8, 0x236a000],
- 0xF00088C8 [ldr, s0, [x8, 0xb00]]
- 0xBD4B0100 ]
# Original DR frametime target # Original DR frametime target
- -
type: bytes type: bytes
@ -21,21 +21,22 @@ MASTER_WRITE:
- 0.0166666666 - 0.0166666666
# Fix crash when gathering big amount of ether for > 30 FPS # Fix crash when gathering big amount of ether for > 30 FPS
- # Code cave at 0x1295DA0 - # Code cave at 0x1295DA0
type: bytes type: asm_a64
main_offset: 0x67360 main_offset: 0x67360
value_type: uint32 instructions: [
value: 0x9448BA90 [bl, 0x1295da0]
]
- # Push fixed 1/30 float to game speed pointer late enough to not affect it - # Push fixed 1/30 float to game speed pointer late enough to not affect it
type: bytes type: asm_a64
main_offset: 0x1295DA0 main_offset: 0x1295DA0
value_type: uint32 instructions: [
value: [ldr, x21, [x0]],
- 0xF9400015 [fmov, s1, 1.0],
- 0x1E2E1001 [fmov, s2, 30.0],
- 0x1E27D002 [fdiv, s1, s1, s2],
- 0x1E221821 [str, s1, [x21, 0x214]],
- 0xBD0216A1 [ret]
- 0xD65F03C0 ]
ALL_FPS: ALL_FPS:
# vsync # vsync
- -
@ -91,3 +92,4 @@ ALL_FPS:
address: [MAIN] address: [MAIN]
value_type: refresh_rate value_type: refresh_rate
value: 30 value: 30

View File

@ -7,92 +7,98 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Remove double buffer # Remove double buffer
- -
type: bytes type: asm_a64
main_offset: 0x6DBE0 main_offset: 0x6DBE0
value_type: uint32 instructions: [
value: 0x52800068 [mov, w8, 3]
]
# Fix helper functions to not corrupt stack # Fix helper functions to not corrupt stack
- -
type: bytes type: asm_a64
main_offset: 0x6DC88 main_offset: 0x6DC88
value_type: uint32 instructions: [
value: 0x52800062 [mov, w2, 3]
]
- -
type: bytes type: asm_a64
main_offset: 0x6D85C main_offset: 0x6D85C
value_type: uint32 instructions: [
value: [sub, sp, sp, 0x40],
- 0xD10103FF [stp, x20, x19, [sp, 0x20]],
- 0xA9024FF4 [stp, x29, x30, [sp, 0x30]],
- 0xA9037BFD [add, x29, sp, 0x30]
- 0x9100C3FD ]
- -
type: bytes type: asm_a64
main_offset: 0x6D880 main_offset: 0x6D880
value_type: uint32 instructions: [
value: 0x52800062 [mov, w2, 3]
]
- -
type: bytes type: asm_a64
main_offset: 0x6D894 main_offset: 0x6D894
value_type: uint32 instructions: [
value: [ldp, x29, x30, [sp, 0x30]],
- 0xA9437BFD [ldp, x20, x19, [sp, 0x20]],
- 0xA9424FF4 [add, sp, sp, 0x40]
- 0x910103FF ]
- -
type: bytes type: asm_a64
main_offset: 0x6D8A4 main_offset: 0x6D8A4
value_type: uint32 instructions: [
value: [sub, sp, sp, 0x50],
- 0xD10143FF [stp, x22, x21, [sp, 0x20]],
- 0xA90257F6 [stp, x20, x19, [sp, 0x30]],
- 0xA9034FF4 [stp, x29, x30, [sp, 0x40]],
- 0xA9047BFD [add, x29, sp, 0x40]
- 0x910103FD ]
- -
type: bytes type: asm_a64
main_offset: 0x6D8DC main_offset: 0x6D8DC
value_type: uint32 instructions: [
value: 0x52800062 [mov, w2, 3]
]
- -
type: bytes type: asm_a64
main_offset: 0x6D904 main_offset: 0x6D904
value_type: uint32 instructions: [
value: [ldp, x29, x30, [sp, 0x40]],
- 0xA9447BFD [ldp, x20, x19, [sp, 0x30]],
- 0xA9434FF4 [ldp, x22, x21, [sp, 0x20]],
- 0xA94257F6 [add, sp, sp, 0x50]
- 0x910143FF ]
- -
type: bytes type: asm_a64
main_offset: 0x6D918 main_offset: 0x6D918
value_type: uint32 instructions: [
value: [sub, sp, sp, 0x50],
- 0xD10143FF [stp, xzr, x21, [sp, 0x18]],
- 0xA901D7FF [stp, x20, x19, [sp, 0x30]],
- 0xA9034FF4 [stp, x29, x30, [sp, 0x40]],
- 0xA9047BFD [add, x29, sp, 0x40]
- 0x910103FD ]
- -
type: bytes type: asm_a64
main_offset: 0x6D940 main_offset: 0x6D940
value_type: uint32 instructions: [
value: 0x52800062 [mov, w2, 3]
]
- -
type: bytes type: asm_a64
main_offset: 0x6D984 main_offset: 0x6D984
value_type: uint32 instructions: [
value: [ldp, x29, x30, [sp, 0x40]],
- 0xA9447BFD [ldr, x21, [sp, 0x20]],
- 0xF94013F5 [ldp, x20, x19, [sp, 0x30]],
- 0xA9434FF4 [add, sp, sp, 0x50]
- 0x910143FF ]
# Block updating interval # Block updating interval
- -
type: bytes type: asm_a64
main_offset: 0x5A4C main_offset: 0x5A4C
value_type: uint32 instructions: [
value: 0xD503201F [nop]
]
ALL_FPS: ALL_FPS:
# Interval # Interval
- -
@ -100,3 +106,4 @@ ALL_FPS:
address: [MAIN, 0x54C5B0, 0] address: [MAIN, 0x54C5B0, 0]
value_type: int32 value_type: int32
value: "VSYNC_TARGET - 1" value: "VSYNC_TARGET - 1"

View File

@ -7,100 +7,107 @@ MASTER_WRITE:
# Remove double buffer # Remove double buffer
## REF: 61 F6 42 39 ## REF: 61 F6 42 39
- -
type: bytes type: asm_a64
main_offset: 0xD80748 main_offset: 0xD80748
value_type: uint32 instructions: [
value: 0x52800021 [mov, w1, 1]
]
# Change pointer of time factor for DR calculations to MAIN + 0x1D36FF4 # Change pointer of time factor for DR calculations to MAIN + 0x1D36FF4
## REF: 01 01 27 1E 08 59 A8 52 03 08 21 1E, replace hardcoded 100.0 float ## REF: 01 01 27 1E 08 59 A8 52 03 08 21 1E, replace hardcoded 100.0 float
- -
type: bytes type: asm_a64
main_offset: 0x1153314 main_offset: 0x1153314
value_type: uint32 instructions: [
value: [adrp, x8, 0x1d36000],
- 0xF0005F08 [fmul, s3, s0, s1],
- 0x1E210803 [ldr, s1, [x8, 0xff4]]
- 0xBD4FF501 ]
# Dynamic speed # Dynamic speed
## Replace nvnQueuePresentTexture call to code cave at MAIN+0x148D964 ## Replace nvnQueuePresentTexture call to code cave at MAIN+0x148D964
- -
type: bytes type: asm_a64
main_offset: 0xD874FC main_offset: 0xD874FC
value_type: uint32 instructions: [
value: 0x141C191A [b, 0x148d964]
]
## Patch game speed function to use speed from MAIN+0x1D36FF0 ## Patch game speed function to use speed from MAIN+0x1D36FF0
- -
type: bytes type: asm_a64
main_offset: 0x14092A8 main_offset: 0x14092A8
value_type: uint32 instructions: [
value: 0x14000003 [b, 0x14092b4]
]
- -
type: bytes type: asm_a64
main_offset: 0x14092CC main_offset: 0x14092CC
value_type: uint32 instructions: [
value: [adrp, x9, 0x1d36000],
- 0xB0004969 [ldr, s1, [x9, 0xff0]]
- 0xBD4FF121 ]
## Patch UI speed function to use speeed from MAIN+0x1D36FF0 ## Patch UI speed function to use speeed from MAIN+0x1D36FF0
- -
type: bytes type: asm_a64
main_offset: 0x116D0D8 main_offset: 0x116D0D8
value_type: uint32 instructions: [
value: 0xB0005E47 [adrp, x7, 0x1d36000]
]
- -
type: bytes type: asm_a64
main_offset: 0x116D0E4 main_offset: 0x116D0E4
value_type: uint32 instructions: [
value: 0xBD4FF0E0 [ldr, s0, [x7, 0xff0]]
]
## CODE CAVE ## CODE CAVE
- -
type: bytes type: asm_a64
main_offset: 0x148D964 main_offset: 0x148D964
value_type: uint32 instructions: [
value: [blr, x8],
- 0xD63F0100 [mrs, x2, cntpct_el0],
- 0xD53BE022 [adrp, x8, 0x1d36000],
- 0xB0004548 [ldr, x1, [x8, 0xff8]],
- 0xF947FD01 [cmp, x1, xzr],
- 0xEB1F003F [b.ne, 0x148d984],
- 0x54000061 [str, x2, [x8, 0xff8]],
- 0xF907FD02 [b, 0xd87500],
- 0x17E3E6E0 [sub, x0, x2, x1],
- 0xCB010040 [bl, 0x148c860], # BL nn::os::ConvertToTimeSpan(nn::os::Tick)
- 0x97FFFBB6 # BL nn::os::ConvertToTimeSpan(nn::os::Tick) [ucvtf, s0, x0],
- 0x9E230000 [mov, w0, 0xa055],
- 0x52940AA0 [movk, w0, 0x1fc, 16],
- 0x72A03F80 [ucvtf, s1, w0],
- 0x1E230001 [fdiv, s0, s0, s1],
- 0x1E211800 [fmov, s1, 2.0],
- 0x1E201001 [fcmp, s0, s1],
- 0x1E212000 [b.lt, 0x148d9b0],
- 0x5400004B [fmov, s0, s1],
- 0x1E204020 [adrp, x8, 0x1d36000],
- 0xB0004548 [ldr, s1, [x8, 0xfec]],
- 0xBD4FED01 [fcmp, s0, s1],
- 0x1E212000 [b.gt, 0x148d9c4],
- 0x5400004C [fmov, s0, s1],
- 0x1E204020 [str, s0, [x8, 0xff0]],
- 0xBD0FF100 [b, 0x148d97c],
- 0x17FFFFED [adrp, x0, 0x1d36000],
- 0xB0004540 [ldr, w0, [x0, 0xff0]],
- 0xB94FF000 [ret],
- 0xD65F03C0 [adrp, x7, 0x1d36000],
- 0xB0004547 [str, w1, [x7, 0xfe8]],
- 0xB90FE8E1 [b, 0xbf7f78]
- 0x17DDA966 ]
# Signal Cutscenes playing # Signal Cutscenes playing
- -
type: bytes type: asm_a64
main_offset: 0xC00680 main_offset: 0xC00680
value_type: uint32 instructions: [
value: 0x942234D6 [bl, 0x148d9d8]
]
- -
type: bytes type: asm_a64
main_offset: 0xC00E40 main_offset: 0xC00E40
value_type: uint32 instructions: [
value: 0x942232E6 [bl, 0x148d9d8]
]
# Default speed # Default speed
- -
type: bytes type: bytes
@ -154,4 +161,4 @@ ALL_FPS:
compare_value: 0 compare_value: 0
address: [MAIN] address: [MAIN]
value_type: refresh_rate value_type: refresh_rate
value: 30 value: 30

View File

@ -6,45 +6,53 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Block updating values # Block updating values
- -
type: bytes type: asm_a64
main_offset: 0x4F3D68 main_offset: 0x4F3D68
value_type: uint32 instructions: [
value: 0xD503201F [nop]
]
- -
type: bytes type: asm_a64
main_offset: 0x4F3D7C main_offset: 0x4F3D7C
value_type: uint32 instructions: [
value: 0xD503201F [nop]
]
- -
type: bytes type: asm_a64
main_offset: 0x4F3D8C main_offset: 0x4F3D8C
value_type: uint32 instructions: [
value: 0xD503201F [nop]
]
- -
type: bytes type: asm_a64
main_offset: 0x4F3D94 main_offset: 0x4F3D94
value_type: uint32 instructions: [
value: 0xD503201F [nop]
]
- -
type: bytes type: asm_a64
main_offset: 0x4D8748 main_offset: 0x4D8748
value_type: uint32 instructions: [
value: 0xD503201F [nop]
]
- -
type: bytes type: asm_a64
main_offset: 0x4D8754 main_offset: 0x4D8754
value_type: uint32 instructions: [
value: 0xD503201F [nop]
]
- -
type: bytes type: asm_a64
main_offset: 0x4D8760 main_offset: 0x4D8760
value_type: uint32 instructions: [
value: 0xD503201F [nop]
]
- -
type: bytes type: asm_a64
main_offset: 0x4D876C main_offset: 0x4D876C
value_type: uint32 instructions: [
value: 0xD503201F [nop]
]
# Default 30 FPS values # Default 30 FPS values
- -
type: bytes type: bytes
@ -80,3 +88,4 @@ ALL_FPS:
- -
type: block type: block
what: timing what: timing

View File

@ -6,19 +6,19 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Redirect DR timing range to MAIN + 0x878B800 # Redirect DR timing range to MAIN + 0x878B800
- -
type: bytes type: asm_a64
main_offset: 0x4451E88 main_offset: 0x4451E88
value_type: uint32 instructions: [
value: [adrp, x8, 0x878b000],
- 0xD00219C8 [ldr, w8, [x8, 0x800]]
- 0xB9480108 ]
- -
type: bytes type: asm_a64
main_offset: 0x4451ED4 main_offset: 0x4451ED4
value_type: uint32 instructions: [
value: [adrp, x8, 0x878b000],
- 0xD00219C8 [ldr, w8, [x8, 0x804]]
- 0xB9480508 ]
# Default values # Default values
- -
type: bytes type: bytes
@ -32,3 +32,4 @@ ALL_FPS:
address: [MAIN, 0x878B800] address: [MAIN, 0x878B800]
value_type: float value_type: float
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(1000 / (FPS_TARGET + 5), 2)"] value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(1000 / (FPS_TARGET + 5), 2)"]

View File

@ -7,23 +7,23 @@ MASTER_WRITE:
# Redirect min delta to MAIN + 0x1BC4FF0 # Redirect min delta to MAIN + 0x1BC4FF0
# REF: 00 D9 21 7E 28 19 20 1E # REF: 00 D9 21 7E 28 19 20 1E
- -
type: bytes type: asm_a64
main_offset: 0x39ABF8 main_offset: 0x39ABF8
value_type: uint32 instructions: [
value: [adrp, x27, 0x1bc4000],
- 0xD000C15B # ADRP X27, 0x1BC4000 [ldr, s8, [x27, 0xff0]]
- 0xBD4FF368 # LDR S8, [X27, 0xFF0] ]
# Redirect FPS Lock to MAIN + 0x1BC4FF4 # Redirect FPS Lock to MAIN + 0x1BC4FF4
# REF: 69 AA 40 B9 0A 40 99 52 # REF: 69 AA 40 B9 0A 40 99 52
- -
type: bytes type: asm_a64
main_offset: 0x39B2D8 main_offset: 0x39B2D8
value_type: uint32 instructions: [
value: [adrp, x9, 0x1BC4000],
- 0xB000C149 # ADRP X9, 0x7101BC4000 [ldr, w9, [x9, 0xff4]],
- 0xB94FF529 # LDR W9, [X9, 0xFF4] [nop],
- 0xD503201F # NOP [nop]
- 0xD503201F # NOP ]
# Default values # Default values
- -
type: bytes type: bytes
@ -51,3 +51,4 @@ ALL_FPS:
- -
type: block type: block
what: timing what: timing

View File

@ -8,10 +8,11 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Block FPS lock being constantly updated # Block FPS lock being constantly updated
- -
type: bytes type: asm_a64
main_offset: 0x27CE38 main_offset: 0x27CE38
value_type: uint32 instructions: [
value: 0xD503201F [nop]
]
ALL_FPS: ALL_FPS:
# Internal FPS Lock # Internal FPS Lock
- -
@ -32,3 +33,4 @@ ALL_FPS:
- -
type: block type: block
what: timing what: timing

View File

@ -7,13 +7,13 @@ MASTER_WRITE:
# Redirect DR frametime target to MAIN+0x47E0FF0 # Redirect DR frametime target to MAIN+0x47E0FF0
# REF: 08 4E A8 52 00 01 27 1E 48 8F A8 52, ADRP + ADD + LDR above that # REF: 08 4E A8 52 00 01 27 1E 48 8F A8 52, ADRP + ADD + LDR above that
- -
type: bytes type: asm_a64
main_offset: 0x1F9BC40 main_offset: 0x1F9BC40
value_type: uint32 instructions: [
value: [adrp, x9, 0x47e0000],
- 0xB0014229 # adrp x9, #0x47E0000 [ldr, s0, [x9, 0xff0]],
- 0xBD4FF120 # ldr s0, [x9, #0xff0] [nop]
- 0xD503201F # NOP ]
# default value # default value
- -
type: bytes type: bytes
@ -25,4 +25,4 @@ ALL_FPS:
type: evaluate_write type: evaluate_write
address: [MAIN, 0x47E0FF0] address: [MAIN, 0x47E0FF0]
value_type: float value_type: float
value: FPS_TARGET value: FPS_TARGET

View File

@ -1,29 +1,31 @@
# 妖怪ウォッチ4 ぼくらは同じ空を見上げている 2.2.0 # 妖怪ウォッチ4 ぼくらは同じ空を見上げている 2.2.0
# BID: C7DAB27F22ACD2ED # BID: C7DAB27F22ACD2ED
# Game is using double buffer, nvnWindowBuilderSetTextures has hardcoded values. # Game is using double buffer, nvnWindowBuilderSetTextures has hardcoded values.
# So it's not possible to get stable FPS lock between 30 and 60. # So it's not possible to get stable FPS lock between 30 and 60 without changing refresh rate.
unsafeCheck: true unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Change main loop delay from 31.6 ms to 4.2 ms # Change main loop delay from 31.6 ms to 4.2 ms
- -
type: bytes type: asm_a64
main_offset: 0x950C6C main_offset: 0x950C6C
value_type: uint32 instructions: [
value: 0xD2A00800 [mov, x0, 0x400000]
]
- -
type: bytes type: asm_a64
main_offset: 0x950C74 main_offset: 0x950C74
value_type: uint32 instructions: [
value: 0xD2A00800 [mov, x0, 0x400000]
]
- -
type: bytes type: asm_a64
main_offset: 0x950C94 main_offset: 0x950C94
value_type: uint32 instructions: [
value: [nop],
- 0xD503201F [nop]
- 0xD503201F ]
ALL_FPS: ALL_FPS:
# DUMMY # DUMMY
- -

View File

@ -6,30 +6,35 @@ unsafeCheck: true
# Block updating FPS Lock # Block updating FPS Lock
MASTER_WRITE: MASTER_WRITE:
- -
type: bytes type: asm_a64
main_offset: 0x1240DFC main_offset: 0x1240DFC
value_type: uint32 instructions: [
value: 0xD503201F [nop]
]
- -
type: bytes type: asm_a64
main_offset: 0x1240E10 main_offset: 0x1240E10
value_type: uint32 instructions: [
value: 0xD503201F [nop]
]
- -
type: bytes type: asm_a64
main_offset: 0x1240E1C main_offset: 0x1240E1C
value_type: uint32 instructions: [
value: 0xD503201F [nop]
]
- -
type: bytes type: asm_a64
main_offset: 0x1240E24 main_offset: 0x1240E24
value_type: uint32 instructions: [
value: 0xD503201F [nop]
]
- -
type: bytes type: asm_a64
main_offset: 0x1240E2C main_offset: 0x1240E2C
value_type: uint32 instructions: [
value: 0xBD41F100 [ldr, s0, [x8, 0x1f0]]
]
ALL_FPS: ALL_FPS:
- -
type: evaluate_write type: evaluate_write
@ -54,3 +59,4 @@ ALL_FPS:
- -
type: block type: block
what: timing what: timing

View File

@ -6,42 +6,42 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Disable Dynamic GPU Clocks # Disable Dynamic GPU Clocks
- -
type: bytes type: asm_a64
main_offset: 0x1DE89CC main_offset: 0x1DE89CC
value_type: uint32 instructions: [
value: [nop]
- 0xD503201F ]
# Redirect Dynamic Resolution Timings to MAIN+0x4113D00 # Redirect Dynamic Resolution Timings to MAIN+0x4113D00
- -
type: bytes type: asm_a64
main_offset: 0x1DE89A8 main_offset: 0x1DE89A8
value_type: uint32 instructions: [
value: [adrp, x10, 0x4113000],
- 0xF001194A [ldr, w10, [x10, 0xd00]]
- 0xB94D014A ]
- -
type: bytes type: asm_a64
main_offset: 0x1DE8A08 main_offset: 0x1DE8A08
value_type: uint32 instructions: [
value: [adrp, x10, 0x4113000],
- 0xF001194A [ldr, w10, [x10, 0xd04]]
- 0xB94D054A ]
- -
type: bytes type: asm_a64
main_offset: 0x1DE80C8 main_offset: 0x1DE80C8
value_type: uint32 instructions: [
value: [adrp, x11, 0x4113000],
- 0xF001194B [ldr, w12, [x11, 0xd08]],
- 0xB94D096C [ldr, w11, [x11, 0xd0c]],
- 0xB94D0D6B [nop]
- 0xD503201F ]
- -
type: bytes type: asm_a64
main_offset: 0x1DE80F8 main_offset: 0x1DE80F8
value_type: uint32 instructions: [
value: [adrp, x11, 0x4113000],
- 0xF001194B [ldr, w11, [x11, 0xd10]]
- 0xB94D116B ]
# Write default values # Write default values
# MAIN + 0x1DE89AC # MAIN + 0x1DE89AC
- -

View File

@ -7,70 +7,74 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Force FPS lock to 60 # Force FPS lock to 60
- -
type: bytes type: asm_a64
main_offset: 0x81AB0 main_offset: 0x81AB0
value_type: uint32 instructions: [
value: 0x72A79108 [movk, w8, 0x3c88, 16]
]
# Force refreshing camera to 60 Hz # Force refreshing camera to 60 Hz
- -
type: bytes type: asm_a64
main_offset: 0x81AE4 main_offset: 0x81AE4
value_type: uint32 instructions: [
value: 0x72A79109 [movk, w9, 0x3c88, 16]
]
# Properly scale frametime for FPS drops # Properly scale frametime for FPS drops
- -
type: bytes type: asm_a64
main_offset: 0x81AEC main_offset: 0x81AEC
value_type: uint32 instructions: [
value: 0x72B7910A [movk, w10, 0xbc88, 16]
]
# Read actual frametime instead of hardcoded 1/30 # Read actual frametime instead of hardcoded 1/30
# Store actual frametime as float in seconds to MAIN+0x7A52478 # Store actual frametime as float in seconds to MAIN+0x7A52478
# It sets minimum delta to 1/60 and maximum delta to 1/15 # It sets minimum delta to 1/60 and maximum delta to 1/15
- -
type: bytes type: asm_a64
main_offset: 0x8192C main_offset: 0x8192C
value_type: uint32 instructions: [
value: 0x14339A82 [b, 0xd68334]
]
- -
type: bytes type: asm_a64
main_offset: 0xD682D0 main_offset: 0xD682D0
value_type: uint32 instructions: [
value: [adrp, x9, 0xf06000],
- 0xD0000CE9 [ldr, s1, [x9, 0xf00]],
- 0xBD4F0121 [ldr, s2, [x9, 0xe08]],
- 0xBD4E0922 [bl, 0xd667e0],
- 0x97FFF941 [adrp, x9, 0x7a52000],
- 0xD0036749 [ldr, x10, [x9, 0x470]],
- 0xF942392A [str, x0, [x9, 0x470]],
- 0xF9023920 [sub, x10, x0, x10],
- 0xCB0A000A [ucvtf, s3, x10],
- 0x9E230143 [mov, w9, 0x7c00],
- 0x528F8009 [movk, w9, 0x4b92, 16],
- 0x72A97249 [fmov, s4, w9],
- 0x1E270124 [fdiv, s4, s3, s4],
- 0x1E241864 [adrp, x9, 0x7a52000],
- 0xD0036749 [fcmp, s4, s1],
- 0x1E212080 [b.hi, +12],
- 0x54000068 [fmov, s4, s1],
- 0x1E204024 [b, +16],
- 0x14000004 [fcmp, s4, s2],
- 0x1E222080 [b.lt, +8],
- 0x5400004B [fmov, s4, s2],
- 0x1E204044 [str, s4, [x9, 0x478]],
- 0xBD047924 [mov, w8, 0x1af0],
- 0x52835E08 [mov, x0, x20],
- 0xAA1403E0 [b, 0x81930],
- 0x17CC6580 [mov, x20, x0],
- 0xAA0003F4 [b, -104]
- 0x17FFFFE6 ]
# Read actual frametime as float in seconds from MAIN+0x7A52478 # Read actual frametime as float in seconds from MAIN+0x7A52478
- -
type: bytes type: asm_a64
main_offset: 0x81B50 main_offset: 0x81B50
value_type: uint32 instructions: [
value: [adrp, x11, 0x7a52000],
- 0xB003CE8B [ldr, w11, [x11, 0x478]]
- 0xB944796B ]
# Default value # Default value
- -
type: bytes type: bytes
@ -84,3 +88,4 @@ ALL_FPS:
address: [MAIN, 0x7A52500] address: [MAIN, 0x7A52500]
value_type: uint8 value_type: uint8
value: 0 value: 0

View File

@ -6,25 +6,29 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Remove double buffer # Remove double buffer
- -
type: bytes type: asm_a64
main_offset: 0xB52C64 main_offset: 0xB52C64
value_type: uint32 instructions: [
value: 0xF100639F [cmp, x28, 0x18]
]
- -
type: bytes type: asm_a64
main_offset: 0xB52CD0 main_offset: 0xB52CD0
value_type: uint32 instructions: [
value: 0x52800061 [mov, w1, 3]
]
- -
type: bytes type: asm_a64
main_offset: 0xB529A8 main_offset: 0xB529A8
value_type: uint32 instructions: [
value: 0xF100639F [cmp, x28, 0x18]
]
- -
type: bytes type: asm_a64
main_offset: 0xB52A14 main_offset: 0xB52A14
value_type: uint32 instructions: [
value: 0x52800061 [mov, w1, 3]
]
ALL_FPS: ALL_FPS:
# DUMMY # DUMMY
- -

View File

@ -7,23 +7,23 @@ MASTER_WRITE:
# Redirect min delta to MAIN + 0x1FE0FF0 # Redirect min delta to MAIN + 0x1FE0FF0
# REF: 00 D9 21 7E 28 19 20 1E # REF: 00 D9 21 7E 28 19 20 1E
- -
type: bytes type: asm_a64
main_offset: 0x16D9B4 main_offset: 0x16D9B4
value_type: uint32 instructions: [
value: [adrp, x27, 0x1fe0000],
- 0xF000F39B # ADRP X27, 0x1FE0000 [ldr, s8, [x27, 0xff0]]
- 0xBD4FF368 # LDR S8, [X27, 0xFF0] ]
# Redirect FPS Lock to MAIN + 0x1FE0FF4 # Redirect FPS Lock to MAIN + 0x1FE0FF4
# REF: 69 B2 40 B9 0A 40 99 52 # REF: 69 B2 40 B9 0A 40 99 52
- -
type: bytes type: asm_a64
main_offset: 0x16DDD0 main_offset: 0x16DDD0
value_type: uint32 instructions: [
value: [adrp, x9, 0x1fe0000],
- 0xF000F389 # ADRP X9, 0x1FE0000 [ldr, w9, [x9, 0xff4]],
- 0xB94FF529 # LDR W9, [X9, 0xFF4] [nop],
- 0xD503201F # NOP [nop]
- 0xD503201F # NOP ]
# Default values # Default values
- -
type: bytes type: bytes

View File

@ -0,0 +1,21 @@
# The Hundred Line -Last Defense Academy- 1.1.2
# BID: D1D3FFB94AB458B4
# Last found function with REF: FD 7B BE A9 F3 0B 00 F9 FD 03 00 91 E0 03 01 2A stores some code related to playing above 60 FPS. Look at it if someone will have an issue playing above 60 FPS.
unsafeCheck: true
ALL_FPS:
# FPS Lock
# REF: 1B 41 00 00
-
type: evaluate_write
address: [MAIN, 0xC95D10]
value_type: uint32
value: FRAMETIME_TARGET * 1000
# Unknown value, but set in the same function as FPS lock, so it may be important
# REF: 3C 00 00 00 01 00 00 00 00 00 00 00
-
type: evaluate_write
address: [MAIN, 0xC95CDC]
value_type: uint32
value: FPS_TARGET

View File

@ -6,39 +6,41 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Detect prerendered cutscenes # Detect prerendered cutscenes
- -
type: bytes type: asm_a64
main_offset: 0x9F2540 main_offset: 0x9F2540
value_type: uint32 instructions: [
value: 0x14004E9A [b, 0xa05fa8]
]
- -
type: bytes type: asm_a64
main_offset: 0xA05FA8 main_offset: 0xA05FA8
value_type: uint32 instructions: [
value: [adrp, x8, 0x1bc2000],
- 0xB0008DE8 [mov, w1, 1],
- 0x52800021 [str, w1, [x8, 0xff0]],
- 0xB90FF101 [str, x19, [sp, -0x20], "!"],
- 0xF81E0FF3 [mov, x19, x0],
- 0xAA0003F3 [mov, w0, 0xca00],
- 0x52994000 [movk, w0, 0x3b9a, 16],
- 0x72A77340 [svc, 0xb],
- 0xD4000161 [mov, x0, x19],
- 0xAA1303E0 [b, 0x9f2544]
- 0x17FFB15E ]
- -
type: bytes type: asm_a64
main_offset: 0x9F26EC main_offset: 0x9F26EC
value_type: uint32 instructions: [
value: 0x14004E39 [b, 0xa05fd0]
]
- -
type: bytes type: asm_a64
main_offset: 0xA05FD0 main_offset: 0xA05FD0
value_type: uint32 instructions: [
value: [mov, w3, wzr],
- 0x2A1F03E3 [adrp, x4, 0x1bc2000],
- 0xB0008DE4 [str, w3, [x4, 0xff0]],
- 0xB90FF083 [b, 0x9fcc10]
- 0x17FFDB0D ]
ALL_FPS: ALL_FPS:
# Internal FPS Lock # Internal FPS Lock
- -
@ -54,4 +56,5 @@ ALL_FPS:
compare_address: [MAIN, 0x1BC2FF0] compare_address: [MAIN, 0x1BC2FF0]
address: [MAIN] address: [MAIN]
value_type: refresh_rate value_type: refresh_rate
value: 30
value: 30

View File

@ -8,10 +8,11 @@ MASTER_WRITE:
# Triple buffer # Triple buffer
# REF: 28 60 81 52 E8 37 00 B9 E8 03 1F 32 # REF: 28 60 81 52 E8 37 00 B9 E8 03 1F 32
- -
type: bytes type: asm_a64
main_offset: 0x3AE35C main_offset: 0x3AE35C
value_type: uint32 instructions: [
value: 0x52800068 [mov, w8, 3]
]
ALL_FPS: ALL_FPS:
# Disable FPS Lock # Disable FPS Lock
# REF: C8 46 90 52 first ADRP + LDR + LDR above it # REF: C8 46 90 52 first ADRP + LDR + LDR above it
@ -25,4 +26,4 @@ ALL_FPS:
type: evaluate_write type: evaluate_write
address: [MAIN, 0xFC0DDC] address: [MAIN, 0xFC0DDC]
value_type: float value_type: float
value: "30.0 / FPS_TARGET" value: "30.0 / FPS_TARGET"

View File

@ -6,54 +6,54 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Redirect updating various deltas to read frametime target from UnityEngine.Application::targetFrameRate, REF: 08 10 91 52 08 A1 A7 72 # Redirect updating various deltas to read frametime target from UnityEngine.Application::targetFrameRate, REF: 08 10 91 52 08 A1 A7 72
- -
type: bytes type: asm_a64
main_offset: 0x18AE7B8 main_offset: 0x18AE7B8
value_type: uint32 instructions: [
value: [adrp, x8, 0x5659000],
- 0xF001ED48 # adrp x8, 0x5659000 [ldr, w8, [x8, 0x68]],
- 0xB9406908 # ldr w8, [x8, #0x68] [ucvtf, s1, w8],
- 0x1E230101 # ucvtf s1, w8 [fmov, s0, 1.0],
- 0x1E2E1000 # fmov s0, #1.00000000 [fdiv, s0, s0, s1]
- 0x1E211800 # fdiv s0, s0, s1 ]
- -
type: bytes type: asm_a64
main_offset: 0x18B2570 main_offset: 0x18B2570
value_type: uint32 instructions: [
value: [adrp, x8, 0x5659000],
- 0xF001ED28 # adrp x8, 0x5659000 [ldr, w8, [x8, 0x68]],
- 0xB9406908 # ldr w8, [x8, #0x68] [ucvtf, s1, w8],
- 0x1E230101 # ucvtf s1, w8 [fmov, s0, 1.0],
- 0x1E2E1000 # fmov s0, #1.00000000 [fdiv, s0, s0, s1]
- 0x1E211800 # fdiv s0, s0, s1 ]
# Redirect Dynamic Resolution GPU Timing target in DynamicResolutionScaler::Update to MAIN+0x5ACEF08 # Redirect Dynamic Resolution GPU Timing target in DynamicResolutionScaler::Update to MAIN+0x5ACEF08
- -
type: bytes type: asm_a64
main_offset: 0x389C824 main_offset: 0x389C824
value_type: uint32 instructions: [
value: [adrp, x8, 0x5ace000],
- 0xD0011188 # adrp x8, #0x5ACE000 [ldr, x8, [x8, 0xf08]],
- 0xF9478508 # ldr x8, [x8, #0xf08] [nop],
- 0xD503201F # nop [nop]
- 0xD503201F # nop ]
- -
type: bytes type: asm_a64
main_offset: 0x389C8A4 main_offset: 0x389C8A4
value_type: uint32 instructions: [
value: [adrp, x8, 0x5ace000],
- 0xD0011188 # adrp x8, #0x5ACE000 [ldr, x8, [x8, 0xf08]],
- 0xF9478508 # ldr x8, [x8, #0xf08] [ldr, s0, [x19, 0x28]],
- 0xBD402A60 # ldr s0, [x19, #0x28] [nop],
- 0xD503201F # nop [nop]
- 0xD503201F # nop ]
- -
type: bytes type: asm_a64
main_offset: 0x389C918 main_offset: 0x389C918
value_type: uint32 instructions: [
value: [adrp, x8, 0x5ace000],
- 0xD0011188 # adrp x8, #0x5ACE000 [ldr, x8, [x8, 0xf08]],
- 0xF9478508 # ldr x8, [x8, #0xf08] [nop],
- 0xD503201F # nop [nop]
- 0xD503201F # nop ]
# Default values # Default values
- -
type: bytes type: bytes
@ -77,4 +77,5 @@ ALL_FPS:
type: evaluate_write type: evaluate_write
address: [MAIN, 0x5ACEF08] address: [MAIN, 0x5ACEF08]
value_type: double value_type: double
value: "1000 / (FPS_TARGET + 5)"
value: "1000 / (FPS_TARGET + 5)"

View File

@ -0,0 +1,27 @@
# Poppy Playtime: Chapter 4 1.1
# BID: 05ADD0D5FD677639
unsafeCheck: true
ALL_FPS:
# r.VSync
-
type: write
address: [MAIN, 0x7F05990, 0]
value_type: int32
value: [0, 0]
# r.DynamicRes.FrameTimeBudget
-
type: evaluate_write
address: [MAIN, 0x8EC1E30, 0]
value_type: float
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(FRAMETIME_TARGET, 2)"]
# t.MaxFPS
-
type: evaluate_write
address: [MAIN, 0x8EFD150, 0]
value_type: float
value: [FPS_LOCK_TARGET, FPS_LOCK_TARGET]
-
type: block
what: timing

View File

@ -9,126 +9,135 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Remove double buffer # Remove double buffer
- -
type: bytes type: asm_a64
main_offset: 0x861208 main_offset: 0x861208
value_type: uint32 instructions: [
value: 0x52800069 [mov, w9, 3]
]
# Fix helper functions to properly copy third buffer address to stack # Fix helper functions to properly copy third buffer address to stack
- -
type: bytes type: asm_a64
main_offset: 0x8612DC main_offset: 0x8612DC
value_type: uint32 instructions: [
value: 0x52800062 [mov, w2, 3]
]
- -
type: bytes type: asm_a64
main_offset: 0x8654D8 main_offset: 0x8654D8
value_type: uint32 instructions: [
value: [sub, sp, sp, 0x60],
- 0xD10183FF [stp, x29, x30, [sp, 0x20]],
- 0xA9027BFD [add, x29, sp, 0x20],
- 0x910083FD [str, x23, [sp, 0x30]],
- 0xF9001BF7 [stp, x22, x21, [sp, 0x40]],
- 0xA90457F6 [stp, x20, x19, [sp, 0x50]],
- 0xA9054FF4 [stp, xzr, xzr, [sp, 0x10]]
- 0xA9017FFF ]
- -
type: bytes type: asm_a64
main_offset: 0x86550C main_offset: 0x86550C
value_type: uint32 instructions: [
value: 0x52800062 [mov, w2, 3]
]
- -
type: bytes type: asm_a64
main_offset: 0x8655B8 main_offset: 0x8655B8
value_type: uint32 instructions: [
value: [stp, x8, x10, [sp]],
- 0xA9002BE8 [bl, 0x85f028],
- 0x97FFE69B [ldp, x20, x19, [sp, 0x50]],
- 0xA9454FF4 [ldr, x23, [sp, 0x30]],
- 0xF9401BF7 [ldp, x22, x21, [sp, 0x40]],
- 0xA94457F6 [ldp, x29, x30, [sp, 0x20]],
- 0xA9427BFD [add, sp, sp, 0x60]
- 0x910183FF ]
- -
type: bytes type: asm_a64
main_offset: 0x793298 main_offset: 0x793298
value_type: uint32 instructions: [
value: [sub, sp, sp, 0x50],
- 0xD10143FF [stp, x29, x30, [sp, 0x20]],
- 0xA9027BFD [add, x29, sp, 0x20],
- 0x910083FD [stp, x22, x21, [sp, 0x30]],
- 0xA90357F6 [stp, x20, x19, [sp, 0x40]],
- 0xA9044FF4 ]
- -
type: bytes type: asm_a64
main_offset: 0x7932E0 main_offset: 0x7932E0
value_type: uint32 instructions: [
value: 0xA9017FFF [stp, xzr, xzr, [sp, 0x10]]
]
- -
type: bytes type: asm_a64
main_offset: 0x7932EC main_offset: 0x7932EC
value_type: uint32 instructions: [
value: 0x52800062 [mov, w2, 3]
]
- -
type: bytes type: asm_a64
main_offset: 0x793310 main_offset: 0x793310
value_type: uint32 instructions: [
value: [ldp, x20, x19, [sp, 0x40]],
- 0xA9444FF4 [ldp, x22, x21, [sp, 0x30]],
- 0xA94357F6 [ldp, x29, x30, [sp, 0x20]],
- 0xA9427BFD [add, sp, sp, 0x50]
- 0x910143FF ]
- -
type: bytes type: asm_a64
main_offset: 0x876B00 main_offset: 0x876B00
value_type: uint32 instructions: [
value: [add, x1, sp, 0x10],
- 0x910043E1 [add, x23, sp, 0x10]
- 0x910043F7 ]
- -
type: bytes type: asm_a64
main_offset: 0x876B14 main_offset: 0x876B14
value_type: uint32 instructions: [
value: [mov, w2, 3],
- 0x52800062 [stp, xzr, xzr, [sp, 0x10]]
- 0xA9017FFF ]
- -
type: bytes type: asm_a64
main_offset: 0x8CFC44 main_offset: 0x8CFC44
value_type: uint32 instructions: [
value: [mov, x1, sp],
- 0x910003E1 [mov, w2, 3]
- 0x52800062 ]
- -
type: bytes type: asm_a64
main_offset: 0x8CFC5C main_offset: 0x8CFC5C
value_type: uint32 instructions: [
value: 0x910003FA [mov, x26, sp]
]
- -
type: bytes type: asm_a64
main_offset: 0x876B14 main_offset: 0x876B14
value_type: uint32 instructions: [
value: 0x52800062 [mov, w2, 3]
]
- -
type: bytes type: asm_a64
main_offset: 0x8612DC main_offset: 0x8612DC
value_type: uint32 instructions: [
value: 0x52800062 [mov, w2, 3]
]
- -
type: bytes type: asm_a64
main_offset: 0x876A64 main_offset: 0x876A64
value_type: uint32 instructions: [
value: 0x52800062 [mov, w2, 3]
]
# Disable transparency for some 2D elements to avoid issues with flickering at triple buffer # Disable transparency for some 2D elements to avoid issues with flickering at triple buffer
- -
type: bytes type: asm_a64
main_offset: 0x7BFB00 main_offset: 0x7BFB00
value_type: uint32 instructions: [
value: [mov, x9, 0x102],
- 0xD2802049 [ldr, w10, [x10, 0x848]],
- 0xB948494A [lsl, x12, x10, 3],
- 0xD37DF14C [add, x20, x8, 0x828],
- 0x9120A114 [str, x9, [x20]]
- 0xF9000289 ]
ALL_FPS: ALL_FPS:
# Interval # Interval
- -
@ -136,3 +145,4 @@ ALL_FPS:
address: [MAIN, 0xBEBFD8, 0] address: [MAIN, 0xBEBFD8, 0]
value_type: int32 value_type: int32
value: VSYNC_TARGET value: VSYNC_TARGET

View File

@ -6,19 +6,19 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Redirect DR timing range to MAIN + 0x86B9F00 # Redirect DR timing range to MAIN + 0x86B9F00
- -
type: bytes type: asm_a64
main_offset: 0x3DC5E90 main_offset: 0x3DC5E90
value_type: uint32 instructions: [
value: [adrp, x8, 0x86b9000],
- 0x900247A8 [ldr, w8, [x8, 0xf00]]
- 0xB94F0108 ]
- -
type: bytes type: asm_a64
main_offset: 0x3DC5EFC main_offset: 0x3DC5EFC
value_type: uint32 instructions: [
value: [adrp, x8, 0x86b9000],
- 0x900247A8 [ldr, w8, [x8, 0xf04]]
- 0xB94F0508 ]
# Default values # Default values
- -
type: bytes type: bytes
@ -32,3 +32,4 @@ ALL_FPS:
address: [MAIN, 0x86B9F00] address: [MAIN, 0x86B9F00]
value_type: float value_type: float
value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(1000 / (FPS_TARGET + 5), 2)"] value: ["TruncDec(FRAMETIME_TARGET, 2)", "TruncDec(1000 / (FPS_TARGET + 5), 2)"]

View File

@ -6,30 +6,35 @@ unsafeCheck: true
# Block updating FPS Lock # Block updating FPS Lock
MASTER_WRITE: MASTER_WRITE:
- -
type: bytes type: asm_a64
main_offset: 0x1240DFC main_offset: 0x1240DFC
value_type: uint32 instructions: [
value: 0xD503201F [nop]
]
- -
type: bytes type: asm_a64
main_offset: 0x1240E10 main_offset: 0x1240E10
value_type: uint32 instructions: [
value: 0xD503201F [nop]
]
- -
type: bytes type: asm_a64
main_offset: 0x1240E1C main_offset: 0x1240E1C
value_type: uint32 instructions: [
value: 0xD503201F [nop]
]
- -
type: bytes type: asm_a64
main_offset: 0x1240E24 main_offset: 0x1240E24
value_type: uint32 instructions: [
value: 0xD503201F [nop]
]
- -
type: bytes type: asm_a64
main_offset: 0x1240E2C main_offset: 0x1240E2C
value_type: uint32 instructions: [
value: 0xBD41F100 [ldr, s0, [x8, 0x1f0]]
]
ALL_FPS: ALL_FPS:
- -
type: evaluate_write type: evaluate_write
@ -54,3 +59,4 @@ ALL_FPS:
- -
type: block type: block
what: timing what: timing

View File

@ -6,33 +6,34 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Redirect DR timings to MAIN + 0x2BE8F00, [Bad, Optimal, Good] # Redirect DR timings to MAIN + 0x2BE8F00, [Bad, Optimal, Good]
- -
type: bytes type: asm_a64
main_offset: 0x9C07A4 main_offset: 0x9C07A4
value_type: uint32 instructions: [
value: [adrp, x12, 0x2be8000],
- 0x9001114C [ldr, s3, [x12, 0xf00]]
- 0xBD4F0183 ]
- -
type: bytes type: asm_a64
main_offset: 0x9C07F4 main_offset: 0x9C07F4
value_type: uint32 instructions: [
value: [adrp, x12, 0x2be8000],
- 0x9001114C [ldr, w12, [x12, 0xf04]]
- 0xB94F058C ]
- -
type: bytes type: asm_a64
main_offset: 0x9C0844 main_offset: 0x9C0844
value_type: uint32 instructions: [
value: [fcsel, s3, s4, s0, gt],
- 0x1E20CC83 [adrp, x12, 0x2be8000],
- 0x9001114C [ldr, s0, [x12, 0xf04]],
- 0xBD4F0580 [nop]
- 0xD503201F ]
- -
type: bytes type: asm_a64
main_offset: 0x9C0868 main_offset: 0x9C0868
value_type: uint32 instructions: [
value: 0xBD4F0980 [ldr, s0, [x12, 0xf08]]
]
# Default values # Default values
- -
type: bytes type: bytes
@ -45,3 +46,4 @@ ALL_FPS:
address: [MAIN, 0x2BE8F00] address: [MAIN, 0x2BE8F00]
value_type: float value_type: float
value: ["1.35 * FRAMETIME_TARGET", "0.9603 * FRAMETIME_TARGET", "0.9 * FRAMETIME_TARGET"] value: ["1.35 * FRAMETIME_TARGET", "0.9603 * FRAMETIME_TARGET", "0.9 * FRAMETIME_TARGET"]

View File

@ -7,19 +7,19 @@ MASTER_WRITE:
# Redirect Dynamic Resolution target to MAIN+0x2C53F00 # Redirect Dynamic Resolution target to MAIN+0x2C53F00
# REF: 6A C8 82 52 # REF: 6A C8 82 52
- -
type: bytes type: asm_a64
main_offset: 0x138238C main_offset: 0x138238C
value_type: uint32 instructions: [
value: [adrp, x10, 0x2c53000],
- 0xB000C68A # ADRP X10, 0x2c53000 [ldr, w10, [x10, 0xf00]]
- 0xB94F014A # LDR W10, [X10, 0xF00] ]
- -
type: bytes type: asm_a64
main_offset: 0x13823A8 main_offset: 0x13823A8
value_type: uint32 instructions: [
value: [adrp, x10, 0x2c53000],
- 0xB000C68A # ADRP X10, 0x2c53000 [ldr, w10, [x10, 0xf04]]
- 0xB94F054A # LDR W10, [X10, 0xF04] ]
# Default values # Default values
- -
type: bytes type: bytes
@ -40,4 +40,5 @@ ALL_FPS:
type: evaluate_write type: evaluate_write
address: [MAIN, 0x2C53F00] address: [MAIN, 0x2C53F00]
value_type: float value_type: float
value: ["1 / FPS_TARGET", "1 / (FPS_TARGET + 5)"]
value: ["1 / FPS_TARGET", "1 / (FPS_TARGET + 5)"]

View File

@ -8,23 +8,23 @@ MASTER_WRITE:
# Redirect min delta to MAIN + 0x1BC4FF0 # Redirect min delta to MAIN + 0x1BC4FF0
# REF: 00 D9 21 7E 28 19 20 1E # REF: 00 D9 21 7E 28 19 20 1E
- -
type: bytes type: asm_a64
main_offset: 0x39ABF8 main_offset: 0x39ABF8
value_type: uint32 instructions: [
value: [adrp, x27, 0x1bc4000],
- 0xD000C15B # ADRP X27, 0x1BC4000 [ldr, s8, [x27, 0xff0]]
- 0xBD4FF368 # LDR S8, [X27, 0xFF0] ]
# Redirect FPS Lock to MAIN + 0x1BC4FF4 # Redirect FPS Lock to MAIN + 0x1BC4FF4
# REF: 69 AA 40 B9 0A 40 99 52 # REF: 69 AA 40 B9 0A 40 99 52
- -
type: bytes type: asm_a64
main_offset: 0x39B2D8 main_offset: 0x39B2D8
value_type: uint32 instructions: [
value: [adrp, x9, 0x1bc4000],
- 0xB000C149 # ADRP X9, 0x1BC4000 [ldr, w9, [x9, 0xff4]],
- 0xB94FF529 # LDR W9, [X9, 0xFF4] [nop],
- 0xD503201F # NOP [nop]
- 0xD503201F # NOP ]
# Default values # Default values
- -
type: bytes type: bytes
@ -52,3 +52,4 @@ ALL_FPS:
- -
type: block type: block
what: timing what: timing

View File

@ -6,13 +6,13 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Patch `DynamicResolution.Settings$$get_TargetFPS` to redirect reading targetFPS to unused .bss region [MAIN, 0x5E9AFF0] # Patch `DynamicResolution.Settings$$get_TargetFPS` to redirect reading targetFPS to unused .bss region [MAIN, 0x5E9AFF0]
- -
type: bytes type: asm_a64
main_offset: 0x3821020 main_offset: 0x3821020
value_type: int32 instructions: [
value: [adrp, x0, 0x5e9a000],
- 0xB00133C0 [ldr, s0, [x0, 0xff0]],
- 0xBD4FF000 [ret]
- 0xD65F03C0 ]
# Write default value of `DynamicResolution.Settings$$get_TargetFPS` to redirected address # Write default value of `DynamicResolution.Settings$$get_TargetFPS` to redirected address
- -
type: bytes type: bytes
@ -26,3 +26,4 @@ ALL_FPS:
address: [MAIN, 0x5E9AFF0] address: [MAIN, 0x5E9AFF0]
value_type: float value_type: float
value: FPS_TARGET value: FPS_TARGET

View File

@ -8,13 +8,13 @@ MASTER_WRITE:
## REF: 81 1a 40 bd 02 10 2e 1e ## REF: 81 1a 40 bd 02 10 2e 1e
## REF: FPSTarget.<>d__6::MoveNext() ## REF: FPSTarget.<>d__6::MoveNext()
- -
type: bytes type: asm_a64
main_offset: 0x2DF1E60 main_offset: 0x2DF1E60
value_type: uint32 instructions: [
value: [adrp, x8, 0x49fc000],
- 0xF000E048 # adrp x8, #0x49fc000 [ldr, s1, [x8, 0xff0]],
- 0xBD4FF101 # ldr s1, [x8, #0xff0] [nop]
- 0xD503201F # NOP ]
## Default value ## Default value
- -
type: bytes type: bytes
@ -27,4 +27,4 @@ ALL_FPS:
type: evaluate_write type: evaluate_write
address: [MAIN, 0x49FCFF0] address: [MAIN, 0x49FCFF0]
value_type: float value_type: float
value: "1 / FPS_TARGET" value: "1 / FPS_TARGET"

View File

@ -6,36 +6,37 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Redirect Dynamic Resolution Timings to read always not from .text # Redirect Dynamic Resolution Timings to read always not from .text
- -
type: bytes type: asm_a64
main_offset: 0x136A51C main_offset: 0x136A51C
value_type: uint32 instructions: [
value: 0xD503201F [nop]
]
- -
type: bytes type: asm_a64
main_offset: 0x136A548 main_offset: 0x136A548
value_type: uint32 instructions: [
value: [nop],
- 0xD503201F [nop]
- 0xD503201F ]
# Redirect Dynamic Resolution Timings readings to MAIN+0x3608E00 # Redirect Dynamic Resolution Timings readings to MAIN+0x3608E00
- -
type: bytes type: asm_a64
main_offset: 0x136A520 main_offset: 0x136A520
value_type: uint32 instructions: [
value: [adrp, x8, 0x3608000],
- 0xD00114E8 [ldr, s0, [x8, 0xe00]],
- 0xBD4E0100 [ldr, s1, [x8, 0xe04]],
- 0xBD4E0501 [ldr, s2, [x8, 0xe08]],
- 0xBD4E0902 [nop],
- 0xD503201F [nop]
- 0xD503201F ]
- -
type: bytes type: asm_a64
main_offset: 0x136A554 main_offset: 0x136A554
value_type: uint32 instructions: [
value: [adrp, x9, 0x3608000],
- 0xD00114E9 [add, x9, x9, 0xe0c]
- 0x91383129 ]
# Write default values # Write default values
- -
type: bytes type: bytes
@ -111,3 +112,4 @@ ALL_FPS:
- -
type: block type: block
what: timing what: timing

View File

@ -7,29 +7,29 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Redirect adjusting game speed to FPS Lock stored in MAIN + 0x2B92800, REF: 20 79 68 BC 01 10 2E 1E 00 D8 21 7E # Redirect adjusting game speed to FPS Lock stored in MAIN + 0x2B92800, REF: 20 79 68 BC 01 10 2E 1E 00 D8 21 7E
- -
type: bytes type: asm_a64
main_offset: 0xB8ED98 main_offset: 0xB8ED98
value_type: uint32 instructions: [
value: [adrp, x9, 0x2b92000],
- 0x90010029 [add, x9, x9, 0x800]
- 0x91200129 ]
# Redirect FPS Lock to MAIN + 0x2B92800, REF: C8 32 40 B9 E8 C2 00 B9 # Redirect FPS Lock to MAIN + 0x2B92800, REF: C8 32 40 B9 E8 C2 00 B9
- -
type: bytes type: asm_a64
main_offset: 0x89668C main_offset: 0x89668C
value_type: uint32 instructions: [
value: [adrp, x8, 0x2b92000],
- 0x900117E8 [ldr, w8, [x8, 0x800]]
- 0xB9480108 ]
# Redirect game speed to MAIN + 0x2B92808, REF: 00 28 21 1E 00 A0 00 BD C0 03 5F D6 # Redirect game speed to MAIN + 0x2B92808, REF: 00 28 21 1E 00 A0 00 BD C0 03 5F D6
- -
type: bytes type: asm_a64
main_offset: 0x11139A0 main_offset: 0x11139A0
value_type: uint32 instructions: [
value: [adrp, x8, 0x2b92000],
- 0xF000D3E8 [ldr, s0, [x0, 0xa0]],
- 0xBD40A000 [ldr, s1, [x8, 0x808]]
- 0xBD480901 ]
# Default FPS Targets # Default FPS Targets
- -
type: bytes type: bytes
@ -60,3 +60,4 @@ ALL_FPS:
- -
type: block type: block
what: timing what: timing

View File

@ -6,19 +6,20 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Redirect DR Timing target to MAIN + 0x6D91A00, REF: 61 36 40 BD 60 3E 40 BD # Redirect DR Timing target to MAIN + 0x6D91A00, REF: 61 36 40 BD 60 3E 40 BD
- -
type: bytes type: asm_a64
main_offset: 0x3534598 main_offset: 0x3534598
value_type: uint32 instructions: [
value: 0x944D1AEB [bl, 0x487b144]
]
- -
type: bytes type: asm_a64
main_offset: 0x487B144 main_offset: 0x487B144
value_type: uint32 instructions: [
value: [adrp, x8, 0x6d91000],
- 0xD00128A8 [ldr, s0, [x8, 0xa00]],
- 0xBD4A0100 [str, s0, [x19, 0x3c]],
- 0xBD003E60 [ret]
- 0xD65F03C0 ]
# Default value # Default value
- -
type: bytes type: bytes

View File

@ -7,12 +7,12 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Move loading FPS lock time to MAIN+0x3AF0800 # Move loading FPS lock time to MAIN+0x3AF0800
- -
type: bytes type: asm_a64
main_offset: 0x5F02F8 main_offset: 0x5F02F8
value_type: uint32 instructions: [
value: [adrp, x9, 0x3af0000],
- 0x9001A809 [ldr, w9, [x9, 0x800]]
- 0xB9480129 ]
# Default value # Default value
- -
type: bytes type: bytes
@ -21,34 +21,35 @@ MASTER_WRITE:
value: 33333333 value: 33333333
# Write game's loop time as float to MAIN+0x3AF0804 # Write game's loop time as float to MAIN+0x3AF0804
- -
type: bytes type: asm_a64
main_offset: 0x5F0348 main_offset: 0x5F0348
value_type: uint32 instructions: [
value: 0x17FFFF5B [b, 0x5f00b4]
]
- -
type: bytes type: asm_a64
main_offset: 0x5F00B4 main_offset: 0x5F00B4
value_type: uint32 instructions: [
value: [str, x0, [x19, 8]],
- 0xF9000660 [fcvt, s4, d0],
- 0x1E624004 [b, 0x5f02d4]
- 0x14000086 ]
- -
type: bytes type: asm_a64
main_offset: 0x5F02D4 main_offset: 0x5F02D4
value_type: uint32 instructions: [
value: [adrp, x8, 0x3af0000],
- 0x9001A808 [str, s4, [x8, 0x804]],
- 0xBD080504 [b, 0x5f034c]
- 0x1400001C ]
- # Read lowest timing float factor from MAIN+0x3AF0804 - # Read lowest timing float factor from MAIN+0x3AF0804
type: bytes type: asm_a64
main_offset: 0x65548 main_offset: 0x65548
value_type: uint32 instructions: [
value: [adrp, x8, 0x3af0000],
- 0xF001D448 [fminnm, s0, s0, s2],
- 0x1E227800 [ldr, s2, [x8, 0x804]]
- 0xBD480502 ]
- # Default value - # Default value
type: bytes type: bytes
main_offset: 0x3AF0804 main_offset: 0x3AF0804
@ -60,3 +61,4 @@ ALL_FPS:
address: [MAIN, 0x3AF0800] address: [MAIN, 0x3AF0800]
value_type: uint32 value_type: uint32
value: 11111111 value: 11111111

View File

@ -7,23 +7,23 @@ MASTER_WRITE:
# Redirect min delta to MAIN + 0x1FE0FF0 # Redirect min delta to MAIN + 0x1FE0FF0
# REF: 00 D9 21 7E 28 19 20 1E # REF: 00 D9 21 7E 28 19 20 1E
- -
type: bytes type: asm_a64
main_offset: 0x16D9B4 main_offset: 0x16D9B4
value_type: uint32 instructions: [
value: [adrp, x27, 0x1fe0000],
- 0xF000F39B # ADRP X27, 0x1FE0000 [ldr, s8, [x27, 0xff0]]
- 0xBD4FF368 # LDR S8, [X27, 0xFF0] ]
# Redirect FPS Lock to MAIN + 0x1FE0FF4 # Redirect FPS Lock to MAIN + 0x1FE0FF4
# REF: 69 B2 40 B9 0A 40 99 52 # REF: 69 B2 40 B9 0A 40 99 52
- -
type: bytes type: asm_a64
main_offset: 0x16DDD0 main_offset: 0x16DDD0
value_type: uint32 instructions: [
value: [adrp, x9, 0x1fe0000],
- 0xF000F389 # ADRP X9, 0x1FE0000 [ldr, w9, [x9, 0xff4]],
- 0xB94FF529 # LDR W9, [X9, 0xFF4] [nop],
- 0xD503201F # NOP [nop]
- 0xD503201F # NOP ]
# Default values # Default values
- -
type: bytes type: bytes
@ -51,3 +51,4 @@ ALL_FPS:
- -
type: block type: block
what: timing what: timing

View File

@ -7,10 +7,11 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Redirect reading FPS Lock to MAIN+0x1D164DC # Redirect reading FPS Lock to MAIN+0x1D164DC
- -
type: bytes type: asm_a64
main_offset: 0x7A3E9C main_offset: 0x7A3E9C
value_type: uint32 instructions: [
value: 0xF000AB8C [adrp, x12, 0x1d16000]
]
# Default value # Default value
- -
type: bytes type: bytes
@ -27,3 +28,4 @@ ALL_FPS:
- -
type: block type: block
what: timing what: timing

View File

@ -6,25 +6,30 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Remove double buffer # Remove double buffer
- -
type: bytes type: asm_a64
main_offset: 0xF45DFC main_offset: 0xF45DFC
value_type: uint32 instructions: [
[cmp, x26, 3]
]
value: 0xF1000F5F value: 0xF1000F5F
- -
type: bytes type: asm_a64
main_offset: 0xF45E64 main_offset: 0xF45E64
value_type: uint32 instructions: [
value: 0x52800061 [mov, w1, 3]
]
- -
type: bytes type: asm_a64
main_offset: 0xF461D4 main_offset: 0xF461D4
value_type: uint32 instructions: [
value: 0xF1000F5F [cmp, x26, 3]
]
- -
type: bytes type: asm_a64
main_offset: 0xF4623C main_offset: 0xF4623C
value_type: uint32 instructions: [
value: 0x52800061 [mov, w1, 3]
]
ALL_FPS: ALL_FPS:
# DUMMY # DUMMY
- -

View File

@ -7,38 +7,41 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Change double buffer to triple buffer # Change double buffer to triple buffer
- -
type: bytes type: asm_a64
main_offset: 0x138A024 main_offset: 0x138A024
value_type: uint32 instructions: [
value: 0x52800068 [mov, w8, 3]
]
# Allow changing dynamic resolution timings # Allow changing dynamic resolution timings
# Max - changed address to MAIN + 0x7D05200 # Max - changed address to MAIN + 0x7D05200
- -
type: bytes type: asm_a64
main_offset: 0x25992CC main_offset: 0x25992CC
value_type: uint32 instructions: [
value: [adrp, x8, 0x7d05000],
- 0x9002BB68 [adrp, x22, 0x5ddf000],
- 0xD001C236 [ldr, d2, [x8, 0x200]]
- 0xFD410102 ]
# Min - changed address to MAIN + 0x7D05208 # Min - changed address to MAIN + 0x7D05208
- -
type: bytes type: asm_a64
main_offset: 0x2599344 main_offset: 0x2599344
value_type: uint32 instructions: [
value: [adrp, x10, 0x7d05000],
- 0x9002BB6A [ldr, d5, [x10, 0x208]]
- 0xFD410545 ]
- -
type: bytes type: asm_a64
main_offset: 0x2599380 main_offset: 0x2599380
value_type: uint32 instructions: [
value: 0x9002BB6A [adrp, x10, 0x7d05000]
]
- -
type: bytes type: asm_a64
main_offset: 0x2599390 main_offset: 0x2599390
value_type: uint32 instructions: [
value: 0xFD410546 [ldr, d6, [x10, 0x208]]
]
# Default values # Default values
- -
type: bytes type: bytes
@ -63,3 +66,4 @@ ALL_FPS:
address: [MAIN, 0x7D05208] address: [MAIN, 0x7D05208]
value_type: double value_type: double
value: "0.96 * FRAMETIME_TARGET" value: "0.96 * FRAMETIME_TARGET"

View File

@ -6,12 +6,12 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Redirect DynamicResolutionManager$$Update Timing to be read from MAIN+0x72C6500 # Redirect DynamicResolutionManager$$Update Timing to be read from MAIN+0x72C6500
- -
type: bytes type: asm_a64
main_offset: 0x2B0188C main_offset: 0x2B0188C
value_type: uint32 instructions: [
value: [adrp, x8, 0x72c6000],
- 0xB0023E28 [ldr, s1, [x8, 0x500]]
- 0xBD450101 ]
# Write default value # Write default value
- -
type: bytes type: bytes
@ -25,3 +25,4 @@ ALL_FPS:
address: [MAIN, 0x72C6500] address: [MAIN, 0x72C6500]
value_type: float value_type: float
value: "0.97 * FRAMETIME_TARGET" value: "0.97 * FRAMETIME_TARGET"

View File

@ -6,12 +6,12 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Remove double buffer # Remove double buffer
- -
type: bytes type: asm_a64
main_offset: 0x64A8 main_offset: 0x64A8
value_type: uint32 instructions: [
value: [mov, w2, 3],
- 0x52800062 [madd, x1, x8, x2, x9]
- 0x9B022501 ]
- -
type: bytes type: bytes
main_offset: 0xC526D0 main_offset: 0xC526D0
@ -23,62 +23,65 @@ MASTER_WRITE:
value_type: uint32 value_type: uint32
value: 0x1887D70 value: 0x1887D70
- -
type: bytes type: asm_a64
main_offset: 0xC4EDE0 main_offset: 0xC4EDE0
value_type: uint32 instructions: [
value: [ldr, x0, [x26, 0x10]],
- 0xF9400B40 [cbz, x0, +24],
- 0xB40000C0 [adrp, x8, 0x1751000],
- 0xF0005808 [ldr, x8, [x8, 0x150]],
- 0xF940A908 [ldr, x8, [x8]],
- 0xF9400108 [blr, x8],
- 0xD63F0100 [b, +16],
- 0x14000004 [mov, w0, 0xc0],
- 0x321A07E0 [bl, 0x72bb40],
- 0x97EB7350 [str, x0, [x26, 0x10]],
- 0xF9000B40 [ldr, x22, [x27]],
- 0xF9400376 [adrp, x27, 0x1750000],
- 0xD000581B [ldr, x21, [x25]],
- 0xF9400335 [ldr, x27, [x27, 0xff8]],
- 0xF947FF7B [adrp, x23, 0x1751000],
- 0xF0005817 [ldr, x8, [x27]],
- 0xF9400368 [ldr, x23, [x23, 0xb30]],
- 0xF9459AF7 [mov, x0, x23],
- 0xAA1703E0 [blr, x8],
- 0xD63F0100 [mov, x2, x0],
- 0xAA0003E2 [mov, x0, x21],
- 0xAA1503E0 [mov, x1, x22],
- 0xAA1603E1 [bl, 0x1a80],
- 0x97CECB12 [mov, x21, x0],
- 0xAA0003F5 [ldr, x0, [x25]],
- 0xF9400320 [bl, 0x1ac0],
- 0x97CECB1F [ldr, x8, [x28]],
- 0xF9400388 [mov, x1, x0],
- 0xAA0003E1 [mov, x0, x23],
- 0xAA1703E0 [mov, x2, x21],
- 0xAA1503E2 [blr, x8],
- 0xD63F0100 [ldr, x0, [x26, 0x10]],
- 0xF9400B40 [ldr, x8, [x24]],
- 0xF9400308 [mov, x1, x23],
- 0xAA1703E1 [blr, x8],
- 0xD63F0100 [adrp, x22, 0x1751000],
- 0xF0005816 [b, 0x5edc]
- 0x17CEDC1B ]
- -
type: bytes type: asm_a64
main_offset: 0x5ED8 main_offset: 0x5ED8
value_type: uint32 instructions: [
value: 0x143123C2 [b, 0xc4ede0]
]
- -
type: bytes type: asm_a64
main_offset: 0x5FB0 main_offset: 0x5FB0
value_type: uint32 instructions: [
value: 0x52800061 [mov, w1, 3]
]
- -
type: bytes type: asm_a64
main_offset: 0x5F7C main_offset: 0x5F7C
value_type: uint32 instructions: [
value: 0xD2A032A2 [mov, x2, 0x1950000]
]
ALL_FPS: ALL_FPS:
# dummy # dummy
- -

View File

@ -6,39 +6,40 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Redirect Dynamic Resolution Timings to read always not from .text # Redirect Dynamic Resolution Timings to read always not from .text
- -
type: bytes type: asm_a64
main_offset: 0x27CE4B4 main_offset: 0x27CE4B4
value_type: uint32 instructions: [
value: 0x1E204020 [fmov, s0, s1]
]
# Redirect Dynamic Resolution Timings readings to MAIN+0x3DFAE00 # Redirect Dynamic Resolution Timings readings to MAIN+0x3DFAE00
- -
type: bytes type: asm_a64
main_offset: 0x27CE450 main_offset: 0x27CE450
value_type: uint32 instructions: [
value: [adrp, x13, 0x3dfa000],
- 0x9000B16D [ldr, s1, [x13, 0xe00]]
- 0xBD4E01A1 ]
- -
type: bytes type: asm_a64
main_offset: 0x27CE484 main_offset: 0x27CE484
value_type: uint32 instructions: [
value: [adrp, x9, 0x3dfa000],
- 0x9000B169 [add, x9, x9, 0xe04]
- 0x91381129 ]
- -
type: bytes type: asm_a64
main_offset: 0x27CE490 main_offset: 0x27CE490
value_type: uint32 instructions: [
value: [adrp, x10, 0x3dfa000],
- 0x9000B16A [add, x10, x10, 0xe0c]
- 0x9138314A ]
- -
type: bytes type: asm_a64
main_offset: 0x27CE468 main_offset: 0x27CE468
value_type: uint32 instructions: [
value: [adrp, x8, 0x3dfa000],
- 0x9000B168 [add, x8, x8, 0xe14]
- 0x91385108 ]
# Write default values # Write default values
# MAIN + 0x2C11728 # MAIN + 0x2C11728
- -
@ -104,3 +105,4 @@ ALL_FPS:
- -
type: block type: block
what: timing what: timing

View File

@ -7,74 +7,75 @@ MASTER_WRITE:
# Dynamic speed # Dynamic speed
# Jump before pushing frame to the end of .plt, which is 0x8B3900 (backup: MOV W8, #0x21A0) # Jump before pushing frame to the end of .plt, which is 0x8B3900 (backup: MOV W8, #0x21A0)
- -
type: bytes type: asm_a64
main_offset: 0x700164 main_offset: 0x700164
value_type: uint32 instructions: [
value: 0x1406CDE7 [b, 0x8b3900]
]
# Game speed math, write data to unused .bss, tick at 0x15ECF00, game speed at tick at 0x15ECF08, take min delta from 0x15ECF10 # Game speed math, write data to unused .bss, tick at 0x15ECF00, game speed at tick at 0x15ECF08, take min delta from 0x15ECF10
- -
type: bytes type: asm_a64
main_offset: 0x8B3900 main_offset: 0x8B3900
value_type: uint32 instructions: [
value: [bl, 0x8b2700],
- 0x97FFFB80 [adrp, x2, 0x15ec000],
- 0xB00069C2 [ldr, x1, [x2, 0xf00]],
- 0xF9478041 [str, x0, [x2, 0xf00]],
- 0xF9078040 [cbnz, x1, +12],
- 0xB5000061 [mov, w8, 0x21a0],
- 0x52843408 [b, 0x700168],
- 0x17F93214 [sub, x0, x0, x1],
- 0xCB010000 [bl, 0x8b2710],
- 0x97FFFB7C [fmov, s2, 15.0],
- 0x1E25D002 [mov, w1, 1000],
- 0x52807D01 [udiv, x0, x0, x1],
- 0x9AC10800 [scvtf, s0, x0],
- 0x9E220000 [mov, w1, 0x2400],
- 0x52848001 [movk, w1, 0x4974, 16],
- 0x72A92E81 [fmov, s1, w1],
- 0x1E270021 [b, +96],
- 0x14000018 [adrp, x0, 0xb8f000],
- 0x900016E0 [ldr, x0, [x0, 0xd0]],
- 0xF9406800 [cbz, x0, -56],
- 0xB4FFFE40 [str, s0, [x0, 0x78]],
- 0xBD007800 [str, s0, [x0, 0x7c]],
- 0xBD007C00 [adrp, x0, 0xc22000],
- 0xF0001B60 [ldr, x0, [x0, 0x2c8]],
- 0xF9416400 [str, s0, [x0, 0x80]],
- 0xBD008000 [adrp, x0, 0x15ec000],
- 0xB00069C0 [str, s0, [x0, 0xf08]],
- 0xBD0F0800 [b, -88],
- 0x17FFFFEA [fmov, s1, 1.0], #
- 0x1E2E1001 [fdiv, s2, s1, s2],
- 0x1E221822 [fcmp, s0, s2],
- 0x1E222000 [b.lt, +12],
- 0x5400006B [fmov, s0, s2],
- 0x1E204040 [b, -64],
- 0x17FFFFF0 [adrp, x0, 0x15ec000],
- 0xB00069C0 [ldr, s2, [x0, 0xf10]],
- 0xBD4F1002 [fcmp, s0, s2],
- 0x1E222000 [b.hi, -80],
- 0x54FFFD88 [fmov, s0, s2],
- 0x1E204040 [b, -88],
- 0x17FFFFEA [fdiv, s0, s0, s1],
- 0x1E211800 [b, -52]
- 0x17FFFFF3 ]
# Patch wind speed to take game speed from MAIN + 0x15ECF08 # Patch wind speed to take game speed from MAIN + 0x15ECF08
- -
type: bytes type: asm_a64
main_offset: 0x747DD8 main_offset: 0x747DD8
value_type: uint32 instructions: [
value: [adrp, x8, 0x15ec000],
- 0xB0007528 [ldr, s6, [x8, 0xf08]]
- 0xBD4F0906 ]
# Redirect DR timing to MAIN + 0x15ECF18 # Redirect DR timing to MAIN + 0x15ECF18
- -
type: bytes type: asm_a64
main_offset: 0x6AA14C main_offset: 0x6AA14C
value_type: uint32 instructions: [
value: [adrp, x8, 0x15ec000],
- 0xD0007A08 [ldr, s0, [x8, 0xf18]]
- 0xBD4F1900 ]
# Default values # Default values
- -
type: bytes type: bytes
@ -125,3 +126,4 @@ ALL_FPS:
address: [MAIN, 0x15ECF18] address: [MAIN, 0x15ECF18]
value_type: float value_type: float
value: 0.0333333333 value: 0.0333333333

View File

@ -7,29 +7,29 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Redirect adjusting game speed to FPS Lock stored in MAIN + 0x2BFB700, REF: 20 79 68 BC 01 10 2E 1E 00 D8 21 7E # Redirect adjusting game speed to FPS Lock stored in MAIN + 0x2BFB700, REF: 20 79 68 BC 01 10 2E 1E 00 D8 21 7E
- -
type: bytes type: asm_a64
main_offset: 0xB8F528 main_offset: 0xB8F528
value_type: uint32 instructions: [
value: [adrp, x9, 0x2bfb000],
- 0x90010369 [add, x9, x9, 0x700]
- 0x911C0129 ]
# Redirect FPS Lock to MAIN + 0x2BFB700, REF: C8 32 40 B9 E8 C2 00 B9 # Redirect FPS Lock to MAIN + 0x2BFB700, REF: C8 32 40 B9 E8 C2 00 B9
- -
type: bytes type: asm_a64
main_offset: 0x8966BC main_offset: 0x8966BC
value_type: uint32 instructions: [
value: [adrp, x8, 0x2bfb000],
- 0xB0011B28 [ldr, w8, [x8, 0x700]]
- 0xB9470108 ]
# Redirect game speed to MAIN + 0x2BFB708, REF: 00 28 21 1E 00 A0 00 BD C0 03 5F D6 # Redirect game speed to MAIN + 0x2BFB708, REF: 00 28 21 1E 00 A0 00 BD C0 03 5F D6
- -
type: bytes type: asm_a64
main_offset: 0x1109040 main_offset: 0x1109040
value_type: uint32 instructions: [
value: [adrp, x8, 0x2bfb000],
- 0xD000D788 [ldr, s0, [x0, 0xa0]],
- 0xBD40A000 [ldr, s1, [x8, 0x708]]
- 0xBD470901 ]
# Default FPS Targets # Default FPS Targets
- -
type: bytes type: bytes
@ -61,3 +61,4 @@ ALL_FPS:
- -
type: block type: block
what: timing what: timing

View File

@ -6,27 +6,28 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Read FPS target from code cave at MAIN + 0xA13170 # Read FPS target from code cave at MAIN + 0xA13170
- -
type: bytes type: asm_a64
main_offset: 0x2004 main_offset: 0x2004
value_type: uint32 instructions: [
value: 0x1428445B [b, 0xa13170]
]
# CODE CAVE - read FPS target from MAIN + 0xD94628 # CODE CAVE - read FPS target from MAIN + 0xD94628
- -
type: bytes type: asm_a64
main_offset: 0xA13170 main_offset: 0xA13170
value_type: uint32 instructions: [
value: [adrp, x8, 0xd94000],
- 0xB0001C08 [ldr, w8, [x8, 0x628]],
- 0xB9462908 [b, 0x2008]
- 0x17D7BBA4 ]
# Redirect DR time factor to MAIN + 0x2ECAB38 # Redirect DR time factor to MAIN + 0x2ECAB38
- -
type: bytes type: asm_a64
main_offset: 0x2140 main_offset: 0x2140
value_type: uint32 instructions: [
value: [adrp, x8, 0x2eca000],
- 0x90017648 [ldr, s9, [x8, 0xb38]]
- 0xBD4B3909 ]
# Default value # Default value
- -
type: bytes type: bytes
@ -44,3 +45,4 @@ ALL_FPS:
address: [MAIN, 0x2ECAB38] address: [MAIN, 0x2ECAB38]
value_type: float value_type: float
value: "(30 / FPS_TARGET) * 1000000" value: "(30 / FPS_TARGET) * 1000000"

View File

@ -10,135 +10,142 @@ MASTER_WRITE:
# Remove double buffer # Remove double buffer
## REF: A0 2A 40 F9 61 A2 40 39 ## REF: A0 2A 40 F9 61 A2 40 39
- -
type: bytes type: asm_a64
main_offset: 0xBBF258 main_offset: 0xBBF258
value_type: uint32 instructions: [
value: 0x52800021 [mov, w1, 1]
]
# Code Injected, $x1 + 0xD8 - last frametime without compensation long ticks, $x0 + 0x50 - fps target used for calculation int, # Code Injected, $x1 + 0xD8 - last frametime without compensation long ticks, $x0 + 0x50 - fps target used for calculation int,
# $x0 + 0x24 - our fps target used for calculation but as float, originally is stored there 30 FPS int that seems to do nothing outside of this function # $x0 + 0x24 - our fps target used for calculation but as float, originally is stored there 30 FPS int that seems to do nothing outside of this function
## MAIN + 0x3ACCFFC = FPS target for reference ## MAIN + 0x3ACCFFC = FPS target for reference
## REF: nvnWindowSetPresentInterval ## REF: nvnWindowSetPresentInterval
- -
type: bytes type: asm_a64
main_offset: 0x2D4E68 main_offset: 0x2D4E68
value_type: uint32 instructions: [
value: [adrp, x2, 0x3acc000],
- 0x9001BFC2 [ldr, s9, [x2, 0xffc]],
- 0xBD4FFC49 [mov, x20, x0],
- 0xAA0003F4 [mov, x21, x1],
- 0xAA0103F5 [ldr, x0, [x1, 0xd8]],
- 0xF9406C20 [bl, 0x2ba4830], # BL nn::os::ConvertToTimeSpan(nn::os::Tick)
- 0x94A33E6D # BL nn::os::ConvertToTimeSpan(nn::os::Tick) [mov, w2, 0xca00],
- 0x52994002 [movk, w2, 0x3b9a, 16],
- 0x72A77342 [scvtf, s2, w2],
- 0x1E220042 [scvtf, s1, x0],
- 0x9E220001 [fdiv, s1, s2, s1],
- 0x1E211841 [fcmp, s1, s9],
- 0x1E292020 [fcsel, s1, s9, s1, gt],
- 0x1E21CD21 [fmov, s9, 15.0],
- 0x1E25D009 [fcmp, s1, s9],
- 0x1E292020 [fcsel, s1, s9, s1, lt],
- 0x1E21BD21 [fcvtzu, w2, s1],
- 0x1E390022 [str, w2, [x20, 0x50]],
- 0xB9005282 [str, s1, [x20, 0x24]],
- 0xBD002681 [b, 0x2d4f60]
- 0x1400002B ]
## Use our fps target ## Use our fps target
## REF: 60 52 42 BD 08 4E A8 52 ## REF: 60 52 42 BD 08 4E A8 52
### Replace LDR S0, [X22,#0x250] ### Replace LDR S0, [X22,#0x250]
- -
type: bytes type: asm_a64
main_offset: 0x2D4730 main_offset: 0x2D4730
value_type: uint32 instructions: [
value: 0xBD422660 [ldr, s0, [x19, 0x224]]
]
### Replace SCVTF S0, S0 ### Replace SCVTF S0, S0
- -
type: bytes type: asm_a64
main_offset: 0x2D4748 main_offset: 0x2D4748
value_type: uint32 instructions: [
value: 0xD503201F [nop]
]
## REF: 14 01 40 F9 08 4E A8 52 ## REF: 14 01 40 F9 08 4E A8 52
### Replace LDR S0, [X22,#0x250] ### Replace LDR S0, [X22,#0x250]
- -
type: bytes type: asm_a64
main_offset: 0x37EA5C main_offset: 0x37EA5C
value_type: uint32 instructions: [
value: 0xBD4226C0 [ldr, s0, [x22, 0x224]]
]
### Replace SCVTF S0, S0 ### Replace SCVTF S0, S0
- -
type: bytes type: asm_a64
main_offset: 0x37EA68 main_offset: 0x37EA68
value_type: uint32 instructions: [
value: 0xD503201F [nop]
]
# When prerendered cutscene is active write flag to MAIN + 0x3ACCFFB # When prerendered cutscene is active write flag to MAIN + 0x3ACCFFB
## REF: 68 52 40 79 08 01 19 32 68 52 00 79 ## REF: 68 52 40 79 08 01 19 32 68 52 00 79
## BL to Code Cave 1 ## BL to Code Cave 1
- -
type: bytes type: asm_a64
main_offset: 0x2B238B4 main_offset: 0x2B238B4
value_type: uint32 instructions: [
value: 0x975EC581 [bl, 0x2d4eb8]
]
## REF: 68 52 40 79 08 79 18 12 68 52 00 79, inside call ## REF: 68 52 40 79 08 79 18 12 68 52 00 79, inside call
## B to Code Cave 2 ## B to Code Cave 2
- -
type: bytes type: asm_a64
main_offset: 0x2B210CC main_offset: 0x2B210CC
value_type: uint32 instructions: [
value: 0x175ECF7F [b, 0x2d4ec8]
]
## CODE CAVE 1, offset +0x50 relative to start of previous code cave ## CODE CAVE 1, offset +0x50 relative to start of previous code cave
- -
type: bytes type: asm_a64
main_offset: 0x2D4EB8 main_offset: 0x2D4EB8
value_type: uint32 instructions: [
value: [mov, w2, 1],
- 0x52800022 [adrp, x3, 0x3acc000],
- 0x9001BFC3 [strb, w2, [x3, 0xffb]],
- 0x393FEC62 [b, 0x5f888] # Jump to original BL as B
- 0x17F62A71 # Jump to original BL as B ]
## CODE CAVE 2, offset +0x10 relative to start of previous code cave ## CODE CAVE 2, offset +0x10 relative to start of previous code cave
- -
type: bytes type: asm_a64
main_offset: 0x2D4EC8 main_offset: 0x2D4EC8
value_type: uint32 instructions: [
value: [adrp, x3, 0x3acc000],
- 0x9001BFC3 [strb, w0, [x3, 0xffb]],
- 0x393FEC60 [b, 0x2ba5e80] # B nn::oe::SetUserInactivityDetectionTimeExtended(bool)
- 0x14A343EC # B nn::oe::SetUserInactivityDetectionTimeExtended(bool) ]
# Adjust DR timing to factor from MAIN + 0x3ACCFF4 # Adjust DR timing to factor from MAIN + 0x3ACCFF4
# REF: 88 02 15 CB 00 01 23 9E # REF: 88 02 15 CB 00 01 23 9E
- -
type: bytes type: asm_a64
main_offset: 0xEED54 main_offset: 0xEED54
value_type: uint32 instructions: [
value: [adrp, x8, 0x3acc000],
- 0xD001CEE8 [ldr, s1, [x8, 0xff4]]
- 0xBD4FF501 ]
# Fix black background for D-pad menu # Fix black background for D-pad menu
## REF: 21 03 5E BC ## REF: 21 03 5E BC
- -
type: bytes type: asm_a64
main_offset: 0x387390 main_offset: 0x387390
value_type: uint32 instructions: [
value: [b, 0x2d4ed4], # Jump to Code Cave 3
- 0x17FD36D1 # Jump to Code Cave 3 [fcmp, s0, 0.0]
- 0x1E202008 ]
## CODE CAVE 3, offset +0xC relative to start of previous code cave ## CODE CAVE 3, offset +0xC relative to start of previous code cave
- -
type: bytes type: asm_a64
main_offset: 0x2D4ED4 main_offset: 0x2D4ED4
value_type: uint32 instructions: [
value: [fcmp, s1, 0.0],
- 0x1E202028 [b.ne, +32],
- 0x54000101 [ldurh, w8, [x25, -6]],
- 0x785FA328 [cmp, w8, 5],
- 0x7100151F [b.ne, +20],
- 0x540000A1 [ldurh, w8, [x25, -8]],
- 0x785F8328 [cmp, w8, 5],
- 0x7100151F [b.ne, +8],
- 0x54000041 [fmov, s8, 1.0],
- 0x1E2E1008 [fmadd, s9, s0, s8, s1],
- 0x1F080409 [b, 0x387394] # Go back
- 0x1402C926 # Go back ]
# Default values # Default values
## FPS Target ## FPS Target
- -

View File

@ -7,21 +7,21 @@ MASTER_WRITE:
# Redirect FPS Lock to float MAIN+B75F200, frametime and DR target to float MAIN+B75F204 # Redirect FPS Lock to float MAIN+B75F200, frametime and DR target to float MAIN+B75F204
# REF: 08 14 40 BD 00 10 2E 1E 00 18 28 1E # REF: 08 14 40 BD 00 10 2E 1E 00 18 28 1E
- -
type: bytes type: asm_a64
main_offset: 0x36A3F8 main_offset: 0x36A3F8
value_type: uint32 instructions: [
value: [adrp, x8, 0xb75f000],
- 0xB0059FA8 [ldr, s0, [x8, 0x200]],
- 0xBD420100 [ldr, s8, [x8, 0x204]]
- 0xBD420508 ]
# REF: 00 14 40 BD 09 10 2E 1E (1 instruction before that) # REF: 00 14 40 BD 09 10 2E 1E (1 instruction before that)
- -
type: bytes type: asm_a64
main_offset: 0x34A0EB4 main_offset: 0x34A0EB4
value_type: uint32 instructions: [
value: [adrp, x0, 0xb75f000],
- 0xF00415E0 [ldr, s0, [x0, 0x204]]
- 0xBD420400 ]
# Default values # Default values
- -
type: bytes type: bytes

View File

@ -7,74 +7,75 @@ MASTER_WRITE:
# Dynamic speed # Dynamic speed
# Jump before pushing frame to the end of .plt, which is 0x8B3448 (backup: MOV W8, #0x21A0) # Jump before pushing frame to the end of .plt, which is 0x8B3448 (backup: MOV W8, #0x21A0)
- -
type: bytes type: asm_a64
main_offset: 0x700050 main_offset: 0x700050
value_type: uint32 instructions: [
value: 0x1406CCFE [b, 0x8b3448]
]
# Game speed math, write data to unused .bss, tick at 0x15ECF00, game speed at 0x15ECF08, take min delta from 0x15ECF10 # Game speed math, write data to unused .bss, tick at 0x15ECF00, game speed at 0x15ECF08, take min delta from 0x15ECF10
- -
type: bytes type: asm_a64
main_offset: 0x8B3448 main_offset: 0x8B3448
value_type: uint32 instructions: [
value: [bl, 0x8b2258],
- 0x97FFFB84 [adrp, x2, 0x15ec000],
- 0xB00069C2 [ldr, x1, [x2, 0xf00]],
- 0xF9478041 [str, x0, [x2, 0xf00]],
- 0xF9078040 [cbnz, x1, +12],
- 0xB5000061 [mov, w8, 0x21a0],
- 0x52843408 [b, 0x700054],
- 0x17F932FD [sub, x0, x0, x1],
- 0xCB010000 [bl, 0x8b2268],
- 0x97FFFB80 [fmov, s2, 15.0],
- 0x1E25D002 [mov, w1, 1000],
- 0x52807D01 [udiv, x0, x0, x1],
- 0x9AC10800 [scvtf, s0, x0],
- 0x9E220000 [mov, w1, 0x2400],
- 0x52848001 [movk, w1, 0x4974, 16],
- 0x72A92E81 [fmov, s1, w1],
- 0x1E270021 [b, +96],
- 0x14000018 [adrp, x0, 0xb8f000],
- 0x900016E0 [ldr, x0, [x0, 0xd0]],
- 0xF9406800 [cbz, x0, -56],
- 0xB4FFFE40 [str, s0, [x0, 0x78]],
- 0xBD007800 [str, s0, [x0, 0x7c]],
- 0xBD007C00 [adrp, x0, 0xc22000],
- 0xF0001B60 [ldr, x0, [x0, 0x2c8]],
- 0xF9416400 [str, s0, [x0, 0x80]],
- 0xBD008000 [adrp, x0, 0x15ec000],
- 0xB00069C0 [str, s0, [x0, 0xf08]],
- 0xBD0F0800 [b, -88],
- 0x17FFFFEA [fmov, s1, 1.0],
- 0x1E2E1001 [fdiv, s2, s1, s2],
- 0x1E221822 [fcmp, s0, s2],
- 0x1E222000 [b.lt, +12],
- 0x5400006B [fmov, s0, s2],
- 0x1E204040 [b, -64],
- 0x17FFFFF0 [adrp, x0, 0x15ec000],
- 0xB00069C0 [ldr, s2, [x0, 0xf10]],
- 0xBD4F1002 [fcmp, s0, s2],
- 0x1E222000 [b.hi, -80],
- 0x54FFFD88 [fmov, s0, s2],
- 0x1E204040 [b, -88],
- 0x17FFFFEA [fdiv, s0, s0, s1],
- 0x1E211800 [b, -52]
- 0x17FFFFF3 ]
# Patch wind speed to take game speed from MAIN + 0x15ECF08 # Patch wind speed to take game speed from MAIN + 0x15ECF08
- -
type: bytes type: asm_a64
main_offset: 0x747CC4 main_offset: 0x747CC4
value_type: uint32 instructions: [
value: [adrp, x8, 0x15ec000],
- 0xB0007528 [ldr, s6, [x8, 0xf08]]
- 0xBD4F0906 ]
# Redirect DR timing to MAIN + 0x15ECF18 # Redirect DR timing to MAIN + 0x15ECF18
- -
type: bytes type: asm_a64
main_offset: 0x6AA038 main_offset: 0x6AA038
value_type: uint32 instructions: [
value: [adrp, x8, 0x15ec000],
- 0xD0007A08 [ldr, s0, [x8, 0xf18]]
- 0xBD4F1900 ]
# Default values # Default values
- -
type: bytes type: bytes
@ -125,3 +126,4 @@ ALL_FPS:
address: [MAIN, 0x15ECF18] address: [MAIN, 0x15ECF18]
value_type: float value_type: float
value: 0.0333333333 value: 0.0333333333

View File

@ -7,12 +7,12 @@ unsafeCheck: true
MASTER_WRITE: MASTER_WRITE:
# Redirect DR frametime target to MAIN+0x30A7F00 # Redirect DR frametime target to MAIN+0x30A7F00
- -
type: bytes type: asm_a64
main_offset: 0x193CEA8 main_offset: 0x193CEA8
value_type: uint32 instructions: [
value: [adrp, x10, 0x30a7000],
- 0xF000BB4A # adrp x10, #0x30A7000 [ldr, s2, [x10, 0xf00]]
- 0xBD4F0142 # ldr s2, [x10, #0xf00] ]
# default value # default value
- -
type: bytes type: bytes
@ -24,4 +24,4 @@ ALL_FPS:
type: evaluate_write type: evaluate_write
address: [MAIN, 0x30A7F00] address: [MAIN, 0x30A7F00]
value_type: float value_type: float
value: FRAMETIME_TARGET value: FRAMETIME_TARGET

Binary file not shown.

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More