# RC2014 Cards

# RC2014 Cards Resources

- [https://hackaday.io/project/159057-game-boards-for-rc2014](https://hackaday.io/project/159057-game-boards-for-rc2014)
    - https://www.youtube.com/watch?v=1K\_cc8wFURc
- [TMS9918A](https://en.wikipedia.org/wiki/TMS9918) based video card
- [SN76489](https://en.wikipedia.org/wiki/Texas_Instruments_SN76489) based sound card
- [https://www.tindie.com/stores/mfkamprath/](https://www.tindie.com/stores/mfkamprath/)
- [ESP8266 Wifi Module For RC2014](https://www.tindie.com/products/semachthemonkey/esp8266-wifi-module-for-rc2014/)
- [ DS1302 Real Time Clock Module for RC2014](https://www.tindie.com/products/semachthemonkey/ds1302-real-time-clock-module-for-rc2014/)

# Quazar OLED interface

 [![quazar_oled.jpg](https://wiki.hexadust.net/uploads/images/gallery/2024-11/scaled-1680-/sskD0kfwZ5sEBVkC-quazar-oled.jpg)](https://wiki.hexadust.net/uploads/images/gallery/2024-11/sskD0kfwZ5sEBVkC-quazar-oled.jpg)

Official site: [https://2014.samcoupe.com/#graphicoled](https://2014.samcoupe.com/#graphicoled)

Based on SSD1305 OLED display (128x32 version?): [SSD1305.pdf](https://wiki.hexadust.net/attachments/40)

Uses `0x50` I/O port by default (fully configurable). I/O decoder uses [74HCT02](https://wiki.hexadust.net/books/electronics/page/chips#bkmrk-sn74hct02) NOR gates and [74GCT688](https://wiki.hexadust.net/books/electronics/page/chips#bkmrk-cd74hct688) 8-bit comparator.

The SSD1305 chip is placed behind two [74HCT573](https://wiki.hexadust.net/books/electronics/page/chips#bkmrk-snx4hct573 "74HCT573") 8-bit latches so it can be timed slower than Z80 bus:

- One latch takes 8 bit data bus and forwards to the OLED chip.
- The other latch takes 3 control bits from higher address buss byte as output from B register.
- Latches take input on I/O bus write when base address matches. 
    - Compactor is enabled when RW and IORQ are active (low).
    - If address matches the I/O address select the latches will copy and store data from data bus and first 3-bits from high address byte.
    - The latched data is presented to OLED until the next I/O write to the card occurs.

## Software

I have implemented a program to display images using instructions form provided manual:

- [rc2014-oled](https://gitea.hexadust.net/hxd/rc2014-oled) - `oled` program for CP/M and PNG image converter.

# 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)