★ APPLICATIONS ★ CREATION GRAPHIQUE ★ RSX CONTROLADORES DE MODO 3 (AMSTRAD USER) ★ |
RSX Controladores de Modo 3 (Amstrad User) | Applications Creation Graphique |
Sí, es un hecho muy poco conocido que su AMSTRAD es capaz de utilizar otro modo de pantalla. Para nuestra conveniencia, le llamaremos «Modo 3». La diferencia con los otros modos estriba en que puede tener datos en la pantalla sin verlos, y que sin embargo están ahí. «¿Para qué sirve eso?», les oigo preguntar. Bueno, desde luego que no puedo oírles pero apostaría que alguno lo pensó, aunque no lo dijera en voz alta.
Este modo tiene sus limitaciones. Sólo se pueden tener cuatro colores y los pixels son del mismo tamaño que en el modo O. Esto quiere decir que sólo dispondrá de veinte letras en cada línea. Sin embargo, resulta muy divertido usarlo. Afortunadamente la mayoría de los comandos normales de impresión pueden utilizarse en ella, y algunas plumas escribirán en la pantalla posterior, otras en la frontal, algunas en ambas al mismo tiempo y otras, también en ambas, pero con colores diferentes en cada una. Las plumas que escriben sólo en la pantalla frontal son las 1,2 y 3. Las plumas que escriben sólo en la pantalla posterior son las 0,4,8 y 12. La pluma 15 se ve igual en las dos, y las restantes 5,6,7,9,10,11,13 y14 escriben en ambas pantallas pero en colores diferentes cuando observamos la frontal de cuando observamos la posterior. Si teclea y ejecuta el programa largo, esperamos que consiga el mensaje «Ready» y descubra que tiene unos cuantos nuevos comandos. Si encuentra un mensaje de error, éste le dirá qué línea ha de corregir para que las cosas funcionen. El programa se reserva cierta memoria y se sitúa a sí mismo por encima de HIMEM, no importa dónde esté situada esta variable. Si está utilizando este programa junto con el de caracteres multicolores, deberá cargar el programa MULTICOLOR y ejecutar poke 0,1 antes de ejecutar este otro. Los nuevos comandos son: |MODE le pondrá en el nuevo modo y borrará la pantalla igual que cualquier otro comando Mode. |BACK. Cuando se utiliza el comando |MODE contemplará inicialmente la pantalla Frontal, y para ver la posterior debe usar el comando |BACK. Si ya se encuentra en la pantalla posterior, el comando será ignorado. |FRONT. De forma semejante, después de un comando |BACK, para- volver a la pantalla frontal utilice el comando |FRONT. Nuevamente se ignorarán los siguientes comandos |FRONT hasta que se ejecute un comando |BACK. |CLRBACK. Este comando le permite borrar la parte de la pantalla que no puede ver sin afectar a la que sí puede ver. Borrará lo que esté detrás de la pantalla y no la actual pantalla Posterior, sino la que en ese momento se encuentre oculta. |CLRFRONT. Obviamente, este comando borrará la pantalla que estamos viendo, que no tiene por qué ser la pantalla Frontal. Puede hacer esto fácilmente: |BACK: |CLRFRONT: |FRONT De este modo hace visible la pantalla Posterior, la borra y la vuelve a hacer invisible. Aún nos queda un último comando: |PRINT. Como hemos dicho, en la mayoría de los casos se pueden utilizar las rutinas normales de impresión, pero no cuando se desea imprimir algo en la pantalla frontal que esté encima de algo que sólo es visible en la Posterior. Por ejemplo, si escribió: PEN 4: LOCATE 10,1():?"HOLA"para imprimir en la pantalla Posterior, y también: PEN 1 :LOCATE 10,10:?"ADIOS"que aparecería en la pantalla Frontal. Cuando ejecute un comando |BACK no encontrará nada en la pantalla posterior, que es la que está observando ahora. Este comando le permitirá hacer esto. El comando |PRINT intenta hacer lo mismo que el PRINT normal pero sin sobreescribir lo que tiene debajo. Más tarde explicaré cómo lo hace. Para usarlo, simplemente ponga lo que quiere imprimir en una variable de cadena y ejecute la rutina. Por ejemplo: LET a$="HOLA":PEN ALOCATE 10,10: |PRINT,a$y también: LET c$="ADIOS":PEN 1: LOCATE 10,10: |PRINT,c$Puede utilizar cualquier variable para poner el texto en ella, pero si usa una que esté vacía obtendrá un mensaje de error. Ahora si escribe sus comandos |BACK y |FRONT encontrará el texto intacto en ambas pantallas. Esto sólo funcionará, sin embargo, si utiliza las plumas que sólo escriben en una pantalla o en la otra, pero no en ambas. Para borrar sólo una parte de la pantalla y no toda, puede usar el método habitual de imprimir espacios donde lo necesite. Desde luego, de esta forma borrará en ambas pantallas a la vez. Si sólo quiere borrar en una de las pantallas, simplemente reescriba las mismas letras sobre las que quiera borrar en esa pantalla, bien sea la frontal o la posterior. Recapacitemos y clarifiquemos todo este tráfico de Frontales y Posteriores. Tenemos dos pantallas, una de ellas visible, a la que llamamos frontal, con «f» minúscula, y la otra invisible, a la que llamamos posterior, con «p» minúscula. Puede intercambiarlas con los comandos |FRONT y |BACK, de modo que a la primera que vemos después de un comando |MODE la llamaremos Frontal, con «F» mayúscula, y similarmente a la otra la llamaremos Posterior, con «P» mayúscula. Aparte de estos comandos, toda la impresión y borrado se efectúa en la pantalla visible frontal o posterior, que puede ser visible o no en el momento de ejecutar el comando. A continuación haré todo lo posible para explicar cómo trabaja este modo. Un byte está compuesto por ocho bits, y en el modo 0 cuatro de estos bits se utilizan para la información de color del pixel izquierdo y cuatro para el derecho, por ejemplo: Un byte = 11111111 Estos son los bits para el pixel izquierdo: Izquierdo = 10101010 Estos son los bits para el pixel derecho: Derecho = 01010101 Con Cuatro bits se pueden obtener 24 = 16 colores para cada pixel, que es exactamente lo que tenemos en modo 0. En el Modo 3 la distribución es diferente. Estos son los bits para el pixel izquierdo posterior: Izquierdo posterior = 00000011 Estos son los bits para el pixel izquierdo frontal: Izquierdo frontal = 00001100 Estos son los bits para el pixel derecho posterior: Derecho posterior = 00110000 Estos son los bits para el pixel derecho frontal: Derecho frontal = 11000000 Si numeramos los bits de este modo: Número de bit 7,6,5,4,3,2,1,0 Byte 1,1,1,1,1,1,1,1 puede ver que aunque los bits 7,6,5 y 4 sean 1, sólo dos de ellos, 7 y 6, influirán en la pantalla frontal y los bits 5 y 4 lo harán en la posterior. A esto se debe que tengamos sólo cuatro colores ya que, en cada pantalla, un pixel sólo tiene 22 = 4 números diferentes. Por ello, al imprimir texto en una pantalla se borra el texto de la otra si se utilizan los métodos normales. Estos usan los cuatros bits para cada pixel aunque sólo dos sean 1, y borran los otros dos. IPRINT, sin embargo, realiza una operación XOR con el texto, de modo que si sólo dos bits están a uno en la pantalla posterior y ponemos texto en la pantalla frontal, se combinan y permanecen intactos. La regla de XOR es, como estoy seguro de que ya sabréis: 1100 1111 Como puede ver, en la primera suma los bits se combinan, y si trata de nuevo de hacer XOR con el segundo número obtiene el número con el que empezó. A esto se debe que utilizando el comando |PRINT dos veces con el mismo texto lo borre. Desde luego, si utiliza |PRINT con algo que aparezca en las dos pantallas a la vez, como puede ser la pluma 15, puede terminar destrozándolo todo, o puede encontrarse con que borra el texto de una pantalla, pero permanece en la otra.
|