summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Ivan Vangelista <mesgnet@yahoo.it>2015-02-04 18:36:27 +0100
committer Ivan Vangelista <mesgnet@yahoo.it>2015-02-04 18:36:27 +0100
commitbdc1f8b93d75b72925765c5d09a3dcd8df6f6874 (patch)
tree9f9f0c86b571663d51499adb8ea55156c3a6c62b
parent4c9ad2fe43d83883dcbef9106961b8639bc11ff8 (diff)
goodejan.c, sengokmj.c: added save state support (nw)
-rw-r--r--src/mame/drivers/goodejan.c58
-rw-r--r--src/mame/drivers/sengokmj.c68
2 files changed, 77 insertions, 49 deletions
diff --git a/src/mame/drivers/goodejan.c b/src/mame/drivers/goodejan.c
index 14ea8299dbe..23283a4f039 100644
--- a/src/mame/drivers/goodejan.c
+++ b/src/mame/drivers/goodejan.c
@@ -78,49 +78,56 @@ class goodejan_state : public driver_device
public:
goodejan_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
+ m_maincpu(*this, "maincpu"),
+ m_gfxdecode(*this, "gfxdecode"),
+ m_palette(*this, "palette"),
m_sc0_vram(*this, "sc0_vram"),
m_sc1_vram(*this, "sc1_vram"),
m_sc2_vram(*this, "sc2_vram"),
m_sc3_vram(*this, "sc3_vram"),
- m_spriteram16(*this, "sprite_ram"),
- m_maincpu(*this, "maincpu"),
- m_gfxdecode(*this, "gfxdecode"),
- m_palette(*this, "palette") { }
+ m_spriteram16(*this, "sprite_ram") { }
+
+ required_device<cpu_device> m_maincpu;
+ required_device<gfxdecode_device> m_gfxdecode;
+ required_device<palette_device> m_palette;
required_shared_ptr<UINT16> m_sc0_vram;
required_shared_ptr<UINT16> m_sc1_vram;
required_shared_ptr<UINT16> m_sc2_vram;
required_shared_ptr<UINT16> m_sc3_vram;
required_shared_ptr<UINT16> m_spriteram16;
- required_device<cpu_device> m_maincpu;
- required_device<gfxdecode_device> m_gfxdecode;
- required_device<palette_device> m_palette;
+
tilemap_t *m_sc0_tilemap;
tilemap_t *m_sc1_tilemap;
tilemap_t *m_sc2_tilemap;
tilemap_t *m_sc3_tilemap;
+
UINT16 m_mux_data;
UINT16 m_seibucrtc_sc0bank;
- DECLARE_WRITE16_MEMBER(goodejan_gfxbank_w);
+ UINT16 m_layer_en;
+ UINT16 m_scrollram[6];
+
+ DECLARE_WRITE16_MEMBER(gfxbank_w);
DECLARE_READ16_MEMBER(mahjong_panel_r);
DECLARE_WRITE16_MEMBER(mahjong_panel_w);
DECLARE_WRITE16_MEMBER(seibucrtc_sc0vram_w);
DECLARE_WRITE16_MEMBER(seibucrtc_sc1vram_w);
DECLARE_WRITE16_MEMBER(seibucrtc_sc2vram_w);
DECLARE_WRITE16_MEMBER(seibucrtc_sc3vram_w);
+ DECLARE_WRITE16_MEMBER(layer_en_w);
+ DECLARE_WRITE16_MEMBER(layer_scroll_w);
+
TILE_GET_INFO_MEMBER(seibucrtc_sc0_tile_info);
TILE_GET_INFO_MEMBER(seibucrtc_sc1_tile_info);
TILE_GET_INFO_MEMBER(seibucrtc_sc2_tile_info);
TILE_GET_INFO_MEMBER(seibucrtc_sc3_tile_info);
- INTERRUPT_GEN_MEMBER(goodejan_irq);
- DECLARE_WRITE16_MEMBER(layer_en_w);
- DECLARE_WRITE16_MEMBER(layer_scroll_w);
- UINT16 m_layer_en;
- UINT16 m_scrollram[6];
+
+ INTERRUPT_GEN_MEMBER(irq);
+
void seibucrtc_sc0bank_w(UINT16 data);
void draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect,int pri);
virtual void video_start();
- UINT32 screen_update_goodejan(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
};
/*******************************
@@ -348,9 +355,14 @@ void goodejan_state::video_start()
m_sc3_tilemap->set_transparent_pen(15);
m_seibucrtc_sc0bank = 0;
+
+ save_item(NAME(m_mux_data));
+ save_item(NAME(m_seibucrtc_sc0bank));
+ save_item(NAME(m_layer_en));
+ save_item(NAME(m_scrollram));
}
-UINT32 goodejan_state::screen_update_goodejan(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+UINT32 goodejan_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
bitmap.fill(m_palette->pen(0x7ff), cliprect); //black pen
@@ -381,7 +393,7 @@ UINT32 goodejan_state::screen_update_goodejan(screen_device &screen, bitmap_ind1
#define GOODEJAN_MHZ3 12000000
-WRITE16_MEMBER(goodejan_state::goodejan_gfxbank_w)
+WRITE16_MEMBER(goodejan_state::gfxbank_w)
{
seibucrtc_sc0bank_w((data & 0x100)>>8);
}
@@ -423,7 +435,7 @@ ADDRESS_MAP_END
/* totmejan CRTC is at 8000-804f,goodejan is at 8000-807f */
static ADDRESS_MAP_START( common_io_map, AS_IO, 16, goodejan_state )
- AM_RANGE(0x9000, 0x9001) AM_WRITE(goodejan_gfxbank_w)
+ AM_RANGE(0x9000, 0x9001) AM_WRITE(gfxbank_w)
AM_RANGE(0xb000, 0xb003) AM_WRITENOP
AM_RANGE(0xb004, 0xb005) AM_WRITE(mahjong_panel_w)
@@ -592,7 +604,7 @@ static GFXDECODE_START( goodejan )
GFXDECODE_ENTRY( "tx_gfx", 0, charlayout, 0x100, 0x10 ) /* Text */
GFXDECODE_END
-INTERRUPT_GEN_MEMBER(goodejan_state::goodejan_irq)
+INTERRUPT_GEN_MEMBER(goodejan_state::irq)
{
device.execute().set_input_line_and_vector(0,HOLD_LINE,0x208/4);
/* vector 0x00c is just a reti */
@@ -616,7 +628,7 @@ static MACHINE_CONFIG_START( goodejan, goodejan_state )
MCFG_CPU_ADD("maincpu", V30, GOODEJAN_MHZ2/2)
MCFG_CPU_PROGRAM_MAP(goodejan_map)
MCFG_CPU_IO_MAP(goodejan_io_map)
- MCFG_CPU_VBLANK_INT_DRIVER("screen", goodejan_state, goodejan_irq)
+ MCFG_CPU_VBLANK_INT_DRIVER("screen", goodejan_state, irq)
SEIBU_SOUND_SYSTEM_CPU(GOODEJAN_MHZ1/2)
@@ -626,7 +638,7 @@ static MACHINE_CONFIG_START( goodejan, goodejan_state )
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
MCFG_SCREEN_SIZE(32*8, 32*8)
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) //TODO: dynamic resolution
- MCFG_SCREEN_UPDATE_DRIVER(goodejan_state, screen_update_goodejan)
+ MCFG_SCREEN_UPDATE_DRIVER(goodejan_state, screen_update)
MCFG_SCREEN_PALETTE("palette")
MCFG_DEVICE_ADD("crtc", SEIBU_CRTC, 0)
@@ -742,6 +754,6 @@ ROM_START( goodejana )
ROM_LOAD( "fmj08.083", 0x000, 0x100, CRC(9657b7ad) SHA1(e9b469c2b3534593f7fe0ea19cbbf93b55957e42) )
ROM_END
-GAME( 1991, totmejan, 0, totmejan, goodejan, driver_device, 0, ROT0, "Seibu Kaihatsu (Tecmo license)", "Tottemo E Jong", GAME_IMPERFECT_GRAPHICS )
-GAME( 1991, goodejan, 0, goodejan, goodejan, driver_device, 0, ROT0, "Seibu Kaihatsu (Tecmo license)", "Good E Jong -Kachinuki Mahjong Syoukin Oh!!- (set 1)", GAME_IMPERFECT_GRAPHICS )
-GAME( 1991, goodejana,goodejan, goodejan, goodejan, driver_device, 0, ROT0, "Seibu Kaihatsu (Tecmo license)", "Good E Jong -Kachinuki Mahjong Syoukin Oh!!- (set 2)", GAME_IMPERFECT_GRAPHICS )
+GAME( 1991, totmejan, 0, totmejan, goodejan, driver_device, 0, ROT0, "Seibu Kaihatsu (Tecmo license)", "Tottemo E Jong", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
+GAME( 1991, goodejan, 0, goodejan, goodejan, driver_device, 0, ROT0, "Seibu Kaihatsu (Tecmo license)", "Good E Jong -Kachinuki Mahjong Syoukin Oh!!- (set 1)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
+GAME( 1991, goodejana,goodejan, goodejan, goodejan, driver_device, 0, ROT0, "Seibu Kaihatsu (Tecmo license)", "Good E Jong -Kachinuki Mahjong Syoukin Oh!!- (set 2)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/sengokmj.c b/src/mame/drivers/sengokmj.c
index 510af35bc31..28201458db9 100644
--- a/src/mame/drivers/sengokmj.c
+++ b/src/mame/drivers/sengokmj.c
@@ -66,50 +66,58 @@ class sengokmj_state : public driver_device
public:
sengokmj_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
+ m_maincpu(*this, "maincpu"),
+ m_gfxdecode(*this, "gfxdecode"),
+ m_palette(*this, "palette"),
m_sc0_vram(*this, "sc0_vram"),
m_sc1_vram(*this, "sc1_vram"),
m_sc2_vram(*this, "sc2_vram"),
m_sc3_vram(*this, "sc3_vram"),
- m_spriteram16(*this, "sprite_ram"),
- m_maincpu(*this, "maincpu"),
- m_gfxdecode(*this, "gfxdecode"),
- m_palette(*this, "palette") { }
+ m_spriteram16(*this, "sprite_ram") { }
+
+ required_device<cpu_device> m_maincpu;
+ required_device<gfxdecode_device> m_gfxdecode;
+ required_device<palette_device> m_palette;
required_shared_ptr<UINT16> m_sc0_vram;
required_shared_ptr<UINT16> m_sc1_vram;
required_shared_ptr<UINT16> m_sc2_vram;
required_shared_ptr<UINT16> m_sc3_vram;
required_shared_ptr<UINT16> m_spriteram16;
- required_device<cpu_device> m_maincpu;
- required_device<gfxdecode_device> m_gfxdecode;
- required_device<palette_device> m_palette;
+
tilemap_t *m_sc0_tilemap;
tilemap_t *m_sc1_tilemap;
tilemap_t *m_sc2_tilemap;
tilemap_t *m_sc3_tilemap;
- UINT16 m_sengokumj_mux_data;
+
+ UINT16 m_mux_data;
UINT8 m_hopper_io;
UINT16 m_layer_en;
UINT16 m_scrollram[6];
+
DECLARE_READ16_MEMBER(mahjong_panel_r);
DECLARE_WRITE16_MEMBER(mahjong_panel_w);
- DECLARE_WRITE16_MEMBER(sengokmj_out_w);
- DECLARE_READ16_MEMBER(sengokmj_system_r);
+ DECLARE_WRITE16_MEMBER(out_w);
+ DECLARE_READ16_MEMBER(system_r);
DECLARE_WRITE16_MEMBER(seibucrtc_sc0vram_w);
DECLARE_WRITE16_MEMBER(seibucrtc_sc1vram_w);
DECLARE_WRITE16_MEMBER(seibucrtc_sc2vram_w);
DECLARE_WRITE16_MEMBER(seibucrtc_sc3vram_w);
+ DECLARE_WRITE16_MEMBER(layer_en_w);
+ DECLARE_WRITE16_MEMBER(layer_scroll_w);
+
TILE_GET_INFO_MEMBER(seibucrtc_sc0_tile_info);
TILE_GET_INFO_MEMBER(seibucrtc_sc1_tile_info);
TILE_GET_INFO_MEMBER(seibucrtc_sc2_tile_info);
TILE_GET_INFO_MEMBER(seibucrtc_sc3_tile_info);
- INTERRUPT_GEN_MEMBER(sengokmj_interrupt);
- DECLARE_WRITE16_MEMBER(layer_en_w);
- DECLARE_WRITE16_MEMBER(layer_scroll_w);
+
+ INTERRUPT_GEN_MEMBER(interrupt);
- void draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect,int pri);
+ virtual void machine_start();
virtual void video_start();
- UINT32 screen_update_sengokmj(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+
+ void draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect,int pri);
+ UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
};
@@ -294,9 +302,12 @@ void sengokmj_state::video_start()
m_sc2_tilemap->set_transparent_pen(15);
m_sc1_tilemap->set_transparent_pen(15);
m_sc3_tilemap->set_transparent_pen(15);
+
+ save_item(NAME(m_layer_en));
+ save_item(NAME(m_scrollram));
}
-UINT32 sengokmj_state::screen_update_sengokmj(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+UINT32 sengokmj_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
bitmap.fill(m_palette->pen(0x7ff), cliprect); //black pen
@@ -323,6 +334,11 @@ UINT32 sengokmj_state::screen_update_sengokmj(screen_device &screen, bitmap_ind1
}
+void sengokmj_state::machine_start()
+{
+ save_item(NAME(m_mux_data));
+ save_item(NAME(m_hopper_io));
+}
/* Multiplexer device for the mahjong panel */
@@ -334,7 +350,7 @@ READ16_MEMBER(sengokmj_state::mahjong_panel_r)
for(i=0;i<5;i++)
{
- if(m_sengokumj_mux_data & 1 << i)
+ if(m_mux_data & 1 << i)
res = ioport(mpnames[i])->read();
}
@@ -343,13 +359,13 @@ READ16_MEMBER(sengokmj_state::mahjong_panel_r)
WRITE16_MEMBER(sengokmj_state::mahjong_panel_w)
{
- m_sengokumj_mux_data = (data & 0x3f00) >> 8;
+ m_mux_data = (data & 0x3f00) >> 8;
if(data & 0xc0ff)
logerror("Write to mux %04x\n",data);
}
-WRITE16_MEMBER(sengokmj_state::sengokmj_out_w)
+WRITE16_MEMBER(sengokmj_state::out_w)
{
/* ---- ---- ---x ---- J.P. Signal (?)*/
/* ---- ---- ---- -x-- Coin counter (done AFTER you press start)*/
@@ -362,7 +378,7 @@ WRITE16_MEMBER(sengokmj_state::sengokmj_out_w)
// popmessage("%02x",m_hopper_io);
}
-READ16_MEMBER(sengokmj_state::sengokmj_system_r)
+READ16_MEMBER(sengokmj_state::system_r)
{
return (ioport("SYSTEM")->read() & 0xffbf) | m_hopper_io;
}
@@ -387,11 +403,11 @@ static ADDRESS_MAP_START( sengokmj_io_map, AS_IO, 16, sengokmj_state )
// AM_RANGE(0x8080, 0x8081) CRTC extra register?
// AM_RANGE(0x80c0, 0x80c1) CRTC extra register?
// AM_RANGE(0x8100, 0x8101) AM_WRITENOP // always 0
- AM_RANGE(0x8180, 0x8181) AM_WRITE(sengokmj_out_w)
+ AM_RANGE(0x8180, 0x8181) AM_WRITE(out_w)
AM_RANGE(0x8140, 0x8141) AM_WRITE(mahjong_panel_w)
AM_RANGE(0xc000, 0xc001) AM_READ_PORT("DSW1")
AM_RANGE(0xc002, 0xc003) AM_READ(mahjong_panel_r)
- AM_RANGE(0xc004, 0xc005) AM_READ(sengokmj_system_r) //switches
+ AM_RANGE(0xc004, 0xc005) AM_READ(system_r) //switches
ADDRESS_MAP_END
@@ -538,7 +554,7 @@ static GFXDECODE_START( sengokmj )
GFXDECODE_ENTRY( "tx_gfx", 0, charlayout, 0x700, 0x10 ) /* Text */
GFXDECODE_END
-INTERRUPT_GEN_MEMBER(sengokmj_state::sengokmj_interrupt)
+INTERRUPT_GEN_MEMBER(sengokmj_state::interrupt)
{
device.execute().set_input_line_and_vector(0,HOLD_LINE,0xc8/4);
}
@@ -560,7 +576,7 @@ static MACHINE_CONFIG_START( sengokmj, sengokmj_state )
MCFG_CPU_ADD("maincpu", V30, 16000000/2) /* V30-8 */
MCFG_CPU_PROGRAM_MAP(sengokmj_map)
MCFG_CPU_IO_MAP(sengokmj_io_map)
- MCFG_CPU_VBLANK_INT_DRIVER("screen", sengokmj_state, sengokmj_interrupt)
+ MCFG_CPU_VBLANK_INT_DRIVER("screen", sengokmj_state, interrupt)
SEIBU_SOUND_SYSTEM_CPU(14318180/4)
@@ -572,7 +588,7 @@ static MACHINE_CONFIG_START( sengokmj, sengokmj_state )
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
MCFG_SCREEN_SIZE(64*8, 32*8)
MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 16, 256-1) //TODO: dynamic resolution
- MCFG_SCREEN_UPDATE_DRIVER(sengokmj_state, screen_update_sengokmj)
+ MCFG_SCREEN_UPDATE_DRIVER(sengokmj_state, screen_update)
MCFG_SCREEN_PALETTE("palette")
MCFG_DEVICE_ADD("crtc", SEIBU_CRTC, 0)
@@ -624,5 +640,5 @@ ROM_START( sengokmj )
ROM_LOAD( "rs006.89", 0x000, 0x200, CRC(96f7646e) SHA1(400a831b83d6ac4d2a46ef95b97b1ee237099e44) ) /* Priority */
ROM_END
-GAME( 1991, sengokmj, 0, sengokmj, sengokmj, driver_device, 0, ROT0, "Sigma", "Sengoku Mahjong [BET] (Japan)", GAME_IMPERFECT_GRAPHICS )
+GAME( 1991, sengokmj, 0, sengokmj, sengokmj, driver_device, 0, ROT0, "Sigma", "Sengoku Mahjong [BET] (Japan)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
/*Non-Bet Version?*/