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 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. Немного изменен мной, но без копания в исходниках (Так как они закрыты).
- [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 в играх.
- [EdiZon](https://github.com/proferabg/EdiZon-Overlay) - Оверлей для использования читов, включая графические.
- [ReverseNX-RT](https://github.com/ppkantorski/ReverseNX-RT) - Оверлей для переключения запущенной игры в портатив\док, меняет настройки графики\разрешения в играх.
- [EdiZon](https://github.com/ppkantorski/EdiZon-Overlay) - Оверлей для использования читов, включая графические.
- [ReverseNX-RT](https://github.com/masagrator/ReverseNX-RT) - Оверлей для переключения запущенной игры в портатив\док, меняет настройки графики\разрешения в играх.
- [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 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).
- [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.
- [EdiZon](https://github.com/proferabg/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.
- [EdiZon](https://github.com/ppkantorski/EdiZon-Overlay) - An overlay for using cheats.
- [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.

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

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
# Some prerendered cutscenes are still pushed at 30 FPS
@ -7,22 +7,24 @@ unsafeCheck: true
MASTER_WRITE:
# Block updating DR timings, REF: 00 01 27 1E 48 40 A8 52
-
type: bytes
type: asm_a64
main_offset: 0x1CA806C
value_type: uint32
value: 0xD503201F
instructions: [
[nop]
]
-
type: bytes
type: asm_a64
main_offset: 0x1CA8074
value_type: uint32
value: 0xD503201F
instructions: [
[nop]
]
-
type: bytes
type: asm_a64
main_offset: 0x1CA8094
value_type: uint32
value:
- 0xD503201F
- 0xD503201F
instructions: [
[nop],
[nop]
]
# Write default DR timings
-
type: bytes
@ -51,3 +53,4 @@ ALL_FPS:
-
type: block
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
unsafeCheck: true
@ -6,15 +6,17 @@ unsafeCheck: true
MASTER_WRITE:
# Remove double buffer
-
type: bytes
type: asm_a64
main_offset: 0x1B630
value_type: uint32
value: 0x52800061
instructions: [
[mov, w1, 3]
]
-
type: bytes
type: asm_a64
main_offset: 0x5774C
value_type: uint32
value: 0x52800061
instructions: [
[mov, w1, 3]
]
ALL_FPS:
# REF: 20 59 60 BC
# Internal FPS Lock
@ -48,4 +50,5 @@ ALL_FPS:
type: evaluate_write
address: [MAIN, 0x10D8028]
value_type: uint32
value: "VSYNC_TARGET - 1"
value: "VSYNC_TARGET - 1"

View File

@ -8,12 +8,12 @@ unsafeCheck: true
MASTER_WRITE:
# Change location of GPU frametime double divider to MAIN+0x32C6D00
-
type: bytes
type: asm_a64
main_offset: 0x921768
value_type: uint32
value:
- 0xB0014D28
- 0xFD468101
instructions: [
[adrp, x8, 0x32c6000],
[ldr, d1, [x8, 0xd00]]
]
# Default value
-
type: bytes
@ -27,3 +27,4 @@ ALL_FPS:
address: [MAIN, 0x32C6D00]
value_type: double
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:
# Remove FPS Lock
-
type: bytes
type: asm_a64
main_offset: 0x4835A4
value_type: uint32
value: 0xD503201F
instructions: [
[nop]
]
ALL_FPS:
# Switch game to 60 FPS mode
-
@ -41,3 +42,4 @@ ALL_FPS:
address: [MAIN, 0xEFFC60, 0x50]
value_type: float
value: "1 / FPS_TARGET"

View File

@ -7,12 +7,12 @@ unsafeCheck: true
MASTER_WRITE:
# Redirect DR frametime target to MAIN+0x36D4F00
-
type: bytes
type: asm_a64
main_offset: 0x17358B4
value_type: uint32
value:
- 0xF000FCED # adrp x13, #0x36D4000
- 0xBD4F01A2 # ldr s2, [x13, #0xf00]
instructions: [
[adrp, x13, 0x36d4000],
[ldr, s2, [x13, 0xf00]]
]
# default value
-
type: bytes
@ -24,4 +24,5 @@ ALL_FPS:
type: evaluate_write
address: [MAIN, 0x36D4F00]
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
# BID: 14C878ECCA9D7CB5
unsafeCheck: true
unsafeCheck: false
ALL_FPS:
# Disable bUseFixedFrameRate to unlock framerate
@ -36,3 +36,4 @@ ALL_FPS:
-
type: block
what: timing

View File

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

View File

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

View File

@ -6,34 +6,35 @@ unsafeCheck: true
MASTER_WRITE:
# Redirect DynamicResolution$$LowerResSW Max Target in MS to MAIN+0x3BE1200
-
type: bytes
type: asm_a64
main_offset: 0x2426988
value_type: uint32
value:
- 0x14000043
instructions: [
[b, 0x2426a94]
]
-
type: bytes
type: asm_a64
main_offset: 0x2426A94
value_type: uint32
value:
- 0xF000BDD3
- 0xFD410261
- 0x17FFFFBC
instructions: [
[adrp, x19, 0x3be1000],
[ldr, d1, [x19, 0x200]],
[b, 0x242698c]
]
# Redirect DynamicResolution$$LowerResSW Min Target in MS to MAIN+0x3BE1208
-
type: bytes
type: asm_a64
main_offset: 0x24269F4
value_type: uint32
value:
- 0x1400012C
instructions: [
[b, 0x2426ea4]
]
-
type: bytes
type: asm_a64
main_offset: 0x2426EA4
value_type: uint32
value:
- 0xF000BDC8
- 0xFD410501
- 0x17FFFED3
instructions: [
[adrp, x8, 0x3be1000],
[ldr, d1, [x8, 0x208]],
[b, 0x24269f8]
]
# Write default values
-
type: bytes
@ -46,3 +47,4 @@ ALL_FPS:
address: [MAIN, 0x3BE1200]
value_type: double
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
MASTER_WRITE:
-
type: bytes
type: asm_a64
main_offset: 0x5DB12C
value_type: uint32
value: 0x52800079
instructions: [
[mov, w25, 3]
]
ALL_FPS:
# interval, REF: 29 00 80 52 16 00 08 8B 08 A0 8C 52 28 00 A0 72
-
type: evaluate_write
address: [MAIN, 0x3412388]
value_type: int32
value: VSYNC_TARGET
value: VSYNC_TARGET

View File

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

View File

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

View File

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

View File

@ -6,22 +6,22 @@ unsafeCheck: true
MASTER_WRITE:
# redirect reading Dynamic Resolution timing min & max to MAIN + 0xC3C0A50
-
type: bytes
type: asm_a64
main_offset: 0x6171A0
value_type: uint32
value:
- 0xD503201F
- 0xBD4E0563
- 0x1E232821
- 0xB005ED4C
- 0xBD4A5182
instructions: [
[nop],
[ldr, s3, [x11, 0xe04]],
[fadd, s1, s1, s3],
[adrp, x12, 0xc3c0000],
[ldr, s2, [x12, 0xa50]]
]
-
type: bytes
type: asm_a64
main_offset: 0x6171F0
value_type: uint32
value:
- 0xB005ED4B
- 0xBD4A5562
instructions: [
[adrp, x11, 0xc3c0000],
[ldr, s2, [x11, 0xa54]]
]
# Default DR timings
-
type: bytes
@ -41,3 +41,4 @@ ALL_FPS:
address: [MAIN, 0xC3C0A50]
value_type: float
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
# To match it to Dynamic Resolution calculations
-
type: bytes
type: asm_a64
main_offset: 0x9F1DDC
value_type: uint32
value:
- 0xB002BFE8
- 0xBD440101
instructions: [
[adrp, x8, 0x61ee000],
[ldr, s1, [x8, 0x400]]
]
# Write default dynamic resolution timing factor
-
type: bytes
@ -25,3 +25,4 @@ ALL_FPS:
address: [MAIN, 0x61EE400]
value_type: float
value: "(FPS_TARGET / 30) * 1000"

View File

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

View File

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

View File

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

View File

@ -6,39 +6,41 @@ unsafeCheck: true
MASTER_WRITE:
# Detect prerendered cutscenes
-
type: bytes
type: asm_a64
main_offset: 0xB1A810
value_type: uint32
value: 0x14005CF6
instructions: [
[b, 0xb31be8]
]
-
type: bytes
type: asm_a64
main_offset: 0xB31BE8
value_type: uint32
value:
- 0xF81E0FF3
- 0x52800021
- 0xD000CDB3
- 0xB90FF261
- 0xAA0003F3
- 0x52994000
- 0x72A77340
- 0xD4000161
- 0xAA1303E0
- 0x17FFA302
instructions: [
[str, x19, [sp, -0x20], "!"],
[mov, w1, 1],
[adrp, x19, 0x24e7000],
[str, w1, [x19, 0xff0]],
[mov, x19, x0],
[mov, w0, 0xca00],
[movk, w0, 0x3b9a, 16],
[svc, 0xb],
[mov, x0, x19],
[b, 0xb1a814]
]
-
type: bytes
type: asm_a64
main_offset: 0xB1A9BC
value_type: uint32
value: 0x14005C95
instructions: [
[b, 0xb31c10]
]
-
type: bytes
type: asm_a64
main_offset: 0xB31C10
value_type: uint32
value:
- 0x2A1F03E1
- 0xD000CDA2
- 0xB90FF041
- 0x17FFCCA9
instructions: [
[mov, w1, wzr],
[adrp, x2, 0x24e7000],
[str, w1, [x2, 0xff0]],
[b, 0xb24ec0]
]
ALL_FPS:
# Internal FPS Lock
-
@ -54,4 +56,4 @@ ALL_FPS:
compare_address: [MAIN, 0x24E7FF0]
address: [MAIN]
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
# REF: 01 f0 67 1e
-
type: bytes
type: asm_a64
main_offset: 0x38E7ECC
value_type: uint32
value:
- 0xF00219D4 # adrp x20, #0x7c22000
- 0xFD478281 # ldr d1, [x20, #0xf00]
- 0x1E612010 # fcmpe d0, d1
- 0x2D482269 # ldp s9, s8, [x19, #0x40]
- 0x540002CD # b.le #0x38e7f34
- 0xBD40626A # ldr s10, [x19, #0x60]
instructions: [
[adrp, x20, 0x7c22000],
[ldr, d1, [x20, 0xf00]],
[fcmpe, d0, d1],
[ldp, s9, s8, [x19, 0x40]],
[b.le, 0x38e7f34],
[ldr, s10, [x19, 0x60]]
]
-
type: bytes
type: asm_a64
main_offset: 0x38E7F34
value_type: uint32
value:
- 0xFD478681 # ldr d1, [x20, #0xf08]
instructions: [
[ldr, d1, [x20, 0xf08]]
]
# Default handheld value
-
type: bytes
@ -36,3 +36,4 @@ ALL_FPS:
address: [MAIN, 0x7C22F00]
value_type: double
value: ["0.93 * FRAMETIME_TARGET", "(0.93 * FRAMETIME_TARGET) - 2"]

View File

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

View File

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

View File

@ -7,13 +7,13 @@ MASTER_WRITE:
# Redirect DR to MAIN + 0x2F5CFF0
# REF: A9 24 89 52 49 A2 A7 72, second REF
-
type: bytes
type: asm_a64
main_offset: 0x10AAEE4
value_type: uint32
value:
- 0xD000F589 # adrp x9, 0x2F5C000
- 0xBD4FF121 # ldr s1, [x9, 0xFF0]
- 0xD503201F # nop
instructions: [
[adrp, x9, 0x2f5c000],
[ldr, s1, [x9, 0xff0]],
[nop]
]
## Default value
-
type: bytes
@ -34,3 +34,4 @@ ALL_FPS:
address: [MAIN, 0x2F5CFF0]
value_type: float
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:
# Redirect DR timing targets to MAIN + 0x21E4F30
-
type: bytes
type: asm_a64
main_offset: 0x4C82D0
value_type: uint32
value:
- 0x9000E8EA
- 0xBD4F3142
instructions: [
[adrp, x10, 0x21e4000],
[ldr, s2, [x10, 0xf30]]
]
-
type: bytes
type: asm_a64
main_offset: 0x4C8300
value_type: uint32
value:
- 0x9000E8E8
- 0xBD4F3502
instructions: [
[adrp, x8, 0x21e4000],
[ldr, s2, [x8, 0xf34]]
]
# Default values
-
type: bytes
@ -31,3 +31,4 @@ ALL_FPS:
address: [MAIN, 0x21E4F30]
value_type: float
value: ["0.99 * FRAMETIME_TARGET", "0.84 * FRAMETIME_TARGET"]

View File

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

View File

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

View File

@ -7,27 +7,27 @@ MASTER_WRITE:
# 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
-
type: bytes
type: asm_a64
main_offset: 0x6E3AF0
value_type: uint32
value:
- 0xD00049E1 # ADRP X1, 0x1021000
- 0xBD4E1021 # LDR S1, [X1, 0xE10]
instructions: [
[adrp, x1, 0x1021000],
[ldr, s1, [x1, 0xe10]]
]
# Redirect DR Targets to MAIN+0x1477F00
-
type: bytes
type: asm_a64
main_offset: 0x6E3B94
value_type: uint32
value:
- 0x90006EE9 # ADRP X9, 0x14BF000
- 0xBD4F0121 # LDR S1, [X9, 0xF00]
instructions: [
[adrp, x9, 0x14bf000],
[ldr, s1, [x9, 0xf00]]
]
-
type: bytes
type: asm_a64
main_offset: 0x6E3BA4
value_type: uint32
value:
- 0x90006EE9 # ADRP X9, 0x14BF000
- 0xBD4F0521 # LDR S1, [X9, 0xF04]
instructions: [
[adrp, x9, 0x14bf000],
[ldr, s1, [x9, 0xf04]]
]
# Default values
-
type: bytes
@ -72,4 +72,5 @@ ALL_FPS:
type: evaluate_write
address: [MAIN, 0x14BFF00]
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
# REF: 00 00 23 1E E1 02 27 1E 00 08 21 1E
-
type: bytes
type: asm_a64
main_offset: 0x7E4AA4
value_type: uint32
value: 0xD503201F
instructions: [
[nop]
]
# Set window present interval to 2 to get default 30 FPS lock
# REF: 34 14 9F 1A
-
type: bytes
type: asm_a64
main_offset: 0x22FCB88
value_type: uint32
value: 0x52800054
instructions: [
[mov, w20, 2]
]
ALL_FPS:
# DUMMY
-
@ -25,3 +27,4 @@ ALL_FPS:
address: [MAIN, 0x5226F00]
value_type: uint8
value: 0

View File

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

View File

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

View File

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

View File

@ -7,21 +7,21 @@ MASTER_WRITE:
# Redirect Dynamic Resolution timings to MAIN + 0x23774F00
# 38.0
-
type: bytes
type: asm_a64
main_offset: 0xF57294
value_type: uint32
value:
- 0xB01140E9
- 0x1E210800
- 0xBD4F0121
instructions: [
[adrp, x9, 0x23774000],
[fmul, s0, s0, s1],
[ldr, s1, [x9, 0xf00]]
]
# 32.0
-
type: bytes
type: asm_a64
main_offset: 0xF572B8
value_type: uint32
value:
- 0xBD4F0521
- 0xD503201F
instructions: [
[ldr, s1, [x9, 0xf04]],
[nop]
]
# Default values:
-
type: bytes
@ -41,4 +41,4 @@ ALL_FPS:
type: evaluate_write
address: [MAIN, 0x23774F00]
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
# To match it to Dynamic Resolution calculations
-
type: bytes
type: asm_a64
main_offset: 0xB40638
value_type: uint32
value:
- 0xB0018069
- 0xBD480120
- 0x1E200909
- 0xD503201F
instructions: [
[adrp, x9, 0x3b4d000],
[ldr, s0, [x9, 0x800]],
[fmul, s9, s8, s0],
[nop]
]
# Write default dynamic resolution timing factor
-
type: bytes
@ -28,3 +28,4 @@ ALL_FPS:
address: [MAIN, 0x3B4D800]
value_type: float
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
# To match it to Dynamic Resolution calculations
-
type: bytes
type: asm_a64
main_offset: 0xBDBE44
value_type: uint32
value:
- 0xF001B4C8
- 0xBD4B0100
instructions: [
[adrp, x8, 0x4276000],
[ldr, s0, [x8, 0xb00]]
]
-
type: bytes
type: asm_a64
main_offset: 0xBDBE58
value_type: uint32
value:
- 0x1E200900
- 0xD503201F
instructions: [
[fmul, s0, s8, s0],
[nop]
]
# Write default dynamic resolution timing factor
-
type: bytes
@ -33,3 +33,4 @@ ALL_FPS:
address: [MAIN, 0x4276B00]
value_type: float
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
# To match it to Dynamic Resolution calculations
-
type: bytes
type: asm_a64
main_offset: 0xAD51A0
value_type: uint32
value:
- 0xB001CA68
- 0xBD480101
instructions: [
[adrp, x8, 0x4422000],
[ldr, s1, [x8, 0x800]]
]
# Write default dynamic resolution timing factor
-
type: bytes
@ -26,3 +26,4 @@ ALL_FPS:
address: [MAIN, 0x4422800]
value_type: float
value: "(FPS_TARGET / 30) * 1000"

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -6,19 +6,19 @@ unsafeCheck: true
MASTER_WRITE:
# Redirect DR timing range to MAIN + 0x878B800
-
type: bytes
type: asm_a64
main_offset: 0x4451E88
value_type: uint32
value:
- 0xD00219C8
- 0xB9480108
instructions: [
[adrp, x8, 0x878b000],
[ldr, w8, [x8, 0x800]]
]
-
type: bytes
type: asm_a64
main_offset: 0x4451ED4
value_type: uint32
value:
- 0xD00219C8
- 0xB9480508
instructions: [
[adrp, x8, 0x878b000],
[ldr, w8, [x8, 0x804]]
]
# Default values
-
type: bytes
@ -32,3 +32,4 @@ ALL_FPS:
address: [MAIN, 0x878B800]
value_type: float
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
# REF: 00 D9 21 7E 28 19 20 1E
-
type: bytes
type: asm_a64
main_offset: 0x39ABF8
value_type: uint32
value:
- 0xD000C15B # ADRP X27, 0x1BC4000
- 0xBD4FF368 # LDR S8, [X27, 0xFF0]
instructions: [
[adrp, x27, 0x1bc4000],
[ldr, s8, [x27, 0xff0]]
]
# Redirect FPS Lock to MAIN + 0x1BC4FF4
# REF: 69 AA 40 B9 0A 40 99 52
-
type: bytes
type: asm_a64
main_offset: 0x39B2D8
value_type: uint32
value:
- 0xB000C149 # ADRP X9, 0x7101BC4000
- 0xB94FF529 # LDR W9, [X9, 0xFF4]
- 0xD503201F # NOP
- 0xD503201F # NOP
instructions: [
[adrp, x9, 0x1BC4000],
[ldr, w9, [x9, 0xff4]],
[nop],
[nop]
]
# Default values
-
type: bytes
@ -51,3 +51,4 @@ ALL_FPS:
-
type: block
what: timing

View File

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

View File

@ -7,13 +7,13 @@ MASTER_WRITE:
# 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
-
type: bytes
type: asm_a64
main_offset: 0x1F9BC40
value_type: uint32
value:
- 0xB0014229 # adrp x9, #0x47E0000
- 0xBD4FF120 # ldr s0, [x9, #0xff0]
- 0xD503201F # NOP
instructions: [
[adrp, x9, 0x47e0000],
[ldr, s0, [x9, 0xff0]],
[nop]
]
# default value
-
type: bytes
@ -25,4 +25,4 @@ ALL_FPS:
type: evaluate_write
address: [MAIN, 0x47E0FF0]
value_type: float
value: FPS_TARGET
value: FPS_TARGET

View File

@ -1,29 +1,31 @@
# 妖怪ウォッチ4 ぼくらは同じ空を見上げている 2.2.0
# BID: C7DAB27F22ACD2ED
# 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
MASTER_WRITE:
# Change main loop delay from 31.6 ms to 4.2 ms
-
type: bytes
type: asm_a64
main_offset: 0x950C6C
value_type: uint32
value: 0xD2A00800
instructions: [
[mov, x0, 0x400000]
]
-
type: bytes
type: asm_a64
main_offset: 0x950C74
value_type: uint32
value: 0xD2A00800
instructions: [
[mov, x0, 0x400000]
]
-
type: bytes
type: asm_a64
main_offset: 0x950C94
value_type: uint32
value:
- 0xD503201F
- 0xD503201F
instructions: [
[nop],
[nop]
]
ALL_FPS:
# DUMMY
-

View File

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

View File

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

View File

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

View File

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

View File

@ -7,23 +7,23 @@ MASTER_WRITE:
# Redirect min delta to MAIN + 0x1FE0FF0
# REF: 00 D9 21 7E 28 19 20 1E
-
type: bytes
type: asm_a64
main_offset: 0x16D9B4
value_type: uint32
value:
- 0xF000F39B # ADRP X27, 0x1FE0000
- 0xBD4FF368 # LDR S8, [X27, 0xFF0]
instructions: [
[adrp, x27, 0x1fe0000],
[ldr, s8, [x27, 0xff0]]
]
# Redirect FPS Lock to MAIN + 0x1FE0FF4
# REF: 69 B2 40 B9 0A 40 99 52
-
type: bytes
type: asm_a64
main_offset: 0x16DDD0
value_type: uint32
value:
- 0xF000F389 # ADRP X9, 0x1FE0000
- 0xB94FF529 # LDR W9, [X9, 0xFF4]
- 0xD503201F # NOP
- 0xD503201F # NOP
instructions: [
[adrp, x9, 0x1fe0000],
[ldr, w9, [x9, 0xff4]],
[nop],
[nop]
]
# Default values
-
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:
# Detect prerendered cutscenes
-
type: bytes
type: asm_a64
main_offset: 0x9F2540
value_type: uint32
value: 0x14004E9A
instructions: [
[b, 0xa05fa8]
]
-
type: bytes
type: asm_a64
main_offset: 0xA05FA8
value_type: uint32
value:
- 0xB0008DE8
- 0x52800021
- 0xB90FF101
- 0xF81E0FF3
- 0xAA0003F3
- 0x52994000
- 0x72A77340
- 0xD4000161
- 0xAA1303E0
- 0x17FFB15E
instructions: [
[adrp, x8, 0x1bc2000],
[mov, w1, 1],
[str, w1, [x8, 0xff0]],
[str, x19, [sp, -0x20], "!"],
[mov, x19, x0],
[mov, w0, 0xca00],
[movk, w0, 0x3b9a, 16],
[svc, 0xb],
[mov, x0, x19],
[b, 0x9f2544]
]
-
type: bytes
type: asm_a64
main_offset: 0x9F26EC
value_type: uint32
value: 0x14004E39
instructions: [
[b, 0xa05fd0]
]
-
type: bytes
type: asm_a64
main_offset: 0xA05FD0
value_type: uint32
value:
- 0x2A1F03E3
- 0xB0008DE4
- 0xB90FF083
- 0x17FFDB0D
instructions: [
[mov, w3, wzr],
[adrp, x4, 0x1bc2000],
[str, w3, [x4, 0xff0]],
[b, 0x9fcc10]
]
ALL_FPS:
# Internal FPS Lock
-
@ -54,4 +56,5 @@ ALL_FPS:
compare_address: [MAIN, 0x1BC2FF0]
address: [MAIN]
value_type: refresh_rate
value: 30
value: 30

View File

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

View File

@ -6,54 +6,54 @@ unsafeCheck: true
MASTER_WRITE:
# 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
value_type: uint32
value:
- 0xF001ED48 # adrp x8, 0x5659000
- 0xB9406908 # ldr w8, [x8, #0x68]
- 0x1E230101 # ucvtf s1, w8
- 0x1E2E1000 # fmov s0, #1.00000000
- 0x1E211800 # fdiv s0, s0, s1
instructions: [
[adrp, x8, 0x5659000],
[ldr, w8, [x8, 0x68]],
[ucvtf, s1, w8],
[fmov, s0, 1.0],
[fdiv, s0, s0, s1]
]
-
type: bytes
type: asm_a64
main_offset: 0x18B2570
value_type: uint32
value:
- 0xF001ED28 # adrp x8, 0x5659000
- 0xB9406908 # ldr w8, [x8, #0x68]
- 0x1E230101 # ucvtf s1, w8
- 0x1E2E1000 # fmov s0, #1.00000000
- 0x1E211800 # fdiv s0, s0, s1
instructions: [
[adrp, x8, 0x5659000],
[ldr, w8, [x8, 0x68]],
[ucvtf, s1, w8],
[fmov, s0, 1.0],
[fdiv, s0, s0, s1]
]
# Redirect Dynamic Resolution GPU Timing target in DynamicResolutionScaler::Update to MAIN+0x5ACEF08
-
type: bytes
type: asm_a64
main_offset: 0x389C824
value_type: uint32
value:
- 0xD0011188 # adrp x8, #0x5ACE000
- 0xF9478508 # ldr x8, [x8, #0xf08]
- 0xD503201F # nop
- 0xD503201F # nop
instructions: [
[adrp, x8, 0x5ace000],
[ldr, x8, [x8, 0xf08]],
[nop],
[nop]
]
-
type: bytes
type: asm_a64
main_offset: 0x389C8A4
value_type: uint32
value:
- 0xD0011188 # adrp x8, #0x5ACE000
- 0xF9478508 # ldr x8, [x8, #0xf08]
- 0xBD402A60 # ldr s0, [x19, #0x28]
- 0xD503201F # nop
- 0xD503201F # nop
instructions: [
[adrp, x8, 0x5ace000],
[ldr, x8, [x8, 0xf08]],
[ldr, s0, [x19, 0x28]],
[nop],
[nop]
]
-
type: bytes
type: asm_a64
main_offset: 0x389C918
value_type: uint32
value:
- 0xD0011188 # adrp x8, #0x5ACE000
- 0xF9478508 # ldr x8, [x8, #0xf08]
- 0xD503201F # nop
- 0xD503201F # nop
instructions: [
[adrp, x8, 0x5ace000],
[ldr, x8, [x8, 0xf08]],
[nop],
[nop]
]
# Default values
-
type: bytes
@ -77,4 +77,5 @@ ALL_FPS:
type: evaluate_write
address: [MAIN, 0x5ACEF08]
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:
# Remove double buffer
-
type: bytes
type: asm_a64
main_offset: 0x861208
value_type: uint32
value: 0x52800069
instructions: [
[mov, w9, 3]
]
# Fix helper functions to properly copy third buffer address to stack
-
type: bytes
type: asm_a64
main_offset: 0x8612DC
value_type: uint32
value: 0x52800062
instructions: [
[mov, w2, 3]
]
-
type: bytes
type: asm_a64
main_offset: 0x8654D8
value_type: uint32
value:
- 0xD10183FF
- 0xA9027BFD
- 0x910083FD
- 0xF9001BF7
- 0xA90457F6
- 0xA9054FF4
- 0xA9017FFF
instructions: [
[sub, sp, sp, 0x60],
[stp, x29, x30, [sp, 0x20]],
[add, x29, sp, 0x20],
[str, x23, [sp, 0x30]],
[stp, x22, x21, [sp, 0x40]],
[stp, x20, x19, [sp, 0x50]],
[stp, xzr, xzr, [sp, 0x10]]
]
-
type: bytes
type: asm_a64
main_offset: 0x86550C
value_type: uint32
value: 0x52800062
instructions: [
[mov, w2, 3]
]
-
type: bytes
type: asm_a64
main_offset: 0x8655B8
value_type: uint32
value:
- 0xA9002BE8
- 0x97FFE69B
- 0xA9454FF4
- 0xF9401BF7
- 0xA94457F6
- 0xA9427BFD
- 0x910183FF
instructions: [
[stp, x8, x10, [sp]],
[bl, 0x85f028],
[ldp, x20, x19, [sp, 0x50]],
[ldr, x23, [sp, 0x30]],
[ldp, x22, x21, [sp, 0x40]],
[ldp, x29, x30, [sp, 0x20]],
[add, sp, sp, 0x60]
]
-
type: bytes
type: asm_a64
main_offset: 0x793298
value_type: uint32
value:
- 0xD10143FF
- 0xA9027BFD
- 0x910083FD
- 0xA90357F6
- 0xA9044FF4
instructions: [
[sub, sp, sp, 0x50],
[stp, x29, x30, [sp, 0x20]],
[add, x29, sp, 0x20],
[stp, x22, x21, [sp, 0x30]],
[stp, x20, x19, [sp, 0x40]],
]
-
type: bytes
type: asm_a64
main_offset: 0x7932E0
value_type: uint32
value: 0xA9017FFF
instructions: [
[stp, xzr, xzr, [sp, 0x10]]
]
-
type: bytes
type: asm_a64
main_offset: 0x7932EC
value_type: uint32
value: 0x52800062
instructions: [
[mov, w2, 3]
]
-
type: bytes
type: asm_a64
main_offset: 0x793310
value_type: uint32
value:
- 0xA9444FF4
- 0xA94357F6
- 0xA9427BFD
- 0x910143FF
instructions: [
[ldp, x20, x19, [sp, 0x40]],
[ldp, x22, x21, [sp, 0x30]],
[ldp, x29, x30, [sp, 0x20]],
[add, sp, sp, 0x50]
]
-
type: bytes
type: asm_a64
main_offset: 0x876B00
value_type: uint32
value:
- 0x910043E1
- 0x910043F7
instructions: [
[add, x1, sp, 0x10],
[add, x23, sp, 0x10]
]
-
type: bytes
type: asm_a64
main_offset: 0x876B14
value_type: uint32
value:
- 0x52800062
- 0xA9017FFF
instructions: [
[mov, w2, 3],
[stp, xzr, xzr, [sp, 0x10]]
]
-
type: bytes
type: asm_a64
main_offset: 0x8CFC44
value_type: uint32
value:
- 0x910003E1
- 0x52800062
instructions: [
[mov, x1, sp],
[mov, w2, 3]
]
-
type: bytes
type: asm_a64
main_offset: 0x8CFC5C
value_type: uint32
value: 0x910003FA
instructions: [
[mov, x26, sp]
]
-
type: bytes
type: asm_a64
main_offset: 0x876B14
value_type: uint32
value: 0x52800062
instructions: [
[mov, w2, 3]
]
-
type: bytes
type: asm_a64
main_offset: 0x8612DC
value_type: uint32
value: 0x52800062
instructions: [
[mov, w2, 3]
]
-
type: bytes
type: asm_a64
main_offset: 0x876A64
value_type: uint32
value: 0x52800062
instructions: [
[mov, w2, 3]
]
# Disable transparency for some 2D elements to avoid issues with flickering at triple buffer
-
type: bytes
type: asm_a64
main_offset: 0x7BFB00
value_type: uint32
value:
- 0xD2802049
- 0xB948494A
- 0xD37DF14C
- 0x9120A114
- 0xF9000289
instructions: [
[mov, x9, 0x102],
[ldr, w10, [x10, 0x848]],
[lsl, x12, x10, 3],
[add, x20, x8, 0x828],
[str, x9, [x20]]
]
ALL_FPS:
# Interval
-
@ -136,3 +145,4 @@ ALL_FPS:
address: [MAIN, 0xBEBFD8, 0]
value_type: int32
value: VSYNC_TARGET

View File

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

View File

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

View File

@ -6,33 +6,34 @@ unsafeCheck: true
MASTER_WRITE:
# Redirect DR timings to MAIN + 0x2BE8F00, [Bad, Optimal, Good]
-
type: bytes
type: asm_a64
main_offset: 0x9C07A4
value_type: uint32
value:
- 0x9001114C
- 0xBD4F0183
instructions: [
[adrp, x12, 0x2be8000],
[ldr, s3, [x12, 0xf00]]
]
-
type: bytes
type: asm_a64
main_offset: 0x9C07F4
value_type: uint32
value:
- 0x9001114C
- 0xB94F058C
instructions: [
[adrp, x12, 0x2be8000],
[ldr, w12, [x12, 0xf04]]
]
-
type: bytes
type: asm_a64
main_offset: 0x9C0844
value_type: uint32
value:
- 0x1E20CC83
- 0x9001114C
- 0xBD4F0580
- 0xD503201F
instructions: [
[fcsel, s3, s4, s0, gt],
[adrp, x12, 0x2be8000],
[ldr, s0, [x12, 0xf04]],
[nop]
]
-
type: bytes
type: asm_a64
main_offset: 0x9C0868
value_type: uint32
value: 0xBD4F0980
instructions: [
[ldr, s0, [x12, 0xf08]]
]
# Default values
-
type: bytes
@ -45,3 +46,4 @@ ALL_FPS:
address: [MAIN, 0x2BE8F00]
value_type: float
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
# REF: 6A C8 82 52
-
type: bytes
type: asm_a64
main_offset: 0x138238C
value_type: uint32
value:
- 0xB000C68A # ADRP X10, 0x2c53000
- 0xB94F014A # LDR W10, [X10, 0xF00]
instructions: [
[adrp, x10, 0x2c53000],
[ldr, w10, [x10, 0xf00]]
]
-
type: bytes
type: asm_a64
main_offset: 0x13823A8
value_type: uint32
value:
- 0xB000C68A # ADRP X10, 0x2c53000
- 0xB94F054A # LDR W10, [X10, 0xF04]
instructions: [
[adrp, x10, 0x2c53000],
[ldr, w10, [x10, 0xf04]]
]
# Default values
-
type: bytes
@ -40,4 +40,5 @@ ALL_FPS:
type: evaluate_write
address: [MAIN, 0x2C53F00]
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
# REF: 00 D9 21 7E 28 19 20 1E
-
type: bytes
type: asm_a64
main_offset: 0x39ABF8
value_type: uint32
value:
- 0xD000C15B # ADRP X27, 0x1BC4000
- 0xBD4FF368 # LDR S8, [X27, 0xFF0]
instructions: [
[adrp, x27, 0x1bc4000],
[ldr, s8, [x27, 0xff0]]
]
# Redirect FPS Lock to MAIN + 0x1BC4FF4
# REF: 69 AA 40 B9 0A 40 99 52
-
type: bytes
type: asm_a64
main_offset: 0x39B2D8
value_type: uint32
value:
- 0xB000C149 # ADRP X9, 0x1BC4000
- 0xB94FF529 # LDR W9, [X9, 0xFF4]
- 0xD503201F # NOP
- 0xD503201F # NOP
instructions: [
[adrp, x9, 0x1bc4000],
[ldr, w9, [x9, 0xff4]],
[nop],
[nop]
]
# Default values
-
type: bytes
@ -52,3 +52,4 @@ ALL_FPS:
-
type: block
what: timing

View File

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

View File

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

View File

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

View File

@ -7,29 +7,29 @@ unsafeCheck: true
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
-
type: bytes
type: asm_a64
main_offset: 0xB8ED98
value_type: uint32
value:
- 0x90010029
- 0x91200129
instructions: [
[adrp, x9, 0x2b92000],
[add, x9, x9, 0x800]
]
# Redirect FPS Lock to MAIN + 0x2B92800, REF: C8 32 40 B9 E8 C2 00 B9
-
type: bytes
type: asm_a64
main_offset: 0x89668C
value_type: uint32
value:
- 0x900117E8
- 0xB9480108
instructions: [
[adrp, x8, 0x2b92000],
[ldr, w8, [x8, 0x800]]
]
# 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
value_type: uint32
value:
- 0xF000D3E8
- 0xBD40A000
- 0xBD480901
instructions: [
[adrp, x8, 0x2b92000],
[ldr, s0, [x0, 0xa0]],
[ldr, s1, [x8, 0x808]]
]
# Default FPS Targets
-
type: bytes
@ -60,3 +60,4 @@ ALL_FPS:
-
type: block
what: timing

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -7,29 +7,29 @@ unsafeCheck: true
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
-
type: bytes
type: asm_a64
main_offset: 0xB8F528
value_type: uint32
value:
- 0x90010369
- 0x911C0129
instructions: [
[adrp, x9, 0x2bfb000],
[add, x9, x9, 0x700]
]
# Redirect FPS Lock to MAIN + 0x2BFB700, REF: C8 32 40 B9 E8 C2 00 B9
-
type: bytes
type: asm_a64
main_offset: 0x8966BC
value_type: uint32
value:
- 0xB0011B28
- 0xB9470108
instructions: [
[adrp, x8, 0x2bfb000],
[ldr, w8, [x8, 0x700]]
]
# 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
value_type: uint32
value:
- 0xD000D788
- 0xBD40A000
- 0xBD470901
instructions: [
[adrp, x8, 0x2bfb000],
[ldr, s0, [x0, 0xa0]],
[ldr, s1, [x8, 0x708]]
]
# Default FPS Targets
-
type: bytes
@ -61,3 +61,4 @@ ALL_FPS:
-
type: block
what: timing

View File

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

View File

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

View File

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

View File

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