Clon QubIDE de Jose_leandro

Clon QubIDE de Jose_leandro

Ya es una realidad, el clon QubIDE de jose_leadro está en manos de los entusiastas del Sinclair QL.

Esta tarjeta es la expansión ideal para cualquier propietario de un Sinclair QL que quiera dar uso a este retro-ordenador. Se acabaron las incomodidades y el infierno de los Microdrive, además, ya podemos prescindir de buscar esas tarjetas de ampliación RAM y controladoras de disquetes tan caras y difíciles de conseguir en la actualidad.

El “kit” completo de jose_leadro está compuesto por tres componentes:

1) La tarjeta clon QubIDE propiamente dicha, la cual incorpora una ampliación RAM de 512 KB. Para quien no lo sepa, la QubIDE es una pequeña tarjeta controladora de discos IDE que incorpora el driver necesario para el sistema operativo, fue diseñada por la empresa Qubbesoft a mediados de los 90.

2) Una Eprom con el sistema operativo Minerva más el Toolkit II. Aunque este componente es opcional ya que la QubIDE puede funcionar perfectamente en un QL estándar, sí que es muy recomendable. Minerva es una versión depurada y mejorada del QDOS (el sistema operativo original del QL). El Toolkit II son unas extensiones que aportan nuevos comandos y facilidades al sistema operativo que nos simplificará enormemente el trabajo con el QL (un editor SuperBasic de pantalla completa, comandos para manejo de directorios, etc…).

3) Por último, un programa Windows para poder realizar el traspaso de ficheros entre el PC y la tarjeta CF o SD. Esta utilidad ha sido desarrollada por Habi, y tiene la cualidad de entenderse perfectamente con el sistema de ficheros de las unidades QubIDE y las particularidades del sistema de ficheros del QDOS (por ejemplo, las cabeceras de los ejecutables).

Por supuesto, que además de lo anterior tendremos que tener una unidad de almacenamiento IDE (disco duro o equivalente). En este apartado, lo recomendable y lo más práctico, es adquirir una de esas típicas tarjetas IDE-Compact Flash o IDE-SD. En mi caso tengo una IDE-SD y funciona a la perfección. Otra alternativa muy compacta es el DiskOnModule, un módulo de memora flash encapsulado en el propio conector IDE.

Esta propuesta de almacenamiento masivo que nos trae jose_leadro es completa, en el sentido que no necesitamos ningún componente adicional en el QL para transferir la enorme biblioteca de software que existe en internet a una unidad IDE y ser usada en nuestros QL como si de un “gran” disco duro se tratar.

Sin duda, este clon QubIDE dará nueva vida a nuestros QLs.

Este es el enlace principal del proyecto donde se encuentra una descripción completa y distintos tutoriales:

http://hardware.speccy.org/temp/qubide.html

Algunas fotos de mi clon QubIDE:

Clon QubIDE + Eprom Minerva con Toolkit II

Clon QubIDE + Eprom Minerva con Toolkit II

Tarjeta SD-IDE y DiskOnModule

Tarjeta SD-IDE y DiskOnModule

Programa editor de imágenes de Habi

Programa editor de imágenes de Habi

QubIDE en acción (WIN1_)

QubIDE en acción (WIN1_)

Anuncios

Me ha llegado recientemente esto:

Mi QL-SD 1

Mi QL-SD 1

Se trata de la “QL-SD”, una interfaz para tarjetas SDHC que nos permite cargar y guardar programas y datos de una forma rápida y segura sin la necesidad de interfaces de disco ni unidades Microdrive.

La interfaz se ajusta internamente dentro del QL, lo que supone que tenemos que abrir el QL, quitar los dos chips ROM originales y montar sobre uno de los zócalos ROM una pequeña tarjeta que contiene el controlador de la tarjeta SD y una ROM con una versión mejorada del sistema operativo llamada Minera. Además se deberá montar una segunda plaquita en donde se inserta la propia tarjeta SDHC. El lugar ideal para montar esta segunda tarjeta es en el espacio que deja la segunda unidad Microdrive ( mdv2_ ) la cual debemos extraer, así podríamos insertar y extraer la tarjeta SD como si de un cartucho Microdrive se tratara. Esto último no es obligado, esta segunda tarjeta pude alojarse en cualquier otro lugar interno o externo del QL. El comportamiento final de la tarjeta es como si tuviéramos un disco duro conectado a nuestro QL.

En el paquete se suministra también una tarjeta SDHC precargada con software e “imágenes” de disco duro de distinto tamaño pre-configuradas y listas para usar. La imagen de disco duro que reconocerá el QL debe estar en el directorio raíz de la tarjeta. Con el software suministrado podemos crear esas “imágenes” en el PC y transferir ficheros a ellas con Q-emuLator.

Es altamente recomendable una expansión de memoria, yo diría que imprescindible. Entre las limitaciones más importantes están: a) su incompatibilidad, en el momento actual (*), con las tarjetas de expansión (Super) Gold Card (*); y b) la imposibilidad de conectar otros dispositivos al puerto ROM externo del QL.

Esta expansión se puede conseguir en http://www.sellmyretro.com donde periódicamente están saliendo a la venta tiradas limitadas.

Aspecto del kit montado y en acción:

Mi QL-SD 2

Mi QL-SD 2

Mi QL-SD 3

Mi QL-SD 3

Me ha parecido un desarrollo fantástico, la expansión que esperábamos muchos entusiastas del Sinclair QL.

Editado:
(*) No se descarta resolver esta incompatibilidad en el futuro.

A comienzos de Abril, el grupo alemán ZX-Team tuvo su reunión anual donde se dieron cita unos 50 entusiastas del mundo Sinclair.

En lo que se refiere al QL se pudieron ver cosas muy interesantes, como el nuevo desarrollo Q68 de Peter Graf, y la QL-SD en acción una vez más.

Urs König ha puesto en la red material gráfico muy interesante.

Aquí una muestra:

Q68 -1- (Imagen cortesía de Urs König)

Q68 -1- (Imagen cortesía de Urs König)

Q68 -2- (Imagen cortesía de Urs König)

Q68 -2- (Imagen cortesía de Urs König)

QL-SD en producción (Imagen cortesía de Urs König)

QL-SD en producción (Imagen cortesía de Urs König)

He probado “suerte” a ver si es cierto que efectivamente pueden ser recuperables viejos cartuchos Microdrive que tenía almacenados y catalogados como “inservibles”. Para ello he comprado en Sandy Electronics algunas almohadillas para intentar revivir algunos de mis cartuchos Microdrive.

El experimento ha salido relativamente bien. De tres intentos: rompí el primer cartucho Microdrive, pero puede recuperar los otros dos, ¡no está mal, recuperados dos de tres!

Lo que si tuve que hacer es reintentar el formateo del cartucho varias veces, el primer intento siempre me dio errores, tal vez debido al tiempo que llevaban esos cartuchos y la propia unidad Microdrive sin uso. Después de al menos dos intentos, el formateo del cartucho Microdrive funcionó y los cartuchos volvieron a la vida. He realizado varias pruebas de copiar, salvar y leer pequeños programas y todo ha funcionado correctamente.

Estos son los pasos que recomienda Sandy Electronics como guía, son pasos muy sencillos y no tienen ninguna complicación:

1. Levante con cuidado la cinta por encima de la almohadilla Microdrive unos 5-7 mm, no más. Utilice la tapa de plástico de un bolígrafo Bic o similar con un perfil redondeado para que no se dañe la cinta.

2- Utilice un cuchillo o una cuchilla afilada para eliminar los viejos restos de la almahadilla anterior. Asegúrese de que no quedan restos pero tampoco se preocupe si queda un poco de pegamento viejo, no es preocupante.

3. Usando las pinzas, levante suavemente la almohadilla suministrada por Sandy Electronics y colóquela en el muelle metálico debajo de la cinta, colóquela en lugar de la antigua en el centro del área metálica del muelle. La nueva almohadilla es ligeramente más grande que la anterior a propósito.

4. Utilice la de nuevo la tapa del bolígrafo Bic de como apoyo debajo de la cinta, y con suavidad pero con firmeza, presione la nueva almohadilla en su posición. Puede utilizar también las puntas de la pinza como apoyo para presionar la nueva almohadilla.

5. Y por último …. tener mucha suerte 🙂

Reparación de cartuchos Microdrive

Reparación de cartuchos Microdrive

Conversor HDMI a VGA

Conversor HDMI a VGA

Dando una vuelta más de tuerca a este conversor de Scart a HDMI, ahora he podido  conectar mi QL a un monitor VGA.

El mecanismo es “un poco ortopédico” 🙂 , pero funciona a modo plug & play sin tener que manipular cables ni componentes electrónicos. Básicamente consisten en emplear un camino de “ida y vuelta”, pasar la señal analógica a digital (con el conversor Scart a HDMI) y luego a la inversa de digital a analógica (conversión HDMI a VGA).

Ya comentamos el tema del conversor Scart a HDMI en otra entrada del blog. Ahora he adquirido en eBay este otro conversor para poder conectar la salida HDMI a VGA (el precio e bastante asequible, 7.5 dólares incluido gastos de envío).

La calidad de la imagen es bastante buena, pongo más abajo algunas fotos de mi pantalla plana VGA conectada al QL (las fotos son de mala calidad, en la realidad la imagen es más nítida). Sólo decir que en uno de mis monitores (Acer) el color blanco se convertía en magenta, pero en mi segundo monitor (LG) la imagen es muy aceptable.

Esto debería ir bien también en otros equipos retro.

Ejemplo salida VGA (QL - monitor LG)

Ejemplo salida VGA (QL – monitor LG)

Ejemplo 2 salida VGA (QL - monitor LG)

Ejemplo 2 salida VGA (QL – monitor LG)

Conversores encadenados

Conversores encadenados

El concepto de Variables de Entorno viene del mundo UNIX. Se utilizan también en MS-DOS pero de forma más limitada y no en la misma medida. Para el mundo QDOS, el archivo ENV_BIN proporciona una serie de extensiones que permiten el uso de Variables de Entorno en el Sinclair QL.

Si queremos disponer de estas facilidades debemos cargar previamente dicha extensión en nuestra sistema. Para ello basta con añadir en nuestro boot una línea similar a la siguiente (*):

100 LRESPR flp1_env_bin

(*) Notas:
– LRESPR requiere Toolkit 2
– La extensión ENV_BIN se puede obtener en la sección de Toolkits del sitio de Dilwyn Jones.

En esencia, una variable de entorno es una variable que puede ser “vista” por los programas ejecutables. En SuperBASIC podemos crear todo tipo de variables, pero si ejecutamos un programa desde SuperBASIC, estos programas no pueden “ver” dichas variables ni obtener datos de ellas.

El objetivo de las variables de entorno suele ser el cambiar la configuración de un programa. Estas variables funcionan como los “Bloques de Configuración” en QDOS, pero no requieren de la ejecución de un programa externo para hacer cualquier cambio en sus valores.

Echemos un vistazo a cómo podemos cambiar el comportamiento de los programas. Hay cinco maneras diferentes de hacer esto:

1] Intervención del usuario. Mediante esta estrategia, el usuario utiliza un menú o responde a las preguntas del programa.

2] Bloques de Configuración (Config Blocks). Esta característica es peculiar del QDOS y permite al usuario cambiar las opciones por defecto sin tener que saber cómo editar un archivo binario.

3] Fichero de Configuración. Este es un archivo separado que el programa lee para determinar cómo establecer los valores predeterminados para su ejecución.

4] Argumentos por la Línea de Comandos. En lugar de que el programa pregunte la de información al usuario, el usuario escribe dichos valores cuando ejecuta el programa desde la consola utilizando parámetros adicionales.

5] Variables de Entorno. El usuario establece una variable que luego es leída por el programa para cambiar su configuración predeterminada.

Cada una de las opciones tiene su propio lugar, sus ventajas y sus defectos. Algunas son más permanentes, como los Bloques de Configuración y los Archivos de Configuración, mientras que las otras opciones son más volátiles, como la “Intervención del Usuario” y de los “Argumentos por la Línea de Comandos”. Las “Variables de Entorno” se encuentran entre las opciones que se pueden establecer en el BOOT (arranque del sistema), o en un programa cargador, pero se pueden cambiar con solo teclear en un nuevo comando. El fichero ENV_BIN viene con 4 extensiones. Éstas son:

SETENV     - Define una variable de entorno.
ENV_LIST   - Lista todas las variables de entorno definidas.
ENV_DEL    - Elimina una variable de entorno.
GETENV$    - Obtiene el valor de una variable de entorno.

Los dos comandos más relevantes son SETENV y GETENV$. SETENV se usa de esta forma:

SETENV "VARIABLE=valor"

SETENV toma un argumento de cadena del tipo “XXXXX=YYYYY”, donde XXXXX y YYYYY son dos cadenas separadas por un signo igual. Cualquier espacio antes del signo igual es tratada como una parte de XXXXX y un espacio después del signo igual es tratada como una parte de YYYYY. El nombre de la variable es sensible a mayúsculas y minúsculas, así “VARIABLE” es diferente de “variable”. Por convenio, las mayúsculas se utiliza como nombre de las variables de entono. El comando SETENV se puede ejecutar en el programa de inicio del sistema -BOOT- (el cual podría ser alterado por un programa instalador), o bien directamente por el usuario. El comando para que un ejecutable obtenga el contenido de una variable de entorno es GETENV$. El comando se usa así:

a$ = GETENV$("VARIABLE")

En este caso, a$ se le asignará el valor de “valor” establecido en nuestro ejemplo por la instrucción SETENV anterior. Si la variable de entorno “VARIABLE” no está definida (no existe), entonces la función GETENV$ devolvería una cadena vacía (“”).

Hemos dicho que los ejecutables usan GETENV$ y no los programas SuperBASIC. Como las variables se utilizan ya de forma ordinaria en el entorno SuperBASIC, no ganaríamos mucho en el uso de variables de entorno (a no ser que pretendamos obtener algún valor preestablecido de forma personalizada en nuestro sistema). Por esto hemos destacado que el uso mayor de estos comandos es en los programas SuperBASIC compilados, que son ejecutables.

Vemos que el propósito de utilizar Variables de Entorno es la adición de flexibilidad para los programas que utilizan bloques de configuración. Ambos, Bloques de Configuración (Config Blocks) y Variables de Entorno se han diseñado realmente para cambiar la configuración predeterminada de los programas. La “Intervención del Usuario” y los “Argumentos por la Línea de Comandos” están diseñados para indicar al programa algunos datos adicionales. El uso de Variables de Entorno permite al usuario la posibilidad de hacer un cambio temporal en las opciones por defecto de un programa, sin tener que pasar por la molestia de usar “config”. Las variables de entorno se utilizan para cambiar una configuración para una sola sesión y ya está.

No es difícil el uso de los “Bloques de Configuración” y las “Variables de Entorno” en conjunción de tal forma que sean complementarias. El programa obtendría primeramente su configuración por defecto del Bloque de Configuración (Config Block). A continuación, se comprueba si hay variables de entorno establecidas. Si hay, entonces los valores de configuración de las Variables de Entorno reemplazan los valores de configuración definidos en los Bloque de Configuración.

 

Fuente:

Artículo original: http://dilwynjones.topcities.com/qhj/qhj/qhj28.txt

Timothy Swenson
Artículo aparecido en QL Hacker’s Journal

Traducción:
Afx
Septiembre de 2009

Este artículo presenta una pequeña función muy útil para el uso con el escalado de gráficos en el BASIC del QL. Ésta pequeña función debería trabajar tanto en SuperBASIC como en SBASIC.

Recientemente estaba escribiendo un programa que necesitaba del uso de POINT, LINE y otros cuantos comandos gráficos que usan el sistema de coordenadas gráficos del BASIC. Yo necesitaba estar en condiciones de poder escalar gráficos para encajarlos en la pantalla completa, independientemente de la resolución de la pantalla.

Los sistemas QL modernos ofrecen una variedad de formas y proporciones de pantalla, por ejemplo, el QL estándar tiene una resolución de 512×256 y los sistemas Q40/Q60 1024×512. Ambos tienen una proporción de 2:1 píxeles de pantalla. Pero un sistema QXL se ejecuta en modo SVGA con resoluciones de 800 por 600 pixels, esto es una ratio de 4:3 en lugar de 2:1. Un sistema Aurora ofrece un sistema de resolución tipo EGA 650×350, también el QPC ofrece resoluciones similares, lo cual viene a ser una proporción aproximadamente de 2:1 (sólo aproximadamente).

A modo de referencia, aquí se muestran algunas de las resoluciones gráficas más comúnmente usadas de varios tipos de sistemas que yo he usado. Notarás que en esta lista no se incluyen los emuladores como QLay, QemuLator y QDOS Classic dado que yo no tengo suficiente conocimiento de esos tipos de sistemas para poderlos incluir en esta lista.

Ancho    Alto    Ratio    Tipo de sistema
-----------------------------------------
 256     256      1:1     QL en modo 8
 512     256      2:1     QL en modo 4
 512     384      4:3     QPC, Aurora
 640     350  aprox. 2:1  modo EGA en QXL, Aurora, QPC
 640     480      4:3     modo VGA en QXL, Aurora, QPC
 768     280      2.74:1  Extendido 4 en ST-QL
 800     600      4:3     SVGA sobre QXL, QPC etc
1024     512      2:1     Q40/Q60, QPC
1024     768      4:3     XGA sobre QPC

Figura 1.

Cuando se define una ventana, el sistema le asigna un SCALE con valor 100 en la dirección del eje vertical, estableciendo el punto de origen en la coordenada 0,0 situado en la esquina inferior izquierda. Es menos fácil de predecir el número de puntos en el sistema de coordenadas que existirán en la dirección horizontal – una ventana que es cuadrada es en términos de número de píxeles no es cuadrada en términos de de coordenadas gráficas.

Esto nos provoca un problema, si utilizamos LINE, CIRCLE, ELLIPSE, etc. para dibujar formas o figuras y dichas formas no caben en la ventana en cuestión, parte de la figura se dibuja fuera de la ventana, aunque no se producen errores gracias a la forma en que los comandos gráficos del BASIC trabajan.

De hecho, existe una relación que no está muy bien documentada que, si se conoce la altura y anchura de la ventana y la escala vertical, nos permite predecir cuantos puntos en el sistema de coordenadas horizontal serán visibles dentro de la ventana en cuestión.

1000 DEFine FuNction X_Scale(y_scale,wide,high)
1010   RETurn 0.75 * y_scale * wide / high
1020 END DEFine X_Scale

Figura 2: Listado de la función.

La función toma tres parámetros. El primero (y_scale) es el número de puntos del sistema de coordenadas deseado en el plano vertical. A menos que lo cambies con el comando SCALE, tendrá normalmente el valor de 100. Si usas por ejemplo SCALE #1, 150,0,0 será de 150. El segundo parámetro es el ancho de la ventana en pixels (si estás usando la resolución del QL en modo TV la ventana #1 o #2 tendrán un ancho de 448, o 252 si usas el modo monitor del QL). El tercer parámetro es el alto de la ventana, normalmente 200 para ambas ventanas en ambos modos (TV o Monitor).

La linea 1010 usa esta información para calcular el número de puntos que le corresponden a eje horizontal. Ten en cuenta que hay una relación de 0,75 o 3:4 entre el eje horizontal y vertical. En otras palabras, sea cual sea la proporción de anchura de la ventana con respecto a la altura, el número de puntos visibles en el sistema de coordenadas horizonal es de 0,75 veces la parte visible del sistema de coordenadas verticales en esta proporción de píxeles.

Básicamente, habida cuenta de la forma de la pantalla QL, la introducción de un escalado como éste es necesaria a fin de que los círculos aparezcan realmente de forma circular dado que si dibujamos “círculos” con una proporción de 1:1 píxeles, éstos no aparecen como circulos en la pantalla del QL ya que los píxeles no son exactamente cuadrados.

Aquí hay un ejemplo simple del uso de esta fórmula. ¿Cuál sería el ancho máximo de una línea que cubra toda la pantalla? Estamos trabajando en una resolución de pantalla del QL de 512×256 y necesitamos dibujar un círculo en el centro de la pantalla. En el listado de la Figura 3 se muestra cómo podemos conseguirlo:

100 WINDOW 512,256,0,0 : CLS
110 x = X_Scale(100,512,256)
120 CIRCLE x/2,50,25
130 :
1000 DEFine FuNction X_Scale (y_scale,wide,high)
1010   RETurn .75 * y_scale*wide/high
1020 END DEFine X_Scale

Figura 3: Uso de la función para centrar un círculo en la pantalla

Bueno, esto podría parecer un gran alboroto para nada. En la realidad, llegar a esta fórmula, ha hecho más fácil para mí escribir programas con gráficos a escala que se ajusten al tamaño y forma de la ventana en cuestión. ¡Oh!, ¿qué programa era ese? Pues eran algunos de los módulos del protector de pantalla de mi programa LPsaver.

Esta rutina es actualmente una aproximación. Podrías encontrar errores, en parte debido a la simplificación de los cálculos realizados, al redondeo en las operaciones de punto flotante, etc, la escala real puede variar de con respecto a lo que indican la rutina, pero los resultados son lo suficientemente aproximados para la mayoría de los propósitos.

———-

Artículo original:  http://www.dilwyn.me.uk/docs/articles/scales.zip 

Dilwyn Jones
Tal-y-bont, Gales, Reino Unido.

Traducción: Afx
febrero de 2009