Los programas en ROM
Los programas en RAM

Ignacio Enrique
Valladolid, diciembre 1988

Las siguientes líneas van a versar sobre:

La culpa de que hoy día existan ordenadores, no se si la tendrán los antiguos burócratas, los usureros, los comerciantes o los señores feudales, el caso es que el que tuviera la culpa, está claro que quería tener sus cuentas muy claras.

Las primeras máquinas calculadoras, ya disponían de sus simples mecanismos de memoria, como el ábaco o la sumadora de Pascal (en cuyo honor dicho lenguaje lleva su nombre) o la calculadora de Leibniz (en el fondo eran poco más que los cuenta vueltas de nuestros radiocasetes actuales). El primer ordenador propiamente dicho (con su memoria, unidad de control, unidad aritmético lógica y un sencillo dispositivo de entrada salida), el Calculador Analítico de Babage... sí, aquél que programó la primera mujer programadora de la historia la hija de Lord Byron, Lady ADA (en cuyo honor dicho lenguaje lleva su nombre) todas éstas máquinas tenían un sistema de memoria mecánico que no iban más allá de los marcadores de una partida de billar.

Las memorias mecánicas se mantendrían incluso hasta los computadores de la primera generación ya hacia 1940 con el MARK I de la Universidad de Hardvard cuyo único método de memoria era la cinta de papel perforado y las tarjetas de cartón perforadas.

Pero en 1943 aparece el famoso ENIAC primera máquina electrónica que curiosamente no tenía memoria interna, aunque el programa no se mantenía en tarjetas perforadas, claro... dada la "asombrosa" rapidez de los circuitos con válvulas de vacío, el programa debía de estar de un modo más centralizado. Lo primero que se les ocurrió (que poca imaginación) fue atar un ramillete de circuitos lógicos a válvulas de vacío (poco más que una bombilla) mediante una maraña de alambres de aspecto deplorable que constituida lo que entonces llamaban "programa cableado" (incluso se hicieron máquinas de alambrar programas...) lo cual no dejaba de ser un tostonazo dado que cada vez que se cambiaba de programa había que empezar a cablear de nuevo. La idea duró poco como era de esperar...

En 1945 aparece el EDVAC de la mano de Von Newman (como el ENIAC) con él se establecen 3 postulados básicos en cuanto a los ordenadores que ya perduran hasta nuestros días: Los ordenadores han de:

Este ordenador llevó a la creación del UNIVAC en 1951, primer ordenador alfanumérico y con memoria masiva externa en Cinta magnética.

Todos los ordenadores de las universidades USA de ésta época empezaron a utilizar un sistema de memoria para los datos variables, de rápido acceso y gran remanencia, en el fondo fue el primer sistema de memoria de acceso al azar o memoria RAM, eléctrica. El único problema era que cada bit de memoria gastaba tanta electricidad como un televisor de hoy día, lo cual no era muy de extrañar puesto que funcionaban casi como un televisor: los tubos de Williams. Funcionaban del mismo modo que funcionan hoy en día los tubos de rayos catódicos o pantallas de los osciloscopios (un osciloscopio es una especie de televisor en el que se pueden representar gráficamente ondas electromagnéticas y que utilizan profusamente los técnicos que reparan nuestros televisores, magnetofones y sintonizadores de radio, también nuestros seudoqueridos técnicos de HISSA), en éstos tubos se puede hacer que una vez representada una onda ésta se mantenga en pantalla realimentando con corriente eléctrica la imagen remanente que deja la onda original en el fósforo de la pantalla. (Si quieres comprobar que el fósforo deja imágenes remanentes no tienes más que hacer el siguiente experimento: pon en marcha tu televisor y deja tu habitación a oscuras. Sube el mando de contraste al máximo y el de luminosidad ponlo al nivel más bajo posible en que veas una imagen en todos sus detalles, si en éstas condiciones, bajas de golpe el contraste al mínimo, veras que en la pantalla se te queda congelada la última imagen que apareció en el televisor... No está mal para ser el primer sistema de memoria RAM...)

Todos estos sistemas de memoria, sobre todo la cinta perforada, la cinta magnética, y las tarjetas perforadas permitieron el desarrollo de la informática actual incluso ayudaron a llegar al hombre a la luna, no le pusieron de patitas en ella porque a 100 metros para alunizaje del Apollo XI la computadora de a bordo hizo puff (algo así como error -18: desbordamiento) y el alunizaje en sí hubo de hacerse a pedal.

Basta ya de historias y vámonos a las memorias actuales: Al margen de las memorias externas como los discos, microdrives y discos duros disponemos en general de dos tipos de memorias centrales: memorias de lectura/escritura aleatoria (RAM), y memorias de sólo lectura (ROM). Todas estas memorias se comunican con la unidad central de proceso (CPU) a través de dos ramilletes de conexiones llamados buses: un bus de datos por donde circula la información de la CPU a la memoria y viceversa y un bus de direcciones con el que la CPU elige la posición de memoria que quiere leer/escribir. Además existe un bus de control pequeñito que indica entre otras cosas si se quiere leer o escribir el dato que habrá de pasar por el bus de datos.

Dentro de las memorias RAM se distinguen dos tipos fundamentales: Las RAM dinámicas y las RAM estáticas, se diferencian en precio rapidez y consumo de energía. Las RAM dinámicas funcionan igual que los tubos de Williams en el sentido de que cada cierto tiempo hay que refrescar la imagen "remanente". Es decir los datos permanecen en ellas durante un pequeño periodo de tiempo tras el cual hay que realimentar la memoria con fresca energía eléctrica. Estas memorias son baratitas y son las más utilizadas, de hecho son las que lleva nuestro QL. El problema que tienen es que cada cierto tiempo hay que interrumpir a la CPU para refrescar la memoria. Las memorias son más o menos rápidas , más o menos caras según sea el tiempo de refresco menos o mas largo y consuman a sí menos o más energía. Hoy en día hay memorias RAM dinámicas rapidísimas como las de la ampliación de memoria de CST o bastante lentas como la memoria básica del QL (las de CST son más del doble de rápidas). Las RAM estáticas no interrumpen nunca a la CPU y son por ello rapidísimas pero tienen la pega de que han de estar constantemente enchufadas y consumen mucha energía. RAM estáticas son las que utiliza el COMMODORE AMIGA en su memoria de pantalla y con las que logra esos gráficos tan rapidísimos (aunque con el tipo de memorias RAM que utiliza CST en sus THOR se podrían lograr resultados parecidos). Un tipo especial de RAM estática son las memorias caché como la del MC 68020. estas memorias están íntimamente ligadas a la Unidad aritmético-lógica de la CPU, pudiendo reducir ostensiblemente la CPU con su utilización el tiempo de ejecución de las instrucciones. Este mundo de las memorias RAM, sobre todo las dinámicas, estad atentos a los años que vienen, que con los superconductores que actualmente se están desarrollando van a revolucionarse de un modo increíble.

Las memorias de Solo lectura o ROM, son las que normalmente se utilizan para albergar programas y rutinas de sistemas operativos, no pueden albergar variables dado que no se pueden escribir por la CPU.

Las hay de dos tipos en general, borrables y no borrables. Las no borrables o memorias ROM en general actúan de un modo muy parecido a un juego de miles de interruptores de la luz. Al ser llamada una posición de memoria ésta devuelve al bus de datos una serie de corrientes en función de si deja pasar o no una corriente de alimentación del bus, es decir si hay o no un conductor, con ocho interruptores formamos un octeto. La memoria "no consume" corriente pues en el fondo lo que hace es utilizar la corriente de referencia del bus de datos que la descarga a masa o no. Estas como es lógico hay que hacerlas en una fábrica y su funcionamiento en sí es idéntico al programa cableado que utilizaba cuatro décadas atrás el ENIAC (seguimos siendo muy poco originales).

Las borrables (EPROM) suponen un poco más de refinamiento tecnológico estas se basan ya no en conductores sino en semiconductores (ni carne ni pescado), estos semiconductores les podemos excitar con una corriente eléctrica intensa (la que suministra el programador de EPROMS) para que luego al alimentarlos con una corriente pequeñita se marque un poco más las diferencias entre la carne o el pescado algo así como una operación de cambio de sexo, y se decante su respuesta en uno u otro sentido. Estas pues requieren que en su utilización se les aporte energía por lo que consumen algo, poco pero algo, de ahí que en los cartuchos EPROM haya una pequeña circuitería auxiliar que aporta dicha energía. Dentro de las ROM borrables las más difundidas actualmente son las V-EPROM que se borran con rayos Ultravioleta para lo cual disponen de una ventanita por donde se ven los intrincados recovecos de la memoria. Aunque hoy en día han aparecido otras que cada vez se ven más por ahí, dado que se borran más rápidamente: Las E_EPROM, estas se borran mediante electricidad del mismo modo que se programan, y no poseen ventanita, porque no les hace falta.

Los cartuchos ROM (o EPROM) del QL se conectan a través de una conexión posterior del QL, aunque también pueden conectarse en el conector de BUS lateral, están definidos para que sean de 16k y en principio pueden haber hasta 17, en posiciones de memoria permisibles y algunos más en áreas reservadas del mapa de memoria (en principio para uso exclusivo de Sinclair, y que son las que utiliza la Trump Card para colocar su controlador de disco y el Toolkit II, ahora con la trump card sólo dispondremos de un único conector de ROMs)

Los programas en ROM tienen las siguientes especificaciones, con el objeto de que durante la inicialización del ordenador se pueda detectar la presencia de la ROM y conectarla al sistema. Para ello las ROM tienen una cabecera al comienzo de su código con el siguiente formato:

00 palabra larga indicador de reconocimiento ($4AFE0001)
04 apuntador a la lista de procedimientos y funciones (16bit)
06 apuntador a la rutina de iniciación (16 bit)
08 cadena que identifica la ROM (formato estándar de QDOS)

Los apuntadores son relativos a la dirección de comienzo de la ROM. La cadena de identificación aparece en forma de contador de caracteres (palabra) seguido de caracteres ASCII de la cadena de descripción. Esta cadena aparecerá en el canal cuyo indicador esté en A0 a tiempo de conexión de la ROM.

La lista de procedimientos y funciones sigue el formato que utiliza la rutina vectorial $110 BP.INIT. Además, en el momento de llamar a las rutinas de iniciación, hay unos registros con especial significado. A0 ya hemos dicho que lleva el CH-ID de la ventana de iniciación, A3 lleva el apuntador a la base de la ROM y A6 ya lleva el apuntador de pila del BASIC. Estos registros no deben de modificarse por la rutina de iniciación.

Al encender el ordenador, de reconocerse una ROM por el código $4AFE0001 se conectan sus procedimientos y funciones BASIC (salvo que el apuntador sea 0) y se ejecuta la rutina de iniciación (salvo que el apuntador sea 0) y así con cada una de las 17 posibles ROM.

Así es como trabaja nuestro QL al inicializarse, pero esto no nos impide que el código que nosotros tengamos en ROM lo podamos poner en marcha desde RAM, como nos ocurriría cuando quisiéramos inicializar varias ROM para usarlas simultáneamente: EJ el ICE y el Toolkit II en ROM.

Si tenemos la suerte de que el código de una ROM es relocalizable, podremos cargarla en RAM sin ningún problema, siguiendo las breves normas que significo a continuación. Supongamos que deseamos cargar éstas dos ROM en el sistema: bueno lo que se puede hacer es cargar el ICE en ROM como de costumbre, y luego cargar el Toolkit II en RAM. La situación inversa no es posible, dado que ICE no es relocalizable en su código y además utiliza rutinas vectoriales de uso exclusivo (que pena). El Toolkit II si que es relocalizable y le podemos poner en marcha en RAM casi sin problemas

Para poder cargar una ROM en RAM lo que primero necesitamos es un fichero con el código de la ROM. Obtener éste fichero es muy simple:

Inicializar el QL con el cartucho ROM que deseamos cargar en RAM colocado en el conector de ROM, y luego ejecutar un comando como el siguiente:

SBYTES flp1_Toolkit_ROM,49152,16*1024

49152 es la posición de memoria donde comienza el cartucho ROM y 16*1024 son los 16 Kbytes de longitud de ésta.

Una vez obtenido éste fichero, desconectamos el ordenador y ya podemos colocar el cartucho ROM del ICE y arrancar el ordenador. Entrando en SuperBASIC cargaremos y activaremos el Toolkit II del siguiente modo en general

a=RESPR(16*1024)

lbytes flp1_toolkit_ROM,a

IF peek_w(a+4)<>0:CALL peek_w(272),0,0,0,0,0,0,0,0,a+peek_w(a+4)
IF peek_w(a+6)<>0:CALL a+peek_w(a+6),0,0,0,0,0,0,0,0,0,0,a

y con ello tendremos el mensaje de inicialización del Toolkit en el canal 0 y el Toolkit II a punta de tecla.

Este es un mecanismo estándar de llamada, que sigue los pasos usados por el ordenador al inicializarse, y que sirve para activar desde RAM cualquier programa ROM con la cabecera estándar siempre y cuando su código sea relocalizable.

La rutinita, comprueba primero la existencia de una lista de procedimientos y funciones, y en caso de haber alguna, llama al vector $110 (272 en decimal) pasando en el registro A1 la dirección de la lista de procedimientos. Luego de existir, llama a la rutina de inicialización con A0=0 y A3 = base con ello de imprimirse el mensaje de descripción de la ROM lo hará en el canal 0.

En el caso concreto del Toolkit II V$2.08, al cargarlo así, si lo hacemos desde dentro de un programa, puede que el intérprete de BASIC se haga un lío y repita algunas instrucciones o deje de ejecutar otras, esto probablemente se debe a que el código de inicialización de la ROM no respete el registro A6, pero no es un problema grave, y podremos usar el Toolkit.

Imagino que con éste código se podrán inicializar muchas otras ROM, sobre todo aquellas que contengan únicamente Toolkits o comandos de BASIC (Probablemente las de los compiladores de Metacomco), pero esto no lo he podido comprobar aún, la papeleta se la dejo a aquellos que les interese hacer uso de éstas sucintas notas.


Sinclair QL Recursos en Castellano Alojado en / Hosted at:
Sinclair QL Recursos en Castellano
Sinclair QL Spanish Resources