Page 1 of 1

Step 2.x games by AM3 require step 1.x PCI ID?

PostPosted: Sat Aug 19, 2023 11:14 am
by gm_matthew
We've known for years that the step 2.x games by AM3 - Dirt Devils, L.A. Machineguns, Virtual-On 2 and Magical Truck Adventure - all require the step 1.x PCI ID to run (the games hang if we use anything else), but I have a theory as to what is actually supposed to happen.

On step 1.x, retrieving the video board PCI ID code via MPC105/106 returns 0x16C311DB, which is from Mercury (315-5827); this is the chip directly connected to the PCI slot on the step 1.x video board. On step 2.x, doing the same thing returns 0x178611DB from the chip (315-6022) that is directly connected to the PCI slot on the step 2.x video board; maybe this is the DMA device that replaces the NCR 53C810 on step 2.x?

We've always assumed that both MPC106 and the step 2.x DMA device retrieve the same PCI ID code, but my theory is that retrieving a PCI ID code using the DMA device actually returns the PCI ID of Mercury, which is still 0x16C311DB even though it has a different chip number (315-6057) on step 2.x boards; perhaps it was preserved for compatibility reasons.

This would explain why the step 2.x games by AM3 use both of these different methods to retrieve PCI ID codes as documented in Real3D.cpp; each method is meant to retrieve a different code!

I've tested and confirmed every step 2.x game works with the DMA device always returning 0x16C311DB and MPC106 always returning 0x178611DB.

Re: Step 2.x games by AM3 require step 1.x PCI ID?

PostPosted: Sat Aug 19, 2023 2:29 pm
by Bart
Given that there are multiple ASICs on the Real3D board, this makes sense. If the ASIC providing DMA is not Mercury, then it makes complete sense that it would return a different code. Question: do we know which ASIC 0x16c311db corresponds to? Also, how did you work out which ASIC is connected to the PCI sot? I assume you've looked at some schematics or traced the PCB?

I think it would be great if we emulated this correctly. CReal3D::SetStepping() probably should not take any PCI ID codes and instead, based on stepping, the correct ones should be filled. It would also be nice to have all of these codes defined as constants or enums in Real3D.h under CReal3D with descriptive names, especially if the corresponding ASIC is known.

Re: Step 2.x games by AM3 require step 1.x PCI ID?

PostPosted: Sat Aug 19, 2023 2:58 pm
by gm_matthew
I looked at photos of each board to determine which ASIC on each one is connected to the PCI slot, here's step 1.x and here's step 2.x. The annotation of the step 2.x board in this forum was very helpful, taught me a lot about how the video board works before I even started diving into JTAG or Real3D firmware.

0x16C311DB corresponds to Mercury (315-5827); 0x16C3 is 5827 in decimal. The step 2.x version of Mercury is numbered 315-6057 but I haven't found any mention of 0x17A911DB anywhere, plus the AM3 games still expect to see 0x16C311DB so I presume that it must have the same PCI ID code.