mirror of
https://github.com/holub/mame
synced 2025-06-30 07:58:56 +03:00
pturn: Add LS259 and coin counters; remove PULSE_LINE (nw)
This commit is contained in:
parent
b9e9c478a1
commit
3ed1c00293
@ -78,6 +78,7 @@ ROMS: All ROM labels say only "PROM" and a number.
|
|||||||
*/
|
*/
|
||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
#include "cpu/z80/z80.h"
|
#include "cpu/z80/z80.h"
|
||||||
|
#include "machine/74259.h"
|
||||||
#include "machine/gen_latch.h"
|
#include "machine/gen_latch.h"
|
||||||
#include "sound/ay8910.h"
|
#include "sound/ay8910.h"
|
||||||
#include "screen.h"
|
#include "screen.h"
|
||||||
@ -90,6 +91,7 @@ public:
|
|||||||
pturn_state(const machine_config &mconfig, device_type type, const char *tag)
|
pturn_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||||
: driver_device(mconfig, type, tag),
|
: driver_device(mconfig, type, tag),
|
||||||
m_maincpu(*this, "maincpu"),
|
m_maincpu(*this, "maincpu"),
|
||||||
|
m_audiocpu(*this, "audiocpu"),
|
||||||
m_gfxdecode(*this, "gfxdecode"),
|
m_gfxdecode(*this, "gfxdecode"),
|
||||||
m_palette(*this, "palette"),
|
m_palette(*this, "palette"),
|
||||||
m_soundlatch(*this, "soundlatch"),
|
m_soundlatch(*this, "soundlatch"),
|
||||||
@ -97,6 +99,7 @@ public:
|
|||||||
m_spriteram(*this, "spriteram") { }
|
m_spriteram(*this, "spriteram") { }
|
||||||
|
|
||||||
required_device<cpu_device> m_maincpu;
|
required_device<cpu_device> m_maincpu;
|
||||||
|
required_device<cpu_device> m_audiocpu;
|
||||||
required_device<gfxdecode_device> m_gfxdecode;
|
required_device<gfxdecode_device> m_gfxdecode;
|
||||||
required_device<palette_device> m_palette;
|
required_device<palette_device> m_palette;
|
||||||
required_device<generic_latch_8_device> m_soundlatch;
|
required_device<generic_latch_8_device> m_soundlatch;
|
||||||
@ -111,19 +114,21 @@ public:
|
|||||||
int m_bgpalette;
|
int m_bgpalette;
|
||||||
int m_fgpalette;
|
int m_fgpalette;
|
||||||
int m_bgcolor;
|
int m_bgcolor;
|
||||||
int m_nmi_main;
|
bool m_nmi_main;
|
||||||
int m_nmi_sub;
|
bool m_nmi_sub;
|
||||||
|
|
||||||
DECLARE_WRITE8_MEMBER(videoram_w);
|
DECLARE_WRITE8_MEMBER(videoram_w);
|
||||||
DECLARE_WRITE8_MEMBER(nmi_main_enable_w);
|
DECLARE_WRITE_LINE_MEMBER(nmi_main_enable_w);
|
||||||
DECLARE_WRITE8_MEMBER(nmi_sub_enable_w);
|
DECLARE_WRITE8_MEMBER(nmi_sub_enable_w);
|
||||||
|
DECLARE_WRITE_LINE_MEMBER(coin_counter_1_w);
|
||||||
|
DECLARE_WRITE_LINE_MEMBER(coin_counter_2_w);
|
||||||
DECLARE_WRITE8_MEMBER(bgcolor_w);
|
DECLARE_WRITE8_MEMBER(bgcolor_w);
|
||||||
DECLARE_WRITE8_MEMBER(bg_scrollx_w);
|
DECLARE_WRITE8_MEMBER(bg_scrollx_w);
|
||||||
DECLARE_WRITE8_MEMBER(fgpalette_w);
|
DECLARE_WRITE8_MEMBER(fgpalette_w);
|
||||||
DECLARE_WRITE8_MEMBER(bg_scrolly_w);
|
DECLARE_WRITE8_MEMBER(bg_scrolly_w);
|
||||||
DECLARE_WRITE8_MEMBER(fgbank_w);
|
DECLARE_WRITE_LINE_MEMBER(fgbank_w);
|
||||||
DECLARE_WRITE8_MEMBER(bgbank_w);
|
DECLARE_WRITE_LINE_MEMBER(bgbank_w);
|
||||||
DECLARE_WRITE8_MEMBER(flip_w);
|
DECLARE_WRITE_LINE_MEMBER(flip_w);
|
||||||
DECLARE_READ8_MEMBER(custom_r);
|
DECLARE_READ8_MEMBER(custom_r);
|
||||||
|
|
||||||
TILE_GET_INFO_MEMBER(get_tile_info);
|
TILE_GET_INFO_MEMBER(get_tile_info);
|
||||||
@ -244,14 +249,28 @@ WRITE8_MEMBER(pturn_state::videoram_w)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
WRITE8_MEMBER(pturn_state::nmi_main_enable_w)
|
WRITE_LINE_MEMBER(pturn_state::nmi_main_enable_w)
|
||||||
{
|
{
|
||||||
m_nmi_main = data;
|
m_nmi_main = state;
|
||||||
|
if (!m_nmi_main)
|
||||||
|
m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_MEMBER(pturn_state::nmi_sub_enable_w)
|
WRITE8_MEMBER(pturn_state::nmi_sub_enable_w)
|
||||||
{
|
{
|
||||||
m_nmi_sub = data;
|
m_nmi_sub = BIT(data, 0);
|
||||||
|
if (!m_nmi_sub)
|
||||||
|
m_audiocpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
|
||||||
|
}
|
||||||
|
|
||||||
|
WRITE_LINE_MEMBER(pturn_state::coin_counter_1_w)
|
||||||
|
{
|
||||||
|
machine().bookkeeping().coin_counter_w(0, state);
|
||||||
|
}
|
||||||
|
|
||||||
|
WRITE_LINE_MEMBER(pturn_state::coin_counter_2_w)
|
||||||
|
{
|
||||||
|
machine().bookkeeping().coin_counter_w(1, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_MEMBER(pturn_state::bgcolor_w)
|
WRITE8_MEMBER(pturn_state::bgcolor_w)
|
||||||
@ -277,21 +296,21 @@ WRITE8_MEMBER(pturn_state::bg_scrolly_w)
|
|||||||
m_bgmap->set_scrollx(0, data);
|
m_bgmap->set_scrollx(0, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_MEMBER(pturn_state::fgbank_w)
|
WRITE_LINE_MEMBER(pturn_state::fgbank_w)
|
||||||
{
|
{
|
||||||
m_fgbank=data&1;
|
m_fgbank = state;
|
||||||
m_fgmap->mark_all_dirty();
|
m_fgmap->mark_all_dirty();
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_MEMBER(pturn_state::bgbank_w)
|
WRITE_LINE_MEMBER(pturn_state::bgbank_w)
|
||||||
{
|
{
|
||||||
m_bgbank=data&1;
|
m_bgbank = state;
|
||||||
m_bgmap->mark_all_dirty();
|
m_bgmap->mark_all_dirty();
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_MEMBER(pturn_state::flip_w)
|
WRITE_LINE_MEMBER(pturn_state::flip_w)
|
||||||
{
|
{
|
||||||
flip_screen_set(data);
|
flip_screen_set(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -344,14 +363,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, pturn_state )
|
|||||||
AM_RANGE(0xf805, 0xf805) AM_READ_PORT("DSW1")
|
AM_RANGE(0xf805, 0xf805) AM_READ_PORT("DSW1")
|
||||||
AM_RANGE(0xf806, 0xf806) AM_READNOP /* Protection related, ((val&3)==2) -> jump to 0 */
|
AM_RANGE(0xf806, 0xf806) AM_READNOP /* Protection related, ((val&3)==2) -> jump to 0 */
|
||||||
|
|
||||||
AM_RANGE(0xfc00, 0xfc00) AM_WRITE(flip_w)
|
AM_RANGE(0xfc00, 0xfc07) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||||
AM_RANGE(0xfc01, 0xfc01) AM_WRITE(nmi_main_enable_w)
|
|
||||||
AM_RANGE(0xfc02, 0xfc02) AM_WRITENOP /* Unknown */
|
|
||||||
AM_RANGE(0xfc03, 0xfc03) AM_WRITENOP /* Unknown */
|
|
||||||
AM_RANGE(0xfc04, 0xfc04) AM_WRITE(bgbank_w)
|
|
||||||
AM_RANGE(0xfc05, 0xfc05) AM_WRITE(fgbank_w)
|
|
||||||
AM_RANGE(0xfc06, 0xfc06) AM_WRITENOP /* Unknown */
|
|
||||||
AM_RANGE(0xfc07, 0xfc07) AM_WRITENOP /* Unknown */
|
|
||||||
|
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
@ -472,18 +484,14 @@ INPUT_PORTS_END
|
|||||||
|
|
||||||
INTERRUPT_GEN_MEMBER(pturn_state::sub_intgen)
|
INTERRUPT_GEN_MEMBER(pturn_state::sub_intgen)
|
||||||
{
|
{
|
||||||
if(m_nmi_sub)
|
if (m_nmi_sub)
|
||||||
{
|
device.execute().set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
|
||||||
device.execute().set_input_line(INPUT_LINE_NMI,PULSE_LINE);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
INTERRUPT_GEN_MEMBER(pturn_state::main_intgen)
|
INTERRUPT_GEN_MEMBER(pturn_state::main_intgen)
|
||||||
{
|
{
|
||||||
if (m_nmi_main)
|
if (m_nmi_main)
|
||||||
{
|
device.execute().set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
|
||||||
device.execute().set_input_line(INPUT_LINE_NMI,PULSE_LINE);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void pturn_state::machine_start()
|
void pturn_state::machine_start()
|
||||||
@ -496,6 +504,7 @@ void pturn_state::machine_reset()
|
|||||||
{
|
{
|
||||||
address_space &space = m_maincpu->space(AS_PROGRAM);
|
address_space &space = m_maincpu->space(AS_PROGRAM);
|
||||||
m_soundlatch->clear_w(space,0,0);
|
m_soundlatch->clear_w(space,0,0);
|
||||||
|
m_nmi_sub = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static MACHINE_CONFIG_START( pturn )
|
static MACHINE_CONFIG_START( pturn )
|
||||||
@ -507,6 +516,14 @@ static MACHINE_CONFIG_START( pturn )
|
|||||||
MCFG_CPU_PROGRAM_MAP(sub_map)
|
MCFG_CPU_PROGRAM_MAP(sub_map)
|
||||||
MCFG_CPU_PERIODIC_INT_DRIVER(pturn_state, sub_intgen, 3*60)
|
MCFG_CPU_PERIODIC_INT_DRIVER(pturn_state, sub_intgen, 3*60)
|
||||||
|
|
||||||
|
MCFG_DEVICE_ADD("mainlatch", LS259, 0)
|
||||||
|
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(pturn_state, flip_w))
|
||||||
|
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(pturn_state, nmi_main_enable_w))
|
||||||
|
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(pturn_state, coin_counter_1_w))
|
||||||
|
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(pturn_state, coin_counter_2_w))
|
||||||
|
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(pturn_state, bgbank_w))
|
||||||
|
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(pturn_state, fgbank_w))
|
||||||
|
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(NOOP) // toggles frequently during gameplay
|
||||||
|
|
||||||
MCFG_SCREEN_ADD("screen", RASTER)
|
MCFG_SCREEN_ADD("screen", RASTER)
|
||||||
MCFG_SCREEN_REFRESH_RATE(60)
|
MCFG_SCREEN_REFRESH_RATE(60)
|
||||||
|
Loading…
Reference in New Issue
Block a user