diff --git a/src/mame/drivers/cischeat.c b/src/mame/drivers/cischeat.c index db230cd02f7..8aaa90e6401 100644 --- a/src/mame/drivers/cischeat.c +++ b/src/mame/drivers/cischeat.c @@ -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 diff --git a/src/mame/drivers/speglsht.c b/src/mame/drivers/speglsht.c index 04ff328e8e3..b52f0b0e1e2 100644 --- a/src/mame/drivers/speglsht.c +++ b/src/mame/drivers/speglsht.c @@ -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) diff --git a/src/mame/drivers/srmp5.c b/src/mame/drivers/srmp5.c index 58c4d9cfff4..202e8777dda 100644 --- a/src/mame/drivers/srmp5.c +++ b/src/mame/drivers/srmp5.c @@ -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))