This is an old revision of the document!
Table of Contents
MOS6581 Datasheet
The “SID” MOS6581 is the sound synthesis component that has been embedded into the Commodore former computers.
Foreword : This page is intended to recall the main characteristics of the chip. It recalls the Data gathered by the WFF team, combined with personnal error findings/experience.
Introduction
The 6581 Sound Interface Device (SID) is a single-chip, 3 voice electronic music synthesizer/sound effects generator compatible with the 65XX and similar microprocessor families. SID provides wide-range, high-resolution control of pitch (frequency), tone color (harmonic content) and dynamics (volume). Specialized control circuitry minimizes software overhead, facilitating use in arcade/home video games and low-cost musical instruments.
Features
- 3 Tone oscillators 3 Tone Oscillators, range 0-4 kHz
- 4 Waveforms per Oscillator
- Triangle
- Sawtooth
- Variable Pulse
- Noise
- 3 Amplitude Modulators, range 48 dB
- 3 Envelope Generators
- Exponential response
- Attack Rate: 2mS-8S
- Decay Rate: 6mS-24S
- Sustain level: 0-peak volume
- Release Rate: 6mS-24S
- Oscillator Synchronization
- Ring Modulation
- Programmable Filter
- Cutoff range: 30 Hz-12 kHz
- 12 dB/octave Rolloff
- Low pass, Band pass, High pass, Notch outputs
- Variable Resonance
- Master Volume Control
- 2 A/D POT Interfaces
- Random Number/Modulation Generator
- External Audio Input
SID internal Diagram
SID Control registers
There are 29 eight-bit registers in SID which control the generation of sound. These registers are either WRITE-only or READ-only and are listed below:
Zone | Register | A4 | A3 | A2 | A1 | A0 | Hex Address | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | Name | Mode |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Voice 1 | 0 | 0 | 0 | 0 | 0 | 0 | 00 | F7 | F6 | F5 | F1 | F3 | F2 | F1 | F0 | Freq1 Low | W |
1 | 0 | 0 | 0 | 0 | 1 | 01 | F15 | F14 | F13 | F12 | F11 | F10 | F9 | F8 | Freq1 High | W | |
2 | 0 | 0 | 0 | 1 | 0 | 02 | PW7 | PW6 | PW5 | PW4 | PW3 | PW2 | PW1 | PW0 | PW1 Low | W | |
3 | 0 | 0 | 0 | 1 | 1 | 03 | - | - | - | - | PW11 | PW10 | PW9 | PW8 | PW1 High | W | |
4 | 0 | 0 | 1 | 0 | 0 | 04 | RAND | TRI | SAW | SQR | TEST | RING | SYNC | GATE | Control 1 | W | |
5 | 0 | 0 | 1 | 0 | 1 | 05 | ATK3 | ATK2 | ATK1 | ATK0 | DEC3 | DEC2 | DEC1 | DEC0 | Attack1 / Decay1 | W | |
6 | 0 | 0 | 1 | 1 | 0 | 06 | SUS3 | SUS2 | SUS1 | SUS0 | REL3 | REL2 | REL1 | REL0 | Sustain1 / Release1 | W | |
Voice 2 | 7 | 0 | 0 | 1 | 1 | 1 | 07 | F7 | F6 | F5 | F4 | F3 | F2 | F1 | F0 | Freq2 Low | W |
8 | 0 | 1 | 0 | 0 | 0 | 08 | F15 | F14 | F13 | F12 | F11 | F10 | F9 | F8 | Freq2 High | W | |
9 | 0 | 1 | 0 | 0 | 1 | 09 | PW7 | PW6 | PW5 | PW4 | PW3 | PW2 | PW1 | PW0 | PW2 Low | W | |
10 | 0 | 1 | 0 | 1 | 0 | 0A | - | - | - | - | PW11 | PW10 | PW9 | PW8 | PW2 High | W | |
11 | 0 | 1 | 0 | 1 | 1 | 0B | RAND | TRI | SAW | SQR | TEST | RING | SYNC | GATE | Control 2 | W | |
12 | 0 | 1 | 1 | 0 | 0 | 0C | ATK3 | ATK2 | ATK1 | ATK0 | DEC3 | DEC2 | DEC1 | DEC0 | Attack2 / Decay2 | W | |
13 | 0 | 1 | 1 | 0 | 1 | 0D | SUS3 | SUS2 | SUS1 | SUS0 | REL3 | REL2 | REL1 | REL0 | Sustain2 / Release2 | W | |
Voice 3 | 14 | 0 | 1 | 1 | 1 | 0 | 0E | F7 | F6 | F5 | F4 | F3 | F2 | F1 | F0 | Freq3 Low | W |
15 | 0 | 1 | 1 | 1 | 1 | 0F | F15 | F14 | F13 | F12 | F11 | F10 | F9 | F8 | Freq3 High | W | |
16 | 1 | 0 | 0 | 0 | 0 | 10 | PW7 | PW6 | PW5 | PW4 | PW3 | PW2 | PW1 | PW0 | PW3 Low | W | |
17 | 1 | 0 | 0 | 0 | 1 | 11 | - | - | - | - | PW11 | PW10 | PW9 | PW8 | PW3 High | W | |
18 | 1 | 0 | 0 | 1 | 0 | 12 | RAND | TRI | SAW | SQR | TEST | RING | SYNC | GATE | Control 3 | W | |
19 | 1 | 0 | 0 | 1 | 1 | 13 | ATK3 | ATK2 | ATK1 | ATK0 | DEC3 | DEC2 | DEC1 | DEC0 | Attack3 / Decay3 | W | |
20 | 1 | 0 | 1 | 0 | 0 | 14 | SUS3 | SUS2 | SUS1 | SUS0 | REL3 | REL2 | REL1 | REL0 | Sustain3 / Release3 | W | |
Filter | 21 | 1 | 0 | 1 | 0 | 1 | 15 | - | - | - | - | - | FC2 | FC1 | FC0 | Filter Cut Freq Low | W |
22 | 1 | 0 | 1 | 1 | 0 | 16 | FC10 | FC9 | F08 | FC7 | FC6 | F05 | FC4 | F03 | Filter Cut Freq High | W | |
23 | 1 | 0 | 1 | 1 | 1 | 17 | RES3 | RES2 | RES1 | RES0 | EXT | FLT3 | FLT2 | FLT1 | Filter Res / Source | W | |
24 | 1 | 1 | 0 | 0 | 0 | 18 | 3OFF | HP | BP | LP | VOL3 | VOL2 | VOL1 | VOL0 | Mode | W | |
Inputs | 25 | 1 | 1 | 0 | 0 | 1 | 19 | PX7 | PX6 | PX5 | PX4 | PX3 | PX2 | PX1 | PXO | POTX | R |
26 | 1 | 1 | 0 | 1 | 0 | 1A | PY7 | PY6 | PY5 | PY4 | PY3 | PY2 | PY1 | PYO | POTY | R | |
27 | 1 | 1 | 0 | 1 | 1 | 1B | O7 | O6 | O5 | O4 | O3 | O2 | O1 | O0 | OSC3 / Random Read | R | |
28 | 1 | 1 | 1 | 0 | 0 | 1C | E7 | E6 | E5 | E4 | E3 | E2 | E1 | E0 | ENV3 | R |
SID Registers Description
Comprehensive description of the MOS6581 registers is given herebelow.
1 - Freq Low & Hi
Zone | Register | A4 | A3 | A2 | A1 | A0 | Hex Address | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | Name | Mode |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Voice X | X | 0 | 0 | 0 | 0 | 0 | 00 | F7 | F6 | F5 | F1 | F3 | F2 | F1 | F0 | FreqX Low | W |
X | 0 | 0 | 0 | 0 | 1 | 01 | F15 | F14 | F13 | F12 | F11 | F10 | F9 | F8 | FreqX High | W |
Together these registers form a 16-bit number which linearly controls the Frequency of Oscillator 1. The frequency is determined by the following equation:
Fout = (Fn * Fclk/16777216) Hz
Where Fn is the 16-bit number in the Frequency registers and Fclk is the system clock applied to the Ø2 input (pin 6). For a standard 1.0 Mhz clock, the frequency is given by:
Fout = (Fn * 0.0596) Hz
A complete table of values for generating 8 octaves of the equally-tempered musical scale with concert A (440 Hz) tuning is provided further. It should be noted that the frequency resolution of SID is sufficient for any tuning scale and allows sweeping from note to note (portamento) with no discernible frequency steps.
Each Voice register can be found at the following address (HEX
):
Voice | Freq Low Address | Freq High Address |
---|---|---|
1 | 02 | 03 |
2 | 09 | 0A |
3 | 10 | 11 |
2 - PW Low & Hi
Zone | Register | A4 | A3 | A2 | A1 | A0 | Hex Address | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | Name | Mode |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Voice X | X | 0 | 0 | 0 | 1 | 0 | 02 | PW7 | PW6 | PW5 | PW4 | PW3 | PW2 | PW1 | PW0 | PWX Low | W |
X | 0 | 0 | 0 | 1 | 1 | 03 | - | - | - | - | PW11 | PW10 | PW9 | PW8 | PWX High | W |
Together these registers form a 12-bit number (bits 4-7 of PW Hi are not used) which linearly controls the Pulse Width (duty cycle) of the Pulse waveform on Oscillator 1. The pulse width is determined by the following equation:
PWout = (PWn/40.95) %
Where PWn is the 12-bit number in the Pulse Width registers.
The pulse width resolution allows the width to be smoothly swept with no discernible stepping. Note that the Pulse waveform on Oscillator 1 must be selected in order for the Pulse Width registers to have any audible effect. A value of 0 or 4095 ($FFF) in the Pulse Width registers will produce a constant DC output, while a value of 2048 ($800) will produce a square wave.
Voice | PW Low Address | PW High Address |
---|---|---|
1 | 00 | 01 |
2 | 07 | 08 |
3 | 0E | 0F |
3 - Control Register
Zone | Register | A4 | A3 | A2 | A1 | A0 | Hex Address | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | Name | Mode |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Voice X | X | 0 | 0 | 1 | 0 | 0 | 04 | RAND | TRI | SAW | SQR | TEST | RING | SYNC | GATE | Control X | W |
This register contains eight control bits which select various options on Oscillator 1.
Each Voice register can be found at the following address (HEX
):
Voice | Control Register Address |
---|---|
1 | 04 |
2 | 0B |
3 | 12 |
Gate (Bit 0)
The GATE bit controls the Envelope Generator for Voice X. When this bit is set to a one, the Envelope Generator is Gated (triggered) and the ATTACK/DECAY/SUSTAIN cycle is initiated. When the bit is reset to a zero, the RELEASE cycle begins. The Envelope Generator controls the amplitude of Oscillator X appearing at the audio output, therefore, the GATE bit must be set (along with suitable envelope parameters) for the selected output of Oscillator X to be audible. A detailed discussion of the Envelope Generator can be found further.
Sync (Bit 1)
The SYNC bit, when set to a one, Synchronizes the fundamental frequency of Oscillator X with the fundamental frequency of Oscillator Y, producing “Hard Sync” effects. Varying the frequency of Oscillator X with respect to Oscillator Y produces a wide range of complex harmonic structures from Voice X at the frequency of Oscillator Y. In order for sync to occur Oscillator Y must be set to some frequency other than zero but preferably lower than the frequency of Oscillator X. No other parameters of Voice Y have any effect on sync.
Control1
register syncsVOICE1
withVOICE3
Control2
register syncsVOICE2
withVOICE1
Control3
register syncsVOICE3
withVOICE2
Ring Mod (Bit 2)
The RING MOD bit, when set to a one, replaces the Triangle waveform output of Oscillator X with a “Ring Modulated” combination of Oscillators X and X. Varying the frequency of Oscillator X with respect to Oscillator X produces a wide range of non-harmonic overtone structures for creating bell or gong sounds and for special effects. In order for ring modulation to be audible, the Triangle waveform of Oscillator X must be selected and Oscillator Y must be set to some frequency other than zero. No other parameters of Voice Y have any effect on ring modulation.
Control1
register modulatesVOICE1
withVOICE3
Control2
register modulatesVOICE2
withVOICE1
Control3
register modulatesVOICE3
withVOICE2
Test (Bit 3)
The TEST bit, when set to a one, resets and locks Oscillator X at zero until the TEST bit is cleared. The Noise waveform output of Oscillator X is also reset and the Pulse waveform output is held at a DC level. Normally this bit is used for testing purposes, however, it can be used to synchronize Oscillator X to external events, allowing the generation of highly complex waveforms under real-time software control.
Triangle Wave (Bit 4)
When set to a one, the Triangle waveform output of Oscillator X is selected. The Triangle waveform is low in harmonics and has a mellow, flute-like quality.
Sawtooth Wave (Bit 5)
When set to a one, the Sawtooth waveform of Oscillator X is selected. The sawtooth waveform is rich in even and odd harmonics and has a bright, brassy quality.
Square Wave (Bit 6)
When set to a one, the Pulse waveform output of Oscillator X is selected. The harmonic content of this waveform can be adjusted by the Pulse Width registers, producing tone Qualities ranging from a bright, hollow square wave to a nasal, reedy pulse. Sweeping the pulse width in real-time produces a dynamic “phasing” effect which adds a sense of motion to the sound. Rapidly jumping between different pulse widths can produce interesting harmonic sequences.
Noise (Bit 7)
When set to a one, the Noise output waveform of Oscillator X is selected. This output is a random signal which changes at the frequency of Oscillator X. The sound quality can be varied from a low rumbling to hissing white noise via the Oscillator X Frequency registers. Noise is useful in creating explosions, gunshots, jet engines, wind, surf and other un-pitched sounds, as well as snare drums and cymbals. Sweeping the Oscillator frequency with Noise selected produces a dramatic rushing effect. One of the output waveforms must be selected for Oscillator X to be audible, however it is NOT necessary to deselect waveforms to silence the output of Voice X. The amplitude of Voice X at the final output is a function of the Envelope Generator only.
NOTE: The oscillator output waveforms are NOT additive. If more than one output waveform is selected simultaneously, the result will be a logical ANDing
of the waveforms. Although this technique can be used to generate additional waveforms beyond the four listed above, it must be used with care. If any other waveform is selected while Noise is on, the Noise output can “lock up”. If this occurs, the Noise output will remain silent until reset by the TEST bit or by bringing /RES (pin 5) low.
4 - Attack / Decay / Sustain / Release
Zone | Register | A4 | A3 | A2 | A1 | A0 | Hex Address | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | Name | Mode |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Voice X | X | 0 | 0 | 1 | 0 | 1 | 0X | ATK3 | ATK2 | ATK1 | ATK0 | DEC3 | DEC2 | DEC1 | DEC0 | AttackX / DecayX | W |
X | 0 | 0 | 1 | 1 | 0 | 0X | SUS3 | SUS2 | SUS1 | SUS0 | REL3 | REL2 | REL1 | REL0 | SustainX / ReleaseX | W |
Bits 4-7 : ATK0-ATK3 of the first register (ATK0-ATK3) select 1 of 16 ATTACK rates for the Voice X Envelope Generator. The ATTACK rate determines how rapidly the output of Voice 1 rises from zero to peak amplitude when the Envelope Generator is Gated. The 16 ATTACK rates are listed in the table below.
Bits 0-3 : DEC0-DEC3 select 1 of 16 DECAY rates for the Envelope Generator. The DECAY cycle follows the ATTACK cycle and the DECAY rate determines how rapidly the output falls from the peak amplitude to the selected SUSTAIN level. The 16 DECAY rates are listed in the table below.
Bits 4-7 : SUS0-SUS3 of the second register select 1 of 16 SUSTAIN levels for the Envelope Generator. The SUSTAIN cycle follows the DECAY cycle and the output of Voice X will remain at the selected SUSTAIN amplitude as long as the Gate bit remains set. The SUSTAIN levels range from zero to peak amplitude in 16 linear steps, with a SUSTAIN value of 0 selecting zero amplitude and a SUSTAIN value of 15 (#F) selecting the peak amplitude.
A SUSTAIN value of 8 would cause Voice 1 to SUSTAIN at an amplitude one-half the peak amplitude reached by the ATTACK cycle.
Bits 0-3 : RLS0-RLS3 select 1 of 16 RELEASE rates for the Envelope Generator. The RELEASE cycle follows the SUSTAIN cycle when the Gate bit is reset to zero. At this time, the output of Voice 1 will fall from the SUSTAIN amplitude to zero amplitude at the selected RELEASE rate. The 16 RELEASE rates are listed in the table below.
Attack Rate | Decay & Release Rate | ||
---|---|---|---|
DEC | HEX | (Time/Cycle) | (Time/Cycle) |
0 | 0 | 2 mS | 6 mS |
1 | 1 | 8 mS | 24 mS |
2 | 2 | 16 mS | 48 mS |
3 | 3 | 24 mS | 72 mS |
4 | 4 | 38 mS | 114 mS |
5 | 5 | 56 mS | 168 mS |
6 | 6 | 68 mS | 204 mS |
7 | 7 | 80 mS | 240 mS |
8 | 8 | 100 mS | 300 mS |
9 | 9 | 250 mS | 750 mS |
10 | A | 500 mS | 1.5 S |
11 | B | 800 mS | 2.4 S |
12 | C | 1 S | 3 S |
13 | D | 3 S | 9 S |
14 | E | 5 S | 15 S |
15 | F | 8 S | 24 S |
Each Voice register can be found at the following address (HEX
):
Voice | ATK / DEC | SUS / REL |
---|---|---|
1 | 05 | 06 |
2 | 0C | 0D |
3 | 13 | 14 |
NOTE: Envelope rates are based on a 1.0 Mhz Ø2 clock. For other Ø2 frequencies, multiply the given rate by 1 Mhz / Ø2. The rates refer to the amount of time per cycle. For example, given an ATTACK value of 2, the ATTACK cycle would take 16 mS to rise from zero to peak amplitude. The DECAY/RELEASE rates refer to the amount of time these cycles would take to fall from peak amplitude to zero.