mirror of
https://github.com/RetroDECK/Supermodel.git
synced 2024-11-25 15:15:40 +00:00
Use correct PCI IDs (Harry Tuttle)
This commit is contained in:
parent
80cf1f9b52
commit
9f5a19a04a
|
@ -457,7 +457,7 @@
|
||||||
</hardware>
|
</hardware>
|
||||||
<roms>
|
<roms>
|
||||||
<patches>
|
<patches>
|
||||||
<!-- Skips over cabinet network error (not required, but speeds up boot) -->
|
<!-- Skips over cabinet network error -->
|
||||||
<patch region="crom" bits="32" offset="0x4a45e4" value="0x60000000" />
|
<patch region="crom" bits="32" offset="0x4a45e4" value="0x60000000" />
|
||||||
</patches>
|
</patches>
|
||||||
<region name="crom" stride="8" chunk_size="2" byte_swap="true">
|
<region name="crom" stride="8" chunk_size="2" byte_swap="true">
|
||||||
|
@ -574,7 +574,7 @@
|
||||||
</hardware>
|
</hardware>
|
||||||
<roms>
|
<roms>
|
||||||
<patches>
|
<patches>
|
||||||
<!-- Skips over cabinet network error (not required, but speeds up boot) -->
|
<!-- Skips over cabinet network error -->
|
||||||
<patch region="crom" bits="32" offset="0x4a45e4" value="0x60000000" />
|
<patch region="crom" bits="32" offset="0x4a45e4" value="0x60000000" />
|
||||||
</patches>
|
</patches>
|
||||||
<region name="crom" stride="8" chunk_size="2" byte_swap="true">
|
<region name="crom" stride="8" chunk_size="2" byte_swap="true">
|
||||||
|
@ -850,11 +850,7 @@
|
||||||
</inputs>
|
</inputs>
|
||||||
</hardware>
|
</hardware>
|
||||||
<roms>
|
<roms>
|
||||||
<patches>
|
<!-- Base offset of program in CROM space: 0x6473c0 (0x0473c0 in the ROM) -->
|
||||||
<!-- Base offset of program in CROM space: 0x6473c0 (0x473c0 in the ROM) -->
|
|
||||||
<patch region="crom" bits="32" offset="0x0D8C4C" value="0x00000002" /> <!-- comm. mode: 00=master, 01=slave, 02=satellite -->
|
|
||||||
<patch region="crom" bits="32" offset="0x13FE38" value="0x38840004" /> <!-- an actual bug in the game code -->
|
|
||||||
</patches>
|
|
||||||
<region name="crom" stride="8" chunk_size="2" byte_swap="true">
|
<region name="crom" stride="8" chunk_size="2" byte_swap="true">
|
||||||
<file offset="0" name="epr-19890b.20" crc32="0x9C16C3CC" />
|
<file offset="0" name="epr-19890b.20" crc32="0x9C16C3CC" />
|
||||||
<file offset="2" name="epr-19889b.19" crc32="0xD1F7E44C" />
|
<file offset="2" name="epr-19889b.19" crc32="0xD1F7E44C" />
|
||||||
|
@ -1128,6 +1124,10 @@
|
||||||
</inputs>
|
</inputs>
|
||||||
</hardware>
|
</hardware>
|
||||||
<roms>
|
<roms>
|
||||||
|
<patches>
|
||||||
|
<!-- Secret debug menu -->
|
||||||
|
<patch region="crom" bits="32" offset="0x199DE8" value="0x00050208" />
|
||||||
|
</patches>
|
||||||
<region name="crom" stride="8" chunk_size="2" byte_swap="true">
|
<region name="crom" stride="8" chunk_size="2" byte_swap="true">
|
||||||
<file offset="0" name="epr-19734.20" crc32="0xBE897336" />
|
<file offset="0" name="epr-19734.20" crc32="0xBE897336" />
|
||||||
<file offset="2" name="epr-19733.19" crc32="0x6565E29A" />
|
<file offset="2" name="epr-19733.19" crc32="0x6565E29A" />
|
||||||
|
@ -1639,6 +1639,7 @@
|
||||||
</hardware>
|
</hardware>
|
||||||
<roms>
|
<roms>
|
||||||
<patches>
|
<patches>
|
||||||
|
<!-- Unemulated JTAG stuff -->
|
||||||
<patch region="crom" bits="32" offset="0x7c0c4" value="0x60000000" />
|
<patch region="crom" bits="32" offset="0x7c0c4" value="0x60000000" />
|
||||||
<patch region="crom" bits="32" offset="0x7c0c8" value="0x60000000" />
|
<patch region="crom" bits="32" offset="0x7c0c8" value="0x60000000" />
|
||||||
<patch region="crom" bits="32" offset="0x7c0cc" value="0x60000000" />
|
<patch region="crom" bits="32" offset="0x7c0cc" value="0x60000000" />
|
||||||
|
@ -1810,14 +1811,8 @@
|
||||||
</hardware>
|
</hardware>
|
||||||
<roms>
|
<roms>
|
||||||
<patches>
|
<patches>
|
||||||
<patch region="crom" bits="32" offset="0xf0e48" value="0x60000000" />
|
<!-- skip force feedback lever check -->
|
||||||
<patch region="crom" bits="32" offset="0x043dc" value="0x48000090" /> <!-- related to joystick feedback -->
|
<patch region="crom" bits="32" offset="0xf6e44" value="0x60000000" /> <!-- from MAME -->
|
||||||
<patch region="crom" bits="32" offset="0x029a0" value="0x60000000" /> <!-- skip force feedback setup? -->
|
|
||||||
<patch region="crom" bits="32" offset="0x02a0c" value="0x60000000" />
|
|
||||||
<!-- Additional patches from MAME for test menu -->
|
|
||||||
<patch region="crom" bits="32" offset="0xf776c" value="0x60000000" /> <!-- unemulated JTAG stuff -->
|
|
||||||
<patch region="crom" bits="32" offset="0xf7770" value="0x60000000" /> <!-- "" -->
|
|
||||||
<patch region="crom" bits="32" offset="0xf7774" value="0x60000000" /> <!-- "" -->
|
|
||||||
</patches>
|
</patches>
|
||||||
<region name="crom" stride="8" chunk_size="2" byte_swap="true">
|
<region name="crom" stride="8" chunk_size="2" byte_swap="true">
|
||||||
<file offset="0" name="epr-21382a.20" crc32="0x69BAF117" />
|
<file offset="0" name="epr-21382a.20" crc32="0x69BAF117" />
|
||||||
|
@ -1876,7 +1871,8 @@
|
||||||
<file offset="0x800000" name="mpr-21377.22" crc32="0x720621F8" />
|
<file offset="0x800000" name="mpr-21377.22" crc32="0x720621F8" />
|
||||||
<file offset="0xC00000" name="mpr-21378.24" crc32="0x1FCF715E" />
|
<file offset="0xC00000" name="mpr-21378.24" crc32="0x1FCF715E" />
|
||||||
</region>
|
</region>
|
||||||
<!-- Force feedback controller prg
|
<!-- Force feedback controller prg -->
|
||||||
|
<!--
|
||||||
<region name="ffb_program" stride="1" chunk_size="1">
|
<region name="ffb_program" stride="1" chunk_size="1">
|
||||||
<file offset="0" name="epr-21119.ic8" crc32="0x65082B14" />
|
<file offset="0" name="epr-21119.ic8" crc32="0x65082B14" />
|
||||||
</region>
|
</region>
|
||||||
|
@ -1902,6 +1898,7 @@
|
||||||
</hardware>
|
</hardware>
|
||||||
<roms>
|
<roms>
|
||||||
<patches>
|
<patches>
|
||||||
|
<!-- skip force feedback lever check -->
|
||||||
<patch region="crom" bits="32" offset="0xf6dd0" value="0x60000000" /> <!-- from MAME -->
|
<patch region="crom" bits="32" offset="0xf6dd0" value="0x60000000" /> <!-- from MAME -->
|
||||||
</patches>
|
</patches>
|
||||||
<region name="crom" stride="8" chunk_size="2" byte_swap="true">
|
<region name="crom" stride="8" chunk_size="2" byte_swap="true">
|
||||||
|
@ -2293,16 +2290,6 @@
|
||||||
</inputs>
|
</inputs>
|
||||||
</hardware>
|
</hardware>
|
||||||
<roms>
|
<roms>
|
||||||
<patches>
|
|
||||||
<!--
|
|
||||||
VS215 is a modification of VS2 that runs on Step 1.5 boards. I
|
|
||||||
suspect the code here is trying to detect the system type.
|
|
||||||
|
|
||||||
The patch branches to 0xFFF01630:
|
|
||||||
0x48000000 + (0xFFF01630 - 0xFFF001A8) = 0x48001488
|
|
||||||
-->
|
|
||||||
<patch region="crom" bits="32" offset="0x1001a8" value="0x48001488" />
|
|
||||||
</patches>
|
|
||||||
<region name="crom" stride="8" chunk_size="2" byte_swap="true">
|
<region name="crom" stride="8" chunk_size="2" byte_swap="true">
|
||||||
<file offset="0" name="epr-19897.20" crc32="0x25A722A9" />
|
<file offset="0" name="epr-19897.20" crc32="0x25A722A9" />
|
||||||
<file offset="2" name="epr-19898.19" crc32="0x4389D9CE" />
|
<file offset="2" name="epr-19898.19" crc32="0x4389D9CE" />
|
||||||
|
@ -2330,10 +2317,6 @@
|
||||||
</inputs>
|
</inputs>
|
||||||
</hardware>
|
</hardware>
|
||||||
<roms>
|
<roms>
|
||||||
<patches>
|
|
||||||
<!-- See note in VS215 -->
|
|
||||||
<patch region="crom" bits="32" offset="0x1001a8" value="0x48001488" />
|
|
||||||
</patches>
|
|
||||||
<region name="crom" stride="8" chunk_size="2" byte_swap="true">
|
<region name="crom" stride="8" chunk_size="2" byte_swap="true">
|
||||||
<file offset="0" name="epr-19803.20" crc32="0x1E55A5B8" />
|
<file offset="0" name="epr-19803.20" crc32="0x1E55A5B8" />
|
||||||
<file offset="2" name="epr-19804.19" crc32="0xBBACA578" />
|
<file offset="2" name="epr-19804.19" crc32="0xBBACA578" />
|
||||||
|
@ -2362,18 +2345,6 @@
|
||||||
<encryption_key>0x29234e96</encryption_key>
|
<encryption_key>0x29234e96</encryption_key>
|
||||||
</hardware>
|
</hardware>
|
||||||
<roms>
|
<roms>
|
||||||
<patches>
|
|
||||||
<!--
|
|
||||||
Offset of program relative to CROM base: 0x600000 (0x200000 in the
|
|
||||||
ROM itself). Inexplicably, at PC=AFC1C, a call is made to FC78, which
|
|
||||||
is right in the middle of some totally unrelated initialization code
|
|
||||||
(ASIC checks). This causes an invalid pointer to be fetched. Perhaps
|
|
||||||
FC78 should be overwritten with other program data by then? Why is it
|
|
||||||
not? Or, 300138 needs to be written with a non-zero value, it is
|
|
||||||
loaded from EEPROM but is 0.
|
|
||||||
-->
|
|
||||||
<patch region="crom" bits="32" offset="0x2afc1c" value="0x60000000" /> <!-- 0x6afc1c from base of CROM -->
|
|
||||||
</patches>
|
|
||||||
<region name="crom" stride="8" chunk_size="2" byte_swap="true">
|
<region name="crom" stride="8" chunk_size="2" byte_swap="true">
|
||||||
<file offset="0" name="epr-20920.20" crc32="0x428D05FC" />
|
<file offset="0" name="epr-20920.20" crc32="0x428D05FC" />
|
||||||
<file offset="2" name="epr-20919.19" crc32="0x7A0713D2" />
|
<file offset="2" name="epr-20919.19" crc32="0x7A0713D2" />
|
||||||
|
@ -2448,10 +2419,6 @@
|
||||||
</inputs>
|
</inputs>
|
||||||
</hardware>
|
</hardware>
|
||||||
<roms>
|
<roms>
|
||||||
<patches>
|
|
||||||
<!-- See note in VS215 -->
|
|
||||||
<patch region="crom" bits="32" offset="0x1001a8" value="0x48001488" />
|
|
||||||
</patches>
|
|
||||||
<region name="crom" stride="8" chunk_size="2" byte_swap="true">
|
<region name="crom" stride="8" chunk_size="2" byte_swap="true">
|
||||||
<file offset="0" name="epr-20912.20" crc32="0xCD2C0538" />
|
<file offset="0" name="epr-20912.20" crc32="0xCD2C0538" />
|
||||||
<file offset="2" name="epr-20911.19" crc32="0xACB8FD97" />
|
<file offset="2" name="epr-20911.19" crc32="0xACB8FD97" />
|
||||||
|
@ -2581,10 +2548,6 @@
|
||||||
</inputs>
|
</inputs>
|
||||||
</hardware>
|
</hardware>
|
||||||
<roms>
|
<roms>
|
||||||
<patches>
|
|
||||||
<!-- See note in VS215 -->
|
|
||||||
<patch region="crom" bits="32" offset="0x1001a8" value="0x48001488" />
|
|
||||||
</patches>
|
|
||||||
<region name="crom" stride="8" chunk_size="2" byte_swap="true">
|
<region name="crom" stride="8" chunk_size="2" byte_swap="true">
|
||||||
<file offset="0" name="epr-21534.20" crc32="0xD49AE219" />
|
<file offset="0" name="epr-21534.20" crc32="0xD49AE219" />
|
||||||
<file offset="2" name="epr-21533.19" crc32="0xEA728471" />
|
<file offset="2" name="epr-21533.19" crc32="0xEA728471" />
|
||||||
|
|
|
@ -23,15 +23,12 @@ CNew3D::CNew3D(const Util::Config::Node &config, std::string gameName)
|
||||||
m_cullingRAMHi = nullptr;
|
m_cullingRAMHi = nullptr;
|
||||||
m_polyRAM = nullptr;
|
m_polyRAM = nullptr;
|
||||||
m_vrom = nullptr;
|
m_vrom = nullptr;
|
||||||
m_textureRAM = nullptr;
|
m_textureRAM = nullptr;
|
||||||
m_sunClamp = true;
|
m_sunClamp = true;
|
||||||
m_shadeIsSigned = true;
|
m_shadeIsSigned = true;
|
||||||
|
}
|
||||||
// Fall-back mechanism for games with patched (not working) JTAG
|
|
||||||
if (m_gameName == "swtrilgy") m_shadeIsSigned = false;
|
CNew3D::~CNew3D()
|
||||||
}
|
|
||||||
|
|
||||||
CNew3D::~CNew3D()
|
|
||||||
{
|
{
|
||||||
m_vbo.Destroy();
|
m_vbo.Destroy();
|
||||||
}
|
}
|
||||||
|
@ -1662,12 +1659,10 @@ void CNew3D::SetSunClamp(bool enable)
|
||||||
{
|
{
|
||||||
m_sunClamp = enable;
|
m_sunClamp = enable;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CNew3D::SetSignedShade(bool enable)
|
void CNew3D::SetSignedShade(bool enable)
|
||||||
{
|
{
|
||||||
if (m_gameName == "swtrilgy") return; // jtag has been patched out in star wars - todo fix this
|
m_shadeIsSigned = enable;
|
||||||
|
}
|
||||||
m_shadeIsSigned = enable;
|
|
||||||
}
|
|
||||||
|
|
||||||
} // New3D
|
} // New3D
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -263,12 +263,12 @@ void CReal3D::BeginFrame(void)
|
||||||
// If multi-threaded, perform now any queued texture uploads to renderer before rendering begins
|
// If multi-threaded, perform now any queued texture uploads to renderer before rendering begins
|
||||||
if (m_gpuMultiThreaded)
|
if (m_gpuMultiThreaded)
|
||||||
{
|
{
|
||||||
for (const auto &it : queuedUploadTexturesRO) {
|
for (const auto &it : queuedUploadTexturesRO) {
|
||||||
Render3D->UploadTextures(it.level, it.x, it.y, it.width, it.height);
|
Render3D->UploadTextures(it.level, it.x, it.y, it.width, it.height);
|
||||||
}
|
}
|
||||||
|
|
||||||
// done syncing data
|
// done syncing data
|
||||||
queuedUploadTexturesRO.clear();
|
queuedUploadTexturesRO.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
Render3D->BeginFrame();
|
Render3D->BeginFrame();
|
||||||
|
@ -628,15 +628,15 @@ void CReal3D::WriteDMARegister32(unsigned reg, uint32_t data)
|
||||||
dmaLength = data;
|
dmaLength = data;
|
||||||
DMACopy();
|
DMACopy();
|
||||||
dmaStatus |= 1;
|
dmaStatus |= 1;
|
||||||
IRQ->Assert(dmaIRQ);
|
IRQ->Assert(dmaIRQ);
|
||||||
break;
|
break;
|
||||||
case 0x10: // command register
|
case 0x10: // command register
|
||||||
if ((data&0x20000000))
|
if ((data&0x20000000)) // DMA ID command
|
||||||
{
|
{
|
||||||
dmaData = 0x16C311DB; // Virtual On 2 expects this from DMA
|
dmaData = pciID;
|
||||||
DebugLog("Real3D: DMA ID command issued (ATTENTION: make sure we're returning the correct value), PC=%08X, LR=%08X\n", ppc_get_pc(), ppc_get_lr());
|
DebugLog("Real3D: DMA ID command issued (ATTENTION: make sure we're returning the correct value), PC=%08X, LR=%08X\n", ppc_get_pc(), ppc_get_lr());
|
||||||
}
|
}
|
||||||
else if ((data&0x80000000))
|
else if ((data&0x80000000))
|
||||||
{
|
{
|
||||||
dmaData = ReadRegister(data & 0x3F);
|
dmaData = ReadRegister(data & 0x3F);
|
||||||
}
|
}
|
||||||
|
@ -656,35 +656,36 @@ void CReal3D::WriteDMARegister32(unsigned reg, uint32_t data)
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
void CReal3D::Flush(void)
|
void CReal3D::Flush(void)
|
||||||
{
|
{
|
||||||
commandPortWritten = true;
|
commandPortWritten = true;
|
||||||
DebugLog("Real3D 88000000 written @ PC=%08X\n", ppc_get_pc());
|
DebugLog("Real3D 88000000 written @ PC=%08X\n", ppc_get_pc());
|
||||||
|
|
||||||
// Upload textures (if any)
|
// Upload textures (if any)
|
||||||
if (fifoIdx > 0)
|
if (fifoIdx > 0)
|
||||||
{
|
{
|
||||||
for (uint32_t i = 0; i < fifoIdx; )
|
for (uint32_t i = 0; i < fifoIdx; )
|
||||||
{
|
{
|
||||||
uint32_t size = 2+textureFIFO[i+0]/2;
|
uint32_t size = 2+textureFIFO[i+0]/2;
|
||||||
size /= 4;
|
size /= 4;
|
||||||
uint32_t header = textureFIFO[i+1]; // texture information header
|
uint32_t header = textureFIFO[i+1]; // texture information header
|
||||||
|
|
||||||
// Spikeout seems to be uploading 0 length textures
|
// Spikeout seems to be uploading 0 length textures
|
||||||
if (0 == size)
|
if (0 == size)
|
||||||
{
|
{
|
||||||
DebugLog("Real3D: 0-length texture upload @ PC=%08X (%08X %08X %08X)\n", ppc_get_pc(), textureFIFO[i+0], textureFIFO[i+1], textureFIFO[i+2]);
|
DebugLog("Real3D: 0-length texture upload @ PC=%08X (%08X %08X %08X)\n", ppc_get_pc(), textureFIFO[i+0], textureFIFO[i+1], textureFIFO[i+2]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
UploadTexture(header,(uint16_t *)&textureFIFO[i+2]);
|
UploadTexture(header,(uint16_t *)&textureFIFO[i+2]);
|
||||||
DebugLog("Real3D: Texture upload completed: %X bytes (%X)\n", size*4, textureFIFO[i+0]);
|
DebugLog("Real3D: Texture upload completed: %X bytes (%X)\n", size*4, textureFIFO[i+0]);
|
||||||
i += size;
|
|
||||||
}
|
i += size;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
// Reset texture FIFO
|
|
||||||
fifoIdx = 0;
|
// Reset texture FIFO
|
||||||
}
|
fifoIdx = 0;
|
||||||
|
}
|
||||||
|
|
||||||
void CReal3D::WriteTextureFIFO(uint32_t data)
|
void CReal3D::WriteTextureFIFO(uint32_t data)
|
||||||
{
|
{
|
||||||
|
@ -865,23 +866,26 @@ void CReal3D::AttachRenderer(IRender3D *Render3DPtr)
|
||||||
uint32_t CReal3D::GetASICIDCode(ASIC asic) const
|
uint32_t CReal3D::GetASICIDCode(ASIC asic) const
|
||||||
{
|
{
|
||||||
auto it = m_asicID.find(asic);
|
auto it = m_asicID.find(asic);
|
||||||
return it == m_asicID.end() ? 0 : it->second;
|
return it == m_asicID.end() ? 0 : it->second;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CReal3D::SetStepping(int stepping)
|
void CReal3D::SetStepping(int stepping, bool step20_with_old_real3d)
|
||||||
{
|
|
||||||
step = stepping;
|
{
|
||||||
if ((step!=0x10) && (step!=0x15) && (step!=0x20) && (step!=0x21))
|
step = stepping;
|
||||||
|
if ((step!=0x10) && (step!=0x15) && (step!=0x20) && (step!=0x21))
|
||||||
{
|
{
|
||||||
DebugLog("Real3D: Unrecognized stepping: %d.%d\n", (step>>4)&0xF, step&0xF);
|
DebugLog("Real3D: Unrecognized stepping: %d.%d\n", (step>>4)&0xF, step&0xF);
|
||||||
step = 0x10;
|
step = 0x10;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set PCI ID
|
// Set PCI ID
|
||||||
if (step < 0x20)
|
// Some step 2+ games need the older PCI ID (obvious symptom:
|
||||||
pciID = 0x16C311DB; // vendor 0x11DB = Sega
|
// vbl is enabled briefly then disabled so the game hangs)
|
||||||
else
|
if ((step < 0x20) || step20_with_old_real3d)
|
||||||
pciID = 0x178611DB;
|
pciID = 0x16C311DB; // vendor 0x11DB = Sega
|
||||||
|
else
|
||||||
|
pciID = 0x178611DB;
|
||||||
|
|
||||||
// Pass to renderer
|
// Pass to renderer
|
||||||
if (Render3D != NULL)
|
if (Render3D != NULL)
|
||||||
|
|
|
@ -359,13 +359,14 @@ public:
|
||||||
* any other emulation functions and after Init().
|
* any other emulation functions and after Init().
|
||||||
*
|
*
|
||||||
* Parameters:
|
* Parameters:
|
||||||
* stepping 0x10 for Step 1.0, 0x15 for Step 1.5, 0x20 for Step 2.0, or
|
* stepping 0x10 for Step 1.0, 0x15 for Step 1.5, 0x20 for Step 2.0, or
|
||||||
* 0x21 for Step 2.1. Anything else defaults to 1.0.
|
* 0x21 for Step 2.1. Anything else defaults to 1.0.
|
||||||
*/
|
*/
|
||||||
void SetStepping(int stepping);
|
void SetStepping(int stepping, bool step20_with_old_real3d);
|
||||||
|
|
||||||
/*
|
|
||||||
* Init(vromPtr, BusObjectPtr, IRQObjectPtr, dmaIRQBit):
|
/*
|
||||||
|
* Init(vromPtr, BusObjectPtr, IRQObjectPtr, dmaIRQBit):
|
||||||
*
|
*
|
||||||
* One-time initialization of the context. Must be called prior to all
|
* One-time initialization of the context. Must be called prior to all
|
||||||
* other members. Connects the Real3D device to its video ROM and allocates
|
* other members. Connects the Real3D device to its video ROM and allocates
|
||||||
|
|
Loading…
Reference in a new issue