niyanpai.c: added save state support, configured banking and removed some trampolines (nw)

This commit is contained in:
Ivan Vangelista 2015-03-31 20:50:11 +02:00
parent 73ee1e9042
commit 2123f510df
3 changed files with 199 additions and 189 deletions

View File

@ -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 )

View File

@ -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);

View File

@ -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;