Un compilador de ZX Spectrum BASIC

Todo sobre la creación, diseño y programación de nuevo software para
nuestro Spectrum

Moderador: Sir Cilve Sinclair

Responder
Boriel
Sabreman
Mensajes: 351
Registrado: Lun May 28, 2007 9:55 am
Ubicación: Tenerife
Contactar:

Un compilador de ZX Spectrum BASIC

Mensaje por Boriel » Lun Ene 28, 2008 12:04 am

Hola,

Ante todo presentarme. Me llamo Jose, aunque uso el pseudo Boriel (cosas del Rol). Suelo leer mucho este foro (y el grupo de news). Pero suelo escribir poco (cosas de la timidez y la falta de tiempo). :oops:

El caso es que he hecho una herramienta para crear compiladores (si alguien conoce LEX y YACC -fLEX y Bison en Linux), pues algo así. Y para probarlo, se me ha ocurrido hacer un analizador sintáctico al que se le meta un código fuente de BASIC de ZX Spectrum y escupa el ASM ya generado.

El caso es que de ZX Spectrum BASIC ya no me acuerdo mucho (estoy tirando del emulador, para ver algunas cosas). De momento estoy definiendo lo básico (nunca mejor dicho :P ). Sólo quería poner el aviso aquí, por si a alguien le interesa (el link anterior es de la herramienta para hacer el compilador de ZX, no del compilador en sí, estoy en eso ahora) y de paso saber si puedo pedir ayuda (o donde buscar info) sobre cómo compilar ciertas instrucciones o qué encuentran más útil / inútil del lenguaje.

También comentar que, dado mi escaso tiempo (estoy haciendo doctorado en la universidad, y trabajando, así que...) casi no puedo hacer nada. El generador de compiladores me ha llevado 6 meses (en los que apenas he dedicado un par de horas a la semana). Así que esto es a largo plazo.

Saludos,
Jose
http://www.boriel.com

PD: También comentar que he encontrado un bug en el intérprete de BASIC del ZX. En matemáticas, el operador de potencia (^) es asociativo por la derecha, o sea que 2^1^3 se evalúa como 2^(1^3) = 1. En cambio en el ZX se evalúa de izquierda a derecha, por lo que 2^1^3 = (2^1)^3 = 8. Supongo que habrá que tenerlo en cuenta, para compatibilidad (también es verdad que dada la limitada memoria, es lógico que se evalúe así).

Avatar de Usuario
radastan
Phantomas
Mensajes: 2232
Registrado: Lun May 07, 2007 5:34 pm
Contactar:

Re: Un compilador de ZX Spectrum BASIC

Mensaje por radastan » Lun Ene 28, 2008 12:22 am

Desde mi punto de vista te doy las gracias, si llegas a completarla será una herramienta de grandísima utilidad para la escena.

Eso si, te ruego una cosilla: que el compilador simplemente pueda recibir el fichero BAS y escupa el .ASM o el binario por comandos, sin necesidad de GUI (así se podría usar en programas como BASIN como una opción externa).

Respecto a la forma de compilar... muy simple, sustituir directamente cada instrucción por una llamada a la rutina de la ROM, con eso evitas la interpretación del BASIC y ya ganas una BARBARIDAD en velocidad de ejecución. Te recomiendo que te documentes con alguna de las ROMS desensambladas que hay por Internet.
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________

Boriel
Sabreman
Mensajes: 351
Registrado: Lun May 28, 2007 9:55 am
Ubicación: Tenerife
Contactar:

Re: Un compilador de ZX Spectrum BASIC

Mensaje por Boriel » Lun Ene 28, 2008 1:15 am

Bueno, ante todo gracias por la información y por los ánimos.
En principio sería una herramienta de línea de comandos, y funcionaría en Python (Windows, Linux). Aunque nada impediría pasarlo a C.

Por cierto, ¿Qué es el BASIN? ¿Y dónde puedo encontrar esa información de las ROMS?
Me respondo a mí mismo sobre BASIN: Acabo de encontrar algo sobre BASIN, aunque he visto en linux uno equivalente llamado ZMakeBas.

Había pensado en principio, hacer eso que dices. Es decir, interpretar yo las órdenes y llamar a la ROM. Pero pienso que eso sería lento. ¿Seguro que acelera? Por ej. Llamar a CIRCLE sería lento. Lo mismo para BEEP.

Mi idea era hacerlo para las instrucciones de punto flotante (operaciones aritméticas, trigonométricas, etc). Pero poder poner también (por ej. en líneas REM) que algunas variables fueran bytes o enteros de 16 bits. Esto podría acelerar las cosa muchísimo.

Quizá lo mejor sea empezar haciendo lo que dices, y ver si luego, una vez obtenido un prototipo medianamente funcional, se pueden hacer otras cosas.
Por cierto, un problema que tengo con el z88dk es que en mi máquina de 64bits (Linux) no está portado. :( Por paradójico que parezca, voy a tener que correr el z88dk dentro de un emulador (Virtual Box) con windows 32 bits y probablemente, dentro de él, un emulador de ZX Spectrum. :roll:

Avatar de Usuario
na_th_an
Nonamed
Mensajes: 1889
Registrado: Lun May 07, 2007 10:16 am
Ubicación: Andalucía

Re: Un compilador de ZX Spectrum BASIC

Mensaje por na_th_an » Lun Ene 28, 2008 8:20 am

Para Linux, puedes bajarte los fuentes de z88dk y compilarlos en tu target, ¿lo has probado?

Sobre BASIC, puedes echarle un vistazo a la documentación del compilador para Spectrum HiSoft BASIC, que por ejemplo implementa el uso de directivas en sentencias REM y funciona muy eficientemente (de 4x a 8x la velocidad del BASIC interpretado, dependiendo de cómo lo hagas).

Avatar de Usuario
Manu
Herbert
Mensajes: 89
Registrado: Mié Sep 05, 2007 11:35 pm
Contactar:

Re: Un compilador de ZX Spectrum BASIC

Mensaje por Manu » Lun Ene 28, 2008 9:15 am

Haciendo un poco de Offtopic, esto de los 64bits es una castaña a veces, porque por ejemplo no consigo que me compile el FUSE en "Kubuntu64" :(

Avatar de Usuario
radastan
Phantomas
Mensajes: 2232
Registrado: Lun May 07, 2007 5:34 pm
Contactar:

Re: Un compilador de ZX Spectrum BASIC

Mensaje por radastan » Lun Ene 28, 2008 9:46 am

Boriel escribió:Había pensado en principio, hacer eso que dices. Es decir, interpretar yo las órdenes y llamar a la ROM. Pero pienso que eso sería lento. ¿Seguro que acelera? Por ej. Llamar a CIRCLE sería lento. Lo mismo para BEEP.


Efectivamente, circle o beep no se benefician en ese caso mucho... pero el resto de instrucciones si. Date cuenta que sólo por quitar la interpretación del BASIC ya ganas entre 2x y 3x de velocidad según la instrucción (los print e IF ganan muchísimo más, y es lo más usado en un juego).

Empieza por trasladar a ensamblador llamadas a rutinas de la ROM de las mismas instrucciones, luego optimizas las que tu creas que son muy mejorables, y ¡voilá!.
_________________________________________
Hay otras páginas.... pero no son Bytemaniacos
http://www.bytemaniacos.com
Orgullo de 8 bits
_________________________________________

Avatar de Usuario
compiuter
Sabreman
Mensajes: 337
Registrado: Vie May 18, 2007 9:00 pm
Ubicación: Palma de Mallorca

Re: Un compilador de ZX Spectrum BASIC

Mensaje por compiuter » Lun Ene 28, 2008 1:08 pm

Cuando tengas algo, estaremos encantados de probarlo.

Avatar de Usuario
Rafa
Jack The Nipper
Mensajes: 181
Registrado: Lun May 07, 2007 11:59 am

Re: Un compilador de ZX Spectrum BASIC

Mensaje por Rafa » Lun Ene 28, 2008 2:20 pm

Yo ya lo intenté hace un tiempo, hacer un compilador Basic, y es follón, porque por un lado está el tema de cómo tratar los números (enteros y en coma flotante);
y por otro lado está el tema de los paréntesis y las prioridades en los cálculos.
RANDOMIZE USR 0

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: Un compilador de ZX Spectrum BASIC

Mensaje por mcleod_ideafix » Lun Ene 28, 2008 2:26 pm

Para eso se inventaron las gramáticas de libre contexto, el lex y el yacc :D
Larga vida a señor Donald Knuth! (inventor de las gramáticas atribuidas, aunque casi todo el mundo le conoce por inventar el lenguaje TeX para procesamiento de textos).
Web: ZX Projects | Twitter: @zxprojects

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: Un compilador de ZX Spectrum BASIC

Mensaje por mcleod_ideafix » Lun Ene 28, 2008 2:43 pm

Boriel escribió:Mi idea era hacerlo para las instrucciones de punto flotante (operaciones aritméticas, trigonométricas, etc). Pero poder poner también (por ej. en líneas REM) que algunas variables fueran bytes o enteros de 16 bits. Esto podría acelerar las cosa muchísimo.


Entonces échale un vistazo a este interesante artículo sobre algunas particularidades de la coma flotante del BASIC del Spectrum.
Web: ZX Projects | Twitter: @zxprojects

Avatar de Usuario
na_th_an
Nonamed
Mensajes: 1889
Registrado: Lun May 07, 2007 10:16 am
Ubicación: Andalucía

Re: Un compilador de ZX Spectrum BASIC

Mensaje por na_th_an » Lun Ene 28, 2008 3:48 pm

Creo que lo mejor es usar una solución intermedia:

1.- Aritmética entera, IFs, saltos, asignaciones, manejo de memoria, puertos y cadenas: generar código ASM.
2.- Resto de comandos (*) usando la ROM, y aritmética de punto flotante usando el calculador del Spectrum.

(*) Ir mejorando los que en ROM son una patata con el tiempo.

sromero
Nonamed
Mensajes: 1221
Registrado: Mar Abr 17, 2007 12:35 pm
Ubicación: Valencia
Contactar:

Re: Un compilador de ZX Spectrum BASIC

Mensaje por sromero » Lun Ene 28, 2008 4:13 pm

A mí me parece un proyecto interesantísimo.

Tener el equivalente BASIC del Z88DK podría animar a mucha gente a hacer más juegos en Spectrum ... y sí, los harían en BASIC, pero bien compiladito, y además con la comodidad de poder programar en un editor de textos de PC, y sin las limitaciones de otros compiladores de Spectrum como MCODER.

Animo con el proyecto, de él pueden salir muchos programas y juegos de todos los que saben BASIC pero no C o ASM.
NoP / Compiler

Avatar de Usuario
Manu
Herbert
Mensajes: 89
Registrado: Mié Sep 05, 2007 11:35 pm
Contactar:

Re: Un compilador de ZX Spectrum BASIC

Mensaje por Manu » Lun Ene 28, 2008 4:17 pm

Sin duda es una idea interesante, y una forma de dar algo más de velocidad a los programas escritos originalmente en BASIC sin necesidad de tener conocimientos de CM.

Avatar de Usuario
na_th_an
Nonamed
Mensajes: 1889
Registrado: Lun May 07, 2007 10:16 am
Ubicación: Andalucía

Re: Un compilador de ZX Spectrum BASIC

Mensaje por na_th_an » Lun Ene 28, 2008 5:13 pm

Ains, nunca leéis mis artículos :lol: Para eso tenemos ya el HiSoft BASIC. Aunque tener algo equivalente para PC ya sería la requete-quete. Me parece un proyecto realmente interesante.

Avatar de Usuario
Rafa
Jack The Nipper
Mensajes: 181
Registrado: Lun May 07, 2007 11:59 am

Re: Un compilador de ZX Spectrum BASIC

Mensaje por Rafa » Lun Ene 28, 2008 7:39 pm

OK. Todo el mundo dice "que es un proyecto interesante". A ver: ¿propuestas?
Yo creo que lo realmente complicado son las prioridades en el cálculo y los paréntesis. Lo demás, son chorradas.
Yo estoy dispuesto a implicarme. ¿Alguien más?
RANDOMIZE USR 0

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados