# Framebuffer

Se le llama framebuffer a una categoría de dispositivos gráficos, que representan cada uno de los píxeles de la pantalla como ubicaciones en la memoria de acceso aleatorio. También se le llama así en el área de los sistemas operativos, a los dispositivos que usan o aparentan usar dicho método de acceso a dispositivos gráficos.

## Historia

Los informáticos discutieron durante mucho tiempo las ventajas del uso de este dispositivo, pero no fueron capaces de producir una máquina con suficiente memoria a un coste económicamente viable. En el año 1969, Michael A. Noll de los Laboratorios Bell implementó una pantalla digitalizada con una memoria de fotograma intermedia. Más tarde, el sistema de Bell Labs fue ampliado para mostrar una imagen con una profundidad de color de tres bits en un monitor de televisión en color estándar. Hasta una pantalla antes escaneada se llevó a cabo en el Laboratorio Nacional de Brookhaven. Los avances en la memoria de circuito integrado en la década de 1970 produjeron un coste más práctico para crear framebuffers capaces de almacenar una imagen de video estándar.
El año 1972, Richars Shoup desarrolló el sistema SuperPaint en Xerox PARC. Este sistema tenía 311,040 bytes de memoria y era capaz de almacenar 640 por 480 píxeles de datos de 8 bits de profundidad de color. La memoria se dispersa a través de 16 placas de circuitos, cada uno cargado con múltiples 2-kilobit fichas de registro de desplazamiento. Este diseño requiere que el framebuffer total deba de ser implantado como un registro e desplazamiento de 307.200 bytes, que se movió en sincronización con la señal de salida de televisión. El principal inconveniente de este sistema era que la memoria no era de acceso aleatorio.
Shoup también fue capaz de usar el framebuffer SuperPaint para crear un sistema de captura de vídeo digitales. Mediante la sincronización de la señal de salida de señal de entrada, Shoup era capaz de sobreescribir cada píxel de datos a medida que iba moviéndose. Shoup también experimentó con la modificación de señales de salida usando las tablas de colores. Estas tablas de colores permiten que el sistema SuperPaint produjera una amplia variedad de colores fuera de la gamma de los datos de 8 bits limitada que contenía. Este esquema sería más tarde convertido en alguna cosa comuna en los framebuffers informáticos.
En 1974, Evans & Sutherland lanzó el primer uso comercial de este dispositivo, que costaba sobre 15.000$. Fue capaz de producir una resolución de hasta 512 por 512 píxeles en escala de grises de 8 bits, y se convirtió en una gran ayuda para los investigadores gráficos que no tenían los recursos para construir su propio dispositivo. El Instituto Tecnológico de Nueva York más tarde creó el primer sistema de 24 bits usando tres de los frambuffers de Evans & Shuterland. Cada uso de este dispositivo se conectaba a una salida de color RGB (uno para el rojo, otro para el verde y otro para el azul), con un miniordenador Digital Equipment Corporación PDP 11/04, teniendo un control de los tres dispositivos en uno.
En 1975, la compañía británica Quantel produjo la primera emisión a todo color framebuffer comercial: el Quantel DFS 3000. Fue usado por primera vez en la cobertura televisiva de los Juegos Olímpicos de Montreal 1976 para generar una inserción de imagen en imagen de la antorcha olímpica, mientras que en la resta de la imagen aparecía el corredor entrando en el estadio.
La rápida mejora de la tecnología de circuitos integrados hizo posible que muchos de los ordenadores personales de la década de 1970 (como el Apple ll) dispusiesen de framebuffers a color. Aunque al principio se burlaron de los malos resultados en comparación con los dispositivos gráficos más sofisticados usados en los ordenadores como el Atari 400, con el tiempo los framebuffers se convirtieron en el estándar para todos los ordenadores personales. Hoy en día, casi todos los ordenadores con capacidades gráficas utilizan este dispositivo para la generación de la señal de vídeo.
Los framebuffers también se hicieron populares a las estaciones de trabajo de gama alta y a las placas del sistema de juegos electrónicos a lo largo de la década de 1980. SGI, Sun Microsystems, HP, DEC e IBM usaron framebuffers para sus ordenadores de trabajo. Estos framebuffers eran en general de una calidad mucho más alta que la que se podía encontrar en la mayoría de los ordenadores personales, y si se utilizaban regularmente a la televisión, la impresión, el modelaje para el ordenador y a los gráficos en 3D. Los framebuffers también fueron utilizados por Sega por sus juegos de arcade de alta gama, que también eran de una calidad más alta que en los ordenadores personales.
Los ordenadores Amiga, con un diseño de gran rendimiento de los gráficos, crearon en la década de 1980 un vasto mercado de las tarjetas gráficas basadas framebuffer. Digna de mención es la tarjeta gráfica en Amiga A2500 Unix que fue, en 1991, la primera computadora en poner en práctica un programa de servidor X11 como un servidor para alojar entornos gráficos, y la interfaz gráfica OPEN LOOK de usuario de alta resolución (1024x1024 o 1024x768 a 256 colores). La tarjeta gráfica por A2500 Unix fue llamada A2410 (tarjeta gráfica TIGA Lowell) y era una tarjeta de gráficos de 8 bits basada en el Texas Instruments TMS34010 de 50 MHz. Fue un completo coprocesador de gráficos inteligente. La tarjeta gráfica por Amiga A2410 fue co-desarrollada con la Universidad de Lowell.
Otras tarjetas gráficas notables basadas en los framebuffers Amiga fueron: la tarjeta gráfica Impact Vision IV24 de GVP; la DCTV, un adaptador de gráficos externo y con sistema de captura de vídeo; la tarjeta gráfica Firecracker 32-bit; la tarjeta Harlequin, ColorBurst; el framebuffer externo HAM-E. La tarjeta gráfica externa Graffiti está aún disponible en el mercado.
La mayoría de framebuffers Atari ST (Mega modelo STE), y Atari TT fueron creados para la ranura del conector VME de máquinas de Atari dedicada a las tarjetas de expansión de vídeo: el adaptador de gráficos Leonardo 24-bits VME, la tarjeta gráfica CrazyDots II VME de 24 bits, la tarjeta gráfica Spektrum TC, la tarjeta gráfica NOVA ET4000 VME SVGA (capaz de tener resoluciones de hasta 1024x768 a 256 colores o 800x600 a 32768 colores), el diseño del cual proviene del mundo ISA/PC.

## Modos de visualización

Los framebuffers usados en ordenadores personales muchas veces tienen un conjunto de "modos" bajo los cuales el framebuffer puede operar. Estos modos reconfiguran automáticamente el hardware para mostrar diferentes resoluciones, profundidades de color, diseños de memoria y tasas de refresco.
En el mundo de Unix (las máquinas y los sistemas operativos) estas convenciones normalmente fueron evitadas en favor de una manipulación directa de la configuración del hardware. Esta manipulación era mucho más flexible de forma que cualquier resolución, profundidad de color y ratio de refresco podía conseguirse - limitándose únicamente por la memoria disponible por el framebuffer.
Un efecto colateral de este método era que el visualizador podía ser llevado más allá de sus capacidades. En algunos casos provocando daños al hardware de visualización. Los monitores CRT modernos corrigen este problema introduciendo circuitos de protección "inteligentes". Cuando se cambia de modo de visualización, el monitor intenta obtener una señal de sincronización en la nueva frecuencia de refresco. Si el monitor no es capaz de obtener una señal de sincronización, o si la señal está fuera del rango de sus limitaciones de diseño, el monitor ignora la señal de framebuffer y seguramente muestre un mensaje de error al usuario.
Los monitores de cristal líquido tienden a contener circuitos de protección similares, pero por razones diferentes. Como éstos tienen que mostrar digitalmente la señal de visualización, cualquier señal que esté fuera de su rango no puede ser visualizada físicamente en el monitor.

## Hardware

En los dispositivos gráficos tipo framebuffer, todos y cada uno de los píxeles desplegados en cualquier instante determinado en la pantalla, están almacenados en una porción de la memoria principal de la computadora en forma de octetos binarios. Debido a que las pantallas poseen diferentes capacidades de despliegue de colores (lo que se conoce como profundidad de color), la cantidad de información necesaria para representar un píxel varía. Las pantallas generalmente admiten 8, 15, 16 o 24 bits de profundidad de color lo que equivale a 256, 32.768, 65.536 o 16.777.216 colores respectivamente. Para cambiar la imagen presente en la pantalla, basta con escribir las direcciones de memoria dedicadas al píxel que se quiere modificar.
La zona de memoria dedicada al framebuffer es habitualmente accesible para la unidad central de procesamiento como una zona cualquiera de la memoria de acceso aleatorio para lectura y escritura, salvo que ésta se reserva exclusivamente para el despliegue de imágenes, y es común que se le asigne un rango mínimo y máximo de direcciones fijo. La memoria del framebuffer es lineal, contigua y direccionable como cualquier otro trozo de la memoria de acceso aleatorio; de modo que para seleccionar un píxel dado hay que conocer su dirección, y para ello, calcular el desplazamiento adecuado a partir de la dirección de inicio de la memoria del framebuffer.
De tal modo que el ordenador modifica efectivamente las imágenes desplegadas en pantalla modificando el contenido de la zona de memoria citada anteriormente, cosa que cabe perfectamente en la definición comúnmente aceptada de lo que es un framebuffer.

## Sistemas operativos

El framebuffer es un dispositivo virtual del sistema operativo que se presenta ante las aplicaciones de diferentes maneras en función del sistema de que hablemos, aunque generalmente aparece como un archivo o un bloque de memoria de acceso aleatorio reservado en la computadora, y que puede ser accedido en lectura/escritura por uno o más procesos; en este archivo o zona de memoria especial cualquier escritura modifica directamente las imágenes desplegadas en el dispositivo de vídeo, para que de esa manera los programas puedan mostrar información en pantalla sin preocuparse de los detalles de implantación, ni de la interacción real entre el ordenador y el dispositivo de vídeo.
Sin embargo, la idea de framebuffer se asocia más bien con aquellos dispositivos del sistema que son visibles o accesibles a las aplicaciones de usuario. En algunos sistemas operativos puede ocurrir que el acceso a la memoria del dispositivo de vídeo esté oculto a las aplicaciones, y que toda modificación de las imágenes desplegadas en pantalla se efectúe por medio de una API (como ocurre por ejemplo, en el caso de los sistemas operativos Windows).