summaryrefslogtreecommitdiffstatshomepage
path: root/src/mess/machine
diff options
context:
space:
mode:
author smf- <smf-@users.noreply.github.com>2014-02-23 13:00:28 +0000
committer smf- <smf-@users.noreply.github.com>2014-02-23 13:00:28 +0000
commit38d827e9939c7540ebb8dccf0c5a0a869d741c11 (patch)
tree0933d63fd2a390d3d85a1a9fa04eb77608416c04 /src/mess/machine
parented701f13e738bccb2284d9ddfb4ab9a03f89ff2d (diff)
Converted PIT8253 to DEVCB2 [smf]
Diffstat (limited to 'src/mess/machine')
-rw-r--r--src/mess/machine/amstr_pc.c4
-rw-r--r--src/mess/machine/at.c39
-rw-r--r--src/mess/machine/b2m.c22
-rw-r--r--src/mess/machine/bebox.c22
-rw-r--r--src/mess/machine/cs4031.c33
-rw-r--r--src/mess/machine/dai.c21
-rw-r--r--src/mess/machine/europc.c4
-rw-r--r--src/mess/machine/genpc.c54
-rw-r--r--src/mess/machine/isa_ibm_mfc.c29
-rw-r--r--src/mess/machine/mbc55x.c25
-rw-r--r--src/mess/machine/mz700.c26
-rw-r--r--src/mess/machine/mz80.c12
-rw-r--r--src/mess/machine/pc.c77
-rw-r--r--src/mess/machine/pk8020.c21
-rw-r--r--src/mess/machine/pmd85.c29
-rw-r--r--src/mess/machine/pp01.c21
-rw-r--r--src/mess/machine/southbridge.c44
-rw-r--r--src/mess/machine/southbridge.h3
-rw-r--r--src/mess/machine/special.c28
-rw-r--r--src/mess/machine/tandy1t.c2
20 files changed, 82 insertions, 434 deletions
diff --git a/src/mess/machine/amstr_pc.c b/src/mess/machine/amstr_pc.c
index 0a4b40055d0..618dbc62bf9 100644
--- a/src/mess/machine/amstr_pc.c
+++ b/src/mess/machine/amstr_pc.c
@@ -183,7 +183,7 @@ WRITE8_MEMBER( amstrad_pc_state::pc1640_port60_w )
m_port61=data;
if (data==0x30) m_port62=(m_port65&0x10)>>4;
else if (data==0x34) m_port62=m_port65&0xf;
- machine().device<pit8253_device>("pit8253")->gate2_w(BIT(data, 0));
+ m_pit8253->write_gate2(BIT(data, 0));
pc_speaker_set_spkrdata( data & 0x02 );
pc_keyb_set_clock(data&0x40);
break;
@@ -221,7 +221,7 @@ READ8_MEMBER( amstrad_pc_state::pc1640_port60_r )
case 2:
data = m_port62;
- if (machine().device<pit8253_device>("pit8253")->get_output(2))
+ if (m_pit_out2)
data |= 0x20;
break;
}
diff --git a/src/mess/machine/at.c b/src/mess/machine/at.c
index 44e1901cb13..f3a0e6f07ef 100644
--- a/src/mess/machine/at.c
+++ b/src/mess/machine/at.c
@@ -30,13 +30,7 @@ READ8_MEMBER( at_state::get_slave_ack )
void at_state::at_speaker_set_spkrdata(UINT8 data)
{
m_at_spkrdata = data ? 1 : 0;
- m_speaker->level_w(m_at_spkrdata & m_at_speaker_input);
-}
-
-void at_state::at_speaker_set_input(UINT8 data)
-{
- m_at_speaker_input = data ? 1 : 0;
- m_speaker->level_w(m_at_spkrdata & m_at_speaker_input);
+ m_speaker->level_w(m_at_spkrdata & m_pit_out2);
}
@@ -55,30 +49,11 @@ WRITE_LINE_MEMBER( at_state::at_pit8254_out0_changed )
WRITE_LINE_MEMBER( at_state::at_pit8254_out2_changed )
{
- at_speaker_set_input( state );
+ m_pit_out2 = state ? 1 : 0;
+ m_speaker->level_w(m_at_spkrdata & m_pit_out2);
}
-const struct pit8253_interface at_pit8254_config =
-{
- {
- {
- 4772720/4, /* heartbeat IRQ */
- DEVCB_NULL,
- DEVCB_DRIVER_LINE_MEMBER(at_state, at_pit8254_out0_changed)
- }, {
- 4772720/4, /* dram refresh */
- DEVCB_NULL,
- DEVCB_NULL
- }, {
- 4772720/4, /* pio port c pin 4, and speaker polling enough */
- DEVCB_NULL,
- DEVCB_DRIVER_LINE_MEMBER(at_state, at_pit8254_out2_changed)
- }
- }
-};
-
-
/*************************************************************************
*
* PC DMA stuff
@@ -271,7 +246,7 @@ READ8_MEMBER( at_state::at_portb_r )
/* 0x10 is the dram refresh line bit, 15.085us. */
data |= (machine().time().as_ticks(110000) & 1) ? 0x10 : 0;
- if (m_pit8254->get_output(2))
+ if (m_pit_out2)
data |= 0x20;
else
data &= ~0x20; /* ps2m30 wants this */
@@ -282,7 +257,7 @@ READ8_MEMBER( at_state::at_portb_r )
WRITE8_MEMBER( at_state::at_portb_w )
{
m_at_speaker = data;
- m_pit8254->gate2_w(BIT(data, 0));
+ m_pit8254->write_gate2(BIT(data, 0));
at_speaker_set_spkrdata( BIT(data, 1));
m_channel_check = BIT(data, 3);
m_isabus->set_nmi_state((m_nmi_enabled==0) && (m_channel_check==0));
@@ -296,7 +271,7 @@ READ8_MEMBER( at_state::ps2_portb_r )
/* 0x10 is the dram refresh line bit, 15.085us. */
data |= (machine().time().as_ticks(66291) & 1) ? 0x10 : 0;
- if (m_pit8254->get_output(2))
+ if (m_pit_out2)
data |= 0x20;
else
data &= ~0x20; /* ps2m30 wants this */
@@ -354,7 +329,7 @@ MACHINE_START_MEMBER(at_state,at)
MACHINE_RESET_MEMBER(at_state,at)
{
m_at_spkrdata = 0;
- m_at_speaker_input = 0;
+ m_pit_out2 = 0;
m_dma_channel = -1;
m_cur_eop = false;
}
diff --git a/src/mess/machine/b2m.c b/src/mess/machine/b2m.c
index 3e157e7aebc..48e7df29039 100644
--- a/src/mess/machine/b2m.c
+++ b/src/mess/machine/b2m.c
@@ -146,31 +146,11 @@ WRITE_LINE_MEMBER(b2m_state::bm2_pit_out1)
m_speaker->level_w(state);
}
-const struct pit8253_interface b2m_pit8253_intf =
-{
- {
- {
- 0,
- DEVCB_NULL,
- DEVCB_DEVICE_LINE_MEMBER("pic8259", pic8259_device, ir1_w)
- },
- {
- 2000000,
- DEVCB_NULL,
- DEVCB_DRIVER_LINE_MEMBER(b2m_state,bm2_pit_out1)
- },
- {
- 2000000,
- DEVCB_NULL,
- DEVCB_DEVICE_LINE_MEMBER("pit8253", pit8253_device, clk0_w)
- }
- }
-};
-
WRITE8_MEMBER(b2m_state::b2m_8255_porta_w)
{
m_b2m_8255_porta = data;
}
+
WRITE8_MEMBER(b2m_state::b2m_8255_portb_w)
{
m_b2m_video_scroll = data;
diff --git a/src/mess/machine/bebox.c b/src/mess/machine/bebox.c
index d05848c07ad..deea3655491 100644
--- a/src/mess/machine/bebox.c
+++ b/src/mess/machine/bebox.c
@@ -681,28 +681,6 @@ WRITE_LINE_MEMBER(bebox_state::bebox_timer0_w)
}
-const struct pit8253_interface bebox_pit8254_config =
-{
- {
- {
- 4772720/4, /* heartbeat IRQ */
- DEVCB_NULL,
- DEVCB_DRIVER_LINE_MEMBER(bebox_state,bebox_timer0_w)
- },
- {
- 4772720/4, /* dram refresh */
- DEVCB_NULL,
- DEVCB_NULL
- },
- {
- 4772720/4, /* pio port c pin 4, and speaker polling enough */
- DEVCB_NULL,
- DEVCB_NULL
- }
- }
-};
-
-
/*************************************
*
* Flash ROM
diff --git a/src/mess/machine/cs4031.c b/src/mess/machine/cs4031.c
index d93f349a96e..ba35f39f55d 100644
--- a/src/mess/machine/cs4031.c
+++ b/src/mess/machine/cs4031.c
@@ -145,31 +145,20 @@ I8237_INTERFACE( dma2_config )
}
};
-const struct pit8253_interface cs4031_pit_config =
-{
- {
- {
- XTAL_14_31818MHz / 12,
- DEVCB_LINE_VCC,
- DEVCB_DEVICE_LINE_MEMBER("intc1", pic8259_device, ir0_w)
- }, {
- XTAL_14_31818MHz / 12,
- DEVCB_LINE_VCC,
- DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, cs4031_device, ctc_out1_w)
- }, {
- XTAL_14_31818MHz / 12,
- DEVCB_NULL,
- DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, cs4031_device, ctc_out2_w)
- }
- }
-};
-
static MACHINE_CONFIG_FRAGMENT( cs4031 )
MCFG_I8237_ADD("dma1", 0, dma1_config)
MCFG_I8237_ADD("dma2", 0, dma2_config)
MCFG_PIC8259_ADD("intc1", WRITELINE(cs4031_device, intc1_int_w), VCC, READ8(cs4031_device, intc1_slave_ack_r))
MCFG_PIC8259_ADD("intc2", DEVWRITELINE("intc1", pic8259_device, ir2_w), GND, NULL)
- MCFG_PIT8254_ADD("ctc", cs4031_pit_config)
+
+ MCFG_DEVICE_ADD("ctc", PIT8254, 0)
+ MCFG_PIT8253_CLK0(XTAL_14_31818MHz / 12)
+ MCFG_PIT8253_OUT0_HANDLER(DEVWRITELINE("intc1", pic8259_device, ir0_w))
+ MCFG_PIT8253_CLK1(XTAL_14_31818MHz / 12)
+ MCFG_PIT8253_OUT1_HANDLER(WRITELINE(cs4031_device, ctc_out1_w))
+ MCFG_PIT8253_CLK2(XTAL_14_31818MHz / 12)
+ MCFG_PIT8253_OUT2_HANDLER(WRITELINE(cs4031_device, ctc_out2_w))
+
MCFG_DS12885_ADD("rtc")
MCFG_MC146818_IRQ_HANDLER(WRITELINE(cs4031_device, rtc_irq_w))
MCFG_MC146818_CENTURY_INDEX(0x32)
@@ -351,7 +340,7 @@ void cs4031_device::device_reset()
void cs4031_device::device_reset_after_children()
{
// timer 2 default state
- m_ctc->gate2_w(1);
+ m_ctc->write_gate2(1);
}
@@ -974,7 +963,7 @@ WRITE8_MEMBER( cs4031_device::portb_w )
if (!BIT(m_portb, 0))
m_portb |= 1 << 5;
- m_ctc->gate2_w(BIT(m_portb, 0));
+ m_ctc->write_gate2(BIT(m_portb, 0));
m_write_spkr(!BIT(m_portb, 1));
diff --git a/src/mess/machine/dai.c b/src/mess/machine/dai.c
index b07b139aadf..c9a5082ac86 100644
--- a/src/mess/machine/dai.c
+++ b/src/mess/machine/dai.c
@@ -80,27 +80,6 @@ I8255A_INTERFACE( dai_ppi82555_intf )
DEVCB_NULL /* Port C write */
};
-const struct pit8253_interface dai_pit8253_intf =
-{
- {
- {
- 2000000,
- DEVCB_NULL,
- DEVCB_DEVICE_LINE_MEMBER("custom", dai_sound_device, set_input_ch0),
- },
- {
- 2000000,
- DEVCB_NULL,
- DEVCB_DEVICE_LINE_MEMBER("custom", dai_sound_device, set_input_ch1),
- },
- {
- 2000000,
- DEVCB_NULL,
- DEVCB_DEVICE_LINE_MEMBER("custom", dai_sound_device, set_input_ch2),
- }
- }
-};
-
IRQ_CALLBACK_MEMBER(dai_state::int_ack)
{
return m_tms5501->get_vector();
diff --git a/src/mess/machine/europc.c b/src/mess/machine/europc.c
index 2ed4760584c..46d7187ac04 100644
--- a/src/mess/machine/europc.c
+++ b/src/mess/machine/europc.c
@@ -168,7 +168,7 @@ WRITE8_MEMBER( europc_pc_state::europc_pio_w )
m_port61=data;
// if (data == 0x30) pc1640.port62 = (pc1640.port65 & 0x10) >> 4;
// else if (data == 0x34) pc1640.port62 = pc1640.port65 & 0xf;
- space.machine().device<pit8253_device>("pit8253")->gate2_w(BIT(data, 0));
+ m_pit8253->write_gate2(BIT(data, 0));
pc_speaker_set_spkrdata(BIT(data, 1));
pc_keyb_set_clock(BIT(data, 6));
break;
@@ -191,7 +191,7 @@ READ8_MEMBER( europc_pc_state::europc_pio_r )
data = m_port61;
break;
case 2:
- if (space.machine().device<pit8253_device>("pit8253")->get_output(2))
+ if (m_pit_out2)
data |= 0x20;
break;
}
diff --git a/src/mess/machine/genpc.c b/src/mess/machine/genpc.c
index 7b9dbe58e9b..8599dbce187 100644
--- a/src/mess/machine/genpc.c
+++ b/src/mess/machine/genpc.c
@@ -190,7 +190,7 @@ I8237_INTERFACE( pc_dma8237_config )
WRITE_LINE_MEMBER(ibm5160_mb_device::pc_speaker_set_spkrdata)
{
m_pc_spkrdata = state ? 1 : 0;
- m_speaker->level_w(m_pc_spkrdata & m_pc_input);
+ m_speaker->level_w(m_pc_spkrdata & m_pit_out2);
}
@@ -214,30 +214,11 @@ WRITE_LINE_MEMBER( ibm5160_mb_device::pc_pit8253_out1_changed )
WRITE_LINE_MEMBER( ibm5160_mb_device::pc_pit8253_out2_changed )
{
- m_pc_input = state ? 1 : 0;
- m_speaker->level_w(m_pc_spkrdata & m_pc_input);
+ m_pit_out2 = state ? 1 : 0;
+ m_speaker->level_w(m_pc_spkrdata & m_pit_out2);
}
-const struct pit8253_interface pc_pit8253_config =
-{
- {
- {
- XTAL_14_31818MHz/12, /* heartbeat IRQ */
- DEVCB_NULL,
- DEVCB_DEVICE_LINE_MEMBER("pic8259", pic8259_device, ir0_w)
- }, {
- XTAL_14_31818MHz/12, /* dram refresh */
- DEVCB_NULL,
- DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, ibm5160_mb_device, pc_pit8253_out1_changed)
- }, {
- XTAL_14_31818MHz/12, /* pio port c pin 4, and speaker polling enough */
- DEVCB_NULL,
- DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, ibm5160_mb_device, pc_pit8253_out2_changed)
- }
- }
-};
-
/**********************************************************
*
* PPI8255 interface
@@ -370,7 +351,6 @@ READ8_MEMBER (ibm5160_mb_device::pc_ppi_porta_r)
READ8_MEMBER ( ibm5160_mb_device::pc_ppi_portc_r )
{
- int timer2_output = m_pit8253->get_output(2);
int data=0xff;
data&=~0x80; // no parity error
@@ -391,9 +371,9 @@ READ8_MEMBER ( ibm5160_mb_device::pc_ppi_portc_r )
if ( m_ppi_portb & 0x01 )
{
- data = ( data & ~0x10 ) | ( timer2_output ? 0x10 : 0x00 );
+ data = ( data & ~0x10 ) | ( m_pit_out2 ? 0x10 : 0x00 );
}
- data = ( data & ~0x20 ) | ( timer2_output ? 0x20 : 0x00 );
+ data = ( data & ~0x20 ) | ( m_pit_out2 ? 0x20 : 0x00 );
return data;
}
@@ -406,7 +386,7 @@ WRITE8_MEMBER( ibm5160_mb_device::pc_ppi_portb_w )
m_ppi_portc_switch_high = data & 0x08;
m_ppi_keyboard_clear = data & 0x80;
m_ppi_keyb_clock = data & 0x40;
- m_pit8253->gate2_w(BIT(data, 0));
+ m_pit8253->write_gate2(BIT(data, 0));
pc_speaker_set_spkrdata( data & 0x02 );
/* If PB7 is set clear the shift register and reset the IRQ line */
@@ -492,7 +472,13 @@ const device_type IBM5160_MOTHERBOARD = &device_creator<ibm5160_mb_device>;
//**************************************************************************
static MACHINE_CONFIG_FRAGMENT( ibm5160_mb_config )
- MCFG_PIT8253_ADD( "pit8253", pc_pit8253_config )
+ MCFG_DEVICE_ADD("pit8253", PIT8253, 0)
+ MCFG_PIT8253_CLK0(XTAL_14_31818MHz/12) /* heartbeat IRQ */
+ MCFG_PIT8253_OUT0_HANDLER(DEVWRITELINE("pic8259", pic8259_device, ir0_w))
+ MCFG_PIT8253_CLK1(XTAL_14_31818MHz/12) /* dram refresh */
+ MCFG_PIT8253_OUT1_HANDLER(WRITELINE(ibm5160_mb_device, pc_pit8253_out1_changed))
+ MCFG_PIT8253_CLK2(XTAL_14_31818MHz/12) /* pio port c pin 4, and speaker polling enough */
+ MCFG_PIT8253_OUT2_HANDLER(WRITELINE(ibm5160_mb_device, pc_pit8253_out2_changed))
MCFG_I8237_ADD( "dma8237", XTAL_14_31818MHz/3, pc_dma8237_config )
@@ -685,7 +671,7 @@ void ibm5160_mb_device::device_reset()
m_u73_q2 = 0;
m_out1 = 2; // initial state of pit output is undefined
m_pc_spkrdata = 0;
- m_pc_input = 0;
+ m_pit_out2 = 0;
m_dma_channel = -1;
m_cur_eop = false;
memset(m_dma_offset,0,sizeof(m_dma_offset));
@@ -807,7 +793,6 @@ READ8_MEMBER (ibm5150_mb_device::pc_ppi_porta_r)
READ8_MEMBER ( ibm5150_mb_device::pc_ppi_portc_r )
{
- int timer2_output = m_pit8253->get_output(2);
int data=0xff;
data&=~0x80; // no parity error
@@ -865,10 +850,10 @@ READ8_MEMBER ( ibm5150_mb_device::pc_ppi_portc_r )
{
if ( m_ppi_portb & 0x01 )
{
- data = ( data & ~0x10 ) | ( timer2_output ? 0x10 : 0x00 );
+ data = ( data & ~0x10 ) | ( m_pit_out2 ? 0x10 : 0x00 );
}
}
- data = ( data & ~0x20 ) | ( timer2_output ? 0x20 : 0x00 );
+ data = ( data & ~0x20 ) | ( m_pit_out2 ? 0x20 : 0x00 );
return data;
}
@@ -881,7 +866,7 @@ WRITE8_MEMBER( ibm5150_mb_device::pc_ppi_portb_w )
m_ppi_portc_switch_high = data & 0x08;
m_ppi_keyboard_clear = data & 0x80;
m_ppi_keyb_clock = data & 0x40;
- m_pit8253->gate2_w(BIT(data, 0));
+ m_pit8253->write_gate2(BIT(data, 0));
pc_speaker_set_spkrdata( data & 0x02 );
m_cassette->change_state(( data & 0x08 ) ? CASSETTE_MOTOR_DISABLED : CASSETTE_MOTOR_ENABLED,CASSETTE_MASK_MOTOR);
@@ -992,7 +977,7 @@ WRITE8_MEMBER( ec1841_mb_device::pc_ppi_portb_w )
m_ppi_portc_switch_high = data & 0x04;
m_ppi_keyboard_clear = data & 0x80;
m_ppi_keyb_clock = data & 0x40;
- m_pit8253->gate2_w(BIT(data, 0));
+ m_pit8253->write_gate2(BIT(data, 0));
pc_speaker_set_spkrdata( data & 0x02 );
/* If PB7 is set clear the shift register and reset the IRQ line */
@@ -1010,7 +995,6 @@ WRITE8_MEMBER( ec1841_mb_device::pc_ppi_portb_w )
READ8_MEMBER ( ec1841_mb_device::pc_ppi_portc_r )
{
- int timer2_output = m_pit8253->get_output(2);
int data=0xff;
data&=~0x80; // no parity error
@@ -1021,7 +1005,7 @@ READ8_MEMBER ( ec1841_mb_device::pc_ppi_portc_r )
data = (data & 0xf0) | (ioport("SA2")->read() & 0x0f);
}
- data = ( data & ~0x20 ) | ( timer2_output ? 0x20 : 0x00 );
+ data = ( data & ~0x20 ) | ( m_pit_out2 ? 0x20 : 0x00 );
return data;
}
diff --git a/src/mess/machine/isa_ibm_mfc.c b/src/mess/machine/isa_ibm_mfc.c
index ed98b8ee609..e9beae68368 100644
--- a/src/mess/machine/isa_ibm_mfc.c
+++ b/src/mess/machine/isa_ibm_mfc.c
@@ -264,27 +264,6 @@ WRITE_LINE_MEMBER( isa8_ibm_mfc_device::d8253_out1 )
set_pc_interrupt(PC_IRQ_TIMERB, 1);
}
-static const struct pit8253_interface d8253_intf =
-{
- {
- {
- XTAL_4MHz / 8,
- DEVCB_NULL,
- DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, isa8_ibm_mfc_device, d8253_out0)
- },
- {
- 0,
- DEVCB_NULL,
- DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, isa8_ibm_mfc_device, d8253_out1)
- },
- {
- XTAL_4MHz / 2,
- DEVCB_NULL,
- DEVCB_DEVICE_LINE_MEMBER("d8253", pit8253_device, clk1_w)
- }
- }
-};
-
//-------------------------------------------------
// uPD71051 USART
@@ -324,7 +303,13 @@ static MACHINE_CONFIG_FRAGMENT( ibm_mfc )
MCFG_DEVICE_ADD("usart_clock", CLOCK, XTAL_4MHz / 8) // 500KHz
MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(isa8_ibm_mfc_device, write_usart_clock))
- MCFG_PIT8253_ADD("d8253", d8253_intf)
+ MCFG_DEVICE_ADD("d8253", PIT8253, 0)
+ MCFG_PIT8253_CLK0(XTAL_4MHz / 8)
+ MCFG_PIT8253_OUT0_HANDLER(WRITELINE(isa8_ibm_mfc_device, d8253_out0))
+ MCFG_PIT8253_CLK1(0)
+ MCFG_PIT8253_OUT1_HANDLER(WRITELINE(isa8_ibm_mfc_device, d8253_out1))
+ MCFG_PIT8253_CLK2(XTAL_4MHz / 2)
+ MCFG_PIT8253_OUT2_HANDLER(DEVWRITELINE("d8253", pit8253_device, write_clk1))
MCFG_SPEAKER_STANDARD_STEREO("ymleft", "ymright")
MCFG_YM2151_ADD("ym2151", XTAL_4MHz)
diff --git a/src/mess/machine/mbc55x.c b/src/mess/machine/mbc55x.c
index a0623f6d38f..bde0c50d110 100644
--- a/src/mess/machine/mbc55x.c
+++ b/src/mess/machine/mbc55x.c
@@ -124,29 +124,6 @@ IRQ_CALLBACK_MEMBER(mbc55x_state::mbc55x_irq_callback)
return m_pic->inta_r();
}
-/* PIT8253 Configuration */
-
-const struct pit8253_interface mbc55x_pit8253_config =
-{
- {
- {
- PIT_C0_CLOCK,
- DEVCB_NULL,
- DEVCB_DEVICE_LINE_MEMBER(PIC8259_TAG, pic8259_device, ir0_w)
- },
- {
- PIT_C1_CLOCK,
- DEVCB_NULL,
- DEVCB_DEVICE_LINE_MEMBER(PIC8259_TAG, pic8259_device, ir1_w)
- },
- {
- PIT_C2_CLOCK,
- DEVCB_NULL,
- DEVCB_DRIVER_LINE_MEMBER(mbc55x_state, pit8253_t2)
- }
- }
-};
-
READ8_MEMBER(mbc55x_state::mbcpit8253_r)
{
return m_pit->read(space, offset >> 1);
@@ -160,7 +137,7 @@ WRITE8_MEMBER(mbc55x_state::mbcpit8253_w)
WRITE_LINE_MEMBER( mbc55x_state::pit8253_t2 )
{
m_kb_uart->write_txc(state);
- m_kb_uart->write_txc(state);
+ m_kb_uart->write_rxc(state);
}
/* Video ram page register */
diff --git a/src/mess/machine/mz700.c b/src/mess/machine/mz700.c
index 6ced1c7067f..be894cba8de 100644
--- a/src/mess/machine/mz700.c
+++ b/src/mess/machine/mz700.c
@@ -45,30 +45,6 @@ I8255_INTERFACE( mz700_ppi8255_interface )
};
-
-
-
-const struct pit8253_interface mz700_pit8253_config =
-{
- {
- /* clockin gate callback */
- { XTAL_17_73447MHz/20, DEVCB_NULL, DEVCB_DRIVER_LINE_MEMBER(mz_state,pit_out0_changed) },
- { 15611.0, DEVCB_LINE_VCC, DEVCB_DEVICE_LINE_MEMBER("pit8253", pit8253_device, clk2_w) },
- { 0, DEVCB_LINE_VCC, DEVCB_DRIVER_LINE_MEMBER(mz_state,pit_irq_2) },
- }
-};
-
-const struct pit8253_interface mz800_pit8253_config =
-{
- {
- /* clockin gate callback */
- { XTAL_17_73447MHz/16, DEVCB_NULL, DEVCB_DRIVER_LINE_MEMBER(mz_state,pit_out0_changed) },
- { 15611.0, DEVCB_LINE_VCC, DEVCB_DEVICE_LINE_MEMBER("pit8253", pit8253_device, clk2_w) },
- { 0, DEVCB_LINE_VCC, DEVCB_DRIVER_LINE_MEMBER(mz_state,pit_irq_2) },
- }
-};
-
-
/***************************************************************************
INITIALIZATIoN
***************************************************************************/
@@ -125,7 +101,7 @@ READ8_MEMBER(mz_state::mz700_e008_r)
WRITE8_MEMBER(mz_state::mz700_e008_w)
{
- m_pit->gate0_w(BIT(data, 0));
+ m_pit->write_gate0(BIT(data, 0));
}
diff --git a/src/mess/machine/mz80.c b/src/mess/machine/mz80.c
index 420d8231551..59e7de82f4f 100644
--- a/src/mess/machine/mz80.c
+++ b/src/mess/machine/mz80.c
@@ -81,16 +81,6 @@ I8255_INTERFACE( mz80k_8255_int )
DEVCB_DRIVER_MEMBER(mz80_state, mz80k_8255_portc_w),
};
-const struct pit8253_interface mz80k_pit8253_config =
-{
- {
- /* clockin gate callback */
- { XTAL_8MHz/ 4, DEVCB_NULL, DEVCB_DRIVER_LINE_MEMBER(mz80_state, pit_out0_changed) },
- { XTAL_8MHz/256, DEVCB_NULL, DEVCB_DEVICE_LINE_MEMBER("pit8253", pit8253_device, clk2_w) },
- { 0, DEVCB_NULL, DEVCB_DRIVER_LINE_MEMBER(mz80_state, pit_out2_changed) },
- }
-};
-
READ8_MEMBER( mz80_state::mz80k_strobe_r )
{
return 0x7e | (UINT8)m_mz80k_tempo_strobe;
@@ -98,5 +88,5 @@ READ8_MEMBER( mz80_state::mz80k_strobe_r )
WRITE8_MEMBER( mz80_state::mz80k_strobe_w )
{
- m_pit->gate0_w(BIT(data, 0));
+ m_pit->write_gate0(BIT(data, 0));
}
diff --git a/src/mess/machine/pc.c b/src/mess/machine/pc.c
index 608ceb06eac..f607929bccb 100644
--- a/src/mess/machine/pc.c
+++ b/src/mess/machine/pc.c
@@ -252,7 +252,7 @@ WRITE_LINE_MEMBER(pc_state::pcjr_pic8259_set_int_line)
*************************************************************************/
UINT8 pc_state::pc_speaker_get_spk()
{
- return m_pc_spkrdata & m_pc_input;
+ return m_pc_spkrdata & m_pit_out2;
}
@@ -263,13 +263,6 @@ void pc_state::pc_speaker_set_spkrdata(UINT8 data)
}
-void pc_state::pc_speaker_set_input(UINT8 data)
-{
- m_pc_input = data ? 1 : 0;
- m_speaker->level_w(pc_speaker_get_spk());
-}
-
-
/*************************************************************
*
* pit8253 configuration
@@ -290,55 +283,11 @@ WRITE_LINE_MEMBER(pc_state::ibm5150_pit8253_out1_changed)
WRITE_LINE_MEMBER(pc_state::ibm5150_pit8253_out2_changed)
{
- pc_speaker_set_input( state );
+ m_pit_out2 = state ? 1 : 0;
+ m_speaker->level_w(pc_speaker_get_spk());
}
-const struct pit8253_interface ibm5150_pit8253_config =
-{
- {
- {
- XTAL_14_31818MHz/12, /* heartbeat IRQ */
- DEVCB_NULL,
- DEVCB_DEVICE_LINE_MEMBER("pic8259", pic8259_device, ir0_w)
- }, {
- XTAL_14_31818MHz/12, /* dram refresh */
- DEVCB_NULL,
- DEVCB_DRIVER_LINE_MEMBER(pc_state,ibm5150_pit8253_out1_changed)
- }, {
- XTAL_14_31818MHz/12, /* pio port c pin 4, and speaker polling enough */
- DEVCB_NULL,
- DEVCB_DRIVER_LINE_MEMBER(pc_state,ibm5150_pit8253_out2_changed)
- }
- }
-};
-
-
-/*
- On the PC Jr the input for clock 1 seems to be selectable
- based on bit 4(/5?) written to output port A0h. This is not
- supported yet.
- */
-
-const struct pit8253_interface pcjr_pit8253_config =
-{
- {
- {
- XTAL_14_31818MHz/12, /* heartbeat IRQ */
- DEVCB_NULL,
- DEVCB_DEVICE_LINE_MEMBER("pic8259", pic8259_device, ir0_w)
- }, {
- XTAL_14_31818MHz/12, /* dram refresh */
- DEVCB_NULL,
- DEVCB_NULL
- }, {
- XTAL_14_31818MHz/12, /* pio port c pin 4, and speaker polling enough */
- DEVCB_NULL,
- DEVCB_DRIVER_LINE_MEMBER(pc_state,ibm5150_pit8253_out2_changed)
- }
- }
-};
-
/**********************************************************
*
* COM hardware
@@ -645,7 +594,6 @@ READ8_MEMBER(pc_state::ibm5160_ppi_porta_r)
READ8_MEMBER(pc_state::ibm5160_ppi_portc_r)
{
- int timer2_output = m_pit8253->get_output(2);
int data=0xff;
data&=~0x80; // no parity error
@@ -667,9 +615,9 @@ READ8_MEMBER(pc_state::ibm5160_ppi_portc_r)
if ( m_ppi_portb & 0x01 )
{
- data = ( data & ~0x10 ) | ( timer2_output ? 0x10 : 0x00 );
+ data = ( data & ~0x10 ) | ( m_pit_out2 ? 0x10 : 0x00 );
}
- data = ( data & ~0x20 ) | ( timer2_output ? 0x20 : 0x00 );
+ data = ( data & ~0x20 ) | ( m_pit_out2 ? 0x20 : 0x00 );
return data;
}
@@ -682,7 +630,7 @@ WRITE8_MEMBER(pc_state::ibm5160_ppi_portb_w)
m_ppi_portc_switch_high = data & 0x08;
m_ppi_keyboard_clear = data & 0x80;
m_ppi_keyb_clock = data & 0x40;
- m_pit8253->gate2_w(BIT(data, 0));
+ m_pit8253->write_gate2(BIT(data, 0));
pc_speaker_set_spkrdata( data & 0x02 );
m_ppi_clock_signal = ( m_ppi_keyb_clock ) ? 1 : 0;
@@ -743,7 +691,7 @@ WRITE8_MEMBER(pc_state::pc_ppi_portb_w)
m_ppi_portc_switch_high = data & 0x08;
m_ppi_keyboard_clear = data & 0x80;
m_ppi_keyb_clock = data & 0x40;
- m_pit8253->gate2_w(BIT(data, 0));
+ m_pit8253->write_gate2(BIT(data, 0));
pc_speaker_set_spkrdata( data & 0x02 );
pc_keyb_set_clock( m_ppi_keyb_clock );
@@ -768,7 +716,7 @@ WRITE8_MEMBER(pc_state::pcjr_ppi_portb_w)
/* KB controller port B */
m_ppi_portb = data;
m_ppi_portc_switch_high = data & 0x08;
- machine().device<pit8253_device>("pit8253")->gate2_w(BIT(data, 0));
+ m_pit8253->write_gate2(BIT(data, 0));
pc_speaker_set_spkrdata( data & 0x02 );
m_cassette->change_state(( data & 0x08 ) ? CASSETTE_MOTOR_DISABLED : CASSETTE_MOTOR_ENABLED,CASSETTE_MASK_MOTOR);
@@ -801,7 +749,6 @@ READ8_MEMBER(pc_state::pcjr_ppi_porta_r)
*/
READ8_MEMBER(pc_state::pcjr_ppi_portc_r)
{
- int timer2_output = machine().device<pit8253_device>("pit8253")->get_output(2);
int data=0xff;
data&=~0x80;
@@ -826,10 +773,10 @@ READ8_MEMBER(pc_state::pcjr_ppi_portc_r)
{
if ( m_ppi_portb & 0x01 )
{
- data = ( data & ~0x10 ) | ( timer2_output ? 0x10 : 0x00 );
+ data = ( data & ~0x10 ) | ( m_pit_out2 ? 0x10 : 0x00 );
}
}
- data = ( data & ~0x20 ) | ( timer2_output ? 0x20 : 0x00 );
+ data = ( data & ~0x20 ) | ( m_pit_out2 ? 0x20 : 0x00 );
data = ( data & ~0x40 ) | ( ( pcjr_keyb.raw_keyb_data & 0x01 ) ? 0x40 : 0x00 );
return data;
@@ -1123,7 +1070,7 @@ MACHINE_RESET_MEMBER(pc_state,pc)
m_u73_q2 = 0;
m_out1 = 0;
m_pc_spkrdata = 0;
- m_pc_input = 1;
+ m_pit_out2 = 1;
m_dma_channel = -1;
m_cur_eop = 0;
memset(m_dma_offset,0,sizeof(m_dma_offset));
@@ -1156,7 +1103,7 @@ MACHINE_RESET_MEMBER(pc_state,pcjr)
m_u73_q2 = 0;
m_out1 = 0;
m_pc_spkrdata = 0;
- m_pc_input = 1;
+ m_pit_out2 = 1;
m_dma_channel = -1;
memset(m_dma_offset,0,sizeof(m_dma_offset));
m_ppi_portc_switch_high = 0;
diff --git a/src/mess/machine/pk8020.c b/src/mess/machine/pk8020.c
index fbb20425edd..2d485bbdd11 100644
--- a/src/mess/machine/pk8020.c
+++ b/src/mess/machine/pk8020.c
@@ -920,27 +920,6 @@ WRITE_LINE_MEMBER(pk8020_state::pk8020_pit_out1)
}
-const struct pit8253_interface pk8020_pit8253_intf =
-{
- {
- {
- XTAL_20MHz / 10,
- DEVCB_NULL,
- DEVCB_DRIVER_LINE_MEMBER(pk8020_state,pk8020_pit_out0)
- },
- {
- XTAL_20MHz / 10,
- DEVCB_NULL,
- DEVCB_DRIVER_LINE_MEMBER(pk8020_state,pk8020_pit_out1)
- },
- {
- (XTAL_20MHz / 8) / 164,
- DEVCB_NULL,
- DEVCB_DEVICE_LINE_MEMBER("pic8259", pic8259_device, ir5_w)
- }
- }
-};
-
WRITE_LINE_MEMBER(pk8020_state::pk8020_pic_set_int_line)
{
m_maincpu->set_input_line(0, state ? HOLD_LINE : CLEAR_LINE);
diff --git a/src/mess/machine/pmd85.c b/src/mess/machine/pmd85.c
index 898a3640ca8..86e511922ed 100644
--- a/src/mess/machine/pmd85.c
+++ b/src/mess/machine/pmd85.c
@@ -382,35 +382,6 @@ WRITE8_MEMBER(pmd85_state::pmd85_ppi_2_portc_w)
/*******************************************************************************
- I/O board 8253
- --------------
-
- Timer 0:
- OUT0 - external interfaces connector (K2)
- CLK0 - external interfaces connector (K2)
- GATE0 - external interfaces connector (K2), default = 1
- Timer 1:
- OUT0 - external interfaces connector (K2), i8251 (for V24 only)
- CLK0 - hardwired to 2 MHz system clock
- GATE0 - external interfaces connector (K2), default = 1
- Timer 2:
- OUT0 - unused
- CLK0 - hardwired to 1HZ signal generator
- GATE0 - hardwired to 5V, default = 1
-
-*******************************************************************************/
-
-const struct pit8253_interface pmd85_pit8253_interface =
-{
- {
- { 0, DEVCB_NULL, DEVCB_NULL },
- { 2000000, DEVCB_NULL, DEVCB_NULL },
- { 1, DEVCB_LINE_VCC, DEVCB_NULL }
- }
-};
-
-/*******************************************************************************
-
I/O board external interfaces connector (K2)
--------------------------------------------
diff --git a/src/mess/machine/pp01.c b/src/mess/machine/pp01.c
index 5f92dda8da7..fd957c3929f 100644
--- a/src/mess/machine/pp01.c
+++ b/src/mess/machine/pp01.c
@@ -159,27 +159,6 @@ WRITE_LINE_MEMBER(pp01_state::pp01_pit_out1)
{
}
-const struct pit8253_interface pp01_pit8253_intf =
-{
- {
- {
- 0,
- DEVCB_NULL,
- DEVCB_DRIVER_LINE_MEMBER(pp01_state,pp01_pit_out0)
- },
- {
- 2000000,
- DEVCB_NULL,
- DEVCB_DRIVER_LINE_MEMBER(pp01_state,pp01_pit_out1)
- },
- {
- 2000000,
- DEVCB_NULL,
- DEVCB_DEVICE_LINE_MEMBER("pit8253", pit8253_device, clk0_w)
- }
- }
-};
-
READ8_MEMBER(pp01_state::pp01_8255_porta_r)
{
return m_video_scroll;
diff --git a/src/mess/machine/southbridge.c b/src/mess/machine/southbridge.c
index a89796eef95..52867b7b22b 100644
--- a/src/mess/machine/southbridge.c
+++ b/src/mess/machine/southbridge.c
@@ -10,25 +10,6 @@
#include "bus/pc_kbd/keyboards.h"
-const struct pit8253_interface at_pit8254_config =
-{
- {
- {
- 4772720/4, /* heartbeat IRQ */
- DEVCB_NULL,
- DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, southbridge_device, at_pit8254_out0_changed)
- }, {
- 4772720/4, /* dram refresh */
- DEVCB_NULL,
- DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, southbridge_device, at_pit8254_out1_changed)
- }, {
- 4772720/4, /* pio port c pin 4, and speaker polling enough */
- DEVCB_NULL,
- DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, southbridge_device, at_pit8254_out2_changed)
- }
- }
-};
-
I8237_INTERFACE( at_dma8237_1_config )
{
DEVCB_DEVICE_LINE_MEMBER("dma8237_2",am9517a_device,dreq0_w),
@@ -102,7 +83,13 @@ static SLOT_INTERFACE_START(pc_isa_onboard)
SLOT_INTERFACE_END
static MACHINE_CONFIG_FRAGMENT( southbridge )
- MCFG_PIT8254_ADD( "pit8254", at_pit8254_config )
+ MCFG_DEVICE_ADD("pit8254", PIT8254, 0)
+ MCFG_PIT8253_CLK0(4772720/4) /* heartbeat IRQ */
+ MCFG_PIT8253_OUT0_HANDLER(WRITELINE(southbridge_device, at_pit8254_out0_changed))
+ MCFG_PIT8253_CLK1(4772720/4) /* dram refresh */
+ MCFG_PIT8253_OUT1_HANDLER(WRITELINE(southbridge_device, at_pit8254_out1_changed))
+ MCFG_PIT8253_CLK2(4772720/4) /* pio port c pin 4, and speaker polling enough */
+ MCFG_PIT8253_OUT2_HANDLER(WRITELINE(southbridge_device, at_pit8254_out2_changed))
MCFG_I8237_ADD( "dma8237_1", XTAL_14_31818MHz/3, at_dma8237_1_config )
MCFG_I8237_ADD( "dma8237_2", XTAL_14_31818MHz/3, at_dma8237_2_config )
@@ -234,7 +221,7 @@ void southbridge_device::device_start()
void southbridge_device::device_reset()
{
m_at_spkrdata = 0;
- m_at_speaker_input = 0;
+ m_pit_out2 = 0;
m_dma_channel = -1;
m_cur_eop = false;
m_nmi_enabled = 0;
@@ -263,13 +250,7 @@ READ8_MEMBER( southbridge_device::get_slave_ack )
void southbridge_device::at_speaker_set_spkrdata(UINT8 data)
{
m_at_spkrdata = data ? 1 : 0;
- m_speaker->level_w(m_at_spkrdata & m_at_speaker_input);
-}
-
-void southbridge_device::at_speaker_set_input(UINT8 data)
-{
- m_at_speaker_input = data ? 1 : 0;
- m_speaker->level_w(m_at_spkrdata & m_at_speaker_input);
+ m_speaker->level_w(m_at_spkrdata & m_pit_out2);
}
@@ -294,7 +275,8 @@ WRITE_LINE_MEMBER( southbridge_device::at_pit8254_out1_changed )
WRITE_LINE_MEMBER( southbridge_device::at_pit8254_out2_changed )
{
- at_speaker_set_input( state );
+ m_pit_out2 = state ? 1 : 0;
+ m_speaker->level_w(m_at_spkrdata & m_pit_out2);
}
/*************************************************************************
@@ -462,7 +444,7 @@ READ8_MEMBER( southbridge_device::at_portb_r )
/* 0x10 is the dram refresh line bit on the 5170, just a timer here, 15.085us. */
data |= m_refresh ? 0x10 : 0;
- if (m_pit8254->get_output(2))
+ if (m_pit_out2)
data |= 0x20;
else
data &= ~0x20; /* ps2m30 wants this */
@@ -473,7 +455,7 @@ READ8_MEMBER( southbridge_device::at_portb_r )
WRITE8_MEMBER( southbridge_device::at_portb_w )
{
m_at_speaker = data;
- m_pit8254->gate2_w(BIT(data, 0));
+ m_pit8254->write_gate2(BIT(data, 0));
at_speaker_set_spkrdata( BIT(data, 1));
m_channel_check = BIT(data, 3);
m_isabus->set_nmi_state((m_nmi_enabled==0) && (m_channel_check==0));
diff --git a/src/mess/machine/southbridge.h b/src/mess/machine/southbridge.h
index a178fa0b156..4a800604817 100644
--- a/src/mess/machine/southbridge.h
+++ b/src/mess/machine/southbridge.h
@@ -111,7 +111,7 @@ public:
DECLARE_WRITE8_MEMBER(pc_dma_write_word);
protected:
UINT8 m_at_spkrdata;
- UINT8 m_at_speaker_input;
+ UINT8 m_pit_out2;
int m_dma_channel;
bool m_cur_eop;
UINT8 m_dma_offset[2][4];
@@ -120,7 +120,6 @@ protected:
UINT8 m_at_speaker;
bool m_refresh;
void at_speaker_set_spkrdata(UINT8 data);
- void at_speaker_set_input(UINT8 data);
UINT8 m_channel_check;
UINT8 m_nmi_enabled;
diff --git a/src/mess/machine/special.c b/src/mess/machine/special.c
index e03c96a427e..afba38f10a3 100644
--- a/src/mess/machine/special.c
+++ b/src/mess/machine/special.c
@@ -151,9 +151,9 @@ void special_state::device_timer(emu_timer &timer, device_timer_id id, int param
break;
case TIMER_PIT8253_GATES:
{
- m_pit->gate0_w(0);
- m_pit->gate1_w(0);
- m_pit->gate2_w(0);
+ m_pit->write_gate0(0);
+ m_pit->write_gate1(0);
+ m_pit->write_gate2(0);
break;
}
default:
@@ -251,28 +251,6 @@ WRITE_LINE_MEMBER( special_state::specimx_pit8253_out2_changed )
}
-
-const struct pit8253_interface specimx_pit8253_intf =
-{
- {
- {
- 2000000,
- DEVCB_NULL,
- DEVCB_DRIVER_LINE_MEMBER(special_state, specimx_pit8253_out0_changed)
- },
- {
- 2000000,
- DEVCB_NULL,
- DEVCB_DRIVER_LINE_MEMBER(special_state, specimx_pit8253_out1_changed)
- },
- {
- 2000000,
- DEVCB_NULL,
- DEVCB_DRIVER_LINE_MEMBER(special_state, specimx_pit8253_out2_changed)
- }
- }
-};
-
MACHINE_START_MEMBER(special_state,specimx)
{
m_specimx_audio = machine().device<specimx_sound_device>("custom");
diff --git a/src/mess/machine/tandy1t.c b/src/mess/machine/tandy1t.c
index c97eaf69e1d..068afa3eb70 100644
--- a/src/mess/machine/tandy1t.c
+++ b/src/mess/machine/tandy1t.c
@@ -181,7 +181,7 @@ WRITE8_MEMBER( tandy_pc_state::tandy1000_pio_w )
{
case 1:
m_tandy_ppi_portb = data;
- space.machine().device<pit8253_device>("pit8253")->gate2_w(BIT(data, 0));
+ m_pit8253->write_gate2(BIT(data, 0));
pc_speaker_set_spkrdata( data & 0x02 );
// sx enables keyboard from bit 3, others bit 6, hopefully theres no conflict
pc_keyb_set_clock(data&0x48);