From 6d54ed169c8cea476ac1ddc95615b132a905e86d Mon Sep 17 00:00:00 2001 From: Zsolt Vasvari Date: Wed, 5 Mar 2008 08:00:31 +0000 Subject: [PATCH] - Merged memory maps - Uses PORT_CHANGED for coins - Renamed 'Inferno (S2650) to 'Inferno (Meadows)' - Renamed 'Bowling 3D' to '3-D Bowling' - Added NO_DUMP entries for Gypsy Juggler's ball graphics and added GAME_IMPERFECT_GRAPHICS flag --- src/mame/drivers/meadows.c | 205 ++++++++++++++++--------------------- src/mame/video/meadows.c | 3 +- 2 files changed, 92 insertions(+), 116 deletions(-) diff --git a/src/mame/drivers/meadows.c b/src/mame/drivers/meadows.c index 130dbfc3c74..9bfff19868a 100644 --- a/src/mame/drivers/meadows.c +++ b/src/mame/drivers/meadows.c @@ -6,6 +6,7 @@ Games supported: * Dead Eye + * 3-D Bowling * Gypsy Juggler * Inferno @@ -87,7 +88,7 @@ 0c00..0c03 H/W input ports ----------------------------------------------- - 0 R sound command from CPU #0 + 0 R audio command from CPU #0 D0-D7 8 different sounds ??? 1 R ??? @@ -99,9 +100,9 @@ D4-D7 volume bits 0 .. 3 (bit 4 is CPU #1 flag output) 2 W D0-D7 preset for counter, clk is 5 MHz / 32 3 W D0 divide c02 counter by 0: 2, 1: 4 - D1 sound enable for c02 tone generator - D2 sound enable for DAC - D3 sound enable for c01 tone generator + D1 audio enable for c02 tone generator + D2 audio enable for DAC + D3 audio enable for c01 tone generator 0e00-0eff RAM @@ -132,11 +133,8 @@ * *************************************/ -static UINT64 cycles_at_vsync; static UINT8 main_sense_state; -static UINT8 sound_sense_state; -static UINT8 coin1_state; -static UINT8 minferno_sense; +static UINT8 audio_sense_state; @@ -148,15 +146,13 @@ static UINT8 minferno_sense; static READ8_HANDLER( hsync_chain_r ) { - /* horizontal sync divider chain */ - UINT8 val = (activecpu_gettotalcycles() - cycles_at_vsync) & 0xff; + UINT8 val = video_screen_get_hpos(0); return BITSWAP8(val,0,1,2,3,4,5,6,7); } static READ8_HANDLER( vsync_chain_hi_r ) { - /* vertical sync divider chain */ UINT8 val = video_screen_get_vpos(0); return ((val >> 1) & 0x08) | ((val >> 3) & 0x04) | ((val >> 5) & 0x02) | (val >> 7); } @@ -164,7 +160,6 @@ static READ8_HANDLER( vsync_chain_hi_r ) static READ8_HANDLER( vsync_chain_lo_r ) { - /* vertical sync divider chain */ UINT8 val = video_screen_get_vpos(0); return val & 0x0f; } @@ -173,27 +168,27 @@ static READ8_HANDLER( vsync_chain_lo_r ) /************************************* * - * Sound control writes + * Audio control writes * *************************************/ -static WRITE8_HANDLER( meadows_sound_w ) +static WRITE8_HANDLER( meadows_audio_w ) { switch (offset) { case 0: if (meadows_0c00 == data) break; - logerror("meadows_sound_w %d $%02x\n", offset, data); + logerror("meadows_audio_w %d $%02x\n", offset, data); meadows_0c00 = data; break; case 1: - logerror("meadows_sound_w %d $%02x\n", offset, data); + logerror("meadows_audio_w %d $%02x\n", offset, data); break; case 2: - logerror("meadows_sound_w %d $%02x\n", offset, data); + logerror("meadows_audio_w %d $%02x\n", offset, data); break; case 3: @@ -204,6 +199,19 @@ static WRITE8_HANDLER( meadows_sound_w ) +/************************************* + * + * Coin handling + * + *************************************/ + +static INPUT_CHANGED( coin_inserted ) +{ + cpunum_set_input_line_and_vector(machine, 0, 0, (newval ? ASSERT_LINE : CLEAR_LINE), 0x82); +} + + + /************************************* * * Main CPU interrupt @@ -212,24 +220,9 @@ static WRITE8_HANDLER( meadows_sound_w ) static INTERRUPT_GEN( meadows_interrupt ) { - /* preserve the actual cycle count */ - cycles_at_vsync = cpunum_gettotalcycles(0); - /* fake something toggling the sense input line of the S2650 */ main_sense_state ^= 1; cpunum_set_input_line(machine, 0, 1, main_sense_state ? ASSERT_LINE : CLEAR_LINE); - - /* check the fake coin input */ - if (readinputport(3) & 0x01) - { - if (!coin1_state) - { - coin1_state = 1; - cpunum_set_input_line_and_vector(machine, 0, 0, PULSE_LINE, 0x82); - } - } - else - coin1_state = 0; } @@ -242,21 +235,19 @@ static INTERRUPT_GEN( meadows_interrupt ) static INTERRUPT_GEN( minferno_interrupt ) { - /* preserve the actual cycle count */ - cycles_at_vsync = cpunum_gettotalcycles(0); - minferno_sense++; - cpunum_set_input_line(machine, 0, 1, (minferno_sense & 0x40) ? ASSERT_LINE : CLEAR_LINE ); + main_sense_state++; + cpunum_set_input_line(machine, 0, 1, (main_sense_state & 0x40) ? ASSERT_LINE : CLEAR_LINE ); } /************************************* * - * Sound hardware output control + * Audio hardware output control * *************************************/ -static WRITE8_HANDLER( sound_hardware_w ) +static WRITE8_HANDLER( audio_hardware_w ) { switch (offset & 3) { @@ -267,7 +258,7 @@ static WRITE8_HANDLER( sound_hardware_w ) case 1: /* counter clk 5 MHz / 256 */ if (data == meadows_0c01) break; - logerror("sound_w ctr1 preset $%x amp %d\n", data & 15, data >> 4); + logerror("audio_w ctr1 preset $%x amp %d\n", data & 15, data >> 4); meadows_0c01 = data; meadows_sh_update(); break; @@ -275,15 +266,15 @@ static WRITE8_HANDLER( sound_hardware_w ) case 2: /* counter clk 5 MHz / 32 (/ 2 or / 4) */ if (data == meadows_0c02) break; - logerror("sound_w ctr2 preset $%02x\n", data); + logerror("audio_w ctr2 preset $%02x\n", data); meadows_0c02 = data; meadows_sh_update(); break; - case 3: /* sound enable */ + case 3: /* audio enable */ if (data == meadows_0c03) break; - logerror("sound_w enable ctr2/2:%d ctr2:%d dac:%d ctr1:%d\n", data&1, (data>>1)&1, (data>>2)&1, (data>>3)&1); + logerror("audio_w enable ctr2/2:%d ctr2:%d dac:%d ctr1:%d\n", data&1, (data>>1)&1, (data>>2)&1, (data>>3)&1); meadows_0c03 = data; meadows_sh_update(); break; @@ -294,11 +285,11 @@ static WRITE8_HANDLER( sound_hardware_w ) /************************************* * - * Sound hardware read + * Audio hardware read * *************************************/ -static READ8_HANDLER( sound_hardware_r ) +static READ8_HANDLER( audio_hardware_r ) { int data = 0; @@ -319,15 +310,15 @@ static READ8_HANDLER( sound_hardware_r ) /************************************* * - * Sound hardware interrupts + * Audio hardware interrupts * *************************************/ -static INTERRUPT_GEN( sound_interrupt ) +static INTERRUPT_GEN( audio_interrupt ) { /* fake something toggling the sense input line of the S2650 */ - sound_sense_state ^= 1; - cpunum_set_input_line(machine, 1, 1, sound_sense_state ? ASSERT_LINE : CLEAR_LINE); + audio_sense_state ^= 1; + cpunum_set_input_line(machine, 1, 1, audio_sense_state ? ASSERT_LINE : CLEAR_LINE); } @@ -340,8 +331,8 @@ static INTERRUPT_GEN( sound_interrupt ) static PALETTE_INIT( meadows ) { - palette_set_color(machine,0,MAKE_RGB(0x00,0x00,0x00)); /* BLACK */ - palette_set_color(machine,1,MAKE_RGB(0xff,0xff,0xff)); /* WHITE */ + palette_set_color(machine, 0, RGB_BLACK); + palette_set_color(machine, 1, RGB_WHITE); } @@ -352,48 +343,34 @@ static PALETTE_INIT( meadows ) * *************************************/ -static ADDRESS_MAP_START( writemem, ADDRESS_SPACE_PROGRAM, 8 ) - AM_RANGE(0x0000, 0x0bff) AM_WRITE(MWA8_ROM) - AM_RANGE(0x0c00, 0x0c03) AM_WRITE(meadows_sound_w) - AM_RANGE(0x0d00, 0x0d0f) AM_WRITE(meadows_spriteram_w) AM_BASE(&spriteram) - AM_RANGE(0x0e00, 0x0eff) AM_WRITE(MWA8_RAM) - AM_RANGE(0x1000, 0x1bff) AM_WRITE(MWA8_ROM) - AM_RANGE(0x1c00, 0x1fff) AM_WRITE(meadows_videoram_w) AM_BASE(&videoram) AM_SIZE(&videoram_size) -ADDRESS_MAP_END - - -static ADDRESS_MAP_START( readmem, ADDRESS_SPACE_PROGRAM, 8 ) - AM_RANGE(0x0000, 0x0bff) AM_READ(MRA8_ROM) +static ADDRESS_MAP_START( meadows_main_map, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x0bff) AM_ROM AM_RANGE(0x0c00, 0x0c00) AM_READ(input_port_0_r) AM_RANGE(0x0c01, 0x0c01) AM_READ(input_port_1_r) AM_RANGE(0x0c02, 0x0c02) AM_READ(hsync_chain_r) AM_RANGE(0x0c03, 0x0c03) AM_READ(input_port_2_r) - AM_RANGE(0x0e00, 0x0eff) AM_READ(MRA8_RAM) - AM_RANGE(0x1000, 0x1bff) AM_READ(MRA8_ROM) - AM_RANGE(0x1c00, 0x1fff) AM_READ(MRA8_RAM) + AM_RANGE(0x0c00, 0x0c03) AM_WRITE(meadows_audio_w) + AM_RANGE(0x0d00, 0x0d0f) AM_WRITE(meadows_spriteram_w) AM_BASE(&spriteram) + AM_RANGE(0x0e00, 0x0eff) AM_RAM + AM_RANGE(0x1000, 0x1bff) AM_ROM + AM_RANGE(0x1c00, 0x1fff) AM_READWRITE(MRA8_RAM, meadows_videoram_w) AM_BASE(&videoram) AM_SIZE(&videoram_size) ADDRESS_MAP_END -static ADDRESS_MAP_START( minferno_writemem, ADDRESS_SPACE_PROGRAM, 8 ) - AM_RANGE(0x0000, 0x0bff) AM_WRITE(MWA8_ROM) - AM_RANGE(0x1c00, 0x1eff) AM_WRITE(meadows_videoram_w) AM_BASE(&videoram) AM_SIZE(&videoram_size) - AM_RANGE(0x1f00, 0x1f03) AM_WRITE(meadows_sound_w) -ADDRESS_MAP_END - - -static ADDRESS_MAP_START( minferno_readmem, ADDRESS_SPACE_PROGRAM, 8 ) - AM_RANGE(0x0000, 0x0bff) AM_READ(MRA8_ROM) - AM_RANGE(0x1c00, 0x1eff) AM_READ(MRA8_RAM) +static ADDRESS_MAP_START( minferno_main_map, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x0bff) AM_ROM + AM_RANGE(0x1c00, 0x1eff) AM_READWRITE(MRA8_RAM, meadows_videoram_w) AM_BASE(&videoram) AM_SIZE(&videoram_size) AM_RANGE(0x1f00, 0x1f00) AM_READ(input_port_0_r) AM_RANGE(0x1f01, 0x1f01) AM_READ(input_port_1_r) AM_RANGE(0x1f02, 0x1f02) AM_READ(input_port_2_r) AM_RANGE(0x1f03, 0x1f03) AM_READ(input_port_3_r) + AM_RANGE(0x1f00, 0x1f03) AM_WRITE(meadows_audio_w) AM_RANGE(0x1f04, 0x1f04) AM_READ(vsync_chain_hi_r) AM_RANGE(0x1f05, 0x1f05) AM_READ(vsync_chain_lo_r) ADDRESS_MAP_END -static ADDRESS_MAP_START( minferno_readport, ADDRESS_SPACE_IO, 8 ) +static ADDRESS_MAP_START( minferno_io_map, ADDRESS_SPACE_IO, 8 ) AM_RANGE(S2650_DATA_PORT, S2650_DATA_PORT) AM_READ(input_port_4_r) ADDRESS_MAP_END @@ -401,23 +378,17 @@ ADDRESS_MAP_END /************************************* * - * Sound CPU memory handlers + * Audio CPU memory handlers * *************************************/ -static ADDRESS_MAP_START( sound_writemem, ADDRESS_SPACE_PROGRAM, 8 ) - AM_RANGE(0x0000, 0x0bff) AM_WRITE(MWA8_ROM) - AM_RANGE(0x0c00, 0x0c03) AM_WRITE(sound_hardware_w) - AM_RANGE(0x0e00, 0x0eff) AM_WRITE(MWA8_RAM) +static ADDRESS_MAP_START( audio_map, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x0bff) AM_ROM + AM_RANGE(0x0c00, 0x0c03) AM_READWRITE(audio_hardware_r, audio_hardware_w) + AM_RANGE(0x0e00, 0x0eff) AM_RAM ADDRESS_MAP_END -static ADDRESS_MAP_START( sound_readmem, ADDRESS_SPACE_PROGRAM, 8 ) - AM_RANGE(0x0000, 0x0bff) AM_READ(MRA8_ROM) - AM_RANGE(0x0c00, 0x0c03) AM_READ(sound_hardware_r) - AM_RANGE(0x0e00, 0x0eff) AM_READ(MRA8_RAM) -ADDRESS_MAP_END - /************************************* @@ -465,7 +436,7 @@ static INPUT_PORTS_START( meadows ) PORT_DIPSETTING( 0x00, DEF_STR( None )) PORT_START /* FAKE coinage */ - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_CHANGED(coin_inserted, 0) PORT_BIT( 0x8e, IP_ACTIVE_LOW, IPT_UNUSED ) INPUT_PORTS_END @@ -574,17 +545,10 @@ GFXDECODE_END /************************************* * - * Sound interfaces + * Audio interfaces * *************************************/ -static const struct Samplesinterface meadows_samples_interface = -{ - 2, - NULL, - meadows_sh_start -}; - static const char *const bowl3d_sample_names[] = { "*bowl3d", @@ -594,15 +558,26 @@ static const char *const bowl3d_sample_names[] = "footstep.wav", /* "foot sweep" */ "crash.wav", /* "crash" */ "cheering.wav", /* "cheering" */ - 0 /* end of array */ + 0 }; + +static const struct Samplesinterface meadows_samples_interface = +{ + 2, + NULL, + meadows_sh_start +}; + + static const struct Samplesinterface bowl3d_samples_interface = { - 1, /* one channel */ + 1, bowl3d_sample_names }; + + /************************************* * * Machine drivers @@ -613,13 +588,13 @@ static MACHINE_DRIVER_START( meadows ) /* basic machine hardware */ MDRV_CPU_ADD(S2650, 5000000/8) /* 5MHz / 8 = 625 kHz */ - MDRV_CPU_PROGRAM_MAP(readmem,writemem) + MDRV_CPU_PROGRAM_MAP(meadows_main_map,0) MDRV_CPU_VBLANK_INT("main", meadows_interrupt) /* one interrupt per frame!? */ MDRV_CPU_ADD(S2650, 5000000/8) /* audio CPU */ /* 5MHz / 8 = 625 kHz */ - MDRV_CPU_PROGRAM_MAP(sound_readmem,sound_writemem) - MDRV_CPU_PERIODIC_INT(sound_interrupt, (double)5000000/131072) + MDRV_CPU_PROGRAM_MAP(audio_map,0) + MDRV_CPU_PERIODIC_INT(audio_interrupt, (double)5000000/131072) MDRV_INTERLEAVE(10) @@ -637,7 +612,7 @@ static MACHINE_DRIVER_START( meadows ) MDRV_VIDEO_START(meadows) MDRV_VIDEO_UPDATE(meadows) - /* sound hardware */ + /* audio hardware */ MDRV_SPEAKER_STANDARD_MONO("mono") MDRV_SOUND_ADD(DAC, 0) @@ -653,8 +628,8 @@ static MACHINE_DRIVER_START( minferno ) /* basic machine hardware */ MDRV_CPU_ADD(S2650, 5000000/8/3) /* 5MHz / 8 = 625 kHz */ - MDRV_CPU_PROGRAM_MAP(minferno_readmem,minferno_writemem) - MDRV_CPU_IO_MAP(minferno_readport,0) + MDRV_CPU_PROGRAM_MAP(minferno_main_map,0) + MDRV_CPU_IO_MAP(minferno_io_map,0) MDRV_CPU_VBLANK_INT("main", minferno_interrupt) /* video hardware */ @@ -671,7 +646,7 @@ static MACHINE_DRIVER_START( minferno ) MDRV_VIDEO_START(meadows) MDRV_VIDEO_UPDATE(meadows) - /* sound hardware */ + /* audio hardware */ MACHINE_DRIVER_END @@ -679,13 +654,14 @@ static MACHINE_DRIVER_START( bowl3d ) /* basic machine hardware */ MDRV_IMPORT_FROM(meadows) - /* video hardware */ + /* audio hardware */ MDRV_SOUND_ADD(SAMPLES, 0) MDRV_SOUND_CONFIG(bowl3d_samples_interface) MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MACHINE_DRIVER_END + /************************************* * * ROM definitions @@ -715,10 +691,11 @@ ROM_START( deadeye ) ROM_REGION( 0x0400, REGION_GFX5, ROMREGION_DISPOSE ) /* empty */ - ROM_REGION( 0x08000, REGION_CPU2, 0 ) /* 32K for code for the sound cpu */ + ROM_REGION( 0x08000, REGION_CPU2, 0 ) ROM_LOAD( "de_snd", 0x0000, 0x0400, CRC(c10a1b1a) SHA1(779ea261d23360634081295a164cacbd819d8719) ) ROM_END + ROM_START( bowl3d ) ROM_REGION( 0x08000, REGION_CPU1, 0 ) ROM_LOAD( "b3d.h8", 0x0000, 0x0400, CRC(be38feeb) SHA1(feab3c61ce1e351c02f6ffa7f7f2ac90e62e7719) ) @@ -770,12 +747,12 @@ ROM_START( gypsyjug ) /* empty (copied from 2) */ ROM_REGION( 0x0400, REGION_GFX4, ROMREGION_DISPOSE ) - /* empty (filled with fake data) */ + ROM_LOAD( "gj.x", 0x0000, 0x0400, NO_DUMP ) /* missing */ ROM_REGION( 0x0400, REGION_GFX5, ROMREGION_DISPOSE ) - /* empty (filled with fake data) */ + ROM_LOAD( "gj.y", 0x0000, 0x0400, NO_DUMP ) /* missing */ - ROM_REGION( 0x08000, REGION_CPU2, 0 ) /* 32K for code for the sound cpu */ + ROM_REGION( 0x08000, REGION_CPU2, 0 ) ROM_LOAD( "gj.a4s", 0x0000, 0x0400, CRC(17a116bc) SHA1(797ba0b292afa3ba7eec985b533014acc00ed47d) ) ROM_LOAD( "gj.a5s", 0x0400, 0x0400, CRC(fc23ae09) SHA1(42be34a9ef8c4c8ef9f94c85ca031076f84faa96) ) ROM_LOAD( "gj.a6s", 0x0800, 0x0400, CRC(9e7bd71e) SHA1(e00801820c1a39cbfed124a29470da03cf8b40b4) ) @@ -831,7 +808,7 @@ static DRIVER_INIT( minferno ) int i, length; UINT8 *mem; - /* Create an inverted copy of the graphics data */ + /* create an inverted copy of the graphics data */ mem = memory_region(REGION_GFX1); length = memory_region_length(REGION_GFX1); for (i = 0; i < length/2; i++) @@ -847,6 +824,6 @@ static DRIVER_INIT( minferno ) *************************************/ GAMEL( 1978, deadeye, 0, meadows, meadows, 0, ROT0, "Meadows", "Dead Eye", 0, layout_deadeye ) -GAME( 1978, bowl3d, 0, bowl3d, meadows, 0, ROT90, "Meadows", "Bowling 3D", GAME_NOT_WORKING ) -GAMEL( 1978, gypsyjug, 0, meadows, meadows, gypsyjug, ROT0, "Meadows", "Gypsy Juggler", 0, layout_gypsyjug ) -GAME ( 1978, minferno, 0, minferno, minferno, minferno, ROT0, "Meadows", "Inferno (S2650)", GAME_NO_SOUND ) +GAME ( 1978, bowl3d, 0, bowl3d, meadows, 0, ROT90, "Meadows", "3-D Bowling", GAME_NOT_WORKING ) +GAMEL( 1978, gypsyjug, 0, meadows, meadows, gypsyjug, ROT0, "Meadows", "Gypsy Juggler", GAME_IMPERFECT_GRAPHICS, layout_gypsyjug ) +GAME ( 1978, minferno, 0, minferno, minferno, minferno, ROT0, "Meadows", "Inferno (Meadows)", GAME_NO_SOUND ) diff --git a/src/mame/video/meadows.c b/src/mame/video/meadows.c index 63054a7e6bd..656a374f967 100644 --- a/src/mame/video/meadows.c +++ b/src/mame/video/meadows.c @@ -63,8 +63,7 @@ WRITE8_HANDLER( meadows_videoram_w ) WRITE8_HANDLER( meadows_spriteram_w ) { - if (spriteram[offset] != data) - video_screen_update_partial(0, video_screen_get_vpos(0)); + video_screen_update_now(0); spriteram[offset] = data; }