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.