mirror of
https://github.com/holub/mame
synced 2025-06-07 05:13:46 +03:00
viper: fix U13 fail (nw)
This commit is contained in:
parent
db8397c470
commit
ee3b2ca1b6
@ -327,21 +327,21 @@ some other components. It will be documented at a later date.
|
|||||||
Game status:
|
Game status:
|
||||||
ppp2nd POST: "DIP SWITCH ERROR", "NO SECURITY ERROR"
|
ppp2nd POST: "DIP SWITCH ERROR", "NO SECURITY ERROR"
|
||||||
boxingm Goes to attract mode when ran with memory card check. Coins up.
|
boxingm Goes to attract mode when ran with memory card check. Coins up.
|
||||||
code1d,b Inf loop on blue screen (writes to I2C before)
|
code1d,b RTC self check bad
|
||||||
gticlub2 Inf loop on blue screen (writes to I2C before)
|
gticlub2 Attract mode works. Coins up. Hangs in car selection.
|
||||||
gticlub2ea Doesn't boot: bad CHD?
|
gticlub2ea Doesn't boot: bad CHD?
|
||||||
jpark3 POST?: Shows "Now loading..." then black screen (sets global timer 1 on EPIC...)
|
jpark3 POST?: Shows "Now loading..." then black screen (sets global timer 1 on EPIC...)
|
||||||
mocapglf Inf loop on blue screen (writes to I2C before)
|
mocapglf Security code error
|
||||||
mocapb,j POST: U13 bad
|
mocapb,j Crash after self checks
|
||||||
p911,e,j,uc,kc POST: U13 bad
|
p911,e,j,uc,kc "Distribution error"
|
||||||
p9112 POST: U13 bad
|
p9112 RTC self check bad
|
||||||
popn9 Doesn't boot: bad CHD?
|
popn9 Doesn't boot: bad CHD?
|
||||||
sscopex/sogeki Inf loop on blue screen
|
sscopex/sogeki Security code error
|
||||||
thrild2,a Attract mode with partial graphics. Coins up. Hangs in car selection screen.
|
thrild2,a Attract mode with partial graphics. Coins up. Hangs in car selection screen.
|
||||||
thrild2c Inf loop on blue screen
|
thrild2c Inf loop on blue screen
|
||||||
tsurugi Goes to attract mode when ran with memory card check. Coins up.
|
tsurugi Goes to attract mode when ran with memory card check. Coins up.
|
||||||
tsurugij No NVRAM
|
tsurugij No NVRAM
|
||||||
wcombat Hangs on blue screen
|
wcombat Stuck on network check
|
||||||
xtrial Attract mode. Hangs.
|
xtrial Attract mode. Hangs.
|
||||||
mfightc,c Passes POST. Waits for network connection from main unit? Spams writes to 0xffe08000 (8-bit)
|
mfightc,c Passes POST. Waits for network connection from main unit? Spams writes to 0xffe08000 (8-bit)
|
||||||
*/
|
*/
|
||||||
@ -355,7 +355,7 @@ some other components. It will be documented at a later date.
|
|||||||
#include "video/voodoo.h"
|
#include "video/voodoo.h"
|
||||||
|
|
||||||
#define VIPER_DEBUG_LOG
|
#define VIPER_DEBUG_LOG
|
||||||
#define VIPER_DEBUG_EPIC_INTS 1
|
#define VIPER_DEBUG_EPIC_INTS 0
|
||||||
#define VIPER_DEBUG_EPIC_TIMERS 0
|
#define VIPER_DEBUG_EPIC_TIMERS 0
|
||||||
#define VIPER_DEBUG_EPIC_REGS 0
|
#define VIPER_DEBUG_EPIC_REGS 0
|
||||||
#define VIPER_DEBUG_EPIC_I2C 0
|
#define VIPER_DEBUG_EPIC_I2C 0
|
||||||
@ -363,7 +363,6 @@ some other components. It will be documented at a later date.
|
|||||||
|
|
||||||
#define SDRAM_CLOCK 166666666 // Main SDRAMs run at 166MHz
|
#define SDRAM_CLOCK 166666666 // Main SDRAMs run at 166MHz
|
||||||
|
|
||||||
static UINT32 *workram;
|
|
||||||
|
|
||||||
|
|
||||||
static emu_timer *ds2430_timer;
|
static emu_timer *ds2430_timer;
|
||||||
@ -377,7 +376,8 @@ public:
|
|||||||
: driver_device(mconfig, type, tag),
|
: driver_device(mconfig, type, tag),
|
||||||
m_maincpu(*this, "maincpu"),
|
m_maincpu(*this, "maincpu"),
|
||||||
m_ata(*this, "ata"),
|
m_ata(*this, "ata"),
|
||||||
m_voodoo(*this, "voodoo")
|
m_voodoo(*this, "voodoo"),
|
||||||
|
m_workram(*this, "workram")
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -430,6 +430,9 @@ public:
|
|||||||
INTERRUPT_GEN_MEMBER(viper_vblank);
|
INTERRUPT_GEN_MEMBER(viper_vblank);
|
||||||
TIMER_CALLBACK_MEMBER(epic_global_timer_callback);
|
TIMER_CALLBACK_MEMBER(epic_global_timer_callback);
|
||||||
TIMER_CALLBACK_MEMBER(ds2430_timer_callback);
|
TIMER_CALLBACK_MEMBER(ds2430_timer_callback);
|
||||||
|
#if VIPER_DEBUG_EPIC_REGS
|
||||||
|
const char* epic_get_register_name(UINT32 reg);
|
||||||
|
#endif
|
||||||
void epic_update_interrupts();
|
void epic_update_interrupts();
|
||||||
void mpc8240_interrupt(int irq);
|
void mpc8240_interrupt(int irq);
|
||||||
void mpc8240_epic_init();
|
void mpc8240_epic_init();
|
||||||
@ -439,6 +442,7 @@ public:
|
|||||||
required_device<ppc_device> m_maincpu;
|
required_device<ppc_device> m_maincpu;
|
||||||
required_device<ata_interface_device> m_ata;
|
required_device<ata_interface_device> m_ata;
|
||||||
required_device<voodoo_3_device> m_voodoo;
|
required_device<voodoo_3_device> m_voodoo;
|
||||||
|
required_shared_ptr<UINT64> m_workram;
|
||||||
};
|
};
|
||||||
|
|
||||||
UINT32 viper_state::screen_update_viper(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
UINT32 viper_state::screen_update_viper(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
||||||
@ -624,7 +628,7 @@ struct MPC8240_EPIC
|
|||||||
static MPC8240_EPIC epic;
|
static MPC8240_EPIC epic;
|
||||||
|
|
||||||
#if VIPER_DEBUG_EPIC_REGS
|
#if VIPER_DEBUG_EPIC_REGS
|
||||||
const viper_state::char* epic_get_register_name(UINT32 reg)
|
const char* viper_state::epic_get_register_name(UINT32 reg)
|
||||||
{
|
{
|
||||||
switch (reg >> 16)
|
switch (reg >> 16)
|
||||||
{
|
{
|
||||||
@ -866,7 +870,9 @@ READ32_MEMBER(viper_state::epic_r)
|
|||||||
{
|
{
|
||||||
if (epic.i2c_state == I2C_STATE_ADDRESS_CYCLE)
|
if (epic.i2c_state == I2C_STATE_ADDRESS_CYCLE)
|
||||||
{
|
{
|
||||||
|
#if VIPER_DEBUG_EPIC_I2C
|
||||||
printf("I2C address cycle read\n");
|
printf("I2C address cycle read\n");
|
||||||
|
#endif
|
||||||
|
|
||||||
epic.i2c_state = I2C_STATE_DATA_TRANSFER;
|
epic.i2c_state = I2C_STATE_DATA_TRANSFER;
|
||||||
|
|
||||||
@ -876,7 +882,9 @@ READ32_MEMBER(viper_state::epic_r)
|
|||||||
// generate interrupt if interrupt are enabled
|
// generate interrupt if interrupt are enabled
|
||||||
if (epic.i2c_cr & 0x40)
|
if (epic.i2c_cr & 0x40)
|
||||||
{
|
{
|
||||||
|
#if VIPER_DEBUG_EPIC_I2C
|
||||||
printf("I2C interrupt\n");
|
printf("I2C interrupt\n");
|
||||||
|
#endif
|
||||||
mpc8240_interrupt(MPC8240_I2C_IRQ);
|
mpc8240_interrupt(MPC8240_I2C_IRQ);
|
||||||
|
|
||||||
// set interrupt flag in status register
|
// set interrupt flag in status register
|
||||||
@ -885,7 +893,9 @@ READ32_MEMBER(viper_state::epic_r)
|
|||||||
}
|
}
|
||||||
else if (epic.i2c_state == I2C_STATE_DATA_TRANSFER)
|
else if (epic.i2c_state == I2C_STATE_DATA_TRANSFER)
|
||||||
{
|
{
|
||||||
|
#if VIPER_DEBUG_EPIC_I2C
|
||||||
printf("I2C data read\n");
|
printf("I2C data read\n");
|
||||||
|
#endif
|
||||||
|
|
||||||
epic.i2c_state = I2C_STATE_ADDRESS_CYCLE;
|
epic.i2c_state = I2C_STATE_ADDRESS_CYCLE;
|
||||||
|
|
||||||
@ -967,7 +977,7 @@ READ32_MEMBER(viper_state::epic_r)
|
|||||||
ret |= epic.irq[MPC8240_I2C_IRQ].priority << 16;
|
ret |= epic.irq[MPC8240_I2C_IRQ].priority << 16;
|
||||||
ret |= epic.irq[MPC8240_I2C_IRQ].vector;
|
ret |= epic.irq[MPC8240_I2C_IRQ].vector;
|
||||||
ret |= epic.irq[MPC8240_I2C_IRQ].active ? 0x40000000 : 0;
|
ret |= epic.irq[MPC8240_I2C_IRQ].active ? 0x40000000 : 0;
|
||||||
return ret;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -1756,7 +1766,7 @@ READ64_MEMBER(viper_state::unk1_r)
|
|||||||
reg |= (unk1_bit << 5);
|
reg |= (unk1_bit << 5);
|
||||||
reg |= 0x40; // if this bit is 0, loads a disk copier instead
|
reg |= 0x40; // if this bit is 0, loads a disk copier instead
|
||||||
//r |= 0x04; // screen flip
|
//r |= 0x04; // screen flip
|
||||||
//reg |= 0x08; // memory card check (1 = enable)
|
reg |= 0x08; // memory card check (1 = enable)
|
||||||
|
|
||||||
r |= reg << 40;
|
r |= reg << 40;
|
||||||
|
|
||||||
@ -1852,8 +1862,8 @@ void viper_state::DS2430_w(int bit)
|
|||||||
|
|
||||||
case DS2430_STATE_READ_MEM:
|
case DS2430_STATE_READ_MEM:
|
||||||
{
|
{
|
||||||
|
unk1_bit = (ds2430_rom[(ds2430_data_count/8)] >> (ds2430_data_count%8)) & 1;
|
||||||
ds2430_data_count++;
|
ds2430_data_count++;
|
||||||
unk1_bit = rand () & 1;
|
|
||||||
printf("DS2430_w: read mem %d, bit = %d\n", ds2430_data_count, unk1_bit);
|
printf("DS2430_w: read mem %d, bit = %d\n", ds2430_data_count, unk1_bit);
|
||||||
|
|
||||||
if (ds2430_data_count >= 256)
|
if (ds2430_data_count >= 256)
|
||||||
@ -2045,7 +2055,7 @@ WRITE64_MEMBER(viper_state::unk_serial_w)
|
|||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static ADDRESS_MAP_START(viper_map, AS_PROGRAM, 64, viper_state )
|
static ADDRESS_MAP_START(viper_map, AS_PROGRAM, 64, viper_state )
|
||||||
AM_RANGE(0x00000000, 0x00ffffff) AM_MIRROR(0x1000000) AM_RAM
|
AM_RANGE(0x00000000, 0x00ffffff) AM_MIRROR(0x1000000) AM_RAM AM_SHARE("workram")
|
||||||
AM_RANGE(0x80000000, 0x800fffff) AM_READWRITE32(epic_r, epic_w,U64(0xffffffffffffffff))
|
AM_RANGE(0x80000000, 0x800fffff) AM_READWRITE32(epic_r, epic_w,U64(0xffffffffffffffff))
|
||||||
AM_RANGE(0x82000000, 0x83ffffff) AM_READWRITE(voodoo3_r, voodoo3_w)
|
AM_RANGE(0x82000000, 0x83ffffff) AM_READWRITE(voodoo3_r, voodoo3_w)
|
||||||
AM_RANGE(0x84000000, 0x85ffffff) AM_READWRITE(voodoo3_lfb_r, voodoo3_lfb_w)
|
AM_RANGE(0x84000000, 0x85ffffff) AM_READWRITE(voodoo3_lfb_r, voodoo3_lfb_w)
|
||||||
@ -2144,7 +2154,7 @@ void viper_state::machine_start()
|
|||||||
m_maincpu->ppcdrc_set_options(PPCDRC_COMPATIBLE_OPTIONS);
|
m_maincpu->ppcdrc_set_options(PPCDRC_COMPATIBLE_OPTIONS);
|
||||||
|
|
||||||
/* configure fast RAM regions for DRC */
|
/* configure fast RAM regions for DRC */
|
||||||
m_maincpu->ppcdrc_add_fastram(0x00000000, 0x00ffffff, FALSE, workram);
|
m_maincpu->ppcdrc_add_fastram(0x00000000, 0x00ffffff, FALSE, m_workram);
|
||||||
|
|
||||||
ds2430_rom = (UINT8*)memregion("ds2430")->base();
|
ds2430_rom = (UINT8*)memregion("ds2430")->base();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user