summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Ivan Vangelista <mesgnet@yahoo.it>2015-03-10 18:31:13 +0100
committer Ivan Vangelista <mesgnet@yahoo.it>2015-03-10 18:31:13 +0100
commit2c57d68ec7fce9b17d5c387493a3b5f9996f219f (patch)
treece32aa3f45418dc4dc3b55fdf07e1881b0e8b810
parent7e02382d0ad83c7351bfb68644419ec029668e93 (diff)
shougi.c, shuuz.c, xain.c: added save state support (nw)
-rw-r--r--src/mame/drivers/shougi.c77
-rw-r--r--src/mame/drivers/shuuz.c12
-rw-r--r--src/mame/drivers/xain.c125
-rw-r--r--src/mame/includes/shuuz.h10
-rw-r--r--src/mame/includes/xain.h97
-rw-r--r--src/mame/video/shuuz.c7
-rw-r--r--src/mame/video/xain.c37
7 files changed, 198 insertions, 167 deletions
diff --git a/src/mame/drivers/shougi.c b/src/mame/drivers/shougi.c
index 308c63817c0..e48adda2f6c 100644
--- a/src/mame/drivers/shougi.c
+++ b/src/mame/drivers/shougi.c
@@ -92,36 +92,48 @@ class shougi_state : public driver_device
public:
shougi_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
- m_videoram(*this, "videoram"),
m_maincpu(*this, "maincpu"),
m_subcpu(*this, "sub"),
- m_mcu(*this, "mcu") { }
+ m_mcu(*this, "mcu"),
+ m_videoram(*this, "videoram") { }
+
+ required_device<cpu_device> m_maincpu;
+ required_device<cpu_device> m_subcpu;
+ required_device<cpu_device> m_mcu;
required_shared_ptr<UINT8> m_videoram;
+
int m_nmi_enabled;
+ int m_r;
//UINT8 *m_cpu_sharedram;
//UINT8 m_cpu_sharedram_control_val;
- int m_r;
+
DECLARE_WRITE8_MEMBER(cpu_sharedram_sub_w);
DECLARE_WRITE8_MEMBER(cpu_sharedram_main_w);
DECLARE_READ8_MEMBER(cpu_sharedram_r);
DECLARE_WRITE8_MEMBER(cpu_shared_ctrl_sub_w);
DECLARE_WRITE8_MEMBER(cpu_shared_ctrl_main_w);
- DECLARE_WRITE8_MEMBER(shougi_watchdog_reset_w);
- DECLARE_WRITE8_MEMBER(shougi_mcu_halt_off_w);
- DECLARE_WRITE8_MEMBER(shougi_mcu_halt_on_w);
+ DECLARE_WRITE8_MEMBER(mcu_halt_off_w);
+ DECLARE_WRITE8_MEMBER(mcu_halt_on_w);
DECLARE_WRITE8_MEMBER(nmi_disable_and_clear_line_w);
DECLARE_WRITE8_MEMBER(nmi_enable_w);
DECLARE_READ8_MEMBER(dummy_r);
+
DECLARE_PALETTE_INIT(shougi);
- UINT32 screen_update_shougi(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- INTERRUPT_GEN_MEMBER(shougi_vblank_nmi);
- required_device<cpu_device> m_maincpu;
- required_device<cpu_device> m_subcpu;
- required_device<cpu_device> m_mcu;
+ virtual void machine_start();
+
+ UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+
+ INTERRUPT_GEN_MEMBER(vblank_nmi);
};
+void shougi_state::machine_start()
+{
+ save_item(NAME(m_nmi_enabled));
+ save_item(NAME(m_r));
+}
+
/***************************************************************************
@@ -182,7 +194,7 @@ PALETTE_INIT_MEMBER(shougi_state, shougi)
-UINT32 shougi_state::screen_update_shougi(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+UINT32 shougi_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
int offs;
@@ -217,47 +229,42 @@ UINT32 shougi_state::screen_update_shougi(screen_device &screen, bitmap_ind16 &b
WRITE8_MEMBER(shougi_state::cpu_sharedram_sub_w)
{
- if (cpu_sharedram_control_val!=0) logerror("sub CPU access to shared RAM when access set for main cpu\n");
- cpu_sharedram[offset] = data;
+ if (m_cpu_sharedram_control_val!=0) logerror("sub CPU access to shared RAM when access set for main cpu\n");
+ m_cpu_sharedram[offset] = data;
}
WRITE8_MEMBER(shougi_state::cpu_sharedram_main_w)
{
- if (cpu_sharedram_control_val!=1) logerror("main CPU access to shared RAM when access set for sub cpu\n");
- cpu_sharedram[offset] = data;
+ if (m_cpu_sharedram_control_val!=1) logerror("main CPU access to shared RAM when access set for sub cpu\n");
+ m_cpu_sharedram[offset] = data;
}
READ8_MEMBER(shougi_state::cpu_sharedram_r)
{
- return cpu_sharedram[offset];
+ return m_cpu_sharedram[offset];
}
#endif
WRITE8_MEMBER(shougi_state::cpu_shared_ctrl_sub_w)
{
- //cpu_sharedram_control_val = 0;
+ //m_cpu_sharedram_control_val = 0;
//logerror("cpu_sharedram_ctrl=SUB");
}
WRITE8_MEMBER(shougi_state::cpu_shared_ctrl_main_w)
{
- //cpu_sharedram_control_val = 1;
+ //m_cpu_sharedram_control_val = 1;
//logerror("cpu_sharedram_ctrl=MAIN");
}
-WRITE8_MEMBER(shougi_state::shougi_watchdog_reset_w)
-{
- watchdog_reset_w(space,0,data);
-}
-
-WRITE8_MEMBER(shougi_state::shougi_mcu_halt_off_w)
+WRITE8_MEMBER(shougi_state::mcu_halt_off_w)
{
/* logerror("mcu HALT OFF"); */
m_mcu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE);
}
-WRITE8_MEMBER(shougi_state::shougi_mcu_halt_on_w)
+WRITE8_MEMBER(shougi_state::mcu_halt_on_w)
{
/* logerror("mcu HALT ON"); */
m_mcu->set_input_line(INPUT_LINE_HALT,ASSERT_LINE);
@@ -278,7 +285,7 @@ WRITE8_MEMBER(shougi_state::nmi_enable_w)
m_nmi_enabled = 1; /* enable NMIs */
}
-INTERRUPT_GEN_MEMBER(shougi_state::shougi_vblank_nmi)
+INTERRUPT_GEN_MEMBER(shougi_state::vblank_nmi)
{
if ( m_nmi_enabled == 1 )
{
@@ -298,17 +305,17 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, shougi_state )
AM_RANGE(0x4801, 0x4801) AM_WRITE(nmi_disable_and_clear_line_w)
AM_RANGE(0x4802, 0x4802) AM_NOP
AM_RANGE(0x4803, 0x4803) AM_NOP
- AM_RANGE(0x4804, 0x4804) AM_WRITE(shougi_mcu_halt_off_w)
+ AM_RANGE(0x4804, 0x4804) AM_WRITE(mcu_halt_off_w)
AM_RANGE(0x4807, 0x4807) AM_WRITENOP //?????? connected to +5v via resistor
AM_RANGE(0x4808, 0x4808) AM_WRITE(cpu_shared_ctrl_main_w)
AM_RANGE(0x4809, 0x4809) AM_WRITE(nmi_enable_w)
AM_RANGE(0x480a, 0x480a) AM_NOP
AM_RANGE(0x480b, 0x480b) AM_NOP
- AM_RANGE(0x480c, 0x480c) AM_WRITE(shougi_mcu_halt_on_w)
+ AM_RANGE(0x480c, 0x480c) AM_WRITE(mcu_halt_on_w)
AM_RANGE(0x480f, 0x480f) AM_NOP
AM_RANGE(0x5000, 0x5000) AM_READ_PORT("P1")
- AM_RANGE(0x5800, 0x5800) AM_READ_PORT("P2") AM_WRITE(shougi_watchdog_reset_w) /* game won't boot if watchdog doesn't work */
+ AM_RANGE(0x5800, 0x5800) AM_READ_PORT("P2") AM_WRITE(watchdog_reset_w) /* game won't boot if watchdog doesn't work */
AM_RANGE(0x6000, 0x6000) AM_DEVWRITE("aysnd", ay8910_device, address_w)
AM_RANGE(0x6800, 0x6800) AM_DEVWRITE("aysnd", ay8910_device, data_w)
AM_RANGE(0x7000, 0x73ff) AM_RAM AM_SHARE("share1") /* 2114 x 2 (0x400 x 4bit each) */
@@ -408,12 +415,12 @@ static MACHINE_CONFIG_START( shougi, shougi_state )
MCFG_CPU_ADD("maincpu", Z80,10000000/4)
MCFG_CPU_PROGRAM_MAP(main_map)
- MCFG_CPU_VBLANK_INT_DRIVER("screen", shougi_state, shougi_vblank_nmi)
+ MCFG_CPU_VBLANK_INT_DRIVER("screen", shougi_state, vblank_nmi)
MCFG_CPU_ADD("sub", Z80,10000000/4)
MCFG_CPU_PROGRAM_MAP(sub_map)
MCFG_CPU_IO_MAP(readport_sub)
- /* NMIs triggered in shougi_vblank_nmi() */
+ /* NMIs triggered in vblank_nmi() */
/* MCU */
MCFG_CPU_ADD("mcu", ALPHA8201, 10000000/4/8)
@@ -428,7 +435,7 @@ static MACHINE_CONFIG_START( shougi, shougi_state )
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
MCFG_SCREEN_SIZE(256, 256)
MCFG_SCREEN_VISIBLE_AREA(0, 255, 0, 255)
- MCFG_SCREEN_UPDATE_DRIVER(shougi_state, screen_update_shougi)
+ MCFG_SCREEN_UPDATE_DRIVER(shougi_state, screen_update)
MCFG_SCREEN_PALETTE("palette")
MCFG_PALETTE_ADD("palette", 32)
@@ -489,5 +496,5 @@ ROM_END
-GAME( 1982, shougi, 0, shougi, shougi, driver_device, 0, ROT0, "Alpha Denshi Co.", "Shougi", 0 )
-GAME( 1982, shougi2, shougi, shougi, shougi2, driver_device, 0, ROT0, "Alpha Denshi Co.", "Shougi 2", 0 )
+GAME( 1982, shougi, 0, shougi, shougi, driver_device, 0, ROT0, "Alpha Denshi Co.", "Shougi", GAME_SUPPORTS_SAVE )
+GAME( 1982, shougi2, shougi, shougi, shougi2, driver_device, 0, ROT0, "Alpha Denshi Co.", "Shougi 2", GAME_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/shuuz.c b/src/mame/drivers/shuuz.c
index dc048a76431..535c994d522 100644
--- a/src/mame/drivers/shuuz.c
+++ b/src/mame/drivers/shuuz.c
@@ -25,6 +25,10 @@
#include "includes/shuuz.h"
+void shuuz_state::machine_start()
+{
+ save_item(NAME(m_cur));
+}
/*************************************
*
@@ -245,11 +249,9 @@ static MACHINE_CONFIG_START( shuuz, shuuz_state )
/* note: these parameters are from published specs, not derived */
/* the board uses a VAD chip to generate video signals */
MCFG_SCREEN_RAW_PARAMS(ATARI_CLOCK_14MHz/2, 456, 0, 336, 262, 0, 240)
- MCFG_SCREEN_UPDATE_DRIVER(shuuz_state, screen_update_shuuz)
+ MCFG_SCREEN_UPDATE_DRIVER(shuuz_state, screen_update)
MCFG_SCREEN_PALETTE("palette")
- MCFG_VIDEO_START_OVERRIDE(shuuz_state,shuuz)
-
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
@@ -340,5 +342,5 @@ ROM_END
*
*************************************/
-GAME( 1990, shuuz, 0, shuuz, shuuz, driver_device, 0, ROT0, "Atari Games", "Shuuz (version 8.0)", 0 )
-GAME( 1990, shuuz2, shuuz, shuuz, shuuz2, driver_device, 0, ROT0, "Atari Games", "Shuuz (version 7.1)", 0 )
+GAME( 1990, shuuz, 0, shuuz, shuuz, driver_device, 0, ROT0, "Atari Games", "Shuuz (version 8.0)", GAME_SUPPORTS_SAVE )
+GAME( 1990, shuuz2, shuuz, shuuz, shuuz2, driver_device, 0, ROT0, "Atari Games", "Shuuz (version 7.1)", GAME_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/xain.c b/src/mame/drivers/xain.c
index 0b09466e319..dbb3a9fb604 100644
--- a/src/mame/drivers/xain.c
+++ b/src/mame/drivers/xain.c
@@ -173,7 +173,7 @@ inline int xain_state::scanline_to_vcount(int scanline)
return (vcount - 0x18) | 0x100;
}
-TIMER_DEVICE_CALLBACK_MEMBER(xain_state::xain_scanline)
+TIMER_DEVICE_CALLBACK_MEMBER(xain_state::scanline)
{
int scanline = param;
int screen_height = m_screen->height();
@@ -209,24 +209,24 @@ TIMER_DEVICE_CALLBACK_MEMBER(xain_state::xain_scanline)
}
}
-WRITE8_MEMBER(xain_state::xainCPUA_bankswitch_w)
+WRITE8_MEMBER(xain_state::cpuA_bankswitch_w)
{
m_pri = data & 0x7;
membank("bank1")->set_entry((data >> 3) & 1);
}
-WRITE8_MEMBER(xain_state::xainCPUB_bankswitch_w)
+WRITE8_MEMBER(xain_state::cpuB_bankswitch_w)
{
membank("bank2")->set_entry(data & 1);
}
-WRITE8_MEMBER(xain_state::xain_sound_command_w)
+WRITE8_MEMBER(xain_state::sound_command_w)
{
soundlatch_byte_w(space,offset,data);
m_audiocpu->set_input_line(M6809_IRQ_LINE, HOLD_LINE);
}
-WRITE8_MEMBER(xain_state::xain_main_irq_w)
+WRITE8_MEMBER(xain_state::main_irq_w)
{
switch (offset)
{
@@ -245,23 +245,23 @@ WRITE8_MEMBER(xain_state::xain_main_irq_w)
}
}
-WRITE8_MEMBER(xain_state::xain_irqA_assert_w)
+WRITE8_MEMBER(xain_state::irqA_assert_w)
{
m_maincpu->set_input_line(M6809_IRQ_LINE, ASSERT_LINE);
}
-WRITE8_MEMBER(xain_state::xain_irqB_clear_w)
+WRITE8_MEMBER(xain_state::irqB_clear_w)
{
m_subcpu->set_input_line(M6809_IRQ_LINE, CLEAR_LINE);
}
-READ8_MEMBER(xain_state::xain_68705_r)
+READ8_MEMBER(xain_state::m68705_r)
{
m_mcu_ready = 1;
return m_from_mcu;
}
-WRITE8_MEMBER(xain_state::xain_68705_w)
+WRITE8_MEMBER(xain_state::m68705_w)
{
m_from_main = data;
m_mcu_accept = 0;
@@ -270,7 +270,7 @@ WRITE8_MEMBER(xain_state::xain_68705_w)
m_mcu->set_input_line(0, ASSERT_LINE);
}
-CUSTOM_INPUT_MEMBER(xain_state::xain_vblank_r)
+CUSTOM_INPUT_MEMBER(xain_state::vblank_r)
{
return m_vblank;
}
@@ -282,27 +282,27 @@ CUSTOM_INPUT_MEMBER(xain_state::xain_vblank_r)
***************************************************************************/
-READ8_MEMBER(xain_state::xain_68705_port_a_r)
+READ8_MEMBER(xain_state::m68705_port_a_r)
{
return (m_port_a_out & m_ddr_a) | (m_port_a_in & ~m_ddr_a);
}
-WRITE8_MEMBER(xain_state::xain_68705_port_a_w)
+WRITE8_MEMBER(xain_state::m68705_port_a_w)
{
m_port_a_out = data;
}
-WRITE8_MEMBER(xain_state::xain_68705_ddr_a_w)
+WRITE8_MEMBER(xain_state::m68705_ddr_a_w)
{
m_ddr_a = data;
}
-READ8_MEMBER(xain_state::xain_68705_port_b_r)
+READ8_MEMBER(xain_state::m68705_port_b_r)
{
return (m_port_b_out & m_ddr_b) | (m_port_b_in & ~m_ddr_b);
}
-WRITE8_MEMBER(xain_state::xain_68705_port_b_w)
+WRITE8_MEMBER(xain_state::m68705_port_b_w)
{
if ((m_ddr_b & 0x02) && (~data & 0x02))
{
@@ -325,12 +325,12 @@ WRITE8_MEMBER(xain_state::xain_68705_port_b_w)
m_port_b_out = data;
}
-WRITE8_MEMBER(xain_state::xain_68705_ddr_b_w)
+WRITE8_MEMBER(xain_state::m68705_ddr_b_w)
{
m_ddr_b = data;
}
-READ8_MEMBER(xain_state::xain_68705_port_c_r)
+READ8_MEMBER(xain_state::m68705_port_c_r)
{
m_port_c_in = 0;
@@ -342,12 +342,12 @@ READ8_MEMBER(xain_state::xain_68705_port_c_r)
return (m_port_c_out & m_ddr_c) | (m_port_c_in & ~m_ddr_c);
}
-WRITE8_MEMBER(xain_state::xain_68705_port_c_w)
+WRITE8_MEMBER(xain_state::m68705_port_c_w)
{
m_port_c_out = data;
}
-WRITE8_MEMBER(xain_state::xain_68705_ddr_c_w)
+WRITE8_MEMBER(xain_state::m68705_ddr_c_w)
{
m_ddr_c = data;
}
@@ -385,26 +385,26 @@ READ8_MEMBER(xain_state::mcu_comm_reset_r)
static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, xain_state )
AM_RANGE(0x0000, 0x1fff) AM_RAM AM_SHARE("share1")
- AM_RANGE(0x2000, 0x27ff) AM_RAM_WRITE(xain_charram_w) AM_SHARE("charram")
- AM_RANGE(0x2800, 0x2fff) AM_RAM_WRITE(xain_bgram1_w) AM_SHARE("bgram1")
- AM_RANGE(0x3000, 0x37ff) AM_RAM_WRITE(xain_bgram0_w) AM_SHARE("bgram0")
+ AM_RANGE(0x2000, 0x27ff) AM_RAM_WRITE(charram_w) AM_SHARE("charram")
+ AM_RANGE(0x2800, 0x2fff) AM_RAM_WRITE(bgram1_w) AM_SHARE("bgram1")
+ AM_RANGE(0x3000, 0x37ff) AM_RAM_WRITE(bgram0_w) AM_SHARE("bgram0")
AM_RANGE(0x3800, 0x397f) AM_RAM AM_SHARE("spriteram")
AM_RANGE(0x3a00, 0x3a00) AM_READ_PORT("P1")
- AM_RANGE(0x3a00, 0x3a01) AM_WRITE(xain_scrollxP1_w)
+ AM_RANGE(0x3a00, 0x3a01) AM_WRITE(scrollxP1_w)
AM_RANGE(0x3a01, 0x3a01) AM_READ_PORT("P2")
AM_RANGE(0x3a02, 0x3a02) AM_READ_PORT("DSW0")
- AM_RANGE(0x3a02, 0x3a03) AM_WRITE(xain_scrollyP1_w)
+ AM_RANGE(0x3a02, 0x3a03) AM_WRITE(scrollyP1_w)
AM_RANGE(0x3a03, 0x3a03) AM_READ_PORT("DSW1")
- AM_RANGE(0x3a04, 0x3a04) AM_READ(xain_68705_r)
- AM_RANGE(0x3a04, 0x3a05) AM_WRITE(xain_scrollxP0_w)
+ AM_RANGE(0x3a04, 0x3a04) AM_READ(m68705_r)
+ AM_RANGE(0x3a04, 0x3a05) AM_WRITE(scrollxP0_w)
AM_RANGE(0x3a05, 0x3a05) AM_READ_PORT("VBLANK")
AM_RANGE(0x3a06, 0x3a06) AM_READ(mcu_comm_reset_r)
- AM_RANGE(0x3a06, 0x3a07) AM_WRITE(xain_scrollyP0_w)
- AM_RANGE(0x3a08, 0x3a08) AM_WRITE(xain_sound_command_w)
- AM_RANGE(0x3a09, 0x3a0c) AM_WRITE(xain_main_irq_w)
- AM_RANGE(0x3a0d, 0x3a0d) AM_WRITE(xain_flipscreen_w)
- AM_RANGE(0x3a0e, 0x3a0e) AM_WRITE(xain_68705_w)
- AM_RANGE(0x3a0f, 0x3a0f) AM_WRITE(xainCPUA_bankswitch_w)
+ AM_RANGE(0x3a06, 0x3a07) AM_WRITE(scrollyP0_w)
+ AM_RANGE(0x3a08, 0x3a08) AM_WRITE(sound_command_w)
+ AM_RANGE(0x3a09, 0x3a0c) AM_WRITE(main_irq_w)
+ AM_RANGE(0x3a0d, 0x3a0d) AM_WRITE(flipscreen_w)
+ AM_RANGE(0x3a0e, 0x3a0e) AM_WRITE(m68705_w)
+ AM_RANGE(0x3a0f, 0x3a0f) AM_WRITE(cpuA_bankswitch_w)
AM_RANGE(0x3c00, 0x3dff) AM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
AM_RANGE(0x3e00, 0x3fff) AM_DEVWRITE("palette", palette_device, write_ext) AM_SHARE("palette_ext")
AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank1")
@@ -413,21 +413,21 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( cpu_map_B, AS_PROGRAM, 8, xain_state )
AM_RANGE(0x0000, 0x1fff) AM_RAM AM_SHARE("share1")
- AM_RANGE(0x2000, 0x2000) AM_WRITE(xain_irqA_assert_w)
- AM_RANGE(0x2800, 0x2800) AM_WRITE(xain_irqB_clear_w)
- AM_RANGE(0x3000, 0x3000) AM_WRITE(xainCPUB_bankswitch_w)
+ AM_RANGE(0x2000, 0x2000) AM_WRITE(irqA_assert_w)
+ AM_RANGE(0x2800, 0x2800) AM_WRITE(irqB_clear_w)
+ AM_RANGE(0x3000, 0x3000) AM_WRITE(cpuB_bankswitch_w)
AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank2")
AM_RANGE(0x8000, 0xffff) AM_ROM
ADDRESS_MAP_END
static ADDRESS_MAP_START( mcu_map, AS_PROGRAM, 8, xain_state )
ADDRESS_MAP_GLOBAL_MASK(0x7ff)
- AM_RANGE(0x0000, 0x0000) AM_READWRITE(xain_68705_port_a_r, xain_68705_port_a_w)
- AM_RANGE(0x0001, 0x0001) AM_READWRITE(xain_68705_port_b_r, xain_68705_port_b_w)
- AM_RANGE(0x0002, 0x0002) AM_READWRITE(xain_68705_port_c_r, xain_68705_port_c_w)
- AM_RANGE(0x0004, 0x0004) AM_WRITE(xain_68705_ddr_a_w)
- AM_RANGE(0x0005, 0x0005) AM_WRITE(xain_68705_ddr_b_w)
- AM_RANGE(0x0006, 0x0006) AM_WRITE(xain_68705_ddr_c_w)
+ AM_RANGE(0x0000, 0x0000) AM_READWRITE(m68705_port_a_r, m68705_port_a_w)
+ AM_RANGE(0x0001, 0x0001) AM_READWRITE(m68705_port_b_r, m68705_port_b_w)
+ AM_RANGE(0x0002, 0x0002) AM_READWRITE(m68705_port_c_r, m68705_port_c_w)
+ AM_RANGE(0x0004, 0x0004) AM_WRITE(m68705_ddr_a_w)
+ AM_RANGE(0x0005, 0x0005) AM_WRITE(m68705_ddr_b_w)
+ AM_RANGE(0x0006, 0x0006) AM_WRITE(m68705_ddr_c_w)
// AM_RANGE(0x0008, 0x0008) AM_READWRITE(m68705_tdr_r, m68705_tdr_w)
// AM_RANGE(0x0009, 0x0009) AM_READWRITE(m68705_tcr_r, m68705_tcr_w)
AM_RANGE(0x0010, 0x007f) AM_RAM
@@ -513,8 +513,8 @@ static INPUT_PORTS_START( xsleena )
PORT_START("VBLANK")
PORT_BIT( 0x03, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 )
- PORT_BIT( 0x18, IP_ACTIVE_HIGH, IPT_SPECIAL) PORT_CUSTOM_MEMBER(DEVICE_SELF, xain_state,mcu_status_r, NULL)
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, xain_state,xain_vblank_r, NULL) /* VBLANK */
+ PORT_BIT( 0x18, IP_ACTIVE_HIGH, IPT_SPECIAL) PORT_CUSTOM_MEMBER(DEVICE_SELF, xain_state, mcu_status_r, NULL)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, xain_state, vblank_r, NULL) /* VBLANK */
PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END
@@ -549,18 +549,31 @@ static GFXDECODE_START( xain )
GFXDECODE_END
-/* handler called by the 2203 emulator when the internal timers cause an IRQ */
-WRITE_LINE_MEMBER(xain_state::irqhandler)
-{
- m_audiocpu->set_input_line(M6809_FIRQ_LINE, state ? ASSERT_LINE : CLEAR_LINE);
-}
-
void xain_state::machine_start()
{
membank("bank1")->configure_entries(0, 2, memregion("maincpu")->base() + 0x4000, 0xc000);
membank("bank2")->configure_entries(0, 2, memregion("sub")->base() + 0x4000, 0xc000);
membank("bank1")->set_entry(0);
membank("bank2")->set_entry(0);
+
+ save_item(NAME(m_vblank));
+
+ if (m_mcu)
+ {
+ save_item(NAME(m_from_main));
+ save_item(NAME(m_from_mcu));
+ save_item(NAME(m_ddr_a));
+ save_item(NAME(m_ddr_b));
+ save_item(NAME(m_ddr_c));
+ save_item(NAME(m_port_a_out));
+ save_item(NAME(m_port_b_out));
+ save_item(NAME(m_port_c_out));
+ save_item(NAME(m_port_a_in));
+ save_item(NAME(m_port_b_in));
+ save_item(NAME(m_port_c_in));
+ save_item(NAME(m_mcu_ready));
+ save_item(NAME(m_mcu_accept));
+ }
}
static MACHINE_CONFIG_START( xsleena, xain_state )
@@ -568,7 +581,7 @@ static MACHINE_CONFIG_START( xsleena, xain_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M6809, CPU_CLOCK)
MCFG_CPU_PROGRAM_MAP(main_map)
- MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", xain_state, xain_scanline, "screen", 0, 1)
+ MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", xain_state, scanline, "screen", 0, 1)
MCFG_CPU_ADD("sub", M6809, CPU_CLOCK)
MCFG_CPU_PROGRAM_MAP(cpu_map_B)
@@ -585,7 +598,7 @@ static MACHINE_CONFIG_START( xsleena, xain_state )
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, 384, 0, 256, 272, 8, 248) /* based on ddragon driver */
- MCFG_SCREEN_UPDATE_DRIVER(xain_state, screen_update_xain)
+ MCFG_SCREEN_UPDATE_DRIVER(xain_state, screen_update)
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", xain)
@@ -596,7 +609,7 @@ static MACHINE_CONFIG_START( xsleena, xain_state )
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("ym1", YM2203, MCU_CLOCK)
- MCFG_YM2203_IRQ_HANDLER(WRITELINE(xain_state, irqhandler))
+ MCFG_YM2203_IRQ_HANDLER(INPUTLINE("audiocpu", M6809_FIRQ_LINE))
MCFG_SOUND_ROUTE(0, "mono", 0.50)
MCFG_SOUND_ROUTE(1, "mono", 0.50)
MCFG_SOUND_ROUTE(2, "mono", 0.50)
@@ -835,7 +848,7 @@ ROM_START( xsleenab )
ROM_END
-GAME( 1986, xsleena, 0, xsleena, xsleena, driver_device, 0, ROT0, "Technos Japan (Taito license)", "Xain'd Sleena (World)", 0 )
-GAME( 1986, xsleenaj, xsleena, xsleena, xsleena, driver_device, 0, ROT0, "Technos Japan", "Xain'd Sleena (Japan)", 0 )
-GAME( 1986, solrwarr, xsleena, xsleena, xsleena, driver_device, 0, ROT0, "Technos Japan (Taito / Memetron license)", "Solar-Warrior (US)", 0 )
-GAME( 1986, xsleenab, xsleena, xsleenab, xsleena, driver_device, 0, ROT0, "bootleg", "Xain'd Sleena (bootleg)", 0 )
+GAME( 1986, xsleena, 0, xsleena, xsleena, driver_device, 0, ROT0, "Technos Japan (Taito license)", "Xain'd Sleena (World)", GAME_SUPPORTS_SAVE )
+GAME( 1986, xsleenaj, xsleena, xsleena, xsleena, driver_device, 0, ROT0, "Technos Japan", "Xain'd Sleena (Japan)", GAME_SUPPORTS_SAVE )
+GAME( 1986, solrwarr, xsleena, xsleena, xsleena, driver_device, 0, ROT0, "Technos Japan (Taito / Memetron license)", "Solar-Warrior (US)", GAME_SUPPORTS_SAVE )
+GAME( 1986, xsleenab, xsleena, xsleenab, xsleena, driver_device, 0, ROT0, "bootleg", "Xain'd Sleena (bootleg)", GAME_SUPPORTS_SAVE )
diff --git a/src/mame/includes/shuuz.h b/src/mame/includes/shuuz.h
index 8cb7a099609..715bf59a6ef 100644
--- a/src/mame/includes/shuuz.h
+++ b/src/mame/includes/shuuz.h
@@ -19,14 +19,18 @@ public:
required_device<atari_vad_device> m_vad;
int m_cur[2];
+
virtual void update_interrupts();
+
DECLARE_WRITE16_MEMBER(latch_w);
DECLARE_READ16_MEMBER(leta_r);
DECLARE_READ16_MEMBER(special_port0_r);
+
+ virtual void machine_start();
+
TILE_GET_INFO_MEMBER(get_playfield_tile_info);
- DECLARE_MACHINE_START(shuuz);
- DECLARE_VIDEO_START(shuuz);
- UINT32 screen_update_shuuz(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+
+ UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
static const atari_motion_objects_config s_mob_config;
};
diff --git a/src/mame/includes/xain.h b/src/mame/includes/xain.h
index cc4d4bc1d79..364134fc3ef 100644
--- a/src/mame/includes/xain.h
+++ b/src/mame/includes/xain.h
@@ -3,17 +3,30 @@ class xain_state : public driver_device
public:
xain_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
- m_charram(*this, "charram"),
- m_bgram0(*this, "bgram0"),
- m_bgram1(*this, "bgram1"),
- m_spriteram(*this, "spriteram"),
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_subcpu(*this, "sub"),
m_mcu(*this, "mcu"),
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
- m_palette(*this, "palette") { }
+ m_palette(*this, "palette"),
+ m_charram(*this, "charram"),
+ m_bgram0(*this, "bgram0"),
+ m_bgram1(*this, "bgram1"),
+ m_spriteram(*this, "spriteram") { }
+
+ required_device<cpu_device> m_maincpu;
+ required_device<cpu_device> m_audiocpu;
+ required_device<cpu_device> m_subcpu;
+ optional_device<cpu_device> m_mcu;
+ required_device<gfxdecode_device> m_gfxdecode;
+ required_device<screen_device> m_screen;
+ required_device<palette_device> m_palette;
+
+ required_shared_ptr<UINT8> m_charram;
+ required_shared_ptr<UINT8> m_bgram0;
+ required_shared_ptr<UINT8> m_bgram1;
+ required_shared_ptr<UINT8> m_spriteram;
int m_vblank;
int m_from_main;
@@ -29,9 +42,6 @@ public:
UINT8 m_port_c_in;
int m_mcu_ready;
int m_mcu_accept;
- required_shared_ptr<UINT8> m_charram;
- required_shared_ptr<UINT8> m_bgram0;
- required_shared_ptr<UINT8> m_bgram1;
UINT8 m_pri;
tilemap_t *m_char_tilemap;
tilemap_t *m_bgram0_tilemap;
@@ -40,51 +50,48 @@ public:
UINT8 m_scrollyP0[2];
UINT8 m_scrollxP1[2];
UINT8 m_scrollyP1[2];
- required_shared_ptr<UINT8> m_spriteram;
- DECLARE_WRITE8_MEMBER(xainCPUA_bankswitch_w);
- DECLARE_WRITE8_MEMBER(xainCPUB_bankswitch_w);
- DECLARE_WRITE8_MEMBER(xain_sound_command_w);
- DECLARE_WRITE8_MEMBER(xain_main_irq_w);
- DECLARE_WRITE8_MEMBER(xain_irqA_assert_w);
- DECLARE_WRITE8_MEMBER(xain_irqB_clear_w);
- DECLARE_READ8_MEMBER(xain_68705_r);
- DECLARE_WRITE8_MEMBER(xain_68705_w);
- DECLARE_READ8_MEMBER(xain_68705_port_a_r);
- DECLARE_WRITE8_MEMBER(xain_68705_port_a_w);
- DECLARE_WRITE8_MEMBER(xain_68705_ddr_a_w);
- DECLARE_READ8_MEMBER(xain_68705_port_b_r);
- DECLARE_WRITE8_MEMBER(xain_68705_port_b_w);
- DECLARE_WRITE8_MEMBER(xain_68705_ddr_b_w);
- DECLARE_READ8_MEMBER(xain_68705_port_c_r);
- DECLARE_WRITE8_MEMBER(xain_68705_port_c_w);
- DECLARE_WRITE8_MEMBER(xain_68705_ddr_c_w);
+
+ DECLARE_WRITE8_MEMBER(cpuA_bankswitch_w);
+ DECLARE_WRITE8_MEMBER(cpuB_bankswitch_w);
+ DECLARE_WRITE8_MEMBER(sound_command_w);
+ DECLARE_WRITE8_MEMBER(main_irq_w);
+ DECLARE_WRITE8_MEMBER(irqA_assert_w);
+ DECLARE_WRITE8_MEMBER(irqB_clear_w);
+ DECLARE_READ8_MEMBER(m68705_r);
+ DECLARE_WRITE8_MEMBER(m68705_w);
+ DECLARE_READ8_MEMBER(m68705_port_a_r);
+ DECLARE_WRITE8_MEMBER(m68705_port_a_w);
+ DECLARE_WRITE8_MEMBER(m68705_ddr_a_w);
+ DECLARE_READ8_MEMBER(m68705_port_b_r);
+ DECLARE_WRITE8_MEMBER(m68705_port_b_w);
+ DECLARE_WRITE8_MEMBER(m68705_ddr_b_w);
+ DECLARE_READ8_MEMBER(m68705_port_c_r);
+ DECLARE_WRITE8_MEMBER(m68705_port_c_w);
+ DECLARE_WRITE8_MEMBER(m68705_ddr_c_w);
DECLARE_READ8_MEMBER(mcu_comm_reset_r);
- DECLARE_WRITE8_MEMBER(xain_bgram0_w);
- DECLARE_WRITE8_MEMBER(xain_bgram1_w);
- DECLARE_WRITE8_MEMBER(xain_charram_w);
- DECLARE_WRITE8_MEMBER(xain_scrollxP0_w);
- DECLARE_WRITE8_MEMBER(xain_scrollyP0_w);
- DECLARE_WRITE8_MEMBER(xain_scrollxP1_w);
- DECLARE_WRITE8_MEMBER(xain_scrollyP1_w);
- DECLARE_WRITE8_MEMBER(xain_flipscreen_w);
- DECLARE_CUSTOM_INPUT_MEMBER(xain_vblank_r);
+ DECLARE_WRITE8_MEMBER(bgram0_w);
+ DECLARE_WRITE8_MEMBER(bgram1_w);
+ DECLARE_WRITE8_MEMBER(charram_w);
+ DECLARE_WRITE8_MEMBER(scrollxP0_w);
+ DECLARE_WRITE8_MEMBER(scrollyP0_w);
+ DECLARE_WRITE8_MEMBER(scrollxP1_w);
+ DECLARE_WRITE8_MEMBER(scrollyP1_w);
+ DECLARE_WRITE8_MEMBER(flipscreen_w);
+
+ DECLARE_CUSTOM_INPUT_MEMBER(vblank_r);
DECLARE_CUSTOM_INPUT_MEMBER(mcu_status_r);
+
TILEMAP_MAPPER_MEMBER(back_scan);
TILE_GET_INFO_MEMBER(get_bgram0_tile_info);
TILE_GET_INFO_MEMBER(get_bgram1_tile_info);
TILE_GET_INFO_MEMBER(get_char_tile_info);
+
virtual void machine_start();
virtual void video_start();
- UINT32 screen_update_xain(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- TIMER_DEVICE_CALLBACK_MEMBER(xain_scanline);
+
+ UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect);
inline int scanline_to_vcount(int scanline);
- DECLARE_WRITE_LINE_MEMBER(irqhandler);
- required_device<cpu_device> m_maincpu;
- required_device<cpu_device> m_audiocpu;
- required_device<cpu_device> m_subcpu;
- optional_device<cpu_device> m_mcu;
- required_device<gfxdecode_device> m_gfxdecode;
- required_device<screen_device> m_screen;
- required_device<palette_device> m_palette;
+
+ TIMER_DEVICE_CALLBACK_MEMBER(scanline);
};
diff --git a/src/mame/video/shuuz.c b/src/mame/video/shuuz.c
index c3a3d7e649d..490521829ae 100644
--- a/src/mame/video/shuuz.c
+++ b/src/mame/video/shuuz.c
@@ -68,11 +68,6 @@ const atari_motion_objects_config shuuz_state::s_mob_config =
0 /* resulting value to indicate "special" */
};
-VIDEO_START_MEMBER(shuuz_state,shuuz)
-{
-}
-
-
/*************************************
*
@@ -80,7 +75,7 @@ VIDEO_START_MEMBER(shuuz_state,shuuz)
*
*************************************/
-UINT32 shuuz_state::screen_update_shuuz(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+UINT32 shuuz_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
// start drawing
m_vad->mob()->draw_async(cliprect);
diff --git a/src/mame/video/xain.c b/src/mame/video/xain.c
index 68a19c726ec..fdd210c0640 100644
--- a/src/mame/video/xain.c
+++ b/src/mame/video/xain.c
@@ -89,6 +89,12 @@ void xain_state::video_start()
m_bgram0_tilemap->set_transparent_pen(0);
m_bgram1_tilemap->set_transparent_pen(0);
m_char_tilemap->set_transparent_pen(0);
+
+ save_item(NAME(m_pri));
+ save_item(NAME(m_scrollxP0));
+ save_item(NAME(m_scrollyP0));
+ save_item(NAME(m_scrollxP1));
+ save_item(NAME(m_scrollyP1));
}
@@ -99,50 +105,50 @@ void xain_state::video_start()
***************************************************************************/
-WRITE8_MEMBER(xain_state::xain_bgram0_w)
+WRITE8_MEMBER(xain_state::bgram0_w)
{
m_bgram0[offset] = data;
m_bgram0_tilemap->mark_tile_dirty(offset & 0x3ff);
}
-WRITE8_MEMBER(xain_state::xain_bgram1_w)
+WRITE8_MEMBER(xain_state::bgram1_w)
{
m_bgram1[offset] = data;
m_bgram1_tilemap->mark_tile_dirty(offset & 0x3ff);
}
-WRITE8_MEMBER(xain_state::xain_charram_w)
+WRITE8_MEMBER(xain_state::charram_w)
{
m_charram[offset] = data;
m_char_tilemap->mark_tile_dirty(offset & 0x3ff);
}
-WRITE8_MEMBER(xain_state::xain_scrollxP0_w)
+WRITE8_MEMBER(xain_state::scrollxP0_w)
{
m_scrollxP0[offset] = data;
m_bgram0_tilemap->set_scrollx(0, m_scrollxP0[0]|(m_scrollxP0[1]<<8));
}
-WRITE8_MEMBER(xain_state::xain_scrollyP0_w)
+WRITE8_MEMBER(xain_state::scrollyP0_w)
{
m_scrollyP0[offset] = data;
m_bgram0_tilemap->set_scrolly(0, m_scrollyP0[0]|(m_scrollyP0[1]<<8));
}
-WRITE8_MEMBER(xain_state::xain_scrollxP1_w)
+WRITE8_MEMBER(xain_state::scrollxP1_w)
{
m_scrollxP1[offset] = data;
m_bgram1_tilemap->set_scrollx(0, m_scrollxP1[0]|(m_scrollxP1[1]<<8));
}
-WRITE8_MEMBER(xain_state::xain_scrollyP1_w)
+WRITE8_MEMBER(xain_state::scrollyP1_w)
{
m_scrollyP1[offset] = data;
m_bgram1_tilemap->set_scrolly(0, m_scrollyP1[0]|(m_scrollyP1[1]<<8));
}
-WRITE8_MEMBER(xain_state::xain_flipscreen_w)
+WRITE8_MEMBER(xain_state::flipscreen_w)
{
flip_screen_set(data & 1);
}
@@ -156,19 +162,16 @@ WRITE8_MEMBER(xain_state::xain_flipscreen_w)
void xain_state::draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect)
{
- UINT8 *spriteram = m_spriteram;
- int offs;
-
- for (offs = 0; offs < m_spriteram.bytes();offs += 4)
+ for (int offs = 0; offs < m_spriteram.bytes();offs += 4)
{
int sx,sy,flipx,flipy;
- int attr = spriteram[offs+1];
- int numtile = spriteram[offs+2] | ((attr & 7) << 8);
+ int attr = m_spriteram[offs+1];
+ int numtile = m_spriteram[offs+2] | ((attr & 7) << 8);
int color = (attr & 0x38) >> 3;
- sx = 238 - spriteram[offs+3];
+ sx = 238 - m_spriteram[offs+3];
if (sx <= -7) sx += 256;
- sy = 240 - spriteram[offs];
+ sy = 240 - m_spriteram[offs];
if (sy <= -7) sy += 256;
flipx = attr & 0x40;
flipy = 0;
@@ -204,7 +207,7 @@ void xain_state::draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect)
}
}
-UINT32 xain_state::screen_update_xain(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+UINT32 xain_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
switch (m_pri&0x7)
{