Saludos desde una lejana galaxia! XD

Chit chat general. Habla con los MojonTwins y con los amigos de los MojonTwins. Reza a Vah-ka. Delinque. Aviso: está PROHIBIDO tirarse peos fuerte. Si les cortas el pescuezo, vale.

Moderador: na_th_an

Avatar de Usuario
D_Skywalk
Mensajes: 352
Registrado: Mar, 01 Oct 2013, 13:36

Re: Saludos desde una lejana galaxia! XD

Mensajepor D_Skywalk » Vie, 11 Oct 2013, 13:05

^^_

A ver que sigo porculizando XD

Por que mientras sea menor de 250 debe ser 1?

Código: Seleccionar todo

unsigned char espera_activa (int espera) {
   unsigned char res = 1;
   
   while (espera-- && res) {
           gpit = 0;
      while ( gpit++ < 250) { res = 1; }
      if (sp_GetKey ()) res = 0;
   }
   
   return res;
}


No entiendo la utilidad que tiene, si ya es 1 y el único que la puede poner a 0 es getkey, pero se comprueba despues...

Un Saludo :zumba:
Pd: si la cambiamos a unsigned char, ganamos otros 20bytes, y realmente se necesita devolver algo por que como void ganamos otros 10 XD

[UPDATE]

Mira que cosa tan colleja:

Código: Seleccionar todo

void espera_activa (int espera) {
   unsigned char res = 1;
   do {
      gpit = 250;
      while (--gpit);
      if (sp_GetKey ()) res = 0;
   }while (espera-- && res);
}

do while pesa menos que el while... no preguntes que no se por que XD

Esta misma técnica se puede usar en todos los init_bullets, init_malotes... y ganar mucho más aunque se hagan de arriba hacia abajo en lugar de abajo hacia arriba

Un Saludo! :parsons:
Última edición por D_Skywalk el Vie, 11 Oct 2013, 13:19, editado 1 vez en total.
David Skywalker
Weblog: http://david.dantoine.org
Avatar de Usuario
na_th_an
Mensajes: 26412
Registrado: Vie, 09 Ene 2009, 12:18

Re: Saludos desde una lejana galaxia! XD

Mensajepor na_th_an » Vie, 11 Oct 2013, 13:18

Es solo para perder tiempo. Si no ponía nada dentro del bucle, z88dk lo optimizaba y no me valía con un unsigned char para esperar. Por eso hago una asignación inocua. Sólo sirve para gastar tiempo.

Originalmente en vez de esa linea habia un HALT de código máquina, pero para eso hay que tener activadas las interrupciones (HALT para la CPU hasta que llegue la siguiente interrupción, y eso pasa cada 20ms). Pasaba de activar las interrupciones (que consumen algo de tiempo por cada frame) si sólo las iba a usar para eso. De todos modos, si no te gusta, puedes probar a hacer esto, aunque no sé si se ahorrará mucho:

Código: Seleccionar todo

unsigned char espera_activa (int espera) {
   unsigned char res = 1;
   gpit = 0;
   #asm
       ei
   #endasm
   while (espera-- && res) {
      #asm
          halt
      #endasm
      if (sp_GetKey ()) res = 0;
   }
   #asm
       di
   #endasm
   return res;
}


Se puede mejorar, de todos modos. Lo tengo cambiado en la versión en la que estoy trabajando ahora, simplemente porque aunque antes sí que se usaba el valor devuelto (para diferenciar si habiamos pulsado una tecla o se había acabado el tiempo), desde hace algunas versiones ya no se usa. Ahora la función es más sencilla:

Código: Seleccionar todo

void espera_activa (int espera) {
   while (--espera) {
      gpjt = 250; while (--gpjt) { gpit = 1; }
      if (sp_GetKey ()) break;
   }
}


Si dices que do..while ocupa menos, lo cambiaré.
Como diría Rorshach: "Urm..."
Avatar de Usuario
na_th_an
Mensajes: 26412
Registrado: Vie, 09 Ene 2009, 12:18

Re: Saludos desde una lejana galaxia! XD

Mensajepor na_th_an » Vie, 11 Oct 2013, 13:19

Digo, ocupa 5 bytes menos. Misterios.

Qué pena que splib2 no esté para sdcc :lol:
Como diría Rorshach: "Urm..."
Avatar de Usuario
D_Skywalk
Mensajes: 352
Registrado: Mar, 01 Oct 2013, 13:36

Re: Saludos desde una lejana galaxia! XD

Mensajepor D_Skywalk » Vie, 11 Oct 2013, 13:24

Mejor no llegar al ASM... que entonces no hay fin XD

na_th_an escribió:Si dices que do..while ocupa menos, lo cambiaré.

Parece depender del código interno, pero si son 2bytes más :)

Estoy agilipollao, como no he pensado en el break XD

Código: Seleccionar todo

void espera_activa (int espera) {
   do {
        gpit = 0xFA; // 250
      while (--gpit) gpij = 1; // do nothing, but do something ;)
      if (sp_GetKey ()) break;
   }while (espera--);
}


:ymca:
Última edición por D_Skywalk el Vie, 11 Oct 2013, 13:25, editado 1 vez en total.
David Skywalker
Weblog: http://david.dantoine.org
Avatar de Usuario
na_th_an
Mensajes: 26412
Registrado: Vie, 09 Ene 2009, 12:18

Re: Saludos desde una lejana galaxia! XD

Mensajepor na_th_an » Vie, 11 Oct 2013, 13:25

El mío ha quedao así.

Código: Seleccionar todo

void espera_activa (int espera) {
   do {
      gpjt = 250; do { gpit = 1; } while (--gpjt);
      if (sp_GetKey ()) break;
   } while (--espera);
}


Lo del 0xfa que es, por frikear? XD
Como diría Rorshach: "Urm..."
Avatar de Usuario
D_Skywalk
Mensajes: 352
Registrado: Mar, 01 Oct 2013, 13:36

Re: Saludos desde una lejana galaxia! XD

Mensajepor D_Skywalk » Vie, 11 Oct 2013, 13:26

na_th_an escribió:El mío ha quedao así.

Código: Seleccionar todo

void espera_activa (int espera) {
   do {
      gpjt = 250; do { gpit = 1; } while (--gpjt);
      if (sp_GetKey ()) break;
   } while (--espera);
}


Lo del 0xfa que es, por frikear? XD

Si XDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD

Ocupa 6 bytes más... :P

[UPDATE]
Error!! ocupan lo mismo puto z88dk... XD

[UPDATE2]
Vale, es la asignación...

Sigo haciendo pruebas XD
118 bytes free

Código: Seleccionar todo

void espera_activa (int espera) {
   while (espera--){
        gpit = 0xFA; // 250
      while (--gpit); // do nothing, but do something ;)
      if (sp_GetKey ()) break;
   }
}


120 bytes free

Código: Seleccionar todo

void espera_activa (int espera) {
   do{
        gpit = 0xFA; // 250
      while (--gpit); // do nothing, but do something ;)
      if (sp_GetKey ()) break;
   }while (espera--);
}


Si añado la asignacion ocupan igual... curioso :?

[UPDATE 3]
Finalmente así quedó:

Código: Seleccionar todo

void espera_activa (int espera) {
   do{
        gpit = 0xFA; // 250
      do {
          gpjt = 1; // do nothing, but do something ;)
      }while (--gpit);
      if (sp_GetKey ()) break;
   }while (espera--);
}

Uso gpjt, para usar siempre la misma variable para los bucles y no liarme, no es por llevar la contraria XD
Última edición por D_Skywalk el Vie, 11 Oct 2013, 13:40, editado 1 vez en total.
David Skywalker
Weblog: http://david.dantoine.org
Avatar de Usuario
na_th_an
Mensajes: 26412
Registrado: Vie, 09 Ene 2009, 12:18

Re: Saludos desde una lejana galaxia! XD

Mensajepor na_th_an » Vie, 11 Oct 2013, 13:38

Si no haces nada en el bucle interno la espera es menor y habría que recalcular otras cosas.

De todos modos no sabes la que tengo liada ahora mismo con las cosas nuevas que estoy preparando para la nueva versión, así que por ahora voy a dejar las optimizaciones para más adelante.
Como diría Rorshach: "Urm..."
Avatar de Usuario
na_th_an
Mensajes: 26412
Registrado: Vie, 09 Ene 2009, 12:18

Re: Saludos desde una lejana galaxia! XD

Mensajepor na_th_an » Vie, 11 Oct 2013, 13:40

Mira, estas dos también las había cambiado:

Código: Seleccionar todo

signed int addsign (signed int n, signed int value) {
   if (n >= 0) return value; else return -value;
}

unsigned char ctileoff (char n) {
   return n > 0;
}


También hay un montón de bucles for que podrían cambiarse, pero ahora mismo prefiero meter las cosas nuevas y luego ya si eso.
Como diría Rorshach: "Urm..."
Avatar de Usuario
D_Skywalk
Mensajes: 352
Registrado: Mar, 01 Oct 2013, 13:36

Re: Saludos desde una lejana galaxia! XD

Mensajepor D_Skywalk » Vie, 11 Oct 2013, 13:43

na_th_an escribió:Si no haces nada en el bucle interno la espera es menor y habría que recalcular otras cosas.

De todos modos no sabes la que tengo liada ahora mismo con las cosas nuevas que estoy preparando para la nueva versión, así que por ahora voy a dejar las optimizaciones para más adelante.

Ya ya sólo estaba mirando como se comportaba nada más que cambiando cosas pequeñas ;)

Bueno con los 200 bytes mas que llevo me podría meter la tecla Q que la dejé fuera por falta de memoria, a ver que pasa... XD

Gracias y ya no porculizo más, lo prometo... :P
David Skywalker
Weblog: http://david.dantoine.org
Avatar de Usuario
D_Skywalk
Mensajes: 352
Registrado: Mar, 01 Oct 2013, 13:36

Re: Saludos desde una lejana galaxia! XD

Mensajepor D_Skywalk » Vie, 11 Oct 2013, 13:45

na_th_an escribió:Mira, estas dos también las había cambiado:

Código: Seleccionar todo

signed int addsign (signed int n, signed int value) {
   if (n >= 0) return value; else return -value;
}

unsigned char ctileoff (char n) {
   return n > 0;
}


También hay un montón de bucles for que podrían cambiarse, pero ahora mismo prefiero meter las cosas nuevas y luego ya si eso.


Por eso te comentaba lo del git... no te lo tienes que cargar todo tu a la espalda, al menos estas zarandajas se las dejas a masocas como yo XD

Un Saludo!
David Skywalker
Weblog: http://david.dantoine.org

Volver a “General”

¿Quién está conectado?

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