From 5b7fbe265f8a4040d4cf7ff93ed5f73effec747a Mon Sep 17 00:00:00 2001 From: David Haywood Date: Sun, 24 Jan 2016 21:08:43 +0000 Subject: [PATCH] new WORKING Last Four (09:12 16/01/2001 [f205v] --- src/mame/arcade.lst | 1 + src/mame/drivers/galaxi.cpp | 73 +++++++++++++++++++++++++++++++------ 2 files changed, 62 insertions(+), 12 deletions(-) diff --git a/src/mame/arcade.lst b/src/mame/arcade.lst index d946d8c9301..a301b8d92b9 100644 --- a/src/mame/arcade.lst +++ b/src/mame/arcade.lst @@ -11205,6 +11205,7 @@ sgsafari // (c) 1996 New Impeuropex Corp. musicsrt // (c) 1995 ABM Games galaxi // (c) 2000 BRL S.R.L. Bologna magjoker // (c) 2000 BRL S.R.L. Bologna +lastfour // (c) 2001 BRL S.R.L. Bologna dwarfd // (c) 198? Electro-Sports dwarfda // (c) 198? Electro-Sports quarterh // (c) 1983 Electro-Sports diff --git a/src/mame/drivers/galaxi.cpp b/src/mame/drivers/galaxi.cpp index 86ab434002a..679bd63b40d 100644 --- a/src/mame/drivers/galaxi.cpp +++ b/src/mame/drivers/galaxi.cpp @@ -57,10 +57,13 @@ public: m_bg3_ram(*this, "bg3_ram"), m_bg4_ram(*this, "bg4_ram"), m_fg_ram(*this, "fg_ram"), + m_bg3_xscroll(8), + m_bg3_yscroll(0), m_maincpu(*this, "maincpu"), m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), - m_palette(*this, "palette") { } + m_palette(*this, "palette") + { } /* memory pointers */ required_shared_ptr m_bg1_ram; @@ -77,10 +80,14 @@ public: tilemap_t *m_bg4_tmap; tilemap_t *m_fg_tmap; + UINT16 m_bg3_xscroll; + UINT16 m_bg3_yscroll; + /* misc */ int m_hopper; int m_ticket; - UINT16 m_out[3]; + UINT16 m_out; + DECLARE_WRITE16_MEMBER(galaxi_bg1_w); DECLARE_WRITE16_MEMBER(galaxi_bg2_w); DECLARE_WRITE16_MEMBER(galaxi_bg3_w); @@ -187,12 +194,13 @@ void galaxi_state::video_start() m_bg4_tmap->set_transparent_pen(0); m_fg_tmap->set_transparent_pen(0); - - m_bg3_tmap->set_scrolldx(-8, 0); } UINT32 galaxi_state::screen_update_galaxi(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { + m_bg3_tmap->set_scrollx(m_bg3_xscroll); + m_bg3_tmap->set_scrolly(m_bg3_yscroll); + int layers_ctrl = -1; #ifdef MAME_DEBUG @@ -208,6 +216,7 @@ UINT32 galaxi_state::screen_update_galaxi(screen_device &screen, bitmap_ind16 &b } #endif + if (layers_ctrl & 1) m_bg1_tmap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); else bitmap.fill(m_palette->black_pen(), cliprect); if (layers_ctrl & 2) m_bg2_tmap->draw(screen, bitmap, cliprect, 0, 0); @@ -225,18 +234,18 @@ UINT32 galaxi_state::screen_update_galaxi(screen_device &screen, bitmap_ind16 &b void galaxi_state::show_out( ) { -// popmessage("%04x %04x %04x", m_out[0], m_out[1], m_out[2]); +// popmessage("%04x", m_out); } WRITE16_MEMBER(galaxi_state::galaxi_500000_w) { - COMBINE_DATA(&m_out[0]); + COMBINE_DATA(&m_bg3_yscroll); show_out(); } WRITE16_MEMBER(galaxi_state::galaxi_500002_w) { - COMBINE_DATA(&m_out[1]); + COMBINE_DATA(&m_bg3_xscroll); show_out(); } @@ -271,7 +280,7 @@ WRITE16_MEMBER(galaxi_state::galaxi_500004_w) machine().bookkeeping().coin_counter_w(0, data & 0x2000); // coins } - COMBINE_DATA(&m_out[2]); + COMBINE_DATA(&m_out); show_out(); } @@ -295,7 +304,32 @@ static ADDRESS_MAP_START( galaxi_map, AS_PROGRAM, 16, galaxi_state ) AM_RANGE(0x100c00, 0x100fff) AM_RAM_WRITE(galaxi_bg4_w) AM_SHARE("bg4_ram") AM_RANGE(0x101000, 0x101fff) AM_RAM_WRITE(galaxi_fg_w ) AM_SHARE("fg_ram") - AM_RANGE(0x102000, 0x1047ff) AM_READNOP // unknown + AM_RANGE(0x102000, 0x107fff) AM_READNOP // unknown + + AM_RANGE(0x300000, 0x3007ff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") + + AM_RANGE(0x500000, 0x500001) AM_READ_PORT("INPUTS") + AM_RANGE(0x500000, 0x500001) AM_WRITE(galaxi_500000_w) + AM_RANGE(0x500002, 0x500003) AM_WRITE(galaxi_500002_w) + AM_RANGE(0x500004, 0x500005) AM_WRITE(galaxi_500004_w) + + AM_RANGE(0x700000, 0x700001) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff) + + AM_RANGE(0x600000, 0x607fff) AM_RAM AM_SHARE("nvram") // 2x DS1230Y (non volatile SRAM) +ADDRESS_MAP_END + + +static ADDRESS_MAP_START( lastfour_map, AS_PROGRAM, 16, galaxi_state ) + AM_RANGE(0x000000, 0x03ffff) AM_ROM + + // bg3+4 / 1+2 seem to be swapped, order, palettes, scroll register etc. all suggest this + AM_RANGE(0x100000, 0x1003ff) AM_RAM_WRITE(galaxi_bg3_w) AM_SHARE("bg3_ram") + AM_RANGE(0x100400, 0x1007ff) AM_RAM_WRITE(galaxi_bg4_w) AM_SHARE("bg4_ram") + AM_RANGE(0x100800, 0x100bff) AM_RAM_WRITE(galaxi_bg1_w) AM_SHARE("bg1_ram") + AM_RANGE(0x100c00, 0x100fff) AM_RAM_WRITE(galaxi_bg2_w) AM_SHARE("bg2_ram") + + AM_RANGE(0x101000, 0x101fff) AM_RAM_WRITE(galaxi_fg_w ) AM_SHARE("fg_ram") + AM_RANGE(0x102000, 0x107fff) AM_READNOP // unknown AM_RANGE(0x300000, 0x3007ff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") @@ -401,9 +435,7 @@ void galaxi_state::machine_reset() { m_hopper = 0; m_ticket = 0; - m_out[0] = 0; - m_out[1] = 0; - m_out[2] = 0; + m_out = 0; } static MACHINE_CONFIG_START( galaxi, galaxi_state ) @@ -449,6 +481,10 @@ static MACHINE_CONFIG_DERIVED( magjoker, galaxi ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 4.0) MACHINE_CONFIG_END +static MACHINE_CONFIG_DERIVED( lastfour, galaxi ) + MCFG_CPU_MODIFY("maincpu") + MCFG_CPU_PROGRAM_MAP(lastfour_map) +MACHINE_CONFIG_END /*************************************************************************** ROMs Loading @@ -480,6 +516,18 @@ ROM_START( magjoker ) ROM_LOAD( "21.u38", 0x00000, 0x40000, CRC(199baf33) SHA1(006708d955481fe1ae44555d27896d18e1ff8440) ) ROM_END +ROM_START( lastfour ) + ROM_REGION( 0x40000, "maincpu", 0 ) + ROM_LOAD16_BYTE( "15.u48", 0x00000, 0x20000, CRC(9168e19c) SHA1(4a2f0d100e457bd33691ba084a0f0549e8bf0790) ) + ROM_LOAD16_BYTE( "14.u47", 0x00001, 0x20000, CRC(b10ce31a) SHA1(8d51ead24319ff775fc873957e6b4de748432a8d) ) + + ROM_REGION( 0x100000, "gfx1", 0 ) + ROM_LOAD16_BYTE( "13.u34", 0x00000, 0x80000, CRC(d595d4c4) SHA1(7fe8c9f36b03d763965abf325d1ff6d754342100) ) + ROM_LOAD16_BYTE( "12.u33", 0x00001, 0x80000, CRC(5ee5568b) SHA1(6384e5dfa24b5ad4e4419fa3bbffb4d552867465) ) + + ROM_REGION( 0x40000, "oki", 0 ) /* 4-bit ADPCM mono @ 6 kHz.*/ + ROM_LOAD( "21.u38", 0x00000, 0x20000, CRC(e48523dd) SHA1(47bc2e5c2164b93d685fa134397845e0ed7aaa5f) ) +ROM_END /*************************************************************************** Game Drivers @@ -488,3 +536,4 @@ ROM_END /* YEAR NAME PARENT MACHINE INPUT INIT ROT COMPANY FULLNAME FLAGS LAYOUT */ GAMEL( 2000, galaxi, 0, galaxi, galaxi, driver_device, 0, ROT0, "B.R.L.", "Galaxi (v2.0)", MACHINE_SUPPORTS_SAVE, layout_galaxi ) GAMEL( 2000, magjoker, 0, magjoker, magjoker, driver_device, 0, ROT0, "B.R.L.", "Magic Joker (v1.25.10.2000)", MACHINE_SUPPORTS_SAVE, layout_galaxi ) +GAMEL( 2001, lastfour, 0, lastfour, magjoker, driver_device, 0, ROT0, "B.R.L.", "Last Four (09:12 16/01/2001)",MACHINE_SUPPORTS_SAVE, layout_galaxi )