Skichamp Driveboard error fix.

This commit is contained in:
SpinDizzy 2021-02-18 10:35:38 +00:00
parent 08d4735ee8
commit e4998f57fd
3 changed files with 7 additions and 20 deletions

View file

@ -1646,10 +1646,6 @@
</inputs> </inputs>
</hardware> </hardware>
<roms> <roms>
<patches>
<!-- remove driveboard error -->
<patch region="crom" bits="32" offset="0x4d06f4" value="0x41860030" />
</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-20355.20" crc32="0x7A784E67" /> <file offset="0" name="epr-20355.20" crc32="0x7A784E67" />
<file offset="2" name="epr-20354.18" crc32="0xACA62BF8" /> <file offset="2" name="epr-20354.18" crc32="0xACA62BF8" />

View file

@ -119,14 +119,14 @@ UINT8 CSkiBoard::SimulateRead(void)
{ {
switch (m_readMode) switch (m_readMode)
{ {
case 0x0: return m_statusFlags; // Status flags // Note about Driveboard error :
// The value returned by case 0x0 is the error value displayed when error occurs.
// In service menu->output test, you will see "foot ctrl clutch" occilating free/lock due to
// the incrementation of m_statusFlags (000x0000 : x=1=lock x=0=free)
case 0x0: return m_statusFlags++; // Status flags - Increment every time to bypass driveboard error
case 0x1: return m_dip1; // DIP switch 1 value case 0x1: return m_dip1; // DIP switch 1 value
case 0x2: return m_dip2; // DIP switch 2 value case 0x4: return 0xFF; // Foot sensor Left=0xf0 Right=0x0f Both=0xff
case 0x3: return m_wheelCenter; // Wheel center
case 0x4: return 0x80; // Cockpit banking center
case 0x5: return m_inputs->skiX->value; // Wheel position
case 0x6: return 0x80; // Cockpit banking position
case 0x7: return m_echoVal; // Init status/echo test
default: return 0xFF; default: return 0xFF;
} }
} }
@ -255,7 +255,6 @@ CSkiBoard::CSkiBoard(const Util::Config::Node& config)
m_simulated = false; m_simulated = false;
m_initialized = false; m_initialized = false;
m_dip1 = 0xCF; m_dip1 = 0xCF;
m_dip2 = 0xFF;
DebugLog("Built Drive Board (ski pad)\n"); DebugLog("Built Drive Board (ski pad)\n");
} }

View file

@ -535,14 +535,6 @@ UINT8 CModel3::ReadInputs(unsigned reg)
if ((m_game.inputs & Game::INPUT_MAGTRUCK)) if ((m_game.inputs & Game::INPUT_MAGTRUCK))
data &= ~(Inputs->magicalPedal2->value << 0); data &= ~(Inputs->magicalPedal2->value << 0);
if ((m_game.inputs & Game::INPUT_SKI))
{
data = 0xff;
// foot sensor Left=0xf0 Right=0x0f Both=0xff
// rumble skipad is tested here at boot. The rom is patched to avoid driveboard error
// note : there is no driveboard error if sensor value slide slowly from 0x80 to 0xff then set to 0xff when test passed (tested with assigning an axis to this value)
}
return data; return data;
case 0x18: // swtrilgy and getbass. Remove IO board error on getbass. Not sure, but may be related to device feedback ? case 0x18: // swtrilgy and getbass. Remove IO board error on getbass. Not sure, but may be related to device feedback ?