The USPTO granted U.S. Patent 4,314,236 to Atari on February 2, 1982 for an "Apparatus for producing a plurality of audio sound effects". This referred to POKEY's sound generation abilities. The inventors listed were Steven T. Mayer and Ronald E. Milner.
No longer manufactured, POKEY is emulated in software by classic arcade emulators (e.g. MAME) and Atari 8-bit emulators.
It is now possible to emulate the POKEY's sound capabilities in software. This can be done with the SAP player
Each channel has 8-bit frequency divider and 8-bit register to select noise and volume.
AUDIOF1 to AUDIOF4 – frequency register (AUDio Frequency)
AUDC1 do AUDC4 – volume and noise register (AUDio Control)
AUDCTL – general register, which controls generators (AUDio ConTroL)
000 = 5- and 17-bit register
001 = 5-bit register
010 = 5- and 4-bit register
011 = 5-bit register - doubled, non-used
100 = 17-bit register
101 = without shift register - pure tones
110 = 4-bit register
111 = without shift register - doubled, non-used
Generating random noises is served by reading 8 bits from top of 17-bit shift register. That registers are driven by frequency 1,79 MHz for NTSC or 1,77 MHz for PAL. Its outputs can by probed independently by four audio channels in channel's divider's rate.
All frequency dividers (AUDIOF) can be at the same time driven by 64 kHz or 15 kHz rate.
Frequency dividers 1 and 4 can be alternately driven by CPU clock (1,79 MHz NTSC, 1,77 MHz PAL). Frequency dividers 2 and 4 can be alternately driven by output of dividers 1 and 3. In this way, Pokey makes possible connecting of 8-bit channels to create sound with 16-bit accuracy.
Possible channel configurations: - four 8-bit channels - two 8-bit channels and one 16-bit channel - two 16-bit channels
Each operation of input output caues value change of shift registers with controls generator, so when we use Pokey to generate sound, after each operation its reinitialisation is needed.
POKEY is a sort of UART. Usually one of the doubled audio channels is used as baudrate generator. The standard baudrate is 19,2 kbit/s, the maximum possible baudrate is 127 kbit/s. A byte put into the SEROUT register is automatically sent over the serial bus. The data frame contains 10 bits: 1 start bit, 8 data bits, 1 stop bit. The voltage levels are 0V (logical 0) and +4V (logical 1). It is possible to connect the Atari serial port with an RS-232 port by means of a simple voltage converter.
Eight ports to measurement increase of input. Each input has 8-bit timer, counting time when each TV line is being displayed. Each input has drop transistor, which can be set on or off from software.
| Register | Write | Read | ||
|---|---|---|---|---|
| Name | Description | Name | Description | |
| $D200 | AUDF1 | channel 1 frequency | POT0 | potentiometer 0 |
| $D201 | AUDC1 | channel 1 generator | POT1 | potentiometer 1 |
| $D202 | AUDF2 | channel 2 frequency | POT2 | potentiometer 2 |
| $D203 | AUDC2 | channel 2 generator | POT3 | potentiometer 3 |
| $D204 | AUDF3 | channel 3 frequency | POT4 | potentiometer 4 |
| $D205 | AUDC3 | channel 3 generator | POT5 | potentiometer 5 |
| $D206 | AUDF4 | channel 4 frequency | POT6 | potentiometer 6 |
| $D207 | AUDC4 | channel 4 generator | POT7 | potentiometer 7 |
| $D208 | AUDCTL | control over audio channels | POTSTAT | read of all 8 potentiometers port lines |
| $D209 | STIMER | timer start | KBCODE | last pressed key code |
| $D20A | SKRES | serial port status reset | RANDOM | random number generator value |
| $D20B | POTGO | start port scanning sequence | ||
| $D20C | ||||
| $D20D | SEROUT | serial port output register | SERIN | serial port input register |
| $D20E | IRQEN | IRQ interrupts activation | IRQSTAT | IRQ interrupts status |
| $D20F | SKCTL | control over serial port | SKSTAT | serial port status |