Karoshi MSX Community
05 de Julio de 2021, 03:29:00 pm *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión
Noticias:
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: [1]
  Imprimir  
Autor Tema: Truquitos y optimizaciones en ASM  (Leído 4144 veces)
0 Usuarios y 1 Visitante están viendo este tema.
j4mk3
Karoshi Maniac
****
Mensajes: 376


MSx Powa!


WWW Email
« : 28 de Diciembre de 2013, 12:26:31 pm »

Tengo una propuesta para los gurus del ASM. Cool

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" Smiley 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? Wink
Seguro que los teneis mejores y buenisimos.
En línea

---  G Fan  ---  Galious & Gradius  & G Boys   ---
--- Play HANS' ADVENTURE, STAN, THE DREAMER & BITLOGIC ---
theNestruo
Karoshi Lover
***
Mensajes: 236


Email
« Respuesta #1 : 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:
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í Wink )
En línea

theNestruo."Old BASIC programmers never die; they GOSUB but never RETURN."
SapphiRe_MSX
Visitante
« Respuesta #2 : 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...
En línea
j4mk3
Karoshi Maniac
****
Mensajes: 376


MSx Powa!


WWW Email
« Respuesta #3 : 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! Wink

Ves Sapphire!?
Estas cosas a veces se me escapan  Smiley

Una guia ya Smiley please.
« Última modificación: 30 de Diciembre de 2013, 06:58:57 pm por j4mk3 » En línea

---  G Fan  ---  Galious & Gradius  & G Boys   ---
--- Play HANS' ADVENTURE, STAN, THE DREAMER & BITLOGIC ---
theNestruo
Karoshi Lover
***
Mensajes: 236


Email
« Respuesta #4 : 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! Wink

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 Grin

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


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

theNestruo."Old BASIC programmers never die; they GOSUB but never RETURN."
aorante
Karoshi Maniac
****
Mensajes: 451


nuTella Power!


WWW Email
« Respuesta #5 : 15 de Enero de 2014, 07:13:50 pm »

casuality!!  Cheesy

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.
En línea

--------------------------------- ------ ----- --- -- -
aorante/303bcn
http://aorante.blogspot.com
http://twitter.com/#!/aorante
http://303bcn.wordpress.com/
--------------------------------- ------ ----- --- -- -
Dioniso
Visitante
« Respuesta #6 : 15 de Enero de 2014, 09:49:12 pm »

casuality!!  Cheesy

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 Smiley

Si el valor era 2, sí. Esas cositas están también en el concurso de Pong 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.
En línea
Páginas: [1]
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.21 | SMF © 2013, Simple Machines XHTML 1.0 válido! CSS válido!