★ CODING ★ LISTINGS ★ Conversor de pantallas: de modo 2 a modo 1 sin perder un pixel ★ |
Conversor de pantallas: De modo 2 a modo 1 sin perder un pixel (Amstrad Semanal) | Coding Listings |
Los gráficos de cualquier programa pueden presentar problemas cuando se intenta que uno realizado en el modo 2, de alta resolución, imprima en la pantalla del ordenador en uno diferente al que ha sido realizado. La función de un conversor de gráficos es, precisamente, transformar un gráfico de un modo a otro sin que por ello se desfigure m se pierda información alguna en el proceso. De todos es sabido que en el Amstrad podemos encontrar tres modos de pantalla, y para cada uno de ellos el tratamiento de los gráficos es totalmente distinto. Así, por ejemplo, en el modo de mayor resolución (el 2), cada uno de los bits que componen los bytes que forman la pantalla, nos proporciona información únicamente de pixels apagados o encendidos. En los otros dos, además de llevar esa información, nos indica de qué color debe aparecer el pixel en la pantalla. De esta forma, un gráfico realizado, por ejemplo, en modo 2 no podrá ser impreso en otro modo distinto de pantalla, ya que aparecería desfigurado. Por todo lo dicho anteriormente, nos ha parecido oportuno realizar una rutina que sea capaz de transformar gráficos realizados en el modo de alta resolución a modo 1, con el color que se desee. Dicha rutina será capaz de transformar un gráfico de cualquier dimensión entre los modos de pantalla mencionados anteriormente. Veamos, pues, cómo funciona dicho conversor de gráficos y cuáles son los parámetros más importantes del programa. En primer lugar deberemos indicar dónde se encuentra el gráfico que se quiere cambiar de modo y cuál es su longitud, así como la zona de memoria donde se debe colocar el gráfico ya convertido. Estas condiciones se deberán indicar en los registros que se indican a continuación: HL ... Dirección del gráfico en modo 1 (final)Debemos tener en cuenta, que la longitud del gráfico convertido, ocupará el doble de bytes que el gráfico inicial, ya que cada byte de modo 2 se convierte en dos bytes de modo 1, debido a que la memoria de pantalla en dicho modo debe ser el doble para el mismo formato de gráfico. |
bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 |
1 | 0 | 0 | 1 | 1 | 1 | 1 | 0 |
En primer lugar, deberemos tomar los cuatro bits de mayor peso, es decir, los bits del 7 al 4, y convertirlos a modo 1 tinta 1.
Dado que en este modo y con dicha tinta, los bits que se encargan de dar esta información son los cuatro de mayor peso, deberemos formar un byte con los cuatro bits más significativos del byte inicial, colocando los restantes a cero. Con lo que nos quedaría:
Como hemos dicho que la información nos la dan los cuatro bits más significativos, hay que rotar dicho byte cuatro veces hacia la izquierda, y colocar a cero los cuatro bits de menor peso, con lo que nos quedaría:
De esta forma habremos conseguido formar dos bytes del gráfico en modo 1 a partir de un byte de gráfico en modo de alta resolución.
Veamos qué operaciones se deberían efectuar si deseáramos traspasar el mismo byte inicial anterior, pero esta vez con tinta 2.
Dado que la información para este color nos la dan los cuatro bytes de menor peso, deberemos
realizar lo mismo que se ha hecho anteriormente, pero en este caso colocando siempre la información en los bits 3 a 0 y dejando los bits más significativos a cero.
Así pues, tomaríamos los bits superiores, y los traspasaríamos a los cuatro bits de menor peso, haciendo rotar el byte cuatro veces hacia la derecha y colocando a cero los cuatro superiores.
Con lo cual el primer byte nos quedaría de la siguiente manera:
tomaríamos los cuatro bits de menor peso del byte inicial, poniendo a cero los de mayor peso, con lo que nos quedaría:
Así, pues, cogeremos en primer lugar los cuatro bits superiores del byte inicial, haciendo una copia de dichos bits en los cuatro de menor peso, con lo cual este primer byte nos quedaría como se indica:
En este caso, el segundo byte sería:
Al linal de esta rutina hemos incluido otra de impresión en pantalla para poder observar el efecto que produce el convertidor de gráficos. Dicha rutina coloca el puntero en la dirección donde se ha almacenado el gráfico convertido y lo imprime en pantalla. Como ejemplo hemos tomado los bytes que forman el carácter de la letra A.
Con ella, podremos tomar cualquier gráfico realizado en Spectrum o MSX y transformarlo de forma que se pueda visualizar perfectamente en modo 1 de Amstrad.
Para poder utilizarla, copiar el listado ensamblador que aparece seguidamente y, para los que no posean ensamblador, se ha preparado un programa cargador.
Alberto Suñer , Amstrad Semanal
|
|