Una interrupción de trama (también llamada interrupción de trama horizontal ) es una señal de interrupción en un sistema informático antiguo que se utiliza para controlar la sincronización de la pantalla. Normalmente, aunque no siempre, la genera el chip gráfico de un sistema mientras se preparan las líneas de exploración de un fotograma para enviarlas al monitor para su visualización. La implementación más básica de una interrupción de trama es la interrupción de trama vertical .
Este tipo de interrupción proporciona un mecanismo para que los registros gráficos se modifiquen a mitad de cuadro, de modo que tengan valores diferentes por encima y por debajo del punto de interrupción. Esto permite que un objeto de un solo color, como el fondo o el borde de la pantalla, tenga múltiples bandas de color horizontales , por ejemplo. O que un sprite de hardware se reposicione para dar la ilusión de que hay más sprites de los que admite un sistema. La limitación es que los cambios solo afectan a la parte de la pantalla que se encuentra debajo de la interrupción. No permiten más colores o más sprites en una sola línea de escaneo.
Los sistemas operativos modernos en modo protegido no suelen admitir interrupciones rasterizadas, ya que el acceso a las interrupciones de hardware por parte de programas de usuarios sin privilegios podría comprometer la estabilidad del sistema. Como su uso más importante, la multiplexación de sprites de hardware, ya no es relevante en la actualidad, no existe un sucesor moderno de las interrupciones rasterizadas.
Varias computadoras domésticas y consolas de videojuegos populares incluían chips gráficos que admitían interrupciones de trama o tenían características que podían combinarse para funcionar como interrupciones de trama. La siguiente lista no es exhaustiva.
El Bally Astrocade admitía una interrupción horizontal en blanco para seleccionar los cuatro colores de pantalla de una paleta de 256 colores. El Astrocade no admitía sprites de hardware.
El chip ANTIC utilizado por los ordenadores Atari de 8 bits incluye interrupciones de lista de visualización (DLI), que se activan mientras se dibuja la pantalla. [1] [2] El chip ANTIC en sí es considerablemente potente y es inherentemente capaz de muchas funciones que otros sistemas requieren interrupciones de trama para duplicar. ANTIC puede mezclar múltiples modos gráficos en la pantalla, mostrar gráficos de sobreescaneo horizontal y vertical y desplazarse con precisión por regiones horizontales seleccionadas. Las DLI en Atari se utilizan normalmente para añadir color adicional a la pantalla y reutilizar los elementos gráficos de Jugador/Misil.
La consola de juegos de 8 bits ColecoVision , lanzada en 1982, así como la MSX , una computadora doméstica estandarizada de 1983, utilizaron el Texas Instruments TMS9918 . Incluye una fuente de "interrupción vertical" para reposicionar los sprites de hardware en la pantalla.
El VIC-II de C64 y C128 tiene un sistema de interrupción de trama flexible. Las interrupciones de trama y la intervención de la CPU son necesarias para reutilizar sprites en la pantalla, mezclar modos gráficos y desplazarse selectivamente por las regiones de la pantalla. Las interrupciones de trama también son compatibles con el TED de Plus/4 y C16 .
El chip gráfico PPU de la Nintendo Entertainment System no admite interrupciones de trama reales (se puede configurar una interrupción para que se active durante el intervalo en blanco vertical , pero no en cualquier línea de escaneo arbitraria), sino que requiere el sondeo de una "bandera de impacto" que indica cuándo se está dibujando el primer sprite. Aunque los primeros juegos como Super Mario Bros. , Castlevania y The Legend of Zelda lograron producir un desplazamiento de pantalla dividida efectivo con este método, consume mucha CPU. Algunos cartuchos posteriores incorporaron circuitos MMC (el más destacado es el chip MMC3 de Nintendo) que realizaban un seguimiento de la dirección y las líneas de datos de la PPU y generaban interrupciones de trama.
El IBM PCjr que utilizaba el chip gráfico Video Gate Array admitía una "interrupción de retroceso vertical" implementada como IRQ5. [3] Más tarde, en 1984, IBM introdujo el estándar gráfico EGA que también admitía una interrupción de retroceso vertical, pero implementada como XT IRQ2 y deshabilitada de forma predeterminada. [4] Sin embargo, no todas las tarjetas EGA implementaron esta función y solo muy pocos programas que utilizaban modos EGA dependían de ella.
Las GPU modernas tienen una IRQ registrada en el procesador principal. Es importante destacar que no se trata de una "interrupción en blanco" vertical ni horizontal, sino que la gestiona el controlador del dispositivo de la tarjeta gráfica.
Los ordenadores MSX2 cuentan con un chip gráfico Yamaha V9938 que, al igual que el NES, admite "interrupciones en blanco verticales" pero requiere un sondeo para "interrupciones en blanco horizontales". Se utilizaba habitualmente para crear pantallas divididas, mezclar varios modos de vídeo en una pantalla y aumentar la cantidad de colores únicos en la pantalla más allá de la especificación oficial. Ejemplos de uso destacados son la serie Aleste y Space Manbow de Konami .
Las computadoras Amiga incluyen un coprocesador personalizado llamado Copper , que se dedica a dar servicio a las interrupciones de trama. El Copper ejecuta un programa de instrucciones simples que le indica que espere una línea de escaneo vertical específica y una posición de haz horizontal, y luego actualice el contenido de un registro de hardware de chip personalizado. Esto se usa típicamente para modificar parámetros de visualización, como mezclar modos de visualización, reutilizar sprites o cambiar registros de color, pero también se puede usar para activar una interrupción de CPU.
El X68000 , un ordenador doméstico de 16 bits vendido en Japón, tiene un sistema de interrupción de trama flexible para multiplexar sprites de hardware.
El PPU de Game Boy admite cuatro interrupciones de trama: [5] se puede configurar para que se active al comienzo de una línea de exploración específica, al final de las líneas de exploración (durante el borrado horizontal ), al comienzo de todas las líneas de exploración o al comienzo del borrado vertical . Su desventaja es que se utiliza el mismo controlador de interrupciones para las tres primeras, lo que requiere el uso de código de "despacho" si se utiliza más de una condición.