POKEY ( 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 . Se lanzó por primera vez con las 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 paleta ( 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 distintivas , ya sea como tonos claros o modificados con ajustes de distorsión. [ 3 ] Neubauer también desarrolló la exitosa aplicación de 8 bits para Atari, Star Raiders , que utiliza funciones de POKEY.
Los chips POKEY se utilizan para el audio en muchos videojuegos arcade de la década de 1980, incluyendo Centipede , Missile Command , Asteroids Deluxe y Gauntlet . Algunos sistemas arcade de Atari utilizan versiones multinúcleo con 2 o 4 chips POKEY en un solo paquete para obtener más canales de audio. La consola Atari 7800 permite que un cartucho de juego contenga un chip POKEY, lo que proporciona un mejor sonido que el chip de audio del sistema. Tres juegos con licencia hacen uso de esto: las versiones de Ballblazer , Commando y Tiger-Heli .
El chip LSI tiene 40 pines y se identifica como C012294. [ 4 ] Contiene aproximadamente 5000 transistores. [ 5 ] 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". [ 6 ] Los inventores mencionados son Steven T. Mayer y Ronald E. Milner.
Características
- Audio
- 4 canales de audio semiindependientes
- Los canales se pueden configurar como uno de los siguientes:
- Cuatro canales de 8 bits
- Dos canales de 16 bits
- Un canal de 16 bits y dos canales de 8 bits.
- Volumen , frecuencia y forma de onda por canal ( onda cuadrada con ciclo de trabajo variable o ruido pseudoaleatorio ).
- Divisor de frecuencia de 15 kHz o 64 kHz .
- Se pueden controlar dos canales a la frecuencia del reloj de la CPU.
- Filtro de paso alto
- Escaneo del teclado (hasta 64 teclas) + 2 bits modificadores (Shift, Control) + Break
- Puertos para potenciómetros (8 puertos independientes, cada uno con resolución de 8 bits)
- Temporizadores de alta resolución (los canales de audio 1, 2 y 4 se pueden configurar para que generen interrupciones del temporizador cuando cruzan el cero).
- Generador de números aleatorios (se pueden leer 8 bits de un contador polinómico de 17 bits).
- Puerto de E/S serie
- Ocho interrupciones IRQ
Versiones
Por número de pieza:
- C012294 — Se utiliza en todos los ordenadores Atari de 8 bits , incluidos el Atari XEGS y la consola Atari 5200. El sufijo del chip hace referencia al fabricante:
- C012294B-01 — AMI
- C012294-03 — Signetics
- C012294-19 — National Semiconductor
- C012294-22 — OKI Semiconductor
- C012294-31 — IMP
- 137430-001 — Número de pieza que a veces se usa en las máquinas recreativas Atari para POKEY.
- 137324-1221 — Procesador POKEY de cuatro núcleos utilizado en las máquinas recreativas Atari Major Havoc , Yo, Robot , Firefox y El retorno del Jedi . [ 7 ]
Atari utilizó varios fabricantes diferentes para el chip; sin embargo, AMI produjo la mayoría a partir de 1983. Los primeros chips se fabricaron con un proceso de 5 micrómetros, que posteriormente se redujo a 3 micrómetros. Se ha informado que los POKEY fabricados por AMI presentan una alta tasa de fallos en comparación con otras marcas del chip; las razones de esto no están claras, pero se especula que se debe a un fallo en el encapsulado del chip o en los cables de conexión. Se ha informado de cierto éxito limitado en la recuperación de POKEY que no funcionan mediante calentamiento en un horno. También existen reemplazos modernos de FPGA, como POKEYOne. [ 8 ]
Diagrama de pines

Registros
Los ordenadores Atari de 8 bits asignan POKEY a la página hexadecimal $D2xx y la consola Atari 5200 la asigna a la página hexadecimal $E8xx.
POKEY proporciona 29 registros de lectura/escritura que controlan el sonido, la entrada de la paleta, la entrada del teclado, la entrada/salida serie y las interrupciones. Muchas direcciones de registro de POKEY tienen doble función, ya que operan como registros de lectura y escritura. Por lo tanto, ningún código debe leer los registros de hardware esperando recuperar el valor escrito previamente.
Este problema se resuelve para algunos registros mediante registros de "sombra" del sistema operativo implementados en la RAM convencional, que reflejan los valores de los registros de hardware. Durante el borrado vertical, el sistema operativo copia los registros de sombra de la RAM para los registros de escritura al registro de hardware correspondiente y actualiza los valores de sombra para los registros de lectura desde el hardware. Por lo tanto, las escrituras en los registros de hardware que tienen registros de sombra correspondientes se sobrescribirán con el valor de estos registros durante el siguiente borrado vertical.
La lectura directa de valores del hardware en una etapa desconocida del ciclo de visualización puede generar 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 escritura de hardware no tienen registros de sombra correspondientes. Una aplicación puede escribir en ellos de forma segura sin que el valor se sobrescriba durante el borrado vertical. Si la aplicación necesita conocer el último valor escrito en el registro, es su responsabilidad implementar su propio valor de sombra para recordar lo que escribió.
En los listados de registros individuales que aparecen a continuación, se aplica la siguiente leyenda:
Audio
Pokey incluye un generador de sonido programable ; cuatro canales de audio con controles independientes de frecuencia, ruido y nivel de voz.
Cada canal dispone de un divisor de frecuencia de 8 bits y un registro de 8 bits para seleccionar el ruido y el volumen.
- AUDF1 a AUDF4 – registro de frecuencia (frecuencia de audio)
- AUDC1 a AUDC4 : registro de volumen y ruido (Control de audio)
- AUDCTL – registro general que controla los generadores (AUDio ConTroL)
El sonido de POKEY es distintivo: al usar los cuatro canales de forma independiente, se aprecia una desafinación notable en algunas partes de la escala de temperamento igual de 12 tonos , debido a la falta de precisión en la afinación. Los canales se pueden combinar para obtener mayor precisión; además, dispone de múltiples tipos de distorsión , lo que permite un sonido más denso. La distorsión se utiliza principalmente en la música para las partes de bajo.
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 a intervalos precisos, más frecuentes que el intervalo de silencio 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 de pulsos más frecuente de POKEY, y los valores más grandes, una salida menos frecuente. Los valores $0 hex /0 dec a $FF hex /255 dec son incrementados por POKEY para abarcar desde $1 hex /1 dec hasta $100 hex /256 dec . El tono de sonido audible real depende de la frecuencia del reloj POKEY y de los valores de distorsión seleccionados. 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 del canal de audio
Los registros de control del canal de audio proporcionan control de volumen y distorsión sobre cada canal de sonido. También es posible generar audio independientemente del reloj POKEY mediante la manipulación directa del volumen de un canal de sonido, lo cual resulta útil para reproducir muestras digitales.
AUDC1 $D201 Escribir
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
Bits 0-3: Control del nivel de volumen, de 0 a F.
Bit 4: Salida de volumen forzada únicamente. Cuando se activa 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 activando los bits de volumen 0:3. Esta función se utilizaba para crear audio digital mediante modulación por impulsos codificados .
Bits 5-7: Ajustes del registro de desplazamiento para ruido/distorsión. Los valores de los bits se describen a continuación:
La generación de ruido aleatorio se logra leyendo 8 bits de la parte superior de un registro de desplazamiento de 17 bits. Dichos registros funcionan con una frecuencia de 1,79 MHz para NTSC o 1,77 MHz para PAL. Sus salidas pueden utilizarse de forma independiente mediante el divisor de frecuencia de cada canal de audio.
AUDCTL $D208 Escribir
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 para lograr 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 polinómica.
"1" significa "encendido", si no se describe:
- Bit 0
- $01: (15 kHz), selección de la frecuencia del divisor "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 divisores 4+3 para obtener una precisión de 16 bits.
- Bit 4
- $10: ( CH2 + 1 ), conexión de divisores 2+1 para obtener una precisión de 16 bits.
- Bit 5
- $20: ( CH3 1.79 ), configure la frecuencia del canal 3. "0" es 64 kHz. "1" es 1.79 MHz NTSC o 1.77 MHz PAL.
- Bit 6
- $40: ( CH1 1.79 ), configure la frecuencia del canal 1. "0" es 64 kHz. "1" es 1.79 MHz NTSC o 1.77 MHz PAL.
- Bit 7
- $80: (POLY 9), registro de desplazamiento conmutado "0" - 17 bits, "1" - 9 bits
Todos los divisores de frecuencia (AUDF) pueden ser controlados simultáneamente 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 forma, POKEY permite conectar canales de 8 bits para generar sonido con una precisión de 16 bits.
Posibles configuraciones de canal:
- cuatro canales de 8 bits
- dos canales de 8 bits y un canal de 16 bits
- dos canales de 16 bits
Potenciómetros
POKEY cuenta con ocho puertos convertidores analógico-digitales, comúnmente utilizados para potenciómetros, también conocidos como controladores tipo paleta. Las entradas analógicas también se utilizan para el controlador de la tableta táctil y los controladores de teclado para videojuegos de 12 botones. Cada entrada dispone de un transistor de detección de caída, que se puede activar o desactivar mediante software. Los temporizadores también pueden utilizarse para admitir un lápiz óptico , conectando un fotodiodo al transistor de detección de caída, que captura la señal del temporizador cuando el haz de electrones del televisor pasa por el lápiz. La posición vertical del lápiz debía leerse por separado.
POT0 $D200 Leer
SOMBRA: PADDL0 $0270
Controlador de paleta 0 Entrada
POT1 $D201 Leer
SOMBRA: PADDL1 $0271
Controlador de paleta 1 entrada
POT2 $D202 Leer
SOMBRA: PADDL2 $0272
Controlador de paleta de 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 mientras se muestra cada línea de TV. Esto tenía la ventaja adicional de permitir que el valor leído se introdujera directamente en las coordenadas de pantalla de los objetos controlados por las paletas. Los valores de las paletas Atari van de 0 a 228, aunque el máximo posible es 244. El controlador de paletas lee 0 cuando se gira a su posición máxima en el sentido de las agujas del reloj y devuelve valores crecientes al girarlo en sentido contrario a las agujas del reloj hasta alcanzar su valor máximo.
El proceso de lectura del Paddle comienza escribiendo en POTGO, lo que restablece los valores de POT* a 0, el valor de ALLPOT a $FF y descarga los condensadores de lectura del potenciómetro. Los valores de POT* se incrementan a medida que se escanean hasta alcanzar el valor de resistencia del potenciómetro. Cuando finaliza la lectura del Paddle, el bit correspondiente en ALLPOT se restablece a 0.
El proceso de escaneo de los Paddles puede tardar la mayor parte de un fotograma de vídeo en completarse. El sistema operativo Atari se encarga de la lectura de los Paddles automáticamente. Los Paddles se leen y el escaneo se inicia durante el borrado vertical de la etapa 2. Los valores de los Paddles se copian a los registros de sombra. (Cabe destacar que los disparadores de los Paddles son en realidad entradas de dirección del joystick leídas desde PIA).
Es posible escanear los Paddles de forma más rápida configurando un bit en SKCTL . La secuencia de lectura se completa en tan 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 del potenciómetro (los registros POT*). Cuando se inicia el escaneo de las paletas escribiendo en POTGO, el bit correspondiente a cada paleta en ALLPOT se establece en 1. Cuando finaliza 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 su lectura.
POTGO $D20 mil millones Escribir
Iniciar escaneo del potenciómetro
Escribir en POTGO inicia el proceso de escaneo del potenciómetro (Paddle). Esto restablece los valores de POT* a 0, el valor de ALLPOT a $FF y descarga los condensadores de lectura del potenciómetro. A medida que se completa cada escaneo del potenciómetro, se borra el bit correspondiente al potenciómetro en ALLPOT , lo que indica que el valor del registro POT* asociado es válido para su lectura.
Puerto de entrada/salida serie
Contiene:
- Línea de entrada serie
- Línea de salida serie
- Línea de salida del reloj serie
- línea de datos de reloj serie bidireccional
- registros SKREST, SEROUT, SERIN, SKCTL, SKSTAT
POKEY es una especie de UART . Normalmente, uno de los canales de audio duplicados se usa como generador de velocidad de transmisión. La velocidad de transmisión estándar es de 19,2 kbit/s, y la 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 y 1 bit de parada. Los niveles de voltaje son 0 V (lógico 0) y +4 V (lógico 1). 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 provoca un cambio de valor en los registros de desplazamiento internos de POKEY, 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 al 7 de SKSTAT , que son biestables, a 1. Los biestables indican desbordamiento del teclado, desbordamiento de la entrada de datos serie y error de trama de la entrada de datos serie.
SEROUT $D20D Escribir
Byte de datos de salida 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 serie para su salida, bit a bit. Cuando el puerto está listo para aceptar datos de salida, una interrupción de salida de datos 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. Este almacena el valor de ocho bits (un byte) generado por el registro de desplazamiento serie, que lee los datos de entrada bit a bit. Cuando se lee un byte completo, se produce una interrupción de entrada de datos serie que informa al sistema operativo de que puede leer el byte desde este registro.
SKCTL $D20F Escribir
Control de puerto serie
Bit 0: Habilita el escaneo "debounce", diseñado para eliminar el ruido o la fluctuación de los interruptores mecánicos. Un valor de 1 permite que POKEY utilice un registro de comparación interno durante el escaneo de teclas. Una tecla debe detectarse en dos escaneos simultáneos para que se considere pulsada, y debe observarse liberada en dos escaneos consecutivos para que se considere liberada. Esta función debe estar habilitada para mantener el funcionamiento normal del teclado con el sistema operativo.
Bit 1: Establecer en 1 para habilitar el escaneo del teclado. Esto debe estar habilitado para mantener el funcionamiento normal del teclado con el sistema operativo.
Bit 2: Establecer en 1 para habilitar el 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 útil en 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), tardando un fotograma (1/60 de segundo) en generar 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. A continuación, reinicia POTGO para la siguiente lectura durante la siguiente VBI.
Bit 3: Habilita el modo de dos tonos del puerto serie. Cuando está habilitado, los bits 1 y 0 que se envían al bus SIO se reemplazan por tonos configurados por los temporizadores 1 y 2. Esto se usa normalmente para grabar tonos analógicos que representan datos digitales en una cinta de casete.
Bits 4-6: Control de temporizació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 reiniciar el temporizador 1 en 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 de teclado)
- SEÑOR
- Si la entrada serie está lista (lectura de la interrupción desde el riel serie)
- ODN
- Si se necesitan datos de salida (interrupción de escritura desde el riel serie)
- XD
- Si se transmiten datos (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 mediante software a través del registro IRQEN. El registro IRQSTAT contiene el estado de las interrupciones.
Teclado
Registro de seis teclas pulsadas (K0, K5), con valores de 00 a 3F. Contiene dos valores de control. Uno de ellos decodifica los seis valores. El segundo valor de control se utiliza para decodificar las teclas especiales CTRL, SHIFT y BREAK.
Referencias
- ↑ "I. Teoría de funcionamiento". Manual de servicio técnico de Atari Home Computer - 400/800 . Atari, Inc. págs . 1-11 .
- ↑ Hague, James (marzo de 1997). "Doug Neubauer" . Halcyon Days: Interviews with Classic Computer and Video Game Programmers . Dadgum Games . Consultado el 15 de septiembre de 2025 .
- ↑ "Capítulo 7: Sonido". De Re Atari . Atari, Inc. 1982.
- ↑ Michael Current, "¿Qué son los chips SALLY, ANTIC, CTIA/GTIA, POKEY y FREDDIE?" , Computadoras Atari de 8 bits: Preguntas frecuentes
- ↑ Cwik, Jorge. "Pokey decap" .
- ↑ Atari, Inc. (24 de enero de 1979). "Aparato para producir varios efectos de sonido" . Patente de Estados Unidos . Archivado del original el 3 de junio de 2015. Consultado el 14 de enero de 2008 .
- ↑ "Diferencias entre Atari y Pokey" . 16 de noviembre de 2016.
- ↑ "Reemplazo de chips para Atari Pokey y posible solución" . 11 de enero de 2020.
Enlaces externos
- ASMA — Archivo de música SAP de Atari. Una colección de reproductores de música chip POKEY (SAP) y música SAP de varios juegos de Atari de 8 bits.
- Hoja de datos del chip POKEY escaneada a PDF .
- POKEY está fabricado con chips lógicos de pequeña escala.
- Vídeo de un Atari de 8 bits (usando POKEY) emulando el chip SID de Commodore.
- Computadoras Atari de 8 bits
- Introducciones relacionadas con la informática en 1979
- chips de sonido
- circuitos integrados de entrada/salida
- circuitos integrados