Bueno, quizás muchos ya saben de que trata esto, pero para quienes no, les presento la rutina para aplicar el Save Block hack de JPAN, el cual tiene muchísimos usos y se requiere para varios sistemas.
Para resumirlo, lo que hace esta rutina es modificar la manera en que se organizan ciertos datos en la memoria RAM, a modo de hacer que ciertos bloques de memoria queden libres para usar y podamos darles usos a esos bloques depara nuestra conveniencia. Los bloques de memoria liberada se encuentran ubicados en 0x203C1C8, 0x203C420 y 0x203CFC0.
La mayoría aplica esta rutina mediante un parche que ronda en internet (Que ocupa la offset 0x8A00000, que en mi caso la tengo ocupada) o deja que la misma la aplique G3HS o PGE. Dichas rutinas se aplican si expandimos la dex (Cosa que no pienso hacer) y la de PGE por algún motivo buguea mi hack. Esta opción hace que la insertes a mano tú mismo y sepas donde la vas a poner. Además de ser más eficiente compilar desde el código fuente.
Y finalmente, la rutina.
Al compilar la rutina, solo deben abiri el archivo .bin generado y copiar los datos de las direcciones de los hooks, que se encuentan en 0x80D991E, 0x80D995C, 0x80D9EDC 0x83FEC9A. Tambien debes copiar los bytes ubicados en donde indicaste que insertarías la rutina.
Ten en cuenta que es muy probable que tras aplicar esta rutina debas de inicaiar una nueva partida, debidoa que muchos bytes en la RAM son modificados, haciendo que la partida vieja se corrompa.
Los créditos van para JPAN por la rutina original y jiangzhengwnjz ya que fue quien me facilitó por Discord el código fuente de la rutina que parecía perdida y nadie la tenía, además del parche.
Para resumirlo, lo que hace esta rutina es modificar la manera en que se organizan ciertos datos en la memoria RAM, a modo de hacer que ciertos bloques de memoria queden libres para usar y podamos darles usos a esos bloques depara nuestra conveniencia. Los bloques de memoria liberada se encuentran ubicados en 0x203C1C8, 0x203C420 y 0x203CFC0.
La mayoría aplica esta rutina mediante un parche que ronda en internet (Que ocupa la offset 0x8A00000, que en mi caso la tengo ocupada) o deja que la misma la aplique G3HS o PGE. Dichas rutinas se aplican si expandimos la dex (Cosa que no pienso hacer) y la de PGE por algún motivo buguea mi hack. Esta opción hace que la insertes a mano tú mismo y sepas donde la vas a poner. Además de ser más eficiente compilar desde el código fuente.
Y finalmente, la rutina.
Código:
.thumb
.global JPAN_Save_Block_Recycle
.equ rom, 0x8000000
.equ offset, 0xFFFFFF [MENTION=42591]Mod[/MENTION]IFICA A LA OFFSET DONDE INSERTARÁS ESTA RUTINA
.org 0xD991E, 0xFF
bx r7
.org 0xD995C, 0xFF
.word Recycle_2 + rom + 1
.org 0xD9EDC, 0xFF
ldr r0, .Pointer1
bx r0
.align 2
.Pointer1: .word Recycle_1 + rom + 1
.org 0x3FEC9A, 0xFF
.byte 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0xE0, 0x1F, 0xF0, 0x0F, 0xD0, 0x2F, 0x98, 0xD, 0x0, 0x0, 0xF0, 0x0F, 0xF0, 0xF, 0xF0, 0xF, 0xE0, 0x1F, 0xF0, 0xF, 0xD0, 0x2F, 0xF0, 0xF, 0xC0, 0x3F, 0xF0, 0xF, 0xB0, 0x4F, 0xF0, 0xF, 0xA0, 0x5F, 0xF0, 0xF, 0x90, 0x6F, 0xF0, 0xF, 0x80, 0x7F, 0x50, 0x4
.org offset, 0xFF
Recycle_1:
ldr r1, [r4]
mov r3, #0xFF
lsl r3, #0x4
add r3, r1
ldrh r0, [r3, #0x4]
cmp r0, #0x0
beq Size1
cmp r0, #0x4
beq Size2
cmp r0, #0xD
beq Size3
BigLoop:
cmp r5, #0xD
ble Return
mov r0, #0x1
pop {r3}
mov r8, r3
pop {r4-r7,pc}
Size1:
mov r1, #0xCC
ldr r2, .Loc1
b SmallLoop
Size2:
mov r1, #0x96
lsl r1, #0x2
ldr r2, .Loc2
b SmallLoop
Size3:
mov r1, #0xBA
lsl r1, #0x4
ldr r2, .Loc3
SmallLoop:
sub r3, #0x4
ldr r0, [r3]
str r0, [r2]
sub r2, #0x4
sub r1, #0x4
cmp r1, #0x0
bne SmallLoop
b BigLoop
.align 2
.Loc1: .word 0x203C1C8
.Loc2: .word 0x203C420
.Loc3: .word 0x203CFC0
Return:
ldr r0, .Return
bx r0
.align 2
.Return: .word 0x80D9E71
.word 0xFFFFFFFF
Recycle_2:
mov r7, #0xFF
lsl r7, #0x4
add r7, r1, r7
strh r0, [r7, #0x6]
ldrh r6, [r7, #0x4]
cmp r6, #0x0
beq Size1_2
cmp r6, #0x4
beq Size2_2
cmp r6, #0xD
beq Size3_2
lsl r0, #0x0
Return_2:
ldr r0, .Return2
bx r0
.align 2
.Return2: .word 0x80D9923
Size1_2:
mov r3, #0xCC
ldr r2, .Loc1_2
b SmallLoop_2
Size2_2:
mov r3, #0x96
lsl r3, #0x2
ldr r2, .Loc2_2
b SmallLoop_2
Size3_2:
mov r3, #0xBA
lsl r3, #0x4
ldr r2, .Loc3_2
SmallLoop_2:
sub r7, #0x4
ldr r0, [r2]
str r0, [r7]
sub r2, #0x4
sub r3, #0x4
cmp r3, #0x0
bne SmallLoop_2
b Return_2
.align 2
.Loc1_2: .word 0x203C1C8
.Loc2_2: .word 0x203C420
.Loc3_2: .word 0x203CFC0
Ten en cuenta que es muy probable que tras aplicar esta rutina debas de inicaiar una nueva partida, debidoa que muchos bytes en la RAM son modificados, haciendo que la partida vieja se corrompa.
Los créditos van para JPAN por la rutina original y jiangzhengwnjz ya que fue quien me facilitó por Discord el código fuente de la rutina que parecía perdida y nadie la tenía, además del parche.
Última edición: