From 72d39635c1f79ad3db42a0612a2d147b82eebd2d Mon Sep 17 00:00:00 2001 From: Angelo Salese Date: Fri, 9 Dec 2011 19:00:02 +0000 Subject: [PATCH] deprecat.h, WIP code for metro.c --- src/mame/drivers/labyrunr.c | 1 - src/mame/drivers/metlclsh.c | 23 ++- src/mame/drivers/metro.c | 326 ++++++++++++++---------------------- src/mame/drivers/pntnpuzl.c | 2 +- src/mame/video/metro.c | 10 +- 5 files changed, 147 insertions(+), 215 deletions(-) diff --git a/src/mame/drivers/labyrunr.c b/src/mame/drivers/labyrunr.c index a5683acfaed..37012598d44 100644 --- a/src/mame/drivers/labyrunr.c +++ b/src/mame/drivers/labyrunr.c @@ -9,7 +9,6 @@ ***************************************************************************/ #include "emu.h" -#include "deprecat.h" #include "cpu/hd6309/hd6309.h" #include "sound/2203intf.h" #include "video/konicdev.h" diff --git a/src/mame/drivers/metlclsh.c b/src/mame/drivers/metlclsh.c index 8228c4d3bc7..ca072e6c438 100644 --- a/src/mame/drivers/metlclsh.c +++ b/src/mame/drivers/metlclsh.c @@ -32,7 +32,6 @@ metlclsh: ***************************************************************************/ #include "emu.h" -#include "deprecat.h" #include "cpu/m6809/m6809.h" #include "sound/2203intf.h" #include "sound/3526intf.h" @@ -133,6 +132,13 @@ ADDRESS_MAP_END ***************************************************************************/ + +static INPUT_CHANGED( coin_inserted ) +{ + if(newval != oldval) + cputag_set_input_line(field.machine(), "sub", INPUT_LINE_NMI, ASSERT_LINE); +} + static INPUT_PORTS_START( metlclsh ) PORT_START("IN0") /* c000 */ PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coinage ) ) @@ -176,8 +182,8 @@ static INPUT_PORTS_START( metlclsh ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_COCKTAIL PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(1) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(1) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(1) PORT_CHANGED(coin_inserted, 0) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(1) PORT_CHANGED(coin_inserted, 0) PORT_START("DSW") /* c003 */ PORT_DIPNAME( 0x01, 0x01, DEF_STR( Lives ) ) @@ -196,7 +202,7 @@ static INPUT_PORTS_START( metlclsh ) PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // cpu2 will clr c040 on startup forever - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_IMPULSE(1) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_IMPULSE(1) PORT_CHANGED(coin_inserted, 0) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_VBLANK ) INPUT_PORTS_END @@ -264,14 +270,6 @@ static const ym3526_interface ym3526_config = metlclsh_irqhandler }; -static INTERRUPT_GEN( metlclsh_interrupt2 ) -{ - if (cpu_getiloops(device) == 0) - return; - /* generate NMI on coin insertion */ - if ((~input_port_read(device->machine(), "IN2") & 0xc0) || (~input_port_read(device->machine(), "DSW") & 0x40)) /* TODO: remove me */ - device_set_input_line(device, INPUT_LINE_NMI, ASSERT_LINE); -} static MACHINE_START( metlclsh ) { @@ -303,7 +301,6 @@ static MACHINE_CONFIG_START( metlclsh, metlclsh_state ) MCFG_CPU_ADD("sub", M6809, 1500000) // ? MCFG_CPU_PROGRAM_MAP(metlclsh_slave_map) - MCFG_CPU_VBLANK_INT_HACK(metlclsh_interrupt2,2) // IRQ by cpu #1, NMI by coins insertion MCFG_MACHINE_START(metlclsh) diff --git a/src/mame/drivers/metro.c b/src/mame/drivers/metro.c index 2b6fd6ea58d..1e0fcc1881a 100644 --- a/src/mame/drivers/metro.c +++ b/src/mame/drivers/metro.c @@ -98,6 +98,18 @@ driver modified by Eisuke Watanabe #include "sound/ymf278b.h" #include "video/konicdev.h" +/* TODO: NOT measured! */ +#define PIXEL_CLOCK (XTAL_14_31818MHz/2) + +#define HTOTAL (456) +#define HBEND (0) +#define HBSTART (320) + +#define VTOTAL (262) +#define VBEND (0) +#define VBSTART (240) + + /*************************************************************************** @@ -109,7 +121,15 @@ driver modified by Eisuke Watanabe static READ16_HANDLER( metro_irq_cause_r ) { metro_state *state = space->machine().driver_data(); + int res,i; + res = 0; + for(i=0;i<8;i++) + res |= (state->m_requested_int[i] << i); + + return res; + + #if 0 return state->m_requested_int[0] * 0x01 + // vblank state->m_requested_int[1] * 0x02 + state->m_requested_int[2] * 0x04 + // blitter @@ -118,6 +138,7 @@ static READ16_HANDLER( metro_irq_cause_r ) state->m_requested_int[5] * 0x20 + state->m_requested_int[6] * 0x40 + // unused state->m_requested_int[7] * 0x80 ; // unused + #endif } @@ -167,6 +188,7 @@ static IRQ_CALLBACK( metro_irq_callback ) static WRITE16_HANDLER( metro_irq_cause_w ) { metro_state *state = space->machine().driver_data(); + int i; //if (data & ~0x15) logerror("CPU #0 PC %06X : unknown bits of irqcause written: %04X\n", cpu_get_pc(&space->device()), data); @@ -174,6 +196,10 @@ static WRITE16_HANDLER( metro_irq_cause_w ) { data &= ~*state->m_irq_enable; + for(i=0;i<8;i++) + if (BIT(data, i)) state->m_requested_int[i] = 0; + + #if 0 if (BIT(data, 0)) state->m_requested_int[0] = 0; if (BIT(data, 1)) state->m_requested_int[1] = 0; // DAITORIDE, BALCUBE, KARATOUR, MOUJA if (BIT(data, 2)) state->m_requested_int[2] = 0; @@ -182,84 +208,65 @@ static WRITE16_HANDLER( metro_irq_cause_w ) if (BIT(data, 5)) state->m_requested_int[5] = 0; // KARATOUR, BLZNTRND if (BIT(data, 6)) state->m_requested_int[6] = 0; if (BIT(data, 7)) state->m_requested_int[7] = 0; + #endif } update_irq_state(space->machine()); } - -static INTERRUPT_GEN( metro_interrupt ) +static TIMER_DEVICE_CALLBACK( metro_interrupt ) { - metro_state *state = device->machine().driver_data(); + metro_state *state = timer.machine().driver_data(); + int scanline = param; - switch (cpu_getiloops(device)) + if(scanline == 240) { - case 0: - state->m_requested_int[0] = 1; - update_irq_state(device->machine()); - break; + state->m_requested_int[0] = 1; + update_irq_state(timer.machine()); + } - default: - state->m_requested_int[4] = 1; - update_irq_state(device->machine()); - break; + if(scanline == 0) + { + state->m_requested_int[4] = 1; + update_irq_state(timer.machine()); } } -/* Lev 1. Lev 2 seems sound related */ -static INTERRUPT_GEN( bangball_interrupt ) +static TIMER_DEVICE_CALLBACK( msgogo_interrupt ) { - metro_state *state = device->machine().driver_data(); + metro_state *state = timer.machine().driver_data(); + int scanline = param; - state->m_requested_int[0] = 1; // set scroll regs if a flag is set - state->m_requested_int[4] = 1; // clear that flag - update_irq_state(device->machine()); + if(scanline == 224-16) // TODO: timing quirk + { + state->m_requested_int[0] = 1; + update_irq_state(timer.machine()); + } + + if(scanline == 0) + { + state->m_requested_int[4] = 1; + update_irq_state(timer.machine()); + } } -static INTERRUPT_GEN( msgogo_interrupt ) -{ - metro_state *state = device->machine().driver_data(); - - switch (cpu_getiloops(device)) - { - case 10: - state->m_requested_int[0] = 1; - update_irq_state(device->machine()); - break; - - case 224: - state->m_requested_int[4] = 1; - update_irq_state(device->machine()); - break; - } -} - - -static TIMER_CALLBACK( vblank_end_callback ) -{ - metro_state *state = machine.driver_data(); - state->m_requested_int[5] = param; -} /* lev 2-7 (lev 1 seems sound related) */ -static INTERRUPT_GEN( karatour_interrupt ) +static TIMER_DEVICE_CALLBACK( karatour_interrupt ) { - metro_state *state = device->machine().driver_data(); + metro_state *state = timer.machine().driver_data(); + int scanline = param; - switch (cpu_getiloops(device)) + if(scanline == 240) { - case 0: - state->m_requested_int[0] = 1; - state->m_requested_int[5] = 1; // write the scroll registers - /* the duration is a guess */ - device->machine().scheduler().timer_set(attotime::from_usec(2500), FUNC(vblank_end_callback)); - update_irq_state(device->machine()); - break; - - default: - state->m_requested_int[4] = 1; - update_irq_state(device->machine()); - break; + state->m_requested_int[0] = 1; + //state->m_requested_int[5] = 1; // write the scroll registers (TODO: where to put this without making the game to hang???) + update_irq_state(timer.machine()); + } + else if(scanline == 0) + { + state->m_requested_int[4] = 1; + update_irq_state(timer.machine()); } } @@ -293,29 +300,25 @@ static INTERRUPT_GEN( gakusai_interrupt ) { metro_state *state = device->machine().driver_data(); - switch (cpu_getiloops(device)) - { - case 0: - state->m_requested_int[1] = 1; - update_irq_state(device->machine()); - break; - } + state->m_requested_int[1] = 1; + update_irq_state(device->machine()); } -static INTERRUPT_GEN( dokyusei_interrupt ) +static TIMER_DEVICE_CALLBACK( dokyusei_interrupt ) { - metro_state *state = device->machine().driver_data(); + metro_state *state = timer.machine().driver_data(); + int scanline = param; - switch (cpu_getiloops(device)) + if(scanline == 240) { - case 0: - state->m_requested_int[1] = 1; - update_irq_state(device->machine()); - break; - case 1: // needed? - state->m_requested_int[5] = 1; - update_irq_state(device->machine()); - break; + state->m_requested_int[1] = 1; + update_irq_state(timer.machine()); + } + else if(scanline == 0) + { + // needed? + state->m_requested_int[5] = 1; + update_irq_state(timer.machine()); } } @@ -3494,18 +3497,15 @@ static MACHINE_CONFIG_START( balcube, metro_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68000, XTAL_16MHz) MCFG_CPU_PROGRAM_MAP(balcube_map) - MCFG_CPU_VBLANK_INT_HACK(metro_interrupt,10) /* ? */ + MCFG_TIMER_ADD_SCANLINE("scantimer", metro_interrupt, "screen", 0, 1) MCFG_MACHINE_START(metro) MCFG_MACHINE_RESET(metro) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) - MCFG_SCREEN_SIZE(320, 224) - MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 0, 224-1) + MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, 224) MCFG_SCREEN_UPDATE(metro) MCFG_GFXDECODE(14220) @@ -3528,18 +3528,15 @@ static MACHINE_CONFIG_START( daitoa, metro_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68000, XTAL_16MHz) MCFG_CPU_PROGRAM_MAP(daitoa_map) - MCFG_CPU_VBLANK_INT_HACK(metro_interrupt,10) /* ? */ + MCFG_TIMER_ADD_SCANLINE("scantimer", metro_interrupt, "screen", 0, 1) MCFG_MACHINE_START(metro) MCFG_MACHINE_RESET(metro) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) + MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART) MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) - MCFG_SCREEN_SIZE(320, 224) - MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 0, 224-1) MCFG_SCREEN_UPDATE(metro) MCFG_GFXDECODE(14220) @@ -3562,18 +3559,15 @@ static MACHINE_CONFIG_START( msgogo, metro_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68000, XTAL_16MHz) MCFG_CPU_PROGRAM_MAP(msgogo_map) - MCFG_CPU_VBLANK_INT_HACK(msgogo_interrupt,262) /* ? */ + MCFG_TIMER_ADD_SCANLINE("scantimer", msgogo_interrupt, "screen", 0, 1) MCFG_MACHINE_START(metro) MCFG_MACHINE_RESET(metro) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) + MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, 224) MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) - MCFG_SCREEN_SIZE(320, 224) - MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 0, 224-1) MCFG_SCREEN_UPDATE(metro) MCFG_GFXDECODE(14220) @@ -3596,18 +3590,15 @@ static MACHINE_CONFIG_START( bangball, metro_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68000, XTAL_16MHz) MCFG_CPU_PROGRAM_MAP(bangball_map) - MCFG_CPU_VBLANK_INT("screen", bangball_interrupt) + MCFG_TIMER_ADD_SCANLINE("scantimer", metro_interrupt, "screen", 0, 1) MCFG_MACHINE_START(metro) MCFG_MACHINE_RESET(metro) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) + MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, 224) MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) - MCFG_SCREEN_SIZE(320, 224) - MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 0, 224-1) MCFG_SCREEN_UPDATE(metro) MCFG_GFXDECODE(14220) @@ -3630,18 +3621,15 @@ static MACHINE_CONFIG_START( batlbubl, metro_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68000, XTAL_16MHz) MCFG_CPU_PROGRAM_MAP(batlbubl_map) - MCFG_CPU_VBLANK_INT("screen", bangball_interrupt) + MCFG_TIMER_ADD_SCANLINE("scantimer", metro_interrupt, "screen", 0, 1) MCFG_MACHINE_START(metro) MCFG_MACHINE_RESET(metro) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) - MCFG_SCREEN_SIZE(320, 224) - MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 0, 224-1) + MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, 224) MCFG_SCREEN_UPDATE(metro) MCFG_GFXDECODE(14220) @@ -3663,7 +3651,7 @@ static MACHINE_CONFIG_START( daitorid, metro_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68000, XTAL_32MHz/2) MCFG_CPU_PROGRAM_MAP(daitorid_map) - MCFG_CPU_VBLANK_INT_HACK(metro_interrupt,10) /* ? */ + MCFG_TIMER_ADD_SCANLINE("scantimer", metro_interrupt, "screen", 0, 1) MCFG_CPU_ADD("audiocpu", UPD7810, XTAL_12MHz) MCFG_CPU_CONFIG(metro_cpu_config) @@ -3675,11 +3663,8 @@ static MACHINE_CONFIG_START( daitorid, metro_state ) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(58) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) + MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART) // was 58fps? MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) - MCFG_SCREEN_SIZE(320, 224) - MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 0, 224-1) MCFG_SCREEN_UPDATE(metro) MCFG_GFXDECODE(14220) @@ -3706,7 +3691,7 @@ static MACHINE_CONFIG_START( dharma, metro_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68000, XTAL_24MHz/2) MCFG_CPU_PROGRAM_MAP(dharma_map) - MCFG_CPU_VBLANK_INT_HACK(metro_interrupt,10) /* ? */ + MCFG_TIMER_ADD_SCANLINE("scantimer", metro_interrupt, "screen", 0, 1) MCFG_CPU_ADD("audiocpu", UPD7810, XTAL_24MHz/2) MCFG_CPU_CONFIG(metro_cpu_config) @@ -3718,11 +3703,8 @@ static MACHINE_CONFIG_START( dharma, metro_state ) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) + MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART) MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) - MCFG_SCREEN_SIZE(320, 224) - MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 0, 224-1) MCFG_SCREEN_UPDATE(metro) MCFG_GFXDECODE(14100) @@ -3748,7 +3730,7 @@ static MACHINE_CONFIG_START( karatour, metro_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68000, XTAL_24MHz/2) MCFG_CPU_PROGRAM_MAP(karatour_map) - MCFG_CPU_VBLANK_INT_HACK(karatour_interrupt,10) /* ? */ + MCFG_TIMER_ADD_SCANLINE("scantimer", karatour_interrupt, "screen", 0, 1) MCFG_CPU_ADD("audiocpu", UPD7810, XTAL_24MHz/2) MCFG_CPU_CONFIG(metro_cpu_config) @@ -3760,11 +3742,8 @@ static MACHINE_CONFIG_START( karatour, metro_state ) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) + MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART) // was 58fps? MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) - MCFG_SCREEN_SIZE(320, 240) - MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 0, 240-1) MCFG_SCREEN_UPDATE(metro) MCFG_GFXDECODE(14100) @@ -3790,7 +3769,7 @@ static MACHINE_CONFIG_START( 3kokushi, metro_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68000, XTAL_24MHz/2) MCFG_CPU_PROGRAM_MAP(kokushi_map) - MCFG_CPU_VBLANK_INT_HACK(karatour_interrupt,10) /* ? */ + MCFG_TIMER_ADD_SCANLINE("scantimer", karatour_interrupt, "screen", 0, 1) MCFG_CPU_ADD("audiocpu", UPD7810, XTAL_24MHz/2) MCFG_CPU_CONFIG(metro_cpu_config) @@ -3802,11 +3781,8 @@ static MACHINE_CONFIG_START( 3kokushi, metro_state ) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) + MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART) // was 58fps? MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) - MCFG_SCREEN_SIZE(320, 240) - MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 0, 240-1) MCFG_SCREEN_UPDATE(metro) MCFG_GFXDECODE(14220) @@ -3832,7 +3808,7 @@ static MACHINE_CONFIG_START( lastfort, metro_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68000, XTAL_24MHz/2) MCFG_CPU_PROGRAM_MAP(lastfort_map) - MCFG_CPU_VBLANK_INT_HACK(metro_interrupt,10) /* ? */ + MCFG_TIMER_ADD_SCANLINE("scantimer", metro_interrupt, "screen", 0, 1) MCFG_CPU_ADD("audiocpu", UPD7810, XTAL_24MHz/2) MCFG_CPU_CONFIG(metro_cpu_config) @@ -3844,11 +3820,8 @@ static MACHINE_CONFIG_START( lastfort, metro_state ) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(58) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) + MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART + 40, VTOTAL, VBEND, VBSTART) // was 58fps? MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) - MCFG_SCREEN_SIZE(360, 224) - MCFG_SCREEN_VISIBLE_AREA(0, 360-1, 0, 224-1) MCFG_SCREEN_UPDATE(metro) MCFG_GFXDECODE(14100) @@ -3873,7 +3846,7 @@ static MACHINE_CONFIG_START( lastforg, metro_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68000, XTAL_24MHz/2) MCFG_CPU_PROGRAM_MAP(lastforg_map) - MCFG_CPU_VBLANK_INT_HACK(karatour_interrupt,10) /* ? */ + MCFG_TIMER_ADD_SCANLINE("scantimer", karatour_interrupt, "screen", 0, 1) MCFG_CPU_ADD("audiocpu", UPD7810, XTAL_24MHz/2) MCFG_CPU_CONFIG(metro_cpu_config) @@ -3885,11 +3858,8 @@ static MACHINE_CONFIG_START( lastforg, metro_state ) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(58) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) + MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART + 40, VTOTAL, VBEND, VBSTART) // was 58fps? MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) - MCFG_SCREEN_SIZE(360, 224) - MCFG_SCREEN_VISIBLE_AREA(0, 360-1, 0, 224-1) MCFG_SCREEN_UPDATE(metro) MCFG_GFXDECODE(14100) @@ -3914,18 +3884,15 @@ static MACHINE_CONFIG_START( dokyusei, metro_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68000, XTAL_16MHz) MCFG_CPU_PROGRAM_MAP(dokyusei_map) - MCFG_CPU_VBLANK_INT_HACK(dokyusei_interrupt,2) /* ? */ + MCFG_TIMER_ADD_SCANLINE("scantimer", dokyusei_interrupt, "screen", 0, 1) MCFG_MACHINE_START(metro) MCFG_MACHINE_RESET(metro) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) + MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, 224) MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) - MCFG_SCREEN_SIZE(320, 256-32) - MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 0, 256-32-1) MCFG_SCREEN_UPDATE(metro) MCFG_GFXDECODE(14300) @@ -3958,11 +3925,8 @@ static MACHINE_CONFIG_START( dokyusp, metro_state ) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) + MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, 384, VTOTAL, VBEND, VBSTART) MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) - MCFG_SCREEN_SIZE(384, 256-32) - MCFG_SCREEN_VISIBLE_AREA(0, 384-1, 0, 256-32-1) MCFG_SCREEN_UPDATE(metro) MCFG_GFXDECODE(14300) @@ -3996,11 +3960,8 @@ static MACHINE_CONFIG_START( gakusai, metro_state ) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) + MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART) MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) - MCFG_SCREEN_SIZE(320, 240) - MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 0, 240-1) MCFG_SCREEN_UPDATE(metro) MCFG_GFXDECODE(14300) @@ -4034,11 +3995,8 @@ static MACHINE_CONFIG_START( gakusai2, metro_state ) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) + MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART) MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) - MCFG_SCREEN_SIZE(320, 240) - MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 0, 240-1) MCFG_SCREEN_UPDATE(metro) MCFG_GFXDECODE(14300) @@ -4064,7 +4022,7 @@ static MACHINE_CONFIG_START( pangpoms, metro_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68000, XTAL_24MHz/2) MCFG_CPU_PROGRAM_MAP(pangpoms_map) - MCFG_CPU_VBLANK_INT_HACK(metro_interrupt,10) /* ? */ + MCFG_TIMER_ADD_SCANLINE("scantimer", metro_interrupt, "screen", 0, 1) MCFG_CPU_ADD("audiocpu", UPD7810, XTAL_24MHz/2) MCFG_CPU_CONFIG(metro_cpu_config) @@ -4076,11 +4034,8 @@ static MACHINE_CONFIG_START( pangpoms, metro_state ) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) + MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART + 40, VTOTAL, VBEND, VBSTART) MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) - MCFG_SCREEN_SIZE(360, 224) - MCFG_SCREEN_VISIBLE_AREA(0, 360-1, 0, 224-1) MCFG_SCREEN_UPDATE(metro) MCFG_GFXDECODE(14100) @@ -4106,7 +4061,7 @@ static MACHINE_CONFIG_START( poitto, metro_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68000, XTAL_24MHz/2) MCFG_CPU_PROGRAM_MAP(poitto_map) - MCFG_CPU_VBLANK_INT_HACK(metro_interrupt,10) /* ? */ + MCFG_TIMER_ADD_SCANLINE("scantimer", metro_interrupt, "screen", 0, 1) MCFG_CPU_ADD("audiocpu", UPD7810, XTAL_24MHz/2) MCFG_CPU_CONFIG(metro_cpu_config) @@ -4118,11 +4073,8 @@ static MACHINE_CONFIG_START( poitto, metro_state ) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) + MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART + 40, VTOTAL, VBEND, VBSTART) MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) - MCFG_SCREEN_SIZE(360, 224) - MCFG_SCREEN_VISIBLE_AREA(0, 360-1, 0, 224-1) MCFG_SCREEN_UPDATE(metro) MCFG_GFXDECODE(14100) @@ -4148,8 +4100,8 @@ static MACHINE_CONFIG_START( pururun, metro_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68000, XTAL_24MHz/2) /* Not confirmed */ MCFG_CPU_PROGRAM_MAP(pururun_map) - //MCFG_CPU_VBLANK_INT_HACK(msgogo_interrupt,262) /* fixes the title screen scroll in GunMaster, but makes the game painfully slow */ - MCFG_CPU_VBLANK_INT_HACK(metro_interrupt,10) /* ? */ +// MCFG_TIMER_ADD_SCANLINE("scantimer", msgogo_interrupt, "screen", 0, 1) /* fixes the title screen scroll in GunMaster, but makes the game painfully slow */ + MCFG_TIMER_ADD_SCANLINE("scantimer", metro_interrupt, "screen", 0, 1) /* ? */ MCFG_CPU_ADD("audiocpu", UPD7810, XTAL_24MHz/2) /* Not confiremd */ MCFG_CPU_CONFIG(metro_cpu_config) @@ -4161,11 +4113,8 @@ static MACHINE_CONFIG_START( pururun, metro_state ) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) + MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART) MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) - MCFG_SCREEN_SIZE(320, 224) - MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 0, 224-1) MCFG_SCREEN_UPDATE(metro) MCFG_GFXDECODE(14100) @@ -4192,7 +4141,7 @@ static MACHINE_CONFIG_START( skyalert, metro_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68000, XTAL_24MHz/2) MCFG_CPU_PROGRAM_MAP(skyalert_map) - MCFG_CPU_VBLANK_INT_HACK(metro_interrupt,10) /* ? */ + MCFG_TIMER_ADD_SCANLINE("scantimer", metro_interrupt, "screen", 0, 1) MCFG_CPU_ADD("audiocpu", UPD7810, XTAL_24MHz/2) MCFG_CPU_CONFIG(metro_cpu_config) @@ -4204,11 +4153,8 @@ static MACHINE_CONFIG_START( skyalert, metro_state ) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) + MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART + 40, VTOTAL, VBEND, VBSTART) // was 58fps? MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) - MCFG_SCREEN_SIZE(360, 224) - MCFG_SCREEN_VISIBLE_AREA(0, 360-1, 0, 224-1) MCFG_SCREEN_UPDATE(metro) MCFG_GFXDECODE(14100) @@ -4234,7 +4180,7 @@ static MACHINE_CONFIG_START( toride2g, metro_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68000, XTAL_24MHz/2) MCFG_CPU_PROGRAM_MAP(toride2g_map) - MCFG_CPU_VBLANK_INT_HACK(metro_interrupt,10) /* ? */ + MCFG_TIMER_ADD_SCANLINE("scantimer", metro_interrupt, "screen", 0, 1) MCFG_CPU_ADD("audiocpu", UPD7810, XTAL_24MHz/2) MCFG_CPU_CONFIG(metro_cpu_config) @@ -4246,11 +4192,8 @@ static MACHINE_CONFIG_START( toride2g, metro_state ) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) + MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART) MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) - MCFG_SCREEN_SIZE(320, 224) - MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 0, 224-1) MCFG_SCREEN_UPDATE(metro) MCFG_GFXDECODE(14100) @@ -4283,11 +4226,8 @@ static MACHINE_CONFIG_START( mouja, metro_state ) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(58) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) + MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART) // was 58fps? MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) - MCFG_SCREEN_SIZE(512, 256) - MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 0, 224-1) MCFG_SCREEN_UPDATE(metro) MCFG_GFXDECODE(14300) @@ -4317,7 +4257,7 @@ static MACHINE_CONFIG_START( blzntrnd, metro_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68000, XTAL_16MHz) MCFG_CPU_PROGRAM_MAP(blzntrnd_map) - MCFG_CPU_VBLANK_INT_HACK(karatour_interrupt,10) /* ? */ + MCFG_TIMER_ADD_SCANLINE("scantimer", karatour_interrupt, "screen", 0, 1) MCFG_CPU_ADD("audiocpu", Z80, XTAL_16MHz/2) MCFG_CPU_PROGRAM_MAP(blzntrnd_sound_map) @@ -4328,11 +4268,8 @@ static MACHINE_CONFIG_START( blzntrnd, metro_state ) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(58) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) + MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART) // was 58fps? MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) - MCFG_SCREEN_SIZE(320, 224) - MCFG_SCREEN_VISIBLE_AREA(8, 320-8-1, 0, 224-1) MCFG_SCREEN_UPDATE(metro) MCFG_GFXDECODE(blzntrnd) @@ -4365,7 +4302,7 @@ static MACHINE_CONFIG_START( gstrik2, metro_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68000, XTAL_16MHz) MCFG_CPU_PROGRAM_MAP(blzntrnd_map) - MCFG_CPU_VBLANK_INT_HACK(karatour_interrupt,10) /* ? */ + MCFG_TIMER_ADD_SCANLINE("scantimer", karatour_interrupt, "screen", 0, 1) MCFG_CPU_ADD("audiocpu", Z80, XTAL_16MHz/2) MCFG_CPU_PROGRAM_MAP(blzntrnd_sound_map) @@ -4376,11 +4313,8 @@ static MACHINE_CONFIG_START( gstrik2, metro_state ) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(58) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) + MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART) // was 58fps? MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) - MCFG_SCREEN_SIZE(320, 224) - MCFG_SCREEN_VISIBLE_AREA(8, 320-8-1, 0, 224-1) MCFG_SCREEN_UPDATE(metro) MCFG_GFXDECODE(gstrik2) @@ -4427,14 +4361,16 @@ static INTERRUPT_GEN( puzzlet_interrupt ) state->m_requested_int[2] = 1; update_irq_state(device->machine()); break; - - default: - // timer - device_set_input_line(state->m_maincpu, H8_METRO_TIMER_HACK, HOLD_LINE); - break; } } +static INTERRUPT_GEN( unknown_interrupt ) +{ + metro_state *state = device->machine().driver_data(); + + device_set_input_line(state->m_maincpu, H8_METRO_TIMER_HACK, HOLD_LINE); +} + static MACHINE_CONFIG_START( puzzlet, metro_state ) /* basic machine hardware */ @@ -4442,17 +4378,15 @@ static MACHINE_CONFIG_START( puzzlet, metro_state ) MCFG_CPU_PROGRAM_MAP(puzzlet_map) MCFG_CPU_IO_MAP(puzzlet_io_map) MCFG_CPU_VBLANK_INT_HACK(puzzlet_interrupt, 5) + MCFG_CPU_PERIODIC_INT(unknown_interrupt,60) MCFG_MACHINE_START(metro) MCFG_MACHINE_RESET(metro) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(58) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) + MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, 224) // was 58fps? MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) - MCFG_SCREEN_SIZE(320, 256-32) - MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 0, 256-32-1) MCFG_SCREEN_UPDATE(metro) MCFG_GFXDECODE(14300) diff --git a/src/mame/drivers/pntnpuzl.c b/src/mame/drivers/pntnpuzl.c index 06c32ba696e..49cef193bf9 100644 --- a/src/mame/drivers/pntnpuzl.c +++ b/src/mame/drivers/pntnpuzl.c @@ -394,4 +394,4 @@ static DRIVER_INIT(pip) pc_vga_init(machine, &vga_interface, NULL); } -GAME( 199?, pntnpuzl, 0, pntnpuzl, pntnpuzl, pip, ROT90, "Century?", "Paint & Puzzle",GAME_NO_SOUND|GAME_NOT_WORKING ) +GAME( 199?, pntnpuzl, 0, pntnpuzl, pntnpuzl, pip, ROT0, "Century?", "Paint & Puzzle",GAME_NO_SOUND|GAME_NOT_WORKING ) diff --git a/src/mame/video/metro.c b/src/mame/video/metro.c index 161854a667d..9a1decacaaa 100644 --- a/src/mame/video/metro.c +++ b/src/mame/video/metro.c @@ -444,9 +444,10 @@ void metro_draw_sprites( running_machine &machine, bitmap_t *bitmap, const recta metro_state *state = machine.driver_data(); UINT8 *base_gfx = machine.region("gfx1")->base(); UINT8 *gfx_max = base_gfx + machine.region("gfx1")->bytes(); + const rectangle &visarea = machine.primary_screen->visible_area(); - int max_x = machine.primary_screen->width(); - int max_y = machine.primary_screen->height(); + int max_x = visarea.max_x + 1; + int max_y = visarea.max_y + 1; int max_sprites = state->m_spriteram_size / 8; int sprites = state->m_videoregs[0x00/2] % max_sprites; @@ -725,9 +726,10 @@ SCREEN_UPDATE( metro ) metro_state *state = screen->machine().driver_data(); int pri, layers_ctrl = -1; UINT16 screenctrl = *state->m_screenctrl; + const rectangle &visarea = screen->machine().primary_screen->visible_area(); - state->m_sprite_xoffs = state->m_videoregs[0x06 / 2] - screen->width() / 2; - state->m_sprite_yoffs = state->m_videoregs[0x04 / 2] - screen->height() / 2; + state->m_sprite_xoffs = state->m_videoregs[0x06 / 2] - (visarea.max_x + 1) / 2; + state->m_sprite_yoffs = state->m_videoregs[0x04 / 2] - (visarea.max_y + 1) / 2; /* The background color is selected by a register */ bitmap_fill(screen->machine().priority_bitmap, cliprect, 0);