Registrarse

GBA | Investigaciones sobre I/O y la RAM

Estado
Cerrado para nuevas respuestas.

ZeKro

Aioh con er corasón
Antes de que os extrañéis, sí, este es el aporte que dejó Eing en su despedida.

Todos los créditos para el, no para mí, puesto que yo no he descubierto nada, solo lo expongo aquí.
Lo expongo por que en bienvenidas, se acabaría perdiendo por la limpieza, y no es cuestión de que se pierda. Os lo dejo en una cita :



Se trata de mis ultimas investigaciones sobre el I/O y la RAM.
Ahora os dejaré unas direcciones y unos bytes colocados.
Habrán de hacer writebytetooffset a esa direccion y a su siguiente direccion. Es decir DOS wbto, por cada offset.

Panalla Modo cine.
4000044 --> 6C23

Pantalla cuadrada.
4000044 --> 6C23
4000040 --> AF50

Efectos en capas.
4000048 --> 3F1F

Msgbox transparente.
4000050 --> 413F
4000052 --> 0B04
4000052 --> 0C04
(Afecta unicamente a la bg0)

Claridad
4000050 --> 9E3F
(Afecta a todas capas menos la bg0)
4000050 --> 9F3F
(Afecta a todas las capas)

Oscuridad
4000050 --> DE3F
(Afecta a todas capas menos la bg0)
4000050 --> DF3F
(Afecta a todas las capas)

Poner a un grado máximo. (estando en un grado normal)
04000054= 0100
04000054= 0300
04000054= 0700
04000054= 0F00
04000054= 1F00

Ir poniendo la escena normal. (Estando en un grado máximo..)
04000054= 0F00
04000054= 0E00
04000054= 0C00
04000054= 0800
04000054= 0000

Colores textbox
0202F0AA --> Letras (FFFF) --> 6B31
0202f0be --> gris (0000) --> 375b
0202f0c0 --> Blanco (0000) --> ff7f
0202f0c2- --> azul claro --> 6776
0202f0c4 --> azul oscuro --> 256a
0202F0C6--> blanco (0000) --> ff7f

Coordenadas msgbox.
04000012 --> Arriba del todo (0070)
04000012 --> Casi medio arriba (0040)
04000012 --> Medio (0030)
04000012 --> Casi medio abajo (0020)
04000012 --> Abajo (0000)

Pasos que das
02026AC8
02026C88
020287EA

Datos protagonista
(Creditos Hackmew)
02024EA4 - 02024EAB= Nombre protagonista. (en hexadecimal, para saber cada caracter usar la tabla.tbl) (8 BYTES)
02024EAC = Genero (00 si eres chico, 01 si eres chica, otros bytes otros minis, surf, bici..etc.) (1 BYTE)
02024EAD = ???? (Por investigar) (1 BYTE)
02024EAE - 02024EAF = Trainer ID (2 BYTES)
02024EB0-02024EB1 = Secret ID (2 BYTES)
02024EB2-02024EB3 = Horas jugadas (2 BYTES)
02024EB4 = Minutos jugados (1 BYTE)
02024EB5 = Segundos jugados (1 BYTE)
02024EB6 = Frames (1 BYTE)
02024EB7 = ???? (1 BYTE)
02024EB8-02024EB9 = OPCIONES (2 BYTES)

Coordenadas cámara
(Creditos R!cci)
02025734 = Coordenada X
02025736 = Coordenada Y

Teclas que pulsas
(4000130)
Izquierda = DF03
Arriba = BF03
Derecha = EF03
Abajo = 7F03
A = FF01
S = FF02
Z = FE03
X = FD03
ENTER = F703
SELECT = FB03
AS = FF00
AZ = FE01
AX = FD01
SZ = FE02
SX = FD02
ZX = FC03

silenciar juego
4000084 = 0B00

Mini protagonista pointer y paleta
02020648 (3bytes) --> Cambiarlos por pointer del nuevo mini.
020377FA (30 bytes) --> Cambiar por values de paletas.

Para hacer más grande el textbox:
Ir al mapviewer, hacer click en el texbox en la zona cambiar y poner el byte de la zona a colocar.
No es un manual, es solamente un aporte de direcciones para que los useis, o hagais lo que os de la gana con ellos.

Pues eso, ahí os lo dejo. ;)
 

eing

Miembro de honor
Miembro de honor
Gracias zekro por dejarlo aquí, servirá de mucho.
Aunque creo que nos seria más fácil si la gente en vez de tomar eso directamente, se molestase en documentarse más y usar la lógica a la hora de investigar y programar..
Aunque eso es algo más dificil, puesto que cuanta gente de aquí le gustan los scripts/programar?
La mayoría scriptea porque no tiene otro remedio, como yo.. que si hago algo relacionado con el pixelart es porque no tengo a quien lo haga si no ni eso xd
 

Invert

why so serious?
¡Hey!
Que buena investigación esta bro, no la había visto.
Supongo que muchos usarán writebytetooffset para esto.
Pues si se hace con ASM será mucho más fácil.
4000044 --> 6C23
Un pequeño ejemplo:

Haré la pantalla modo cine.
Código:
push {lr}
ldr r1, =0x236C @6c23
mov r0, #0x44 @4000044
ldr r2, =0x8000a39 @Esta dirección es la de la funcion Set LCD IO, con los datos anterior mente situados esta función se encarga de mostrarlos en la pantalla.
bl call_r2

call_r2: bx r2
y suponiendo de que queremos varias de estas en una sola rutina, puedo suponer que sería algo como esto:
Como en un script, haré un compare 0xvar 0xvalor.

Código:
push {lr}
ldr r0, 0x020370ba @Direccion de la variable 8001
ldrb r0,[r0]
cmp r0, #1 @Compara la variable 0x8001 con el valor 0x1
beq Cine @Si se cumple va a la etiqueta Cine.

Cine:
ldr r1, =0x236C @6c23
mov r0, #0x44 @4000044
ldr r2, =0x8000a39 @Esta dirección es la de la funcion Set LCD IO, con los datos anterior mente situados esta función se encarga de mostrarlos en la pantalla.
bl call_r2

call_r2: bx r2
Esa sería una buena opción...
 

eing

Miembro de honor
Miembro de honor
¡Hey!
Que buena investigación esta bro, no la había visto.
Supongo que muchos usarán writebytetooffset para esto.
Pues si se hace con ASM será mucho más fácil.
4000044 --> 6C23
Un pequeño ejemplo:

Haré la pantalla modo cine.
Código:
push {lr}
ldr r1, =0x236C @6c23
mov r0, #0x44 @4000044
ldr r2, =0x8000a39 @Esta dirección es la de la funcion Set LCD IO, con los datos anterior mente situados esta función se encarga de mostrarlos en la pantalla.
bl call_r2

call_r2: bx r2
y suponiendo de que queremos varias de estas en una sola rutina, puedo suponer que sería algo como esto:
Como en un script, haré un compare 0xvar 0xvalor.

Código:
push {lr}
ldr r0, 0x020370ba @Direccion de la variable 8001
ldrb r0,[r0]
cmp r0, #1 @Compara la variable 0x8001 con el valor 0x1
beq Cine @Si se cumple va a la etiqueta Cine.

Cine:
ldr r1, =0x236C @6c23
mov r0, #0x44 @4000044
ldr r2, =0x8000a39 @Esta dirección es la de la funcion Set LCD IO, con los datos anterior mente situados esta función se encarga de mostrarlos en la pantalla.
bl call_r2

call_r2: bx r2
Esa sería una buena opción...
Magnifica idea pabel!
Pero se te paso un errorcillo en la rutina, y es que si es 0, va a cine tambien.
El bx r2 deberia ir debajo del beq

Buen trabajo!
 

jiangzhengwenjz

Usuario mítico
Re: Respuesta: GBA | Investigaciones sobre I/O y la RAM

¡Hey!
Que buena investigación esta bro, no la había visto.
Supongo que muchos usarán writebytetooffset para esto.
Pues si se hace con ASM será mucho más fácil.
4000044 --> 6C23
Esa sería una buena opción...
We should pop the r15 to return to where the function is called. Another thing is that in your piece of code the I/O register will be changed whether the [var] is 0 or 1 or not.
 
M

Miembro eliminado 28262

Invitado
Pues dándome un paseo por el foro encontré esta gema entre la basura, había visto cosas que no comenté porque eran del 2013, pero esto no lo había visto nunca antes, sin duda es un gran recopilatorio, muy util incluso en estos días.
Comento no solo para uppear el tema y que más sepan de su existencia si no también para dejar mi WARD.

Saludos y Buenas vibras!
 
Estado
Cerrado para nuevas respuestas.
Arriba