^^_
A ver que sigo porculizando XD
Por que mientras sea menor de 250 debe ser 1?
$this->bbcode_second_pass_code('', '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
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:
$this->bbcode_second_pass_code('', '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!
Saludos desde una lejana galaxia! XD
Moderador: na_th_an
Re: Saludos desde una lejana galaxia! XD
Ú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
Weblog: http://david.dantoine.org
Re: Saludos desde una lejana galaxia! XD
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:
$this->bbcode_second_pass_code('', '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:
$this->bbcode_second_pass_code('', '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é.
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:
$this->bbcode_second_pass_code('', '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:
$this->bbcode_second_pass_code('', '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..."
Re: Saludos desde una lejana galaxia! XD
Digo, ocupa 5 bytes menos. Misterios.
Qué pena que splib2 no esté para sdcc
Qué pena que splib2 no esté para sdcc
Como diría Rorshach: "Urm..."
Re: Saludos desde una lejana galaxia! XD
Mejor no llegar al ASM... que entonces no hay fin XD
$this->bbcode_second_pass_quote('na_th_an', 'S')i dices que do..while ocupa menos, lo cambiaré.
$this->bbcode_second_pass_quote('na_th_an', 'S')i 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
$this->bbcode_second_pass_code('', 'void espera_activa (int espera) {
do {
gpit = 0xFA; // 250
while (--gpit) gpij = 1; // do nothing, but do something ;)
if (sp_GetKey ()) break;
}while (espera--);
}
')
Ú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
Weblog: http://david.dantoine.org