VOGONS


First post, by superfury

User metadata
Rank l33t
Rank
l33t

I see some weird things happening on the Sound Blaster port range when Windows 98 boots:
Reads from port 229(interleaved with writes to port 279 and A79)?
Reads from port 226(uninterleaved). This is the DSP reset register when written?
Reads from port 220. According to specs, the Game Blaster Address

Anyone knows what those are?

Author of the UniPCemu emulator.
UniPCemu Git repository
UniPCemu for Android, Windows and PSP on itch.io

Reply 1 of 1, by superfury

User metadata
Rank l33t
Rank
l33t

I've done a bit of looking into the used addresses by the Sound Blaster:
Read: 3 out of 4 bits decoded by the DSP?
0 (0000) C/MS
2 (0010) C/MS
4 (0100) WHAT IS THIS? DSP Write buffer Status?
6 (0110) WHAT IS THIS? DSP Read buffer status & IRQ ACK? Keeps getting read for some reason?
8 (1000) Adlib status
A (1010) DSP Read data
C (1100) DSP Write buffer status
E (1110) DSP Read buffer status&IRQ ACK

Write:
0 (0000) CMS Data 0
1 (0001) CMS Register 0
2 (0010) CMS Data 1
3 (0011) CMS Register 1
4 (0100) WHAT IS THIS? DSP Write buffer?
6 (0110) DSP reset port
8 (1000) Adlib register (100x=Adlib redirect instead? Same chip as 0x388|bit0)
(9 (1001) Adlib data, see above)
A (1010) -
C (1100) DSP Write buffer

So it looks like upper 3 bits are used to redirect to different chips:
Reads:
000b: C/MS
001b: C/MS
010b: Same as 110?
011b: Same as 110?
100b: Adlib chip. Bit 0 select address line for said chip.
101b: DSP Read data
110b: DSP Write buffer status
111b: DSP Read buffer status & IRQ ACQ.

Writes:
000b: CMS data/register1
001b: CMS data/register2
010b: Unknown. Is this aliased to 110b?
011b: DSP reset port? Don't know if the low bit is used? Probably not?
100b: Adlib chip select. Bit 0 selects Address line for said chip?
101b: Unknown?
110b: Unknown?
111b: Unknown?

So, looking at the data, you can assume:
cases:
000: Wired to CMS chip 0.
001: Wired to CMS chip 1.
010: Wired to DSP?
011: Wired to DSP?
100: Wired to OPL2 chip
101: Wired to DSP?
110: Wired to DSP?
111: Wired to DSP?
And bit 0 of the address is the A0 input to the selected chips?

Edit: Hmmm... https://github.com/schlae/snark-barker/blob/m … SnarkBarker.pdf sheds some light on that:
000: CMS chip 0. A0 is connected to the chip.
001: CMS chip 1. A0 is connected to the chip.
010: Not selected
011: DSPRST_CS. So this sets the line on the DSP RST? Only bit 0 is used to archieve an effect? Not actually directly connected to the DSP(triggers DSP reset through another chip). A0 is ignored. D0 is triggering RESET pin and latched by a chip in between. Reads are not connected to anything, thus floating the bus.
100: OPL2 chip CS. A0 is connected to the chip.
101: DSPRD_CS. So this sets the line on the DSP RD? So A0 is ignored?
110: DSPWR_CS. So this sets the line on the DSP WR? So A0 is ignored?
111: DAV_CS. So this sets the line on the DAV? Connected to DAV(Data Available?), reads bit 7 on D7. A0 is ignored?

Author of the UniPCemu emulator.
UniPCemu Git repository
UniPCemu for Android, Windows and PSP on itch.io