Karoshi MSX Community

Desarrollo MSX => Desarrollo (Español/Spanish) => Mensaje iniciado por: j4mk3 en 28 de Diciembre de 2013, 12:26:31 pm



Título: Truquitos y optimizaciones en ASM
Publicado por: j4mk3 en 28 de Diciembre de 2013, 12:26:31 pm
Tengo una propuesta para los gurus del ASM. 8)

He pensado que estaría bien tener recopilado aquí en algún post de desarrollo una lista de optimizaciones y trucos en ASM, con su explicación del porque funciona, sus excepciones, cuando usarlo...
Así podríamos consultarla y tenerla de referencia cuando nos ponemos a hacer nuestros "jueguillos" :) A lo que me refiero con "trucos" es a cosas así:

  • Usar OR A cuando vas a hacer un CP 0. Así ocupa menos bytes en ROM
  • XOR A para poner a cero el acumulador. Es más rápida y ocupa menos espacio en ROM ya que no guarda un cero despues de la instrucción.
  • Usar siempre que sea posible JR en vez de JP para poder ahorrar bytes en ROM. Aunque está limitado a saltos muy cercanos.
  • Dividir y multiplicar con rotaciones para x2 , x4 , 8 , x16,... 2^N
  • El Uso de PUSH y POP para hacer LD de 16 bits entre registros.

¿Os animais a compartir vuestros "truquetes" y consejos? ;)
Seguro que los teneis mejores y buenisimos.


Título: Re:Truquitos y optimizaciones en ASM
Publicado por: theNestruo en 28 de Diciembre de 2013, 04:21:42 pm
Hola j4mk3!

Veo dónde quieres llegar y me parece muy interesante pero, y aunque es verdad que tener un listado de páginas externas no es lo mejor (el día de mañana desaparecen y la información se pierde), sí que creo que sería un poco "reinventar la rueda". Unos enlaces de ejemplo:
  • http://z80-heaven.wikidot.com/optimization (Z80 Heaven)
  • http://wikiti.brandonw.net/index.php?title=Z80_Optimization (WikiTI)
  • http://map.grauw.nl/articles/fast_loops.php (MSX Assembly Page)
A lo mejor lo que se puede hacer es partir de ahí y comentar usos concretos en plan "pues yo este truco lo uso aquí para tal y cual y pascual". Como un hilo de snippets, pero de cosas que no pueden llegar a considerarse snippets (aunque yo he publicado cosas bastante triviales allí ;) )


Título: Re:Truquitos y optimizaciones en ASM
Publicado por: SapphiRe_MSX en 30 de Diciembre de 2013, 10:38:13 am
  • El Uso de PUSH y POP para hacer LD de 16 bits entre registros.

Ocupa lo mismo hacer dos ld de 8 bits que un push y un pop, y encima consume menos ciclos...


Título: Re:Truquitos y optimizaciones en ASM
Publicado por: j4mk3 en 30 de Diciembre de 2013, 06:43:02 pm
No no no theNestruo. No un listado de páginas externas. Sino tener aquí esos "briconsejos" en una lista, como la que he iniciado yo, pero cotejada y bien puesta.
Eso como un snipets...pero solo 1 parrafo de explicación, el porque usar eso como "truquete".
Aunque ya veo que esas páginas dan mucha de la info que decia de recopilar...mmm. Super interesante! ;)

Ves Sapphire!?
Estas cosas a veces se me escapan  :)

Una guia ya :) please.


Título: Re:Truquitos y optimizaciones en ASM
Publicado por: theNestruo en 30 de Diciembre de 2013, 07:34:02 pm
No no no theNestruo. No un listado de páginas externas. (...) Aunque ya veo que esas páginas dan mucha de la info que decia de recopilar...mmm. Super interesante! ;)

Claro, por eso te decía tomar esos enlaces como "punto de partida"; para no repetir todo. Lo que se podría comentar aquí es (aparte de optimizaciones que no estén en otro lado) particularidades del mundo MSX: "pues esta optimización con el T-State extra del MSX no optimiza nada", "pues yo utilicé nosecuál optimización y me salieron granos"; ese tipo de cosas ;D

...y ¡qué leches! ¡que mola mucho más leerlo de gente que "conoces" que leerlo en una aséptica página web! ;)


P.D.: Cambiando de tercio, ¿la presentación que hiciste en la RuMSX (¿"juegos diferentes"?) se puede conseguir de alguna manera?


Título: Re:Truquitos y optimizaciones en ASM
Publicado por: aorante en 15 de Enero de 2014, 07:13:50 pm
casuality!!  :D

hoy mirando la BIOS (en CHGMOD) he visto que usa dec A y un salto, ahora se que se refiere a cp 1

Estaría interesante un blog con temas de desarrollo. Las entradas de blogger salen muy bien en las búsquedas de google. Los tags también van muy bien para organizar la info.


Título: Re:Truquitos y optimizaciones en ASM
Publicado por: Dioniso en 15 de Enero de 2014, 09:49:12 pm
casuality!!  :D

hoy mirando la BIOS (en CHGMOD) he visto que usa dec A y un salto, ahora se que se refiere a cp 1

Estaría interesante un blog con temas de desarrollo. Las entradas de blogger salen muy bien en las búsquedas de google. Los tags también van muy bien para organizar la info.

Depende :)

Si el valor era 2, sí. Esas cositas están también en el concurso de Pong (http://) que se hizo una vez. Al fin y al cabo de trata de hacer una comparación con cero, que es lo más rápido (esto es un poco hablar por hablar). Que si tienes en A el valor de la dirección a donde girar un SPRITE, for ecsápol, y da la casualidad de que vale 3 (que sería girar a la derecha) pues haces un tal que:

(A=3 pero no lo sabemos)

DEC A
JR Z,sprite_va_arriba ;A=1 (pero al decrementarlo se ha puesto a cero)
DEC A
JR Z,sprite_va_abajo ;A=2 (pero al decrementarlo por segunda vez se ha puesto a cero)
DEC A
JR Z,sprite_va_derecha ;A=3 (pero al decrementarlo por tercera vez se ha puesto a cero)
;DEC A (ya no lo necesitamos porque no hay otra posibilidad)
;JR Z,sprite_va_izquierda (ya no lo necesitamos porque no hay otra posibilidad)
sprite_va_izquierda:
...
sprite_va_derecha:
...
sprite_va_arriba:
...
sprite_va_abajo:
...


También puedes utilizar cosas como SUB y un número.

El Japong del enlace que te menciono no es que esté muy depurado, y también hay falta de conocimientos, pero te podría ayudar.