I found outdated similar thread on pouet.net but unfortunately it is outdated. I was helped by the basic information on turning on the envelope generators and pumping samples as amplitude at channels 2 and 5. I did a little research with a multimeter:
The attachment P113092.JPG is no longer available
X-axis is the amplitude of 05 channel, Y-axis is the amplitude of 02 channels. The values are the output voltage.
I take unsigned 8 bit PCM mono WAV file, do some bit shifts right and left and got the first DIGITAL sounds from my GameBlaster clone. I even recorded these sounds.
I found a STM/MOD player with an open driver architecture with source codes - http://www.dcee.net/Files/Music/Player/ (play382.arj) [Sound Wave Pro / FRIENDS software / Andrew Zabolotny] , so i modify a little COVOX.ASM and play few STM and MOD files over Creative Music System / Game Blaster...
The attachment 159cc1967843c9090ea566bcaa713.png is no longer available
The attachment L010.MP3 is no longer available
The attachment L011.MP3 is no longer available
The source code of the CMS driver and the driver itself for this player are in the attached archive.
SAA output should be logarithmic as is AY and the Ti PSG. You will need to take this into account for a decent sound quality. Here are two examples I have done on Sega Master System, one without taking the log scale into account and one that does : http://www.tmeeco.eu/BitShit/SMSPCM0.SMS http://www.tmeeco.eu/BitShit/SMSPCM1.SMS
Could this be combined with Sigma/Delta modulation, i.e. error diffusion?
I used it with a high-baud-rate serial port, once, and got audio output of roughly similar quality.
Could this be combined with Sigma/Delta modulation, i.e. error diffusion?
I used it with a high-baud-rate serial port, once, and got audio output of roughly similar quality.
I simply put a panel mount 3.5mm audio jack and an RC low-pass in a DE9 plug enclosure.
The low-pass was pretty much necessary, but the SAA1099 is not limited to one bit precision.
SAA output should be logarithmic as is AY and the Ti PSG.
I dont think so. If you take a look at my first post on this topic, the picture, you can see that the voltages decrease linearly depending on the volume:
vol 0 -> vout 5,12V
vol 2 -> vout 5,09V
vol 4 -> vout 5,04V
vol 6 -> vout 5,00V
etc..
My multimeter is not super accurate, but this is enough to understand that the voltages decrease by about 0,03-0,04 each time. This suggests that the dependence is still linear and not logarithmic.
Anyway, i tried to creating lookup tables based on formula y = Pow(2 , - ( ( 15 − n ) / 2 ) where n is PSG volume and got them:
I understand almost nothing of what is involved here, but it still blows my mind.
Imagine hearing PCM music or effects coming out of an IBM PC running a Game Blaster back in 1988.
Just curious, how large are the .wav files you played, and what are the rest of the specs of the computer you did this on? I wonder how slow of a PC could actually handle this.
Just curious, how large are the .wav files you played, and what are the rest of the specs of the computer you did this on? I wonder how slow of a PC could actually handle this.
I am very lazy to write my own player for WAV files, so I took someone's ready-made code in Turbo Pascal and changed the procedure for outputting sound from the PC-speaker to a game blaster. This player allows you to play files that fit into the main RAM, so WAV file size usualy limited to ~510-550Kb max. This is enough for me for a simple check of the sound quality.
As for the test configuration, I am using a 486 based machine with AMD 133MHz processor. But I do not think that any super-powerful computer resources are needed, since no serious calculations are made to output one audio byte - no divisions, no multiplications - only bit shifts. Even XT should be able to handle this.
I completely forgot about the ImpulseTracker! This is an excellent music tracker, the source code of which is open, so I can easy make support for CMS/GameBlaster output now. I again took the driver for audio output on LPT Covox as a basis and changed it a little. As a result, we got the CMS.DRV driver for ImpulseTracker.
You can check this on your real CMS/GameBlaster by downloading the files IT.EXE and CMS.DRV and then running the program with the following parameters:
SAM Coupé: Bacardi - stereo oscilloscope view - this one seems (I'm guessing here) to be toggling on and off the frequency generator while feeding the volume channels for 4-bit sound
I haven't tried out playing samples on the SAA1099 (on my eventual list of things to try), but perhaps the above two may be of interest to you. "Solar Flare" on the pouet.net thread is the same author of the video links.
SAM Coupé: Bacardi - stereo oscilloscope view - this one seems (I'm guessing here) to be toggling on and off the frequency generator while feeding the volume channels for 4-bit sound
I haven't tried out playing samples on the SAA1099 (on my eventual list of things to try), but perhaps the above two may be of interest to you. "Solar Flare" on the pouet.net thread is the same author of the video links.
That's me. 😀
The Bacardi (and CannonFodder) mods as played back by DTA's sample routine are quite a novelty.
Every time I think about how it works, I can't quite get my head around it.
The main concept is that it each sample is sent to /two/ channels which are /exactly/ out of phase resulting in a sum of no tone.
By not using the volume halved envelope generator, the doubled sample resolution makes a huge audible difference.
Really appreciate your work and giving the SAA1099 some prominence out there!
stefanwrote on 2021-04-15, 17:17:The Bacardi (and CannonFodder) mods as played back by DTA's sample routine are quite a novelty.
Every time I think about how it […] Show full quote
The Bacardi (and CannonFodder) mods as played back by DTA's sample routine are quite a novelty.
Every time I think about how it works, I can't quite get my head around it.
The main concept is that it each sample is sent to /two/ channels which are /exactly/ out of phase resulting in a sum of no tone.
By not using the volume halved envelope generator, the doubled sample resolution makes a huge audible difference.
I think I understand the concept and that is pretty amazing that the hardware is capable of this and DTA pulled that off; it makes complete sense that it works in that fashion. That is another thing to add to my "to try" list! 😁
After a quick flurry of activity over on the sam-users mailing list I had to pull out the debugger and determine how DTA pulled this off.
1c: 02 - frequency reset (all channels)
1b - 00: 00 - zero all registers, tone 0 octave 0 -> 31 Hz tone
01-04: 88 - channels 1-4: medium amplitude
11: 11 - channels 2-3: octave 1
14: 1e - frequency enable channels 1-4
1c: 01 - sound enable (all channels)
wait ~12ms (on the SAM Coupé the above is executed on screen line 0, the following is executed on screen line 192, a 50Hz frame including border has 312 lines)
11: 00 - channels 2-3: octave 0
on line interrupts and software timing in border area sample data is pumped
01-04: sample data
Retriggering the notes by setting the octave results in channels 2 and 3 now being in opposite phase of channels 1 and 4.
As long as retriggering occurs within a margin (which?) the outputs align internally.
stefanwrote on 2021-09-02, 20:51:After a quick flurry of activity over on the sam-users mailing list I had to pull out the debugger and determine how DTA pulled […] Show full quote
After a quick flurry of activity over on the sam-users mailing list I had to pull out the debugger and determine how DTA pulled this off.
1c: 02 - frequency reset (all channels)
1b - 00: 00 - zero all registers, tone 0 octave 0 -> 31 Hz tone
01-04: 88 - channels 1-4: medium amplitude
11: 11 - channels 2-3: octave 1
14: 1e - frequency enable channels 1-4
1c: 01 - sound enable (all channels)
wait ~12ms (on the SAM Coupé the above is executed on screen line 0, the following is executed on screen line 192, a 50Hz frame including border has 312 lines)
11: 00 - channels 2-3: octave 0
on line interrupts and software timing in border area sample data is pumped
01-04: sample data
Retriggering the notes by setting the octave results in channels 2 and 3 now being in opposite phase of channels 1 and 4.
As long as retriggering occurs within a margin (which?) the outputs align internally.
Wow! This is pretty amazing. It would be interesting to read about how DTA came to the conclusion to do this. Thank you for sharing the information!