VOGONS


bug report (?) win3.x and latest cvs

Topic actions

Reply 82 of 95, by kruwi

User metadata
Rank Member
Rank
Member

This is the output:

read mixer 4 write mixer 4 : 37 read mixer 4 read mixer 2e write mixer 2e : ee read mixer 2e write mixer 22 : cc write mixer 4 : […]
Show full quote

read mixer 4
write mixer 4 : 37
read mixer 4
read mixer 2e
write mixer 2e : ee
read mixer 2e
write mixer 22 : cc
write mixer 4 : cc
write mixer 26 : cc
write mixer 28 : cc
write mixer 2e : cc
write mixer a : 0

Visit the end of the internet: www.groskreutz.de

Reply 86 of 95, by kruwi

User metadata
Rank Member
Rank
Member

Using the old sblaster.cpp, the output is like this:

read mixer 4 write mixer 4 : 37 read mixer 4 write mixer 4 : ff read mixer 2e write mixer 2e : ee read mixer 2e write mixer 22 : […]
Show full quote

read mixer 4
write mixer 4 : 37
read mixer 4
write mixer 4 : ff
read mixer 2e
write mixer 2e : ee
read mixer 2e
write mixer 22 : cc
write mixer 4 : cc
write mixer 26 : cc
write mixer 28 : cc
write mixer 2e : cc
write mixer a : 0
write mixer e : 0
write mixer e : 0
write mixer e : 0
write mixer e : 0

In both cases (old and new sblaster.cpp) I simply started and quitted windows.
With the old sblaster.cpp I could hear both the start and the exit sound. With the new one, nothing ... .

Visit the end of the internet: www.groskreutz.de

Reply 87 of 95, by Srecko

User metadata
Rank Member
Rank
Member

Thanks for the log.

read mixer 4
write mixer 4 : 37
read mixer 4

This won't return 37 but 26 with sbpro or sbpro2 (because of two "reserved" bits which are set to 0 on read), although it's strange that it still doesn't work with sb16 setting where it should return same value (maybe it stops somewhere else). I will check with the driver that I found.

Reply 89 of 95, by Srecko

User metadata
Rank Member
Rank
Member

Found this bug (missing brackets):

-(((_WHICH_[0] & 0x1e) << 3) | ((_WHICH_[1] & 0x1e) >> 1) & (sb.type==SBT_16 ? 0xff:0xee))
+((((_WHICH_[0] & 0x1e) << 3) | ((_WHICH_[1] & 0x1e) >> 1)) & (sb.type==SBT_16 ? 0xff:0xee))

Could be a cause for this regression (driver will read 0xfe, not 0xee from 0x2e reg).

Regarding default values, we set volumes for 0x4,0x22,0x26 to 31 (to get higher volume in games), while default should be 20 (or 0xaa in sbpro reg). Default for 0x2e is 0 which is correct in dosbox.

Version of sbpro2 driver I have here is a bit different from kruwi's. It doesn't work with older mixer code either, nor with above fix, and it reads only the line-in register:

<cut> issue with my driver doesn't seem to be mixer related, aborts after reading dsp version several times.

Reply 93 of 95, by kruwi

User metadata
Rank Member
Rank
Member

Quite funny. With the current sources and the setting sbtype=sb16, the sbpro2 drivers are working. They are not working, however, if I try sbtype=sbpro2.

Now checking log files ...

Visit the end of the internet: www.groskreutz.de

Reply 94 of 95, by kruwi

User metadata
Rank Member
Rank
Member

sbtype=sb16, using the sbpro2 drivers (working):

read mixer 4
write mixer 4 : 37
read mixer 4
write mixer 4 : ff
read mixer 2e
write mixer 2e : ee
read mixer 2e
write mixer 22 : cc
write mixer 4 : cc
write mixer 26 : cc
write mixer 28 : cc
write mixer 2e : cc
write mixer a : 0
write mixer e : 0
write mixer e : 0
write mixer e : 0
write mixer e : 0

sbtype=sbpro2, using the sbpro2 drivers, not working:

read mixer 4
write mixer 4 : 37
read mixer 4
read mixer 2e
write mixer 2e : ee
read mixer 2e
write mixer 22 : cc
write mixer 4 : cc
write mixer 26 : cc
write mixer 28 : cc
write mixer 2e : cc
write mixer a : 0

Visit the end of the internet: www.groskreutz.de

Reply 95 of 95, by Srecko

User metadata
Rank Member
Rank
Member

It's the 37->26 issue.

Only difference between sbpro2 and sb16 is last precision bit for each stereo volume, it seems that driver assumes 4-bit precision while sbpro/pro2 *should* have 3-bit precision - probably it does, but driver still expects last bit to be preserved ( Creative breaking their own nice-coding guidelines from SB SDK).

Shoud work if we remove sb.type==SBT_16 checks from macros SETPROVOL and MAKEPROVOL and assume as if they were true.