diff --git a/scripts/target/mame/arcade.lua b/scripts/target/mame/arcade.lua index ea8e8397f7e..0e8449b3f21 100644 --- a/scripts/target/mame/arcade.lua +++ b/scripts/target/mame/arcade.lua @@ -1252,6 +1252,7 @@ files { MAME_DIR .. "src/mame/drivers/ohmygod.cpp", MAME_DIR .. "src/mame/includes/ohmygod.h", MAME_DIR .. "src/mame/video/ohmygod.cpp", + MAME_DIR .. "src/mame/drivers/patapata.cpp", MAME_DIR .. "src/mame/drivers/powerins.cpp", MAME_DIR .. "src/mame/includes/powerins.h", MAME_DIR .. "src/mame/video/powerins.cpp", @@ -2931,7 +2932,6 @@ files { createMAMEProjects(_target, _subtarget, "nmk") files { - MAME_DIR .. "src/mame/drivers/acchi.cpp", MAME_DIR .. "src/mame/drivers/acommand.cpp", MAME_DIR .. "src/mame/drivers/cultures.cpp", MAME_DIR .. "src/mame/drivers/ddealer.cpp", diff --git a/src/mame/arcade.flt b/src/mame/arcade.flt index b6b27e9724e..7d6661e7054 100644 --- a/src/mame/arcade.flt +++ b/src/mame/arcade.flt @@ -16,7 +16,6 @@ 8080bw.cpp 88games.cpp a1supply.cpp -acchi.cpp ace.cpp acefruit.cpp aces1.cpp @@ -846,6 +845,7 @@ parodius.cpp pasha2.cpp pass.cpp pastelg.cpp +patapata.cpp pbaction.cpp pcat_dyn.cpp pcat_nit.cpp diff --git a/src/mame/drivers/acchi.cpp b/src/mame/drivers/patapata.cpp similarity index 80% rename from src/mame/drivers/acchi.cpp rename to src/mame/drivers/patapata.cpp index fc419bc30f4..19d04c9de00 100644 --- a/src/mame/drivers/acchi.cpp +++ b/src/mame/drivers/patapata.cpp @@ -25,10 +25,10 @@ maybe close to jalmah.cpp? #include "speaker.h" #include "machine/nmk112.h" -class acchi_state : public driver_device +class patapata_state : public driver_device { public: - acchi_state(const machine_config &mconfig, device_type type, const char *tag) + patapata_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_bg_videoram(*this, "bg_videoram"), m_fg_videoram(*this, "fg_videoram"), @@ -37,12 +37,25 @@ public: m_gfxdecode(*this, "gfxdecode") { } + DECLARE_WRITE16_MEMBER(bg_videoram_w); + DECLARE_WRITE16_MEMBER(fg_videoram_w); + DECLARE_WRITE8_MEMBER(flipscreen_w); + + TIMER_DEVICE_CALLBACK_MEMBER(scanline); + + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + +protected: + virtual void video_start() override; + +private: /* memory pointers */ required_shared_ptr m_bg_videoram; required_shared_ptr m_fg_videoram; required_shared_ptr m_vregs; - TIMER_DEVICE_CALLBACK_MEMBER(scanline); + required_device m_maincpu; + required_device m_gfxdecode; /* video-related */ TILEMAP_MAPPER_MEMBER(pagescan); @@ -50,42 +63,35 @@ public: tilemap_t *m_fg_tilemap; int m_fg_bank; - DECLARE_WRITE16_MEMBER(acchi_bg_videoram_w); - DECLARE_WRITE16_MEMBER(acchi_fg_videoram_w); - DECLARE_WRITE8_MEMBER(flipscreen_w); - TILE_GET_INFO_MEMBER(get_acchi_bg_tile_info); - TILE_GET_INFO_MEMBER(get_acchi_fg_tile_info); - virtual void video_start() override; - uint32_t screen_update_acchi(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - required_device m_maincpu; - required_device m_gfxdecode; + TILE_GET_INFO_MEMBER(get_bg_tile_info); + TILE_GET_INFO_MEMBER(get_fg_tile_info); }; -WRITE16_MEMBER(acchi_state::acchi_bg_videoram_w) +WRITE16_MEMBER(patapata_state::bg_videoram_w) { COMBINE_DATA(&m_bg_videoram[offset]); m_bg_tilemap->mark_tile_dirty(offset); } -TILE_GET_INFO_MEMBER(acchi_state::get_acchi_bg_tile_info) +TILE_GET_INFO_MEMBER(patapata_state::get_bg_tile_info) { int tileno = m_bg_videoram[tile_index]; int pal = tileno>>12; SET_TILE_INFO_MEMBER(0, tileno&0x1fff, pal, 0); } -WRITE16_MEMBER(acchi_state::acchi_fg_videoram_w) +WRITE16_MEMBER(patapata_state::fg_videoram_w) { COMBINE_DATA(&m_fg_videoram[offset]); m_fg_tilemap->mark_tile_dirty(offset); } -WRITE8_MEMBER(acchi_state::flipscreen_w) +WRITE8_MEMBER(patapata_state::flipscreen_w) { flip_screen_set(data & 0x01); } -TILE_GET_INFO_MEMBER(acchi_state::get_acchi_fg_tile_info) +TILE_GET_INFO_MEMBER(patapata_state::get_fg_tile_info) { int bank = m_fg_bank; @@ -95,41 +101,36 @@ TILE_GET_INFO_MEMBER(acchi_state::get_acchi_fg_tile_info) SET_TILE_INFO_MEMBER(1, (tileno&0x0fff)+(bank*0x1000), pal, 0); } -TILEMAP_MAPPER_MEMBER(acchi_state::pagescan) +TILEMAP_MAPPER_MEMBER(patapata_state::pagescan) { return (col &0xff) * (num_rows>>1) + (row & 0xf) + ((row & 0x10)<<8) + ((col & 0x300) << 5); // return (col &0xff) * (num_rows>>1) + (row & 0xf) + ((row & 0x10)<<8) + ((col & 0x100) << 5); // see comment with tilemap creation } - - - -void acchi_state::video_start() +void patapata_state::video_start() { - m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(acchi_state::get_acchi_bg_tile_info),this), tilemap_mapper_delegate(FUNC(acchi_state::pagescan),this), 16, 16, 1024,16*2); - m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(acchi_state::get_acchi_fg_tile_info),this), tilemap_mapper_delegate(FUNC(acchi_state::pagescan),this), 16, 16, 1024,16*2); + m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(patapata_state::get_bg_tile_info),this), tilemap_mapper_delegate(FUNC(patapata_state::pagescan),this), 16, 16, 1024,16*2); + m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(patapata_state::get_fg_tile_info),this), tilemap_mapper_delegate(FUNC(patapata_state::pagescan),this), 16, 16, 1024,16*2); // 2nd half of the ram seems unused, maybe it's actually a mirror meaning this would be the correct tilemap sizes -// m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(acchi_state::get_acchi_bg_tile_info),this), tilemap_mapper_delegate(FUNC(acchi_state::pagescan),this), 16, 16, 1024/2,16*2); -// m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(acchi_state::get_acchi_fg_tile_info),this), tilemap_mapper_delegate(FUNC(acchi_state::pagescan),this), 16, 16, 1024/2,16*2); +// m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(patapata_state::get_bg_tile_info),this), tilemap_mapper_delegate(FUNC(patapata_state::pagescan),this), 16, 16, 1024/2,16*2); +// m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(patapata_state::get_fg_tile_info),this), tilemap_mapper_delegate(FUNC(patapata_state::pagescan),this), 16, 16, 1024/2,16*2); m_fg_tilemap->set_transparent_pen(0xf); save_item(NAME(m_fg_bank)); } -uint32_t acchi_state::screen_update_acchi(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +uint32_t patapata_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { // vregs // 0/1 are fg scroll? 0x0ff0 , 0x07b0 is no scroll // 2/3 are bg scroll? // 4 is fg bank - int scrollx,scrolly; - - scrollx = (m_vregs[2]-0xff0)&0xfff; - scrolly = (m_vregs[3]-0x7b0)&0xfff; + int scrollx = (m_vregs[2]-0xff0)&0xfff; + int scrolly = (m_vregs[3]-0x7b0)&0xfff; if (scrolly&0x200) scrollx += 0x1000; scrolly&=0x1ff; @@ -175,33 +176,25 @@ also */ -static ADDRESS_MAP_START( acchi_map, AS_PROGRAM, 16, acchi_state ) +static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, patapata_state ) AM_RANGE(0x000000, 0x07ffff) AM_ROM AM_RANGE(0x100000, 0x100001) AM_READ_PORT("IN0") AM_RANGE(0x100002, 0x100003) AM_READ_PORT("IN1") AM_RANGE(0x100008, 0x100009) AM_READ_PORT("DSW1") AM_RANGE(0x10000a, 0x10000b) AM_READ_PORT("DSW2") - AM_RANGE(0x100014, 0x100015) AM_WRITE8(flipscreen_w, 0x00ff) - AM_RANGE(0x110000, 0x1103ff) AM_RAM AM_SHARE("videoregs") - AM_RANGE(0x120000, 0x1205ff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") - - AM_RANGE(0x130000, 0x13ffff) AM_RAM_WRITE(acchi_fg_videoram_w) AM_SHARE("fg_videoram") - AM_RANGE(0x140000, 0x14ffff) AM_RAM_WRITE(acchi_bg_videoram_w) AM_SHARE("bg_videoram") - + AM_RANGE(0x130000, 0x13ffff) AM_RAM_WRITE(fg_videoram_w) AM_SHARE("fg_videoram") + AM_RANGE(0x140000, 0x14ffff) AM_RAM_WRITE(bg_videoram_w) AM_SHARE("bg_videoram") AM_RANGE(0x150000, 0x150001) AM_DEVREADWRITE8("oki1", okim6295_device, read, write, 0x00ff) AM_RANGE(0x150010, 0x150011) AM_DEVREADWRITE8("oki2", okim6295_device, read, write, 0x00ff) - AM_RANGE(0x150020, 0x15002f) AM_DEVWRITE8("nmk112", nmk112_device, okibank_w, 0x00ff) - - AM_RANGE(0x180000, 0x18ffff) AM_RAM // mainram? ADDRESS_MAP_END -static INPUT_PORTS_START( acchi ) // inputs register in test mode but not in game mode? +static INPUT_PORTS_START( patapata ) PORT_START("IN0") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -234,7 +227,6 @@ static INPUT_PORTS_START( acchi ) // inputs register in test mode but not in gam PORT_DIPUNKNOWN_DIPLOC( 0x40, 0x40, "DSW1:2" ) PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "DSW1:1" ) - PORT_START("DSW2") PORT_DIPUNKNOWN_DIPLOC( 0x01, 0x01, "DSW2:8" ) PORT_DIPNAME( 0x02, 0x02, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("DSW2:7") @@ -274,32 +266,32 @@ static const gfx_layout tilelayout = 32*32 }; -static GFXDECODE_START( acchi ) +static GFXDECODE_START( patapata ) GFXDECODE_ENTRY( "tilesa", 0, tilelayout, 0x000, 16 ) GFXDECODE_ENTRY( "tilesb", 0, tilelayout, 0x100, 16 ) GFXDECODE_END -TIMER_DEVICE_CALLBACK_MEMBER(acchi_state::scanline) +TIMER_DEVICE_CALLBACK_MEMBER(patapata_state::scanline) { // reads inputs (half-frame interrupt like NMK16?) if (param==128) m_maincpu->set_input_line(1, HOLD_LINE); } -static MACHINE_CONFIG_START( acchi, acchi_state ) + static MACHINE_CONFIG_START( patapata, patapata_state ) MCFG_CPU_ADD("maincpu", M68000, XTAL_16MHz) // 16 MHz XTAL, 16 MHz CPU - MCFG_CPU_PROGRAM_MAP(acchi_map) - MCFG_CPU_VBLANK_INT_DRIVER("screen", acchi_state, irq4_line_hold) // 1 + 4 valid? (4 main VBL) - MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", acchi_state, scanline, "screen", 0, 1) + MCFG_CPU_PROGRAM_MAP(main_map) + MCFG_CPU_VBLANK_INT_DRIVER("screen", patapata_state, irq4_line_hold) // 1 + 4 valid? (4 main VBL) + MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", patapata_state, scanline, "screen", 0, 1) - MCFG_GFXDECODE_ADD("gfxdecode", "palette", acchi) + MCFG_GFXDECODE_ADD("gfxdecode", "palette", patapata) MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) MCFG_SCREEN_SIZE(64*8, 64*8) MCFG_SCREEN_VISIBLE_AREA(0*8, 60*8-1, 0*8, 44*8-1) - MCFG_SCREEN_UPDATE_DRIVER(acchi_state, screen_update_acchi) + MCFG_SCREEN_UPDATE_DRIVER(patapata_state, screen_update) MCFG_SCREEN_PALETTE("palette") MCFG_PALETTE_ADD("palette", 0x600/2) @@ -318,7 +310,7 @@ static MACHINE_CONFIG_START( acchi, acchi_state ) MCFG_NMK112_ROM1("oki2") MACHINE_CONFIG_END -ROM_START( acchi ) +ROM_START( patapata ) ROM_REGION( 0x80000, "maincpu", 0 ) /* 68000 code */ ROM_LOAD16_WORD_SWAP( "rw-93085-7.u132", 0x00000, 0x80000, CRC(f8084e30) SHA1(8ca19fb3d348affbcb89fb4fef0be4614edd14f7) ) @@ -345,5 +337,5 @@ ROM_START( acchi ) ROM_LOAD( "n82s135n.u137", 0x000, 0x100, CRC(cb90eedc) SHA1(6577cb1999a90b9209b150cbedde11de9ac30018) ) ROM_END -// supposedly an Atlus game, though there's no copyright on the title screen and PCB is NTC / NMK -GAME( 1993, acchi, 0, acchi, acchi, driver_device, 0, ROT0, "Atlus", "Acchi Muite Hoi", MACHINE_SUPPORTS_SAVE ) +// cabinet shows Atlus logo, though there's no copyright on the title screen and PCB is NTC / NMK +GAME( 1993, patapata, 0, patapata, patapata, driver_device, 0, ROT0, "Atlus", "Pata Pata Panic", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 53fe2feb43b..c404fa1ec92 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -290,9 +290,6 @@ ac1 // 1984 Amateurcomputer AC1 ac1_32 // 1984 Amateurcomputer AC1 (32 lines) ac1scch // 1984 Amateurcomputer AC1 SCCH -@source:acchi.cpp -acchi // 1993 NTC / NMK - @source:aceex.cpp aceex2814 @@ -29876,6 +29873,9 @@ galds // (c) 1985 pastelg // (c) 1985 threeds // (c) 1985 +@source:patapata.cpp +patapata // 1993 NTC / NMK / ATLUS + @source:patinho_feio.cpp patinho // 1972 Patinho Feio