Memoria de Pantalla

                En el IBM PC,corriendo bajo DOS,es posible direccionar
directamente la memoria de pantalla.Esto se hace,por ejemplo,
cuando se quiere escribir en la pantalla sin usar los servicios
del DOS o del lenguaje de programación,cuando se desea imprimir
los carácteres del 0 al 32,cuando se desea salvar el contenido de
una porción de la pantalla,escribir en otra página de video,etc.

                La memoria de video comienza en los controladores
a color en la posición B800:0000 de la memoria y a partir de
entonces se maneja como un arreglo que por cada carácter en
modo texto ocupa 2 bytes,el primero para el atributo,es decir
el color,y el segundo para el carácter en sí.Cada página ocupa,por
lo tanto,4000 bytes.
                Para escribir en ella se debe declarar un arreglo que
comience en la misma posición que la memoria de video.Esto
se hace con la macro MK_FP.Como he observado compiladores
que tienen esta macro mal definida o no la tienen,ahí va la definición:
#define MK_FP(seg,off) (void far *) (((unsigned long) seg<<16) | (unsigned long) off)
Se debe declarar un puntero a enteros que sea la pantalla de ahora
en adelante y asignarle la dirección de la pantalla.Y,como es un
arreglo,hay que hacer los cálculos para trabajarlo como una matriz
y asociar una posición en él con una posición de la pantalla.
Definiremos la siguiente macro:
#define pos(x,y) x + (80 * y)
y eso es todo lo que se necesita.Veamos un ejemplo:

/*Función que imprime directamente en la memoria*/
#include "dos.h" /*Para los que tengan el Borland TurboC,*/
                            /*aquí está MK_FP*/
#define pos(x,y) x + (80 * y)
#define COLOR 7
void print(int x,int y,char *string){
    int far *pantalla;
    pantalla = MK_FP(0xB800,0);
    while(*string){
        pantalla[pos(x,y)]=(COLOR << 8) + *string++;
        x++;
    }
}

Si se desea cambiar el color,porque esta escribe en el atributo
normal,cambiar el define.
 


Página Anterior