diff options
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 |
commit | 2c57d68ec7fce9b17d5c387493a3b5f9996f219f (patch) | |
tree | ce32aa3f45418dc4dc3b55fdf07e1881b0e8b810 | |
parent | 7e02382d0ad83c7351bfb68644419ec029668e93 (diff) |
shougi.c, shuuz.c, xain.c: added save state support (nw)
-rw-r--r-- | src/mame/drivers/shougi.c | 77 | ||||
-rw-r--r-- | src/mame/drivers/shuuz.c | 12 | ||||
-rw-r--r-- | src/mame/drivers/xain.c | 125 | ||||
-rw-r--r-- | src/mame/includes/shuuz.h | 10 | ||||
-rw-r--r-- | src/mame/includes/xain.h | 97 | ||||
-rw-r--r-- | src/mame/video/shuuz.c | 7 | ||||
-rw-r--r-- | src/mame/video/xain.c | 37 |
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) { |