zaccaria.cpp: Add 74LS259; improve documentation (nw)

This commit is contained in:
AJR 2017-08-06 19:45:07 -04:00
parent 6f4adb8f5a
commit ef2cf163ae
3 changed files with 30 additions and 32 deletions

View file

@ -2,7 +2,7 @@
// copyright-holders:Nicola Salmoria // copyright-holders:Nicola Salmoria
/*************************************************************************** /***************************************************************************
Jack Rabbit memory map (preliminary) Zaccaria Z80µP hardware
driver by Nicola Salmoria driver by Nicola Salmoria
thanks to Andrea Babich for the manual. thanks to Andrea Babich for the manual.
@ -25,10 +25,10 @@ TODO:
Notes: Notes:
- There is a protection device on the memory board which is unidentified on the - The protection device at 1A on the ROM board (1B11147) is unidentified on the
schematics but appears to be a PAL16. It sits on bits 4-7 of the data bus, and schematics but appears to be a PAL16L8 or PAL16R4. It sits on bits 4-7 of the
is read from locations where only bits 0-3 are connected to regular devices data bus, and is read from locations where only bits 0-3 are connected to regular
(6400-6407 has 4-bit RAM, while 6c00-6c07 has a 4-bit input port). devices (6400-6407 has 4-bit RAM, while 6c00-6c07 has a 4-bit input port).
- The 6802 driving the TMS5220 has a push button connected to the NMI line. On - The 6802 driving the TMS5220 has a push button connected to the NMI line. On
Zaccaria pinballs, when pressed, this causes the speech 6802 and the slave Zaccaria pinballs, when pressed, this causes the speech 6802 and the slave
@ -43,6 +43,7 @@ Notes:
#include "includes/zaccaria.h" #include "includes/zaccaria.h"
#include "cpu/z80/z80.h" #include "cpu/z80/z80.h"
#include "machine/74259.h"
#include "machine/i8255.h" #include "machine/i8255.h"
#include "machine/watchdog.h" #include "machine/watchdog.h"
#include "screen.h" #include "screen.h"
@ -58,7 +59,6 @@ void zaccaria_state::machine_start()
void zaccaria_state::machine_reset() void zaccaria_state::machine_reset()
{ {
m_dsw_sel = 0; m_dsw_sel = 0;
m_nmi_mask = 0;
} }
WRITE8_MEMBER(zaccaria_state::dsw_sel_w) WRITE8_MEMBER(zaccaria_state::dsw_sel_w)
@ -133,14 +133,16 @@ READ8_MEMBER(zaccaria_state::prot2_r)
} }
WRITE8_MEMBER(zaccaria_state::coin_w) WRITE_LINE_MEMBER(zaccaria_state::coin_w)
{ {
machine().bookkeeping().coin_counter_w(0,data & 1); machine().bookkeeping().coin_counter_w(0, state);
} }
WRITE8_MEMBER(zaccaria_state::nmi_mask_w) WRITE_LINE_MEMBER(zaccaria_state::nmi_mask_w)
{ {
m_nmi_mask = data & 1; m_nmi_mask = state;
if (!m_nmi_mask)
m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
} }
static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, zaccaria_state ) static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, zaccaria_state )
@ -151,12 +153,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, zaccaria_state )
AM_RANGE(0x6800, 0x683f) AM_WRITE(attributes_w) AM_SHARE("attributesram") AM_RANGE(0x6800, 0x683f) AM_WRITE(attributes_w) AM_SHARE("attributesram")
AM_RANGE(0x6840, 0x685f) AM_RAM AM_SHARE("spriteram") AM_RANGE(0x6840, 0x685f) AM_RAM AM_SHARE("spriteram")
AM_RANGE(0x6881, 0x68c0) AM_RAM AM_SHARE("spriteram2") AM_RANGE(0x6881, 0x68c0) AM_RAM AM_SHARE("spriteram2")
AM_RANGE(0x6c00, 0x6c00) AM_MIRROR(0x81f8) AM_WRITE(flip_screen_x_w) AM_RANGE(0x6c00, 0x6c07) AM_MIRROR(0x81f8) AM_READ(prot2_r) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE(0x6c01, 0x6c01) AM_MIRROR(0x81f8) AM_WRITE(flip_screen_y_w)
AM_RANGE(0x6c02, 0x6c02) AM_MIRROR(0x81f8) AM_WRITE(ressound_w)
AM_RANGE(0x6c06, 0x6c06) AM_MIRROR(0x81f8) AM_WRITE(coin_w)
AM_RANGE(0x6c07, 0x6c07) AM_MIRROR(0x81f8) AM_WRITE(nmi_mask_w)
AM_RANGE(0x6c00, 0x6c07) AM_MIRROR(0x81f8) AM_READ(prot2_r)
AM_RANGE(0x6e00, 0x6e00) AM_MIRROR(0x81f8) AM_READ(dsw_r) AM_DEVWRITE("audiopcb", zac1b11142_audio_device, hs_w) AM_RANGE(0x6e00, 0x6e00) AM_MIRROR(0x81f8) AM_READ(dsw_r) AM_DEVWRITE("audiopcb", zac1b11142_audio_device, hs_w)
AM_RANGE(0x7000, 0x77ff) AM_RAM AM_RANGE(0x7000, 0x77ff) AM_RAM
AM_RANGE(0x7800, 0x7803) AM_DEVREADWRITE("ppi8255", i8255_device, read, write) AM_RANGE(0x7800, 0x7803) AM_DEVREADWRITE("ppi8255", i8255_device, read, write)
@ -165,11 +162,6 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, zaccaria_state )
ADDRESS_MAP_END ADDRESS_MAP_END
WRITE8_MEMBER(zaccaria_state::ressound_w)
{
m_audiopcb->ressound_w(data & 0x01);
}
static INPUT_PORTS_START( monymony ) static INPUT_PORTS_START( monymony )
PORT_START("DSW.0") PORT_START("DSW.0")
PORT_DIPNAME( 0x03, 0x01, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW 5I:1,2") PORT_DIPNAME( 0x03, 0x01, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW 5I:1,2")
@ -333,8 +325,8 @@ GFXDECODE_END
INTERRUPT_GEN_MEMBER(zaccaria_state::vblank_irq) INTERRUPT_GEN_MEMBER(zaccaria_state::vblank_irq)
{ {
if(m_nmi_mask) if (m_nmi_mask)
device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE); device.execute().set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
} }
@ -348,6 +340,13 @@ static MACHINE_CONFIG_START( zaccaria )
MCFG_WATCHDOG_ADD("watchdog") MCFG_WATCHDOG_ADD("watchdog")
MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 3G on 1B1141 I/O (Z80) board
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(zaccaria_state, flip_screen_x_w)) // VCMA
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(zaccaria_state, flip_screen_y_w)) // HCMA
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE("audiopcb", zac1b11142_audio_device, ressound_w)) // RESSOUND
MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(zaccaria_state, coin_w)) // COUNT
MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(zaccaria_state, nmi_mask_w)) // INTST
MCFG_DEVICE_ADD("ppi8255", I8255A, 0) MCFG_DEVICE_ADD("ppi8255", I8255A, 0)
MCFG_I8255_IN_PORTA_CB(IOPORT("P1")) MCFG_I8255_IN_PORTA_CB(IOPORT("P1"))
MCFG_I8255_IN_PORTB_CB(IOPORT("P2")) MCFG_I8255_IN_PORTB_CB(IOPORT("P2"))

View file

@ -21,13 +21,12 @@ public:
DECLARE_READ8_MEMBER(dsw_r); DECLARE_READ8_MEMBER(dsw_r);
DECLARE_READ8_MEMBER(prot1_r); DECLARE_READ8_MEMBER(prot1_r);
DECLARE_READ8_MEMBER(prot2_r); DECLARE_READ8_MEMBER(prot2_r);
DECLARE_WRITE8_MEMBER(coin_w); DECLARE_WRITE_LINE_MEMBER(coin_w);
DECLARE_WRITE8_MEMBER(nmi_mask_w); DECLARE_WRITE_LINE_MEMBER(nmi_mask_w);
DECLARE_WRITE8_MEMBER(videoram_w); DECLARE_WRITE8_MEMBER(videoram_w);
DECLARE_WRITE8_MEMBER(attributes_w); DECLARE_WRITE8_MEMBER(attributes_w);
DECLARE_WRITE8_MEMBER(flip_screen_x_w); DECLARE_WRITE_LINE_MEMBER(flip_screen_x_w);
DECLARE_WRITE8_MEMBER(flip_screen_y_w); DECLARE_WRITE_LINE_MEMBER(flip_screen_y_w);
DECLARE_WRITE8_MEMBER(ressound_w);
DECLARE_WRITE8_MEMBER(dsw_sel_w); DECLARE_WRITE8_MEMBER(dsw_sel_w);
TILE_GET_INFO_MEMBER(get_tile_info); TILE_GET_INFO_MEMBER(get_tile_info);
virtual void machine_start() override; virtual void machine_start() override;

View file

@ -168,14 +168,14 @@ WRITE8_MEMBER(zaccaria_state::attributes_w)
m_attributesram[offset] = data; m_attributesram[offset] = data;
} }
WRITE8_MEMBER(zaccaria_state::flip_screen_x_w) WRITE_LINE_MEMBER(zaccaria_state::flip_screen_x_w)
{ {
flip_screen_x_set(data & 1); flip_screen_x_set(state);
} }
WRITE8_MEMBER(zaccaria_state::flip_screen_y_w) WRITE_LINE_MEMBER(zaccaria_state::flip_screen_y_w)
{ {
flip_screen_y_set(data & 1); flip_screen_y_set(state);
} }