summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Ivan Vangelista <mesgnet@yahoo.it>2015-02-15 09:07:53 +0100
committer Ivan Vangelista <mesgnet@yahoo.it>2015-02-15 09:07:53 +0100
commit943454db5a9f7cd58266fca467b4931978e161e9 (patch)
treecb4e9a610770fb30a42f69f8be04a2b1ca4a8524
parentbe90b43b0f34db17763fa2d83060ac99a729bf93 (diff)
welltris.c: added save state support (nw)
-rw-r--r--src/mame/drivers/welltris.c50
-rw-r--r--src/mame/includes/welltris.h48
-rw-r--r--src/mame/video/welltris.c24
3 files changed, 63 insertions, 59 deletions
diff --git a/src/mame/drivers/welltris.c b/src/mame/drivers/welltris.c
index 0a2f85af086..a1845d09119 100644
--- a/src/mame/drivers/welltris.c
+++ b/src/mame/drivers/welltris.c
@@ -320,11 +320,9 @@ TODO:
-WRITE8_MEMBER(welltris_state::welltris_sh_bankswitch_w)
+WRITE8_MEMBER(welltris_state::sound_bankswitch_w)
{
- UINT8 *rom = memregion("audiocpu")->base() + 0x10000;
-
- membank("bank1")->set_base(rom + (data & 0x03) * 0x8000);
+ membank("soundbank")->set_entry(data & 0x03);
}
@@ -355,14 +353,14 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, welltris_state )
AM_RANGE(0x800000, 0x81ffff) AM_RAM AM_SHARE("pixelram") /* Graph_1 & 2*/
AM_RANGE(0xff8000, 0xffbfff) AM_RAM /* work */
AM_RANGE(0xffc000, 0xffc3ff) AM_RAM AM_SHARE("spriteram") /* Sprite */
- AM_RANGE(0xffd000, 0xffdfff) AM_RAM_WRITE(welltris_charvideoram_w) AM_SHARE("charvideoram") /* Char */
+ AM_RANGE(0xffd000, 0xffdfff) AM_RAM_WRITE(charvideoram_w) AM_SHARE("charvideoram") /* Char */
AM_RANGE(0xffe000, 0xffefff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") /* Palette */
AM_RANGE(0xfff000, 0xfff001) AM_READ_PORT("P1") /* Bottom Controls */
- AM_RANGE(0xfff000, 0xfff001) AM_WRITE(welltris_palette_bank_w)
+ AM_RANGE(0xfff000, 0xfff001) AM_WRITE(palette_bank_w)
AM_RANGE(0xfff002, 0xfff003) AM_READ_PORT("P2") /* Top Controls */
- AM_RANGE(0xfff002, 0xfff003) AM_WRITE(welltris_gfxbank_w)
+ AM_RANGE(0xfff002, 0xfff003) AM_WRITE(gfxbank_w)
AM_RANGE(0xfff004, 0xfff005) AM_READ_PORT("P3") /* Left Side Ctrls */
- AM_RANGE(0xfff004, 0xfff007) AM_WRITE(welltris_scrollreg_w)
+ AM_RANGE(0xfff004, 0xfff007) AM_WRITE(scrollreg_w)
AM_RANGE(0xfff006, 0xfff007) AM_READ_PORT("P4") /* Right Side Ctrls */
AM_RANGE(0xfff008, 0xfff009) AM_READ_PORT("SYSTEM") /* Bit 5 Tested at start of irq 1 */
AM_RANGE(0xfff008, 0xfff009) AM_WRITE(sound_command_w)
@@ -376,12 +374,12 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, welltris_state )
AM_RANGE(0x0000, 0x77ff) AM_ROM
AM_RANGE(0x7800, 0x7fff) AM_RAM
- AM_RANGE(0x8000, 0xffff) AM_ROMBANK("bank1")
+ AM_RANGE(0x8000, 0xffff) AM_ROMBANK("soundbank")
ADDRESS_MAP_END
static ADDRESS_MAP_START( sound_port_map, AS_IO, 8, welltris_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
- AM_RANGE(0x00, 0x00) AM_WRITE(welltris_sh_bankswitch_w)
+ AM_RANGE(0x00, 0x00) AM_WRITE(sound_bankswitch_w)
AM_RANGE(0x08, 0x0b) AM_DEVREADWRITE("ymsnd", ym2610_device, read, write)
AM_RANGE(0x10, 0x10) AM_READ(soundlatch_byte_r)
AM_RANGE(0x18, 0x18) AM_WRITE(pending_command_clear_w)
@@ -640,7 +638,7 @@ INPUT_PORTS_END
-static const gfx_layout welltris_charlayout =
+static const gfx_layout charlayout =
{
8,8,
RGN_FRAC(1,1),
@@ -651,7 +649,7 @@ static const gfx_layout welltris_charlayout =
32*8
};
-static const gfx_layout welltris_spritelayout =
+static const gfx_layout spritelayout =
{
16,16,
RGN_FRAC(1,2),
@@ -665,8 +663,8 @@ static const gfx_layout welltris_spritelayout =
};
static GFXDECODE_START( welltris )
- GFXDECODE_ENTRY( "gfx1", 0, welltris_charlayout, 16* 0, 4*16 )
- GFXDECODE_ENTRY( "gfx2", 0, welltris_spritelayout, 16*96, 2*16 )
+ GFXDECODE_ENTRY( "gfx1", 0, charlayout, 16* 0, 4*16 )
+ GFXDECODE_ENTRY( "gfx2", 0, spritelayout, 16*96, 2*16 )
GFXDECODE_END
@@ -688,12 +686,13 @@ DRIVER_INIT_MEMBER(welltris_state,welltris)
#endif
}
-DRIVER_INIT_MEMBER(welltris_state,quiz18k)
+void welltris_state::machine_start()
{
+ membank("soundbank")->configure_entries(0, 4, memregion("audiocpu")->base(), 0x8000);
+
+ save_item(NAME(m_pending_command));
}
-
-
static MACHINE_CONFIG_START( welltris, welltris_state )
/* basic machine hardware */
@@ -711,7 +710,7 @@ static MACHINE_CONFIG_START( welltris, welltris_state )
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
MCFG_SCREEN_SIZE(512, 256)
MCFG_SCREEN_VISIBLE_AREA(15, 367-1, 8, 248-1)
- MCFG_SCREEN_UPDATE_DRIVER(welltris_state, screen_update_welltris)
+ MCFG_SCREEN_UPDATE_DRIVER(welltris_state, screen_update)
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", welltris)
@@ -755,9 +754,8 @@ ROM_START( welltris )
ROM_LOAD16_BYTE( "lh532j10.10", 0x100000, 0x40000, CRC(1187c665) SHA1(c6c55016e46805694348b386e521a3ef1a443621) )
ROM_LOAD16_BYTE( "lh532j11.9", 0x100001, 0x40000, CRC(18eda9e5) SHA1(c01d1dc6bfde29797918490947c89440b58d5372) )
- ROM_REGION( 0x30000, "audiocpu", 0 ) /* 64k for the audio CPU + banks */
+ ROM_REGION( 0x20000, "audiocpu", 0 ) /* 128k for the audio CPU + banks */
ROM_LOAD( "3.144", 0x00000, 0x20000, CRC(ae8f763e) SHA1(255419e02189c2e156c1fbcb0cd4aedd14ed8ffa) )
- ROM_RELOAD( 0x10000, 0x20000 )
ROM_REGION( 0x0a0000, "gfx1", 0 ) /* CHAR Tiles */
ROM_LOAD( "lh534j12.77", 0x000000, 0x80000, CRC(b61a8b74) SHA1(e17f7355375bdc166ef8131f7de9dbda5453f570) )
@@ -782,9 +780,8 @@ ROM_START( welltrisj )
ROM_LOAD16_BYTE( "lh532j10.10", 0x100000, 0x40000, CRC(1187c665) SHA1(c6c55016e46805694348b386e521a3ef1a443621) )
ROM_LOAD16_BYTE( "lh532j11.9", 0x100001, 0x40000, CRC(18eda9e5) SHA1(c01d1dc6bfde29797918490947c89440b58d5372) )
- ROM_REGION( 0x30000, "audiocpu", 0 ) /* 64k for the audio CPU + banks */
+ ROM_REGION( 0x20000, "audiocpu", 0 ) /* 128k for the audio CPU + banks */
ROM_LOAD( "3.144", 0x00000, 0x20000, CRC(ae8f763e) SHA1(255419e02189c2e156c1fbcb0cd4aedd14ed8ffa) )
- ROM_RELOAD( 0x10000, 0x20000 )
ROM_REGION( 0x0a0000, "gfx1", 0 ) /* CHAR Tiles */
ROM_LOAD( "lh534j12.77", 0x000000, 0x80000, CRC(b61a8b74) SHA1(e17f7355375bdc166ef8131f7de9dbda5453f570) )
@@ -809,9 +806,8 @@ ROM_START( quiz18k )
ROM_LOAD16_BYTE( "ic10.bin", 0x100000, 0x40000, CRC(501453a3) SHA1(d127f417f1c52333e478ac397fbe8a2f223b1ce7) )
ROM_LOAD16_BYTE( "ic9.bin", 0x100001, 0x40000, CRC(99b6840f) SHA1(8409a33c64729066bfed6e49dcd84f30906274cb) )
- ROM_REGION( 0x30000, "audiocpu", 0 ) /* 64k for the audio CPU + banks */
+ ROM_REGION( 0x20000, "audiocpu", 0 ) /* 128k for the audio CPU + banks */
ROM_LOAD( "3-ic144.bin", 0x00000, 0x20000, CRC(72d372e3) SHA1(d077e34947de1050b68d76506cc8926b06a94a76) )
- ROM_RELOAD( 0x10000, 0x20000 )
ROM_REGION( 0x180000, "gfx1", 0 ) /* CHAR Tiles */
ROM_LOAD( "ic77.bin", 0x000000, 0x80000, CRC(af3b6fd1) SHA1(d22f7cf62a94ae3a2dcb0236630e9ac88d5e528b) )
@@ -832,6 +828,6 @@ ROM_END
-GAME( 1991, welltris, 0, welltris, welltris, welltris_state, welltris, ROT0, "Video System Co.", "Welltris (World?, 2 players)", GAME_NO_COCKTAIL )
-GAME( 1991, welltrisj,welltris, welltris, welltris, welltris_state, welltris, ROT0, "Video System Co.", "Welltris (Japan, 2 players)", GAME_NO_COCKTAIL )
-GAME( 1992, quiz18k, 0, quiz18k, quiz18k, welltris_state, quiz18k, ROT0, "EIM", "Miyasu Nonki no Quiz 18-Kin", GAME_NO_COCKTAIL )
+GAME( 1991, welltris, 0, welltris, welltris, welltris_state, welltris, ROT0, "Video System Co.", "Welltris (World?, 2 players)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
+GAME( 1991, welltrisj,welltris, welltris, welltris, welltris_state, welltris, ROT0, "Video System Co.", "Welltris (Japan, 2 players)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
+GAME( 1992, quiz18k, 0, quiz18k, quiz18k, driver_device, 0, ROT0, "EIM", "Miyasu Nonki no Quiz 18-Kin", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
diff --git a/src/mame/includes/welltris.h b/src/mame/includes/welltris.h
index 0c0f52937a4..92000229bb7 100644
--- a/src/mame/includes/welltris.h
+++ b/src/mame/includes/welltris.h
@@ -5,47 +5,51 @@ class welltris_state : public driver_device
public:
welltris_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
- m_spriteram(*this, "spriteram"),
- m_pixelram(*this, "pixelram"),
- m_charvideoram(*this, "charvideoram"),
- m_spr_old(*this, "vsystem_spr_old"),
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
- m_gfxdecode(*this, "gfxdecode") { }
+ m_spr_old(*this, "vsystem_spr_old"),
+ m_gfxdecode(*this, "gfxdecode"),
+ m_spriteram(*this, "spriteram"),
+ m_pixelram(*this, "pixelram"),
+ m_charvideoram(*this, "charvideoram") { }
- int m_pending_command;
+
+ required_device<cpu_device> m_maincpu;
+ required_device<cpu_device> m_audiocpu;
+ required_device<vsystem_spr2_device> m_spr_old;
+ required_device<gfxdecode_device> m_gfxdecode;
required_shared_ptr<UINT16> m_spriteram;
required_shared_ptr<UINT16> m_pixelram;
required_shared_ptr<UINT16> m_charvideoram;
- /* devices referenced above */
- required_device<vsystem_spr2_device> m_spr_old;
-
tilemap_t *m_char_tilemap;
- UINT8 m_gfxbank[8];
+ int m_pending_command;
+ UINT8 m_gfxbank[2];
UINT16 m_charpalettebank;
UINT16 m_spritepalettebank;
UINT16 m_pixelpalettebank;
int m_scrollx;
int m_scrolly;
- DECLARE_WRITE8_MEMBER(welltris_sh_bankswitch_w);
+
+ DECLARE_WRITE8_MEMBER(sound_bankswitch_w);
DECLARE_WRITE16_MEMBER(sound_command_w);
DECLARE_WRITE8_MEMBER(pending_command_clear_w);
- DECLARE_WRITE16_MEMBER(welltris_palette_bank_w);
- DECLARE_WRITE16_MEMBER(welltris_gfxbank_w);
- DECLARE_WRITE16_MEMBER(welltris_scrollreg_w);
- DECLARE_WRITE16_MEMBER(welltris_charvideoram_w);
- void setbank(int num, int bank);
+ DECLARE_WRITE16_MEMBER(palette_bank_w);
+ DECLARE_WRITE16_MEMBER(gfxbank_w);
+ DECLARE_WRITE16_MEMBER(scrollreg_w);
+ DECLARE_WRITE16_MEMBER(charvideoram_w);
+ DECLARE_WRITE_LINE_MEMBER(irqhandler);
+
DECLARE_CUSTOM_INPUT_MEMBER(pending_sound_r);
+
DECLARE_DRIVER_INIT(quiz18k);
DECLARE_DRIVER_INIT(welltris);
- TILE_GET_INFO_MEMBER(get_welltris_tile_info);
+ virtual void machine_start();
virtual void video_start();
- UINT32 screen_update_welltris(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+
+ TILE_GET_INFO_MEMBER(get_tile_info);
+ UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void draw_background(bitmap_ind16 &bitmap, const rectangle &cliprect);
- DECLARE_WRITE_LINE_MEMBER(irqhandler);
- required_device<cpu_device> m_maincpu;
- required_device<cpu_device> m_audiocpu;
- required_device<gfxdecode_device> m_gfxdecode;
+ void setbank(int num, int bank);
};
diff --git a/src/mame/video/welltris.c b/src/mame/video/welltris.c
index f84f110a51a..ba248c2c6cb 100644
--- a/src/mame/video/welltris.c
+++ b/src/mame/video/welltris.c
@@ -3,9 +3,6 @@
-
-
-
void welltris_state::setbank(int num, int bank)
{
if (m_gfxbank[num] != bank)
@@ -18,7 +15,7 @@ void welltris_state::setbank(int num, int bank)
/* Not really enough evidence here */
-WRITE16_MEMBER(welltris_state::welltris_palette_bank_w)
+WRITE16_MEMBER(welltris_state::palette_bank_w)
{
if (ACCESSING_BITS_0_7)
{
@@ -35,7 +32,7 @@ WRITE16_MEMBER(welltris_state::welltris_palette_bank_w)
}
}
-WRITE16_MEMBER(welltris_state::welltris_gfxbank_w)
+WRITE16_MEMBER(welltris_state::gfxbank_w)
{
if (ACCESSING_BITS_0_7)
{
@@ -44,7 +41,7 @@ WRITE16_MEMBER(welltris_state::welltris_gfxbank_w)
}
}
-WRITE16_MEMBER(welltris_state::welltris_scrollreg_w)
+WRITE16_MEMBER(welltris_state::scrollreg_w)
{
switch (offset) {
case 0: m_scrollx = data - 14; break;
@@ -52,7 +49,7 @@ WRITE16_MEMBER(welltris_state::welltris_scrollreg_w)
}
}
-TILE_GET_INFO_MEMBER(welltris_state::get_welltris_tile_info)
+TILE_GET_INFO_MEMBER(welltris_state::get_tile_info)
{
UINT16 code = m_charvideoram[tile_index];
int bank = (code & 0x1000) >> 12;
@@ -63,7 +60,7 @@ TILE_GET_INFO_MEMBER(welltris_state::get_welltris_tile_info)
0);
}
-WRITE16_MEMBER(welltris_state::welltris_charvideoram_w)
+WRITE16_MEMBER(welltris_state::charvideoram_w)
{
COMBINE_DATA(&m_charvideoram[offset]);
m_char_tilemap->mark_tile_dirty(offset);
@@ -71,9 +68,16 @@ WRITE16_MEMBER(welltris_state::welltris_charvideoram_w)
void welltris_state::video_start()
{
- m_char_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(welltris_state::get_welltris_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
+ m_char_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(welltris_state::get_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
m_char_tilemap->set_transparent_pen(15);
+
+ save_item(NAME(m_gfxbank));
+ save_item(NAME(m_charpalettebank));
+ save_item(NAME(m_spritepalettebank));
+ save_item(NAME(m_pixelpalettebank));
+ save_item(NAME(m_scrollx));
+ save_item(NAME(m_scrolly));
}
void welltris_state::draw_background(bitmap_ind16 &bitmap, const rectangle &cliprect)
@@ -91,7 +95,7 @@ void welltris_state::draw_background(bitmap_ind16 &bitmap, const rectangle &clip
}
}
-UINT32 welltris_state::screen_update_welltris(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+UINT32 welltris_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
m_char_tilemap->set_scrollx(0, m_scrollx);
m_char_tilemap->set_scrolly(0, m_scrolly);