VOGONS


First post, by carlostex

User metadata
Rank l33t
Rank
l33t

Hi there!

I've been working for this on and off for about one year. The Tandy project put this on the hold, mainly because i wasn't going nowhere. But the last couple of weeks made the difference. As soon as i saw progress coming i just couldn't stop.

So does this work?? Well it does, it's in a semi-working state and works in a few games. The ONLY reason it does not work in all MSS3 games is that i haven't got all the modes figured. The AdLib Gold has a different architecture and all the IRQ, and DMA programming is something i never did before and even now is far from perfect. There is still a lot of stuff i don't understand.

The driver can be tried on both hardware (real AdLib Gold and GoldLib cards) and also 86box's Adlib Gold emulation. I do recommend in the MSS3 to set the driver parameters manually, or edit DIG.INI file when you can. The automatic detection is not guaranteed to work. I'm a bit confused as some modes seem to play fine in MSS3 official DIGTEST.EXE and not so good in some games. Most 16bit stuff won't actually work that well and 8 bit stuff should work well except for 44Khz resolution.

I'm at the limit of my abilities as i'm not sure how i will improve the drivers but i'll keep trying. So calling all the AdLib Gold and GoldLib users, or if you use 86box, you can try that too.

That's it! It's been 30 years since MSS3 drivers were rolling out. John Miles never made one, now there's something. Hell, it's about time!

Update:

The attachment adlgold.zip is no longer available
Last edited by carlostex on 2026-04-06, 21:12. Edited 2 times in total.

Reply 2 of 9, by carlostex

User metadata
Rank l33t
Rank
l33t
keropi wrote on 2026-04-03, 18:23:

Great progress CarlosTex!
I hope eventually the rest is figured out 😀

Thanks Leo.

For shits and giggles i tried today with 86box. Discworld and Death Gate worked but it was slightly stuttery. Feels like too many IRQ's are being fired. On my real PC these games worked without any stuttering, so i'm still wondering if this is an emulation ill effect or not. I still blame my driver because AIL2 games work fine with AdLib Gold emulation.

Reply 3 of 9, by carlostex

User metadata
Rank l33t
Rank
l33t

Ok everyone, i disabled the 16bit modes for the AdLib Gold and tried to make the 8 bit modes work as best as possible. A lot of games that weren't working before work great now so...this version is much better until i actually figure out how the AdLib Gold processes 16bit data internally.

Driver updated in the original post.

Reply 4 of 9, by Tiido

User metadata
Rank l33t
Rank
l33t

It doesn't support 16 bits, and if the 12bit playback it can do is anything like all the other Yamaha sound chips, it is in interleaved format that requires translation rather than just 16bit data with 4 unused bits.

For example 2 samples are spread over 3 bytes in this way (L=first sample, H=second sample, numbers being bits of the individual samples) :

Byte 0
LLLL LLLL
7654 3210

Byte 1
HHHH LLLL
1198 1190
10 10

Byte 2
HHHH HHHH
7654 3210

T-04YBSC, a new YMF71x based sound card & Official VOGONS thread about it
Newly made 4MB 60ns 30pin SIMMs ~
mida sa loed ? nagunii aru ei saa 😜

Reply 5 of 9, by Disruptor

User metadata
Rank Oldbie
Rank
Oldbie
Tiido wrote on 2026-04-04, 12:05:
It doesn't support 16 bits, and if the 12bit playback it can do is anything like all the other Yamaha sound chips, it is in inte […]
Show full quote

It doesn't support 16 bits, and if the 12bit playback it can do is anything like all the other Yamaha sound chips, it is in interleaved format that requires translation rather than just 16bit data with 4 unused bits.

For example 2 samples are spread over 3 bytes in this way (L=first sample, H=second sample, numbers being bits of the individual samples) :

Byte 0
LLLL LLLL
7654 3210

Byte 1
HHHH LLLL
1198 1190
10 10

Byte 2
HHHH HHHH
7654 3210

Thank you for that project.
Unfortuneately my AdLib Gold is out of range to me.

It is 12 bits depth per channel indeed.
But AdLib Gold's 12 bits sound better than the noisy 16 bits of later sound cards, maybe until Turtle Beach MultiSound.

Reply 6 of 9, by carlostex

User metadata
Rank l33t
Rank
l33t
Tiido wrote on 2026-04-04, 12:05:
It doesn't support 16 bits, and if the 12bit playback it can do is anything like all the other Yamaha sound chips, it is in inte […]
Show full quote

It doesn't support 16 bits, and if the 12bit playback it can do is anything like all the other Yamaha sound chips, it is in interleaved format that requires translation rather than just 16bit data with 4 unused bits.

For example 2 samples are spread over 3 bytes in this way (L=first sample, H=second sample, numbers being bits of the individual samples) :

Byte 0
LLLL LLLL
7654 3210

Byte 1
HHHH LLLL
1198 1190
10 10

Byte 2
HHHH HHHH
7654 3210

thanks for your input Tiido!! 😀 The AdLib Gold DAC should use interleaved format indeed, but on Stereo modes only. It also has 3 data formats:

Format 0 is an 1-byte format which contains the 8 most significant bits of
the sample.

Format 1 is a 2-byte format. The first byte contains the 8 least significant
bits. The lower nibble of the second byte contains the 4 most significant
bits of the sample. The MSB of the sample is repeated in all bits of the
upper nibble.

Format 2 is a 2-byte format as well. The upper nibble of the first byte
contains the 4 LSBs of the sample. The lower nibble is zero. The
second byte contains the 8 MSB's.

As it is right now, i have tested some 25 games successfully. 2 of those give me white noise issues on high 16bit stereo modes (Discworld 2 and The Gene Machine). I'm gonna try something today, to do some on the fly driver level conversion for format 2, which should be the ideal one for 16bit modes, considering that's how AIL2 has the data formats set for 16bit modes. Is there any AIL2 game that uses 16bit stereo audio?

In any case, if i'm unsuccessful, for those games one can just disable the 16bit stereo mode and MSS3 will be forced to assign another mode. I tried this already and the issues with white noise playing sporadically on those games stopped. However i don't want to disable the 16bit modes for all games, i've been testing Little Big Adventure 2 and that one uses 16bit Stereo at 22050khz on the Adlib Gold just fine without any issues so far. Not allowing it to use 16bit stereo is a downgrade so i want the final version to go out with all modes enabled. Let's see what i can do. All keep in mind that myself doing this is like being heavily drunk trying to walk 200 meters in a straight line. That's what you get when a dum dum tries to develop a low level driver.

All in all, i'm pretty happy with current progress. If you have an AdlIb Gold or a GoldLib clone and you try it with a game that uses HMI SOS drivers you probably, like i did, run into PCM audio that plays on one channel only. What i imagine is that they didn't set register 9 on the MMA chip properly. On initialization, HMI SOS probably sets bits 6:5 on that register as 10 instead of 11 or doesn't set them at all and plays as the card was previously configured. Having those bits as 10 results in audio playing only on the right channel, which is exactly what happens on my system. But...if i play an AIL2 game before or an MSS3 one with my driver, or i use GOLD software first to play the "Get ready for sound so rich...it has to be called gold!" test sample and i go back to any HMI SOS game THEN it plays on both channels. HMI SOS can probably be patched for this on a game basis but that's a lot of work. I'd rather just create a COM file that sets MMA register 9 correctly and run it before launching a HMI game through a bat file. This is one thing that my driver at least, does right.

Reply 7 of 9, by Tiido

User metadata
Rank l33t
Rank
l33t

Aha, it works different. You'll definitely want the Format 2 for 16bit playback, then you won't have to shift every 16bit sample right 4 times, things should work out of box with normal 16bit signed sample data.

T-04YBSC, a new YMF71x based sound card & Official VOGONS thread about it
Newly made 4MB 60ns 30pin SIMMs ~
mida sa loed ? nagunii aru ei saa 😜

Reply 8 of 9, by carlostex

User metadata
Rank l33t
Rank
l33t
Tiido wrote on 2026-04-06, 13:06:

Aha, it works different. You'll definitely want the Format 2 for 16bit playback, then you won't have to shift every 16bit sample right 4 times, things should work out of box with normal 16bit signed sample data.

Actually like i stated before they do... DIGTEST, which is the official MSS3 tool to test the driver plays all modes in all sampling rates absolutely fine. It's just some games (Discworld II, The Gene Machine...and there might be a couple others) that output white noise every now and then. And there's like a pop every second. I have no idea how to fix that or if it's even fixable. For those games, if i disable 16bit stereo mode in the driver (just change one byte from 1 to 0) then the games play fine.

On games that don't exhibit this issue the AdLib Gold actually sounds pretty good, far better than any Sound Blaster up to the Sound Blaster Pro. And probably still cleaner than an old SB16, with maybe the exception of AWE 64. I don't know if this white noise issue is related to the internal 16bit -> 12 bit so i think the driver is pretty much done. If you'd like to take a look at my code and call me an idiot 😀 for my mistakes i'd actually be very grateful and send it your way, this is more than likely to have some mistakes inside still.

Needless to say the AdLib Gold is a one shot DMA type card, no auto init DMA, so i have to use fixed buffers. Changing buffer sizes to bigger or smaller never helped to be honest. Making them too high and some games, like Little Big Adventure 2 makes the game complain about buffer being too high.

I'll post the "final" version later today.

EDIT: Latest version uploaded!

Reply 9 of 9, by carlostex

User metadata
Rank l33t
Rank
l33t

If anyone has issues with 16bit modes of the driver just hex edit the file. At offset 463 you'll find 4 byes with value of 1.

1st byte is for 8 bit Mono
2nd byte is for 16 bit Mono
3rd byte is for 8 bit Stereo
4th byte is for 16 bit Stereo

To disable 16 bit modes you would just change 2nd and 4th byte to 0 value.