summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Ivan Vangelista <mesgnet@yahoo.it>2016-02-13 09:30:08 +0100
committer Ivan Vangelista <mesgnet@yahoo.it>2016-02-13 09:30:08 +0100
commitebe987034ad2def64df67525f2fcf8eb265f5154 (patch)
tree086b76c243b74bc6f9c4f5488823e86a3ac2c22d
parentb7320361df1a12f612d4f76ad102ed3e9450de0b (diff)
galpanic.cpp: oki address map instead of memcpy, added save state support, removed some leftovers (nw)
-rw-r--r--src/mame/drivers/galpanic.cpp50
-rw-r--r--src/mame/includes/galpanic.h23
-rw-r--r--src/mame/video/galpanic.cpp31
3 files changed, 50 insertions, 54 deletions
diff --git a/src/mame/drivers/galpanic.cpp b/src/mame/drivers/galpanic.cpp
index b47226747c1..1f9c349de33 100644
--- a/src/mame/drivers/galpanic.cpp
+++ b/src/mame/drivers/galpanic.cpp
@@ -74,7 +74,12 @@ Stephh's additional notes :
#include "includes/galpanic.h"
#include "includes/galpnipt.h"
-void galpanic_state::screen_eof_galpanic(screen_device &screen, bool state)
+void galpanic_state::machine_start()
+{
+ membank("okibank")->configure_entries(0, 16, memregion("oki")->base(), 0x10000);
+}
+
+void galpanic_state::screen_eof(screen_device &screen, bool state)
{
// rising edge
if (state)
@@ -83,7 +88,7 @@ void galpanic_state::screen_eof_galpanic(screen_device &screen, bool state)
}
}
-TIMER_DEVICE_CALLBACK_MEMBER(galpanic_state::galpanic_scanline)
+TIMER_DEVICE_CALLBACK_MEMBER(galpanic_state::scanline)
{
int scanline = param;
@@ -98,13 +103,11 @@ TIMER_DEVICE_CALLBACK_MEMBER(galpanic_state::galpanic_scanline)
-WRITE16_MEMBER(galpanic_state::galpanic_6295_bankswitch_w)
+WRITE16_MEMBER(galpanic_state::m6295_bankswitch_w)
{
if (ACCESSING_BITS_8_15)
{
- UINT8 *rom = memregion("oki")->base();
-
- memcpy(&rom[0x30000],&rom[0x40000 + ((data >> 8) & 0x0f) * 0x10000],0x10000);
+ membank("okibank")->set_entry((data >> 8) & 0x0f);
// used before title screen
m_pandora->set_clear_bitmap((data & 0x8000)>>15);
@@ -113,7 +116,7 @@ WRITE16_MEMBER(galpanic_state::galpanic_6295_bankswitch_w)
-WRITE16_MEMBER(galpanic_state::galpanic_coin_w)
+WRITE16_MEMBER(galpanic_state::coin_w)
{
if (ACCESSING_BITS_8_15)
{
@@ -131,15 +134,15 @@ static ADDRESS_MAP_START( galpanic_map, AS_PROGRAM, 16, galpanic_state )
AM_RANGE(0x000000, 0x3fffff) AM_ROM
AM_RANGE(0x400000, 0x400001) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff)
AM_RANGE(0x500000, 0x51ffff) AM_RAM AM_SHARE("fgvideoram")
- AM_RANGE(0x520000, 0x53ffff) AM_RAM_WRITE(galpanic_bgvideoram_w) AM_SHARE("bgvideoram") /* + work RAM */
+ AM_RANGE(0x520000, 0x53ffff) AM_RAM_WRITE(bgvideoram_w) AM_SHARE("bgvideoram") /* + work RAM */
AM_RANGE(0x600000, 0x6007ff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") /* 1024 colors, but only 512 seem to be used */
AM_RANGE(0x700000, 0x701fff) AM_DEVREADWRITE("pandora", kaneko_pandora_device, spriteram_LSB_r, spriteram_LSB_w)
AM_RANGE(0x702000, 0x704fff) AM_RAM
AM_RANGE(0x800000, 0x800001) AM_READ_PORT("DSW1")
AM_RANGE(0x800002, 0x800003) AM_READ_PORT("DSW2")
AM_RANGE(0x800004, 0x800005) AM_READ_PORT("SYSTEM")
- AM_RANGE(0x900000, 0x900001) AM_WRITE(galpanic_6295_bankswitch_w)
- AM_RANGE(0xa00000, 0xa00001) AM_WRITE(galpanic_coin_w) /* coin counters */
+ AM_RANGE(0x900000, 0x900001) AM_WRITE(m6295_bankswitch_w)
+ AM_RANGE(0xa00000, 0xa00001) AM_WRITE(coin_w) /* coin counters */
AM_RANGE(0xb00000, 0xb00001) AM_WRITENOP /* ??? */
AM_RANGE(0xc00000, 0xc00001) AM_WRITENOP /* ??? */
AM_RANGE(0xd00000, 0xd00001) AM_WRITENOP /* ??? */
@@ -147,6 +150,10 @@ static ADDRESS_MAP_START( galpanic_map, AS_PROGRAM, 16, galpanic_state )
ADDRESS_MAP_END
+static ADDRESS_MAP_START( galpanic_oki_map, AS_0, 8, galpanic_state )
+ AM_RANGE(0x00000, 0x2ffff) AM_ROM
+ AM_RANGE(0x30000, 0x3ffff) AM_ROMBANK("okibank")
+ADDRESS_MAP_END
static INPUT_PORTS_START( galpanic )
@@ -221,7 +228,7 @@ static MACHINE_CONFIG_START( galpanic, galpanic_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M68000, XTAL_12MHz) /* verified on pcb */
MCFG_CPU_PROGRAM_MAP(galpanic_map)
- MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", galpanic_state, galpanic_scanline, "screen", 0, 1)
+ MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", galpanic_state, scanline, "screen", 0, 1)
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@@ -229,8 +236,8 @@ static MACHINE_CONFIG_START( galpanic, galpanic_state )
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0) /* frames per second, vblank duration */)
MCFG_SCREEN_SIZE(256, 256)
MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 0, 224-1)
- MCFG_SCREEN_UPDATE_DRIVER(galpanic_state, screen_update_galpanic)
- MCFG_SCREEN_VBLANK_DRIVER(galpanic_state, screen_eof_galpanic)
+ MCFG_SCREEN_UPDATE_DRIVER(galpanic_state, screen_update)
+ MCFG_SCREEN_VBLANK_DRIVER(galpanic_state, screen_eof)
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", galpanic)
@@ -246,12 +253,11 @@ static MACHINE_CONFIG_START( galpanic, galpanic_state )
MCFG_DEVICE_ADD("calc1_mcu", KANEKO_HIT, 0)
kaneko_hit_device::set_type(*device, 0);
- MCFG_VIDEO_START_OVERRIDE(galpanic_state,galpanic)
-
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_OKIM6295_ADD("oki", XTAL_12MHz/6, OKIM6295_PIN7_LOW) /* verified on pcb */
+ MCFG_DEVICE_ADDRESS_MAP(AS_0, galpanic_oki_map)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
@@ -287,11 +293,10 @@ ROM_START( galpanic ) /* PAMERA-04 PCB with the PAMERA-SUB daughter card and unp
ROM_REGION( 0x100000, "gfx1", 0 ) /* sprites */
ROM_LOAD( "pm006e.67", 0x000000, 0x100000, CRC(57aec037) SHA1(e6ba095b6892d4dcd76ba3343a97dd98ae29dc24) )
- ROM_REGION( 0x140000, "oki", 0 ) /* OKIM6295 samples */
+ 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_RELOAD( 0x40000, 0x80000 )
- ROM_LOAD( "pm007e.u", 0xc0000, 0x80000, CRC(c7ed7950) SHA1(133258b058d3c562208d0d00b9fac71202647c32) )
+ ROM_LOAD( "pm007e.u", 0x80000, 0x80000, CRC(c7ed7950) SHA1(133258b058d3c562208d0d00b9fac71202647c32) )
ROM_END
ROM_START( galpanica ) /* PAMERA-04 PCB with the CALC1 MCU used */
@@ -308,12 +313,11 @@ ROM_START( galpanica ) /* PAMERA-04 PCB with the CALC1 MCU used */
ROM_REGION( 0x100000, "gfx1", 0 ) /* sprites */
ROM_LOAD( "pm006e.67", 0x000000, 0x100000, CRC(57aec037) SHA1(e6ba095b6892d4dcd76ba3343a97dd98ae29dc24) )
- ROM_REGION( 0x140000, "oki", 0 ) /* OKIM6295 samples */
+ 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_RELOAD( 0x40000, 0x80000 )
- ROM_LOAD( "pm007e.u", 0xc0000, 0x80000, CRC(c7ed7950) SHA1(133258b058d3c562208d0d00b9fac71202647c32) )
+ ROM_LOAD( "pm007e.u", 0x80000, 0x80000, CRC(c7ed7950) SHA1(133258b058d3c562208d0d00b9fac71202647c32) )
ROM_END
-GAME( 1990, galpanic, 0, galpanic, galpanic, driver_device, 0, ROT90, "Kaneko", "Gals Panic (Unprotected)", MACHINE_NO_COCKTAIL )
-GAME( 1990, galpanica,galpanic, galpanica,galpanica, driver_device, 0, ROT90, "Kaneko", "Gals Panic (MCU Protected)", MACHINE_NO_COCKTAIL )
+GAME( 1990, galpanic, 0, galpanic, galpanic, driver_device, 0, ROT90, "Kaneko", "Gals Panic (Unprotected)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
+GAME( 1990, galpanica,galpanic, galpanica,galpanica, driver_device, 0, ROT90, "Kaneko", "Gals Panic (MCU Protected)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/includes/galpanic.h b/src/mame/includes/galpanic.h
index 788ca087540..0ab503e6742 100644
--- a/src/mame/includes/galpanic.h
+++ b/src/mame/includes/galpanic.h
@@ -10,7 +10,6 @@ public:
m_maincpu(*this, "maincpu"),
m_bgvideoram(*this, "bgvideoram"),
m_fgvideoram(*this, "fgvideoram"),
- m_spriteram(*this, "spriteram"),
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
m_palette(*this, "palette"),
@@ -20,23 +19,23 @@ public:
required_device<cpu_device> m_maincpu;
required_shared_ptr<UINT16> m_bgvideoram;
required_shared_ptr<UINT16> m_fgvideoram;
- bitmap_ind16 m_bitmap;
- bitmap_ind16 m_sprites_bitmap;
- optional_shared_ptr<UINT16> m_spriteram;
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
required_device<kaneko_pandora_device> m_pandora;
- DECLARE_WRITE16_MEMBER(galpanic_6295_bankswitch_w);
- DECLARE_WRITE16_MEMBER(galpanic_coin_w);
+ bitmap_ind16 m_bitmap;
+
+ DECLARE_WRITE16_MEMBER(m6295_bankswitch_w);
+ DECLARE_WRITE16_MEMBER(coin_w);
+ DECLARE_WRITE16_MEMBER(bgvideoram_w);
- DECLARE_VIDEO_START(galpanic);
+ virtual void machine_start() override;
+ virtual void video_start() override;
DECLARE_PALETTE_INIT(galpanic);
- UINT32 screen_update_galpanic(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- void screen_eof_galpanic(screen_device &screen, bool state);
- TIMER_DEVICE_CALLBACK_MEMBER(galpanic_scanline);
+
+ UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ void screen_eof(screen_device &screen, bool state);
+ TIMER_DEVICE_CALLBACK_MEMBER(scanline);
void draw_fgbitmap(bitmap_ind16 &bitmap, const rectangle &cliprect);
- /*----------- defined in video/galpanic.c -----------*/
- DECLARE_WRITE16_MEMBER( galpanic_bgvideoram_w );
};
diff --git a/src/mame/video/galpanic.cpp b/src/mame/video/galpanic.cpp
index 487a22aeefb..cf33cb88bdd 100644
--- a/src/mame/video/galpanic.cpp
+++ b/src/mame/video/galpanic.cpp
@@ -5,52 +5,45 @@
#include "includes/galpanic.h"
-VIDEO_START_MEMBER(galpanic_state,galpanic)
+void galpanic_state::video_start()
{
m_screen->register_screen_bitmap(m_bitmap);
+
+ save_item(NAME(m_bitmap));
}
PALETTE_INIT_MEMBER(galpanic_state,galpanic)
{
- int i;
-
/* first 1024 colors are dynamic */
/* initialize 555 RGB lookup */
- for (i = 0;i < 32768;i++)
+ for (int i = 0;i < 32768;i++)
palette.set_pen_color(i+1024,pal5bit(i >> 5),pal5bit(i >> 10),pal5bit(i >> 0));
}
-WRITE16_MEMBER(galpanic_state::galpanic_bgvideoram_w)
+WRITE16_MEMBER(galpanic_state::bgvideoram_w)
{
- int sx,sy;
-
-
data = COMBINE_DATA(&m_bgvideoram[offset]);
- sy = offset / 256;
- sx = offset % 256;
+ int sy = offset / 256;
+ int sx = offset % 256;
m_bitmap.pix16(sy, sx) = 1024 + (data >> 1);
}
void galpanic_state::draw_fgbitmap(bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- int offs;
-
- for (offs = 0;offs < m_fgvideoram.bytes()/2;offs++)
+ for (int offs = 0;offs < m_fgvideoram.bytes()/2;offs++)
{
- int sx,sy,color;
-
- sx = offs % 256;
- sy = offs / 256;
- color = m_fgvideoram[offs];
+ int sx = offs % 256;
+ int sy = offs / 256;
+ int color = m_fgvideoram[offs];
if (color)
bitmap.pix16(sy, sx) = color;
}
}
-UINT32 galpanic_state::screen_update_galpanic(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+UINT32 galpanic_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
/* copy the temporary bitmap to the screen */
copybitmap(bitmap,m_bitmap,0,0,0,0,cliprect);