summaryrefslogtreecommitdiffstatshomepage
path: root/src/mess/drivers
diff options
context:
space:
mode:
author Fabio Priuli <etabeta78@users.noreply.github.com>2014-04-17 05:49:48 +0000
committer Fabio Priuli <etabeta78@users.noreply.github.com>2014-04-17 05:49:48 +0000
commita2bdecb0716607331febcb702563e78c40ba2f62 (patch)
tree82d192231d376fcb7f88512bb7c30629f775d2d8 /src/mess/drivers
parent7030ff593e2dc3d071b0f1df7d3d9085516cf414 (diff)
converted i8255 to devcb2. nw.
p.s. I tested several games/systems and I triple checked the diff to be sure I did not make any copy and paste mistake in the 195 files touched by this, but let me know if any system suddenly stops working!
Diffstat (limited to 'src/mess/drivers')
-rw-r--r--src/mess/drivers/ace.c19
-rw-r--r--src/mess/drivers/amico2k.c16
-rw-r--r--src/mess/drivers/amstrad.c32
-rw-r--r--src/mess/drivers/amust.c36
-rw-r--r--src/mess/drivers/apogee.c10
-rw-r--r--src/mess/drivers/apricot.c18
-rw-r--r--src/mess/drivers/atom.c25
-rw-r--r--src/mess/drivers/b2m.c18
-rw-r--r--src/mess/drivers/basic52.c12
-rw-r--r--src/mess/drivers/bw2.c20
-rw-r--r--src/mess/drivers/compis.c18
-rw-r--r--src/mess/drivers/dai.c2
-rw-r--r--src/mess/drivers/elwro800.c18
-rw-r--r--src/mess/drivers/fidelz80.c51
-rw-r--r--src/mess/drivers/fk1.c54
-rw-r--r--src/mess/drivers/ibmpcjr.c15
-rw-r--r--src/mess/drivers/iq151.c16
-rw-r--r--src/mess/drivers/irisha.c19
-rw-r--r--src/mess/drivers/isbc.c29
-rw-r--r--src/mess/drivers/lviv.c20
-rw-r--r--src/mess/drivers/m20.c13
-rw-r--r--src/mess/drivers/m5.c22
-rw-r--r--src/mess/drivers/mbc200.c30
-rw-r--r--src/mess/drivers/mbc55x.c11
-rw-r--r--src/mess/drivers/mc1502.c33
-rw-r--r--src/mess/drivers/mikro80.c5
-rw-r--r--src/mess/drivers/mikrosha.c11
-rw-r--r--src/mess/drivers/mpf1.c31
-rw-r--r--src/mess/drivers/ms0515.c15
-rw-r--r--src/mess/drivers/msx.c15
-rw-r--r--src/mess/drivers/multi8.c17
-rw-r--r--src/mess/drivers/mycom.c47
-rw-r--r--src/mess/drivers/mz2000.c18
-rw-r--r--src/mess/drivers/mz2500.c19
-rw-r--r--src/mess/drivers/mz3500.c16
-rw-r--r--src/mess/drivers/mz700.c6
-rw-r--r--src/mess/drivers/mz80.c6
-rw-r--r--src/mess/drivers/orion.c45
-rw-r--r--src/mess/drivers/partner.c8
-rw-r--r--src/mess/drivers/pasogo.c16
-rw-r--r--src/mess/drivers/pasopia.c47
-rw-r--r--src/mess/drivers/pasopia7.c51
-rw-r--r--src/mess/drivers/pc100.c35
-rw-r--r--src/mess/drivers/pc6001.c19
-rw-r--r--src/mess/drivers/pc8001.c16
-rw-r--r--src/mess/drivers/pc8401a.c20
-rw-r--r--src/mess/drivers/pc8801.c35
-rw-r--r--src/mess/drivers/pc88va.c53
-rw-r--r--src/mess/drivers/pc9801.c109
-rw-r--r--src/mess/drivers/pk8000.c32
-rw-r--r--src/mess/drivers/pk8020.c21
-rw-r--r--src/mess/drivers/pmd85.c75
-rw-r--r--src/mess/drivers/poisk1.c33
-rw-r--r--src/mess/drivers/portfoli.c20
-rw-r--r--src/mess/drivers/pp01.c8
-rw-r--r--src/mess/drivers/pulsar.c17
-rw-r--r--src/mess/drivers/qx10.c16
-rw-r--r--src/mess/drivers/radio86.c31
-rw-r--r--src/mess/drivers/sage2.c39
-rw-r--r--src/mess/drivers/savia84.c18
-rw-r--r--src/mess/drivers/sbrain.c18
-rw-r--r--src/mess/drivers/sg1000.c42
-rw-r--r--src/mess/drivers/sm1800.c18
-rw-r--r--src/mess/drivers/softbox.c38
-rw-r--r--src/mess/drivers/special.c36
-rw-r--r--src/mess/drivers/sv8000.c19
-rw-r--r--src/mess/drivers/svi318.c10
-rw-r--r--src/mess/drivers/tandy2k.c14
-rw-r--r--src/mess/drivers/tk80.c58
-rw-r--r--src/mess/drivers/tk80bs.c15
-rw-r--r--src/mess/drivers/unior.c39
-rw-r--r--src/mess/drivers/ut88.c6
-rw-r--r--src/mess/drivers/v1050.c64
-rw-r--r--src/mess/drivers/vector06.c14
-rw-r--r--src/mess/drivers/votrpss.c19
-rw-r--r--src/mess/drivers/wangpc.c21
-rw-r--r--src/mess/drivers/x1.c18
-rw-r--r--src/mess/drivers/x1twin.c18
-rw-r--r--src/mess/drivers/x68k.c16
-rw-r--r--src/mess/drivers/xor100.c16
80 files changed, 868 insertions, 1158 deletions
diff --git a/src/mess/drivers/ace.c b/src/mess/drivers/ace.c
index 7aa33072eef..0a5e13042b9 100644
--- a/src/mess/drivers/ace.c
+++ b/src/mess/drivers/ace.c
@@ -560,7 +560,7 @@ static const ay8910_interface psg_intf =
//-------------------------------------------------
-// I8255A_INTERFACE( ppi_intf )
+// I8255A interface
//-------------------------------------------------
READ8_MEMBER(ace_state::sby_r)
@@ -606,17 +606,6 @@ WRITE8_MEMBER(ace_state::ald_w)
}
}
-static I8255A_INTERFACE( ppi_intf )
-{
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_DRIVER_MEMBER(ace_state,sby_r),
- DEVCB_DRIVER_MEMBER(ace_state,ald_w),
- DEVCB_NULL,
- DEVCB_NULL
-};
-
-
//-------------------------------------------------
// Z80PIO_INTERFACE( pio_intf )
//-------------------------------------------------
@@ -751,7 +740,11 @@ static MACHINE_CONFIG_START( ace, ace_state )
// devices
MCFG_CASSETTE_ADD("cassette", ace_cassette_interface)
MCFG_SNAPSHOT_ADD("snapshot", ace_state, ace, "ace", 1)
- MCFG_I8255A_ADD(I8255_TAG, ppi_intf)
+
+ MCFG_DEVICE_ADD(I8255_TAG, I8255A, 0)
+ MCFG_I8255_IN_PORTB_CB(READ8(ace_state, sby_r))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(ace_state, ald_w))
+
MCFG_Z80PIO_ADD(Z80PIO_TAG, XTAL_6_5MHz/2, pio_intf)
MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "printer")
diff --git a/src/mess/drivers/amico2k.c b/src/mess/drivers/amico2k.c
index b63190afda8..b1a81e59d3e 100644
--- a/src/mess/drivers/amico2k.c
+++ b/src/mess/drivers/amico2k.c
@@ -195,16 +195,6 @@ WRITE8_MEMBER( amico2k_state::ppi_pb_w )
m_ls145_p = (data >> 1) & 0x0f;
}
-static I8255_INTERFACE( ppi_intf )
-{
- DEVCB_DRIVER_MEMBER(amico2k_state, ppi_pa_r), // Port A read
- DEVCB_DRIVER_MEMBER(amico2k_state, ppi_pa_w), // Port A write
- DEVCB_DRIVER_MEMBER(amico2k_state, ppi_pb_r), // Port B read
- DEVCB_DRIVER_MEMBER(amico2k_state, ppi_pb_w), // Port B write
- DEVCB_NULL, // Port C read
- DEVCB_NULL // Port C write
-};
-
void amico2k_state::machine_start()
{
m_led_refresh_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(amico2k_state::led_refresh),this));
@@ -222,7 +212,11 @@ static MACHINE_CONFIG_START( amico2k, amico2k_state )
/* video hardware */
MCFG_DEFAULT_LAYOUT( layout_amico2k )
- MCFG_I8255_ADD("i8255", ppi_intf)
+ MCFG_DEVICE_ADD("i8255", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(amico2k_state, ppi_pa_r))
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(amico2k_state, ppi_pa_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(amico2k_state, ppi_pb_r))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(amico2k_state, ppi_pb_w))
MACHINE_CONFIG_END
diff --git a/src/mess/drivers/amstrad.c b/src/mess/drivers/amstrad.c
index cbfe321dc01..0cbab6eb7b6 100644
--- a/src/mess/drivers/amstrad.c
+++ b/src/mess/drivers/amstrad.c
@@ -119,20 +119,6 @@ Some bugs left :
#define SYSTEM_GX4000 2
-/* -----------------------------
- - amstrad_ppi8255_interface -
- -----------------------------*/
-static I8255_INTERFACE( amstrad_ppi8255_interface )
-{
- DEVCB_DRIVER_MEMBER(amstrad_state,amstrad_ppi_porta_r), /* port A read */
- DEVCB_DRIVER_MEMBER(amstrad_state,amstrad_ppi_porta_w), /* port A write */
- DEVCB_DRIVER_MEMBER(amstrad_state,amstrad_ppi_portb_r), /* port B read */
- DEVCB_NULL, /* port B write */
- DEVCB_NULL, /* port C read */
- DEVCB_DRIVER_MEMBER(amstrad_state,amstrad_ppi_portc_w) /* port C write */
-};
-
-
/* Memory is banked in 16k blocks. However, the multiface
pages the memory in 8k blocks! The ROM can
be paged into bank 0 and bank 3. */
@@ -869,7 +855,11 @@ static MACHINE_CONFIG_START( amstrad_nofdc, amstrad_state )
MCFG_MACHINE_START_OVERRIDE(amstrad_state, amstrad )
MCFG_MACHINE_RESET_OVERRIDE(amstrad_state, amstrad )
- MCFG_I8255_ADD( "ppi8255", amstrad_ppi8255_interface )
+ MCFG_DEVICE_ADD("ppi8255", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(amstrad_state, amstrad_ppi_porta_r))
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(amstrad_state, amstrad_ppi_porta_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(amstrad_state, amstrad_ppi_portb_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(amstrad_state, amstrad_ppi_portc_w))
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@@ -950,7 +940,11 @@ static MACHINE_CONFIG_START( cpcplus, amstrad_state )
MCFG_MACHINE_START_OVERRIDE(amstrad_state, plus )
MCFG_MACHINE_RESET_OVERRIDE(amstrad_state, plus )
- MCFG_I8255_ADD( "ppi8255", amstrad_ppi8255_interface )
+ MCFG_DEVICE_ADD("ppi8255", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(amstrad_state, amstrad_ppi_porta_r))
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(amstrad_state, amstrad_ppi_porta_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(amstrad_state, amstrad_ppi_portb_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(amstrad_state, amstrad_ppi_portc_w))
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@@ -1015,7 +1009,11 @@ static MACHINE_CONFIG_START( gx4000, amstrad_state )
MCFG_MACHINE_START_OVERRIDE(amstrad_state, gx4000 )
MCFG_MACHINE_RESET_OVERRIDE(amstrad_state, gx4000 )
- MCFG_I8255_ADD( "ppi8255", amstrad_ppi8255_interface )
+ MCFG_DEVICE_ADD("ppi8255", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(amstrad_state, amstrad_ppi_porta_r))
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(amstrad_state, amstrad_ppi_porta_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(amstrad_state, amstrad_ppi_portb_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(amstrad_state, amstrad_ppi_portc_w))
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
diff --git a/src/mess/drivers/amust.c b/src/mess/drivers/amust.c
index 03df68e319c..3be6c0502df 100644
--- a/src/mess/drivers/amust.c
+++ b/src/mess/drivers/amust.c
@@ -241,16 +241,6 @@ WRITE8_MEMBER( amust_state::port06_w )
m_port06 = data;
}
-static I8255_INTERFACE( ppi1_intf )
-{
- DEVCB_DRIVER_MEMBER(amust_state, port04_r), // Port A read
- DEVCB_DRIVER_MEMBER(amust_state, port04_w), // Port A write
- DEVCB_DRIVER_MEMBER(amust_state, port05_r), // Port B read
- DEVCB_NULL, // Port B write
- DEVCB_DRIVER_MEMBER(amust_state, port06_r), // Port C read
- DEVCB_DRIVER_MEMBER(amust_state, port06_w), // Port C write
-};
-
READ8_MEMBER( amust_state::port08_r )
{
return m_port08;
@@ -301,16 +291,6 @@ WRITE8_MEMBER( amust_state::port0a_w )
}
}
-static I8255_INTERFACE( ppi2_intf )
-{
- DEVCB_DRIVER_MEMBER(amust_state, port08_r), // Port A read
- DEVCB_DRIVER_MEMBER(amust_state, port08_w), // Port A write
- DEVCB_DRIVER_MEMBER(amust_state, port09_r), // Port B read
- DEVCB_NULL, // Port B write
- DEVCB_DRIVER_MEMBER(amust_state, port0a_r), // Port C read
- DEVCB_DRIVER_MEMBER(amust_state, port0a_w), // Port C write
-};
-
WRITE8_MEMBER( amust_state::port0d_w )
{
UINT16 video_address = m_port08 | ((m_port0a & 7) << 8);
@@ -458,8 +438,20 @@ static MACHINE_CONFIG_START( amust, amust_state )
//MCFG_RS232_DSR_HANDLER(DEVWRITELINE("uart8251", i8251_device, write_dsr))
MCFG_DEVICE_ADD("pit", PIT8253, 0)
- MCFG_I8255A_ADD("ppi1", ppi1_intf)
- MCFG_I8255A_ADD("ppi2", ppi2_intf)
+
+ MCFG_DEVICE_ADD("ppi1", I8255A, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(amust_state, port04_r))
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(amust_state, port04_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(amust_state, port05_r))
+ MCFG_I8255_IN_PORTC_CB(READ8(amust_state, port06_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(amust_state, port06_w))
+
+ MCFG_DEVICE_ADD("ppi2", I8255A, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(amust_state, port08_r))
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(amust_state, port08_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(amust_state, port09_r))
+ MCFG_I8255_IN_PORTC_CB(READ8(amust_state, port0a_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(amust_state, port0a_w))
MACHINE_CONFIG_END
/* ROM definition */
diff --git a/src/mess/drivers/apogee.c b/src/mess/drivers/apogee.c
index 0327c493e18..949ec99a07e 100644
--- a/src/mess/drivers/apogee.c
+++ b/src/mess/drivers/apogee.c
@@ -213,11 +213,15 @@ static MACHINE_CONFIG_START( apogee, apogee_state )
MCFG_PIT8253_CLK2(XTAL_16MHz/9)
MCFG_PIT8253_OUT2_HANDLER(WRITELINE(apogee_state,pit8253_out2_changed))
- MCFG_I8255_ADD( "ppi8255_1", radio86_ppi8255_interface_1 )
+ MCFG_DEVICE_ADD("ppi8255_1", I8255, 0)
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(radio86_state, radio86_8255_porta_w2))
+ MCFG_I8255_IN_PORTB_CB(READ8(radio86_state, radio86_8255_portb_r2))
+ MCFG_I8255_IN_PORTC_CB(READ8(radio86_state, radio86_8255_portc_r2))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(radio86_state, radio86_8255_portc_w2))
- //MCFG_I8255_ADD( "ppi8255_2", apogee_ppi8255_interface_2 )
+ //MCFG_DEVICE_ADD("ppi8255_2", I8255, 0)
- MCFG_I8275_ADD ( "i8275", apogee_i8275_interface)
+ MCFG_I8275_ADD("i8275", apogee_i8275_interface)
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_UPDATE_DEVICE("i8275", i8275_device, screen_update)
diff --git a/src/mess/drivers/apricot.c b/src/mess/drivers/apricot.c
index 46e23d2316f..478317fb576 100644
--- a/src/mess/drivers/apricot.c
+++ b/src/mess/drivers/apricot.c
@@ -175,16 +175,6 @@ WRITE8_MEMBER( apricot_state::i8255_portc_w )
// schematic page 294 says pc6 outputs to centronics pin 15, which is unused
}
-static const i8255_interface apricot_i8255a_intf =
-{
- DEVCB_DEVICE_MEMBER("cent_data_in", input_buffer_device, read),
- DEVCB_DEVICE_MEMBER("cent_data_out", output_latch_device, write),
- DEVCB_NULL,
- DEVCB_DRIVER_MEMBER(apricot_state, i8255_portb_w),
- DEVCB_DRIVER_MEMBER(apricot_state, i8255_portc_r),
- DEVCB_DRIVER_MEMBER(apricot_state, i8255_portc_w)
-};
-
WRITE_LINE_MEMBER( apricot_state::timer_out1 )
{
// receive clock via timer 1
@@ -400,7 +390,13 @@ static MACHINE_CONFIG_START( apricot, apricot_state )
MCFG_RAM_EXTRA_OPTIONS("384k,512k") // with 1 or 2 128k expansion boards
// devices
- MCFG_I8255A_ADD("ic17", apricot_i8255a_intf)
+ MCFG_DEVICE_ADD("ic17", I8255A, 0)
+ MCFG_I8255_IN_PORTA_CB(DEVREAD8("cent_data_in", input_buffer_device, read))
+ MCFG_I8255_OUT_PORTA_CB(DEVWRITE8("cent_data_out", output_latch_device, write))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(apricot_state, i8255_portb_w))
+ MCFG_I8255_IN_PORTC_CB(READ8(apricot_state, i8255_portc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(apricot_state, i8255_portc_w))
+
MCFG_PIC8259_ADD("ic31", INPUTLINE("ic91", 0), VCC, NULL)
MCFG_DEVICE_ADD("ic16", PIT8253, 0)
diff --git a/src/mess/drivers/atom.c b/src/mess/drivers/atom.c
index 8b031ed9e3c..8fa11338149 100644
--- a/src/mess/drivers/atom.c
+++ b/src/mess/drivers/atom.c
@@ -423,7 +423,7 @@ INPUT_PORTS_END
***************************************************************************/
/*-------------------------------------------------
- I8255_INTERFACE( ppi_intf )
+ I8255 interface
-------------------------------------------------*/
WRITE8_MEMBER( atom_state::ppi_pa_w )
@@ -553,16 +553,6 @@ WRITE8_MEMBER( atom_state::ppi_pc_w )
m_vdg->css_w(BIT(data, 3));
}
-static I8255_INTERFACE( ppi_intf )
-{
- DEVCB_NULL,
- DEVCB_DRIVER_MEMBER(atom_state, ppi_pa_w),
- DEVCB_DRIVER_MEMBER(atom_state, ppi_pb_r),
- DEVCB_NULL,
- DEVCB_DRIVER_MEMBER(atom_state, ppi_pc_r),
- DEVCB_DRIVER_MEMBER(atom_state, ppi_pc_w)
-};
-
/*-------------------------------------------------
i8271_interface fdc_intf
-------------------------------------------------*/
@@ -828,7 +818,12 @@ static MACHINE_CONFIG_START( atom, atom_state )
MCFG_VIA6522_CA2_HANDLER(DEVWRITELINE(CENTRONICS_TAG, centronics_device, write_strobe))
MCFG_VIA6522_IRQ_HANDLER(DEVWRITELINE(SY6502_TAG, m6502_device, irq_line))
- MCFG_I8255_ADD(INS8255_TAG, ppi_intf)
+ MCFG_DEVICE_ADD(INS8255_TAG, I8255, 0)
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(atom_state, ppi_pa_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(atom_state, ppi_pb_r))
+ MCFG_I8255_IN_PORTC_CB(READ8(atom_state, ppi_pc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(atom_state, ppi_pc_w))
+
MCFG_I8271_ADD(I8271_TAG, fdc_intf)
MCFG_I8271_IRQ_CALLBACK(WRITELINE(atom_state, atom_8271_interrupt_callback))
MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(atom_floppy_interface)
@@ -911,7 +906,11 @@ static MACHINE_CONFIG_START( atombb, atom_state )
MCFG_VIA6522_CA2_HANDLER(DEVWRITELINE(CENTRONICS_TAG, centronics_device, write_strobe))
MCFG_VIA6522_IRQ_HANDLER(DEVWRITELINE(SY6502_TAG, m6502_device, irq_line))
- MCFG_I8255_ADD(INS8255_TAG, ppi_intf)
+ MCFG_DEVICE_ADD(INS8255_TAG, I8255, 0)
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(atom_state, ppi_pa_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(atom_state, ppi_pb_r))
+ MCFG_I8255_IN_PORTC_CB(READ8(atom_state, ppi_pc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(atom_state, ppi_pc_w))
MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "printer")
MCFG_CENTRONICS_ACK_HANDLER(DEVWRITELINE(R6522_TAG, via6522_device, write_ca1))
diff --git a/src/mess/drivers/b2m.c b/src/mess/drivers/b2m.c
index eb157b29b63..93b6fbdcc72 100644
--- a/src/mess/drivers/b2m.c
+++ b/src/mess/drivers/b2m.c
@@ -208,11 +208,19 @@ static MACHINE_CONFIG_START( b2m, b2m_state )
MCFG_PIT8253_CLK2(2000000)
MCFG_PIT8253_OUT2_HANDLER(DEVWRITELINE("pit8253", pit8253_device, write_clk0))
- MCFG_I8255_ADD( "ppi8255_1", b2m_ppi8255_interface_1 )
-
- MCFG_I8255_ADD( "ppi8255_2", b2m_ppi8255_interface_2 )
-
- MCFG_I8255_ADD( "ppi8255_3", b2m_ppi8255_interface_3 )
+ MCFG_DEVICE_ADD("ppi8255_1", I8255, 0)
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(b2m_state, b2m_8255_porta_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(b2m_state, b2m_8255_portb_r))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(b2m_state, b2m_8255_portb_w))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(b2m_state, b2m_8255_portc_w))
+
+ MCFG_DEVICE_ADD("ppi8255_2", I8255, 0)
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(b2m_state, b2m_ext_8255_portc_w))
+
+ MCFG_DEVICE_ADD("ppi8255_3", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(b2m_state, b2m_romdisk_porta_r))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(b2m_state, b2m_romdisk_portb_w))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(b2m_state, b2m_romdisk_portc_w))
MCFG_PIC8259_ADD( "pic8259", WRITELINE(b2m_state,b2m_pic_set_int_line), VCC, NULL )
diff --git a/src/mess/drivers/basic52.c b/src/mess/drivers/basic52.c
index e31e9c1e00f..f14e1254076 100644
--- a/src/mess/drivers/basic52.c
+++ b/src/mess/drivers/basic52.c
@@ -112,16 +112,6 @@ WRITE8_MEMBER( basic52_state::kbd_put )
m_term_data = data;
}
-static I8255_INTERFACE( ppi8255_intf )
-{
- DEVCB_NULL, /* Port A read */
- DEVCB_NULL, /* Port A write */
- DEVCB_NULL, /* Port B read */
- DEVCB_NULL, /* Port B write */
- DEVCB_NULL, /* Port C read */
- DEVCB_NULL /* Port C write */
-};
-
static MACHINE_CONFIG_START( basic31, basic52_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", I8031, XTAL_11_0592MHz)
@@ -133,7 +123,7 @@ static MACHINE_CONFIG_START( basic31, basic52_state )
MCFG_DEVICE_ADD(TERMINAL_TAG, GENERIC_TERMINAL, 0)
MCFG_GENERIC_TERMINAL_KEYBOARD_CB(WRITE8(basic52_state, kbd_put))
- MCFG_I8255_ADD("ppi8255", ppi8255_intf )
+ MCFG_DEVICE_ADD("ppi8255", I8255, 0)
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( basic52, basic31 )
diff --git a/src/mess/drivers/bw2.c b/src/mess/drivers/bw2.c
index 5d0ca64b2ba..94df7cfd420 100644
--- a/src/mess/drivers/bw2.c
+++ b/src/mess/drivers/bw2.c
@@ -393,7 +393,7 @@ WRITE_LINE_MEMBER( bw2_state::write_centronics_busy )
}
//-------------------------------------------------
-// I8255A_INTERFACE( ppi_intf )
+// I8255A interface
//-------------------------------------------------
WRITE8_MEMBER( bw2_state::ppi_pa_w )
@@ -499,17 +499,6 @@ READ8_MEMBER( bw2_state::ppi_pc_r )
return data;
}
-static I8255A_INTERFACE( ppi_intf )
-{
- DEVCB_NULL,
- DEVCB_DRIVER_MEMBER(bw2_state, ppi_pa_w),
- DEVCB_DRIVER_MEMBER(bw2_state, ppi_pb_r),
- DEVCB_NULL,
- DEVCB_DRIVER_MEMBER(bw2_state, ppi_pc_r),
- DEVCB_DRIVER_MEMBER(bw2_state, ppi_pc_w),
-};
-
-
//-------------------------------------------------
// pit8253_config pit_intf
//-------------------------------------------------
@@ -619,7 +608,12 @@ static MACHINE_CONFIG_START( bw2, bw2_state )
MCFG_PIT8253_CLK2(0) // Floppy /MTRON
MCFG_PIT8253_OUT2_HANDLER(WRITELINE(bw2_state, mtron_w))
- MCFG_I8255A_ADD(I8255A_TAG, ppi_intf)
+ MCFG_DEVICE_ADD(I8255A_TAG, I8255A, 0)
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(bw2_state, ppi_pa_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(bw2_state, ppi_pb_r))
+ MCFG_I8255_IN_PORTC_CB(READ8(bw2_state, ppi_pc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(bw2_state, ppi_pc_w))
+
MCFG_MSM6255_ADD(MSM6255_TAG, XTAL_16MHz, 0, SCREEN_TAG, lcdc_map)
MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "printer")
diff --git a/src/mess/drivers/compis.c b/src/mess/drivers/compis.c
index 236da449794..0ece6895de2 100644
--- a/src/mess/drivers/compis.c
+++ b/src/mess/drivers/compis.c
@@ -508,7 +508,7 @@ WRITE_LINE_MEMBER( compis_state::tmr5_w )
}
//-------------------------------------------------
-// I8255A_INTERFACE( ppi_intf )
+// I8255A interface
//-------------------------------------------------
WRITE_LINE_MEMBER(compis_state::write_centronics_busy)
@@ -585,17 +585,6 @@ WRITE8_MEMBER( compis_state::ppi_pc_w )
m_isbx0->opt0_w(BIT(data, 7));
}
-static I8255A_INTERFACE( ppi_intf )
-{
- DEVCB_NULL,
- DEVCB_DEVICE_MEMBER("cent_data_out", output_latch_device, write),
- DEVCB_DRIVER_MEMBER(compis_state, ppi_pb_r),
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_DRIVER_MEMBER(compis_state, ppi_pc_w)
-};
-
-
//-------------------------------------------------
// I8274_INTERFACE( mpsc_intf )
//-------------------------------------------------
@@ -723,7 +712,10 @@ static MACHINE_CONFIG_START( compis, compis_state )
MCFG_PIT8253_CLK2(XTAL_16MHz/8)
MCFG_PIT8253_OUT2_HANDLER(WRITELINE(compis_state, tmr5_w))
- MCFG_I8255_ADD(I8255_TAG, ppi_intf )
+ MCFG_DEVICE_ADD(I8255_TAG, I8255, 0)
+ MCFG_I8255_OUT_PORTA_CB(DEVWRITE8("cent_data_out", output_latch_device, write))
+ MCFG_I8255_IN_PORTB_CB(READ8(compis_state, ppi_pb_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(compis_state, ppi_pc_w))
MCFG_DEVICE_ADD(I8251A_TAG, I8251, 0)
MCFG_I8251_TXD_HANDLER(DEVWRITELINE(COMPIS_KEYBOARD_TAG, compis_keyboard_device, si_w))
diff --git a/src/mess/drivers/dai.c b/src/mess/drivers/dai.c
index e4e9df29e16..d521583e2fa 100644
--- a/src/mess/drivers/dai.c
+++ b/src/mess/drivers/dai.c
@@ -210,7 +210,7 @@ static MACHINE_CONFIG_START( dai, dai_state )
MCFG_PIT8253_CLK2(2000000)
MCFG_PIT8253_OUT2_HANDLER(DEVWRITELINE("custom", dai_sound_device, set_input_ch2))
- MCFG_I8255_ADD( "ppi8255", dai_ppi82555_intf )
+ MCFG_DEVICE_ADD("i8255", I8255, 0)
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
diff --git a/src/mess/drivers/elwro800.c b/src/mess/drivers/elwro800.c
index ffd5d8e411a..9611e5f00c0 100644
--- a/src/mess/drivers/elwro800.c
+++ b/src/mess/drivers/elwro800.c
@@ -199,16 +199,6 @@ WRITE8_MEMBER(elwro800_state::i8255_port_c_w)
m_centronics->write_strobe((data >> 7) & 0x01);
}
-static I8255_INTERFACE(elwro800jr_ppi8255_interface)
-{
- DEVCB_INPUT_PORT("JOY"),
- DEVCB_NULL,
- DEVCB_DEVICE_MEMBER("cent_data_in", input_buffer_device, read),
- DEVCB_DEVICE_MEMBER("cent_data_out", output_latch_device, write),
- DEVCB_DRIVER_MEMBER(elwro800_state,i8255_port_c_r),
- DEVCB_DRIVER_MEMBER(elwro800_state,i8255_port_c_w)
-};
-
/*************************************
*
* I/O reads and writes
@@ -583,7 +573,13 @@ static MACHINE_CONFIG_START( elwro800, elwro800_state )
MCFG_VIDEO_START_OVERRIDE(elwro800_state, spectrum )
MCFG_UPD765A_ADD("upd765", true, true)
- MCFG_I8255A_ADD( "ppi8255", elwro800jr_ppi8255_interface)
+
+ MCFG_DEVICE_ADD("ppi8255", I8255A, 0)
+ MCFG_I8255_IN_PORTA_CB(IOPORT("JOY"))
+ MCFG_I8255_IN_PORTB_CB(DEVREAD8("cent_data_in", input_buffer_device, read))
+ MCFG_I8255_OUT_PORTB_CB(DEVWRITE8("cent_data_out", output_latch_device, write))
+ MCFG_I8255_IN_PORTC_CB(READ8(elwro800_state, i8255_port_c_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(elwro800_state, i8255_port_c_w))
/* printer */
MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
diff --git a/src/mess/drivers/fidelz80.c b/src/mess/drivers/fidelz80.c
index 025fbd9becd..0f0ab1bb503 100644
--- a/src/mess/drivers/fidelz80.c
+++ b/src/mess/drivers/fidelz80.c
@@ -697,26 +697,6 @@ WRITE8_MEMBER( fidelz80_state::vcc_porta_w )
update_display();
}
-static I8255_INTERFACE( cc10_ppi8255_intf )
-{
- DEVCB_NULL,
- DEVCB_DRIVER_MEMBER(fidelz80_state, cc10_porta_w),
- DEVCB_INPUT_PORT("LEVEL"),
- DEVCB_DRIVER_MEMBER(fidelz80_state, fidelz80_portb_w),
- DEVCB_DRIVER_MEMBER(fidelz80_state, fidelz80_portc_r),
- DEVCB_DRIVER_MEMBER(fidelz80_state, fidelz80_portc_w)
-};
-
-static I8255_INTERFACE( vcc_ppi8255_intf )
-{
- DEVCB_NULL, // only bit 6 is readable (and only sometimes) and I'm not emulating the language latch unless needed
- DEVCB_DRIVER_MEMBER(fidelz80_state, vcc_porta_w), // display segments and s14001a lines
- DEVCB_DRIVER_MEMBER(fidelz80_state, vcc_portb_r), // bit 7 is readable and is the done line from the s14001a
- DEVCB_DRIVER_MEMBER(fidelz80_state, fidelz80_portb_w), // display digits and led dots
- DEVCB_DRIVER_MEMBER(fidelz80_state, fidelz80_portc_r), // bits 0,1,2,3 are readable, have to do with input
- DEVCB_DRIVER_MEMBER(fidelz80_state, fidelz80_portc_w), // bits 4,5,6,7 are writable, have to do with input
-};
-
/******************************************************************************
I8255 Device, for VSC
******************************************************************************/
@@ -776,16 +756,6 @@ WRITE8_MEMBER( fidelz80_state::vsc_portc_w )
m_kp_matrix = (m_kp_matrix & 0x300) | data;
}
-static I8255_INTERFACE( vsc_ppi8255_intf )
-{
- DEVCB_NULL,
- DEVCB_DRIVER_MEMBER(fidelz80_state, vsc_porta_w),
- DEVCB_NULL,
- DEVCB_DRIVER_MEMBER(fidelz80_state, vsc_portb_w),
- DEVCB_NULL,
- DEVCB_DRIVER_MEMBER(fidelz80_state, vsc_portc_w)
-};
-
/******************************************************************************
PIO Device, for VSC
******************************************************************************/
@@ -1299,7 +1269,12 @@ static MACHINE_CONFIG_START( cc10, fidelz80_state )
MCFG_DEFAULT_LAYOUT(layout_fidelz80)
/* other hardware */
- MCFG_I8255_ADD("ppi8255", cc10_ppi8255_intf)
+ MCFG_DEVICE_ADD("ppi8255", I8255, 0)
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(fidelz80_state, cc10_porta_w))
+ MCFG_I8255_IN_PORTB_CB(IOPORT("LEVEL"))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(fidelz80_state, fidelz80_portb_w))
+ MCFG_I8255_IN_PORTC_CB(READ8(fidelz80_state, fidelz80_portc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(fidelz80_state, fidelz80_portc_w))
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO( "mono" )
@@ -1318,7 +1293,13 @@ static MACHINE_CONFIG_START( vcc, fidelz80_state )
MCFG_DEFAULT_LAYOUT(layout_fidelz80)
/* other hardware */
- MCFG_I8255_ADD("ppi8255", vcc_ppi8255_intf)
+ MCFG_DEVICE_ADD("ppi8255", I8255, 0)
+ // Port A Read - NULL : only bit 6 is readable (and only sometimes) and I'm not emulating the language latch unless needed
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(fidelz80_state, vcc_porta_w)) // display segments and s14001a lines
+ MCFG_I8255_IN_PORTB_CB(READ8(fidelz80_state, vcc_portb_r)) // bit 7 is readable and is the done line from the s14001a
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(fidelz80_state, fidelz80_portb_w)) // display digits and led dots
+ MCFG_I8255_IN_PORTC_CB(READ8(fidelz80_state, fidelz80_portc_r)) // bits 0,1,2,3 are readable, have to do with input
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(fidelz80_state, fidelz80_portc_w)) // bits 4,5,6,7 are writable, have to do with input
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
@@ -1335,7 +1316,11 @@ static MACHINE_CONFIG_START( vsc, fidelz80_state )
MCFG_DEFAULT_LAYOUT(layout_vsc)
/* other hardware */
- MCFG_I8255_ADD("ppi8255", vsc_ppi8255_intf)
+ MCFG_DEVICE_ADD("ppi8255", I8255, 0)
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(fidelz80_state, vsc_porta_w))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(fidelz80_state, vsc_portb_w))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(fidelz80_state, vsc_portb_w))
+
MCFG_Z80PIO_ADD("z80pio", XTAL_4MHz, vsc_z80pio_intf)
MCFG_TIMER_DRIVER_ADD_PERIODIC("nmi_timer", fidelz80_state, nmi_timer, attotime::from_hz(600))
diff --git a/src/mess/drivers/fk1.c b/src/mess/drivers/fk1.c
index 44fabb17a95..83cad2cf731 100644
--- a/src/mess/drivers/fk1.c
+++ b/src/mess/drivers/fk1.c
@@ -114,16 +114,6 @@ READ8_MEMBER( fk1_state::fk1_ppi_1_c_r )
return 0;
}
-static I8255_INTERFACE( fk1_ppi8255_interface_1 )
-{
- DEVCB_DRIVER_MEMBER(fk1_state, fk1_ppi_1_a_r),
- DEVCB_DRIVER_MEMBER(fk1_state, fk1_ppi_1_a_w),
- DEVCB_DRIVER_MEMBER(fk1_state, fk1_ppi_1_b_r),
- DEVCB_DRIVER_MEMBER(fk1_state, fk1_ppi_1_b_w),
- DEVCB_DRIVER_MEMBER(fk1_state, fk1_ppi_1_c_r),
- DEVCB_DRIVER_MEMBER(fk1_state, fk1_ppi_1_c_w)
-};
-
/*
Port A:
Writing data to disk
@@ -167,16 +157,6 @@ READ8_MEMBER( fk1_state::fk1_ppi_2_c_r )
return 0;
}
-static I8255_INTERFACE( fk1_ppi8255_interface_2 )
-{
- DEVCB_NULL,
- DEVCB_DRIVER_MEMBER(fk1_state, fk1_ppi_2_a_w),
- DEVCB_DRIVER_MEMBER(fk1_state, fk1_ppi_2_b_r),
- DEVCB_NULL,
- DEVCB_DRIVER_MEMBER(fk1_state, fk1_ppi_2_c_r),
- DEVCB_DRIVER_MEMBER(fk1_state, fk1_ppi_2_c_w)
-};
-
/*
@@ -235,16 +215,6 @@ READ8_MEMBER( fk1_state::fk1_ppi_3_c_r )
return 0;
}
-static I8255_INTERFACE( fk1_ppi8255_interface_3 )
-{
- DEVCB_DRIVER_MEMBER(fk1_state, fk1_ppi_3_a_r),
- DEVCB_DRIVER_MEMBER(fk1_state, fk1_ppi_3_a_w),
- DEVCB_DRIVER_MEMBER(fk1_state, fk1_ppi_3_b_r),
- DEVCB_DRIVER_MEMBER(fk1_state, fk1_ppi_3_b_w),
- DEVCB_DRIVER_MEMBER(fk1_state, fk1_ppi_3_c_r),
- DEVCB_DRIVER_MEMBER(fk1_state, fk1_ppi_3_c_w)
-};
-
WRITE_LINE_MEMBER( fk1_state::fk1_pit_out0 )
{
// System time
@@ -458,9 +428,27 @@ static MACHINE_CONFIG_START( fk1, fk1_state )
MCFG_PIT8253_CLK2(0)
MCFG_PIT8253_OUT2_HANDLER(WRITELINE(fk1_state, fk1_pit_out2))
- MCFG_I8255_ADD( "ppi8255_1", fk1_ppi8255_interface_1 )
- MCFG_I8255_ADD( "ppi8255_2", fk1_ppi8255_interface_2 )
- MCFG_I8255_ADD( "ppi8255_3", fk1_ppi8255_interface_3 )
+ MCFG_DEVICE_ADD("ppi8255_1", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(fk1_state, fk1_ppi_1_a_r))
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(fk1_state, fk1_ppi_1_a_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(fk1_state, fk1_ppi_1_b_r))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(fk1_state, fk1_ppi_1_b_w))
+ MCFG_I8255_IN_PORTC_CB(READ8(fk1_state, fk1_ppi_1_c_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(fk1_state, fk1_ppi_1_c_w))
+
+ MCFG_DEVICE_ADD("ppi8255_2", I8255, 0)
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(fk1_state, fk1_ppi_2_a_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(fk1_state, fk1_ppi_2_b_r))
+ MCFG_I8255_IN_PORTC_CB(READ8(fk1_state, fk1_ppi_2_c_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(fk1_state, fk1_ppi_2_c_w))
+
+ MCFG_DEVICE_ADD("ppi8255_3", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(fk1_state, fk1_ppi_3_a_r))
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(fk1_state, fk1_ppi_3_a_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(fk1_state, fk1_ppi_3_b_r))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(fk1_state, fk1_ppi_3_b_w))
+ MCFG_I8255_IN_PORTC_CB(READ8(fk1_state, fk1_ppi_3_c_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(fk1_state, fk1_ppi_3_c_w))
/* uart */
MCFG_DEVICE_ADD("uart", I8251, 0)
diff --git a/src/mess/drivers/ibmpcjr.c b/src/mess/drivers/ibmpcjr.c
index 0ebf6bad196..0a2d143562c 100644
--- a/src/mess/drivers/ibmpcjr.c
+++ b/src/mess/drivers/ibmpcjr.c
@@ -357,16 +357,6 @@ READ8_MEMBER(pcjr_state::pcjr_ppi_portc_r)
return data;
}
-I8255_INTERFACE( pcjr_ppi8255_interface )
-{
- DEVCB_CONSTANT(0xff),
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_DRIVER_MEMBER(pcjr_state,pcjr_ppi_portb_w),
- DEVCB_DRIVER_MEMBER(pcjr_state,pcjr_ppi_portc_r),
- DEVCB_NULL
-};
-
WRITE8_MEMBER(pcjr_state::pcjr_fdc_dor_w)
{
logerror("fdc: dor = %02x\n", data);
@@ -637,7 +627,10 @@ static MACHINE_CONFIG_START( ibmpcjr, pcjr_state)
MCFG_PIC8259_ADD( "pic8259", WRITELINE(pcjr_state, pic8259_set_int_line), VCC, NULL )
- MCFG_I8255_ADD( "ppi8255", pcjr_ppi8255_interface )
+ MCFG_DEVICE_ADD("ppi8255", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(CONSTANT(0xff))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(pcjr_state, pcjr_ppi_portb_w))
+ MCFG_I8255_IN_PORTC_CB(READ8(pcjr_state, pcjr_ppi_portc_r))
MCFG_INS8250_ADD( "ins8250", pcjr_com_interface, XTAL_1_8432MHz )
diff --git a/src/mess/drivers/iq151.c b/src/mess/drivers/iq151.c
index de91ea35994..6cde446a209 100644
--- a/src/mess/drivers/iq151.c
+++ b/src/mess/drivers/iq151.c
@@ -375,16 +375,6 @@ UINT32 iq151_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, c
return 0;
}
-static I8255_INTERFACE( iq151_ppi8255_intf )
-{
- DEVCB_DRIVER_MEMBER(iq151_state, keyboard_row_r),
- DEVCB_NULL,
- DEVCB_DRIVER_MEMBER(iq151_state, keyboard_column_r),
- DEVCB_NULL,
- DEVCB_DRIVER_MEMBER(iq151_state, ppi_portc_r),
- DEVCB_DRIVER_MEMBER(iq151_state, ppi_portc_w)
-};
-
static const cassette_interface iq151_cassette_interface =
{
cassette_default_formats,
@@ -434,7 +424,11 @@ static MACHINE_CONFIG_START( iq151, iq151_state )
MCFG_PIC8259_ADD("pic8259", WRITELINE(iq151_state, pic_set_int_line), VCC, NULL)
- MCFG_I8255_ADD("ppi8255", iq151_ppi8255_intf)
+ MCFG_DEVICE_ADD("ppi8255", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(iq151_state, keyboard_row_r))
+ MCFG_I8255_IN_PORTB_CB(READ8(iq151_state, keyboard_column_r))
+ MCFG_I8255_IN_PORTC_CB(READ8(iq151_state, ppi_portc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(iq151_state, ppi_portc_w))
MCFG_CASSETTE_ADD( "cassette", iq151_cassette_interface )
MCFG_TIMER_DRIVER_ADD_PERIODIC("cassette_timer", iq151_state, cassette_timer, attotime::from_hz(2000))
diff --git a/src/mess/drivers/irisha.c b/src/mess/drivers/irisha.c
index c4d4d0eb828..302cf56b87a 100644
--- a/src/mess/drivers/irisha.c
+++ b/src/mess/drivers/irisha.c
@@ -287,17 +287,6 @@ WRITE8_MEMBER(irisha_state::irisha_8255_portc_w)
update_speaker();
}
-static I8255A_INTERFACE( irisha_ppi8255_interface )
-{
- DEVCB_NULL,
- DEVCB_DRIVER_MEMBER(irisha_state, irisha_8255_porta_w),
- DEVCB_DRIVER_MEMBER(irisha_state, irisha_8255_portb_r),
- DEVCB_DRIVER_MEMBER(irisha_state, irisha_8255_portb_w),
- DEVCB_DRIVER_MEMBER(irisha_state, irisha_8255_portc_r),
- DEVCB_DRIVER_MEMBER(irisha_state, irisha_8255_portc_w),
-};
-
-
/*************************************************
i8259
@@ -427,7 +416,13 @@ static MACHINE_CONFIG_START( irisha, irisha_state )
MCFG_PIT8253_CLK2(XTAL_16MHz / 9)
MCFG_PIT8253_OUT2_HANDLER(WRITELINE(irisha_state, speaker_w))
- MCFG_I8255_ADD( "ppi8255", irisha_ppi8255_interface )
+ MCFG_DEVICE_ADD("ppi8255", I8255, 0)
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(irisha_state, irisha_8255_porta_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(irisha_state, irisha_8255_portb_r))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(irisha_state, irisha_8255_portb_w))
+ MCFG_I8255_IN_PORTC_CB(READ8(irisha_state, irisha_8255_portc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(irisha_state, irisha_8255_portc_w))
+
MCFG_PIC8259_ADD( "pic8259", WRITELINE(irisha_state,irisha_pic_set_int_line), VCC, NULL )
MACHINE_CONFIG_END
diff --git a/src/mess/drivers/isbc.c b/src/mess/drivers/isbc.c
index 2225230783b..85abbc9809f 100644
--- a/src/mess/drivers/isbc.c
+++ b/src/mess/drivers/isbc.c
@@ -159,16 +159,6 @@ WRITE_LINE_MEMBER( isbc_state::isbc86_tmr2_w )
m_uart8251->write_txc(state);
}
-static const i8255_interface isbc86_ppi_interface =
-{
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_NULL
-};
-
READ8_MEMBER( isbc_state::get_slave_ack )
{
if (offset == 7)
@@ -191,16 +181,6 @@ WRITE_LINE_MEMBER( isbc_state::write_centronics_ack )
m_pic_1->ir7_w(1);
}
-static const i8255_interface isbc286_ppi_interface =
-{
- DEVCB_NULL,
- DEVCB_DEVICE_MEMBER("cent_data_out", output_latch_device, write),
- DEVCB_DEVICE_MEMBER("cent_status_in", input_buffer_device, read),
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_DRIVER_MEMBER(isbc_state, ppi_c_w),
-};
-
WRITE8_MEMBER( isbc_state::ppi_c_w )
{
m_centronics->write_strobe(data & 1);
@@ -252,7 +232,7 @@ static MACHINE_CONFIG_START( isbc86, isbc_state )
MCFG_PIT8253_CLK2(XTAL_22_1184MHz/18)
MCFG_PIT8253_OUT2_HANDLER(WRITELINE(isbc_state, isbc86_tmr2_w))
- MCFG_I8255A_ADD("ppi", isbc86_ppi_interface)
+ MCFG_DEVICE_ADD("ppi", I8255A, 0)
MCFG_DEVICE_ADD("uart8251", I8251, 0)
MCFG_I8251_TXD_HANDLER(DEVWRITELINE("rs232", rs232_port_device, write_txd))
@@ -282,7 +262,7 @@ static MACHINE_CONFIG_START( rpc86, isbc_state )
MCFG_PIT8253_CLK2(XTAL_22_1184MHz/18)
MCFG_PIT8253_OUT2_HANDLER(WRITELINE(isbc_state, isbc86_tmr2_w))
- MCFG_I8255A_ADD("ppi", isbc86_ppi_interface)
+ MCFG_DEVICE_ADD("ppi", I8255A, 0)
MCFG_DEVICE_ADD("uart8251", I8251, 0)
MCFG_I8251_TXD_HANDLER(DEVWRITELINE("rs232", rs232_port_device, write_txd))
@@ -317,7 +297,10 @@ static MACHINE_CONFIG_START( isbc286, isbc_state )
MCFG_PIT8253_CLK2(XTAL_22_1184MHz/18)
MCFG_PIT8253_OUT2_HANDLER(WRITELINE(isbc_state, isbc286_tmr2_w))
- MCFG_I8255A_ADD("ppi", isbc286_ppi_interface)
+ MCFG_DEVICE_ADD("ppi", I8255A, 0)
+ MCFG_I8255_OUT_PORTA_CB(DEVWRITE8("cent_data_out", output_latch_device, write))
+ MCFG_I8255_IN_PORTB_CB(DEVREAD8("cent_status_in", input_buffer_device, read))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(isbc_state, ppi_c_w))
MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
MCFG_CENTRONICS_ACK_HANDLER(WRITELINE(isbc_state, write_centronics_ack))
diff --git a/src/mess/drivers/lviv.c b/src/mess/drivers/lviv.c
index 29a1ec5f2a8..1c5584fb976 100644
--- a/src/mess/drivers/lviv.c
+++ b/src/mess/drivers/lviv.c
@@ -433,10 +433,21 @@ static MACHINE_CONFIG_START( lviv, lviv_state )
MCFG_CPU_IO_MAP(io_map)
MCFG_QUANTUM_TIME(attotime::from_hz(60))
-
- MCFG_I8255_ADD( "ppi8255_0", lviv_ppi8255_interface_0 )
-
- MCFG_I8255_ADD( "ppi8255_1", lviv_ppi8255_interface_1 )
+ MCFG_DEVICE_ADD("ppi8255_0", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(lviv_state, lviv_ppi_0_porta_r))
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(lviv_state, lviv_ppi_0_porta_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(lviv_state, lviv_ppi_0_portb_r))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(lviv_state, lviv_ppi_0_portb_w))
+ MCFG_I8255_IN_PORTC_CB(READ8(lviv_state, lviv_ppi_0_portc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(lviv_state, lviv_ppi_0_portc_w))
+
+ MCFG_DEVICE_ADD("ppi8255_1", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(lviv_state, lviv_ppi_1_porta_r))
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(lviv_state, lviv_ppi_1_porta_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(lviv_state, lviv_ppi_1_portb_r))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(lviv_state, lviv_ppi_1_portb_w))
+ MCFG_I8255_IN_PORTC_CB(READ8(lviv_state, lviv_ppi_1_portc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(lviv_state, lviv_ppi_1_portc_w))
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(50)
@@ -451,7 +462,6 @@ static MACHINE_CONFIG_START( lviv, lviv_state )
MCFG_PALETTE_ADD("palette", sizeof (lviv_palette) / 3)
MCFG_PALETTE_INIT_OWNER(lviv_state, lviv)
-
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_WAVE_ADD(WAVE_TAG, "cassette")
diff --git a/src/mess/drivers/m20.c b/src/mess/drivers/m20.c
index 0a02bb230d6..7f675e38a90 100644
--- a/src/mess/drivers/m20.c
+++ b/src/mess/drivers/m20.c
@@ -847,16 +847,6 @@ static MC6845_INTERFACE( mc6845_intf )
NULL /* update address callback */
};
-static I8255A_INTERFACE( ppi_interface )
-{
- DEVCB_NULL, // port A read
- DEVCB_NULL, // port A write
- DEVCB_NULL, // port B read
- DEVCB_NULL, // port B write
- DEVCB_NULL, // port C read
- DEVCB_NULL // port C write
-};
-
WRITE_LINE_MEMBER(m20_state::kbd_rxrdy_int)
{
m_i8259->ir4_w(state);
@@ -934,7 +924,8 @@ static MACHINE_CONFIG_START( m20, m20_state )
MCFG_FLOPPY_DRIVE_ADD("fd1797:0", m20_floppies, "5dd", m20_state::floppy_formats)
MCFG_FLOPPY_DRIVE_ADD("fd1797:1", m20_floppies, "5dd", m20_state::floppy_formats)
MCFG_MC6845_ADD("crtc", MC6845, "screen", PIXEL_CLOCK/8, mc6845_intf) /* hand tuned to get ~50 fps */
- MCFG_I8255A_ADD("ppi8255", ppi_interface)
+
+ MCFG_DEVICE_ADD("ppi8255", I8255A, 0)
MCFG_DEVICE_ADD("i8251_1", I8251, 0)
MCFG_I8251_TXD_HANDLER(WRITELINE(m20_state, kbd_tx))
diff --git a/src/mess/drivers/m5.c b/src/mess/drivers/m5.c
index c7f3fb67a93..a07dce78415 100644
--- a/src/mess/drivers/m5.c
+++ b/src/mess/drivers/m5.c
@@ -451,7 +451,7 @@ static TMS9928A_INTERFACE(m5_tms9928a_interface)
//-------------------------------------------------
-// I8255_INTERFACE( ppi_intf )
+// I8255 Interface
//-------------------------------------------------
READ8_MEMBER( m5_state::ppi_pa_r )
@@ -537,17 +537,6 @@ WRITE8_MEMBER( m5_state::ppi_pc_w )
m_obfa = BIT(data, 7);
}
-static I8255_INTERFACE( ppi_intf )
-{
- DEVCB_DRIVER_MEMBER(m5_state, ppi_pa_r),
- DEVCB_DRIVER_MEMBER(m5_state, ppi_pa_w),
- DEVCB_NULL,
- DEVCB_DRIVER_MEMBER(m5_state, ppi_pb_w),
- DEVCB_DRIVER_MEMBER(m5_state, ppi_pc_r),
- DEVCB_DRIVER_MEMBER(m5_state, ppi_pc_w)
-};
-
-
//-------------------------------------------------
// upd765_interface fdc_intf
//-------------------------------------------------
@@ -646,7 +635,14 @@ static MACHINE_CONFIG_START( m5, m5_state )
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", CENTRONICS_TAG)
MCFG_CASSETTE_ADD("cassette", cassette_intf)
- MCFG_I8255_ADD(I8255A_TAG, ppi_intf)
+
+ MCFG_DEVICE_ADD(I8255A_TAG, I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(m5_state, ppi_pa_r))
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(m5_state, ppi_pa_w))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(m5_state, ppi_pb_w))
+ MCFG_I8255_IN_PORTC_CB(READ8(m5_state, ppi_pc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(m5_state, ppi_pc_w))
+
MCFG_UPD765A_ADD(UPD765_TAG, true, true)
MCFG_UPD765_INTRQ_CALLBACK(INPUTLINE(Z80_FD5_TAG, INPUT_LINE_IRQ0))
MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":0", m5_floppies, "525dd", m5_state::floppy_formats)
diff --git a/src/mess/drivers/mbc200.c b/src/mess/drivers/mbc200.c
index 950cf72d37e..3d29a1c33c5 100644
--- a/src/mess/drivers/mbc200.c
+++ b/src/mess/drivers/mbc200.c
@@ -187,17 +187,6 @@ UINT32 mbc200_state::screen_update_mbc200(screen_device &screen, bitmap_ind16 &b
return 0;
}
-static I8255_INTERFACE( mbc200_ppi8255_interface_1 )
-{
- DEVCB_NULL, /* port A read */
- DEVCB_NULL, /* port A write */
- DEVCB_NULL, /* port B read */
- DEVCB_NULL, /* port B write */
- DEVCB_NULL, /* port C read */
- DEVCB_NULL /* port C write */
-};
-
-
WRITE8_MEMBER( mbc200_state::porta_w )
{
machine().scheduler().synchronize(); // force resync
@@ -206,17 +195,6 @@ WRITE8_MEMBER( mbc200_state::porta_w )
m_hs_bit &= ~0x80;
}
-static I8255_INTERFACE( mbc200_ppi8255_interface_2 )
-{
- DEVCB_NULL, /* port A read */
- DEVCB_DRIVER_MEMBER(mbc200_state,porta_w), /* port A write */
- DEVCB_NULL, /* port B read */
- DEVCB_NULL, /* port B write */
- DEVCB_NULL, /* port C read */
- DEVCB_NULL /* port C write */
-};
-
-
static const wd17xx_interface mbc200_mb8876_interface =
{
DEVCB_NULL,
@@ -277,8 +255,12 @@ static MACHINE_CONFIG_START( mbc200, mbc200_state )
MCFG_MC6845_ADD("crtc", H46505, "screen", XTAL_8MHz / 4, mbc200_crtc) // HD46505SP
- MCFG_I8255_ADD("ppi8255_1", mbc200_ppi8255_interface_1) // i8255AC-5
- MCFG_I8255_ADD("ppi8255_2", mbc200_ppi8255_interface_2) // i8255AC-5
+
+ MCFG_DEVICE_ADD("ppi8255_1", I8255, 0)
+
+ MCFG_DEVICE_ADD("ppi8255_2", I8255, 0)
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(mbc200_state, porta_w))
+
MCFG_DEVICE_ADD("i8251_1", I8251, 0) // INS8251N
MCFG_DEVICE_ADD("i8251_2", I8251, 0) // INS8251A
MCFG_MB8876_ADD("fdc",mbc200_mb8876_interface) // MB8876A
diff --git a/src/mess/drivers/mbc55x.c b/src/mess/drivers/mbc55x.c
index 0d1ccfe1312..61c1574eeca 100644
--- a/src/mess/drivers/mbc55x.c
+++ b/src/mess/drivers/mbc55x.c
@@ -246,7 +246,6 @@ static MACHINE_CONFIG_START( mbc55x, mbc55x_state )
// MCFG_SCREEN_SIZE(650, 260)
// MCFG_SCREEN_VISIBLE_AREA(0, 639, 0, 249)
-
MCFG_RAM_ADD(RAM_TAG)
MCFG_RAM_DEFAULT_SIZE("128K")
MCFG_RAM_EXTRA_OPTIONS("128K,192K,256K,320K,384K,448K,512K,576K,640K")
@@ -269,7 +268,15 @@ static MACHINE_CONFIG_START( mbc55x, mbc55x_state )
MCFG_PIT8253_OUT2_HANDLER(WRITELINE(mbc55x_state, pit8253_t2))
MCFG_PIC8259_ADD( PIC8259_TAG, INPUTLINE(MAINCPU_TAG, INPUT_LINE_IRQ0), VCC, NULL )
- MCFG_I8255_ADD( PPI8255_TAG, mbc55x_ppi8255_interface )
+
+ MCFG_DEVICE_ADD(PPI8255_TAG, I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(mbc55x_state, mbc55x_ppi_porta_r))
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(mbc55x_state, mbc55x_ppi_porta_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(mbc55x_state, mbc55x_ppi_portb_r))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(mbc55x_state, mbc55x_ppi_portb_w))
+ MCFG_I8255_IN_PORTC_CB(READ8(mbc55x_state, mbc55x_ppi_portc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(mbc55x_state, mbc55x_ppi_portc_w))
+
MCFG_MC6845_ADD(VID_MC6845_NAME, MC6845, SCREEN_TAG, XTAL_14_31818MHz/8, mb55x_mc6845_intf)
/* Backing storage */
diff --git a/src/mess/drivers/mc1502.c b/src/mess/drivers/mc1502.c
index e04c63d6f38..85287eb9d0c 100644
--- a/src/mess/drivers/mc1502.c
+++ b/src/mess/drivers/mc1502.c
@@ -157,26 +157,6 @@ WRITE8_MEMBER(mc1502_state::mc1502_kppi_portc_w)
// DBG_LOG(2,"mc1502_kppi_portc_w",("( %02X -> %04X )\n", data, m_kbd.mask));
}
-I8255_INTERFACE( mc1502_ppi8255_interface_1 )
-{
- DEVCB_NULL,
- DEVCB_DEVICE_MEMBER("cent_data_out", output_latch_device, write),
- DEVCB_NULL,
- DEVCB_DRIVER_MEMBER(mc1502_state,mc1502_ppi_portb_w),
- DEVCB_DRIVER_MEMBER(mc1502_state,mc1502_ppi_portc_r),
- DEVCB_DRIVER_MEMBER(mc1502_state,mc1502_ppi_portc_w)
-};
-
-I8255_INTERFACE( mc1502_ppi8255_interface_2 )
-{
- DEVCB_DRIVER_MEMBER(mc1502_state,mc1502_kppi_porta_r),
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_DRIVER_MEMBER(mc1502_state,mc1502_kppi_portb_w),
- DEVCB_DEVICE_MEMBER("cent_status_in", input_buffer_device, read),
- DEVCB_DRIVER_MEMBER(mc1502_state,mc1502_kppi_portc_w)
-};
-
WRITE_LINE_MEMBER(mc1502_state::mc1502_i8251_syndet)
{
if (!BIT(m_ppi_portc,3))
@@ -285,8 +265,17 @@ static MACHINE_CONFIG_START( mc1502, mc1502_state )
MCFG_PIC8259_ADD( "pic8259", INPUTLINE("maincpu", 0), VCC, NULL )
- MCFG_I8255_ADD( "ppi8255n1", mc1502_ppi8255_interface_1 )
- MCFG_I8255_ADD( "ppi8255n2", mc1502_ppi8255_interface_2 )
+ MCFG_DEVICE_ADD("ppi8255n1", I8255, 0)
+ MCFG_I8255_OUT_PORTA_CB(DEVWRITE8("cent_data_out", output_latch_device, write))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(mc1502_state, mc1502_ppi_portb_w))
+ MCFG_I8255_IN_PORTC_CB(READ8(mc1502_state, mc1502_ppi_portc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(mc1502_state, mc1502_ppi_portc_w))
+
+ MCFG_DEVICE_ADD("ppi8255n2", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(mc1502_state, mc1502_kppi_porta_r))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(mc1502_state, mc1502_kppi_portb_w))
+ MCFG_I8255_IN_PORTC_CB(DEVREAD8("cent_status_in", input_buffer_device, read))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(mc1502_state, mc1502_kppi_portc_w))
MCFG_DEVICE_ADD( "upd8251", I8251, 0)
MCFG_I8251_TXD_HANDLER(DEVWRITELINE("irps", rs232_port_device, write_txd))
diff --git a/src/mess/drivers/mikro80.c b/src/mess/drivers/mikro80.c
index 68b600914b4..ab7a60e7df9 100644
--- a/src/mess/drivers/mikro80.c
+++ b/src/mess/drivers/mikro80.c
@@ -173,7 +173,10 @@ static MACHINE_CONFIG_START( mikro80, mikro80_state )
MCFG_CPU_PROGRAM_MAP(mikro80_mem)
MCFG_CPU_IO_MAP(mikro80_io)
- MCFG_I8255_ADD( "ppi8255", mikro80_ppi8255_interface )
+ MCFG_DEVICE_ADD("ppi8255", I8255, 0)
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(mikro80_state, mikro80_8255_porta_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(mikro80_state, mikro80_8255_portb_r))
+ MCFG_I8255_IN_PORTC_CB(READ8(mikro80_state, mikro80_8255_portc_r))
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
diff --git a/src/mess/drivers/mikrosha.c b/src/mess/drivers/mikrosha.c
index f28550e679a..3f7a6c83d41 100644
--- a/src/mess/drivers/mikrosha.c
+++ b/src/mess/drivers/mikrosha.c
@@ -181,11 +181,16 @@ static MACHINE_CONFIG_START( mikrosha, mikrosha_state )
MCFG_MACHINE_RESET_OVERRIDE(mikrosha_state, radio86 )
- MCFG_I8255_ADD( "ppi8255_1", mikrosha_ppi8255_interface_1 )
+ MCFG_DEVICE_ADD("ppi8255_1", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(radio86_state, radio86_8255_portb_r2))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(radio86_state, radio86_8255_porta_w2))
+ MCFG_I8255_IN_PORTC_CB(READ8(radio86_state, radio86_8255_portc_r2))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(radio86_state, radio86_8255_portc_w2))
- MCFG_I8255_ADD( "ppi8255_2", mikrosha_ppi8255_interface_2 )
+ MCFG_DEVICE_ADD("ppi8255_2", I8255, 0)
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(radio86_state, mikrosha_8255_font_page_w))
- MCFG_I8275_ADD ( "i8275", mikrosha_i8275_interface)
+ MCFG_I8275_ADD("i8275", mikrosha_i8275_interface)
MCFG_DEVICE_ADD("pit8253", PIT8253, 0)
MCFG_PIT8253_CLK0(0)
diff --git a/src/mess/drivers/mpf1.c b/src/mess/drivers/mpf1.c
index 365a3bfd153..1ab1c8d0ffe 100644
--- a/src/mess/drivers/mpf1.c
+++ b/src/mess/drivers/mpf1.c
@@ -264,16 +264,6 @@ WRITE8_MEMBER( mpf1_state::ppi_pc_w )
m_cassette->output( BIT(data, 7));
}
-static I8255A_INTERFACE( ppi8255_intf )
-{
- DEVCB_DRIVER_MEMBER(mpf1_state, ppi_pa_r),
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_DRIVER_MEMBER(mpf1_state, ppi_pb_w),
- DEVCB_NULL,
- DEVCB_DRIVER_MEMBER(mpf1_state, ppi_pc_w),
-};
-
/* Z80CTC Interface */
static Z80CTC_INTERFACE( mpf1_ctc_intf )
@@ -355,7 +345,12 @@ static MACHINE_CONFIG_START( mpf1, mpf1_state )
/* devices */
MCFG_Z80PIO_ADD(Z80PIO_TAG, XTAL_3_579545MHz/2, mpf1_pio_intf)
MCFG_Z80CTC_ADD(Z80CTC_TAG, XTAL_3_579545MHz/2, mpf1_ctc_intf)
- MCFG_I8255A_ADD(I8255A_TAG, ppi8255_intf)
+
+ MCFG_DEVICE_ADD(I8255A_TAG, I8255A, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(mpf1_state, ppi_pa_r))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(mpf1_state, ppi_pb_w))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(mpf1_state, ppi_pc_w))
+
MCFG_CASSETTE_ADD("cassette", mpf1_cassette_interface)
/* video hardware */
@@ -379,7 +374,12 @@ static MACHINE_CONFIG_START( mpf1b, mpf1_state )
/* devices */
MCFG_Z80PIO_ADD(Z80PIO_TAG, XTAL_3_579545MHz/2, mpf1_pio_intf)
MCFG_Z80CTC_ADD(Z80CTC_TAG, XTAL_3_579545MHz/2, mpf1_ctc_intf)
- MCFG_I8255A_ADD(I8255A_TAG, ppi8255_intf)
+
+ MCFG_DEVICE_ADD(I8255A_TAG, I8255A, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(mpf1_state, ppi_pa_r))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(mpf1_state, ppi_pb_w))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(mpf1_state, ppi_pc_w))
+
MCFG_CASSETTE_ADD("cassette", mpf1_cassette_interface)
/* video hardware */
@@ -409,7 +409,12 @@ static MACHINE_CONFIG_START( mpf1p, mpf1_state )
/* devices */
MCFG_Z80PIO_ADD(Z80PIO_TAG, 2500000, mpf1_pio_intf)
MCFG_Z80CTC_ADD(Z80CTC_TAG, 2500000, mpf1_ctc_intf)
- MCFG_I8255A_ADD(I8255A_TAG, ppi8255_intf)
+
+ MCFG_DEVICE_ADD(I8255A_TAG, I8255A, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(mpf1_state, ppi_pa_r))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(mpf1_state, ppi_pb_w))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(mpf1_state, ppi_pc_w))
+
MCFG_CASSETTE_ADD("cassette", mpf1_cassette_interface)
/* sound hardware */
diff --git a/src/mess/drivers/ms0515.c b/src/mess/drivers/ms0515.c
index 0317a9e7797..8d68ccf7526 100644
--- a/src/mess/drivers/ms0515.c
+++ b/src/mess/drivers/ms0515.c
@@ -237,15 +237,6 @@ WRITE8_MEMBER(ms0515_state::ms0515_portc_w)
{
m_sysreg = data;
}
-I8255A_INTERFACE( ms0515_ppi8255_interface_1 )
-{
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_DRIVER_MEMBER(ms0515_state,ms0515_portc_w)
-};
static MACHINE_CONFIG_START( ms0515, ms0515_state )
/* basic machine hardware */
@@ -269,8 +260,10 @@ static MACHINE_CONFIG_START( ms0515, ms0515_state )
MCFG_PALETTE_ADD("palette", 16)
MCFG_PALETTE_INIT_OWNER(ms0515_state, ms0515)
- MCFG_I8255_ADD( "ppi8255_1", ms0515_ppi8255_interface_1 )
- //MCFG_I8255_ADD( "ppi8255_2", ms0515_ppi8255_interface_2 )
+ MCFG_DEVICE_ADD("ppi8255_1", I8255, 0)
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(ms0515_state, ms0515_portc_w))
+
+ //MCFG_DEVICE_ADD("ppi8255_2", I8255, 0)
/* internal ram */
MCFG_RAM_ADD(RAM_TAG)
diff --git a/src/mess/drivers/msx.c b/src/mess/drivers/msx.c
index c224dca1c7e..a076d585c72 100644
--- a/src/mess/drivers/msx.c
+++ b/src/mess/drivers/msx.c
@@ -1093,7 +1093,10 @@ static MACHINE_CONFIG_START( msx, msx_state )
MCFG_MACHINE_START_OVERRIDE(msx_state, msx )
MCFG_MACHINE_RESET_OVERRIDE(msx_state, msx )
- MCFG_I8255_ADD( "ppi8255", msx_ppi8255_interface )
+ MCFG_DEVICE_ADD("ppi8255", I8255, 0)
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(msx_state, msx_ppi_port_a_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(msx_state, msx_ppi_port_b_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(msx_state, msx_ppi_port_c_w))
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
@@ -1178,7 +1181,10 @@ static MACHINE_CONFIG_START( msx2, msx_state )
MCFG_MACHINE_START_OVERRIDE(msx_state, msx2 )
MCFG_MACHINE_RESET_OVERRIDE(msx_state, msx2 )
- MCFG_I8255_ADD( "ppi8255", msx_ppi8255_interface )
+ MCFG_DEVICE_ADD("ppi8255", I8255, 0)
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(msx_state, msx_ppi_port_a_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(msx_state, msx_ppi_port_b_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(msx_state, msx_ppi_port_c_w))
/* video hardware */
MCFG_V9938_ADD("v9938", "screen", 0x20000)
@@ -1248,7 +1254,10 @@ static MACHINE_CONFIG_START( msx2p, msx_state )
MCFG_MACHINE_START_OVERRIDE(msx_state, msx2 )
MCFG_MACHINE_RESET_OVERRIDE(msx_state, msx2 )
- MCFG_I8255_ADD( "ppi8255", msx_ppi8255_interface )
+ MCFG_DEVICE_ADD("ppi8255", I8255, 0)
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(msx_state, msx_ppi_port_a_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(msx_state, msx_ppi_port_b_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(msx_state, msx_ppi_port_c_w))
/* video hardware */
MCFG_V9958_ADD("v9958", "screen", 0x20000)
diff --git a/src/mess/drivers/multi8.c b/src/mess/drivers/multi8.c
index f8cbaf630fb..28f5ec2b586 100644
--- a/src/mess/drivers/multi8.c
+++ b/src/mess/drivers/multi8.c
@@ -619,16 +619,6 @@ WRITE8_MEMBER( multi8_state::portc_w )
}
-static I8255_INTERFACE( ppi8255_intf_0 )
-{
- DEVCB_DRIVER_MEMBER(multi8_state, porta_r), /* Port A read */
- DEVCB_NULL, /* Port B read */
- DEVCB_NULL, /* Port C read */
- DEVCB_DRIVER_MEMBER(multi8_state, portb_w), /* Port B write */
- DEVCB_NULL, /* Port A write */
- DEVCB_DRIVER_MEMBER(multi8_state, portc_w) /* Port C write */
-};
-
WRITE8_MEMBER( multi8_state::ym2203_porta_w )
{
m_beeper->set_state((data & 0x08));
@@ -665,7 +655,6 @@ static MACHINE_CONFIG_START( multi8, multi8_state )
MCFG_CPU_PROGRAM_MAP(multi8_mem)
MCFG_CPU_IO_MAP(multi8_io)
-
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
@@ -690,7 +679,11 @@ static MACHINE_CONFIG_START( multi8, multi8_state )
/* Devices */
MCFG_TIMER_DRIVER_ADD_PERIODIC("keyboard_timer", multi8_state, keyboard_callback, attotime::from_hz(240/32))
MCFG_MC6845_ADD("crtc", H46505, "screen", XTAL_3_579545MHz/2, mc6845_intf) /* unknown clock, hand tuned to get ~60 fps */
- MCFG_I8255_ADD( "ppi8255_0", ppi8255_intf_0 )
+
+ MCFG_DEVICE_ADD("ppi8255_0", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(multi8_state, porta_r))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(multi8_state, portb_w))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(multi8_state, portc_w))
MACHINE_CONFIG_END
/* ROM definition */
diff --git a/src/mess/drivers/mycom.c b/src/mess/drivers/mycom.c
index e490cb7c91a..f73dab885df 100644
--- a/src/mess/drivers/mycom.c
+++ b/src/mess/drivers/mycom.c
@@ -439,36 +439,6 @@ WRITE8_MEMBER(mycom_state::mycom_rtc_w)
m_rtc->cs_w(BIT(data, 7));
}
-static I8255_INTERFACE( ppi8255_intf_0 )
-{
- DEVCB_NULL, /* Port A read */
- DEVCB_DRIVER_MEMBER(mycom_state, mycom_04_w), /* Port A write */
- DEVCB_DRIVER_MEMBER(mycom_state, mycom_05_r), /* Port B read */
- DEVCB_NULL, /* Port B write */
- DEVCB_DRIVER_MEMBER(mycom_state, mycom_06_r), /* Port C read */
- DEVCB_DRIVER_MEMBER(mycom_state, mycom_06_w) /* Port C write */
-};
-
-static I8255_INTERFACE( ppi8255_intf_1 )
-{
- DEVCB_DRIVER_MEMBER(mycom_state, mycom_08_r), /* Port A read */
- DEVCB_NULL, /* Port A write */
- DEVCB_NULL, /* Port B read */
- DEVCB_NULL, /* Port B write */
- DEVCB_NULL, /* Port C read */
- DEVCB_DRIVER_MEMBER(mycom_state, mycom_0a_w) /* Port C write */
-};
-
-static I8255_INTERFACE( ppi8255_intf_2 )
-{
- DEVCB_NULL, /* Port A read */
- DEVCB_NULL, /* Port A write */
- DEVCB_DEVICE_MEMBER("rtc", msm5832_device, data_r), /* Port B read */
- DEVCB_DEVICE_MEMBER("rtc", msm5832_device, data_w), /* Port B write */
- DEVCB_NULL, /* Port C read */
- DEVCB_DRIVER_MEMBER(mycom_state,mycom_rtc_w) /* Port C write */
-};
-
static const UINT8 mycom_keyval[] = { 0,
0x1b,0x1b,0x7c,0x7c,0x18,0x18,0x0f,0x0f,0x09,0x09,0x1c,0x1c,0x30,0x00,0x50,0x70,0x3b,0x2b,
0x00,0x00,0x31,0x21,0x51,0x71,0x41,0x61,0x5a,0x7a,0x17,0x17,0x2d,0x3d,0x40,0x60,0x3a,0x2a,
@@ -552,9 +522,20 @@ static MACHINE_CONFIG_START( mycom, mycom_state )
MCFG_CPU_PROGRAM_MAP(mycom_map)
MCFG_CPU_IO_MAP(mycom_io)
- MCFG_I8255_ADD( "ppi8255_0", ppi8255_intf_0 )
- MCFG_I8255_ADD( "ppi8255_1", ppi8255_intf_1 )
- MCFG_I8255_ADD( "ppi8255_2", ppi8255_intf_2 )
+ MCFG_DEVICE_ADD("ppi8255_0", I8255, 0)
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(mycom_state, mycom_04_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(mycom_state, mycom_05_r))
+ MCFG_I8255_IN_PORTC_CB(READ8(mycom_state, mycom_06_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(mycom_state, mycom_06_w))
+
+ MCFG_DEVICE_ADD("ppi8255_1", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(mycom_state, mycom_08_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(mycom_state, mycom_0a_w))
+
+ MCFG_DEVICE_ADD("ppi8255_2", I8255, 0)
+ MCFG_I8255_IN_PORTB_CB(DEVREAD8("rtc", msm5832_device, data_r))
+ MCFG_I8255_OUT_PORTB_CB(DEVWRITE8("rtc", msm5832_device, data_w))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(mycom_state, mycom_rtc_w))
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
diff --git a/src/mess/drivers/mz2000.c b/src/mess/drivers/mz2000.c
index dbb7265127c..d76e399131c 100644
--- a/src/mess/drivers/mz2000.c
+++ b/src/mess/drivers/mz2000.c
@@ -740,16 +740,6 @@ WRITE8_MEMBER(mz2000_state::mz2000_portc_w)
m_old_portc = data;
}
-static I8255_INTERFACE( ppi8255_intf )
-{
- DEVCB_DRIVER_MEMBER(mz2000_state,mz2000_porta_r), /* Port A read */
- DEVCB_DRIVER_MEMBER(mz2000_state,mz2000_porta_w), /* Port A write */
- DEVCB_DRIVER_MEMBER(mz2000_state,mz2000_portb_r), /* Port B read */
- DEVCB_DRIVER_MEMBER(mz2000_state,mz2000_portb_w), /* Port B write */
- DEVCB_DRIVER_MEMBER(mz2000_state,mz2000_portc_r), /* Port C read */
- DEVCB_DRIVER_MEMBER(mz2000_state,mz2000_portc_w) /* Port C write */
-};
-
WRITE8_MEMBER(mz2000_state::mz2000_pio1_porta_w)
{
m_tvram_enable = ((data & 0xc0) == 0xc0);
@@ -844,8 +834,14 @@ static MACHINE_CONFIG_START( mz2000, mz2000_state )
MCFG_CPU_PROGRAM_MAP(mz2000_map)
MCFG_CPU_IO_MAP(mz2000_io)
+ MCFG_DEVICE_ADD("i8255_0", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(mz2000_state, mz2000_porta_r))
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(mz2000_state, mz2000_porta_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(mz2000_state, mz2000_portb_r))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(mz2000_state, mz2000_portb_w))
+ MCFG_I8255_IN_PORTC_CB(READ8(mz2000_state, mz2000_portc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(mz2000_state, mz2000_portc_w))
- MCFG_I8255_ADD( "i8255_0", ppi8255_intf )
MCFG_Z80PIO_ADD( "z80pio_1", MASTER_CLOCK, mz2000_pio1_intf )
/* TODO: clocks aren't known */
diff --git a/src/mess/drivers/mz2500.c b/src/mess/drivers/mz2500.c
index 75669834be4..368274baf13 100644
--- a/src/mess/drivers/mz2500.c
+++ b/src/mess/drivers/mz2500.c
@@ -1939,16 +1939,6 @@ WRITE8_MEMBER(mz2500_state::mz2500_portc_w)
logerror("PPI PORTC W %02x\n",data & ~0x0f);
}
-static I8255_INTERFACE( ppi8255_intf )
-{
- DEVCB_DRIVER_MEMBER(mz2500_state,mz2500_porta_r), /* Port A read */
- DEVCB_DRIVER_MEMBER(mz2500_state,mz2500_porta_w), /* Port A write */
- DEVCB_DRIVER_MEMBER(mz2500_state,mz2500_portb_r), /* Port B read */
- DEVCB_DRIVER_MEMBER(mz2500_state,mz2500_portb_w), /* Port B write */
- DEVCB_DRIVER_MEMBER(mz2500_state,mz2500_portc_r), /* Port C read */
- DEVCB_DRIVER_MEMBER(mz2500_state,mz2500_portc_w) /* Port C write */
-};
-
WRITE8_MEMBER(mz2500_state::mz2500_pio1_porta_w)
{
// printf("%02x\n",data);
@@ -2121,10 +2111,17 @@ static MACHINE_CONFIG_START( mz2500, mz2500_state )
MCFG_CPU_IO_MAP(mz2500_io)
MCFG_CPU_VBLANK_INT_DRIVER("screen", mz2500_state, mz2500_vbl)
+ MCFG_DEVICE_ADD("i8255_0", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(mz2500_state, mz2500_porta_r))
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(mz2500_state, mz2500_porta_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(mz2500_state, mz2500_portb_r))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(mz2500_state, mz2500_portb_w))
+ MCFG_I8255_IN_PORTC_CB(READ8(mz2500_state, mz2500_portc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(mz2500_state, mz2500_portc_w))
- MCFG_I8255_ADD( "i8255_0", ppi8255_intf )
MCFG_Z80PIO_ADD( "z80pio_1", 6000000, mz2500_pio1_intf )
MCFG_Z80SIO0_ADD( "z80sio", 6000000, mz2500_sio_intf )
+
MCFG_DEVICE_ADD(RP5C15_TAG, RP5C15, XTAL_32_768kHz)
MCFG_RP5C15_OUT_ALARM_CB(WRITELINE(mz2500_state, mz2500_rtc_alarm_irq))
diff --git a/src/mess/drivers/mz3500.c b/src/mess/drivers/mz3500.c
index a9635cdd920..112e3f10cbb 100644
--- a/src/mess/drivers/mz3500.c
+++ b/src/mess/drivers/mz3500.c
@@ -648,17 +648,6 @@ WRITE8_MEMBER(mz3500_state::mz3500_pc_w)
}
-static I8255A_INTERFACE( i8255_intf )
-{
- DEVCB_NULL, /* Port A read */
- DEVCB_DRIVER_MEMBER(mz3500_state,mz3500_pa_w), /* Port A write */
- DEVCB_NULL, /* Port B read */
- DEVCB_DRIVER_MEMBER(mz3500_state,mz3500_pb_w), /* Port B write */
- DEVCB_NULL, /* Port C read */
- DEVCB_DRIVER_MEMBER(mz3500_state,mz3500_pc_w), /* Port C write */
-};
-
-
static INPUT_PORTS_START( mz3500 )
PORT_START("DSW")
PORT_DIPNAME( 0x01, 0x00, "SYSA" )
@@ -825,7 +814,10 @@ static MACHINE_CONFIG_START( mz3500, mz3500_state )
MCFG_QUANTUM_PERFECT_CPU("master")
- MCFG_I8255A_ADD( "i8255", i8255_intf )
+ MCFG_DEVICE_ADD("i8255", I8255A, 0)
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(mz3500_state, mz3500_pa_w))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(mz3500_state, mz3500_pb_w))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(mz3500_state, mz3500_pc_w))
MCFG_UPD765A_ADD("upd765a", true, true)
MCFG_UPD765_INTRQ_CALLBACK(INPUTLINE("master", INPUT_LINE_IRQ0))
diff --git a/src/mess/drivers/mz700.c b/src/mess/drivers/mz700.c
index 05248c74997..07f250348b2 100644
--- a/src/mess/drivers/mz700.c
+++ b/src/mess/drivers/mz700.c
@@ -365,7 +365,11 @@ static MACHINE_CONFIG_START( mz700, mz_state )
MCFG_PIT8253_CLK2(0)
MCFG_PIT8253_OUT2_HANDLER(WRITELINE(mz_state, pit_irq_2))
- MCFG_I8255_ADD("ppi8255", mz700_ppi8255_interface)
+ MCFG_DEVICE_ADD("ppi8255", I8255, 0)
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(mz_state, pio_port_a_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(mz_state, pio_port_b_r))
+ MCFG_I8255_IN_PORTC_CB(READ8(mz_state, pio_port_c_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(mz_state, pio_port_c_w))
MCFG_DEVICE_ADD("ls145", TTL74145, 0)
diff --git a/src/mess/drivers/mz80.c b/src/mess/drivers/mz80.c
index b6dc56a39dc..ccea2b63518 100644
--- a/src/mess/drivers/mz80.c
+++ b/src/mess/drivers/mz80.c
@@ -302,7 +302,11 @@ static MACHINE_CONFIG_START( mz80k, mz80_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
/* Devices */
- MCFG_I8255_ADD( "ppi8255", mz80k_8255_int )
+ MCFG_DEVICE_ADD("ppi8255", I8255, 0)
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(mz80_state, mz80k_8255_porta_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(mz80_state, mz80k_8255_portb_r))
+ MCFG_I8255_IN_PORTC_CB(READ8(mz80_state, mz80k_8255_portc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(mz80_state, mz80k_8255_portc_w))
MCFG_DEVICE_ADD("pit8253", PIT8253, 0)
MCFG_PIT8253_CLK0(XTAL_8MHz/4)
diff --git a/src/mess/drivers/orion.c b/src/mess/drivers/orion.c
index a4d40f9f10b..f86813762cc 100644
--- a/src/mess/drivers/orion.c
+++ b/src/mess/drivers/orion.c
@@ -99,9 +99,16 @@ static MACHINE_CONFIG_START( orion128, orion_state )
MCFG_MACHINE_START_OVERRIDE(orion_state, orion128 )
MCFG_MACHINE_RESET_OVERRIDE(orion_state, orion128 )
- MCFG_I8255A_ADD( "ppi8255_1", orion128_ppi8255_interface_1 )
+ MCFG_DEVICE_ADD("ppi8255_1", I8255A, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(orion_state, orion_romdisk_porta_r))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(orion_state, orion_romdisk_portb_w))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(orion_state, orion_romdisk_portc_w))
- MCFG_I8255A_ADD( "ppi8255_2", radio86_ppi8255_interface_1 )
+ MCFG_DEVICE_ADD("ppi8255_2", I8255A, 0)
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(radio86_state, radio86_8255_porta_w2))
+ MCFG_I8255_IN_PORTB_CB(READ8(radio86_state, radio86_8255_portb_r2))
+ MCFG_I8255_IN_PORTC_CB(READ8(radio86_state, radio86_8255_portc_r2))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(radio86_state, radio86_8255_portc_w2))
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@@ -144,7 +151,11 @@ MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( orion128ms, orion128 )
MCFG_DEVICE_REMOVE("ppi8255_2")
- MCFG_I8255A_ADD( "ppi8255_2", rk7007_ppi8255_interface )
+ MCFG_DEVICE_ADD("ppi8255_2", I8255A, 0)
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(radio86_state, radio86_8255_porta_w2))
+ MCFG_I8255_IN_PORTB_CB(READ8(radio86_state, radio86_8255_portb_r2))
+ MCFG_I8255_IN_PORTC_CB(READ8(radio86_state, rk7007_8255_portc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(radio86_state, radio86_8255_portc_w2))
MACHINE_CONFIG_END
static const ay8910_interface orionz80_ay_interface =
@@ -163,9 +174,16 @@ static MACHINE_CONFIG_START( orionz80, orion_state )
MCFG_MACHINE_START_OVERRIDE(orion_state, orionz80 )
MCFG_MACHINE_RESET_OVERRIDE(orion_state, orionz80 )
- MCFG_I8255A_ADD( "ppi8255_1", orion128_ppi8255_interface_1 )
+ MCFG_DEVICE_ADD("ppi8255_1", I8255A, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(orion_state, orion_romdisk_porta_r))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(orion_state, orion_romdisk_portb_w))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(orion_state, orion_romdisk_portc_w))
- MCFG_I8255A_ADD( "ppi8255_2", radio86_ppi8255_interface_1 )
+ MCFG_DEVICE_ADD("ppi8255_2", I8255A, 0)
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(radio86_state, radio86_8255_porta_w2))
+ MCFG_I8255_IN_PORTB_CB(READ8(radio86_state, radio86_8255_portb_r2))
+ MCFG_I8255_IN_PORTC_CB(READ8(radio86_state, radio86_8255_portc_r2))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(radio86_state, radio86_8255_portc_w2))
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@@ -216,7 +234,11 @@ MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( orionz80ms, orionz80 )
MCFG_DEVICE_REMOVE("ppi8255_2")
- MCFG_I8255A_ADD( "ppi8255_2", rk7007_ppi8255_interface )
+ MCFG_DEVICE_ADD("ppi8255_2", I8255A, 0)
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(radio86_state, radio86_8255_porta_w2))
+ MCFG_I8255_IN_PORTB_CB(READ8(radio86_state, radio86_8255_portb_r2))
+ MCFG_I8255_IN_PORTC_CB(READ8(radio86_state, rk7007_8255_portc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(radio86_state, radio86_8255_portc_w2))
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( orionpro, orion_state )
@@ -226,9 +248,16 @@ static MACHINE_CONFIG_START( orionpro, orion_state )
MCFG_MACHINE_RESET_OVERRIDE(orion_state, orionpro )
- MCFG_I8255A_ADD( "ppi8255_1", orion128_ppi8255_interface_1 )
+ MCFG_DEVICE_ADD("ppi8255_1", I8255A, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(orion_state, orion_romdisk_porta_r))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(orion_state, orion_romdisk_portb_w))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(orion_state, orion_romdisk_portc_w))
- MCFG_I8255A_ADD( "ppi8255_2", radio86_ppi8255_interface_1 )
+ MCFG_DEVICE_ADD("ppi8255_2", I8255A, 0)
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(radio86_state, radio86_8255_porta_w2))
+ MCFG_I8255_IN_PORTB_CB(READ8(radio86_state, radio86_8255_portb_r2))
+ MCFG_I8255_IN_PORTC_CB(READ8(radio86_state, radio86_8255_portc_r2))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(radio86_state, radio86_8255_portc_w2))
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
diff --git a/src/mess/drivers/partner.c b/src/mess/drivers/partner.c
index 2fbeedc7fde..0380fb3c06b 100644
--- a/src/mess/drivers/partner.c
+++ b/src/mess/drivers/partner.c
@@ -196,9 +196,13 @@ static MACHINE_CONFIG_START( partner, partner_state )
MCFG_MACHINE_START_OVERRIDE(partner_state, partner )
MCFG_MACHINE_RESET_OVERRIDE(partner_state, partner )
- MCFG_I8255_ADD( "ppi8255_1", radio86_ppi8255_interface_1 )
+ MCFG_DEVICE_ADD("ppi8255_1", I8255, 0)
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(radio86_state, radio86_8255_porta_w2))
+ MCFG_I8255_IN_PORTB_CB(READ8(radio86_state, radio86_8255_portb_r2))
+ MCFG_I8255_IN_PORTC_CB(READ8(radio86_state, radio86_8255_portc_r2))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(radio86_state, radio86_8255_portc_w2))
- MCFG_I8275_ADD ( "i8275", partner_i8275_interface)
+ MCFG_I8275_ADD("i8275", partner_i8275_interface)
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_UPDATE_DEVICE("i8275", i8275_device, screen_update)
diff --git a/src/mess/drivers/pasogo.c b/src/mess/drivers/pasogo.c
index f7bce7bbcc0..627df08d59a 100644
--- a/src/mess/drivers/pasogo.c
+++ b/src/mess/drivers/pasogo.c
@@ -935,17 +935,6 @@ WRITE8_MEMBER( pasogo_state::ppi_portb_w )
}
-static I8255A_INTERFACE( ppi8255_interface )
-{
- DEVCB_DRIVER_MEMBER(pasogo_state, ppi_porta_r),
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_DRIVER_MEMBER(pasogo_state, ppi_portb_w),
- DEVCB_DRIVER_MEMBER(pasogo_state, ppi_portc_r),
- DEVCB_NULL
-};
-
-
WRITE_LINE_MEMBER(pasogo_state::pasogo_pic8259_set_int_line)
{
m_maincpu->set_input_line(0, state ? HOLD_LINE : CLEAR_LINE);
@@ -971,7 +960,10 @@ static MACHINE_CONFIG_START( pasogo, pasogo_state )
MCFG_I8237_ADD( "dma8237", XTAL_14_31818MHz/3, dma8237_config )
- MCFG_I8255_ADD( "ppi8255", ppi8255_interface )
+ MCFG_DEVICE_ADD("ppi8255", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(pasogo_state, ppi_porta_r))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(pasogo_state, ppi_portb_w))
+ MCFG_I8255_IN_PORTC_CB(READ8(pasogo_state, ppi_portc_r))
MCFG_SCREEN_ADD("screen", LCD)
MCFG_SCREEN_REFRESH_RATE(60)
diff --git a/src/mess/drivers/pasopia.c b/src/mess/drivers/pasopia.c
index 8939c975f81..82fbd7522b2 100644
--- a/src/mess/drivers/pasopia.c
+++ b/src/mess/drivers/pasopia.c
@@ -176,16 +176,6 @@ READ8_MEMBER( pasopia_state::vram_latch_r )
return m_p_vram[m_vram_addr];
}
-static I8255A_INTERFACE( ppi8255_intf_0 )
-{
- DEVCB_NULL, /* Port A read */
- DEVCB_DRIVER_MEMBER(pasopia_state, vram_addr_lo_w), /* Port A write */
- DEVCB_NULL, /* Port B read */
- DEVCB_DRIVER_MEMBER(pasopia_state, vram_latch_w), /* Port B write */
- DEVCB_DRIVER_MEMBER(pasopia_state, vram_latch_r), /* Port C read */
- DEVCB_NULL /* Port C write */
-};
-
READ8_MEMBER( pasopia_state::portb_1_r )
{
/*
@@ -224,31 +214,11 @@ WRITE8_MEMBER( pasopia_state::screen_mode_w )
printf("Screen Mode=%02x\n",data);
}
-static I8255A_INTERFACE( ppi8255_intf_1 )
-{
- DEVCB_NULL, /* Port A read */
- DEVCB_DRIVER_MEMBER(pasopia_state, screen_mode_w), /* Port A write */
- DEVCB_DRIVER_MEMBER(pasopia_state, portb_1_r), /* Port B read */
- DEVCB_NULL, /* Port B write */
- DEVCB_NULL, /* Port C read */
- DEVCB_DRIVER_MEMBER(pasopia_state, vram_addr_hi_w) /* Port C write */
-};
-
READ8_MEMBER( pasopia_state::rombank_r )
{
return (m_ram_bank) ? 4 : 0;
}
-static I8255A_INTERFACE( ppi8255_intf_2 )
-{
- DEVCB_NULL, /* Port A read */
- DEVCB_NULL, /* Port A write */
- DEVCB_NULL, /* Port B read */
- DEVCB_NULL, /* Port B write */
- DEVCB_DRIVER_MEMBER(pasopia_state, rombank_r), /* Port C read */
- DEVCB_NULL /* Port C write */
-};
-
static Z80CTC_INTERFACE( ctc_intf )
{
DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_IRQ0), // interrupt handler
@@ -375,9 +345,20 @@ static MACHINE_CONFIG_START( pasopia, pasopia_state )
/* Devices */
MCFG_MC6845_ADD("crtc", H46505, "screen", XTAL_4MHz/4, mc6845_intf) /* unknown clock, hand tuned to get ~60 fps */
- MCFG_I8255A_ADD( "ppi8255_0", ppi8255_intf_0 )
- MCFG_I8255A_ADD( "ppi8255_1", ppi8255_intf_1 )
- MCFG_I8255A_ADD( "ppi8255_2", ppi8255_intf_2 )
+
+ MCFG_DEVICE_ADD("ppi8255_0", I8255A, 0)
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(pasopia_state, vram_addr_lo_w))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(pasopia_state, vram_latch_w))
+ MCFG_I8255_IN_PORTC_CB(READ8(pasopia_state, vram_latch_r))
+
+ MCFG_DEVICE_ADD("ppi8255_1", I8255A, 0)
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(pasopia_state, screen_mode_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(pasopia_state, portb_1_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(pasopia_state, vram_addr_hi_w))
+
+ MCFG_DEVICE_ADD("ppi8255_2", I8255A, 0)
+ MCFG_I8255_IN_PORTC_CB(READ8(pasopia_state, rombank_r))
+
MCFG_Z80CTC_ADD( "z80ctc", XTAL_4MHz, ctc_intf )
MCFG_Z80PIO_ADD( "z80pio", XTAL_4MHz, z80pio_intf )
MACHINE_CONFIG_END
diff --git a/src/mess/drivers/pasopia7.c b/src/mess/drivers/pasopia7.c
index d5bcd3b90d5..169009d38e0 100644
--- a/src/mess/drivers/pasopia7.c
+++ b/src/mess/drivers/pasopia7.c
@@ -912,36 +912,6 @@ READ8_MEMBER( pasopia7_state::nmi_portb_r )
return 0xf9 | m_nmi_trap | m_nmi_reset;
}
-static I8255_INTERFACE( ppi8255_intf_0 )
-{
- DEVCB_DRIVER_MEMBER(pasopia7_state, unk_r), /* Port A read */
- DEVCB_DRIVER_MEMBER(pasopia7_state, screen_mode_w), /* Port A write */
- DEVCB_DRIVER_MEMBER(pasopia7_state, crtc_portb_r), /* Port B read */
- DEVCB_NULL, /* Port B write */
- DEVCB_NULL, /* Port C read */
- DEVCB_NULL /* Port C write */
-};
-
-static I8255_INTERFACE( ppi8255_intf_1 )
-{
- DEVCB_NULL, /* Port A read */
- DEVCB_DRIVER_MEMBER(pasopia7_state, plane_reg_w), /* Port A write */
- DEVCB_NULL, /* Port B read */
- DEVCB_DRIVER_MEMBER(pasopia7_state, video_attr_w), /* Port B write */
- DEVCB_NULL, /* Port C read */
- DEVCB_DRIVER_MEMBER(pasopia7_state, video_misc_w) /* Port C write */
-};
-
-static I8255_INTERFACE( ppi8255_intf_2 )
-{
- DEVCB_DRIVER_MEMBER(pasopia7_state, nmi_porta_r), /* Port A read */
- DEVCB_DRIVER_MEMBER(pasopia7_state, nmi_mask_w), /* Port A write */
- DEVCB_DRIVER_MEMBER(pasopia7_state, nmi_portb_r), /* Port B read */
- DEVCB_NULL, /* Port B write */
- DEVCB_DRIVER_MEMBER(pasopia7_state, nmi_reg_r), /* Port C read */
- DEVCB_DRIVER_MEMBER(pasopia7_state, nmi_reg_w) /* Port C write */
-};
-
void pasopia7_state::machine_reset()
{
UINT8 *bios = memregion("maincpu")->base();
@@ -1002,9 +972,24 @@ static MACHINE_CONFIG_START( p7_base, pasopia7_state )
/* Devices */
MCFG_Z80CTC_ADD( "z80ctc", XTAL_4MHz, z80ctc_intf )
MCFG_Z80PIO_ADD( "z80pio", XTAL_4MHz, z80pio_intf )
- MCFG_I8255_ADD( "ppi8255_0", ppi8255_intf_0 )
- MCFG_I8255_ADD( "ppi8255_1", ppi8255_intf_1 )
- MCFG_I8255_ADD( "ppi8255_2", ppi8255_intf_2 )
+
+ MCFG_DEVICE_ADD("ppi8255_0", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(pasopia7_state, unk_r))
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(pasopia7_state, screen_mode_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(pasopia7_state, crtc_portb_r))
+
+ MCFG_DEVICE_ADD("ppi8255_1", I8255, 0)
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(pasopia7_state, plane_reg_w))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(pasopia7_state, video_attr_w))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(pasopia7_state, video_misc_w))
+
+ MCFG_DEVICE_ADD("ppi8255_2", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(pasopia7_state, nmi_porta_r))
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(pasopia7_state, nmi_mask_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(pasopia7_state, nmi_portb_r))
+ MCFG_I8255_IN_PORTC_CB(READ8(pasopia7_state, nmi_reg_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(pasopia7_state, nmi_reg_w))
+
MCFG_UPD765A_ADD("fdc", true, true)
MCFG_FLOPPY_DRIVE_ADD("fdc:0", pasopia7_floppies, "525hd", floppy_image_device::default_floppy_formats)
MCFG_FLOPPY_DRIVE_ADD("fdc:1", pasopia7_floppies, "525hd", floppy_image_device::default_floppy_formats)
diff --git a/src/mess/drivers/pc100.c b/src/mess/drivers/pc100.c
index 164d69a6df1..5227d99152d 100644
--- a/src/mess/drivers/pc100.c
+++ b/src/mess/drivers/pc100.c
@@ -394,17 +394,6 @@ READ8_MEMBER( pc100_state::rtc_portc_r )
return m_rtc_portc;
}
-static I8255A_INTERFACE( pc100_ppi8255_interface_1 )
-{
- DEVCB_NULL,
- DEVCB_DRIVER_MEMBER(pc100_state, rtc_porta_w),
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_DRIVER_MEMBER(pc100_state, rtc_portc_r),
- DEVCB_DRIVER_MEMBER(pc100_state, rtc_portc_w)
-};
-
-
WRITE8_MEMBER( pc100_state::lower_mask_w )
{
m_crtc.mask = (m_crtc.mask & 0xff00) | data;
@@ -421,16 +410,6 @@ WRITE8_MEMBER( pc100_state::crtc_bank_w )
m_bank_r = (data & 0x30) >> 4;
}
-static I8255A_INTERFACE( pc100_ppi8255_interface_2 )
-{
- DEVCB_NULL,
- DEVCB_DRIVER_MEMBER(pc100_state, lower_mask_w),
- DEVCB_NULL,
- DEVCB_DRIVER_MEMBER(pc100_state, upper_mask_w),
- DEVCB_NULL,
- DEVCB_DRIVER_MEMBER(pc100_state, crtc_bank_w)
-};
-
IRQ_CALLBACK_MEMBER(pc100_state::pc100_irq_callback)
{
return device.machine().device<pic8259_device>( "pic8259" )->acknowledge();
@@ -514,9 +493,19 @@ static MACHINE_CONFIG_START( pc100, pc100_state )
MCFG_TIMER_DRIVER_ADD_PERIODIC("100hz", pc100_state, pc100_100hz_irq, attotime::from_hz(MASTER_CLOCK/100))
MCFG_TIMER_DRIVER_ADD_PERIODIC("50hz", pc100_state, pc100_50hz_irq, attotime::from_hz(MASTER_CLOCK/50))
MCFG_TIMER_DRIVER_ADD_PERIODIC("10hz", pc100_state, pc100_10hz_irq, attotime::from_hz(MASTER_CLOCK/10))
- MCFG_I8255_ADD( "ppi8255_1", pc100_ppi8255_interface_1 )
- MCFG_I8255_ADD( "ppi8255_2", pc100_ppi8255_interface_2 )
+
+ MCFG_DEVICE_ADD("ppi8255_1", I8255, 0)
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(pc100_state, rtc_porta_w))
+ MCFG_I8255_IN_PORTC_CB(READ8(pc100_state, rtc_portc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(pc100_state, rtc_portc_w))
+
+ MCFG_DEVICE_ADD("ppi8255_2", I8255, 0)
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(pc100_state, lower_mask_w))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(pc100_state, upper_mask_w))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(pc100_state, crtc_bank_w))
+
MCFG_PIC8259_ADD( "pic8259", WRITELINE(pc100_state, pc100_set_int_line), GND, NULL )
+
MCFG_UPD765A_ADD("upd765", true, true)
MCFG_DEVICE_ADD("rtc", MSM58321, XTAL_32_768kHz)
diff --git a/src/mess/drivers/pc6001.c b/src/mess/drivers/pc6001.c
index 6537f161e8b..21549a89541 100644
--- a/src/mess/drivers/pc6001.c
+++ b/src/mess/drivers/pc6001.c
@@ -1910,16 +1910,6 @@ READ8_MEMBER(pc6001_state::pc6001_8255_portc_r)
-static I8255_INTERFACE( pc6001_ppi8255_interface )
-{
- DEVCB_DRIVER_MEMBER(pc6001_state,pc6001_8255_porta_r),
- DEVCB_DRIVER_MEMBER(pc6001_state,pc6001_8255_porta_w),
- DEVCB_DRIVER_MEMBER(pc6001_state,pc6001_8255_portb_r),
- DEVCB_DRIVER_MEMBER(pc6001_state,pc6001_8255_portb_w),
- DEVCB_DRIVER_MEMBER(pc6001_state,pc6001_8255_portc_r),
- DEVCB_DRIVER_MEMBER(pc6001_state,pc6001_8255_portc_w)
-};
-
static const ay8910_interface pc6001_ay_interface =
{
AY8910_LEGACY_OUTPUT,
@@ -2332,7 +2322,14 @@ static MACHINE_CONFIG_START( pc6001, pc6001_state )
MCFG_PALETTE_ADD("palette", 16+4)
MCFG_PALETTE_INIT_OWNER(pc6001_state, pc6001)
- MCFG_I8255_ADD( "ppi8255", pc6001_ppi8255_interface )
+ MCFG_DEVICE_ADD("ppi8255", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(pc6001_state, pc6001_8255_porta_r))
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(pc6001_state, pc6001_8255_porta_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(pc6001_state, pc6001_8255_portb_r))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(pc6001_state, pc6001_8255_portb_w))
+ MCFG_I8255_IN_PORTC_CB(READ8(pc6001_state, pc6001_8255_portc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(pc6001_state, pc6001_8255_portc_w))
+
/* uart */
MCFG_DEVICE_ADD("uart", I8251, 0)
diff --git a/src/mess/drivers/pc8001.c b/src/mess/drivers/pc8001.c
index 378e87679d3..32cf37d694a 100644
--- a/src/mess/drivers/pc8001.c
+++ b/src/mess/drivers/pc8001.c
@@ -399,18 +399,6 @@ UPD3301_DRAW_CHARACTER_MEMBER( pc8001_state::pc8001_display_pixels )
}
}
-/* 8255 Interface */
-
-static I8255A_INTERFACE( ppi_intf )
-{
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_NULL
-};
-
/* 8257 Interface */
WRITE_LINE_MEMBER( pc8001_state::hrq_w )
@@ -534,7 +522,7 @@ static MACHINE_CONFIG_START( pc8001, pc8001_state )
/* devices */
MCFG_DEVICE_ADD(I8251_TAG, I8251, 0)
- MCFG_I8255A_ADD(I8255A_TAG, ppi_intf)
+ MCFG_DEVICE_ADD(I8255A_TAG, I8255A, 0)
MCFG_DEVICE_ADD(I8257_TAG, I8257, 4000000)
MCFG_I8257_OUT_HRQ_CB(WRITELINE(pc8001_state, hrq_w))
@@ -590,7 +578,7 @@ static MACHINE_CONFIG_START( pc8001mk2, pc8001mk2_state )
/* devices */
MCFG_DEVICE_ADD(I8251_TAG, I8251, 0)
- MCFG_I8255A_ADD(I8255A_TAG, ppi_intf)
+ MCFG_DEVICE_ADD(I8255A_TAG, I8255A, 0)
MCFG_DEVICE_ADD(I8257_TAG, I8257, 4000000)
MCFG_I8257_OUT_HRQ_CB(WRITELINE(pc8001_state, hrq_w))
diff --git a/src/mess/drivers/pc8401a.c b/src/mess/drivers/pc8401a.c
index 15799c5ff12..3a3c1663be3 100644
--- a/src/mess/drivers/pc8401a.c
+++ b/src/mess/drivers/pc8401a.c
@@ -559,16 +559,6 @@ WRITE8_MEMBER( pc8401a_state::ppi_pc_w )
*/
}
-static I8255A_INTERFACE( ppi_intf )
-{
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_DRIVER_MEMBER(pc8401a_state, ppi_pc_r),
- DEVCB_DRIVER_MEMBER(pc8401a_state, ppi_pc_w)
-};
-
/* Machine Drivers */
static MACHINE_CONFIG_START( pc8401a, pc8401a_state )
@@ -582,7 +572,10 @@ static MACHINE_CONFIG_START( pc8401a, pc8401a_state )
/* devices */
MCFG_UPD1990A_ADD(UPD1990A_TAG, XTAL_32_768kHz, NULL, NULL)
- MCFG_I8255A_ADD(I8255A_TAG, ppi_intf)
+
+ MCFG_DEVICE_ADD(I8255A_TAG, I8255A, 0)
+ MCFG_I8255_IN_PORTC_CB(READ8(pc8401a_state, ppi_pc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(pc8401a_state, ppi_pc_w))
MCFG_DEVICE_ADD(I8251_TAG, I8251, 0)
MCFG_I8251_TXD_HANDLER(DEVWRITELINE(RS232_TAG, rs232_port_device, write_txd))
@@ -623,7 +616,10 @@ static MACHINE_CONFIG_START( pc8500, pc8500_state )
/* devices */
MCFG_UPD1990A_ADD(UPD1990A_TAG, XTAL_32_768kHz, NULL, NULL)
- MCFG_I8255A_ADD(I8255A_TAG, ppi_intf)
+
+ MCFG_DEVICE_ADD(I8255A_TAG, I8255A, 0)
+ MCFG_I8255_IN_PORTC_CB(READ8(pc8401a_state, ppi_pc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(pc8401a_state, ppi_pc_w))
MCFG_DEVICE_ADD(I8251_TAG, I8251, 0)
MCFG_I8251_TXD_HANDLER(DEVWRITELINE(RS232_TAG, rs232_port_device, write_txd))
diff --git a/src/mess/drivers/pc8801.c b/src/mess/drivers/pc8801.c
index 1bcd9d3b7f9..985abe4f43d 100644
--- a/src/mess/drivers/pc8801.c
+++ b/src/mess/drivers/pc8801.c
@@ -1849,16 +1849,6 @@ WRITE8_MEMBER(pc8801_state::cpu_8255_c_w)
}
-static I8255A_INTERFACE( master_fdd_intf )
-{
- DEVCB_DEVICE_MEMBER("d8255_slave", i8255_device, pb_r), // Port A read
- DEVCB_NULL, // Port A write
- DEVCB_DEVICE_MEMBER("d8255_slave", i8255_device, pa_r), // Port B read
- DEVCB_NULL, // Port B write
- DEVCB_DRIVER_MEMBER(pc8801_state,cpu_8255_c_r), // Port C read
- DEVCB_DRIVER_MEMBER(pc8801_state,cpu_8255_c_w) // Port C write
-};
-
READ8_MEMBER(pc8801_state::fdc_8255_c_r)
{
// machine().scheduler().synchronize(); // force resync
@@ -1873,17 +1863,6 @@ WRITE8_MEMBER(pc8801_state::fdc_8255_c_w)
m_i8255_1_pc = data;
}
-static I8255A_INTERFACE( slave_fdd_intf )
-{
- DEVCB_DEVICE_MEMBER("d8255_master", i8255_device, pb_r), // Port A read
- DEVCB_NULL, // Port A write
- DEVCB_DEVICE_MEMBER("d8255_master", i8255_device, pa_r), // Port B read
- DEVCB_NULL, // Port B write
- DEVCB_DRIVER_MEMBER(pc8801_state,fdc_8255_c_r), // Port C read
- DEVCB_DRIVER_MEMBER(pc8801_state,fdc_8255_c_w) // Port C write
-};
-
-
static ADDRESS_MAP_START( pc8801fdc_mem, AS_PROGRAM, 8, pc8801_state )
AM_RANGE(0x0000, 0x1fff) AM_ROM
AM_RANGE(0x4000, 0x7fff) AM_RAM
@@ -2639,9 +2618,17 @@ static MACHINE_CONFIG_START( pc8801, pc8801_state )
//MCFG_QUANTUM_TIME(attotime::from_hz(300000))
MCFG_QUANTUM_PERFECT_CPU("maincpu")
-
- MCFG_I8255_ADD( "d8255_master", master_fdd_intf )
- MCFG_I8255_ADD( "d8255_slave", slave_fdd_intf )
+ MCFG_DEVICE_ADD("d8255_master", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(DEVREAD8("d8255_slave", i8255_device, pb_r))
+ MCFG_I8255_IN_PORTB_CB(DEVREAD8("d8255_slave", i8255_device, pa_r))
+ MCFG_I8255_IN_PORTC_CB(READ8(pc8801_state, cpu_8255_c_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(pc8801_state, cpu_8255_c_w))
+
+ MCFG_DEVICE_ADD("d8255_slave", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(DEVREAD8("d8255_master", i8255_device, pb_r))
+ MCFG_I8255_IN_PORTB_CB(DEVREAD8("d8255_master", i8255_device, pa_r))
+ MCFG_I8255_IN_PORTC_CB(READ8(pc8801_state, fdc_8255_c_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(pc8801_state, fdc_8255_c_w))
MCFG_UPD765A_ADD("upd765", true, true)
MCFG_UPD765_INTRQ_CALLBACK(INPUTLINE("fdccpu", INPUT_LINE_IRQ0))
diff --git a/src/mess/drivers/pc88va.c b/src/mess/drivers/pc88va.c
index 79c93e8ea9d..65217c83cbd 100644
--- a/src/mess/drivers/pc88va.c
+++ b/src/mess/drivers/pc88va.c
@@ -1580,16 +1580,6 @@ WRITE8_MEMBER(pc88va_state::cpu_8255_c_w)
m_i8255_0_pc = data;
}
-static I8255A_INTERFACE( master_fdd_intf )
-{
- DEVCB_DEVICE_MEMBER("d8255_2s", i8255_device, pb_r), // Port A read
- DEVCB_NULL, // Port A write
- DEVCB_DEVICE_MEMBER("d8255_2s", i8255_device, pa_r), // Port B read
- DEVCB_NULL, // Port B write
- DEVCB_DRIVER_MEMBER(pc88va_state,cpu_8255_c_r), // Port C read
- DEVCB_DRIVER_MEMBER(pc88va_state,cpu_8255_c_w) // Port C write
-};
-
READ8_MEMBER(pc88va_state::fdc_8255_c_r)
{
return m_i8255_0_pc >> 4;
@@ -1600,16 +1590,6 @@ WRITE8_MEMBER(pc88va_state::fdc_8255_c_w)
m_i8255_1_pc = data;
}
-static I8255A_INTERFACE( slave_fdd_intf )
-{
- DEVCB_DEVICE_MEMBER("d8255_2", i8255_device, pb_r), // Port A read
- DEVCB_NULL, // Port A write
- DEVCB_DEVICE_MEMBER("d8255_2", i8255_device, pa_r), // Port B read
- DEVCB_NULL, // Port B write
- DEVCB_DRIVER_MEMBER(pc88va_state,fdc_8255_c_r), // Port C read
- DEVCB_DRIVER_MEMBER(pc88va_state,fdc_8255_c_w) // Port C write
-};
-
READ8_MEMBER(pc88va_state::r232_ctrl_porta_r)
{
UINT8 sw5, sw4, sw3, sw2,speed_sw;
@@ -1652,16 +1632,6 @@ WRITE8_MEMBER(pc88va_state::r232_ctrl_portc_w)
// ...
}
-static I8255_INTERFACE( r232c_ctrl_intf )
-{
- DEVCB_DRIVER_MEMBER(pc88va_state,r232_ctrl_porta_r), /* Port A read */
- DEVCB_DRIVER_MEMBER(pc88va_state,r232_ctrl_porta_w), /* Port A write */
- DEVCB_DRIVER_MEMBER(pc88va_state,r232_ctrl_portb_r), /* Port B read */
- DEVCB_DRIVER_MEMBER(pc88va_state,r232_ctrl_portb_w), /* Port B write */
- DEVCB_DRIVER_MEMBER(pc88va_state,r232_ctrl_portc_r), /* Port C read */
- DEVCB_DRIVER_MEMBER(pc88va_state,r232_ctrl_portc_w) /* Port C write */
-};
-
IRQ_CALLBACK_MEMBER(pc88va_state::pc88va_irq_callback)
{
return machine().device<pic8259_device>( "pic8259_master" )->acknowledge();
@@ -1854,10 +1824,25 @@ static MACHINE_CONFIG_START( pc88va, pc88va_state )
// MCFG_PALETTE_INIT_OWNER(pc88va_state, pc8801 )
MCFG_GFXDECODE_ADD("gfxdecode", "palette", pc88va )
- MCFG_I8255_ADD( "d8255_2", master_fdd_intf )
- MCFG_I8255_ADD( "d8255_3", r232c_ctrl_intf )
-
- MCFG_I8255_ADD( "d8255_2s", slave_fdd_intf )
+ MCFG_DEVICE_ADD("d8255_2", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(DEVREAD8("d8255_2s", i8255_device, pb_r))
+ MCFG_I8255_IN_PORTB_CB(DEVREAD8("d8255_2s", i8255_device, pa_r))
+ MCFG_I8255_IN_PORTC_CB(READ8(pc88va_state, cpu_8255_c_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(pc88va_state, cpu_8255_c_w))
+
+ MCFG_DEVICE_ADD("d8255_3", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(pc88va_state, r232_ctrl_porta_r))
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(pc88va_state, r232_ctrl_porta_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(pc88va_state, r232_ctrl_portb_r))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(pc88va_state, r232_ctrl_portb_w))
+ MCFG_I8255_IN_PORTC_CB(READ8(pc88va_state, r232_ctrl_portc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(pc88va_state, r232_ctrl_portc_w))
+
+ MCFG_DEVICE_ADD("d8255_2s", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(DEVREAD8("d8255_2", i8255_device, pb_r))
+ MCFG_I8255_IN_PORTB_CB(DEVREAD8("d8255_2", i8255_device, pa_r))
+ MCFG_I8255_IN_PORTC_CB(READ8(pc88va_state, fdc_8255_c_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(pc88va_state, fdc_8255_c_w))
MCFG_PIC8259_ADD( "pic8259_master", WRITELINE(pc88va_state, pc88va_pic_irq), VCC, READ8(pc88va_state,get_slave_ack) )
diff --git a/src/mess/drivers/pc9801.c b/src/mess/drivers/pc9801.c
index 87da9ccab03..32da63e5b72 100644
--- a/src/mess/drivers/pc9801.c
+++ b/src/mess/drivers/pc9801.c
@@ -3183,27 +3183,6 @@ READ8_MEMBER(pc9801_state::ppi_sys_portc_r)
return 0xa0; // 0x80 cpu triple fault reset flag?
}
-static I8255A_INTERFACE( ppi_system_intf )
-{
- DEVCB_INPUT_PORT("DSW2"), /* Port A read */
- DEVCB_NULL, /* Port A write */
- DEVCB_INPUT_PORT("DSW1"), /* Port B read */
- DEVCB_NULL, /* Port B write */
- DEVCB_DRIVER_MEMBER(pc9801_state,ppi_sys_portc_r), /* Port C read */
- DEVCB_DRIVER_MEMBER(pc9801_state,ppi_sys_portc_w) /* Port C write */
-};
-
-/* TODO: check this one */
-static I8255A_INTERFACE( ppi_printer_intf )
-{
- DEVCB_NULL, /* Port A read */
- DEVCB_NULL, /* Port A write */
- DEVCB_INPUT_PORT("DSW5"), /* Port B read */
- DEVCB_NULL, /* Port B write */
- DEVCB_NULL, /* Port C read */
- DEVCB_NULL /* Port C write */
-};
-
READ8_MEMBER(pc9801_state::ppi_fdd_porta_r)
{
return 0xff;
@@ -3224,16 +3203,6 @@ WRITE8_MEMBER(pc9801_state::ppi_fdd_portc_w)
//upd765_data_w(machine().device("upd765_2dd"),space, 0,data);
}
-static I8255A_INTERFACE( ppi_fdd_intf )
-{
- DEVCB_DRIVER_MEMBER(pc9801_state,ppi_fdd_porta_r), /* Port A read */
- DEVCB_NULL, /* Port A write */
- DEVCB_DRIVER_MEMBER(pc9801_state,ppi_fdd_portb_r), /* Port B read */
- DEVCB_NULL, /* Port B write */
- DEVCB_DRIVER_MEMBER(pc9801_state,ppi_fdd_portc_r), /* Port C read */
- DEVCB_DRIVER_MEMBER(pc9801_state,ppi_fdd_portc_w) /* Port C write */
-};
-
READ8_MEMBER(pc9801_state::ppi_mouse_porta_r)
{
UINT8 res;
@@ -3278,16 +3247,6 @@ WRITE8_MEMBER(pc9801_state::ppi_mouse_portc_w)
m_mouse.control = data;
}
-static I8255A_INTERFACE( ppi_mouse_intf )
-{
- DEVCB_DRIVER_MEMBER(pc9801_state,ppi_mouse_porta_r), /* Port A read */
- DEVCB_DRIVER_MEMBER(pc9801_state,ppi_mouse_porta_w), /* Port A write */
- DEVCB_INPUT_PORT("DSW3"), /* Port B read */
- DEVCB_DRIVER_MEMBER(pc9801_state,ppi_mouse_portb_w), /* Port B write */
- DEVCB_INPUT_PORT("DSW4"), /* Port C read */
- DEVCB_DRIVER_MEMBER(pc9801_state,ppi_mouse_portc_w) /* Port C write */
-};
-
/****************************************
*
* UPD765 interface
@@ -3579,7 +3538,13 @@ static MACHINE_CONFIG_FRAGMENT( pc9801_keyboard )
MACHINE_CONFIG_END
static MACHINE_CONFIG_FRAGMENT( pc9801_mouse )
- MCFG_I8255_ADD( "ppi8255_mouse", ppi_mouse_intf )
+ MCFG_DEVICE_ADD("ppi8255_mouse", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(pc9801_state, ppi_mouse_porta_r))
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(pc9801_state, ppi_mouse_porta_w))
+ MCFG_I8255_IN_PORTB_CB(IOPORT("DSW3"))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(pc9801_state, ppi_mouse_portb_w))
+ MCFG_I8255_IN_PORTC_CB(IOPORT("DSW4"))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(pc9801_state, ppi_mouse_portc_w))
MCFG_TIMER_DRIVER_ADD_PERIODIC("mouse_timer", pc9801_state, mouse_irq_cb, attotime::from_hz(120))
MACHINE_CONFIG_END
@@ -3633,9 +3598,23 @@ static MACHINE_CONFIG_START( pc9801, pc9801_state )
MCFG_I8237_ADD("i8237", 5000000, dmac_intf) // unknown clock
MCFG_PIC8259_ADD( "pic8259_master", INPUTLINE("maincpu", 0), VCC, READ8(pc9801_state,get_slave_ack) )
MCFG_PIC8259_ADD( "pic8259_slave", DEVWRITELINE("pic8259_master", pic8259_device, ir7_w), GND, NULL ) // TODO: Check ir7_w
- MCFG_I8255_ADD( "ppi8255_sys", ppi_system_intf )
- MCFG_I8255_ADD( "ppi8255_prn", ppi_printer_intf )
- MCFG_I8255_ADD( "ppi8255_fdd", ppi_fdd_intf )
+
+ MCFG_DEVICE_ADD("ppi8255_sys", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(IOPORT("DSW2"))
+ MCFG_I8255_IN_PORTB_CB(IOPORT("DSW1"))
+ MCFG_I8255_IN_PORTC_CB(READ8(pc9801_state, ppi_sys_portc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(pc9801_state, ppi_sys_portc_w))
+
+ MCFG_DEVICE_ADD("ppi8255_prn", I8255, 0)
+ /* TODO: check this one */
+ MCFG_I8255_IN_PORTB_CB(IOPORT("DSW5"))
+
+ MCFG_DEVICE_ADD("ppi8255_fdd", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(pc9801_state, ppi_fdd_porta_r))
+ MCFG_I8255_IN_PORTB_CB(READ8(pc9801_state, ppi_fdd_portb_r))
+ MCFG_I8255_IN_PORTC_CB(READ8(pc9801_state, ppi_fdd_portc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(pc9801_state, ppi_fdd_portc_w))
+
MCFG_FRAGMENT_ADD(pc9801_keyboard)
MCFG_FRAGMENT_ADD(pc9801_mouse)
MCFG_FRAGMENT_ADD(pc9801_cbus)
@@ -3719,9 +3698,23 @@ static MACHINE_CONFIG_START( pc9801rs, pc9801_state )
MCFG_I8237_ADD("i8237", MAIN_CLOCK_X1*8, pc9801rs_dmac_intf) // unknown clock
MCFG_PIC8259_ADD( "pic8259_master", INPUTLINE("maincpu", 0), VCC, READ8(pc9801_state,get_slave_ack) )
MCFG_PIC8259_ADD( "pic8259_slave", DEVWRITELINE("pic8259_master", pic8259_device, ir7_w), GND, NULL ) // TODO: Check ir7_w
- MCFG_I8255_ADD( "ppi8255_sys", ppi_system_intf )
- MCFG_I8255_ADD( "ppi8255_prn", ppi_printer_intf )
- MCFG_I8255_ADD( "ppi8255_fdd", ppi_fdd_intf )
+
+ MCFG_DEVICE_ADD("ppi8255_sys", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(IOPORT("DSW2"))
+ MCFG_I8255_IN_PORTB_CB(IOPORT("DSW1"))
+ MCFG_I8255_IN_PORTC_CB(READ8(pc9801_state, ppi_sys_portc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(pc9801_state, ppi_sys_portc_w))
+
+ MCFG_DEVICE_ADD("ppi8255_prn", I8255, 0)
+ /* TODO: check this one */
+ MCFG_I8255_IN_PORTB_CB(IOPORT("DSW5"))
+
+ MCFG_DEVICE_ADD("ppi8255_fdd", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(pc9801_state, ppi_fdd_porta_r))
+ MCFG_I8255_IN_PORTB_CB(READ8(pc9801_state, ppi_fdd_portb_r))
+ MCFG_I8255_IN_PORTC_CB(READ8(pc9801_state, ppi_fdd_portc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(pc9801_state, ppi_fdd_portc_w))
+
MCFG_FRAGMENT_ADD(pc9801_keyboard)
MCFG_FRAGMENT_ADD(pc9801_mouse)
MCFG_FRAGMENT_ADD(pc9801_ide)
@@ -3811,9 +3804,23 @@ static MACHINE_CONFIG_START( pc9821, pc9801_state )
MCFG_I8237_ADD("i8237", 16000000, pc9801rs_dmac_intf) // unknown clock
MCFG_PIC8259_ADD( "pic8259_master", INPUTLINE("maincpu", 0), VCC, READ8(pc9801_state,get_slave_ack) )
MCFG_PIC8259_ADD( "pic8259_slave", DEVWRITELINE("pic8259_master", pic8259_device, ir7_w), GND, NULL ) // TODO: Check ir7_w
- MCFG_I8255_ADD( "ppi8255_sys", ppi_system_intf )
- MCFG_I8255_ADD( "ppi8255_prn", ppi_printer_intf )
- MCFG_I8255_ADD( "ppi8255_fdd", ppi_fdd_intf )
+
+ MCFG_DEVICE_ADD("ppi8255_sys", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(IOPORT("DSW2"))
+ MCFG_I8255_IN_PORTB_CB(IOPORT("DSW1"))
+ MCFG_I8255_IN_PORTC_CB(READ8(pc9801_state, ppi_sys_portc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(pc9801_state, ppi_sys_portc_w))
+
+ MCFG_DEVICE_ADD("ppi8255_prn", I8255, 0)
+ /* TODO: check this one */
+ MCFG_I8255_IN_PORTB_CB(IOPORT("DSW5"))
+
+ MCFG_DEVICE_ADD("ppi8255_fdd", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(pc9801_state, ppi_fdd_porta_r))
+ MCFG_I8255_IN_PORTB_CB(READ8(pc9801_state, ppi_fdd_portb_r))
+ MCFG_I8255_IN_PORTC_CB(READ8(pc9801_state, ppi_fdd_portc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(pc9801_state, ppi_fdd_portc_w))
+
MCFG_FRAGMENT_ADD(pc9801_keyboard)
MCFG_FRAGMENT_ADD(pc9801_mouse)
MCFG_FRAGMENT_ADD(pc9801_ide)
diff --git a/src/mess/drivers/pk8000.c b/src/mess/drivers/pk8000.c
index c27fcc8334b..9800cfdb936 100644
--- a/src/mess/drivers/pk8000.c
+++ b/src/mess/drivers/pk8000.c
@@ -161,26 +161,6 @@ WRITE8_MEMBER(pk8000_state::pk8000_80_portc_w)
m_cassette->output((BIT(data, 6)) ? +1.0 : 0.0);
}
-static I8255_INTERFACE( pk8000_ppi8255_interface_1 )
-{
- DEVCB_NULL,
- DEVCB_DRIVER_MEMBER(pk8000_state,pk8000_80_porta_w),
- DEVCB_DRIVER_MEMBER(pk8000_state,pk8000_80_portb_r),
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_DRIVER_MEMBER(pk8000_state,pk8000_80_portc_w)
-};
-
-static I8255_INTERFACE( pk8000_ppi8255_interface_2 )
-{
- DEVCB_DRIVER_MEMBER(pk8000_base_state,pk8000_84_porta_r),
- DEVCB_DRIVER_MEMBER(pk8000_base_state,pk8000_84_porta_w),
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_DRIVER_MEMBER(pk8000_base_state,pk8000_84_portc_w)
-};
-
READ8_MEMBER(pk8000_state::pk8000_joy_1_r)
{
UINT8 retVal = (m_cassette->input() > 0.0038 ? 0x80 : 0);
@@ -381,7 +361,6 @@ static MACHINE_CONFIG_START( pk8000, pk8000_state )
MCFG_CPU_IO_MAP(pk8000_io)
MCFG_CPU_VBLANK_INT_DRIVER("screen", pk8000_state, pk8000_interrupt)
-
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(50)
@@ -394,8 +373,15 @@ static MACHINE_CONFIG_START( pk8000, pk8000_state )
MCFG_PALETTE_ADD("palette", 16)
MCFG_PALETTE_INIT_OWNER(pk8000_base_state, pk8000)
- MCFG_I8255_ADD( "ppi8255_1", pk8000_ppi8255_interface_1 )
- MCFG_I8255_ADD( "ppi8255_2", pk8000_ppi8255_interface_2 )
+ MCFG_DEVICE_ADD("ppi8255_1", I8255, 0)
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(pk8000_state, pk8000_80_porta_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(pk8000_state, pk8000_80_portb_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(pk8000_state, pk8000_80_portc_w))
+
+ MCFG_DEVICE_ADD("ppi8255_2", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(pk8000_base_state, pk8000_84_porta_r))
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(pk8000_base_state, pk8000_84_porta_w))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(pk8000_base_state,pk8000_84_portc_w))
/* audio hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mess/drivers/pk8020.c b/src/mess/drivers/pk8020.c
index dabab42bfde..04a216d9d4d 100644
--- a/src/mess/drivers/pk8020.c
+++ b/src/mess/drivers/pk8020.c
@@ -206,7 +206,6 @@ static MACHINE_CONFIG_START( pk8020, pk8020_state )
MCFG_CPU_IO_MAP(pk8020_io)
MCFG_CPU_VBLANK_INT_DRIVER("screen", pk8020_state, pk8020_interrupt)
-
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(50)
@@ -220,10 +219,16 @@ static MACHINE_CONFIG_START( pk8020, pk8020_state )
MCFG_PALETTE_ADD("palette", 16)
MCFG_PALETTE_INIT_OWNER(pk8020_state, pk8020)
+ MCFG_DEVICE_ADD("ppi8255_1", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(pk8020_state, pk8020_porta_r))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(pk8020_state, pk8020_portb_w))
+ MCFG_I8255_IN_PORTC_CB(READ8(pk8020_state, pk8020_portc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(pk8020_state, pk8020_portc_w))
+
+ MCFG_DEVICE_ADD("ppi8255_2", I8255, 0)
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(pk8020_state, pk8020_2_portc_w))
- MCFG_I8255_ADD( "ppi8255_1", pk8020_ppi8255_interface_1 )
- MCFG_I8255_ADD( "ppi8255_2", pk8020_ppi8255_interface_2 )
- MCFG_I8255_ADD( "ppi8255_3", pk8020_ppi8255_interface_3 )
+ MCFG_DEVICE_ADD("ppi8255_3", I8255, 0)
MCFG_DEVICE_ADD("pit8253", PIT8253, 0)
MCFG_PIT8253_CLK0(XTAL_20MHz / 10)
@@ -233,11 +238,11 @@ static MACHINE_CONFIG_START( pk8020, pk8020_state )
MCFG_PIT8253_CLK2((XTAL_20MHz / 8) / 164)
MCFG_PIT8253_OUT2_HANDLER(DEVWRITELINE("pic8259", pic8259_device, ir5_w))
- MCFG_PIC8259_ADD( "pic8259", WRITELINE(pk8020_state,pk8020_pic_set_int_line), VCC, NULL )
- MCFG_DEVICE_ADD( "rs232", I8251, 0)
- MCFG_DEVICE_ADD( "lan", I8251, 0)
+ MCFG_PIC8259_ADD("pic8259", WRITELINE(pk8020_state,pk8020_pic_set_int_line), VCC, NULL)
+ MCFG_DEVICE_ADD("rs232", I8251, 0)
+ MCFG_DEVICE_ADD("lan", I8251, 0)
- MCFG_FD1793_ADD( "wd1793", pk8020_wd17xx_interface )
+ MCFG_FD1793_ADD("wd1793", pk8020_wd17xx_interface)
/* audio hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mess/drivers/pmd85.c b/src/mess/drivers/pmd85.c
index 4ec4369270b..ef630b43cc1 100644
--- a/src/mess/drivers/pmd85.c
+++ b/src/mess/drivers/pmd85.c
@@ -608,13 +608,37 @@ MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( pmd851, pmd85 )
- MCFG_I8255_ADD( "ppi8255_0", pmd85_ppi8255_interface[0] )
-
- MCFG_I8255_ADD( "ppi8255_1", pmd85_ppi8255_interface[1] )
-
- MCFG_I8255_ADD( "ppi8255_2", pmd85_ppi8255_interface[2] )
-
- MCFG_I8255_ADD( "ppi8255_3", pmd85_ppi8255_interface[3] )
+ MCFG_DEVICE_ADD("ppi8255_0", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(pmd85_state, pmd85_ppi_0_porta_r))
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(pmd85_state, pmd85_ppi_0_porta_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(pmd85_state, pmd85_ppi_0_portb_r))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(pmd85_state, pmd85_ppi_0_portb_w))
+ MCFG_I8255_IN_PORTC_CB(READ8(pmd85_state, pmd85_ppi_0_portc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(pmd85_state, pmd85_ppi_0_portc_w))
+
+ MCFG_DEVICE_ADD("ppi8255_1", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(pmd85_state, pmd85_ppi_1_porta_r))
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(pmd85_state, pmd85_ppi_1_porta_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(pmd85_state, pmd85_ppi_1_portb_r))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(pmd85_state, pmd85_ppi_1_portb_w))
+ MCFG_I8255_IN_PORTC_CB(READ8(pmd85_state, pmd85_ppi_1_portc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(pmd85_state, pmd85_ppi_1_portc_w))
+
+ MCFG_DEVICE_ADD("ppi8255_2", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(pmd85_state, pmd85_ppi_2_porta_r))
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(pmd85_state, pmd85_ppi_2_porta_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(pmd85_state, pmd85_ppi_2_portb_r))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(pmd85_state, pmd85_ppi_2_portb_w))
+ MCFG_I8255_IN_PORTC_CB(READ8(pmd85_state, pmd85_ppi_2_portc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(pmd85_state, pmd85_ppi_2_portc_w))
+
+ MCFG_DEVICE_ADD("ppi8255_3", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(pmd85_state, pmd85_ppi_3_porta_r))
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(pmd85_state, pmd85_ppi_3_porta_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(pmd85_state, pmd85_ppi_3_portb_r))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(pmd85_state, pmd85_ppi_3_portb_w))
+ MCFG_I8255_IN_PORTC_CB(READ8(pmd85_state, pmd85_ppi_3_portc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(pmd85_state, pmd85_ppi_3_portc_w))
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( pmd852a, pmd851 )
@@ -631,12 +655,29 @@ static MACHINE_CONFIG_DERIVED( alfa, pmd85 )
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(alfa_mem)
- MCFG_I8255_ADD( "ppi8255_0", alfa_ppi8255_interface[0] )
-
- MCFG_I8255_ADD( "ppi8255_1", alfa_ppi8255_interface[1] )
-
- MCFG_I8255_ADD( "ppi8255_2", alfa_ppi8255_interface[1] )
-
+ MCFG_DEVICE_ADD("ppi8255_0", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(pmd85_state, pmd85_ppi_0_porta_r))
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(pmd85_state, pmd85_ppi_0_porta_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(pmd85_state, pmd85_ppi_0_portb_r))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(pmd85_state, pmd85_ppi_0_portb_w))
+ MCFG_I8255_IN_PORTC_CB(READ8(pmd85_state, pmd85_ppi_0_portc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(pmd85_state, pmd85_ppi_0_portc_w))
+
+ MCFG_DEVICE_ADD("ppi8255_1", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(pmd85_state, pmd85_ppi_1_porta_r))
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(pmd85_state, pmd85_ppi_1_porta_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(pmd85_state, pmd85_ppi_1_portb_r))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(pmd85_state, pmd85_ppi_1_portb_w))
+ MCFG_I8255_IN_PORTC_CB(READ8(pmd85_state, pmd85_ppi_1_portc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(pmd85_state, pmd85_ppi_1_portc_w))
+
+ MCFG_DEVICE_ADD("ppi8255_2", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(pmd85_state, pmd85_ppi_2_porta_r))
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(pmd85_state, pmd85_ppi_2_porta_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(pmd85_state, pmd85_ppi_2_portb_r))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(pmd85_state, pmd85_ppi_2_portb_w))
+ MCFG_I8255_IN_PORTC_CB(READ8(pmd85_state, pmd85_ppi_2_portc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(pmd85_state, pmd85_ppi_2_portc_w))
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( mato, pmd85 )
@@ -644,7 +685,13 @@ static MACHINE_CONFIG_DERIVED( mato, pmd85 )
MCFG_CPU_PROGRAM_MAP(mato_mem)
MCFG_CPU_IO_MAP(mato_io_map)
- MCFG_I8255_ADD( "ppi8255_0", mato_ppi8255_interface )
+ MCFG_DEVICE_ADD("ppi8255_0", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(pmd85_state, pmd85_ppi_0_porta_r))
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(pmd85_state, pmd85_ppi_0_porta_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(pmd85_state, mato_ppi_0_portb_r))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(pmd85_state, pmd85_ppi_0_portb_w))
+ MCFG_I8255_IN_PORTC_CB(READ8(pmd85_state, mato_ppi_0_portc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(pmd85_state, mato_ppi_0_portc_w))
/* no uart */
MCFG_DEVICE_REMOVE( "uart" )
diff --git a/src/mess/drivers/poisk1.c b/src/mess/drivers/poisk1.c
index 5a07c355357..12210e79f41 100644
--- a/src/mess/drivers/poisk1.c
+++ b/src/mess/drivers/poisk1.c
@@ -119,26 +119,6 @@ WRITE8_MEMBER(p1_state::p1_ppi2_portb_w)
p1_speaker_set_spkrdata( data & 0x02 );
}
-I8255_INTERFACE( p1_ppi8255_interface_1 )
-{
-/*60H*/ DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, p1_state, p1_ppi_porta_r),
- DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, p1_state, p1_ppi_porta_w),
-/*69H*/ DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, p1_state, p1_ppi_portb_r),
- DEVCB_NULL,
-/*6AH*/ DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, p1_state, p1_ppi_portc_r),
- DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, p1_state, p1_ppi_portc_w)
-};
-
-I8255_INTERFACE( p1_ppi8255_interface_2 )
-{
-/*68H*/ DEVCB_NULL,
- DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, p1_state, p1_ppi2_porta_w),
-/*61H*/ DEVCB_NULL,
- DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, p1_state, p1_ppi2_portb_w),
-/*62H*/ DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, p1_state, p1_ppi2_portc_r),
- DEVCB_NULL
-};
-
READ8_MEMBER(p1_state::p1_ppi_r)
{
// DBG_LOG(1,"p1ppi",("R %.2x\n", 0x60+offset));
@@ -273,8 +253,17 @@ static MACHINE_CONFIG_START( poisk1, p1_state )
MCFG_PIC8259_ADD( "pic8259", INPUTLINE(":maincpu", 0), VCC, NULL )
- MCFG_I8255A_ADD( "ppi8255n1", p1_ppi8255_interface_1 )
- MCFG_I8255A_ADD( "ppi8255n2", p1_ppi8255_interface_2 )
+ MCFG_DEVICE_ADD("ppi8255n1", I8255A, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(p1_state, p1_ppi_porta_r)) /*60H*/
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(p1_state, p1_ppi_porta_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(p1_state, p1_ppi_portb_r)) /*69H*/
+ MCFG_I8255_IN_PORTC_CB(READ8(p1_state, p1_ppi_portc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(p1_state, p1_ppi_portc_w)) /*6AH*/
+
+ MCFG_DEVICE_ADD("ppi8255n2", I8255A, 0)
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(p1_state, p1_ppi2_porta_w)) /*68H*/
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(p1_state, p1_ppi2_portb_w)) /*61H*/
+ MCFG_I8255_IN_PORTC_CB(READ8(p1_state, p1_ppi2_portc_r)) /*62H*/
MCFG_DEVICE_ADD("isa", ISA8, 0)
MCFG_ISA8_CPU(":maincpu")
diff --git a/src/mess/drivers/portfoli.c b/src/mess/drivers/portfoli.c
index 852e8fdf151..9062b3765cc 100644
--- a/src/mess/drivers/portfoli.c
+++ b/src/mess/drivers/portfoli.c
@@ -702,21 +702,6 @@ GFXDECODE_END
//**************************************************************************
//-------------------------------------------------
-// I8255_INTERFACE( ppi_intf )
-//-------------------------------------------------
-
-static I8255_INTERFACE( ppi_intf )
-{
- DEVCB_NULL, // Port A read
- DEVCB_DEVICE_MEMBER("cent_data_out", output_latch_device, write), // Port A write
- DEVCB_NULL, // Port B read
- DEVCB_DEVICE_MEMBER("cent_ctrl_out", output_latch_device, write), // Port B write
- DEVCB_DEVICE_MEMBER("cent_status_in", input_buffer_device, read), // Port C read
- DEVCB_NULL // Port C write
-};
-
-
-//-------------------------------------------------
// ins8250_interface i8250_intf
//-------------------------------------------------
@@ -862,7 +847,10 @@ static MACHINE_CONFIG_START( portfolio, portfolio_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
/* devices */
- MCFG_I8255A_ADD(M82C55A_TAG, ppi_intf)
+ MCFG_DEVICE_ADD(M82C55A_TAG, I8255A, 0)
+ MCFG_I8255_OUT_PORTA_CB(DEVWRITE8("cent_data_out", output_latch_device, write))
+ MCFG_I8255_OUT_PORTB_CB(DEVWRITE8("cent_ctrl_out", output_latch_device, write))
+ MCFG_I8255_IN_PORTC_CB(DEVREAD8("cent_status_in", input_buffer_device, read))
MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "printer")
MCFG_CENTRONICS_ACK_HANDLER(DEVWRITELINE("cent_status_in", input_buffer_device, write_bit5))
diff --git a/src/mess/drivers/pp01.c b/src/mess/drivers/pp01.c
index 39e2a210c71..06f10ce7492 100644
--- a/src/mess/drivers/pp01.c
+++ b/src/mess/drivers/pp01.c
@@ -232,7 +232,13 @@ static MACHINE_CONFIG_START( pp01, pp01_state )
MCFG_PIT8253_CLK2(2000000)
MCFG_PIT8253_OUT2_HANDLER(DEVWRITELINE("pit8253", pit8253_device, write_clk0))
- MCFG_I8255A_ADD( "ppi8255", pp01_ppi8255_interface )
+ MCFG_DEVICE_ADD("ppi8255", I8255A, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(pp01_state, pp01_8255_porta_r))
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(pp01_state, pp01_8255_porta_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(pp01_state, pp01_8255_portb_r))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(pp01_state, pp01_8255_portb_w))
+ MCFG_I8255_IN_PORTC_CB(READ8(pp01_state, pp01_8255_portc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(pp01_state, pp01_8255_portc_w))
/* internal ram */
MCFG_RAM_ADD(RAM_TAG)
diff --git a/src/mess/drivers/pulsar.c b/src/mess/drivers/pulsar.c
index 9acc5b0341c..67202352fa3 100644
--- a/src/mess/drivers/pulsar.c
+++ b/src/mess/drivers/pulsar.c
@@ -175,16 +175,6 @@ READ8_MEMBER( pulsar_state::ppi_pc_r )
return m_rtc->data_r(space, 0);
}
-static I8255_INTERFACE( ppi_intf )
-{
- DEVCB_NULL, // Port A read
- DEVCB_DRIVER_MEMBER(pulsar_state, ppi_pa_w), // Port A write
- DEVCB_NULL, // Port B read
- DEVCB_DRIVER_MEMBER(pulsar_state, ppi_pb_w), // Port B write
- DEVCB_DRIVER_MEMBER(pulsar_state, ppi_pc_r), // Port C read
- DEVCB_DRIVER_MEMBER(pulsar_state, ppi_pc_w), // Port C write
-};
-
static DEVICE_INPUT_DEFAULTS_START( terminal )
DEVICE_INPUT_DEFAULTS( "RS232_TXBAUD", 0xff, RS232_BAUD_9600 )
DEVICE_INPUT_DEFAULTS( "RS232_RXBAUD", 0xff, RS232_BAUD_9600 )
@@ -257,7 +247,12 @@ static MACHINE_CONFIG_START( pulsar, pulsar_state )
MCFG_MACHINE_RESET_OVERRIDE(pulsar_state, pulsar)
/* Devices */
- MCFG_I8255_ADD( "ppi", ppi_intf )
+ MCFG_DEVICE_ADD("ppi", I8255, 0)
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(pulsar_state, ppi_pa_w))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(pulsar_state, ppi_pb_w))
+ MCFG_I8255_IN_PORTC_CB(READ8(pulsar_state, ppi_pc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(pulsar_state, ppi_pc_w))
+
MCFG_MSM5832_ADD("rtc", XTAL_32_768kHz)
MCFG_Z80DART_ADD("z80dart", XTAL_4MHz, dart_intf )
diff --git a/src/mess/drivers/qx10.c b/src/mess/drivers/qx10.c
index 0d0915726cb..1465bff4f7e 100644
--- a/src/mess/drivers/qx10.c
+++ b/src/mess/drivers/qx10.c
@@ -426,19 +426,6 @@ static I8237_INTERFACE( qx10_dma8237_2_interface )
};
/*
- 8255
-*/
-static I8255_INTERFACE(qx10_i8255_interface)
-{
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_NULL
-};
-
-/*
MC146818
*/
@@ -845,10 +832,11 @@ static MACHINE_CONFIG_START( qx10, qx10_state )
MCFG_PIC8259_ADD("pic8259_master", INPUTLINE("maincpu", 0), VCC, READ8(qx10_state, get_slave_ack))
MCFG_PIC8259_ADD("pic8259_slave", DEVWRITELINE("pic8259_master", pic8259_device, ir7_w), GND, NULL)
MCFG_UPD7201_ADD("upd7201", MAIN_CLK/4, qx10_upd7201_interface)
- MCFG_I8255_ADD("i8255", qx10_i8255_interface)
MCFG_I8237_ADD("8237dma_1", MAIN_CLK/4, qx10_dma8237_1_interface)
MCFG_I8237_ADD("8237dma_2", MAIN_CLK/4, qx10_dma8237_2_interface)
+ MCFG_DEVICE_ADD("i8255", I8255, 0)
+
MCFG_DEVICE_ADD("upd7220", UPD7220, MAIN_CLK/6) // unk clock
MCFG_DEVICE_ADDRESS_MAP(AS_0, upd7220_map)
MCFG_UPD7220_DISPLAY_PIXELS_CALLBACK_OWNER(qx10_state, hgdc_display_pixels)
diff --git a/src/mess/drivers/radio86.c b/src/mess/drivers/radio86.c
index b6d95e8736c..9b44a76ac1a 100644
--- a/src/mess/drivers/radio86.c
+++ b/src/mess/drivers/radio86.c
@@ -354,9 +354,14 @@ static MACHINE_CONFIG_START( radio86, radio86_state )
MCFG_CPU_IO_MAP(radio86_io)
MCFG_MACHINE_RESET_OVERRIDE(radio86_state, radio86 )
- MCFG_I8255_ADD( "ppi8255_1", radio86_ppi8255_interface_1 )
+ MCFG_DEVICE_ADD("ppi8255_1", I8255, 0)
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(radio86_state, radio86_8255_porta_w2))
+ MCFG_I8255_IN_PORTB_CB(READ8(radio86_state, radio86_8255_portb_r2))
+ MCFG_I8255_IN_PORTC_CB(READ8(radio86_state, radio86_8255_portc_r2))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(radio86_state, radio86_8255_portc_w2))
+
+ MCFG_I8275_ADD("i8275", radio86_i8275_interface)
- MCFG_I8275_ADD ( "i8275", radio86_i8275_interface)
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_UPDATE_DEVICE("i8275", i8275_device, screen_update)
@@ -394,7 +399,10 @@ static MACHINE_CONFIG_DERIVED( radiorom, radio86 )
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(radio86rom_mem)
- MCFG_I8255_ADD( "ppi8255_2", radio86_ppi8255_interface_2 )
+ MCFG_DEVICE_ADD("ppi8255_2", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(radio86_state, radio86_romdisk_porta_r))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(radio86_state, radio86_romdisk_portb_w))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(radio86_state, radio86_romdisk_portc_w))
MCFG_CARTSLOT_ADD("cart")
MCFG_CARTSLOT_EXTENSION_LIST("bin,rom")
@@ -406,7 +414,10 @@ static MACHINE_CONFIG_DERIVED( radioram, radio86 )
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(radio86ram_mem)
- MCFG_I8255_ADD( "ppi8255_2", radio86_ppi8255_interface_2 )
+ MCFG_DEVICE_ADD("ppi8255_2", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(radio86_state, radio86_romdisk_porta_r))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(radio86_state, radio86_romdisk_portb_w))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(radio86_state, radio86_romdisk_portc_w))
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( rk7007, radio86 )
@@ -414,7 +425,11 @@ static MACHINE_CONFIG_DERIVED( rk7007, radio86 )
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_IO_MAP(rk7007_io)
- MCFG_I8255_ADD( "ms7007", rk7007_ppi8255_interface )
+ MCFG_DEVICE_ADD("ms7007", I8255, 0)
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(radio86_state, radio86_8255_porta_w2))
+ MCFG_I8255_IN_PORTB_CB(READ8(radio86_state, radio86_8255_portb_r2))
+ MCFG_I8255_IN_PORTC_CB(READ8(radio86_state, rk7007_8255_portc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(radio86_state, radio86_8255_portc_w2))
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( rk700716, radio16 )
@@ -422,7 +437,11 @@ static MACHINE_CONFIG_DERIVED( rk700716, radio16 )
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_IO_MAP(rk7007_io)
- MCFG_I8255_ADD( "ms7007", rk7007_ppi8255_interface )
+ MCFG_DEVICE_ADD("ms7007", I8255, 0)
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(radio86_state, radio86_8255_porta_w2))
+ MCFG_I8255_IN_PORTB_CB(READ8(radio86_state, radio86_8255_portb_r2))
+ MCFG_I8255_IN_PORTC_CB(READ8(radio86_state, rk7007_8255_portc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(radio86_state, radio86_8255_portc_w2))
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( mikron2, radio86 )
diff --git a/src/mess/drivers/sage2.c b/src/mess/drivers/sage2.c
index 0e21d5b9c7b..231b1e96536 100644
--- a/src/mess/drivers/sage2.c
+++ b/src/mess/drivers/sage2.c
@@ -183,7 +183,7 @@ INPUT_PORTS_END
//**************************************************************************
//-------------------------------------------------
-// I8255A_INTERFACE( ppi0_intf )
+// I8255A INTERFACE( ppi0_intf )
//-------------------------------------------------
/*
@@ -201,7 +201,7 @@ INPUT_PORTS_END
//-------------------------------------------------
-// I8255A_INTERFACE( ppi0_intf )
+// I8255A INTERFACE( ppi0_intf )
//-------------------------------------------------
WRITE8_MEMBER( sage2_state::ppi0_pc_w )
@@ -246,19 +246,9 @@ WRITE8_MEMBER( sage2_state::ppi0_pc_w )
if(BIT(data, 7)) m_fdc->reset();
}
-static I8255A_INTERFACE( ppi0_intf )
-{
- DEVCB_INPUT_PORT("J7"),
- DEVCB_NULL,
- DEVCB_INPUT_PORT("J6"),
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_DRIVER_MEMBER(sage2_state, ppi0_pc_w)
-};
-
//-------------------------------------------------
-// I8255A_INTERFACE( ppi1_intf )
+// I8255A INTERFACE( ppi1_intf )
//-------------------------------------------------
WRITE_LINE_MEMBER(sage2_state::write_centronics_ack)
@@ -373,17 +363,6 @@ WRITE8_MEMBER( sage2_state::ppi1_pc_w )
}
}
-static I8255A_INTERFACE( ppi1_intf )
-{
- DEVCB_NULL,
- DEVCB_DEVICE_MEMBER("cent_data_out", output_latch_device, write),
- DEVCB_DRIVER_MEMBER(sage2_state, ppi1_pb_r),
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_DRIVER_MEMBER(sage2_state, ppi1_pc_w)
-};
-
-
WRITE_LINE_MEMBER( sage2_state::br1_w )
{
m_usart0->write_txc(state);
@@ -464,8 +443,16 @@ static MACHINE_CONFIG_START( sage2, sage2_state )
// devices
MCFG_PIC8259_ADD(I8259_TAG, INPUTLINE(M68000_TAG, M68K_IRQ_1), VCC, NULL)
- MCFG_I8255A_ADD(I8255A_0_TAG, ppi0_intf)
- MCFG_I8255A_ADD(I8255A_1_TAG, ppi1_intf)
+
+ MCFG_DEVICE_ADD(I8255A_0_TAG, I8255A, 0)
+ MCFG_I8255_IN_PORTA_CB(IOPORT("J7"))
+ MCFG_I8255_IN_PORTB_CB(IOPORT("J6"))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(sage2_state, ppi0_pc_w))
+
+ MCFG_DEVICE_ADD(I8255A_1_TAG, I8255A, 0)
+ MCFG_I8255_OUT_PORTA_CB(DEVWRITE8("cent_data_out", output_latch_device, write))
+ MCFG_I8255_IN_PORTB_CB(READ8(sage2_state, ppi1_pb_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(sage2_state, ppi1_pc_w))
MCFG_DEVICE_ADD(I8253_0_TAG, PIT8253, 0)
MCFG_PIT8253_CLK0(0) // from U75 OUT0
diff --git a/src/mess/drivers/savia84.c b/src/mess/drivers/savia84.c
index d1552ab61c0..295e2b64f8f 100644
--- a/src/mess/drivers/savia84.c
+++ b/src/mess/drivers/savia84.c
@@ -168,17 +168,6 @@ READ8_MEMBER( savia84_state::savia84_8255_portc_r ) // IN FA - read keyboard
return 0xff;
}
-
-I8255A_INTERFACE( savia84_ppi8255_interface )
-{
- DEVCB_NULL,
- DEVCB_DRIVER_MEMBER(savia84_state, savia84_8255_porta_w),
- DEVCB_NULL,
- DEVCB_DRIVER_MEMBER(savia84_state, savia84_8255_portb_w),
- DEVCB_DRIVER_MEMBER(savia84_state, savia84_8255_portc_r),
- DEVCB_DRIVER_MEMBER(savia84_state, savia84_8255_portc_w)
-};
-
static MACHINE_CONFIG_START( savia84, savia84_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu",Z80, XTAL_4MHz / 2)
@@ -189,7 +178,12 @@ static MACHINE_CONFIG_START( savia84, savia84_state )
MCFG_DEFAULT_LAYOUT(layout_savia84)
/* Devices */
- MCFG_I8255_ADD( "ppi8255", savia84_ppi8255_interface )
+ MCFG_DEVICE_ADD("ppi8255", I8255, 0)
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(savia84_state, savia84_8255_porta_w))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(savia84_state, savia84_8255_portb_w))
+ MCFG_I8255_IN_PORTC_CB(READ8(savia84_state, savia84_8255_portc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(savia84_state, savia84_8255_portc_w))
+
MACHINE_CONFIG_END
/* ROM definition */
diff --git a/src/mess/drivers/sbrain.c b/src/mess/drivers/sbrain.c
index ca24d33fa1d..f0956d533aa 100644
--- a/src/mess/drivers/sbrain.c
+++ b/src/mess/drivers/sbrain.c
@@ -266,16 +266,6 @@ static SLOT_INTERFACE_START( sbrain_floppies )
SLOT_INTERFACE( "525dd", FLOPPY_525_DD )
SLOT_INTERFACE_END
-static I8255_INTERFACE( ppi_intf )
-{
- DEVCB_DRIVER_MEMBER(sbrain_state, ppi_pa_r), // Port A read
- DEVCB_DRIVER_MEMBER(sbrain_state, ppi_pa_w), // Port A write
- DEVCB_DRIVER_MEMBER(sbrain_state, ppi_pb_r), // Port B read
- DEVCB_DRIVER_MEMBER(sbrain_state, ppi_pb_w), // Port B write
- DEVCB_DRIVER_MEMBER(sbrain_state, ppi_pc_r), // Port C read
- DEVCB_DRIVER_MEMBER(sbrain_state, ppi_pc_w), // Port C write
-};
-
MACHINE_RESET_MEMBER( sbrain_state, sbrain )
{
m_beep->set_frequency(800);
@@ -349,7 +339,13 @@ static MACHINE_CONFIG_START( sbrain, sbrain_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
/* Devices */
- MCFG_I8255_ADD("ppi", ppi_intf)
+ MCFG_DEVICE_ADD("ppi", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(sbrain_state, ppi_pa_r))
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(sbrain_state, ppi_pa_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(sbrain_state, ppi_pb_r))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(sbrain_state, ppi_pb_w))
+ MCFG_I8255_IN_PORTC_CB(READ8(sbrain_state, ppi_pc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(sbrain_state, ppi_pc_w))
MCFG_DEVICE_ADD("uart0", I8251, 0)
diff --git a/src/mess/drivers/sg1000.c b/src/mess/drivers/sg1000.c
index 9a821d1d754..db3cc2d6af5 100644
--- a/src/mess/drivers/sg1000.c
+++ b/src/mess/drivers/sg1000.c
@@ -470,7 +470,7 @@ static TMS9928A_INTERFACE(sg1000_tms9918a_interface)
};
/*-------------------------------------------------
- I8255_INTERFACE( sc3000_ppi_intf )
+ I8255 INTERFACE
-------------------------------------------------*/
READ8_MEMBER( sc3000_state::ppi_pa_r )
@@ -545,16 +545,6 @@ WRITE8_MEMBER( sc3000_state::ppi_pc_w )
/* TODO printer */
}
-I8255_INTERFACE( sc3000_ppi_intf )
-{
- DEVCB_DRIVER_MEMBER(sc3000_state, ppi_pa_r), // Port A read
- DEVCB_NULL, // Port A write
- DEVCB_DRIVER_MEMBER(sc3000_state, ppi_pb_r), // Port B read
- DEVCB_NULL, // Port B write
- DEVCB_NULL, // Port C read
- DEVCB_DRIVER_MEMBER(sc3000_state, ppi_pc_w), // Port C write
-};
-
/*-------------------------------------------------
cassette_interface sc3000_cassette_interface
-------------------------------------------------*/
@@ -569,7 +559,7 @@ const cassette_interface sc3000_cassette_interface =
};
/*-------------------------------------------------
- I8255_INTERFACE( sf7000_ppi_intf )
+ I8255 INTERFACE
-------------------------------------------------*/
WRITE_LINE_MEMBER( sf7000_state::write_centronics_busy )
@@ -640,16 +630,6 @@ WRITE8_MEMBER( sf7000_state::ppi_pc_w )
m_centronics->write_strobe(BIT(data, 7));
}
-static I8255_INTERFACE( sf7000_ppi_intf )
-{
- DEVCB_DRIVER_MEMBER(sf7000_state, ppi_pa_r), // Port A read
- DEVCB_NULL, // Port A write
- DEVCB_NULL, // Port B read
- DEVCB_DEVICE_MEMBER("cent_data_out", output_latch_device, write), // Port B write
- DEVCB_NULL, // Port C read
- DEVCB_DRIVER_MEMBER(sf7000_state, ppi_pc_w) // Port C write
-};
-
/*-------------------------------------------------
upd765_interface sf7000_upd765_interface
-------------------------------------------------*/
@@ -827,8 +807,13 @@ static MACHINE_CONFIG_START( sc3000, sc3000_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
/* devices */
- MCFG_I8255_ADD(UPD9255_TAG, sc3000_ppi_intf)
+ MCFG_DEVICE_ADD(UPD9255_TAG, I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(sc3000_state, ppi_pa_r))
+ MCFG_I8255_IN_PORTB_CB(READ8(sc3000_state, ppi_pb_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(sc3000_state, ppi_pc_w))
+
// MCFG_PRINTER_ADD("sp400") /* serial printer */
+
MCFG_CASSETTE_ADD("cassette", sc3000_cassette_interface)
/* cartridge */
@@ -864,8 +849,15 @@ static MACHINE_CONFIG_START( sf7000, sf7000_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
/* devices */
- MCFG_I8255_ADD(UPD9255_0_TAG, sc3000_ppi_intf)
- MCFG_I8255_ADD(UPD9255_1_TAG, sf7000_ppi_intf)
+ MCFG_DEVICE_ADD(UPD9255_0_TAG, I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(sc3000_state, ppi_pa_r))
+ MCFG_I8255_IN_PORTB_CB(READ8(sc3000_state, ppi_pb_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(sc3000_state, ppi_pc_w))
+
+ MCFG_DEVICE_ADD(UPD9255_1_TAG, I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(sf7000_state, ppi_pa_r))
+ MCFG_I8255_OUT_PORTB_CB(DEVWRITE8("cent_data_out", output_latch_device, write))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(sf7000_state, ppi_pc_w))
MCFG_DEVICE_ADD(UPD8251_TAG, I8251, 0)
MCFG_I8251_TXD_HANDLER(DEVWRITELINE(RS232_TAG, rs232_port_device, write_txd))
diff --git a/src/mess/drivers/sm1800.c b/src/mess/drivers/sm1800.c
index c058ff85f0a..afb8f86c62a 100644
--- a/src/mess/drivers/sm1800.c
+++ b/src/mess/drivers/sm1800.c
@@ -135,16 +135,6 @@ READ8_MEMBER( sm1800_state::sm1800_8255_portc_r )
return 0;
}
-I8255A_INTERFACE( sm1800_ppi8255_interface )
-{
- DEVCB_DRIVER_MEMBER(sm1800_state, sm1800_8255_porta_r),
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_DRIVER_MEMBER(sm1800_state, sm1800_8255_portb_w),
- DEVCB_DRIVER_MEMBER(sm1800_state, sm1800_8255_portc_r),
- DEVCB_DRIVER_MEMBER(sm1800_state, sm1800_8255_portc_w)
-};
-
PALETTE_INIT_MEMBER(sm1800_state, sm1800)
{
palette.set_pen_color(0, rgb_t::black); // black
@@ -192,8 +182,14 @@ static MACHINE_CONFIG_START( sm1800, sm1800_state )
MCFG_GFXDECODE_ADD("gfxdecode", "palette", sm1800)
/* Devices */
- MCFG_I8255_ADD ("i8255", sm1800_ppi8255_interface )
+ MCFG_DEVICE_ADD("i8255", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(sm1800_state, sm1800_8255_porta_r))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(sm1800_state, sm1800_8255_portb_w))
+ MCFG_I8255_IN_PORTC_CB(READ8(sm1800_state, sm1800_8255_portc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(sm1800_state, sm1800_8255_portc_w))
+
MCFG_I8275_ADD ("i8275", sm1800_i8275_interface)
+
MCFG_DEVICE_ADD("i8251", I8251, 0)
MACHINE_CONFIG_END
diff --git a/src/mess/drivers/softbox.c b/src/mess/drivers/softbox.c
index ff4640f1c6d..324a8e3b5f1 100644
--- a/src/mess/drivers/softbox.c
+++ b/src/mess/drivers/softbox.c
@@ -173,7 +173,7 @@ INPUT_PORTS_END
//**************************************************************************
//-------------------------------------------------
-// I8255A_INTERFACE( ppi0_intf )
+// I8255A 0 Interface
//-------------------------------------------------
READ8_MEMBER( softbox_state::ppi0_pa_r )
@@ -186,19 +186,8 @@ WRITE8_MEMBER( softbox_state::ppi0_pb_w )
m_ieee->dio_w(data ^ 0xff);
}
-static I8255A_INTERFACE( ppi0_intf )
-{
- DEVCB_DRIVER_MEMBER(softbox_state, ppi0_pa_r),
- DEVCB_NULL, // Port A write
- DEVCB_NULL, // Port B read
- DEVCB_DRIVER_MEMBER(softbox_state, ppi0_pb_w),
- DEVCB_INPUT_PORT("SW1"), // Port C read
- DEVCB_NULL // Port C write
-};
-
-
//-------------------------------------------------
-// I8255A_INTERFACE( ppi1_intf )
+// I8255A 1 Interface
//-------------------------------------------------
READ8_MEMBER( softbox_state::ppi1_pa_r )
@@ -307,17 +296,6 @@ WRITE8_MEMBER( softbox_state::ppi1_pc_w )
output_set_led_value(LED_READY, !BIT(data, 2));
}
-static I8255A_INTERFACE( ppi1_intf )
-{
- DEVCB_DRIVER_MEMBER(softbox_state, ppi1_pa_r),
- DEVCB_NULL, // Port A write
- DEVCB_NULL, // Port B read
- DEVCB_DRIVER_MEMBER(softbox_state, ppi1_pb_w),
- DEVCB_DRIVER_MEMBER(softbox_state, ppi1_pc_r),
- DEVCB_DRIVER_MEMBER(softbox_state, ppi1_pc_w)
-};
-
-
static DEVICE_INPUT_DEFAULTS_START( terminal )
DEVICE_INPUT_DEFAULTS( "RS232_TXBAUD", 0xff, RS232_BAUD_9600 )
DEVICE_INPUT_DEFAULTS( "RS232_RXBAUD", 0xff, RS232_BAUD_9600 )
@@ -405,8 +383,16 @@ static MACHINE_CONFIG_START( softbox, softbox_state )
MCFG_RS232_DSR_HANDLER(DEVWRITELINE(I8251_TAG, i8251_device, write_dsr))
MCFG_DEVICE_CARD_DEVICE_INPUT_DEFAULTS("terminal", terminal)
- MCFG_I8255A_ADD(I8255_0_TAG, ppi0_intf)
- MCFG_I8255A_ADD(I8255_1_TAG, ppi1_intf)
+ MCFG_DEVICE_ADD(I8255_0_TAG, I8255A, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(softbox_state, ppi0_pa_r))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(softbox_state, ppi0_pb_w))
+ MCFG_I8255_IN_PORTC_CB(IOPORT("SW1"))
+
+ MCFG_DEVICE_ADD(I8255_1_TAG, I8255A, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(softbox_state, ppi1_pa_r))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(softbox_state, ppi1_pb_w))
+ MCFG_I8255_IN_PORTC_CB(READ8(softbox_state, ppi1_pc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(softbox_state, ppi1_pc_w))
MCFG_DEVICE_ADD(COM8116_TAG, COM8116, XTAL_5_0688MHz)
MCFG_COM8116_FR_HANDLER(DEVWRITELINE(I8251_TAG, i8251_device, write_rxc))
diff --git a/src/mess/drivers/special.c b/src/mess/drivers/special.c
index 519df57da92..05d0f459f55 100644
--- a/src/mess/drivers/special.c
+++ b/src/mess/drivers/special.c
@@ -386,7 +386,14 @@ static MACHINE_CONFIG_START( special, special_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
/* Devices */
- MCFG_I8255_ADD( "ppi8255", specialist_ppi8255_interface )
+ MCFG_DEVICE_ADD("ppi8255", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(special_state, specialist_8255_porta_r))
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(special_state, specialist_8255_porta_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(special_state, specialist_8255_portb_r))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(special_state, specialist_8255_portb_w))
+ MCFG_I8255_IN_PORTC_CB(READ8(special_state, specialist_8255_portc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(special_state, specialist_8255_portc_w))
+
MCFG_CASSETTE_ADD( "cassette", special_cassette_interface )
MCFG_SOFTWARE_LIST_ADD("cass_list","special_cass")
MACHINE_CONFIG_END
@@ -405,7 +412,13 @@ MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( specialm, special )
MCFG_DEVICE_REMOVE("ppi8255")
- MCFG_I8255_ADD( "ppi8255", specimx_ppi8255_interface )
+ MCFG_DEVICE_ADD("ppi8255", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(special_state, specialist_8255_porta_r))
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(special_state, specialist_8255_porta_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(special_state, specimx_8255_portb_r))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(special_state, specialist_8255_portb_w))
+ MCFG_I8255_IN_PORTC_CB(READ8(special_state, specialist_8255_portc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(special_state, specialist_8255_portc_w))
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( specimx, special )
@@ -438,7 +451,14 @@ static MACHINE_CONFIG_DERIVED( specimx, special )
MCFG_PIT8253_OUT2_HANDLER(DEVWRITELINE("custom", specimx_sound_device, set_input_ch2))
MCFG_DEVICE_REMOVE("ppi8255")
- MCFG_I8255_ADD( "ppi8255", specimx_ppi8255_interface )
+ MCFG_DEVICE_ADD("ppi8255", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(special_state, specialist_8255_porta_r))
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(special_state, specialist_8255_porta_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(special_state, specimx_8255_portb_r))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(special_state, specialist_8255_portb_w))
+ MCFG_I8255_IN_PORTC_CB(READ8(special_state, specialist_8255_portc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(special_state, specialist_8255_portc_w))
+
MCFG_FD1793x_ADD("fd1793", XTAL_8MHz / 8)
MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(special_state, fdc_drq))
MCFG_FLOPPY_DRIVE_ADD("fd0", specimx_floppies, "525qd", special_state::specimx_floppy_formats)
@@ -480,7 +500,15 @@ static MACHINE_CONFIG_START( erik, special_state )
/* Devices */
MCFG_CASSETTE_ADD( "cassette", special_cassette_interface )
- MCFG_I8255_ADD( "ppi8255", specialist_ppi8255_interface )
+
+ MCFG_DEVICE_ADD("ppi8255", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(special_state, specialist_8255_porta_r))
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(special_state, specialist_8255_porta_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(special_state, specialist_8255_portb_r))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(special_state, specialist_8255_portb_w))
+ MCFG_I8255_IN_PORTC_CB(READ8(special_state, specialist_8255_portc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(special_state, specialist_8255_portc_w))
+
MCFG_FD1793x_ADD("fd1793", XTAL_8MHz / 8)
MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(special_state, fdc_drq))
MCFG_FLOPPY_DRIVE_ADD("fd0", specimx_floppies, "525qd", special_state::specimx_floppy_formats)
diff --git a/src/mess/drivers/sv8000.c b/src/mess/drivers/sv8000.c
index 672f883e9e8..23e3f18ed26 100644
--- a/src/mess/drivers/sv8000.c
+++ b/src/mess/drivers/sv8000.c
@@ -272,17 +272,6 @@ WRITE8_MEMBER( sv8000_state::i8255_portc_w )
}
-static I8255_INTERFACE( sv8000_i8255_interface )
-{
- DEVCB_DRIVER_MEMBER(sv8000_state, i8255_porta_r), /* port A read */
- DEVCB_DRIVER_MEMBER(sv8000_state, i8255_porta_w), /* port A write */
- DEVCB_DRIVER_MEMBER(sv8000_state, i8255_portb_r), /* port B read */
- DEVCB_DRIVER_MEMBER(sv8000_state, i8255_portb_w), /* port B write */
- DEVCB_DRIVER_MEMBER(sv8000_state, i8255_portc_r), /* port C read */
- DEVCB_DRIVER_MEMBER(sv8000_state, i8255_portc_w) /* port C write */
-};
-
-
READ8_MEMBER( sv8000_state::ay_port_a_r )
{
UINT8 data = 0xFF;
@@ -422,7 +411,13 @@ static MACHINE_CONFIG_START( sv8000, sv8000_state )
MCFG_CPU_IO_MAP(sv8000_io)
MCFG_CPU_VBLANK_INT_DRIVER("screen", sv8000_state, irq0_line_hold)
- MCFG_I8255_ADD( "i8255", sv8000_i8255_interface )
+ MCFG_DEVICE_ADD("i8255", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(sv8000_state, i8255_porta_r))
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(sv8000_state, i8255_porta_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(sv8000_state, i8255_portb_r))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(sv8000_state, i8255_portb_w))
+ MCFG_I8255_IN_PORTC_CB(READ8(sv8000_state, i8255_portc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(sv8000_state, i8255_portc_w))
/* video hardware */
// S68047P - Unknown whether the internal or an external character rom is used
diff --git a/src/mess/drivers/svi318.c b/src/mess/drivers/svi318.c
index 501f87495b4..089500d585a 100644
--- a/src/mess/drivers/svi318.c
+++ b/src/mess/drivers/svi318.c
@@ -315,7 +315,10 @@ static MACHINE_CONFIG_START( svi318, svi318_state )
MCFG_MACHINE_START_OVERRIDE(svi318_state, svi318_pal )
MCFG_MACHINE_RESET_OVERRIDE(svi318_state, svi318 )
- MCFG_I8255_ADD( "ppi8255", svi318_ppi8255_interface )
+ MCFG_DEVICE_ADD("ppi8255", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(svi318_state, svi318_ppi_port_a_r))
+ MCFG_I8255_IN_PORTB_CB(READ8(svi318_state, svi318_ppi_port_b_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(svi318_state, svi318_ppi_port_c_w))
MCFG_INS8250_ADD( "ins8250_0", svi318_ins8250_interface[0], 1000000 )
MCFG_INS8250_ADD( "ins8250_1", svi318_ins8250_interface[1], 3072000 )
@@ -431,7 +434,10 @@ static MACHINE_CONFIG_START( svi328_806, svi318_state )
MCFG_MACHINE_START_OVERRIDE(svi318_state, svi318_pal )
MCFG_MACHINE_RESET_OVERRIDE(svi318_state, svi328_806 )
- MCFG_I8255A_ADD( "ppi8255", svi318_ppi8255_interface )
+ MCFG_DEVICE_ADD("ppi8255", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(svi318_state, svi318_ppi_port_a_r))
+ MCFG_I8255_IN_PORTB_CB(READ8(svi318_state, svi318_ppi_port_b_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(svi318_state, svi318_ppi_port_c_w))
MCFG_INS8250_ADD( "ins8250_0", svi318_ins8250_interface[0], 1000000 )
MCFG_INS8250_ADD( "ins8250_1", svi318_ins8250_interface[1], 3072000 )
diff --git a/src/mess/drivers/tandy2k.c b/src/mess/drivers/tandy2k.c
index 84ad7b5c5ec..67a13f06074 100644
--- a/src/mess/drivers/tandy2k.c
+++ b/src/mess/drivers/tandy2k.c
@@ -636,15 +636,6 @@ WRITE8_MEMBER( tandy2k_state::ppi_pc_w )
m_centronics->write_strobe(BIT(data, 7));
}
-static I8255A_INTERFACE( ppi_intf )
-{
- DEVCB_NULL, // Port A read
- DEVCB_DEVICE_MEMBER("cent_data_out", output_latch_device, write), // Port A write
- DEVCB_DRIVER_MEMBER(tandy2k_state, ppi_pb_r), // Port B write
- DEVCB_NULL, // Port B write
- DEVCB_NULL, // Port C read
- DEVCB_DRIVER_MEMBER(tandy2k_state, ppi_pc_w) // Port C write
-};
// Intel 8259 Interfaces
@@ -805,7 +796,10 @@ static MACHINE_CONFIG_START( tandy2k, tandy2k_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
// devices
- MCFG_I8255A_ADD(I8255A_TAG, ppi_intf)
+ MCFG_DEVICE_ADD(I8255A_TAG, I8255A, 0)
+ MCFG_I8255_OUT_PORTA_CB(DEVWRITE8("cent_data_out", output_latch_device, write))
+ MCFG_I8255_IN_PORTB_CB(READ8(tandy2k_state, ppi_pb_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(tandy2k_state, ppi_pc_w))
MCFG_DEVICE_ADD(I8251A_TAG, I8251, 0)
MCFG_I8251_TXD_HANDLER(DEVWRITELINE(RS232_TAG, rs232_port_device, write_txd))
diff --git a/src/mess/drivers/tk80.c b/src/mess/drivers/tk80.c
index 599151ed19a..c6a6a2b1035 100644
--- a/src/mess/drivers/tk80.c
+++ b/src/mess/drivers/tk80.c
@@ -116,19 +116,19 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START(tk80_io, AS_IO, 8, tk80_state)
ADDRESS_MAP_UNMAP_HIGH
ADDRESS_MAP_GLOBAL_MASK(0x03)
- AM_RANGE(0x00, 0x03) AM_DEVREADWRITE("ppi8255_0", i8255_device, read, write)
+ AM_RANGE(0x00, 0x03) AM_DEVREADWRITE("ppi8255", i8255_device, read, write)
ADDRESS_MAP_END
static ADDRESS_MAP_START(mikrolab_io, AS_IO, 8, tk80_state)
ADDRESS_MAP_UNMAP_HIGH
ADDRESS_MAP_GLOBAL_MASK(0x03)
- AM_RANGE(0x00, 0x03) AM_DEVREADWRITE("ppi8255_1", i8255_device, read, write)
+ AM_RANGE(0x00, 0x03) AM_DEVREADWRITE("ppi8255", i8255_device, read, write)
ADDRESS_MAP_END
static ADDRESS_MAP_START(nd80z_io, AS_IO, 8, tk80_state)
ADDRESS_MAP_UNMAP_HIGH
ADDRESS_MAP_GLOBAL_MASK(0x03)
- AM_RANGE(0x00, 0x03) AM_DEVREADWRITE("ppi8255_2", i8255_device, read, write)
+ AM_RANGE(0x00, 0x03) AM_DEVREADWRITE("ppi8255", i8255_device, read, write)
ADDRESS_MAP_END
/* Input ports */
@@ -247,37 +247,6 @@ WRITE8_MEMBER( tk80_state::mikrolab_serial_w )
m_ppi_portc = data;
}
-static I8255_INTERFACE( ppi_intf_0 )
-{
- DEVCB_DRIVER_MEMBER(tk80_state, key_matrix_r), /* Port A read */
- DEVCB_NULL, /* Port A write */
- DEVCB_DRIVER_MEMBER(tk80_state, serial_r), /* Port B read */
- DEVCB_NULL, /* Port B write */
- DEVCB_NULL, /* Port C read */
- DEVCB_DRIVER_MEMBER(tk80_state, serial_w) /* Port C write */
-};
-
-static I8255_INTERFACE( ppi_intf_1 )
-{
- DEVCB_DRIVER_MEMBER(tk80_state, key_matrix_r), /* Port A read */
- DEVCB_NULL, /* Port A write */
- DEVCB_DRIVER_MEMBER(tk80_state, serial_r), /* Port B read */
- DEVCB_NULL, /* Port B write */
- DEVCB_NULL, /* Port C read */
- DEVCB_DRIVER_MEMBER(tk80_state, mikrolab_serial_w) /* Port C write */
-};
-
-static I8255_INTERFACE( ppi_intf_2 )
-{
- DEVCB_DRIVER_MEMBER(tk80_state, nd80z_key_r), /* Port A read */
- DEVCB_NULL, /* Port A write */
- DEVCB_DRIVER_MEMBER(tk80_state, serial_r), /* Port B read */
- DEVCB_NULL, /* Port B write */
- DEVCB_NULL, /* Port C read */
- DEVCB_DRIVER_MEMBER(tk80_state, mikrolab_serial_w) /* Port C write */
-};
-
-
static MACHINE_CONFIG_START( tk80, tk80_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu",I8080, XTAL_1MHz) // 18.432 / 9
@@ -288,25 +257,36 @@ static MACHINE_CONFIG_START( tk80, tk80_state )
MCFG_DEFAULT_LAYOUT(layout_tk80)
/* Devices */
- MCFG_I8255_ADD( "ppi8255_0", ppi_intf_0 )
+ MCFG_DEVICE_ADD("ppi8255", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(tk80_state, key_matrix_r))
+ MCFG_I8255_IN_PORTB_CB(READ8(tk80_state, serial_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(tk80_state, serial_w))
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( mikrolab, tk80 )
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(tk85_mem)
MCFG_CPU_IO_MAP(mikrolab_io)
+
/* Devices */
- MCFG_DEVICE_REMOVE("ppi8255_0")
- MCFG_I8255_ADD( "ppi8255_1", ppi_intf_1 )
+ MCFG_DEVICE_REMOVE("ppi8255")
+ MCFG_DEVICE_ADD("ppi8255", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(tk80_state, key_matrix_r))
+ MCFG_I8255_IN_PORTB_CB(READ8(tk80_state, serial_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(tk80_state, mikrolab_serial_w))
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( nd80z, tk80 )
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(tk85_mem)
MCFG_CPU_IO_MAP(nd80z_io)
+
/* Devices */
- MCFG_DEVICE_REMOVE("ppi8255_0")
- MCFG_I8255_ADD( "ppi8255_2", ppi_intf_2 )
+ MCFG_DEVICE_REMOVE("ppi8255")
+ MCFG_DEVICE_ADD("ppi8255", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(tk80_state, nd80z_key_r))
+ MCFG_I8255_IN_PORTB_CB(READ8(tk80_state, serial_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(tk80_state, mikrolab_serial_w))
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( tk85, tk80 )
diff --git a/src/mess/drivers/tk80bs.c b/src/mess/drivers/tk80bs.c
index e67028913ea..df1a81c7713 100644
--- a/src/mess/drivers/tk80bs.c
+++ b/src/mess/drivers/tk80bs.c
@@ -143,16 +143,6 @@ READ8_MEMBER( tk80bs_state::port_b_r )
return 0;
}
-static I8255_INTERFACE( ppi_intf )
-{
- DEVCB_DRIVER_MEMBER(tk80bs_state, port_a_r), /* Port A read */
- DEVCB_NULL, /* Port A write */
- DEVCB_DRIVER_MEMBER(tk80bs_state, port_b_r), /* Port B read */
- DEVCB_NULL, /* Port B write */
- DEVCB_NULL, /* Port C read */
- DEVCB_NULL /* Port C write */
-};
-
WRITE8_MEMBER( tk80bs_state::kbd_put )
{
data &= 0x7f;
@@ -195,7 +185,10 @@ static MACHINE_CONFIG_START( tk80bs, tk80bs_state )
MCFG_GFXDECODE_ADD("gfxdecode", "palette", tk80bs)
/* Devices */
- MCFG_I8255_ADD( "ppi", ppi_intf)
+ MCFG_DEVICE_ADD("ppi", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(tk80bs_state, port_a_r))
+ MCFG_I8255_IN_PORTB_CB(READ8(tk80bs_state, port_b_r))
+
MCFG_DEVICE_ADD(KEYBOARD_TAG, GENERIC_KEYBOARD, 0)
MCFG_GENERIC_KEYBOARD_CB(WRITE8(tk80bs_state, kbd_put))
MACHINE_CONFIG_END
diff --git a/src/mess/drivers/unior.c b/src/mess/drivers/unior.c
index d66f3579d3a..05d65c6ecfb 100644
--- a/src/mess/drivers/unior.c
+++ b/src/mess/drivers/unior.c
@@ -320,17 +320,6 @@ WRITE8_MEMBER( unior_state::ppi0_b_w )
{
}
-// ports a & c connect to an external slot
-static I8255A_INTERFACE( ppi0_intf )
-{
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_DRIVER_MEMBER(unior_state, ppi0_b_r),
- DEVCB_DRIVER_MEMBER(unior_state, ppi0_b_w),
- DEVCB_NULL,
- DEVCB_NULL,
-};
-
READ8_MEMBER( unior_state::ppi1_a_r )
{
return m_4c;
@@ -366,19 +355,6 @@ WRITE8_MEMBER( unior_state::ppi1_c_w )
m_pit->write_gate2(BIT(data, 4));
}
-// ports a & b are for the keyboard
-// port c operates various control lines for mostly unknown purposes
-static I8255A_INTERFACE( ppi1_intf )
-{
- DEVCB_DRIVER_MEMBER(unior_state, ppi1_a_r),
- DEVCB_DRIVER_MEMBER(unior_state, ppi1_a_w),
- DEVCB_DRIVER_MEMBER(unior_state, ppi1_b_r),
- DEVCB_NULL,
- DEVCB_DRIVER_MEMBER(unior_state, ppi1_c_r),
- DEVCB_DRIVER_MEMBER(unior_state, ppi1_c_w),
-};
-
-
/*************************************************
i8257
@@ -449,8 +425,19 @@ static MACHINE_CONFIG_START( unior, unior_state )
MCFG_PIT8253_CLK2(XTAL_16MHz / 9 / 64) // unknown frequency
MCFG_PIT8253_OUT2_HANDLER(DEVWRITELINE("speaker", speaker_sound_device, level_w))
- MCFG_I8255_ADD( "ppi0", ppi0_intf )
- MCFG_I8255_ADD( "ppi1", ppi1_intf )
+ MCFG_DEVICE_ADD("ppi0", I8255, 0)
+ // ports a & c connect to an external slot
+ MCFG_I8255_IN_PORTB_CB(READ8(unior_state, ppi0_b_r))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(unior_state, ppi0_b_w))
+
+ MCFG_DEVICE_ADD("ppi1", I8255, 0)
+ // ports a & b are for the keyboard
+ // port c operates various control lines for mostly unknown purposes
+ MCFG_I8255_IN_PORTA_CB(READ8(unior_state, ppi1_a_r))
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(unior_state, ppi1_a_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(unior_state, ppi1_b_r))
+ MCFG_I8255_IN_PORTC_CB(READ8(unior_state, ppi1_c_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(unior_state, ppi1_c_w))
MCFG_DEVICE_ADD("dma", I8257, XTAL_20MHz / 9) // unknown clock
MCFG_I8257_OUT_HRQ_CB(INPUTLINE("maincpu", I8085_HALT))
diff --git a/src/mess/drivers/ut88.c b/src/mess/drivers/ut88.c
index 9394fe98529..bc4d97616c4 100644
--- a/src/mess/drivers/ut88.c
+++ b/src/mess/drivers/ut88.c
@@ -213,7 +213,11 @@ static MACHINE_CONFIG_START( ut88, ut88_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
/* Devices */
- MCFG_I8255A_ADD( "ppi8255", ut88_ppi8255_interface )
+ MCFG_DEVICE_ADD("ppi8255", I8255A, 0)
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(ut88_state, ut88_8255_porta_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(ut88_state, ut88_8255_portb_r))
+ MCFG_I8255_IN_PORTC_CB(READ8(ut88_state, ut88_8255_portc_r))
+
MCFG_CASSETTE_ADD( "cassette", ut88_cassette_interface )
MCFG_SOFTWARE_LIST_ADD("cass_list","ut88")
MACHINE_CONFIG_END
diff --git a/src/mess/drivers/v1050.c b/src/mess/drivers/v1050.c
index 79d839844a1..2d96226a70e 100644
--- a/src/mess/drivers/v1050.c
+++ b/src/mess/drivers/v1050.c
@@ -650,32 +650,12 @@ WRITE8_MEMBER(v1050_state::disp_ppi_pc_w)
m_ppi_6502->pc4_w(BIT(data, 7));
}
-static I8255A_INTERFACE( disp_ppi_intf )
-{
- DEVCB_DEVICE_MEMBER(I8255A_M6502_TAG, i8255_device, pb_r), // Port A read
- DEVCB_NULL, // Port A write
- DEVCB_NULL, // Port B read
- DEVCB_NULL, // Port B write
- DEVCB_NULL, // Port C read
- DEVCB_DRIVER_MEMBER(v1050_state,disp_ppi_pc_w) // Port C write
-};
-
WRITE8_MEMBER(v1050_state::m6502_ppi_pc_w)
{
m_ppi_disp->pc2_w(BIT(data, 7));
m_ppi_disp->pc4_w(BIT(data, 6));
}
-static I8255A_INTERFACE( m6502_ppi_intf )
-{
- DEVCB_DEVICE_MEMBER(I8255A_DISP_TAG, i8255_device, pb_r), // Port A read
- DEVCB_NULL, // Port A write
- DEVCB_NULL, // Port B read
- DEVCB_NULL, // Port B write
- DEVCB_NULL, // Port C read
- DEVCB_DRIVER_MEMBER(v1050_state,m6502_ppi_pc_w) // Port C write
-};
-
// Miscellanous 8255A Interface
WRITE8_MEMBER( v1050_state::misc_ppi_pa_w )
@@ -809,16 +789,6 @@ WRITE8_MEMBER( v1050_state::misc_ppi_pc_w )
set_baud_sel((data >> 2) & 0x03);
}
-static I8255A_INTERFACE( misc_ppi_intf )
-{
- DEVCB_NULL, // Port A read
- DEVCB_DRIVER_MEMBER(v1050_state, misc_ppi_pa_w), // Port A write
- DEVCB_NULL, // Port B read
- DEVCB_DEVICE_MEMBER("cent_data_out", output_latch_device, write), // Port B write
- DEVCB_DRIVER_MEMBER(v1050_state,misc_ppi_pc_r), // Port C read
- DEVCB_DRIVER_MEMBER(v1050_state, misc_ppi_pc_w) // Port C write
-};
-
// Real Time Clock 8255A Interface
WRITE8_MEMBER( v1050_state::rtc_ppi_pb_w )
@@ -897,16 +867,6 @@ WRITE8_MEMBER( v1050_state::rtc_ppi_pc_w )
m_rtc->cs2_w(BIT(data, 7));
}
-static I8255A_INTERFACE( rtc_ppi_intf )
-{
- DEVCB_DRIVER_MEMBER(v1050_state, rtc_ppi_pa_r),
- DEVCB_DRIVER_MEMBER(v1050_state, rtc_ppi_pa_w),
- DEVCB_NULL,
- DEVCB_DRIVER_MEMBER(v1050_state, rtc_ppi_pb_w),
- DEVCB_DRIVER_MEMBER(v1050_state, rtc_ppi_pc_r),
- DEVCB_DRIVER_MEMBER(v1050_state, rtc_ppi_pc_w)
-};
-
// Keyboard 8251A Interface
WRITE_LINE_MEMBER(v1050_state::write_keyboard_clock)
@@ -1094,10 +1054,26 @@ static MACHINE_CONFIG_START( v1050, v1050_state )
MCFG_MSM58321_D3_HANDLER(WRITELINE(v1050_state, rtc_ppi_pa_3_w))
MCFG_MSM58321_BUSY_HANDLER(WRITELINE(v1050_state, rtc_ppi_pc_3_w))
- MCFG_I8255A_ADD(I8255A_DISP_TAG, disp_ppi_intf)
- MCFG_I8255A_ADD(I8255A_MISC_TAG, misc_ppi_intf)
- MCFG_I8255A_ADD(I8255A_RTC_TAG, rtc_ppi_intf)
- MCFG_I8255A_ADD(I8255A_M6502_TAG, m6502_ppi_intf)
+ MCFG_DEVICE_ADD(I8255A_DISP_TAG, I8255A, 0)
+ MCFG_I8255_IN_PORTA_CB(DEVREAD8(I8255A_M6502_TAG, i8255_device, pb_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(v1050_state, disp_ppi_pc_w))
+
+ MCFG_DEVICE_ADD(I8255A_MISC_TAG, I8255A, 0)
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(v1050_state, misc_ppi_pa_w))
+ MCFG_I8255_OUT_PORTB_CB(DEVWRITE8("cent_data_out", output_latch_device, write))
+ MCFG_I8255_IN_PORTC_CB(READ8(v1050_state,misc_ppi_pc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(v1050_state,misc_ppi_pc_w))
+
+ MCFG_DEVICE_ADD(I8255A_RTC_TAG, I8255A, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(v1050_state, rtc_ppi_pa_r))
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(v1050_state, rtc_ppi_pa_w))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(v1050_state, rtc_ppi_pb_w))
+ MCFG_I8255_IN_PORTC_CB(READ8(v1050_state, rtc_ppi_pc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(v1050_state, rtc_ppi_pc_w))
+
+ MCFG_DEVICE_ADD(I8255A_M6502_TAG, I8255A, 0)
+ MCFG_I8255_IN_PORTA_CB(DEVREAD8(I8255A_DISP_TAG, i8255_device, pb_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(v1050_state, m6502_ppi_pc_w))
MCFG_DEVICE_ADD(I8251A_KB_TAG, I8251, 0/*XTAL_16MHz/8,*/)
MCFG_I8251_TXD_HANDLER(DEVWRITELINE(V1050_KEYBOARD_TAG, v1050_keyboard_device, si_w))
diff --git a/src/mess/drivers/vector06.c b/src/mess/drivers/vector06.c
index fdf41a9104a..642ecb1e2e3 100644
--- a/src/mess/drivers/vector06.c
+++ b/src/mess/drivers/vector06.c
@@ -185,9 +185,19 @@ static MACHINE_CONFIG_START( vector06, vector06_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
/* Devices */
- MCFG_I8255_ADD("ppi8255", vector06_ppi8255_interface)
- MCFG_I8255_ADD("ppi8255_2", vector06_ppi8255_2_interface)
+ MCFG_DEVICE_ADD("ppi8255", I8255, 0)
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(vector06_state, vector06_8255_porta_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(vector06_state, vector06_8255_portb_r))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(vector06_state, vector06_8255_portb_w))
+ MCFG_I8255_IN_PORTC_CB(READ8(vector06_state, vector06_8255_portc_r))
+
+ MCFG_DEVICE_ADD("ppi8255_2", I8255, 0)
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(vector06_state, vector06_romdisk_porta_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(vector06_state, vector06_romdisk_portb_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(vector06_state, vector06_romdisk_portc_w))
+
MCFG_CASSETTE_ADD("cassette", vector_cassette_interface)
+
MCFG_FD1793_ADD("wd1793", vector06_wd17xx_interface)
MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(vector_floppy_interface)
diff --git a/src/mess/drivers/votrpss.c b/src/mess/drivers/votrpss.c
index 42dab20ba68..7d8e141ec84 100644
--- a/src/mess/drivers/votrpss.c
+++ b/src/mess/drivers/votrpss.c
@@ -236,16 +236,6 @@ WRITE8_MEMBER( votrpss_state::ppi_pc_w )
m_portc = data;
}
-static I8255_INTERFACE( ppi_intf )
-{
- DEVCB_DRIVER_MEMBER(votrpss_state, ppi_pa_r), // Port A read
- DEVCB_DRIVER_MEMBER(votrpss_state, ppi_pa_w), // Port A write
- DEVCB_DRIVER_MEMBER(votrpss_state, ppi_pb_r), // Port B read
- DEVCB_DRIVER_MEMBER(votrpss_state, ppi_pb_w), // Port B write
- DEVCB_DRIVER_MEMBER(votrpss_state, ppi_pc_r), // Port C read
- DEVCB_DRIVER_MEMBER(votrpss_state, ppi_pc_w), // Port C write
-};
-
static const ay8910_interface ay8910_intf =
{
AY8910_LEGACY_OUTPUT, // flags
@@ -307,7 +297,14 @@ static MACHINE_CONFIG_START( votrpss, votrpss_state )
MCFG_PIT8253_CLK1(XTAL_8MHz / 256) /* Timer 1: Pitch */
MCFG_PIT8253_CLK2(XTAL_8MHz / 4096) /* Timer 2: Volume */
- MCFG_I8255_ADD("ppi", ppi_intf)
+ MCFG_DEVICE_ADD("ppi", I8255, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(votrpss_state, ppi_pa_r))
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(votrpss_state, ppi_pa_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(votrpss_state, ppi_pb_r))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(votrpss_state, ppi_pb_w))
+ MCFG_I8255_IN_PORTC_CB(READ8(votrpss_state, ppi_pc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(votrpss_state, ppi_pc_w))
+
MCFG_TIMER_DRIVER_ADD_PERIODIC("irq_timer", votrpss_state, irq_timer, attotime::from_msec(10))
MACHINE_CONFIG_END
diff --git a/src/mess/drivers/wangpc.c b/src/mess/drivers/wangpc.c
index 66ff6d034c2..96b87e48331 100644
--- a/src/mess/drivers/wangpc.c
+++ b/src/mess/drivers/wangpc.c
@@ -753,7 +753,7 @@ IRQ_CALLBACK_MEMBER( wangpc_state::wangpc_irq_callback )
//-------------------------------------------------
-// I8255A_INTERFACE( ppi_intf )
+// I8255A INTERFACE
//-------------------------------------------------
READ8_MEMBER( wangpc_state::ppi_pa_r )
@@ -870,17 +870,6 @@ WRITE8_MEMBER( wangpc_state::ppi_pc_w )
m_centronics->write_init(BIT(data, 2));
}
-static I8255A_INTERFACE( ppi_intf )
-{
- DEVCB_DRIVER_MEMBER(wangpc_state, ppi_pa_r),
- DEVCB_NULL,
- DEVCB_DRIVER_MEMBER(wangpc_state, ppi_pb_r),
- DEVCB_NULL,
- DEVCB_DRIVER_MEMBER(wangpc_state, ppi_pc_r),
- DEVCB_DRIVER_MEMBER(wangpc_state, ppi_pc_w)
-};
-
-
WRITE_LINE_MEMBER( wangpc_state::pit2_w )
{
if (state)
@@ -1119,8 +1108,14 @@ static MACHINE_CONFIG_START( wangpc, wangpc_state )
// devices
MCFG_AM9517A_ADD(AM9517A_TAG, 4000000, dmac_intf)
+
MCFG_PIC8259_ADD(I8259A_TAG, INPUTLINE(I8086_TAG, INPUT_LINE_IRQ0), VCC, NULL)
- MCFG_I8255A_ADD(I8255A_TAG, ppi_intf)
+
+ MCFG_DEVICE_ADD(I8255A_TAG, I8255A, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(wangpc_state, ppi_pa_r))
+ MCFG_I8255_IN_PORTB_CB(READ8(wangpc_state, ppi_pb_r))
+ MCFG_I8255_IN_PORTC_CB(READ8(wangpc_state, ppi_pc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(wangpc_state, ppi_pc_w))
MCFG_DEVICE_ADD(I8253_TAG, PIT8253, 0)
MCFG_PIT8253_CLK0(500000)
diff --git a/src/mess/drivers/x1.c b/src/mess/drivers/x1.c
index 810820f8d3f..8c45bf3cf67 100644
--- a/src/mess/drivers/x1.c
+++ b/src/mess/drivers/x1.c
@@ -1870,16 +1870,6 @@ WRITE8_MEMBER( x1_state::x1_portc_w )
m_cassette->output(BIT(data, 0) ? +1.0 : -1.0);
}
-static I8255A_INTERFACE( ppi8255_intf )
-{
- DEVCB_DRIVER_MEMBER(x1_state, x1_porta_r), /* Port A read */
- DEVCB_DRIVER_MEMBER(x1_state, x1_porta_w), /* Port A write */
- DEVCB_DRIVER_MEMBER(x1_state, x1_portb_r), /* Port B read */
- DEVCB_DRIVER_MEMBER(x1_state, x1_portb_w), /* Port B write */
- DEVCB_DRIVER_MEMBER(x1_state, x1_portc_r), /* Port C read */
- DEVCB_DRIVER_MEMBER(x1_state, x1_portc_w) /* Port C write */
-};
-
static MC6845_INTERFACE( mc6845_intf )
{
true, /* show border area */
@@ -2570,7 +2560,13 @@ static MACHINE_CONFIG_START( x1, x1_state )
MCFG_DEVICE_ADD("x1kb", X1_KEYBOARD, 0)
- MCFG_I8255A_ADD( "ppi8255_0", ppi8255_intf )
+ MCFG_DEVICE_ADD("ppi8255_0", I8255A, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(x1_state, x1_porta_r))
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(x1_state, x1_porta_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(x1_state, x1_portb_r))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(x1_state, x1_portb_w))
+ MCFG_I8255_IN_PORTC_CB(READ8(x1_state, x1_portc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(x1_state, x1_portc_w))
MCFG_MACHINE_START_OVERRIDE(x1_state,x1)
MCFG_MACHINE_RESET_OVERRIDE(x1_state,x1)
diff --git a/src/mess/drivers/x1twin.c b/src/mess/drivers/x1twin.c
index b6d8d540fca..eae89011c1f 100644
--- a/src/mess/drivers/x1twin.c
+++ b/src/mess/drivers/x1twin.c
@@ -79,16 +79,6 @@ static const wd17xx_interface x1_mb8877a_interface =
{FLOPPY_0, FLOPPY_1, FLOPPY_2, FLOPPY_3}
};
-static I8255A_INTERFACE( ppi8255_intf )
-{
- DEVCB_DRIVER_MEMBER(x1_state, x1_porta_r), /* Port A read */
- DEVCB_DRIVER_MEMBER(x1_state, x1_porta_w), /* Port A write */
- DEVCB_DRIVER_MEMBER(x1_state, x1_portb_r), /* Port B read */
- DEVCB_DRIVER_MEMBER(x1_state, x1_portb_w), /* Port B write */
- DEVCB_DRIVER_MEMBER(x1_state, x1_portc_r), /* Port C read */
- DEVCB_DRIVER_MEMBER(x1_state, x1_portc_w) /* Port C write */
-};
-
static MC6845_INTERFACE( mc6845_intf )
{
false, /* show border area*/
@@ -526,7 +516,13 @@ static MACHINE_CONFIG_START( x1twin, x1twin_state )
MCFG_DEVICE_ADD("x1kb", X1_KEYBOARD, 0)
- MCFG_I8255A_ADD( "ppi8255_0", ppi8255_intf )
+ MCFG_DEVICE_ADD("ppi8255_0", I8255A, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(x1_state, x1_porta_r))
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(x1_state, x1_porta_w))
+ MCFG_I8255_IN_PORTB_CB(READ8(x1_state, x1_portb_r))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(x1_state, x1_portb_w))
+ MCFG_I8255_IN_PORTC_CB(READ8(x1_state, x1_portc_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(x1_state, x1_portc_w))
MCFG_MACHINE_START_OVERRIDE(x1twin_state,x1)
MCFG_MACHINE_RESET_OVERRIDE(x1twin_state,x1)
diff --git a/src/mess/drivers/x68k.c b/src/mess/drivers/x68k.c
index c32848fce20..8d27d367a39 100644
--- a/src/mess/drivers/x68k.c
+++ b/src/mess/drivers/x68k.c
@@ -1325,16 +1325,6 @@ WRITE_LINE_MEMBER( x68k_state::mfp_tbo_w )
m_mfpdev->clock_w(state);
}
-static I8255A_INTERFACE( ppi_interface )
-{
- DEVCB_DRIVER_MEMBER(x68k_state,ppi_port_a_r),
- DEVCB_NULL,
- DEVCB_DRIVER_MEMBER(x68k_state,ppi_port_b_r),
- DEVCB_NULL,
- DEVCB_DRIVER_MEMBER(x68k_state,ppi_port_c_r),
- DEVCB_DRIVER_MEMBER(x68k_state,ppi_port_c_w)
-};
-
static const hd63450_interface dmac_interface =
{
"maincpu", // CPU - 68000
@@ -1803,7 +1793,11 @@ static MACHINE_CONFIG_FRAGMENT( x68000_base )
MCFG_RS232_PORT_ADD("keyboard", keyboard, "x68k")
MCFG_RS232_RXD_HANDLER(DEVWRITELINE(MC68901_TAG, mc68901_device, write_rx))
- MCFG_I8255A_ADD( "ppi8255", ppi_interface )
+ MCFG_DEVICE_ADD("ppi8255", I8255A, 0)
+ MCFG_I8255_IN_PORTA_CB(READ8(x68k_state, ppi_port_a_r))
+ MCFG_I8255_IN_PORTB_CB(READ8(x68k_state, ppi_port_b_r))
+ MCFG_I8255_IN_PORTC_CB(READ8(x68k_state, ppi_port_c_r))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(x68k_state, ppi_port_c_w))
MCFG_DEVICE_ADD( "hd63450", HD63450, 0 )
MCFG_DEVICE_CONFIG(dmac_interface)
diff --git a/src/mess/drivers/xor100.c b/src/mess/drivers/xor100.c
index f21246eaecc..956fc294557 100644
--- a/src/mess/drivers/xor100.c
+++ b/src/mess/drivers/xor100.c
@@ -411,16 +411,6 @@ READ8_MEMBER(xor100_state::i8255_pc_r)
return data;
}
-static I8255A_INTERFACE( printer_8255_intf )
-{
- DEVCB_NULL,
- DEVCB_DEVICE_MEMBER("cent_data_out", output_latch_device, write),
- DEVCB_NULL,
- DEVCB_DEVICE_LINE_MEMBER(CENTRONICS_TAG, centronics_device, write_strobe),
- DEVCB_DRIVER_MEMBER(xor100_state, i8255_pc_r),
- DEVCB_NULL
-};
-
/* Z80-CTC Interface */
WRITE_LINE_MEMBER( xor100_state::ctc_z0_w )
@@ -548,7 +538,11 @@ static MACHINE_CONFIG_START( xor100, xor100_state )
MCFG_COM8116_FR_HANDLER(WRITELINE(xor100_state, com5016_fr_w))
MCFG_COM8116_FT_HANDLER(WRITELINE(xor100_state, com5016_ft_w))
- MCFG_I8255A_ADD(I8255A_TAG, printer_8255_intf)
+ MCFG_DEVICE_ADD(I8255A_TAG, I8255A, 0)
+ MCFG_I8255_OUT_PORTA_CB(DEVWRITE8("cent_data_out", output_latch_device, write))
+ MCFG_I8255_OUT_PORTB_CB(DEVWRITELINE(CENTRONICS_TAG, centronics_device, write_strobe))
+ MCFG_I8255_IN_PORTC_CB(READ8(xor100_state, i8255_pc_r))
+
MCFG_Z80CTC_ADD(Z80CTC_TAG, XTAL_8MHz/2, ctc_intf)
MCFG_FD1795x_ADD(WD1795_TAG, XTAL_8MHz/4)
MCFG_FLOPPY_DRIVE_ADD(WD1795_TAG":0", xor100_floppies, "8ssdd", floppy_image_device::default_floppy_formats)