nycaptor.cpp: Soundlatch modernization (nw)

This commit is contained in:
AJR 2017-08-18 00:40:46 -04:00
parent 955c226a3a
commit 0733b3414b
2 changed files with 43 additions and 54 deletions

View File

@ -211,16 +211,6 @@ WRITE8_MEMBER(nycaptor_state::sub_cpu_halt_w)
m_subcpu->set_input_line(INPUT_LINE_HALT, (data) ? ASSERT_LINE : CLEAR_LINE);
}
READ8_MEMBER(nycaptor_state::from_snd_r)
{
return m_snd_data;
}
WRITE8_MEMBER(nycaptor_state::to_main_w)
{
m_snd_data = data;
}
READ8_MEMBER(nycaptor_state::nycaptor_b_r)
{
return 1;
@ -259,6 +249,11 @@ READ8_MEMBER(nycaptor_state::nycaptor_mcu_status_r2)
return (CLEAR_LINE != m_bmcu->host_semaphore_r()) ? 0 : 1;
}
READ8_MEMBER(nycaptor_state::sound_status_r)
{
return (m_soundlatch->pending_r() ? 1 : 0) | (m_soundlatch2->pending_r() ? 2 : 0);
}
MACHINE_RESET_MEMBER(nycaptor_state,ta7630)
{
@ -277,34 +272,14 @@ MACHINE_RESET_MEMBER(nycaptor_state,ta7630)
}
}
TIMER_CALLBACK_MEMBER(nycaptor_state::nmi_callback)
{
if (m_sound_nmi_enable)
m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
else
m_pending_nmi = 1;
}
WRITE8_MEMBER(nycaptor_state::sound_command_w)
{
m_soundlatch->write(space, 0, data);
machine().scheduler().synchronize(timer_expired_delegate(FUNC(nycaptor_state::nmi_callback),this), data);
}
WRITE8_MEMBER(nycaptor_state::nmi_disable_w)
{
m_sound_nmi_enable = 0;
m_soundnmi->in_w<1>(0);
}
WRITE8_MEMBER(nycaptor_state::nmi_enable_w)
{
m_sound_nmi_enable = 1;
if (m_pending_nmi)
{
m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
m_pending_nmi = 0;
}
m_soundnmi->in_w<1>(1);
}
WRITE8_MEMBER(nycaptor_state::unk_w)
@ -329,7 +304,7 @@ static ADDRESS_MAP_START( nycaptor_master_map, AS_PROGRAM, 8, nycaptor_state )
AM_RANGE(0xd000, 0xd000) AM_DEVREADWRITE("bmcu", taito68705_mcu_device, data_r, data_w)
AM_RANGE(0xd001, 0xd001) AM_WRITE(sub_cpu_halt_w)
AM_RANGE(0xd002, 0xd002) AM_READWRITE(nycaptor_generic_control_r, nycaptor_generic_control_w) /* bit 3 - memory bank at 0x8000-0xbfff */
AM_RANGE(0xd400, 0xd400) AM_READWRITE(from_snd_r, sound_command_w)
AM_RANGE(0xd400, 0xd400) AM_DEVREAD("soundlatch2", generic_latch_8_device, read) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
AM_RANGE(0xd401, 0xd401) AM_READNOP
AM_RANGE(0xd403, 0xd403) AM_WRITE(sound_cpu_reset_w)
AM_RANGE(0xd800, 0xd800) AM_READ_PORT("DSWA")
@ -338,7 +313,7 @@ static ADDRESS_MAP_START( nycaptor_master_map, AS_PROGRAM, 8, nycaptor_state )
AM_RANGE(0xd803, 0xd803) AM_READ_PORT("IN0")
AM_RANGE(0xd804, 0xd804) AM_READ_PORT("IN1")
AM_RANGE(0xd805, 0xd805) AM_READ(nycaptor_mcu_status_r1)
AM_RANGE(0xd806, 0xd806) AM_READNOP /* unknown ?sound? */
AM_RANGE(0xd806, 0xd806) AM_READ(sound_status_r)
AM_RANGE(0xd807, 0xd807) AM_READ(nycaptor_mcu_status_r2)
AM_RANGE(0xdc00, 0xdc9f) AM_RAM AM_SHARE("spriteram")
AM_RANGE(0xdca0, 0xdcbf) AM_RAM_WRITE(nycaptor_scrlram_w) AM_SHARE("scrlram")
@ -376,10 +351,10 @@ static ADDRESS_MAP_START( nycaptor_sound_map, AS_PROGRAM, 8, nycaptor_state )
AM_RANGE(0xca00, 0xca00) AM_WRITENOP
AM_RANGE(0xcb00, 0xcb00) AM_WRITENOP
AM_RANGE(0xcc00, 0xcc00) AM_WRITENOP
AM_RANGE(0xd000, 0xd000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_WRITE(to_main_w)
AM_RANGE(0xd000, 0xd000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_DEVWRITE("soundlatch2", generic_latch_8_device, write)
AM_RANGE(0xd200, 0xd200) AM_READNOP AM_WRITE(nmi_enable_w)
AM_RANGE(0xd400, 0xd400) AM_WRITE(nmi_disable_w)
AM_RANGE(0xd600, 0xd600) AM_WRITENOP
AM_RANGE(0xd600, 0xd600) AM_DEVWRITE("soundlatch", generic_latch_8_device, acknowledge_w)
AM_RANGE(0xe000, 0xefff) AM_NOP
ADDRESS_MAP_END
@ -424,7 +399,7 @@ static ADDRESS_MAP_START( cyclshtg_master_map, AS_PROGRAM, 8, nycaptor_state )
AM_RANGE(0xd000, 0xd000) AM_READWRITE(cyclshtg_mcu_r, cyclshtg_mcu_w)
AM_RANGE(0xd001, 0xd001) AM_WRITE(sub_cpu_halt_w)
AM_RANGE(0xd002, 0xd002) AM_READWRITE(nycaptor_generic_control_r, cyclshtg_generic_control_w)
AM_RANGE(0xd400, 0xd400) AM_READWRITE(from_snd_r, sound_command_w)
AM_RANGE(0xd400, 0xd400) AM_DEVREAD("soundlatch2", generic_latch_8_device, read) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
AM_RANGE(0xd403, 0xd403) AM_WRITE(sound_cpu_reset_w)
AM_RANGE(0xd800, 0xd800) AM_READ_PORT("DSWA")
AM_RANGE(0xd801, 0xd801) AM_READ_PORT("DSWB")
@ -432,7 +407,7 @@ static ADDRESS_MAP_START( cyclshtg_master_map, AS_PROGRAM, 8, nycaptor_state )
AM_RANGE(0xd803, 0xd803) AM_READ_PORT("IN0")
AM_RANGE(0xd804, 0xd804) AM_READ_PORT("IN1")
AM_RANGE(0xd805, 0xd805) AM_READ(cyclshtg_mcu_status_r)
AM_RANGE(0xd806, 0xd806) AM_READNOP
AM_RANGE(0xd806, 0xd806) AM_READ(sound_status_r)
AM_RANGE(0xd807, 0xd807) AM_READ(cyclshtg_mcu_status_r)
AM_RANGE(0xdc00, 0xdc9f) AM_RAM AM_SHARE("spriteram")
AM_RANGE(0xdca0, 0xdcbf) AM_RAM_WRITE(nycaptor_scrlram_w) AM_SHARE("scrlram")
@ -478,7 +453,7 @@ static ADDRESS_MAP_START( bronx_master_map, AS_PROGRAM, 8, nycaptor_state )
AM_RANGE(0xd000, 0xd000) AM_READ(cyclshtg_mcu_r) AM_WRITENOP
AM_RANGE(0xd001, 0xd001) AM_WRITE(sub_cpu_halt_w)
AM_RANGE(0xd002, 0xd002) AM_READWRITE(nycaptor_generic_control_r, cyclshtg_generic_control_w)
AM_RANGE(0xd400, 0xd400) AM_READWRITE(from_snd_r, sound_command_w)
AM_RANGE(0xd400, 0xd400) AM_DEVREAD("soundlatch2", generic_latch_8_device, read) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
AM_RANGE(0xd401, 0xd401) AM_READ(unk_r)
AM_RANGE(0xd403, 0xd403) AM_WRITE(sound_cpu_reset_w)
AM_RANGE(0xd800, 0xd800) AM_READ_PORT("DSWA")
@ -487,7 +462,7 @@ static ADDRESS_MAP_START( bronx_master_map, AS_PROGRAM, 8, nycaptor_state )
AM_RANGE(0xd803, 0xd803) AM_READ_PORT("IN0")
AM_RANGE(0xd804, 0xd804) AM_READ_PORT("IN1")
AM_RANGE(0xd805, 0xd805) AM_READ(cyclshtg_mcu_status_r)
AM_RANGE(0xd806, 0xd806) AM_READNOP
AM_RANGE(0xd806, 0xd806) AM_READ(sound_status_r)
AM_RANGE(0xd807, 0xd807) AM_READ(cyclshtg_mcu_status_r)
AM_RANGE(0xdc00, 0xdc9f) AM_RAM AM_SHARE("spriteram")
AM_RANGE(0xdca0, 0xdcbf) AM_RAM_WRITE(nycaptor_scrlram_w) AM_SHARE("scrlram")
@ -753,8 +728,6 @@ void nycaptor_state::machine_start()
membank("bank1")->configure_entries(0, 4, memregion("maincpu")->base() + 0x10000, 0x4000);
save_item(NAME(m_generic_control_reg));
save_item(NAME(m_sound_nmi_enable));
save_item(NAME(m_pending_nmi));
save_item(NAME(m_snd_data));
save_item(NAME(m_vol_ctrl));
@ -762,7 +735,8 @@ void nycaptor_state::machine_start()
save_item(NAME(m_palette_bank));
save_item(NAME(m_gfxctrl));
// hack to put input_merger in correct initial state
m_soundnmi->in_w<0>(0);
}
void nycaptor_state::machine_reset()
@ -770,15 +744,12 @@ void nycaptor_state::machine_reset()
MACHINE_RESET_CALL_MEMBER(ta7630);
m_generic_control_reg = 0;
m_sound_nmi_enable = 0;
m_pending_nmi = 0;
m_snd_data = 0;
m_char_bank = 0;
m_palette_bank = 0;
m_gfxctrl = 0;
memset(m_vol_ctrl, 0, sizeof(m_vol_ctrl));
}
@ -820,6 +791,12 @@ static MACHINE_CONFIG_START( nycaptor )
MCFG_SPEAKER_STANDARD_MONO("speaker")
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
MCFG_GENERIC_LATCH_DATA_PENDING_CB(DEVWRITELINE("soundnmi", input_merger_device, in_w<0>))
MCFG_INPUT_MERGER_ALL_HIGH("soundnmi")
MCFG_INPUT_MERGER_OUTPUT_HANDLER(INPUTLINE("audiocpu", INPUT_LINE_NMI))
MCFG_GENERIC_LATCH_8_ADD("soundlatch2")
MCFG_SOUND_ADD("ay1", AY8910, 8000000/4)
MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(nycaptor_state, unk_w))
@ -884,6 +861,12 @@ static MACHINE_CONFIG_START( cyclshtg )
MCFG_SPEAKER_STANDARD_MONO("speaker")
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
MCFG_GENERIC_LATCH_DATA_PENDING_CB(DEVWRITELINE("soundnmi", input_merger_device, in_w<0>))
MCFG_INPUT_MERGER_ALL_HIGH("soundnmi")
MCFG_INPUT_MERGER_OUTPUT_HANDLER(INPUTLINE("audiocpu", INPUT_LINE_NMI))
MCFG_GENERIC_LATCH_8_ADD("soundlatch2")
MCFG_SOUND_ADD("ay1", AY8910, 8000000/4)
MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(nycaptor_state, unk_w))
@ -947,6 +930,12 @@ static MACHINE_CONFIG_START( bronx )
MCFG_SPEAKER_STANDARD_MONO("speaker")
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
MCFG_GENERIC_LATCH_DATA_PENDING_CB(DEVWRITELINE("soundnmi", input_merger_device, in_w<0>))
MCFG_INPUT_MERGER_ALL_HIGH("soundnmi")
MCFG_INPUT_MERGER_OUTPUT_HANDLER(INPUTLINE("audiocpu", INPUT_LINE_NMI))
MCFG_GENERIC_LATCH_8_ADD("soundlatch2")
MCFG_SOUND_ADD("ay1", AY8910, 8000000/4)
MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(nycaptor_state, unk_w))

View File

@ -2,6 +2,7 @@
// copyright-holders:Tomasz Slanina
#include "machine/gen_latch.h"
#include "machine/input_merger.h"
#include "sound/msm5232.h"
#include "machine/taito68705interface.h"
@ -21,7 +22,9 @@ public:
m_msm(*this, "msm"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
m_soundlatch(*this, "soundlatch") { }
m_soundlatch(*this, "soundlatch"),
m_soundlatch2(*this, "soundlatch2"),
m_soundnmi(*this, "soundnmi") { }
/* memory pointers */
required_shared_ptr<uint8_t> m_videoram;
@ -39,8 +42,6 @@ public:
/* misc */
int m_generic_control_reg;
int m_sound_nmi_enable;
int m_pending_nmi;
uint8_t m_snd_data;
int m_vol_ctrl[16];
int m_gametype;
@ -54,16 +55,15 @@ public:
required_device<msm5232_device> m_msm;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
optional_device<generic_latch_8_device> m_soundlatch;
required_device<generic_latch_8_device> m_soundlatch;
required_device<generic_latch_8_device> m_soundlatch2;
required_device<input_merger_device> m_soundnmi;
DECLARE_WRITE8_MEMBER(sub_cpu_halt_w);
DECLARE_READ8_MEMBER(from_snd_r);
DECLARE_WRITE8_MEMBER(to_main_w);
DECLARE_READ8_MEMBER(nycaptor_b_r);
DECLARE_READ8_MEMBER(nycaptor_by_r);
DECLARE_READ8_MEMBER(nycaptor_bx_r);
DECLARE_WRITE8_MEMBER(sound_cpu_reset_w);
DECLARE_WRITE8_MEMBER(sound_command_w);
DECLARE_WRITE8_MEMBER(nmi_disable_w);
DECLARE_WRITE8_MEMBER(nmi_enable_w);
DECLARE_READ8_MEMBER(nycaptor_generic_control_r);
@ -77,6 +77,7 @@ public:
DECLARE_READ8_MEMBER(nycaptor_mcu_status_r1);
DECLARE_READ8_MEMBER(nycaptor_mcu_status_r2);
DECLARE_READ8_MEMBER(sound_status_r);
DECLARE_WRITE8_MEMBER(nycaptor_videoram_w);
DECLARE_WRITE8_MEMBER(nycaptor_palette_w);
DECLARE_READ8_MEMBER(nycaptor_palette_r);
@ -94,7 +95,6 @@ public:
virtual void video_start() override;
DECLARE_MACHINE_RESET(ta7630);
uint32_t screen_update_nycaptor(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
TIMER_CALLBACK_MEMBER(nmi_callback);
int nycaptor_spot( );
void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect, int pri );
};