mirror of
https://github.com/Ultra-NX/UltraNX.git
synced 2025-09-09 18:21:27 +00:00
Ultra 2.6|R1
This commit is contained in:
parent
844a878bfe
commit
90908e1cf4
@ -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) - Оверлей для включения\отключения установленных системных модулей.
|
||||
|
||||
|
||||
|
@ -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.
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
-
|
||||
|
@ -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"
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
-
|
||||
|
@ -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"]
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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"
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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
|
@ -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"
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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"]
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
-
|
||||
|
@ -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"]
|
||||
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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
|
||||
-
|
||||
|
@ -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
|
||||
|
||||
|
@ -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"]
|
||||
|
||||
|
@ -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
|
||||
|
@ -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"]
|
||||
|
||||
|
@ -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
|
||||
-
|
||||
|
@ -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
|
||||
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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
|
@ -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"]
|
||||
|
||||
|
@ -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"]
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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"]
|
||||
|
@ -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
|
||||
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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"]
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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]
|
||||
|
@ -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"
|
||||
|
||||
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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"
|
||||
|
@ -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
|
||||
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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)"]
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
-
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
-
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
-
|
||||
|
@ -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
|
||||
|
@ -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
|
@ -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
|
||||
|
@ -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"
|
||||
|
@ -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)"
|
||||
|
@ -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
|
@ -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
|
||||
|
||||
|
@ -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)"]
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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"]
|
||||
|
||||
|
@ -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)"]
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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"
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
-
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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
|
||||
-
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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
|
||||
-
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
Loading…
x
Reference in New Issue
Block a user