diff --git a/.gitattributes b/.gitattributes index 4d8737f60e1..cd581cb923a 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1639,7 +1639,6 @@ src/mame/drivers/mjkjidai.c svneol=native#text/plain src/mame/drivers/mjsister.c svneol=native#text/plain src/mame/drivers/mjsiyoub.c svneol=native#text/plain src/mame/drivers/mlanding.c svneol=native#text/plain -src/mame/drivers/mnight.c svneol=native#text/plain src/mame/drivers/model1.c svneol=native#text/plain src/mame/drivers/model2.c svneol=native#text/plain src/mame/drivers/model3.c svneol=native#text/plain @@ -1708,7 +1707,6 @@ src/mame/drivers/offtwall.c svneol=native#text/plain src/mame/drivers/ohmygod.c svneol=native#text/plain src/mame/drivers/ojankohs.c svneol=native#text/plain src/mame/drivers/olibochu.c svneol=native#text/plain -src/mame/drivers/omegaf.c svneol=native#text/plain src/mame/drivers/omegrace.c svneol=native#text/plain src/mame/drivers/oneshot.c svneol=native#text/plain src/mame/drivers/onetwo.c svneol=native#text/plain @@ -2231,6 +2229,7 @@ src/mame/includes/namcos22.h svneol=native#text/plain src/mame/includes/nb1413m3.h svneol=native#text/plain src/mame/includes/neogeo.h svneol=native#text/plain src/mame/includes/news.h svneol=native#text/plain +src/mame/includes/ninjakd2.h svneol=native#text/plain src/mame/includes/nitedrvr.h svneol=native#text/plain src/mame/includes/offtwall.h svneol=native#text/plain src/mame/includes/orbit.h svneol=native#text/plain @@ -2909,7 +2908,6 @@ src/mame/video/mikie.c svneol=native#text/plain src/mame/video/mitchell.c svneol=native#text/plain src/mame/video/mjkjidai.c svneol=native#text/plain src/mame/video/mjsister.c svneol=native#text/plain -src/mame/video/mnight.c svneol=native#text/plain src/mame/video/model1.c svneol=native#text/plain src/mame/video/model2.c svneol=native#text/plain src/mame/video/model2rd.c svneol=native#text/plain @@ -2960,7 +2958,6 @@ src/mame/video/nycaptor.c svneol=native#text/plain src/mame/video/offtwall.c svneol=native#text/plain src/mame/video/ohmygod.c svneol=native#text/plain src/mame/video/ojankohs.c svneol=native#text/plain -src/mame/video/omegaf.c svneol=native#text/plain src/mame/video/oneshot.c svneol=native#text/plain src/mame/video/orbit.c svneol=native#text/plain src/mame/video/othldrby.c svneol=native#text/plain diff --git a/src/emu/drivers/xtal.h b/src/emu/drivers/xtal.h index bc065981669..648bc628d89 100644 --- a/src/emu/drivers/xtal.h +++ b/src/emu/drivers/xtal.h @@ -51,6 +51,7 @@ enum XTAL_4_224MHz = 4224000, /* Used to drive OKI M6295 chips, usually with /4 divider */ XTAL_4_433619MHz = 4433619, /* PAL subcarrier */ XTAL_4_9152MHz = 4915200, + XTAL_5MHz = 5000000, /* Mutant Night */ XTAL_6MHz = 6000000, XTAL_6_144MHz = 6144000, /* Used on Alpha Denshi early 80's games sound board */ XTAL_7_3728MHz = 7372800, diff --git a/src/mame/drivers/mnight.c b/src/mame/drivers/mnight.c deleted file mode 100644 index 8566f453882..00000000000 --- a/src/mame/drivers/mnight.c +++ /dev/null @@ -1,476 +0,0 @@ -/*************************************************************************** - -Mutant Night - -driver by Leandro Dardini - -TODO: -- must do palette marking, it is overflowing at the moment - -***************************************************************************/ -#include "driver.h" -#include "sound/2203intf.h" - -WRITE8_HANDLER( mnight_bgvideoram_w ); -WRITE8_HANDLER( mnight_fgvideoram_w ); -WRITE8_HANDLER( mnight_sprite_overdraw_w ); -WRITE8_HANDLER( mnight_background_enable_w ); -VIDEO_START( mnight ); -VIDEO_UPDATE( mnight ); - -extern UINT8 *mnight_scrolly_ram; -extern UINT8 *mnight_scrollx_ram; -extern UINT8 *mnight_bgenable_ram; -extern UINT8 *mnight_spoverdraw_ram; -extern UINT8 *mnight_background_videoram; -extern UINT8 *mnight_foreground_videoram; -extern size_t mnight_backgroundram_size; -extern size_t mnight_foregroundram_size; - -static int mnight_bank_latch = 255, main_cpu_num; - -static MACHINE_RESET( mnight ) -{ - main_cpu_num = 0; -} - -static INTERRUPT_GEN( mnight_interrupt ) -{ - cpunum_set_input_line_and_vector(0,0,HOLD_LINE,0xd7); /* RST 10h */ -} - -static READ8_HANDLER( mnight_bankselect_r ) -{ - return mnight_bank_latch; -} - -static WRITE8_HANDLER( mnight_bankselect_w ) -{ - UINT8 *RAM = memory_region(REGION_CPU1+main_cpu_num); - int bankaddress; - - if ( data != mnight_bank_latch ) - { - mnight_bank_latch = data; - - bankaddress = 0x10000 + ((data & 0x7) * 0x4000); - memory_set_bankptr(1,&RAM[bankaddress]); /* Select 8 banks of 16k */ - } -} - - -static ADDRESS_MAP_START( readmem, ADDRESS_SPACE_PROGRAM, 8 ) - AM_RANGE(0x0000, 0x7fff) AM_READ(MRA8_ROM) - AM_RANGE(0x8000, 0xbfff) AM_READ(MRA8_BANK1) - AM_RANGE(0xc000, 0xf7ff) AM_READ(MRA8_RAM) - AM_RANGE(0xf800, 0xf800) AM_READ(input_port_2_r) - AM_RANGE(0xf801, 0xf801) AM_READ(input_port_0_r) - AM_RANGE(0xf802, 0xf802) AM_READ(input_port_1_r) - AM_RANGE(0xf803, 0xf803) AM_READ(input_port_3_r) - AM_RANGE(0xf804, 0xf804) AM_READ(input_port_4_r) - AM_RANGE(0xfa00, 0xfa00) AM_READ(MRA8_RAM) - AM_RANGE(0xfa01, 0xfa01) AM_READ(MRA8_RAM) - AM_RANGE(0xfa02, 0xfa02) AM_READ(mnight_bankselect_r) - AM_RANGE(0xfa03, 0xfa03) AM_READ(MRA8_RAM) - AM_RANGE(0xfa08, 0xfa09) AM_READ(MRA8_RAM) - AM_RANGE(0xfa0a, 0xfa0b) AM_READ(MRA8_RAM) - AM_RANGE(0xfa0c, 0xfa0c) AM_READ(MRA8_RAM) -ADDRESS_MAP_END - - -static ADDRESS_MAP_START( writemem, ADDRESS_SPACE_PROGRAM, 8 ) - AM_RANGE(0x0000, 0xbfff) AM_WRITE(MWA8_ROM) - AM_RANGE(0xc000, 0xd9ff) AM_WRITE(MWA8_RAM) - AM_RANGE(0xda00, 0xdfff) AM_WRITE(MWA8_RAM) AM_BASE(&spriteram) AM_SIZE(&spriteram_size) - AM_RANGE(0xe000, 0xe7ff) AM_WRITE(mnight_bgvideoram_w) AM_BASE(&mnight_background_videoram) AM_SIZE(&mnight_backgroundram_size) // VFY - AM_RANGE(0xe800, 0xefff) AM_WRITE(mnight_fgvideoram_w) AM_BASE(&mnight_foreground_videoram) AM_SIZE(&mnight_foregroundram_size) //VFY - AM_RANGE(0xf000, 0xf5ff) AM_WRITE(paletteram_RRRRGGGGBBBBxxxx_be_w) AM_BASE(&paletteram) - AM_RANGE(0xf600, 0xf7ff) AM_WRITE(MWA8_RAM) - AM_RANGE(0xfa00, 0xfa00) AM_WRITE(soundlatch_w) - AM_RANGE(0xfa01, 0xfa01) AM_WRITE(MWA8_RAM) // unknown but used - AM_RANGE(0xfa02, 0xfa02) AM_WRITE(mnight_bankselect_w) - AM_RANGE(0xfa03, 0xfa03) AM_WRITE(mnight_sprite_overdraw_w) AM_BASE(&mnight_spoverdraw_ram) - AM_RANGE(0xfa08, 0xfa09) AM_WRITE(MWA8_RAM) AM_BASE(&mnight_scrollx_ram) - AM_RANGE(0xfa0a, 0xfa0b) AM_WRITE(MWA8_RAM) AM_BASE(&mnight_scrolly_ram) - AM_RANGE(0xfa0c, 0xfa0c) AM_WRITE(mnight_background_enable_w) AM_BASE(&mnight_bgenable_ram) -ADDRESS_MAP_END - - -static ADDRESS_MAP_START( snd_readmem, ADDRESS_SPACE_PROGRAM, 8 ) - AM_RANGE(0x0000, 0xbfff) AM_READ(MRA8_ROM) - AM_RANGE(0xc000, 0xc7ff) AM_READ(MRA8_RAM) - AM_RANGE(0xe000, 0xe000) AM_READ(soundlatch_r) - AM_RANGE(0xefee, 0xefee) AM_READ(MRA8_NOP) -ADDRESS_MAP_END - - -static ADDRESS_MAP_START( snd_writemem, ADDRESS_SPACE_PROGRAM, 8 ) - AM_RANGE(0x0000, 0xbfff) AM_WRITE(MWA8_ROM) - AM_RANGE(0xc000, 0xc7ff) AM_WRITE(MWA8_RAM) - AM_RANGE(0xeff5, 0xeff6) AM_WRITE(MWA8_NOP) /* SAMPLE FREQUENCY ??? */ - AM_RANGE(0xefee, 0xefee) AM_WRITE(MWA8_NOP) /* CHIP COMMAND ?? */ -ADDRESS_MAP_END - -static ADDRESS_MAP_START( snd_writeport, ADDRESS_SPACE_IO, 8 ) - ADDRESS_MAP_FLAGS( AMEF_ABITS(8) ) - AM_RANGE(0x00, 0x00) AM_WRITE(YM2203_control_port_0_w) - AM_RANGE(0x01, 0x01) AM_WRITE(YM2203_write_port_0_w) - AM_RANGE(0x80, 0x80) AM_WRITE(YM2203_control_port_1_w) - AM_RANGE(0x81, 0x81) AM_WRITE(YM2203_write_port_1_w) -ADDRESS_MAP_END - - -static INPUT_PORTS_START( mnight ) - PORT_START /* Player 1 controls */ - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START /* Player 2 controls */ - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY 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_UNKNOWN ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE ) /* keep pressed during boot to enter service mode */ - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 ) - - PORT_START /* DSW0 */ - PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x02, DEF_STR( Bonus_Life ) ) - PORT_DIPSETTING( 0x02, "30k and every 50k" ) - PORT_DIPSETTING( 0x00, "50k and every 80k" ) - PORT_DIPNAME( 0x04, 0x04, DEF_STR( Difficulty ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Normal ) ) - PORT_DIPSETTING( 0x00, "Difficult" ) - PORT_DIPNAME( 0x08, 0x08, "Free Game" ) - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x00, DEF_STR( Cabinet) ) - PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Cocktail ) ) - PORT_DIPNAME( 0x20, 0x00, DEF_STR( Demo_Sounds ) ) - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Lives ) ) - PORT_DIPSETTING( 0x80, "2" ) - PORT_DIPSETTING( 0xc0, "3" ) - PORT_DIPSETTING( 0x40, "4" ) - PORT_DIPSETTING( 0x00, "5" ) - - PORT_START /* DSW1 */ - PORT_SERVICE( 0x01, IP_ACTIVE_LOW ) - PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0xe0, 0xe0, DEF_STR( Coin_A ) ) - PORT_DIPSETTING( 0x00, DEF_STR( 5C_1C ) ) - PORT_DIPSETTING( 0x20, DEF_STR( 4C_1C ) ) - PORT_DIPSETTING( 0x40, DEF_STR( 3C_1C ) ) - PORT_DIPSETTING( 0x60, DEF_STR( 2C_1C ) ) - PORT_DIPSETTING( 0xe0, DEF_STR( 1C_1C ) ) - PORT_DIPSETTING( 0xc0, DEF_STR( 1C_2C ) ) - PORT_DIPSETTING( 0xa0, DEF_STR( 1C_3C ) ) - PORT_DIPSETTING( 0x80, DEF_STR( 1C_4C ) ) -INPUT_PORTS_END - -static INPUT_PORTS_START( arkarea ) - PORT_START /* Player 1 controls */ - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START /* Player 2 controls */ - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE ) /* keep pressed during boot to enter service mode */ - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 ) - - PORT_START /* DSW0 */ - PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) - PORT_DIPSETTING( 0x00, DEF_STR( 3C_1C ) ) - PORT_DIPSETTING( 0x01, DEF_STR( 2C_1C ) ) - PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) - PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) ) - PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x00, DEF_STR( Demo_Sounds ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x40, DEF_STR( Bonus_Life ) ) - PORT_DIPSETTING( 0x40, "50000 and every 50000" ) - PORT_DIPSETTING( 0x00, "100000 and every 100000" ) - PORT_DIPNAME( 0x80, 0x80, DEF_STR( Lives ) ) - PORT_DIPSETTING( 0x80, "3" ) - PORT_DIPSETTING( 0x00, "4" ) - - PORT_START /* DSW1 */ - PORT_SERVICE( 0x01, IP_ACTIVE_LOW ) - PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) -INPUT_PORTS_END - - - -static const gfx_layout charlayout = -{ - 8,8, /* 8*8 characters */ - 1024, /* 1024 characters */ - 4, /* 4 bits per pixel */ - {0,1,2,3}, /* the bitplanes are packed in one nibble */ - {0, 4, 16384*8+0, 16384*8+4, 8, 12, 16384*8+8, 16384*8+12}, - {16*0, 16*1, 16*2, 16*3, 16*4, 16*5, 16*6, 16*7}, - 8*16 -}; - -static const gfx_layout spritelayout = -{ - 16,16, /* 16*16 characters */ - 1536, /* 1536 sprites */ - 4, /* 4 bits per pixel */ - {0,1,2,3}, /* the bitplanes are packed in one nibble */ - {0, 4, 0x18000*8+0, 0x18000*8+4, 8, 12, 0x18000*8+8, 0x18000*8+12, - 16*8+0, 16*8+4, 16*8+0x18000*8+0, 16*8+0x18000*8+4, 16*8+8, 16*8+12, 16*8+0x18000*8+8, 16*8+0x18000*8+12}, - {16*0, 16*1, 16*2, 16*3, 16*4, 16*5, 16*6, 16*7, - 32*8+16*0, 32*8+16*1, 32*8+16*2, 32*8+16*3, 32*8+16*4, 32*8+16*5, 32*8+16*6, 32*8+16*7}, - 8*64 -}; - -static const gfx_layout bigspritelayout = -{ - 32,32, /* 32*32 characters */ - 384, /* 384 sprites */ - 4, /* 4 bits per pixel */ - {0,1,2,3}, /* the bitplanes are packed in one nibble */ - {0, 4, 0x18000*8+0, 0x18000*8+4, 8, 12, 0x18000*8+8, 0x18000*8+12, - 16*8+0, 16*8+4, 16*8+0x18000*8+0, 16*8+0x18000*8+4, 16*8+8, 16*8+12, 16*8+0x18000*8+8, 16*8+0x18000*8+12, - 64*8+0, 64*8+4, 64*8+0x18000*8+0, 64*8+0x18000*8+4, 64*8+8, 64*8+12, 64*8+0x18000*8+8, 64*8+0x18000*8+12, - 64*8+16*8+0, 64*8+16*8+4, 64*8+16*8+0x18000*8+0, 64*8+16*8+0x18000*8+4, - 64*8+16*8+8, 64*8+16*8+12, 64*8+16*8+0x18000*8+8, 64*8+16*8+0x18000*8+12 }, - {16*0, 16*1, 16*2, 16*3, 16*4, 16*5, 16*6, 16*7, - 32*8+16*0, 32*8+16*1, 32*8+16*2, 32*8+16*3, 32*8+16*4, 32*8+16*5, 32*8+16*6, 32*8+16*7, - 128*8+16*0, 128*8+16*1, 128*8+16*2, 128*8+16*3, - 128*8+16*4, 128*8+16*5, 128*8+16*6, 128*8+16*7, - 128*8+32*8+16*0, 128*8+32*8+16*1, 128*8+32*8+16*2, 128*8+32*8+16*3, - 128*8+32*8+16*4, 128*8+32*8+16*5, 128*8+32*8+16*6, 128*8+32*8+16*7 }, - 8*64*4 -}; - - -static GFXDECODE_START( mnight ) - GFXDECODE_ENTRY( REGION_GFX1, 0, spritelayout, 0*16, 16) - GFXDECODE_ENTRY( REGION_GFX2, 0, spritelayout, 16*16, 16) - GFXDECODE_ENTRY( REGION_GFX2, 0, bigspritelayout, 16*16, 16) - GFXDECODE_ENTRY( REGION_GFX3, 0, charlayout, 32*16, 16) -GFXDECODE_END - - -static MACHINE_DRIVER_START( mnight ) - - /* basic machine hardware */ - MDRV_CPU_ADD(Z80, 12000000/2) /* 12000000/2 ??? */ - MDRV_CPU_PROGRAM_MAP(readmem,writemem) /* very sensitive to these settings */ - MDRV_CPU_VBLANK_INT(mnight_interrupt,1) - - MDRV_CPU_ADD(Z80, 5000000) - /* audio CPU */ /* 5mhz crystal ??? */ - MDRV_CPU_PROGRAM_MAP(snd_readmem,snd_writemem) - MDRV_CPU_IO_MAP(0,snd_writeport) - MDRV_CPU_VBLANK_INT(irq0_line_hold,2) - - MDRV_SCREEN_REFRESH_RATE(60) - MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(10000)) - MDRV_INTERLEAVE(10) - - MDRV_MACHINE_RESET(mnight) - - /* video hardware */ - MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) - MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) - MDRV_SCREEN_SIZE(32*8, 32*8) - MDRV_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 4*8, 28*8-1) - MDRV_GFXDECODE(mnight) - MDRV_PALETTE_LENGTH(768) - - MDRV_VIDEO_START(mnight) - MDRV_VIDEO_UPDATE(mnight) - - /* sound hardware */ - MDRV_SPEAKER_STANDARD_MONO("mono") - - MDRV_SOUND_ADD(YM2203, 12000000/8) - MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) - - MDRV_SOUND_ADD(YM2203, 12000000/8) - MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) -MACHINE_DRIVER_END - - -ROM_START( mnight ) - ROM_REGION( 0x30000, REGION_CPU1, 0 ) - ROM_LOAD( "mn6-j19.bin", 0x00000, 0x8000, CRC(56678d14) SHA1(acf3a97ca29db8ab9cad69599c5567464af3ae44) ) - ROM_LOAD( "mn5-j17.bin", 0x10000, 0x8000, CRC(2a73f88e) SHA1(0a7b769174f2b976650453d808cb23668dff0260) ) - ROM_LOAD( "mn4-j16.bin", 0x18000, 0x8000, CRC(c5e42bb4) SHA1(1956e737ae393e987cb7e8eae520518f1e0f597f) ) - ROM_LOAD( "mn3-j14.bin", 0x20000, 0x8000, CRC(df6a4f7a) SHA1(ce3cb84b514220d686b12c03567289fd23da0fe1) ) - ROM_LOAD( "mn2-j12.bin", 0x28000, 0x8000, CRC(9c391d1b) SHA1(06e8c202337e3eba38c479e8b7e29a3f8ffc4ed1) ) - - ROM_REGION( 0x10000, REGION_CPU2, 0 ) - ROM_LOAD( "mn1-j7.bin", 0x00000, 0x10000, CRC(a0782a31) SHA1(8abd2f0b0c2c2eb876f324f7a095a5cdc773c187) ) - - ROM_REGION( 0x30000, REGION_GFX1, ROMREGION_DISPOSE ) - ROM_LOAD( "mn11-b20.bin", 0x00000, 0x4000, CRC(4d37e0f4) SHA1(a6d9aaccd97769197622cda45474e223c2ee1d98) ) // background tiles - ROM_CONTINUE( 0x18000, 0x4000 ) - ROM_CONTINUE( 0x04000, 0x4000 ) - ROM_CONTINUE( 0x1c000, 0x4000 ) - ROM_LOAD( "mn12-b22.bin", 0x08000, 0x4000, CRC(b22cbbd3) SHA1(70984f1051fd236730d97011bc87dacb3ca38594) ) - ROM_CONTINUE( 0x20000, 0x4000 ) - ROM_CONTINUE( 0x0c000, 0x4000 ) - ROM_CONTINUE( 0x24000, 0x4000 ) - ROM_LOAD( "mn13-b23.bin", 0x10000, 0x4000, CRC(65714070) SHA1(48f3c130c97d00e8f0535904dc2237277067c475) ) - ROM_CONTINUE( 0x28000, 0x4000 ) - ROM_CONTINUE( 0x14000, 0x4000 ) - ROM_CONTINUE( 0x2c000, 0x4000 ) - - ROM_REGION( 0x30000, REGION_GFX2, ROMREGION_DISPOSE ) - ROM_LOAD( "mn7-e11.bin", 0x00000, 0x4000, CRC(4883059c) SHA1(53d4b9b0f0725c25e302ee1549a306778ec74d85) ) // sprites tiles - ROM_CONTINUE( 0x18000, 0x4000 ) - ROM_CONTINUE( 0x04000, 0x4000 ) - ROM_CONTINUE( 0x1c000, 0x4000 ) - ROM_LOAD( "mn8-e12.bin", 0x08000, 0x4000, CRC(02b91445) SHA1(f0cf85f9e17c40248de16bca8df6d745e359b92d) ) - ROM_CONTINUE( 0x20000, 0x4000 ) - ROM_CONTINUE( 0x0c000, 0x4000 ) - ROM_CONTINUE( 0x24000, 0x4000 ) - ROM_LOAD( "mn9-e14.bin", 0x10000, 0x4000, CRC(9f08d160) SHA1(1a0041ad138e7e6598d4d03d7cbd52a7244557ac) ) - ROM_CONTINUE( 0x28000, 0x4000 ) - ROM_CONTINUE( 0x14000, 0x4000 ) - ROM_CONTINUE( 0x2c000, 0x4000 ) - - ROM_REGION( 0x08000, REGION_GFX3, ROMREGION_DISPOSE ) - ROM_LOAD( "mn10-b10.bin", 0x00000, 0x2000, CRC(37b8221f) SHA1(ac86e0ae8039fd30a028a893d08ce099f7765615) ) // foreground tiles OK - ROM_CONTINUE( 0x04000, 0x2000 ) - ROM_CONTINUE( 0x02000, 0x2000 ) - ROM_CONTINUE( 0x06000, 0x2000 ) -ROM_END - -ROM_START( arkarea ) - ROM_REGION( 0x30000, REGION_CPU1, 0 ) - ROM_LOAD( "arkarea.008", 0x00000, 0x8000, CRC(1ce1b5b9) SHA1(ab7755523d58736b124deb59779dedee870fd7d2) ) - ROM_LOAD( "arkarea.009", 0x10000, 0x8000, CRC(db1c81d1) SHA1(64a2f51c218d84c4eaeb8c5a5a3f0f4cdf5d174c) ) - ROM_LOAD( "arkarea.010", 0x18000, 0x8000, CRC(5a460dae) SHA1(e64d3662bb074a528cd71061621c0dd3765928b6) ) - ROM_LOAD( "arkarea.011", 0x20000, 0x8000, CRC(63f022c9) SHA1(414f52d2b9584f08285b261d1dafcc9e6e5e0c74) ) - ROM_LOAD( "arkarea.012", 0x28000, 0x8000, CRC(3c4c65d5) SHA1(e11f840f8b1da0933a0a4342f5fa1a17f0d6d3e2) ) - - ROM_REGION( 0x10000, REGION_CPU2, 0 ) - ROM_LOAD( "arkarea.013", 0x00000, 0x8000, CRC(2d409d58) SHA1(6344b43db5459691728c3f843b643c84ea71dd8e) ) - - ROM_REGION( 0x30000, REGION_GFX1, ROMREGION_DISPOSE ) - ROM_LOAD( "arkarea.003", 0x00000, 0x4000, CRC(6f45a308) SHA1(b6994fe1f50d5e9cf38d3efbd69a2c5f76f33c56) ) // background tiles - ROM_CONTINUE( 0x18000, 0x4000 ) - ROM_CONTINUE( 0x04000, 0x4000 ) - ROM_CONTINUE( 0x1c000, 0x4000 ) - ROM_LOAD( "arkarea.002", 0x08000, 0x4000, CRC(051d3482) SHA1(3ebef1a7280f52df6d5ee34e3d4e7567aac0c165) ) - ROM_CONTINUE( 0x20000, 0x4000 ) - ROM_CONTINUE( 0x0c000, 0x4000 ) - ROM_CONTINUE( 0x24000, 0x4000 ) - ROM_LOAD( "arkarea.001", 0x10000, 0x4000, CRC(09d11ab7) SHA1(14f68e93e7173069f790493eafe9e1adc1a074cc) ) - ROM_CONTINUE( 0x28000, 0x4000 ) - ROM_CONTINUE( 0x14000, 0x4000 ) - ROM_CONTINUE( 0x2c000, 0x4000 ) - - ROM_REGION( 0x30000, REGION_GFX2, ROMREGION_DISPOSE ) - ROM_LOAD( "arkarea.007", 0x00000, 0x4000, CRC(d5684a27) SHA1(4961e8a5df2510afb1ef3e937d0a5d52e91893a3) ) // sprites tiles - ROM_CONTINUE( 0x18000, 0x4000 ) - ROM_CONTINUE( 0x04000, 0x4000 ) - ROM_CONTINUE( 0x1c000, 0x4000 ) - ROM_LOAD( "arkarea.006", 0x08000, 0x4000, CRC(2c0567d6) SHA1(f36a2a3ff487660f89470516617482331f008da0) ) - ROM_CONTINUE( 0x20000, 0x4000 ) - ROM_CONTINUE( 0x0c000, 0x4000 ) - ROM_CONTINUE( 0x24000, 0x4000 ) - ROM_LOAD( "arkarea.005", 0x10000, 0x4000, CRC(9886004d) SHA1(4050756af5c00ab1a368780fe091460fd9e2cb05) ) - ROM_CONTINUE( 0x28000, 0x4000 ) - ROM_CONTINUE( 0x14000, 0x4000 ) - ROM_CONTINUE( 0x2c000, 0x4000 ) - - ROM_REGION( 0x08000, REGION_GFX3, ROMREGION_DISPOSE ) - ROM_LOAD( "arkarea.004", 0x00000, 0x2000, CRC(69e36af2) SHA1(2bccef8f396dcb5261af0140af04c95ee8ecae11) ) // foreground tiles OK - ROM_CONTINUE( 0x04000, 0x2000 ) - ROM_CONTINUE( 0x02000, 0x2000 ) - ROM_CONTINUE( 0x06000, 0x2000 ) -ROM_END - - - -GAME( 1987, mnight, 0, mnight, mnight, 0, ROT0, "UPL (Kawakus license)", "Mutant Night", 0 ) -GAME( 1988?,arkarea, 0, mnight, arkarea, 0, ROT0, "UPL", "Ark Area", 0 ) diff --git a/src/mame/drivers/ninjakd2.c b/src/mame/drivers/ninjakd2.c index cc4dedfc063..676244fd984 100644 --- a/src/mame/drivers/ninjakd2.c +++ b/src/mame/drivers/ninjakd2.c @@ -1,258 +1,143 @@ -/*************************************************************************** +/****************************************************************************** - ***************************** - *** NINJA KID II hardware *** (by Roberto Ventura) - ***************************** +UPL "sprite framebuffer" hardware -Game authors: -Game design: Tsutomu Fuzisawa -Program design: Satoru Kinjo -Char. design: Tsutomu Fizisawa -Char. design: Akemi Tsunoda -Sound compose: Tsutomu Fuzisawa -Bgm create: Mecano Associate -Data make: Takashi Hayashi +driver by Roberto Ventura, Leandro Dardini, Yochizo, Nicola Salmoria -General aspect. - -The game is driven by a fast Z80 CPU. -Screen resolution is 256x192. -768 colors on screen. -96 sprites. - -Rom Contents: - -NK2_01.ROM Main CPU program ROM -NK2_02.ROM CPU banked data ROM 0 (banks 0 and 1) -NK2_03.ROM CPU banked data ROM 1 (banks 2 and 3) -NK2_04.ROM CPU banked data ROM 2 (banks 4 and 5) -NK2_05.ROM CPU banked data ROM 3 (banks 6 and 7) -NK2_06.ROM Sound CPU program ROM (encrypted) -NK2_07.ROM Sprites data ROM 1 -NK2_08.ROM Sprites data ROM 0 -NK2_09.ROM Raw PCM samples (complete?) -NK2_10.ROM Background data ROM 1 -NK2_11.ROM Background data ROM 0 -NK2_12.ROM Foreground data ROM - -*** MEMORY MAP *** - -0000-7fff Main CPU ROM -8000-bfff Banked CPU ROM -c000-c7ff I/O -c800-cdff Color RAM -d000-d7ff "FRONT" tile map -d800-dfff "BACK" tile map -e000-efff Main RAM -f400-f7ff ??? screen frame ??? -f800-f9ff CPU Stack -fa00-ffff Sprite registers (misc RAM) +The peculiar feature of this hardware is the ability to disable clearing of the +sprite framebuffer, therefore overdrawing new sprites on top of the ones drawn +in the previous frames. +When sprite overdrawing is enabled, not all sprites leave trails: only the ones +using color codes C, D, and E. Sprites using color code F have the special +effect of clearing the trails which have been left by other sprites. -1) CPU - -1 OSC 12 MHz -1 OSC 5 MHz -2 YM 2203C.......CaBBe!. - -The Z80 runs in IM0,the game expects execution of RST10 each -frame. - -Game level maps,additional code and data are available to main -program via CPU banking at lacations 8000-bf00 - -In two of the sets, the encrypted sound program ROM is replaced with a -double-sized decrypted version. I don0t know if they are bootlegs or originals. +Game Board +---------------- --------- +Ninja Kid II UPL-87003 +Mutant Night UPL-????? +Ark Area UPL-87007 +Atomic Robo-Kid UPL-88013 +Omega Fighter UPL-89016 +Hardware Overview: +------------------ +1xZ80 @ 6MHz (main CPU) +1xZ80 @ 5MHz (sound CPU) +2xYM2203 @ 1.5MHz +PCM samples (Ninja Kid II only?) -2) I/O +Resolution: 256x192 +96 sprites +Tilemaps: fg 256x256 (8x8) + bg 512x512 (16x16) +Atomic Robo-Kid adds two more bg tilemaps, at the same resolution +Omega Fighter further improves by increasing the bg resolution to 2048x512. -c000 "KEYCOIN" button - - 76543210 - || | || - || | |^-COIN 1 - || | ^--COIN 2 - || ^-----TEST MODE (on the fly,to be pressed during boot) - |^-------START 1 - ^--------START 2 +768 colors on screen out of a palette of 4096 -c001 "PAD1" -c002 "PAD2" +Designers: +---------- +Ninja Kid II: +* Game designer : Tsutomu Fuzisawa +* Program designer : Satoru Kinjo +* Character designers : Tsutomu Fuzisawa, Akemi Tsunoda +* Sound composer : Tsutomu Fuzisawa +* BGM creator: Mecano Associates +* Data maker : Takashi Hayashi - 76543210 - |||||| - |||||^-RIGHT - ||||^--LEFT - |||^---DOWN - ||^----UP - |^-----FIRE 0 - ^------FIRE 1 +Mutant Night: +* Game designed by : Tsutomu Fuzisawa +* Characters designers : Tsutomu Fuzisawa, Takashige Shichijyo, Akemi Tsunoda, Noriko Nihei +* Programmer : Takashi Hayashi +* BGM & Sound composer : Yukari Shimada +* Data make : Tsutomu Fuzisawa, Takashige Shichijyo + +Ark Area: +* Tsutomu Fuzisawa, Hiropi, Mingma, Nihei, Nozawa + +Atomic Robo-Kid: +* Game designer : Tsutomu Fuzisawa +* Chief programmer : Toshio Arai +* Character designers : Tsutomu Fuzisawa, Tokuhisa Tazima +* Background designers : Noriko Nihei, Akemi Tsunoda +* Effects : Kohji Abe +* Compose & Music : Mecano Associates + +Omega Fighter: +* Iwatani, Nobuyuki Narita, Abe, Akemi Tsunoda, Nikei, Shigksa, T.T, Ohnuma -c003 "DIPSW1" +Notes: +------ +- Press 2 to skip the settings screen on startup. - 76543210 - |||||||| - |||||||^-UNUSED? - ||||||^-->EXTRA - |||||^--->LIVES - ||||^----CONTINUE MODE - |||^-----DEMO SOUND - ||^------NORMAL/HARD - |^-------LIVES 3/4 - ^--------ENGLISH/JAP +- The sound CPU in Ninja Kid II is a Sega MC8123 encrypted Z80. In some sets, the + ROM is replaced with a double-sized decrypted version. They are presumably + bootlegs but this isn't known for sure. +- The Ninja Kid II sound program writes to unmapped locations 0xeff5, 0xeff6, and + 0xefee due to a bug. This happens in both the encrypted and decrypted versions, + so it appears to be a genuine bug with no ill effect. -c004 "DIPSW2" +- All the games write to the PCM sample player port used by Ninja Kid II (they + all write the 0xF0 "silence" command), however since these games don't have PCM + samples it seems unlikely that the boards actually have the PCM circuitry. The + command written might be a leftover from the code used for Ninja Kid II. - 76543210 - |||||||| - |||||||^-TEST MODE - ||||||^--TABLE/UPRIGHT - |||||^---"CREDIT SERVICE" - ||||^----> - |||^----->> - ||^------>>> coin/credit configurations - |^------->> - ^--------> +- Ark Area has no explicit copyright year on the title screen, however it was + reportedly released in December 1987. + Text in the ROM says: + -ARK AREA- + DIRECTED BY + UPL COMPANY LIMITED 1988 + UPL-87007 BORD A STANDARD. + This all appears in the end credits, except for "1988" -c200 Sound command - This byte is written when game plays sound effects... - it is set when music or sound effects (both pcm and fm) are triggered; - I guess it is read by another CPU,then. +- On levels 16 and 23 of Ark Area, sprites leave trails on screen in a very + awkward way. This has been verified to happen on the real PCB. -c201 Unknown,but used. +- To enter the level code in Atomic Robokid, after inserting coins press 1P start + while keeping pressed button 1. + Codes are given on the continue screen after Act 5. -c202 Bank selector (0 to 7) +- Omega Fighter has some unknown protection device interfacing with the player + and dip switche inputs. There isn't enough evidence to determine what the + device does, so it is roughly simulated just enough to get the game running. + Most of the time the device just passes over the inputs. It is interrogated + for protection check only on startup. -c203 Sprite 'overdraw' - this is the most interesting feature of the game,when set - the sprites drawn in the previous frame remain on the - screen,so the game can perform special effects such as the - 'close up' when you die or the "infinite balls" appearing - when an extra weapon is collected. - Appears to work like a xor mask,a sprite removes older - sprite 'bitmap' when present;other memory locations connected to - this function may be f400-f7ff...should be investigated more. - -mmmh... I believe this is sci-fiction for a non-bitmap game... +- Omega Fighter does some very strange reads from unmapped memory location C1E7. + The purpose is unclear, it seems to be related to enemies on screen. The top + three bits of the returned value ar ORed with register B, and some code is + executed if the result is not 0. Nothing obvious happens either way. -C208 Scroll X 0-7 +TODO: +----- +- Ninja Kid II PCM sample playback frequency is not verified -C209 Scroll X MSB +- What does the "credit service" dip switch do in Ninja Kid II? -C20A Scroll Y 0-7 - -C20B Scroll Y MSB - -C20C Background ENABLE - when set to zero the background is totally black,but - sprites are drawn correctly. - - -3) COLOR RAM - -The palette system is dynamic,the game can show up to 768 different -colors on screen. - -Palette depth is 12 bits as usual,two consecutive bytes are used for each -color code. - -format: RRRRGGGGBBBB0000 - -Colors are organized in palettes,since graphics is 4 bits (16 colors) -each palette takes 32 bytes,the three different layers,BACK,SPRITES and -FRONT don't share any color,each has its own 256 color space,hence the -768 colors on screen. - -c800-c9ff Background palettes -ca00-cbff Sprites palettes -cc00-cdff Foreground palettes - - -4) TILE-BASED LAYERS - -The tile format for background and foreground is the same,the -only difference is that background tiles are 16x16 pixels while foreground -tiles are only 8x8. - -Background virtual screen is 512x512 pixels scrollable. - -Two consecutive tiles bytes identify one tile. - - O7 O6 O5 O4 O3 O2 O1 O0 gfx Offset - O9 O8 FY FX C3 C2 C1 C0 Attibute - - O= GFX offset (1024 tiles) - F= Flip X and Y - C= Color palette selector - - -5) SPRITES - -Five bytes identify each sprite,but the registers actually used -are placed at intervals of 16. -Some of the remaining bytes are used (e.g. fa00),their meaning is totally -unknown to me,they seem to be related to the surprising additional sprite -feature of the game,but maybe they're just random writes in RAM. - -The first sprite data is located at fa0b,then fa1b and so on. - - -0b Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 Y coord -0c X7 X6 X5 X4 X3 X2 X1 X0 X coord -0d O9 O8 FY FX -- -- EN X8 hi gfx - FLIP - Enable - hi X -0e O7 O6 O5 O4 O3 O2 O1 O0 gfx - offset -0f -- -- -- -- C3 C2 C1 C0 color - - Y= Y coordinate - X= X coordinate (X8 is used to clip sprite on the left) - O= Gfx offset (1024 sprites) - F= Flip - EN= Enable (this is maybe the Y8 coordinate bit,but it isn't set - accordingly in the test mode - C= Color palette selector - -***************************************************************************/ +- What does the "free game" dip switch do in Mutant Night? +******************************************************************************/ #include "driver.h" #include "sound/2203intf.h" #include "sound/samples.h" #include "machine/mc8123.h" +#include "ninjakd2.h" -extern WRITE8_HANDLER( ninjakd2_bgvideoram_w ); -extern WRITE8_HANDLER( ninjakd2_fgvideoram_w ); -extern WRITE8_HANDLER( ninjakd2_scrollx_w ); -extern WRITE8_HANDLER( ninjakd2_scrolly_w ); -extern WRITE8_HANDLER( ninjakd2_sprite_overdraw_w ); -extern WRITE8_HANDLER( ninjakd2_background_enable_w ); -extern VIDEO_START( ninjakd2 ); -extern VIDEO_UPDATE( ninjakd2 ); +#define MAIN_CLOCK_12 XTAL_12MHz +#define MAIN_CLOCK_5 XTAL_5MHz -extern UINT8 *ninjakd2_bg_videoram, *ninjakd2_fg_videoram; +static const INT16* ninjakd2_sampledata; -static int ninjakd2_bank_latch = 255; -static INT16 *sampledata[8]; -static int samplelen[8]; - -static void ninjakd2_init_samples(void) -{ - int i,n; - UINT8 *source = memory_region(REGION_SOUND1); - static const int sample_info [9][2] = { {0x0000,0x0A00},{0x0A00,0x1D00},{0x2700,0x1700}, - {0x3E00,0x1500},{0x5300,0x0B00},{0x5E00,0x0A00},{0x6800,0x0E00},{0x7600,0x1E00},{0xF000,0x0400} }; - - for (i=0;i<8;i++) - { - sampledata[i] = auto_malloc(sample_info[i][1] * sizeof(sampledata[0])); - samplelen[i] = sample_info[i][1]; - for (n=0; n> bit) & 1); + + temp[da] = src[sa]; + } + + memcpy(src, temp, length); + + free(temp); +} + +static void gfx_unscramble(void) +{ + lineswap_gfx_roms(REGION_GFX1, 13); // fg tiles + lineswap_gfx_roms(REGION_GFX2, 14); // sprites + lineswap_gfx_roms(REGION_GFX3, 14); // bg tiles +} + + + +/************************************* + * + * Driver initialization + * + *************************************/ + static DRIVER_INIT( ninjakd2 ) { mc8123_decrypt_rom(1, memory_region(REGION_USER1), 0, 0); + + gfx_unscramble(); } static DRIVER_INIT( bootleg ) { memory_set_decrypted_region(1, 0x0000, 0x7fff, memory_region(REGION_CPU2) + 0x10000); + + gfx_unscramble(); +} + +static DRIVER_INIT(mnight) +{ + gfx_unscramble(); } -GAME( 1987, ninjakd2, 0, ninjakd2, ninjakd2, ninjakd2, ROT0, "UPL", "Ninja-Kid II (set 1)", 0 ) -GAME( 1987, ninjak2a, ninjakd2, ninjakd2, ninjakd2, bootleg, ROT0, "UPL", "Ninja-Kid II (set 2)", 0 ) -GAME( 1987, ninjak2b, ninjakd2, ninjakd2, ninjakd2, bootleg, ROT0, "UPL", "Ninja-Kid II (set 3)", 0 ) -GAME( 1987, rdaction, ninjakd2, ninjakd2, ninjakd2, ninjakd2, ROT0, "UPL (World Games license)", "Rad Action", 0 ) +/************************************* + * + * Game drivers + * + *************************************/ + +GAME( 1987, ninjakd2, 0, ninjakd2, ninjakd2, ninjakd2, ROT0, "UPL", "Ninja-Kid II / NinjaKun Ashura no Shou (set 1)", 0 ) +GAME( 1987, ninjak2a, ninjakd2, ninjakd2, ninjakd2, bootleg, ROT0, "UPL", "Ninja-Kid II / NinjaKun Ashura no Shou (set 2)", 0 ) +GAME( 1987, ninjak2b, ninjakd2, ninjakd2, rdaction, bootleg, ROT0, "UPL", "Ninja-Kid II / NinjaKun Ashura no Shou (set 3)", 0 ) +GAME( 1987, rdaction, ninjakd2, ninjakd2, rdaction, ninjakd2, ROT0, "UPL (World Games license)", "Rad Action / NinjaKun Ashura no Shou", 0 ) +GAME( 1987, mnight, 0, mnight, mnight, mnight, ROT0, "UPL (Kawakus license)", "Mutant Night", GAME_IMPERFECT_GRAPHICS ) +GAME( 1987, arkarea, 0, mnight, arkarea, mnight, ROT0, "UPL", "Ark Area", 0 ) +GAME( 1988, robokid, 0, robokid, robokid, 0, ROT0, "UPL", "Atomic Robo-kid", 0 ) +GAME( 1988, robokidj, robokid, robokid, robokidj, 0, ROT0, "UPL", "Atomic Robo-kid (Japan, Set 1)", 0 ) +GAME( 1988, robokdj2, robokid, robokid, robokidj, 0, ROT0, "UPL", "Atomic Robo-kid (Japan, Set 2)", 0 ) +GAME( 1989, omegaf, 0, omegaf, omegaf, 0, ROT270, "UPL", "Omega Fighter", 0 ) +GAME( 1989, omegafs, omegaf, omegaf, omegaf, 0, ROT270, "UPL", "Omega Fighter Special", 0 ) diff --git a/src/mame/drivers/omegaf.c b/src/mame/drivers/omegaf.c deleted file mode 100644 index 756d16f0104..00000000000 --- a/src/mame/drivers/omegaf.c +++ /dev/null @@ -1,885 +0,0 @@ -/*************************************************************************** - -Omega Fighter ----------------------- -driver by Yochizo - -This driver is heavily dependent on the Raine source. -Very thanks to Richard Bush and the Raine team. - - -Supported games : -================== - Omega Fighter (C) 1989 UPL - Atomic Robokid (C) 1988 UPL - -Known issues : -================ - - Cocktail mode has not been supported yet. - - Omega Fighter has a input protection. Currently it is hacked instead - of emulated. - - I don't know if Omega Fighter uses sprite overdraw flag or not. - - Sometimes sprites stays behind the screen in Atomic Robokid due to - incomplete sprite overdraw emulation. - - Currently it has not been implemented palette marking in sprite - overdraw mode. - - When RAM and ROM check and color test mode, the palette is overflows. - 16 bit color is needed ? - -NOTE : -======== - - To skip dip setting display, press 1P + 2P start in Atomic Robokid. - - To enter the level code in Atomic Robokid, in the title screen insert 1 coin - and then press 1P or 2P start while keeping pressed 1P or 2P button1 - -***************************************************************************/ - -/* - - TODO: - - - "XXX Intturupt Hold ???" msg at post screen - - coin counters/lockouts - - sprites are invisible in flipscreen mode - -*/ - -#include "driver.h" -#include "sound/2203intf.h" - - -/************************************************************************** - Variables -**************************************************************************/ - -extern UINT8 *omegaf_fg_videoram; -extern size_t omegaf_fgvideoram_size; - -extern UINT8 *omegaf_bg0_scroll_x; -extern UINT8 *omegaf_bg1_scroll_x; -extern UINT8 *omegaf_bg2_scroll_x; -extern UINT8 *omegaf_bg0_scroll_y; -extern UINT8 *omegaf_bg1_scroll_y; -extern UINT8 *omegaf_bg2_scroll_y; - -extern WRITE8_HANDLER( omegaf_bg0_bank_w ); -extern WRITE8_HANDLER( omegaf_bg1_bank_w ); -extern WRITE8_HANDLER( omegaf_bg2_bank_w ); -extern READ8_HANDLER( omegaf_bg0_videoram_r ); -extern READ8_HANDLER( omegaf_bg1_videoram_r ); -extern READ8_HANDLER( omegaf_bg2_videoram_r ); -extern WRITE8_HANDLER( omegaf_bg0_videoram_w ); -extern WRITE8_HANDLER( omegaf_bg1_videoram_w ); -extern WRITE8_HANDLER( omegaf_bg2_videoram_w ); -extern WRITE8_HANDLER( robokid_bg0_videoram_w ); -extern WRITE8_HANDLER( robokid_bg1_videoram_w ); -extern WRITE8_HANDLER( robokid_bg2_videoram_w ); -extern WRITE8_HANDLER( omegaf_bg0_scrollx_w ); -extern WRITE8_HANDLER( omegaf_bg1_scrollx_w ); -extern WRITE8_HANDLER( omegaf_bg2_scrollx_w ); -extern WRITE8_HANDLER( omegaf_bg0_scrolly_w ); -extern WRITE8_HANDLER( omegaf_bg1_scrolly_w ); -extern WRITE8_HANDLER( omegaf_bg2_scrolly_w ); -extern WRITE8_HANDLER( omegaf_fgvideoram_w ); -extern WRITE8_HANDLER( omegaf_bg0_enabled_w ); -extern WRITE8_HANDLER( omegaf_bg1_enabled_w ); -extern WRITE8_HANDLER( omegaf_bg2_enabled_w ); -extern WRITE8_HANDLER( omegaf_sprite_overdraw_w ); -extern WRITE8_HANDLER( omegaf_flipscreen_w ); - -extern VIDEO_START( omegaf ); -extern VIDEO_START( robokid ); -extern VIDEO_UPDATE( omegaf ); -extern VIDEO_UPDATE( robokid ); - -static int omegaf_bank_latch = 2; - - -/************************************************************************** - Initializers -**************************************************************************/ - -static DRIVER_INIT( omegaf ) -{ - UINT8 *RAM = memory_region(REGION_CPU1); - - /* Hack the input protection. $00 and $01 code is written to $C005 */ - /* and $C006. */ - - RAM[0x029a] = 0x00; - RAM[0x029b] = 0x00; - RAM[0x02a6] = 0x00; - RAM[0x02a7] = 0x00; - - RAM[0x02b2] = 0xC9; - RAM[0x02b5] = 0xC9; - RAM[0x02c9] = 0xC9; - RAM[0x02f6] = 0xC9; - - RAM[0x05f0] = 0x00; - RAM[0x054c] = 0x04; - RAM[0x0557] = 0x03; - - - /* Fix ROM check */ - - RAM[0x0b8d] = 0x00; - RAM[0x0b8e] = 0x00; - RAM[0x0b8f] = 0x00; -} - - -/************************************************************************** - Interrupts -**************************************************************************/ - -static INTERRUPT_GEN( omegaf_interrupt ) -{ - cpunum_set_input_line_and_vector(0, 0, HOLD_LINE, 0xd7); /* RST 10h */ -} - - -/************************************************************************** - Inputs -**************************************************************************/ - -static INPUT_PORTS_START( omegaf ) - PORT_START /* Player 1 inputs */ - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) - PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START /* Player 2 inputs */ - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL - PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START /* System inputs */ - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 ) - PORT_BIT( 0x0c, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 ) - - PORT_START /* DSW 0 */ - PORT_DIPNAME( 0x01, 0x01, DEF_STR( Flip_Screen ) ) - PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x06, 0x06, DEF_STR( Difficulty ) ) - PORT_DIPSETTING( 0x00, DEF_STR( Easy ) ) - PORT_DIPSETTING( 0x06, DEF_STR( Normal ) ) - PORT_DIPSETTING( 0x02, DEF_STR( Hard ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Hardest ) ) - PORT_SERVICE( 0x08, IP_ACTIVE_LOW ) - PORT_DIPNAME( 0x10, 0x00, DEF_STR( Cabinet) ) - PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Cocktail ) ) - PORT_DIPNAME( 0x20, 0x20, DEF_STR( Demo_Sounds ) ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x20, DEF_STR( On ) ) - PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Lives ) ) - PORT_DIPSETTING( 0x00, "2" ) - PORT_DIPSETTING( 0xc0, "3" ) - PORT_DIPSETTING( 0x40, "4" ) - PORT_DIPSETTING( 0x80, "5" ) - - PORT_START /* DSW 1 */ - PORT_DIPNAME( 0x03, 0x03, DEF_STR( Bonus_Life ) ) - PORT_DIPSETTING( 0x00, "20000" ) - PORT_DIPSETTING( 0x03, "30000" ) - PORT_DIPSETTING( 0x01, "50000" ) - PORT_DIPSETTING( 0x02, "100000" ) - PORT_DIPNAME( 0x1c, 0x1c, DEF_STR( Coin_B ) ) - PORT_DIPSETTING( 0x00, DEF_STR( 5C_1C ) ) - PORT_DIPSETTING( 0x10, DEF_STR( 4C_1C ) ) - PORT_DIPSETTING( 0x08, DEF_STR( 3C_1C ) ) - PORT_DIPSETTING( 0x18, DEF_STR( 2C_1C ) ) - PORT_DIPSETTING( 0x1c, DEF_STR( 1C_1C ) ) - PORT_DIPSETTING( 0x0c, DEF_STR( 1C_2C ) ) - PORT_DIPSETTING( 0x14, DEF_STR( 1C_3C ) ) - PORT_DIPSETTING( 0x04, DEF_STR( 1C_4C ) ) - PORT_DIPNAME( 0xe0, 0xe0, DEF_STR( Coin_A ) ) - PORT_DIPSETTING( 0x00, DEF_STR( 5C_1C ) ) - PORT_DIPSETTING( 0x80, DEF_STR( 4C_1C ) ) - PORT_DIPSETTING( 0x40, DEF_STR( 3C_1C ) ) - PORT_DIPSETTING( 0xc0, DEF_STR( 2C_1C ) ) - PORT_DIPSETTING( 0xe0, DEF_STR( 1C_1C ) ) - PORT_DIPSETTING( 0x60, DEF_STR( 1C_2C ) ) - PORT_DIPSETTING( 0xa0, DEF_STR( 1C_3C ) ) - PORT_DIPSETTING( 0x20, DEF_STR( 1C_4C ) ) -INPUT_PORTS_END - -static INPUT_PORTS_START( robokid ) - PORT_START /* Player 1 inputs */ - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) // fire - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) // jump - PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START /* Player 2 inputs */ - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL - PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START /* System inputs */ - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) - - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 ) - PORT_BIT( 0x0c, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 ) - - PORT_START /* DSW 0 */ - PORT_DIPNAME( 0x01, 0x01, DEF_STR( Flip_Screen ) ) - PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x02, DEF_STR( Bonus_Life ) ) - PORT_DIPSETTING( 0x02, "50K 100K+" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPNAME( 0x04, 0x04, DEF_STR( Difficulty ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Normal ) ) - PORT_DIPSETTING( 0x00, DEF_STR( Hard ) ) - PORT_DIPNAME( 0x08, 0x08, DEF_STR( Free_Play ) ) - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x00, DEF_STR( Cabinet ) ) - PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Cocktail ) ) - PORT_DIPNAME( 0x20, 0x00, DEF_STR( Demo_Sounds ) ) - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Lives ) ) - PORT_DIPSETTING( 0x80, "2" ) - PORT_DIPSETTING( 0xc0, "3" ) - PORT_DIPSETTING( 0x40, "4" ) - PORT_DIPSETTING( 0x00, "5" ) - - PORT_START /* DSW 1 */ - PORT_SERVICE( 0x01, IP_ACTIVE_LOW ) - PORT_BIT( 0x1e, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_DIPNAME( 0xe0, 0xe0, DEF_STR( Coinage ) ) - PORT_DIPSETTING( 0x00, DEF_STR( 5C_1C ) ) - PORT_DIPSETTING( 0x20, DEF_STR( 4C_1C ) ) - PORT_DIPSETTING( 0x40, DEF_STR( 3C_1C ) ) - PORT_DIPSETTING( 0x60, DEF_STR( 2C_1C ) ) - PORT_DIPSETTING( 0xe0, DEF_STR( 1C_1C ) ) - PORT_DIPSETTING( 0xc0, DEF_STR( 1C_2C ) ) - PORT_DIPSETTING( 0xa0, DEF_STR( 1C_3C ) ) - PORT_DIPSETTING( 0x80, DEF_STR( 1C_4C ) ) -INPUT_PORTS_END - - -static INPUT_PORTS_START( robokidj ) - PORT_START /* Player 1 inputs */ - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) // fire - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) // jump - PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START /* Player 2 inputs */ - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL - PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START /* System inputs */ - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 ) - PORT_BIT( 0x0c, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE ) /* keep pressed during boot to enter service mode */ - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 ) - - PORT_START /* DSW 0 */ - PORT_DIPNAME( 0x01, 0x01, DEF_STR( Flip_Screen ) ) - PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x02, DEF_STR( Bonus_Life ) ) - PORT_DIPSETTING( 0x02, "30K 50K+" ) - PORT_DIPSETTING( 0x00, "50K 80K+" ) - PORT_DIPNAME( 0x04, 0x04, DEF_STR( Difficulty ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Normal ) ) - PORT_DIPSETTING( 0x00, DEF_STR( Hard ) ) - PORT_DIPNAME( 0x08, 0x08, DEF_STR( Free_Play ) ) - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x00, DEF_STR( Cabinet ) ) - PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Cocktail ) ) - PORT_DIPNAME( 0x20, 0x00, DEF_STR( Demo_Sounds ) ) - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Lives ) ) - PORT_DIPSETTING( 0x80, "2" ) - PORT_DIPSETTING( 0xc0, "3" ) - PORT_DIPSETTING( 0x40, "4" ) - PORT_DIPSETTING( 0x00, "5" ) - - PORT_START /* DSW 1 */ - PORT_SERVICE( 0x01, IP_ACTIVE_LOW ) - PORT_BIT( 0x1e, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_DIPNAME( 0xe0, 0xe0, DEF_STR( Coinage ) ) - PORT_DIPSETTING( 0x00, DEF_STR( 5C_1C ) ) - PORT_DIPSETTING( 0x20, DEF_STR( 4C_1C ) ) - PORT_DIPSETTING( 0x40, DEF_STR( 3C_1C ) ) - PORT_DIPSETTING( 0x60, DEF_STR( 2C_1C ) ) - PORT_DIPSETTING( 0xe0, DEF_STR( 1C_1C ) ) - PORT_DIPSETTING( 0xc0, DEF_STR( 1C_2C ) ) - PORT_DIPSETTING( 0xa0, DEF_STR( 1C_3C ) ) - PORT_DIPSETTING( 0x80, DEF_STR( 1C_4C ) ) -INPUT_PORTS_END - - -/************************************************************************** - Memory handlers -**************************************************************************/ - -static WRITE8_HANDLER( omegaf_bankselect_w ) -{ - UINT8 *RAM = memory_region(REGION_CPU1); - int bankaddress; - - if ( (data & 0x0f) != omegaf_bank_latch ) - { - omegaf_bank_latch = data & 0x0f; - - if (omegaf_bank_latch < 2) - bankaddress = omegaf_bank_latch * 0x4000; - else - bankaddress = 0x10000 + ( (omegaf_bank_latch - 2) * 0x4000); - memory_set_bankptr( 1, &RAM[bankaddress] ); /* Select 16 banks of 16k */ - } -} - - -/************************************************************************** - Memory maps -**************************************************************************/ - -static ADDRESS_MAP_START( omegaf_readmem, ADDRESS_SPACE_PROGRAM, 8 ) - AM_RANGE(0x0000, 0x7fff) AM_READ(MRA8_ROM) - AM_RANGE(0x8000, 0xbfff) AM_READ(MRA8_BANK1) - AM_RANGE(0xc000, 0xc000) AM_READ(input_port_2_r) /* system input */ - AM_RANGE(0xc001, 0xc001) AM_READ(input_port_0_r) /* player 1 input */ - AM_RANGE(0xc002, 0xc002) AM_READ(input_port_1_r) /* player 2 input */ - AM_RANGE(0xc003, 0xc003) AM_READ(input_port_3_r) /* DSW 1 input */ - AM_RANGE(0xc004, 0xc004) AM_READ(input_port_4_r) /* DSW 2 input */ - AM_RANGE(0xc005, 0xc005) AM_READ(MRA8_NOP) - AM_RANGE(0xc006, 0xc006) AM_READ(MRA8_NOP) - AM_RANGE(0xc100, 0xc105) AM_READ(MRA8_RAM) - AM_RANGE(0xc200, 0xc205) AM_READ(MRA8_RAM) - AM_RANGE(0xc300, 0xc305) AM_READ(MRA8_RAM) - AM_RANGE(0xc400, 0xc7ff) AM_READ(omegaf_bg0_videoram_r) /* BG0 video RAM */ - AM_RANGE(0xc800, 0xcbff) AM_READ(omegaf_bg1_videoram_r) /* BG1 video RAM */ - AM_RANGE(0xcc00, 0xcfff) AM_READ(omegaf_bg2_videoram_r) /* BG2 video RAM */ - AM_RANGE(0xd000, 0xd7ff) AM_READ(MRA8_RAM) /* FG RAM */ - AM_RANGE(0xd800, 0xdfff) AM_READ(MRA8_RAM) /* palette RAM */ - AM_RANGE(0xe000, 0xf9ff) AM_READ(MRA8_RAM) /* RAM */ - AM_RANGE(0xfa00, 0xffff) AM_READ(MRA8_RAM) /* sprite RAM */ -ADDRESS_MAP_END - -static ADDRESS_MAP_START( omegaf_writemem, ADDRESS_SPACE_PROGRAM, 8 ) - AM_RANGE(0x0000, 0xbfff) AM_WRITE(MWA8_ROM) - AM_RANGE(0xc000, 0xc000) AM_WRITE(soundlatch_w) - AM_RANGE(0xc001, 0xc001) AM_WRITE(omegaf_flipscreen_w) - AM_RANGE(0xc002, 0xc002) AM_WRITE(omegaf_bankselect_w) - AM_RANGE(0xc003, 0xc003) AM_WRITE(omegaf_sprite_overdraw_w) - AM_RANGE(0xc004, 0xc004) AM_WRITE(MWA8_NOP) /* input protection */ - AM_RANGE(0xc005, 0xc005) AM_WRITE(MWA8_NOP) /* input protection */ - AM_RANGE(0xc006, 0xc006) AM_WRITE(MWA8_NOP) /* input protection */ - AM_RANGE(0xc100, 0xc101) AM_WRITE(omegaf_bg0_scrollx_w) AM_BASE(&omegaf_bg0_scroll_x) - AM_RANGE(0xc102, 0xc103) AM_WRITE(omegaf_bg0_scrolly_w) AM_BASE(&omegaf_bg0_scroll_y) - AM_RANGE(0xc104, 0xc104) AM_WRITE(omegaf_bg0_enabled_w) /* BG0 enabled */ - AM_RANGE(0xc105, 0xc105) AM_WRITE(omegaf_bg0_bank_w) /* BG0 bank select */ - AM_RANGE(0xc200, 0xc201) AM_WRITE(omegaf_bg1_scrollx_w) AM_BASE(&omegaf_bg1_scroll_x) - AM_RANGE(0xc202, 0xc203) AM_WRITE(omegaf_bg1_scrolly_w) AM_BASE(&omegaf_bg1_scroll_y) - AM_RANGE(0xc204, 0xc204) AM_WRITE(omegaf_bg1_enabled_w) /* BG1 enabled */ - AM_RANGE(0xc205, 0xc205) AM_WRITE(omegaf_bg1_bank_w) /* BG1 bank select */ - AM_RANGE(0xc300, 0xc301) AM_WRITE(omegaf_bg2_scrollx_w) AM_BASE(&omegaf_bg2_scroll_x) - AM_RANGE(0xc302, 0xc303) AM_WRITE(omegaf_bg2_scrolly_w) AM_BASE(&omegaf_bg2_scroll_y) - AM_RANGE(0xc304, 0xc304) AM_WRITE(omegaf_bg2_enabled_w) /* BG2 enabled */ - AM_RANGE(0xc305, 0xc305) AM_WRITE(omegaf_bg2_bank_w) /* BG2 bank select */ - AM_RANGE(0xc400, 0xc7ff) AM_WRITE(omegaf_bg0_videoram_w) /* BG0 video RAM */ - AM_RANGE(0xc800, 0xcbff) AM_WRITE(omegaf_bg1_videoram_w) /* BG1 video RAM */ - AM_RANGE(0xcc00, 0xcfff) AM_WRITE(omegaf_bg2_videoram_w) /* BG2 video RAM */ - AM_RANGE(0xd000, 0xd7ff) AM_WRITE(omegaf_fgvideoram_w) AM_BASE(&omegaf_fg_videoram) - AM_RANGE(0xd800, 0xdfff) AM_WRITE(paletteram_RRRRGGGGBBBBxxxx_be_w) AM_BASE(&paletteram) - AM_RANGE(0xe000, 0xf9ff) AM_WRITE(MWA8_RAM) /* RAM */ - AM_RANGE(0xfa00, 0xffff) AM_WRITE(MWA8_RAM) AM_BASE(&spriteram) AM_SIZE(&spriteram_size) -ADDRESS_MAP_END - -static ADDRESS_MAP_START( robokid_readmem, ADDRESS_SPACE_PROGRAM, 8 ) - AM_RANGE(0x0000, 0x7fff) AM_READ(MRA8_ROM) - AM_RANGE(0x8000, 0xbfff) AM_READ(MRA8_BANK1) - AM_RANGE(0xc000, 0xc7ff) AM_READ(MRA8_RAM) /* palette RAM */ - AM_RANGE(0xc800, 0xcfff) AM_READ(MRA8_RAM) /* FG RAM */ - AM_RANGE(0xd000, 0xd3ff) AM_READ(omegaf_bg2_videoram_r) - AM_RANGE(0xd400, 0xd7ff) AM_READ(omegaf_bg1_videoram_r) - AM_RANGE(0xd800, 0xdbff) AM_READ(omegaf_bg0_videoram_r) - AM_RANGE(0xdc00, 0xdc00) AM_READ(input_port_2_r) /* system input */ - AM_RANGE(0xdc01, 0xdc01) AM_READ(input_port_0_r) /* player 1 input */ - AM_RANGE(0xdc02, 0xdc02) AM_READ(input_port_1_r) /* player 2 input */ - AM_RANGE(0xdc03, 0xdc03) AM_READ(input_port_3_r) /* DSW 1 input */ - AM_RANGE(0xdc04, 0xdc04) AM_READ(input_port_4_r) /* DSW 2 input */ - AM_RANGE(0xdd00, 0xdd05) AM_READ(MRA8_RAM) - AM_RANGE(0xde00, 0xde05) AM_READ(MRA8_RAM) - AM_RANGE(0xdf00, 0xdf05) AM_READ(MRA8_RAM) - AM_RANGE(0xe000, 0xf9ff) AM_READ(MRA8_RAM) /* RAM */ - AM_RANGE(0xfa00, 0xffff) AM_READ(MRA8_RAM) /* sprite RAM */ -ADDRESS_MAP_END - -static ADDRESS_MAP_START( robokid_writemem, ADDRESS_SPACE_PROGRAM, 8 ) - AM_RANGE(0x0000, 0xbfff) AM_WRITE(MWA8_ROM) - AM_RANGE(0xc000, 0xc7ff) AM_WRITE(paletteram_RRRRGGGGBBBBxxxx_be_w) AM_BASE(&paletteram) - AM_RANGE(0xc800, 0xcfff) AM_WRITE(omegaf_fgvideoram_w) AM_BASE(&omegaf_fg_videoram) - AM_RANGE(0xd000, 0xd3ff) AM_WRITE(robokid_bg2_videoram_w) /* BG2 video RAM */ - AM_RANGE(0xd400, 0xd7ff) AM_WRITE(robokid_bg1_videoram_w) /* BG1 video RAM */ - AM_RANGE(0xd800, 0xdbff) AM_WRITE(robokid_bg0_videoram_w) /* BG0 video RAM */ - AM_RANGE(0xdc00, 0xdc00) AM_WRITE(soundlatch_w) - AM_RANGE(0xdc01, 0xdc01) AM_WRITE(omegaf_flipscreen_w) - AM_RANGE(0xdc02, 0xdc02) AM_WRITE(omegaf_bankselect_w) - AM_RANGE(0xdc03, 0xdc03) AM_WRITE(omegaf_sprite_overdraw_w) - AM_RANGE(0xdd00, 0xdd01) AM_WRITE(omegaf_bg0_scrollx_w) AM_BASE(&omegaf_bg0_scroll_x) - AM_RANGE(0xdd02, 0xdd03) AM_WRITE(omegaf_bg0_scrolly_w) AM_BASE(&omegaf_bg0_scroll_y) - AM_RANGE(0xdd04, 0xdd04) AM_WRITE(omegaf_bg0_enabled_w) /* BG0 enabled */ - AM_RANGE(0xdd05, 0xdd05) AM_WRITE(omegaf_bg0_bank_w) /* BG0 bank select */ - AM_RANGE(0xde00, 0xde01) AM_WRITE(omegaf_bg1_scrollx_w) AM_BASE(&omegaf_bg1_scroll_x) - AM_RANGE(0xde02, 0xde03) AM_WRITE(omegaf_bg1_scrolly_w) AM_BASE(&omegaf_bg1_scroll_y) - AM_RANGE(0xde04, 0xde04) AM_WRITE(omegaf_bg1_enabled_w) /* BG1 enabled */ - AM_RANGE(0xde05, 0xde05) AM_WRITE(omegaf_bg1_bank_w) /* BG1 bank select */ - AM_RANGE(0xdf00, 0xdf01) AM_WRITE(omegaf_bg2_scrollx_w) AM_BASE(&omegaf_bg2_scroll_x) - AM_RANGE(0xdf02, 0xdf03) AM_WRITE(omegaf_bg2_scrolly_w) AM_BASE(&omegaf_bg2_scroll_y) - AM_RANGE(0xdf04, 0xdf04) AM_WRITE(omegaf_bg2_enabled_w) /* BG2 enabled */ - AM_RANGE(0xdf05, 0xdf05) AM_WRITE(omegaf_bg2_bank_w) /* BG2 bank select */ - AM_RANGE(0xe000, 0xf9ff) AM_WRITE(MWA8_RAM) /* RAM */ - AM_RANGE(0xfa00, 0xffff) AM_WRITE(MWA8_RAM) AM_BASE(&spriteram) AM_SIZE(&spriteram_size) -ADDRESS_MAP_END - -static ADDRESS_MAP_START( sound_readmem, ADDRESS_SPACE_PROGRAM, 8 ) - AM_RANGE(0x0000, 0xbfff) AM_READ(MRA8_ROM) - AM_RANGE(0xc000, 0xc7ff) AM_READ(MRA8_RAM) - AM_RANGE(0xe000, 0xe000) AM_READ(soundlatch_r) - AM_RANGE(0xefee, 0xefee) AM_READ(MRA8_NOP) -ADDRESS_MAP_END - -static ADDRESS_MAP_START( sound_writemem, ADDRESS_SPACE_PROGRAM, 8 ) - AM_RANGE(0x0000, 0xbfff) AM_WRITE(MWA8_ROM) - AM_RANGE(0xc000, 0xc7ff) AM_WRITE(MWA8_RAM) - AM_RANGE(0xe000, 0xe000) AM_WRITE(MWA8_NOP) - AM_RANGE(0xeff5, 0xeff6) AM_WRITE(MWA8_NOP) /* sample frequency ??? */ - AM_RANGE(0xefee, 0xefee) AM_WRITE(MWA8_NOP) /* chip command ?? */ - AM_RANGE(0xf000, 0xf000) AM_WRITE(MWA8_NOP) // ??? -ADDRESS_MAP_END - -static ADDRESS_MAP_START( sound_readport, ADDRESS_SPACE_IO, 8 ) - ADDRESS_MAP_FLAGS( AMEF_ABITS(8) ) - AM_RANGE(0x00, 0x00) AM_READ(YM2203_status_port_0_r) - AM_RANGE(0x01, 0x01) AM_READ(YM2203_read_port_0_r) - AM_RANGE(0x80, 0x80) AM_READ(YM2203_status_port_1_r) - AM_RANGE(0x81, 0x81) AM_READ(YM2203_read_port_1_r) -ADDRESS_MAP_END - -static ADDRESS_MAP_START( sound_writeport, ADDRESS_SPACE_IO, 8 ) - ADDRESS_MAP_FLAGS( AMEF_ABITS(8) ) - AM_RANGE(0x00, 0x00) AM_WRITE(YM2203_control_port_0_w) - AM_RANGE(0x01, 0x01) AM_WRITE(YM2203_write_port_0_w) - AM_RANGE(0x80, 0x80) AM_WRITE(YM2203_control_port_1_w) - AM_RANGE(0x81, 0x81) AM_WRITE(YM2203_write_port_1_w) -ADDRESS_MAP_END - - -/************************************************************************** - GFX decoding -**************************************************************************/ - -static const gfx_layout omegaf_charlayout = -{ - 8, 8, /* 8x8 characters */ - 1024, /* 1024 characters */ - 4, /* 4 bits per pixel */ - { 0, 1, 2, 3 }, - { 0, 4, 8, 12, 16, 20, 24, 28 }, - { 32*0, 32*1, 32*2, 32*3, 32*4, 32*5, 32*6, 32*7 }, - 8*32 -}; - -static const gfx_layout omegaf_spritelayout = -{ - 16, 16, /* 16x16 characters */ - 1024, - 4, - { 0, 1, 2, 3 }, - { 0, 4, 8, 12, 16, 20, 24, 28, - 64*8+0, 64*8+4, 64*8+8, 64*8+12, 64*8+16, 64*8+20, 64*8+24, 64*8+28 }, - { 32*0, 32*1, 32*2, 32*3, 32*4, 32*5, 32*6, 32*7, - 32*8, 32*9, 32*10, 32*11, 32*12, 32*13, 32*14, 32*15 }, - 16*64 -}; - -static const gfx_layout omegaf_bigspritelayout = -{ - 32, 32, /* 32x32 characters */ - 256, - 4, - { 0, 1, 2, 3 }, - { 0, 4, 8, 12, 16, 20, 24, 28, - 64*8+0, 64*8+4, 64*8+8, 64*8+12, 64*8+16, 64*8+20, 64*8+24, 64*8+28, - 128*16+0, 128*16+4, 128*16+8, 128*16+12, 128*16+16, 128*16+20, 128*16+24, 128*16+28, - 128*16+64*8+0, 128*16+64*8+4, 128*16+64*8+8, 128*16+64*8+12, 128*16+64*8+16, 128*16+64*8+20, 128*16+64*8+24, 128*16+64*8+28 }, - { 32*0, 32*1, 32*2, 32*3, 32*4, 32*5, 32*6, 32*7, - 32*8, 32*9, 32*10, 32*11, 32*12, 32*13, 32*14, 32*15, - 64*16+32*0, 64*16+32*1, 64*16+32*2, 64*16+32*3, 64*16+32*4, 64*16+32*5, 64*16+32*6, 64*16+32*7, - 64*16+32*8, 64*16+32*9, 64*16+32*10, 64*16+32*11, 64*16+32*12, 64*16+32*13, 64*16+32*14, 64*16+32*15 }, - 16*64*4 -}; - -static const gfx_layout omegaf_bglayout = -{ - 16, 16, /* 16x16 characters */ - 4096, - 4, - { 0, 1, 2, 3 }, - { 0, 4, 8, 12, 16, 20, 24, 28, - 64*8+0, 64*8+4, 64*8+8, 64*8+12, 64*8+16, 64*8+20, 64*8+24, 64*8+28 }, - { 32*0, 32*1, 32*2, 32*3, 32*4, 32*5, 32*6, 32*7, - 32*8, 32*9, 32*10, 32*11, 32*12, 32*13, 32*14, 32*15 }, - 16*64 -}; - -static const gfx_layout robokid_spritelayout = -{ - 16, 16, /* 16x16 characters */ - 2048, - 4, - { 0, 1, 2, 3 }, - { 0, 4, 8, 12, 16, 20, 24, 28, - 64*8+0, 64*8+4, 64*8+8, 64*8+12, 64*8+16, 64*8+20, 64*8+24, 64*8+28 }, - { 32*0, 32*1, 32*2, 32*3, 32*4, 32*5, 32*6, 32*7, - 32*8, 32*9, 32*10, 32*11, 32*12, 32*13, 32*14, 32*15 }, - 16*64 -}; - -static const gfx_layout robokid_bigspritelayout = -{ - 32, 32, /* 32x32 characters */ - 512, - 4, - { 0, 1, 2, 3 }, - { 0, 4, 8, 12, 16, 20, 24, 28, - 64*8+0, 64*8+4, 64*8+8, 64*8+12, 64*8+16, 64*8+20, 64*8+24, 64*8+28, - 128*16+0, 128*16+4, 128*16+8, 128*16+12, 128*16+16, 128*16+20, 128*16+24, 128*16+28, - 128*16+64*8+0, 128*16+64*8+4, 128*16+64*8+8, 128*16+64*8+12, 128*16+64*8+16, 128*16+64*8+20, 128*16+64*8+24, 128*16+64*8+28 }, - { 32*0, 32*1, 32*2, 32*3, 32*4, 32*5, 32*6, 32*7, - 32*8, 32*9, 32*10, 32*11, 32*12, 32*13, 32*14, 32*15, - 64*16+32*0, 64*16+32*1, 64*16+32*2, 64*16+32*3, 64*16+32*4, 64*16+32*5, 64*16+32*6, 64*16+32*7, - 64*16+32*8, 64*16+32*9, 64*16+32*10, 64*16+32*11, 64*16+32*12, 64*16+32*13, 64*16+32*14, 64*16+32*15 }, - 16*64*4 -}; - -static GFXDECODE_START( omegaf ) - GFXDECODE_ENTRY( REGION_GFX1, 0, omegaf_bglayout, 0*16, 16) - GFXDECODE_ENTRY( REGION_GFX2, 0, omegaf_bglayout, 0*16, 16) - GFXDECODE_ENTRY( REGION_GFX3, 0, omegaf_bglayout, 0*16, 16) - GFXDECODE_ENTRY( REGION_GFX4, 0, omegaf_spritelayout, 32*16, 16) - GFXDECODE_ENTRY( REGION_GFX4, 0, omegaf_bigspritelayout, 32*16, 16) - GFXDECODE_ENTRY( REGION_GFX5, 0, omegaf_charlayout, 48*16, 16) -GFXDECODE_END - -static GFXDECODE_START( robokid ) - GFXDECODE_ENTRY( REGION_GFX1, 0, omegaf_bglayout, 0*16, 16) - GFXDECODE_ENTRY( REGION_GFX2, 0, omegaf_bglayout, 0*16, 16) - GFXDECODE_ENTRY( REGION_GFX3, 0, omegaf_bglayout, 0*16, 16) - GFXDECODE_ENTRY( REGION_GFX4, 0, robokid_spritelayout, 32*16, 16) - GFXDECODE_ENTRY( REGION_GFX4, 0, robokid_bigspritelayout, 32*16, 16) - GFXDECODE_ENTRY( REGION_GFX5, 0, omegaf_charlayout, 48*16, 16) -GFXDECODE_END - - -/************************************************************************** - Machine drivers -**************************************************************************/ - -static MACHINE_DRIVER_START( omegaf ) - - /* basic machine hardware */ - MDRV_CPU_ADD_TAG("main", Z80, 12000000/2) /* 12000000/2 (verified on pcb) */ - MDRV_CPU_PROGRAM_MAP(omegaf_readmem,omegaf_writemem) /* very sensitive to these settings */ - MDRV_CPU_VBLANK_INT(omegaf_interrupt,1) - - MDRV_CPU_ADD(Z80, 5000000) - /* audio CPU */ /* 5 mhz crystal (verified on pcb) */ - MDRV_CPU_PROGRAM_MAP(sound_readmem,sound_writemem) - MDRV_CPU_IO_MAP(sound_readport,sound_writeport) - MDRV_CPU_VBLANK_INT(irq0_line_hold,2) - - MDRV_SCREEN_REFRESH_RATE(60) - MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) - MDRV_INTERLEAVE(10) /* number of slices per frame */ - - /* video hardware */ - MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) - MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) - MDRV_SCREEN_SIZE(128*16, 32*16) - MDRV_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 4*8, 28*8-1) - MDRV_GFXDECODE(omegaf) - MDRV_PALETTE_LENGTH(1024) - - MDRV_VIDEO_START(omegaf) - MDRV_VIDEO_UPDATE(omegaf) - - /* sound hardware */ - MDRV_SPEAKER_STANDARD_MONO("mono") - - MDRV_SOUND_ADD(YM2203, 12000000/8) /* (verified on pcb) */ - MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.35) - - MDRV_SOUND_ADD(YM2203, 12000000/8) /* (verified on pcb) */ - MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.35) -MACHINE_DRIVER_END - - -static MACHINE_DRIVER_START( robokid ) - MDRV_IMPORT_FROM(omegaf) - - MDRV_CPU_MODIFY("main") - MDRV_CPU_PROGRAM_MAP(robokid_readmem,robokid_writemem) - - MDRV_GFXDECODE(robokid) - MDRV_VIDEO_START(robokid) - MDRV_VIDEO_UPDATE(robokid) -MACHINE_DRIVER_END - - -/************************************************************************** - ROM loaders -**************************************************************************/ - -ROM_START( omegaf ) - ROM_REGION( 0x48000, REGION_CPU1, 0 ) /* main CPU */ - ROM_LOAD( "1.5", 0x00000, 0x08000, CRC(57a7fd96) SHA1(65ca290b48f8579fcce00db5b3b3f8694667a136) ) - ROM_CONTINUE( 0x10000, 0x18000 ) - ROM_LOAD( "6.4l", 0x28000, 0x20000, CRC(6277735c) SHA1(b0f91f0cc51d424a1a7834c126736f24c2e23c17) ) - - ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* sound CPU */ - ROM_LOAD( "7.7m", 0x00000, 0x10000, CRC(d40fc8d5) SHA1(4f615a0fb786cafc20f82f0b5fa112a9c356378f) ) - - ROM_REGION( 0x80000, REGION_GFX1, ROMREGION_DISPOSE ) /* BG0 */ - ROM_LOAD( "2back1.27b", 0x00000, 0x80000, CRC(21f8a32e) SHA1(26582e06e7381e09443fa99f24ca9edd0b4a2937) ) - - ROM_REGION( 0x80000, REGION_GFX2, ROMREGION_DISPOSE ) /* BG1 */ - ROM_LOAD( "1back2.15b", 0x00000, 0x80000, CRC(6210ddcc) SHA1(89c091eeafcc92750d0ea303fcde8a8dc3eeba89) ) - - ROM_REGION( 0x80000, REGION_GFX3, ROMREGION_DISPOSE ) /* BG2 */ - ROM_LOAD( "3back3.5f", 0x00000, 0x80000, CRC(c31cae56) SHA1(4cc2d0d70990ca04b0e3abd15e5afe183e98e4ab) ) - - ROM_REGION( 0x20000, REGION_GFX4, ROMREGION_DISPOSE ) /* sprite */ - ROM_LOAD( "8.23m", 0x00000, 0x20000, CRC(0bd2a5d1) SHA1(ef84f1a5554e891fc38d17314e3952ea5c9d2731) ) - - ROM_REGION( 0x08000, REGION_GFX5, ROMREGION_DISPOSE ) /* FG */ - ROM_LOAD( "4.18h", 0x00000, 0x08000, CRC(9e2d8152) SHA1(4b50557d171d1b03a870db5891ae67d70858ad37) ) -ROM_END - -ROM_START( omegafs ) - ROM_REGION( 0x48000, REGION_CPU1, 0 ) /* main CPU */ - ROM_LOAD( "5.3l", 0x00000, 0x08000, CRC(503a3e63) SHA1(73420aecb653cd4fd3b6afe67d6f5726f01411dd) ) - ROM_CONTINUE( 0x10000, 0x18000 ) - ROM_LOAD( "6.4l", 0x28000, 0x20000, CRC(6277735c) SHA1(b0f91f0cc51d424a1a7834c126736f24c2e23c17) ) - - ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* sound CPU */ - ROM_LOAD( "7.7m", 0x00000, 0x10000, CRC(d40fc8d5) SHA1(4f615a0fb786cafc20f82f0b5fa112a9c356378f) ) - - ROM_REGION( 0x80000, REGION_GFX1, ROMREGION_DISPOSE ) /* BG0 */ - ROM_LOAD( "2back1.27b", 0x00000, 0x80000, CRC(21f8a32e) SHA1(26582e06e7381e09443fa99f24ca9edd0b4a2937) ) - - ROM_REGION( 0x80000, REGION_GFX2, ROMREGION_DISPOSE ) /* BG1 */ - ROM_LOAD( "1back2.15b", 0x00000, 0x80000, CRC(6210ddcc) SHA1(89c091eeafcc92750d0ea303fcde8a8dc3eeba89) ) - - ROM_REGION( 0x80000, REGION_GFX3, ROMREGION_DISPOSE ) /* BG2 */ - ROM_LOAD( "3back3.5f", 0x00000, 0x80000, CRC(c31cae56) SHA1(4cc2d0d70990ca04b0e3abd15e5afe183e98e4ab) ) - - ROM_REGION( 0x20000, REGION_GFX4, ROMREGION_DISPOSE ) /* sprite */ - ROM_LOAD( "8.23m", 0x00000, 0x20000, CRC(0bd2a5d1) SHA1(ef84f1a5554e891fc38d17314e3952ea5c9d2731) ) - - ROM_REGION( 0x08000, REGION_GFX5, ROMREGION_DISPOSE ) /* FG */ - ROM_LOAD( "4.18h", 0x00000, 0x08000, CRC(9e2d8152) SHA1(4b50557d171d1b03a870db5891ae67d70858ad37) ) -ROM_END - -ROM_START( robokid ) - ROM_REGION( 0x48000, REGION_CPU1, 0 ) /* main CPU */ - ROM_LOAD( "robokid1.18j", 0x00000, 0x08000, CRC(378c21fc) SHA1(58163bd6fbfa8385b1bd648cfde3d75bf81ac07d) ) - ROM_CONTINUE( 0x10000, 0x08000 ) - ROM_LOAD( "robokid2.18k", 0x18000, 0x10000, CRC(ddef8c5a) SHA1(a1dd2f51205863c3d5d3527991d538ca8adf7587) ) - ROM_LOAD( "robokid3.15k", 0x28000, 0x10000, CRC(05295ec3) SHA1(33dd0853a2064cb4301cfbdc7856def81f6e1223) ) - ROM_LOAD( "robokid4.12k", 0x38000, 0x10000, CRC(3bc3977f) SHA1(da394e12d197b0e109b03c854da06b1267bd9d59) ) - ROM_COPY( REGION_CPU1 , 0x10000, 0x8000, 0x4000 ) /* to avoid crash */ - - ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* sound CPU */ - ROM_LOAD( "robokid.k7", 0x00000, 0x10000, CRC(f490a2e9) SHA1(861d1256c090ce3d1f45f95cc894affbbc3f1466) ) - - ROM_REGION( 0x80000, REGION_GFX1, ROMREGION_DISPOSE ) /* BG0 */ - ROM_LOAD( "robokid.19c", 0x00000, 0x10000, CRC(02220421) SHA1(f533e9c6cea1dccbb60e0528c470f3cb5e8fc44e) ) - ROM_LOAD( "robokid.20c", 0x10000, 0x10000, CRC(02d59bc2) SHA1(031acbb14145f9f4623de8868c6207fb9f8e8207) ) - ROM_LOAD( "robokid.17d", 0x20000, 0x10000, CRC(2fa29b99) SHA1(13dce7932e2e9c03a139a4293584838aa3d9f1c3) ) - ROM_LOAD( "robokid.18d", 0x30000, 0x10000, CRC(ae15ce02) SHA1(175e4eebdf12f1f373e01a4b1c933053ddd09abf) ) - ROM_LOAD( "robokid.19d", 0x40000, 0x10000, CRC(784b089e) SHA1(1ae3346b4afa3da9484ebc59c8a530cb95f7d277) ) - ROM_LOAD( "robokid.20d", 0x50000, 0x10000, CRC(b0b395ed) SHA1(31ec07634053793a701bbfd601b029f7da66e9d7) ) - ROM_LOAD( "robokid.19f", 0x60000, 0x10000, CRC(0f9071c6) SHA1(8bf0c35189eda98a9bc150788890e136870cb5b2) ) - - ROM_REGION( 0x80000, REGION_GFX2, ROMREGION_DISPOSE ) /* BG1 */ - ROM_LOAD( "robokid.12c", 0x00000, 0x10000, CRC(0ab45f94) SHA1(d8274263068d998c89a1b247dde7f814037cc15b) ) - ROM_LOAD( "robokid.14c", 0x10000, 0x10000, CRC(029bbd4a) SHA1(8e078cdafe608fc6cde827be85c5267ade4ecca6) ) - ROM_LOAD( "robokid.15c", 0x20000, 0x10000, CRC(7de67ebb) SHA1(2fe92e50e2894dd363e69b053db96bdb66a273eb) ) - ROM_LOAD( "robokid.16c", 0x30000, 0x10000, CRC(53c0e582) SHA1(763e6127532d022a707bf9ddf1a832413745f248) ) - ROM_LOAD( "robokid.17c", 0x40000, 0x10000, CRC(0cae5a1e) SHA1(a183a33516c81ea2c029b72ee6261c4519e095ab) ) - ROM_LOAD( "robokid.18c", 0x50000, 0x10000, CRC(56ac7c8a) SHA1(66ed5646a2e8563caeb4ff96fa7d34fde27e9899) ) - ROM_LOAD( "robokid.15d", 0x60000, 0x10000, CRC(cd632a4d) SHA1(a537d9ced45fdac490097e9162ac4d09a470be79) ) - ROM_LOAD( "robokid.16d", 0x70000, 0x10000, CRC(18d92b2b) SHA1(e6d20ea8f0fac8bd4824a3b279a0fd8a1d6c26f5) ) - - ROM_REGION( 0x80000, REGION_GFX3, ROMREGION_DISPOSE ) /* BG2 */ - ROM_LOAD( "robokid.12a", 0x00000, 0x10000, CRC(e64d1c10) SHA1(d1073c80c9788aba65410f88691747a37b2a9d4a) ) - ROM_LOAD( "robokid.14a", 0x10000, 0x10000, CRC(8f9371e4) SHA1(0ea06d62bf4673ebda49a849cead832a24e5b886) ) - ROM_LOAD( "robokid.15a", 0x20000, 0x10000, CRC(469204e7) SHA1(8c2e94635b2b304e7dfa2e6ad58ba526dcf02453) ) - ROM_LOAD( "robokid.16a", 0x30000, 0x10000, CRC(4e340815) SHA1(d204b830c5809f25f7dfa451bbcbeda8b81ced54) ) - ROM_LOAD( "robokid.17a", 0x40000, 0x10000, CRC(f0863106) SHA1(ff7e44d0aa5a07ec9a7eddef1a55181bd2e867b1) ) - ROM_LOAD( "robokid.18a", 0x50000, 0x10000, CRC(fdff7441) SHA1(843b2c92bbc6f7319568677d50cbd9b03475b34a) ) - - ROM_REGION( 0x40000, REGION_GFX4, ROMREGION_DISPOSE ) /* sprite */ - ROM_LOAD( "robokid.15f", 0x00000, 0x10000, CRC(ba61f5ab) SHA1(8433ddd55f0184cd5e8bb4a94a1c2336b2f8ff05) ) - ROM_LOAD( "robokid.16f", 0x10000, 0x10000, CRC(d9b399ce) SHA1(70755c9cae27187f183ae6d61bedb95c420756f4) ) - ROM_LOAD( "robokid.17f", 0x20000, 0x10000, CRC(afe432b9) SHA1(1ec7954ccf112eddf0ffcb8b5aec6cbc5cba7a7a) ) - ROM_LOAD( "robokid.18f", 0x30000, 0x10000, CRC(a0aa2a84) SHA1(4d46c169429cd285644336c7d47e393b33bd8770) ) - - ROM_REGION( 0x08000, REGION_GFX5, ROMREGION_DISPOSE ) /* FG */ - ROM_LOAD( "robokid.b9", 0x00000, 0x08000, CRC(fac59c3f) SHA1(1b202ad5c12982512129d9e097267dd31b984ae8) ) -ROM_END - -ROM_START( robokidj ) - ROM_REGION( 0x48000, REGION_CPU1, 0 ) /* main CPU */ - ROM_LOAD( "1.29", 0x00000, 0x08000, CRC(59a1e2ec) SHA1(71f9d28dd8d2cf77a27fab163ce9562e3e75a540) ) - ROM_CONTINUE( 0x10000, 0x08000 ) - ROM_LOAD( "2.30", 0x18000, 0x10000, CRC(e3f73476) SHA1(bd1c8946d637df21432bd52ae9324255251570b9) ) - ROM_LOAD( "robokid3.15k", 0x28000, 0x10000, CRC(05295ec3) SHA1(33dd0853a2064cb4301cfbdc7856def81f6e1223) ) - ROM_LOAD( "robokid4.12k", 0x38000, 0x10000, CRC(3bc3977f) SHA1(da394e12d197b0e109b03c854da06b1267bd9d59) ) - - ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* sound CPU */ - ROM_LOAD( "robokid.k7", 0x00000, 0x10000, CRC(f490a2e9) SHA1(861d1256c090ce3d1f45f95cc894affbbc3f1466) ) - - ROM_REGION( 0x80000, REGION_GFX1, ROMREGION_DISPOSE ) /* BG0 */ - ROM_LOAD( "robokid.19c", 0x00000, 0x10000, CRC(02220421) SHA1(f533e9c6cea1dccbb60e0528c470f3cb5e8fc44e) ) - ROM_LOAD( "robokid.20c", 0x10000, 0x10000, CRC(02d59bc2) SHA1(031acbb14145f9f4623de8868c6207fb9f8e8207) ) - ROM_LOAD( "robokid.17d", 0x20000, 0x10000, CRC(2fa29b99) SHA1(13dce7932e2e9c03a139a4293584838aa3d9f1c3) ) - ROM_LOAD( "robokid.18d", 0x30000, 0x10000, CRC(ae15ce02) SHA1(175e4eebdf12f1f373e01a4b1c933053ddd09abf) ) - ROM_LOAD( "robokid.19d", 0x40000, 0x10000, CRC(784b089e) SHA1(1ae3346b4afa3da9484ebc59c8a530cb95f7d277) ) - ROM_LOAD( "robokid.20d", 0x50000, 0x10000, CRC(b0b395ed) SHA1(31ec07634053793a701bbfd601b029f7da66e9d7) ) - ROM_LOAD( "robokid.19f", 0x60000, 0x10000, CRC(0f9071c6) SHA1(8bf0c35189eda98a9bc150788890e136870cb5b2) ) - - ROM_REGION( 0x80000, REGION_GFX2, ROMREGION_DISPOSE ) /* BG1 */ - ROM_LOAD( "robokid.12c", 0x00000, 0x10000, CRC(0ab45f94) SHA1(d8274263068d998c89a1b247dde7f814037cc15b) ) - ROM_LOAD( "robokid.14c", 0x10000, 0x10000, CRC(029bbd4a) SHA1(8e078cdafe608fc6cde827be85c5267ade4ecca6) ) - ROM_LOAD( "robokid.15c", 0x20000, 0x10000, CRC(7de67ebb) SHA1(2fe92e50e2894dd363e69b053db96bdb66a273eb) ) - ROM_LOAD( "robokid.16c", 0x30000, 0x10000, CRC(53c0e582) SHA1(763e6127532d022a707bf9ddf1a832413745f248) ) - ROM_LOAD( "robokid.17c", 0x40000, 0x10000, CRC(0cae5a1e) SHA1(a183a33516c81ea2c029b72ee6261c4519e095ab) ) - ROM_LOAD( "robokid.18c", 0x50000, 0x10000, CRC(56ac7c8a) SHA1(66ed5646a2e8563caeb4ff96fa7d34fde27e9899) ) - ROM_LOAD( "robokid.15d", 0x60000, 0x10000, CRC(cd632a4d) SHA1(a537d9ced45fdac490097e9162ac4d09a470be79) ) - ROM_LOAD( "robokid.16d", 0x70000, 0x10000, CRC(18d92b2b) SHA1(e6d20ea8f0fac8bd4824a3b279a0fd8a1d6c26f5) ) - - ROM_REGION( 0x80000, REGION_GFX3, ROMREGION_DISPOSE ) /* BG2 */ - ROM_LOAD( "robokid.12a", 0x00000, 0x10000, CRC(e64d1c10) SHA1(d1073c80c9788aba65410f88691747a37b2a9d4a) ) - ROM_LOAD( "robokid.14a", 0x10000, 0x10000, CRC(8f9371e4) SHA1(0ea06d62bf4673ebda49a849cead832a24e5b886) ) - ROM_LOAD( "robokid.15a", 0x20000, 0x10000, CRC(469204e7) SHA1(8c2e94635b2b304e7dfa2e6ad58ba526dcf02453) ) - ROM_LOAD( "robokid.16a", 0x30000, 0x10000, CRC(4e340815) SHA1(d204b830c5809f25f7dfa451bbcbeda8b81ced54) ) - ROM_LOAD( "robokid.17a", 0x40000, 0x10000, CRC(f0863106) SHA1(ff7e44d0aa5a07ec9a7eddef1a55181bd2e867b1) ) - ROM_LOAD( "robokid.18a", 0x50000, 0x10000, CRC(fdff7441) SHA1(843b2c92bbc6f7319568677d50cbd9b03475b34a) ) - - ROM_REGION( 0x40000, REGION_GFX4, ROMREGION_DISPOSE ) /* sprite */ - ROM_LOAD( "robokid.15f", 0x00000, 0x10000, CRC(ba61f5ab) SHA1(8433ddd55f0184cd5e8bb4a94a1c2336b2f8ff05) ) - ROM_LOAD( "robokid.16f", 0x10000, 0x10000, CRC(d9b399ce) SHA1(70755c9cae27187f183ae6d61bedb95c420756f4) ) - ROM_LOAD( "robokid.17f", 0x20000, 0x10000, CRC(afe432b9) SHA1(1ec7954ccf112eddf0ffcb8b5aec6cbc5cba7a7a) ) - ROM_LOAD( "robokid.18f", 0x30000, 0x10000, CRC(a0aa2a84) SHA1(4d46c169429cd285644336c7d47e393b33bd8770) ) - - ROM_REGION( 0x08000, REGION_GFX5, ROMREGION_DISPOSE ) /* FG */ - ROM_LOAD( "robokid.b9", 0x00000, 0x08000, CRC(fac59c3f) SHA1(1b202ad5c12982512129d9e097267dd31b984ae8) ) -ROM_END - -ROM_START( robokdj2 ) - ROM_REGION( 0x48000, REGION_CPU1, 0 ) /* main CPU */ - ROM_LOAD( "1_rom29.18j", 0x00000, 0x08000, CRC(969fb951) SHA1(aa32f0cb33ba2ccbb933dab5444a7e0dbbb84b3d) ) - ROM_CONTINUE( 0x10000, 0x08000 ) - ROM_LOAD( "2_rom30.18k", 0x18000, 0x10000, CRC(c0228b63) SHA1(8f7e3a29a35723abc8b10bf511fc8611e31a2961) ) - ROM_LOAD( "robokid3.15k", 0x28000, 0x10000, CRC(05295ec3) SHA1(33dd0853a2064cb4301cfbdc7856def81f6e1223) ) - ROM_LOAD( "robokid4.12k", 0x38000, 0x10000, CRC(3bc3977f) SHA1(da394e12d197b0e109b03c854da06b1267bd9d59) ) - ROM_COPY( REGION_CPU1 , 0x10000, 0x8000, 0x4000 ) /* to avoid crash */ - - ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* sound CPU */ - ROM_LOAD( "robokid.k7", 0x00000, 0x10000, CRC(f490a2e9) SHA1(861d1256c090ce3d1f45f95cc894affbbc3f1466) ) - - ROM_REGION( 0x80000, REGION_GFX1, ROMREGION_DISPOSE ) /* BG0 */ - ROM_LOAD( "robokid.19c", 0x00000, 0x10000, CRC(02220421) SHA1(f533e9c6cea1dccbb60e0528c470f3cb5e8fc44e) ) - ROM_LOAD( "robokid.20c", 0x10000, 0x10000, CRC(02d59bc2) SHA1(031acbb14145f9f4623de8868c6207fb9f8e8207) ) - ROM_LOAD( "robokid.17d", 0x20000, 0x10000, CRC(2fa29b99) SHA1(13dce7932e2e9c03a139a4293584838aa3d9f1c3) ) - ROM_LOAD( "robokid.18d", 0x30000, 0x10000, CRC(ae15ce02) SHA1(175e4eebdf12f1f373e01a4b1c933053ddd09abf) ) - ROM_LOAD( "robokid.19d", 0x40000, 0x10000, CRC(784b089e) SHA1(1ae3346b4afa3da9484ebc59c8a530cb95f7d277) ) - ROM_LOAD( "robokid.20d", 0x50000, 0x10000, CRC(b0b395ed) SHA1(31ec07634053793a701bbfd601b029f7da66e9d7) ) - ROM_LOAD( "robokid.19f", 0x60000, 0x10000, CRC(0f9071c6) SHA1(8bf0c35189eda98a9bc150788890e136870cb5b2) ) - - ROM_REGION( 0x80000, REGION_GFX2, ROMREGION_DISPOSE ) /* BG1 */ - ROM_LOAD( "robokid.12c", 0x00000, 0x10000, CRC(0ab45f94) SHA1(d8274263068d998c89a1b247dde7f814037cc15b) ) - ROM_LOAD( "robokid.14c", 0x10000, 0x10000, CRC(029bbd4a) SHA1(8e078cdafe608fc6cde827be85c5267ade4ecca6) ) - ROM_LOAD( "robokid.15c", 0x20000, 0x10000, CRC(7de67ebb) SHA1(2fe92e50e2894dd363e69b053db96bdb66a273eb) ) - ROM_LOAD( "robokid.16c", 0x30000, 0x10000, CRC(53c0e582) SHA1(763e6127532d022a707bf9ddf1a832413745f248) ) - ROM_LOAD( "robokid.17c", 0x40000, 0x10000, CRC(0cae5a1e) SHA1(a183a33516c81ea2c029b72ee6261c4519e095ab) ) - ROM_LOAD( "robokid.18c", 0x50000, 0x10000, CRC(56ac7c8a) SHA1(66ed5646a2e8563caeb4ff96fa7d34fde27e9899) ) - ROM_LOAD( "robokid.15d", 0x60000, 0x10000, CRC(cd632a4d) SHA1(a537d9ced45fdac490097e9162ac4d09a470be79) ) - ROM_LOAD( "robokid.16d", 0x70000, 0x10000, CRC(18d92b2b) SHA1(e6d20ea8f0fac8bd4824a3b279a0fd8a1d6c26f5) ) - - ROM_REGION( 0x80000, REGION_GFX3, ROMREGION_DISPOSE ) /* BG2 */ - ROM_LOAD( "robokid.12a", 0x00000, 0x10000, CRC(e64d1c10) SHA1(d1073c80c9788aba65410f88691747a37b2a9d4a) ) - ROM_LOAD( "robokid.14a", 0x10000, 0x10000, CRC(8f9371e4) SHA1(0ea06d62bf4673ebda49a849cead832a24e5b886) ) - ROM_LOAD( "robokid.15a", 0x20000, 0x10000, CRC(469204e7) SHA1(8c2e94635b2b304e7dfa2e6ad58ba526dcf02453) ) - ROM_LOAD( "robokid.16a", 0x30000, 0x10000, CRC(4e340815) SHA1(d204b830c5809f25f7dfa451bbcbeda8b81ced54) ) - ROM_LOAD( "robokid.17a", 0x40000, 0x10000, CRC(f0863106) SHA1(ff7e44d0aa5a07ec9a7eddef1a55181bd2e867b1) ) - ROM_LOAD( "robokid.18a", 0x50000, 0x10000, CRC(fdff7441) SHA1(843b2c92bbc6f7319568677d50cbd9b03475b34a) ) - - ROM_REGION( 0x40000, REGION_GFX4, ROMREGION_DISPOSE ) /* sprite */ - ROM_LOAD( "robokid.15f", 0x00000, 0x10000, CRC(ba61f5ab) SHA1(8433ddd55f0184cd5e8bb4a94a1c2336b2f8ff05) ) - ROM_LOAD( "robokid.16f", 0x10000, 0x10000, CRC(d9b399ce) SHA1(70755c9cae27187f183ae6d61bedb95c420756f4) ) - ROM_LOAD( "robokid.17f", 0x20000, 0x10000, CRC(afe432b9) SHA1(1ec7954ccf112eddf0ffcb8b5aec6cbc5cba7a7a) ) - ROM_LOAD( "robokid.18f", 0x30000, 0x10000, CRC(a0aa2a84) SHA1(4d46c169429cd285644336c7d47e393b33bd8770) ) - - ROM_REGION( 0x08000, REGION_GFX5, ROMREGION_DISPOSE ) /* FG */ - ROM_LOAD( "robokid.b9", 0x00000, 0x08000, CRC(fac59c3f) SHA1(1b202ad5c12982512129d9e097267dd31b984ae8) ) -ROM_END - - -/* ( YEAR NAME PARENT MACHINE INPUT INIT MONITOR COMPANY FULLNAME FLAGS ) */ -GAME( 1988, robokid, 0, robokid, robokid, 0, ROT0, "UPL", "Atomic Robo-kid", GAME_NO_COCKTAIL ) -GAME( 1988, robokidj, robokid, robokid, robokidj,0, ROT0, "UPL", "Atomic Robo-kid (Japan, Set 1)", GAME_NO_COCKTAIL ) -GAME( 1988, robokdj2, robokid, robokid, robokidj,0, ROT0, "UPL", "Atomic Robo-kid (Japan, Set 2)", GAME_NO_COCKTAIL ) -GAME( 1989, omegaf, 0, omegaf, omegaf, omegaf, ROT270, "UPL", "Omega Fighter", GAME_NO_COCKTAIL ) -GAME( 1989, omegafs, omegaf, omegaf, omegaf, omegaf, ROT270, "UPL", "Omega Fighter Special", GAME_NO_COCKTAIL ) diff --git a/src/mame/includes/ninjakd2.h b/src/mame/includes/ninjakd2.h new file mode 100644 index 00000000000..71ca2307d04 --- /dev/null +++ b/src/mame/includes/ninjakd2.h @@ -0,0 +1,29 @@ +extern WRITE8_HANDLER( ninjakd2_bgvideoram_w ); +extern WRITE8_HANDLER( ninjakd2_fgvideoram_w ); +extern WRITE8_HANDLER( ninjakd2_bg_ctrl_w ); +extern WRITE8_HANDLER( ninjakd2_sprite_overdraw_w ); + +extern READ8_HANDLER( robokid_bg0_videoram_r ); +extern READ8_HANDLER( robokid_bg1_videoram_r ); +extern READ8_HANDLER( robokid_bg2_videoram_r ); +extern WRITE8_HANDLER( robokid_bg0_videoram_w ); +extern WRITE8_HANDLER( robokid_bg1_videoram_w ); +extern WRITE8_HANDLER( robokid_bg2_videoram_w ); +extern WRITE8_HANDLER( robokid_bg0_ctrl_w ); +extern WRITE8_HANDLER( robokid_bg1_ctrl_w ); +extern WRITE8_HANDLER( robokid_bg2_ctrl_w ); +extern WRITE8_HANDLER( robokid_bg0_bank_w ); +extern WRITE8_HANDLER( robokid_bg1_bank_w ); +extern WRITE8_HANDLER( robokid_bg2_bank_w ); + +extern VIDEO_START( ninjakd2 ); +extern VIDEO_START( mnight ); +extern VIDEO_START( robokid ); +extern VIDEO_START( omegaf ); +extern VIDEO_UPDATE( ninjakd2 ); +extern VIDEO_UPDATE( robokid ); +extern VIDEO_UPDATE( omegaf ); +extern VIDEO_EOF( ninjakd2 ); + +extern UINT8* ninjakd2_bg_videoram; +extern UINT8* ninjakd2_fg_videoram; diff --git a/src/mame/mame.mak b/src/mame/mame.mak index 1a85b4807d0..e6d2ebd38db 100644 --- a/src/mame/mame.mak +++ b/src/mame/mame.mak @@ -1434,12 +1434,10 @@ $(MAMEOBJ)/univers.a: \ $(DRIVERS)/superdq.o $(MAMEOBJ)/upl.a: \ - $(DRIVERS)/mnight.o $(VIDEO)/mnight.o \ $(DRIVERS)/mouser.o $(VIDEO)/mouser.o \ $(DRIVERS)/ninjakid.o $(VIDEO)/ninjakid.o \ $(DRIVERS)/ninjakd2.o $(VIDEO)/ninjakd2.o \ $(DRIVERS)/nova2001.o $(VIDEO)/nova2001.o \ - $(DRIVERS)/omegaf.o $(VIDEO)/omegaf.o \ $(DRIVERS)/pkunwar.o $(VIDEO)/pkunwar.o \ $(DRIVERS)/raiders5.o $(VIDEO)/raiders5.o \ $(DRIVERS)/xxmissio.o $(VIDEO)/xxmissio.o \ diff --git a/src/mame/mamedriv.c b/src/mame/mamedriv.c index 8268ae038bb..4122371dd22 100644 --- a/src/mame/mamedriv.c +++ b/src/mame/mamedriv.c @@ -5871,7 +5871,7 @@ BOMULEUL CHAJARA SEGA ST-V 1997/04/11 DRIVER( ninjak2b ) /* UPL-????? (c) 1987 */ DRIVER( rdaction ) /* UPL-87003?(c) 1987 + World Games license */ DRIVER( mnight ) /* UPL-????? (c) 1987 distributed by Kawakus */ - DRIVER( arkarea ) /* UPL-87007 (c) [1988?] */ + DRIVER( arkarea ) /* UPL-87007 (c) [1987] */ DRIVER( robokid ) /* UPL-88013 (c) 1988 */ DRIVER( robokidj ) /* UPL-88013 (c) 1988 */ DRIVER( robokdj2 ) /* UPL-88013 (c) 1988 */ diff --git a/src/mame/video/mnight.c b/src/mame/video/mnight.c deleted file mode 100644 index e4541d1e4b3..00000000000 --- a/src/mame/video/mnight.c +++ /dev/null @@ -1,206 +0,0 @@ -#include "driver.h" - -UINT8 *mnight_scrolly_ram; -UINT8 *mnight_scrollx_ram; -UINT8 *mnight_bgenable_ram; -UINT8 *mnight_spoverdraw_ram; -UINT8 *mnight_background_videoram; -size_t mnight_backgroundram_size; -UINT8 *mnight_foreground_videoram; -size_t mnight_foregroundram_size; - -static mame_bitmap *bitmap_bg; -static mame_bitmap *bitmap_sp; - -static UINT8 *bg_dirtybuffer; -static int bg_enable = 1; -static int sp_overdraw = 0; - -static void mnight_mark_background_dirty(void) -{ - /* set 1024 bytes allocated in VIDEO_START( mnight ) to 'true' */ - memset(bg_dirtybuffer,1,1024); -} - -VIDEO_START( mnight ) -{ - bg_dirtybuffer = auto_malloc(1024); - - bitmap_bg = auto_bitmap_alloc (machine->screen[0].width*2,machine->screen[0].height*2,machine->screen[0].format); - bitmap_sp = auto_bitmap_alloc (machine->screen[0].width,machine->screen[0].height,machine->screen[0].format); - - mnight_mark_background_dirty() ; - - state_save_register_func_postload(mnight_mark_background_dirty) ; -} - - -WRITE8_HANDLER( mnight_bgvideoram_w ) -{ - if (mnight_background_videoram[offset] != data) - { - bg_dirtybuffer[offset >> 1] = 1; - mnight_background_videoram[offset] = data; - } -} - -WRITE8_HANDLER( mnight_fgvideoram_w ) -{ - if (mnight_foreground_videoram[offset] != data) - mnight_foreground_videoram[offset] = data; -} - -WRITE8_HANDLER( mnight_background_enable_w ) -{ - if (bg_enable!=data) - { - mnight_bgenable_ram[offset] = data; - bg_enable = data; - if (bg_enable) - memset(bg_dirtybuffer, 1, mnight_backgroundram_size / 2); - else - fillbitmap(bitmap_bg, Machine->pens[0],0); - } -} - -WRITE8_HANDLER( mnight_sprite_overdraw_w ) -{ - if (sp_overdraw != (data&1)) - { - mnight_spoverdraw_ram[offset] = data; - fillbitmap(bitmap_sp,15,&Machine->screen[0].visarea); - sp_overdraw = data & 1; - } -} - -static void draw_foreground(running_machine *machine, mame_bitmap *bitmap, const rectangle *cliprect) -{ - int offs; - - /* Draw the foreground text */ - - for (offs = 0 ;offs < mnight_foregroundram_size / 2; offs++) - { - int sx,sy,tile,palette,flipx,flipy,lo,hi; - - if (mnight_foreground_videoram[offs*2] | mnight_foreground_videoram[offs*2+1]) - { - sx = (offs % 32) << 3; - sy = (offs >> 5) << 3; - - lo = mnight_foreground_videoram[offs*2]; - hi = mnight_foreground_videoram[offs*2+1]; - tile = ((hi & 0xc0) << 2) | lo; - flipx = hi & 0x10; - flipy = hi & 0x20; - palette = hi & 0x0f; - - drawgfx(bitmap,machine->gfx[3], - tile, - palette, - flipx,flipy, - sx,sy, - cliprect,TRANSPARENCY_PEN, 15); - } - - } -} - - -static void draw_background(running_machine *machine, mame_bitmap *bitmap, const rectangle *cliprect) -{ - int offs; - - /* for every character in the Video RAM, check if it has been modified */ - /* since last time and update it accordingly. */ - - for (offs = 0 ;offs < mnight_backgroundram_size / 2; offs++) - { - int sx,sy,tile,palette,flipy,lo,hi; - - if (bg_dirtybuffer[offs]) - { - sx = (offs % 32) << 4; - sy = (offs >> 5) << 4; - - bg_dirtybuffer[offs] = 0; - - lo = mnight_background_videoram[offs*2]; - hi = mnight_background_videoram[offs*2+1]; - tile = ((hi & 0x10) << 6) | ((hi & 0xc0) << 2) | lo; - flipy = hi & 0x20; - palette = hi & 0x0f; - drawgfx(bitmap,machine->gfx[0], - tile, - palette, - 0,flipy, - sx,sy, - cliprect,TRANSPARENCY_NONE,0); - } - - } -} - - -static void draw_sprites(running_machine *machine, mame_bitmap *bitmap, const rectangle *cliprect) -{ - int offs; - - for (offs = 11 ;offs < spriteram_size; offs+=16) - { - int sx,sy,tile,palette,flipx,flipy,big; - - if (spriteram[offs+2] & 2) - { - sx = spriteram[offs+1]; - sy = spriteram[offs]; - if (spriteram[offs+2] & 1) sx-=256; - tile = spriteram[offs+3]+((spriteram[offs+2] & 0xc0)<<2) + ((spriteram[offs+2] & 0x08)<<7); - big = spriteram[offs+2] & 4; - if (big) tile /= 4; - flipx = spriteram[offs+2] & 0x10; - flipy = spriteram[offs+2] & 0x20; - palette = spriteram[offs+4] & 0x0f; - drawgfx(bitmap,machine->gfx[(big)?2:1], - tile, - palette, - flipx,flipy, - sx,sy, - cliprect, - TRANSPARENCY_PEN, 15); - - /* kludge to clear shots */ - if (((spriteram[offs+2]==2) || (spriteram[offs+2]==0x12)) && (((tile>=0xd0) && (tile<=0xd5)) || ((tile>=0x20) && (tile<=0x25)))) - spriteram[offs+2]=0; - } - } -} - - -VIDEO_UPDATE( mnight ) -{ - int scrollx,scrolly; - - - if (bg_enable) - draw_background(machine, bitmap_bg, 0); - - scrollx = -((mnight_scrollx_ram[0]+mnight_scrollx_ram[1]*256) & 0x1FF); - scrolly = -((mnight_scrolly_ram[0]+mnight_scrolly_ram[1]*256) & 0x1FF); - - if (sp_overdraw) /* overdraw sprite mode */ - { - copyscrollbitmap(bitmap,bitmap_bg,1,&scrollx,1,&scrolly,cliprect,TRANSPARENCY_NONE,0); - draw_sprites(machine, bitmap_sp, 0); - draw_foreground(machine, bitmap_sp, 0); - copybitmap(bitmap,bitmap_sp,0,0,0,0,cliprect,TRANSPARENCY_PEN, 15); - } - else /* normal sprite mode */ - { - copyscrollbitmap(bitmap,bitmap_bg,1,&scrollx,1,&scrolly,cliprect,TRANSPARENCY_NONE,0); - draw_sprites(machine, bitmap, cliprect); - draw_foreground(machine, bitmap, cliprect); - } - - return 0; -} diff --git a/src/mame/video/ninjakd2.c b/src/mame/video/ninjakd2.c index 469dc76334a..15fa0131dac 100644 --- a/src/mame/video/ninjakd2.c +++ b/src/mame/video/ninjakd2.c @@ -1,36 +1,199 @@ #include "driver.h" +#include "ninjakd2.h" -UINT8 *ninjakd2_bg_videoram, *ninjakd2_fg_videoram; +UINT8* ninjakd2_bg_videoram; +UINT8* ninjakd2_fg_videoram; -static UINT8 ninjakd2_bg_enable = 1, sprite_overdraw_enabled = 0; -static UINT16 ninjakd2_scrollx, ninjakd2_scrolly; -static tilemap *fg_tilemap, *bg_tilemap; -static mame_bitmap *bitmap_sp; /* for sprite overdraw */ +static int sprite_overdraw_enabled; +static int next_sprite_overdraw_enabled; +static mame_bitmap *sp_bitmap; +// in robokid and omegaf big sprites are laid out differently in ROM +static int robokid_sprites; + +static tilemap* fg_tilemap; +static tilemap* bg_tilemap; +static tilemap* bg0_tilemap; +static tilemap* bg1_tilemap; +static tilemap* bg2_tilemap; + +static int bank_mask = 1; +static int robokid_bg0_bank = 0; +static int robokid_bg1_bank = 0; +static int robokid_bg2_bank = 0; +static UINT8* robokid_bg0_videoram; +static UINT8* robokid_bg1_videoram; +static UINT8* robokid_bg2_videoram; -static TILE_GET_INFO( get_bg_tile_info ) -{ - int code = ((ninjakd2_bg_videoram[tile_index*2 + 1] & 0xc0) << 2) | ninjakd2_bg_videoram[tile_index*2]; - int color = ninjakd2_bg_videoram[tile_index*2 + 1] & 0xf; - SET_TILE_INFO(0, code, color, TILE_FLIPYX((ninjakd2_bg_videoram[tile_index*2 + 1] & 0x30) >> 4)); -} static TILE_GET_INFO( get_fg_tile_info ) { - int code = ((ninjakd2_fg_videoram[tile_index*2 + 1] & 0xc0) << 2) | ninjakd2_fg_videoram[tile_index*2]; - int color = ninjakd2_fg_videoram[tile_index*2 + 1] & 0xf; - SET_TILE_INFO(2, code, color, TILE_FLIPYX((ninjakd2_fg_videoram[tile_index*2 + 1] & 0x30) >> 4)); + int const lo = ninjakd2_fg_videoram[(tile_index << 1)]; + int const hi = ninjakd2_fg_videoram[(tile_index << 1) | 1]; + int const tile = ((hi & 0xc0) << 2) | lo; + int const flipyx = (hi & 0x30) >> 4; + int const color = hi & 0x0f; + + SET_TILE_INFO( + 0, + tile, + color, + TILE_FLIPYX(flipyx)); +} + +static TILE_GET_INFO( ninjakd2_get_bg_tile_info ) +{ + int const lo = ninjakd2_bg_videoram[(tile_index << 1)]; + int const hi = ninjakd2_bg_videoram[(tile_index << 1) | 1]; + int const tile = ((hi & 0xc0) << 2) | lo; + int const flipyx = (hi & 0x30) >> 4; + int const color = hi & 0x0f; + + SET_TILE_INFO( + 2, + tile, + color, + TILE_FLIPYX(flipyx)); +} + +static TILE_GET_INFO( mnight_get_bg_tile_info ) +{ + int const lo = ninjakd2_bg_videoram[(tile_index << 1)]; + int const hi = ninjakd2_bg_videoram[(tile_index << 1) | 1]; + int const tile = ((hi & 0x10) << 6) | ((hi & 0xc0) << 2) | lo; + int const flipy = (hi & 0x20) >> 5; + int const color = hi & 0x0f; + + SET_TILE_INFO( + 2, + tile, + color, + flipy ? TILE_FLIPY : 0); +} + +static TILEMAP_MAPPER( robokid_bg_scan ) +{ + /* logical (col,row) -> memory offset */ + return (col & 0x0f) | ((row & 0x1f) << 4) | ((col & 0x10) << 5); +} + +static TILEMAP_MAPPER( omegaf_bg_scan ) +{ + /* logical (col,row) -> memory offset */ + return (col & 0x0f) | ((row & 0x1f) << 4) | ((col & 0x70) << 5); +} + +void robokid_get_bg_tile_info(running_machine* const machine, tile_data* const tileinfo, tilemap_memory_index const tile_index, int const gfxnum, const UINT8* const videoram) +{ + int const lo = videoram[(tile_index << 1)]; + int const hi = videoram[(tile_index << 1) | 1]; + int const tile = ((hi & 0x10) << 7) | ((hi & 0x20) << 5) | ((hi & 0xc0) << 2) | lo; + int const color = hi & 0x0f; + + SET_TILE_INFO( + gfxnum, + tile, + color, + 0); +} + +static TILE_GET_INFO( robokid_get_bg0_tile_info ) +{ + robokid_get_bg_tile_info(machine, tileinfo, tile_index, 2, robokid_bg0_videoram); +} + +static TILE_GET_INFO( robokid_get_bg1_tile_info ) +{ + robokid_get_bg_tile_info(machine, tileinfo, tile_index, 3, robokid_bg1_videoram); +} + +static TILE_GET_INFO( robokid_get_bg2_tile_info ) +{ + robokid_get_bg_tile_info(machine, tileinfo, tile_index, 4, robokid_bg2_videoram); +} + + + +static void videoram_alloc(const running_machine* const machine, int const size) +{ + if (size) + { + /* create video ram */ + robokid_bg0_videoram = auto_malloc(size); + memset(robokid_bg0_videoram, 0x00, size); + + robokid_bg1_videoram = auto_malloc(size); + memset(robokid_bg1_videoram, 0x00, size); + + robokid_bg2_videoram = auto_malloc(size); + memset(robokid_bg2_videoram, 0x00, size); + } + + sp_bitmap = auto_bitmap_alloc (machine->screen[0].width, machine->screen[0].height, machine->screen[0].format); } VIDEO_START( ninjakd2 ) { - bg_tilemap = tilemap_create(get_bg_tile_info, tilemap_scan_rows, TILEMAP_TYPE_PEN, 16, 16, 32, 32); - fg_tilemap = tilemap_create(get_fg_tile_info, tilemap_scan_rows, TILEMAP_TYPE_PEN, 8, 8, 32, 32); + videoram_alloc(machine, 0); + + fg_tilemap = tilemap_create( get_fg_tile_info, tilemap_scan_rows, TILEMAP_TYPE_PEN, 8, 8, 32, 32); + bg_tilemap = tilemap_create(ninjakd2_get_bg_tile_info, tilemap_scan_rows, TILEMAP_TYPE_PEN, 16, 16, 32, 32); tilemap_set_transparent_pen(fg_tilemap, 15); - bitmap_sp = auto_bitmap_alloc (machine->screen[0].width, machine->screen[0].height, machine->screen[0].format); + robokid_sprites = 0; } +VIDEO_START( mnight ) +{ + videoram_alloc(machine, 0); + + fg_tilemap = tilemap_create( get_fg_tile_info, tilemap_scan_rows, TILEMAP_TYPE_PEN, 8, 8, 32, 32); + bg_tilemap = tilemap_create(mnight_get_bg_tile_info, tilemap_scan_rows, TILEMAP_TYPE_PEN, 16, 16, 32, 32); + + tilemap_set_transparent_pen(fg_tilemap, 15); + + robokid_sprites = 0; +} + +VIDEO_START( robokid ) +{ + bank_mask = 1; + + videoram_alloc(machine, 0x0800); + + fg_tilemap = tilemap_create( get_fg_tile_info, tilemap_scan_rows, TILEMAP_TYPE_PEN, 8, 8, 32, 32); + bg0_tilemap = tilemap_create(robokid_get_bg0_tile_info, robokid_bg_scan, TILEMAP_TYPE_PEN, 16, 16, 32, 32); + bg1_tilemap = tilemap_create(robokid_get_bg1_tile_info, robokid_bg_scan, TILEMAP_TYPE_PEN, 16, 16, 32, 32); + bg2_tilemap = tilemap_create(robokid_get_bg2_tile_info, robokid_bg_scan, TILEMAP_TYPE_PEN, 16, 16, 32, 32); + + tilemap_set_transparent_pen(fg_tilemap, 15); + tilemap_set_transparent_pen(bg1_tilemap, 15); + tilemap_set_transparent_pen(bg2_tilemap, 15); + + robokid_sprites = 1; +} + +VIDEO_START( omegaf ) +{ + bank_mask = 7; + + videoram_alloc(machine, 0x2000); + + fg_tilemap = tilemap_create( get_fg_tile_info, tilemap_scan_rows, TILEMAP_TYPE_PEN, 8, 8, 32, 32); + bg0_tilemap = tilemap_create(robokid_get_bg0_tile_info, omegaf_bg_scan, TILEMAP_TYPE_PEN, 16, 16, 128, 32); + bg1_tilemap = tilemap_create(robokid_get_bg1_tile_info, omegaf_bg_scan, TILEMAP_TYPE_PEN, 16, 16, 128, 32); + bg2_tilemap = tilemap_create(robokid_get_bg2_tile_info, omegaf_bg_scan, TILEMAP_TYPE_PEN, 16, 16, 128, 32); + + tilemap_set_transparent_pen(fg_tilemap, 15); + tilemap_set_transparent_pen(bg0_tilemap, 15); + tilemap_set_transparent_pen(bg1_tilemap, 15); + tilemap_set_transparent_pen(bg2_tilemap, 15); + + robokid_sprites = 1; +} + + + WRITE8_HANDLER( ninjakd2_bgvideoram_w ) { ninjakd2_bg_videoram[offset] = data; @@ -43,116 +206,293 @@ WRITE8_HANDLER( ninjakd2_fgvideoram_w ) tilemap_mark_tile_dirty(fg_tilemap, offset >> 1); } -WRITE8_HANDLER( ninjakd2_scrollx_w ) + + +WRITE8_HANDLER( robokid_bg0_bank_w ) { - if(offset) - ninjakd2_scrollx = ((ninjakd2_scrollx & 0x0ff) | data*256) & 0x1ff; - else - ninjakd2_scrollx = ((ninjakd2_scrollx & 0x100) | data) & 0x1ff; + robokid_bg0_bank = data & bank_mask; } -WRITE8_HANDLER( ninjakd2_scrolly_w ) +WRITE8_HANDLER( robokid_bg1_bank_w ) { - if(offset) - ninjakd2_scrolly = ((ninjakd2_scrolly & 0x0ff) | data*256) & 0x1ff; - else - ninjakd2_scrolly = ((ninjakd2_scrolly & 0x100) | data) & 0x1ff; + robokid_bg1_bank = data & bank_mask; } -WRITE8_HANDLER( ninjakd2_background_enable_w ) +WRITE8_HANDLER( robokid_bg2_bank_w ) { - ninjakd2_bg_enable = data & 1; + robokid_bg2_bank = data & bank_mask; } +READ8_HANDLER( robokid_bg0_videoram_r ) +{ + return robokid_bg0_videoram[(robokid_bg0_bank << 10) | offset]; +} + +READ8_HANDLER( robokid_bg1_videoram_r ) +{ + return robokid_bg1_videoram[(robokid_bg1_bank << 10) | offset]; +} + +READ8_HANDLER( robokid_bg2_videoram_r ) +{ + return robokid_bg2_videoram[(robokid_bg2_bank << 10) | offset]; +} + +WRITE8_HANDLER( robokid_bg0_videoram_w ) +{ + int const address = (robokid_bg0_bank << 10 ) | offset; + + robokid_bg0_videoram[address] = data; + tilemap_mark_tile_dirty(bg0_tilemap, address >> 1); +} + +WRITE8_HANDLER( robokid_bg1_videoram_w ) +{ + int const address = (robokid_bg1_bank << 10 ) | offset; + + robokid_bg1_videoram[address] = data; + tilemap_mark_tile_dirty(bg1_tilemap, address >> 1); +} + +WRITE8_HANDLER( robokid_bg2_videoram_w ) +{ + int const address = (robokid_bg2_bank << 10 ) | offset; + + robokid_bg2_videoram[address] = data; + tilemap_mark_tile_dirty(bg2_tilemap, address >> 1); +} + + + +void bg_ctrl(int offset, int data, tilemap* tilemap) +{ + int scrollx = tilemap_get_scrollx(tilemap, 0); + int scrolly = tilemap_get_scrolly(tilemap, 0); + + switch (offset) + { + case 0: scrollx = ((scrollx & 0x100) | data); break; + case 1: scrollx = ((scrollx & 0x0ff) | (data << 8)); break; + case 2: scrolly = ((scrolly & 0x100) | data); break; + case 3: scrolly = ((scrolly & 0x0ff) | (data << 8)); break; + case 4: tilemap_set_enable(tilemap, data & 1); break; + } + + tilemap_set_scrollx(tilemap, 0, scrollx); + tilemap_set_scrolly(tilemap, 0, scrolly); +} + +WRITE8_HANDLER( ninjakd2_bg_ctrl_w ) +{ + bg_ctrl(offset, data, bg_tilemap); +} + +WRITE8_HANDLER( robokid_bg0_ctrl_w ) +{ + bg_ctrl(offset, data, bg0_tilemap); +} + +WRITE8_HANDLER( robokid_bg1_ctrl_w ) +{ + bg_ctrl(offset, data, bg1_tilemap); +} + +WRITE8_HANDLER( robokid_bg2_ctrl_w ) +{ + bg_ctrl(offset, data, bg2_tilemap); +} + + + WRITE8_HANDLER( ninjakd2_sprite_overdraw_w ) { - sprite_overdraw_enabled = data & 1; - - if(sprite_overdraw_enabled) - fillbitmap(bitmap_sp, 15, &Machine->screen[0].visarea); + next_sprite_overdraw_enabled = data & 1; } -static void draw_sprites(running_machine *machine, mame_bitmap *bitmap, const rectangle *cliprect) + +static void draw_sprites(running_machine* const machine, mame_bitmap* const bitmap, const rectangle* const cliprect) { - int offs; + const gfx_element* const gfx = machine->gfx[1]; + int const big_xshift = robokid_sprites ? 1 : 0; + int const big_yshift = robokid_sprites ? 0 : 1; - /* Draw the sprites */ + UINT8* sprptr = &spriteram[11]; + int sprites_drawn = 0; - for (offs = 11 ;offs < spriteram_size; offs+=16) + // the sprite generator draws exactly 96 16x16 sprites per frame. When big + // (32x32) sprites are drawn, this counts for 4 sprites drawn, so the sprite + // list is reduced accordingly (i.e. three slots at the end of the list will + // be ignored). Note that a disabled sprite, even if it is not draw, still + // counts as one sprite drawn. + // This is proven by Mutant Night, which doesn't work correctly (leaves shots + // on screen) if we don't take this into account. + + for (;;) { - int sx,sy,tile,color,flipx,flipy; - - if (spriteram[offs+2] & 2) + if (sprptr[2] & 0x02) { - sx = spriteram[offs+1]; - sy = spriteram[offs]; - if (spriteram[offs+2] & 1) sx-=256; - tile = spriteram[offs+3]+((spriteram[offs+2] & 0xc0)<<2); - flipx = spriteram[offs+2] & 0x10; - flipy = spriteram[offs+2] & 0x20; - color = spriteram[offs+4] & 0x0f; + int sx = sprptr[1] - ((sprptr[2] & 0x01) << 8); + int sy = sprptr[0]; + // Ninja Kid II doesn't use the topmost bit (it has smaller ROMs) so it might not be connected on the board + int code = sprptr[3] + ((sprptr[2] & 0xc0) << 2) + ((sprptr[2] & 0x08) << 7); + int flipx = (sprptr[2] & 0x10) >> 4; + int flipy = (sprptr[2] & 0x20) >> 5; + int const color = sprptr[4] & 0x0f; + // Ninja Kid II doesn't use the 'big' feature so it might not be available on the board + int const big = (sprptr[2] & 0x04) >> 2; + int x,y; - if(sprite_overdraw_enabled && (color >= 0x0c && color <= 0x0e) ) + if (flip_screen) { - /* "static" sprites */ - drawgfx(bitmap_sp,machine->gfx[1], - tile, - color, - flipx,flipy, - sx,sy, - cliprect, - TRANSPARENCY_PEN, 15); + sx = 240 - 16*big - sx; + sy = 240 - 16*big - sy; + flipx ^= 1; + flipy ^= 1; } - else + + if (big) { - drawgfx(bitmap,machine->gfx[1], - tile, - color, - flipx,flipy, - sx,sy, - cliprect, - TRANSPARENCY_PEN, 15); + code &= ~3; + code ^= flipx << big_xshift; + code ^= flipy << big_yshift; + } - /* "normal" sprites with color = 0x0f clear the "static" ones */ - if(sprite_overdraw_enabled && color == 0x0f) + for (y = 0; y <= big; ++y) + { + for (x = 0; x <= big; ++x) { - int x,y,offset = 0; - const gfx_element *gfx = machine->gfx[1]; - UINT8 *srcgfx = gfx->gfxdata + tile * gfx->char_modulo; + int const tile = code ^ (x << big_xshift) ^ (y << big_yshift); - for(y = 0; y < gfx->height; y++) + // sprites with color = 0x0f erase pixels that use palettes C-F + if (sprite_overdraw_enabled && color == 0x0f) { - for(x = 0; x < gfx->width; x++) - { - if(srcgfx[offset] != 15) - { - *BITMAP_ADDR16(bitmap_sp, sy + y, sx + x) = 15; - } + const UINT8* const srcgfx = gfx->gfxdata + tile * gfx->char_modulo; + int xx,yy; - offset++; + for (yy = 0; yy < 16; ++yy) + { + for (xx = 0; xx < 16; ++xx) + { + UINT16* const ptr = BITMAP_ADDR16(bitmap, sy + yy, sx + xx); + int const offset = (flipx ? (16 - xx) : xx) + (flipy ? (16 - yy) : yy ) * gfx->line_modulo;; + + if (srcgfx[offset] != 15 && (*ptr & 0xf0) >= 0xc0) + { + *ptr = 15; + } + } } } + else + { + drawgfx(bitmap, gfx, + tile, + color, + flipx,flipy, + sx + 16*x, sy + 16*y, + cliprect, + TRANSPARENCY_PEN, 15); + } + + ++sprites_drawn; + if (sprites_drawn >= 96) + return; + } + } + } + else + { + ++sprites_drawn; + if (sprites_drawn >= 96) + return; + } + + sprptr += 16; + } +} + + +static void erase_sprites(running_machine* const machine, mame_bitmap* const bitmap, const rectangle* const cliprect) +{ + // if sprite overdraw is disabled, clear the sprite framebuffer + // if sprite overdraw is enabled, only clear palettes 0-B, and leave C-F on screen + if (!sprite_overdraw_enabled) + fillbitmap(sp_bitmap, 15, cliprect); + else + { + int x,y; + + for (y = 0; y < sp_bitmap->height; ++y) + { + for (x = 0; x < sp_bitmap->width; ++x) + { + UINT16* const ptr = BITMAP_ADDR16(sp_bitmap, y, x); + if ((*ptr & 0xf0) < 0xc0) + { + *ptr = 15; } } } } - - if(sprite_overdraw_enabled) - copybitmap(bitmap, bitmap_sp, 0, 0, 0, 0, cliprect, TRANSPARENCY_PEN, 15); } + VIDEO_UPDATE( ninjakd2 ) { - fillbitmap(bitmap, machine->pens[0],0); + fillbitmap(bitmap, machine->pens[0], cliprect); - tilemap_set_scrollx(bg_tilemap, 0, ninjakd2_scrollx); - tilemap_set_scrolly(bg_tilemap, 0, ninjakd2_scrolly); + tilemap_draw(bitmap, cliprect, bg_tilemap, 0, 0); - if (ninjakd2_bg_enable) - tilemap_draw(bitmap, cliprect, bg_tilemap, 0, 0); + copybitmap(bitmap, sp_bitmap, 0, 0, 0, 0, cliprect, TRANSPARENCY_PEN, 15); - draw_sprites(machine, bitmap, cliprect); tilemap_draw(bitmap, cliprect, fg_tilemap, 0, 0); return 0; } + +VIDEO_UPDATE( robokid ) +{ + fillbitmap(bitmap, machine->pens[0], cliprect); + + tilemap_draw(bitmap, cliprect, bg0_tilemap, 0, 0); + + tilemap_draw(bitmap, cliprect, bg1_tilemap, 0, 0); + + copybitmap(bitmap, sp_bitmap, 0, 0, 0, 0, cliprect, TRANSPARENCY_PEN, 15); + + tilemap_draw(bitmap, cliprect, bg2_tilemap, 0, 0); + + tilemap_draw(bitmap, cliprect, fg_tilemap, 0, 0); + + return 0; +} + +VIDEO_UPDATE( omegaf ) +{ + fillbitmap(bitmap, machine->pens[0], cliprect); + + tilemap_draw(bitmap, cliprect, bg0_tilemap, 0, 0); + + tilemap_draw(bitmap, cliprect, bg1_tilemap, 0, 0); + + tilemap_draw(bitmap, cliprect, bg2_tilemap, 0, 0); + + copybitmap(bitmap, sp_bitmap, 0, 0, 0, 0, cliprect, TRANSPARENCY_PEN, 15); + + tilemap_draw(bitmap, cliprect, fg_tilemap, 0, 0); + + return 0; +} + + +VIDEO_EOF( ninjakd2 ) +{ + erase_sprites(machine, sp_bitmap, 0); + + // we want to erase the sprites with the old setting and draw them with the + // new one. Not doing this causes a glitch in Ninja Kid II when taking the top + // exit from stage 3. + sprite_overdraw_enabled = next_sprite_overdraw_enabled; + + draw_sprites(machine, sp_bitmap, 0); +} diff --git a/src/mame/video/omegaf.c b/src/mame/video/omegaf.c deleted file mode 100644 index 094df65fcb5..00000000000 --- a/src/mame/video/omegaf.c +++ /dev/null @@ -1,615 +0,0 @@ -/*************************************************************************** - -Functions to emulate the video hardware of the machine. - -This hardware of the machine is similar with that of Mutant Night. -The difference between the two machines is that there are three BG -layers as against just one BG layer in Mutant Night. - - -Foreground RAM format ( Foreground RAM format is same as Mutant Night ) --------------------------------------------------------------- - +0 +1 - xxxx xxxx ---- ---- = bottom 8 bits of tile number - ---- ---- xx-- ---- = top 2 bits of tile number - ---- ---- --x- ---- = flip X - ---- ---- ---x ---- = flip Y - ---- ---- ---- xxxx = color ( 00h - 0fh ) - - -Background RAM format --------------------------------------------------------------- - +0 +1 - xxxx xxxx ---- ---- = bottom 8 bits of tile number - ---- ---- x--- ---- = bit 9 of tile number - ---- ---- -x-- ---- = bit 8 of tile number - ---- ---- --x- ---- = bit 10 of tile number - ---- ---- ---x ---- = bit 11 of tile number (the most top bit) - ---- ---- ---- xxxx = color ( 00h - 1fh ) - - -Sprite RAM format ( Sprite format is same as Mutant Night ) --------------------------------------------------------------- - +0 +1 +2 +3 +4 - xxxx xxxx ---- ---- ---- ---- ---- ---- ---- ---- = sprite Y position - ---- ---- xxxx xxxx ---- ---- ---- ---- ---- ---- = bottom 8 bits of sprite X position - ---- ---- ---- ---- xx-- ---- ---- ---- ---- ---- = middle 2 bits of sprite number - ---- ---- ---- ---- --x- ---- ---- ---- ---- ---- = flip X - ---- ---- ---- ---- ---x ---- ---- ---- ---- ---- = flip Y - ---- ---- ---- ---- ---- x--- ---- ---- ---- ---- = top bit of sprite number - ---- ---- ---- ---- ---- -x-- ---- ---- ---- ---- = 0:normal size (16x16) 1:big size (32x32) - ---- ---- ---- ---- ---- --x- ---- ---- ---- ---- = sprite on / off - ---- ---- ---- ---- ---- ---x ---- ---- ---- ---- = top bit of sprite X position - ---- ---- ---- ---- ---- ---- xxxx xxxx ---- ---- = bottom 8 bits of sprite number - ---- ---- ---- ---- ---- ---- ---- ---- xxxx xxxx = color - - -Scroll RAM format (Omega Fighter) --------------------------------------------------------------- - +0 +1 - X ???? -xxx xxxx xxxx = scroll X (0 - 0x3ff) - Y ???? ---x xxxx xxxx = scroll Y (0 - 0x1ff) - -Scroll RAM format (Atomic Robokid) --------------------------------------------------------------- - +0 +1 - X ???? ---x xxxx xxxx = scroll X (0 - 0x1ff) - Y ???? ---x xxxx xxxx = scroll Y (0 - 0x1ff) - - -Real screen resolution and virtual one --------------------------------------------------------------- - Real Virtual -Omega Fighter 256x192(H) 2048x512 -Atomic Robokid 256x192(H) 512x512 - - -***************************************************************************/ - -#include "driver.h" - - - -/************************************************************************** - Variables -**************************************************************************/ - -UINT8 *omegaf_fg_videoram; -static UINT8 *omegaf_bg0_videoram; -static UINT8 *omegaf_bg1_videoram; -static UINT8 *omegaf_bg2_videoram; -//size_t omegaf_fgvideoram_size; - -static int omegaf_bg0_bank = 0; -static int omegaf_bg1_bank = 0; -static int omegaf_bg2_bank = 0; - -UINT8 *omegaf_bg0_scroll_x; -UINT8 *omegaf_bg1_scroll_x; -UINT8 *omegaf_bg2_scroll_x; -UINT8 *omegaf_bg0_scroll_y; -UINT8 *omegaf_bg1_scroll_y; -UINT8 *omegaf_bg2_scroll_y; - -static tilemap *fg_tilemap; -static tilemap *bg0_tilemap; -static tilemap *bg1_tilemap; -static tilemap *bg2_tilemap; - -static int bg0_enabled = 1; -static int bg1_enabled = 1; -static int bg2_enabled = 1; - -static mame_bitmap *bitmap_sp; /* for sprite overdraw */ -static int sprite_overdraw_enabled = 0; - -static int scrollx_mask = 0x07ff; -static int bank_mask = 1; - - -/*************************************************************************** - Callbacks for the tilemap code -***************************************************************************/ - -static TILE_GET_INFO( get_bg0_tile_info ) -{ - int color, tile, hi, lo; - - int attrib = ( (tile_index & 0x00f) | ( (tile_index & 0x070) << 5 ) | - ( (tile_index & 0xf80) >> 3 ) ) << 1; - lo = omegaf_bg0_videoram[ attrib ]; - hi = omegaf_bg0_videoram[ attrib | 1 ]; - color = hi & 0x0f; - tile = ( ((hi & 0x80) << 2) | ((hi & 0x40) << 2) | - ((hi & 0x20) << 5) | ((hi & 0x10) << 7) ) | lo; - SET_TILE_INFO( - 0, - tile, - color, - 0); - tileinfo->category = 0; -} - -static TILE_GET_INFO( get_bg1_tile_info ) -{ - int color, tile, hi, lo; - - int attrib = ( (tile_index & 0x00f) | ( (tile_index & 0x070) << 5 ) | - ( (tile_index & 0xf80) >> 3 ) ) << 1; - lo = omegaf_bg1_videoram[ attrib ]; - hi = omegaf_bg1_videoram[ attrib | 1 ]; - color = hi & 0x0f; - tile = ( ((hi & 0x80) << 2) | ((hi & 0x40) << 2) | - ((hi & 0x20) << 5) | ((hi & 0x10) << 7) ) | lo; - SET_TILE_INFO( - 1, - tile, - color, - 0); - tileinfo->category = 0; -} - -static TILE_GET_INFO( get_bg2_tile_info ) -{ - int color, tile, hi, lo; - - int attrib = ( (tile_index & 0x00f) | ( (tile_index & 0x070) << 5 ) | - ( (tile_index & 0xf80) >> 3 ) ) << 1; - lo = omegaf_bg2_videoram[ attrib ]; - hi = omegaf_bg2_videoram[ attrib | 1 ]; - color = hi & 0x0f; - tile = ( ((hi & 0x80) << 2) | ((hi & 0x40) << 2) | - ((hi & 0x20) << 5) | ((hi & 0x10) << 7) ) | lo; - SET_TILE_INFO( - 2, - tile, - color, - 0); - tileinfo->category = 0; -} - -static TILE_GET_INFO( robokid_get_bg0_tile_info ) -{ - int color, tile, hi, lo; - - int attrib = ( (tile_index & 0x00f) | ( (tile_index & 0x010) << 5 ) | - ( (tile_index & 0x3e0) >> 1 ) ) << 1; - lo = omegaf_bg0_videoram[ attrib ]; - hi = omegaf_bg0_videoram[ attrib | 1 ]; - color = hi & 0x0f; - tile = ( ((hi & 0x80) << 2) | ((hi & 0x40) << 2) | - ((hi & 0x20) << 5) | ((hi & 0x10) << 7) ) | lo; - SET_TILE_INFO( - 0, - tile, - color, - 0); - tileinfo->category = 0; -} - -static TILE_GET_INFO( robokid_get_bg1_tile_info ) -{ - int color, tile, hi, lo; - - int attrib = ( (tile_index & 0x00f) | ( (tile_index & 0x010) << 5 ) | - ( (tile_index & 0x3e0) >> 1 ) ) << 1; - lo = omegaf_bg1_videoram[ attrib ]; - hi = omegaf_bg1_videoram[ attrib | 1 ]; - color = hi & 0x0f; - tile = ( ((hi & 0x80) << 2) | ((hi & 0x40) << 2) | - ((hi & 0x20) << 5) | ((hi & 0x10) << 7) ) | lo; - SET_TILE_INFO( - 1, - tile, - color, - 0); - tileinfo->category = 0; -} - -static TILE_GET_INFO( robokid_get_bg2_tile_info ) -{ - int color, tile, hi, lo; - - int attrib = ( (tile_index & 0x00f) | ( (tile_index & 0x010) << 5 ) | - ( (tile_index & 0x3e0) >> 1 ) ) << 1; - lo = omegaf_bg2_videoram[ attrib ]; - hi = omegaf_bg2_videoram[ attrib | 1 ]; - color = hi & 0x0f; - tile = ( ((hi & 0x80) << 2) | ((hi & 0x40) << 2) | - ((hi & 0x20) << 5) | ((hi & 0x10) << 7) ) | lo; - SET_TILE_INFO( - 2, - tile, - color, - 0); - tileinfo->category = 0; -} - -static TILE_GET_INFO( get_fg_tile_info ) -{ - int color, tile, hi, lo; - - lo = omegaf_fg_videoram[ tile_index << 1 ]; - hi = omegaf_fg_videoram[ (tile_index << 1) + 1 ]; - color = hi & 0x0f; - tile = ( ((hi & 0x80) << 2) | ((hi & 0x40) << 2) | - ((hi & 0x20) << 5) | ((hi & 0x10) << 7) ) | lo; - SET_TILE_INFO( - 5, - tile, - color, - 0); - tileinfo->category = 0; -} - - -/*************************************************************************** - Initialize and destroy video hardware emulation -***************************************************************************/ - -static void videoram_alloc(running_machine *machine, int size) -{ - /* create video ram */ - omegaf_bg0_videoram = auto_malloc(size); - memset( omegaf_bg0_videoram, 0x00, size ); - - omegaf_bg1_videoram = auto_malloc(size); - memset( omegaf_bg1_videoram, 0x00, size ); - - omegaf_bg2_videoram = auto_malloc(size); - memset( omegaf_bg2_videoram, 0x00, size ); - - bitmap_sp = auto_bitmap_alloc(machine->screen[0].width, machine->screen[0].height, machine->screen[0].format); -} - -VIDEO_START( omegaf ) -{ - scrollx_mask = 0x07ff; - bank_mask = 7; - - videoram_alloc(machine, 0x2000); - - /* Info Offset Type w h col row */ - fg_tilemap = tilemap_create(get_fg_tile_info, tilemap_scan_rows, TILEMAP_TYPE_PEN, 8, 8, 32, 32); - bg0_tilemap = tilemap_create(get_bg0_tile_info, tilemap_scan_rows, TILEMAP_TYPE_PEN, 16, 16, 128, 32); - bg1_tilemap = tilemap_create(get_bg1_tile_info, tilemap_scan_rows, TILEMAP_TYPE_PEN, 16, 16, 128, 32); - bg2_tilemap = tilemap_create(get_bg2_tile_info, tilemap_scan_rows, TILEMAP_TYPE_PEN, 16, 16, 128, 32); - - tilemap_set_transparent_pen( fg_tilemap, 15 ); - tilemap_set_transparent_pen( bg0_tilemap, 15 ); - tilemap_set_transparent_pen( bg1_tilemap, 15 ); - tilemap_set_transparent_pen( bg2_tilemap, 15 ); -} - -VIDEO_START( robokid ) -{ - scrollx_mask = 0x01ff; - bank_mask = 1; - - videoram_alloc(machine, 0x0800); - - /* Info Offset Type w h col row */ - fg_tilemap = tilemap_create( get_fg_tile_info, tilemap_scan_rows, TILEMAP_TYPE_PEN, 8, 8, 32, 32); - bg0_tilemap = tilemap_create(robokid_get_bg0_tile_info, tilemap_scan_rows, TILEMAP_TYPE_PEN, 16, 16, 32, 32); - bg1_tilemap = tilemap_create(robokid_get_bg1_tile_info, tilemap_scan_rows, TILEMAP_TYPE_PEN, 16, 16, 32, 32); - bg2_tilemap = tilemap_create(robokid_get_bg2_tile_info, tilemap_scan_rows, TILEMAP_TYPE_PEN, 16, 16, 32, 32); - - tilemap_set_transparent_pen( fg_tilemap, 15 ); - tilemap_set_transparent_pen( bg1_tilemap, 15 ); - tilemap_set_transparent_pen( bg2_tilemap, 15 ); -} - - -/*************************************************************************** - Memory handler -***************************************************************************/ - -WRITE8_HANDLER( omegaf_bg0_bank_w ) -{ - omegaf_bg0_bank = data & bank_mask; -} - -WRITE8_HANDLER( omegaf_bg1_bank_w ) -{ - omegaf_bg1_bank = data & bank_mask; -} - -WRITE8_HANDLER( omegaf_bg2_bank_w ) -{ - omegaf_bg2_bank = data & bank_mask; -} - -READ8_HANDLER( omegaf_bg0_videoram_r ) -{ - return omegaf_bg0_videoram[ (omegaf_bg0_bank << 10) | offset ]; -} - -READ8_HANDLER( omegaf_bg1_videoram_r ) -{ - return omegaf_bg1_videoram[ (omegaf_bg1_bank << 10) | offset ]; -} - -READ8_HANDLER( omegaf_bg2_videoram_r ) -{ - return omegaf_bg2_videoram[ (omegaf_bg2_bank << 10) | offset ]; -} - -WRITE8_HANDLER( omegaf_bg0_videoram_w ) -{ - int address; - int tile_index; - - address = (omegaf_bg0_bank << 10 ) | offset; - omegaf_bg0_videoram[ address ] = data; - tile_index = ( (address & 0x001e) >> 1 ) | ( (address & 0x1c00) >> 6 ) | - ( (address & 0x03e0) << 2 ); - tilemap_mark_tile_dirty( bg0_tilemap, tile_index ); -} - -WRITE8_HANDLER( omegaf_bg1_videoram_w ) -{ - int address; - int tile_index; - - address = (omegaf_bg1_bank << 10 ) | offset; - omegaf_bg1_videoram[ address ] = data; - tile_index = ( (address & 0x001e) >> 1 ) | ( (address & 0x1c00) >> 6 ) | - ( (address & 0x03e0) << 2 ); - tilemap_mark_tile_dirty( bg1_tilemap, tile_index ); -} - -WRITE8_HANDLER( omegaf_bg2_videoram_w ) -{ - int address; - int tile_index; - - address = (omegaf_bg2_bank << 10 ) | offset; - omegaf_bg2_videoram[ address ] = data; - tile_index = ( (address & 0x001e) >> 1 ) | ( (address & 0x1c00) >> 6 ) | - ( (address & 0x03e0) << 2 ); - tilemap_mark_tile_dirty( bg2_tilemap, tile_index ); -} - -WRITE8_HANDLER( robokid_bg0_videoram_w ) -{ - int address; - int tile_index; - - address = (omegaf_bg0_bank << 10 ) | offset; - omegaf_bg0_videoram[ address ] = data; - tile_index = ( (address & 0x001e) >> 1 ) | ( (address & 0x0400) >> 6 ) | - (address & 0x03e0); - tilemap_mark_tile_dirty( bg0_tilemap, tile_index ); -} - -WRITE8_HANDLER( robokid_bg1_videoram_w ) -{ - int address; - int tile_index; - - address = (omegaf_bg1_bank << 10 ) | offset; - omegaf_bg1_videoram[ address ] = data; - tile_index = ( (address & 0x001e) >> 1 ) | ( (address & 0x0400) >> 6 ) | - (address & 0x03e0); - tilemap_mark_tile_dirty( bg1_tilemap, tile_index ); -} - -WRITE8_HANDLER( robokid_bg2_videoram_w ) -{ - int address; - int tile_index; - - address = (omegaf_bg2_bank << 10 ) | offset; - omegaf_bg2_videoram[ address ] = data; - tile_index = ( (address & 0x001e) >> 1 ) | ( (address & 0x0400) >> 6 ) | - (address & 0x03e0); - tilemap_mark_tile_dirty( bg2_tilemap, tile_index ); -} - -WRITE8_HANDLER( omegaf_bg0_scrollx_w ) -{ - int scrollx; - - omegaf_bg0_scroll_x[offset] = data; - - scrollx = (omegaf_bg0_scroll_x[1] << 8) | omegaf_bg0_scroll_x[0]; - scrollx &= scrollx_mask; - tilemap_set_scrollx( bg0_tilemap, 0, scrollx ); -} - -WRITE8_HANDLER( omegaf_bg0_scrolly_w ) -{ - int scrolly; - - omegaf_bg0_scroll_y[offset] = data; - - scrolly = (omegaf_bg0_scroll_y[1] << 8) | omegaf_bg0_scroll_y[0]; - scrolly &= 0x01ff; - tilemap_set_scrolly( bg0_tilemap, 0, scrolly ); -} - -WRITE8_HANDLER( omegaf_bg1_scrollx_w ) -{ - int scrollx; - - omegaf_bg1_scroll_x[offset] = data; - - scrollx = (omegaf_bg1_scroll_x[1] << 8) | omegaf_bg1_scroll_x[0]; - scrollx &= scrollx_mask; - tilemap_set_scrollx( bg1_tilemap, 0, scrollx ); -} - -WRITE8_HANDLER( omegaf_bg1_scrolly_w ) -{ - int scrolly; - - omegaf_bg1_scroll_y[offset] = data; - - scrolly = (omegaf_bg1_scroll_y[1] << 8) | omegaf_bg1_scroll_y[0]; - scrolly &= 0x01ff; - tilemap_set_scrolly( bg1_tilemap, 0, scrolly ); -} - -WRITE8_HANDLER( omegaf_bg2_scrollx_w ) -{ - int scrollx; - - omegaf_bg2_scroll_x[offset] = data; - - scrollx = (omegaf_bg2_scroll_x[1] << 8) | omegaf_bg2_scroll_x[0]; - scrollx &= scrollx_mask; - tilemap_set_scrollx( bg2_tilemap, 0, scrollx ); -} - -WRITE8_HANDLER( omegaf_bg2_scrolly_w ) -{ - int scrolly; - - omegaf_bg2_scroll_y[offset] = data; - - scrolly = (omegaf_bg2_scroll_y[1] << 8) | omegaf_bg2_scroll_y[0]; - scrolly &= 0x01ff; - tilemap_set_scrolly( bg2_tilemap, 0, scrolly ); -} - -WRITE8_HANDLER( omegaf_fgvideoram_w ) -{ - omegaf_fg_videoram[offset] = data; - tilemap_mark_tile_dirty(fg_tilemap, offset >> 1); -} - -WRITE8_HANDLER( omegaf_bg0_enabled_w ) -{ - if (bg0_enabled != data) - bg0_enabled = data; -} - -WRITE8_HANDLER( omegaf_bg1_enabled_w ) -{ - if (bg1_enabled != data) - bg1_enabled = data; -} - -WRITE8_HANDLER( omegaf_bg2_enabled_w ) -{ - if (bg2_enabled != data) - bg2_enabled = data; -} - -WRITE8_HANDLER( omegaf_sprite_overdraw_w ) -{ - logerror( "sprite overdraw flag : %02x\n", data ); - if (sprite_overdraw_enabled != (data & 1)) - { - sprite_overdraw_enabled = data & 1; - fillbitmap(bitmap_sp, 15, &Machine->screen[0].visarea); - } -} - -WRITE8_HANDLER( omegaf_flipscreen_w ) -{ - flip_screen_set(data & 0x80); -} - -/*************************************************************************** - Screen refresh -***************************************************************************/ - -static void draw_sprites(running_machine *machine, mame_bitmap *bitmap,const rectangle *cliprect) -{ - int offs; - - /* Draw the sprites */ - for (offs = 11 ;offs < spriteram_size; offs += 16) - { - int sx, sy, tile, color, flipx, flipy, big; - - if (spriteram[offs + 2] & 2) - { - sx = spriteram[offs + 1]; - sy = spriteram[offs]; - if (spriteram[offs + 2] & 1) - sx -= 256; - tile = spriteram[offs + 3] | - ((spriteram[offs + 2] & 0xc0) << 2) | - ((spriteram[offs + 2] & 0x08) << 7); - - big = spriteram[offs + 2] & 4; - if (big) - tile >>= 2; - flipx = spriteram[offs + 2] & 0x10; - flipy = spriteram[offs + 2] & 0x20; - color = spriteram[offs + 4] & 0x0f; - - if(sprite_overdraw_enabled && (color & 8)) - { - /* "static" sprites */ - drawgfx(bitmap_sp,machine->gfx[(big) ? 4 : 3], - tile, - color, - flipx,flipy, - sx,sy, - 0, - TRANSPARENCY_PEN, 15); - } - else - { - drawgfx(bitmap,machine->gfx[(big) ? 4 : 3], - tile, - color, - flipx,flipy, - sx,sy, - cliprect, - TRANSPARENCY_PEN, 15); - - /* all the "normal" sprites clear the "static" ones */ - if(sprite_overdraw_enabled) - { - int x,y,offset = 0; - const gfx_element *gfx = machine->gfx[(big) ? 4 : 3]; - UINT8 *srcgfx = gfx->gfxdata + tile * gfx->char_modulo; - - for(y = 0; y < gfx->height; y++) - { - for(x = 0; x < gfx->width; x++) - { - if(srcgfx[offset] != 15) - { - *BITMAP_ADDR16(bitmap_sp, sy + y, sx + x) = 15; - } - - offset++; - } - } - } - } - } - } - - if(sprite_overdraw_enabled) - copybitmap(bitmap, bitmap_sp, 0, 0, 0, 0, cliprect, TRANSPARENCY_PEN, 15); -} - -VIDEO_UPDATE( omegaf ) -{ - fillbitmap(bitmap,machine->pens[0],cliprect); - - if (bg0_enabled) tilemap_draw(bitmap,cliprect, bg0_tilemap, 0, 0); - if (bg1_enabled) tilemap_draw(bitmap,cliprect, bg1_tilemap, 0, 0); - if (bg2_enabled) tilemap_draw(bitmap,cliprect, bg2_tilemap, 0, 0); - draw_sprites(machine,bitmap,cliprect); - tilemap_draw(bitmap,cliprect, fg_tilemap, 0, 0); - return 0; -} - -VIDEO_UPDATE( robokid ) -{ - fillbitmap(bitmap,machine->pens[0],cliprect); - - if (bg0_enabled) tilemap_draw(bitmap,cliprect, bg0_tilemap, 0, 0); - if (bg1_enabled) tilemap_draw(bitmap,cliprect, bg1_tilemap, 0, 0); - draw_sprites(machine,bitmap,cliprect); - if (bg2_enabled) tilemap_draw(bitmap,cliprect, bg2_tilemap, 0, 0); - tilemap_draw(bitmap,cliprect, fg_tilemap, 0, 0); - return 0; -}