summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Ivan Vangelista <mesgnet@yahoo.it>2015-03-31 20:50:11 +0200
committer Ivan Vangelista <mesgnet@yahoo.it>2015-03-31 20:50:11 +0200
commit2123f510df1b623ef147e9274f5768bf33a9b7f1 (patch)
tree617683920dfc52f0ad00fe89101aafdb1a86d95d
parent73ee1e9042b35d4872b95c47179b7cc73ad9594b (diff)
niyanpai.c: added save state support, configured banking and removed some trampolines (nw)
-rw-r--r--src/mame/drivers/niyanpai.c213
-rw-r--r--src/mame/includes/niyanpai.h94
-rw-r--r--src/mame/video/niyanpai.c81
3 files changed, 199 insertions, 189 deletions
diff --git a/src/mame/drivers/niyanpai.c b/src/mame/drivers/niyanpai.c
index 0ed984c085a..c7dda71326e 100644
--- a/src/mame/drivers/niyanpai.c
+++ b/src/mame/drivers/niyanpai.c
@@ -44,58 +44,21 @@ Memo:
#include "includes/niyanpai.h"
-void niyanpai_state::niyanpai_soundbank_w(int data)
-{
- UINT8 *SNDROM = memregion("audiocpu")->base();
-
- membank("bank1")->set_base(&SNDROM[0x08000 + (0x8000 * (data & 0x03))]);
-}
-
-READ8_MEMBER(niyanpai_state::niyanpai_sound_r)
-{
- return soundlatch_byte_r(space, 0);
-}
-
-WRITE16_MEMBER(niyanpai_state::niyanpai_sound_w)
+WRITE16_MEMBER(niyanpai_state::sound_w)
{
soundlatch_byte_w(space, 0, ((data >> 8) & 0xff));
}
-WRITE8_MEMBER(niyanpai_state::niyanpai_soundclr_w)
+WRITE8_MEMBER(niyanpai_state::soundbank_w)
{
- soundlatch_clear_byte_w(space, 0, 0);
+ membank("soundbank")->set_entry(data & 0x03);
}
-
-READ8_MEMBER(niyanpai_state::cpu_portd_r)
+WRITE8_MEMBER(niyanpai_state::soundlatch_clear_w)
{
- return niyanpai_sound_r(space, 0);
+ if (!(data & 0x01)) soundlatch_clear_byte_w(space, 0, 0);
}
-WRITE8_MEMBER(niyanpai_state::cpu_porta_w)
-{
- niyanpai_soundbank_w(data & 0x03);
-}
-
-WRITE8_MEMBER(niyanpai_state::cpu_portb_w)
-{
- m_dac1->write_unsigned8(data);
-}
-
-WRITE8_MEMBER(niyanpai_state::cpu_portc_w)
-{
- m_dac2->write_unsigned8(data);
-}
-
-WRITE8_MEMBER(niyanpai_state::cpu_porte_w)
-{
- if (!(data & 0x01)) niyanpai_soundclr_w(space, 0, 0);
-}
-
-
-void niyanpai_state::machine_reset()
-{
-}
DRIVER_INIT_MEMBER(niyanpai_state,niyanpai)
{
@@ -105,14 +68,15 @@ DRIVER_INIT_MEMBER(niyanpai_state,niyanpai)
SNDROM[0x0213] = 0x00; // DI -> NOP
// initialize sound rom bank
- niyanpai_soundbank_w(0);
+ membank("soundbank")->configure_entries(0, 2, memregion("audiocpu")->base() + 0x8000, 0x8000);
+ membank("soundbank")->set_entry(0);
// initialize out coin flag (musobana)
m_musobana_outcoin_flag = 1;
}
-READ16_MEMBER(niyanpai_state::niyanpai_dipsw_r)
+READ16_MEMBER(niyanpai_state::dipsw_r)
{
UINT8 dipsw_a, dipsw_b;
@@ -129,6 +93,13 @@ READ16_MEMBER(niyanpai_state::niyanpai_dipsw_r)
return ((dipsw_a << 8) | dipsw_b);
}
+MACHINE_START_MEMBER(niyanpai_state, musobana)
+{
+ save_item(NAME(m_motor_on));
+ save_item(NAME(m_musobana_inputport));
+ save_item(NAME(m_musobana_outcoin_flag));
+}
+
READ16_MEMBER(niyanpai_state::musobana_inputport_0_r)
{
int portdata;
@@ -177,33 +148,33 @@ static ADDRESS_MAP_START( niyanpai_map, AS_PROGRAM, 16, niyanpai_state )
AM_RANGE(0x000000, 0x03ffff) AM_ROM
AM_RANGE(0x040000, 0x040fff) AM_RAM AM_SHARE("nvram")
- AM_RANGE(0x0a0000, 0x0a08ff) AM_READWRITE(niyanpai_palette_r,niyanpai_palette_w)
+ AM_RANGE(0x0a0000, 0x0a08ff) AM_READWRITE(palette_r,palette_w)
AM_RANGE(0x0a0900, 0x0a11ff) AM_RAM // palette work ram?
AM_RANGE(0x0bf800, 0x0bffff) AM_RAM
- AM_RANGE(0x200000, 0x200001) AM_WRITE(niyanpai_sound_w)
+ AM_RANGE(0x200000, 0x200001) AM_WRITE(sound_w)
AM_RANGE(0x200200, 0x200201) AM_WRITENOP // unknown
AM_RANGE(0x240000, 0x240009) AM_WRITENOP // unknown
AM_RANGE(0x240200, 0x2403ff) AM_WRITENOP // unknown
- AM_RANGE(0x240400, 0x240403) AM_READ8(niyanpai_blitter_0_r, 0x00ff)
- AM_RANGE(0x240400, 0x24041f) AM_WRITE8(niyanpai_blitter_0_w, 0x00ff)
- AM_RANGE(0x240420, 0x24043f) AM_WRITE8(niyanpai_clut_0_w, 0x00ff)
- AM_RANGE(0x240600, 0x240603) AM_READ8(niyanpai_blitter_1_r, 0x00ff)
- AM_RANGE(0x240600, 0x24061f) AM_WRITE8(niyanpai_blitter_1_w, 0x00ff)
- AM_RANGE(0x240620, 0x24063f) AM_WRITE8(niyanpai_clut_1_w, 0x00ff)
- AM_RANGE(0x240800, 0x240803) AM_READ8(niyanpai_blitter_2_r, 0x00ff)
- AM_RANGE(0x240800, 0x24081f) AM_WRITE8(niyanpai_blitter_2_w, 0x00ff)
- AM_RANGE(0x240820, 0x24083f) AM_WRITE8(niyanpai_clut_2_w, 0x00ff)
- AM_RANGE(0x280000, 0x280001) AM_READ(niyanpai_dipsw_r)
+ AM_RANGE(0x240400, 0x240403) AM_READ8(blitter_0_r, 0x00ff)
+ AM_RANGE(0x240400, 0x24041f) AM_WRITE8(blitter_0_w, 0x00ff)
+ AM_RANGE(0x240420, 0x24043f) AM_WRITE8(clut_0_w, 0x00ff)
+ AM_RANGE(0x240600, 0x240603) AM_READ8(blitter_1_r, 0x00ff)
+ AM_RANGE(0x240600, 0x24061f) AM_WRITE8(blitter_1_w, 0x00ff)
+ AM_RANGE(0x240620, 0x24063f) AM_WRITE8(clut_1_w, 0x00ff)
+ AM_RANGE(0x240800, 0x240803) AM_READ8(blitter_2_r, 0x00ff)
+ AM_RANGE(0x240800, 0x24081f) AM_WRITE8(blitter_2_w, 0x00ff)
+ AM_RANGE(0x240820, 0x24083f) AM_WRITE8(clut_2_w, 0x00ff)
+ AM_RANGE(0x280000, 0x280001) AM_READ(dipsw_r)
AM_RANGE(0x280200, 0x280201) AM_READ_PORT("P1_P2")
AM_RANGE(0x280400, 0x280401) AM_READ_PORT("SYSTEM")
- AM_RANGE(0x240a00, 0x240a01) AM_WRITE8(niyanpai_clutsel_0_w, 0x00ff)
- AM_RANGE(0x240c00, 0x240c01) AM_WRITE8(niyanpai_clutsel_1_w, 0x00ff)
- AM_RANGE(0x240e00, 0x240e01) AM_WRITE8(niyanpai_clutsel_2_w, 0x00ff)
+ AM_RANGE(0x240a00, 0x240a01) AM_WRITE8(clutsel_0_w, 0x00ff)
+ AM_RANGE(0x240c00, 0x240c01) AM_WRITE8(clutsel_1_w, 0x00ff)
+ AM_RANGE(0x240e00, 0x240e01) AM_WRITE8(clutsel_2_w, 0x00ff)
AM_RANGE(0xfffc00, 0xffffff) AM_DEVREADWRITE("tmp68301", tmp68301_device, regs_r, regs_w) // TMP68301 Registers
ADDRESS_MAP_END
@@ -212,34 +183,34 @@ static ADDRESS_MAP_START( musobana_map, AS_PROGRAM, 16, niyanpai_state )
AM_RANGE(0x000000, 0x03ffff) AM_ROM
AM_RANGE(0x040000, 0x040fff) AM_RAM
- AM_RANGE(0x0a0000, 0x0a08ff) AM_READWRITE(niyanpai_palette_r,niyanpai_palette_w)
+ AM_RANGE(0x0a0000, 0x0a08ff) AM_READWRITE(palette_r,palette_w)
AM_RANGE(0x0a0900, 0x0a11ff) AM_RAM // palette work ram?
AM_RANGE(0x0a8000, 0x0a87ff) AM_RAM AM_SHARE("nvram")
AM_RANGE(0x0bf800, 0x0bffff) AM_RAM
- AM_RANGE(0x200000, 0x200001) AM_WRITE(niyanpai_sound_w)
+ AM_RANGE(0x200000, 0x200001) AM_WRITE(sound_w)
AM_RANGE(0x200200, 0x200201) AM_WRITE(musobana_inputport_w) // inputport select
AM_RANGE(0x240000, 0x240009) AM_WRITENOP // unknown
AM_RANGE(0x240200, 0x2403ff) AM_WRITENOP // unknown
- AM_RANGE(0x240400, 0x240403) AM_READ8(niyanpai_blitter_0_r, 0x00ff)
- AM_RANGE(0x240400, 0x24041f) AM_WRITE8(niyanpai_blitter_0_w, 0x00ff)
- AM_RANGE(0x240420, 0x24043f) AM_WRITE8(niyanpai_clut_0_w, 0x00ff)
+ AM_RANGE(0x240400, 0x240403) AM_READ8(blitter_0_r, 0x00ff)
+ AM_RANGE(0x240400, 0x24041f) AM_WRITE8(blitter_0_w, 0x00ff)
+ AM_RANGE(0x240420, 0x24043f) AM_WRITE8(clut_0_w, 0x00ff)
- AM_RANGE(0x240600, 0x240603) AM_READ8(niyanpai_blitter_1_r, 0x00ff)
- AM_RANGE(0x240600, 0x24061f) AM_WRITE8(niyanpai_blitter_1_w, 0x00ff)
- AM_RANGE(0x240620, 0x24063f) AM_WRITE8(niyanpai_clut_1_w, 0x00ff)
+ AM_RANGE(0x240600, 0x240603) AM_READ8(blitter_1_r, 0x00ff)
+ AM_RANGE(0x240600, 0x24061f) AM_WRITE8(blitter_1_w, 0x00ff)
+ AM_RANGE(0x240620, 0x24063f) AM_WRITE8(clut_1_w, 0x00ff)
- AM_RANGE(0x240800, 0x240803) AM_READ8(niyanpai_blitter_2_r, 0x00ff)
- AM_RANGE(0x240800, 0x24081f) AM_WRITE8(niyanpai_blitter_2_w, 0x00ff)
- AM_RANGE(0x240820, 0x24083f) AM_WRITE8(niyanpai_clut_2_w, 0x00ff)
- AM_RANGE(0x240a00, 0x240a01) AM_WRITE8(niyanpai_clutsel_0_w, 0x00ff)
- AM_RANGE(0x240c00, 0x240c01) AM_WRITE8(niyanpai_clutsel_1_w, 0x00ff)
- AM_RANGE(0x240e00, 0x240e01) AM_WRITE8(niyanpai_clutsel_2_w, 0x00ff)
+ AM_RANGE(0x240800, 0x240803) AM_READ8(blitter_2_r, 0x00ff)
+ AM_RANGE(0x240800, 0x24081f) AM_WRITE8(blitter_2_w, 0x00ff)
+ AM_RANGE(0x240820, 0x24083f) AM_WRITE8(clut_2_w, 0x00ff)
+ AM_RANGE(0x240a00, 0x240a01) AM_WRITE8(clutsel_0_w, 0x00ff)
+ AM_RANGE(0x240c00, 0x240c01) AM_WRITE8(clutsel_1_w, 0x00ff)
+ AM_RANGE(0x240e00, 0x240e01) AM_WRITE8(clutsel_2_w, 0x00ff)
- AM_RANGE(0x280000, 0x280001) AM_READ(niyanpai_dipsw_r)
+ AM_RANGE(0x280000, 0x280001) AM_READ(dipsw_r)
AM_RANGE(0x280200, 0x280201) AM_READ(musobana_inputport_0_r)
AM_RANGE(0x280400, 0x280401) AM_READ_PORT("SYSTEM")
@@ -250,36 +221,36 @@ static ADDRESS_MAP_START( mhhonban_map, AS_PROGRAM, 16, niyanpai_state )
AM_RANGE(0x000000, 0x03ffff) AM_ROM
AM_RANGE(0x040000, 0x040fff) AM_RAM
- AM_RANGE(0x060000, 0x0608ff) AM_READWRITE(niyanpai_palette_r,niyanpai_palette_w)
+ AM_RANGE(0x060000, 0x0608ff) AM_READWRITE(palette_r,palette_w)
AM_RANGE(0x060900, 0x0611ff) AM_RAM // palette work ram?
AM_RANGE(0x07f800, 0x07ffff) AM_RAM
AM_RANGE(0x0a8000, 0x0a87ff) AM_RAM AM_SHARE("nvram")
AM_RANGE(0x0bf000, 0x0bffff) AM_RAM
- AM_RANGE(0x200000, 0x200001) AM_WRITE(niyanpai_sound_w)
+ AM_RANGE(0x200000, 0x200001) AM_WRITE(sound_w)
AM_RANGE(0x200200, 0x200201) AM_WRITE(musobana_inputport_w) // inputport select
AM_RANGE(0x240000, 0x240009) AM_WRITENOP // unknown
AM_RANGE(0x240200, 0x2403ff) AM_WRITENOP // unknown
- AM_RANGE(0x240400, 0x240403) AM_READ8(niyanpai_blitter_0_r, 0x00ff)
- AM_RANGE(0x240400, 0x24041f) AM_WRITE8(niyanpai_blitter_0_w, 0x00ff)
- AM_RANGE(0x240420, 0x24043f) AM_WRITE8(niyanpai_clut_0_w, 0x00ff)
+ AM_RANGE(0x240400, 0x240403) AM_READ8(blitter_0_r, 0x00ff)
+ AM_RANGE(0x240400, 0x24041f) AM_WRITE8(blitter_0_w, 0x00ff)
+ AM_RANGE(0x240420, 0x24043f) AM_WRITE8(clut_0_w, 0x00ff)
- AM_RANGE(0x240600, 0x240603) AM_READ8(niyanpai_blitter_1_r, 0x00ff)
- AM_RANGE(0x240600, 0x24061f) AM_WRITE8(niyanpai_blitter_1_w, 0x00ff)
- AM_RANGE(0x240620, 0x24063f) AM_WRITE8(niyanpai_clut_1_w, 0x00ff)
+ AM_RANGE(0x240600, 0x240603) AM_READ8(blitter_1_r, 0x00ff)
+ AM_RANGE(0x240600, 0x24061f) AM_WRITE8(blitter_1_w, 0x00ff)
+ AM_RANGE(0x240620, 0x24063f) AM_WRITE8(clut_1_w, 0x00ff)
- AM_RANGE(0x240800, 0x240803) AM_READ8(niyanpai_blitter_2_r, 0x00ff)
- AM_RANGE(0x240800, 0x24081f) AM_WRITE8(niyanpai_blitter_2_w, 0x00ff)
- AM_RANGE(0x240820, 0x24083f) AM_WRITE8(niyanpai_clut_2_w, 0x00ff)
+ AM_RANGE(0x240800, 0x240803) AM_READ8(blitter_2_r, 0x00ff)
+ AM_RANGE(0x240800, 0x24081f) AM_WRITE8(blitter_2_w, 0x00ff)
+ AM_RANGE(0x240820, 0x24083f) AM_WRITE8(clut_2_w, 0x00ff)
- AM_RANGE(0x240a00, 0x240a01) AM_WRITE8(niyanpai_clutsel_0_w, 0x00ff)
- AM_RANGE(0x240c00, 0x240c01) AM_WRITE8(niyanpai_clutsel_1_w, 0x00ff)
- AM_RANGE(0x240e00, 0x240e01) AM_WRITE8(niyanpai_clutsel_2_w, 0x00ff)
+ AM_RANGE(0x240a00, 0x240a01) AM_WRITE8(clutsel_0_w, 0x00ff)
+ AM_RANGE(0x240c00, 0x240c01) AM_WRITE8(clutsel_1_w, 0x00ff)
+ AM_RANGE(0x240e00, 0x240e01) AM_WRITE8(clutsel_2_w, 0x00ff)
- AM_RANGE(0x280000, 0x280001) AM_READ(niyanpai_dipsw_r)
+ AM_RANGE(0x280000, 0x280001) AM_READ(dipsw_r)
AM_RANGE(0x280200, 0x280201) AM_READ(musobana_inputport_0_r)
AM_RANGE(0x280400, 0x280401) AM_READ_PORT("SYSTEM")
@@ -290,35 +261,35 @@ static ADDRESS_MAP_START( zokumahj_map, AS_PROGRAM, 16, niyanpai_state )
AM_RANGE(0x000000, 0x03ffff) AM_ROM
AM_RANGE(0x0ff000, 0x0fffff) AM_RAM
- AM_RANGE(0x0e0000, 0x0e08ff) AM_READWRITE(niyanpai_palette_r,niyanpai_palette_w)
+ AM_RANGE(0x0e0000, 0x0e08ff) AM_READWRITE(palette_r,palette_w)
AM_RANGE(0x0e0900, 0x0e11ff) AM_RAM // palette work ram?
AM_RANGE(0x0a8000, 0x0a87ff) AM_RAM AM_SHARE("nvram")
AM_RANGE(0x0c0000, 0x0cffff) AM_RAM
- AM_RANGE(0x200000, 0x200001) AM_WRITE(niyanpai_sound_w)
+ AM_RANGE(0x200000, 0x200001) AM_WRITE(sound_w)
AM_RANGE(0x200200, 0x200201) AM_WRITE(musobana_inputport_w) // inputport select
AM_RANGE(0x240000, 0x240009) AM_WRITENOP // unknown
AM_RANGE(0x240200, 0x2403ff) AM_WRITENOP // unknown
- AM_RANGE(0x240400, 0x240403) AM_READ8(niyanpai_blitter_0_r, 0x00ff)
- AM_RANGE(0x240400, 0x24041f) AM_WRITE8(niyanpai_blitter_0_w, 0x00ff)
- AM_RANGE(0x240420, 0x24043f) AM_WRITE8(niyanpai_clut_0_w, 0x00ff)
+ AM_RANGE(0x240400, 0x240403) AM_READ8(blitter_0_r, 0x00ff)
+ AM_RANGE(0x240400, 0x24041f) AM_WRITE8(blitter_0_w, 0x00ff)
+ AM_RANGE(0x240420, 0x24043f) AM_WRITE8(clut_0_w, 0x00ff)
- AM_RANGE(0x240600, 0x240603) AM_READ8(niyanpai_blitter_1_r, 0x00ff)
- AM_RANGE(0x240600, 0x24061f) AM_WRITE8(niyanpai_blitter_1_w, 0x00ff)
- AM_RANGE(0x240620, 0x24063f) AM_WRITE8(niyanpai_clut_1_w, 0x00ff)
+ AM_RANGE(0x240600, 0x240603) AM_READ8(blitter_1_r, 0x00ff)
+ AM_RANGE(0x240600, 0x24061f) AM_WRITE8(blitter_1_w, 0x00ff)
+ AM_RANGE(0x240620, 0x24063f) AM_WRITE8(clut_1_w, 0x00ff)
- AM_RANGE(0x240800, 0x240803) AM_READ8(niyanpai_blitter_2_r, 0x00ff)
- AM_RANGE(0x240800, 0x24081f) AM_WRITE8(niyanpai_blitter_2_w, 0x00ff)
- AM_RANGE(0x240820, 0x24083f) AM_WRITE8(niyanpai_clut_2_w, 0x00ff)
+ AM_RANGE(0x240800, 0x240803) AM_READ8(blitter_2_r, 0x00ff)
+ AM_RANGE(0x240800, 0x24081f) AM_WRITE8(blitter_2_w, 0x00ff)
+ AM_RANGE(0x240820, 0x24083f) AM_WRITE8(clut_2_w, 0x00ff)
- AM_RANGE(0x240a00, 0x240a01) AM_WRITE8(niyanpai_clutsel_0_w, 0x00ff)
- AM_RANGE(0x240c00, 0x240c01) AM_WRITE8(niyanpai_clutsel_1_w, 0x00ff)
- AM_RANGE(0x240e00, 0x240e01) AM_WRITE8(niyanpai_clutsel_2_w, 0x00ff)
+ AM_RANGE(0x240a00, 0x240a01) AM_WRITE8(clutsel_0_w, 0x00ff)
+ AM_RANGE(0x240c00, 0x240c01) AM_WRITE8(clutsel_1_w, 0x00ff)
+ AM_RANGE(0x240e00, 0x240e01) AM_WRITE8(clutsel_2_w, 0x00ff)
- AM_RANGE(0x280000, 0x280001) AM_READ(niyanpai_dipsw_r)
+ AM_RANGE(0x280000, 0x280001) AM_READ(dipsw_r)
AM_RANGE(0x280200, 0x280201) AM_READ(musobana_inputport_0_r)
AM_RANGE(0x280400, 0x280401) AM_READ_PORT("SYSTEM")
@@ -329,7 +300,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( niyanpai_sound_map, AS_PROGRAM, 8, niyanpai_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( niyanpai_sound_io_map, AS_IO, 8, niyanpai_state )
@@ -755,7 +726,7 @@ static INPUT_PORTS_START( zokumahj ) // I don't have manual for this game.
INPUT_PORTS_END
-INTERRUPT_GEN_MEMBER(niyanpai_state::niyanpai_interrupt)
+INTERRUPT_GEN_MEMBER(niyanpai_state::interrupt)
{
m_tmp68301->external_interrupt_0();
}
@@ -771,7 +742,7 @@ static MACHINE_CONFIG_START( niyanpai, niyanpai_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M68000, 12288000/2) /* TMP68301, 6.144 MHz */
MCFG_CPU_PROGRAM_MAP(niyanpai_map)
- MCFG_CPU_VBLANK_INT_DRIVER("screen", niyanpai_state, niyanpai_interrupt)
+ MCFG_CPU_VBLANK_INT_DRIVER("screen", niyanpai_state, interrupt)
MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("tmp68301",tmp68301_device,irq_callback)
MCFG_DEVICE_ADD("tmp68301", TMP68301, 0)
@@ -781,11 +752,11 @@ static MACHINE_CONFIG_START( niyanpai, niyanpai_state )
MCFG_CPU_CONFIG(daisy_chain_sound)
MCFG_CPU_PROGRAM_MAP(niyanpai_sound_map)
MCFG_CPU_IO_MAP(niyanpai_sound_io_map)
- MCFG_TMPZ84C011_PORTD_READ_CB(READ8(niyanpai_state, cpu_portd_r))
- MCFG_TMPZ84C011_PORTA_WRITE_CB(WRITE8(niyanpai_state, cpu_porta_w))
- MCFG_TMPZ84C011_PORTB_WRITE_CB(WRITE8(niyanpai_state, cpu_portb_w))
- MCFG_TMPZ84C011_PORTC_WRITE_CB(WRITE8(niyanpai_state, cpu_portc_w))
- MCFG_TMPZ84C011_PORTE_WRITE_CB(WRITE8(niyanpai_state, cpu_porte_w))
+ MCFG_TMPZ84C011_PORTD_READ_CB(READ8(niyanpai_state, soundlatch_byte_r))
+ MCFG_TMPZ84C011_PORTA_WRITE_CB(WRITE8(niyanpai_state, soundbank_w))
+ MCFG_TMPZ84C011_PORTB_WRITE_CB(DEVWRITE8("dac1", dac_device, write_unsigned8))
+ MCFG_TMPZ84C011_PORTC_WRITE_CB(DEVWRITE8("dac2", dac_device, write_unsigned8))
+ MCFG_TMPZ84C011_PORTE_WRITE_CB(WRITE8(niyanpai_state, soundlatch_clear_w))
MCFG_TMPZ84C011_ZC0_CB(DEVWRITELINE("audiocpu", tmpz84c011_device, trg3))
MCFG_NVRAM_ADD_0FILL("nvram")
@@ -796,7 +767,7 @@ static MACHINE_CONFIG_START( niyanpai, niyanpai_state )
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
MCFG_SCREEN_SIZE(1024, 512)
MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 240-1)
- MCFG_SCREEN_UPDATE_DRIVER(niyanpai_state, screen_update_niyanpai)
+ MCFG_SCREEN_UPDATE_DRIVER(niyanpai_state, screen_update)
MCFG_SCREEN_PALETTE("palette")
MCFG_PALETTE_ADD("palette", 256*3)
@@ -819,16 +790,18 @@ static MACHINE_CONFIG_DERIVED( musobana, niyanpai )
/* basic machine hardware */
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(musobana_map)
+
+ MCFG_MACHINE_START_OVERRIDE(niyanpai_state, musobana)
MACHINE_CONFIG_END
-static MACHINE_CONFIG_DERIVED( mhhonban, niyanpai )
+static MACHINE_CONFIG_DERIVED( mhhonban, musobana )
/* basic machine hardware */
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(mhhonban_map)
MACHINE_CONFIG_END
-static MACHINE_CONFIG_DERIVED( zokumahj, niyanpai )
+static MACHINE_CONFIG_DERIVED( zokumahj, musobana )
/* basic machine hardware */
MCFG_CPU_MODIFY("maincpu")
@@ -930,8 +903,8 @@ ROM_START( zokumahj )
ROM_END
-GAME( 1996, niyanpai, 0, niyanpai, niyanpai, niyanpai_state, niyanpai, ROT0, "Nichibutsu", "Niyanpai (Japan)", 0 )
-GAME( 1995, musobana, 0, musobana, musobana, niyanpai_state, niyanpai, ROT0, "Nichibutsu / Yubis", "Musoubana (Japan)", 0 )
-GAME( 1994, 4psimasy, 0, musobana, 4psimasy, niyanpai_state, niyanpai, ROT0, "Sphinx / AV Japan", "Mahjong 4P Simasyo (Japan)", 0 )
-GAME( 199?, mhhonban, 0, mhhonban, mhhonban, niyanpai_state, niyanpai, ROT0, "Nichibutsu?", "Mahjong Housoukyoku Honbanchuu (Japan)", 0 )
-GAME( 199?, zokumahj, mhhonban, zokumahj, zokumahj, niyanpai_state, niyanpai, ROT0, "Nichibutsu?", "Zoku Mahjong Housoukyoku (Japan)", 0 )
+GAME( 1996, niyanpai, 0, niyanpai, niyanpai, niyanpai_state, niyanpai, ROT0, "Nichibutsu", "Niyanpai (Japan)", GAME_SUPPORTS_SAVE )
+GAME( 1995, musobana, 0, musobana, musobana, niyanpai_state, niyanpai, ROT0, "Nichibutsu / Yubis", "Musoubana (Japan)", GAME_SUPPORTS_SAVE )
+GAME( 1994, 4psimasy, 0, musobana, 4psimasy, niyanpai_state, niyanpai, ROT0, "Sphinx / AV Japan", "Mahjong 4P Simasyo (Japan)", GAME_SUPPORTS_SAVE )
+GAME( 199?, mhhonban, 0, mhhonban, mhhonban, niyanpai_state, niyanpai, ROT0, "Nichibutsu?", "Mahjong Housoukyoku Honbanchuu (Japan)", GAME_SUPPORTS_SAVE )
+GAME( 199?, zokumahj, mhhonban, zokumahj, zokumahj, niyanpai_state, niyanpai, ROT0, "Nichibutsu?", "Zoku Mahjong Housoukyoku (Japan)", GAME_SUPPORTS_SAVE )
diff --git a/src/mame/includes/niyanpai.h b/src/mame/includes/niyanpai.h
index ab7c9cab80b..24474ee749d 100644
--- a/src/mame/includes/niyanpai.h
+++ b/src/mame/includes/niyanpai.h
@@ -19,9 +19,14 @@ public:
m_screen(*this, "screen"),
m_palette(*this, "palette") { }
- int m_musobana_inputport;
- int m_musobana_outcoin_flag;
+ required_device<cpu_device> m_maincpu;
+ required_device<tmp68301_device> m_tmp68301;
+ required_device<dac_device> m_dac1;
+ required_device<dac_device> m_dac2;
+ required_device<screen_device> m_screen;
+ required_device<palette_device> m_palette;
+ // common
int m_scrollx[VRAM_MAX];
int m_scrolly[VRAM_MAX];
int m_blitter_destx[VRAM_MAX];
@@ -45,55 +50,54 @@ public:
UINT16 *m_palette_ptr;
UINT8 *m_clut[VRAM_MAX];
int m_flipscreen_old[VRAM_MAX];
- DECLARE_READ8_MEMBER(niyanpai_sound_r);
- DECLARE_WRITE16_MEMBER(niyanpai_sound_w);
- DECLARE_WRITE8_MEMBER(niyanpai_soundclr_w);
-
- DECLARE_READ8_MEMBER(cpu_portd_r);
- DECLARE_WRITE8_MEMBER(cpu_porta_w);
- DECLARE_WRITE8_MEMBER(cpu_portb_w);
- DECLARE_WRITE8_MEMBER(cpu_portc_w);
- DECLARE_WRITE8_MEMBER(cpu_porte_w);
-
- DECLARE_READ16_MEMBER(niyanpai_dipsw_r);
+ emu_timer *m_blitter_timer;
+
+ // musobana and derived machine configs
+ int m_musobana_inputport;
+ int m_musobana_outcoin_flag;
+ UINT8 m_motor_on;
+
+ // common
+ DECLARE_WRITE16_MEMBER(sound_w);
+ DECLARE_WRITE8_MEMBER(soundbank_w);
+ DECLARE_WRITE8_MEMBER(soundlatch_clear_w);
+ DECLARE_READ16_MEMBER(dipsw_r);
+ DECLARE_READ16_MEMBER(palette_r);
+ DECLARE_WRITE16_MEMBER(palette_w);
+ DECLARE_WRITE8_MEMBER(blitter_0_w);
+ DECLARE_WRITE8_MEMBER(blitter_1_w);
+ DECLARE_WRITE8_MEMBER(blitter_2_w);
+ DECLARE_READ8_MEMBER(blitter_0_r);
+ DECLARE_READ8_MEMBER(blitter_1_r);
+ DECLARE_READ8_MEMBER(blitter_2_r);
+ DECLARE_WRITE8_MEMBER(clut_0_w);
+ DECLARE_WRITE8_MEMBER(clut_1_w);
+ DECLARE_WRITE8_MEMBER(clut_2_w);
+ DECLARE_WRITE8_MEMBER(clutsel_0_w);
+ DECLARE_WRITE8_MEMBER(clutsel_1_w);
+ DECLARE_WRITE8_MEMBER(clutsel_2_w);
+ DECLARE_WRITE16_MEMBER(tmp68301_parallel_port_w);
+
+ // musobana and derived machine configs
DECLARE_READ16_MEMBER(musobana_inputport_0_r);
DECLARE_WRITE16_MEMBER(musobana_inputport_w);
- DECLARE_READ16_MEMBER(niyanpai_palette_r);
- DECLARE_WRITE16_MEMBER(niyanpai_palette_w);
- DECLARE_WRITE8_MEMBER(niyanpai_blitter_0_w);
- DECLARE_WRITE8_MEMBER(niyanpai_blitter_1_w);
- DECLARE_WRITE8_MEMBER(niyanpai_blitter_2_w);
- DECLARE_READ8_MEMBER(niyanpai_blitter_0_r);
- DECLARE_READ8_MEMBER(niyanpai_blitter_1_r);
- DECLARE_READ8_MEMBER(niyanpai_blitter_2_r);
- DECLARE_WRITE8_MEMBER(niyanpai_clut_0_w);
- DECLARE_WRITE8_MEMBER(niyanpai_clut_1_w);
- DECLARE_WRITE8_MEMBER(niyanpai_clut_2_w);
- DECLARE_WRITE8_MEMBER(niyanpai_clutsel_0_w);
- DECLARE_WRITE8_MEMBER(niyanpai_clutsel_1_w);
- DECLARE_WRITE8_MEMBER(niyanpai_clutsel_2_w);
+
DECLARE_CUSTOM_INPUT_MEMBER(musobana_outcoin_flag_r);
+
DECLARE_DRIVER_INIT(niyanpai);
- DECLARE_WRITE16_MEMBER(tmp68301_parallel_port_w);
- UINT8 m_motor_on;
- virtual void machine_reset();
virtual void video_start();
- UINT32 screen_update_niyanpai(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- INTERRUPT_GEN_MEMBER(niyanpai_interrupt);
- int niyanpai_blitter_r(int vram, int offset);
- void niyanpai_blitter_w(int vram, int offset, UINT8 data);
- void niyanpai_clutsel_w(int vram, UINT8 data);
- void niyanpai_clut_w(int vram, int offset, UINT8 data);
- void niyanpai_vramflip(int vram);
+ DECLARE_MACHINE_START(musobana);
+
+ UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ int blitter_r(int vram, int offset);
+ void blitter_w(int vram, int offset, UINT8 data);
+ void clutsel_w(int vram, UINT8 data);
+ void clut_w(int vram, int offset, UINT8 data);
+ void vramflip(int vram);
void update_pixel(int vram, int x, int y);
- void niyanpai_gfxdraw(int vram);
- void niyanpai_soundbank_w(int data);
- required_device<cpu_device> m_maincpu;
- required_device<tmp68301_device> m_tmp68301;
- required_device<dac_device> m_dac1;
- required_device<dac_device> m_dac2;
- required_device<screen_device> m_screen;
- required_device<palette_device> m_palette;
+ void gfxdraw(int vram);
+
+ INTERRUPT_GEN_MEMBER(interrupt);
protected:
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
diff --git a/src/mame/video/niyanpai.c b/src/mame/video/niyanpai.c
index cd9a7bf3b82..9e0d06c5b6a 100644
--- a/src/mame/video/niyanpai.c
+++ b/src/mame/video/niyanpai.c
@@ -13,12 +13,12 @@
******************************************************************************/
-READ16_MEMBER(niyanpai_state::niyanpai_palette_r)
+READ16_MEMBER(niyanpai_state::palette_r)
{
return m_palette_ptr[offset];
}
-WRITE16_MEMBER(niyanpai_state::niyanpai_palette_w)
+WRITE16_MEMBER(niyanpai_state::palette_w)
{
int r, g, b;
int offs_h, offs_l;
@@ -57,7 +57,7 @@ WRITE16_MEMBER(niyanpai_state::niyanpai_palette_w)
******************************************************************************/
-int niyanpai_state::niyanpai_blitter_r(int vram, int offset)
+int niyanpai_state::blitter_r(int vram, int offset)
{
int ret;
UINT8 *GFXROM = memregion("gfx1")->base();
@@ -72,7 +72,7 @@ int niyanpai_state::niyanpai_blitter_r(int vram, int offset)
return ret;
}
-void niyanpai_state::niyanpai_blitter_w(int vram, int offset, UINT8 data)
+void niyanpai_state::blitter_w(int vram, int offset, UINT8 data)
{
switch (offset)
{
@@ -84,7 +84,7 @@ void niyanpai_state::niyanpai_blitter_w(int vram, int offset, UINT8 data)
// if (data & 0x20) popmessage("Unknown GFX Flag!! (0x20)");
m_flipscreen[vram] = (data & 0x40) ? 0 : 1;
m_dispflag[vram] = (data & 0x80) ? 1 : 0;
- niyanpai_vramflip(vram);
+ vramflip(vram);
break;
case 0x01: m_scrollx[vram] = (m_scrollx[vram] & 0x0100) | data; break;
case 0x02: m_scrollx[vram] = (m_scrollx[vram] & 0x00ff) | ((data << 8) & 0x0100); break;
@@ -99,18 +99,18 @@ void niyanpai_state::niyanpai_blitter_w(int vram, int offset, UINT8 data)
case 0x0b: m_blitter_destx[vram] = (m_blitter_destx[vram] & 0x00ff) | (data << 8); break;
case 0x0c: m_blitter_desty[vram] = (m_blitter_desty[vram] & 0xff00) | data; break;
case 0x0d: m_blitter_desty[vram] = (m_blitter_desty[vram] & 0x00ff) | (data << 8);
- niyanpai_gfxdraw(vram);
+ gfxdraw(vram);
break;
default: break;
}
}
-void niyanpai_state::niyanpai_clutsel_w(int vram, UINT8 data)
+void niyanpai_state::clutsel_w(int vram, UINT8 data)
{
m_clutsel[vram] = data;
}
-void niyanpai_state::niyanpai_clut_w(int vram, int offset, UINT8 data)
+void niyanpai_state::clut_w(int vram, int offset, UINT8 data)
{
m_clut[vram][((m_clutsel[vram] & 0xff) * 0x10) + (offset & 0x0f)] = data;
}
@@ -119,7 +119,7 @@ void niyanpai_state::niyanpai_clut_w(int vram, int offset, UINT8 data)
******************************************************************************/
-void niyanpai_state::niyanpai_vramflip(int vram)
+void niyanpai_state::vramflip(int vram)
{
int x, y;
UINT16 color1, color2;
@@ -172,7 +172,7 @@ void niyanpai_state::device_timer(emu_timer &timer, device_timer_id id, int para
}
}
-void niyanpai_state::niyanpai_gfxdraw(int vram)
+void niyanpai_state::gfxdraw(int vram)
{
UINT8 *GFX = memregion("gfx1")->base();
int width = m_screen->width();
@@ -324,28 +324,28 @@ void niyanpai_state::niyanpai_gfxdraw(int vram)
}
m_nb19010_busyflag = 0;
- timer_set(attotime::from_nsec(1000 * m_nb19010_busyctr), TIMER_BLITTER);
+ m_blitter_timer->adjust(attotime::from_nsec(1000 * m_nb19010_busyctr));
}
/******************************************************************************
******************************************************************************/
-WRITE8_MEMBER(niyanpai_state::niyanpai_blitter_0_w){ niyanpai_blitter_w(0, offset, data); }
-WRITE8_MEMBER(niyanpai_state::niyanpai_blitter_1_w){ niyanpai_blitter_w(1, offset, data); }
-WRITE8_MEMBER(niyanpai_state::niyanpai_blitter_2_w){ niyanpai_blitter_w(2, offset, data); }
+WRITE8_MEMBER(niyanpai_state::blitter_0_w){ blitter_w(0, offset, data); }
+WRITE8_MEMBER(niyanpai_state::blitter_1_w){ blitter_w(1, offset, data); }
+WRITE8_MEMBER(niyanpai_state::blitter_2_w){ blitter_w(2, offset, data); }
-READ8_MEMBER(niyanpai_state::niyanpai_blitter_0_r){ return niyanpai_blitter_r(0, offset); }
-READ8_MEMBER(niyanpai_state::niyanpai_blitter_1_r){ return niyanpai_blitter_r(1, offset); }
-READ8_MEMBER(niyanpai_state::niyanpai_blitter_2_r){ return niyanpai_blitter_r(2, offset); }
+READ8_MEMBER(niyanpai_state::blitter_0_r){ return blitter_r(0, offset); }
+READ8_MEMBER(niyanpai_state::blitter_1_r){ return blitter_r(1, offset); }
+READ8_MEMBER(niyanpai_state::blitter_2_r){ return blitter_r(2, offset); }
-WRITE8_MEMBER(niyanpai_state::niyanpai_clut_0_w){ niyanpai_clut_w(0, offset, data); }
-WRITE8_MEMBER(niyanpai_state::niyanpai_clut_1_w){ niyanpai_clut_w(1, offset, data); }
-WRITE8_MEMBER(niyanpai_state::niyanpai_clut_2_w){ niyanpai_clut_w(2, offset, data); }
+WRITE8_MEMBER(niyanpai_state::clut_0_w){ clut_w(0, offset, data); }
+WRITE8_MEMBER(niyanpai_state::clut_1_w){ clut_w(1, offset, data); }
+WRITE8_MEMBER(niyanpai_state::clut_2_w){ clut_w(2, offset, data); }
-WRITE8_MEMBER(niyanpai_state::niyanpai_clutsel_0_w){ niyanpai_clutsel_w(0, data); }
-WRITE8_MEMBER(niyanpai_state::niyanpai_clutsel_1_w){ niyanpai_clutsel_w(1, data); }
-WRITE8_MEMBER(niyanpai_state::niyanpai_clutsel_2_w){ niyanpai_clutsel_w(2, data); }
+WRITE8_MEMBER(niyanpai_state::clutsel_0_w){ clutsel_w(0, data); }
+WRITE8_MEMBER(niyanpai_state::clutsel_1_w){ clutsel_w(1, data); }
+WRITE8_MEMBER(niyanpai_state::clutsel_2_w){ clutsel_w(2, data); }
/******************************************************************************
@@ -370,13 +370,46 @@ void niyanpai_state::video_start()
m_clut[1] = auto_alloc_array(machine(), UINT8, 0x1000);
m_clut[2] = auto_alloc_array(machine(), UINT8, 0x1000);
m_nb19010_busyflag = 1;
+ m_blitter_timer = timer_alloc(TIMER_BLITTER);
+
+ save_item(NAME(m_scrollx));
+ save_item(NAME(m_scrolly));
+ save_item(NAME(m_blitter_destx));
+ save_item(NAME(m_blitter_desty));
+ save_item(NAME(m_blitter_sizex));
+ save_item(NAME(m_blitter_sizey));
+ save_item(NAME(m_blitter_src_addr));
+ save_item(NAME(m_blitter_direction_x));
+ save_item(NAME(m_blitter_direction_y));
+ save_item(NAME(m_dispflag));
+ save_item(NAME(m_flipscreen));
+ save_item(NAME(m_clutmode));
+ save_item(NAME(m_transparency));
+ save_item(NAME(m_clutsel));
+ save_item(NAME(m_screen_refresh));
+ save_item(NAME(m_nb19010_busyctr));
+ save_item(NAME(m_nb19010_busyflag));
+ save_item(NAME(m_flipscreen_old));
+ save_pointer(NAME(m_palette_ptr), 0x480);
+ save_pointer(NAME(m_videoram[0]), width * height);
+ save_pointer(NAME(m_videoram[1]), width * height);
+ save_pointer(NAME(m_videoram[2]), width * height);
+ save_pointer(NAME(m_videoworkram[0]), width * height);
+ save_pointer(NAME(m_videoworkram[1]), width * height);
+ save_pointer(NAME(m_videoworkram[2]), width * height);
+ save_pointer(NAME(m_clut[0]), 0x1000);
+ save_pointer(NAME(m_clut[1]), 0x1000);
+ save_pointer(NAME(m_clut[2]), 0x1000);
+ save_item(NAME(m_tmpbitmap[0]));
+ save_item(NAME(m_tmpbitmap[1]));
+ save_item(NAME(m_tmpbitmap[2]));
}
/******************************************************************************
******************************************************************************/
-UINT32 niyanpai_state::screen_update_niyanpai(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+UINT32 niyanpai_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
int i;
int x, y;