2008
05.05

¡Vaya! Ya han pasado dos meses desde mi última entrada.
¿Que en qué he estado metido? Bueno, pues ahora mismo, aparte de trabajar 😉 estoy haciendo el doctorado de Física e Informática en la Universidad de La Laguna.

Mis temas favoritos son, sí, lo has adivinado, Computación paralela y Lenguajes de Computadoras (Compiladores, Procesadores de Lenguajes, etc…)

Ahora mismo estoy trabajando, en mis (pocos) ratos libres, en desarrollar un compilador cruzado de BASIC para ZX Spectrum. Está escrito en python, y bastante avanzado ya (espero terminarlo este mes). Se trata de un compilador de 3 fases, cuyo backend produce código para Z80. Así que debería ser muy fácil producir código micros basados en esta CPU, como el AMSTRAD o el MSX, etc… Implementarlo para otras arquitecturas (o incluso para que produzca código para Java o .NET) no debería ser muy complicado, ya que sólo habría que cambiar el backend.

Respecto al lenguaje que compila, no es exactamente el BASIC original del ZX Spectrum, sino una variante más moderna, que permite funciones, y estructuras de control de flujo más complejas, llamada FreeBasic. En esta web tienes la especificación completa, aunque no todas las cosas están implementadas por motivos obvios.

Algunas de las características:

  • Definición de funciones con ámbito local y paso de parámetros por valor y por referencia
  • Arrays multidimensionales de cualquier tipo de dato
  • Paso de cadenas por valor y por refencia
  • Gestor de memoria dinámica
  • Código ASM inline dentro del BASIC
  • Completamente extensible con tus propias funciones

Puedes descargar las versiones alfa actuales, o visitar los foros para comentarios y sugerencias, etc…

Actualización: Lo acabo de terminar! Visita la página del compilador para más información.

Share
  1. Bueno, en la versión 1.0.2 (que ya está disponible para descargar) ya tienes el PAUSE de toda la vida (implementado como una sentencia). Así que los programas de ZX Spectrum son más compatibles que antes. 😉

    Like or Dislike: Thumb up 0 Thumb down 0

  2. Hola.
    cest la PAUSE, vive la PAUSE!
    Creo que es perfecto eso de que la funciones esten en una librería pues eso permirtiría incrementar la lista a diferencia del original speccy. Por ejemplo Betabasic le añadía funciones mucho más típicas de gwbasic como INSTRING o STRING$ o USING.
    Excepto por la memoria y el video, Betabasic ya dotaba al spectrum de comandos propios de otras máquinas y le añadió DEFPROC antes que naciera QB para PC’s.

    Like or Dislike: Thumb up 0 Thumb down 0

  3. Hola, Francisco:

    Gracias por tus felicitaciones. Lo cierto es que el comando PAUSE no lo puse, porque lo vi muy específico para la plataforma ZX, y me gustaría que este compilador sirviera para otras plataformas en el futuro.

    PAUSE al final está implementado como una función. PAUSE(xx), y además, hay que poner al principio del programa un #include:
    #include once <pause.bas>

    …para usar la librería. Pero dado varias personas (incluido tu 🙂 ) insisten en ello, en la siguiente versión del compilador la pondré como instrucción del BASIC.

    La definición de PAUSE xx es: Hacer una pausa durante xx “cincuentavos” de segundo (sesentavos en EE.UU) salvo que se pulse una tecla. Como puedes ver es poco estándar. Por eso la saqué a una librería (como POINT o ATTR).

    Piensa que este BASIC también podría correr sobre Java, .NET, Linux o PS3 por poner un ejemplo.

    Like or Dislike: Thumb up 0 Thumb down 0

  4. Hola.
    primero que nada mis felicitaciones por este proyecto de hacer un compilador para el viejo Gomas. he releido toda la lista de sentencias disponibles compatibles sinclair basic pero no veo una que he extrañado en todas las otras versiones de basic la instrucción PAUSE que siempre he considerado muy util en diversos casos.

    Like or Dislike: Thumb up 0 Thumb down 0

  5. […] on my behalf, have something else to celebrate: I’ve eventually released 1.0 version of the ZX Spectrum BASIC compiler. You can download it and give it a try, if […]

    Like or Dislike: Thumb up 0 Thumb down 0