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?
$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:
Ú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: 26413
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:

$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..."
Avatar de Usuario
na_th_an
Mensajes: 26413
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

$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:
Ú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