VOGONS


First post, by Makus

User metadata
Rank Newbie
Rank
Newbie

Hi to all!
in this post they speculate the issue is caused by inaccurate 8088 CPU emulation: https://github.com/86Box/86Box/issues/705
In this video you can hear the sounds missing: https://www.youtube.com/watch?v=krb4ave2_Mg
There is any setting I can try?
Many thanks.

Reply 1 of 10, by ripsaw8080

User metadata
Rank DOSBox Author
Rank
DOSBox Author

I suspect it has more to do with speaker emulation than CPU timing.

The ECE build has a speaker patch with some improvements, so you might try the game there to see if the sounds are audible.

Reply 5 of 10, by ripsaw8080

User metadata
Rank DOSBox Author
Rank
DOSBox Author

For the helicopter sound, the game alternates between square wave counter values of 1 and 2, which are not audible frequencies, but just the re-programming of the timer counter value apparently causes a subtle noise. I suppose it could be considered an undesirable artifact, like the "snow" effect seen on old CGA hardware, but the game is making use of it and DOSBox does not emulate it.

Reply 7 of 10, by _Rob

User metadata
Rank Member
Rank
Member

This issue has been resolved in the DOSBox-X fork in a recent commit.
https://github.com/joncampbell123/dosbox-x/co … ab1a65e2edf6f2f

For now you do need to compile it yourself. Hopefully there will be a new binary release in the next days.

Reply 8 of 10, by Marty2dos

User metadata
Rank Newbie
Rank
Newbie
		if (p->write_latch == 0)
{
if (p->bcd == false)
p->cntr = 0x10000;
else
p->cntr=9999;

/* ========================================= BEGIN === */
}

else if (p->write_latch == 1 && p->mode == 3)
{

if (p->bcd == false)
p->cntr=0x10001;
else
p->cntr=10000;

/* =========================================== END === */

} else p->cntr = p->write_latch;

if ((!p->new_mode) && (p->mode == 2) && (counter == 0)) {

Is this OK?
I Modifed and Compare ist with the Video. Now I hear the sounds.

Reply 9 of 10, by ripsaw8080

User metadata
Rank DOSBox Author
Rank
DOSBox Author

Maybe. An alternate idea is:

     if (p->bcd==true) BCD2BIN(p->write_latch);
if (p->write_state != 0) {
+ if (p->mode == 3) p->write_latch &= 0xfffe;
if (p->write_latch == 0) {
if (p->bcd == false) p->cntr = 0x10000;
else p->cntr=9999;
} else p->cntr = p->write_latch;

Seems like what the hardware might do instead of making special cases, but has implications for limiting possible frequencies, so needs to be checked.