• Updated 2023-07-12: Hello, Guest! Welcome back, and be sure to check out this follow-up post about our outage a week or so ago.

The Pro Audio Spectrum 16 NuBus's YMF262 FM synthesizer...

Phipli

Well-known member
In
I'm definitely in 32-bit mode, I run 7.6.1. Regardless, I still find that $E0000000 isn't readable. If I do it in a C program, I actually get dumped into MacsBug with a Bus Error. Weird. I am also 100% confident that the card works, it is detected in TattleTech and the drivers work. I can get sound out of it normally. It wouldn't have anything to do with the fact that TattleTech says that slot $0E is mapped to "pseudo slot 3", right? Does that change anything?

Anyway I'm just running with $FE000000 now. I've got a program running right now that is running through the address space trying the OPL detection routine. I don't really have confidence that it will work, as I noticed also that if I try writing any of the card memory, if I read the value back, I still end up with 0's. It's probable that a lot of this memory space is not used and they hid the actual PAS registers somewhere in there, hence scanning the entire memory space.

Another thing I thought about is that they could expose the OPL3 in a different way than on the PC. On PC it's through an I/O port where you send the target register to 0x388 and then the data to 0x389. Since this is NuBus and there is a ton of memory-mapped I/O space, I figure there's a chance they may have just exposed the registers directly. I think I may write a second version that works on that assumption. There's also the chance that I completely messed it up translating the code to MacOS (mostly getting it working without "inp" and "outp" like on DOS+Watcom C) and that's why it isn't finding anything 🙃

The closest thing to a result I've run into so far is that if I write any value to $FE000B88 I get a little click out of the speaker. The only reason I mention this is that it happens to be exactly 0x800 bytes added to 0x388... you know, 0x388 as in where it would be on a PC. However, playing around with it, I couldn't get anything to happen apart from that short click. If that's where the OPL sits, it isn't responding as I expect it to, even if I send it data to play a note instead of doing a detection routine. I may have just hit a port used for normal wave output. EDIT: Wouldn't you know it... I looked at some old PAS code in the Linux kernel and they read the PAS status register from... 0xB89. Oddly close, wouldn't you say? (Though I doubt that's supposed to make it click)



I have read this too, but I was under the impression it was specific "bundled" versions of the games - which don't seem to have surfaced anywhere. If they're really out there, they likely would provide invaluable information upon disassembly.

EDIT2: Some other research regarding this sorry card. For instance, here's someone about 30 years ago asking the same question we are asking! Also interestingly he mentions his driver disk being labeled 2.0! As far as I know, the latest drivers we have are 1.0.4. Here's a mention of Version 1.3 as well. Of course both of these point to the same site, and it's one that predates the Wayback Machine so it's long gone.
Someone in the comments here offered to upload version 2, but nobody responded to them :(

 

Phipli

Well-known member
I have read this too, but I was under the impression it was specific "bundled" versions of the games - which don't seem to have surfaced anywhere. If they're really out there, they likely would provide invaluable information upon disassembly.
The install manual mentions the chip in PASsing :

1000014689.jpg
 

Phipli

Well-known member
I have that...I'll try to get an image of the version 2 disk up on the garden.

View attachment 66644
Please do, it would be very much appreciated.

If you could ship my dad your breakout and cable as well, that would be even more appreciated :ROFLMAO:

Sadly he has a card but no breakout. Real shame. I think it's one of these and not the similar video capture card. I've never seen it to be honest.
 

Daniël

Well-known member
Sadly he has a card but no breakout. Real shame. I think it's one of these and not the similar video capture card. I've never seen it to be honest.

Same, though mine's the LCPDS version. I did start a thread about seeing if it could be reproduced, but it does contain a custom IC related to the audio inputs IIRC, and I don't know if the card functions without that for the purposes of audio output, gameport and MIDI functionality.
 

Mr. Ksoft

Well-known member
Thanks indeed! Good to have it. It looks like the core extension is still 1.0.4, but has a slightly newer Mixer panel at the very least.

Anyway, I'm not sure I can get further with my brute force attempts. I've attached my program if anyone wants to play with it or make improvements. I'm very much an amateur so there's a chance I made a mistake anyway (easy to make mistakes with pointers!) Executable is included but it's hard coded for Slot E ($FE000000). Change the code if you need a different slot - CodeWarrior project is included.
 

Attachments

  • PASPoke.sit
    75.6 KB · Views: 1

Phipli

Well-known member
Thanks indeed! Good to have it. It looks like the core extension is still 1.0.4, but has a slightly newer Mixer panel at the very least.

Anyway, I'm not sure I can get further with my brute force attempts. I've attached my program if anyone wants to play with it or make improvements. I'm very much an amateur so there's a chance I made a mistake anyway (easy to make mistakes with pointers!) Executable is included but it's hard coded for Slot E ($FE000000). Change the code if you need a different slot - CodeWarrior project is included.
Why don't you use a continuity tester to see what pins 4 and 5 are connected to from the OPL? See if they go to some logic, or a custom chip, or what? It would be informative.
 

Mr. Ksoft

Well-known member
OPL3 pins 4 and 5 go to pin 125 and 126 on the MVD101-D "Spectrum" IC respectively. The chip is definitely hooked up and running, it's connected to 5V from the slot, and the data lines are connected to the MVD101-D as well.

The MVD101-D is the exact same chip used on the PC PAS16. In fact, ALL of the Media Vision chips are the same as the PC card. Which then got me thinking about how the PC version of the card works, and I remembered something that suddenly makes me realize that of course my brute-force didn't work. Even on the PC, you need the MVSOUND.SYS TSR to activate the Sound Blaster compatibility including the OPL. That driver obviously does some magic to talk to the OPL. Might need to see what kind of writes it is doing...

Also, going back to the fact that poking $FE000B88 on the NuBus caused a click on the speaker, that may very well be where to start. Might need to replicate what MVSOUND.SYS does in some way. Guess if I want to do this, I'll need to learn to understand some x86 assembly!
 

Phipli

Well-known member
OPL3 pins 4 and 5 go to pin 125 and 126 on the MVD101-D "Spectrum" IC respectively. The chip is definitely hooked up and running, it's connected to 5V from the slot, and the data lines are connected to the MVD101-D as well.

The MVD101-D is the exact same chip used on the PC PAS16. In fact, ALL of the Media Vision chips are the same as the PC card. Which then got me thinking about how the PC version of the card works, and I remembered something that suddenly makes me realize that of course my brute-force didn't work. Even on the PC, you need the MVSOUND.SYS TSR to activate the Sound Blaster compatibility including the OPL. That driver obviously does some magic to talk to the OPL. Might need to see what kind of writes it is doing...

Also, going back to the fact that poking $FE000B88 on the NuBus caused a click on the speaker, that may very well be where to start. Might need to replicate what MVSOUND.SYS does in some way. Guess if I want to do this, I'll need to learn to understand some x86 assembly!
Yup, if the OPL is behind a custom chip, we can't even assume it is memory mapped, so you'll need to work out how the PC version uses it like you say. If you can work out the base address of the MVD101-D by comparing commands that we know from PC and Mac, you should be able to figure where the OPL related commands for the MVD101-D are in the Mac Map.

Wonder if you're going to have some endian confusion?
 

paws

Well-known member
Another thing I thought about is that they could expose the OPL3 in a different way than on the PC. On PC it's through an I/O port where you send the target register to 0x388 and then the data to 0x389. Since this is NuBus and there is a ton of memory-mapped I/O space, I figure there's a chance they may have just exposed the registers directly. I think I may write a second version that works on that assumption.
I think that's just how the YMF262 works? It has two address pins, and the writing to addresses 0b00 and 0b01 are "address writes", writing to 0b1x is a "data write".

In general, since all the chips are the same, I'd work from the assumption that it's the simplest adaptation of the ISA version possible. But I also wonder about the endianness, or maybe just the data is shifted.

I hope you figure this out!
 

Mr. Ksoft

Well-known member
Definitely worried about the endianness... but first gotta get the card to respond to anything at all :) Then I can see what sort of bits I get back and that should answer the question.

Good news though, the PC's SDK is available: http://www.symphoniae.com/soundcard/MediaVision/SDK/PASSDK_201.zip
Lots of info in there, though so far from reading it, it's just acting like the OPL3 registers are exposed. I wonder if they still expect MVSOUND.SYS to do some heavy lifting first to initialize. There is some sample code I can use for querying the hardware version, so maybe I can at least get that working.

Luckily, I have a real PC PAS16, so I can do some testing with/without the driver and see what happens...
 

demik

Well-known member
Form what I gathered while probing on mine, it's just an ISA card with a NuBus interface. I've not access to mine right now to probe the YMC

Also NuBus is endian safe, even maybe little endian on the bus itself.

Does it change anything if you read 8 bit by 8 bit ?
 

NJRoadfan

Well-known member
The MVD101D appears to partly function as a bus decoder. The PAS16 card's hardware resources are soft configurable. MVSOUND.SYS (and likely the Mac extension) tell the chip where to connect the IRQ and I/O addressing lines of the various parts of the card. Normally Adlib compatible cards wire up the OPL3 directly to 0x388h. Its likely those lines aren't connected at all until the MVD101D is programmed at boot. I'm actually surprised Media Vision recycled this chip for Nubus as they needed to add additional bus interface logic regardless.
 

demik

Well-known member
Traced the board and can confirm @NJRoadfan findings

The YMF bus lines are wired to the MVD101D AND a 74LS245 buffer (bottom right, AU12F) AND to the MVA508 (mixer chip) through R301-R308 100Ω resistors.

I see no continuity between the YMF and the NuBus part of the card (left). Maybe missed something.
Output is wired to a YAC512 DAC (U9A) and get lost somewhere into the analog domain.

Also there is a "nice" pull-up resistor on the /IRQ line, dunno how it can work that way…

mediaVision_PAS16_nubus_YMF.jpeg
 

demik

Well-known member
@KennyPowers, @Mr. Ksoft, What MacOS version are you using ? I seem to have trouble having sound out of the codec. MacOS control panel reports a 0kHz ramping rate (Mac OS 8.1) Alert sounds make the menu bar blink as well
 

KennyPowers

Well-known member
@KennyPowers, @Mr. Ksoft, What MacOS version are you using ? I seem to have trouble having sound out of the codec. MacOS control panel reports a 0kHz ramping rate (Mac OS 8.1) Alert sounds make the menu bar blink as well
I don't currently have the card installed, but the person I got it from used it in a IIci running either 7.1 or 7.5.x IIRC.
 
Top