Página 8 de 9

Re: Saludos desde una lejana galaxia! XD

Publicado: Vie, 11 Oct 2013, 13:05
por D_Skywalk
^^_

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 :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:
$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! :parsons:

Re: Saludos desde una lejana galaxia! XD

Publicado: Vie, 11 Oct 2013, 13:18
por na_th_an
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é.

Re: Saludos desde una lejana galaxia! XD

Publicado: Vie, 11 Oct 2013, 13:19
por na_th_an
Digo, ocupa 5 bytes menos. Misterios.

Qué pena que splib2 no esté para sdcc :lol:

Re: Saludos desde una lejana galaxia! XD

Publicado: Vie, 11 Oct 2013, 13:24
por D_Skywalk
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é.

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--);
}
')

:ymca:

Re: Saludos desde una lejana galaxia! XD

Publicado: Vie, 11 Oct 2013, 13:25
por na_th_an
El mío ha quedao así.
$this->bbcode_second_pass_code('', '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

Re: Saludos desde una lejana galaxia! XD

Publicado: Vie, 11 Oct 2013, 13:26
por D_Skywalk
$this->bbcode_second_pass_quote('na_th_an', 'E')l mío ha quedao así.
$this->bbcode_second_pass_code('', '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
$this->bbcode_second_pass_code('', 'void espera_activa (int espera) {
while (espera--){
gpit = 0xFA; // 250
while (--gpit); // do nothing, but do something ;)
if (sp_GetKey ()) break;
}
}')

120 bytes free
$this->bbcode_second_pass_code('', '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ó:
$this->bbcode_second_pass_code('', '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

Re: Saludos desde una lejana galaxia! XD

Publicado: Vie, 11 Oct 2013, 13:38
por na_th_an
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.

Re: Saludos desde una lejana galaxia! XD

Publicado: Vie, 11 Oct 2013, 13:40
por na_th_an
Mira, estas dos también las había cambiado:

$this->bbcode_second_pass_code('', '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.

Re: Saludos desde una lejana galaxia! XD

Publicado: Vie, 11 Oct 2013, 13:43
por D_Skywalk
$this->bbcode_second_pass_quote('na_th_an', 'S')i 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

Re: Saludos desde una lejana galaxia! XD

Publicado: Vie, 11 Oct 2013, 13:45
por D_Skywalk
$this->bbcode_second_pass_quote('na_th_an', 'M')ira, estas dos también las había cambiado:

$this->bbcode_second_pass_code('', '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!