SID-AVR
This is my little project to interface a SID synthesizer to an AVR microcontroller.
The circuit itself is quite simple: an ATMEL AT90S8535 at 4MHz, a 16x2 LCD module,
2 rotary encoders, the SID and some glue circuitry. Its quick, its dirty, and it works.
There's a lot of room for improvement - especially trying to get clean sound
output - but its good enough for hacking on.
What it currently does
- Speaks MIDI - Noteon, noteoff, controller, realtime messages (but ignores most for now.)
- All three oscillators tie into one note on one MIDI channel. This is so I can toy around with
stuff like ring modulation/hard sync effects and the like.
- A funky LCD interface using the two rotary encoders.
What it doesn't support
- Lots of the "useful" stuff: LFOs, software envelopes, "patch" support (to define noteon/noteoff
and other channel/note changes - useful for creating complex instruments.)
- Ready enough for the prime time; it hasn't reached the state where I'd use it to produce music.
What I learnt from this!
- GCC is really bad at outputting AVR assembler!
- Trying to do simple stuff can be complex in C - for example, having a 16-bit word but
wanting to write the high and low bytes to the SID. Its easy to do in assembler but hard
to "hint" to the C compiler! (What needs to happen? I need to write some inline assembler.)
- Lots of stuff about "pretending" to be a Commodore 64 data/address bus
- Bits about "nice" power supplies and well-filtered output sections - none of which I've laid
out onto a PCB for this just yet