summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/galpanic.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/galpanic.cpp')
-rw-r--r--src/mame/drivers/galpanic.cpp340
1 files changed, 0 insertions, 340 deletions
diff --git a/src/mame/drivers/galpanic.cpp b/src/mame/drivers/galpanic.cpp
deleted file mode 100644
index b3db0822216..00000000000
--- a/src/mame/drivers/galpanic.cpp
+++ /dev/null
@@ -1,340 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Nicola Salmoria
-/***************************************************************************
-
-Gals Panic 1990 Kaneko
-
-driver by Nicola Salmoria
-
-The version of Gals Panic in this driver is the one using the PANDORA chip
-for sprites, other boardsets use a different sprite chip, see expro02.cpp
-
-
-Notes about Gals Panic:
------------------------
-The current unprotected ROM set is strange because two ROMs overlap two others
-replacing the program.
-
-It's definitely a Kaneko boardset, but it could very well be they converted
-some other game to run Gals Panic, because there's some ROMs piggybacked
-on top of each other and some ROMs on a daughterboard plugged into smaller
-sized ROM sockets. It's not a pirate version. The piggybacked ROMs even have
-Kaneko stickers. The silkscreen on the board says PAMERA-04.
-
-
-
-
-Stephh's additional notes :
-
- - There seems to exist 3 versions of 'galpanic' (Japan, US and World),
- and we seem to have a World version according to the coinage.
- Version is stored at 0x03ffff.b :
- * 01 : Japan
- * 02 : US
- * 03 : World
- In the version we have, you can only have one type of coinage
- (there is no Dip Switch to change sort of "coin mode").
- - In Comad games, here is a possible explanation of why the "Tilt" button
- may hang the game and/or crash/exit MAME : if you look carefully at the
- code, you'll notice that you have a "rts" instruction WITHOUT restoring
- the registers saved by the "movem.l D0-D7/A0-A6, -(A7)" instruction.
- Then, a "rte" instruction is performed.
- - The "Demo Sounds" Dip Switch is told not to work and not to fit the
- manual, but it appears that 00 seems to be read from in the "trap $d"
- interruption. Is it because the addresses (0x53e830-0x53e84f) are also
- used for 'galpanic_bgvideoram' ?
-
- - I added the 'galpanica' romset which is in fact the same as 'galpanic',
- but with the PRG ROMS which aren't overwritten and simulated the CALC1
- MCU functions
- Here are a few notes about what I found :
- * This version is also a World version (0x03ffff.b = 03).
- * In this version, there is a "Coin Mode" Dip Switch, but no
- "Character Test" Dip Switch.
- * Area 0xe00000-0xe00014 is a "calculator" area. I've tried to
- simulate it (see machine/kaneko_hit.cpp) by comparing the code
- with the other set. I don't know if there are some other unmapped
- reads, but the game seems to run fine with what I've done.
- * When you press the "Tilt" button, the game enters in an endless
- loop, but this isn't a bug ! Check code beginning at 0x000e02 and
- ending at 0x000976 for more infos.
- -Expects watchdog to reset it- pjp
- * Sound hasn't been tested.
-
-
-
-***************************************************************************/
-
-#include "emu.h"
-#include "includes/galpanic.h"
-#include "includes/galpnipt.h"
-
-#include "cpu/m68000/m68000.h"
-#include "machine/watchdog.h"
-#include "sound/okim6295.h"
-#include "video/kan_pand.h"
-#include "machine/kaneko_hit.h"
-#include "speaker.h"
-
-
-void galpanic_state::machine_start()
-{
- membank("okibank")->configure_entries(0, 16, memregion("oki")->base(), 0x10000);
-}
-
-WRITE_LINE_MEMBER(galpanic_state::screen_vblank)
-{
- // rising edge
- if (state)
- {
- m_pandora->eof();
- }
-}
-
-TIMER_DEVICE_CALLBACK_MEMBER(galpanic_state::scanline)
-{
- int scanline = param;
-
- if(scanline == 224) // vblank-out irq
- m_maincpu->set_input_line(3, HOLD_LINE);
-
- /* Pandora "sprite end dma" irq? */
- if(scanline == 32)
- m_maincpu->set_input_line(5, HOLD_LINE);
-}
-
-
-
-
-WRITE16_MEMBER(galpanic_state::m6295_bankswitch_w)
-{
- if (ACCESSING_BITS_8_15)
- {
- membank("okibank")->set_entry((data >> 8) & 0x0f);
-
- // used before title screen
- m_pandora->set_clear_bitmap((data & 0x8000)>>15);
- }
-}
-
-
-
-WRITE16_MEMBER(galpanic_state::coin_w)
-{
- if (ACCESSING_BITS_8_15)
- {
- machine().bookkeeping().coin_counter_w(0, data & 0x100);
- machine().bookkeeping().coin_counter_w(1, data & 0x200);
-
- machine().bookkeeping().coin_lockout_w(0, ~data & 0x400);
- machine().bookkeeping().coin_lockout_w(1, ~data & 0x800);
- }
-}
-
-
-
-void galpanic_state::galpanic_map(address_map &map)
-{
- map(0x000000, 0x3fffff).rom();
- map(0x400001, 0x400001).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
- map(0x500000, 0x51ffff).ram().share("fgvideoram");
- map(0x520000, 0x53ffff).ram().w(FUNC(galpanic_state::bgvideoram_w)).share("bgvideoram"); /* + work RAM */
- map(0x600000, 0x6007ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); /* 1024 colors, but only 512 seem to be used */
- map(0x700000, 0x701fff).rw(m_pandora, FUNC(kaneko_pandora_device::spriteram_LSB_r), FUNC(kaneko_pandora_device::spriteram_LSB_w));
- map(0x702000, 0x704fff).ram();
- map(0x800000, 0x800001).portr("DSW1");
- map(0x800002, 0x800003).portr("DSW2");
- map(0x800004, 0x800005).portr("SYSTEM");
- map(0x900000, 0x900001).w(FUNC(galpanic_state::m6295_bankswitch_w));
- map(0xa00000, 0xa00001).w(FUNC(galpanic_state::coin_w)); /* coin counters */
- map(0xb00000, 0xb00001).nopw(); /* ??? */
- map(0xc00000, 0xc00001).nopw(); /* ??? */
- map(0xd00000, 0xd00001).nopw(); /* ??? */
-}
-
-void galpanic_state::galpanica_map(address_map &map)
-{
- galpanic_map(map);
- map(0xe00000, 0xe00015).rw("calc1_mcu", FUNC(kaneko_hit_device::kaneko_hit_r), FUNC(kaneko_hit_device::kaneko_hit_w));
-}
-
-void galpanic_state::galpanic_oki_map(address_map &map)
-{
- map(0x00000, 0x2ffff).rom();
- map(0x30000, 0x3ffff).bankr("okibank");
-}
-
-
-static INPUT_PORTS_START( galpanic )
- PORT_START("DSW1")
- PORT_DIPUNUSED_DIPLOC( 0x0001, 0x0001, "SW1:1" )
- PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:2") /* flip screen? - code at 0x000522 */
- PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_SERVICE_DIPLOC( 0x0004, IP_ACTIVE_LOW, "SW1:3" )
- PORT_DIPUNUSED_DIPLOC( 0x0008, 0x0008, "SW1:4" )
- COINAGE_WORLD
- GALS_PANIC_JOYSTICK_4WAY(1) /* "Shot2" is shown in "test mode" but not used by the game */
-
- PORT_START("DSW2")
- PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:1,2")
- PORT_DIPSETTING( 0x0002, DEF_STR( Easy ) )
- PORT_DIPSETTING( 0x0003, DEF_STR( Normal ) )
- PORT_DIPSETTING( 0x0001, DEF_STR( Hard ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) )
- PORT_DIPUNUSED_DIPLOC( 0x0004, 0x0004, "SW2:3" )
- PORT_DIPUNUSED_DIPLOC( 0x0008, 0x0008, "SW2:4" )
- PORT_DIPNAME( 0x0030, 0x0030, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:5,6")
- PORT_DIPSETTING( 0x0010, "2" )
- PORT_DIPSETTING( 0x0030, "3" )
- PORT_DIPSETTING( 0x0020, "4" )
- PORT_DIPSETTING( 0x0000, "5" )
- PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:7") /* demo sounds? - see notes */
- PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0080, 0x0080, "Character Test" ) PORT_DIPLOCATION("SW2:8")
- PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- GALS_PANIC_JOYSTICK_4WAY(2) /* "Shot2" is shown in "test mode" but not used by the game */
-
- SYSTEM_SERVICE
-INPUT_PORTS_END
-
-static INPUT_PORTS_START( galpanica )
- PORT_START("DSW1")
- COINAGE_TEST_LOC /* Unknown DSW switch 2 is flip screen? - code at 0x00060a */
- GALS_PANIC_JOYSTICK_4WAY(1)
-
- PORT_START("DSW2")
- DIFFICULTY_DEMO_SOUNDS
- GALS_PANIC_JOYSTICK_4WAY(2)
-
- SYSTEM_SERVICE
-INPUT_PORTS_END
-
-
-static GFXDECODE_START( gfx_galpanic )
- GFXDECODE_ENTRY( "gfx1", 0, gfx_8x8x4_row_2x2_group_packed_msb, 256, 16 )
-GFXDECODE_END
-
-
-void galpanic_state::galpanic(machine_config &config)
-{
- /* basic machine hardware */
- M68000(config, m_maincpu, XTAL(12'000'000)); /* verified on pcb */
- m_maincpu->set_addrmap(AS_PROGRAM, &galpanic_state::galpanic_map);
- TIMER(config, "scantimer").configure_scanline(FUNC(galpanic_state::scanline), "screen", 0, 1);
-
- WATCHDOG_TIMER(config, "watchdog");
-
- /* video hardware */
- SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
- m_screen->set_refresh_hz(60);
- m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0) /* frames per second, vblank duration */);
- m_screen->set_size(256, 256);
- m_screen->set_visarea(0, 256-1, 0, 224-1);
- m_screen->set_screen_update(FUNC(galpanic_state::screen_update));
- m_screen->screen_vblank().set(FUNC(galpanic_state::screen_vblank));
- m_screen->set_palette(m_palette);
-
- GFXDECODE(config, m_gfxdecode, m_palette, gfx_galpanic);
- // fg palette RAM, bit 0 seems to be a transparency flag for the front bitmap
- PALETTE(config, m_palette, FUNC(galpanic_state::galpanic_palette)).set_format(palette_device::GRBx_555, 1024 + 32768);
-
- KANEKO_PANDORA(config, m_pandora, 0);
- m_pandora->set_offsets(0, -16);
- m_pandora->set_gfxdecode_tag(m_gfxdecode);
-
- /* sound hardware */
- SPEAKER(config, "mono").front_center();
-
- okim6295_device &oki(OKIM6295(config, "oki", XTAL(12'000'000)/6, okim6295_device::PIN7_LOW)); /* verified on pcb */
- oki.set_addrmap(0, &galpanic_state::galpanic_oki_map);
- oki.add_route(ALL_OUTPUTS, "mono", 1.0);
-}
-
-
-void galpanic_state::galpanica(machine_config &config)
-{
- galpanic(config);
- m_maincpu->set_addrmap(AS_PROGRAM, &galpanic_state::galpanica_map);
-
- /* basic machine hardware */
- KANEKO_HIT(config, "calc1_mcu").set_type(0);
-
- /* arm watchdog */
- subdevice<watchdog_timer_device>("watchdog")->set_time(attotime::from_seconds(3)); /* a guess, and certainly wrong */
-}
-
-
-/***************************************************************************
-
- Game driver(s)
-
-***************************************************************************/
-
-ROM_START( galpanic ) /* PAMERA-04 PCB with the PAMERA-SUB daughter card and unpopulated CALC1 MCU socket */
- ROM_REGION( 0x400000, "maincpu", 0 ) /* 68000 code */
- ROM_LOAD16_BYTE( "pm110.4m2", 0x000000, 0x80000, CRC(ae6b17a8) SHA1(f3a625eef45cc85cdf9760f77ea7ce93387911f9) )
- ROM_LOAD16_BYTE( "pm109.4m1", 0x000001, 0x80000, CRC(b85d792d) SHA1(0ed78e15f6e58285ce6944200b023ada1e673b0e) )
- ROM_LOAD16_BYTE( "pm112.subic6", 0x000000, 0x20000, CRC(7b972b58) SHA1(a7f619fca665b15f4f004ae739f5776ee2d4d432) ) /* Located on the PAMERA-SUB daughter card */
- ROM_LOAD16_BYTE( "pm111.subic5", 0x000001, 0x20000, CRC(4eb7298d) SHA1(8858a40ffefbe4ecea7d5b70311c3775b7d987eb) ) /* Located on the PAMERA-SUB daughter card */
- ROM_LOAD16_BYTE( "pm004e.8", 0x100001, 0x80000, CRC(d3af52bc) SHA1(46be057106388578defecab1cdd1793ec76ebe92) )
- ROM_LOAD16_BYTE( "pm005e.7", 0x100000, 0x80000, CRC(d7ec650c) SHA1(6c2250c74381497154bf516e0cf1db6bb56bb446) )
- ROM_LOAD16_BYTE( "pm000e.15", 0x200001, 0x80000, CRC(5d220f3f) SHA1(7ff373e01027c8832712f7a2d732f8e49b875878) )
- ROM_LOAD16_BYTE( "pm001e.14", 0x200000, 0x80000, CRC(90433eb1) SHA1(8688a85747ad9ecac395d782f130baa64fb9d12b) )
- ROM_LOAD16_BYTE( "pm002e.17", 0x300001, 0x80000, CRC(713ee898) SHA1(c9f608a57fb90e5ee15eb76a74a7afcc406d5b4e) )
- ROM_LOAD16_BYTE( "pm003e.16", 0x300000, 0x80000, CRC(6bb060fd) SHA1(4fc3946866c5a55e8340b62b5ad9beae723ce0da) )
-
- ROM_REGION( 0x100000, "gfx1", 0 ) /* sprites */
- ROM_LOAD( "pm006e.67", 0x000000, 0x100000, CRC(57aec037) SHA1(e6ba095b6892d4dcd76ba3343a97dd98ae29dc24) )
-
- ROM_REGION( 0x100000, "oki", 0 ) /* OKIM6295 samples */
- /* 00000-2ffff is fixed, 30000-3ffff is bank switched from all the ROMs */
- ROM_LOAD( "pm008e.l", 0x00000, 0x80000, CRC(d9379ba8) SHA1(5ae7c743319b1a12f2b101a9f0f8fe0728ed1476) )
- ROM_LOAD( "pm007e.u", 0x80000, 0x80000, CRC(c7ed7950) SHA1(133258b058d3c562208d0d00b9fac71202647c32) )
-ROM_END
-
-ROM_START( galpanica ) /* PAMERA-04 PCB with the CALC1 MCU used */
- ROM_REGION( 0x400000, "maincpu", 0 ) /* 68000 code */
- ROM_LOAD16_BYTE( "pm110.4m2", 0x000000, 0x80000, CRC(ae6b17a8) SHA1(f3a625eef45cc85cdf9760f77ea7ce93387911f9) )
- ROM_LOAD16_BYTE( "pm109.4m1", 0x000001, 0x80000, CRC(b85d792d) SHA1(0ed78e15f6e58285ce6944200b023ada1e673b0e) )
- ROM_LOAD16_BYTE( "pm004e.8", 0x100001, 0x80000, CRC(d3af52bc) SHA1(46be057106388578defecab1cdd1793ec76ebe92) )
- ROM_LOAD16_BYTE( "pm005e.7", 0x100000, 0x80000, CRC(d7ec650c) SHA1(6c2250c74381497154bf516e0cf1db6bb56bb446) )
- ROM_LOAD16_BYTE( "pm000e.15", 0x200001, 0x80000, CRC(5d220f3f) SHA1(7ff373e01027c8832712f7a2d732f8e49b875878) )
- ROM_LOAD16_BYTE( "pm001e.14", 0x200000, 0x80000, CRC(90433eb1) SHA1(8688a85747ad9ecac395d782f130baa64fb9d12b) )
- ROM_LOAD16_BYTE( "pm002e.17", 0x300001, 0x80000, CRC(713ee898) SHA1(c9f608a57fb90e5ee15eb76a74a7afcc406d5b4e) )
- ROM_LOAD16_BYTE( "pm003e.16", 0x300000, 0x80000, CRC(6bb060fd) SHA1(4fc3946866c5a55e8340b62b5ad9beae723ce0da) )
-
- ROM_REGION( 0x100000, "gfx1", 0 ) /* sprites */
- ROM_LOAD( "pm006e.67", 0x000000, 0x100000, CRC(57aec037) SHA1(e6ba095b6892d4dcd76ba3343a97dd98ae29dc24) )
-
- ROM_REGION( 0x100000, "oki", 0 ) /* OKIM6295 samples */
- /* 00000-2ffff is fixed, 30000-3ffff is bank switched from all the ROMs */
- ROM_LOAD( "pm008e.l", 0x00000, 0x80000, CRC(d9379ba8) SHA1(5ae7c743319b1a12f2b101a9f0f8fe0728ed1476) )
- ROM_LOAD( "pm007e.u", 0x80000, 0x80000, CRC(c7ed7950) SHA1(133258b058d3c562208d0d00b9fac71202647c32) )
-ROM_END
-
-ROM_START( galpanicb ) /* PAMERA-04 PCB with the CALC1 MCU used */
- ROM_REGION( 0x400000, "maincpu", 0 ) /* 68000 code */
- ROM_LOAD16_BYTE( "pm109p.u88-01.ic6", 0x000000, 0x20000, CRC(a6d60dba) SHA1(2a63642709051c27b9a366c433127426bb579c35) ) // read as 27C010
- ROM_LOAD16_BYTE( "pm110p.u87-01.ic5", 0x000001, 0x20000, CRC(3214fd48) SHA1(d8d77cb6b74caea2545f4e62eb9223aaf770785a) ) // read as 27C010
- ROM_LOAD16_BYTE( "pm004e.8", 0x100001, 0x80000, CRC(d3af52bc) SHA1(46be057106388578defecab1cdd1793ec76ebe92) )
- ROM_LOAD16_BYTE( "pm005e.7", 0x100000, 0x80000, CRC(d7ec650c) SHA1(6c2250c74381497154bf516e0cf1db6bb56bb446) )
- ROM_LOAD16_BYTE( "pm000e.15", 0x200001, 0x80000, CRC(5d220f3f) SHA1(7ff373e01027c8832712f7a2d732f8e49b875878) )
- ROM_LOAD16_BYTE( "pm001e.14", 0x200000, 0x80000, CRC(90433eb1) SHA1(8688a85747ad9ecac395d782f130baa64fb9d12b) )
- ROM_LOAD16_BYTE( "pm002e.17", 0x300001, 0x80000, CRC(713ee898) SHA1(c9f608a57fb90e5ee15eb76a74a7afcc406d5b4e) )
- ROM_LOAD16_BYTE( "pm003e.16", 0x300000, 0x80000, CRC(6bb060fd) SHA1(4fc3946866c5a55e8340b62b5ad9beae723ce0da) )
-
- ROM_REGION( 0x100000, "gfx1", 0 ) /* sprites */
- ROM_LOAD( "pm006e.67", 0x000000, 0x100000, CRC(57aec037) SHA1(e6ba095b6892d4dcd76ba3343a97dd98ae29dc24) )
-
- ROM_REGION( 0x100000, "oki", 0 ) /* OKIM6295 samples */
- /* 00000-2ffff is fixed, 30000-3ffff is bank switched from all the ROMs */
- ROM_LOAD( "pm008e.l", 0x00000, 0x80000, CRC(d9379ba8) SHA1(5ae7c743319b1a12f2b101a9f0f8fe0728ed1476) )
- ROM_LOAD( "pm007e.u", 0x80000, 0x80000, CRC(c7ed7950) SHA1(133258b058d3c562208d0d00b9fac71202647c32) )
-ROM_END
-
-GAME( 1990, galpanic, 0, galpanic, galpanic, galpanic_state, empty_init, ROT90, "Kaneko", "Gals Panic (Unprotected)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
-GAME( 1990, galpanica, galpanic, galpanica, galpanica, galpanic_state, empty_init, ROT90, "Kaneko", "Gals Panic (MCU Protected, set 1)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
-GAME( 1990, galpanicb, galpanic, galpanica, galpanica, galpanic_state, empty_init, ROT90, "Kaneko", "Gals Panic (MCU Protected, set 2)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )