wenas, que es la memoria de video?
eso pos =P... si alguien me puede decir que es la memoria de video y si de paleteada me define lo que es pixel y cual es su importancia, gracias.
Mira, para mostrar imagenes en el monitor la targeta de video usa una tecnica que se llama de memoria compartida, es decir, el procesador de video comparte un area de direcciones especificas con el procesador central de la comutadora, a esta area se le llama memoria de video y todo dato que pongas aqui aparece en la pantalla de alguna manera segun el modo de video (texto, vga, svga, hercules, etc)
En el modo texto la memoria de video se mapeaba en el area de memoria real por debajo del megabyte de RAM para que el X86 pudiera accederla trabajando en este modo. Hoy, con los modos graficos y las targetas SVGA esto ha cambiado mapeandose en areas de memoria negociadas tanto por la targeta como por el procesador, este proceso esta estandarizado y se llama estandar VESA (Video no se que mas Asociation) aunque varios fabricantes como ATI, 3DLab, etc. tienen sus propias extenciones que, para soportarlas necesitas conocer las caracteristicas del procesador de video especifico.
Bueno, volviendo a la memoria de video...
Tambien se la conoce como framebuffer (creo que traducido sdria algo asi como el buffer del frente)
La idea basica es que el procesador de video lee de esta area compartida cada vez que tiene que actualizar el haz de electrones del monitor (unas 60-80 veces por segundo) En targetas con memoria de video aparte el porcesador central el area que lee el procesador de video esta aparte del area del procesador principal por loq ue este puede seguir accediendo a otras zonas de la memoria sin detenerse pero en targetas AGP con poca memoria u OnBoard sin memoria, el procesador central tiene que detener su acceso a memoria cuando la GPU (Procesador grafico) esta actualizando el haz de electrones en el monitor...
El formato del ramebuffer (o la memoria de video como quieramos llamarle) varia de estandar a estandar, incluso de modo grafico a modo grafico.
En los modos VESA se define que, segun la cantidad de PIXELES (esto es, puntos en pantalla), se usa 1, 2, 3, o 4 bytes para reprecentar el color del punto (PIXEL)
Cuando usamos 1 byte, no estamos indicando en ralidad el color de nada sino un indice a una tabla que tiene la targeta de video llamada paleta que es la que en definitiva contiene los componentes RGB de cada color (con 1 byte tenemos 256 indices = 256 colores con sus respectivos componentes RGB)
Esta paleta se llena a travez de un puerto especial (0x3C.. algo) mandando los componentes RGB uno tras otro con instrucciones "outb". Hay mucha informacion con respecto a esto en inernet (en ingles y castellano) y como es un tema mas que extenso no aondare mucho mas en eso...
En los modos de 16 y 24 bits (dos y tres bytes de color) tambien son indices solo que esta vez a una tabla mas grande determinada por 2 elevado a nrobits (p ej con 16 bits 65536 indices) La unica exepcion se precenta con el modo de 32 bytes TrueColor que ya no es un indice a la paleta sino que en esos 32 bits (4 bytes) estan codificados los componetes RGB de cada color como un byte cada uno...
En targetas viejas como las VGA existian diversos modos como los planares y los unchained pero actualmente estan casi en desuso.
Bien, esto es una breve (si, muy breve) explicacion de la memoria de video en VGA (SVGA, especificamente VESA)asi que no cubre los modos EGA, CGA, ni los monocromaticos, ni los Hercules, ni el de texto...
Esperen lo del texto es facil asi que podria explicarlo:
Cuando ponemos la targeta grafica en modo texto (a travez de la interrupcion 0x10 de la BIOS con AX=0x0003) estando en modo real (aunque desde modo protegido tambien se puede hacer pero hay que inicar la targeta solos) tenemos una zona de memoria a partir de la pocicion A000:0000 (justo sobre los 640K del DOS) en donde todo lo que pongamos alli aparecera como caracteres de texto en la pantalla.
Se definen dos bytes para cada caracter en una pantalla de 80x25 (2000 caracteres=4000 bytes) en los que el priper byte es el caracter (en ASCII) y el segundo es un atributo definido asi:
bit-------valor
0---------color caracter bit 0
1---------color caracter bit 1
2---------color caracter bit 2
3---------color caracter bit 3
4---------color fondo bit 0
5---------color fondo bit 1
6---------color fondo bit 2
7---------Parpadeo SI/NO
Y los colores van de 0 a 15... pero ahora no me acuerdo como eran, solo se que el negro es 0, el blanco es 15 y el gris claro es 7...
Bueno, espero que sirva de algo...
En el modo texto la memoria de video se mapeaba en el area de memoria real por debajo del megabyte de RAM para que el X86 pudiera accederla trabajando en este modo. Hoy, con los modos graficos y las targetas SVGA esto ha cambiado mapeandose en areas de memoria negociadas tanto por la targeta como por el procesador, este proceso esta estandarizado y se llama estandar VESA (Video no se que mas Asociation) aunque varios fabricantes como ATI, 3DLab, etc. tienen sus propias extenciones que, para soportarlas necesitas conocer las caracteristicas del procesador de video especifico.
Bueno, volviendo a la memoria de video...
Tambien se la conoce como framebuffer (creo que traducido sdria algo asi como el buffer del frente)
La idea basica es que el procesador de video lee de esta area compartida cada vez que tiene que actualizar el haz de electrones del monitor (unas 60-80 veces por segundo) En targetas con memoria de video aparte el porcesador central el area que lee el procesador de video esta aparte del area del procesador principal por loq ue este puede seguir accediendo a otras zonas de la memoria sin detenerse pero en targetas AGP con poca memoria u OnBoard sin memoria, el procesador central tiene que detener su acceso a memoria cuando la GPU (Procesador grafico) esta actualizando el haz de electrones en el monitor...
El formato del ramebuffer (o la memoria de video como quieramos llamarle) varia de estandar a estandar, incluso de modo grafico a modo grafico.
En los modos VESA se define que, segun la cantidad de PIXELES (esto es, puntos en pantalla), se usa 1, 2, 3, o 4 bytes para reprecentar el color del punto (PIXEL)
Cuando usamos 1 byte, no estamos indicando en ralidad el color de nada sino un indice a una tabla que tiene la targeta de video llamada paleta que es la que en definitiva contiene los componentes RGB de cada color (con 1 byte tenemos 256 indices = 256 colores con sus respectivos componentes RGB)
Esta paleta se llena a travez de un puerto especial (0x3C.. algo) mandando los componentes RGB uno tras otro con instrucciones "outb". Hay mucha informacion con respecto a esto en inernet (en ingles y castellano) y como es un tema mas que extenso no aondare mucho mas en eso...
En los modos de 16 y 24 bits (dos y tres bytes de color) tambien son indices solo que esta vez a una tabla mas grande determinada por 2 elevado a nrobits (p ej con 16 bits 65536 indices) La unica exepcion se precenta con el modo de 32 bytes TrueColor que ya no es un indice a la paleta sino que en esos 32 bits (4 bytes) estan codificados los componetes RGB de cada color como un byte cada uno...
En targetas viejas como las VGA existian diversos modos como los planares y los unchained pero actualmente estan casi en desuso.
Bien, esto es una breve (si, muy breve) explicacion de la memoria de video en VGA (SVGA, especificamente VESA)asi que no cubre los modos EGA, CGA, ni los monocromaticos, ni los Hercules, ni el de texto...
Esperen lo del texto es facil asi que podria explicarlo:
Cuando ponemos la targeta grafica en modo texto (a travez de la interrupcion 0x10 de la BIOS con AX=0x0003) estando en modo real (aunque desde modo protegido tambien se puede hacer pero hay que inicar la targeta solos) tenemos una zona de memoria a partir de la pocicion A000:0000 (justo sobre los 640K del DOS) en donde todo lo que pongamos alli aparecera como caracteres de texto en la pantalla.
Se definen dos bytes para cada caracter en una pantalla de 80x25 (2000 caracteres=4000 bytes) en los que el priper byte es el caracter (en ASCII) y el segundo es un atributo definido asi:
bit-------valor
0---------color caracter bit 0
1---------color caracter bit 1
2---------color caracter bit 2
3---------color caracter bit 3
4---------color fondo bit 0
5---------color fondo bit 1
6---------color fondo bit 2
7---------Parpadeo SI/NO
Y los colores van de 0 a 15... pero ahora no me acuerdo como eran, solo se que el negro es 0, el blanco es 15 y el gris claro es 7...
Bueno, espero que sirva de algo...
Esa parte de como programar la memoria de video para Windows me queda bien clara, pero cuando estamos trabajando con Linux ya la cosa es bien distinta porque estamos hablando de modo protegido.
En fin solamente podemos trabajar con los servicios que nos brinda la INT 80h. Ahora, mi pregunta va dirigida a lo siguiente, yo se que en el modo texto para linux puedo trabajar con la vcsa si quiero especificar el atributo del caracter a mostrar, pero aun no se como especificarlo, ni donde, por favor si alguien sabe, ayudeme con esto..........
En fin solamente podemos trabajar con los servicios que nos brinda la INT 80h. Ahora, mi pregunta va dirigida a lo siguiente, yo se que en el modo texto para linux puedo trabajar con la vcsa si quiero especificar el atributo del caracter a mostrar, pero aun no se como especificarlo, ni donde, por favor si alguien sabe, ayudeme con esto..........
