Un poco de ensamblador...

Soporte técnico sobre los lanzamientos de MojonTwins y comentarios sobre los güegos. Ofrecemos soporte técnico con Fourspriter, te ayudamos con ZX Basic o Z88DK, te damos pistas some cómo saltarse un bicho y cosas así.

Moderador: na_th_an

Avatar de Usuario
na_th_an
Mensajes: 26412
Registrado: Vie, 09 Ene 2009, 12:18

Re: Un poco de ensamblador...

Mensajepor na_th_an » Lun, 09 Mar 2015, 08:42

:picha: :picha:
Mi kung fu no será el mejor, pero al menos es efectivo XD
Como diría Rorshach: "Urm..."
Avatar de Usuario
elborra
Mensajes: 209
Registrado: Dom, 12 Ene 2014, 14:37

Re:

Mensajepor elborra » Mar, 10 Mar 2015, 19:29

na_th_an escribió:Si de verdad quieres ganar un montón de velocidad y espacio (sobre todo, espacio) y tienes tiempo y un buen editor de texto, hay dos cosas que puedes hacer :

1. Eliminar todas las variables locales y sustituirlas por globales. Hay muchas que se pueden reaprovechar. El acceso a una global es más rápido y ocupa menos instrucciones.

2. Cargarte todas las estructuras que puedas, por ejemplo player, y cambiarlo por globales normales. Esto lo puedes conseguir sustituyendo player.x por player_x y todas las demás. Hay algunas que no podrás eliminar, como las que escribe el conversor de mapas o el colocador, pero sólo con cambiar player y en_an, y bullets si lo utilizas, ganarás un montón.
Y si te sientes generoso podemos sacar eso como nueva versión de la churrera :-P


He hecho los cambios en la churrera-mod con el notepad++ de las estructuras de player (INERCIA) y de en_an [ANIMADO], los cambios los he hecho en un plis y podría hacerlo para bullets pero como no utilizo disparos no he querido tocar más. Como no tardo nada a base de expresiones regulares, si quieres, puedo hacer las modificaciones a la churrera actual (que no se muy bien cual es el enlace de la última XD) y pasartelo con esos cambios ^_^

La verdad es que yo no he percibido cambio al respecto. Los tirones de sonido entre pantallas los pude solventar más o menos con los cambios que comenté en el hilo y gracias al código ensamblador que me diste para que rularan bien. Ahí si que note algo de diferencia como digo, pero con estos últimos....muy dificil saber si hay mejora y cuantificarla si no es mirando el número de ciclos. En cualquier caso los cambios los dejo en el código porque algo harán :D ...

Thanxs again por la ayuda, y lo dicho si quieres que haga los cambios de esas tres estructuras (y las que me digas) sólo pasame el link de la churrera oficial a modificar :corchoneta:

edito: Por cierto entiendo que estructuras como ANIMADO que luego la variable en_an es un array de la estructura tengo que convertirlo a una variable que sea un array del tipo de la variable. Un ejemplo siempre mejor:

Código: Seleccionar todo

typedef struct {
   unsigned char base_frame;
   unsigned char frame;
.......
} ANIMADO
ANIMADO en_an [3];

pasaría a

Código: Seleccionar todo

char en_an_base_frame[3];
char en_an_frame[3]
Avatar de Usuario
na_th_an
Mensajes: 26412
Registrado: Vie, 09 Ene 2009, 12:18

Re: Un poco de ensamblador...

Mensajepor na_th_an » Mié, 11 Mar 2015, 08:09

Sí, exacto, ese sería el cambio para los arrays de estructuras. Yo uso prefijos para no liarme, por ejemplo con las de bullets. bullets [i].x pasaría a ser bullets_x [i].

Los cambios en velocidad cuesta más verlos pero a medida que complicas el motor, sobre todo con disparos y comprobaciones varias, se nota. Ya te digo que Ninjajar! empezó con Churrera 3.99c y el cambio se nota.

De todos modos estas cosas lo que tienen, sobre todo, es que hacen que el motor abulte menos. Ganas bytes para otras cosas y puedes hacer motores más complejos o meter más contenido. El tema se nota también con las variables locales. Sólo quitar todos los "i" de locales, crear una variable global, y sustituirla en todos los bucles (cuidao con esto: si reutilizas una global asegúrate de que no va a corromperse su valor en un bucle que se ejecute en una función a la que se llama dentro de otro bucle que emplée el mismo índice) también se gana tela.

Ten en cuenta que, en código compilado, una variable global termina siendo en las instrucciones sustituida por una dirección fija de memoria, mientras que una local, al hallarse en la pila, genera un código para ser accedida más complejo.
Como diría Rorshach: "Urm..."

Volver a “Ayuda”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 5 invitados