2008
05.05

Wow! My last post was two months ago!
What have I been doing meanwhile? Well, right now, besides attending my job ;) I’m attending the PhD course on Physics and Computer Science at Universidad de La Laguna.

My favorite subjects are, yes, you guess it, Parallel computing and Computer languages (Compilers, Language processors, etc…)

I’m currently programming a ZX Spectrum BASIC cross compiler in my (little) spare time. It’s entirely written in python, and almost finished (hope to release V1.0 this month). It’s a three stage retargeable compiler. The backend outputs Z80 code, so it should be easily portable to other Z80 micros such as AMSTRAD or MSX. Porting to other architectures, or even to .NET or Java it’s also possible by changing the backend module could also be implemented.

Regarding to the language, It’s not the ZX Spectrum original BASIC but a dialect very close to FreeBasic which allows function definitions and more complex control-flow structures. The URL contains an almost complete specification, although not all of them has been implemented in the ZX for obvious reasons.

Some features:

  • Function definitions with local variable scopes and parameters by reference or value
  • Multidimensional arrays of any data type
  • Strings passed by value or reference
  • Dynamic memory heap
  • Inline ASM code
  • Completely extensible with your own functions

You can download current alpha builds or visit the forum for suggestions, comments, etc.

Update: I’ve just finished it! Visit the compiler page for more information.

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