mame/src/mame/drivers/meadows.c
Aaron Giles fa2204019f From Luigi30:
Clocks derived from crystals in in ace.c, asteroid.c, avalnche.c, blockade.c, boxer.c, bzone.c, cosmic.c, firetrk.c, galaga.c, lazercmd.c, meadows.c, missile.c, orbit.c, skydiver.c, sprint2.c, warpwarp.c, williams.c

Added diplocations to meadows.c, mugsmash.c, orbit.c

Unified sprint2.c memory map

Unified galaga.c CPU4 memory maps
2008-11-24 03:12:56 +00:00

837 lines
25 KiB
C

/***************************************************************************
Meadows S2650 driver
driver by J. Buchmueller, June '98
Games supported:
* Dead Eye
* 3-D Bowling
* Gypsy Juggler
* Inferno
Known issues:
* none at this time
****************************************************************************
***********************************************
memory map CPU #0 (preliminary)
***********************************************
0000..0bff ROM part one
0c00..0c03 H/W input ports
-----------------------------------------------
0 R control buttons
D0 button 1
D1 start 2 player game
1 R analog control
D0-D7 center is 0x7f
2 R horizontal sync divider chain
D7 9.765kHz ... D0 2.5MHz
3 R dip switch settings
D0-D2 select 2 to 9 coins
D3-D4 Coins per play D3 D4
1 coin 1 play 0 0
2 coins 1 play 1 0
1 coin 2 plays 0 1
free play 1 1
D5 Attact music 0:off, 1:on
D6-D7 Extended play D6 D7
none 0 0
5000 pts 1 0
15000 pts 0 1
35000 pts 1 1
0d00-0d0f H/W sprites
-----------------------------------------------
0 W D0-D7 sprite 0 horz
1 W D0-D7 sprite 1 horz
2 W D0-D7 sprite 2 horz
3 W D0-D7 sprite 3 horz
4 W D0-D7 sprite 0 vert
5 W D0-D7 sprite 2 vert
6 W D0-D7 sprite 3 vert
7 W D0-D7 sprite 4 vert
8 W D0-D7 sprite 0 select
D0-D3 sprite #
D4 prom (not sure)
D5 flip x
9 W sprite 1 select
D0-D3 sprite #
D4 prom (not sure)
D5 flip x
a W sprite 2 select
D0-D3 sprite #
D4 prom (not sure)
D5 flip x
b W sprite 3 select
D0-D3 sprite #
D4 prom (not sure)
D5 flip x
0e00-0eff RAM
1000-1bff ROM part two
1c00-1fff RAM video buffer
***********************************************
memory map CPU #1 (preliminary)
***********************************************
0000..0bff ROM part one
0c00..0c03 H/W input ports
-----------------------------------------------
0 R audio command from CPU #0
D0-D7 8 different sounds ???
1 R ???
2 R ???
3 R ???
0 W D0-D7 DAC
1 W D0-D3 preset for counter, clk is 5 MHz / 256
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 audio enable for c02 tone generator
D2 audio enable for DAC
D3 audio enable for c01 tone generator
0e00-0eff RAM
********************************************
Inferno memory map (very incomplete)
********************************************
0000..0bff ROM part one
1c00..1eff video buffer
1f00..1f03 hardware?
***************************************************************************/
#include "driver.h"
#include "cpu/s2650/s2650.h"
#include "meadows.h"
#include "sound/dac.h"
#include "sound/samples.h"
#include "deadeye.lh"
#include "gypsyjug.lh"
#define MASTER_CLOCK XTAL_5MHz
/*************************************
*
* Local variables
*
*************************************/
static UINT8 main_sense_state;
static UINT8 audio_sense_state;
/*************************************
*
* Special input ports
*
*************************************/
static READ8_HANDLER( hsync_chain_r )
{
UINT8 val = video_screen_get_hpos(space->machine->primary_screen);
return BITSWAP8(val,0,1,2,3,4,5,6,7);
}
static READ8_HANDLER( vsync_chain_hi_r )
{
UINT8 val = video_screen_get_vpos(space->machine->primary_screen);
return ((val >> 1) & 0x08) | ((val >> 3) & 0x04) | ((val >> 5) & 0x02) | (val >> 7);
}
static READ8_HANDLER( vsync_chain_lo_r )
{
UINT8 val = video_screen_get_vpos(space->machine->primary_screen);
return val & 0x0f;
}
/*************************************
*
* Audio control writes
*
*************************************/
static WRITE8_HANDLER( meadows_audio_w )
{
switch (offset)
{
case 0:
if (meadows_0c00 == data)
break;
logerror("meadows_audio_w %d $%02x\n", offset, data);
meadows_0c00 = data;
break;
case 1:
logerror("meadows_audio_w %d $%02x\n", offset, data);
break;
case 2:
logerror("meadows_audio_w %d $%02x\n", offset, data);
break;
case 3:
/* S2650_Clear_Pending_Interrupts(); */
break;
}
}
/*************************************
*
* Coin handling
*
*************************************/
static INPUT_CHANGED( coin_inserted )
{
cpu_set_input_line_and_vector(field->port->machine->cpu[0], 0, (newval ? ASSERT_LINE : CLEAR_LINE), 0x82);
}
/*************************************
*
* Main CPU interrupt
*
*************************************/
static INTERRUPT_GEN( meadows_interrupt )
{
/* fake something toggling the sense input line of the S2650 */
main_sense_state ^= 1;
cpu_set_input_line(device, 1, main_sense_state ? ASSERT_LINE : CLEAR_LINE);
}
/*************************************
*
* Main CPU interrupt (Inferno)
*
*************************************/
static INTERRUPT_GEN( minferno_interrupt )
{
main_sense_state++;
cpu_set_input_line(device, 1, (main_sense_state & 0x40) ? ASSERT_LINE : CLEAR_LINE );
}
/*************************************
*
* Audio hardware output control
*
*************************************/
static WRITE8_HANDLER( audio_hardware_w )
{
switch (offset & 3)
{
case 0: /* DAC */
meadows_sh_dac_w(data ^ 0xff);
break;
case 1: /* counter clk 5 MHz / 256 */
if (data == meadows_0c01)
break;
logerror("audio_w ctr1 preset $%x amp %d\n", data & 15, data >> 4);
meadows_0c01 = data;
meadows_sh_update(space->machine);
break;
case 2: /* counter clk 5 MHz / 32 (/ 2 or / 4) */
if (data == meadows_0c02)
break;
logerror("audio_w ctr2 preset $%02x\n", data);
meadows_0c02 = data;
meadows_sh_update(space->machine);
break;
case 3: /* audio enable */
if (data == meadows_0c03)
break;
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(space->machine);
break;
}
}
/*************************************
*
* Audio hardware read
*
*************************************/
static READ8_HANDLER( audio_hardware_r )
{
int data = 0;
switch (offset)
{
case 0:
data = meadows_0c00;
break;
case 1: break;
case 2: break;
case 3: break;
}
return data;
}
/*************************************
*
* Audio hardware interrupts
*
*************************************/
static INTERRUPT_GEN( audio_interrupt )
{
/* fake something toggling the sense input line of the S2650 */
audio_sense_state ^= 1;
cpu_set_input_line(device, 1, audio_sense_state ? ASSERT_LINE : CLEAR_LINE);
}
/*************************************
*
* Palette init
*
*************************************/
static PALETTE_INIT( meadows )
{
palette_set_color(machine, 0, RGB_BLACK);
palette_set_color(machine, 1, RGB_WHITE);
}
/*************************************
*
* Main CPU memory handlers
*
*************************************/
static ADDRESS_MAP_START( meadows_main_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x0bff) AM_ROM
AM_RANGE(0x0c00, 0x0c00) AM_READ_PORT("INPUTS")
AM_RANGE(0x0c01, 0x0c01) AM_READ_PORT("STICK")
AM_RANGE(0x0c02, 0x0c02) AM_READ(hsync_chain_r)
AM_RANGE(0x0c03, 0x0c03) AM_READ_PORT("DSW")
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_RAM_WRITE(meadows_videoram_w) AM_BASE(&videoram) AM_SIZE(&videoram_size)
ADDRESS_MAP_END
static ADDRESS_MAP_START( minferno_main_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x0bff) AM_ROM
AM_RANGE(0x1c00, 0x1eff) AM_RAM_WRITE(meadows_videoram_w) AM_BASE(&videoram) AM_SIZE(&videoram_size)
AM_RANGE(0x1f00, 0x1f00) AM_READ_PORT("JOY1")
AM_RANGE(0x1f01, 0x1f01) AM_READ_PORT("JOY2")
AM_RANGE(0x1f02, 0x1f02) AM_READ_PORT("BUTTONS")
AM_RANGE(0x1f03, 0x1f03) AM_READ_PORT("DSW1")
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_io_map, ADDRESS_SPACE_IO, 8 )
AM_RANGE(S2650_DATA_PORT, S2650_DATA_PORT) AM_READ_PORT("DSW2")
ADDRESS_MAP_END
/*************************************
*
* Audio CPU memory handlers
*
*************************************/
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
/*************************************
*
* Port definitions
*
*************************************/
static INPUT_PORTS_START( meadows )
PORT_START("INPUTS")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("STICK")
PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X ) PORT_MINMAX(0x10,0xf0) PORT_SENSITIVITY(100) PORT_KEYDELTA(10)
PORT_START("DSW")
PORT_DIPNAME( 0x07, 0x01, DEF_STR( Lives ) ) PORT_DIPLOCATION("DSW1:3,2,1")
PORT_DIPSETTING( 0x00, "2" )
PORT_DIPSETTING( 0x01, "3" )
PORT_DIPSETTING( 0x02, "4" )
PORT_DIPSETTING( 0x03, "5" )
PORT_DIPSETTING( 0x04, "6" )
PORT_DIPSETTING( 0x05, "7" )
PORT_DIPSETTING( 0x06, "8" )
PORT_DIPSETTING( 0x07, "9" )
PORT_DIPNAME( 0x18, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("DSW1:5,4")
PORT_DIPSETTING( 0x10, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x18, DEF_STR( Free_Play ) )
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("DSW1:6")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x20, DEF_STR( On ) )
PORT_DIPNAME( 0xc0, 0x40, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("DSW1:8,7")
PORT_DIPSETTING( 0x40, "5000")
PORT_DIPSETTING( 0x80, "15000")
PORT_DIPSETTING( 0xc0, "35000")
PORT_DIPSETTING( 0x00, DEF_STR( None ))
PORT_START("FAKE")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_CHANGED(coin_inserted, 0)
PORT_BIT( 0x8e, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END
static INPUT_PORTS_START( minferno )
PORT_START("JOY1")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)
PORT_START("JOY2")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
PORT_START("BUTTONS")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("DSW1")
PORT_DIPNAME( 0x01, 0x01, "Coin Option" ) PORT_DIPLOCATION("DSW1:4")
PORT_DIPSETTING( 0x00, "1 Game/Coin" )
PORT_DIPSETTING( 0x01, "1 Player/Coin" )
PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("DSW1:3")
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_COIN1 )
PORT_START("DSW2")
PORT_DIPNAME( 0x03, 0x00, DEF_STR( Game_Time ) ) PORT_DIPLOCATION("DSW1:2,1")
PORT_DIPSETTING( 0x00, "60s" )
PORT_DIPSETTING( 0x01, "90s" )
PORT_DIPSETTING( 0x02, "120s" )
PORT_DIPSETTING( 0x03, "180s" )
PORT_DIPNAME( 0x0c, 0x04, "Extended Play Score" ) PORT_DIPLOCATION("DSW1:6,5")
PORT_DIPSETTING( 0x00, "3000/6000" )
PORT_DIPSETTING( 0x04, "4000/7000" )
PORT_DIPSETTING( 0x08, "5000/8000" )
PORT_DIPSETTING( 0x0c, "6000/9000" )
PORT_DIPNAME( 0x30, 0x10, "Extended Play Time" ) PORT_DIPLOCATION("DSW1:7,8")
PORT_DIPSETTING( 0x00, DEF_STR( None ) )
PORT_DIPSETTING( 0x10, "20s" )
PORT_DIPSETTING( 0x20, "40s" )
PORT_DIPSETTING( 0x30, "60s" )
/* PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unused ) )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x40, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unused ) )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x80, DEF_STR( On ) ) */
INPUT_PORTS_END
/*************************************
*
* Graphics layouts
*
*************************************/
static const gfx_layout charlayout =
{
8,8, /* 8*8 characters */
128, /* 128 characters ? */
1, /* 1 bit per pixel */
{ 0 }, /* no bitplanes */
{ 0, 1, 2, 3, 4, 5, 6, 7 }, /* pretty straight layout */
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
8*8 /* every char takes 8 bytes */
};
static const gfx_layout spritelayout =
{
16,16, /* 16*16 sprites ? */
32, /* 32 sprites */
1, /* 1 bits per pixel */
{ 0 }, /* 1 bitplane */
{ 0, 1, 2, 3, 4, 5, 6, 7,
8, 9,10,11,12,13,14,15 }, /* pretty straight layout */
{ 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16,
8*16, 9*16,10*16,11*16,12*16,13*16,14*16,15*16 },
16*2*8 /* every sprite takes 32 bytes */
};
static GFXDECODE_START( meadows )
GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 1 ) /* character generator */
GFXDECODE_ENTRY( "gfx2", 0, spritelayout, 0, 1 ) /* sprite prom 1 */
GFXDECODE_ENTRY( "gfx3", 0, spritelayout, 0, 1 ) /* sprite prom 2 */
GFXDECODE_ENTRY( "gfx4", 0, spritelayout, 0, 1 ) /* sprite prom 3 (unused) */
GFXDECODE_ENTRY( "gfx5", 0, spritelayout, 0, 1 ) /* sprite prom 4 (unused) */
GFXDECODE_END
static GFXDECODE_START( minferno )
GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 4 )
GFXDECODE_END
/*************************************
*
* Audio interfaces
*
*************************************/
static const char *const bowl3d_sample_names[] =
{
"*bowl3d",
"roll.wav", /* "roll" */
"rollback.wav", /* "roll back" */
"sweep.wav", /* "sweep" */
"footstep.wav", /* "foot sweep" */
"crash.wav", /* "crash" */
"cheering.wav", /* "cheering" */
0
};
static const samples_interface meadows_samples_interface =
{
2,
NULL,
meadows_sh_start
};
static const samples_interface bowl3d_samples_interface =
{
1,
bowl3d_sample_names
};
/*************************************
*
* Machine drivers
*
*************************************/
static MACHINE_DRIVER_START( meadows )
/* basic machine hardware */
MDRV_CPU_ADD("main", S2650, MASTER_CLOCK/8) /* 5MHz / 8 = 625 kHz */
MDRV_CPU_PROGRAM_MAP(meadows_main_map,0)
MDRV_CPU_VBLANK_INT("main", meadows_interrupt) /* one interrupt per frame!? */
MDRV_CPU_ADD("audio", S2650, MASTER_CLOCK/8) /* 5MHz / 8 = 625 kHz */
MDRV_CPU_PROGRAM_MAP(audio_map,0)
MDRV_CPU_PERIODIC_INT(audio_interrupt, (double)5000000/131072)
MDRV_INTERLEAVE(10)
/* video hardware */
MDRV_SCREEN_ADD("main", RASTER)
MDRV_SCREEN_REFRESH_RATE(60)
MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
MDRV_SCREEN_SIZE(32*8, 30*8)
MDRV_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
MDRV_GFXDECODE(meadows)
MDRV_PALETTE_LENGTH(2)
MDRV_PALETTE_INIT(meadows)
MDRV_VIDEO_START(meadows)
MDRV_VIDEO_UPDATE(meadows)
/* audio hardware */
MDRV_SPEAKER_STANDARD_MONO("mono")
MDRV_SOUND_ADD("dac", DAC, 0)
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MDRV_SOUND_ADD("samples", SAMPLES, 0)
MDRV_SOUND_CONFIG(meadows_samples_interface)
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_DRIVER_END
static MACHINE_DRIVER_START( minferno )
/* basic machine hardware */
MDRV_CPU_ADD("main", S2650, MASTER_CLOCK/24) /* 5MHz / 8 / 3 = 208.33 kHz */
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 */
MDRV_SCREEN_ADD("main", RASTER)
MDRV_SCREEN_REFRESH_RATE(60)
MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
MDRV_SCREEN_SIZE(32*8, 32*8)
MDRV_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 24*8-1)
MDRV_GFXDECODE(minferno)
MDRV_PALETTE_LENGTH(2)
MDRV_PALETTE_INIT(meadows)
MDRV_VIDEO_START(meadows)
MDRV_VIDEO_UPDATE(meadows)
/* audio hardware */
MACHINE_DRIVER_END
static MACHINE_DRIVER_START( bowl3d )
/* basic machine hardware */
MDRV_IMPORT_FROM(meadows)
/* audio hardware */
MDRV_SOUND_ADD("samples2", SAMPLES, 0)
MDRV_SOUND_CONFIG(bowl3d_samples_interface)
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_DRIVER_END
/*************************************
*
* ROM definitions
*
*************************************/
ROM_START( deadeye )
ROM_REGION( 0x08000, "main", 0 )
ROM_LOAD( "de1.8h", 0x0000, 0x0400, CRC(bd09e4dc) SHA1(5428835f6bc3d162496fdce174fcaaaba98c09f9) )
ROM_LOAD( "de2.9h", 0x0400, 0x0400, CRC(b89edec3) SHA1(5ce0058f23b7e5c832029ca97d9a40d1494bf972) )
ROM_LOAD( "de3.10h", 0x0800, 0x0400, CRC(acf24438) SHA1(d7ea668ee19a167cb006c92e9606e20ef13d052e) )
ROM_LOAD( "de4.11h", 0x1000, 0x0400, CRC(8b68f792) SHA1(e6c0b53726587768d39270f2f1e5b935035c20e5) )
ROM_LOAD( "de5.12h", 0x1400, 0x0400, CRC(7bdb535c) SHA1(7bd2e261a22f5f3ffc60ea12ca5f38c445ec0030) )
ROM_LOAD( "de6.13h", 0x1800, 0x0400, CRC(847f9467) SHA1(253d386b76be99a1deef9e6b4cd906efdd9cf6d9) )
ROM_REGION( 0x0400, "gfx1", ROMREGION_DISPOSE )
ROM_LOAD( "de_char.15e", 0x0000, 0x0400, CRC(b032bd8d) SHA1(130614d951c440a31c1262517cca0a133ddd1545) )
ROM_REGION( 0x0400, "gfx2", ROMREGION_DISPOSE )
ROM_LOAD( "de_mov1.5a", 0x0000, 0x0400, CRC(c046b4c6) SHA1(3baa47a6c8962f6f66c08847b4ee4aa91580ad1a) )
ROM_REGION( 0x0400, "gfx3", ROMREGION_DISPOSE )
ROM_LOAD( "de_mov2.13a", 0x0000, 0x0400, CRC(b89c5df9) SHA1(dd0eac9d646dd24575c7b61ce141fdc66994c188) )
ROM_REGION( 0x0400, "gfx4", ROMREGION_DISPOSE )
/* empty */
ROM_REGION( 0x0400, "gfx5", ROMREGION_DISPOSE )
/* empty */
ROM_REGION( 0x08000, "audio", 0 )
ROM_LOAD( "de_snd", 0x0000, 0x0400, CRC(c10a1b1a) SHA1(779ea261d23360634081295a164cacbd819d8719) )
ROM_END
ROM_START( bowl3d )
ROM_REGION( 0x08000, "main", 0 )
ROM_LOAD( "b3d.h8", 0x0000, 0x0400, CRC(be38feeb) SHA1(feab3c61ce1e351c02f6ffa7f7f2ac90e62e7719) )
ROM_LOAD( "b3d.h9", 0x0400, 0x0400, CRC(4e8acead) SHA1(3c00f0d05b9cb80a2245bc68a45732ab6ac87b7f) )
ROM_LOAD( "b3d.h10", 0x0800, 0x0400, CRC(16677267) SHA1(0131f68e87d6326870f95c1ff364a97436b6c4d8) )
ROM_LOAD( "b3d.h11", 0x1000, 0x0400, CRC(c0f9ac37) SHA1(c563155a28052eea150627a83cad9bd1b5ef9489) )
ROM_LOAD( "b3d.h12", 0x1400, 0x0400, CRC(80a149d6) SHA1(ab4ca76d9f5aa5e02b9d5bf909af9548fe62f475) )
// h13 empty
/* Universal Game Logic according to schematics */
ROM_REGION( 0x08000, "audio", 0 ) /* 2650 CPU at j8 */
ROM_LOAD( "82s115.a6", 0x0000, 0x0001, NO_DUMP ) /* 82s115 eprom */
ROM_LOAD( "82s115.c6", 0x0000, 0x0001, NO_DUMP ) /* 82s115 eprom */
ROM_REGION( 0x0400, "gfx1", ROMREGION_DISPOSE )
ROM_LOAD( "b3d.e15", 0x0000, 0x0400, CRC(4414e24f) SHA1(835c989143895848df7154c2d82a499dea79c1c5) )
ROM_REGION( 0x0400, "gfx2", ROMREGION_DISPOSE )
ROM_LOAD( "b3d.a5", 0x0000, 0x0400, CRC(4b657f8a) SHA1(52eb90ff5048db30e9710e96793bad5e2c7ad6db) )
ROM_REGION( 0x0400, "gfx3", ROMREGION_DISPOSE )
ROM_LOAD( "b3d.a13", 0x0000, 0x0400, CRC(ca7f33b9) SHA1(6c63a41be57e71d6a58112be13d77e695a0faa10) )
ROM_REGION( 0x0400, "gfx4", ROMREGION_DISPOSE )
/* empty */
ROM_REGION( 0x0400, "gfx5", ROMREGION_DISPOSE )
/* empty */
ROM_REGION( 0x0001, "proms", 0 )
ROM_LOAD( "82s123.r8", 0x0000, 0x0001, NO_DUMP ) /* 82s123 prom located on Universal Game Logic */
ROM_END
ROM_START( gypsyjug )
ROM_REGION( 0x08000, "main", 0 )
ROM_LOAD( "gj.1b", 0x0000, 0x0400, CRC(f6a71d9f) SHA1(11a86ae781297e4077a69e6809487022fed9c444) )
ROM_LOAD( "gj.2b", 0x0400, 0x0400, CRC(94c14455) SHA1(ed704680c2b83d1726d1a17d64f5d57925a495b2) )
ROM_LOAD( "gj.3b", 0x0800, 0x0400, CRC(87ee0490) SHA1(7ecca4df9755b604d179d407e7c9c04d616b689b) )
ROM_LOAD( "gj.4b", 0x1000, 0x0400, CRC(dca519c8) SHA1(7651aa8b2a8e53113eb08108a5b8fb20518ae185) )
ROM_LOAD( "gj.5b", 0x1400, 0x0400, CRC(7d83f9d0) SHA1(9aa8b281b5de7d913cf364a1159f2762fc69022d) )
ROM_REGION( 0x0400, "gfx1", ROMREGION_DISPOSE )
ROM_LOAD( "gj.e15", 0x0000, 0x0400, CRC(adb25e13) SHA1(67b5a24a724310f3817a891a54d239d60fe80760) )
ROM_REGION( 0x0400, "gfx2", ROMREGION_DISPOSE )
ROM_LOAD( "gj.a", 0x0000, 0x0400, CRC(d3725193) SHA1(5ea28c410a7b9532276fb98c7003b4c8f64d24c9) )
ROM_REGION( 0x0400, "gfx3", ROMREGION_DISPOSE )
/* empty (copied from 2) */
ROM_REGION( 0x0400, "gfx4", ROMREGION_DISPOSE )
ROM_LOAD( "gj.x", 0x0000, 0x0400, NO_DUMP ) /* missing */
ROM_REGION( 0x0400, "gfx5", ROMREGION_DISPOSE )
ROM_LOAD( "gj.y", 0x0000, 0x0400, NO_DUMP ) /* missing */
ROM_REGION( 0x08000, "audio", 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) )
ROM_END
ROM_START( minferno )
ROM_REGION( 0x08000, "main", ROMREGION_INVERT )
ROM_LOAD_NIB_LOW ( "inferno.f5", 0x0000, 0x0400, CRC(58472a73) SHA1(7f8b9502c3db11219d6b765dec7b6ff3f62d6c8b) )
ROM_LOAD_NIB_HIGH( "inferno.e5", 0x0000, 0x0400, CRC(451942af) SHA1(0a03d74c1b98771d2170c76ca41e972300c34c3a) )
ROM_LOAD_NIB_LOW ( "inferno.f6", 0x0400, 0x0400, CRC(d85a195b) SHA1(8250f8e80a9bf196d7bf122af9aad0ae00dedd26) )
ROM_LOAD_NIB_HIGH( "inferno.e6", 0x0400, 0x0400, CRC(788ccfac) SHA1(dfa99745db1c3866bf568fad289485aa0850875a) )
ROM_LOAD_NIB_LOW ( "inferno.f7", 0x0800, 0x0400, CRC(73b4e9a3) SHA1(d9de88748a3009f3fc1f90c96bfc9732dc6a4a22) )
ROM_LOAD_NIB_HIGH( "inferno.e7", 0x0800, 0x0400, CRC(902d9b78) SHA1(3bebbba6c7d00bea2c687b965f59a9e55b430dfa) )
ROM_REGION( 0x00400, "gfx1", ROMREGION_DISPOSE )
ROM_LOAD( "inferno.b8", 0x0200, 0x0200, CRC(1b06466b) SHA1(aef13ab84526ee7493837eef7f48d9ede65b8e62) )
ROM_END
/*************************************
*
* Driver initialization
*
*************************************/
/* A fake for the missing ball sprites #3 and #4 */
static DRIVER_INIT( gypsyjug )
{
static const UINT8 ball[16*2] =
{
0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00,
0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00,
0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00,
0x01,0x80, 0x03,0xc0, 0x03,0xc0, 0x01,0x80
};
int i;
UINT8 *gfx2 = memory_region(machine, "gfx2");
UINT8 *gfx3 = memory_region(machine, "gfx3");
UINT8 *gfx4 = memory_region(machine, "gfx4");
UINT8 *gfx5 = memory_region(machine, "gfx5");
int len3 = memory_region_length(machine, "gfx3");
int len4 = memory_region_length(machine, "gfx4");
memcpy(gfx3,gfx2,len3);
for (i = 0; i < len4; i += 16*2)
{
memcpy(gfx4 + i, ball, sizeof(ball));
memcpy(gfx5 + i, ball, sizeof(ball));
}
}
/* A fake for inverting the data bus */
static DRIVER_INIT( minferno )
{
int i, length;
UINT8 *mem;
/* create an inverted copy of the graphics data */
mem = memory_region(machine, "gfx1");
length = memory_region_length(machine, "gfx1");
for (i = 0; i < length/2; i++)
mem[i] = ~mem[i + length/2];
}
/*************************************
*
* Game drivers
*
*************************************/
GAMEL( 1978, deadeye, 0, meadows, meadows, 0, ROT0, "Meadows", "Dead Eye", 0, layout_deadeye )
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 )