Its time to step my game up. So I've decided to acquire the immese value for money Saleae Logic Analyser. This baby will allow me to analyse and record a bunch of stuff that really cant be handled with a sound card and an oscilloscope alone. (namely serial digital audio prior to being sent to DACs)
As a test to see if everything works, and that i can get sufficient time resolution on this, ive done a simple setup which consists in a 4Mhz clock and a Hex inverter (74LS04). I done my recording test using 24Mhz on my MacBookPro's USB2 port. And im quite happy with the results. Not bad for 15 minutes of unboxing the thing!
Ongoing Research and Development for Plogue's 'retro digital' products: chipsounds, chipspeech and chipcrusher .... and various retro computing stuff.
Saturday, January 9, 2010
Monday, November 30, 2009
These are not the chips you're looking for
[EDIT dec7th 2009] the wikipedia page has been corrected!Thanks!
According to wikipedia there is a VRC6 chip inside a North American Nigel Mansell "World Challenge" cartridge. Well no, there isn't. And there's no such thing as "World Challenge" either, only "World Championship" same difference.
Looks like Ill have to dig up the big bucks for a Japanese Castlevania 3 cart.
According to wikipedia there is a VRC6 chip inside a North American Nigel Mansell "World Challenge" cartridge. Well no, there isn't. And there's no such thing as "World Challenge" either, only "World Championship" same difference.
Looks like Ill have to dig up the big bucks for a Japanese Castlevania 3 cart.
Monday, November 9, 2009
TED: The 100$ noise pattern

00000000110010000100010111111101010011100
11000111111000001011010101101111101111000
10000001001111001110110011111001011101011
00101011110100011000010100000111000110101
11000011110110110100001101110111001001000
11101001100110100100110110001010101000100
101001011 (low frequency version: audio)
Working C16's and plus/4 are HARD to come by,
and people need to pay the price for a working
MOS8501 CPU and a MOS8360 TED chip.
I needed a real machine to analyze the TED noise pattern
(and pitch ranges) for a future version of chipsound,
so I won a working plus/4 on ebay, which cost me 100$
(with shipping) to Montreal, not that bad actually.
The TED will be included in an update for completism more
than anything, because the only thing that's unique about it
is its noise pattern. Otherwise its a very simple VDC
unit that generates 2 voices. Many plus4 users actually hook
up SIDs to the machine, or just use the chip as a DAC,
which is the case for demos such as this one
Confirmed VICE plus4 emu generates the same pattern,
so all is good.
(100$/255bits = 39cent/bit)
But is it cute??
Hum, nah, im not cleaning that GUNK to find out!
Wednesday, October 28, 2009
Full AY emu prototype
Well I've talked about this before, but I'll say it again.
Designing a synthesizer that claims full chip authenticity and playability at the same time is the toughest challenge I'm faced with.
It hard to give access to powerful sound tweaking possibilities available on some chips when the synth paradigm you are basing your whole design on is of the standard
[voice0 + voice1 + voice2 + (...) + voiceN = mix]
variety
Look at this signal path for instance:

It becomes clear that something like this doesn't fit that particular mold.
The AY has five generators: 3 tones, 1 noise, and 1 envelope.
It also has three independent audio output pins, that are mixed in the analog world differently in all the AY-based systems.
Now each of the output has its own tone generator, but it can also be mixed with the lone noise pattern (either, or combined with a binary AND). On top of that each output can have its volume changed independently (16 log steps), or be amp-modulated by the LONE Envelope generator. (more in the spec)
Anyone who's messed with an AY knows that the fun comes from mixing the env/tone+noise in certain ways which can make unique drones/beats that any IDM/Experimental student would enjoy.
But you can't currently do these in chipsounds v1.0 due to voice paradigm its based on. From recent user questions on the AY matter, it surprised me how programming a straight chip emu sounds like a hard task.
But in reality, in comparison to trying to make it fit in ARIA/SFZ, making a separate module that purely emulates the chip in bit perfect manner (and with all its limitations) is really not the challenge it appears to be.
The AY is a relatively simple digital state machine
Here is a snapshot of my current prototype (made using Bidule's C++ SDK):

And the type of drones you can dynamically make by moving the sliders here:
Example A
Example B
Its currently unclear if/how this will be integrated in chipsounds, or given for free for Bidule users. Please stay tuned!
Designing a synthesizer that claims full chip authenticity and playability at the same time is the toughest challenge I'm faced with.
It hard to give access to powerful sound tweaking possibilities available on some chips when the synth paradigm you are basing your whole design on is of the standard
[voice0 + voice1 + voice2 + (...) + voiceN = mix]
variety
Look at this signal path for instance:

It becomes clear that something like this doesn't fit that particular mold.
The AY has five generators: 3 tones, 1 noise, and 1 envelope.
It also has three independent audio output pins, that are mixed in the analog world differently in all the AY-based systems.
Now each of the output has its own tone generator, but it can also be mixed with the lone noise pattern (either, or combined with a binary AND). On top of that each output can have its volume changed independently (16 log steps), or be amp-modulated by the LONE Envelope generator. (more in the spec)
Anyone who's messed with an AY knows that the fun comes from mixing the env/tone+noise in certain ways which can make unique drones/beats that any IDM/Experimental student would enjoy.
But you can't currently do these in chipsounds v1.0 due to voice paradigm its based on. From recent user questions on the AY matter, it surprised me how programming a straight chip emu sounds like a hard task.
But in reality, in comparison to trying to make it fit in ARIA/SFZ, making a separate module that purely emulates the chip in bit perfect manner (and with all its limitations) is really not the challenge it appears to be.
The AY is a relatively simple digital state machine
Here is a snapshot of my current prototype (made using Bidule's C++ SDK):

And the type of drones you can dynamically make by moving the sliders here:
Example A
Example B
Its currently unclear if/how this will be integrated in chipsounds, or given for free for Bidule users. Please stay tuned!
Saturday, October 17, 2009
How I recorded and decoded POKEY's polynomial counters;Open Pokey Recipe for the curious
Hello
This is a "reprint" of the comments inside "POKEY.sfz", the chipsounds POKEY configuration file. (the original date is March 2009)
******************************************************************************
Was I naive to think that POKEY was just "another TIA", and I spent enough evenings to regret it. Making the breadboard and having Pokey spew some tones was the easy part, but soon realized that various frequencies gave me different patterns (sometimes after retriggereing the SAME note!)
So I tried many things, recorded GB's of tests and had a few ideas.
After lots of trials and loss of sanity:
Here is the FINAL methodology that I used to get usable data:
A)Clock a POKEY with a VERY SLOW clock (I used a +- 10Khz 50/50 PWM signal from a PIC)
B)Set Bit 6 of AUDC1 ( "1.79Mhz" or cpu clock)
C)Play the highest notes you can for each pattern: AUDF1=0 then AUDF1=1, (...), AUDF1=4
D)Record each bit pattern and pass it through our patternfinder util.
Now since the results are NOT the source pattern, but a "resampled" pattern made after skipping 4+AUDF source pulses for each destination pulse (according to the POKEY spec's "MODIFIED FORMULA"), we must derive the actual SOURCE pattern from the results.
The trivial thing to try is this:
In this case my recorded AUDF1=0's 4, 9 and 17 bit patterns gave the exact same results as source OR destination (with added offset before looping of course), which kinda proves that AUDF1=0 can give you the full pattern, and that there is magic somewhere (try that with any other random bit pattern for fun). With this source pattern I was able to verify my own "software resampling" using AUDF1=1,2,3... and so forth from my recordings for a match.
4bit poly: 000011101100101
However, and that's where the fun ends, the 5bit pattern was a pain. Patternfinder kept giving me a 62 bit long repeated pattern:
"00000010111000011001010010011101111110100011110011010110110001"
and NOT a 31 bit pattern like I expected!
I noticed that the former 31 bit half of that pattern was always the inverse of the later (whatever point at which you start).A "hint" that the results im getting use some form of inversion. Schematics show that the source pattern passes through the same circuit logic as the "plain square" so it is used as a "please invert previous bit" matrix
SO: Inverting THAT pattern (fill/skip_4 a 31 bit pattern) gave me the following from my 62 pattern: "1101001100000111001000101011110". Which, as with the 4,9,17 case was used to test for the generation of AUDF1=1 and other frequencies.
chipsounds specific:
A few unique oscillators have been made just for this chip.
One and Two Stream AND-ers and One Stream Differentiators were required to emulate the inner process of the POKEY chip.
Invaluable help from "DeRe Atari Chapter 7", and from the official specs.
And for the various Pinouts/Skematics found online.
This is a "reprint" of the comments inside "POKEY.sfz", the chipsounds POKEY configuration file. (the original date is March 2009)
******************************************************************************
Was I naive to think that POKEY was just "another TIA", and I spent enough evenings to regret it. Making the breadboard and having Pokey spew some tones was the easy part, but soon realized that various frequencies gave me different patterns (sometimes after retriggereing the SAME note!)
So I tried many things, recorded GB's of tests and had a few ideas.
After lots of trials and loss of sanity:
Here is the FINAL methodology that I used to get usable data:
A)Clock a POKEY with a VERY SLOW clock (I used a +- 10Khz 50/50 PWM signal from a PIC)
B)Set Bit 6 of AUDC1 ( "1.79Mhz" or cpu clock)
C)Play the highest notes you can for each pattern: AUDF1=0 then AUDF1=1, (...), AUDF1=4
D)Record each bit pattern and pass it through our patternfinder util.
Now since the results are NOT the source pattern, but a "resampled" pattern made after skipping 4+AUDF source pulses for each destination pulse (according to the POKEY spec's "MODIFIED FORMULA"), we must derive the actual SOURCE pattern from the results.
The trivial thing to try is this:
void Shuffler(const char*in, char*out, size_t len, size_t shufsize){
size_t cnt=0;
for (size_t i=0;i<len;++i){
out[i] = in[cnt];
cnt+=shufsize;
cnt = cnt % len;
}
}
In this case my recorded AUDF1=0's 4, 9 and 17 bit patterns gave the exact same results as source OR destination (with added offset before looping of course), which kinda proves that AUDF1=0 can give you the full pattern, and that there is magic somewhere (try that with any other random bit pattern for fun). With this source pattern I was able to verify my own "software resampling" using AUDF1=1,2,3... and so forth from my recordings for a match.
4bit poly: 000011101100101
However, and that's where the fun ends, the 5bit pattern was a pain. Patternfinder kept giving me a 62 bit long repeated pattern:
"00000010111000011001010010011101111110100011110011010110110001"
and NOT a 31 bit pattern like I expected!
I noticed that the former 31 bit half of that pattern was always the inverse of the later (whatever point at which you start).A "hint" that the results im getting use some form of inversion. Schematics show that the source pattern passes through the same circuit logic as the "plain square" so it is used as a "please invert previous bit" matrix
SO: Inverting THAT pattern (fill/skip_4 a 31 bit pattern) gave me the following from my 62 pattern: "1101001100000111001000101011110". Which, as with the 4,9,17 case was used to test for the generation of AUDF1=1 and other frequencies.
chipsounds specific:
A few unique oscillators have been made just for this chip.
One and Two Stream AND-ers and One Stream Differentiators were required to emulate the inner process of the POKEY chip.
Invaluable help from "DeRe Atari Chapter 7", and from the official specs.
And for the various Pinouts/Skematics found online.
Subscribe to:
Posts (Atom)



