I’ve been working here and there on the SID thing again, and got a bit farther. Ring modulation and all that jazz works, and I have split channels into filtered/unfiltered streams in preparation for feeding it into my hardware filter. There’s still some popping or something and I’m not quite sure why. It may be “normal”, but I don’t hear it on a regular SID so I will have to check it out. My ADSR gen might be having issues creating a DC bias of some form that I will have to kill.
Here’s what it sounds like right now:
R-type (Chris H.)
Qualm of Zulu (Zyron)
Tube Madness (Stefan Hartwig)
Well, I’ve been hard at work tweaking my SID implementation. So far, I have moved all control functions over to a second 6502, added a bunch of hardware (bankswitching, display control, etc) and finally loaded some REAL SID tunes into it. I quickly ran into a ton of bugs with the envelope unit, which have been fixed now. I also worked on the combined waveform thinger too, and figured out pretty much how that works. There’s still a few issues left that I have to solve, like some aliasing between the SID output and the sample rate of my DAC. This is no surprise, however, since the NES has a similar problem with the periodic noise. I already have a 256th order FIR filter for the NES stuff, so I may just drop that in. On these following two demos you will probably hear the aliasing issues if you know what to listen for.
Also note that I know the pitch is slightly off on my demos- I am using 1.02MHz (NTSC rate) while most of these tunes are designed for PAL rate (0.98MHz). you can slow them down 4% or so if you wish to hear them at the correct pitch, tho it will be 4% slower. I was thinking of speeding the timer up and then slowing it down to compensate but I’m kinda lazy.
I’ve run 20 SID tunes through it so far and found a few minor bugs but I think they are supposed to be there. I’ve been listening to a real SID to determine which is the case. The jury’s still out- if nothing else, it’s just more noticable here for some reason and I will have to fix that.
Soo, give it a listen:
Rambo, set of tunes (10 mins)
Tetroid, a “scene tune” that abuses the SID.
Well I converted my other SID player code I wrote ages ago so that it can write to my SID that is sitting at a rather unorthodox 06000h. I tweaked a few things and got all the distortion and crap out. I found out that my noise on channels 1 and 2 was dead though. Noise on channel 0 worked fine, however. This is because when in reset, the state machine is reset too, which can only init the first LFSR. whoops. I manually poked the test bits which loaded the goodies into the remaining 2 channels and they worked fine after that.
Anyways, if you want about 9 minutes of SID bliss, from the editor “Studio 64”, this is your lucky day. Tune #4 is an amusing rendition of “Sweet Dreams”. giggle.
Listen to it!
Here’s after a few more hours of progress. This is pretty much how it’s supposed to sound. If I did a double blind between this and a SID, I probably couldn’t tell the difference. It’s playing back at the correct speed now.
give it a listen here!
Well I decided to try to make a SID in the FPGA. So far, I have it playing a SID tune somewhat. This is about 1 day of work so far.
listen to it!
So far, the SID enveloper, waveform generator (with “invalid” bit combinations), and some other goodies are done. For starters, I am outputting the straight and filtered audio separately, so that it can run to my filter circuit.
Unlike all the other FPGA SID implementations out there, mine’s gonna use a real live filter! I have designed and made the filter, and it seems to mostly work. It’s made similar to the filter on the real chip, using MOS transistors and such, so it should accurately model it. I hope. I passed some waveforms through it while I dinked around with the cutoff freq and all that jazz and it sounded pretty decent. We’ll know when I hook it up to the FPGA if I got it or not.
All in all not a bad deal for about 1 day of work. Hopefully tonight I will have a proper “SID core” set up and running. We’ll see.