Registrarse

[ASM] FR | Extendiendo las Flags y Variables Disponibles

Lilith.

Without Heart
Gold dijo:
Hola de nuevo, pues el dia de ayer puse una guia que contenía las flags y variables que son seguras de usar y las que definitivamente no son seguras, dicha referencia causó molestia en muchos al ver la limitadísima cantidad disponible.

Pero gracias al genio Jambo51 podemos repuntear el bloque de RAM usada por estas para tener muchas mas flags y variables, asi que empecemos.

Recuerda, Estamos manipulando la RAM, por lo cual si o siTODAS las partidas (.sav) que tengas deben ser reiniciadas.

¿Que Necesitamos?
-Una ROM de Fire Red (Are you kidding f*ck me?)
-Extensión de Memoria RAM de JPAN o tener la Pokedex extendida con G3HS.
- Un cerebro funcionando (Obligatorio)

Ahora si empezemos

Hacer las Flags 0x900-0x18FF usables:
Rutina de Flags:
Código:
.text
.align 2
.thumb
.thumb_func
.global flaggethack
main:
	mov r0, #0x9
	lsl r0, r0, #0x8
	cmp r4, r0
	blt normal
	mov r0, #0x19
	lsl r0, r0, #0x8
	cmp r4, r0
	bge noget
	mov r0, #0x9
	lsl r0, r0, #0x8
	sub r4, r4, r0
	add r6, r4, #0x0
	str r4, [sp, #0x0]
	ldr r0, memoryblock
	lsr r1, r6, #0x3
	add r0, r0, r1
exit:	pop {r4-r6}
	pop {r1}
	bx r1
normal:	ldr r0, normalmemoryblock
	ldr r0, [r0, #0x0]
there:	lsr r1, r6, #0x3
	mov r3, #0xEE
	lsl r3, r3, #0x4
	add r1, r1, r3
	add r0, r0, r1
	b exit
noget:	add r0, r4, #0x0
	b there
.align
memoryblock:	.word 0x0203C000
normalmemoryblock:	.word 0x03005008
Ya sabes que sigue, ensambla la rutina y ponla en alguna offset libre que termine en 0, 4, 8 o C y anota su puntero. Ahora dirigete a 0x6E5D6 y escribe lo siguiente:

Código:
01 48 00 47 00 00 XX XX XX 08
Creo que ya sabemos de sobra que en las XX va el puntero permutado a la rutina +1.

Una vez hecho esto las flags entre 0x900 - 0x18FF (inclusive) quedan seguras de usar para lo que se nos pegue la gana.

NOTA: Esta rutina CORTA TODO ACCESO de flags fuera del rango 0x0 - 0x18FF. En pocas palabras, estas simplemente dejan de funcionar ya que la nueva rutina corta todo acceso a flags con mala asignación de RAM.

Ahora, las variables!

Hacer Variables 0x5000-0x51FF usables:
Rutina de Variables:
Código:
.text
.align 2
.thumb
.thumb_func
.global varflaghackone

main:
	mov r2, #0x40
	lsl r2, r2, #0x8
	cmp r4, r2
	blt exit
        mov r2, #0x41
	lsl r2, r2, #0x8
	cmp r4, r2
	blt normal
	mov r2, #0x50
	lsl r2, r2, #0x8
	cmp r4, r2
	blt exit
        lsl r2, r4, #0x10
        cmp r2, #0x0
        blt alt
	mov r2, #0x52
	lsl r2, r2, #0x8
	cmp r4, r2
	bge exit
	ldr r0, memoryblock
	mov r2, #0x50
	lsl r2, r2, #0x8
	sub r4, r4, r2
	lsl r4, r4, #0x1
	add r0, r0, r4
exit2:	pop {r4-r6}
	pop {r1}
	bx r1
exit:	mov r0, #0x0
	b exit2
normal:	ldr r0, return
	bx r0
alt:	ldr r0, return2
	bx r0
.align
memoryblock:	.word 0x0203C200
return:	.word 0x0806E473
return2:	.word 0x0806E50D
Después de ensamblada hacemos lo mismo que con las flags, solo que ahora nos iremos a 0x6E45C y escribimos lo siguiente:

Código:
00 48 00 47 XX XX XX 08
(No volveré a explicar las XX)

Ya insertada la rutina podremos usar las variables entre 0x5000 and 0x51FF (inclusive) sin ningun problema!

NOTA: Esta rutina tambien corta todo acceso de variables fuera del rango seguro, para evitar que otros comandos las usen.

El rango seguro es:
0x4000 - 0x40FF
0x5000 - 0x51FF
0x8000 - 0x8016


Debes estar enterado que no puedes usar una sola extensión, o extiendes flags y variables, o nada, de lo contrario no funcionará la extensión

Si la memoria RAM que se usa en ambas rutinas ya las tienes ocupada puedes repuntearla a otros bloques de RAM libre.

En pocas palabras, ahora tenemos 0x1000 nuevas flags y 0x200 variables nuevas, y ahora si, con esto ya puedes ponerte a gastar flags y variables como si no hubiera mañana (?)

Es todo, saludos!!!
.
 

PabloGTD

WiiU developer
Respuesta: FR | ASM | Extendiendo las Flags y Variables Disponibles

Esto mola y me viene de vicio.

Te quiero tío (no homo).

P.D: tengo una buena cantidad de alcohol en sangre, así que no he entendido bien lo de las XX. Ya lo miro en otro rato.
 

MegaSceptile9

Usuario mítico
Respuesta: FR | ASM | Extendiendo las Flags y Variables Disponibles

Esto mola y me viene de vicio.

Te quiero tío (no homo).

P.D: tengo una buena cantidad de alcohol en sangre, así que no he entendido bien lo de las XX. Ya lo miro en otro rato.
En las XX va el offset permutado de donde pusiste la rutina.
Por ejemplo, si insertaste la rutina en el offset 800000 en esas XX pondrás ese offset, pero permutado, o sea al revés y +1
------------------------------------------

Es bastante simple, pero lo que no entendí fueron las notas ._.
Entonces si uso esto no podré usar las flag, por ejemplo, 500?
 

KERBEROS

Usuario de Platino
Respuesta: FR | ASM | Extendiendo las Flags y Variables Disponibles

Esto funciona si tengo la dex expandida , pero con PGE?
 
Arriba