Ongoing Research and Development for Plogue's 'retro digital' products: chipsounds, chipspeech and chipcrusher .... and various retro computing stuff.
Friday, February 4, 2011
Thursday, December 23, 2010
Oh yes I'm working on new stuff...
No updates for a while, its because I can't disclose my new stuff yet.
Sad because theres LOTS of research in there.
I'm hoping to post a glimpse at NAMM 2011.
Sad because theres LOTS of research in there.
I'm hoping to post a glimpse at NAMM 2011.
Friday, November 5, 2010
New research on the SID ADSR
My previous post on the SID ADSR tables on the SID DIE left a question unanswered about the exact method by which the chip manages to apply the level changes in the envelopes at certain points in its decay/release stages.
Lucky for us, Frank Wolf took upon the challenge, and I'm quite priviledge to be allowed to publish his research on this blog.
So here is his analysis of that problem....
(high res)
6581 Envelope Generator (26.10.2010)
----------------------------------
In the upper part you can see the R-2R ladder; on the left is the MSB (Bit 7) of the 8 Bit counter.
Logarithmic Table
-----------------
Now take a look a the Table part! Here's the table in ASCII Form and reduced to the values on 'B' lines (please note the every second bit of the 8Bit counter is negated, i.e. the signal line is mirrored A<->B!)
*The numbers of the signal lines have been chosen to match the numbers of the selector bits!
Every possible "Fixpoint" is compared to the 8 bit counter value keeping only one(!) of the seven signal lines "high" in case of equality. To be more exact: The lines are pulled down in case of inequality.
The 5 selector bits for the logarithmic table are generated by feeding each of the the signal lines 0 to 4 into a simple flip-flop to "set" it. Output of the flip-flops is active "low"!) Additionally both adjacent signal lines are also fed into the flip-flip to "reset" it; resulting in a "high" level output.
Example:
Sustain value
-------------
The 4 bits from the sustain value register are connected to:
So they are (as already known and verified through tests) compared like:
Lucky for us, Frank Wolf took upon the challenge, and I'm quite priviledge to be allowed to publish his research on this blog.
So here is his analysis of that problem....
(high res)
6581 Envelope Generator (26.10.2010)
----------------------------------
In the upper part you can see the R-2R ladder; on the left is the MSB (Bit 7) of the 8 Bit counter.
Logarithmic Table
-----------------
Now take a look a the Table part! Here's the table in ASCII Form and reduced to the values on 'B' lines (please note the every second bit of the 8Bit counter is negated, i.e. the signal line is mirrored A<->B!)
B7 |B6 |B5 |B4 |B3 |B2 |B1 |B0 |Fixpoint|Signal line* 0 0 0 0 0 0 0 0 = 0x00 5 0 0 0 0 0 1 1 0 = 0x06 4 0 0 0 0 1 1 1 0 = 0x0E 3 0 0 0 1 1 0 1 0 = 0x1A 2 0 0 1 1 0 1 1 0 = 0x36 1 0 1 0 1 1 1 0 1 = 0x5D 0 1 1 1 1 1 1 1 1 = 0xFF 6
*The numbers of the signal lines have been chosen to match the numbers of the selector bits!
Every possible "Fixpoint" is compared to the 8 bit counter value keeping only one(!) of the seven signal lines "high" in case of equality. To be more exact: The lines are pulled down in case of inequality.
The 5 selector bits for the logarithmic table are generated by feeding each of the the signal lines 0 to 4 into a simple flip-flop to "set" it. Output of the flip-flops is active "low"!) Additionally both adjacent signal lines are also fed into the flip-flip to "reset" it; resulting in a "high" level output.
Example:
Selector bit| Signal line | "Reset" signal lines 0 1, 6 1 0, 2 2 1, 3 3 2, 4 4 3, 5
Sustain value
-------------
The 4 bits from the sustain value register are connected to:
Sustain bit 0 to Counter bit compare 0 + 4 Sustain bit 1 to Counter bit compare 1 + 5 Sustain bit 2 to Counter bit compare 2 + 6 Sustain bit 3 to Counter bit compare 3 + 7
So they are (as already known and verified through tests) compared like:
0x0 (S) == 0x00 (Cnt) 0x1 (S) == 0x11 (Cnt) 0x2 (S) == 0x22 (Cnt) . . . 0xE (S) == 0xEE (Cnt) 0xF (S) == 0xFF (Cnt)
Tuesday, October 12, 2010
Wednesday, September 29, 2010
Friday, September 10, 2010
VIC-20 (CR)'s bad waveform clipping.
Poor MOS6560, it could so much better outside a VIC-20!
For chipsounds 1.0, I got the help of eslapion from the Denial forum to analyze the RC filter output of the VIC-20. Eslapion got me to learn how to understand the link between the resistors and capacitors and how to extract the exact low pass filter coefficients that was needed to implement in DSP. It simply turns out to be a 1.6Khz one pole low pass filter. (third party confirmation here).
Such a low cutoff makes for one REALLY DULL sounding chip
But that's not the only sound coloration present on the real VIC. There is also quite a bit of clipping going on when all voices play at once. This clipping does add quite a bit of character when there are a combination of more than one pulse voices playing, as well as the noise channel.
Lets look at the phenomenon on a scope:
Quoting Eslapion:
"The specs sheet of the 6560 specifies the audio pin has an output impedance of 1kOhms. This impedance interacts with C9 (0.01uF) to create a 1st order low pass filter of 15.9kHz.
This is followed by R8 (1kOhms) and C10 (0.1uF) which combine to create another 1st order filter of 1.6kHz.
In other words, these two filters combine to provide a 20dB/decade attenuation from 1.6kHz to 16Khz and then 40 dB/decade above that.
Q1 acts as a current multiplier to ensure enough driving power on the final output but, as we can see, R27 acts as a pull down only device and there is no biasing. The output of the 6560, multiplied by Q1 pulls up and R27 pulls down.
Add to that, the fact that the volume control induces a DC offset.
DC offset values for register 36878: (average) (values picked after R8)
0:4.06
1:4.17
2:4.28
3:4.41
4:4.53
5:4.64
6:4.76
7:4.86
8:4.95
9:5.06
10:5.17
11:5.27
12:5.37
13:5.47
14:5.56
15:5.64
This DC offset, on the final output, is cancelled out by C11 which combines with R27 to create a high pass filter of 339Hz with 20dB/decade attenuation. Therefore, when no sound is playing there is no way to tell on the output that a DC level forms on the base input of Q1 as the volume is increased.
If the 6560 is going to pull up in DC when the volume rises then the maximum excursion of a sound wave is limited by a combination of the pull down current (set by R27) as well as the voltage feed which, in this specific case is 0 to 5volts. When the volume goes above a certain level, clipping of the positive side of the wave occurs as the 6560 attempts to pull up above 5V.
This clipping effect is even more intense when playing multiple voices simultaneously as their combined excursion adds to each other.
Obviously, the smallest amount of clipping occurs when the DC offset provides a DC level of 2.5V on the base of Q1. This is achieved when setting the volume level to 8.
Now, looking at the rise and fall time of the signal taken directly at pin 19 of the 6560, we see that the rise time is much greater than the fall time. Considering the effect of Q1, as seen by the 6560, R27 should appear as about 100 times greater.
This asymetrical voltage change is caused by the diode in the base of Q1 which can draw current on voltage rise but not give back any on the falling edge. This causes C9 and C10 to charge slowly as Q1 "steals" current used to charge these capacitors but not restore it when the 6560 discharges them. This assymetrical time constant is less dramatic on the actual output as C10 and C11 are still discharging at the very instant C9 appears to be empty."
Heres an audio capture form the final analog output of the VIC-20 CR:
Clipping sound
So there you have it!
The VIC emulation im working on for 2.0 includes that clipping and filtering and is starting to sound very close to the real thing.... stay tuned
For chipsounds 1.0, I got the help of eslapion from the Denial forum to analyze the RC filter output of the VIC-20. Eslapion got me to learn how to understand the link between the resistors and capacitors and how to extract the exact low pass filter coefficients that was needed to implement in DSP. It simply turns out to be a 1.6Khz one pole low pass filter. (third party confirmation here).
Such a low cutoff makes for one REALLY DULL sounding chip
But that's not the only sound coloration present on the real VIC. There is also quite a bit of clipping going on when all voices play at once. This clipping does add quite a bit of character when there are a combination of more than one pulse voices playing, as well as the noise channel.
Lets look at the phenomenon on a scope:
Quoting Eslapion:
"The specs sheet of the 6560 specifies the audio pin has an output impedance of 1kOhms. This impedance interacts with C9 (0.01uF) to create a 1st order low pass filter of 15.9kHz.
This is followed by R8 (1kOhms) and C10 (0.1uF) which combine to create another 1st order filter of 1.6kHz.
In other words, these two filters combine to provide a 20dB/decade attenuation from 1.6kHz to 16Khz and then 40 dB/decade above that.
Q1 acts as a current multiplier to ensure enough driving power on the final output but, as we can see, R27 acts as a pull down only device and there is no biasing. The output of the 6560, multiplied by Q1 pulls up and R27 pulls down.
Add to that, the fact that the volume control induces a DC offset.
DC offset values for register 36878: (average) (values picked after R8)
0:4.06
1:4.17
2:4.28
3:4.41
4:4.53
5:4.64
6:4.76
7:4.86
8:4.95
9:5.06
10:5.17
11:5.27
12:5.37
13:5.47
14:5.56
15:5.64
This DC offset, on the final output, is cancelled out by C11 which combines with R27 to create a high pass filter of 339Hz with 20dB/decade attenuation. Therefore, when no sound is playing there is no way to tell on the output that a DC level forms on the base input of Q1 as the volume is increased.
If the 6560 is going to pull up in DC when the volume rises then the maximum excursion of a sound wave is limited by a combination of the pull down current (set by R27) as well as the voltage feed which, in this specific case is 0 to 5volts. When the volume goes above a certain level, clipping of the positive side of the wave occurs as the 6560 attempts to pull up above 5V.
This clipping effect is even more intense when playing multiple voices simultaneously as their combined excursion adds to each other.
Obviously, the smallest amount of clipping occurs when the DC offset provides a DC level of 2.5V on the base of Q1. This is achieved when setting the volume level to 8.
Now, looking at the rise and fall time of the signal taken directly at pin 19 of the 6560, we see that the rise time is much greater than the fall time. Considering the effect of Q1, as seen by the 6560, R27 should appear as about 100 times greater.
This asymetrical voltage change is caused by the diode in the base of Q1 which can draw current on voltage rise but not give back any on the falling edge. This causes C9 and C10 to charge slowly as Q1 "steals" current used to charge these capacitors but not restore it when the 6560 discharges them. This assymetrical time constant is less dramatic on the actual output as C10 and C11 are still discharging at the very instant C9 appears to be empty."
Heres an audio capture form the final analog output of the VIC-20 CR:
Clipping sound
So there you have it!
The VIC emulation im working on for 2.0 includes that clipping and filtering and is starting to sound very close to the real thing.... stay tuned
Saturday, August 21, 2010
X marks the spot!
People following my twitter might have been wondering what that Canadiana Road Trip stuff was a'boot yesterday. It was about salvaging a pile of 50 arcade boards from certain death.
My Pirate Map pointed to a secret location near Ottawa, Ontario, so went, dug up, and found the treasure!
(yes that's the trunk of MY CAR)
A quick evaluation can be made to about 65 soundchips on these. (some boards do have more than one). I don't know WHEN I'll get time to go through the good, the bad and the awesome. What works and whats useless, but there you go.
Each board is different (except two MS Pacman boards, but i will NOT complain here, lets just hope I can get one running, even it if means cannibalizing the other)
chipsounds 2.0 R&D really REALLY doesn't need more chips at this point....
well there's ... oh hell...
My Pirate Map pointed to a secret location near Ottawa, Ontario, so went, dug up, and found the treasure!
(yes that's the trunk of MY CAR)
A quick evaluation can be made to about 65 soundchips on these. (some boards do have more than one). I don't know WHEN I'll get time to go through the good, the bad and the awesome. What works and whats useless, but there you go.
Each board is different (except two MS Pacman boards, but i will NOT complain here, lets just hope I can get one running, even it if means cannibalizing the other)
chipsounds 2.0 R&D really REALLY doesn't need more chips at this point....
well there's ... oh hell...
Subscribe to:
Posts (Atom)




