Hey zuiko,
This sound thing is still bugging me. I don't know if you're still trying to figure it out, but I just wanted to go back through everything I know about the sound chip in case it's any help. I just looked at my disassembly. It looks like the stock startup chime initialization code does a few things differently depending on the version register of the ASC (at ASC+$800). My sound code ignores it completely and just assumes the IIci version of the sound chip, so that might be a problem.
It would be interesting to see what the version register returns on the SE/30. On the IIci, using MicroBug with the command "DM 50F14800", the first byte it prints back is $00--version 0.
If the SE/30 reads back a different version number in this register, that might be part of what's going on. Anyone feel like going into the debugger and typing that command on an SE/30? Then you can exit the debugger by typing "G".
Here are the initialization differences based on the ASC version:
1) The volume it loads into the volume register ($806) is a bit different: On version 0, it looks like the 3-bit volume is loaded into the upper 3 bits (5-7) of register $806. This also concides with what happens if I play around with the sound control panel and then dump the contents of it:
volume 0 --> $00
volume 1 --> $20
volume 2 --> $40
volume 3 --> $60
volume 4 --> $80
volume 5 --> $A0
volume 6 --> $C0
volume 7 --> $E0.
For a nonzero ASC version, it appears to put the volume into bits 2-4 of the same register (but they provide a different volume for that chip too -- not sure exactly why).
No idea what the difference is -- all of the startup chimes/error beeps have two volumes in the initialization code. One for ASC version 0, one for ASC with a nonzero version.
So...if the SE/30 has a different sound chip version, my code (which just puts $40 for a volume of 2 before playing the sampled chime) is initializing the volume incorrectly.
2) Another thing it does differently with different ASC versions is that it puts something different into register $802. For ASC version 0, it puts in $00. For ASC with a nonzero version, it puts in $01. My comments say this is telling the sound chip whether to use analog or PWM, but I don't know for sure.
3) The only other difference is it sets up the initial synthesizer waveform differently based on the ASC version. But since you're not using the synthesizer mode, this shouldn't matter.
So...I guess it would be awesome to get a dump of what register $800 contains on the SE/30's ASC. Extra credit if you change the sound in the sound control panel and dump the register contents each time you change the sound like I did in my list above. ;-)
This sound thing is still bugging me. I don't know if you're still trying to figure it out, but I just wanted to go back through everything I know about the sound chip in case it's any help. I just looked at my disassembly. It looks like the stock startup chime initialization code does a few things differently depending on the version register of the ASC (at ASC+$800). My sound code ignores it completely and just assumes the IIci version of the sound chip, so that might be a problem.
It would be interesting to see what the version register returns on the SE/30. On the IIci, using MicroBug with the command "DM 50F14800", the first byte it prints back is $00--version 0.
If the SE/30 reads back a different version number in this register, that might be part of what's going on. Anyone feel like going into the debugger and typing that command on an SE/30? Then you can exit the debugger by typing "G".
Here are the initialization differences based on the ASC version:
1) The volume it loads into the volume register ($806) is a bit different: On version 0, it looks like the 3-bit volume is loaded into the upper 3 bits (5-7) of register $806. This also concides with what happens if I play around with the sound control panel and then dump the contents of it:
volume 0 --> $00
volume 1 --> $20
volume 2 --> $40
volume 3 --> $60
volume 4 --> $80
volume 5 --> $A0
volume 6 --> $C0
volume 7 --> $E0.
For a nonzero ASC version, it appears to put the volume into bits 2-4 of the same register (but they provide a different volume for that chip too -- not sure exactly why).
No idea what the difference is -- all of the startup chimes/error beeps have two volumes in the initialization code. One for ASC version 0, one for ASC with a nonzero version.
So...if the SE/30 has a different sound chip version, my code (which just puts $40 for a volume of 2 before playing the sampled chime) is initializing the volume incorrectly.
2) Another thing it does differently with different ASC versions is that it puts something different into register $802. For ASC version 0, it puts in $00. For ASC with a nonzero version, it puts in $01. My comments say this is telling the sound chip whether to use analog or PWM, but I don't know for sure.
3) The only other difference is it sets up the initial synthesizer waveform differently based on the ASC version. But since you're not using the synthesizer mode, this shouldn't matter.
So...I guess it would be awesome to get a dump of what register $800 contains on the SE/30's ASC. Extra credit if you change the sound in the sound control panel and dump the register contents each time you change the sound like I did in my list above. ;-)