Definitions
POKEY [poh-kee]

POKEY

[poh-kee]
POKEY is a digital I/O chip found in the Atari 8-bit family of home computers and many arcade games in the 1980s. Its name comes from POtentiometer and KEYboard, as 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, 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". 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.

Features

  • Audio
  • Keyboard scan (up to 64 keys)
  • Potentiometer ports (8 independent ports, each with 8-bit resolution)
  • Timers (audio channels 1, 2, and 4 can be configured to cause timer interrupts when they cross zero)
  • Random number generator (8 or 9 bits of a 17-bit polynomial counter can be read)
  • Serial I/O port
  • IRQ interrupts

POKEY music

The design of the POKEY made it possible for games to have polyphonic music and sound effects of up to four channels. 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

Generating sound with POKEY

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. AUDIOF1 to AUDIOF4 – frequency register (AUDio Frequency)
AUDC1 do AUDC4 – volume and noise register (AUDio Control)
AUDCTL – general register, which controls generators (AUDio ConTroL)

AUDIOC1-4 registers description

Bit 0-3 - Control over volume level, from 0 to F.
4 - Frequency divider control "1" on, "0" off. When frequency dividier is set to off, constant sounds with volume wrote in bits 0-3 are being generated.
5-7 – Shift register responsible for noises - distortion:

    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.

AUDIOCTL register description

„1” means "on", if not descripted:
Bit 0 – (15 kHz), choice of frequency divider rate „0” - 64 kHz, „1” - 15 kHz 1
Bit 1 – (FI2+4), high-pass filter for channel 2 rated by frequency of channel 4,
Bit 2 – (FI1+3), high-pass filter for channel 1 rated by frequency of channel 3,
Bit 3 – (CH4+3), connection of dividers 4+3 to obtain 16-bit accuracy,
Bit 4 – (CH2+1), connection of dividers 2+1 to obtain 16-bit accuracy,
Bit 5 – (1,79CH3), set channel 3 frequency „0” - 1,77 MHz PAL, „1” - 1,79 MHz NTSC
Bit 6 – (1,79CH1), set channel 1 frequency „0” - 1,77 MHz PAL, „1” - 1,79 MHz NTSC
Bit 7 – (POLY9), switch shift register „0” - 17-bit, „1” – 9bit

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

Additional information

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.

Serial input output port

Contains:
- serial input line
- serial output line
- serial clock output line
- two-way serial clock data line
- registers SKRES, SEROUT, SERIN, SKCTL, SKSTAT

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 IRQ interrupts

BREAK - Break (BREAK key interrupt)
K - Keyboard (keyboard interrupt)
SIR - if Serial Input Ready (read interrupt from serial rail)
ODN - if Output Data Needed (write interrupt from serial rail)
XD - if eXmitend Data (serial transmission end interrupt)
T1 - Timer 1, timer 1 interrupt
T2 - Timer 2, timer 2 interrupt
T4 - Timer 4, timer 4 interrupt
Interrupts can be set on or off from software by register IRQEN.
IRQSTAT register contains interrupts status.

Keyboard

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.

Potentiometers

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.

Additionally pokey offers

  • Three timers, which uses audio channel. When timer is being used, audio channels are reset.
  • Random number generator.

POKEY register table

16 pokey registers - $D200–$D20F
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

See also

References

External links

Search another word or see pokeyon Dictionary | Thesaurus |Spanish
  • Please Login or Sign Up to use the Recent Searches feature