stringtranslate.com

LENTO

POKEY en un Atari 130XE

POKEY , acrónimo de Pot Keyboard Integrated Circuit , [1] es un chip de E/S digital diseñado por Doug Neubauer en Atari, Inc. [2] para las computadoras Atari de 8 bits . Fue lanzado por primera vez con Atari 400 y Atari 800 en 1979 y está incluido en todos los modelos posteriores y en la consola Atari 5200. POKEY combina funciones para leer controladores de paletas ( potenciómetros ) y teclados de computadora , así como generación de sonido y una fuente de números pseudoaleatorios . Produce cuatro voces de audio de onda cuadrada distintiva , ya sea como tonos claros o modificados con ajustes de distorsión. [3] Neubauer también desarrolló la aplicación asesina de Atari de 8 bits Star Raiders que hace uso de las características de POKEY.

Los chips POKEY se utilizan para el audio en muchos videojuegos arcade de la década de 1980, incluidos Centipede , Missile Command , Asteroids Deluxe y Gauntlet . Algunos de los sistemas arcade de Atari utilizan versiones multinúcleo con 2 o 4 POKEY en un solo paquete para obtener más canales de audio. La consola Atari 7800 permite que un cartucho de juego contenga un POKEY, lo que proporciona un mejor sonido que el chip de audio del sistema. Solo dos juegos con licencia hacen uso de esto: los ports de Ballblazer y Commando .

El chip LSI tiene 40 pines y está identificado como C012294. [4] La USPTO otorgó la patente estadounidense 4.314.236 a Atari el 2 de febrero de 1982 para un "Aparato para producir una pluralidad de efectos de sonido de audio". [5] Los inventores enumerados son Steven T. Mayer y Ronald E. Milner.

Características

Versiones

Por número de pieza:

Atari utilizó varios fabricantes diferentes para el chip, sin embargo AMI produjo la mayoría de ellos a partir de 1983. Los primeros chips se fabricaron con un proceso de 5 micrómetros, que luego se redujo a 3 micrómetros. Se ha informado de que los POKEY producidos por AMI tienen una alta tasa de fallos en comparación con otras marcas de chips; las razones de esto no están claras, pero se especula que se debe a un fallo del encapsulado del chip o de los cables de conexión. Se ha informado de un éxito limitado en la reactivación de POKEYs no funcionales calentándolos en un horno. También existen reemplazos de FPGA modernos como POKEYOne. [7]

Distribución de pines

Distribución de pines del Atari POKEY (C012294)

Registros

Las computadoras Atari de 8 bits asignan POKEY a la página hexadecimal $D2xx y la consola Atari 5200 lo asigna a la página hexadecimal $E8xx .

POKEY proporciona 29 registros de lectura/escritura que controlan el sonido, la entrada de Paddle, la entrada del teclado, la entrada/salida serial y las interrupciones. Muchas direcciones de registro de POKEY tienen propósitos duales y realizan funciones diferentes como registro de lectura y de escritura. Por lo tanto, ningún código debería leer registros de hardware esperando recuperar el valor escrito previamente.

Este problema se resuelve para algunos registros mediante registros "sombra" del sistema operativo implementados en la RAM normal que reflejan los valores de los registros de hardware. Durante el espacio en blanco vertical, el sistema operativo copia los registros "sombra" en la RAM para los registros de escritura en el registro de hardware correspondiente y actualiza los valores "sombra" para los registros de lectura desde el hardware en consecuencia. Por lo tanto, las escrituras en los registros de hardware que tienen registros "sombra" correspondientes se sobrescribirán con el valor de los registros "sombra" durante el próximo espacio en blanco vertical.

La lectura de valores directamente desde el hardware en una etapa desconocida del ciclo de visualización puede arrojar resultados inconsistentes (por ejemplo, la lectura de potenciómetros). Los registros de sombra del sistema operativo para los registros de lectura suelen ser la fuente de información preferida.

Algunos registros de hardware de escritura no tienen registros Shadow 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 saber el último valor escrito en el registro, entonces es responsabilidad de la aplicación implementar su propio valor shadow para recordar lo que escribió.

En los listados de registros individuales que aparecen a continuación se aplica la siguiente leyenda:

Audio

Pokey contiene un generador de sonido programable ; cuatro canales de audio con controles separados de frecuencia, ruido y nivel de voz.

Cada canal tiene un divisor de frecuencia de 8 bits y un registro de 8 bits para seleccionar ruido y volumen.

El sonido de POKEY es distintivo: cuando los cuatro canales se utilizan de forma independiente, se nota una desafinación notable en partes de la escala de temperamento igual de 12 tonos , debido a la falta de precisión de tono. Los canales se pueden emparejar para lograr una mayor precisión; además, hay disponibles múltiples formas de distorsión , lo que permite un sonido más denso. La distorsión se utiliza principalmente en música para partes de bajo.

Uno de los motores de sonido desarrollados para la familia Atari de 8 bits se llamó AMP Engine (Advanced Music Processor) y fue utilizado por el músico Gary Gilbertson .

Frecuencia del canal de audio

Los registros AUDF* controlan la frecuencia o el tono de los canales de sonido correspondientes. Los valores AUDF* también controlan los temporizadores de hardware POKEY, útiles para el código que debe ejecutarse en intervalos precisos con mayor frecuencia que el espacio en blanco vertical.

Cada registro AUDF* es un valor de 8 bits que proporciona un temporizador de cuenta regresiva o divisor para los pulsos del reloj POKEY. Por lo tanto, los valores más pequeños permiten una salida más frecuente de pulsos de POKEY, y los valores más grandes, una salida menos frecuente. Los valores $0 hex /0 dec a $FF hex /255 dec se incrementan por POKEY para variar de $1 hex /1 dec a $100 hex /256 dec . El tono de sonido audible real depende de la frecuencia del reloj POKEY y de los valores de distorsión elegidos. Consulte Control de canal de audio y Control de audio.

AUDF1 $D200 Escribir

Frecuencia del canal de audio 1

AUDF2 $D202 Escribir

Frecuencia del canal de audio 2

AUDF3 $D204 Escribir

Frecuencia del canal de audio 3

AUDF4 $D206 Escribir

Frecuencia del canal de audio 4

Control de canal de audio

Los registros de control del canal de audio permiten controlar el volumen y la distorsión de los canales de sonido individuales. El audio también se puede generar independientemente del reloj POKEY mediante la manipulación directa del volumen de un canal de sonido, lo que resulta útil para reproducir muestras digitales.

AUDC1 $D201 Escritura

Control del canal de audio 1

AUDC2 $D203 Escribir

Control del canal de audio 2

AUDC3 $D205 Escribir

Control del canal de audio 3

AUDC4 $D207 Escribir

Control del canal de audio 4

Bit 0-3: Control sobre el nivel de volumen, de 0 a F.

Bit 4: Salida forzada solo con volumen. Cuando se establece este bit, el canal ignora el temporizador AUDF, los controles de ruido/distorsión y el filtro de paso alto. El sonido se produce solo al establecer los bits de volumen en 0:3. Esta función se utilizó para crear audio digital mediante modulación por código de pulsos .

Bit 5-7: Ajustes del registro de desplazamiento para ruidos/distorsión. Los valores de los bits se describen a continuación:

La generación de ruidos aleatorios se realiza mediante la lectura de 8 bits de la parte superior de un registro de desplazamiento de 17 bits. Estos registros se controlan con una frecuencia de 1,79 MHz para NTSC o 1,77 MHz para PAL. Sus salidas se pueden utilizar de forma independiente con la tasa de división de cada canal de audio.

AUDCTL $D208 Escritura

El control de audio permite elegir la entrada de reloj utilizada para los canales de audio, controlar la función de filtro de paso alto, fusionar dos canales permitiendo una precisión de frecuencia de 16 bits, seleccionar un reloj de alta frecuencia para canales específicos y controlar la "aleatoriedad" de la entrada polinomial.

"1" significa "encendido", si no se describe:

Bit 0
01: (15 kHz), elección de la tasa de divisor de frecuencia "0" - 64 kHz, "1" - 15 kHz
Bit 1
$02: (FI2 + 4), filtro de paso alto para el canal 2 clasificado por la frecuencia del canal 4
Bit 2
$04: (FI1 + 3), filtro de paso alto para el canal 1 clasificado por la frecuencia del canal 3
Bit 3
08: (CH4 + 3), conexión de los divisores 4+3 para obtener una precisión de 16 bits
Bit 4
10: (CH2 + 1), conexión de los divisores 2+1 para obtener una precisión de 16 bits
Bit 5
$20: (CH3 1.79), establezca la frecuencia del canal 3 "0" en 64 kHz. "1" es 1.79 MHz NTSC o 1.77 MHz PAL
Bit 6
$40: (CH1 1.79), establezca la frecuencia del canal 1 "0" en 64 kHz. "1" es 1.79 MHz NTSC o 1.77 MHz PAL
Bit 7
$80: (POLY 9), cambio de registro de desplazamiento "0" - 17 bits, "1" - 9 bits

Todos los divisores de frecuencia (AUDF) pueden funcionar al mismo tiempo a una frecuencia de 64 kHz o 15 kHz.

Los divisores de frecuencia 1 y 3 pueden ser controlados alternativamente por el reloj de la CPU (1,79 MHz NTSC, 1,77 MHz PAL). Los divisores de frecuencia 2 y 4 pueden ser controlados alternativamente por la salida de los divisores 1 y 3. De esta manera, POKEY hace posible la conexión de canales de 8 bits para crear sonido con una precisión de 16 bits.

Posibles configuraciones de canal:

Potenciómetros

POKEY tiene ocho puertos de conversión analógico a digital, los cuales se usan más comúnmente para potenciómetros, también conocidos como controladores de paleta. Las entradas analógicas también se usan para el controlador de la tableta táctil y los controladores de teclado de videojuegos de 12 botones. Cada entrada tiene un transistor de caída, que se puede activar o desactivar desde el software. Los temporizadores también se pueden usar para apoyar un lápiz óptico , conectando un fotodiodo al transistor de caída, que captura el temporizador cuando el haz de electrones en el televisor pasa por el lápiz. La posición vertical del lápiz tuvo que leerse por separado.

POT0 $D200 Leer

SOMBRA: PADDL0 $0270

Entrada 0 del controlador de paleta

POT1 $D201 Leer

SOMBRA: PADDL1 $0271

Entrada de controlador de paleta 1

POT2 $D202 Leer

SOMBRA: PADDL2 $0272

Controlador de paleta con 2 entradas

POT3 $D203 Leer

SOMBRA: PADDL3 $0273

Controlador de paleta de 3 entradas

POT4 $D204 Leer

SOMBRA: PADDL4 $02704

Controlador de paleta de 4 entradas

POT5 $D205 Leer

SOMBRA: PADDL5 $0275

Controlador de paleta de 5 entradas

POT6 $D206 Leer

SOMBRA: PADDL6 $0276

Controlador de paleta de 6 entradas

POT7 $D207 Leer

SOMBRA: PADDL7 $0277

Controlador de paleta de 7 entradas

Cada entrada tiene un temporizador de 8 bits, que cuenta el tiempo en el que se muestra cada línea de TV. Esto tenía la ventaja adicional de permitir que el valor leído se ingresara directamente en las coordenadas de la pantalla de los objetos que se manejaban con las paletas. Los valores de Atari Paddle varían de 0 a 228, aunque el máximo posible es 244. El controlador Paddle lee 0 cuando se gira a su posición máxima en el sentido de las agujas del reloj y devuelve valores crecientes a medida que se gira en el sentido contrario a las agujas del reloj, hasta llegar a su valor máximo.

El proceso de lectura de Paddle comienza escribiendo en POTGO, lo que restablece los valores POT* a 0, el valor ALLPOT a $FF y descarga los capacitores de lectura del potenciómetro. Los valores POT* aumentan a medida que se escanean hasta alcanzar el valor de resistencia del potenciómetro. Cuando se completa la lectura de Paddle, el bit correspondiente en ALLPOT se restablece a 0.

El proceso de escaneo de las paletas puede tardar la mayor parte de un fotograma de vídeo en completarse. El sistema operativo Atari se encarga de la lectura de las paletas automáticamente. Las paletas se leen y el escaneo de las paletas se inicia durante la etapa 2 de la eliminación vertical. Los valores de las paletas se copian en los registros de sombra. (Tenga en cuenta que los activadores de las paletas son en realidad entradas de dirección del joystick leídas desde PIA).

Se puede utilizar un modo más rápido de escanear las paletas configurando un bit en SKCTL. La secuencia de lectura se completa en solo un par de líneas de escaneo, pero el valor es menos preciso.

ALLPOT $D208 Leer

Estado de escaneo del potenciómetro

Cada bit corresponde a una entrada de potenciómetro (los registros POT*). Cuando se inicia el escaneo de paletas escribiendo en POTGO, el bit de cada paleta en ALLPOT se establece en 1. Cuando se completa el escaneo de una paleta, el bit correspondiente en ALLPOT se restablece a 0, lo que indica que el valor en el registro POT* asociado ahora es válido para leer.

POTGO $D20B Escritura

Iniciar escaneo del potenciómetro

Al escribir en POTGO se inicia el proceso de escaneo del potenciómetro (Paddle). Esto restablece los valores POT* a 0, el valor ALLPOT a $FF y descarga los capacitores de lectura del potenciómetro. A medida que se completa cada escaneo del potenciómetro, el bit correspondiente al potenciómetro en ALLPOT se borra, lo que indica que el valor del registro POT* asociado es válido para la lectura.

Puerto de entrada y salida en serie

Contiene:

POKEY es una especie de UART . Normalmente, uno de los canales de audio duplicados se utiliza como generador de velocidad en baudios. La velocidad en baudios estándar es de 19,2 kbit/s, la velocidad en baudios máxima posible es de 127 kbit/s. Un byte introducido en el registro SEROUT se envía automáticamente a través del bus serie. La trama de datos contiene 10 bits: 1 bit de inicio, 8 bits de datos, 1 bit de parada. Los niveles de voltaje son 0 V (0 lógico) y +4 V (1 lógico). Es posible conectar el puerto serie de Atari con un puerto RS-232 mediante un simple convertidor de voltaje.

Cada operación de entrada/salida hace que los registros de desplazamiento internos de POKEY cambien de valor, por lo que al programar para POKEY es necesario reinicializar algunos valores después de realizar cada operación.

SKREST $D20A Escribir

Restablecer el estado del puerto serie (SKSTAT).

Una escritura en este registro restablecerá los bits 5 a 7 de SKSTAT, que son pestillos a 1. Los pestillos marcan el desbordamiento del teclado, el desbordamiento de la entrada de datos en serie y el error del marco de entrada de datos en serie.

SEROUT $D20D Escribir

Byte de salida de datos del puerto serie.

Este es un registro de "retención" paralelo para el valor de ocho bits (un byte) que se transferirá al registro de desplazamiento en serie para la salida de un bit a la vez. Cuando el puerto está listo para aceptar datos para la salida, una interrupción de salida de datos en serie informa al sistema operativo que puede escribir un byte en este registro de salida.

SERIN $D20D Leer

Byte de entrada de datos del puerto serie.

Al igual que SEROUT, también es un registro de "retención" paralelo. Contiene el valor de ocho bits (un byte) ensamblado por el registro de desplazamiento en serie que lee la entrada de datos bit a bit. Cuando se lee un byte completo, se produce una interrupción de entrada de datos en serie que informa al sistema operativo que puede leer el byte de este registro.

SKCTL $D20F Escribir

Control de puerto serie

Bit 0: Habilita el escaneo "antirrebote", cuyo objetivo es eliminar el ruido o la vibración de los interruptores mecánicos. Un valor de 1 permite que POKEY utilice un registro de comparación interno al escanear teclas. Se debe detectar una tecla en dos escaneos simultáneos antes de que se la identifique como presionada, y se la debe ver liberada durante dos escaneos consecutivos para que se la considere liberada. Esta opción debe estar habilitada para mantener el manejo normal del teclado con el sistema operativo.

Bit 1: Establezca en 1 para habilitar el escaneo del teclado. Esta opción debe estar habilitada para mantener el manejo normal del teclado con el sistema operativo.

Bit 2: se establece en 1 para habilitar un escaneo rápido, aunque menos preciso, del potenciómetro. El escaneo rápido del potenciómetro incrementa el contador en cada ciclo y devuelve un resultado utilizable dentro de dos líneas de escaneo. El sistema operativo utiliza el escaneo lento del potenciómetro, que incrementa el contador una vez cada 114 ciclos (línea de escaneo) y toma un cuadro (1/60 de segundo) para producir un resultado. El sistema operativo lee los valores del potenciómetro durante su interrupción vertical en blanco (VBI) y copia el resultado en los registros de sombra del potenciómetro en la RAM. Luego, restablece POTGO para la siguiente lectura durante el siguiente VBI.

Bit 3: Habilita el modo de dos tonos del puerto serial. Cuando está habilitado, los bits 1 y 0 que se envían al bus SIO se reemplazan por tonos establecidos por los temporizadores 1 y 2. Esto se utiliza normalmente para escribir tonos analógicos que representan datos digitales en una cinta de casete.

Bit 4-6: Control de sincronización del reloj para el funcionamiento del puerto serie. Los valores de los bits se describen a continuación:

Bit 7: Fuerza una salida 0 conocida, de modo que el temporizador 2 pueda restablecer el temporizador 1 en el modo de salida serial de dos tonos.

SKSTAT $D20F Leer

Estado del puerto serie

KBCODE $D209 Leer

SOMBRA: CH $02FC

Código de teclado

Ocho interrupciones IRQ

ROMPER
Interrupción (tecla BREAK)
K
Teclado (interrupción del teclado)
SEÑOR
Si la entrada serial está lista (leer interrupción desde el riel serial)
ODN
Si se necesitan datos de salida (interrupción de escritura desde el riel serial)
XD
si eXmitend Data (interrupción de fin de transmisión en serie)
T1
Temporizador 1, interrupción del temporizador 1
T2
Temporizador 2, interrupción del temporizador 2
T4
Temporizador 4, interrupción del temporizador 4

Las interrupciones se pueden activar o desactivar desde el software mediante el registro IRQEN. El registro IRQSTAT contiene el estado de las interrupciones.

Teclado

Registro de seis teclas de las teclas realmente pulsadas (K0 K5), que contiene valores de 00 a 3F. Contiene 2 valores de control. Uno de ellos actúa como decodificador de los 6 valores. El segundo valor de control se utiliza para decodificar valores de teclas especiales: CTRL, SHIFT y BREAK.

Referencias

  1. ^ "I. Teoría de funcionamiento". Manual de servicio técnico de la computadora doméstica Atari - 400/800 . Atari, Inc. págs. 1–11.
  2. ^ Hague, James (1 de junio de 2002). "Entrevista con Doug Neubauer". Halcyon Days . Consultado el 14 de enero de 2008 .
  3. ^ "Capítulo 7: Sonido". De Re Atari. Atari, Inc. 1982.
  4. ^ Michael Current, "¿Qué son los chips SALLY, ANTIC, CTIA/GTIA, POKEY y FREDDIE?", Computadoras Atari de 8 bits: preguntas frecuentes
  5. ^ Atari, Inc. (24 de enero de 1979). "Aparato para producir una pluralidad de efectos de sonido de audio". Patente de Estados Unidos . Consultado el 14 de enero de 2008 .
  6. ^ "Diferencias de Atari Pokey". 16 de noviembre de 2016.
  7. ^ "Reemplazos de chips Atari Pokey y posible solución". 11 de enero de 2020.

Enlaces externos