Activa las notificaciones para estar al tanto de lo más nuevo en tecnología.

Cómo escribir un compilador de Pascal para un procesador 6502 (parte I)

Imaginen que trabajan en una compañía de software y su jefe propone un nuevo proyecto: un compilador de Pascal. El asunto ya de entrada no...

g-pascal00

Imaginen que trabajan en una compañía de software y su jefe propone un nuevo proyecto: un compilador de Pascal. El asunto ya de entrada no resulta trivial, pero cuando el jefe empieza a describir las características que debe tener el sistema, encontramos que fácil no será: se busca que el software ocupe solamente 16K (sí, 16Kbytes). Que además, de ser posible, tenga un editor de código integrado. Debe ser rápido, por lo cual debe escribirse en lenguaje ensamblador y por si esto fuera poco, se ha decidido usar un procesador de 8 bits, el 6502.

El reto suena fantástico y un programador australiano, en los años 80s, decidió trabajar en este proyecto, el cual incluso se convirtió en un compilador comercial, que corría en las máquinas Commodore 64 y Apple II. El software fue bautizado como G-Pascal.

El autor es Nick Gammon, y su compilador genera código-p, como el de muchos otros proyectos de Pascal, como el que apareció en a revista Byte en 1978 (ver aquí, aquí y aquí. El programa lo completó en 1983 y lo puso a la venta en 80 dólares en 1986. Contenía un manual de usuario, ejemplos y un editor para poder programar código en Pascal.

Nick fue entrevistado y habló de su proyecto de ese entonces. Dice: “A finales de los años 70s yo usaba una computadora soldada a mano, basada en el kit de evaluación del procesador Motorola 6800. Básicamente este tipo de equipos eran los que se podían conseguir en ese entonces antes de que aparecieran las microcomputadoras.

Esta “PC” tenía unos 16KB de RAM y 16 KB de EPROM. Mi primera tarea fue escribir un ensamblador y un editor. Mi sistema no tenía software en realidad, solamente unos 256 bytes en el BIOS que estaba en ROM. Al inicio no tenía un ensamblador, por lo que empecé con este proyecto. Empecé escribiendo los códigos hexadecimales a mano. Una vez que las cosas empezaron a funcionar, cada versión del ensamblador podía usarse para construir una mejor. El editor/ensamblador, usaba unos 8 KBytes.

Hay que decir que Nick tenía cierta experiencia escribiendo ensambladores pues en octubre de 1987 había escrito uno ya para su PC Motorola 6800. Pero desde luego, no tenía experiencia en la escritura de compiladores y decidió que era el momento de añadir al repertorio de sus habilidades, un lenguaje de alto nivel.

Nick había usado BPL (Burroughs Programming Language) y halló que el enfoque estructurado en dicho lenguaje permitía trabajar de manera más fácil que hacerlo con código en ensamblador. No obstante esto, Nick no tenía idea de cómo escribir algo así, confiesa. Pero entonces halló el artículo de Kin-man Chung y Herbet Yuen, en la revista Byte de septiembre, octubre y noviembre de 1978, en donde se describe cómo hacer una versión reducida de Pascal, una versión que en el lenguaje anglosajón se denomina como “Tiny”. Todo esto sonaba interesante, afirma Nick, pero parecía ser muy lento, algo así como el tratar de escribir un compilador para BASIC. El compilador de la revista Byte tardaba ¡1 minuto por cada 8 líneas!

No obstante esto, el artículo (en 3 partes), describía cómo debía implementarse el compilador, dando detalles en la sintaxis. Igualmente, se tenía el código fuente de ese programa. Nick entonces -habiendo entendido el artículo- decidió escribir su compilador pero en ensamblador. Ya tenía un editor de textos, por lo que podía ir entonces directamente a la escritura del compilador de Pascal.

El compilador de Nick generaba código-p (pseudo-código), por lo que no era código de una computadora real, sino de una máquina hipotética, el cual entonces un intérprete de este código procesaba. Esto simplificó las cosas un poco, pues no se necesitaba crear código de máquina real. La manera en como trabajaría el sistema era: primero compilar el código fuente y generar código-p. Después, interpretar este código en una máquina virtual. El paso de compilación sólo se hacía una vez mientras que el ejecutar el código se podía hacer cuantas veces se quisiera si se tenía el código-p compilado

Después de un par de semanas de trabajo, Nick logró que su programa corriese mucho más rápido que el “Tiny Pascal” de la revista Byte. Su programa compilaba unas 2000 líneas por minuto, por lo que un programa de 200 líneas se compilaría en unos 6 segundos. El problema es que mi sistema estaba muy limitado y además no era lo suficientemente popular para pensar en comercializarlo. El compilador (8K), el editor y el ensamblador (8K), llenaban toda la memoria de la máquina Motorola. Los archivos se guardaban (por ejemplo el código fuente), en una cinta magnética. Nick dice que usaba una grabadora de cassettes convencional para leer/escribir programas de la cinta y hacia la cinta. Este fue un proceso popular al inicio de la microcomputación.

Pero para 1982 Nick buscaba hacer algo de dinero a partir de su nueva habilidad para escribir compiladores, por lo que decidió portar su compilador a la Apple II. Esto no fue una tarea trivial pues aunque los microprocesadores son parecidos, tienen conjuntos diferentes de instrucciones. Por ejemplo, el 6502 no tenía un registro B para trabajar con el mismo.

nickgammonNick Gammon

Un par de semanas de duro trabajo hicieron que el compilador de Nick funcionara correctamente. Lo bautizó como G-Pascal (la G es por su apellido). El programa corría en 12 KB de memoria cuando se cargaba. Había editor, compilador e intérprete de código-p. No se necesitaba el ensamblador, el cual sólo servía para compilar el G-Pascal. Nick entonces escribió el manual y lo imprimió en su impresora de matriz de puntos Brother Microline 84. Hizo una docena de fotocopias del manual y las engargoló. Compró unas bolas de plástico, copió los discos y listo, ya podía venderlos.

Nick puso entonces anuncios en la revista australiana Personal Computer (ver aquí, aquí y aquí. Los anuncios eran dirigidos a un nicho de programadores, por lo que estaban dedicados a mostrar las bondades técnicas de su programa. Se vendieron una docena de copias de G-Pascal, pero probablemente apenas cubrieron el costo de los anuncios.

Pero Nick no se decepcionó. En agosto de 1982 se publicó un artículo que demostraba la creación de un juego de aventuras (popular en aquella época), en G-Pascal. El artículo tenía 6 páginas y esto le dio a Nick mucha más exposición. También recibió una buena crítica para su compilador de Pascal para Apple…

Continuará…

Referencias:

Supercoders.com 

Comentarios