Menuda Optimización

Todo sobre la creación, diseño y programación de nuevo software para
nuestro Spectrum

Moderador: Sir Cilve Sinclair

Menuda Optimización

Notapor susso el Dom Mar 22, 2015 10:27 am

Un aporte para ahorrar ciclos:
No usar esto, siempre que no vayas a sumarle mas de un byte.

LD BC,x
ADD HL,BC

es lo más fácil, si la velocidad es crítica aunque ocupe mas memoria es mejor usar la siguiente rutina:
LD A,x
ADD A,L
JP NC,$+4
INC H
LD L,A

¡te ahorras unos 4-5 ciclos!
susso
Jack The Nipper
 
Mensajes: 146
Registrado: Mar May 07, 2013 9:42 am

Re: Menuda Optimización

Notapor antoniovillena el Dom Mar 22, 2015 12:31 pm

Algo se me escapa:

Código: Seleccionar todo
LD BC,x       ; 10 ciclos
ADD HL,BC     ; 11 ciclos
              ; Total: 21 ciclos

LD A,x        ; 7 ciclos
ADD A,L       ; 4 ciclos
JP NC,$+4     ; 10 ciclos
INC H         ; 4 ciclos
LD L,A        ; 4 ciclos
              ; Total rama 1: 25 ciclos
              ; Total rama 2: 29 ciclos
Imagen
Avatar de Usuario
antoniovillena
Nonamed
 
Mensajes: 1162
Registrado: Dom Ene 09, 2011 9:55 am

Re: Menuda Optimización

Notapor susso el Dom Mar 22, 2015 12:35 pm

10 ciclos el JP?????
susso
Jack The Nipper
 
Mensajes: 146
Registrado: Mar May 07, 2013 9:42 am

Re: Menuda Optimización

Notapor antoniovillena el Dom Mar 22, 2015 12:38 pm

susso escribió:10 ciclos el JP?????


Exacto
Imagen
Avatar de Usuario
antoniovillena
Nonamed
 
Mensajes: 1162
Registrado: Dom Ene 09, 2011 9:55 am

Re: Menuda Optimización

Notapor susso el Dom Mar 22, 2015 12:42 pm

Mmmmm... Espera espera, necesito que me corrijáis, haciendo eso me sale menos consumo de ciclos entre dos breakpoints en speculator, pero...
En realidad me ahorro un LD b,0 en la primera rutina, no hay un LD BC,x y en la segunda A ya viene con un valor establecido.
susso
Jack The Nipper
 
Mensajes: 146
Registrado: Mar May 07, 2013 9:42 am

Re: Menuda Optimización

Notapor susso el Dom Mar 22, 2015 12:45 pm

Queda así...

PRIMERA:
LD C,A
LD B,0
ADD HL,BC

SEGUNDA:
ADD A,L
JP NZ,$+4
INC H
LD L,A

¿Ahora si?

Por cierto donde están los ciclos oficiales en un spectrum, en mi libro es básico para Z80, no especificó para spectrum.
susso
Jack The Nipper
 
Mensajes: 146
Registrado: Mar May 07, 2013 9:42 am

Re: Menuda Optimización

Notapor antoniovillena el Dom Mar 22, 2015 1:01 pm

Ahora sí:

Código: Seleccionar todo
LD C,A      ;4
LD B,0      ;7
ADD HL,BC   ;11
            ;Total: 22

ADD A,L     ;4
JP NC,$+4   ;10
INC H       ;4
LD L,A      ;4
            ;Total: 18/22



Pero estás favoreciendo un caso con las condiciones iniciales. En la mayoría de los casos ADD HL,BC es más rápido. La segunda opción se emplea normalmente cuando no tienes registros libres, ya que en ese caso emplear la pila u otro mecanismo para liberarlos sí que sería más lento. Si por ejemplo hubiese que sumar un array de bytes, la primera opción sería rapidísima, ya que el LD B,0 formaría parte de la inicialización, no del bucle.

En el datasheet del Z80 están los ciclos de cada instrucción. También hay documentos de texto con listados de instrucciones y ciclos en www.z80.info.
Imagen
Avatar de Usuario
antoniovillena
Nonamed
 
Mensajes: 1162
Registrado: Dom Ene 09, 2011 9:55 am

Re: Menuda Optimización

Notapor susso el Dom Mar 22, 2015 1:04 pm

Ok! Muchas gracias por la aclaración, maestro. Si, efectivamente, no tenía registros libres.
susso
Jack The Nipper
 
Mensajes: 146
Registrado: Mar May 07, 2013 9:42 am

Re: Menuda Optimización

Notapor Alxinho el Dom Mar 22, 2015 8:43 pm

Soys unos p#@s máquinas :lol:
Retrobytes Productions --> http://retrobytesproductions.blogspot.com.es

Soy un tío feliz, más que nada ... porque me sale más a cuenta.
Avatar de Usuario
Alxinho
Freddy Hardest
 
Mensajes: 896
Registrado: Mar Jun 19, 2007 11:20 am
Ubicación: Barcelona

Menuda Optimización

Notapor susso el Dom Mar 22, 2015 10:30 pm

Alxinho escribió:Soys unos p#@s máquinas :lol:

Bueno, aun no he sacado nada, tu si que tienes mérito. :-)
susso
Jack The Nipper
 
Mensajes: 146
Registrado: Mar May 07, 2013 9:42 am

Re: Menuda Optimización

Notapor Alxinho el Lun Mar 23, 2015 7:16 am

Yo me tengo que poner en serio de verdad YA con el código máquina.
¿Pero estás con algún proyecto en marcha?¿Se puede ver algo?
Retrobytes Productions --> http://retrobytesproductions.blogspot.com.es

Soy un tío feliz, más que nada ... porque me sale más a cuenta.
Avatar de Usuario
Alxinho
Freddy Hardest
 
Mensajes: 896
Registrado: Mar Jun 19, 2007 11:20 am
Ubicación: Barcelona

Re: Menuda Optimización

Notapor susso el Lun Mar 23, 2015 11:58 am

Te animo a que lo hagas, aunque tenía ya conocimientos del asm 68000 del Amiga se me olvidó por completo, no trates de ponerte metas, hazlo poco a poco, no es difícil ni fácil, pero si es muy satisfactorio.
Con el z80 empecé con los tutos de Santiago Romero, alojados aquí en Speccy.org, si te atascas vuelve atrás. Sigue cada párrafo al detalle, no te saltes nada.
Y si, estoy haciendo algo, pero todavía es pronto para enseñar nada y no me corresponde a mi mostrarlo.
Un abrazo y ánimos.
susso
Jack The Nipper
 
Mensajes: 146
Registrado: Mar May 07, 2013 9:42 am

Re: Menuda Optimización

Notapor Alxinho el Lun Mar 23, 2015 12:47 pm

Es con lo que estoy, con los de Santiago. Gracias por los ánimos y a ver cuándo se puede ver algo! :D
Retrobytes Productions --> http://retrobytesproductions.blogspot.com.es

Soy un tío feliz, más que nada ... porque me sale más a cuenta.
Avatar de Usuario
Alxinho
Freddy Hardest
 
Mensajes: 896
Registrado: Mar Jun 19, 2007 11:20 am
Ubicación: Barcelona

Re: Menuda Optimización

Notapor susso el Lun Mar 23, 2015 1:18 pm

Cualquier duda me puedes encontrar por Twitter como @leanderpixel
susso
Jack The Nipper
 
Mensajes: 146
Registrado: Mar May 07, 2013 9:42 am

Re: Menuda Optimización

Notapor Alxinho el Lun Mar 23, 2015 2:45 pm

Ok, muchas gracias :wink:
Retrobytes Productions --> http://retrobytesproductions.blogspot.com.es

Soy un tío feliz, más que nada ... porque me sale más a cuenta.
Avatar de Usuario
Alxinho
Freddy Hardest
 
Mensajes: 896
Registrado: Mar Jun 19, 2007 11:20 am
Ubicación: Barcelona

Siguiente

Volver a Programación y nuevos desarrollos

¿Quién está conectado?

Usuarios navegando este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron