summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/zaccaria.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/zaccaria.c')
-rw-r--r--src/mame/drivers/zaccaria.c109
1 files changed, 61 insertions, 48 deletions
diff --git a/src/mame/drivers/zaccaria.c b/src/mame/drivers/zaccaria.c
index d00716d7703..18280228bed 100644
--- a/src/mame/drivers/zaccaria.c
+++ b/src/mame/drivers/zaccaria.c
@@ -40,15 +40,33 @@ Notes:
#include "emu.h"
#include "cpu/z80/z80.h"
#include "cpu/m6800/m6800.h"
-#include "machine/6821pia.h"
#include "machine/i8255.h"
-#include "sound/ay8910.h"
-#include "sound/dac.h"
-#include "sound/tms5220.h"
#include "includes/zaccaria.h"
-WRITE8_MEMBER(zaccaria_state::zaccaria_dsw_sel_w)
+void zaccaria_state::machine_start()
+{
+ save_item(NAME(m_dsw_sel));
+ save_item(NAME(m_active_8910));
+ save_item(NAME(m_port0a));
+ save_item(NAME(m_acs));
+ save_item(NAME(m_last_port0b));
+ save_item(NAME(m_toggle));
+ save_item(NAME(m_nmi_mask));
+}
+
+void zaccaria_state::machine_reset()
+{
+ m_dsw_sel = 0;
+ m_active_8910 = 0;
+ m_port0a = 0;
+ m_acs = 0;
+ m_last_port0b = 0;
+ m_toggle = 0;
+ m_nmi_mask = 0;
+}
+
+WRITE8_MEMBER(zaccaria_state::dsw_sel_w)
{
switch (data & 0xf0)
{
@@ -70,7 +88,7 @@ WRITE8_MEMBER(zaccaria_state::zaccaria_dsw_sel_w)
}
}
-READ8_MEMBER(zaccaria_state::zaccaria_dsw_r)
+READ8_MEMBER(zaccaria_state::dsw_r)
{
return m_dsw_port[m_dsw_sel]->read();
}
@@ -94,37 +112,37 @@ WRITE8_MEMBER(zaccaria_state::ay8910_port0a_w)
/* 150 below to scale to volume 100 */
v = (150 * table[ba]) / (4700 + table[ba]);
//printf("dac1w %02d %04d\n", ba, v);
- machine().device<ay8910_device>("ay2")->set_volume(1, v);
+ m_ay2->set_volume(1, v);
}
-WRITE_LINE_MEMBER(zaccaria_state::zaccaria_irq0a)
+WRITE_LINE_MEMBER(zaccaria_state::irq0a)
{
m_audiocpu->set_input_line(INPUT_LINE_NMI, state ? ASSERT_LINE : CLEAR_LINE);
}
-WRITE_LINE_MEMBER(zaccaria_state::zaccaria_irq0b)
+WRITE_LINE_MEMBER(zaccaria_state::irq0b)
{
m_audiocpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE);
}
-READ8_MEMBER(zaccaria_state::zaccaria_port0a_r)
+READ8_MEMBER(zaccaria_state::port0a_r)
{
- return machine().device<ay8910_device>((m_active_8910 == 0) ? "ay1" : "ay2")->data_r(space, 0);
+ return (m_active_8910 == 0) ? m_ay1->data_r(space, 0) : m_ay2->data_r(space, 0);
}
-WRITE8_MEMBER(zaccaria_state::zaccaria_port0a_w)
+WRITE8_MEMBER(zaccaria_state::port0a_w)
{
m_port0a = data;
}
-WRITE8_MEMBER(zaccaria_state::zaccaria_port0b_w)
+WRITE8_MEMBER(zaccaria_state::port0b_w)
{
/* bit 1 goes to 8910 #0 BDIR pin */
if ((m_last_port0b & 0x02) == 0x02 && (data & 0x02) == 0x00)
{
/* bit 0 goes to the 8910 #0 BC1 pin */
- machine().device<ay8910_device>("ay1")->data_address_w(space, m_last_port0b, m_port0a);
+ m_ay1->data_address_w(space, m_last_port0b, m_port0a);
}
else if ((m_last_port0b & 0x02) == 0x00 && (data & 0x02) == 0x02)
{
@@ -136,7 +154,7 @@ WRITE8_MEMBER(zaccaria_state::zaccaria_port0b_w)
if ((m_last_port0b & 0x08) == 0x08 && (data & 0x08) == 0x00)
{
/* bit 2 goes to the 8910 #1 BC1 pin */
- machine().device<ay8910_device>("ay2")->data_address_w(space, m_last_port0b >> 2, m_port0a);
+ m_ay2->data_address_w(space, m_last_port0b >> 2, m_port0a);
}
else if ((m_last_port0b & 0x08) == 0x00 && (data & 0x08) == 0x08)
{
@@ -148,22 +166,18 @@ WRITE8_MEMBER(zaccaria_state::zaccaria_port0b_w)
m_last_port0b = data;
}
-INTERRUPT_GEN_MEMBER(zaccaria_state::zaccaria_cb1_toggle)
+INTERRUPT_GEN_MEMBER(zaccaria_state::cb1_toggle)
{
- pia6821_device *pia0 = machine().device<pia6821_device>("pia0");
-
- pia0->cb1_w(m_toggle & 1);
+ m_pia->cb1_w(m_toggle & 1);
m_toggle ^= 1;
}
-WRITE8_MEMBER(zaccaria_state::zaccaria_port1b_w)
+WRITE8_MEMBER(zaccaria_state::port1b_w)
{
- tms5220_device *tms5220 = machine().device<tms5220_device>("tms");
-
// bit 0 = /RS
- tms5220->rsq_w((data >> 0) & 0x01);
+ m_tms->rsq_w((data >> 0) & 0x01);
// bit 1 = /WS
- tms5220->wsq_w((data >> 1) & 0x01);
+ m_tms->wsq_w((data >> 1) & 0x01);
// bit 3 = "ACS" (goes, inverted, to input port 6 bit 3)
m_acs = ~data & 0x08;
@@ -181,8 +195,7 @@ WRITE8_MEMBER(zaccaria_state::sound_command_w)
WRITE8_MEMBER(zaccaria_state::sound1_command_w)
{
- pia6821_device *pia0 = machine().device<pia6821_device>("pia0");
- pia0->ca1_w(data & 0x80);
+ m_pia->ca1_w(data & 0x80);
soundlatch2_byte_w(space, 0, data);
}
@@ -194,7 +207,7 @@ WRITE8_MEMBER(zaccaria_state::mc1408_data_w)
GAME_EXTERN(monymony);
-READ8_MEMBER(zaccaria_state::zaccaria_prot1_r)
+READ8_MEMBER(zaccaria_state::prot1_r)
{
switch (offset)
{
@@ -214,7 +227,7 @@ READ8_MEMBER(zaccaria_state::zaccaria_prot1_r)
}
}
-READ8_MEMBER(zaccaria_state::zaccaria_prot2_r)
+READ8_MEMBER(zaccaria_state::prot2_r)
{
switch (offset)
{
@@ -249,18 +262,18 @@ WRITE8_MEMBER(zaccaria_state::nmi_mask_w)
static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, zaccaria_state )
AM_RANGE(0x0000, 0x5fff) AM_ROM
AM_RANGE(0x6000, 0x63ff) AM_READONLY
- AM_RANGE(0x6400, 0x6407) AM_READ(zaccaria_prot1_r)
- AM_RANGE(0x6000, 0x67ff) AM_WRITE(zaccaria_videoram_w) AM_SHARE("videoram") /* 6400-67ff is 4 bits wide */
- AM_RANGE(0x6800, 0x683f) AM_WRITE(zaccaria_attributes_w) AM_SHARE("attributesram")
+ AM_RANGE(0x6400, 0x6407) AM_READ(prot1_r)
+ AM_RANGE(0x6000, 0x67ff) AM_WRITE(videoram_w) AM_SHARE("videoram") /* 6400-67ff is 4 bits wide */
+ AM_RANGE(0x6800, 0x683f) AM_WRITE(attributes_w) AM_SHARE("attributesram")
AM_RANGE(0x6840, 0x685f) AM_RAM AM_SHARE("spriteram")
AM_RANGE(0x6881, 0x68c0) AM_RAM AM_SHARE("spriteram2")
- AM_RANGE(0x6c00, 0x6c00) AM_WRITE(zaccaria_flip_screen_x_w)
- AM_RANGE(0x6c01, 0x6c01) AM_WRITE(zaccaria_flip_screen_y_w)
+ AM_RANGE(0x6c00, 0x6c00) AM_WRITE(flip_screen_x_w)
+ AM_RANGE(0x6c01, 0x6c01) AM_WRITE(flip_screen_y_w)
AM_RANGE(0x6c02, 0x6c02) AM_WRITENOP /* sound reset */
AM_RANGE(0x6c06, 0x6c06) AM_WRITE(coin_w)
AM_RANGE(0x6c07, 0x6c07) AM_WRITE(nmi_mask_w)
- AM_RANGE(0x6c00, 0x6c07) AM_READ(zaccaria_prot2_r)
- AM_RANGE(0x6e00, 0x6e00) AM_READWRITE(zaccaria_dsw_r, sound_command_w)
+ AM_RANGE(0x6c00, 0x6c07) AM_READ(prot2_r)
+ AM_RANGE(0x6e00, 0x6e00) AM_READWRITE(dsw_r, sound_command_w)
AM_RANGE(0x7000, 0x77ff) AM_RAM
AM_RANGE(0x7800, 0x7803) AM_DEVREADWRITE("ppi8255", i8255_device, read, write)
AM_RANGE(0x7c00, 0x7c00) AM_READ(watchdog_reset_r)
@@ -511,7 +524,7 @@ static MACHINE_CONFIG_START( zaccaria, zaccaria_state )
MCFG_CPU_ADD("audiocpu", M6802,XTAL_3_579545MHz) /* verified on pcb */
MCFG_CPU_PROGRAM_MAP(sound_map_1)
- MCFG_CPU_PERIODIC_INT_DRIVER(zaccaria_state, zaccaria_cb1_toggle, (double)XTAL_3_579545MHz/4096)
+ MCFG_CPU_PERIODIC_INT_DRIVER(zaccaria_state, cb1_toggle, (double)XTAL_3_579545MHz/4096)
MCFG_QUANTUM_TIME(attotime::from_hz(1000000))
MCFG_CPU_ADD("audio2", M6802,XTAL_3_579545MHz) /* verified on pcb */
@@ -522,19 +535,19 @@ static MACHINE_CONFIG_START( zaccaria, zaccaria_state )
MCFG_I8255_IN_PORTA_CB(IOPORT("P1"))
MCFG_I8255_IN_PORTB_CB(IOPORT("P2"))
MCFG_I8255_IN_PORTC_CB(IOPORT("SYSTEM"))
- MCFG_I8255_OUT_PORTC_CB(WRITE8(zaccaria_state, zaccaria_dsw_sel_w))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(zaccaria_state, dsw_sel_w))
MCFG_DEVICE_ADD( "pia0", PIA6821, 0)
- MCFG_PIA_READPA_HANDLER(READ8(zaccaria_state, zaccaria_port0a_r))
- MCFG_PIA_WRITEPA_HANDLER(WRITE8(zaccaria_state, zaccaria_port0a_w))
- MCFG_PIA_WRITEPB_HANDLER(WRITE8(zaccaria_state, zaccaria_port0b_w))
- MCFG_PIA_IRQA_HANDLER(WRITELINE(zaccaria_state, zaccaria_irq0a))
- MCFG_PIA_IRQB_HANDLER(WRITELINE(zaccaria_state, zaccaria_irq0b))
+ MCFG_PIA_READPA_HANDLER(READ8(zaccaria_state, port0a_r))
+ MCFG_PIA_WRITEPA_HANDLER(WRITE8(zaccaria_state, port0a_w))
+ MCFG_PIA_WRITEPB_HANDLER(WRITE8(zaccaria_state, port0b_w))
+ MCFG_PIA_IRQA_HANDLER(WRITELINE(zaccaria_state, irq0a))
+ MCFG_PIA_IRQB_HANDLER(WRITELINE(zaccaria_state, irq0b))
MCFG_DEVICE_ADD( "pia1", PIA6821, 0)
MCFG_PIA_READPA_HANDLER(DEVREAD8("tms", tms5220_device, status_r))
MCFG_PIA_WRITEPA_HANDLER(DEVWRITE8("tms", tms5220_device, data_w))
- MCFG_PIA_WRITEPB_HANDLER(WRITE8(zaccaria_state,zaccaria_port1b_w))
+ MCFG_PIA_WRITEPB_HANDLER(WRITE8(zaccaria_state,port1b_w))
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@@ -542,7 +555,7 @@ static MACHINE_CONFIG_START( zaccaria, zaccaria_state )
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
MCFG_SCREEN_SIZE(32*8, 32*8)
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(zaccaria_state, screen_update_zaccaria)
+ MCFG_SCREEN_UPDATE_DRIVER(zaccaria_state, screen_update)
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", zaccaria)
@@ -726,7 +739,7 @@ ROM_END
-GAME( 1983, monymony, 0, zaccaria, monymony, driver_device, 0, ROT90, "Zaccaria", "Money Money", GAME_IMPERFECT_SOUND )
-GAME( 1984, jackrabt, 0, zaccaria, jackrabt, driver_device, 0, ROT90, "Zaccaria", "Jack Rabbit (set 1)", GAME_IMPERFECT_SOUND )
-GAME( 1984, jackrabt2, jackrabt, zaccaria, jackrabt, driver_device, 0, ROT90, "Zaccaria", "Jack Rabbit (set 2)", GAME_IMPERFECT_SOUND )
-GAME( 1984, jackrabts, jackrabt, zaccaria, jackrabt, driver_device, 0, ROT90, "Zaccaria", "Jack Rabbit (special)", GAME_IMPERFECT_SOUND )
+GAME( 1983, monymony, 0, zaccaria, monymony, driver_device, 0, ROT90, "Zaccaria", "Money Money", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
+GAME( 1984, jackrabt, 0, zaccaria, jackrabt, driver_device, 0, ROT90, "Zaccaria", "Jack Rabbit (set 1)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
+GAME( 1984, jackrabt2, jackrabt, zaccaria, jackrabt, driver_device, 0, ROT90, "Zaccaria", "Jack Rabbit (set 2)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
+GAME( 1984, jackrabts, jackrabt, zaccaria, jackrabt, driver_device, 0, ROT90, "Zaccaria", "Jack Rabbit (special)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )