After I have noticed, that a variety of things can be between a dead SID and a perfect SID, I was thinking of writing a software, that lets me check out all aspects of the SID. I think, there are many partially broken SIDs out there, that are not even noticed by the user. They sound kind of strange, but who knows...
Also, it was interesting to listen to the differences between the 6581, the 8580, the swinSID nano, the FPGA SID and the ARMSID. The first two are the original models, the last three are modern replacements.
The SIDalyzer can set every parameter of every voice and of the filters. Some parameters can be swept from low to high values. This will give a good overview of the functionality of the SID.
I coded the program early 2019. It was the first time of programming in (Commodore) BASIC since 1986. It was interesting, how much I still remembered and that I have learned, what I was missing, in a pretty short time. I had to spend a bit of time for (re)learning, how to program sprites. I wanted to have sprites to mark the parameter, that is being manipulatedm, when I use a joystick (Port #2).
After adding features, the software became slightly slow, so I have finally compiled the BASIC code with the Austro Speed Compiler, which added quite a bit of speed (ok, that is part of the name).
First screen: The help screen
The first screen is a help screen, that explains the key strokes. I have already mentioned, that it can be navigated with the joystick, too. Well... I could not resist :-)
1, 2 or 3 switches to voice 1, 2 or 3. Sure, easy to understand, the parameters of all voices do not fit on the small screen of the C64.
With R, you can reset everything to default values. That also happens after starting the program, so you only need this function, if everything is out of control.
M is for muting all voices at once... imagine you get a phone call, you want to press one key, not all three.
S is for sweeping a parameter. It works with the oscillator frequency, the pulsewidth and the cut off frequency of the filter (FCUTOFF).
X exists the program. All voices are muted.
P prints the parameters on Device #4 (the default printer device).
The back arrow (above the control key) is to get back to the help screen.
You can navigate with the cursor keys, the active parameter is inverted (highlighted). This parameter will change, if + or - are pressed. With shift + or shift - things increment/decrement a bit faster. The steps are pretty narrow, when you want to change the frequecy.
Home brings you back the the parameter FREQUENCY, SHIFT HOME (=CLR) brings you to the last parameter, which is VOLUME.
There is one SID address. That is 54272 (0xD400 hexadecimal).
SID base address selection
But... you might want to check a stereo SID or the second SID of FPGA SID or the Ultimate II+. No problem, you can select those, here. For all other cases: press 1.
Now, you get to the parameter screen:
That is, where the black magic happens (that is why it is black).
When you press the space bar, you can toggle the gate flag. In easy words: it switches on and off the voice. You can use the cursor keys to navigate to teh parameter, that you want to modify. Then press + or - (with out without shift) and the parameter will change. The values are displayed in hexadecimal values. So volume is from 0 (muted) to F (maximum volume). The "flags" can only change between 0 and 1 (inactive and active). Try sweeping the FREQUENCY, the PULSEWIDTH (which only works for SQUarewave waveforms).
The different wave forms are TRIangle (almost a sine wave), SAWtooth, SQUarewave and NOIse.
Attack, decay, sustain and release are the parameters of the envelop curve for each voice (oscillator).
The Filter parameters FCUTOFF, RESONANCE, ... and VOLUME only exist once for all voices There is only one filter!
There are four fags V1, V2, V3 are set to 1 by default. That means, that voice#1, voice#2 and voice#3 are filtered. If that flag is switched to 0, the respective voice bypasses the filter, which then has no effect on it anymore.
EXT is the filter flag for the audio input. Yes, the C64 does have an audio input!. This is not for digitizing an audio wave, but it is affected by the filter or not. It is only an analog pass through. The purpose is (probably) to cascade two or several C64 to get a multiple voice synthesizer cluster.
Finally, the parameters can be printed out on device 4. This might be interesting in a few cases.
The parameter print out.
Find this project on github.