The Pot Keyboard Integrated Circuit (POKEY)[1] is a digital I/O chip found in the Atari 8-bit family of home computers and many arcade games in the 1980s. It was commonly used to sample (ADC) potentiometers (such as game paddles) and scan matrices of switches (such as a computer keyboard). POKEY is also well known for its sound effect and music generation capabilities, producing a distinctive square wave sound popular among chip tune aficionados. The LSI chip has 40 pins and is identified as C012294. POKEY was designed by Atari employee Doug Neubauer,[2] who also programmed the original Star Raiders.
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".[3] 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.
|
Contents
|
The design of the POKEY made it possible for games to have polyphonic music and sound effects of up to four channels. POKEY's sound is distinctive: when the four channels are used independently, there is noticeable detuning of parts of the 12-tone equal temperament scale, due to lack of pitch accuracy. Channels may be paired for higher accuracy; in addition, multiple forms of distortion are available, allowing a thicker sound. The distortion is primarily used in music for bass parts.
One of the sound-engines developed for the Atari 8-bit family was called the AMP engine (Advanced Music Processor). This was used by the musician Gary Gilbertson.
It is now possible to emulate the POKEY's sound capabilities in software. This can be done with the SAP player [1].
Pokey contains four audio channel, with separate frequency, noise and voice level control.
Each channel has 8-bit frequency divider and 8-bit register to select noise and volume.
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.
"1" means "on", if not described:
All frequency dividers (AUDIOF) can be at the same time driven by 64 kHz or 15 kHz rate.
Frequency dividers 1 and 3 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:
Each input/output operation causes the CPU's internal shift registers to change value, so when programming for POKEY, it is necessary to re-initialise some values after each operation is carried out.
Contains:
POKEY is a sort of UART. Usually one of the doubled audio channels is used as baud rate generator. The standard baud rate is 19.2 kbit/s, the maximum possible baud rate 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 0 V (logical 0) and +4 V (logical 1). It is possible to connect the Atari serial port with an RS-232 port by means of a simple voltage converter.
Interrupts can be set on or off from software by register IRQEN. IRQSTAT register contains interrupts status.
Six key register of actually pushed keys (K0 K5), which contains values from 00 to 3F. Contains 2 control values. One of them acts as decoder of all 6 values. Second control values is used to decode special key values — CTRL, SHIFT and BREAK.
Eight ports to measurement increase of input. Each input has 8-bit timer, counting time when each TV line is being displayed. This had the added advantage of allowing the value read out to be fed directly into screen coordinates of objects being driven by the paddles. Each input has drop transistor, which can be set on or off from software. The timers can also be used to support a light pen, by connecting a photodiode to the drop transistor, which captures the timer when the electron beam in the television passes by the pen. The vertical position of the pen had to be read separately.
| 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 |
This entry is from Wikipedia, the leading user-contributed encyclopedia. It may not have been reviewed by professional editors (see full disclaimer)