mirror of
https://github.com/holub/mame
synced 2025-04-22 16:31:49 +03:00
mario: Add coin counters and 74LS259
This commit is contained in:
parent
cc544e98c4
commit
afe7fe0787
@ -95,6 +95,7 @@ write:
|
||||
#include "includes/mario.h"
|
||||
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "machine/74259.h"
|
||||
#include "machine/z80dma.h"
|
||||
#include "screen.h"
|
||||
|
||||
@ -117,14 +118,21 @@ WRITE8_MEMBER(mario_state::memory_write_byte)
|
||||
return prog_space.write_byte(offset, data);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(mario_state::mario_z80dma_rdy_w)
|
||||
WRITE_LINE_MEMBER(mario_state::nmi_mask_w)
|
||||
{
|
||||
m_z80dma->rdy_w(data & 0x01);
|
||||
m_nmi_mask = state;
|
||||
if (!state)
|
||||
m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(mario_state::nmi_mask_w)
|
||||
WRITE_LINE_MEMBER(mario_state::coin_counter_1_w)
|
||||
{
|
||||
m_nmi_mask = data & 1;
|
||||
machine().bookkeeping().coin_counter_w(0, state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(mario_state::coin_counter_2_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(1, state);
|
||||
}
|
||||
|
||||
/*************************************
|
||||
@ -142,11 +150,7 @@ static ADDRESS_MAP_START( mario_map, AS_PROGRAM, 8, mario_state)
|
||||
AM_RANGE(0x7c80, 0x7c80) AM_READ_PORT("IN1") AM_WRITE(mario_sh2_w) /* Luigi run sample */
|
||||
AM_RANGE(0x7d00, 0x7d00) AM_WRITE(mario_scroll_w)
|
||||
AM_RANGE(0x7e00, 0x7e00) AM_WRITE(mario_sh_tuneselect_w)
|
||||
AM_RANGE(0x7e80, 0x7e80) AM_WRITE(mario_gfxbank_w)
|
||||
AM_RANGE(0x7e82, 0x7e82) AM_WRITE(mario_flip_w)
|
||||
AM_RANGE(0x7e83, 0x7e83) AM_WRITE(mario_palettebank_w)
|
||||
AM_RANGE(0x7e84, 0x7e84) AM_WRITE(nmi_mask_w)
|
||||
AM_RANGE(0x7e85, 0x7e85) AM_WRITE(mario_z80dma_rdy_w) /* ==> DMA Chip */
|
||||
AM_RANGE(0x7e80, 0x7e87) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
AM_RANGE(0x7f00, 0x7f07) AM_WRITE(mario_sh3_w) /* Sound port */
|
||||
AM_RANGE(0x7f80, 0x7f80) AM_READ_PORT("DSW") /* DSW */
|
||||
AM_RANGE(0xf000, 0xffff) AM_ROM
|
||||
@ -161,11 +165,7 @@ static ADDRESS_MAP_START( masao_map, AS_PROGRAM, 8, mario_state)
|
||||
AM_RANGE(0x7c80, 0x7c80) AM_READ_PORT("IN1")
|
||||
AM_RANGE(0x7d00, 0x7d00) AM_WRITE(mario_scroll_w)
|
||||
AM_RANGE(0x7e00, 0x7e00) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
|
||||
AM_RANGE(0x7e80, 0x7e80) AM_WRITE(mario_gfxbank_w)
|
||||
AM_RANGE(0x7e82, 0x7e82) AM_WRITE(mario_flip_w)
|
||||
AM_RANGE(0x7e83, 0x7e83) AM_WRITE(mario_palettebank_w)
|
||||
AM_RANGE(0x7e84, 0x7e84) AM_WRITE(nmi_mask_w)
|
||||
AM_RANGE(0x7e85, 0x7e85) AM_WRITE(mario_z80dma_rdy_w) /* ==> DMA Chip */
|
||||
AM_RANGE(0x7e80, 0x7e87) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
AM_RANGE(0x7f00, 0x7f00) AM_WRITE(masao_sh_irqtrigger_w)
|
||||
AM_RANGE(0x7f80, 0x7f80) AM_READ_PORT("DSW") /* DSW */
|
||||
AM_RANGE(0xf000, 0xffff) AM_ROM
|
||||
@ -329,7 +329,7 @@ GFXDECODE_END
|
||||
INTERRUPT_GEN_MEMBER(mario_state::vblank_irq)
|
||||
{
|
||||
if(m_nmi_mask)
|
||||
device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE);
|
||||
device.execute().set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
|
||||
}
|
||||
|
||||
static MACHINE_CONFIG_START( mario_base )
|
||||
@ -346,6 +346,16 @@ static MACHINE_CONFIG_START( mario_base )
|
||||
MCFG_Z80DMA_IN_MREQ_CB(READ8(mario_state, memory_read_byte))
|
||||
MCFG_Z80DMA_OUT_MREQ_CB(WRITE8(mario_state, memory_write_byte))
|
||||
|
||||
MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 2L (7E80H)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(mario_state, gfx_bank_w)) // ~T ROM
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(NOOP) // 2 PSL
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(mario_state, flip_w)) // FLIP
|
||||
MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(mario_state, palette_bank_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(mario_state, nmi_mask_w)) // NMI EI
|
||||
MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("z80dma", z80dma_device, rdy_w)) // DMA SET
|
||||
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(mario_state, coin_counter_1_w)) // COUNTER 2 (misnumbered on schematic)
|
||||
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(mario_state, coin_counter_2_w)) // COUNTER 1 (misnumbered on schematic)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART)
|
||||
|
@ -105,13 +105,15 @@ public:
|
||||
tilemap_t *m_bg_tilemap;
|
||||
int m_monitor;
|
||||
|
||||
uint8_t m_nmi_mask;
|
||||
DECLARE_WRITE8_MEMBER(nmi_mask_w);
|
||||
bool m_nmi_mask;
|
||||
DECLARE_WRITE_LINE_MEMBER(nmi_mask_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(coin_counter_1_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(coin_counter_2_w);
|
||||
DECLARE_WRITE8_MEMBER(mario_videoram_w);
|
||||
DECLARE_WRITE8_MEMBER(mario_gfxbank_w);
|
||||
DECLARE_WRITE8_MEMBER(mario_palettebank_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(gfx_bank_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(palette_bank_w);
|
||||
DECLARE_WRITE8_MEMBER(mario_scroll_w);
|
||||
DECLARE_WRITE8_MEMBER(mario_flip_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(flip_w);
|
||||
DECLARE_READ8_MEMBER(mario_sh_p1_r);
|
||||
DECLARE_READ8_MEMBER(mario_sh_p2_r);
|
||||
DECLARE_READ_LINE_MEMBER(mario_sh_t0_r);
|
||||
@ -122,7 +124,6 @@ public:
|
||||
DECLARE_WRITE8_MEMBER(masao_sh_irqtrigger_w);
|
||||
DECLARE_WRITE8_MEMBER(mario_sh_tuneselect_w);
|
||||
DECLARE_WRITE8_MEMBER(mario_sh3_w);
|
||||
DECLARE_WRITE8_MEMBER(mario_z80dma_rdy_w);
|
||||
TILE_GET_INFO_MEMBER(get_bg_tile_info);
|
||||
virtual void video_start() override;
|
||||
virtual void sound_start() override;
|
||||
|
@ -84,22 +84,16 @@ WRITE8_MEMBER(mario_state::mario_videoram_w)
|
||||
m_bg_tilemap->mark_tile_dirty(offset);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(mario_state::mario_gfxbank_w)
|
||||
WRITE_LINE_MEMBER(mario_state::gfx_bank_w)
|
||||
{
|
||||
if (m_gfx_bank != (data & 0x01))
|
||||
{
|
||||
m_gfx_bank = data & 0x01;
|
||||
machine().tilemap().mark_all_dirty();
|
||||
}
|
||||
m_gfx_bank = state;
|
||||
machine().tilemap().mark_all_dirty();
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(mario_state::mario_palettebank_w)
|
||||
WRITE_LINE_MEMBER(mario_state::palette_bank_w)
|
||||
{
|
||||
if (m_palette_bank != (data & 0x01))
|
||||
{
|
||||
m_palette_bank = data & 0x01;
|
||||
machine().tilemap().mark_all_dirty();
|
||||
}
|
||||
m_palette_bank = state;
|
||||
machine().tilemap().mark_all_dirty();
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(mario_state::mario_scroll_w)
|
||||
@ -107,17 +101,14 @@ WRITE8_MEMBER(mario_state::mario_scroll_w)
|
||||
m_gfx_scroll = data + 17;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(mario_state::mario_flip_w)
|
||||
WRITE_LINE_MEMBER(mario_state::flip_w)
|
||||
{
|
||||
if (m_flip != (data & 0x01))
|
||||
{
|
||||
m_flip = data & 0x01;
|
||||
if (m_flip)
|
||||
machine().tilemap().set_flip_all(TILEMAP_FLIPX | TILEMAP_FLIPY);
|
||||
else
|
||||
machine().tilemap().set_flip_all(0);
|
||||
machine().tilemap().mark_all_dirty();
|
||||
}
|
||||
m_flip = state;
|
||||
if (m_flip)
|
||||
machine().tilemap().set_flip_all(TILEMAP_FLIPX | TILEMAP_FLIPY);
|
||||
else
|
||||
machine().tilemap().set_flip_all(0);
|
||||
machine().tilemap().mark_all_dirty();
|
||||
}
|
||||
|
||||
TILE_GET_INFO_MEMBER(mario_state::get_bg_tile_info)
|
||||
|
Loading…
Reference in New Issue
Block a user