summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author Aaron Giles <aaron@aarongiles.com>2009-03-03 06:33:51 +0000
committer Aaron Giles <aaron@aarongiles.com>2009-03-03 06:33:51 +0000
commit30ca36ecaf2f2910adb0e94e4df8316f221e1723 (patch)
tree89d233f6be982a799c6f09c2688d814eeefb90c9 /src
parentef9e4cb805e41eeffe5837403f147c1371c9e800 (diff)
Remaining PIA device-ification.
Diffstat (limited to 'src')
-rw-r--r--src/mame/drivers/itech8.c36
-rw-r--r--src/mame/drivers/laserbat.c55
-rw-r--r--src/mame/drivers/maxaflex.c8
-rw-r--r--src/mame/drivers/maygay1b.c28
-rw-r--r--src/mame/drivers/maygayv1.c38
-rw-r--r--src/mame/drivers/mpu4.c411
-rw-r--r--src/mame/drivers/mpu4drvr.c39
-rw-r--r--src/mame/drivers/seta.c65
-rw-r--r--src/mame/drivers/toratora.c146
-rw-r--r--src/mame/drivers/zaccaria.c94
-rw-r--r--src/mame/includes/atari.h8
-rw-r--r--src/mame/machine/atari.c95
12 files changed, 567 insertions, 456 deletions
diff --git a/src/mame/drivers/itech8.c b/src/mame/drivers/itech8.c
index a2552a58be9..0f3b78cbcf4 100644
--- a/src/mame/drivers/itech8.c
+++ b/src/mame/drivers/itech8.c
@@ -499,7 +499,7 @@
#include "cpu/m68000/m68000.h"
#include "cpu/hd6309/hd6309.h"
#include "cpu/m6809/m6809.h"
-#include "machine/6821pia.h"
+#include "machine/6821new.h"
#include "machine/6522via.h"
#include "machine/ticket.h"
#include "video/tms34061.h"
@@ -546,14 +546,23 @@ static const rectangle *visarea;
*
*************************************/
-static WRITE8_HANDLER( pia_porta_out );
+static WRITE8_DEVICE_HANDLER( pia_porta_out );
static WRITE8_HANDLER( pia_portb_out );
static const pia6821_interface pia_interface =
{
- 0, ticket_dispenser_r, 0, 0, 0, 0, /* PIA inputs: A, B, CA1, CB1, CA2, CB2 */
- pia_porta_out, pia_portb_out, 0, 0, /* PIA outputs: A, B, CA2, CB2 */
- 0, 0 /* PIA IRQs: A, B */
+ DEVCB_NULL, /* port A in */
+ DEVCB_MEMORY_HANDLER("maincpu", PROGRAM, ticket_dispenser_r), /* port B in */
+ DEVCB_NULL, /* line CA1 in */
+ DEVCB_NULL, /* line CB1 in */
+ DEVCB_NULL, /* line CA2 in */
+ DEVCB_NULL, /* line CB2 in */
+ DEVCB_HANDLER(pia_porta_out), /* port A out */
+ DEVCB_MEMORY_HANDLER("maincpu", PROGRAM, pia_portb_out), /* port B out */
+ DEVCB_NULL, /* line CA2 out */
+ DEVCB_NULL, /* port CB2 out */
+ DEVCB_NULL, /* IRQA */
+ DEVCB_NULL /* IRQB */
};
@@ -654,15 +663,8 @@ static void generate_sound_irq(const device_config *device, int state)
static TIMER_CALLBACK( behind_the_beam_update );
-static MACHINE_START( itech8 )
-{
- pia_config(machine, 0, &pia_interface);
-}
-
static MACHINE_START( sstrike )
{
- MACHINE_START_CALL(itech8);
-
/* we need to update behind the beam as well */
timer_set(machine, video_screen_get_time_until_pos(machine->primary_screen, 0, 0), NULL, 32, behind_the_beam_update);
}
@@ -678,9 +680,6 @@ static MACHINE_RESET( itech8 )
device_reset(machine->cpu[0]);
}
- /* reset the PIA (if used) */
- pia_reset();
-
/* reset the ticket dispenser */
ticket_dispenser_init(machine, 200, TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW);
@@ -764,7 +763,7 @@ static CUSTOM_INPUT( special_r )
*
*************************************/
-static WRITE8_HANDLER( pia_porta_out )
+static WRITE8_DEVICE_HANDLER( pia_porta_out )
{
logerror("PIA port A write = %02x\n", data);
pia_porta_data = data;
@@ -992,7 +991,7 @@ static ADDRESS_MAP_START( sound3812_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x2000, 0x2001) AM_DEVREADWRITE("ym", ym3812_r, ym3812_w)
AM_RANGE(0x3000, 0x37ff) AM_RAM
AM_RANGE(0x4000, 0x4000) AM_DEVREADWRITE("oki", okim6295_r, okim6295_w)
- AM_RANGE(0x5000, 0x5003) AM_READWRITE(pia_0_r, pia_0_w)
+ AM_RANGE(0x5000, 0x5003) AM_DEVREADWRITE("pia", pia_r, pia_w)
AM_RANGE(0x8000, 0xffff) AM_ROM
ADDRESS_MAP_END
@@ -1728,7 +1727,6 @@ static MACHINE_DRIVER_START( itech8_core_lo )
MDRV_CPU_PROGRAM_MAP(tmslo_map,0)
MDRV_CPU_VBLANK_INT("screen", generate_nmi)
- MDRV_MACHINE_START(itech8)
MDRV_MACHINE_RESET(itech8)
MDRV_NVRAM_HANDLER(itech8)
@@ -1796,6 +1794,8 @@ static MACHINE_DRIVER_START( itech8_sound_ym3812 )
/* basic machine hardware */
MDRV_CPU_ADD("soundcpu", M6809, CLOCK_8MHz/4)
MDRV_CPU_PROGRAM_MAP(sound3812_map,0)
+
+ MDRV_PIA6821_ADD("pia", pia_interface)
/* sound hardware */
MDRV_SOUND_ADD("ym", YM3812, CLOCK_8MHz/2)
diff --git a/src/mame/drivers/laserbat.c b/src/mame/drivers/laserbat.c
index 48c1bcee67f..8df085e5fd4 100644
--- a/src/mame/drivers/laserbat.c
+++ b/src/mame/drivers/laserbat.c
@@ -19,7 +19,7 @@ TODO:
#include "driver.h"
#include "cpu/m6800/m6800.h"
#include "cpu/s2650/s2650.h"
-#include "machine/6821pia.h"
+#include "machine/6821new.h"
#include "video/s2636.h"
#include "sound/ay8910.h"
#include "sound/sn76477.h"
@@ -217,7 +217,7 @@ ADDRESS_MAP_END
// the same as in zaccaria.c ?
static ADDRESS_MAP_START( catnmous_sound_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x007f) AM_RAM
- AM_RANGE(0x500c, 0x500f) AM_READWRITE(pia_0_r, pia_0_w)
+ AM_RANGE(0x500c, 0x500f) AM_DEVREADWRITE("pia", pia_r, pia_w)
AM_RANGE(0xf000, 0xffff) AM_ROM
ADDRESS_MAP_END
@@ -595,22 +595,22 @@ static const sn76477_interface laserbat_sn76477_interface =
/* Cat'N Mouse sound ***********************************/
-static void zaccaria_irq0a(running_machine *machine, int state) { cpu_set_input_line(machine->cpu[1], INPUT_LINE_NMI, state ? ASSERT_LINE : CLEAR_LINE); }
-static void zaccaria_irq0b(running_machine *machine, int state) { cpu_set_input_line(machine->cpu[1],0,state ? ASSERT_LINE : CLEAR_LINE); }
+static WRITE_LINE_DEVICE_HANDLER( zaccaria_irq0a ) { cpu_set_input_line(device->machine->cpu[1], INPUT_LINE_NMI, state ? ASSERT_LINE : CLEAR_LINE); }
+static WRITE_LINE_DEVICE_HANDLER( zaccaria_irq0b ) { cpu_set_input_line(device->machine->cpu[1],0,state ? ASSERT_LINE : CLEAR_LINE); }
static int active_8910,port0a;
-static READ8_HANDLER( zaccaria_port0a_r )
+static READ8_DEVICE_HANDLER( zaccaria_port0a_r )
{
- return ay8910_r(devtag_get_device(space->machine, (active_8910 == 0) ? "ay1" : "ay2"), 0);
+ return ay8910_r(devtag_get_device(device->machine, (active_8910 == 0) ? "ay1" : "ay2"), 0);
}
-static WRITE8_HANDLER( zaccaria_port0a_w )
+static WRITE8_DEVICE_HANDLER( zaccaria_port0a_w )
{
port0a = data;
}
-static WRITE8_HANDLER( zaccaria_port0b_w )
+static WRITE8_DEVICE_HANDLER( zaccaria_port0b_w )
{
static int last;
@@ -619,7 +619,7 @@ static WRITE8_HANDLER( zaccaria_port0b_w )
if ((last & 0x02) == 0x02 && (data & 0x02) == 0x00)
{
/* bit 0 goes to the 8910 #0 BC1 pin */
- ay8910_data_address_w(devtag_get_device(space->machine, "ay1"), last >> 0, port0a);
+ ay8910_data_address_w(devtag_get_device(device->machine, "ay1"), last >> 0, port0a);
}
else if ((last & 0x02) == 0x00 && (data & 0x02) == 0x02)
{
@@ -631,7 +631,7 @@ static WRITE8_HANDLER( zaccaria_port0b_w )
if ((last & 0x08) == 0x08 && (data & 0x08) == 0x00)
{
/* bit 2 goes to the 8910 #1 BC1 pin */
- ay8910_data_address_w(devtag_get_device(space->machine, "ay2"), last >> 2, port0a);
+ ay8910_data_address_w(devtag_get_device(device->machine, "ay2"), last >> 2, port0a);
}
else if ((last & 0x08) == 0x00 && (data & 0x08) == 0x08)
{
@@ -643,11 +643,20 @@ static WRITE8_HANDLER( zaccaria_port0b_w )
last = data;
}
-static const pia6821_interface pia_0_intf =
+static const pia6821_interface pia_intf =
{
- /*inputs : A/B,CA/B1,CA/B2 */ zaccaria_port0a_r, 0, 0, 0, 0, 0,
- /*outputs: A/B,CA/B2 */ zaccaria_port0a_w, zaccaria_port0b_w, 0, 0,
- /*irqs : A/B */ zaccaria_irq0a, zaccaria_irq0b
+ DEVCB_HANDLER(zaccaria_port0a_r), /* port A in */
+ DEVCB_NULL, /* port B in */
+ DEVCB_NULL, /* line CA1 in */
+ DEVCB_NULL, /* line CB1 in */
+ DEVCB_NULL, /* line CA2 in */
+ DEVCB_NULL, /* line CB2 in */
+ DEVCB_HANDLER(zaccaria_port0a_w), /* port A out */
+ DEVCB_HANDLER(zaccaria_port0b_w), /* port B out */
+ DEVCB_NULL, /* line CA2 out */
+ DEVCB_NULL, /* port CB2 out */
+ DEVCB_LINE(zaccaria_irq0a), /* IRQA */
+ DEVCB_LINE(zaccaria_irq0b) /* IRQB */
};
static const ay8910_interface ay8910_config =
@@ -660,16 +669,6 @@ static const ay8910_interface ay8910_config =
DEVCB_NULL
};
-static MACHINE_START( catnmous )
-{
- pia_config(machine, 0, &pia_0_intf);
-}
-
-static MACHINE_RESET( catnmous )
-{
- pia_reset();
-}
-
static INTERRUPT_GEN( laserbat_interrupt )
{
@@ -678,9 +677,10 @@ static INTERRUPT_GEN( laserbat_interrupt )
static INTERRUPT_GEN( zaccaria_cb1_toggle )
{
+ const device_config *pia = devtag_get_device(device->machine, "pia");
static int toggle;
- pia_0_cb1_w(cpu_get_address_space(device, ADDRESS_SPACE_PROGRAM),0,toggle & 1);
+ pia_cb1_w(pia,0,toggle & 1);
toggle ^= 1;
}
@@ -729,9 +729,8 @@ static MACHINE_DRIVER_START( catnmous )
MDRV_CPU_ADD("audiocpu", M6802,3580000) /* ? */
MDRV_CPU_PROGRAM_MAP(catnmous_sound_map,0)
MDRV_CPU_PERIODIC_INT(zaccaria_cb1_toggle, (double)3580000/4096)
-
- MDRV_MACHINE_START(catnmous)
- MDRV_MACHINE_RESET(catnmous)
+
+ MDRV_PIA6821_ADD("pia", pia_intf)
/* video hardware */
MDRV_SCREEN_ADD("screen", RASTER)
diff --git a/src/mame/drivers/maxaflex.c b/src/mame/drivers/maxaflex.c
index cfa6d986481..646a43c654a 100644
--- a/src/mame/drivers/maxaflex.c
+++ b/src/mame/drivers/maxaflex.c
@@ -19,7 +19,7 @@
#include "includes/atari.h"
#include "sound/speaker.h"
#include "sound/pokey.h"
-#include "machine/6821pia.h"
+#include "machine/6821new.h"
#include "video/gtia.h"
#include "maxaflex.lh"
@@ -244,7 +244,7 @@ static ADDRESS_MAP_START(a600xl_mem, ADDRESS_SPACE_PROGRAM, 8)
AM_RANGE(0xd000, 0xd0ff) AM_READWRITE(atari_gtia_r, atari_gtia_w)
AM_RANGE(0xd100, 0xd1ff) AM_NOP
AM_RANGE(0xd200, 0xd2ff) AM_DEVREADWRITE("pokey", pokey_r, pokey_w)
- AM_RANGE(0xd300, 0xd3ff) AM_READWRITE(pia_0_alt_r, pia_0_alt_w)
+ AM_RANGE(0xd300, 0xd3ff) AM_DEVREADWRITE("pia", pia_alt_r, pia_alt_w)
AM_RANGE(0xd400, 0xd4ff) AM_READWRITE(atari_antic_r, atari_antic_w)
AM_RANGE(0xd500, 0xd7ff) AM_NOP
AM_RANGE(0xd800, 0xffff) AM_ROM /* OS */
@@ -435,6 +435,8 @@ static MACHINE_DRIVER_START( a600xl )
MDRV_CPU_ADD("mcu", M68705, 3579545)
MDRV_CPU_PROGRAM_MAP(mcu_mem,0)
+
+ MDRV_PIA6821_ADD("pia", a600xl_pia_interface)
/* video hardware */
MDRV_SCREEN_ADD("screen", RASTER)
@@ -444,7 +446,7 @@ static MACHINE_DRIVER_START( a600xl )
MDRV_SCREEN_REFRESH_RATE(FRAME_RATE_60HZ)
MDRV_SCREEN_SIZE(HWIDTH*8, TOTAL_LINES_60HZ)
- MDRV_PALETTE_LENGTH(sizeof(atari_palette) / sizeof(atari_palette[0]))
+ MDRV_PALETTE_LENGTH(ARRAY_LENGTH(atari_palette))
MDRV_PALETTE_INIT(atari)
MDRV_DEFAULT_LAYOUT(layout_maxaflex)
diff --git a/src/mame/drivers/maygay1b.c b/src/mame/drivers/maygay1b.c
index 7b59c8d3c2d..b994aae7d2c 100644
--- a/src/mame/drivers/maygay1b.c
+++ b/src/mame/drivers/maygay1b.c
@@ -13,7 +13,7 @@
#include "driver.h"
#include "cpu/m6809/m6809.h"
#include "video/awpvid.h" //Fruit Machines Only
-#include "machine/6821pia.h"
+#include "machine/6821new.h"
#include "machine/68681.h"
#include "machine/meters.h"
#include "machine/roc10937.h" // vfd
@@ -487,7 +487,7 @@ static void cpu0_nmi(int state)
6821 PIA
***************************************************************************/
-static WRITE8_HANDLER( m1_pia_porta_w )
+static WRITE8_DEVICE_HANDLER( m1_pia_porta_w )
{
if ( data & 0x40 ) ROC10937_reset(0);
@@ -501,7 +501,7 @@ static WRITE8_HANDLER( m1_pia_porta_w )
ROC10937_draw_16seg(0);
}
-static WRITE8_HANDLER( m1_pia_portb_w )
+static WRITE8_DEVICE_HANDLER( m1_pia_portb_w )
{
int i;
for (i=0; i<8; i++)
@@ -510,9 +510,18 @@ static WRITE8_HANDLER( m1_pia_portb_w )
static const pia6821_interface m1_pia_intf =
{
- /*inputs : A/B,CA/B1,CA/B2 */ 0, 0, 0, 0, 0, 0,
- /*outputs: A/B,CA/B2 */ m1_pia_porta_w, m1_pia_portb_w, 0, 0,
- /*irqs : A/B */ 0,0
+ DEVCB_NULL, /* port A in */
+ DEVCB_NULL, /* port B in */
+ DEVCB_NULL, /* line CA1 in */
+ DEVCB_NULL, /* line CB1 in */
+ DEVCB_NULL, /* line CA2 in */
+ DEVCB_NULL, /* line CB2 in */
+ DEVCB_HANDLER(m1_pia_porta_w), /* port A out */
+ DEVCB_HANDLER(m1_pia_portb_w), /* port B out */
+ DEVCB_NULL, /* line CA2 out */
+ DEVCB_NULL, /* port CB2 out */
+ DEVCB_NULL, /* IRQA */
+ DEVCB_NULL /* IRQB */
};
// input ports for M1 board ////////////////////////////////////////
@@ -635,8 +644,6 @@ INPUT_PORTS_END
static MACHINE_START( m1 )
{
int i;
- pia_config(machine, 0,&m1_pia_intf);
- pia_reset();
// setup 8 mechanical meters ////////////////////////////////////////////
Mechmtr_init(8);
@@ -756,8 +763,8 @@ static ADDRESS_MAP_START( m1_memmap, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x2090, 0x2091) AM_DEVWRITE("ay", ay8910_address_data_w)
AM_RANGE(0x20B0, 0x20B0) AM_DEVREAD("ay", ay8910_r)
- AM_RANGE(0x20A0, 0x20A3) AM_WRITE(pia_0_w)
- AM_RANGE(0x20A0, 0x20A3) AM_READ( pia_0_r)
+ AM_RANGE(0x20A0, 0x20A3) AM_DEVWRITE("pia", pia_w)
+ AM_RANGE(0x20A0, 0x20A3) AM_DEVREAD("pia", pia_r)
AM_RANGE(0x20C0, 0x20C7) AM_WRITE(m1_latch_w)
@@ -794,6 +801,7 @@ static MACHINE_DRIVER_START( m1 )
MDRV_CPU_PROGRAM_MAP(m1_memmap,0)
MDRV_DUART68681_ADD("duart68681", M1_DUART_CLOCK, maygaym1_duart68681_config)
+ MDRV_PIA6821_ADD("pia", m1_pia_intf)
MDRV_SPEAKER_STANDARD_MONO("mono")
MDRV_SOUND_ADD("ay",AY8913, M1_MASTER_CLOCK)
diff --git a/src/mame/drivers/maygayv1.c b/src/mame/drivers/maygayv1.c
index 09629d9e729..be6291b4435 100644
--- a/src/mame/drivers/maygayv1.c
+++ b/src/mame/drivers/maygayv1.c
@@ -128,7 +128,7 @@ Find lamps/reels after UPD changes.
#include "cpu/m68000/m68000.h"
#include "video/awpvid.h"
#include "cpu/mcs51/mcs51.h"
-#include "machine/6821pia.h"
+#include "machine/6821new.h"
#include "machine/68681.h"
#include "sound/2413intf.h"
#include "sound/upd7759.h"
@@ -430,17 +430,6 @@ static VIDEO_EOF( maygayv1 )
*/
-static READ16_HANDLER( pia_lsb_r )
-{
- return pia_read(0, offset);
-}
-
-static WRITE16_HANDLER( pia_lsb_w )
-{
- pia_write(0, offset, data >> 8);
-}
-
-
static WRITE16_HANDLER( write_odd )
{
@@ -658,7 +647,7 @@ static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x86000e, 0x86000f) AM_WRITE(vsync_int_ctrl)
AM_RANGE(0x880000, 0x89ffff) AM_READWRITE(i82716_r, i82716_w)
AM_RANGE(0x8a0000, 0x8a001f) AM_DEVREADWRITE8( "duart68681", duart68681_r, duart68681_w, 0xff)
- AM_RANGE(0x8c0000, 0x8c000f) AM_READWRITE(pia_lsb_r, pia_lsb_w)
+ AM_RANGE(0x8c0000, 0x8c000f) AM_DEVREADWRITE8("pia", pia_r, pia_w, 0xff)
ADDRESS_MAP_END
@@ -939,13 +928,13 @@ static void data_from_i8031(const device_config *device, int data)
duart68681_rx_data(maygayv1_devices.duart68681, 0, data);
}
-static READ8_HANDLER( b_read )
+static READ8_DEVICE_HANDLER( b_read )
{
// Meters - upper nibble?
return 0xff;
}
-static WRITE8_HANDLER( b_writ )
+static WRITE8_DEVICE_HANDLER( b_writ )
{
logerror("B WRITE %x\n",data);
}
@@ -954,9 +943,18 @@ static WRITE8_HANDLER( b_writ )
/* U25 ST 2 9148 EF68B21P */
static const pia6821_interface pia_intf =
{
- /*inputs : A/B,CA/B1,CA/B2 */ b_read, b_read, 0, 0, 0, 0,
- /*outputs: A/B,CA/B2 */ b_writ, b_writ, 0, 0,
- /*irqs : A/B */ 0, 0
+ DEVCB_HANDLER(b_read), /* port A in */
+ DEVCB_HANDLER(b_read), /* port B in */
+ DEVCB_NULL, /* line CA1 in */
+ DEVCB_NULL, /* line CB1 in */
+ DEVCB_NULL, /* line CA2 in */
+ DEVCB_NULL, /* line CB2 in */
+ DEVCB_HANDLER(b_writ), /* port A out */
+ DEVCB_HANDLER(b_writ), /* port B out */
+ DEVCB_NULL, /* line CA2 out */
+ DEVCB_NULL, /* port CB2 out */
+ DEVCB_NULL, /* IRQA */
+ DEVCB_NULL /* IRQB */
};
@@ -965,8 +963,6 @@ static MACHINE_START( maygayv1 )
i82716.dram = auto_malloc(0x80000); // ???
i82716.line_buf = auto_malloc(512);
- pia_config(machine, 0, &pia_intf);
-
state_save_register_global_pointer(machine, i82716.dram, 0x40000);
// duart_68681_init(DUART_CLOCK, duart_irq_handler, duart_tx);
@@ -1001,6 +997,8 @@ static MACHINE_DRIVER_START( maygayv1 )
MDRV_CPU_DATA_MAP(sound_data, 0)
MDRV_CPU_IO_MAP(sound_io, 0)
+ MDRV_PIA6821_ADD("pia", pia_intf)
+
MDRV_MACHINE_START(maygayv1)
MDRV_MACHINE_RESET(maygayv1)
diff --git a/src/mame/drivers/mpu4.c b/src/mame/drivers/mpu4.c
index 0413fa81a45..59eaeea51f1 100644
--- a/src/mame/drivers/mpu4.c
+++ b/src/mame/drivers/mpu4.c
@@ -243,7 +243,7 @@ TODO: - Fix lamp timing, MAME doesn't update fast enough to see everything
- Distinguish door switches using manual
***********************************************************************************************************/
#include "driver.h"
-#include "machine/6821pia.h"
+#include "machine/6821new.h"
#include "machine/6840ptm.h"
#include "deprecat.h"
@@ -444,29 +444,41 @@ static MACHINE_RESET( mpu4 )
/* 6809 IRQ handler */
-static void cpu0_irq(running_machine *machine, int state)
+static WRITE_LINE_DEVICE_HANDLER( cpu0_irq )
{
+ const device_config *pia3 = devtag_get_device(device->machine, "pia_ic3");
+ const device_config *pia4 = devtag_get_device(device->machine, "pia_ic4");
+ const device_config *pia5 = devtag_get_device(device->machine, "pia_ic5");
+ const device_config *pia6 = devtag_get_device(device->machine, "pia_ic6");
+ const device_config *pia7 = devtag_get_device(device->machine, "pia_ic7");
+ const device_config *pia8 = devtag_get_device(device->machine, "pia_ic8");
+
/* The PIA and PTM IRQ lines are all connected to a common PCB track, leading directly to the 6809 IRQ line. */
- int combined_state = pia_get_irq_a(0) | pia_get_irq_b(0) |
- pia_get_irq_a(1) | pia_get_irq_b(1) |
- pia_get_irq_a(2) | pia_get_irq_b(2) |
- pia_get_irq_a(3) | pia_get_irq_b(3) |
- pia_get_irq_a(4) | pia_get_irq_b(4) |
- pia_get_irq_a(5) | pia_get_irq_b(5) |
+ int combined_state = pianew_get_irq_a(pia3) | pianew_get_irq_b(pia3) |
+ pianew_get_irq_a(pia4) | pianew_get_irq_b(pia4) |
+ pianew_get_irq_a(pia5) | pianew_get_irq_b(pia5) |
+ pianew_get_irq_a(pia6) | pianew_get_irq_b(pia6) |
+ pianew_get_irq_a(pia7) | pianew_get_irq_b(pia7) |
+ pianew_get_irq_a(pia8) | pianew_get_irq_b(pia8) |
ptm6840_get_irq(0);
if (!serial_card_connected)
{
- cpu_set_input_line(machine->cpu[0], M6809_IRQ_LINE, combined_state ? ASSERT_LINE : CLEAR_LINE);
+ cpu_set_input_line(device->machine->cpu[0], M6809_IRQ_LINE, combined_state ? ASSERT_LINE : CLEAR_LINE);
LOG(("6809 int%d \n", combined_state));
}
else
{
- cpu_set_input_line(machine->cpu[0], M6809_FIRQ_LINE, combined_state ? ASSERT_LINE : CLEAR_LINE);
+ cpu_set_input_line(device->machine->cpu[0], M6809_FIRQ_LINE, combined_state ? ASSERT_LINE : CLEAR_LINE);
LOG(("6809 fint%d \n", combined_state));
}
}
+static void cpu0_irq_m6840(running_machine *machine, int state)
+{
+ cpu0_irq(devtag_get_device(machine, "pia_ic3"), state);
+}
+
/* Bankswitching */
static WRITE8_HANDLER( bankswitch_w )
@@ -493,7 +505,8 @@ static WRITE8_HANDLER( ic2_o1_callback )
static WRITE8_HANDLER( ic2_o2_callback )
{
- pia_set_input_ca1(0, data); /* copy output value to IC3 ca1 */
+ const device_config *pia = devtag_get_device(space->machine, "pia_ic3");
+ pia_ca1_w(pia, 0, data); /* copy output value to IC3 ca1 */
/* the output from timer2 is the input clock for timer3 */
ptm6840_set_c3( space->machine, 0, data);
@@ -514,15 +527,15 @@ static const ptm6840_interface ptm_ic2_intf =
MPU4_MASTER_CLOCK/4,
{ 0,0,0 },
{ ic2_o1_callback, ic2_o2_callback, ic2_o3_callback },
- cpu0_irq
+ cpu0_irq_m6840
};
/* 6821 PIA handlers */
/* IC3, lamp data lines + alpha numeric display */
-static WRITE8_HANDLER( pia_ic3_porta_w )
+static WRITE8_DEVICE_HANDLER( pia_ic3_porta_w )
{
- LOG_IC3(("%04x IC3 PIA Port A Set to %2x (lamp strobes 1 - 9)\n", cpu_get_previouspc(space->cpu),data));
+ LOG_IC3(("%s: IC3 PIA Port A Set to %2x (lamp strobes 1 - 9)\n", cpuexec_describe_context(device->machine),data));
if(ic23_active)
{
@@ -532,9 +545,9 @@ static WRITE8_HANDLER( pia_ic3_porta_w )
}
-static WRITE8_HANDLER( pia_ic3_portb_w )
+static WRITE8_DEVICE_HANDLER( pia_ic3_portb_w )
{
- LOG_IC3(("%04x IC3 PIA Port B Set to %2x (lamp strobes 10 - 17)\n", cpu_get_previouspc(space->cpu),data));
+ LOG_IC3(("%s: IC3 PIA Port B Set to %2x (lamp strobes 10 - 17)\n", cpuexec_describe_context(device->machine),data));
if(ic23_active)
{
@@ -544,31 +557,41 @@ static WRITE8_HANDLER( pia_ic3_portb_w )
}
-static WRITE8_HANDLER( pia_ic3_ca2_w )
+static WRITE_LINE_DEVICE_HANDLER( pia_ic3_ca2_w )
{
- LOG_IC3(("%04x IC3 PIA Write CA2 (alpha data), %02X\n", cpu_get_previouspc(space->cpu),data));
+ LOG_IC3(("%s: IC3 PIA Write CA2 (alpha data), %02X\n", cpuexec_describe_context(device->machine),state));
- alpha_data_line = data;
+ alpha_data_line = state;
ROC10937_draw_16seg(0);
}
-static WRITE8_HANDLER( pia_ic3_cb2_w )
+static WRITE_LINE_DEVICE_HANDLER( pia_ic3_cb2_w )
{
- LOG_IC3(("%04x IC3 PIA Write CB (alpha reset), %02X\n",cpu_get_previouspc(space->cpu),data));
+ LOG_IC3(("%s: IC3 PIA Write CB (alpha reset), %02X\n",cpuexec_describe_context(device->machine),state));
- if ( data ) ROC10937_reset(0);
+ if ( state ) ROC10937_reset(0);
ROC10937_draw_16seg(0);
}
static const pia6821_interface pia_ic3_intf =
{
- /*inputs : A/B,CA/B1,CA/B2 */ 0, 0, 0, 0, 0, 0,
- /*outputs: A/B,CA/B2 */ pia_ic3_porta_w, pia_ic3_portb_w, pia_ic3_ca2_w, pia_ic3_cb2_w,
- /*irqs : A/B */ cpu0_irq, cpu0_irq
+ DEVCB_NULL, /* port A in */
+ DEVCB_NULL, /* port B in */
+ DEVCB_NULL, /* line CA1 in */
+ DEVCB_NULL, /* line CB1 in */
+ DEVCB_NULL, /* line CA2 in */
+ DEVCB_NULL, /* line CB2 in */
+ DEVCB_HANDLER(pia_ic3_porta_w), /* port A out */
+ DEVCB_HANDLER(pia_ic3_portb_w), /* port B out */
+ DEVCB_LINE(pia_ic3_ca2_w), /* line CA2 out */
+ DEVCB_LINE(pia_ic3_cb2_w), /* port CB2 out */
+ DEVCB_LINE(cpu0_irq), /* IRQA */
+ DEVCB_LINE(cpu0_irq) /* IRQB */
};
+
/*
IC23 emulation
@@ -640,7 +663,7 @@ static TIMER_CALLBACK( ic24_timeout )
/* IC4 IC4, 7 seg leds, 50Hz timer reel sensors, current sensors */
-static WRITE8_HANDLER( pia_ic4_porta_w )
+static WRITE8_DEVICE_HANDLER( pia_ic4_porta_w )
{
if(ic23_active)
{
@@ -650,17 +673,17 @@ static WRITE8_HANDLER( pia_ic4_porta_w )
}
-static READ8_HANDLER( pia_ic4_portb_r )
+static READ8_DEVICE_HANDLER( pia_ic4_portb_r )
{
if ( serial_data )
{
ic4_input_b |= 0x80;
- pia_set_input_cb1(1, 1);
+ pia_cb1_w(device, 0, 1);
}
else
{
ic4_input_b &= ~0x80;
- pia_set_input_cb1(1, 0);
+ pia_cb1_w(device, 0, 0);
}
if ( optic_pattern & 0x01 ) ic4_input_b |= 0x40; /* reel A tab */
@@ -683,51 +706,61 @@ static READ8_HANDLER( pia_ic4_portb_r )
if ( lamp_undercurrent ) ic4_input_b |= 0x01;
#endif
- LOG_IC3(("%04x IC4 PIA Read of Port B %x\n",cpu_get_previouspc(space->cpu),ic4_input_b));
+ LOG_IC3(("%04x IC4 PIA Read of Port B %x\n",cpuexec_describe_context(device->machine),ic4_input_b));
return ic4_input_b;
}
-static WRITE8_HANDLER( pia_ic4_ca2_w )
+static WRITE_LINE_DEVICE_HANDLER( pia_ic4_ca2_w )
{
- LOG_IC3(("%04x IC4 PIA Write CA (input MUX strobe /LED B), %02X\n", cpu_get_previouspc(space->cpu),data));
+ LOG_IC3(("%04x IC4 PIA Write CA (input MUX strobe /LED B), %02X\n", cpuexec_describe_context(device->machine),state));
- IC23GB = data;
+ IC23GB = state;
ic23_update();
}
static const pia6821_interface pia_ic4_intf =
{
- /*inputs : A/B,CA/B1,CA/B2 */ 0, pia_ic4_portb_r, 0, 0, 0, 0,
- /*outputs: A/B,CA/B2 */ pia_ic4_porta_w, 0, pia_ic4_ca2_w, 0,
- /*irqs : A/B */ cpu0_irq, cpu0_irq
+ DEVCB_NULL, /* port A in */
+ DEVCB_HANDLER(pia_ic4_portb_r), /* port B in */
+ DEVCB_NULL, /* line CA1 in */
+ DEVCB_NULL, /* line CB1 in */
+ DEVCB_NULL, /* line CA2 in */
+ DEVCB_NULL, /* line CB2 in */
+ DEVCB_HANDLER(pia_ic4_porta_w), /* port A out */
+ DEVCB_NULL, /* port B out */
+ DEVCB_LINE(pia_ic4_ca2_w), /* line CA2 out */
+ DEVCB_NULL, /* port CB2 out */
+ DEVCB_LINE(cpu0_irq), /* IRQA */
+ DEVCB_LINE(cpu0_irq) /* IRQB */
};
/* IC5, AUX ports, coin lockouts and AY sound chip select (MODs below 4 only) */
-static READ8_HANDLER( pia_ic5_porta_r )
+static READ8_DEVICE_HANDLER( pia_ic5_porta_r )
{
- LOG(("%04x IC5 PIA Read of Port A (AUX1)\n",cpu_get_previouspc(space->cpu)));
- return input_port_read(space->machine, "AUX1");
+ LOG(("%04x IC5 PIA Read of Port A (AUX1)\n",cpuexec_describe_context(device->machine)));
+ return input_port_read(device->machine, "AUX1");
}
-static READ8_HANDLER( pia_ic5_portb_r )
+static READ8_DEVICE_HANDLER( pia_ic5_portb_r )
{
- LOG(("%04x IC5 PIA Read of Port B (coin input AUX2)\n",cpu_get_previouspc(space->cpu)));
- coin_lockout_w(0, (pia_get_output_b(2) & 0x01) );
- coin_lockout_w(1, (pia_get_output_b(2) & 0x02) );
- coin_lockout_w(2, (pia_get_output_b(2) & 0x04) );
- coin_lockout_w(3, (pia_get_output_b(2) & 0x08) );
- return input_port_read(space->machine, "AUX2");
+ const device_config *pia_ic5 = devtag_get_device(device->machine, "pia_ic5");
+ LOG(("%04x IC5 PIA Read of Port B (coin input AUX2)\n",cpuexec_describe_context(device->machine)));
+ coin_lockout_w(0, (pianew_get_output_b(pia_ic5) & 0x01) );
+ coin_lockout_w(1, (pianew_get_output_b(pia_ic5) & 0x02) );
+ coin_lockout_w(2, (pianew_get_output_b(pia_ic5) & 0x04) );
+ coin_lockout_w(3, (pianew_get_output_b(pia_ic5) & 0x08) );
+ return input_port_read(device->machine, "AUX2");
}
-static WRITE8_HANDLER( pia_ic5_ca2_w )
+static WRITE_LINE_DEVICE_HANDLER( pia_ic5_ca2_w )
{
- LOG(("%04x IC5 PIA Write CA2 (Serial Tx) %2x\n",cpu_get_previouspc(space->cpu),data));
- serial_data = data;
+ LOG(("%04x IC5 PIA Write CA2 (Serial Tx) %2x\n",cpuexec_describe_context(device->machine),state));
+ serial_data = state;
}
@@ -754,9 +787,9 @@ BDIR BC1 |
*/
/* PSG function selected */
-static void update_ay(const address_space *space)
+static void update_ay(const device_config *device)
{
- if (!pia_get_output_cb2(2))
+ if (!pianew_get_output_cb2(device))
{
switch (ay8913_address)
{
@@ -767,19 +800,24 @@ static void update_ay(const address_space *space)
}
case 0x01:
{ /* CA2 = 1 CB2 = 0? : Read from selected PSG register and make the register data available to Port A */
- LOG(("AY8913 address = %d \n",pia_get_output_a(3)&0x0f));
+ const device_config *pia_ic6 = devtag_get_device(device->machine, "pia_ic6");
+ LOG(("AY8913 address = %d \n",pianew_get_output_a(pia_ic6)&0x0f));
break;
}
case 0x02:
{/* CA2 = 0 CB2 = 1? : Write to selected PSG register and write data to Port A */
- ay8910_data_w(devtag_get_device(space->machine, "ay8913"), 0, pia_get_output_a(3));
+ const device_config *pia_ic6 = devtag_get_device(device->machine, "pia_ic6");
+ const device_config *ay = devtag_get_device(device->machine, "ay8913");
+ ay8910_data_w(ay, 0, pianew_get_output_a(pia_ic6));
LOG(("AY Chip Write \n"));
break;
}
case 0x03:
{/* CA2 = 1 CB2 = 1? : The register will now be selected and the user can read from or write to it.
The register will remain selected until another is chosen.*/
- ay8910_address_w(devtag_get_device(space->machine, "ay8913"), 0, pia_get_output_a(3));
+ const device_config *pia_ic6 = devtag_get_device(device->machine, "pia_ic6");
+ const device_config *ay = devtag_get_device(device->machine, "ay8913");
+ ay8910_address_w(ay, 0, pianew_get_output_a(pia_ic6));
LOG(("AY Chip Select \n"));
break;
}
@@ -792,24 +830,33 @@ static void update_ay(const address_space *space)
}
-static WRITE8_HANDLER( pia_ic5_cb2_w )
+static WRITE_LINE_DEVICE_HANDLER( pia_ic5_cb2_w )
{
- update_ay(space);
+ update_ay(device);
}
static const pia6821_interface pia_ic5_intf =
{
- /*inputs : A/B,CA/B1,CA/B2 */ pia_ic5_porta_r, pia_ic5_portb_r, 0, 0, 0, 0,
- /*outputs: A/B,CA/B2 */ 0, 0, pia_ic5_ca2_w, pia_ic5_cb2_w,
- /*irqs : A/B */ cpu0_irq, cpu0_irq
+ DEVCB_HANDLER(pia_ic5_porta_r), /* port A in */
+ DEVCB_HANDLER(pia_ic5_portb_r), /* port B in */
+ DEVCB_NULL, /* line CA1 in */
+ DEVCB_NULL, /* line CB1 in */
+ DEVCB_NULL, /* line CA2 in */
+ DEVCB_NULL, /* line CB2 in */
+ DEVCB_NULL, /* port A out */
+ DEVCB_NULL, /* port B out */
+ DEVCB_LINE(pia_ic5_ca2_w), /* line CA2 out */
+ DEVCB_LINE(pia_ic5_cb2_w), /* port CB2 out */
+ DEVCB_LINE(cpu0_irq), /* IRQA */
+ DEVCB_LINE(cpu0_irq) /* IRQB */
};
/* IC6, Reel A and B and AY registers (MODs below 4 only) */
-static WRITE8_HANDLER( pia_ic6_portb_w )
+static WRITE8_DEVICE_HANDLER( pia_ic6_portb_w )
{
- LOG(("%04x IC6 PIA Port B Set to %2x (Reel A and B)\n", cpu_get_previouspc(space->cpu),data));
+ LOG(("%04x IC6 PIA Port B Set to %2x (Reel A and B)\n", cpuexec_describe_context(device->machine),data));
stepper_update(0, data & 0x0F );
stepper_update(1, (data>>4) & 0x0F );
@@ -826,53 +873,62 @@ static WRITE8_HANDLER( pia_ic6_portb_w )
}
-static WRITE8_HANDLER( pia_ic6_porta_w )
+static WRITE8_DEVICE_HANDLER( pia_ic6_porta_w )
{
- LOG(("%04x IC6 PIA Write A %2x\n", cpu_get_previouspc(space->cpu),data));
+ LOG(("%04x IC6 PIA Write A %2x\n", cpuexec_describe_context(device->machine),data));
if (mod_number <4)
{
ay_data = data;
- update_ay(space);
+ update_ay(device);
}
}
-static WRITE8_HANDLER( pia_ic6_ca2_w )
+static WRITE_LINE_DEVICE_HANDLER( pia_ic6_ca2_w )
{
- LOG(("%04x IC6 PIA write CA2 %2x (AY8913 BC1)\n", cpu_get_previouspc(space->cpu),data));
+ LOG(("%04x IC6 PIA write CA2 %2x (AY8913 BC1)\n", cpuexec_describe_context(device->machine),state));
if (mod_number <4)
{
- if ( data ) ay8913_address |= 0x01;
- else ay8913_address &= ~0x01;
- update_ay(space);
+ if ( state ) ay8913_address |= 0x01;
+ else ay8913_address &= ~0x01;
+ update_ay(device);
}
}
-static WRITE8_HANDLER( pia_ic6_cb2_w )
+static WRITE_LINE_DEVICE_HANDLER( pia_ic6_cb2_w )
{
- LOG(("%04x IC6 PIA write CB2 %2x (AY8913 BCDIR)\n", cpu_get_previouspc(space->cpu),data));
+ LOG(("%04x IC6 PIA write CB2 %2x (AY8913 BCDIR)\n", cpuexec_describe_context(device->machine),state));
if (mod_number <4)
{
- if ( data ) ay8913_address |= 0x02;
- else ay8913_address &= ~0x02;
- update_ay(space);
+ if ( state ) ay8913_address |= 0x02;
+ else ay8913_address &= ~0x02;
+ update_ay(device);
}
}
static const pia6821_interface pia_ic6_intf =
{
- /*inputs : A/B,CA/B1,CA/B2 */ 0, 0, 0, 0, 0, 0,
- /*outputs: A/B,CA/B2 */ pia_ic6_porta_w, pia_ic6_portb_w, pia_ic6_ca2_w, pia_ic6_cb2_w,
- /*irqs : A/B */ cpu0_irq, cpu0_irq
+ DEVCB_NULL, /* port A in */
+ DEVCB_NULL, /* port B in */
+ DEVCB_NULL, /* line CA1 in */
+ DEVCB_NULL, /* line CB1 in */
+ DEVCB_NULL, /* line CA2 in */
+ DEVCB_NULL, /* line CB2 in */
+ DEVCB_HANDLER(pia_ic6_porta_w), /* port A out */
+ DEVCB_HANDLER(pia_ic6_portb_w), /* port B out */
+ DEVCB_LINE(pia_ic6_ca2_w), /* line CA2 out */
+ DEVCB_LINE(pia_ic6_cb2_w), /* port CB2 out */
+ DEVCB_LINE(cpu0_irq), /* IRQA */
+ DEVCB_LINE(cpu0_irq) /* IRQB */
};
/* IC7 Reel C and D, mechanical meters/Reel E and F, input strobe bit A */
-static WRITE8_HANDLER( pia_ic7_porta_w )
+static WRITE8_DEVICE_HANDLER( pia_ic7_porta_w )
{
- LOG(("%04x IC7 PIA Port A Set to %2x (Reel C and D)\n", cpu_get_previouspc(space->cpu),data));
+ LOG(("%04x IC7 PIA Port A Set to %2x (Reel C and D)\n", cpuexec_describe_context(device->machine),data));
stepper_update(2, data & 0x0F );
stepper_update(3, (data >> 4)& 0x0F );
@@ -888,10 +944,10 @@ static WRITE8_HANDLER( pia_ic7_porta_w )
}
-static WRITE8_HANDLER( pia_ic7_portb_w )
+static WRITE8_DEVICE_HANDLER( pia_ic7_portb_w )
{
int meter;
- UINT64 cycles = cpu_get_total_cycles(space->cpu);
+ UINT64 cycles = cputag_get_total_cycles(device->machine, "maincpu");
/* The meters are connected to a voltage drop sensor, where current
flowing through them also passes through pin B7, meaning that when
@@ -905,116 +961,136 @@ all eight meters are driven from this port, giving the 8 line driver chip
mmtr_data = data;
if (mmtr_data)
{
- pia_set_input_b(4, mmtr_data | 0x80);
+ pia_portb_w(device, 0, mmtr_data | 0x80);
for (meter = 0; meter < 8; meter ++)
if (mmtr_data & (1 << meter)) Mechmtr_update(meter, cycles, mmtr_data & (1 << meter));
}
else
{
- pia_set_input_b(4, mmtr_data &~0x80);
+ pia_portb_w(device, 0, mmtr_data &~0x80);
}
- LOG(("%04x IC7 PIA Port B Set to %2x (Meters, Reel E and F)\n", cpu_get_previouspc(space->cpu),data));
+ LOG(("%04x IC7 PIA Port B Set to %2x (Meters, Reel E and F)\n", cpuexec_describe_context(device->machine),data));
}
-static WRITE8_HANDLER( pia_ic7_ca2_w )
+static WRITE_LINE_DEVICE_HANDLER( pia_ic7_ca2_w )
{
- LOG(("%04x IC7 PIA write CA2 %2x (input strobe bit 0 / LED A)\n", cpu_get_previouspc(space->cpu),data));
+ LOG(("%04x IC7 PIA write CA2 %2x (input strobe bit 0 / LED A)\n", cpuexec_describe_context(device->machine),state));
- IC23GA = data;
+ IC23GA = state;
ic24_setup();
ic23_update();
}
-static WRITE8_HANDLER( pia_ic7_cb2_w )
+static WRITE_LINE_DEVICE_HANDLER( pia_ic7_cb2_w )
{
/* The eighth meter is connected here, because the voltage sensor
is on PB7. */
- UINT64 cycles = cpu_get_total_cycles(space->cpu);
- if (data)
+ UINT64 cycles = cputag_get_total_cycles(device->machine, "maincpu");
+ if (state)
{
- pia_set_input_b(4,mmtr_data|0x80);
- Mechmtr_update(7, cycles, data );
+ pia_portb_w(device, 0, mmtr_data|0x80);
+ Mechmtr_update(7, cycles, state );
}
- LOG(("%04x IC7 PIA write CB2 %2x \n", cpu_get_previouspc(space->cpu),data));
+ LOG(("%04x IC7 PIA write CB2 %2x \n", cpuexec_describe_context(device->machine),state));
}
static const pia6821_interface pia_ic7_intf =
{
- /*inputs : A/B,CA/B1,CA/B2 */ 0, 0, 0, 0, 0, 0,
- /*outputs: A/B,CA/B2 */ pia_ic7_porta_w, pia_ic7_portb_w, pia_ic7_ca2_w, pia_ic7_cb2_w,
- /*irqs : A/B */ cpu0_irq, cpu0_irq
+ DEVCB_NULL, /* port A in */
+ DEVCB_NULL, /* port B in */
+ DEVCB_NULL, /* line CA1 in */
+ DEVCB_NULL, /* line CB1 in */
+ DEVCB_NULL, /* line CA2 in */
+ DEVCB_NULL, /* line CB2 in */
+ DEVCB_HANDLER(pia_ic7_porta_w), /* port A out */
+ DEVCB_HANDLER(pia_ic7_portb_w), /* port B out */
+ DEVCB_LINE(pia_ic7_ca2_w), /* line CA2 out */
+ DEVCB_LINE(pia_ic7_cb2_w), /* port CB2 out */
+ DEVCB_LINE(cpu0_irq), /* IRQA */
+ DEVCB_LINE(cpu0_irq) /* IRQB */
};
/* IC8, Inputs, TRIACS, alpha clock */
-static READ8_HANDLER( pia_ic8_porta_r )
+static READ8_DEVICE_HANDLER( pia_ic8_porta_r )
{
static const char *const portnames[] = { "ORANGE1", "ORANGE2", "BLACK1", "BLACK2", "ORANGE1", "ORANGE2", "DIL1", "DIL2" };
+ const device_config *pia_ic5 = devtag_get_device(device->machine, "pia_ic5");
- LOG_IC8(("%04x IC8 PIA Read of Port A (MUX input data)\n", cpu_get_previouspc(space->cpu)));
+ LOG_IC8(("%04x IC8 PIA Read of Port A (MUX input data)\n", cpuexec_describe_context(device->machine)));
/* The orange inputs are polled twice as often as the black ones, for reasons of efficiency.
This is achieved via connecting every input line to an AND gate, thus allowing two strobes
to represent each orange input bank (strobes are active low). */
- pia_set_input_cb1(2, (input_port_read(space->machine, "AUX2") & 0x80));
- return input_port_read(space->machine, portnames[input_strobe]);
+ pia_cb1_w(pia_ic5, 0, (input_port_read(device->machine, "AUX2") & 0x80));
+ return input_port_read(device->machine, portnames[input_strobe]);
}
-static WRITE8_HANDLER( pia_ic8_portb_w )
+static WRITE8_DEVICE_HANDLER( pia_ic8_portb_w )
{
int i;
- LOG_IC8(("%04x IC8 PIA Port B Set to %2x (OUTPUT PORT, TRIACS)\n", cpu_get_previouspc(space->cpu),data));
+ LOG_IC8(("%04x IC8 PIA Port B Set to %2x (OUTPUT PORT, TRIACS)\n", cpuexec_describe_context(device->machine),data));
for (i = 0; i < 8; i++)
if ( data & (1 << i) ) output_set_indexed_value("triac", i, data & (1 << i));
}
-static WRITE8_HANDLER( pia_ic8_ca2_w )
+static WRITE_LINE_DEVICE_HANDLER( pia_ic8_ca2_w )
{
- LOG_IC8(("%04x IC8 PIA write CA2 (input_strobe bit 2 / LED C) %02X\n", cpu_get_previouspc(space->cpu), data & 0xFF));
+ LOG_IC8(("%04x IC8 PIA write CA2 (input_strobe bit 2 / LED C) %02X\n", cpuexec_describe_context(device->machine), state & 0xFF));
- IC23GC = data;
+ IC23GC = state;
ic23_update();
}
-static WRITE8_HANDLER( pia_ic8_cb2_w )
+static WRITE_LINE_DEVICE_HANDLER( pia_ic8_cb2_w )
{
- LOG_IC8(("%04x IC8 PIA write CB2 (alpha clock) %02X\n", cpu_get_previouspc(space->cpu), data & 0xFF));
+ LOG_IC8(("%04x IC8 PIA write CB2 (alpha clock) %02X\n", cpuexec_describe_context(device->machine), state & 0xFF));
- if ( !alpha_clock && (data) )
+ if ( !alpha_clock && (state) )
{
ROC10937_shift_data(0, alpha_data_line&0x01?0:1);
}
- alpha_clock = data;
+ alpha_clock = state;
ROC10937_draw_16seg(0);
}
static const pia6821_interface pia_ic8_intf =
{
- /*inputs : A/B,CA/B1,CA/B2 */ pia_ic8_porta_r, 0, 0, 0, 0, 0,
- /*outputs: A/B,CA/B2 */ 0, pia_ic8_portb_w, pia_ic8_ca2_w, pia_ic8_cb2_w,
- /*irqs : A/B */ cpu0_irq, cpu0_irq
+ DEVCB_HANDLER(pia_ic8_porta_r), /* port A in */
+ DEVCB_NULL, /* port B in */
+ DEVCB_NULL, /* line CA1 in */
+ DEVCB_NULL, /* line CB1 in */
+ DEVCB_NULL, /* line CA2 in */
+ DEVCB_NULL, /* line CB2 in */
+ DEVCB_NULL, /* port A out */
+ DEVCB_HANDLER(pia_ic8_portb_w), /* port B out */
+ DEVCB_LINE(pia_ic8_ca2_w), /* line CA2 out */
+ DEVCB_LINE(pia_ic8_cb2_w), /* port CB2 out */
+ DEVCB_LINE(cpu0_irq), /* IRQA */
+ DEVCB_LINE(cpu0_irq) /* IRQB */
};
-static WRITE8_HANDLER( pia_gb_porta_w )
+
+static WRITE8_DEVICE_HANDLER( pia_gb_porta_w )
{
- const device_config *msm6376 = devtag_get_device(space->machine, "msm6376");
+ const device_config *msm6376 = devtag_get_device(device->machine, "msm6376");
- LOG(("%04x GAMEBOARD: PIA Port A Set to %2x\n", cpu_get_previouspc(space->cpu),data));
+ LOG(("%04x GAMEBOARD: PIA Port A Set to %2x\n", cpuexec_describe_context(device->machine),data));
okim6376_w(msm6376, 0, data);
}
-static WRITE8_HANDLER( pia_gb_portb_w )
+static WRITE8_DEVICE_HANDLER( pia_gb_portb_w )
{
int changed = expansion_latch^data;
- LOG(("%04x GAMEBOARD: PIA Port B Set to %2x\n", cpu_get_previouspc(space->cpu),data));
+ LOG(("%04x GAMEBOARD: PIA Port B Set to %2x\n", cpuexec_describe_context(device->machine),data));
expansion_latch = data;
@@ -1039,9 +1115,9 @@ static WRITE8_HANDLER( pia_gb_portb_w )
}
}
}
-static READ8_HANDLER( pia_gb_portb_r )
+static READ8_DEVICE_HANDLER( pia_gb_portb_r )
{
- LOG(("%04x GAMEBOARD: PIA Read of Port B\n",cpu_get_previouspc(space->cpu)));
+ LOG(("%04x GAMEBOARD: PIA Read of Port B\n",cpuexec_describe_context(device->machine)));
//
// b7, 1 = OKI ready, 0 = OKI busy
// b5, vol clock
@@ -1055,20 +1131,30 @@ static READ8_HANDLER( pia_gb_portb_r )
return 0x40;
}
-static WRITE8_HANDLER( pia_gb_ca2_w )
+static WRITE_LINE_DEVICE_HANDLER( pia_gb_ca2_w )
{
- LOG(("%04x GAMEBOARD: OKI RESET (offset = %d),data = %02X\n", cpu_get_previouspc(space->cpu), offset, data&0xFF));
+ LOG(("%04x GAMEBOARD: OKI RESET data = %02X\n", cpuexec_describe_context(device->machine), state));
// return okim6376_status_0_r();
}
static const pia6821_interface pia_gameboard_intf =
{
- /*inputs : A/B,CA/B1,CA/B2 */ 0, pia_gb_portb_r, 0, 0, 0, 0,
- /*outputs: A/B,CA/B2 */ pia_gb_porta_w, pia_gb_portb_w, pia_gb_ca2_w, 0,
- /*irqs : A/B */ 0,0
+ DEVCB_NULL, /* port A in */
+ DEVCB_HANDLER(pia_gb_portb_r), /* port B in */
+ DEVCB_NULL, /* line CA1 in */
+ DEVCB_NULL, /* line CB1 in */
+ DEVCB_NULL, /* line CA2 in */
+ DEVCB_NULL, /* line CB2 in */
+ DEVCB_HANDLER(pia_gb_porta_w), /* port A out */
+ DEVCB_HANDLER(pia_gb_portb_w), /* port B out */
+ DEVCB_LINE(pia_gb_ca2_w), /* line CA2 out */
+ DEVCB_NULL, /* port CB2 out */
+ DEVCB_NULL, /* IRQA */
+ DEVCB_NULL /* IRQB */
};
+
/* input ports for MPU4 board */
static INPUT_PORTS_START( mpu4 )
PORT_START("ORANGE1")
@@ -1440,13 +1526,6 @@ static const stepper_interface barcrest_reel_interface =
/* Common configurations */
static void mpu4_config_common(running_machine *machine)
{
- pia_config(machine, 0,&pia_ic3_intf);
- pia_config(machine, 1,&pia_ic4_intf);
- pia_config(machine, 2,&pia_ic5_intf);
- pia_config(machine, 3,&pia_ic6_intf);
- pia_config(machine, 4,&pia_ic7_intf);
- pia_config(machine, 5,&pia_ic8_intf);
-
ic24_timer = timer_alloc(machine, ic24_timeout, NULL);
/* setup 6840ptm */
ptm6840_config(machine, 0, &ptm_ic2_intf );
@@ -1455,7 +1534,6 @@ static void mpu4_config_common(running_machine *machine)
static MACHINE_START( mpu4mod2 )
{
mpu4_config_common(machine);
- pia_reset();
serial_card_connected=0;
mod_number=2;
@@ -1476,8 +1554,6 @@ static MACHINE_START( mpu4mod2 )
static MACHINE_START( mpu4dutch )
{
mpu4_config_common(machine);
- pia_config(machine, 6,&pia_gameboard_intf);
- pia_reset();
serial_card_connected=0;
@@ -1497,8 +1573,6 @@ static MACHINE_START( mpu4dutch )
static MACHINE_START( mpu4mod4 )
{
mpu4_config_common(machine);
- pia_config(machine, 6,&pia_gameboard_intf);
- pia_reset();
serial_card_connected=0;
mod_number=4;
@@ -1661,7 +1735,7 @@ static TIMER_DEVICE_CALLBACK( gen_50hz )
oscillating signal.*/
signal_50hz = signal_50hz?0:1;
- pia_set_input_ca1(1,signal_50hz); /* signal is connected to IC4 CA1 */
+ pia_ca1_w(devtag_get_device(timer->machine, "pia_ic4"), 0, signal_50hz); /* signal is connected to IC4 CA1 */
}
@@ -1675,12 +1749,12 @@ static ADDRESS_MAP_START( mod2_memmap, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0900, 0x0907) AM_READWRITE(ptm6840_0_r,ptm6840_0_w) /* 6840PTM */
- AM_RANGE(0x0A00, 0x0A03) AM_READWRITE(pia_0_r,pia_0_w) /* PIA6821 IC3 */
- AM_RANGE(0x0B00, 0x0B03) AM_READWRITE(pia_1_r,pia_1_w) /* PIA6821 IC4 */
- AM_RANGE(0x0C00, 0x0C03) AM_READWRITE(pia_2_r,pia_2_w) /* PIA6821 IC5 */
- AM_RANGE(0x0D00, 0x0D03) AM_READWRITE(pia_3_r,pia_3_w) /* PIA6821 IC6 */
- AM_RANGE(0x0E00, 0x0E03) AM_READWRITE(pia_4_r,pia_4_w) /* PIA6821 IC7 */
- AM_RANGE(0x0F00, 0x0F03) AM_READWRITE(pia_5_r,pia_5_w) /* PIA6821 IC8 */
+ AM_RANGE(0x0A00, 0x0A03) AM_DEVREADWRITE("pia_ic3", pia_r,pia_w) /* PIA6821 IC3 */
+ AM_RANGE(0x0B00, 0x0B03) AM_DEVREADWRITE("pia_ic4", pia_r,pia_w) /* PIA6821 IC4 */
+ AM_RANGE(0x0C00, 0x0C03) AM_DEVREADWRITE("pia_ic5", pia_r,pia_w) /* PIA6821 IC5 */
+ AM_RANGE(0x0D00, 0x0D03) AM_DEVREADWRITE("pia_ic6", pia_r,pia_w) /* PIA6821 IC6 */
+ AM_RANGE(0x0E00, 0x0E03) AM_DEVREADWRITE("pia_ic7", pia_r,pia_w) /* PIA6821 IC7 */
+ AM_RANGE(0x0F00, 0x0F03) AM_DEVREADWRITE("pia_ic8", pia_r,pia_w) /* PIA6821 IC8 */
AM_RANGE(0x1000, 0xffff) AM_READ(SMH_BANK1) /* 64k paged ROM (4 pages) */
ADDRESS_MAP_END
@@ -1697,12 +1771,12 @@ static ADDRESS_MAP_START( mod4_yam_map, ADDRESS_SPACE_PROGRAM, 8 )
// AM_RANGE(0x08E0, 0x08E7) AM_READWRITE(68681_duart_r,68681_duart_w)
AM_RANGE(0x0900, 0x0907) AM_READWRITE(ptm6840_0_r,ptm6840_0_w) // 6840PTM
- AM_RANGE(0x0A00, 0x0A03) AM_READWRITE(pia_0_r,pia_0_w) // PIA6821 IC3
- AM_RANGE(0x0B00, 0x0B03) AM_READWRITE(pia_1_r,pia_1_w) // PIA6821 IC4
- AM_RANGE(0x0C00, 0x0C03) AM_READWRITE(pia_2_r,pia_2_w) // PIA6821 IC5
- AM_RANGE(0x0D00, 0x0D03) AM_READWRITE(pia_3_r,pia_3_w) // PIA6821 IC6
- AM_RANGE(0x0E00, 0x0E03) AM_READWRITE(pia_4_r,pia_4_w) // PIA6821 IC7
- AM_RANGE(0x0F00, 0x0F03) AM_READWRITE(pia_5_r,pia_5_w) // PIA6821 IC8
+ AM_RANGE(0x0A00, 0x0A03) AM_DEVREADWRITE("pia_ic3", pia_r,pia_w) /* PIA6821 IC3 */
+ AM_RANGE(0x0B00, 0x0B03) AM_DEVREADWRITE("pia_ic4", pia_r,pia_w) /* PIA6821 IC4 */
+ AM_RANGE(0x0C00, 0x0C03) AM_DEVREADWRITE("pia_ic5", pia_r,pia_w) /* PIA6821 IC5 */
+ AM_RANGE(0x0D00, 0x0D03) AM_DEVREADWRITE("pia_ic6", pia_r,pia_w) /* PIA6821 IC6 */
+ AM_RANGE(0x0E00, 0x0E03) AM_DEVREADWRITE("pia_ic7", pia_r,pia_w) /* PIA6821 IC7 */
+ AM_RANGE(0x0F00, 0x0F03) AM_DEVREADWRITE("pia_ic8", pia_r,pia_w) /* PIA6821 IC8 */
AM_RANGE(0x1000, 0xffff) AM_READ(SMH_BANK1) // 64k paged ROM (4 pages)
ADDRESS_MAP_END
@@ -1714,19 +1788,19 @@ static ADDRESS_MAP_START( mod4_oki_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0850, 0x0850) AM_WRITE(bankswitch_w) // write bank (rom page select)
- AM_RANGE(0x0880, 0x0883) AM_READWRITE(pia_6_r,pia_6_w) // PIA6821 on game board
+ AM_RANGE(0x0880, 0x0883) AM_DEVREADWRITE("pia_gamebd", pia_r,pia_w) // PIA6821 on game board
// AM_RANGE(0x08C0, 0x08C7) AM_READERITE(ptm6840_1_r,ptm6840_1_w) // 6840PTM on game board
// AM_RANGE(0x08E0, 0x08E7) AM_READWRITE(68681_duart_r,68681_duart_w)
AM_RANGE(0x0900, 0x0907) AM_READWRITE(ptm6840_0_r,ptm6840_0_w) // 6840PTM
- AM_RANGE(0x0A00, 0x0A03) AM_READWRITE(pia_0_r,pia_0_w) // PIA6821 IC3
- AM_RANGE(0x0B00, 0x0B03) AM_READWRITE(pia_1_r,pia_1_w) // PIA6821 IC4
- AM_RANGE(0x0C00, 0x0C03) AM_READWRITE(pia_2_r,pia_2_w) // PIA6821 IC5
- AM_RANGE(0x0D00, 0x0D03) AM_READWRITE(pia_3_r,pia_3_w) // PIA6821 IC6
- AM_RANGE(0x0E00, 0x0E03) AM_READWRITE(pia_4_r,pia_4_w) // PIA6821 IC7
- AM_RANGE(0x0F00, 0x0F03) AM_READWRITE(pia_5_r,pia_5_w) // PIA6821 IC8
+ AM_RANGE(0x0A00, 0x0A03) AM_DEVREADWRITE("pia_ic3", pia_r,pia_w) /* PIA6821 IC3 */
+ AM_RANGE(0x0B00, 0x0B03) AM_DEVREADWRITE("pia_ic4", pia_r,pia_w) /* PIA6821 IC4 */
+ AM_RANGE(0x0C00, 0x0C03) AM_DEVREADWRITE("pia_ic5", pia_r,pia_w) /* PIA6821 IC5 */
+ AM_RANGE(0x0D00, 0x0D03) AM_DEVREADWRITE("pia_ic6", pia_r,pia_w) /* PIA6821 IC6 */
+ AM_RANGE(0x0E00, 0x0E03) AM_DEVREADWRITE("pia_ic7", pia_r,pia_w) /* PIA6821 IC7 */
+ AM_RANGE(0x0F00, 0x0F03) AM_DEVREADWRITE("pia_ic8", pia_r,pia_w) /* PIA6821 IC8 */
AM_RANGE(0x1000, 0xffff) AM_READ(SMH_BANK1) // 64k paged ROM (4 pages)
ADDRESS_MAP_END
@@ -1740,19 +1814,19 @@ static ADDRESS_MAP_START( dutch_memmap, ADDRESS_SPACE_PROGRAM, 8 )
// AM_RANGE(0x0800, 0x0810) AM_READWRITE(characteriser_r,characteriser_w)
AM_RANGE(0x0850, 0x0850) AM_WRITE(bankswitch_w) // write bank (rom page select)
- AM_RANGE(0x0880, 0x0883) AM_READWRITE(pia_6_r,pia_6_w) // PIA6821 on game board
+ AM_RANGE(0x0880, 0x0883) AM_DEVREADWRITE("pia_gamebd", pia_r,pia_w) // PIA6821 on game board
// AM_RANGE(0x08C0, 0x08C7) AM_READERITE(ptm6840_2_r,ptm6840_2_w) // 6840PTM on game board
// AM_RANGE(0x08E0, 0x08E7) AM_READWRITE(68681_duart_r,68681_duart_w)
AM_RANGE(0x0900, 0x0907) AM_READWRITE(ptm6840_0_r,ptm6840_0_w) // 6840PTM
- AM_RANGE(0x0A00, 0x0A03) AM_READWRITE(pia_0_r,pia_0_w) // PIA6821 IC3
- AM_RANGE(0x0B00, 0x0B03) AM_READWRITE(pia_1_r,pia_1_w) // PIA6821 IC4
- AM_RANGE(0x0C00, 0x0C03) AM_READWRITE(pia_2_r,pia_2_w) // PIA6821 IC5
- AM_RANGE(0x0D00, 0x0D03) AM_READWRITE(pia_3_r,pia_3_w) // PIA6821 IC6
- AM_RANGE(0x0E00, 0x0E03) AM_READWRITE(pia_4_r,pia_4_w) // PIA6821 IC7
- AM_RANGE(0x0F00, 0x0F03) AM_READWRITE(pia_5_r,pia_5_w) // PIA6821 IC8
+ AM_RANGE(0x0A00, 0x0A03) AM_DEVREADWRITE("pia_ic3", pia_r,pia_w) /* PIA6821 IC3 */
+ AM_RANGE(0x0B00, 0x0B03) AM_DEVREADWRITE("pia_ic4", pia_r,pia_w) /* PIA6821 IC4 */
+ AM_RANGE(0x0C00, 0x0C03) AM_DEVREADWRITE("pia_ic5", pia_r,pia_w) /* PIA6821 IC5 */
+ AM_RANGE(0x0D00, 0x0D03) AM_DEVREADWRITE("pia_ic6", pia_r,pia_w) /* PIA6821 IC6 */
+ AM_RANGE(0x0E00, 0x0E03) AM_DEVREADWRITE("pia_ic7", pia_r,pia_w) /* PIA6821 IC7 */
+ AM_RANGE(0x0F00, 0x0F03) AM_DEVREADWRITE("pia_ic8", pia_r,pia_w) /* PIA6821 IC8 */
AM_RANGE(0x1000, 0xffff) AM_READ(SMH_BANK1) // 64k paged ROM (4 pages)
ADDRESS_MAP_END
@@ -1777,6 +1851,13 @@ static MACHINE_DRIVER_START( mpu4mod2 )
MDRV_CPU_PROGRAM_MAP(mod2_memmap,0)
MDRV_TIMER_ADD_PERIODIC("50hz",gen_50hz, HZ(100))
+
+ MDRV_PIA6821_ADD("pia_ic3", pia_ic3_intf)
+ MDRV_PIA6821_ADD("pia_ic4", pia_ic4_intf)
+ MDRV_PIA6821_ADD("pia_ic5", pia_ic5_intf)
+ MDRV_PIA6821_ADD("pia_ic6", pia_ic6_intf)
+ MDRV_PIA6821_ADD("pia_ic7", pia_ic7_intf)
+ MDRV_PIA6821_ADD("pia_ic8", pia_ic8_intf)
MDRV_SPEAKER_STANDARD_MONO("mono")
MDRV_SOUND_ADD("ay8913",AY8913, MPU4_MASTER_CLOCK/4)
@@ -1791,6 +1872,7 @@ MACHINE_DRIVER_END
static MACHINE_DRIVER_START( mod4yam )
MDRV_IMPORT_FROM( mpu4mod2 )
MDRV_MACHINE_START(mpu4mod4)
+
MDRV_CPU_MODIFY("maincpu")
MDRV_CPU_PROGRAM_MAP(mod4_yam_map,0)
@@ -1802,6 +1884,9 @@ MACHINE_DRIVER_END
static MACHINE_DRIVER_START( mod4oki )
MDRV_IMPORT_FROM( mpu4mod2 )
MDRV_MACHINE_START(mpu4mod4)
+
+ MDRV_PIA6821_ADD("pia_gamebd", pia_gameboard_intf)
+
MDRV_CPU_MODIFY("maincpu")
MDRV_CPU_PROGRAM_MAP(mod4_oki_map,0)
diff --git a/src/mame/drivers/mpu4drvr.c b/src/mame/drivers/mpu4drvr.c
index 5f97936fb51..793a950436f 100644
--- a/src/mame/drivers/mpu4drvr.c
+++ b/src/mame/drivers/mpu4drvr.c
@@ -1380,7 +1380,6 @@ static INTERRUPT_GEN(mpu4_vid_irq)
MACHINE_START( mpu4_vid )
{
mpu4_config_common(machine);
- pia_reset();
ptm6840_config(machine, 1, &ptm_vid_intf );
@@ -1483,12 +1482,12 @@ static ADDRESS_MAP_START( mpu4_6809_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0900, 0x0907) AM_READWRITE(ptm6840_0_r,ptm6840_0_w) /* 6840PTM */
- AM_RANGE(0x0A00, 0x0A03) AM_READWRITE(pia_0_r,pia_0_w) /* PIA6821 IC3 */
- AM_RANGE(0x0B00, 0x0B03) AM_READWRITE(pia_1_r,pia_1_w) /* PIA6821 IC4 */
- AM_RANGE(0x0C00, 0x0C03) AM_READWRITE(pia_2_r,pia_2_w) /* PIA6821 IC5 */
- AM_RANGE(0x0D00, 0x0D03) AM_READWRITE(pia_3_r,pia_3_w) /* PIA6821 IC6 */
- AM_RANGE(0x0E00, 0x0E03) AM_READWRITE(pia_4_r,pia_4_w) /* PIA6821 IC7 */
- AM_RANGE(0x0F00, 0x0F03) AM_READWRITE(pia_5_r,pia_5_w) /* PIA6821 IC8 */
+ AM_RANGE(0x0A00, 0x0A03) AM_DEVREADWRITE("pia_ic3", pia_r,pia_w) /* PIA6821 IC3 */
+ AM_RANGE(0x0B00, 0x0B03) AM_DEVREADWRITE("pia_ic4", pia_r,pia_w) /* PIA6821 IC4 */
+ AM_RANGE(0x0C00, 0x0C03) AM_DEVREADWRITE("pia_ic5", pia_r,pia_w) /* PIA6821 IC5 */
+ AM_RANGE(0x0D00, 0x0D03) AM_DEVREADWRITE("pia_ic6", pia_r,pia_w) /* PIA6821 IC6 */
+ AM_RANGE(0x0E00, 0x0E03) AM_DEVREADWRITE("pia_ic7", pia_r,pia_w) /* PIA6821 IC7 */
+ AM_RANGE(0x0F00, 0x0F03) AM_DEVREADWRITE("pia_ic8", pia_r,pia_w) /* PIA6821 IC8 */
AM_RANGE(0x4000, 0x40FF) AM_RAM /* it actually runs code from here... */
@@ -1667,12 +1666,12 @@ static ADDRESS_MAP_START( dealem_memmap, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0900, 0x0907) AM_READWRITE(ptm6840_0_r,ptm6840_0_w) /* 6840PTM */
- AM_RANGE(0x0A00, 0x0A03) AM_READWRITE(pia_0_r,pia_0_w) /* PIA6821 IC3 */
- AM_RANGE(0x0B00, 0x0B03) AM_READWRITE(pia_1_r,pia_1_w) /* PIA6821 IC4 */
- AM_RANGE(0x0C00, 0x0C03) AM_READWRITE(pia_2_r,pia_2_w) /* PIA6821 IC5 */
- AM_RANGE(0x0D00, 0x0D03) AM_READWRITE(pia_3_r,pia_3_w) /* PIA6821 IC6 */
- AM_RANGE(0x0E00, 0x0E03) AM_READWRITE(pia_4_r,pia_4_w) /* PIA6821 IC7 */
- AM_RANGE(0x0F00, 0x0F03) AM_READWRITE(pia_5_r,pia_5_w) /* PIA6821 IC8 */
+ AM_RANGE(0x0A00, 0x0A03) AM_DEVREADWRITE("pia_ic3", pia_r,pia_w) /* PIA6821 IC3 */
+ AM_RANGE(0x0B00, 0x0B03) AM_DEVREADWRITE("pia_ic4", pia_r,pia_w) /* PIA6821 IC4 */
+ AM_RANGE(0x0C00, 0x0C03) AM_DEVREADWRITE("pia_ic5", pia_r,pia_w) /* PIA6821 IC5 */
+ AM_RANGE(0x0D00, 0x0D03) AM_DEVREADWRITE("pia_ic6", pia_r,pia_w) /* PIA6821 IC6 */
+ AM_RANGE(0x0E00, 0x0E03) AM_DEVREADWRITE("pia_ic7", pia_r,pia_w) /* PIA6821 IC7 */
+ AM_RANGE(0x0F00, 0x0F03) AM_DEVREADWRITE("pia_ic8", pia_r,pia_w) /* PIA6821 IC8 */
AM_RANGE(0x1000, 0x2fff) AM_RAM AM_BASE(&dealem_videoram)
AM_RANGE(0x8000, 0xffff) AM_ROM AM_WRITENOP/* 64k paged ROM (4 pages) */
@@ -1686,6 +1685,13 @@ static MACHINE_DRIVER_START( mpu4_vid )
MDRV_NVRAM_HANDLER(generic_0fill) /* confirm */
+ MDRV_PIA6821_ADD("pia_ic3", pia_ic3_intf)
+ MDRV_PIA6821_ADD("pia_ic4", pia_ic4_intf)
+ MDRV_PIA6821_ADD("pia_ic5", pia_ic5_intf)
+ MDRV_PIA6821_ADD("pia_ic6", pia_ic6_intf)
+ MDRV_PIA6821_ADD("pia_ic7", pia_ic7_intf)
+ MDRV_PIA6821_ADD("pia_ic8", pia_ic8_intf)
+
/* video hardware */
MDRV_SCREEN_ADD("screen", RASTER)
MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
@@ -1737,6 +1743,13 @@ static MACHINE_DRIVER_START( dealem )
MDRV_TIMER_ADD_PERIODIC("50hz",gen_50hz, HZ(100))
+ MDRV_PIA6821_ADD("pia_ic3", pia_ic3_intf)
+ MDRV_PIA6821_ADD("pia_ic4", pia_ic4_intf)
+ MDRV_PIA6821_ADD("pia_ic5", pia_ic5_intf)
+ MDRV_PIA6821_ADD("pia_ic6", pia_ic6_intf)
+ MDRV_PIA6821_ADD("pia_ic7", pia_ic7_intf)
+ MDRV_PIA6821_ADD("pia_ic8", pia_ic8_intf)
+
MDRV_SPEAKER_STANDARD_MONO("mono")
MDRV_SOUND_ADD("ay8913",AY8913, MPU4_MASTER_CLOCK/4)
MDRV_SOUND_CONFIG(ay8910_config)
diff --git a/src/mame/drivers/seta.c b/src/mame/drivers/seta.c
index c7c2bdba246..97b4e8e4905 100644
--- a/src/mame/drivers/seta.c
+++ b/src/mame/drivers/seta.c
@@ -1293,7 +1293,7 @@ Note: on screen copyright is (c)1998 Coinmaster.
#include "cpu/m6502/m6502.h"
#include "deprecat.h"
#include "seta.h"
-#include "machine/6821pia.h"
+#include "machine/6821new.h"
#include "machine/6850acia.h"
#include "machine/msm6242.h"
#include "sound/2203intf.h"
@@ -8222,12 +8222,47 @@ static INTERRUPT_GEN( inttoote_interrupt )
}
}
+static const pia6821_interface inttoote_pia0_intf =
+{
+ DEVCB_NULL, /* port A in */
+ DEVCB_NULL, /* port B in */
+ DEVCB_NULL, /* line CA1 in */
+ DEVCB_NULL, /* line CB1 in */
+ DEVCB_NULL, /* line CA2 in */
+ DEVCB_NULL, /* line CB2 in */
+ DEVCB_NULL, /* port A out */
+ DEVCB_NULL, /* port B out */
+ DEVCB_NULL, /* line CA2 out */
+ DEVCB_NULL, /* port CB2 out */
+ DEVCB_NULL, /* IRQA */
+ DEVCB_NULL /* IRQB */
+};
+
+static const pia6821_interface inttoote_pia1_intf =
+{
+ DEVCB_NULL, /* port A in */
+ DEVCB_NULL, /* port B in */
+ DEVCB_NULL, /* line CA1 in */
+ DEVCB_NULL, /* line CB1 in */
+ DEVCB_NULL, /* line CA2 in */
+ DEVCB_NULL, /* line CB2 in */
+ DEVCB_NULL, /* port A out */
+ DEVCB_NULL, /* port B out */
+ DEVCB_NULL, /* line CA2 out */
+ DEVCB_NULL, /* port CB2 out */
+ DEVCB_NULL, /* IRQA */
+ DEVCB_NULL /* IRQB */
+};
+
static MACHINE_DRIVER_START( inttoote )
/* basic machine hardware */
MDRV_CPU_ADD("maincpu", M68000, 16000000)
MDRV_CPU_PROGRAM_MAP(inttoote_map,0)
MDRV_CPU_VBLANK_INT_HACK(inttoote_interrupt,8+1+1+1)
+
+ MDRV_PIA6821_ADD("pia0", inttoote_pia0_intf)
+ MDRV_PIA6821_ADD("pia1", inttoote_pia1_intf)
/* video hardware */
MDRV_SCREEN_ADD("screen", RASTER)
@@ -9626,30 +9661,6 @@ static DRIVER_INIT( crazyfgt )
International Toote
***************************************************************************/
-static const pia6821_interface inttoote_pia0_intf =
-{
- /* PIA inputs: A, B, CA1, CB1, CA2, CB2 */
- 0, 0, 0, 0, 0, 0,
-
- /* PIA outputs: A, B, CA2, CB2 */
- 0, 0, 0, 0,
-
- /* PIA IRQs: A, B */
- 0, 0
-};
-
-static const pia6821_interface inttoote_pia1_intf =
-{
- /* PIA inputs: A, B, CA1, CB1, CA2, CB2 */
- 0, 0, 0, 0, 0, 0,
-
- /* PIA outputs: A, B, CA2, CB2 */
- 0, 0, 0, 0,
-
- /* PIA IRQs: A, B */
- 0, 0
-};
-
static DRIVER_INIT( inttoote )
{
UINT16 *ROM = (UINT16 *)memory_region( machine, "maincpu" );
@@ -9663,10 +9674,6 @@ static DRIVER_INIT( inttoote )
ROM[0x4de2/2] = 0x4e71;
ROM[0x368a/2] = 0x50f9; // betting count down
-
- /* Initializing PIAs... (to be done) */
- pia_config(machine, 0, &inttoote_pia0_intf);
- pia_config(machine, 1, &inttoote_pia1_intf);
}
/***************************************************************************
diff --git a/src/mame/drivers/toratora.c b/src/mame/drivers/toratora.c
index 382f3482705..ce1b0b3194a 100644
--- a/src/mame/drivers/toratora.c
+++ b/src/mame/drivers/toratora.c
@@ -19,7 +19,7 @@ TODO:
#include "driver.h"
#include "cpu/m6800/m6800.h"
-#include "machine/6821pia.h"
+#include "machine/6821new.h"
#include "sound/sn76477.h"
@@ -43,9 +43,9 @@ static READ8_HANDLER( port_b_u3_r )
}
-static WRITE8_HANDLER( cb2_u3_w )
+static WRITE_LINE_DEVICE_HANDLER( cb2_u3_w )
{
- logerror("DIP tristate %sactive\n",(data & 1) ? "in" : "");
+ logerror("DIP tristate %sactive\n",(state & 1) ? "in" : "");
}
@@ -101,9 +101,9 @@ static WRITE8_HANDLER( clear_tv_w )
*
*************************************/
-static WRITE8_HANDLER( port_b_u1_w )
+static WRITE8_DEVICE_HANDLER( port_b_u1_w )
{
- if (pia_get_port_b_z_mask(0) & 0x20)
+ if (pianew_get_port_b_z_mask(device) & 0x20)
coin_counter_w(0, 1);
else
coin_counter_w(0, data & 0x20);
@@ -117,12 +117,12 @@ static WRITE8_HANDLER( port_b_u1_w )
*
*************************************/
-static void main_cpu_irq(running_machine *machine, int state)
+static WRITE_LINE_DEVICE_HANDLER( main_cpu_irq )
{
- int combined_state = pia_get_irq_a(0) | pia_get_irq_b(0);
+ int combined_state = pianew_get_irq_a(device) | pianew_get_irq_b(device);
logerror("GEN IRQ: %x\n", combined_state);
- cpu_set_input_line(machine->cpu[0], 0, combined_state ? ASSERT_LINE : CLEAR_LINE);
+ cpu_set_input_line(device->machine->cpu[0], 0, combined_state ? ASSERT_LINE : CLEAR_LINE);
}
@@ -133,6 +133,7 @@ static int timer;
static INTERRUPT_GEN( toratora_timer )
{
+ const device_config *pia = devtag_get_device(device->machine, "pia_u1");
static UINT8 last = 0;
timer++; /* timer counting at 16 Hz */
@@ -145,11 +146,11 @@ static UINT8 last = 0;
last = input_port_read(device->machine, "INPUT") & 0x0f;
generic_pulse_irq_line(device, 0);
}
- pia_set_input_a(0, input_port_read(device->machine, "INPUT") & 0x0f, 0);
+ pianew_set_input_a(pia, input_port_read(device->machine, "INPUT") & 0x0f, 0);
- pia_set_input_ca1(0, input_port_read(device->machine, "INPUT") & 0x10);
+ pia_ca1_w(pia, 0, input_port_read(device->machine, "INPUT") & 0x10);
- pia_set_input_ca2(0, input_port_read(device->machine, "INPUT") & 0x20);
+ pia_ca2_w(pia, 0, input_port_read(device->machine, "INPUT") & 0x20);
}
static READ8_HANDLER( timer_r )
@@ -199,14 +200,14 @@ static const sn76477_interface sn76477_intf =
};
-static void port_a_u2_u3_w(const device_config *device, UINT8 data)
+static WRITE8_DEVICE_HANDLER( port_a_u2_u3_w )
{
sn76477_vco_voltage_w(device, 2.35 * (data & 0x7f) / 128.0);
sn76477_enable_w(device, (data >> 7) & 0x01);
}
-static void port_b_u2_u3_w(const device_config *device, UINT8 data)
+static WRITE8_DEVICE_HANDLER( port_b_u2_u3_w )
{
static const double resistances[] =
{
@@ -229,49 +230,12 @@ static void port_b_u2_u3_w(const device_config *device, UINT8 data)
}
-static void ca2_u2_u3_w(const device_config *device, UINT8 data)
+static WRITE_LINE_DEVICE_HANDLER( ca2_u2_u3_w )
{
- sn76477_vco_w(device, data);
+ sn76477_vco_w(device, state);
}
-static WRITE8_HANDLER( port_a_u2_w )
-{
- port_a_u2_u3_w(devtag_get_device(space->machine, "sn1"), data);
-}
-
-
-static WRITE8_HANDLER( port_a_u3_w )
-{
- port_a_u2_u3_w(devtag_get_device(space->machine, "sn2"), data);
-}
-
-
-static WRITE8_HANDLER( port_b_u2_w )
-{
- port_b_u2_u3_w(devtag_get_device(space->machine, "sn1"), data);
-}
-
-
-static WRITE8_HANDLER( port_b_u3_w )
-{
- port_b_u2_u3_w(devtag_get_device(space->machine, "sn2"), data);
-}
-
-
-static WRITE8_HANDLER( ca2_u2_w )
-{
- ca2_u2_u3_w(devtag_get_device(space->machine, "sn1"), data);
-}
-
-
-static WRITE8_HANDLER( ca2_u3_w )
-{
- ca2_u2_u3_w(devtag_get_device(space->machine, "sn2"), data);
-}
-
-
-
/*************************************
*
* Machine setup
@@ -280,49 +244,56 @@ static WRITE8_HANDLER( ca2_u3_w )
static const pia6821_interface pia_u1_intf =
{
- /*inputs : A/B,CA/B1,CA/B2 */ 0, 0, 0, 0, 0, 0,
- /*outputs: A/B,CA/B2 */ 0, port_b_u1_w, 0, 0,
- /*irqs : A/B */ main_cpu_irq, main_cpu_irq,
+ DEVCB_NULL, /* port A in */
+ DEVCB_NULL, /* port B in */
+ DEVCB_NULL, /* line CA1 in */
+ DEVCB_NULL, /* line CB1 in */
+ DEVCB_NULL, /* line CA2 in */
+ DEVCB_NULL, /* line CB2 in */
+ DEVCB_NULL, /* port A out */
+ DEVCB_HANDLER(port_b_u1_w), /* port B out */
+ DEVCB_NULL, /* line CA2 out */
+ DEVCB_NULL, /* port CB2 out */
+ DEVCB_LINE(main_cpu_irq), /* IRQA */
+ DEVCB_LINE(main_cpu_irq) /* IRQB */
};
+
static const pia6821_interface pia_u2_intf =
{
- /*inputs : A/B,CA/B1,CA/B2 */ 0, 0, 0, 0, 0, 0,
- /*outputs: A/B,CA/B2 */ port_a_u2_w, port_b_u2_w, ca2_u2_w, 0,
- /*irqs : A/B */ 0, 0,
+ DEVCB_NULL, /* port A in */
+ DEVCB_NULL, /* port B in */
+ DEVCB_NULL, /* line CA1 in */
+ DEVCB_NULL, /* line CB1 in */
+ DEVCB_NULL, /* line CA2 in */
+ DEVCB_NULL, /* line CB2 in */
+ DEVCB_DEVICE_HANDLER("sn1", port_a_u2_u3_w), /* port A out */
+ DEVCB_DEVICE_HANDLER("sn1", port_b_u2_u3_w), /* port B out */
+ DEVCB_DEVICE_LINE("sn1", ca2_u2_u3_w), /* line CA2 out */
+ DEVCB_NULL, /* port CB2 out */
+ DEVCB_NULL, /* IRQA */
+ DEVCB_NULL /* IRQB */
};
static const pia6821_interface pia_u3_intf =
{
- /*inputs : A/B,CA/B1,CA/B2 */ 0, port_b_u3_r, 0, 0, 0, 0,
- /*outputs: A/B,CA/B2 */ port_a_u3_w, port_b_u3_w, ca2_u3_w, cb2_u3_w,
- /*irqs : A/B */ 0, 0,
+ DEVCB_NULL, /* port A in */
+ DEVCB_NULL, /* port B in */
+ DEVCB_NULL, /* line CA1 in */
+ DEVCB_NULL, /* line CB1 in */
+ DEVCB_NULL, /* line CA2 in */
+ DEVCB_NULL, /* line CB2 in */
+ DEVCB_DEVICE_HANDLER("sn2", port_a_u2_u3_w), /* port A out */
+ DEVCB_DEVICE_HANDLER("sn2", port_b_u2_u3_w), /* port B out */
+ DEVCB_DEVICE_LINE("sn2", ca2_u2_u3_w), /* line CA2 out */
+ DEVCB_LINE(cb2_u3_w), /* port CB2 out */
+ DEVCB_NULL, /* IRQA */
+ DEVCB_NULL /* IRQB */
};
-static MACHINE_START( toratora )
-{
- pia_config(machine, 0, &pia_u1_intf);
- pia_config(machine, 1, &pia_u3_intf);
- pia_config(machine, 2, &pia_u2_intf);
-}
-
-
-
-/*************************************
- *
- * Machine reset
- *
- *************************************/
-
-static MACHINE_RESET( toratora )
-{
- pia_reset();
-}
-
-
/*************************************
*
@@ -342,9 +313,9 @@ static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0xf04a, 0xf04a) AM_WRITE(clear_tv_w) /* the read is mark *LEDEN, but not used */
AM_RANGE(0xf04b, 0xf04b) AM_READWRITE(timer_r, clear_timer_w)
AM_RANGE(0xa04c, 0xf09f) AM_NOP
- AM_RANGE(0xf0a0, 0xf0a3) AM_READWRITE(pia_0_r, pia_0_w)
- AM_RANGE(0xf0a4, 0xf0a7) AM_READWRITE(pia_1_r, pia_1_w)
- AM_RANGE(0xf0a8, 0xf0ab) AM_READWRITE(pia_2_r, pia_2_w)
+ AM_RANGE(0xf0a0, 0xf0a3) AM_DEVREADWRITE("pia_u1", pia_r, pia_w)
+ AM_RANGE(0xf0a4, 0xf0a7) AM_DEVREADWRITE("pia_u3", pia_r, pia_w)
+ AM_RANGE(0xf0a8, 0xf0ab) AM_DEVREADWRITE("pia_u2", pia_r, pia_w)
AM_RANGE(0xf0ac, 0xf7ff) AM_NOP
AM_RANGE(0xf800, 0xffff) AM_ROM
ADDRESS_MAP_END
@@ -404,8 +375,9 @@ static MACHINE_DRIVER_START( toratora )
MDRV_CPU_PROGRAM_MAP(main_map,0)
MDRV_CPU_PERIODIC_INT(toratora_timer,16) /* timer counting at 16 Hz */
- MDRV_MACHINE_START(toratora)
- MDRV_MACHINE_RESET(toratora)
+ MDRV_PIA6821_ADD("pia_u1", pia_u1_intf)
+ MDRV_PIA6821_ADD("pia_u2", pia_u2_intf)
+ MDRV_PIA6821_ADD("pia_u3", pia_u3_intf)
/* video hardware */
MDRV_VIDEO_UPDATE(toratora)
diff --git a/src/mame/drivers/zaccaria.c b/src/mame/drivers/zaccaria.c
index 9899e59e4fd..ebd3d6ffb65 100644
--- a/src/mame/drivers/zaccaria.c
+++ b/src/mame/drivers/zaccaria.c
@@ -36,7 +36,7 @@ Notes:
#include "driver.h"
#include "cpu/z80/z80.h"
#include "cpu/m6800/m6800.h"
-#include "machine/6821pia.h"
+#include "machine/6821new.h"
#include "machine/8255ppi.h"
#include "sound/ay8910.h"
#include "sound/dac.h"
@@ -103,22 +103,22 @@ static WRITE8_DEVICE_HANDLER( ay8910_port0a_w )
}
-static void zaccaria_irq0a(running_machine *machine, int state) { cpu_set_input_line(machine->cpu[1], INPUT_LINE_NMI, state ? ASSERT_LINE : CLEAR_LINE); }
-static void zaccaria_irq0b(running_machine *machine, int state) { cpu_set_input_line(machine->cpu[1],0,state ? ASSERT_LINE : CLEAR_LINE); }
+static WRITE_LINE_DEVICE_HANDLER( zaccaria_irq0a ) { cpu_set_input_line(device->machine->cpu[1], INPUT_LINE_NMI, state ? ASSERT_LINE : CLEAR_LINE); }
+static WRITE_LINE_DEVICE_HANDLER( zaccaria_irq0b ) { cpu_set_input_line(device->machine->cpu[1],0,state ? ASSERT_LINE : CLEAR_LINE); }
static int active_8910, port0a, acs;
-static READ8_HANDLER( zaccaria_port0a_r )
+static READ8_DEVICE_HANDLER( zaccaria_port0a_r )
{
- return ay8910_r(devtag_get_device(space->machine, (active_8910 == 0) ? "ay1" : "ay2"), 0);
+ return ay8910_r(devtag_get_device(device->machine, (active_8910 == 0) ? "ay1" : "ay2"), 0);
}
-static WRITE8_HANDLER( zaccaria_port0a_w )
+static WRITE8_DEVICE_HANDLER( zaccaria_port0a_w )
{
port0a = data;
}
-static WRITE8_HANDLER( zaccaria_port0b_w )
+static WRITE8_DEVICE_HANDLER( zaccaria_port0b_w )
{
static int last;
@@ -127,7 +127,7 @@ static WRITE8_HANDLER( zaccaria_port0b_w )
if ((last & 0x02) == 0x02 && (data & 0x02) == 0x00)
{
/* bit 0 goes to the 8910 #0 BC1 pin */
- ay8910_data_address_w(devtag_get_device(space->machine, "ay1"), last, port0a);
+ ay8910_data_address_w(devtag_get_device(device->machine, "ay1"), last, port0a);
}
else if ((last & 0x02) == 0x00 && (data & 0x02) == 0x02)
{
@@ -139,7 +139,7 @@ static WRITE8_HANDLER( zaccaria_port0b_w )
if ((last & 0x08) == 0x08 && (data & 0x08) == 0x00)
{
/* bit 2 goes to the 8910 #1 BC1 pin */
- ay8910_data_address_w(devtag_get_device(space->machine, "ay2"), last >> 2, port0a);
+ ay8910_data_address_w(devtag_get_device(device->machine, "ay2"), last >> 2, port0a);
}
else if ((last & 0x08) == 0x00 && (data & 0x08) == 0x08)
{
@@ -153,10 +153,10 @@ static WRITE8_HANDLER( zaccaria_port0b_w )
static INTERRUPT_GEN( zaccaria_cb1_toggle )
{
- const address_space *space = cpu_get_address_space(device, ADDRESS_SPACE_PROGRAM);
+ const device_config *pia0 = devtag_get_device(device->machine, "pia0");
static int toggle;
- pia_0_cb1_w(space,0, toggle & 1);
+ pia_cb1_w(pia0,0, toggle & 1);
toggle ^= 1;
}
@@ -164,21 +164,21 @@ static INTERRUPT_GEN( zaccaria_cb1_toggle )
static int port1a,port1b;
-static READ8_HANDLER( zaccaria_port1a_r )
+static READ8_DEVICE_HANDLER( zaccaria_port1a_r )
{
- const device_config *tms = devtag_get_device(space->machine, "tms");
+ const device_config *tms = devtag_get_device(device->machine, "tms");
if (~port1b & 1) return tms5220_status_r(tms,0);
else return port1a;
}
-static WRITE8_HANDLER( zaccaria_port1a_w )
+static WRITE8_DEVICE_HANDLER( zaccaria_port1a_w )
{
port1a = data;
}
-static WRITE8_HANDLER( zaccaria_port1b_w )
+static WRITE8_DEVICE_HANDLER( zaccaria_port1b_w )
{
- const device_config *tms = devtag_get_device(space->machine, "tms");
+ const device_config *tms = devtag_get_device(device->machine, "tms");
port1b = data;
// bit 0 = /RS
@@ -193,7 +193,7 @@ static WRITE8_HANDLER( zaccaria_port1b_w )
set_led_status(0,~data & 0x10);
}
-static READ8_HANDLER( zaccaria_ca2_r )
+static READ_LINE_DEVICE_HANDLER( zaccaria_ca2_r )
{
// TODO: this doesn't work, why?
// return !tms5220_ready_r();
@@ -207,24 +207,42 @@ return counter;
static void tms5220_irq_handler(const device_config *device, int state)
{
- const address_space *space = cpu_get_address_space(device->machine->cpu[0], ADDRESS_SPACE_PROGRAM);
- pia_1_cb1_w(space,0,state ? 0 : 1);
+ const device_config *pia1 = devtag_get_device(device->machine, "pia1");
+ pia_cb1_w(pia1,0,state ? 0 : 1);
}
-
static const pia6821_interface pia_0_intf =
{
- /*inputs : A/B,CA/B1,CA/B2 */ zaccaria_port0a_r, 0, 0, 0, 0, 0,
- /*outputs: A/B,CA/B2 */ zaccaria_port0a_w, zaccaria_port0b_w, 0, 0,
- /*irqs : A/B */ zaccaria_irq0a, zaccaria_irq0b
+ DEVCB_HANDLER(zaccaria_port0a_r), /* port A in */
+ DEVCB_NULL, /* port B in */
+ DEVCB_NULL, /* line CA1 in */
+ DEVCB_NULL, /* line CB1 in */
+ DEVCB_NULL, /* line CA2 in */
+ DEVCB_NULL, /* line CB2 in */
+ DEVCB_HANDLER(zaccaria_port0a_w), /* port A out */
+ DEVCB_HANDLER(zaccaria_port0b_w), /* port B out */
+ DEVCB_NULL, /* line CA2 out */
+ DEVCB_NULL, /* port CB2 out */
+ DEVCB_LINE(zaccaria_irq0a), /* IRQA */
+ DEVCB_LINE(zaccaria_irq0b) /* IRQB */
};
+
static const pia6821_interface pia_1_intf =
{
- /*inputs : A/B,CA/B1,CA/B2 */ zaccaria_port1a_r, 0, 0, 0, zaccaria_ca2_r, 0,
- /*outputs: A/B,CA/B2 */ zaccaria_port1a_w, zaccaria_port1b_w, 0, 0,
- /*irqs : A/B */ 0, 0
+ DEVCB_HANDLER(zaccaria_port1a_r), /* port A in */
+ DEVCB_NULL, /* port B in */
+ DEVCB_NULL, /* line CA1 in */
+ DEVCB_NULL, /* line CB1 in */
+ DEVCB_LINE(zaccaria_ca2_r), /* line CA2 in */
+ DEVCB_NULL, /* line CB2 in */
+ DEVCB_HANDLER(zaccaria_port1a_w), /* port A out */
+ DEVCB_HANDLER(zaccaria_port1b_w), /* port B out */
+ DEVCB_NULL, /* line CA2 out */
+ DEVCB_NULL, /* port CB2 out */
+ DEVCB_NULL, /* IRQA */
+ DEVCB_NULL /* IRQB */
};
@@ -239,18 +257,6 @@ static const ppi8255_interface ppi8255_intf =
};
-static MACHINE_START( zaccaria )
-{
- pia_config(machine, 0, &pia_0_intf);
- pia_config(machine, 1, &pia_1_intf);
-}
-
-static MACHINE_RESET( zaccaria )
-{
- pia_reset();
-}
-
-
static WRITE8_HANDLER( sound_command_w )
{
soundlatch_w(space,0,data);
@@ -259,7 +265,8 @@ static WRITE8_HANDLER( sound_command_w )
static WRITE8_HANDLER( sound1_command_w )
{
- pia_0_ca1_w(space,0,data & 0x80);
+ const device_config *pia0 = devtag_get_device(space->machine, "pia0");
+ pia_ca1_w(pia0,0,data & 0x80);
soundlatch2_w(space,0,data);
}
@@ -348,14 +355,14 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( sound_map_1, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x007f) AM_RAM
- AM_RANGE(0x500c, 0x500f) AM_READWRITE(pia_0_r, pia_0_w)
+ AM_RANGE(0x500c, 0x500f) AM_DEVREADWRITE("pia0", pia_r, pia_w)
AM_RANGE(0xa000, 0xbfff) AM_ROM
AM_RANGE(0xe000, 0xffff) AM_ROM
ADDRESS_MAP_END
static ADDRESS_MAP_START( sound_map_2, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x007f) AM_RAM
- AM_RANGE(0x0090, 0x0093) AM_READWRITE(pia_1_r, pia_1_w)
+ AM_RANGE(0x0090, 0x0093) AM_DEVREADWRITE("pia1", pia_r, pia_w)
AM_RANGE(0x1000, 0x1000) AM_DEVWRITE("dac2", mc1408_data_w) /* MC1408 */
AM_RANGE(0x1400, 0x1400) AM_WRITE(sound1_command_w)
AM_RANGE(0x1800, 0x1800) AM_READ(soundlatch_r)
@@ -574,10 +581,9 @@ static MACHINE_DRIVER_START( zaccaria )
MDRV_CPU_ADD("audio2", M6802,XTAL_3_579545MHz) /* verified on pcb */
MDRV_CPU_PROGRAM_MAP(sound_map_2,0)
- MDRV_MACHINE_START(zaccaria)
- MDRV_MACHINE_RESET(zaccaria)
-
MDRV_PPI8255_ADD( "ppi8255", ppi8255_intf )
+ MDRV_PIA6821_ADD( "pia0", pia_0_intf )
+ MDRV_PIA6821_ADD( "pia1", pia_1_intf )
/* video hardware */
MDRV_SCREEN_ADD("screen", RASTER)
diff --git a/src/mame/includes/atari.h b/src/mame/includes/atari.h
index b6e81ab696b..2a503a8d7f8 100644
--- a/src/mame/includes/atari.h
+++ b/src/mame/includes/atari.h
@@ -12,6 +12,8 @@
#ifndef ATARI_H
#define ATARI_H
+#include "machine/6821new.h"
+
/*----------- defined in machine/atari.c -----------*/
typedef struct {
@@ -29,12 +31,18 @@ typedef struct {
} ATARI_FDC;
extern ATARI_FDC atari_fdc;
+extern const pia6821_interface atari_pia_interface;
+extern const pia6821_interface a600xl_pia_interface;
+extern const pia6821_interface a800xl_pia_interface;
+
MACHINE_START( a400 );
MACHINE_START( a800 );
MACHINE_START( a600xl );
MACHINE_START( a800xl );
MACHINE_START( a5200 );
+WRITE_LINE_DEVICE_HANDLER(atari_pia_cb2_w);
+
#ifdef MESS
DEVICE_IMAGE_LOAD( a800_floppy );
diff --git a/src/mame/machine/atari.c b/src/mame/machine/atari.c
index f2a997b65dd..662b32d5b05 100644
--- a/src/mame/machine/atari.c
+++ b/src/mame/machine/atari.c
@@ -12,7 +12,7 @@
#include "cpu/m6502/m6502.h"
#include "includes/atari.h"
#include "sound/pokey.h"
-#include "machine/6821pia.h"
+#include "machine/6821new.h"
#include "sound/dac.h"
#include "video/gtia.h"
@@ -77,44 +77,69 @@ void atari_interrupt_cb(const device_config *device, int mask)
*
**************************************************************/
-static READ8_HANDLER(atari_pia_pa_r)
+static READ8_DEVICE_HANDLER(atari_pia_pa_r)
{
- return atari_input_disabled() ? 0xFF : input_port_read_safe(space->machine, "djoy_0_1", 0);
+ return atari_input_disabled() ? 0xFF : input_port_read_safe(device->machine, "djoy_0_1", 0);
}
-static READ8_HANDLER(atari_pia_pb_r)
+static READ8_DEVICE_HANDLER(atari_pia_pb_r)
{
- return atari_input_disabled() ? 0xFF : input_port_read_safe(space->machine, "djoy_2_3", 0);
+ return atari_input_disabled() ? 0xFF : input_port_read_safe(device->machine, "djoy_2_3", 0);
}
-static WRITE8_HANDLER(a600xl_pia_pb_w) { a600xl_mmu(space->machine, data); }
-static WRITE8_HANDLER(a800xl_pia_pb_w) { a800xl_mmu(space->machine, data); }
+static WRITE8_DEVICE_HANDLER(a600xl_pia_pb_w) { a600xl_mmu(device->machine, data); }
+static WRITE8_DEVICE_HANDLER(a800xl_pia_pb_w) { a800xl_mmu(device->machine, data); }
-#ifdef MESS
-extern WRITE8_HANDLER(atari_pia_cb2_w);
-#else
-#define atari_pia_cb2_w (0)
+#ifndef MESS
+WRITE_LINE_DEVICE_HANDLER(atari_pia_cb2_w) { }
#endif
-static const pia6821_interface atari_pia_interface =
+const pia6821_interface atari_pia_interface =
{
- /*inputs : A/B,CA/B1,CA/B2 */ atari_pia_pa_r, atari_pia_pb_r, 0, 0, 0, 0,
- /*outputs: A/B,CA/B2 */ 0, 0, 0, atari_pia_cb2_w,
- /*irqs : A/B */ 0, 0
+ DEVCB_HANDLER(atari_pia_pa_r), /* port A in */
+ DEVCB_HANDLER(atari_pia_pb_r), /* port B in */
+ DEVCB_NULL, /* line CA1 in */
+ DEVCB_NULL, /* line CB1 in */
+ DEVCB_NULL, /* line CA2 in */
+ DEVCB_NULL, /* line CB2 in */
+ DEVCB_NULL, /* port A out */
+ DEVCB_NULL, /* port B out */
+ DEVCB_NULL, /* line CA2 out */
+ DEVCB_LINE(atari_pia_cb2_w), /* port CB2 out */
+ DEVCB_NULL, /* IRQA */
+ DEVCB_NULL /* IRQB */
};
-static const pia6821_interface a600xl_pia_interface =
+const pia6821_interface a600xl_pia_interface =
{
- /*inputs : A/B,CA/B1,CA/B2 */ atari_pia_pa_r, atari_pia_pb_r, 0, 0, 0, 0,
- /*outputs: A/B,CA/B2 */ 0, a600xl_pia_pb_w, 0, atari_pia_cb2_w,
- /*irqs : A/B */ 0, 0
+ DEVCB_HANDLER(atari_pia_pa_r), /* port A in */
+ DEVCB_HANDLER(atari_pia_pb_r), /* port B in */
+ DEVCB_NULL, /* line CA1 in */
+ DEVCB_NULL, /* line CB1 in */
+ DEVCB_NULL, /* line CA2 in */
+ DEVCB_NULL, /* line CB2 in */
+ DEVCB_NULL, /* port A out */
+ DEVCB_HANDLER(a600xl_pia_pb_w), /* port B out */
+ DEVCB_NULL, /* line CA2 out */
+ DEVCB_LINE(atari_pia_cb2_w), /* port CB2 out */
+ DEVCB_NULL, /* IRQA */
+ DEVCB_NULL /* IRQB */
};
-static const pia6821_interface a800xl_pia_interface =
+const pia6821_interface a800xl_pia_interface =
{
- /*inputs : A/B,CA/B1,CA/B2 */ atari_pia_pa_r, atari_pia_pb_r, 0, 0, 0, 0,
- /*outputs: A/B,CA/B2 */ 0, a800xl_pia_pb_w, 0, atari_pia_cb2_w,
- /*irqs : A/B */ 0, 0
+ DEVCB_HANDLER(atari_pia_pa_r), /* port A in */
+ DEVCB_HANDLER(atari_pia_pb_r), /* port B in */
+ DEVCB_NULL, /* line CA1 in */
+ DEVCB_NULL, /* line CB1 in */
+ DEVCB_NULL, /* line CA2 in */
+ DEVCB_NULL, /* line CB2 in */
+ DEVCB_NULL, /* port A out */
+ DEVCB_HANDLER(a800xl_pia_pb_w), /* port B out */
+ DEVCB_NULL, /* line CA2 out */
+ DEVCB_LINE(atari_pia_cb2_w), /* port CB2 out */
+ DEVCB_NULL, /* IRQA */
+ DEVCB_NULL /* IRQB */
};
@@ -726,18 +751,13 @@ static void console_write(const address_space *space, UINT8 data)
}
-static void _pia_reset(running_machine *machine)
-{
- pia_reset();
-}
-
static void _antic_reset(running_machine *machine)
{
antic_reset();
}
-static void atari_machine_start(running_machine *machine, int type, const pia6821_interface *pia_intf, int has_cart)
+static void atari_machine_start(running_machine *machine, int type, int has_cart)
{
gtia_interface gtia_intf;
@@ -754,13 +774,6 @@ static void atari_machine_start(running_machine *machine, int type, const pia682
/* pokey */
add_reset_callback(machine, pokey_reset);
- /* PIA */
- if (pia_intf)
- {
- pia_config(machine, 0, pia_intf);
- add_reset_callback(machine, _pia_reset);
- }
-
/* ANTIC */
add_reset_callback(machine, _antic_reset);
@@ -812,12 +825,12 @@ static void atari_machine_start(running_machine *machine, int type, const pia682
MACHINE_START( a400 )
{
- atari_machine_start(machine, ATARI_400, &atari_pia_interface, TRUE);
+ atari_machine_start(machine, ATARI_400, TRUE);
}
MACHINE_START( a600xl )
{
- atari_machine_start(machine, ATARI_600XL, &a600xl_pia_interface, TRUE);
+ atari_machine_start(machine, ATARI_600XL, TRUE);
}
@@ -830,7 +843,7 @@ MACHINE_START( a600xl )
MACHINE_START( a800 )
{
- atari_machine_start(machine, ATARI_800, &atari_pia_interface, TRUE);
+ atari_machine_start(machine, ATARI_800, TRUE);
}
@@ -884,7 +897,7 @@ DEVICE_IMAGE_UNLOAD( a800_cart )
MACHINE_START( a800xl )
{
- atari_machine_start(machine, ATARI_800XL, &a800xl_pia_interface, TRUE);
+ atari_machine_start(machine, ATARI_800XL, TRUE);
}
@@ -941,7 +954,7 @@ DEVICE_IMAGE_LOAD( a800xl_cart )
MACHINE_START( a5200 )
{
- atari_machine_start(machine, ATARI_800XL, NULL, FALSE);
+ atari_machine_start(machine, ATARI_800XL, FALSE);
}