diff options
Diffstat (limited to 'src/mame/drivers/zaccaria.c')
-rw-r--r-- | src/mame/drivers/zaccaria.c | 109 |
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 ) |