fix for MT02960 & MT03697 [Mamesick]

This commit is contained in:
Fabio Priuli 2010-02-19 13:25:19 +00:00
parent 158ed23dae
commit f6f36eda21
3 changed files with 20 additions and 24 deletions

View File

@ -227,7 +227,7 @@ static WRITE16_HANDLER( bigrun_paletteram16_w )
static ADDRESS_MAP_START( bigrun_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x07ffff) AM_ROM // ROM
AM_RANGE(0x080000, 0x083fff) AM_READWRITE(bigrun_vregs_r, bigrun_vregs_w) AM_BASE(&megasys1_vregs) // Vregs
AM_RANGE(0x084000, 0x087fff) AM_WRITEONLY // Linking with other units
AM_RANGE(0x084000, 0x087fff) AM_RAM // Linking with other units
AM_RANGE(0x088000, 0x08bfff) AM_READWRITE(sharedram2_r, sharedram2_w) AM_BASE(&sharedram2) // Sharedram with sub CPU#2
AM_RANGE(0x08c000, 0x08ffff) AM_READWRITE(sharedram1_r, sharedram1_w) AM_BASE(&sharedram1) // Sharedram with sub CPU#1
@ -623,7 +623,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( bigrun_map3, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x03ffff) AM_ROM // ROM
AM_RANGE(0x040000, 0x047fff) AM_READWRITE(sharedram2_r, sharedram1_w) // Shared RAM (with Main CPU)
AM_RANGE(0x040000, 0x047fff) AM_READWRITE(sharedram2_r, sharedram2_w) // Shared RAM (with Main CPU)
AM_RANGE(0x080000, 0x0807ff) AM_RAM AM_BASE(&cischeat_roadram[1]) // Road RAM
AM_RANGE(0x0c0000, 0x0c3fff) AM_RAM // RAM
ADDRESS_MAP_END
@ -703,8 +703,8 @@ static ADDRESS_MAP_START( bigrun_sound_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x040000, 0x040001) AM_READWRITE(soundlatch_word_r, bigrun_soundbank_w) // From Main CPU
AM_RANGE(0x060000, 0x060001) AM_WRITE(soundlatch2_word_w) // To Main CPU
AM_RANGE(0x080000, 0x080003) AM_DEVREADWRITE8("ymsnd", ym2151_r, ym2151_w, 0x00ff)
AM_RANGE(0x0a0000, 0x0a0001) AM_DEVREADWRITE8("oki1", okim6295_r, okim6295_w, 0x00ff)
AM_RANGE(0x0c0000, 0x0c0001) AM_DEVREADWRITE8("oki2", okim6295_r, okim6295_w, 0x00ff)
AM_RANGE(0x0a0000, 0x0a0003) AM_DEVREADWRITE8("oki1", okim6295_r, okim6295_w, 0x00ff)
AM_RANGE(0x0c0000, 0x0c0003) AM_DEVREADWRITE8("oki2", okim6295_r, okim6295_w, 0x00ff)
AM_RANGE(0x0f0000, 0x0fffff) AM_RAM // RAM
ADDRESS_MAP_END

View File

@ -202,6 +202,12 @@ static READ32_HANDLER(cop_r)
return 0;
}
static READ32_HANDLER(irq_ack_clear)
{
cputag_set_input_line(space->machine, "sub", R3000_IRQ4, CLEAR_LINE);
return 0;
}
static ADDRESS_MAP_START( speglsht_mem, ADDRESS_SPACE_PROGRAM, 32 )
AM_RANGE(0x00000000, 0x000fffff) AM_RAM
AM_RANGE(0x01000000, 0x01007fff) AM_RAM //tested - STATIC RAM
@ -214,7 +220,7 @@ static ADDRESS_MAP_START( speglsht_mem, ADDRESS_SPACE_PROGRAM, 32 )
AM_RANGE(0x01c00000, 0x01dfffff) AM_ROM AM_REGION("user2", 0)
AM_RANGE(0x0a000000, 0x0a003fff) AM_READWRITE(shared_r, shared_w)
AM_RANGE(0x1eff0000, 0x1eff001f) AM_RAM
AM_RANGE(0x1eff003c, 0x1eff003f) AM_READNOP //interrupt related
AM_RANGE(0x1eff003c, 0x1eff003f) AM_READ(irq_ack_clear)
AM_RANGE(0x1fc00000, 0x1fdfffff) AM_ROM AM_REGION("user1", 0)
AM_RANGE(0x2fc00000, 0x2fdfffff) AM_ROM AM_REGION("user1", 0) // mirror for interrupts
ADDRESS_MAP_END
@ -301,11 +307,6 @@ static const st0016_interface st0016_config =
&st0016_charram
};
static INTERRUPT_GEN( irq4_gen )
{
cpu_set_input_line(device, R3000_IRQ4, ASSERT_LINE);
}
static const r3000_cpu_core config =
{
0,
@ -329,7 +330,7 @@ static MACHINE_DRIVER_START( speglsht )
MDRV_CPU_ADD("sub", R3000LE, 25000000)
MDRV_CPU_CONFIG(config)
MDRV_CPU_PROGRAM_MAP(speglsht_mem)
MDRV_CPU_VBLANK_INT("screen", irq4_gen)
MDRV_CPU_VBLANK_INT("screen", irq4_line_assert)
MDRV_QUANTUM_TIME(HZ(6000))
MDRV_MACHINE_RESET(speglsht)

View File

@ -336,6 +336,12 @@ static WRITE32_HANDLER(srmp5_vidregs_w)
logerror("vidregs write %08X %08X\n", offset << 2, state->vidregs[offset]);
}
static READ32_HANDLER(irq_ack_clear)
{
cputag_set_input_line(space->machine, "sub", R3000_IRQ4, CLEAR_LINE);
return 0;
}
static ADDRESS_MAP_START( srmp5_mem, ADDRESS_SPACE_PROGRAM, 32 )
AM_RANGE(0x00000000, 0x000fffff) AM_RAM //maybe 0 - 2fffff ?
AM_RANGE(0x002f0000, 0x002f7fff) AM_RAM
@ -362,7 +368,7 @@ static ADDRESS_MAP_START( srmp5_mem, ADDRESS_SPACE_PROGRAM, 32 )
AM_RANGE(0x0a200000, 0x0a3fffff) AM_READWRITE(tileram_r, tileram_w)
AM_RANGE(0x1eff0000, 0x1eff001f) AM_WRITEONLY
AM_RANGE(0x1eff003c, 0x1eff003f) AM_READNOP
AM_RANGE(0x1eff003c, 0x1eff003f) AM_READ(irq_ack_clear)
AM_RANGE(0x1fc00000, 0x1fdfffff) AM_ROM AM_REGION("user1", 0)
AM_RANGE(0x2fc00000, 0x2fdfffff) AM_ROM AM_REGION("user1", 0)
ADDRESS_MAP_END
@ -510,16 +516,6 @@ static const st0016_interface st0016_config =
&st0016_charram
};
//It seems that interrupt flags are never cleared, so I use last line only.
static INTERRUPT_GEN( irq4_gen )
{
if(cpu_getiloops(device) == 0)
cpu_set_input_line(device, R3000_IRQ4, ASSERT_LINE);
else
cpu_set_input_line(device, R3000_IRQ4, CLEAR_LINE);
}
static const r3000_cpu_core config =
{
1, /* 1 if we have an FPU, 0 otherwise */
@ -569,8 +565,7 @@ static MACHINE_DRIVER_START( srmp5 )
MDRV_CPU_ADD("sub", R3000LE, 25000000)
MDRV_CPU_CONFIG(config)
MDRV_CPU_PROGRAM_MAP(srmp5_mem)
//256???K??
MDRV_CPU_VBLANK_INT_HACK(irq4_gen, 256)
MDRV_CPU_VBLANK_INT("screen", irq4_line_assert)
MDRV_QUANTUM_TIME(HZ(6000))