archivo

Archivos Mensuales: abril 2011

QLSD es el nombre de un nuevo proyecto de Mcleod_ideafix para el Sinclair QL.

Consiste en una pequeña tarjeta conectada al puerto ROM para dotar al QL de un medio de almacenamiento masivo en tarjetas SD/MMC. Incorporará una EPROM para el firmware con lo que en teoría no hará falta cargar drivers desde otros dispositivos externos (floppy o microdrive). Esto significa que la tarjeta será totalmente autónoma al más puro estilo “plug&play” :-).

La intención de Mcleod es dotar a la tarjeta con un driver nativo del sistema operativo, de tal forma que sea posible tratar este medio de almacenamiento como si de una unidad nativa QDOS se tratara. Por ejemplo, con un comando al estilo:

dir MMC1_

obtendríamos el contenido del directorio raíz de la tarjeta SD. O por ejemplo, con este otro comando:

exec MMC1_juegos_chess_exe

ejecutaríamos el programa “chess_exe” del directorio “juegos” de la tarjeta SD.

Posiblemente sea este driver la parte más complicada del proyecto.

El rendimiento de la tarjeta es espectacular. Para comprobar la capacidad real de la tarjeta y su velocidad de acceso se puede ver el siguiente video donde se muestra el potencial de transferencia de QLSD.

Se puede seguir también todo el proceso de construcción en este hilo de speccy.org.

http://www.speccy.org/foro/viewtopic.php?f=15&t=2281

El precio final de la tarjeta rondará los 30 euros, lo que lo convierte en una estupenda opción para todo aquel poseedor de un Sinclair QL. Sin duda, cuando este desarrollo llegue a su fin marcará un antes y un después en la escena QL.

Desde mi punto de vista, es un proyecto imprescindible de cara a preservar vivo el mundo QL. Esto es especialmente importante si tenemos en cuenta que ya prácticamente no se consiguen medios de almacenamiento externos para el QL (controladoras de disquetes) y que los odiosos cartuchos microdrives, con el paso del tiempo son totalmente inservibles.

La comunidad QL estamos de enhorabuena, y desde aquí nuestro agradecimiento a Mcleod_ideafix por su fantástico proyecto.

¡¡ QL forever !!

QuillRtf es una utilidad fue desarrollada por Pedro Reina allá por el año 1998, y existe tanto una versión para MS-DOS como para QDOS.

Este programa convierte un fichero Quill (de PSION) en un fichero Rich Text Format (RTF), que se puede importar directamente cualquier programa que maneje ficheros RTF. Se conserva la letra negrita, los subíndices y superíndices, la letra subrayada se convierte en itálica y se transforman correctamente las Ñ y vocales acentuadas.

El programa está dirigido por menús. El principal es el menú horizontal que siempre está presente en la parte superior de la pantalla. Con la opción Fichero puedes convertir un fichero de Quill a RTF.

QuillRtf

El programa fue escrito en C usando el framework de programación “Olimpo”, desarrollado por el mismo autor. Este framework permitía la programación en C de tal forma que fuera posible la generación de un programa para QDOS y para MSDOS sin alterar el código fuente, de ahí que esté disponible QuillRtf para ambos sistemas operativos.

El programa es de Dominio Público y lo puede encontrar en la sección de utilidades de http://www.sinclairql.es

¿Cuánto tiempo tardaríamos en resolver una expresión aritmética como la siguiente?

(((3+7)*5)*7)*((((((2+6-1)*5)+(((3+5)*9)+4))*7)-(4+3-6-7+9+8))*6)

Seguro que con ayuda de lápiz y papel lo resolveríamos sin problemas pero tardaríamos un buen “ratito”. Sin ayuda alguna (de papel y lápiz) seguramente tardáramos un rato más y con un esfuerzo mental más exigente. Desde luego, él cálculo de la solución no es algo que la mente humana pueda realizar de forma automática

Las estrategias para resolver este tipo de problemas es algo que ya está muy estudiado por los diseñadores de lenguajes de programación y por los ingenieros que los implementan en compiladores reales. Se emplean para ello algoritmos muy ingeniosos y poderosos, desarrollados por los científicos e ingenieros de esta materia a lo largo de los años.

Aprovechando este tema, vamos “a jugar” un poco con SuperBASIC. El “juego” consistiría en implementar una solución que resolviera este tipo de expresiones de forma inmediata y sin errores. Nuestro programa pedirá al usuario que teclee una expresión aritmética y deberá darnos el resultado sin importar cuán compleja sea dicha expresión. Para ello elegiremos un algoritmo llamado “análisis sintáctico descendente recursivo”. Es uno de los algoritmos más simples para resolver este tipo de problemas y fue uno de los primeros que se descubrieron para implementar compiladores de lenguajes de alto nivel. (El algoritmo lo he extraído del libro “Construcción de Compiladores” de K.C. Louden).

Este sería el resultado final.

Calculadora simple en SuperBASIC

 

Esta calculadora es muy simplista, en realidad sólo es capaz de sumar, restar y multiplicar números de un sólo dígito. La ventaja es que el programa se mantiene corto y más comprensible.

El punto de partida es elegir una gramática que define una serie de derivaciones de forma recursiva, esto es muy útil ya que éstas son las que luego guían la implementación en el código.

La gramática para nuestra calculadora es la siguiente:

expresion -> expresion operadorSuma termino | termino
operadorSuma -> + | -
termino -> termino operadorMult factor | factor
operadorMul -> *
factor -> ( expresion ) | numero
numero -> 0|1|2|3|4|5|6|7|8|9

El código en SuperBASIC de nuestro “juego” está aquí:

100 REMark ===============================
110 REMark = Calculadora artimƒtica simple
120 REMark ===============================
130 :
140 MODE 8:CLS
145 Instructions
150 :
160 REPeat loopMain
170   expIn$ = ""
180   token$ = ""
190   result = 0
200   idx% = 1
210   :
220   PRINT "Introduce una expresi–n: "
230   INPUT ">> "; expIn$
240   IF expIn$ = "" THEN
250     EXIT loopMain
260   END IF
270   expIn$ = expIn$ & " "
280   token$ = getchar$
290   :
300   result = exp%
310   :
320   PRINT
330   PRINT "El resultado es "; result
340   PRINT:PRINT
350 END REPeat loopMain
360 :
370 STOP
380 :
390 REMark --- Fun, Proc -----------------
400 :
410 DEFine FuNction getchar$
420   LOCal c$
430   c$ = expIn$(idx%)
440   idx% = idx% + 1
450   RETurn c$
460 END DEFine
470 :
480 DEFine PROCedure match (expectedToken$)
490   IF token$ = expectedToken$ THEN
500     token$ = getchar$(v$)
510   ELSE
520     errorExp
530   END IF
540 END DEFine
550 :
560 DEFine PROCedure errorExp
570   PRINT#0, "error en expresi–n"
580   STOP
590 END DEFine
600 :
610 DEFine FuNction exp%
620   LOCal temp%, k
630   temp% = term%
640   REPeat loopExp
650     IF token$ <> "+" AND token$ <> "-" THEN
660       EXIT loopExp
670     END IF
680     k = CODE(token$)
690     SELect ON k
700       = 43:
710         match "+"
720         temp% = temp% + term%
730       = 45:
740         match "-"
750         temp% = temp% - term%
760     END SELect
770   END REPeat loopExp
780   RETurn temp%
790 END DEFine
800 :
810 DEFine FuNction term%
820   LOCal temp%, k%
830   temp% = factor%
840   REPeat loopTerm
850     IF token$ <> "*" THEN
860       EXIT loopTerm
870     END IF
880     match "*"
890     temp% = temp% * factor%
900   END REPeat loopTerm
910   RETurn temp%
920 END DEFine
930 :
940 DEFine FuNction factor%
950   LOCal temp%
960   IF token$ = "(" THEN
970     match "("
980     temp% = exp%
990     match ")"
1000   ELSE IF IsDigit%(token$) = 1 THEN
1010     temp% = ValDigit% (token$)
1020     token$ = getchar$
1030   ELSE
1040     errorExp
1050   END IF
1055   END IF
1060   RETurn temp%
1070 END DEFine
1080 :
1090 DEFine FuNction IsDigit% (val$)
1100   LOCal t%, res%
1110   t% = CODE(val$)
1120   IF t% < 48 OR t% > 57 THEN
1130     res% = 0
1140   ELSE
1150     res% = 1
1160   END IF
1170   RETurn res%
1180 END DEFine
1190 :
1200 DEFine FuNction ValDigit% (val$)
1210   LOCal v%
1220   v% = CODE(val$)
1230   v% = v% - 48
1240   RETurn v%
1250 END DEFine
1260 :
1270 DEFine PROCedure Instructions
1275   INK 4
1280   PRINT "Calculadora aritmƒtica simple."
1290   PRINT "------------------------------"
1300   PRINT "Calculadora minimalista que realiza"
1310   PRINT "operaciones de suma, resta y "
1312   PRINT "multiplicaci–n con n™meros de un s–lo"
1320   PRINT "d“gito."
1330   PRINT
1340   PRINT
1345   INK 7
1350 END DEFine


Bibliografía:
Contrucción de Compiladores
Kenneth C. Louden
Ed. Thomson

Edito: Corregido Bug y adaptado código a SBASIC.

El pasado 9 de abril se celebró la RetroEncounter en la Escuela Universitaria de Informática de la Universidad Politécnica de Madrid.

Creo que fue un encuentro retro muy especial a todos los niveles donde estuvieron muy bien representadas muchas plataformas (Commodore, Amstrad, Atari, PC’s  …), y entre ellas, también el Sinclair QL tuvo un papel destacado.

En pocos encuentros retro del pasado, tanto a nivel local como a nivel nacional, el QL ha estado presente de una manera tan significativa. Tal vez para el visitante ocasional, esta máquina pasara desapercibida, pero lo cierto es que se pudieron ver cosas muy interesantes.

En la RE se mostraron una amplia variedad de hardware QL, y al menos en mi caso, algunos componentes era la primera vez que los veía en la realidad.

Referente al QL, en la RetroEncounter se pudo ver lo siguiente:

– Tres ejemplares del modelo original de la máquina  (el QL de Ron, uno de mis QL’s y el QL de Radastan en Bytemaniacos).

– Ampliación de memoria de 512K de Mcleod_ideafix, construida por STGO e incorporada al QL de Ron. Esta misma máquina incorporaba también la ROM Minerva (Minerva es una versión mejorada y depurada del QDOS original, es de dominio público).

– Un QL “black-box” con teclado profesional (propiedad de Badaman). Este teclado fue comercializado poco después del lanzamiento de la máquina para suplir las deficiencias del modelo original, tiene un tacto excelente y además no está basado en las frágiles membranas de teclado de Sinclair. Este QL incorporaba también Minerva y estaba montado con su monitor original Sinclair.

– Varias modelos de controladoras de discos (TrumpCard, GoldCard, MicroPeripherals …)

– Zerover nos mostro su sistema QXL completamente funcional y montado en hardware de PC. La QXL fue la última creación de Miracle (la misma casa que diseñó las populares TrumCard y GoldCard). La QXL es una tarjeta que se pincha en una ranura ISA de cualquier PC estándar, convirtiendo a este en un sistema QDOS de “altas prestaciones” de aquella época. Incorpora un 68040 y lleva 8 MB de memoria. El núcleo del sistema se ejecuta en esta tarjeta que se convierte en la CPU principal, aprovechándose el resto de componentes del PC como periféricos de entrada-salida (teclado, discos, video, …). El sistema operativo montado sobre estas placas era el SMSQ/E, la última evolución del sistema operativo original del QL. Espectacular fue ver cómo se movía el SMSQ/E y su entorno de ventanas en esta máquina (ver foto más abajo).

– Zerover también nos enseñó la placa Aurora. Esta placa sustituye a la placa base original del QL, pero necesita de una GoldCard o SuperGoldCard para poder funcionar. Se deben incorporar también algunos chips de la placa del QL. Enganchada a esta placa estaba también SuperHermes, un añadido que mejora sustancialmente las comunicaciones serie.

– Badaman, nos mostró su QBIDE (una controladora de discos IDE para el QL) y su SuperGold Card (la ampliación más potente que puede incorporar un QL, lleva un 68020,  4 MB de memoria y con un diseño muy compacto). También un ratón de Investrónica diseñado especialmente para el QL a mediados de los 80.

– En el apartado de emulación, Ron presentó su “arsenal” formado por un Atari ST y un Amiga 1200 emulando en perfectas condiciones al Sinclair QL.

– En relación al software pudimos ver una pequeña variedad de Juegos, el mencionado SMSQ/E en acción y otras utilidades interesantes tales como QTOP y QPAC2.

En el apartado de “cacharreo” vimos como el gran STGO reparaba el sistema de sonido de un QL ¡en menos de 5 minutos! … si, creedlo, fue y visto y no visto (impresionante la habilidad para ir sobre el problema en concreto). Quisimos “cacharrear” más cosas con los QL’, como montar una pequeña red local, montar un sistema PE o SMSQ/E sobre el QL original, … pero por falta de tiempo y tranquilidad se quedó en el tintero … (ya habrán más ocasiones).

Pero sin duda, lo más interesante de la RE fue el encuentro con las PERSONAS. Muchas de las aficionados al QL que nos habíamos “tropezado” en Internet (Badaman, Zerover, STGO, Ron, Radastan, McLeod…) pudimos conocernos en persona, charlar, contar anécdotas, compartir experiencias, … o simplemente vernos las caras. En este sentido el tiempo fue muy corto y seguro que a la mayoría nos supo a poco. Probablemente no aprovechamos lo suficiente para hacer todo lo que teníamos previsto llevar a cabo en este encuentro (hablar con todo el mundo, probar todas las máquinas, comprar en los mercadillos, …), pero bueno … , creo que también es el comienzo y seguro que en futuro habrán más ocasiones.

En definitiva, en lo que al QL respecta, esta RetroEncounter ha supuesto un salto importante hacia delante. Tal vez la semilla para participar de forma asidua en futuras ediciones, o para llevar a cabo un encuentro mono-temático en torno al Sinclair QL a nivel nacional. Esto último es algo que ya se ha comentado entre los entusiastas del QL en nuestro país.

A continuación algunas fotos, cortesía de Retrowiki.

QL's en el stand de Retrowiki

SMSQ/E y entorno de ventas ejecutándose sobre una QXL

Detalle de la QXL sobre hardware PC