Un blitter es un circuito, a veces como coprocesador o bloque lógico en un microprocesador , dedicado al rápido movimiento y modificación de datos dentro de la memoria de una computadora . Un blitter puede copiar grandes cantidades de datos de un área de memoria a otra con relativa rapidez y en paralelo con la CPU , al tiempo que libera capacidades más complejas de la CPU para otras operaciones. Un uso típico de un blitter es el movimiento de un mapa de bits , como ventanas e íconos en una interfaz gráfica de usuario o imágenes y fondos en un videojuego 2D. El nombre proviene de la operación bit blit de la Xerox Alto de 1973 , [1] que significa transferencia de bloques de bits. [2] Una operación blit es más que una copia de memoria, porque puede involucrar datos que no están alineados en bytes (de ahí el bit en bit blit ), manejo de píxeles transparentes (píxeles que no deben sobrescribir el destino) y varias formas de combinar el datos de origen y destino.
Los blitters han sido reemplazados en gran medida por unidades de procesamiento de gráficos programables .
En las computadoras sin gráficos rasterizados acelerados por hardware , que incluyen la mayoría de las computadoras domésticas de las décadas de 1970 y 1980 y las PC compatibles con IBM hasta mediados de la década de 1990, el búfer de cuadros se almacena comúnmente en una memoria accesible a la CPU. El dibujo se logra actualizando el frame buffer mediante software. Para rutinas gráficas básicas, como componer una imagen más pequeña en una más grande (como para un videojuego) o dibujar un rectángulo relleno, es necesario manipular grandes cantidades de memoria y se emplean muchos ciclos para buscar y decodificar bucles cortos de carga/ instrucciones de la tienda. Para las CPU sin caché, el requisito del bus para las instrucciones es tan importante como los datos. Para reducir el tamaño del búfer de fotogramas, es posible que un solo byte no corresponda necesariamente a un píxel, sino que contenga 8 píxeles de un solo bit, 4 píxeles de dos bits o un par de píxeles de 4 bits. La manipulación de píxeles empaquetados requiere operaciones adicionales de desplazamiento y enmascaramiento en la CPU.
Los Blitters se desarrollaron para descargar tareas repetitivas de copiar datos o llenar bloques de memoria más rápido de lo posible por la CPU. Esto se puede hacer en paralelo con la CPU y también manejar casos especiales que serían significativamente más lentos si se codificaran a mano, como omitir píxeles marcados como transparentes o manejar datos que no están alineados en bytes.
1973: Xerox Alto , donde se originó el término bit blit , tiene una instrucción de transferencia de bloques de bits implementada en microcódigo , lo que la hace mucho más rápida que la misma operación escrita en la CPU. [1] El microcódigo fue implementado por Dan Ingalls . [1]
1982: Además de dibujar primitivas de formas, el procesador de visualización de video NEC μPD7220 puede transferir mapas de bits rectangulares a la memoria de visualización mediante acceso directo a la memoria y llenar porciones rectangulares de la pantalla. [3] [4]
1982: El videojuego arcade Robotron: 2084 de Williams Electronics incluye dos chips blitter que permiten que el juego tenga hasta 80 objetos en movimiento simultáneamente. [5] El rendimiento se midió a aproximadamente 910 KB/segundo. [5] El blitter funciona con píxeles de 4 bits (16 colores) donde el color 0 es transparente, lo que permite formas no rectangulares. [6] Williams usó el mismo hardware en otros juegos de la época, incluidos Sinistar y Joust . [6]
1984: La computadora personal Mindset compatible con MS-DOS contiene un chip VLSI personalizado para mover secciones rectangulares de un mapa de bits. El hardware maneja la transparencia y ocho modos para combinar los datos de origen y destino. [7] Se afirmó que Mindset tenía gráficos hasta 50 veces más rápidos que los PC compatibles con IBM de la época, [8] pero el sistema no tuvo éxito.
1985: Uno de los coprocesadores de la computadora personal Amiga es un blitter. La primera solicitud de patente estadounidense que utilizó el término blitter fue "Aparato informático personal para la transferencia en bloque de datos de imágenes en mapas de bits", asignada a Commodore-Amiga, Inc. [9] El blitter realiza una operación booleana arbitraria en tres vectores de bits de tamaño dieciséis:
destination := op(source A, source B, source C)
1986: El TMS34010 es un procesador de 32 bits de uso general con instrucciones integradas, incluida PIXBLT
(Transferencia en bloques de píxeles), para manipular datos de mapas de bits. Está optimizado para casos que requerirían procesamiento adicional si se implementaran en software, como el manejo de píxeles transparentes, el trabajo con datos alineados sin bytes y la conversión entre profundidades de bits. PIXBLT
proporciona 22 formas de combinar los datos de origen y destino. [10] El TMS34010 sirve como CPU y GPU para varios juegos arcade que comenzaron en 1988 con Narc e incluyen Hard Drivin' , Smash TV , Mortal Kombat y NBA Jam . [11] También se usó en placas aceleradoras de gráficos en la década de 1990.
1986: El Intel 82786 es un procesador de gráficos programable con BIT_BLT
instrucciones para mover secciones rectangulares de mapas de bits. [12]
1987: El adaptador de pantalla IBM 8514/A , presentado con las computadoras IBM Personal System/2 en abril de 1987, incluye hardware de transferencia de bloques de bits. [13]
1987: El Atari Mega ST 2 se envía con un chip blitter. [14] Oficialmente llamado "Procesador de transferencia de bloques de bits Atari ST", estilizado como BLiTTER, proporciona 16 opciones para fusionar datos de origen y destino. [15] El blitter es compatible con la mayoría de las máquinas ST posteriores.
1989: La estación de trabajo Atari Transputer de corta duración contiene hardware blitter como parte de su sistema de vídeo "Blossom" (basado en Mega ST). [dieciséis]
1989: El sistema de juegos portátil en color Atari Lynx tiene un blitter personalizado con efectos de escala y distorsión.
1993: La consola de juegos Atari Jaguar tiene hardware blitter como parte del chip personalizado "Tom". [17]
1996: El Grupo VESA introdujo una forma estandarizada de acceder a funciones como transferencias de bloques de bits de hardware con funciones VBE/acelerador (VBE/AF) en PC compatibles con IBM.
Normalmente, un programa de computadora coloca información en ciertos registros de hardware que describen qué transferencia de memoria debe completarse y las operaciones lógicas que se deben realizar con los datos. Luego, la CPU activa el blitter para que comience a funcionar. La CPU está libre para otros procesamientos mientras el blitter está funcionando, aunque el blit que se ejecuta en paralelo utiliza ancho de banda de memoria.
Para copiar datos con píxeles totalmente transparentes, como sprites, algunos hardware permiten ignorar un valor de píxel específico, como el color 0, durante el blit. Esos píxeles no se escriben en el destino.
Otro enfoque en algunos sistemas es utilizar una segunda imagen de 1 bit por píxel como máscara para indicar qué píxeles transferir y cuáles dejar intactos. La máscara funciona como una plantilla . La operación lógica es:
destination := (background AND NOT mask) OR sprite
Los sprites de hardware son pequeños mapas de bits que se pueden colocar de forma independiente y que el chip de vídeo los compone junto con el fondo sobre la marcha. El frame buffer no se modifica. [18] La desventaja de los sprites es un límite de gráficos en movimiento por línea de escaneo, que puede variar de tres ( Atari 2600 ) a ocho ( Commodore 64 y computadoras Atari de 8 bits ) y significativamente más alto para consolas de 16 bits y hardware arcade (el Neo Geo puede mostrar 96 sprites por línea) y la incapacidad de actualizar un mapa de bits permanente (lo que los hace inadecuados para la aceleración general de GUI de escritorio).