Fusion-c

Por blackorwhite

Rookie (21)

Imagen del blackorwhite

03-07-2020, 20:29

Llevo un año con mi msx2 y el megaflash rom, y creo que ha llegado el momento de sacar partido a ese poco que aprendí de programación en la universidad... o mejor dicho ampliar lo que aprendí, porque realmente aprendí poco.
Aprendí c++ y con él hice un pequeño programa de retoque de imágenes de interfaz texto, con el que podías recortar imágenes, cambiarlas de tamaño, generar un morphing a partir de dos imágenes,... cambiar brillo-contraste... umbralizar la imagen, etc etc... En fin, una chorrada, pero que me llevó tiempo y esfuerzo.
Pero desde hace tiempo me ronda por la cabeza la idea de aprender a programar para msx. Y realmente no sé por dónde empezar. Según un vídeo que he visto, recomiendan msx-c o fusion-c.
¿Realmente vale la pena tirar a fusion-c? Supongo que viniendo de c++ me puede resultar más fácil, ¿no?

Todo lo que sabía de programación se me ha ido olvidando por no practicar en años, pero creo que puedo recuperarlo facilmente. Me entra la duda de si el libro de fusion-c me puede ayudar a ello. ¿Está hecho para aquellos que ya saben del tema? ¿O es un libro explicativo para quien empieza?
Gracias!

Login sesión o register para postear comentarios

Por PAC

Guardian (5737)

Imagen del PAC

04-07-2020, 19:39

Quizás lo mejor es que preguntes en la parte internacional, hay varios hilos abiertos sobre el tema:

https://www.msx.org/search/apachesolr_search/fusion-c?filter...

Por Juan Luis

Expert (105)

Imagen del Juan Luis

06-07-2020, 23:36

He leído anteriormente el comentario pero no te he respondido porque tengo una visión parcial del tema. Te cuento lo que sé. Fusion-C, en sí, no es un compilador.. Fusion-C es una librería basada en el compilador SDCC. No conozco el libro, pero supongo que será un libro orientado al uso de la librería en sí, como pintar líneas, círculos, sonidos, sprites, etc. Supongo que el libro tendrá bastantes ejemplos, pero te podrías encontrar con la sorpresa que el libro asume que ya sabes manejar el compilador SDCC. Sólo una persona que tenga el libro te puede aclarar éso (lo siento).

Supongo que lo sabrás, hay dos tipos de compiladores. Los compiladores nativos y los compiladores cruzados. El MSX-C de la ASCII corporation es un compilador nativo. Por otro lado están los compiladores cruzados que se ejecutan desde el PC y generan el código para MSX, como por ejemplo el SDCC y el z88dk, que son los más conocidos.

Los compiladores nativos suelen tener muchas limitaciones ya que, por lo general, compilan haciendo uso sólo de los 64KBytes direccionables del MSX. No importa que tengas mucha más memoria en el MSX. Los compiladores nativos no suelen hacer uso de esa memoria. Es el caso del MSX-C. Debido a que usan sólo 64KB, los compiladores no generan un código muy óptimo ya que no pueden almacenar en la RAM el árbol de diversas alternativas de código para luego evaluar que rama de código es la más eficiente. Eso sin contar que el Z80 no es muy rápido (tampoco el R800 es la panacea). Como ejemplo de limitación de memoria, el compilador MSX-C sólo soporta símbolos de 6 caracteres, debido al linker L80 que utiliza, que no soporta más. Fue un detalle que me desagradó bastante porque induce a muchos errores. Si el programa que vas a hacer es grande, podrías encontrarte con colisiones de nombres de variables/funciones que empiezan con los mismos 6 caracteres. Es algo parecido a lo que ocurre con el MSX-BASIC, que realmente sólo reconoce 2 caracteres como símbolo de variable. Hablando en plata, puede llegar a ser un coñazo la limitación de los 6 caracteres.

Sólo le recomiendo el uso de un compilador nativo a las personas que sean puristas y sólo acepten que la programación en MSX debe ser desde el propio MSX.

Los compiladores cruzados son mucho más potentes. Utilizan la memoria y la potencia del procesador del PC para generar el código y son rapidísimos y generan un código bastante mejor que los compiladores nativos. No tienen esos problemas y son más cómodos. Los más conocidos, suelen ser multiplataforma. Es decir, pueden generar código para el MSX, para el AMSTRAD CPC, PCW, CPM, e incluso para ordenadores que no tienen Z80.

El problema más grande que yo he encontrado con el desarrollo en C para MSX es que no suele haber posibilidad de depurar, al menos hasta donde yo sé. Yo nunca he encontrado un buen debugger que te permita parar en instrucciones de C e inspeccionar el contenido de las variables. Sin embargo, en ensamblador si he encontrado monitores nativos que lo hacen, y siempre está el propio debugger del emulador. Lo del debugger para MSX en C es un problema que está aún por resolver.

Respecto comparativa de los compiladores de C, hay varios hilos en la parte internacional hablando del tema. Uno de ellos es éste (es bastante antiguo):
https://www.msx.org/forum/msx-talk/development/state-art-c-p...

De los compiladores cruzados, yo sólo he usado el z88dk. El mayor inconveniente que he encontrado es que la documentación sobre el uso del compilador es bastante pobre.

Web z88dk:
https://www.z88dk.org/forum/

documentación del z88dk:
https://github.com/z88dk/z88dk/wiki

He sido capaz de generar código con él para MSX en todos los formatos (.bin, .rom y .com), así como para el Amstrad CPC y para el PCW. Tiene un rendimiento que me parece aceptable, si bien el rendimiento en funciones trigonométricas me parece idéntico al del MSX-BASIC. Tengo la sensación, que las trigonométricas las implementa llamando a la implementación del MSX-BASIC, pero no lo puedo asegurar. Los comandos gráficos de la librería gráfica del z88dk no fui capaz de usarlos y tuve que implementar un "wrapper" para invocar las funciones de pintar línea del MSX-BASIC desde código ensamblador inline dentro del código C.

El foro del z88dk está aparentemente muerto, pero si preguntas (en inglés, por supuesto), el administrador te responderá a tus dudas en poco tiempo. Yo le pregunté varios detalles y fue muy amable conmigo e incluso reconoció que la documentación online no estaba actualizada, pero resolvió muy bien mi duda.

Web del SDCC:
http://sdcc.sourceforge.net/

documentación del SDCC:
http://sdcc.sourceforge.net/snap.php#Docs

En el archivo sdcc-doc-20200706-11715.zip encontrarás un PDF de Mayo de este año de 128 páginas (la documentación está actualizada hace poco más de un mes). Mi opinión personal es que está mejor documentado, aunque insisto en que no he usado este compilador. La gente se queja un poco del rendimiento del código generado. No sabría decirte si es mejor compilador que el z88dk. Si te gusta el Fusion-C, tendrás que usarlo, si bien es posible que la librería Fusion-C se pueda recompilar con otros compiladores de C.

Hay otros compiladores, pero no sé nada sobre ellos.

En fin, creo que te he contado muchas cosas pero que no resuelvo tu duda, aunque espero que tengas menos dudas.