# Quazar SID Interface

## SID Programming

- [https://www.c64-wiki.com/wiki/SID](https://www.c64-wiki.com/wiki/SID)
- [MOS6581\_SID\_data\_sheet.pdf](https://wiki.hexadust.net/attachments/98)

[![1000013963.png](https://wiki.hexadust.net/uploads/images/gallery/2025-10/scaled-1680-/WKRcb1sNtAWNH5vf-1000013963.png)](https://wiki.hexadust.net/uploads/images/gallery/2025-10/WKRcb1sNtAWNH5vf-1000013963.png)

## <span class="mw-headline" id="bkmrk-memory-addresses-of--1">Memory Addresses of the SID</span>

<table border="1" class="wikitable" id="bkmrk-reg-function-0-frequ" style="width: 100%; border-collapse: collapse; border-width: 1px;"><tbody><tr><td style="width: 6.55256%; border-width: 1px;">**Reg**</td><td colspan="8" style="width: 93.4038%; border-width: 1px;">**Function**</td></tr><tr><td style="width: 6.55256%; border-width: 1px;">0</td><td colspan="8" style="width: 93.4038%; border-width: 1px;">frequency voice 1 low byte</td></tr><tr><td style="width: 6.55256%; border-width: 1px;">1</td><td colspan="8" style="width: 93.4038%; border-width: 1px;">frequency voice 1 high byte</td></tr><tr><td style="width: 6.55256%; border-width: 1px;">2</td><td colspan="8" style="width: 93.4038%; border-width: 1px;">pulse wave duty cycle voice 1 low byte</td></tr><tr><th style="width: 6.55256%; border-width: 1px;"> </th><th colspan="4" style="width: 46.7019%; border-width: 1px;">7..4</th><th colspan="4" style="width: 46.7019%; border-width: 1px;">3..0</th></tr><tr><td style="width: 6.55256%; border-width: 1px;">3</td><td colspan="4" style="width: 46.7019%; border-width: 1px;">—</td><td colspan="4" style="width: 46.7019%; border-width: 1px;">pulse wave duty cycle voice 1 high byte</td></tr><tr><td style="width: 6.55256%; border-width: 1px;">4</td><td colspan="8" style="width: 93.4038%; border-width: 1px;">control register voice 1</td></tr><tr><th style="width: 6.55256%; border-width: 1px;"> </th><th style="width: 11.6755%; border-width: 1px;"><a>7</a></th><th style="width: 11.6755%; border-width: 1px;"><a>6</a></th><th style="width: 11.6755%; border-width: 1px;"><a>5</a></th><th style="width: 11.6755%; border-width: 1px;"><a>4</a></th><th style="width: 11.6755%; border-width: 1px;"><a>3</a></th><th style="width: 11.6755%; border-width: 1px;"><a>2</a></th><th style="width: 11.6755%; border-width: 1px;"><a>1</a></th><th style="width: 11.6755%; border-width: 1px;"><a>0 </a></th></tr><tr><td style="width: 6.55256%; border-width: 1px;"> </td><td style="width: 11.6755%; border-width: 1px;">noise</td><td style="width: 11.6755%; border-width: 1px;">pulse</td><td style="width: 11.6755%; border-width: 1px;">sawtooth</td><td style="width: 11.6755%; border-width: 1px;">triangle</td><td style="width: 11.6755%; border-width: 1px;">test</td><td style="width: 11.6755%; border-width: 1px;">ring modulation with voice 3</td><td style="width: 11.6755%; border-width: 1px;">synchronize with voice 3</td><td style="width: 11.6755%; border-width: 1px;">gate</td></tr><tr><th style="width: 6.55256%; border-width: 1px;"> </th><th colspan="4" style="width: 46.7019%; border-width: 1px;">7..4</th><th colspan="4" style="width: 46.7019%; border-width: 1px;">3..0</th></tr><tr><td style="width: 6.55256%; border-width: 1px;">5</td><td colspan="4" style="width: 46.7019%; border-width: 1px;">attack duration</td><td colspan="4" style="width: 46.7019%; border-width: 1px;">decay duration voice 1</td></tr><tr><td style="width: 6.55256%; border-width: 1px;">6</td><td colspan="4" style="width: 46.7019%; border-width: 1px;">sustain level</td><td colspan="4" style="width: 46.7019%; border-width: 1px;">release duration</td></tr><tr><td style="width: 6.55256%; border-width: 1px;">7</td><td colspan="8" style="width: 93.4038%; border-width: 1px;">frequency voice 2 low byte</td></tr><tr><td style="width: 6.55256%; border-width: 1px;">8</td><td colspan="8" style="width: 93.4038%; border-width: 1px;">frequency voice 2 high byte</td></tr><tr><td style="width: 6.55256%; border-width: 1px;">9</td><td colspan="8" style="width: 93.4038%; border-width: 1px;">pulse wave duty cycle voice 2 low byte</td></tr><tr><th style="width: 6.55256%; border-width: 1px;"> </th><th colspan="4" style="width: 46.7019%; border-width: 1px;">7..4</th><th colspan="4" style="width: 46.7019%; border-width: 1px;">3..0</th></tr><tr><td style="width: 6.55256%; border-width: 1px;">10</td><td colspan="4" style="width: 46.7019%; border-width: 1px;">—</td><td colspan="4" style="width: 46.7019%; border-width: 1px;">pulse wave duty cycle voice 2 high byte</td></tr><tr><td style="width: 6.55256%; border-width: 1px;">11</td><td colspan="8" style="width: 93.4038%; border-width: 1px;">control register voice 2</td></tr><tr><th style="width: 6.55256%; border-width: 1px;"> </th><th style="width: 11.6755%; border-width: 1px;"><a>7</a></th><th style="width: 11.6755%; border-width: 1px;"><a>6</a></th><th style="width: 11.6755%; border-width: 1px;"><a>5</a></th><th style="width: 11.6755%; border-width: 1px;"><a>4</a></th><th style="width: 11.6755%; border-width: 1px;"><a>3</a></th><th style="width: 11.6755%; border-width: 1px;"><a>2</a></th><th style="width: 11.6755%; border-width: 1px;"><a>1</a></th><th style="width: 11.6755%; border-width: 1px;"><a>0 </a></th></tr><tr><td style="width: 6.55256%; border-width: 1px;"> </td><td style="width: 11.6755%; border-width: 1px;">noise</td><td style="width: 11.6755%; border-width: 1px;">pulse</td><td style="width: 11.6755%; border-width: 1px;">sawtooth</td><td style="width: 11.6755%; border-width: 1px;">triangle</td><td style="width: 11.6755%; border-width: 1px;">test</td><td style="width: 11.6755%; border-width: 1px;">ring modulation with voice 1</td><td style="width: 11.6755%; border-width: 1px;">synchronize with voice 1</td><td style="width: 11.6755%; border-width: 1px;">gate</td></tr><tr><th style="width: 6.55256%; border-width: 1px;"> </th><th colspan="4" style="width: 46.7019%; border-width: 1px;">7..4</th><th colspan="4" style="width: 46.7019%; border-width: 1px;">3..0</th></tr><tr><td style="width: 6.55256%; border-width: 1px;">12</td><td colspan="4" style="width: 46.7019%; border-width: 1px;">attack duration</td><td colspan="4" style="width: 46.7019%; border-width: 1px;">decay duration voice 2</td></tr><tr><td style="width: 6.55256%; border-width: 1px;">13</td><td colspan="4" style="width: 46.7019%; border-width: 1px;">sustain level</td><td colspan="4" style="width: 46.7019%; border-width: 1px;">release duration voice 2</td></tr><tr><td style="width: 6.55256%; border-width: 1px;">14</td><td colspan="8" style="width: 93.4038%; border-width: 1px;">frequency voice 3 low byte</td></tr><tr><td style="width: 6.55256%; border-width: 1px;">15</td><td colspan="8" style="width: 93.4038%; border-width: 1px;">frequency voice 3 high byte</td></tr><tr><td style="width: 6.55256%; border-width: 1px;">16</td><td colspan="8" style="width: 93.4038%; border-width: 1px;">pulse wave duty cycle voice 3 low byte</td></tr><tr><th style="width: 6.55256%; border-width: 1px;"> </th><th colspan="4" style="width: 46.7019%; border-width: 1px;">7..4</th><th colspan="4" style="width: 46.7019%; border-width: 1px;">3..0</th></tr><tr><td style="width: 6.55256%; border-width: 1px;">17</td><td colspan="4" style="width: 46.7019%; border-width: 1px;">—</td><td colspan="4" style="width: 46.7019%; border-width: 1px;">pulse wave duty cycle voice 3 high byte</td></tr><tr><td style="width: 6.55256%; border-width: 1px;">18</td><td colspan="8" style="width: 93.4038%; border-width: 1px;">control register voice 3</td></tr><tr><th style="width: 6.55256%; border-width: 1px;"> </th><th style="width: 11.6755%; border-width: 1px;"><a>7</a></th><th style="width: 11.6755%; border-width: 1px;"><a>6</a></th><th style="width: 11.6755%; border-width: 1px;"><a>5</a></th><th style="width: 11.6755%; border-width: 1px;"><a>4</a></th><th style="width: 11.6755%; border-width: 1px;"><a>3</a></th><th style="width: 11.6755%; border-width: 1px;"><a>2</a></th><th style="width: 11.6755%; border-width: 1px;"><a>1</a></th><th style="width: 11.6755%; border-width: 1px;"><a>0 </a></th></tr><tr><td style="width: 6.55256%; border-width: 1px;"> </td><td style="width: 11.6755%; border-width: 1px;">noise</td><td style="width: 11.6755%; border-width: 1px;">pulse</td><td style="width: 11.6755%; border-width: 1px;">sawtooth</td><td style="width: 11.6755%; border-width: 1px;">triangle</td><td style="width: 11.6755%; border-width: 1px;">test</td><td style="width: 11.6755%; border-width: 1px;">ring modulation with voice 2</td><td style="width: 11.6755%; border-width: 1px;">synchronize with voice 2</td><td style="width: 11.6755%; border-width: 1px;">gate</td></tr><tr><th style="width: 6.55256%; border-width: 1px;"> </th><th colspan="4" style="width: 46.7019%; border-width: 1px;">7..4</th><th colspan="4" style="width: 46.7019%; border-width: 1px;">3..0</th></tr><tr><td style="width: 6.55256%; border-width: 1px;">19</td><td colspan="4" style="width: 46.7019%; border-width: 1px;">attack duration</td><td colspan="4" style="width: 46.7019%; border-width: 1px;">decay duration voice 3</td></tr><tr><td style="width: 6.55256%; border-width: 1px;">20</td><td colspan="4" style="width: 46.7019%; border-width: 1px;">sustain level</td><td colspan="4" style="width: 46.7019%; border-width: 1px;">release duration voice 3</td></tr><tr><td style="width: 6.55256%; border-width: 1px;">21</td><td colspan="5" style="width: 58.3773%; border-width: 1px;">—</td><td colspan="3" style="width: 35.0264%; border-width: 1px;">filter cutoff frequency low byte</td></tr><tr><td style="width: 6.55256%; border-width: 1px;">22</td><td colspan="8" style="width: 93.4038%; border-width: 1px;">filter cutoff frequency high byte</td></tr><tr><td style="width: 6.55256%; border-width: 1px;">23</td><td colspan="8" style="width: 93.4038%; border-width: 1px;">filter resonance and routing</td></tr><tr><th style="width: 6.55256%; border-width: 1px;"> </th><th colspan="4" style="width: 46.7019%; border-width: 1px;">7..4</th><th style="width: 11.6755%; border-width: 1px;"><a>3</a></th><th style="width: 11.6755%; border-width: 1px;"><a>2</a></th><th style="width: 11.6755%; border-width: 1px;"><a>1</a></th><th style="width: 11.6755%; border-width: 1px;"><a>0 </a></th></tr><tr><td style="width: 6.55256%; border-width: 1px;"> </td><td colspan="4" style="width: 46.7019%; border-width: 1px;">filter resonance</td><td style="width: 11.6755%; border-width: 1px;">external input</td><td style="width: 11.6755%; border-width: 1px;">voice 3</td><td style="width: 11.6755%; border-width: 1px;">voice 2</td><td style="width: 11.6755%; border-width: 1px;">voice 1</td></tr><tr><td style="width: 6.55256%; border-width: 1px;">24</td><td colspan="8" style="width: 93.4038%; border-width: 1px;">filter mode and main volume control</td></tr><tr><th style="width: 6.55256%; border-width: 1px;"> </th><th style="width: 11.6755%; border-width: 1px;"><a>7</a></th><th style="width: 11.6755%; border-width: 1px;"><a>6</a></th><th style="width: 11.6755%; border-width: 1px;"><a>5</a></th><th style="width: 11.6755%; border-width: 1px;"><a>4</a></th><th colspan="4" style="width: 46.7019%; border-width: 1px;">3..0</th></tr><tr><td style="width: 6.55256%; border-width: 1px;"> </td><td style="width: 11.6755%; border-width: 1px;">mute voice 3</td><td style="width: 11.6755%; border-width: 1px;">high pass</td><td style="width: 11.6755%; border-width: 1px;">band pass</td><td style="width: 11.6755%; border-width: 1px;">low pass</td><td colspan="4" style="width: 46.7019%; border-width: 1px;">main volume</td></tr><tr><td style="width: 6.55256%; border-width: 1px;">25</td><td colspan="8" style="width: 93.4038%; border-width: 1px;">paddle x value (read only) - not available</td></tr><tr><td style="width: 6.55256%; border-width: 1px;">26</td><td colspan="8" style="width: 93.4038%; border-width: 1px;">paddle y value (read only) - not available</td></tr><tr><td style="width: 6.55256%; border-width: 1px;">27</td><td colspan="8" style="width: 93.4038%; border-width: 1px;">oscillator voice 3 (read only) - not available</td></tr><tr><td style="width: 6.55256%; border-width: 1px;">28</td><td colspan="8" style="width: 93.4038%; border-width: 1px;">envelope voice 3 (read only) - not available</td></tr></tbody></table>

### Envelopes

[![sidadsr.gif](https://wiki.hexadust.net/uploads/images/gallery/2025-11/KBzCCgvq6NhBnvwF-sidadsr.gif)](https://wiki.hexadust.net/uploads/images/gallery/2025-11/KBzCCgvq6NhBnvwF-sidadsr.gif)

<table border="1" id="bkmrk-value-attack-rate-re" style="width: 35.4762%; height: 546.599px; border-collapse: collapse; border-width: 1px; border-style: solid;"><tbody class="row-striping"><tr class="row-1" style="height: 46.2333px;"><td class="column-2 dt-orderable-none" data-dt-column="1" style="width: 33.3585%; border-width: 1px; height: 46.2333px;">**Value**</td><td class="column-4 dt-orderable-none" data-dt-column="3" style="width: 33.3585%; border-width: 1px; height: 46.2333px;"><div class="dt-column-header">**<span class="dt-column-title">Attack Rate</span>**</div></td><td style="width: 33.3585%; border-width: 1px; height: 46.2333px;">**<span class="dt-column-title">Decay/Release Rate</span>**</td></tr><tr class="row-2" style="height: 29.4333px;"><td class="column-1" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">Decimal</td><td class="column-3" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">(Time/Cycle)</td><td class="column-4" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">(Time/Cycle)</td></tr><tr class="row-3" style="height: 29.4333px;"><td class="column-1" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">0</td><td class="column-3" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">2 mS</td><td class="column-4" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">6 mS</td></tr><tr class="row-4" style="height: 29.4333px;"><td class="column-1" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">1</td><td class="column-3" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">8 mS</td><td class="column-4" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">24 mS</td></tr><tr class="row-5" style="height: 29.4333px;"><td class="column-1" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">2</td><td class="column-3" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">16 mS</td><td class="column-4" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">48 mS</td></tr><tr class="row-6" style="height: 29.4333px;"><td class="column-1" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">3</td><td class="column-3" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">24 mS</td><td class="column-4" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">72 mS</td></tr><tr class="row-7" style="height: 29.4333px;"><td class="column-1" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">4</td><td class="column-3" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">38 mS</td><td class="column-4" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">114 mS</td></tr><tr class="row-8" style="height: 29.4333px;"><td class="column-1" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">5</td><td class="column-3" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">56 mS</td><td class="column-4" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">168 mS</td></tr><tr class="row-9" style="height: 29.4333px;"><td class="column-1" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">6</td><td class="column-3" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">68 mS</td><td class="column-4" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">204 mS</td></tr><tr class="row-10" style="height: 29.4333px;"><td class="column-1" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">7</td><td class="column-3" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">80 mS</td><td class="column-4" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">240 mS</td></tr><tr class="row-11" style="height: 29.4333px;"><td class="column-1" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">8</td><td class="column-3" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">100 mS</td><td class="column-4" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">300 mS</td></tr><tr class="row-12" style="height: 29.4333px;"><td class="column-1" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">9</td><td class="column-3" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">250 mS</td><td class="column-4" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">750 mS</td></tr><tr class="row-13" style="height: 29.4333px;"><td class="column-1" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">10</td><td class="column-3" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">500 mS</td><td class="column-4" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">1.5 S</td></tr><tr class="row-14" style="height: 29.4333px;"><td class="column-1" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">11</td><td class="column-3" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">800 mS</td><td class="column-4" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">2.4 S</td></tr><tr class="row-15" style="height: 29.4333px;"><td class="column-1" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">12</td><td class="column-3" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">1 S</td><td class="column-4" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">3 S</td></tr><tr class="row-16" style="height: 29.4333px;"><td class="column-1" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">13</td><td class="column-3" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">3 S</td><td class="column-4" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">9 S</td></tr><tr class="row-17" style="height: 29.4333px;"><td class="column-1" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">14</td><td class="column-3" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">5 S</td><td class="column-4" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">15 S</td></tr><tr class="row-18" style="height: 29.4333px;"><td class="column-1" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">15</td><td class="column-3" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">8 S</td><td class="column-4" style="width: 33.3585%; border-width: 1px; height: 29.4333px;">24 S</td></tr></tbody></table>

### Frequency

```
\ Frequency table:
: SID:NOTE:C4  4389 ;
: SID:NOTE:C4# 4650 ;
: SID:NOTE:D4  4927 ;
: SID:NOTE:D4# 5220 ;
: SID:NOTE:E4  5530 ;
: SID:NOTE:F4  5859 ;
: SID:NOTE:F4# 6207 ;
: SID:NOTE:G4  6577 ;
: SID:NOTE:G4# 6968 ;
: SID:NOTE:A4  7382 ;
: SID:NOTE:A4# 7821 ;
: SID:NOTE:B4  8286 ;

\ Octave shifts
: SID:OCT:UP 2* ;
: SID:OCT:DOWN 2/ ;
```

## Using with RC2014 Mini II Picasso

[![rc2014-sid-picasso.jpg](https://wiki.hexadust.net/uploads/images/gallery/2025-10/scaled-1680-/CtuuwXAQ5rxqZeN2-rc2014-sid-picasso.jpg)](https://wiki.hexadust.net/uploads/images/gallery/2025-10/CtuuwXAQ5rxqZeN2-rc2014-sid-picasso.jpg)

### Limitations

- Interrupt timer won't work since first half of memory is ROM and can't install interrupt handler. This will work with CP/M cards where all memory space is backed by RAM.
- It is not possible to read data from SID chip. Paddled and voice 3 data and ADSR registers cannot be read.

### Basic

Set ROM address to `0 100` (just *Bank 2* set) to boot into *Microsoft BASIC (Phil Green)*.

Insert SID interface card: marked `A15` pin is pin 1.

Use the following test BASIC program (as provided in the instructions):

```vbscript
10 DATA 205,7,10,123,66,14,84,237,121
20 DATA 0,0,0,203,248,237,121,195,125,17
30 FOR A=-1024 TO -1006
40 READ D
50 POKE A,D
60 NEXT A
70 POKE -32695,0
80 POKE -32694,252
90 LET A=USR(1024)
100 LET A=USR(6159)
101 LET A=USR(1280)
102 LET A=USR(1776)
103 LET A=USR(1041)
110 FOR D=256 TO 511
120 LET A=USR(D)
130 NEXT D
140 GOTO 110
```

Type `RUN` to start it. You should hear "siren" audio effect.

### CamelForth

Set ROM address to `0 001` (just *Bank 8* set) to boot into *CamelForth (Justin Skists)*.

Paste following Forth program.

```
\ PS2!     c c p-addr --   Data byte (A), high address byte (B), port address (C) - OUT to port with A and B registers set
: PC2! SWAP >< OR PC! ; 
\ SID!     c c --          Data value, register (0-31); bits 5,6 are for interrupt settings; bit 7 (/CS) is handled
: SID!
  2DUP 128 OR 84 PC2!
  2DUP 127 AND 84 PC2!
  128 OR 84 PC2! ;

: SIDRST 0 24 SID! 0 4 SID! ;
: SIDTEST 15 24 SID! 10 0 DO 255 0 DO I 1 SID! LOOP LOOP 0 24 SID! ;

SIDRST 
15 24 SID! 
0 5 SID! 
240 6 SID! 
17 4 SID! 
SIDTEST
```

Decimals used:

- 84 = 0x52 - I/O port number
- 24 = 0x18 register 0x18 (24), no interrupt
- 128 - high bit set
- 127 - all but high bit set

See project page for CamelForth SID library: [sid.4th](https://gitea.hexadust.net/hxd/rc2014-sid/src/branch/main/sid.4th)