Privacidad: Recuerde que la información escrita en los foros de programación es 100% pública y que su ip será registrada asociada a su mensaje. Si encuentra un mensaje fuera de lugar, por favor, notifiquelo para su revisión y eliminación.
wenas, que es la memoria de video?
Enviado por Cain el día 5 de abril de 2005
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...
Hola, miren buscaba en la red pero me encontre este enlace, lo que pasa es que ahora estoy trabajando con el lenguaje C y quisiera hacer un programa con un entorno gráfico por lo menos mejor que el 640x480x16 predeterminado de C, por lo que yo me preguntaba si alguien me podría ayudar en esto, busco al menos 640x480x256 o cualquier otro mofo superior, esque yo ya lo he hecho en Pascal pero hasta ahora entro con C.
Si me pueden ayudar genial, pueden escribirme!
Enviado por crakendemon el día 13 de febrero de 2006
oye q onda yo tengo q hacer un pequeño programa en C modo grafico el problema es q debo utilizar el modo 10h (640x350me parese) pero la bronka es q debo usar el modo video pero desde abajo sin utilizar las funciones de c como la putpixel no se si te sabras algunos links donde esplike esto lo de los modos planares y de la programacion de video o algo de como poner informacion en la memoria de video :s
En la pagina: http://www.sromero.org/articulos/#modox
Tienes un muy buen tutorial de modo x (en los que se incluye el que quieres programar) y del modo 13h (mas abajo, se supone que leiste este para entender el de modo x porque hace muchas referencias a este)
Es un muy buen tutorial bastante explicado Y EN CASTELLANO (cosa que es dificil de encontrar en este tema)
Para ti, la misma pagina que recomiendo mas abajo tiene informacion que te sera de gran utilidad: http://www.sromero.org/articulos/gfx/graf7.html
El modo 640x480x8 (8 bpp=256 colores) es uno de los mas faciles de programar en modo protegido (en modo real -lease DOS- es una cagada porque tienes que seleccionar los bancos) ya que solo tienes que obtener el puntero a la memoria de video (a travez de las rutinas VESA-BIOS) y escribir un byte por cada pixel...
Algo te tambien te puede servir es mirar el source de algun as librerias graficas (la mas recomendable es la Allegro que tiene mucha docmuentacion en casteyano) http://es.tldp.org/Allegro-es/web/
O las GRX (m uy buenas... muy portables, muy todo... pero en ingles, aunque tienen formas de programar modos algo extrañas y mas faciles/rapidas/eficientes que los estadares) http://grx.gnu.de/
Bueno, suerte...
Enviado por crakendemon el día 14 de febrero de 2006
oye karnal muchas gracias por los links ahora las estudiare y espero echar ya a andar este programita q me han dejado algunas de ellas ya las habia visitado otra cosa mas si no es mucha molestia no te sabras algun link donde explique lo de los puertos de la tarjeta de video para trabajar directamente con ella bueno orita a leer ya despues clñaro si tienes tiempo echame la mano con lo q te pido por el momento muchas gracias :D
Algo de eso (aunque un poco escueto para mi gusto) puedes ver en: http://www.idg.es/pcworld/articulo.asp?id=36612
Si quieres mira: http://www.wikilearning.com/arquitectura_del_pc_at...
Tal vez algo alli te sirva (a mi no me convencio mucho... pero bueno... nunca esta demas)
Ha, alli tambien hay muchos links (casi al final de la pagina...) no tuve tiempo de mirarlos a todos pero creo que hay algo de lo que buscas...
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..........