El controlador de interfaz de televisión alfanumérico [1] ( ANTIC ) es un LSI ASIC dedicado a generar gráficos de computadora en 2D que se mostrarán en una pantalla de televisión o de computadora . Bajo la dirección de Jay Miner , el chip fue diseñado en 1977-1978 por Joe Decuir , Francois Michel y Steve Smith [2] para la familia de computadoras domésticas Atari de 8 bits lanzada por primera vez en 1979 y patentada por Atari, Inc. en 1981. [3] ANTIC también se utiliza en el Atari 5200 sistema de videojuegos lanzado en 1982, que comparte la mayor parte del mismo hardware que las computadoras de 8 bits.
ANTIC es responsable de la generación de gráficos de campo de juego que se entregan como un flujo de datos al chip CTIA / GTIA relacionado . El CTIA / GTIA proporciona el color de los gráficos del campo de juego y es responsable de agregar sprites superpuestos denominados "gráficos de jugador / misil" por Atari.
Atari lo anunció como un verdadero microprocesador, ya que tiene un conjunto de instrucciones para ejecutar programas (llamadas listas de visualización ) para procesar datos . ANTIC no tiene capacidad para volver a escribir valores calculados en la memoria, simplemente lee datos de la memoria y los procesa para enviarlos a la pantalla, por lo tanto, no es Turing completo .
Características
La lista a continuación describe las capacidades de hardware inherentes de ANTIC, es decir, la funcionalidad prevista del hardware por sí mismo, sin incluir los resultados obtenidos por las interrupciones atendidas por la CPU o los núcleos de visualización que generan cambios de registro con frecuencia.
ANTIC utiliza DMA para leer un programa llamado " Lista de visualización " que controla estas funciones de Playfield:
- 14 modos gráficos de Playfield diferentes
- 6 modos de personaje
- 4 tipos de renderizado de fuentes / glifos
- 8 modos de mapa
- 6 modos de personaje
- Genere un número variable de líneas de escaneo en blanco
- Los modos de texto y mapa del campo de juego se pueden mezclar en pantalla
- Altura de pantalla variable hasta sobreexploración vertical
- Desplazamiento grueso horizontal y vertical
- Identificar secciones de la pantalla sujetas a desplazamiento fino horizontal y / o vertical
- Activar una rutina de interrupción con servicio de CPU, llamada "Interrupción de lista de visualización", en líneas de exploración específicas (también llamada " interrupción de trama " o " Interrupción en blanco horizontal " en otros sistemas)
- Active una rutina de interrupción con servicio de CPU, llamada "Interrupción en blanco vertical", al final del marco de visualización.
Otras funciones basadas en registros:
- Ancho de pantalla variable hasta sobreexploración horizontal
- Definir la distancia de movimiento para el desplazamiento fino horizontal y vertical
- Proporciona información en tiempo real de la ubicación de la pantalla vertical del haz de electrones.
- Lee las coordenadas horizontales / verticales de un lápiz óptico (solo CRT)
- Juego de caracteres suaves y redefinibles.
- Visualización ajustable de caracteres de video inversos.
- Los caracteres pueden reflejarse verticalmente.
- Controle las interrupciones de la lista de pantalla y vertical en blanco orientadas a la pantalla, y la interrupción de la tecla Reset.
- Realiza DMA para CTIA / GTIA para producir gráficos de jugador / misil (también conocidos como sprites )
- RAM no fija. Esto permite que la RAM para las funciones gráficas se ubique en casi cualquier lugar en el rango de direcciones de memoria de 16 bits. Esto aplica a:
- Mostrar listas.
- Datos de Playfield Graphics
- Fuentes de juego de caracteres
- Datos de gráficos de jugador / misil
Versiones
por número de pieza
- C012296 - NTSC: Se utiliza en computadoras Atari 400, 800 y 1200XL. [4]
- C014887 - PAL / SECAM: Usado en computadoras Atari 400 y 800.
- C021697 - NTSC: Se utiliza en los modelos Atari 600XL, 800XL y XE.
- C021698 - PAL / SECAM: Se utiliza en los modelos Atari XL y XE.
Atari, Inc. tenía la intención de combinar las funciones de los chips ANTIC y GTIA en un circuito integrado para reducir los costos de producción de las computadoras Atari y las consolas 5200. Se estaban desarrollando dos de esos circuitos prototipo, pero ninguno entró en producción.
Pinout
Nombre de PIN | Número (s) de pin | Descripción |
---|---|---|
A0 - A15 | 13, 12, 11, 10, 28, 27, 26, 25, 24, 23, 16, 22, 17, 18, 19, 20 | E / S de dirección de memoria |
AN0 - AN2 | 2, 3, 5 | Interfaz ANTIC a CTIA / GTIA |
D0 - D7 | 30, 31, 32, 33, 40, 39, 38, 37 | E / S de bus de datos |
FØ0 | 35 | Reloj de entrada de fase 0 rápido |
DETENER | 9 | Detiene la salida, suspende la CPU mientras ANTIC lee la memoria |
LP | 4 | Entrada de lápiz de luz |
NMI | 7 | Salida de interrupción NMI a la CPU |
RDY | 15 | Salida lista. ANTIC tira del pin bajo para detener la CPU para la sincronización horizontal en blanco (WSYNC) |
ÁRBITRO | 8 | Salida de actualización de RAM |
RNMI | 6 | Entrada de interrupción NMI |
RST | 36 | Restablecer entrada ANTIC |
R / W | 14 | Dirección de E / S de lectura / escritura |
V cc | 21 | Potencia +5 voltios |
V ss | 1 | Suelo |
Ø0 | 34 | Salida de reloj de fase 0 |
Ø2 | 29 | Reloj de entrada de fase 2 |
Registros
Las computadoras Atari de 8 bits y la consola Atari 5200 asignan el chip ANTIC a la página hexadecimal $ D4xx .
ANTIC proporciona 15 registros de lectura / escritura que controlan los parámetros de visualización del campo de juego, DMA para gráficos de jugador / misil, desplazamiento fino, entrada de lápiz de luz e interrupciones. Los registros de hardware no devuelven los valores escritos cuando se leen. Este problema se resuelve mediante los registros de sombra del sistema operativo implementados en la RAM normal como lugares para almacenar el último valor escrito en los registros. Los registros de sombra del sistema operativo se copian de la RAM a los registros de hardware durante el espacio en blanco vertical. Por lo tanto, cualquier escritura en los registros de hardware que tengan registros de sombra correspondientes se sobrescribirá con el valor de los registros de sombra durante el siguiente espacio en blanco vertical.
Algunos registros de hardware de escritura no tienen registros de sombra correspondientes. Una aplicación puede escribirlos de forma segura sin que el valor se sobrescriba durante el espacio en blanco vertical. Si la aplicación necesita conocer el último estado del registro, es responsabilidad de la aplicación recordar lo que escribió.
Los registros de sombra del sistema operativo también existen para algunos registros de lectura en los que la lectura del valor directamente desde el hardware en una etapa desconocida del ciclo de visualización puede devolver resultados inconsistentes.
Nombre | Descripción | Leer escribir | Dirección hexadecimal | Dic Addr | Nombre de la sombra | Dirección de maleficio de sombra | Dirección de diciembre de sombra |
---|---|---|---|---|---|---|---|
DMACTL | Control de acceso directo a memoria | Escribir | $ D400 | 54272 | SDMCTL | $ 022F | 559 |
CHACTL | Control de personajes | Escribir | $ D401 | 54273 | GRÁFICO | $ 02F3 | 755 |
DLISTL | Puntero de lista de visualización (byte bajo) | Escribir | $ D402 | 54274 | SDLSTL | $ 0230 | 560 |
DLISTH | Puntero de lista de visualización (byte alto) | Escribir | $ D403 | 54275 | SDLSTH | $ 0231 | 561 |
HSCROL | Desplazamiento fino horizontal | Escribir | $ D404 | 54276 | |||
VSCROL | Desplazamiento fino vertical | Escribir | $ D405 | 54277 | |||
PMBASE | Dirección base de jugador / misil | Escribir | $ D407 | 54279 | |||
CHBASE | Dirección base del juego de caracteres | Escribir | $ D409 | 54281 | CHBAS | $ 02F4 | 756 |
WSYNC | Espere la sincronización horizontal | Escribir | $ D40A | 54282 | |||
VCOUNT | Contador de línea vertical | Leer | $ D40B | 54283 | |||
PENH | Posición horizontal del lápiz de luz | Leer | $ D40C | 54284 | LPENH | $ 0234 | 564 |
PENV | Posición vertical del lápiz óptico | Leer | $ D40D | 54285 | LPENV | $ 0235 | 565 |
NMIEN | Habilitación de interrupción no enmascarable (NMI) | Escribir | $ D40E | 54286 | |||
NMIRES | Reinicio de interrupción no enmascarable (NMI) | Escribir | $ D40F | 54287 | |||
NMIST | Estado de interrupción no enmascarable (NMI) | Leer | $ D40F | 54287 |
En los listados de registros individuales a continuación se aplica la siguiente leyenda:
Valor de bit | Descripción |
---|---|
0 | El bit debe ser 0 |
1 | El bit debe ser 1 |
? | El bit puede ser 0 o 1 y se utiliza con un propósito. |
- | El bit no se utiliza o no se debe esperar que tenga un valor determinado |
etiqueta | Consulte una explicación posterior para conocer el propósito de la broca. |
DMACTL $ D400 Escritura
SOMBRA: SDMCTL $ 022F
Control de acceso directo a memoria (DMA)
Poco 7 | Poco 6 | Poco 5 | Poco 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|
- | - | Lista de visualización DMA | Resolución de misiles del jugador | Jugador DMA | Misil DMA | Ancho del campo de juego | Ancho del campo de juego |
DMACTL controla el comportamiento DMA de ANTIC para los gráficos Playfield y Player-Missile ( sprite ).
Valores de bits de ancho de campo de juego :
Bits de ancho del campo de juego [1: 0] | Descripción | Tamaño |
---|---|---|
0 0 = $ 00 | Desactivar el campo de juego | |
0 1 = $ 01 | Campo de juego estrecho | 128 relojes de color / 256 píxeles de alta resolución |
1 0 = $ 02 | Campo de juego normal | 160 relojes de color / 320 píxeles de alta resolución |
1 1 = $ 03 | Campo de juego amplio | 192 relojes de color / 384 píxeles de alta resolución |
Consulte también el bit DMA de la lista de visualización sobre la visualización del campo de reproducción.
Valores de bits de DMA de jugador / misil :
Bits de DMA de jugador / misil [3: 2] | Descripción |
---|---|
0 0 = $ 00 | Desactivar el DMA de jugador y misil |
0 1 = $ 04 | Habilitar DMA de misiles |
1 0 = $ 08 | Habilitar Player DMA |
1 1 = $ 0C | Habilitar DMA de jugador y misil |
La función Player / Missile DMA de ANTIC lee bytes de la memoria y entrega datos para actualizar los registros de patrones gráficos GRAFP0, GRAFP1, GRAFP2, GRAFP3 y GRAFM de CTIA / GTIA , lo que libera a la CPU de la creación de gráficos Player / Missile ( sprite ). Estos bits activan la transmisión de ANTIC de datos de jugador y datos de misiles a CTIA / GTIA. CTIA / GTIA también debe configurarse para recibir los datos a través de su registro GRACTL para que Player / Missile DMA funcione como se espera.
Cuando Player DMA está habilitado, Missile DMA ocurre automáticamente para mantener la sincronización DMA consistente, pero los datos no se envían al registro GRAFM del Missile.
Cuando está habilitado, el DMA de jugador / misil ocurre en cada línea de escaneo en la pantalla visible, desde la línea de escaneo 8 a la 247. Por lo tanto, los datos de jugador / misil en el mapa de memoria (ver PMBASE de ANTIC ) arriba y debajo de esos recuentos de líneas de escaneo no se utilizan y no mostrado.
Valores de bits de resolución de misiles / jugador :
- $ 00 - Resolución de doble línea. ANTIC actualiza su dirección de búsqueda DMA cada dos líneas de escaneo y actualiza el patrón CTIA / GTIA Player / Missile Graphics registra cada línea de escaneo, de modo que cada patrón de bytes de Player / Missile tiene dos líneas de escaneo de alto. Cuando la resolución de doble línea está habilitada, el registro CTIA / GTIA VDELAY ($ D01C hex / 53276 dec ) funciona enmascarando las actualizaciones en las líneas de exploración uniformes, lo que provoca que el patrón de bits de los jugadores y misiles individuales descienda una línea de exploración.
- $ 10 - Resolución de una sola línea. Se produce una recuperación de DMA y una actualización de registro de jugador / misil en cada línea de exploración. El registro CTIA / GTIA VDELAY ($ D01C hex / 53276 dec ) que enmascara las actualizaciones en las líneas de exploración uniformes reduce eficazmente la resolución de una sola línea a una resolución de doble línea.
Las actualizaciones de registros de patrones de ANTIC DMA y Player / Missile ocurren en cada línea de escaneo independientemente de la resolución. Cuando la resolución de doble línea está en efecto, la memoria del jugador / misil se puede modificar entre las recuperaciones DMA redundantes, cambiando así el patrón enviado a los registros GRAF * y produciendo un jugador / misiles de resolución aparente de una sola línea.
Mostrar la lista de valores de bits DMA :
- $ 00 - Deshabilitar la lista de visualización.
- $ 20 - Activar lista de visualización.
La visualización del campo de juego requiere que Display List DMA esté habilitado y que se especifique un ancho de campo de juego. Si alguno de los valores es cero, no se genera ninguna pantalla de campo de juego.
CHACTL $ D401 Escritura
SOMBRA: GRÁFICO $ 02F3
Control de personajes
Poco 7 | Poco 6 | Poco 5 | Poco 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|
- | - | - | - | - | Reflexión de video | Video inverso | Video en blanco |
CHACTL controla la visualización de caracteres.
Los valores de los bits de control de caracteres realizan las siguientes acciones:
Característica | Valor de bits | Descripción |
---|---|---|
Video en blanco | $ 01 | Los caracteres de video inverso se muestran como espacios en blanco. |
Video inverso | $ 02 | Los caracteres de video inverso aparecen como video inverso. (defecto) |
Reflexión de video | $ 04 | Todos los personajes se muestran reflejados verticalmente. |
Los bits CHACTL Video Inverse y Video Blank afectan la visualización de caracteres en los Modos de texto ANTIC 2 y 3 que tienen el bit alto establecido (caracteres $ 80 a $ FF). Alternar los valores de los bits CHACTL permite parpadear o dejar en blanco estos caracteres globalmente para toda la pantalla.
Video Inverse y Video Blank habilitados juntos dan como resultado que los caracteres de video invertidos se muestren como un espacio en blanco inverso. Los bits Video Inverse y Video Blank funcionan en los modos ANTIC 2 y 3, y no tienen ningún efecto en los otros modos de texto 4, 5, 6 y 7.
El bit Video Reflect afecta a todos los modos de texto. Video Reflect es útil para situaciones que requieren efectos de espejo sin definir un nuevo conjunto de caracteres. Un uso ideal son los juegos de cartas que muestran caras de cartas precisas que muestran los palos al revés. Como esto refleja verticalmente los datos de glifos antes de su uso, el efecto parece inconsistente para los descendientes ANTIC Modo 3 con los bytes de glifo 6 y 7 que aparecen en la parte inferior del área del descendiente.
DLISTL / DLISTH $ D402 / $ D403 Escritura
SOMBRA: SDLSTL / SDLSTH $ 0230 / $ 0231
Puntero de lista de visualización
Poco 15 | Bit 14 | Bit 13 | Poco 12 | Bit 11 | Poco 10 | Bit 9 | Poco 8 | Poco 7 | Poco 6 | Poco 5 | Poco 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
ANTIC comienza a ejecutar la Lista de visualización señalada por la dirección de 16 bits en los registros DLISTL / DLISTH ($ D402- $ D403 hex / 54274-54275 dec ). Los registros de direcciones se actualizan durante la ejecución de la lista de visualización mediante JMP (Jump) y JVB (Jump and wait for Vertical Blank) de ANTIC. La dirección también se actualiza mediante la rutina de interrupción en blanco vertical (VBI) del sistema operativo utilizando los valores en los registros de sombra SDLSTL / SDLSTH ($ 0230- $ 0231 hex / 560-561 dec ).
Cuando la interrupción en blanco vertical del sistema operativo está habilitada, las actualizaciones directas a los registros ANTIC DLIST por parte de la CPU o las instrucciones de salto ANTIC serán sobrescritas por el sistema operativo durante el siguiente espacio en blanco vertical por los valores en los registros de sombra. Por lo tanto, el cambio de página implementado por las listas de visualización que apuntan a la siguiente lista de visualización en serie no funcionará como se espera a menos que la interrupción en blanco vertical esté desactivada.
HSCROL $ D404 Escritura
Desplazamiento fino horizontal
Poco 7 | Poco 6 | Poco 5 | Poco 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|
- | - | - | - | ? | ? | ? | ? |
Este registro especifica la distancia del desplazamiento de desplazamiento fino horizontal en los relojes de color. Solo los 4 bits más bajos son significativos. El rango de valores de relojes de 16 colores permite que ANTIC cambie el texto del Modo 2 cuatro caracteres y el texto del Modo 6 dos caracteres antes de que se necesite un desplazamiento aproximado.
Cuando el desplazamiento horizontal está habilitado para una línea de modo, ANTIC obtiene el siguiente incremento de tamaño mayor que el ancho de la pantalla actual para proporcionar el búfer de datos sujetos al control de desplazamiento horizontal. Cuando se muestra el ancho estrecho, ANTIC recupera la RAM de pantalla necesaria para el ancho normal. Del mismo modo, para el ancho normal, ANTIC obtiene la RAM de pantalla necesaria para el ancho.
ANTIC almacena en búfer los primeros bytes leídos de la memoria de la pantalla que son suficientes para cubrir el rango de movimiento del reloj de 16 colores. (De dos a cuatro bytes dependiendo del modo de visualización). El valor de HSCROL especifica cuántos relojes de color deben salir de los datos almacenados en búfer comenzando desde el último reloj de color (más a la derecha) del último byte almacenado en búfer y progresando hacia la izquierda. Cuando HSCROL es 0, no se emiten relojes de color desde el búfer, por lo que el primer byte de pantalla que se muestra es el primer byte después de los datos almacenados en el búfer. A medida que HSCROL aumenta, se agregan más relojes de color desde el final (lado derecho) de los datos almacenados en búfer al borde izquierdo de la pantalla, lo que hace que el desplazamiento fino de desplazamiento mueva el contenido de la pantalla hacia la derecha.
El modo ANTIC F (alta resolución, 1/2 píxeles de reloj de color) solo se puede desplazar dos píxeles a la vez, porque HSCROL especifica relojes de color.
Los modos ANTIC que utilizan las interpretaciones de color GTIA alternativas deben desplazarse por un píxel GTIA completo (relojes de dos colores). Solo se deben usar valores pares para garantizar un desplazamiento correcto. Los valores impares de HSCROL cambiarán el flujo de píxeles a un estado diferente que GTIA interpretará como colores diferentes.
A diferencia de muchas plataformas, el desplazamiento horizontal de Atari es visualmente consistente y libre de artefactos de "luz estroboscópica" de color debido al tamaño de píxel de Atari que coincide con la sincronización del reloj de color necesaria para obtener un color preciso.
VSCROL $ D405 Escritura
Desplazamiento fino vertical
Poco 7 | Poco 6 | Poco 5 | Poco 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|
- | - | - | - | ? | ? | ? | ? |
Este registro especifica la distancia del desplazamiento fino vertical en las líneas de exploración. Los 4 bits más bajos son significativos, sin embargo, el valor de desplazamiento vertical debe oscilar entre 0 y la altura de la línea de exploración de la línea del modo ANTIC - 1. Desplazarse más allá del número de líneas de exploración del modo ANTIC da como resultado líneas de datos repetidos que alteran la continuidad del desplazamiento fino (aunque , esto también se puede utilizar como un comportamiento explotable).
La región de desplazamiento vertical se define estableciendo el bit VS ($ 20) en una serie secuencial de líneas de modo ANTIC en la lista de visualización . La primera línea de modo sin el conjunto de bits VS se convierte en el final de la región de desplazamiento y se utiliza como una línea de búfer para proporcionar la nueva información para desplazarse hacia arriba en la parte inferior de la región de desplazamiento.
El valor de desplazamiento vertical indica el número de línea de exploración para comenzar la visualización en la primera línea de modo y también se utiliza como el número de línea de exploración para finalizar la visualización en la última línea de modo (la línea sin el bit VS configurado).
Ejemplo: Dado un modo ANTIC de ocho líneas de exploración (modos de texto 2, 4 o 6) con el bit VS configurado en dos líneas de modo adyacentes, la región de desplazamiento consta de tres líneas de modo; la tercera línea en la región de desplazamiento es el primer modo línea encontrada sin el bit VS establecido. Cuando el desplazamiento vertical no está configurado en la lista de visualización, las tres líneas de modos darían como resultado, naturalmente, 24 líneas de exploración mostradas. Cuando los bits VS se establecen en las instrucciones del modo de lista de visualización como se describe y el valor de VSCROL se establece en 2, la primera línea de modo en la región comienza a mostrarse en la línea de exploración 2 mostrando las líneas de exploración 2 a 7 (seis líneas de exploración u 8 - VSCROL ), la segunda línea de modo se muestra completamente (ocho líneas de escaneo) y la línea de modo final termina en la línea de escaneo 2 mostrando las líneas de escaneo 0 a 2 (tres líneas de escaneo o VSCROL + 1). El total de líneas de exploración mostradas en la región de desplazamiento es entonces 6 + 8 + 3 = 17 líneas de exploración.
Dado que el desplazamiento fino se basa en las líneas de exploración, no en la altura de los píxeles, y el movimiento de la región de desplazamiento se realiza simplemente saltando las líneas de exploración de la primera línea de modo y agregando líneas de exploración a la última línea de modo, es posible utilizar diferentes modos gráficos dentro de la región de desplazamiento. . Esto simplemente requiere un cuidado adicional al determinar cuántas líneas de exploración se pueden cambiar para la primera y la última línea de modo actual en la región de desplazamiento.
Las líneas del modo en blanco no se pueden contener dentro de una región de desplazamiento, porque las instrucciones de línea del modo en blanco no tienen inherentemente un bit de modificador de desplazamiento vertical. (Las instrucciones de línea del modo en blanco especifican el recuento de líneas en blanco utilizando los bits 7 a 5 que funcionan como modificadores LMS, HS y VS para las instrucciones del modo de campo de juego "normal".) Sin embargo, una instrucción del modo en blanco se puede utilizar para finalizar una región de desplazamiento y todavía está sujeto a los cambios esperados en la altura de la línea de escaneo según el valor de desplazamiento vertical.
PMBASE $ D407 Escritura
Dirección base de misiles del jugador
Poco 7 | Poco 6 | Poco 5 | Poco 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|
? | ? | ? | ? | ? | ? | ? | ? |
Esto especifica la página de la dirección base para gráficos de jugador / misil. Cuando los gráficos P / M de resolución de doble línea están operando, el valor de PMBASE debe comenzar en un límite de 1K. Cuando los gráficos P / M de resolución de una sola línea están funcionando, el valor de PMBASE debe comenzar en un límite de 2K.
CHBASE $ D409 Escritura
SOMBRA: CHBAS $ 02F4
Dirección base de caracteres
Poco 7 | Poco 6 | Poco 5 | Poco 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|
? | ? | ? | ? | ? | ? | ? | ? |
Esto especifica la página de la dirección base para el juego de caracteres. Los modos ANTIC 2, 3, 4 y 5 usan 128 caracteres en el juego de caracteres y requieren que el valor CHBASE comience en un límite de 1K. Los modos ANTIC 6 y 7 usan 64 caracteres, por lo que el valor CHBASE debe comenzar en un límite de 512 bytes.
El valor predeterminado habitual es $ E0 hex / 224 dec para el juego de caracteres en ROM en $ E000 hex / 57344 dec .
WSYNC $ D40A Escritura
Espere la sincronización horizontal
Poco 7 | Poco 6 | Poco 5 | Poco 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|
? | ? | ? | ? | ? | ? | ? | ? |
Este registro permite que los programas se sincronicen con la pantalla. Una escritura en este registro detiene el programa 6502 hasta el final de la línea de exploración actual. Este comportamiento se usa comúnmente durante las interrupciones de la lista de visualización para producir transiciones / cambios limpios de una línea de exploración a la siguiente. El valor escrito no es importante.
VCOUNT $ D40B Leer
Contador de línea vertical
Poco 7 | Poco 6 | Poco 5 | Poco 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|
? | ? | ? | ? | ? | ? | ? | ? |
Este registro rastrea la línea de exploración que se está generando actualmente. El valor devuelto es la línea de exploración real dividida por 2. Se incluyen las líneas en blanco generadas al inicio de la pantalla. El valor de NTSC variará de 0 a 130 para NTSC y de 0 a 155 para PAL. Este valor es útil durante las interrupciones de la lista de visualización para identificar la posición vertical de la pantalla.
PENH $ D40C Leer
SOMBRA: LPENH $ 0234
Posición horizontal del lápiz de luz
Poco 7 | Poco 6 | Poco 5 | Poco 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|
? | ? | ? | ? | ? | ? | ? | ? |
Contiene la posición del reloj de color horizontal cuando se presiona el gatillo del lápiz óptico / pistola de luz. El registro de sombra es la fuente recomendada para leer esta información, ya que se actualizará durante el blanco vertical garantizando resultados consistentes y confiables. Los programas deben evitar leer el registro de hardware directamente a menos que el programa esté seguro de que el registro se lee a la vez para asegurar que el valor sea válido. Las pistolas de luz para el Atari funcionan de la misma manera que los bolígrafos de luz con la adición de una lupa óptica que permite leer la pantalla desde una mayor distancia. El dispositivo de entrada de lápiz / pistola de luz requiere un CRT convencional que utiliza un haz de electrones de barrido. El bolígrafo / pistola de luz no funciona con televisores y monitores LCD modernos.
PENV $ D40D Leer
SOMBRA: LPENV $ 0235
Posición vertical del lápiz óptico
Poco 7 | Poco 6 | Poco 5 | Poco 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|
? | ? | ? | ? | ? | ? | ? | ? |
Contiene el valor VCOUNT capturado cuando se presiona el gatillo de la pluma / pistola de luz. El registro de sombra es la fuente recomendada para leer esta información, ya que se actualizará durante el blanco vertical garantizando resultados consistentes y confiables. Los programas deben evitar leer el registro de hardware directamente a menos que el programa esté seguro de que el registro se lee a la vez para asegurar que el valor sea válido. Las pistolas de luz para el Atari funcionan de la misma manera que los bolígrafos de luz con la adición de una lupa óptica que permite leer la pantalla desde una mayor distancia. El dispositivo de entrada de lápiz / pistola de luz requiere un CRT convencional que utiliza un haz de electrones de barrido. El bolígrafo / pistola de luz no funciona con televisores y monitores LCD modernos.
NMIEN $ D40E Escritura
Habilitación de interrupción no enmascarable (NMI)
Poco 7 | Poco 6 | Poco 5 | Poco 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|
DLI | IBC | REINICIAR | - | - | - | - | - |
NMIEN habilita interrupciones no enmascarables. Los valores de bit:
Característica | Valor de bits | Descripción |
---|---|---|
Reiniciar | $ 20 | Habilitar la interrupción de la tecla Reset |
IBC | $ 40 | Habilitar interrupción vertical en blanco |
DLI | $ 80 | Habilitar la interrupción de la lista de visualización |
El sistema operativo establece NMIEN en el valor predeterminado de $ 40 hex / 64 dec durante las rutinas de encendido. Las rutinas de servicio NMI primer vector a través de $ FFFA hex / 65530 dec que determina la causa y luego transfiere el control a la rutina de servicio de interrupción.
DLI:
Si el bit DLI de NMIEN se establece cuando ANTIC encuentra una instrucción Display List con el bit modificador DLI establecido, ANTIC activa el DLI en la última línea de exploración de esa línea de modo de instrucción Display List.
El sistema operativo no utiliza DLI, por lo que la dirección predeterminada para el vector DLI (VDSLST, $ 0200 hex / 512 dec ) apunta a una instrucción RTI en la ROM. La aplicación que utiliza DLI debe modificar VDSLST para que apunte a la rutina DLI deseada antes de habilitar la DLI.
El acumulador 6502, los contenidos de los registros X e Y no se conservan antes de la entrada a la rutina DLI. Es responsabilidad de la rutina DLI guardar el estado de los registros que se utilizarán durante la rutina DLI, y luego la última acción es restaurar los valores originales de los registros antes de salir con una instrucción RTI. Las rutinas generalmente empujan los valores de registro a la pila 6502.
Si se utilizan varios DLI, la primera interrupción actualiza VDSLST para señalar la dirección de la siguiente interrupción, y así sucesivamente para las interrupciones posteriores. La última rutina de interrupción de la lista de visualización en la pantalla señala a VDSLST de nuevo a la dirección de la primera interrupción de la lista de visualización. Alternativamente, se puede usar una rutina de interrupción vertical en blanco para restablecer la dirección VDSLST para garantizar que los DLI permanezcan sincronizados con la pantalla.
IBC:
Cuando se establece el bit VBI de NMIEN, ANTIC señalará una interrupción en blanco vertical al final del procesamiento del JVB (salto en blanco vertical) al final de la lista de visualización . El sistema operativo usa Vertical Blank para realizar varias tareas de limpieza (entre otras cosas: actualizar temporizadores, copiar valores de entrada del controlador a sus registros Shadow y copiar el contenido de los registros Shadow a los registros de hardware de chips personalizados).
El sistema operativo salta a través de VVBLKI ($ 0222 hex / 546 dec ) para comenzar la rutina de servicio OS VBI, y la rutina OS VBI sale con un salto a través de VVBLKD ($ 0224 hex / 548 dec ). Por defecto, VVBLKI apunta al vector de salto OS SYSVBV ($ E45F hex / 58463 dec ) para comenzar la interrupción vertical en blanco, y VVBLKD apunta al vector de salto OS XITVBV ($ E462 hex / 58466 dec ).
Los programas de usuario pueden insertar la ejecución de código personalizado antes (Inmediato) o después (Diferido) de las rutinas de interrupción vertical en blanco del sistema operativo. Dado que la interrupción en blanco vertical del sistema operativo se puede llamar mientras un programa de usuario está actualizando los vectores, el sistema operativo proporciona una rutina, SETVBV ($ E45C hex / 58460 dec ), que actualizará de forma segura los vectores VVBLKI o VVBLKD para apuntar a una nueva rutina. :
- Para establecer un nuevo destino de salto para VVBLKI (Inmediato), establezca el registro Y en el byte bajo de la dirección de destino, el registro X en el byte alto de la dirección de destino y el Acumulador en 6, luego JSR SETVBV. El código de usuario llamado a través de VVBLKI simplemente necesita salir saltando al OS Vertical Blank con un JMP SYSVBV ($ E45F hex / 58463 dec ).
- Para establecer un nuevo destino de salto para VVBLKD (diferido), establezca el registro Y en el byte bajo de la dirección de destino, el registro X en el byte alto de la dirección de destino y el Acumulador en 7, luego JSR SETVBV .. El código de usuario llamado a través de VVBLKD debe salir saltando a la rutina de salida de OS Vertical Blank con un JMP XITVBV ($ E462 hex / 58466 dec ).
Cuando el indicador CRITIC ($ 42 hex / 66 dec ) es distinto de cero, la ejecución de la interrupción en blanco vertical diferido se suprime independientemente de las direcciones en los vectores. El valor predeterminado de CRITIC, 0, permite la ejecución de interrupciones en blanco verticales inmediatas y diferidas.
NMIRES $ D40F Escritura
Reinicio de interrupción no enmascarable (NMI)
Poco 7 | Poco 6 | Poco 5 | Poco 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|
? | ? | ? | ? | ? | ? | ? | ? |
Cualquier valor escrito en NMIRES restablece los bits en NMIST que indican el motivo de la interrupción no enmascarable más reciente. Esto es utilizado por el código de despacho de interrupciones en el sistema operativo y normalmente no habría una razón para que un programa de usuario escriba aquí.
NMIST $ D40F Leer
Estado de interrupción no enmascarable (NMI)
Poco 7 | Poco 6 | Poco 5 | Poco 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|
DLI | IBC | REINICIAR | - | - | - | - | - |
La rutina de despacho de interrupciones no enmascarables del sistema operativo lee este registro para determinar el motivo de la interrupción y, por lo tanto, qué rutina de servicio ejecutar.
Los valores de bit:
- $ 20 - Restablecer interrupción de tecla
- $ 40 - Interrupción vertical en blanco
- $ 80 - Interrupción de la lista de visualización
La lista de visualización
La lista de visualización es la lista de instrucciones, o el programa, que indica a ANTIC cómo generar la visualización. Los datos procesados por este "programa" de la lista de visualización son la memoria de la pantalla. La salida es la pantalla de gráficos. Los tipos de gráficos en la salida (texto frente a píxeles direccionables) se determinan mediante las instrucciones de la Lista de visualización.
La CPU escribe la lista de visualización y los datos de visualización en la RAM . ANTIC lee las instrucciones de la Lista de visualización, la memoria de la pantalla y la información del juego de caracteres de la RAM mediante una técnica conocida como acceso directo a la memoria (DMA) . El trabajo de un programa de lenguaje de máquina BÁSICO o 6502 es inicializar la pantalla: configurar las instrucciones de la Lista de pantalla, organizar la memoria de la pantalla (y el juego de caracteres si corresponde) y luego indicar a ANTIC que inicie la pantalla. Después de esto, ANTIC se encarga automáticamente de generar la visualización de la pantalla. Esto permite que las computadoras Atari de 8 bits produzcan pantallas complejas de modo mixto sin la intervención directa de la CPU. Otras plataformas, incluso las diseñadas mucho más tarde, no pueden mezclar modos gráficos en una pantalla o hacerlo sin interrupciones complejas de la CPU.
ANTIC procesa las instrucciones en la Lista de visualización, lee la memoria de la pantalla (y los datos del juego de caracteres si corresponde), traduce esta información en un flujo de datos gráficos en tiempo real y envía este flujo de datos al chip CTIA / GTIA que aplica el color a los píxeles de los gráficos y emite el vídeo. Juntos, los dos chips proporcionan 6 modos de texto y 8 gráficos (14 en total). La versión más avanzada, GTIA , agrega tres interpretaciones de color alternativas para cada modo de gráficos ANTIC, lo que proporciona un total de 56 (14 veces cuatro) modos de gráficos. Sin embargo, solo los modos de gráficos ANTIC basados en píxeles de reloj de medio color son capaces de expresar la paleta de colores completa proporcionada por las nuevas interpretaciones de color, y de esos modos, los más convenientes para su uso son los modos ANTIC 2 (modo de gráficos OS 0 texto) y Modo ANTIC F (modo OS Graphics 8). Por lo tanto, el número razonable de modos gráficos únicos disponibles utilizando las capacidades de hardware inherentes de ANTIC + CTIA / GTIA es de 20 a 14 modos ANTIC + 3 interpretaciones de color adicionales para cada uno de los modos ANTIC 2 y F.
Descripción general de las instrucciones de la lista de visualización
La pantalla de Atari está construida como una serie de instrucciones ANTIC, cada una de las cuales describe una línea de texto o modo gráfico progresivamente desde la parte superior a la inferior de la pantalla hasta que se llena el área de visualización deseada. En efecto, la pantalla es una pila vertical de instrucciones del modo ANTIC. Los diferentes modos ocupan diferentes números de líneas de escaneo y usan diferentes cantidades de RAM. El diseño de una pantalla requiere contar las líneas de exploración de cada instrucción de modo y rastrear la memoria para cada línea de modo para evitar sobrepasar las limitaciones estándar de vídeo o ANTIC. (Vea la sección de Limitaciones ).
La combinación de varios modos de gráficos en una pantalla se realiza simplemente proporcionando diferentes caracteres o instrucciones de modo de mapa para la posición deseada en la pantalla. Por ejemplo, los modos gráficos del 1 al 8 del sistema operativo Atari ofrecen visualización en pantalla completa o una opción para una ventana de texto de cuatro líneas en la parte inferior de la pantalla. Esta función de pantalla dividida se logra utilizando las capacidades inherentes de ANTIC y su Lista de visualización sin interrupciones de la CPU o manipulación personalizada del hardware de video.
ANTIC tiene cuatro tipos de instrucciones:
- Línea en blanco: 8 instrucciones para mostrar de 1 a 8 líneas en blanco horizontales
- Instrucciones de salto: 2 tipos de instrucciones de salto que recargan el contador de programa de ANTIC (instrucciones de 3 bytes)
- Modo de caracteres: 6 instrucciones para mostrar datos de caracteres
- Modo de mapa: 8 instrucciones para mostrar píxeles de colores
Las instrucciones del modo Mapa y Carácter tienen modificadores adicionales que se pueden habilitar con la instrucción:
- Desplazamiento horizontal: permite el desplazamiento horizontal preciso.
- Desplazamiento vertical: habilita el desplazamiento vertical preciso
- Load Memory Scan (LMS): establece la dirección de inicio de los gráficos / datos de caracteres (instrucción de 3 bytes)
- DLI: interrupción de la lista de visualización (llamada " interrupción de trama " o " interrupción horizontal en blanco " en otros sistemas)
Ejecución de instrucciones
ANTIC comienza a ejecutar la Lista de visualización señalada por la dirección de 16 bits en los registros DLISTL / DLISTH ($ D402- $ D403 hex / 54274-54275 dec ). Los registros de direcciones son incrementados por ANTIC automáticamente a medida que se ejecuta cada instrucción. ANTIC solo puede actualizar los 10 bits más bajos de la dirección durante el incremento automático, lo que limita la lista de visualización para que comience y termine dentro de un rango de direcciones de 1K.
Los registros también se actualizan durante la ejecución de la lista de visualización mediante JMP (Jump) y JVB (Jump and wait for Vertical Blank) de ANTIC. Estas instrucciones cargan los 16 bits completos de la dirección, por lo que se pueden utilizar para eludir la limitación de la lista de visualización de 1K.
La dirección también se actualiza mediante la rutina de interrupción vertical en blanco (VBI) del sistema operativo utilizando los valores de los registros de sombra del sistema operativo SDLSTL / SDLSTH ($ 0230- $ 0231 hex / 560-561 dec ). Cuando la rutina OS VBI está habilitada, las actualizaciones directas a los registros ANTIC DLIST por la CPU o las instrucciones ANTIC Jump serán sobrescritas por el OS durante el próximo Vertical Blank. Dado que el procesamiento de VBI es el estado habitual del sistema, la mayoría de los programas se basan en esto y solo actualizan los registros de sombra del sistema operativo (SDLSTL / SDLSTH $ 0230- $ 0231 hex / 560-561 dec ) para configurar la lista de visualización.
Bytes de instrucción
Esta leyenda se aplica a los siguientes diagramas de bits de instrucciones:
Valor de bit | Descripción |
---|---|
0 | El bit debe ser 0 |
1 | El bit debe ser 1 |
? | El bit puede ser 0 o 1 y se utiliza con un propósito. |
- | El bit no se utiliza o no se debe esperar que tenga un valor determinado |
etiqueta | Consulte una explicación posterior para conocer el propósito de la broca. |
Bits de instrucción:
Poco 7 | Poco 6 | Poco 5 | Poco 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|
DLI | LMS | VS | HS | Modo | Modo | Modo | Modo |
Los bits 7: 4 son modificadores para las instrucciones del modo de campo de juego en los bits 3: 0. Bit value 1 Habilita el modificador y 0 deshabilita el modificador.
- Bit 3: Bit 0 - Instrucción de modo de campo de juego.
- Los valores $ 00 y $ 01 son instrucciones especiales.
- Los valores de modo $ 02 a $ 0F especifican los modos Playfield Character y Map.
- Bit 4 - $ 10 - Desplazamiento horizontal.
- Bit 5 - $ 20 - Desplazamiento vertical.
- Bit 6 - $ 40 - Cargar escaneo de memoria.
- Bit 7 - $ 80 - Interrupción de lista de visualización.
Instrucción Modo 0 - Líneas en blanco
DLI | Líneas | Líneas | Líneas | Modo | Modo | Modo | Modo |
---|---|---|---|---|---|---|---|
? | ? | ? | ? | 0 | 0 | 0 | 0 |
Cuando los bits de modo son todos cero, ANTIC no realiza DMA de campo de reproducción y muestra una o más líneas de exploración en blanco del color de fondo. Para los modos de interpretación de color normales, el "fondo" es el registro de color COLBK ($ D01A hex / 53274 dec ) OS Shadow COLOR4 ($ 02C8 hex / 712 dec ), aunque esto difiere para los modos de interpretación de color GTIA. Consulte la discusión de COLBK en la página de GTIA para obtener más información.
El número de líneas de escaneo en blanco se especifica mediante el valor de los Bits 4 al Bits 6, lo que permite un rango de 0 a 7. ANTIC agrega uno a este valor y muestra el número resultante de líneas de escaneo. Valores de instrucción:
Instrucción ANTIC | Líneas de exploración |
---|---|
$ 00 hexadecimal / 0 dic | 1 línea de escaneo en blanco. |
$ 10 hex / 16 dic | 2 líneas de escaneo en blanco. |
$ 20 hex / 32 dic | 3 líneas de escaneo en blanco. |
$ 30 hex / 48 dic | 4 líneas de escaneo en blanco. |
$ 40 hex / 64 dic | 5 líneas de escaneo en blanco. |
$ 50 hex / 80 dic | 6 líneas de escaneo en blanco. |
$ 60 hex / 96 diciembre | 7 líneas de escaneo en blanco. |
$ 70 hex / 112 dic | 8 líneas de escaneo en blanco. |
Las líneas en blanco son útiles para retrasar el inicio de la visualización de la pantalla hasta que el haz de electrones haya abandonado el área de sobrebarrido vertical en la parte superior de la visualización. El sistema operativo Atari crea todos sus modos gráficos comenzando con tres instrucciones de $ 70 hex / 112 dec (o 24 líneas de escaneo en blanco) para este propósito. Las líneas en blanco también son útiles para dividir partes de una pantalla personalizada con diferentes propósitos (es decir, un borde entre una pantalla de estado y los gráficos principales).
Las líneas del modo en blanco no pueden estar contenidas dentro de una región de desplazamiento, porque las instrucciones de línea del modo en blanco no tienen inherentemente bits de modificador de desplazamiento fino. Sin embargo, se puede usar una instrucción de modo en blanco para finalizar una región de desplazamiento vertical y aún está sujeta a los cambios esperados en la altura de la línea de exploración según el valor de desplazamiento vertical.
El bit modificador DLI está disponible para instrucciones de línea en blanco. Cuando el bit DLI está habilitado, se activará una interrupción de la lista de visualización durante la última línea de exploración en blanco de la instrucción. Dado que el DMA del campo de juego no ocurre durante las líneas en blanco (solo ocurre el DMA de la lista de visualización y el DMA de jugador / misil (si está habilitado)), las líneas en blanco se pueden usar donde los gráficos del campo de juego no se necesitarán, dando más tiempo para que las rutinas de interrupción de la lista de visualización cambien los registros de color Posiciones de jugador / misil.
Instrucción Modo 1 - Saltar
DLI | LMS | VS | HS | Modo | Modo | Modo | Modo |
---|---|---|---|---|---|---|---|
0 | ? | 0 | 0 | 0 | 0 | 0 | 1 |
Cuando el valor del modo es 1, ANTIC ejecuta un salto en su programa (la lista de visualización). Los siguientes dos bytes de la lista de visualización se cargan en los registros ANTIC DLISTL / DLISTH ($ D402- $ D403 hex / 54274-54275 dec ) cambiando el punto de ejecución de la siguiente instrucción.
Hay dos tipos de saltos:
- $ 01 hex / 1 dic JMP - Ir a la dirección. Esto se utiliza para cargar una nueva dirección de ejecución en medio de la ejecución de la Lista de visualización, normalmente cuando la Lista de visualización debe cruzar un límite de 1K.
- $ 41 hex / 65 dic JVB: salta a la dirección y espera el espacio en blanco vertical. (Conjunto de bits JMP + LMS) Se utiliza para finalizar la Lista de visualización. La dirección utilizada debe ser la dirección inicial de la lista de visualización.
Los registros DLIST también se actualizan mediante la rutina de interrupción en blanco vertical (VBI) del sistema operativo utilizando los valores en los registros de sombra SDLSTL / SDLSTH ($ 0230- $ 0231 hex / 560-561 dec ). Cuando la rutina OS VBI está habilitada, las actualizaciones directas a los registros ANTIC DLIST por la CPU o las instrucciones ANTIC Jump serán sobrescritas por el OS durante el próximo Vertical Blank. Esto implica que una instrucción ANTIC JVB (Saltar y esperar el espacio en blanco vertical) que especifica una dirección no válida (o una dirección válida que difiere del valor de sombra SDLST) no tiene un efecto real en la pantalla.
El argumento de JVB generalmente apunta al comienzo de la misma Lista de visualización, pero también puede apuntar a otra Lista de visualización, de modo que se ejecuta una cadena de Listas de visualización después de espacios en blanco verticales consecutivos. Por supuesto, para que ANTIC controle el inicio de la siguiente lista de visualización, la interrupción en blanco vertical del sistema operativo debe deshabilitarse para evitar que sobrescriba los registros de hardware ANTIC con los valores del registro de sombra.
Instrucciones de los modos 2 a F: modos de mapa y personaje del campo de juego
DLI | LMS | VS | HS | Modo | Modo | Modo | Modo |
---|---|---|---|---|---|---|---|
? | ? | ? | ? | ? | ? | ? | ? |
La siguiente es la lista de instrucciones del modo de gráficos ANTIC. Para obtener descripciones más detalladas de cada modo, consulte la sección Modos de gráficos del campo de juego .
Instrucción ANTIC | Tipo de modo | Bytes por línea de modo (estrecho / normal / ancho) | Líneas de escaneo de TV por línea de modo | Color |
---|---|---|---|---|
2 | Personaje | 32/40/48 | 8 | 1,5 |
3 | Personaje | 32/40/48 | 10 | 1,5 |
4 | Personaje | 32/40/48 | 8 | 5 (multicolor) |
5 | Personaje | 32/40/48 | dieciséis | 5 (multicolor) |
6 | Personaje | 20/16/24 | 8 | 5 (un solo color) |
7 | Personaje | 20/16/24 | dieciséis | 5 (un solo color) |
8 | Mapa | 10/8/12 | 8 | 4 |
9 | Mapa | 10/8/12 | 4 | 2 |
A | Mapa | 20/16/24 | 4 | 4 |
B | Mapa | 20/16/24 | 2 | 2 |
C | Mapa | 20/16/24 | 1 | 2 |
D | Mapa | 32/40/48 | 2 | 4 |
mi | Mapa | 32/40/48 | 1 | 4 |
F | Mapa | 32/40/48 | 1 | 1,5 |
El requisito de memoria para una línea de modo está determinado por dos factores:
- Los bits de ancho establecidos en el registro de hardware DMACTL .
- La presencia del modificador de instrucción de lista de visualización de desplazamiento fino horizontal .
El modificador de desplazamiento fino horizontal cambiará el requisito de memoria para la línea de modo actual del ancho especificado por DMACTL al siguiente valor más grande.
Modificadores de instrucción
Poco 7 | Poco 6 | Poco 5 | Poco 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|
DLI | LMS | VS | HS | ? | ? | ? | ? |
Los bits 7: 4 son modificadores para las instrucciones del modo de campo de juego en los bits 3: 0. Los valores de las instrucciones del modo de campo de juego oscilan entre $ 02 y $ 0F. Valor del bit de modificador 1 Habilita el modificador y 0 lo deshabilita.
- Bit 4 - Desplazamiento horizontal $ 10 hex / 16 dec .
- Bit 5 - Desplazamiento vertical de $ 20 hex / 32 dec .
- Bit 6 - Escaneo de memoria de carga de $ 40 hex / 64 dec .
- Bit 7 - Interrupción de lista de visualización de $ 80 hex / 128 dec .
Modificador HS - Desplazamiento fino horizontal
Bit4: valor de posición $ 10, controla el desplazamiento horizontal del modo de campo de juego.
Cuando el desplazamiento horizontal está habilitado, ANTIC recupera más bytes de memoria de pantalla de los que se muestran para mostrar los bytes de visualización parcialmente desplazados al principio y al final de la línea. Si la pantalla está en modo Estrecho, ANTIC recupera el número de bytes de pantalla necesarios para el modo Normal. Si la pantalla está en modo Normal, ANTIC recupera el número de bytes necesarios para el modo de pantalla ancha. En el modo de pantalla ancha, ANTIC no recupera bytes de pantalla adicionales. El desplazamiento en la pantalla ancha hará que los datos en blanco se desplacen al área de desplazamiento. Esto no es un problema, porque ocurre en el área de sobrebarrido que no es visible en una pantalla NTSC / PAL normal.
VS Modifer - Desplazamiento fino vertical
Bit5: valor de posición $ 20, controla el desplazamiento vertical del modo Playfield.
La región de desplazamiento vertical en una pantalla se define estableciendo el bit VS ($ 20) en una serie secuencial de líneas de modo ANTIC en la lista de pantalla. La primera línea de modo sin el conjunto de bits VS se convierte en el final de la región de desplazamiento y se utiliza como una línea de búfer para proporcionar la nueva información para desplazarse hacia arriba en la parte inferior de la región de desplazamiento.
Modificador LMS - Escaneo de memoria de carga
Bit6: valor de posición $ 40, carga una nueva dirección para el inicio de la memoria de pantalla para la línea actual del modo Playfield.
La opción LMS carga la dirección de exploración de memoria de pantalla de ANTIC con el valor de 16 bits en los dos bytes que siguen a la instrucción. El modo de carácter o mapa especificado comenzará a mostrar bytes desde esa dirección. La opción LMS debe aparecer en la primera línea de instrucción del modo Playfield (no línea en blanco) en la lista de visualización para inicializar ANTIC y comenzar a leer al inicio de la memoria de la pantalla. La mayoría de los modos de pantalla completa generados por el sistema operativo tendrán solo una aparición del modificador LMS presente en la Lista de visualización . ANTIC incrementará automáticamente su dirección LMS al final de cada línea de modo en preparación para la siguiente línea. Siempre que la memoria de la pantalla no cruce un límite de 4K, el modificador LMS no es necesario en las siguientes instrucciones del modo Playfield.
Las visualizaciones de pantalla completa que utilicen los modos E o F de Playfield Map tendrán una segunda aparición del modificador LMS en una instrucción de mapa cerca de la mitad de la pantalla, ya que la visualización completa requiere más de 4K de memoria de pantalla. (Las pantallas del modo F incluyen líneas de alta resolución de 320 píxeles y los modos de visualización GTIA).
La combinación de las instrucciones del modo de mapa y de caracteres con el bit LMS hace posible establecer la dirección de memoria de la pantalla libremente dentro del espacio de direcciones de 64K de forma independiente para cada línea de visualización . En otras palabras, la memoria de la pantalla no tiene que ser una memoria completamente contigua escaneada secuencialmente hacia direcciones más altas, solo que se debe proporcionar una sola línea de modo con los bytes de memoria secuenciales adecuados para cumplir con los requisitos de ese modo, ancho de la pantalla y Función de desplazamiento.
Modificador DLI - Interrupción de lista de visualización
Bit7: valor de posición $ 80, indica a ANTIC que invoque una interrupción con servicio de CPU en la última línea de exploración del modo de campo de juego.
Si el registro ANTIC NMIEN ($ D40E hex / 54286 dec ) tiene Bit7 ($ 80) establecido, en la última línea de exploración de la línea de modo se activará una rutina de interrupción que se vectoriza a través de la dirección VDSLST ($ 200 hex / 512 dec ).
El acumulador 6502, los contenidos de los registros X e Y no se conservan antes de la entrada a la rutina DLI. Es responsabilidad de la rutina DLI guardar el estado de los registros utilizados durante el DLI y luego restaurar los valores originales de los registros antes de salir con una instrucción RTI. Las rutinas generalmente empujan los valores de registro a la pila 6502.
Las rutinas DLI suelen ser cortas y rápidas, cambiando los registros de color o las posiciones del jugador-misil antes de salir. Sin embargo, no se requiere brevedad. Siempre que la rutina DLI salga antes del inicio de la siguiente rutina DLI, la rutina DLI puede continuar actualizando valores a través de múltiples líneas de exploración.
Modos de gráficos del campo de juego
El chip ANTIC permite una variedad de diferentes modos y anchos de campo de juego. Sin embargo, el sistema operativo Atari original incluido con las computadoras Atari 800/400 proporciona un fácil acceso a un subconjunto limitado de estos modos gráficos. Los modos ANTIC Playfield están expuestos a los usuarios a través de Atari BASIC a través del comando "GRÁFICOS", y a algunos otros idiomas, a través de llamadas al sistema similares. Curiosamente, los modos que no son compatibles directamente con el sistema operativo original y el BASIC son los modos más útiles para los juegos. La última versión del sistema operativo utilizado en las computadoras Atari 8-bit XL / XE agregó soporte para la mayoría de estos modos gráficos "faltantes".
El chip ANTIC utiliza una lista de visualización y otras configuraciones para crear estos modos. Cualquier modo de gráficos en la interpretación de color GTIA predeterminada se puede mezclar libremente sin la intervención de la CPU cambiando las instrucciones en la Lista de visualización .
La geometría de la pantalla ANTIC no es fija. Un registro de hardware puede dirigir ANTIC para que muestre un campo de juego estrecho (128 relojes de color / 256 píxeles de alta resolución de ancho), un campo de juego de ancho normal (160 relojes de color / 320 píxeles de alta resolución de ancho) y un campo de juego amplio de sobreexploración (192 relojes de color / 384 píxeles de alta resolución de ancho). Si bien la altura predeterminada del sistema operativo para los modos gráficos es de 192 líneas de escaneo, Antic puede mostrar una sobreexploración vertical de hasta 240 líneas de escaneo de TV mediante la creación de una lista de visualización personalizada .
El modo F produce colores a través de artefactos NTSC y funciona de manera similar a los modos gráficos de Apple II . La resolución de píxeles es de 320 de ancho, pero la resolución de color es la mitad, por lo que cada grupo de dos píxeles se "fusionará" para formar un solo color y de esta manera se pueden generar cuatro colores de artefactos. Se teñirán si el color de primer plano y de fondo se establece en algo distinto de negro / blanco / gris. Los colores exactos producidos de esta manera varían con los diferentes modelos de Atari de 8 bits y también entre los chips CTIA y GTIA, por lo que los colores de artefactos no deseables pueden resultar de la ejecución de software que usa el Modo F en una máquina diferente a la que fue desarrollado. No fue posible obtener colores de artefactos en máquinas PAL y el Modo F será monocromático en ellas.
El modo F no fue ampliamente utilizado por el software debido a sus altos requisitos de memoria (8k) y los colores inconsistentes de los artefactos que no parecían iguales en todos los modelos de computadora Atari de 8 bits. Los juegos que lo utilizan incluyen aventuras gráficas de Sierra como Troll's Tale y Wizard and the Princess, Lode Runner y la serie Ultima .
El sistema de visualización de vídeo se diseñó teniendo en cuenta las limitaciones y los métodos de visualización de NTSC. El reloj de la CPU del sistema y el hardware de video están sincronizados a la mitad de la frecuencia de reloj NTSC. En consecuencia, la salida de píxeles de todos los modos de visualización se basa en el tamaño del reloj de color NTSC, que es el tiempo mínimo necesario para garantizar un color correcto y uniforme independientemente de la ubicación horizontal del píxel en la pantalla. El resultado es un tamaño de píxel y un color precisos que no muestran defectos de "luz estroboscópica" de color cuando se desplaza horizontalmente. (La luz estroboscópica de color son cambios de tono antiestéticos en píxeles basados en la posición horizontal que se producen cuando los cambios de señal no se alinean con el reloj de color y, por lo tanto, no proporcionan al hardware del televisor / monitor el tiempo adecuado para alcanzar el color correcto).
Modos de personaje
Modo de texto antiguo | Modo SO | Caracteres (o bytes) por línea de modo (estrecho / normal / ancho) | Líneas de escaneo de TV por línea de modo | Colores | Colores por matriz de caracteres | Caracteres en fuente | Tamaño de píxel de la matriz (relojes de color x líneas de escaneo) | Bits por píxel de matriz | Mapa de matriz (relojes de color x líneas de exploración) | Mapa de matriz (píxeles x píxeles) | Notas |
---|---|---|---|---|---|---|---|---|---|---|---|
2 | 0 | 32/40/48 | 8 | 1,5 | 1 | 128 | 1/2 x 1 | 1 | 4 x 8 | 8 x 8 | Píxeles de alta resolución. Cuando se establece el bit alto de carácter (valores $ 80 a $ FF), los datos del carácter se muestran según la configuración CHACTL. |
3 | N / A | 32/40/48 | 10 | 1,5 | 1 | 128 | 1/2 x 1 | 1 | 4 x 8/10 | 8 x 8 | Píxeles de alta resolución. Los caracteres en minúscula se muestran 2 líneas de exploración más abajo permitiendo descendentes. |
4 | 12 (SO XL) | 32/40/48 | 8 | 5 | 4 | 128 | 1 x 1 | 2 | 4 x 8 | 4 x 8 | Dos bits por píxel que permiten 4 colores dentro de una matriz de caracteres. Cuando se establece el bit alto del carácter, un quinto color reemplaza a uno de los otros cuatro. |
5 | 13 (SO XL) | 32/40/48 | dieciséis | 5 | 4 | 128 | 1 x 2 | 2 | 4 x 16 | 4 x 8 | El mismo color que el anterior Modo Antic 4. Los personajes son dos veces más altos. |
6 | 1 | 20/16/24 | 8 | 5 | 1 | 64 | 1 x 1 | 1 | 8 x 8 | 8 x 8 | Un color por matriz de caracteres. Los caracteres de cada bloque de 64 caracteres se muestran en un color diferente. Cuando se establece el bit alto del carácter, un quinto color reemplaza a uno de los otros cuatro. |
7 | 2 | 20/16/24 | dieciséis | 5 | 1 | 64 | 1 x 2 | 1 | 8 x 16 | 8 x 8 | El mismo color que el anterior Modo Antic 6. Los personajes son dos veces más altos. |
Representación de glifos
Todos los juegos de caracteres utilizan 8 bytes secuenciales para representar el carácter. Hay disponibles cuatro tipos de representación de caracteres / glifos de esos bytes. Cada modo de personaje está asociado a un método de representación específico:
- Estándar: Modo ANTIC 2. Basado en los modos de gráficos de alta resolución, cada bit en el glifo de carácter representa un píxel en la pantalla que tiene 1/2 color de ancho de reloj. El color de fondo es COLPF2 en lugar de COLBK utilizado en otros modos de personaje y mapa. COLBK aparece como un borde alrededor de los cuatro lados del campo de juego. Los bits de valor 0 en el glifo de carácter muestran el color de fondo. Los bits de 1 valor muestran el valor de luminancia de COLPF1 basado en el color de fondo (COLPF2). El juego de caracteres utiliza 128 caracteres y requiere 1024 bytes de RAM.
- Descendientes: Modo ANTIC 3. Una modificación del método Estándar. El método de visualización de píxeles en color es el mismo. Cada línea de modo tiene una altura de 10 líneas de exploración, aunque el glifo de carácter sigue siendo de 8 bytes. Los caracteres $ 00 hexadecimal / 0 dec a $ 5F hexadecimal / 95 dec se muestran en las 8 líneas de escaneo superiores con dos líneas de escaneo en blanco agregadas en la parte inferior. Los caracteres $ 60 hex / 96 dec a $ 7F hex / 127 dec comienzan con dos líneas de escaneo en blanco en la parte superior y luego muestran los bytes de glifo en las 8 líneas de escaneo inferiores. Los primeros dos bytes del glifo se mueven a las dos líneas de exploración inferiores. Esto permite que un conjunto de caracteres correctamente diseñado muestre descendientes verdaderos. El juego de caracteres utiliza 128 caracteres y requiere 1024 bytes de RAM.
- Color único: Modos ANTIC 6 y 7. En estos modos, cada bit del glifo de carácter representa un píxel de un color de ancho de reloj. El color de fondo es COLBK. Los personajes se pueden mostrar en uno de los cuatro colores. Los seis bits bajos del valor del carácter identifican el glifo y los dos bits altos identifican un color. Dado que el valor de los caracteres se reduce a seis bits, el juego de caracteres utiliza 64 caracteres y requiere 512 bytes de RAM. Los bits de valor 0 en el glifo de carácter muestran el color de fondo. Los bits de 1 valor en los datos de glifos muestran una de las cuatro posibles opciones de color basadas en los dos bits altos del valor del carácter. Bits de valor de carácter 7 y 6:
Bits de caracteres [7: 6] | Rango de caracteres | Color de los píxeles de glifo |
---|---|---|
0 0 = $ 00 | $ 00 - $ 3F | COLPF0 |
0 1 = $ 40 | $ 40 - $ 7F | COLPF1 |
1 0 = $ 80 | $ 80 - $ BF | COLPF2 |
1 1 = $ C0 | $ C0 - $ FF | COLPF3 |
- Multicolor: Modos ANTIC 4 y 5. En estos modos de carácter, cada par de bits en el glifo de carácter representa un píxel de un color de ancho de reloj, por lo que un solo byte de información de glifo representa 4 píxeles en lugar de los 8 píxeles de otros modos. El juego de caracteres utiliza 128 caracteres y requiere 1024 bytes de RAM. El color de fondo es COLBK. Este modo permite mostrar hasta cuatro colores (incluido el fondo) en una matriz de caracteres. Si se establece el bit alto del valor del carácter (es decir, vídeo inverso), se muestra un quinto color, COLPF3, en lugar del patrón de bits de píxeles "11" que normalmente muestra COLPF2. Las opciones de color basadas en los pares de bits del glifo de carácter:
Bit de carácter 7 | Par de bits de glifo | Color del píxel de glifo |
---|---|---|
0/1 = $ 00 / $ 80 | 0 0 | COLBK |
0/1 = $ 00 / $ 80 | 0 1 | COLPF0 |
0/1 = $ 00 / $ 80 | 1 0 | COLPF1 |
0 = $ 00 | 1 1 | COLPF2 |
1 = $ 80 | 1 1 | COLPF3 |
Modos de mapa
Modo de mapa antiguo | Modo SO | Píxeles por línea de modo (estrecho / normal / ancho) | Líneas de escaneo de TV por línea de modo | Bytes por línea de modo (estrecho / normal / ancho) | Bits por píxel | Colores | Relojes de color por píxel |
---|---|---|---|---|---|---|---|
8 | 3 | 32/40/48 | 8 | 10/8/12 | 2 | 4 | 4 |
9 | 4 | 64/80/96 | 4 | 10/8/12 | 1 | 2 | 2 |
A | 5 | 64/80/96 | 4 | 20/16/24 | 2 | 4 | 2 |
B | 6 | 128/160/192 | 2 | 20/16/24 | 1 | 2 | 1 |
C | 14 (SO XL) | 128/160/192 | 1 | 20/16/24 | 1 | 2 | 1 |
D | 7 | 128/160/192 | 2 | 32/40/48 | 2 | 4 | 1 |
mi | 15 (SO XL) | 128/160/192 | 1 | 32/40/48 | 2 | 4 | 1 |
F | 8 | 256/320/384 | 1 | 32/40/48 | 1 | 1,5 | 1/2 |
Modos GTIA
Los modos GTIA son pantallas Antic Mode F con una opción de interpretación de color alternativa habilitada a través del registro GTIA ANTERIOR ($ D01B hex / 53275 dec ) sombreado por GPRIOR ($ 026F hex / 623 dec ). La expresión a todo color de estos modos GTIA también se puede activar en los modos de texto Antic 2 y 3, aunque también requerirán un juego de caracteres personalizado para lograr un uso práctico de los colores. Consulte GTIA para obtener más información.
Modo de mapa antiguo | Modo SO | Píxeles por línea de modo (estrecho / normal / ancho) | Líneas de escaneo de TV por línea de modo | Bytes por línea de modo (estrecho / normal / ancho) | Bits por píxel | Colores | Relojes de color por píxel | Notas |
---|---|---|---|---|---|---|---|---|
F | 9 | 64/80/96 | 1 | 32/40/48 | 4 | dieciséis* | 2 | 16 tonos del color de fondo. |
F | 10 | 64/80/96 | 1 | 32/40/48 | 4 | 9 | 2 | modo de indirección de píxeles: utiliza los 9 registros de color del campo de juego y del jugador / misil para los píxeles. |
F | 11 | 64/80/96 | 1 | 32/40/48 | 4 | dieciséis* | 2 | 15 tonos de color, todos con la misma luminancia establecida por el fondo, más el color de fondo. |
Desplazamiento
Antes de que las pantallas de video se convirtieran en una parte común de la interfaz de usuario, muchas computadoras usaban un teletipo, una impresora generalmente con papel de alimentación continua. La entrada del usuario y la salida generada por computadora se imprimieron en el papel alimentado a través de la impresora. Esta interfaz ampliamente comprendida para la entrada del usuario y la salida de la computadora continuó con la introducción de pantallas de video, ya que las computadoras presentaban una metáfora de la pantalla como un puerto de visualización sobre un rollo de papel infinito e imaginario. La información se muestra en la pantalla comenzando en la parte superior hasta llegar a la parte inferior de la pantalla y cuando la computadora necesita introducir nueva información, cambia toda la información de la pantalla hacia arriba, proporcionando un espacio vacío en la parte inferior para la nueva información y, en consecuencia, borrando la información superior. .
Este tipo de desplazamiento se denomina "desplazamiento aproximado". Se logra moviendo bytes de memoria a través de un área de visualización de pantalla designada. Mover un kilobyte (o más) de memoria consume mucha CPU y es posible que las computadoras más lentas no puedan realizar nada más mientras actualizan los datos de la pantalla. Como medio para animar una pantalla, los resultados pueden ser entrecortados cuando la CPU no puede actualizar la memoria de la pantalla más rápido de lo que el hardware de la pantalla lee la memoria para generar la salida de video. La fluidez del movimiento se ve afectada, ya que la cantidad mínima de desplazamiento de la pantalla es el tamaño de un carácter completo. La mayoría de las computadoras, incluido el Atari de 8 bits, realizan un desplazamiento aproximado como se describió anteriormente; los ejemplos comunes son ver una lista larga de programas BÁSICOS o un directorio de archivos.
El desplazamiento aproximado implementado por el movimiento masivo de datos es a menudo el único método de desplazamiento posible en la mayoría de las computadoras. Sin embargo, ANTIC proporciona soporte de hardware directo para desplazamiento vertical y horizontal, grueso y fino, llevando el concepto de un "puerto de visualización que se mueve sobre datos" de una ilusión metafórica a una implementación literal. Estas características ANTIC brindan un movimiento rápido, suave y de pantalla completa que requiere un tiempo de CPU insignificante y, por lo tanto, libera la CPU para otros trabajos.
Todos los modos de visualización ANTIC, los modos Texto y Mapa, pueden ejercitar las funciones de desplazamiento del hardware.
Desplazamiento grueso vertical
El desplazamiento vertical aproximado es la función más fácil de ejercitar. La primera instrucción en modo texto o mapa en cada lista de visualización siempre incluye el modificador de instrucción LMS que especifica el inicio de la memoria de pantalla. A medida que genera la pantalla, ANTIC aumenta automáticamente su puntero de exploración de memoria desde la línea de modo a la línea de modo para mostrar la memoria de forma contigua. Por lo tanto, una pantalla se puede "mover" simplemente actualizando la dirección del modificador LMS inicial; agregar el número de bytes usados para una línea en el modo de texto o mapa actual desplaza el contenido de la pantalla una línea hacia arriba, mientras que restar la misma cantidad mueve la pantalla hacia abajo. Entonces, la pantalla es en realidad un puerto de visualización que se mueve para mirar diferentes áreas de la memoria en lugar de mover la memoria a un mapa de pantalla fijo.
Dado que el contador de escaneo de memoria de ANTIC no puede incrementarse automáticamente por encima de un límite de 4K, el límite de desplazamiento vertical de esta manera simple es de hasta 4K de movimiento. Una pantalla completa de texto en Modo 2 usando aproximadamente 1K puede desplazarse continuamente la altura de cuatro pantallas hasta alcanzar el límite de 4K. Del mismo modo, una pantalla de texto en Modo 7 puede desplazar la altura de 16 pantallas completas.
Naturalmente, ese ejemplo trivial tiene una utilidad limitada. Muchas implementaciones de desplazamiento desplazan solo una parte de la pantalla, mientras que otras secciones permanecen fijas. Este problema se resuelve mediante las capacidades inherentes de la lista de visualización ANTIC . En esta situación, la Lista de visualización agregaría instrucciones de modo utilizando modificadores LMS en la primera línea de modo de las secciones de la pantalla que no deberían moverse, lo que bloquea efectivamente estas partes de la pantalla mientras se actualiza la dirección del modificador LMS para la sección de desplazamiento.
La mejora adicional de este concepto utiliza la opción de modificación LMS en cada línea que se desplaza. El desplazamiento vertical en esta pantalla requiere la actualización de una dirección de modificador LMS para cada línea de modo en la región de desplazamiento. Cuando la pantalla se gestiona a este nivel de detalle, el límite de RAM de la pantalla 4K de ANTIC se puede eludir fácilmente. Incluso en este ejemplo del peor de los casos, el esfuerzo de la CPU invertido es una pequeña fracción del procesamiento necesario para mover en masa los datos de la pantalla.
Otro límite a tener en cuenta es que la dirección del modificador LMS de dos bytes no debe actualizarse cuando ANTIC está procesando el LMS. Si ANTIC lee la dirección LMS mientras está parcialmente actualizada, ANTIC mostrará la sección incorrecta de memoria para esa línea de modo. Cuando la región de desplazamiento de una pantalla requiere múltiples actualizaciones de direcciones LMS, aumenta la posibilidad de una actualización parcial, y también aumenta la posibilidad de que dos líneas posteriores muestren los mismos datos. Los programas resuelven esto de varias maneras: realizando actualizaciones durante el espacio en blanco vertical, monitoreando el VCOUNT antes de las actualizaciones o realizando las actualizaciones en la lista de visualización Interrupciones ejecutadas durante secciones de la pantalla fuera de la región de desplazamiento.
Desplazamiento fino vertical
El desplazamiento fino vertical permite el movimiento de una sola línea de exploración de la región de desplazamiento para los modos Texto y Mapa que tienen más de una línea de exploración de altura. El desplazamiento fino vertical para los modos de mapa de solo una línea de escaneo de altura no es lógicamente práctico. El efecto del desplazamiento vertical "fino" para los modos de mapa de una sola línea de exploración se puede realizar utilizando el método de desplazamiento aproximado más sencillo.
El desplazamiento fino requiere configuración para definir la región de desplazamiento. Esto se hace configurando el bit modificador de Desplazamiento vertical (VS) en las instrucciones secuenciales de la Lista de visualización . La primera instrucción de línea de modo sin el conjunto de bits VS se convierte en el final de la región de desplazamiento y se utiliza como una línea de búfer para proporcionar las nuevas líneas de exploración para desplazarse hacia arriba en la parte inferior de la región de desplazamiento.
El proceso de desplazamiento fino vertical de ANTIC funciona simplemente indicando a ANTIC que omita una serie de líneas de exploración para la primera línea de modo de la región de desplazamiento. Las siguientes líneas de modo en la región de desplazamiento no se ven afectadas. La última línea de la región proporciona el borde inferior de la región de desplazamiento que muestra el número de líneas de exploración que se eliminaron de la primera línea. Este número de líneas de exploración se controla con el registro VSCROL . El valor varía de 0 a la altura de la línea de escaneo de la línea del modo ANTIC - 1. El rango de valor máximo cubre el desplazamiento fino de 16 líneas de escaneo de 0 a 15.
Cuando se alcanza el límite de desplazamiento fino, el desplazamiento continúa restableciendo el valor de VSCROL y realizando un desplazamiento vertical grueso de la región de desplazamiento.
Desplazamiento grueso horizontal
El desplazamiento grueso horizontal requiere un poco más de esfuerzo que el desplazamiento vertical. Si bien se espera que el desplazamiento horizontal presente la ilusión de un puerto de visualización que se mueve hacia la izquierda y hacia la derecha a través de una amplia escena panorámica hecha de memoria de pantalla, el incremento de escaneo automático de memoria de ANTIC entra en conflicto con esta idea de que las filas de datos de pantalla son más anchas que la pantalla. Presentar la memoria de la pantalla como líneas horizontales largas requiere un modificador LMS para cada instrucción de modo de mapa o texto de lista de visualización en la región de desplazamiento. Un paso horizontal se logra aumentando o disminuyendo todas las direcciones LMS de la región de desplazamiento.
El desplazamiento horizontal requiere la misma implementación de la lista de visualización que el ejemplo del peor de los casos descrito para el desplazamiento vertical grueso . Entonces, donde se implementa el desplazamiento horizontal, el desplazamiento vertical también es compatible con solo cambiar el valor incrementando o disminuyendo las direcciones LMS. El otro beneficio de esta disposición es que es fácil administrar la memoria de la pantalla alrededor del límite de memoria de la pantalla 4K de ANTIC.
Consulte la sección Desplazamiento aproximado vertical para obtener más información y las limitaciones de tiempo al actualizar las direcciones del modificador LMS.
Desplazamiento fino horizontal
El desplazamiento fino horizontal permite el movimiento del reloj de un solo color de la región de desplazamiento para los modos Texto y Mapa. Para todas las interpretaciones de color normales, esto es por reloj de color, no por píxeles, incluso cuando los píxeles son más grandes (o más pequeños) que los relojes de color. Los modos ANTIC que utilizan las interpretaciones de color GTIA alternativas deben desplazarse por un píxel GTIA completo (relojes de dos colores). Solo se deben usar valores pares para garantizar el desplazamiento correcto de píxeles de GTIA. Los valores impares de HSCROL cambiarán el flujo de píxeles de GTIA a un estado diferente que se interpretará como colores diferentes.
El desplazamiento fino requiere configuración para definir la región de desplazamiento horizontal. El primer paso es comenzar con una lista de visualización utilizando el modificador de instrucción LMS para especificar la dirección de inicio de cada línea de modo. Esto se hace para organizar la memoria de la pantalla como largas filas de datos para la pantalla. El siguiente paso es configurar el bit modificador de desplazamiento horizontal (HS) en todas las instrucciones de línea del modo de lista de visualización para la región de desplazamiento.
Este número de relojes de color para cambiar se controla con el registro HSCROL . El rango máximo de valores HSCROL cubre el desplazamiento fino de 16 relojes de color de 0 a 15. La información de reloj de color utilizada se almacena en búfer desde el principio de la línea de modo (puntero de exploración de memoria actual de ANTIC) utilizando suficientes bytes de memoria de pantalla para satisfacer los 16 relojes de color. El desplazamiento horizontal simplemente indica a ANTIC cuántos relojes de color puede generar desde los relojes de 16 colores almacenados en búfer, comenzando por el último reloj de color (el más a la derecha) de la memoria búfer. Cero (0) no es salida de relojes de color del búfer. 1 es el último reloj de color (más a la derecha) del búfer. Los relojes de color se insertan en el borde izquierdo de la pantalla, lo que hace que el área de desplazamiento de la pantalla se desplace hacia la derecha.
Cuando se alcanza el límite de desplazamiento fino, continúe desplazándose restableciendo el valor de HSCROL y realizando un desplazamiento horizontal grueso de la región de desplazamiento. El rango de reloj de 16 colores de ANTIC permite un desplazamiento fino de múltiples caracteres del modo de texto o más de un byte de píxeles del modo de mapa. Por lo tanto, la actualización de las direcciones de LMS puede sumar o restar varios bytes.
Métodos de desplazamiento alternativos
Un uso interesante del comportamiento de escaneo de memoria DMA de ANTIC permite una estrategia para distancias de desplazamiento horizontal aparentemente largas, pero usa una fracción de la memoria real requerida. Como se discutió en Desplazamiento grueso horizontal , el incremento de escaneo automático de memoria de ANTIC desde la línea de modo a la línea de modo entra en conflicto con la idea de que las filas de datos de la pantalla son más anchas que la pantalla. El uso de la memoria organizada en realidad como una serie larga, horizontal y contigua de bytes requiere un modificador LMS para cada instrucción de modo de mapa o texto de lista de visualización en la región de desplazamiento.
En lugar de usar un modificador LMS para cada línea, este método usa una lista de visualización más "normal" que solo requiere un modificador LMS al comienzo de la región de desplazamiento. Un incremento (+1) en la dirección del modificador LMS hace que la región de desplazamiento parezca moverse hacia la izquierda. Sin embargo, la "nueva" información que se ha movido al lado derecho de la región de desplazamiento era previamente el primer byte en la siguiente línea (excepto por el último byte de la última línea - esa información había estado completamente fuera de la pantalla).
La segunda mitad de esta estrategia requiere que se actualice el último byte / carácter de cada línea en la región de desplazamiento para mostrar la nueva información deseada. Para una pantalla de desplazamiento típica, esto significaría actualizar el último byte de una o dos docenas de líneas, lo que lleva una cantidad trivial de tiempo en ensamblar. Por lo tanto, si este proceso de desplazamiento implica una visualización de texto en modo 2 o modo 4 de pantalla completa (en el peor de los casos) y utiliza toda la capacidad 4K del direccionamiento automático de memoria de pantalla de ANTIC, el desplazamiento horizontal puede continuar de esta manera durante unos 3.000 pasos; equivalente a 75 pantallas completas.
Sin embargo, ni siquiera se requiere el uso de memoria 4K. Después de que todos los datos de la primera pantalla completa se hayan desplazado fuera de la pantalla, la aplicación de desplazamiento puede reconstruir la primera pantalla para que contenga un punto de transición conocido, de modo que la acción de desplazamiento pueda volver a la primera dirección del bloque sin tartamudeo aparente u obvio. interrupción en el desplazamiento.
El desplazamiento fino de este arreglo requiere un poco más de planificación. Cuando el desplazamiento fino está habilitado en la lista de visualización, ANTIC recupera más información de la que la línea de modo requiere para la visualización. Como cada línea de modo ahora usa más memoria, la nueva información que se desplaza hacia el costado de la pantalla no es el byte / carácter que se mostró al comienzo de la siguiente línea. Sin embargo, esto no afecta el proceso de desplazamiento y simplemente cambia el valor de la suma y la resta utilizados para ubicar el inicio y el final de cada línea de visualización.
Interrupciones de lista de visualización (DLI)
ANTIC incluye una función para activar una interrupción con servicio de CPU en posiciones verticales específicas en la pantalla. Esto está integrado en la Lista de visualización de ANTIC que indica a ANTIC que inicie la interrupción durante la última línea de exploración de la instrucción de modo actual, y por eso se denomina "Interrupción de la lista de visualización". Otras plataformas llaman a esta actividad " interrupciones ráster " o " interrupciones horizontales en blanco ". El propósito habitual es cambiar los valores relacionados con la visualización en una ubicación conocida para que las transiciones sean visualmente precisas o se produzcan donde no entren en conflicto con la actividad de la visualización. Las posibilidades incluyen, entre otras, cambiar los valores de registro de color, las posiciones horizontales del jugador / misil y los valores de desplazamiento fino. Dado que el DLI es un código de máquina 6502 ejecutado por la CPU, cualquier tipo de trabajo de procesamiento es posible siempre que sea lo suficientemente corto como para no entrar en conflicto con otra actividad y no sobrepase una interrupción de la lista de visualización posterior. Un buen ejemplo es el sondeo del controlador del mouse, que debe realizarse con una frecuencia superior a 1/60 de segundo.
Descripción general
El lanzamiento correcto de la interrupción requiere las siguientes condiciones:
- Una lista de visualización con una instrucción de modo que incluye el conjunto de bits modificadores de interrupción de la lista de visualización (DLI) . (Bit 7 - $ 80 hex / 128 dec )
- El registro NMIEN de ANTIC tiene el bit DLI establecido. (Bit 7 - $ 80 hex / 128 dec )
- El vector del sistema operativo para la interrupción de la lista de visualización (VDSLST, $ 0200 hex / 512 dec ) apunta a la dirección de inicio de la rutina de interrupción.
Configuración adecuada
Al actualizar los valores de control de la pantalla, se debe tener cuidado para asegurarse de que ANTIC no los esté usando actualmente. Si ANTIC está procesando la Lista de visualización que contiene una Instrucción con el modificador DLI, entonces se podría enviar una interrupción mientras se cambia la dirección VDSLST, lo que podría causar un colapso del sistema. Si una lista de visualización utiliza múltiples interrupciones y las interrupciones están habilitadas en NMIEN después de que ANTIC ya haya pasado las instrucciones de modo con modificadores DLI, las interrupciones de la lista de visualización se iniciarán fuera de orden, lo que provocará resultados inesperados.
Una secuencia razonable de eventos para instalar una lista de visualización mediante interrupciones de la lista de visualización:
- Desactive las interrupciones de la lista de visualización ANTIC borrando el bit 7 ($ 80) de NMIEN configurando el registro en un valor de $ 40 que permite que la interrupción vertical en blanco continúe ejecutándose.
- Desactive ANTIC Display List DMA. Primero apague el DMA en el registro de sombra ( SDMCTL ) y luego, si lo desea, se puede hacer lo mismo con el registro de hardware ( DMACTL ). El bit 5 (valor $ 20) debe borrarse, pero la mayoría de las implementaciones elegirían poner a cero todos los bits y luego, cuando llega el momento de reiniciar la pantalla, restaurar el valor correcto de todos los bits.
- Establezca el puntero de la lista de visualización en la dirección de sombra DLISTL / DLISTH en la dirección inicial de la nueva lista de visualización.
- Configure la dirección de interrupción de la lista de visualización VDSLST ($ 0200 hex / 512 dec ) en la dirección inicial de la rutina de interrupción.
- Espere a que la próxima interrupción vertical en blanco (VBI) aplique los cambios de registro de sombra. Posibles métodos:
- Monitoree RTCLOCK ($ 12 / $ 13 / $ 14 hexadecimal / 18/19/20 dec ) para un incremento que indique que ocurrió la IBC.
- Supervise el VCOUNT de ANTIC para ver si hay cambios que indiquen que ha comenzado el siguiente cuadro.
- Active las interrupciones de la lista de visualización ANTIC configurando el bit 7 ($ 80) de NMIEN . El valor habitual para NMIEN es $ C0 que habilita DLI y VBI.
- Active la lista de visualización ANTIC DMA actualizando el registro de sombra ( SDMCTL ). Se debe establecer el bit 5 (valor $ 20), al igual que los bits para el ancho del campo de juego y, si es necesario, los bits relacionados con los gráficos del jugador / misil.
Un programa estrechamente integrado con el ciclo de visualización y consciente de la posición del haz de electrones en relación con la visualización actual puede omitir la desactivación de Display List DMA. Del mismo modo, no es necesario apagar la pantalla si la configuración se produce durante el vacío vertical.
Consideraciones de código
El acumulador 6502, los contenidos de los registros X e Y no se conservan antes de la entrada a la rutina DLI. Es responsabilidad de la rutina DLI guardar el estado de los registros que se utilizarán durante la rutina DLI, y luego la última acción es restaurar los valores originales de los registros antes de salir con una instrucción RTI. Las rutinas generalmente empujan los valores de registro a la pila 6502.
Si se utilizan varios DLI, la primera interrupción actualiza VDSLST para señalar la dirección de la siguiente interrupción, y así sucesivamente para las interrupciones posteriores. La última rutina de interrupción de la lista de visualización en la pantalla señala a VDSLST de nuevo a la dirección de la primera interrupción de la lista de visualización.
Si un valor cambiado por un DLI tiene un registro de sombra del sistema operativo y las interrupciones verticales en blanco están habilitadas, entonces el valor en efecto antes (arriba) de la posición de pantalla de la interrupción de la lista de visualización es el valor de la sombra y el valor después de ( a continuación) la posición de la pantalla es el valor del DLI (y cualquier otro DLI que luego lo cambie). Si el valor no tiene una Sombra del sistema operativo, entonces debe haber una rutina DLI (o VBI) inicial que establezca un valor inicial.
Si se muestra un objeto gráfico mientras el DLI cambia su valor, los resultados pueden ser inconsistentes. El ejemplo más común es cambiar el color de fondo. Dado que el DLI comienza a ejecutarse mientras el haz de electrones está en una parte visible de la pantalla, la transición del color de fondo anterior al nuevo color escrito por el DLI será visible en algún lugar de la línea de exploración actual. (La ubicación exacta varía según los requisitos de DMA para el modo de visualización y los gráficos del reproductor / misil). Para producir una transición limpia de una línea de escaneo a otra, el código debe primero escribir en WSYNC, lo que detiene la ejecución de DLI hasta el final de la línea de escaneo. y luego escriba en los registros deseados.
Si bien la operación habitual del DLI es cambiar algunos valores orientados a la visualización y luego volver al código principal, esto no es un requisito. Es seguro que un DLI se ejecute durante varias o muchas líneas de exploración siempre que salga antes del siguiente DLI o la interrupción vertical en blanco.
Ejemplos de
Un ejemplo trivial de una interrupción de la lista de visualización que cambia el color de fondo:
DLI PHA ; Guardar acumulador en la pila LDA # $ 9 C ; Cargue azul claro (color $ 9, luminancia $ C) STA WSYNC ; Espere a sincronizar hasta el final de la línea de exploración STA COLBK ; Establecer el PLA de fondo ; Restaurar el acumulador de la pila RTI ; El fin.
Gráficos de jugador / misil
La mayoría de las funciones de gráficos de jugador / misil están en el dominio del chip CTIA / GTIA . CTIA / GTIA controla la posición, el tamaño, el color, la prioridad y la detección de colisiones para los objetos gráficos Player / Missile, pero su implementación real de representación de formas no va más allá de un patrón de un solo byte por objeto presentado uniformemente en todas las líneas de escaneo. (Los patrones se establecen en los registros de patrones gráficos GRAF * de CTIA / GTIA ). Al final, por sí mismo, CTIA / GTIA genera objetos Player / Missile como patrones de rayas verticales únicamente en la pantalla.
El diseño de ANTIC incluye capacidad DMA para que pueda leer su Lista de visualización y los datos gráficos de Playfield. Esta capacidad de acceso directo a la memoria se aprovecha para leer datos en nombre de CTIA / GTIA y actualizar los registros del patrón de gráficos GRAF * a medida que se genera cada línea de exploración de la pantalla. De esta manera, ANTIC proporciona a los objetos Player / Missile patrones que varían en la altura de la pantalla y, por lo tanto, aparecen como gráficos tradicionales de "sprites".
Los bits 2 y 3 del registro DMACTL de ANTIC (sombreado por SDMCTL) controlan la recuperación de ANTIC de datos de jugador / misil para actualizar los registros de patrones gráficos CTIA / GTIA.
Valores de bits de control de DMA de misiles / reproductor DMACTL (bits [3: 2]):
- $ 00 - Desactivar jugador y DMA de misiles
- $ 04 - Habilitar DMA de misiles
- $ 08 - Habilitar el DMA del jugador
- $ 0C - Habilitar DMA de jugador y misil
El DMA de misiles se puede habilitar sin el DMA del reproductor. Sin embargo, cuando Player DMA está habilitado, Missile DMA ocurre automáticamente para mantener la sincronización DMA consistente, pero los datos no se envían al registro GRAFM del Missile .
El bit 4 (valor $ 10 hex / 16 dec ) del registro DMACTL controla la frecuencia de recuperación de nuevos datos. ANTIC recupera datos y actualiza CTIA / GTIA en cada línea de escaneo. La configuración de la resolución DMACTL afecta la frecuencia con la que ANTIC incrementa su puntero DMA interno para obtener nuevos datos. Los gráficos de jugador / misil de resolución de línea única aumentan la dirección DMA en cada línea de escaneo, y la resolución de línea doble aumenta la dirección DMA con cada línea de escaneo uniforme. Los valores de bit DMACTL para la resolución de jugador / misil:
- $ 00 - Resolución de doble línea. DMA obtiene nuevos datos en líneas de escaneo pares, pero una actualización de los registros de patrones de gráficos de misiles / reproductor CTIA / GTIA todavía se produce en cada línea de escaneo. En consecuencia, cada patrón de bytes de jugador / misil tiene dos líneas de exploración de altura. Cuando la resolución de doble línea está habilitada, el registro CTIA / GTIA VDELAY ($ D01C hex / 53276 dec ) se puede utilizar para enmascarar las actualizaciones de ANTIC en líneas de exploración uniformes, desplazando el patrón de bits de los jugadores y misiles individuales una línea de exploración hacia abajo.
- $ 10 - Resolución de una sola línea. Se produce una nueva recuperación de DMA y una actualización del registro de jugador / misil en cada línea de exploración. El registro CTIA / GTIA VDELAY ($ D01C hex / 53276 dec ) enmascarar las actualizaciones en las líneas de escaneo pares reduce la resolución del jugador / misil de una línea para que parezca una resolución de doble línea, aunque los datos se desplazan una línea de escaneo hacia abajo.
CTIA / GTIA también debe estar habilitado específicamente para recibir los datos gráficos del jugador / misil a través de DMA para presentar correctamente los objetos en la pantalla. Consulte el registro GRACTL de CTIA / GTIA para obtener más información.
La ubicación de la memoria leída por ANTIC para gráficos de jugador / misil es controlada por el registro PMBASE . Este valor de PMBASE proporciona la página de inicio de la dirección base para gráficos de jugador / misil. Cuando los gráficos P / M de resolución de doble línea están operando, el valor de PMBASE debe comenzar en un límite de 1K. Cuando los gráficos P / M de resolución de una sola línea están funcionando, el valor de PMBASE debe comenzar en un límite de 2K. Los mapas de memoria para los modos gráficos Jugador / Misil:
Resolución de doble línea (1 byte por 2 líneas de exploración, 128 bytes cada objeto) relativa a PMBASE x $ 100 hex / 256 dec :
NO USADO | Misiles 3/2/1/0 | Jugador 0 | Jugador 1 | Jugador 2 | Jugador 3 | |
---|---|---|---|---|---|---|
Inicio / Parte superior de la pantalla | ||||||
dic | +0 | +384 | +512 | +640 | +768 | +896 |
maleficio | + $ 00 | + $ 180 | + $ 200 | + $ 280 | + $ 300 | + $ 380 |
Fin / Parte inferior de la pantalla | ||||||
dic | +383 | +511 | +639 | +767 | +895 | +1023 |
maleficio | + $ 17F | + $ 1FF | + $ 27F | + $ 2FF | + $ 37F | + $ 3FF |
Resolución de una sola línea (1 byte por línea de exploración, 256 bytes por objeto) relativa a PMBASE x $ 100 hex / 256 dec :
NO USADO | Misiles 3/2/1/0 | Jugador 0 | Jugador 1 | Jugador 2 | Jugador 3 | |
---|---|---|---|---|---|---|
Inicio / Parte superior de la pantalla | ||||||
dic | +0 | +768 | +1024 | +1280 | +1536 | +1792 |
maleficio | + $ 00 | + $ 300 | + $ 400 | + $ 500 | + $ 600 | + $ 700 |
Fin / Parte inferior de la pantalla | ||||||
dic | +767 | +1023 | +1279 | +1535 | +1791 | +2047 |
maleficio | + $ 2FF | + $ 3FF | + $ 4FF | + $ 5FF | + $ 6FF | + $ 7FF |
Los misiles comparten los mismos bytes de los mapas de memoria anteriores, dos bits por misil:
Misil | Bits | Valor / Máscara |
---|---|---|
0 | ------ 11 | $ 03 |
1 | ---- 11-- | $ 0C |
2 | --11 ---- | $ 30 |
3 | 11 ------ | $ C0 |
ANTIC no utiliza las primeras y últimas 8 líneas de exploración de datos de la memoria del jugador / misil en el mapa de memoria. En la resolución de doble línea se ignoran los primeros y últimos cuatro bytes, en la resolución de una sola línea se ignoran los primeros y últimos ocho bytes.
Dado que el jugador / misiles es una superposición independiente de los gráficos del campo de juego y se representan en el área de sobreexploración, las coordenadas verticales de los datos del jugador / misil deben compensarse para alinear los objetos con el campo de juego. En los modos gráficos predeterminados de 192 líneas de exploración del sistema operativo, las coordenadas de datos verticales del jugador / misil están desplazadas desde el inicio del jugador / misil en la memoria, como se muestra a continuación. Las entradas de Overscan muestran la primera y última compensación utilizada de datos de jugador / misil:
Campo de juego | Línea doble P / M | P / M Línea única |
---|---|---|
(arriba) Sin usar | + $ 00 hexadecimal / 0 diciembre a + $ 03 hexadecimal / 3 diciembre | + $ 00 hexadecimal / 0 de diciembre a + $ 07 hexadecimal / 7 de diciembre |
Iniciar Overscan | + $ 04 hexadecimal / 4 de diciembre | + $ 08 hexadecimal / 8 de diciembre |
Línea gráfica 0 | + $ 10 hexadecimal / 16 de diciembre | + $ 20 hexadecimal / 32 dic |
Línea gráfica 191 | + $ 6F hex / 111 dic | + $ DF hex / 223 dic |
Finalizar sobreexploración | + $ 7 mil millones hexadecimales / 123 dic | + $ F7 hex / 247 dic |
(abajo) Sin usar | + $ 7C hex / 124 dec a + $ 7F hex / 127 dic | + $ F8 hexadecimal / 248 dec a + $ FF hexadecimal / 255 dec |
Limitaciones
La extensión vertical de toda la pantalla del campo de juego varía entre 0 y 240 líneas de exploración; esto depende del número de líneas que ANTIC esté programado para mostrar de acuerdo con la lista de visualización . ANTIC comienza a generar líneas de exploración en la línea de exploración de TV 8 y continúa hasta la línea 247 para un total de 240 líneas de exploración.
El ancho horizontal de la pantalla del campo de juego se puede establecer en 256, 320 o 384 píxeles de ancho que corresponden a relojes de 128, 160 o 192 colores. En el modo más ancho, solo 352 píxeles (176 relojes de color) son realmente visibles. Ver DMACTL .
El desplazamiento fino horizontal mueve la región de desplazamiento hasta 16 relojes de color. Ver HSCROL .
Los modos de mapa de GTIA deben desplazarse horizontalmente en pasos del tamaño de un píxel completo (relojes de 2 colores), en lugar de un reloj de color. Consulte HSCROL y la discusión, Desplazamiento fino horizontal
El desplazamiento fino vertical mueve la región de desplazamiento el número de líneas de exploración en una única línea de modo de la región de desplazamiento, hasta un máximo de 16 líneas de exploración. Ver VSCROL .
Aunque el contador del programa Lista de visualización de ANTIC es de 16 bits, sólo los 10 bits inferiores cambian durante la ejecución normal (es decir, secuencial) de la Lista de visualización. Esto significa que la lista de visualización requiere una instrucción JMP (Jump) para cruzar un límite de 1K. Esta no es una limitación importante, porque el tamaño de una única lista de visualización suele variar de 32 a 202 bytes y prácticamente nunca supera los 720 bytes. Dado que se puede ubicar en cualquier lugar de la memoria, hay poca dificultad para encontrar un lugar de tamaño suficiente en la memoria que no cruce el límite de 1K.
El registro de escaneo de memoria, un registro que dirige los datos almacenados en la memoria de la pantalla, es de 16 bits, pero solo los 12 bits inferiores cambian cuando ANTIC está escaneando secuencialmente la memoria de video. Esto significa que la Lista de visualización requiere una instrucción de línea de modo que incluye la opción LMS (Escaneo de memoria de carga) donde la memoria de la pantalla cruza un límite de 4K. Los modos gráficos E y F de ANTIC requieren más de 7.5K de memoria de pantalla para una visualización de pantalla completa. Las listas de visualización para estas pantallas requieren que la opción LMS se agregue a una instrucción de modo cerca del centro de la pantalla donde la memoria de la pantalla cruza el límite de 4K. El límite de 4K no se puede cruzar dentro de la mitad de una línea de Modo de gráficos, sino solo entre el final de una línea de Modo y el comienzo de la siguiente línea. En otras palabras, la memoria para la línea de modo anterior termina en el último byte exacto del bloque de 4K y la siguiente línea de modo comienza en el primer byte exacto del siguiente bloque de 4K.
El conjunto de caracteres se puede ubicar en cualquier lugar de la memoria (consulte CHBASE ), pero, según el modo de texto ANTIC, la dirección inicial debe alinearse con un límite de 512 bytes o 1K.
El mapa de memoria del jugador / misil puede aparecer en cualquier lugar de la memoria (ver PMBASE ), pero, dependiendo de la resolución, la dirección de inicio debe alinearse con un límite de 1K o 2K (también ver DMACTL ).
Errores y condiciones fronterizas
Ciertas combinaciones de valores en la Lista de visualización pueden producir resultados inesperados. Además, algunas de las actividades de ANTIC tienen una sincronización crítica. Los cambios en los registros fuera de las ventanas de tiempo adecuadas pueden provocar un efecto retardado o resultados inesperados. Algunas de estas situaciones se pueden aprovechar para obtener efectos interesantes y otras producen daños en la pantalla.
Comportamientos explotables
Gráficos 9 ++
Un método para usar los modos de color GTIA mejorados sin los requisitos de gran memoria del modo ANTIC F es indicarle a ANTIC que repita cada línea de datos una o más veces mediante el uso de instrucciones de línea de modo con el modificador LMS para volver a mostrar los mismos datos de pantalla en múltiples escaneos. líneas. Esto produce una resolución vertical más baja donde cada píxel tiene 2 o más líneas de escaneo de alto, pero tiene una sobrecarga de DMA más alta debido a que ANTIC necesita volver a leer los mismos bytes de la memoria de la pantalla. En lugar de utilizar modificadores LMS repetidos, se puede aprovechar una peculiaridad del desplazamiento vertical para crear un modo de cuatro líneas de exploración que muestre píxeles utilizando los modos de interpretación de color de alta resolución o GTIA.
El desplazamiento vertical normalmente no se consideraría útil para el modo ANTIC F, que tiene una línea de exploración de altura. Sin embargo, si el Desplazamiento vertical está habilitado para la instrucción Lista de visualización del modo F , y el registro VSCROL se establece en 13, el contador de línea de ANTIC contará de 13 a 0 (cuatro líneas de exploración: 13, 14, 15, 0). Al hacerlo, ANTIC genera la misma línea de gráficos para cada línea de exploración desde su búfer interno sin volver a leer la misma memoria de pantalla. El final de la región de desplazamiento vertical debe tener VSCROL restablecido a 3, lo que permite que ANTIC cuente de 0 a 3 (cuatro líneas de exploración). El resultado final es una pantalla en Modo F donde las líneas tienen cuatro líneas de escaneo en lugar de una, pero con la sobrecarga de DMA de solo una lectura de datos de memoria de pantalla en la primera línea de escaneo.
Comportamientos no explotables
Modo 8 / Modo 9 Corrupción de desplazamiento horizontal
Los modos de mapa ANTIC 8 y 9 se corromperán cuando se sigan inmediatamente una línea de desplazamiento horizontal de un modo diferente utilizando el ancho del campo de juego normal o ancho. Esto ocurre si la línea del Modo 8 o 9 se desplaza horizontalmente o no, pero los resultados de la corrupción son diferentes en cada caso. El problema aparece para ciertos valores de HSCROL que hacen que ANTIC genere píxeles incorrectamente y desalinee la línea del Modo 8-9.
El error está ausente cuando se usa un campo de juego de ancho estrecho.
- Si el Modo 8 o 9 NO está usando el desplazamiento horizontal y sigue:
- Modo 2, 3, 4, 5, D, E o F y HSCROL es $ A, $ B, $ E o $ F: entonces la corrupción continúa a través de la línea de modo.
- Modo 2, 3, 4, 5, D, E o F y HSCROL es $ C o $ D: entonces la corrupción se resuelve dentro de dos líneas de escaneo.
- Modo 6, 7, A, B o C y HSCROL es $ E o $ F: entonces la corrupción continúa a través de la línea de modo.
- Si el Modo 8 o 9 está usando el desplazamiento horizontal y sigue:
- Modo 2, 3, 4, 5, D, E o F: entonces la corrupción se resuelve por sí sola en tres líneas de escaneo.
- Modo 6, 7, A, B o C: entonces la corrupción se resuelve por sí sola dentro de dos líneas de escaneo.
Dado que los valores de HSCROL que causan el problema son mayores que 7, el problema se puede evitar cuando el modo 8 o 9 NO está usando el desplazamiento horizontal limitando los cambios de HSCROL a relojes de color de 0 a 7 y actualizando la dirección LMS de la lista de visualización para que el desplazamiento horizontal sea más grueso en tamaños más pequeños. incrementos. Esta estrategia resuelve todos los casos en todos los modos de texto y todos los modos de mapa de A a F que generan 8 o menos relojes de color por byte de memoria de pantalla.
Error de última línea de alta resolución
No se debe crear una lista de visualización con una instrucción de alta resolución (Modo F) en la línea de exploración 247, la última línea de exploración visualizable. Si los bits de ancho de campo de reproducción de DMACTL no son 00, ANTIC no generará la sincronización vertical correctamente, lo que podría causar distorsión de la pantalla. En cualquier caso, esto es fácil de evitar, ya que esta no es una disposición práctica de la Lista de visualización, ya que coloca la línea de modo en el área de sobreexploración donde normalmente no es visible.
Desplazamiento fino horizontal del campo de juego amplio
El modificador de la lista de visualización de desplazamiento fino horizontal hace que ANTIC obtenga memoria de pantalla adicional correspondiente al siguiente ancho de campo de juego más grande que proporciona los datos necesarios para desplazarse por la pantalla. Dado que no hay un ancho de campo de juego mayor que el campo de juego ancho, ANTIC no tiene datos adicionales para un desplazamiento fino. ANTIC presenta datos falsos para el área vaciada por la pantalla desplazada; en el lado izquierdo de la pantalla se desplazará el color de fondo y en el lado derecho aparecerán algunos relojes de color de datos aleatorios al final del rango de desplazamiento. Estos datos de píxeles no suelen ser perceptibles, ya que esto ocurre en el área de sobreexploración donde normalmente no es visible. Sin embargo, si estos píxeles falsos del campo de juego se cruzan con píxeles de jugador / misil, se marcará una colisión. La solución para los jugadores / misiles que se han movido al área de sobreexploración es restablecer sus posiciones a cero para eliminarlos de la pantalla y así evitar falsas colisiones.
Ver también
- CTIA / GTIA
- Interrupción horizontal en blanco
- Interrupción vertical en blanco
Referencias
- ^ Manual de servicio de campo de la computadora doméstica Atari - 400/800 (PDF). Atari, Inc. págs. 1–8.
- ^ Neubauer, Doug (20 de junio de 2009). "Los años de Atari, por Doug Neubauer. Star Raiders, Solaris y Pokey" . DougNeubauer.com .
- ^ Patente de Estados Unidos 4296476 , Mayer, Steven T .; Miner, Jay G .; Neubauer, Douglas G .; Decuir, Joseph C., "Sistema de procesamiento de datos con generador de gráficos programable", emitido 1 981-10-20, asignado a Atari, Inc.
- ^ Michael Current, "¿Qué son los chips SALLY, ANTIC, CTIA / GTIA, POKEY y FREDDIE?" , Computadoras Atari de 8 bits: Preguntas frecuentes
- ^ a b Boris, Dan. "Fichas de Atari" . Página de inicio de Dan B . Consultado el 1 de febrero de 2011 .
- ^ Vendel, Curt. "Atari 800XLCR" . AtariMuseum.com . Archivado desde el original el 13 de septiembre de 2011 . Consultado el 1 de febrero de 2011 .
- ^ Vendel, Curt. "Probador de rendimiento KERI" . AtariMuseum.com . Archivado desde el original el 13 de septiembre de 2011 . Consultado el 1 de febrero de 2011 .
enlaces externos
- De Re Atari publicado por Atari Program Exchange
- Mapping the Atari, edición revisada por Ian Chadwick
- Hoja de datos del chip ANTIC escaneada a PDF .