diff options
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 |
commit | 38d827e9939c7540ebb8dccf0c5a0a869d741c11 (patch) | |
tree | 0933d63fd2a390d3d85a1a9fa04eb77608416c04 /src/mess/drivers | |
parent | ed701f13e738bccb2284d9ddfb4ab9a03f89ff2d (diff) |
Converted PIT8253 to DEVCB2 [smf]
Diffstat (limited to 'src/mess/drivers')
48 files changed, 621 insertions, 1001 deletions
diff --git a/src/mess/drivers/amstr_pc.c b/src/mess/drivers/amstr_pc.c index caa7f428311..a4d148476c0 100644 --- a/src/mess/drivers/amstr_pc.c +++ b/src/mess/drivers/amstr_pc.c @@ -255,7 +255,13 @@ static MACHINE_CONFIG_START( pc200, amstrad_pc_state ) MCFG_MACHINE_START_OVERRIDE(amstrad_pc_state,pc) MCFG_MACHINE_RESET_OVERRIDE(amstrad_pc_state,pc) - MCFG_PIT8253_ADD( "pit8253", ibm5150_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(pc_state, ibm5150_pit8253_out1_changed)) + MCFG_PIT8253_CLK2(XTAL_14_31818MHz/12) /* pio port c pin 4, and speaker polling enough */ + MCFG_PIT8253_OUT2_HANDLER(WRITELINE(pc_state, ibm5150_pit8253_out2_changed)) MCFG_I8237_ADD( "dma8237", XTAL_14_31818MHz/3, ibm5150_dma8237_config ) @@ -359,7 +365,13 @@ static MACHINE_CONFIG_START( ppc512, amstrad_pc_state ) MCFG_MACHINE_START_OVERRIDE(amstrad_pc_state,pc) MCFG_MACHINE_RESET_OVERRIDE(amstrad_pc_state,pc) - MCFG_PIT8253_ADD( "pit8253", ibm5150_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(pc_state, ibm5150_pit8253_out1_changed)) + MCFG_PIT8253_CLK2(XTAL_14_31818MHz/12) /* pio port c pin 4, and speaker polling enough */ + MCFG_PIT8253_OUT2_HANDLER(WRITELINE(pc_state, ibm5150_pit8253_out2_changed)) MCFG_I8237_ADD( "dma8237", XTAL_14_31818MHz/3, ibm5150_dma8237_config ) diff --git a/src/mess/drivers/apc.c b/src/mess/drivers/apc.c index 2cf150a7832..68110b82301 100644 --- a/src/mess/drivers/apc.c +++ b/src/mess/drivers/apc.c @@ -841,24 +841,6 @@ static ADDRESS_MAP_START( upd7220_2_map, AS_0, 8, apc_state ) AM_RANGE(0x00000, 0x3ffff) AM_RAM AM_SHARE("video_ram_2") ADDRESS_MAP_END -static const struct pit8253_interface pit8253_config = -{ - { - { - MAIN_CLOCK, /* heartbeat IRQ */ - DEVCB_NULL, - DEVCB_DEVICE_LINE_MEMBER("pic8259_master", pic8259_device, ir3_w) - }, { - MAIN_CLOCK, /* Memory Refresh */ - DEVCB_NULL, - DEVCB_NULL - }, { - MAIN_CLOCK, /* RS-232c */ - DEVCB_NULL, - DEVCB_NULL - } - } -}; /* irq assignment: (note: documentation shows ODA Printer at ir7 master, but clearly everything is shifted one place due of the @@ -1011,7 +993,12 @@ static MACHINE_CONFIG_START( apc, apc_state ) MCFG_CPU_PROGRAM_MAP(apc_map) MCFG_CPU_IO_MAP(apc_io) - MCFG_PIT8253_ADD( "pit8253", pit8253_config ) + MCFG_DEVICE_ADD("pit8253", PIT8253, 0) + MCFG_PIT8253_CLK0(MAIN_CLOCK) /* heartbeat IRQ */ + MCFG_PIT8253_OUT0_HANDLER(DEVWRITELINE("pic8259_master", pic8259_device, ir3_w)) + MCFG_PIT8253_CLK1(MAIN_CLOCK) /* Memory Refresh */ + MCFG_PIT8253_CLK2(MAIN_CLOCK) /* RS-232c */ + MCFG_PIC8259_ADD( "pic8259_master", WRITELINE(apc_state, apc_master_set_int_line), VCC, READ8(apc_state,get_slave_ack) ) MCFG_PIC8259_ADD( "pic8259_slave", DEVWRITELINE("pic8259_master", pic8259_device, ir7_w), GND, NULL ) // TODO: check ir7_w MCFG_I8237_ADD("i8237", MAIN_CLOCK, dmac_intf) diff --git a/src/mess/drivers/apogee.c b/src/mess/drivers/apogee.c index 375b233ed01..23cd7d88798 100644 --- a/src/mess/drivers/apogee.c +++ b/src/mess/drivers/apogee.c @@ -178,25 +178,6 @@ WRITE_LINE_MEMBER(apogee_state::pit8253_out2_changed) m_speaker->level_w(m_out0+m_out1+m_out2); } -const struct pit8253_interface apogee_pit8253_config = -{ - { - { - XTAL_16MHz/9, - DEVCB_NULL, - DEVCB_DRIVER_LINE_MEMBER(apogee_state,pit8253_out0_changed) - }, { - XTAL_16MHz/9, - DEVCB_NULL, - DEVCB_DRIVER_LINE_MEMBER(apogee_state,pit8253_out1_changed) - }, { - XTAL_16MHz/9, - DEVCB_NULL, - DEVCB_DRIVER_LINE_MEMBER(apogee_state,pit8253_out2_changed) - } - } -}; - /* F4 Character Displayer */ static const gfx_layout apogee_charlayout = @@ -224,7 +205,13 @@ static MACHINE_CONFIG_START( apogee, apogee_state ) MCFG_CPU_PROGRAM_MAP(apogee_mem) MCFG_MACHINE_RESET_OVERRIDE(apogee_state, radio86 ) - MCFG_PIT8253_ADD( "pit8253", apogee_pit8253_config ) + MCFG_DEVICE_ADD("pit8253", PIT8253, 0) + MCFG_PIT8253_CLK0(XTAL_16MHz/9) + MCFG_PIT8253_OUT0_HANDLER(WRITELINE(apogee_state,pit8253_out0_changed)) + MCFG_PIT8253_CLK1(XTAL_16MHz/9) + MCFG_PIT8253_OUT1_HANDLER(WRITELINE(apogee_state,pit8253_out1_changed)) + 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 ) diff --git a/src/mess/drivers/apricot.c b/src/mess/drivers/apricot.c index 13181f738bc..d27b75b6d82 100644 --- a/src/mess/drivers/apricot.c +++ b/src/mess/drivers/apricot.c @@ -206,15 +206,6 @@ WRITE_LINE_MEMBER( apricot_state::timer_out2 ) } } -static const struct pit8253_interface apricot_pit8253_intf = -{ - { - { XTAL_4MHz / 16, DEVCB_LINE_VCC, DEVCB_DEVICE_LINE_MEMBER("ic31", pic8259_device, ir6_w) }, - { XTAL_4MHz / 2, DEVCB_LINE_VCC, DEVCB_DRIVER_LINE_MEMBER(apricot_state, timer_out1) }, - { XTAL_4MHz / 2, DEVCB_LINE_VCC, DEVCB_DRIVER_LINE_MEMBER(apricot_state, timer_out2) } - } -}; - static Z80SIO_INTERFACE( apricot_z80sio_intf ) { 0, 0, @@ -417,7 +408,15 @@ static MACHINE_CONFIG_START( apricot, apricot_state ) // devices MCFG_I8255A_ADD("ic17", apricot_i8255a_intf) MCFG_PIC8259_ADD("ic31", INPUTLINE("ic91", 0), VCC, NULL) - MCFG_PIT8253_ADD("ic16", apricot_pit8253_intf) + + MCFG_DEVICE_ADD("ic16", PIT8253, 0) + MCFG_PIT8253_CLK0(XTAL_4MHz / 16) + MCFG_PIT8253_OUT0_HANDLER(DEVWRITELINE("ic31", pic8259_device, ir6_w)) + MCFG_PIT8253_CLK1(XTAL_4MHz / 2) + MCFG_PIT8253_OUT1_HANDLER(WRITELINE(apricot_state, timer_out1)) + MCFG_PIT8253_CLK2(XTAL_4MHz / 2) + MCFG_PIT8253_OUT2_HANDLER(WRITELINE(apricot_state, timer_out2)) + MCFG_Z80SIO0_ADD("ic15", XTAL_15MHz / 6, apricot_z80sio_intf) // rs232 port diff --git a/src/mess/drivers/apricotp.c b/src/mess/drivers/apricotp.c index 0b466c16aa4..673835326ec 100644 --- a/src/mess/drivers/apricotp.c +++ b/src/mess/drivers/apricotp.c @@ -437,30 +437,6 @@ static APRICOT_KEYBOARD_INTERFACE( kb_intf ) */ //------------------------------------------------- -// pit8253_config pit_intf -//------------------------------------------------- - -static const struct pit8253_interface pit_intf = -{ - { - { - 2000000, - DEVCB_LINE_VCC, - DEVCB_DEVICE_LINE_MEMBER(I8259A_TAG, pic8259_device, ir0_w) - }, { - 2000000, - DEVCB_LINE_VCC, - DEVCB_NULL - }, { - 2000000, - DEVCB_LINE_VCC, - DEVCB_NULL - } - } -}; - - -//------------------------------------------------- // I8237_INTERFACE( dmac_intf ) //------------------------------------------------- @@ -639,7 +615,13 @@ static MACHINE_CONFIG_START( fp, fp_state ) MCFG_APRICOT_KEYBOARD_ADD(kb_intf) MCFG_I8237_ADD(I8237_TAG, 250000, dmac_intf) MCFG_PIC8259_ADD(I8259A_TAG, INPUTLINE(I8086_TAG, INPUT_LINE_IRQ0), VCC, NULL) - MCFG_PIT8253_ADD(I8253A5_TAG, pit_intf) + + MCFG_DEVICE_ADD(I8253A5_TAG, PIT8253, 0) + MCFG_PIT8253_CLK0(2000000) + MCFG_PIT8253_OUT0_HANDLER(DEVWRITELINE(I8259A_TAG, pic8259_device, ir0_w)) + MCFG_PIT8253_CLK1(2000000) + MCFG_PIT8253_CLK2(2000000) + MCFG_Z80SIO0_ADD(Z80SIO0_TAG, 2500000, sio_intf) MCFG_WD2797x_ADD(WD2797_TAG, 2000000) MCFG_FLOPPY_DRIVE_ADD(WD2797_TAG":0", fp_floppies, "35dd", floppy_image_device::default_floppy_formats) diff --git a/src/mess/drivers/at.c b/src/mess/drivers/at.c index df853a7e31b..1f7a1f1d291 100644 --- a/src/mess/drivers/at.c +++ b/src/mess/drivers/at.c @@ -336,7 +336,12 @@ static MACHINE_CONFIG_FRAGMENT( at_motherboard ) MCFG_MACHINE_START_OVERRIDE(at_state, at ) MCFG_MACHINE_RESET_OVERRIDE(at_state, at ) - 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(at_state, at_pit8254_out0_changed)) + MCFG_PIT8253_CLK1(4772720/4) /* dram refresh */ + MCFG_PIT8253_CLK2(4772720/4) /* pio port c pin 4, and speaker polling enough */ + MCFG_PIT8253_OUT2_HANDLER(WRITELINE(at_state, 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 ) diff --git a/src/mess/drivers/b2m.c b/src/mess/drivers/b2m.c index 9b6785b1423..d09bb1a4df3 100644 --- a/src/mess/drivers/b2m.c +++ b/src/mess/drivers/b2m.c @@ -198,7 +198,13 @@ static MACHINE_CONFIG_START( b2m, b2m_state ) MCFG_PALETTE_LENGTH(4) - MCFG_PIT8253_ADD( "pit8253", b2m_pit8253_intf ) + MCFG_DEVICE_ADD("pit8253", PIT8253, 0) + MCFG_PIT8253_CLK0(0) + MCFG_PIT8253_OUT0_HANDLER(DEVWRITELINE("pic8259", pic8259_device, ir1_w)) + MCFG_PIT8253_CLK1(2000000) + MCFG_PIT8253_OUT1_HANDLER(WRITELINE(b2m_state,bm2_pit_out1)) + MCFG_PIT8253_CLK2(2000000) + MCFG_PIT8253_OUT2_HANDLER(DEVWRITELINE("pit8253", pit8253_device, write_clk0)) MCFG_I8255_ADD( "ppi8255_1", b2m_ppi8255_interface_1 ) diff --git a/src/mess/drivers/bebox.c b/src/mess/drivers/bebox.c index 42da17938f1..48ad3124b74 100644 --- a/src/mess/drivers/bebox.c +++ b/src/mess/drivers/bebox.c @@ -155,11 +155,6 @@ WRITE_LINE_MEMBER(bebox_state::bebox_keyboard_interrupt) m_pic8259_1->ir1_w(state); } -READ8_MEMBER(bebox_state::bebox_get_out2) -{ - return m_pit8254->get_output(2); -} - static const struct kbdc8042_interface bebox_8042_interface = { KBDC8042_STANDARD, @@ -168,8 +163,7 @@ static const struct kbdc8042_interface bebox_8042_interface = DEVCB_DRIVER_LINE_MEMBER(bebox_state,bebox_keyboard_interrupt), DEVCB_NULL, - DEVCB_NULL, - DEVCB_DRIVER_MEMBER(bebox_state,bebox_get_out2) + DEVCB_NULL }; static SLOT_INTERFACE_START( pci_devices ) @@ -187,7 +181,12 @@ static MACHINE_CONFIG_START( bebox, bebox_state ) MCFG_QUANTUM_TIME(attotime::from_hz(60)) - MCFG_PIT8254_ADD( "pit8254", bebox_pit8254_config ) + MCFG_DEVICE_ADD("pit8254", PIT8254, 0) + MCFG_PIT8253_CLK0(4772720/4) /* heartbeat IRQ */ + MCFG_PIT8253_OUT0_HANDLER(WRITELINE(bebox_state, bebox_timer0_w)) + MCFG_PIT8253_CLK1(4772720/4) /* dram refresh */ + MCFG_PIT8253_CLK2(4772720/4) /* pio port c pin 4, and speaker polling enough */ + MCFG_PIT8253_OUT2_HANDLER(DEVWRITELINE("kbdc", kbdc8042_device, write_out2)) MCFG_I8237_ADD( "dma8237_1", XTAL_14_31818MHz/3, bebox_dma8237_1_config ) diff --git a/src/mess/drivers/bw12.c b/src/mess/drivers/bw12.c index 6866da75b23..a97aacd60fb 100644 --- a/src/mess/drivers/bw12.c +++ b/src/mess/drivers/bw12.c @@ -469,27 +469,6 @@ WRITE_LINE_MEMBER( bw12_state::pit_out2_w ) m_pit_out2 = state; } -static const struct pit8253_interface pit_intf = -{ - { - { - XTAL_1_8432MHz, - DEVCB_NULL, - DEVCB_DRIVER_LINE_MEMBER(bw12_state, pit_out0_w) - }, - { - XTAL_1_8432MHz, - DEVCB_NULL, - DEVCB_DEVICE_LINE_MEMBER(Z80SIO_TAG, z80dart_device, rxtxcb_w) - }, - { - XTAL_1_8432MHz, - DEVCB_NULL, - DEVCB_DRIVER_LINE_MEMBER(bw12_state, pit_out2_w) - } - } -}; - /* AY-5-3600-PRO-002 Interface */ READ_LINE_MEMBER( bw12_state::ay3600_shift_r ) @@ -630,7 +609,15 @@ static MACHINE_CONFIG_START( common, bw12_state ) MCFG_PIA_IRQB_HANDLER(DEVWRITELINE(Z80_TAG, z80_device, irq_line)) MCFG_Z80SIO0_ADD(Z80SIO_TAG, XTAL_16MHz/4, sio_intf) - MCFG_PIT8253_ADD(PIT8253_TAG, pit_intf) + + MCFG_DEVICE_ADD(PIT8253_TAG, PIT8253, 0) + MCFG_PIT8253_CLK0(XTAL_1_8432MHz) + MCFG_PIT8253_OUT0_HANDLER(WRITELINE(bw12_state, pit_out0_w)) + MCFG_PIT8253_CLK1(XTAL_1_8432MHz) + MCFG_PIT8253_OUT1_HANDLER(DEVWRITELINE(Z80SIO_TAG, z80dart_device, rxtxcb_w)) + MCFG_PIT8253_CLK2(XTAL_1_8432MHz) + MCFG_PIT8253_OUT2_HANDLER(WRITELINE(bw12_state, pit_out2_w)) + MCFG_DEVICE_ADD(AY3600PRO002_TAG, AY3600, 0) MCFG_AY3600_MATRIX_X0(IOPORT("X0")) MCFG_AY3600_MATRIX_X1(IOPORT("X1")) diff --git a/src/mess/drivers/bw2.c b/src/mess/drivers/bw2.c index 1bbf1220d22..b8f163f9db5 100644 --- a/src/mess/drivers/bw2.c +++ b/src/mess/drivers/bw2.c @@ -528,27 +528,6 @@ WRITE_LINE_MEMBER( bw2_state::mtron_w ) if (m_floppy) m_floppy->mon_w(m_mtron); } -static const struct pit8253_interface pit_intf = -{ - { - { - XTAL_16MHz/4, // 8251 USART TXC, RXC - DEVCB_LINE_VCC, - DEVCB_DRIVER_LINE_MEMBER(bw2_state, pit_out0_w) - }, - { - 11000, // LCD controller - DEVCB_LINE_VCC, - DEVCB_DEVICE_LINE_MEMBER(I8253_TAG, pit8253_device, clk2_w) - }, - { - 0, // Floppy /MTRON - DEVCB_LINE_VCC, - DEVCB_DRIVER_LINE_MEMBER(bw2_state, mtron_w) - } - } -}; - //------------------------------------------------- // floppy_format_type floppy_formats //------------------------------------------------- @@ -639,7 +618,14 @@ static MACHINE_CONFIG_START( bw2, bw2_state ) MCFG_PALETTE_LENGTH(2) // devices - MCFG_PIT8253_ADD(I8253_TAG, pit_intf) + MCFG_DEVICE_ADD(I8253_TAG, PIT8253, 0) + MCFG_PIT8253_CLK0(XTAL_16MHz/4) // 8251 USART TXC, RXC + MCFG_PIT8253_OUT0_HANDLER(WRITELINE(bw2_state, pit_out0_w)) + MCFG_PIT8253_CLK1(11000) // LCD controller + MCFG_PIT8253_OUT1_HANDLER(DEVWRITELINE(I8253_TAG, pit8253_device, write_clk2)) + MCFG_PIT8253_CLK2(0) // Floppy /MTRON + MCFG_PIT8253_OUT2_HANDLER(WRITELINE(bw2_state, mtron_w)) + MCFG_I8255A_ADD(I8255A_TAG, ppi_intf) MCFG_MSM6255_ADD(MSM6255_TAG, XTAL_16MHz, 0, SCREEN_TAG, lcdc_map) diff --git a/src/mess/drivers/compis.c b/src/mess/drivers/compis.c index 6343e2cecdc..aa598cf39f2 100644 --- a/src/mess/drivers/compis.c +++ b/src/mess/drivers/compis.c @@ -510,35 +510,12 @@ WRITE_LINE_MEMBER( compis_state::tmr2_w ) } -//------------------------------------------------- -// pit8253_interface pit_intf -//------------------------------------------------- - -WRITE_LINE_MEMBER( compis_state::tmr3_w ) -{ - m_mpsc->rxtxcb_w(state); -} - -WRITE_LINE_MEMBER( compis_state::tmr4_w ) -{ -} - WRITE_LINE_MEMBER( compis_state::tmr5_w ) { m_mpsc->rxca_w(state); m_mpsc->txca_w(state); } -static const struct pit8253_interface pit_intf = -{ - { - { XTAL_16MHz/8, DEVCB_LINE_VCC, DEVCB_DRIVER_LINE_MEMBER(compis_state, tmr3_w) }, - { XTAL_16MHz/8, DEVCB_LINE_VCC, DEVCB_DRIVER_LINE_MEMBER(compis_state, tmr4_w) }, - { XTAL_16MHz/8, DEVCB_LINE_VCC, DEVCB_DRIVER_LINE_MEMBER(compis_state, tmr5_w) } - } -}; - - //------------------------------------------------- // I8255A_INTERFACE( ppi_intf ) //------------------------------------------------- @@ -751,7 +728,14 @@ static MACHINE_CONFIG_START( compis, compis_state ) //MCFG_I80130_SYSTICK_CALLBACK(DEVWRITELINE(I80130_TAG, i80130_device, ir3_w)) MCFG_I80130_DELAY_CALLBACK(DEVWRITELINE(I80130_TAG, i80130_device, ir7_w)) MCFG_I80130_BAUD_CALLBACK(DEVWRITELINE(DEVICE_SELF, compis_state, tmr2_w)) - MCFG_PIT8253_ADD(I8253_TAG, pit_intf ) + + MCFG_DEVICE_ADD(I8253_TAG, PIT8253, 0) + MCFG_PIT8253_CLK0(XTAL_16MHz/8) + MCFG_PIT8253_OUT0_HANDLER(DEVWRITELINE(I8274_TAG, i8274_device, rxtxcb_w)) + MCFG_PIT8253_CLK1(XTAL_16MHz/8) + 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(I8251A_TAG, I8251, 0) diff --git a/src/mess/drivers/dai.c b/src/mess/drivers/dai.c index 7a1b893be58..338e7efc9b8 100644 --- a/src/mess/drivers/dai.c +++ b/src/mess/drivers/dai.c @@ -202,8 +202,13 @@ static MACHINE_CONFIG_START( dai, dai_state ) MCFG_CPU_IO_MAP(dai_io) MCFG_QUANTUM_TIME(attotime::from_hz(60)) - - MCFG_PIT8253_ADD( "pit8253", dai_pit8253_intf ) + MCFG_DEVICE_ADD("pit8253", PIT8253, 0) + MCFG_PIT8253_CLK0(2000000) + MCFG_PIT8253_OUT0_HANDLER(DEVWRITELINE("custom", dai_sound_device, set_input_ch0)) + MCFG_PIT8253_CLK1(2000000) + MCFG_PIT8253_OUT1_HANDLER(DEVWRITELINE("custom", dai_sound_device, set_input_ch1)) + MCFG_PIT8253_CLK2(2000000) + MCFG_PIT8253_OUT2_HANDLER(DEVWRITELINE("custom", dai_sound_device, set_input_ch2)) MCFG_I8255_ADD( "ppi8255", dai_ppi82555_intf ) diff --git a/src/mess/drivers/ec184x.c b/src/mess/drivers/ec184x.c index 85341e32fed..7d0ac695463 100644 --- a/src/mess/drivers/ec184x.c +++ b/src/mess/drivers/ec184x.c @@ -138,28 +138,6 @@ WRITE8_MEMBER(ec184x_state::memboard_w) m_memory.enable[offset] = data; } -#if 0 -const struct pit8253_interface ec1841_pit8253_config = -{ - { - { - XTAL_4MHz/4, /* heartbeat IRQ */ - DEVCB_NULL, - DEVCB_DEVICE_LINE_MEMBER("pic8259", pic8259_device, ir0_w) - }, { - XTAL_4MHz/4, /* dram refresh */ - DEVCB_NULL, - DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, ibm5160_mb_device, pc_pit8253_out1_changed) - }, { - XTAL_4MHz/4, /* 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) - } - } -}; -#endif - - DRIVER_INIT_MEMBER( ec184x_state, ec184x ) { address_space &program = m_maincpu->space(AS_PROGRAM); diff --git a/src/mess/drivers/fk1.c b/src/mess/drivers/fk1.c index 45f0d5f29d5..d09ae273d18 100644 --- a/src/mess/drivers/fk1.c +++ b/src/mess/drivers/fk1.c @@ -263,28 +263,6 @@ WRITE_LINE_MEMBER( fk1_state::fk1_pit_out2 ) logerror("WRITE_LINE_MEMBER(fk1_pit_out2)\n"); } - -static const struct pit8253_interface fk1_pit8253_intf = -{ - { - { - 50, - DEVCB_NULL, - DEVCB_DRIVER_LINE_MEMBER(fk1_state, fk1_pit_out0) - }, - { - 1000000, - DEVCB_NULL, - DEVCB_DRIVER_LINE_MEMBER(fk1_state, fk1_pit_out1) - }, - { - 0, - DEVCB_NULL, - DEVCB_DRIVER_LINE_MEMBER(fk1_state, fk1_pit_out2) - } - } -}; - /* 0 no interrupt allowed, 1 allowed INTR-7, @@ -471,7 +449,14 @@ static MACHINE_CONFIG_START( fk1, fk1_state ) MCFG_PALETTE_LENGTH(2) MCFG_PALETTE_INIT_OVERRIDE(driver_device, monochrome_green) - MCFG_PIT8253_ADD( "pit8253", fk1_pit8253_intf ) + MCFG_DEVICE_ADD("pit8253", PIT8253, 0) + MCFG_PIT8253_CLK0(50) + MCFG_PIT8253_OUT0_HANDLER(WRITELINE(fk1_state, fk1_pit_out0)) + MCFG_PIT8253_CLK1(1000000) + MCFG_PIT8253_OUT1_HANDLER(WRITELINE(fk1_state, fk1_pit_out1)) + 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 ) diff --git a/src/mess/drivers/fmtowns.c b/src/mess/drivers/fmtowns.c index 2ba75b61b4d..c9115dd88d1 100644 --- a/src/mess/drivers/fmtowns.c +++ b/src/mess/drivers/fmtowns.c @@ -759,7 +759,7 @@ WRITE8_MEMBER(towns_state::towns_keyboard_w) */ UINT8 towns_state::speaker_get_spk() { - return m_towns_spkrdata & m_towns_speaker_input; + return m_towns_spkrdata & m_pit_out2; } @@ -770,19 +770,13 @@ void towns_state::speaker_set_spkrdata(UINT8 data) } -void towns_state::speaker_set_input(UINT8 data) -{ - m_towns_speaker_input = data ? 1 : 0; - m_speaker->level_w(speaker_get_spk()); -} - READ8_MEMBER(towns_state::towns_port60_r) { UINT8 val = 0x00; - if (m_pit->get_output(0)) + if (m_pit_out0) val |= 0x01; - if (m_pit->get_output(1)) + if (m_pit_out1) val |= 0x02; val |= (m_towns_timer_mask & 0x07) << 2; @@ -2097,7 +2091,7 @@ WRITE_LINE_MEMBER(towns_state::towns_pic_irq) WRITE_LINE_MEMBER(towns_state::towns_pit_out0_changed) { - pic8259_device* dev = m_pic_master; + m_pit_out0 = state; if(m_towns_timer_mask & 0x01) { @@ -2107,12 +2101,12 @@ WRITE_LINE_MEMBER(towns_state::towns_pit_out0_changed) else m_timer0 = 0; - dev->ir0_w(m_timer0 || m_timer1); + m_pic_master->ir0_w(m_timer0 || m_timer1); } WRITE_LINE_MEMBER(towns_state::towns_pit_out1_changed) { - pic8259_device* dev = m_pic_master; + m_pit_out1 = state; if(m_towns_timer_mask & 0x02) { @@ -2122,12 +2116,13 @@ WRITE_LINE_MEMBER(towns_state::towns_pit_out1_changed) else m_timer1 = 0; - dev->ir0_w(m_timer0 || m_timer1); + m_pic_master->ir0_w(m_timer0 || m_timer1); } WRITE_LINE_MEMBER( towns_state::pit_out2_changed ) { - speaker_set_input(state); + m_pit_out2 = state ? 1 : 0; + m_speaker->level_w(speaker_get_spk()); } static ADDRESS_MAP_START(towns_mem, AS_PROGRAM, 32, towns_state) @@ -2635,48 +2630,6 @@ void towns_state::machine_reset() m_towns_freerun_counter->adjust(attotime::zero,0,attotime::from_usec(1)); } -static const struct pit8253_interface towns_pit8253_config = -{ - { - { - 307200, - DEVCB_NULL, - DEVCB_DRIVER_LINE_MEMBER(towns_state,towns_pit_out0_changed) - }, - { - 307200, - DEVCB_NULL, - DEVCB_DRIVER_LINE_MEMBER(towns_state,towns_pit_out1_changed) - }, - { - 307200, - DEVCB_NULL, - DEVCB_DRIVER_LINE_MEMBER(towns_state,pit_out2_changed) - } - } -}; - -static const struct pit8253_interface towns_pit8253_config_2 = -{ - { - { - 307200, - DEVCB_NULL, - DEVCB_NULL // reserved - }, - { - 307200, - DEVCB_NULL, - DEVCB_NULL // RS-232 - }, - { - 307200, - DEVCB_NULL, - DEVCB_NULL // reserved - } - } -}; - READ8_MEMBER(towns_state::get_slave_ack) { if (offset==7) { // IRQ = 7 @@ -2796,8 +2749,18 @@ static MACHINE_CONFIG_FRAGMENT( towns_base ) MCFG_SOUND_ADD("speaker", SPEAKER_SOUND,0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) - MCFG_PIT8253_ADD("pit", towns_pit8253_config) - MCFG_PIT8253_ADD("pit2", towns_pit8253_config_2) + MCFG_DEVICE_ADD("pit", PIT8253, 0) + MCFG_PIT8253_CLK0(307200) + MCFG_PIT8253_OUT0_HANDLER(WRITELINE(towns_state, towns_pit_out0_changed)) + MCFG_PIT8253_CLK1(307200) + MCFG_PIT8253_OUT1_HANDLER(WRITELINE(towns_state, towns_pit_out1_changed)) + MCFG_PIT8253_CLK2(307200) + MCFG_PIT8253_OUT2_HANDLER(WRITELINE(towns_state, pit_out2_changed)) + + MCFG_DEVICE_ADD("pit2", PIT8253, 0) + MCFG_PIT8253_CLK0(307200) // reserved + MCFG_PIT8253_CLK1(307200) // RS-232 + MCFG_PIT8253_CLK2(307200) // reserved MCFG_PIC8259_ADD( "pic8259_master", WRITELINE(towns_state,towns_pic_irq), VCC, READ8(towns_state,get_slave_ack)) diff --git a/src/mess/drivers/imsai.c b/src/mess/drivers/imsai.c index 5224567fed2..70996ee92a1 100644 --- a/src/mess/drivers/imsai.c +++ b/src/mess/drivers/imsai.c @@ -12,7 +12,6 @@ ToDo: - Banking - - Connect PIT to UART clock. - Dipswitches ****************************************************************************/ @@ -41,6 +40,8 @@ public: DECLARE_READ8_MEMBER(keyin_r); DECLARE_READ8_MEMBER(status_r); DECLARE_WRITE8_MEMBER(control_w); + DECLARE_WRITE_LINE_MEMBER(write_uart_clock); + private: UINT8 m_term_data; virtual void machine_reset(); @@ -94,28 +95,15 @@ WRITE8_MEMBER( imsai_state::kbd_put ) m_term_data = data; } -static GENERIC_TERMINAL_INTERFACE( terminal_intf ) +WRITE_LINE_MEMBER(imsai_state::write_uart_clock) { - DEVCB_DRIVER_MEMBER(imsai_state, kbd_put) -}; + m_uart->write_txc(state); + m_uart->write_rxc(state); +} -static const struct pit8253_interface pit_intf = +static GENERIC_TERMINAL_INTERFACE( terminal_intf ) { - { - { - XTAL_6MHz / 3, /* Timer 0: baud rate gen for 8251 */ - DEVCB_NULL, - DEVCB_NULL - }, { - XTAL_6MHz / 3, /* Timer 1: user */ - DEVCB_NULL, - DEVCB_NULL - }, { - XTAL_6MHz / 3, /* Timer 2: user */ - DEVCB_NULL, - DEVCB_NULL - } - } + DEVCB_DRIVER_MEMBER(imsai_state, kbd_put) }; WRITE8_MEMBER( imsai_state::control_w ) @@ -138,7 +126,12 @@ static MACHINE_CONFIG_START( imsai, imsai_state ) /* Devices */ MCFG_DEVICE_ADD("uart", I8251, 0) - MCFG_PIT8253_ADD( "pit", pit_intf) + + MCFG_DEVICE_ADD("pit", PIT8253, 0) + MCFG_PIT8253_CLK0(XTAL_6MHz / 3) /* Timer 0: baud rate gen for 8251 */ + MCFG_PIT8253_OUT0_HANDLER(WRITELINE(imsai_state, write_uart_clock)) + MCFG_PIT8253_CLK1(XTAL_6MHz / 3) /* Timer 1: user */ + MCFG_PIT8253_CLK2(XTAL_6MHz / 3) /* Timer 2: user */ MACHINE_CONFIG_END /* ROM definition */ diff --git a/src/mess/drivers/ip22.c b/src/mess/drivers/ip22.c index 291f81dd61a..51d5c9615a0 100644 --- a/src/mess/drivers/ip22.c +++ b/src/mess/drivers/ip22.c @@ -137,7 +137,6 @@ public: DECLARE_READ32_MEMBER(hpc3_unkpbus0_r); DECLARE_WRITE32_MEMBER(hpc3_unkpbus0_w); DECLARE_WRITE_LINE_MEMBER(scsi_irq); - DECLARE_READ8_MEMBER(ip22_get_out2); DECLARE_DRIVER_INIT(ip225015); virtual void machine_start(); virtual void machine_reset(); @@ -183,26 +182,6 @@ inline void ATTR_PRINTF(3,4) ip22_state::verboselog(int n_level, const char *s_f } - -static const struct pit8253_interface ip22_pit8254_config = -{ - { - { - 1000000, /* Timer 0: 1MHz */ - DEVCB_NULL, - DEVCB_NULL - }, { - 1000000, /* Timer 1: 1MHz */ - DEVCB_NULL, - DEVCB_NULL - }, { - 1000000, /* Timer 2: 1MHz */ - DEVCB_NULL, - DEVCB_NULL - } - } -}; - #define RTC_DAY state->m_RTC.nRAM[0x09] #define RTC_HOUR state->m_RTC.nRAM[0x08] #define RTC_MINUTE state->m_RTC.nRAM[0x07] @@ -1504,11 +1483,6 @@ static const struct WD33C93interface wd33c93_intf = DEVCB_DRIVER_LINE_MEMBER(ip22_state,scsi_irq) /* command completion IRQ */ }; -READ8_MEMBER(ip22_state::ip22_get_out2) -{ - return m_pit->get_output(2); -} - void ip22_state::machine_start() { sgi_mc_init(machine()); @@ -1526,8 +1500,7 @@ static const struct kbdc8042_interface at8042 = DEVCB_NULL, DEVCB_NULL, - DEVCB_NULL, - DEVCB_DRIVER_MEMBER(ip22_state,ip22_get_out2) + DEVCB_NULL }; DRIVER_INIT_MEMBER(ip22_state,ip225015) @@ -1637,7 +1610,11 @@ static MACHINE_CONFIG_START( ip225015, ip22_state ) MCFG_NVRAM_ADD_0FILL("nvram") MCFG_NVRAM_ADD_0FILL("nvram_user") - MCFG_PIT8254_ADD( "pit8254", ip22_pit8254_config ) + MCFG_DEVICE_ADD("pit8254", PIT8254, 0) + MCFG_PIT8253_CLK0(1000000) + MCFG_PIT8253_CLK1(1000000) + MCFG_PIT8253_CLK2(1000000) + MCFG_PIT8253_OUT2_HANDLER(DEVWRITELINE("kbdc", kbdc8042_device, write_out2)) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) diff --git a/src/mess/drivers/irisha.c b/src/mess/drivers/irisha.c index 69506b0a979..a8c46fc1203 100644 --- a/src/mess/drivers/irisha.c +++ b/src/mess/drivers/irisha.c @@ -25,13 +25,15 @@ class irisha_state : public driver_device { public: - irisha_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag) - , m_p_videoram(*this, "videoram") - , m_maincpu(*this, "maincpu") - , m_pit(*this, "pit8253") - , m_speaker(*this, "speaker") - { } + irisha_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_p_videoram(*this, "videoram"), + m_maincpu(*this, "maincpu"), + m_pit(*this, "pit8253"), + m_speaker(*this, "speaker"), + m_uart(*this, "uart") + { + } DECLARE_READ8_MEMBER(irisha_keyboard_r); DECLARE_READ8_MEMBER(irisha_8255_portb_r); @@ -40,10 +42,12 @@ public: DECLARE_WRITE8_MEMBER(irisha_8255_portb_w); DECLARE_WRITE8_MEMBER(irisha_8255_portc_w); DECLARE_WRITE_LINE_MEMBER(speaker_w); + DECLARE_WRITE_LINE_MEMBER(write_uart_clock); TIMER_CALLBACK_MEMBER(irisha_key); DECLARE_WRITE_LINE_MEMBER(irisha_pic_set_int_line); UINT32 screen_update_irisha(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); required_shared_ptr<const UINT8> m_p_videoram; + private: bool m_sg1_line; bool m_keypressed; @@ -57,6 +61,7 @@ private: required_device<cpu_device> m_maincpu; required_device<pit8253_device> m_pit; required_device<speaker_sound_device> m_speaker; + required_device<i8251_device> m_uart; }; @@ -235,34 +240,6 @@ GFXDECODE_END /************************************************* - i8253 - -*************************************************/ - -static const struct pit8253_interface irisha_pit8253_intf = -{ - { - { - XTAL_16MHz / 9, - DEVCB_LINE_VCC, - DEVCB_DEVICE_LINE_MEMBER("pic8259", pic8259_device, ir0_w) - }, - { - XTAL_16MHz / 9 / 8 / 8, - DEVCB_LINE_VCC, - DEVCB_NULL // UART transmit/receive clock - }, - { - XTAL_16MHz / 9, - DEVCB_NULL, - DEVCB_DRIVER_LINE_MEMBER(irisha_state, speaker_w) - } - } -}; - - -/************************************************* - i8255 *************************************************/ @@ -303,7 +280,7 @@ WRITE8_MEMBER(irisha_state::irisha_8255_portc_w) //logerror("irisha_8255_portc_w %02x\n",data); if BIT(data, 6) - m_pit->gate2_w((BIT(m_ppi_porta, 5) && !BIT(data, 5)) ? 1 : 0); + m_pit->write_gate2((BIT(m_ppi_porta, 5) && !BIT(data, 5)) ? 1 : 0); m_ppi_portc = data; @@ -380,6 +357,12 @@ READ8_MEMBER(irisha_state::irisha_keyboard_r) return keycode; } +WRITE_LINE_MEMBER(irisha_state::write_uart_clock) +{ + m_uart->write_txc(state); + m_uart->write_rxc(state); +} + /************************************************* @@ -409,7 +392,6 @@ void irisha_state::machine_reset() m_ppi_portc = 0; } - /* Machine driver */ static MACHINE_CONFIG_START( irisha, irisha_state ) /* basic machine hardware */ @@ -435,7 +417,15 @@ static MACHINE_CONFIG_START( irisha, irisha_state ) /* Devices */ MCFG_DEVICE_ADD("uart", I8251, 0) - MCFG_PIT8253_ADD( "pit8253", irisha_pit8253_intf ) + + MCFG_DEVICE_ADD("pit8253", PIT8253, 0) + MCFG_PIT8253_CLK0(XTAL_16MHz / 9) + MCFG_PIT8253_OUT0_HANDLER(DEVWRITELINE("pic8259", pic8259_device, ir0_w)) + MCFG_PIT8253_CLK1(XTAL_16MHz / 9 / 8 / 8) + MCFG_PIT8253_OUT1_HANDLER(WRITELINE(irisha_state, write_uart_clock)) + MCFG_PIT8253_CLK2(XTAL_16MHz / 9) + MCFG_PIT8253_OUT2_HANDLER(WRITELINE(irisha_state, speaker_w)) + MCFG_I8255_ADD( "ppi8255", irisha_ppi8255_interface ) 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 d4c62d0d0fa..233b67728b8 100644 --- a/src/mess/drivers/isbc.c +++ b/src/mess/drivers/isbc.c @@ -145,25 +145,6 @@ static DEVICE_INPUT_DEFAULTS_START( isbc286_terminal ) DEVICE_INPUT_DEFAULTS( "TERM_STOPBITS", 0xff, 0x01 ) // 1 DEVICE_INPUT_DEFAULTS_END -static const struct pit8253_interface isbc86_pit_config = -{ - { - { - XTAL_22_1184MHz/18, - DEVCB_NULL, - DEVCB_DEVICE_LINE_MEMBER("pic_0", pic8259_device, ir0_w) - }, { - XTAL_22_1184MHz/18, - DEVCB_NULL, - DEVCB_NULL - }, { - XTAL_22_1184MHz/18, - DEVCB_NULL, - DEVCB_DRIVER_LINE_MEMBER(isbc_state, isbc86_tmr2_w) - } - } -}; - WRITE_LINE_MEMBER( isbc_state::isbc86_tmr2_w ) { m_uart8251->write_rxc(state); @@ -188,25 +169,6 @@ READ8_MEMBER( isbc_state::get_slave_ack ) return 0x00; } -static const struct pit8253_interface isbc286_pit_config = -{ - { - { - XTAL_22_1184MHz/18, - DEVCB_NULL, - DEVCB_DEVICE_LINE_MEMBER("pic_0", pic8259_device, ir0_w) - }, { - XTAL_22_1184MHz/18, - DEVCB_NULL, - DEVCB_DEVICE_LINE_MEMBER("uart8274", z80dart_device, rxtxcb_w) - }, { - XTAL_22_1184MHz/18, - DEVCB_NULL, - DEVCB_DRIVER_LINE_MEMBER(isbc_state, isbc286_tmr2_w) - } - } -}; - WRITE_LINE_MEMBER( isbc_state::isbc286_tmr2_w ) { m_uart8274->rxca_w(state); @@ -274,7 +236,14 @@ static MACHINE_CONFIG_START( isbc86, isbc_state ) MCFG_CPU_PROGRAM_MAP(isbc86_mem) MCFG_CPU_IO_MAP(isbc_io) MCFG_PIC8259_ADD("pic_0", INPUTLINE(":maincpu", 0), VCC, NULL) - MCFG_PIT8253_ADD("pit", isbc86_pit_config) + + MCFG_DEVICE_ADD("pit", PIT8253, 0) + MCFG_PIT8253_CLK0(XTAL_22_1184MHz/18) + MCFG_PIT8253_OUT0_HANDLER(DEVWRITELINE("pic_0", pic8259_device, ir0_w)) + MCFG_PIT8253_CLK1(XTAL_22_1184MHz/18) + 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("uart8251", I8251, 0) @@ -310,7 +279,15 @@ static MACHINE_CONFIG_START( isbc286, isbc_state ) MCFG_CPU_IO_MAP(isbc286_io) MCFG_PIC8259_ADD("pic_0", INPUTLINE(":maincpu", 0), VCC, READ8(isbc_state, get_slave_ack)) MCFG_PIC8259_ADD("pic_1", DEVWRITELINE("pic_0", pic8259_device, ir7_w), GND, NULL) - MCFG_PIT8254_ADD("pit", isbc286_pit_config) + + MCFG_DEVICE_ADD("pit", PIT8254, 0) + MCFG_PIT8253_CLK0(XTAL_22_1184MHz/18) + MCFG_PIT8253_OUT0_HANDLER(DEVWRITELINE("pic_0", pic8259_device, ir0_w)) + MCFG_PIT8253_CLK1(XTAL_22_1184MHz/18) + MCFG_PIT8253_OUT1_HANDLER(DEVWRITELINE("uart8274", z80dart_device, rxtxcb_w)) + 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_CENTRONICS_ADD("centronics", centronics_printers, "image") diff --git a/src/mess/drivers/m20.c b/src/mess/drivers/m20.c index 6db9d1331bf..ea27d08506a 100644 --- a/src/mess/drivers/m20.c +++ b/src/mess/drivers/m20.c @@ -901,27 +901,6 @@ static ASCII_KEYBOARD_INTERFACE( keyboard_intf ) DEVCB_DRIVER_MEMBER(m20_state, kbd_put) }; -const struct pit8253_interface pit8253_intf = -{ - { - { - 1230782, - DEVCB_NULL, - DEVCB_DRIVER_LINE_MEMBER(m20_state, tty_clock_tick_w) - }, - { - 1230782, - DEVCB_NULL, - DEVCB_DRIVER_LINE_MEMBER(m20_state, kbd_clock_tick_w) - }, - { - 1230782, - DEVCB_NULL, - DEVCB_DRIVER_LINE_MEMBER(m20_state, timer_tick_w) - } - } -}; - static SLOT_INTERFACE_START( m20_floppies ) SLOT_INTERFACE( "5dd", FLOPPY_525_DD ) SLOT_INTERFACE_END @@ -972,7 +951,14 @@ static MACHINE_CONFIG_START( m20, m20_state ) MCFG_DEVICE_ADD("i8251_2", I8251, 0) - MCFG_PIT8253_ADD("pit8253", pit8253_intf) + MCFG_DEVICE_ADD("pit8253", PIT8253, 0) + MCFG_PIT8253_CLK0(1230782) + MCFG_PIT8253_OUT0_HANDLER(WRITELINE(m20_state, tty_clock_tick_w)) + MCFG_PIT8253_CLK1(1230782) + MCFG_PIT8253_OUT1_HANDLER(WRITELINE(m20_state, kbd_clock_tick_w)) + MCFG_PIT8253_CLK2(1230782) + MCFG_PIT8253_OUT2_HANDLER(WRITELINE(m20_state, timer_tick_w)) + MCFG_PIC8259_ADD("i8259", WRITELINE(m20_state, pic_irq_line_w), VCC, NULL) MCFG_ASCII_KEYBOARD_ADD(KEYBOARD_TAG, keyboard_intf) diff --git a/src/mess/drivers/mbc55x.c b/src/mess/drivers/mbc55x.c index 61c527bd8fd..c274b2e9978 100644 --- a/src/mess/drivers/mbc55x.c +++ b/src/mess/drivers/mbc55x.c @@ -260,7 +260,14 @@ static MACHINE_CONFIG_START( mbc55x, mbc55x_state ) MCFG_DEVICE_ADD(I8251A_KB_TAG, I8251, 0) MCFG_I8251_RXRDY_HANDLER(DEVWRITELINE(PIC8259_TAG, pic8259_device, ir3_w)) - MCFG_PIT8253_ADD( PIT8253_TAG, mbc55x_pit8253_config ) + MCFG_DEVICE_ADD(PIT8253_TAG, PIT8253, 0) + MCFG_PIT8253_CLK0(PIT_C0_CLOCK) + MCFG_PIT8253_OUT0_HANDLER(DEVWRITELINE(PIC8259_TAG, pic8259_device, ir0_w)) + MCFG_PIT8253_CLK1(PIT_C1_CLOCK) + MCFG_PIT8253_OUT1_HANDLER(DEVWRITELINE(PIC8259_TAG, pic8259_device, ir1_w)) + MCFG_PIT8253_CLK2(PIT_C2_CLOCK) + 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_MC6845_ADD(VID_MC6845_NAME, MC6845, SCREEN_TAG, XTAL_14_31818MHz/8, mb55x_mc6845_intf) diff --git a/src/mess/drivers/mc1502.c b/src/mess/drivers/mc1502.c index 58b69aa747b..e51559c184b 100644 --- a/src/mess/drivers/mc1502.c +++ b/src/mess/drivers/mc1502.c @@ -107,7 +107,7 @@ WRITE8_MEMBER(mc1502_state::mc1502_ppi_portb_w) { // DBG_LOG(2,"mc1502_ppi_portb_w",("( %02X )\n", data)); m_ppi_portb = data; - machine().device<pit8253_device>("pit8253")->gate2_w(BIT(data, 0)); + m_pit8253->write_gate2(BIT(data, 0)); // mc1502_speaker_set_spkrdata(BIT(data, 1)); m_centronics->write_strobe(BIT(data, 2)); m_centronics->write_autofd(BIT(data, 3)); @@ -129,16 +129,15 @@ WRITE8_MEMBER(mc1502_state::mc1502_ppi_portc_w) // 0x10 -- SNDOUT READ8_MEMBER(mc1502_state::mc1502_ppi_portc_r) { - int timer2_output = machine().device<pit8253_device>("pit8253")->get_output(2); int data = 0xff; double tap_val = m_cassette->input(); - data = ( data & ~0x40 ) | ( tap_val < 0 ? 0x40 : 0x00 ) | ( (BIT(m_ppi_portb, 7) && timer2_output) ? 0x40 : 0x00 ); - data = ( data & ~0x20 ) | ( timer2_output ? 0x20 : 0x00 ); - data = ( data & ~0x10 ) | ( (BIT(m_ppi_portb, 1) && timer2_output) ? 0x10 : 0x00 ); + data = ( data & ~0x40 ) | ( tap_val < 0 ? 0x40 : 0x00 ) | ( (BIT(m_ppi_portb, 7) && m_pit_out2) ? 0x40 : 0x00 ); + data = ( data & ~0x20 ) | ( m_pit_out2 ? 0x20 : 0x00 ); + data = ( data & ~0x10 ) | ( (BIT(m_ppi_portb, 1) && m_pit_out2) ? 0x10 : 0x00 ); // DBG_LOG(2,"mc1502_ppi_portc_r",("= %02X (tap_val %f t2out %d) at %s\n", -// data, tap_val, timer2_output, machine().describe_context())); +// data, tap_val, m_pit_out2, machine().describe_context())); return data; } @@ -209,35 +208,17 @@ WRITE_LINE_MEMBER(mc1502_state::mc1502_i8251_syndet) WRITE_LINE_MEMBER(mc1502_state::mc1502_pit8253_out1_changed) { - machine().device<i8251_device>("upd8251")->write_txc(state); - machine().device<i8251_device>("upd8251")->write_rxc(state); + m_upd8251->write_txc(state); + m_upd8251->write_rxc(state); } WRITE_LINE_MEMBER(mc1502_state::mc1502_pit8253_out2_changed) { + m_pit_out2 = state; // mc1502_speaker_set_input( state ); m_cassette->output(state ? 1 : -1); } -const struct pit8253_interface mc1502_pit8253_config = -{ - { - { - XTAL_15MHz/12, /* heartbeat IRQ */ - DEVCB_NULL, - DEVCB_DEVICE_LINE_MEMBER("pic8259", pic8259_device, ir0_w) - }, { - XTAL_16MHz/12, /* serial port */ - DEVCB_NULL, - DEVCB_DRIVER_LINE_MEMBER(mc1502_state,mc1502_pit8253_out1_changed) - }, { - XTAL_16MHz/12, /* pio port c pin 4, and speaker polling enough */ - DEVCB_NULL, - DEVCB_DRIVER_LINE_MEMBER(mc1502_state,mc1502_pit8253_out2_changed) - } - } -}; - IRQ_CALLBACK_MEMBER( mc1502_state::mc1502_irq_callback ) { return m_pic8259->acknowledge(); @@ -323,7 +304,13 @@ static MACHINE_CONFIG_START( mc1502, mc1502_state ) MCFG_MACHINE_START_OVERRIDE( mc1502_state, mc1502 ) MCFG_MACHINE_RESET_OVERRIDE( mc1502_state, mc1502 ) - MCFG_PIT8253_ADD( "pit8253", mc1502_pit8253_config ) + MCFG_DEVICE_ADD("pit8253", PIT8253, 0) + MCFG_PIT8253_CLK0(XTAL_15MHz/12) /* heartbeat IRQ */ + MCFG_PIT8253_OUT0_HANDLER(DEVWRITELINE("pic8259", pic8259_device, ir0_w)) + MCFG_PIT8253_CLK1(XTAL_16MHz/12) /* serial port */ + MCFG_PIT8253_OUT1_HANDLER(WRITELINE(mc1502_state, mc1502_pit8253_out1_changed)) + MCFG_PIT8253_CLK2(XTAL_16MHz/12) /* pio port c pin 4, and speaker polling enough */ + MCFG_PIT8253_OUT2_HANDLER(WRITELINE(mc1502_state, mc1502_pit8253_out2_changed)) MCFG_PIC8259_ADD( "pic8259", INPUTLINE("maincpu", 0), VCC, NULL ) diff --git a/src/mess/drivers/mikromik.c b/src/mess/drivers/mikromik.c index f8cc6695d9d..29cec6ba823 100644 --- a/src/mess/drivers/mikromik.c +++ b/src/mess/drivers/mikromik.c @@ -558,10 +558,6 @@ static I8237_INTERFACE( dmac_intf ) }; -//------------------------------------------------- -// pit8253_config pit_intf -//------------------------------------------------- - WRITE_LINE_MEMBER( mm1_state::itxc_w ) { if (!m_intc) @@ -584,26 +580,6 @@ WRITE_LINE_MEMBER( mm1_state::auxc_w ) m_mpsc->rxcb_w(state); } -static const struct pit8253_interface pit_intf = -{ - { - { - XTAL_6_144MHz/2/2, - DEVCB_LINE_VCC, - DEVCB_DRIVER_LINE_MEMBER(mm1_state, itxc_w) - }, { - XTAL_6_144MHz/2/2, - DEVCB_LINE_VCC, - DEVCB_DRIVER_LINE_MEMBER(mm1_state, irxc_w) - }, { - XTAL_6_144MHz/2/2, - DEVCB_LINE_VCC, - DEVCB_DRIVER_LINE_MEMBER(mm1_state, auxc_w) - } - } -}; - - //------------------------------------------------- // UPD7201_INTERFACE( mpsc_intf ) //------------------------------------------------- @@ -749,7 +725,15 @@ static MACHINE_CONFIG_START( mm1, mm1_state ) // peripheral hardware MCFG_I8212_ADD(I8212_TAG, iop_intf) MCFG_I8237_ADD(I8237_TAG, XTAL_6_144MHz/2, dmac_intf) - MCFG_PIT8253_ADD(I8253_TAG, pit_intf) + + MCFG_DEVICE_ADD(I8253_TAG, PIT8253, 0) + MCFG_PIT8253_CLK0(XTAL_6_144MHz/2/2) + MCFG_PIT8253_OUT0_HANDLER(WRITELINE(mm1_state, itxc_w)) + MCFG_PIT8253_CLK1(XTAL_6_144MHz/2/2) + MCFG_PIT8253_OUT1_HANDLER(WRITELINE(mm1_state, irxc_w)) + MCFG_PIT8253_CLK2(XTAL_6_144MHz/2/2) + MCFG_PIT8253_OUT2_HANDLER(WRITELINE(mm1_state, auxc_w)) + MCFG_UPD765A_ADD(UPD765_TAG, /* XTAL_16MHz/2/2 */ true, true) MCFG_UPD7201_ADD(UPD7201_TAG, XTAL_6_144MHz/2, mpsc_intf) MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":0", mm1_floppies, "525qd", mm1_state::floppy_formats) diff --git a/src/mess/drivers/mikrosha.c b/src/mess/drivers/mikrosha.c index d349f5d6d3e..ea5faea7473 100644 --- a/src/mess/drivers/mikrosha.c +++ b/src/mess/drivers/mikrosha.c @@ -155,27 +155,6 @@ WRITE_LINE_MEMBER(mikrosha_state::mikrosha_pit_out2) { } -static const struct pit8253_interface mikrosha_pit8253_intf = -{ - { - { - 0, - DEVCB_NULL, - DEVCB_NULL - }, - { - 0, - DEVCB_NULL, - DEVCB_NULL - }, - { - 2000000, - DEVCB_NULL, - DEVCB_DRIVER_LINE_MEMBER(mikrosha_state, mikrosha_pit_out2) - } - } -}; - /* F4 Character Displayer */ static const gfx_layout mikrosha_charlayout = { @@ -208,7 +187,11 @@ static MACHINE_CONFIG_START( mikrosha, mikrosha_state ) MCFG_I8275_ADD ( "i8275", mikrosha_i8275_interface) - MCFG_PIT8253_ADD( "pit8253", mikrosha_pit8253_intf ) + MCFG_DEVICE_ADD("pit8253", PIT8253, 0) + MCFG_PIT8253_CLK0(0) + MCFG_PIT8253_CLK1(0) + MCFG_PIT8253_CLK2(2000000) + MCFG_PIT8253_OUT2_HANDLER(WRITELINE(mikrosha_state, mikrosha_pit_out2)) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) diff --git a/src/mess/drivers/mz2000.c b/src/mess/drivers/mz2000.c index a15cf098860..caa4dbd3564 100644 --- a/src/mess/drivers/mz2000.c +++ b/src/mess/drivers/mz2000.c @@ -369,12 +369,12 @@ WRITE8_MEMBER(mz2000_state::mz2000_fdc_w) WRITE8_MEMBER(mz2000_state::timer_w) { - m_pit8253->gate0_w(1); - m_pit8253->gate1_w(1); - m_pit8253->gate0_w(0); - m_pit8253->gate1_w(0); - m_pit8253->gate0_w(1); - m_pit8253->gate1_w(1); + m_pit8253->write_gate0(1); + m_pit8253->write_gate1(1); + m_pit8253->write_gate0(0); + m_pit8253->write_gate1(0); + m_pit8253->write_gate0(1); + m_pit8253->write_gate1(1); } WRITE8_MEMBER(mz2000_state::mz2000_tvram_attr_w) @@ -827,31 +827,6 @@ static const floppy_interface mz2000_floppy_interface = NULL }; -/* PIT8253 Interface */ - -/* TODO: clocks aren't known */ -static const struct pit8253_interface mz2000_pit8253_intf = -{ - { - { - 31250, - DEVCB_NULL, - DEVCB_NULL - }, - { - 31250, /* needed by "Art Magic" to boot */ - DEVCB_NULL, - DEVCB_NULL - }, - { - 31250, - DEVCB_NULL, - DEVCB_NULL - } - } -}; - - static const cassette_interface mz2000_cassette_interface = { mz700_cassette_formats, @@ -870,7 +845,12 @@ static MACHINE_CONFIG_START( mz2000, mz2000_state ) MCFG_I8255_ADD( "i8255_0", ppi8255_intf ) MCFG_Z80PIO_ADD( "z80pio_1", MASTER_CLOCK, mz2000_pio1_intf ) - MCFG_PIT8253_ADD("pit", mz2000_pit8253_intf) + + /* TODO: clocks aren't known */ + MCFG_DEVICE_ADD("pit", PIT8253, 0) + MCFG_PIT8253_CLK0(31250) + MCFG_PIT8253_CLK1(31250) /* needed by "Art Magic" to boot */ + MCFG_PIT8253_CLK2(31250) MCFG_MB8877_ADD("mb8877a",mz2000_mb8877a_interface) MCFG_LEGACY_FLOPPY_4_DRIVES_ADD(mz2000_floppy_interface) diff --git a/src/mess/drivers/mz2500.c b/src/mess/drivers/mz2500.c index a8821a6b5c8..1522cc4eb56 100644 --- a/src/mess/drivers/mz2500.c +++ b/src/mess/drivers/mz2500.c @@ -1410,12 +1410,12 @@ WRITE8_MEMBER(mz2500_state::mz2500_cg_data_w) WRITE8_MEMBER(mz2500_state::timer_w) { - m_pit->gate0_w(1); - m_pit->gate1_w(1); - m_pit->gate0_w(0); - m_pit->gate1_w(0); - m_pit->gate0_w(1); - m_pit->gate1_w(1); + m_pit->write_gate0(1); + m_pit->write_gate1(1); + m_pit->write_gate0(0); + m_pit->write_gate1(0); + m_pit->write_gate0(1); + m_pit->write_gate1(1); } @@ -2081,27 +2081,6 @@ WRITE_LINE_MEMBER(mz2500_state::pit8253_clk0_irq) m_maincpu->set_input_line_and_vector(0, HOLD_LINE,m_irq_vector[1]); } -static const struct pit8253_interface mz2500_pit8253_intf = -{ - { - { - 31250, - DEVCB_NULL, - DEVCB_DRIVER_LINE_MEMBER(mz2500_state, pit8253_clk0_irq) - }, - { - 0, - DEVCB_NULL, - DEVCB_NULL - }, - { - 16, //CH2, trusted, used by Super MZ demo / The Black Onyx and a bunch of others (TODO: timing of this) - DEVCB_NULL, - DEVCB_DEVICE_LINE_MEMBER("pit", pit8253_device, clk1_w) - } - } -}; - WRITE_LINE_MEMBER(mz2500_state::mz2500_rtc_alarm_irq) { /* TODO: doesn't work yet */ @@ -2151,7 +2130,13 @@ static MACHINE_CONFIG_START( mz2500, mz2500_state ) MCFG_Z80PIO_ADD( "z80pio_1", 6000000, mz2500_pio1_intf ) MCFG_Z80SIO0_ADD( "z80sio", 6000000, mz2500_sio_intf ) MCFG_RP5C15_ADD(RP5C15_TAG, XTAL_32_768kHz, rtc_intf) - MCFG_PIT8253_ADD("pit", mz2500_pit8253_intf) + + MCFG_DEVICE_ADD("pit", PIT8253, 0) + MCFG_PIT8253_CLK0(31250) + MCFG_PIT8253_OUT0_HANDLER(WRITELINE(mz2500_state, pit8253_clk0_irq)) + MCFG_PIT8253_CLK1(0) + MCFG_PIT8253_CLK2(16) //CH2, trusted, used by Super MZ demo / The Black Onyx and a bunch of others (TODO: timing of this) + MCFG_PIT8253_OUT2_HANDLER(DEVWRITELINE("pit", pit8253_device, write_clk1)) MCFG_MB8877_ADD("mb8877a",mz2500_mb8877a_interface) MCFG_LEGACY_FLOPPY_4_DRIVES_ADD(mz2500_floppy_interface) diff --git a/src/mess/drivers/mz700.c b/src/mess/drivers/mz700.c index 51ae7529424..6fff599683b 100644 --- a/src/mess/drivers/mz700.c +++ b/src/mess/drivers/mz700.c @@ -354,7 +354,14 @@ static MACHINE_CONFIG_START( mz700, mz_state ) MCFG_TIMER_DRIVER_ADD_PERIODIC("other", mz_state, ne556_other_callback, attotime::from_hz(34.5)) /* devices */ - MCFG_PIT8253_ADD("pit8253", mz700_pit8253_config) + MCFG_DEVICE_ADD("pit8253", PIT8253, 0) + MCFG_PIT8253_CLK0(XTAL_17_73447MHz/20) + MCFG_PIT8253_OUT0_HANDLER(WRITELINE(mz_state, pit_out0_changed)) + MCFG_PIT8253_CLK1(15611.0) + MCFG_PIT8253_OUT1_HANDLER(DEVWRITELINE("pit8253", pit8253_device, write_clk2)) + MCFG_PIT8253_CLK2(0) + MCFG_PIT8253_OUT2_HANDLER(WRITELINE(mz_state, pit_irq_2)) + MCFG_I8255_ADD("ppi8255", mz700_ppi8255_interface) MCFG_TTL74145_ADD("ls145", default_ttl74145) @@ -388,8 +395,9 @@ static MACHINE_CONFIG_DERIVED( mz800, mz700 ) MCFG_SOFTWARE_LIST_ADD("cass_list","mz800_cass") /* devices */ - MCFG_DEVICE_REMOVE("pit8253") - MCFG_PIT8253_ADD("pit8253", mz800_pit8253_config) + MCFG_DEVICE_MODIFY("pit8253") + MCFG_PIT8253_CLK0(XTAL_17_73447MHz/16) + MCFG_Z80PIO_ADD("z80pio", XTAL_17_73447MHz/5, mz800_z80pio_config) MCFG_CENTRONICS_ADD("centronics", centronics_printers, "image") diff --git a/src/mess/drivers/mz80.c b/src/mess/drivers/mz80.c index 12f4627dff5..c5899c07c45 100644 --- a/src/mess/drivers/mz80.c +++ b/src/mess/drivers/mz80.c @@ -302,7 +302,15 @@ static MACHINE_CONFIG_START( mz80k, mz80_state ) /* Devices */ MCFG_I8255_ADD( "ppi8255", mz80k_8255_int ) - MCFG_PIT8253_ADD( "pit8253", mz80k_pit8253_config ) + + MCFG_DEVICE_ADD("pit8253", PIT8253, 0) + MCFG_PIT8253_CLK0(XTAL_8MHz/4) + MCFG_PIT8253_OUT0_HANDLER(WRITELINE(mz80_state, pit_out0_changed)) + MCFG_PIT8253_CLK1(XTAL_8MHz/256) + MCFG_PIT8253_OUT1_HANDLER(DEVWRITELINE("pit8253", pit8253_device, write_clk2)) + MCFG_PIT8253_CLK2(0) + MCFG_PIT8253_OUT2_HANDLER(WRITELINE(mz80_state, pit_out2_changed)) + MCFG_TIMER_DRIVER_ADD_PERIODIC("tempo", mz80_state, ne555_tempo_callback, attotime::from_hz(34)) MCFG_CASSETTE_ADD( "cassette", mz80k_cassette_interface ) MACHINE_CONFIG_END diff --git a/src/mess/drivers/ob68k1a.c b/src/mess/drivers/ob68k1a.c index 65acc7784e1..f34f3a0cbd6 100644 --- a/src/mess/drivers/ob68k1a.c +++ b/src/mess/drivers/ob68k1a.c @@ -171,14 +171,14 @@ static const ptm6840_interface ptm_intf = WRITE_LINE_MEMBER( ob68k1a_state::rx_tx_0_w ) { - m_acia0->write_rxc(state); m_acia0->write_txc(state); + m_acia0->write_rxc(state); } WRITE_LINE_MEMBER( ob68k1a_state::rx_tx_1_w ) { - m_acia1->write_rxc(state); m_acia1->write_txc(state); + m_acia1->write_rxc(state); } diff --git a/src/mess/drivers/pasogo.c b/src/mess/drivers/pasogo.c index f11471603e2..07895abb85b 100644 --- a/src/mess/drivers/pasogo.c +++ b/src/mess/drivers/pasogo.c @@ -212,7 +212,7 @@ protected: bool m_cur_eop; UINT8 m_dma_offset[4]; UINT8 m_pc_spkrdata; - UINT8 m_pc_input; + UINT8 m_pit_out2; int m_ppi_portc_switch_high; int m_ppi_speaker; @@ -683,7 +683,7 @@ void pasogo_state::machine_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; } @@ -692,7 +692,7 @@ void pasogo_state::machine_reset() WRITE_LINE_MEMBER(pasogo_state::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); } @@ -710,31 +710,11 @@ WRITE_LINE_MEMBER( pasogo_state::pit8253_out1_changed ) WRITE_LINE_MEMBER( pasogo_state::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); } -static const pit8253_interface pc_pit8254_config = -{ - { - { - 4772720/4, /* heartbeat IRQ */ - DEVCB_NULL, - DEVCB_DEVICE_LINE_MEMBER("pic8259", pic8259_device, ir0_w) - }, { - 4772720/4, /* dram refresh */ - DEVCB_NULL, - DEVCB_DRIVER_LINE_MEMBER(pasogo_state, pit8253_out1_changed) - }, { - 4772720/4, /* pio port c pin 4, and speaker polling enough */ - DEVCB_NULL, - DEVCB_DRIVER_LINE_MEMBER(pasogo_state, pit8253_out2_changed) - } - } -}; - - READ8_MEMBER( pasogo_state::page_r ) { return 0xFF; @@ -906,7 +886,6 @@ READ8_MEMBER (pasogo_state::ppi_porta_r) READ8_MEMBER ( pasogo_state::ppi_portc_r ) { - int timer2_output = m_pit8253->get_output(2); int data=0xff; data&=~0x80; // no parity error @@ -925,9 +904,9 @@ READ8_MEMBER ( pasogo_state::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; } @@ -940,7 +919,7 @@ WRITE8_MEMBER( pasogo_state::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)); speaker_set_spkrdata( data & 0x02 ); m_ppi_clock_signal = ( m_ppi_keyb_clock ) ? 1 : 0; @@ -980,7 +959,13 @@ static MACHINE_CONFIG_START( pasogo, pasogo_state ) MCFG_CPU_IO_MAP( pasogo_io) MCFG_CPU_VBLANK_INT_DRIVER("screen", pasogo_state, pasogo_interrupt) - MCFG_PIT8254_ADD( "pit8254", pc_pit8254_config ) + MCFG_DEVICE_ADD("pit8254", PIT8254, 0) + MCFG_PIT8253_CLK0(4772720/4) /* heartbeat IRQ */ + MCFG_PIT8253_OUT0_HANDLER(DEVWRITELINE("pic8259", pic8259_device, ir0_w)) + MCFG_PIT8253_CLK1(4772720/4) /* dram refresh */ + MCFG_PIT8253_OUT1_HANDLER(WRITELINE(pasogo_state, pit8253_out1_changed)) + MCFG_PIT8253_CLK2(4772720/4) /* pio port c pin 4, and speaker polling enough */ + MCFG_PIT8253_OUT2_HANDLER(WRITELINE(pasogo_state, pit8253_out2_changed)) MCFG_PIC8259_ADD( "pic8259", WRITELINE(pasogo_state, pasogo_pic8259_set_int_line), VCC, NULL ) diff --git a/src/mess/drivers/pc.c b/src/mess/drivers/pc.c index a190da62d79..8952e08a195 100644 --- a/src/mess/drivers/pc.c +++ b/src/mess/drivers/pc.c @@ -805,7 +805,13 @@ static MACHINE_CONFIG_START( pccga, pc_state ) MCFG_MACHINE_START_OVERRIDE(pc_state,pc) MCFG_MACHINE_RESET_OVERRIDE(pc_state,pc) - MCFG_PIT8253_ADD( "pit8253", ibm5150_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(pc_state, ibm5150_pit8253_out1_changed)) + MCFG_PIT8253_CLK2(XTAL_14_31818MHz/12) /* pio port c pin 4, and speaker polling enough */ + MCFG_PIT8253_OUT2_HANDLER(WRITELINE(pc_state, ibm5150_pit8253_out2_changed)) MCFG_I8237_ADD( "dma8237", XTAL_14_31818MHz/3, ibm5150_dma8237_config ) @@ -920,7 +926,13 @@ static MACHINE_CONFIG_START( europc, europc_pc_state ) MCFG_MACHINE_START_OVERRIDE(europc_pc_state,pc) MCFG_MACHINE_RESET_OVERRIDE(europc_pc_state,pc) - MCFG_PIT8253_ADD( "pit8253", ibm5150_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(pc_state, ibm5150_pit8253_out1_changed)) + MCFG_PIT8253_CLK2(XTAL_14_31818MHz/12) /* pio port c pin 4, and speaker polling enough */ + MCFG_PIT8253_OUT2_HANDLER(WRITELINE(pc_state, ibm5150_pit8253_out2_changed)) MCFG_I8237_ADD( "dma8237", XTAL_14_31818MHz/3, ibm5150_dma8237_config ) @@ -1000,7 +1012,13 @@ static MACHINE_CONFIG_START( t1000hx, tandy_pc_state ) MCFG_MACHINE_START_OVERRIDE(tandy_pc_state,pc) MCFG_MACHINE_RESET_OVERRIDE(pc_state,pc) - MCFG_PIT8253_ADD( "pit8253", ibm5150_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(pc_state, ibm5150_pit8253_out1_changed)) + MCFG_PIT8253_CLK2(XTAL_14_31818MHz/12) /* pio port c pin 4, and speaker polling enough */ + MCFG_PIT8253_OUT2_HANDLER(WRITELINE(pc_state, ibm5150_pit8253_out2_changed)) MCFG_I8237_ADD( "dma8237", XTAL_14_31818MHz/3, ibm5150_dma8237_config ) @@ -1069,7 +1087,13 @@ static MACHINE_CONFIG_START( t1000_16, tandy_pc_state ) MCFG_MACHINE_START_OVERRIDE(tandy_pc_state,pc) MCFG_MACHINE_RESET_OVERRIDE(tandy_pc_state,tandy1000rl) - MCFG_PIT8253_ADD( "pit8253", ibm5150_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(pc_state, ibm5150_pit8253_out1_changed)) + MCFG_PIT8253_CLK2(XTAL_14_31818MHz/12) /* pio port c pin 4, and speaker polling enough */ + MCFG_PIT8253_OUT2_HANDLER(WRITELINE(pc_state, ibm5150_pit8253_out2_changed)) MCFG_I8237_ADD( "dma8237", XTAL_14_31818MHz/3, ibm5150_dma8237_config ) @@ -1139,7 +1163,13 @@ static MACHINE_CONFIG_START( t1000_286, tandy_pc_state ) MCFG_MACHINE_START_OVERRIDE(pc_state,pc) MCFG_MACHINE_RESET_OVERRIDE(pc_state,pc) - MCFG_PIT8253_ADD( "pit8253", ibm5150_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(pc_state, ibm5150_pit8253_out1_changed)) + MCFG_PIT8253_CLK2(XTAL_14_31818MHz/12) /* pio port c pin 4, and speaker polling enough */ + MCFG_PIT8253_OUT2_HANDLER(WRITELINE(pc_state, ibm5150_pit8253_out2_changed)) MCFG_I8237_ADD( "dma8237", XTAL_14_31818MHz/3, ibm5150_dma8237_config ) @@ -1224,7 +1254,17 @@ static MACHINE_CONFIG_START( ibmpcjr, tandy_pc_state ) MCFG_MACHINE_START_OVERRIDE(pc_state,pcjr) MCFG_MACHINE_RESET_OVERRIDE(pc_state,pcjr) - MCFG_PIT8253_ADD( "pit8253", pcjr_pit8253_config ) +/* + 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. + */ + MCFG_DEVICE_ADD("pit8253", PIT8253, 0) + MCFG_PIT8253_CLK0(XTAL_14_31818MHz/12) + MCFG_PIT8253_OUT0_HANDLER(DEVWRITELINE("pic8259", pic8259_device, ir0_w)) + MCFG_PIT8253_CLK1(XTAL_14_31818MHz/12) + MCFG_PIT8253_CLK2(XTAL_14_31818MHz/12) + MCFG_PIT8253_OUT2_HANDLER(WRITELINE(pc_state, ibm5150_pit8253_out2_changed)) MCFG_PIC8259_ADD( "pic8259", WRITELINE(pc_state,pcjr_pic8259_set_int_line), VCC, NULL ) @@ -1314,7 +1354,17 @@ static MACHINE_CONFIG_START( asst128, pc_state ) MCFG_MACHINE_START_OVERRIDE(pc_state,pc) MCFG_MACHINE_RESET_OVERRIDE(pc_state,pc) - MCFG_PIT8253_ADD( "pit8253", pcjr_pit8253_config ) +/* + 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. + */ + MCFG_DEVICE_ADD("pit8253", PIT8253, 0) + MCFG_PIT8253_CLK0(XTAL_14_31818MHz/12) + MCFG_PIT8253_OUT0_HANDLER(DEVWRITELINE("pic8259", pic8259_device, ir0_w)) + MCFG_PIT8253_CLK1(XTAL_14_31818MHz/12) + MCFG_PIT8253_CLK2(XTAL_14_31818MHz/12) + MCFG_PIT8253_OUT2_HANDLER(WRITELINE(pc_state, ibm5150_pit8253_out2_changed)) MCFG_PIC8259_ADD( "pic8259", INPUTLINE("maincpu", 0), VCC, NULL ) @@ -1375,7 +1425,13 @@ static MACHINE_CONFIG_START( iskr3104, pc_state ) MCFG_MACHINE_START_OVERRIDE(pc_state,pc) MCFG_MACHINE_RESET_OVERRIDE(pc_state,pc) - MCFG_PIT8253_ADD( "pit8253", ibm5150_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(pc_state, ibm5150_pit8253_out1_changed)) + MCFG_PIT8253_CLK2(XTAL_14_31818MHz/12) /* pio port c pin 4, and speaker polling enough */ + MCFG_PIT8253_OUT2_HANDLER(WRITELINE(pc_state, ibm5150_pit8253_out2_changed)) MCFG_I8237_ADD( "dma8237", XTAL_14_31818MHz/3, ibm5150_dma8237_config ) @@ -1438,7 +1494,13 @@ static MACHINE_CONFIG_START( poisk2, pc_state ) MCFG_MACHINE_START_OVERRIDE(pc_state,pc) MCFG_MACHINE_RESET_OVERRIDE(pc_state,pc) - MCFG_PIT8253_ADD( "pit8253", ibm5150_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(pc_state, ibm5150_pit8253_out1_changed)) + MCFG_PIT8253_CLK2(XTAL_14_31818MHz/12) /* pio port c pin 4, and speaker polling enough */ + MCFG_PIT8253_OUT2_HANDLER(WRITELINE(pc_state, ibm5150_pit8253_out2_changed)) MCFG_I8237_ADD( "dma8237", XTAL_14_31818MHz/3, ibm5150_dma8237_config ) @@ -1501,7 +1563,13 @@ static MACHINE_CONFIG_START( zenith, pc_state ) MCFG_MACHINE_START_OVERRIDE(pc_state,pc) MCFG_MACHINE_RESET_OVERRIDE(pc_state,pc) - MCFG_PIT8253_ADD( "pit8253", ibm5150_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(pc_state, ibm5150_pit8253_out1_changed)) + MCFG_PIT8253_CLK2(XTAL_14_31818MHz/12) /* pio port c pin 4, and speaker polling enough */ + MCFG_PIT8253_OUT2_HANDLER(WRITELINE(pc_state, ibm5150_pit8253_out2_changed)) MCFG_I8237_ADD( "dma8237", XTAL_14_31818MHz/3, ibm5150_dma8237_config ) @@ -1564,7 +1632,13 @@ static MACHINE_CONFIG_START( olivetti, pc_state ) MCFG_MACHINE_START_OVERRIDE(pc_state,pc) MCFG_MACHINE_RESET_OVERRIDE(pc_state,pc) - MCFG_PIT8253_ADD( "pit8253", ibm5150_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(pc_state, ibm5150_pit8253_out1_changed)) + MCFG_PIT8253_CLK2(XTAL_14_31818MHz/12) /* pio port c pin 4, and speaker polling enough */ + MCFG_PIT8253_OUT2_HANDLER(WRITELINE(pc_state, ibm5150_pit8253_out2_changed)) MCFG_I8237_ADD( "dma8237", XTAL_14_31818MHz/3, ibm5150_dma8237_config ) @@ -1627,7 +1701,13 @@ static MACHINE_CONFIG_START( ibm5550, pc_state ) MCFG_MACHINE_START_OVERRIDE(pc_state,pc) MCFG_MACHINE_RESET_OVERRIDE(pc_state,pc) - MCFG_PIT8253_ADD( "pit8253", ibm5150_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(pc_state, ibm5150_pit8253_out1_changed)) + MCFG_PIT8253_CLK2(XTAL_14_31818MHz/12) /* pio port c pin 4, and speaker polling enough */ + MCFG_PIT8253_OUT2_HANDLER(WRITELINE(pc_state, ibm5150_pit8253_out2_changed)) MCFG_I8237_ADD( "dma8237", XTAL_14_31818MHz/3, ibm5150_dma8237_config ) diff --git a/src/mess/drivers/pc1512.c b/src/mess/drivers/pc1512.c index b9c815d1257..a32b8f82555 100644 --- a/src/mess/drivers/pc1512.c +++ b/src/mess/drivers/pc1512.c @@ -194,7 +194,7 @@ WRITE8_MEMBER( pc1512_state::system_w ) m_port61 = data; - m_pit->gate2_w(BIT(data, 0)); + m_pit->write_gate2(BIT(data, 0)); m_speaker_drive = BIT(data, 1); update_speaker(); @@ -1007,26 +1007,6 @@ WRITE_LINE_MEMBER( pc1512_state::pit2_w ) update_speaker(); } -static const struct pit8253_interface pit_intf = -{ - { - { - XTAL_28_63636MHz/24, - DEVCB_LINE_VCC, - DEVCB_DEVICE_LINE_MEMBER(I8259A2_TAG, pic8259_device, ir0_w) - }, { - XTAL_28_63636MHz/24, - DEVCB_LINE_VCC, - DEVCB_DRIVER_LINE_MEMBER(pc1512_state, pit1_w) - }, { - XTAL_28_63636MHz/24, - DEVCB_NULL, - DEVCB_DRIVER_LINE_MEMBER(pc1512_state, pit2_w) - } - } -}; - - //------------------------------------------------- // upd765_interface fdc_intf //------------------------------------------------- @@ -1311,7 +1291,15 @@ static MACHINE_CONFIG_START( pc1512, pc1512_state ) MCFG_PC1512_KEYBOARD_ADD(WRITELINE(pc1512_state, kbclk_w), WRITELINE(pc1512_state, kbdata_w)) MCFG_I8237_ADD(I8237A5_TAG, XTAL_24MHz/6, dmac_intf) MCFG_PIC8259_ADD(I8259A2_TAG, INPUTLINE(I8086_TAG, INPUT_LINE_IRQ0), VCC, NULL) - MCFG_PIT8253_ADD(I8253_TAG, pit_intf) + + MCFG_DEVICE_ADD(I8253_TAG, PIT8253, 0) + MCFG_PIT8253_CLK0(XTAL_28_63636MHz/24) + MCFG_PIT8253_OUT0_HANDLER(DEVWRITELINE(I8259A2_TAG, pic8259_device, ir0_w)) + MCFG_PIT8253_CLK1(XTAL_28_63636MHz/24) + MCFG_PIT8253_OUT1_HANDLER(WRITELINE(pc1512_state, pit1_w)) + MCFG_PIT8253_CLK2(XTAL_28_63636MHz/24) + MCFG_PIT8253_OUT2_HANDLER(WRITELINE(pc1512_state, pit2_w)) + MCFG_MC146818_ADD(MC146818_TAG, XTAL_32_768kHz) MCFG_MC146818_IRQ_HANDLER(DEVWRITELINE(I8259A2_TAG, pic8259_device, ir2_w)) MCFG_PC_FDC_XT_ADD(PC_FDC_XT_TAG) @@ -1389,7 +1377,15 @@ static MACHINE_CONFIG_START( pc1640, pc1640_state ) MCFG_PC1512_KEYBOARD_ADD(WRITELINE(pc1512_state, kbclk_w), WRITELINE(pc1512_state, kbdata_w)) MCFG_I8237_ADD(I8237A5_TAG, XTAL_24MHz/6, dmac_intf) MCFG_PIC8259_ADD(I8259A2_TAG, INPUTLINE(I8086_TAG, INPUT_LINE_IRQ0), VCC, NULL) - MCFG_PIT8253_ADD(I8253_TAG, pit_intf) + + MCFG_DEVICE_ADD(I8253_TAG, PIT8253, 0) + MCFG_PIT8253_CLK0(XTAL_28_63636MHz/24) + MCFG_PIT8253_OUT0_HANDLER(DEVWRITELINE(I8259A2_TAG, pic8259_device, ir0_w)) + MCFG_PIT8253_CLK1(XTAL_28_63636MHz/24) + MCFG_PIT8253_OUT1_HANDLER(WRITELINE(pc1512_state, pit1_w)) + MCFG_PIT8253_CLK2(XTAL_28_63636MHz/24) + MCFG_PIT8253_OUT2_HANDLER(WRITELINE(pc1512_state, pit2_w)) + MCFG_MC146818_ADD(MC146818_TAG, XTAL_32_768kHz) MCFG_MC146818_IRQ_HANDLER(DEVWRITELINE(I8259A2_TAG, pic8259_device, ir2_w)) MCFG_PC_FDC_XT_ADD(PC_FDC_XT_TAG) diff --git a/src/mess/drivers/pc88va.c b/src/mess/drivers/pc88va.c index d3183f23cce..0ffd89d2b3d 100644 --- a/src/mess/drivers/pc88va.c +++ b/src/mess/drivers/pc88va.c @@ -1747,31 +1747,6 @@ WRITE_LINE_MEMBER(pc88va_state::pc88va_pit_out0_changed) } } -static const struct pit8253_interface pc88va_pit8253_config = -{ - { - { - /* general purpose timer 1 */ - 8000000, - DEVCB_NULL, - DEVCB_DRIVER_LINE_MEMBER(pc88va_state, pc88va_pit_out0_changed) - }, - { - /* BEEP frequency setting */ - 8000000, - DEVCB_NULL, - DEVCB_NULL - }, - { - /* RS232C baud rate setting */ - 8000000, - DEVCB_NULL, - DEVCB_NULL - } - } -}; - - void pc88va_state::fdc_drq(bool state) { printf("%02x DRQ\n",state); @@ -1895,7 +1870,11 @@ static MACHINE_CONFIG_START( pc88va, pc88va_state ) MCFG_FLOPPY_DRIVE_ADD("upd765:1", pc88va_floppies, "525hd", pc88va_state::floppy_formats) MCFG_SOFTWARE_LIST_ADD("disk_list","pc88va") - MCFG_PIT8253_ADD("pit8253",pc88va_pit8253_config) + MCFG_DEVICE_ADD("pit8253", PIT8253, 0) + MCFG_PIT8253_CLK0(8000000) /* general purpose timer 1 */ + MCFG_PIT8253_OUT0_HANDLER(WRITELINE(pc88va_state, pc88va_pit_out0_changed)) + MCFG_PIT8253_CLK1(8000000) /* BEEP frequency setting */ + MCFG_PIT8253_CLK2(8000000) /* RS232C baud rate setting */ MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("ym", YM2203, 3993600) //unknown clock / divider diff --git a/src/mess/drivers/pc9801.c b/src/mess/drivers/pc9801.c index 3247fb5daa3..dcf28f1cbdd 100644 --- a/src/mess/drivers/pc9801.c +++ b/src/mess/drivers/pc9801.c @@ -431,10 +431,11 @@ Keyboard TX commands: class pc9801_state : public driver_device { public: - pc9801_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), + pc9801_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_dmac(*this, "i8237"), + m_pit8253(*this, "pit8253"), m_pic1(*this, "pic8259_master"), m_pic2(*this, "pic8259_slave"), m_fdc_2hd(*this, "upd765_2hd"), @@ -450,10 +451,13 @@ public: m_video_ram_2(*this, "video_ram_2"), m_beeper(*this, "beeper"), m_ram(*this, RAM_TAG), - m_gfxdecode(*this, "gfxdecode") { } + m_gfxdecode(*this, "gfxdecode") + { + } required_device<cpu_device> m_maincpu; required_device<am9517a_device> m_dmac; + required_device<pit8253_device> m_pit8253; required_device<pic8259_device> m_pic1; required_device<pic8259_device> m_pic2; required_device<upd765a_device> m_fdc_2hd; @@ -537,6 +541,7 @@ public: UINT8 m_sys_type; DECLARE_WRITE_LINE_MEMBER( keyboard_irq ); + DECLARE_WRITE_LINE_MEMBER( write_uart_clock ); DECLARE_READ8_MEMBER(pc9801_xx_r); DECLARE_WRITE8_MEMBER(pc9801_xx_w); DECLARE_READ8_MEMBER(pc9801_00_r); @@ -1331,7 +1336,7 @@ READ8_MEMBER(pc9801_state::pc9801_70_r) if(offset & 0x08) printf("Read to undefined port [%02x]\n",offset+0x70); else - return machine().device<pit8253_device>("pit8253")->read(space, (offset & 6) >> 1); + return m_pit8253->read(space, (offset & 6) >> 1); } return 0xff; @@ -1349,7 +1354,7 @@ WRITE8_MEMBER(pc9801_state::pc9801_70_w) else // odd { if(offset < 0x08) - machine().device<pit8253_device>("pit8253")->write(space, (offset & 6) >> 1, data); + m_pit8253->write(space, (offset & 6) >> 1, data); //else // printf("Write to undefined port [%02x] <- %02x\n",offset+0x70,data); } @@ -1502,6 +1507,12 @@ WRITE8_MEMBER(pc9801_state::pc9801_a0_w) } } +DECLARE_WRITE_LINE_MEMBER(pc9801_state::write_uart_clock) +{ + m_sio->write_txc(state); + m_sio->write_rxc(state); +} + READ8_MEMBER(pc9801_state::pc9801_fdc_2hd_r) { if((offset & 1) == 0) @@ -2264,7 +2275,7 @@ READ8_MEMBER(pc9801_state::pc9801rs_pit_mirror_r) if(offset & 0x08) printf("Read to undefined port [%02x]\n",offset+0x3fd8); else - return machine().device<pit8253_device>("pit8253")->read(space, (offset & 6) >> 1); + return m_pit8253->read(space, (offset & 6) >> 1); } return 0xff; @@ -2279,7 +2290,7 @@ WRITE8_MEMBER(pc9801_state::pc9801rs_pit_mirror_w) else // odd { if(offset < 0x08) - machine().device<pit8253_device>("pit8253")->write(space, (offset & 6) >> 1, data); + m_pit8253->write(space, (offset & 6) >> 1, data); else printf("Write to undefined port [%04x] <- %02x\n",offset+0x3fd8,data); } @@ -3073,44 +3084,6 @@ READ8_MEMBER(pc9801_state::get_slave_ack) #define MAIN_CLOCK_X1 XTAL_1_9968MHz #define MAIN_CLOCK_X2 XTAL_2_4576MHz -static const struct pit8253_interface pc9801_pit8253_config = -{ - { - { - MAIN_CLOCK_X1, /* heartbeat IRQ */ - DEVCB_NULL, - DEVCB_DEVICE_LINE_MEMBER("pic8259_master", pic8259_device, ir0_w) - }, { - MAIN_CLOCK_X1, /* Memory Refresh */ - DEVCB_NULL, - DEVCB_NULL - }, { - MAIN_CLOCK_X1, /* RS-232c */ - DEVCB_NULL, - DEVCB_NULL - } - } -}; - -static const struct pit8253_interface pc9821_pit8253_config = -{ - { - { - MAIN_CLOCK_X2, /* heartbeat IRQ */ - DEVCB_NULL, - DEVCB_DEVICE_LINE_MEMBER("pic8259_master", pic8259_device, ir0_w) - }, { - MAIN_CLOCK_X2, /* Memory Refresh */ - DEVCB_NULL, - DEVCB_NULL - }, { - MAIN_CLOCK_X2, /* RS-232c */ - DEVCB_NULL, - DEVCB_NULL - } - } -}; - /**************************************** * * I8237 DMA interface @@ -3694,7 +3667,13 @@ static MACHINE_CONFIG_START( pc9801, pc9801_state ) MCFG_MACHINE_START_OVERRIDE(pc9801_state,pc9801f) MCFG_MACHINE_RESET_OVERRIDE(pc9801_state,pc9801f) - MCFG_PIT8253_ADD( "pit8253", pc9801_pit8253_config ) + MCFG_DEVICE_ADD("pit8253", PIT8253, 0) + MCFG_PIT8253_CLK0(MAIN_CLOCK_X1) /* heartbeat IRQ */ + MCFG_PIT8253_OUT0_HANDLER(DEVWRITELINE("pic8259_master", pic8259_device, ir0_w)) + MCFG_PIT8253_CLK1(MAIN_CLOCK_X1) /* Memory Refresh */ + MCFG_PIT8253_CLK2(MAIN_CLOCK_X1) /* RS-232c */ + MCFG_PIT8253_OUT2_HANDLER(WRITELINE(pc9801_state, write_uart_clock)) + 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 @@ -3706,6 +3685,7 @@ static MACHINE_CONFIG_START( pc9801, pc9801_state ) MCFG_FRAGMENT_ADD(pc9801_cbus) MCFG_FRAGMENT_ADD(pc9801_sasi) MCFG_UPD1990A_ADD(UPD1990A_TAG, XTAL_32_768kHz, NULL, NULL) + MCFG_DEVICE_ADD(UPD8251_TAG, I8251, 0) MCFG_UPD765A_ADD("upd765_2hd", false, true) @@ -3763,7 +3743,13 @@ static MACHINE_CONFIG_START( pc9801rs, pc9801_state ) MCFG_MACHINE_START_OVERRIDE(pc9801_state,pc9801rs) MCFG_MACHINE_RESET_OVERRIDE(pc9801_state,pc9801rs) - MCFG_PIT8253_ADD( "pit8253", pc9801_pit8253_config ) + MCFG_DEVICE_ADD("pit8253", PIT8253, 0) + MCFG_PIT8253_CLK0(MAIN_CLOCK_X1) /* heartbeat IRQ */ + MCFG_PIT8253_OUT0_HANDLER(DEVWRITELINE("pic8259_master", pic8259_device, ir0_w)) + MCFG_PIT8253_CLK1(MAIN_CLOCK_X1) /* Memory Refresh */ + MCFG_PIT8253_CLK2(MAIN_CLOCK_X1) /* RS-232c */ + MCFG_PIT8253_OUT2_HANDLER(WRITELINE(pc9801_state, write_uart_clock)) + 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 @@ -3841,7 +3827,13 @@ static MACHINE_CONFIG_START( pc9821, pc9801_state ) MCFG_MACHINE_START_OVERRIDE(pc9801_state,pc9821) MCFG_MACHINE_RESET_OVERRIDE(pc9801_state,pc9821) - MCFG_PIT8253_ADD( "pit8253", pc9821_pit8253_config ) + MCFG_DEVICE_ADD("pit8253", PIT8253, 0) + MCFG_PIT8253_CLK0(MAIN_CLOCK_X2) /* heartbeat IRQ */ + MCFG_PIT8253_OUT0_HANDLER(DEVWRITELINE("pic8259_master", pic8259_device, ir0_w)) + MCFG_PIT8253_CLK1(MAIN_CLOCK_X2) /* Memory Refresh */ + MCFG_PIT8253_CLK2(MAIN_CLOCK_X2) /* RS-232c */ + MCFG_PIT8253_OUT2_HANDLER(WRITELINE(pc9801_state, write_uart_clock)) + 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 diff --git a/src/mess/drivers/pk8020.c b/src/mess/drivers/pk8020.c index bc986a19fec..53bca287568 100644 --- a/src/mess/drivers/pk8020.c +++ b/src/mess/drivers/pk8020.c @@ -223,7 +223,15 @@ static MACHINE_CONFIG_START( pk8020, pk8020_state ) 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_PIT8253_ADD( "pit8253", pk8020_pit8253_intf ) + + MCFG_DEVICE_ADD("pit8253", PIT8253, 0) + MCFG_PIT8253_CLK0(XTAL_20MHz / 10) + MCFG_PIT8253_OUT0_HANDLER(WRITELINE(pk8020_state,pk8020_pit_out0)) + MCFG_PIT8253_CLK1(XTAL_20MHz / 10) + MCFG_PIT8253_OUT1_HANDLER(WRITELINE(pk8020_state,pk8020_pit_out1)) + 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) diff --git a/src/mess/drivers/pmd85.c b/src/mess/drivers/pmd85.c index cabbbfe72b7..bf3b43a91db 100644 --- a/src/mess/drivers/pmd85.c +++ b/src/mess/drivers/pmd85.c @@ -552,7 +552,30 @@ static MACHINE_CONFIG_START( pmd85, pmd85_state ) MCFG_QUANTUM_TIME(attotime::from_hz(60)) - MCFG_PIT8253_ADD( "pit8253", pmd85_pit8253_interface ) +/******************************************************************************* + + 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: + OUT1 - external interfaces connector (K2), i8251 (for V24 only) + CLK1 - hardwired to 2 MHz system clock + GATE1 - external interfaces connector (K2), default = 1 + Timer 2: + OUT2 - unused + CLK2 - hardwired to 1HZ signal generator + GATE2 - hardwired to 5V, default = 1 + +*******************************************************************************/ + + MCFG_DEVICE_ADD("pit8253", PIT8253, 0) + MCFG_PIT8253_CLK0(0) + MCFG_PIT8253_CLK1(2000000) + MCFG_PIT8253_CLK2(1) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) diff --git a/src/mess/drivers/poisk1.c b/src/mess/drivers/poisk1.c index 1614f8e6373..71759f4aed2 100644 --- a/src/mess/drivers/poisk1.c +++ b/src/mess/drivers/poisk1.c @@ -49,25 +49,6 @@ WRITE_LINE_MEMBER( p1_state::p1_pit8253_out2_changed ) m_speaker->level_w(m_p1_spkrdata & m_p1_input); } -const struct pit8253_interface p1_pit8253_config = -{ - { - { - XTAL_15MHz/12, /* heartbeat IRQ */ - DEVCB_NULL, - DEVCB_DEVICE_LINE_MEMBER("pic8259", pic8259_device, ir0_w) - }, { - XTAL_15MHz/12, /* keyboard poll -- XXX edge or level triggered? */ - DEVCB_NULL, - DEVCB_DEVICE_LINE_MEMBER("pic8259", pic8259_device, ir6_w) - }, { - XTAL_15MHz/12, /* pio port c pin 4, and speaker polling enough */ - DEVCB_NULL, - DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, p1_state, p1_pit8253_out2_changed) - } - } -}; - // Keyboard (via PPI) WRITE8_MEMBER(p1_state::p1_ppi_porta_w) @@ -137,7 +118,7 @@ READ8_MEMBER(p1_state::p1_ppi2_portc_r) WRITE8_MEMBER(p1_state::p1_ppi2_portb_w) { - m_pit8253->gate2_w(BIT(data, 0)); + m_pit8253->write_gate2(BIT(data, 0)); p1_speaker_set_spkrdata( data & 0x02 ); } @@ -301,7 +282,13 @@ static MACHINE_CONFIG_START( poisk1, p1_state ) MCFG_MACHINE_START_OVERRIDE( p1_state, poisk1 ) MCFG_MACHINE_RESET_OVERRIDE( p1_state, poisk1 ) - MCFG_PIT8253_ADD( "pit8253", p1_pit8253_config ) + MCFG_DEVICE_ADD( "pit8253", PIT8253 ,0) + MCFG_PIT8253_CLK0(XTAL_15MHz/12) /* heartbeat IRQ */ + MCFG_PIT8253_OUT0_HANDLER(DEVWRITELINE("pic8259", pic8259_device, ir0_w)) + MCFG_PIT8253_CLK1(XTAL_15MHz/12) /* keyboard poll -- XXX edge or level triggered? */ + MCFG_PIT8253_OUT1_HANDLER(DEVWRITELINE("pic8259", pic8259_device, ir6_w)) + MCFG_PIT8253_CLK2(XTAL_15MHz/12) /* pio port c pin 4, and speaker polling enough */ + MCFG_PIT8253_OUT2_HANDLER(WRITELINE(p1_state, p1_pit8253_out2_changed)) MCFG_PIC8259_ADD( "pic8259", INPUTLINE(":maincpu", 0), VCC, NULL ) diff --git a/src/mess/drivers/pp01.c b/src/mess/drivers/pp01.c index 8881f292f64..46b626cb512 100644 --- a/src/mess/drivers/pp01.c +++ b/src/mess/drivers/pp01.c @@ -221,7 +221,14 @@ static MACHINE_CONFIG_START( pp01, pp01_state ) MCFG_DEVICE_ADD("uart", I8251, 0) // when rts and dtr are both high, the uart is being used for cassette operations - MCFG_PIT8253_ADD( "pit8253", pp01_pit8253_intf ) + MCFG_DEVICE_ADD("pit8253", PIT8253, 0) + MCFG_PIT8253_CLK0(0) + MCFG_PIT8253_OUT0_HANDLER(WRITELINE(pp01_state,pp01_pit_out0)) + MCFG_PIT8253_CLK1(2000000) + MCFG_PIT8253_OUT1_HANDLER(WRITELINE(pp01_state,pp01_pit_out1)) + MCFG_PIT8253_CLK2(2000000) + MCFG_PIT8253_OUT2_HANDLER(DEVWRITELINE("pit8253", pit8253_device, write_clk0)) + MCFG_I8255A_ADD( "ppi8255", pp01_ppi8255_interface ) /* internal ram */ diff --git a/src/mess/drivers/qx10.c b/src/mess/drivers/qx10.c index 4ab93e02fce..29e9c4ecc47 100644 --- a/src/mess/drivers/qx10.c +++ b/src/mess/drivers/qx10.c @@ -504,40 +504,6 @@ WRITE_LINE_MEMBER(qx10_state::keyboard_clk) } /* - Timer 0 - Counter CLK Gate OUT Operation - 0 Keyboard clock (1200bps) Memory register D0 Speaker timer Speaker timer (100ms) - 1 Keyboard clock (1200bps) +5V 8259A (10E) IR5 Software timer - 2 Clock 1,9668MHz Memory register D7 8259 (12E) IR1 Software timer -*/ - -static const struct pit8253_interface qx10_pit8253_1_config = -{ - { - { 1200, DEVCB_NULL, DEVCB_NULL }, - { 1200, DEVCB_LINE_VCC, DEVCB_NULL }, - { MAIN_CLK / 8, DEVCB_NULL, DEVCB_NULL }, - } -}; - -/* - Timer 1 - Counter CLK Gate OUT Operation - 0 Clock 1,9668MHz +5V Speaker frequency 1kHz - 1 Clock 1,9668MHz +5V Keyboard clock 1200bps (Clock / 1664) - 2 Clock 1,9668MHz +5V RS-232C baud rate 9600bps (Clock / 208) -*/ -static const struct pit8253_interface qx10_pit8253_2_config = -{ - { - { MAIN_CLK / 8, DEVCB_LINE_VCC, DEVCB_NULL }, - { MAIN_CLK / 8, DEVCB_LINE_VCC, DEVCB_DRIVER_LINE_MEMBER(qx10_state, keyboard_clk) }, - { MAIN_CLK / 8, DEVCB_LINE_VCC, DEVCB_DEVICE_LINE_MEMBER("upd7201", z80dart_device, rxtxcb_w) }, - } -}; - - -/* Master PIC8259 IR0 Power down detection interrupt IR1 Software timer #1 interrupt @@ -863,8 +829,34 @@ static MACHINE_CONFIG_START( qx10, qx10_state ) MCFG_PALETTE_LENGTH(8) /* Devices */ - MCFG_PIT8253_ADD("pit8253_1", qx10_pit8253_1_config) - MCFG_PIT8253_ADD("pit8253_2", qx10_pit8253_2_config) + +/* + Timer 0 + Counter CLK Gate OUT Operation + 0 Keyboard clock (1200bps) Memory register D0 Speaker timer Speaker timer (100ms) + 1 Keyboard clock (1200bps) +5V 8259A (10E) IR5 Software timer + 2 Clock 1,9668MHz Memory register D7 8259 (12E) IR1 Software timer +*/ + + MCFG_DEVICE_ADD("pit8253_1", PIT8253, 0) + MCFG_PIT8253_CLK0(1200) + MCFG_PIT8253_CLK1(1200) + MCFG_PIT8253_CLK2(MAIN_CLK / 8) + +/* + Timer 1 + Counter CLK Gate OUT Operation + 0 Clock 1,9668MHz +5V Speaker frequency 1kHz + 1 Clock 1,9668MHz +5V Keyboard clock 1200bps (Clock / 1664) + 2 Clock 1,9668MHz +5V RS-232C baud rate 9600bps (Clock / 208) +*/ + MCFG_DEVICE_ADD("pit8253_2", PIT8253, 0) + MCFG_PIT8253_CLK0(MAIN_CLK / 8) + MCFG_PIT8253_CLK1(MAIN_CLK / 8) + MCFG_PIT8253_OUT1_HANDLER(WRITELINE(qx10_state, keyboard_clk)) + MCFG_PIT8253_CLK2(MAIN_CLK / 8) + MCFG_PIT8253_OUT2_HANDLER(DEVWRITELINE("upd7201", z80dart_device, rxtxcb_w)) + 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) diff --git a/src/mess/drivers/sage2.c b/src/mess/drivers/sage2.c index 12b25dcccf9..60acb1d71f2 100644 --- a/src/mess/drivers/sage2.c +++ b/src/mess/drivers/sage2.c @@ -384,34 +384,6 @@ static I8255A_INTERFACE( ppi1_intf ) }; -//------------------------------------------------- -// pit8253_config pit0_intf -//------------------------------------------------- - -static const struct pit8253_interface pit0_intf = -{ - { - { - 0, // from U75 OUT0 - DEVCB_LINE_VCC, - DEVCB_DEVICE_LINE_MEMBER(I8259_TAG, pic8259_device, ir6_w) - }, { - XTAL_16MHz/2/125, - DEVCB_LINE_VCC, - DEVCB_DEVICE_LINE_MEMBER(I8253_0_TAG, pit8253_device, clk2_w) - }, { - 0, // from OUT2 - DEVCB_LINE_VCC, - DEVCB_DEVICE_LINE_MEMBER(I8259_TAG, pic8259_device, ir0_w) - } - } -}; - - -//------------------------------------------------- -// pit8253_config pit1_intf -//------------------------------------------------- - WRITE_LINE_MEMBER( sage2_state::br1_w ) { m_usart0->write_txc(state); @@ -424,25 +396,6 @@ WRITE_LINE_MEMBER( sage2_state::br2_w ) m_usart1->write_rxc(state); } -static const struct pit8253_interface pit1_intf = -{ - { - { - XTAL_16MHz/2/125, - DEVCB_LINE_VCC, - DEVCB_DEVICE_LINE_MEMBER(I8253_0_TAG, pit8253_device, clk0_w) - }, { - XTAL_16MHz/2/13, - DEVCB_LINE_VCC, - DEVCB_DRIVER_LINE_MEMBER(sage2_state, br1_w) - }, { - XTAL_16MHz/2/13, - DEVCB_LINE_VCC, - DEVCB_DRIVER_LINE_MEMBER(sage2_state, br2_w) - } - } -}; - //------------------------------------------------- // upd765_interface fdc_intf //------------------------------------------------- @@ -516,8 +469,22 @@ static MACHINE_CONFIG_START( sage2, sage2_state ) 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_PIT8253_ADD(I8253_0_TAG, pit0_intf) - MCFG_PIT8253_ADD(I8253_1_TAG, pit1_intf) + + MCFG_DEVICE_ADD(I8253_0_TAG, PIT8253, 0) + MCFG_PIT8253_CLK0(0) // from U75 OUT0 + MCFG_PIT8253_OUT0_HANDLER(DEVWRITELINE(I8259_TAG, pic8259_device, ir6_w)) + MCFG_PIT8253_CLK1(XTAL_16MHz/2/125) + MCFG_PIT8253_OUT1_HANDLER(DEVWRITELINE(I8253_0_TAG, pit8253_device, write_clk2)) + MCFG_PIT8253_CLK2(0) // from OUT2 + MCFG_PIT8253_OUT2_HANDLER(DEVWRITELINE(I8259_TAG, pic8259_device, ir0_w)) + + MCFG_DEVICE_ADD(I8253_1_TAG, PIT8253, 0) + MCFG_PIT8253_CLK0(XTAL_16MHz/2/125) + MCFG_PIT8253_OUT0_HANDLER(DEVWRITELINE(I8253_0_TAG, pit8253_device, write_clk0)) + MCFG_PIT8253_CLK1(XTAL_16MHz/2/13) + MCFG_PIT8253_OUT1_HANDLER(WRITELINE(sage2_state, br1_w)) + MCFG_PIT8253_CLK2(XTAL_16MHz/2/13) + MCFG_PIT8253_OUT2_HANDLER(WRITELINE(sage2_state, br2_w)) MCFG_DEVICE_ADD(I8251_0_TAG, I8251, 0) MCFG_I8251_TXD_HANDLER(DEVWRITELINE(RS232_A_TAG, rs232_port_device, write_txd)) diff --git a/src/mess/drivers/special.c b/src/mess/drivers/special.c index 4ad2f0373ce..5c5cc4544fb 100644 --- a/src/mess/drivers/special.c +++ b/src/mess/drivers/special.c @@ -384,7 +384,14 @@ static MACHINE_CONFIG_START( special, special_state ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) /* Devices */ - MCFG_PIT8253_ADD( "pit8253", specimx_pit8253_intf ) + MCFG_DEVICE_ADD( "pit8253", PIT8253, 0) + MCFG_PIT8253_CLK0(2000000) + MCFG_PIT8253_OUT0_HANDLER(WRITELINE(special_state, specimx_pit8253_out0_changed)) + MCFG_PIT8253_CLK1(2000000) + MCFG_PIT8253_OUT1_HANDLER(WRITELINE(special_state, specimx_pit8253_out1_changed)) + MCFG_PIT8253_CLK2(2000000) + MCFG_PIT8253_OUT2_HANDLER(WRITELINE(special_state, specimx_pit8253_out2_changed)) + MCFG_I8255_ADD( "ppi8255", specialist_ppi8255_interface ) MCFG_CASSETTE_ADD( "cassette", special_cassette_interface ) MCFG_SOFTWARE_LIST_ADD("cass_list","special_cass") diff --git a/src/mess/drivers/tandy2k.c b/src/mess/drivers/tandy2k.c index 11462a6866e..8c4021b9914 100644 --- a/src/mess/drivers/tandy2k.c +++ b/src/mess/drivers/tandy2k.c @@ -107,15 +107,15 @@ WRITE8_MEMBER( tandy2k_state::enable_w ) m_extclk = BIT(data, 1); // m_speaker gate - m_pit->gate0_w(BIT(data, 2)); + m_pit->write_gate0(BIT(data, 2)); // m_speaker data m_spkrdata = BIT(data, 3); speaker_update(); // refresh and baud rate clocks - m_pit->gate1_w(BIT(data, 4)); - m_pit->gate2_w(BIT(data, 4)); + m_pit->write_gate1(BIT(data, 4)); + m_pit->write_gate2(BIT(data, 4)); // FDC reset if(BIT(data, 5)) @@ -428,25 +428,6 @@ WRITE_LINE_MEMBER( tandy2k_state::rfrqpulse_w ) { } -static const struct pit8253_interface pit_intf = -{ - { - { - XTAL_16MHz/16, - DEVCB_NULL, - DEVCB_DRIVER_LINE_MEMBER(tandy2k_state, outspkr_w) - }, { - XTAL_16MHz/8, - DEVCB_NULL, - DEVCB_DRIVER_LINE_MEMBER(tandy2k_state, intbrclk_w) - }, { - XTAL_16MHz/8, - DEVCB_NULL, - DEVCB_DRIVER_LINE_MEMBER(tandy2k_state, rfrqpulse_w) - } - } -}; - // Intel 8255A Interface WRITE_LINE_MEMBER( tandy2k_state::write_centronics_ack ) @@ -708,7 +689,14 @@ static MACHINE_CONFIG_START( tandy2k, tandy2k_state ) MCFG_RS232_RXD_HANDLER(DEVWRITELINE(I8251A_TAG, i8251_device, write_rxd)) MCFG_RS232_DSR_HANDLER(DEVWRITELINE(I8251A_TAG, i8251_device, write_dsr)) - MCFG_PIT8253_ADD(I8253_TAG, pit_intf) + MCFG_DEVICE_ADD(I8253_TAG, PIT8253, 0) + MCFG_PIT8253_CLK0(XTAL_16MHz/16) + MCFG_PIT8253_OUT0_HANDLER(WRITELINE(tandy2k_state, outspkr_w)) + MCFG_PIT8253_CLK1(XTAL_16MHz/8) + MCFG_PIT8253_OUT1_HANDLER(WRITELINE(tandy2k_state, intbrclk_w)) + MCFG_PIT8253_CLK2(XTAL_16MHz/8) + MCFG_PIT8253_OUT2_HANDLER(WRITELINE(tandy2k_state, rfrqpulse_w)) + MCFG_PIC8259_ADD(I8259A_0_TAG, DEVWRITELINE(I80186_TAG, i80186_cpu_device, int0_w), VCC, NULL) MCFG_PIC8259_ADD(I8259A_1_TAG, DEVWRITELINE(I80186_TAG, i80186_cpu_device, int1_w), VCC, NULL) MCFG_I8272A_ADD(I8272A_TAG, true) diff --git a/src/mess/drivers/tdv2324.c b/src/mess/drivers/tdv2324.c index f271fea2918..09753731302 100644 --- a/src/mess/drivers/tdv2324.c +++ b/src/mess/drivers/tdv2324.c @@ -236,54 +236,6 @@ UINT32 tdv2324_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, //************************************************************************** //------------------------------------------------- -// pit8253_config pit0_intf -//------------------------------------------------- - -static const struct pit8253_interface pit0_intf = -{ - { - { - 0, - DEVCB_NULL, - DEVCB_NULL - }, { - 0, - DEVCB_NULL, - DEVCB_NULL - }, { - 0, - DEVCB_NULL, - DEVCB_NULL - } - } -}; - - -//------------------------------------------------- -// pit8253_config pit1_intf -//------------------------------------------------- - -static const struct pit8253_interface pit1_intf = -{ - { - { - 0, - DEVCB_NULL, - DEVCB_NULL - }, { - 0, - DEVCB_NULL, - DEVCB_NULL - }, { - 0, - DEVCB_NULL, - DEVCB_NULL - } - } -}; - - -//------------------------------------------------- // Z80SIO_INTERFACE( sio_intf ) //------------------------------------------------- @@ -367,8 +319,11 @@ static MACHINE_CONFIG_START( tdv2324, tdv2324_state ) // devices MCFG_PIC8259_ADD(P8259A_TAG, NULL, VCC, NULL) - MCFG_PIT8253_ADD(P8253_5_0_TAG, pit0_intf) - MCFG_PIT8253_ADD(P8253_5_1_TAG, pit1_intf) + + MCFG_DEVICE_ADD(P8253_5_0_TAG, PIT8253, 0) + + MCFG_DEVICE_ADD(P8253_5_1_TAG, PIT8253, 0) + MCFG_Z80SIO2_ADD(MK3887N4_TAG, 8000000/2, sio_intf) MCFG_FD1797x_ADD(FD1797PL02_TAG, 8000000/4) MCFG_FLOPPY_DRIVE_ADD(FD1797PL02_TAG":0", tdv2324_floppies, "8dsdd", floppy_image_device::default_floppy_formats) diff --git a/src/mess/drivers/unior.c b/src/mess/drivers/unior.c index d2ba7d53dda..95d8f3b1177 100644 --- a/src/mess/drivers/unior.c +++ b/src/mess/drivers/unior.c @@ -49,15 +49,18 @@ ToDo: class unior_state : public driver_device { public: - unior_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag) - , m_maincpu(*this, "maincpu") - , m_pit(*this, "pit") - , m_dma(*this, "dma") - { } + unior_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_pit(*this, "pit"), + m_dma(*this, "dma"), + m_uart(*this, "uart") + { + } DECLARE_WRITE8_MEMBER(vram_w); DECLARE_WRITE8_MEMBER(scroll_w); + DECLARE_WRITE_LINE_MEMBER(write_uart_clock); DECLARE_READ8_MEMBER(ppi0_b_r); DECLARE_WRITE8_MEMBER(ppi0_b_w); DECLARE_READ8_MEMBER(ppi1_a_r); @@ -78,6 +81,7 @@ private: required_device<cpu_device> m_maincpu; required_device<pit8253_device> m_pit; required_device<i8257_device> m_dma; + required_device<i8251_device> m_uart; }; static ADDRESS_MAP_START( unior_mem, AS_PROGRAM, 8, unior_state ) @@ -293,37 +297,16 @@ PALETTE_INIT_MEMBER(unior_state,unior) /************************************************* - i8253 + i8255 *************************************************/ -static const struct pit8253_interface pit_intf = -{ - { - { - XTAL_20MHz / 9, // unknown frequency - DEVCB_LINE_VCC, - DEVCB_NULL // looks like vertical or horizontal sync pulses - }, - { - XTAL_16MHz / 9, // unknown frequency - DEVCB_LINE_VCC, - DEVCB_NULL // UART transmit/receive clock - }, - { - XTAL_16MHz / 9 / 64, // unknown frequency - DEVCB_NULL, - DEVCB_DEVICE_LINE_MEMBER("speaker", speaker_sound_device, level_w) - } - } -}; - -/************************************************* - - i8255 - -*************************************************/ +WRITE_LINE_MEMBER(unior_state::write_uart_clock) +{ + m_uart->write_txc(state); + m_uart->write_rxc(state); +} READ8_MEMBER( unior_state::ppi0_b_r ) { @@ -377,7 +360,7 @@ d7 = not used WRITE8_MEMBER( unior_state::ppi1_c_w ) { m_4e = data; - m_pit->gate2_w(BIT(data, 4)); + m_pit->write_gate2(BIT(data, 4)); } // ports a & b are for the keyboard @@ -466,7 +449,14 @@ static MACHINE_CONFIG_START( unior, unior_state ) /* Devices */ MCFG_DEVICE_ADD("uart", I8251, 0) - MCFG_PIT8253_ADD( "pit", pit_intf ) + + MCFG_DEVICE_ADD("pit", PIT8253, 0) + MCFG_PIT8253_CLK0(XTAL_20MHz / 9) // unknown frequency, looks like vertical or horizontal sync pulses + MCFG_PIT8253_CLK1(XTAL_16MHz / 9) // unknown frequency + MCFG_PIT8253_OUT1_HANDLER(WRITELINE(unior_state, write_uart_clock)) + 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_I8257_ADD("dma", XTAL_20MHz / 9, dma_intf) // unknown clock diff --git a/src/mess/drivers/victor9k.c b/src/mess/drivers/victor9k.c index 682f40e1bc1..22244cb6597 100644 --- a/src/mess/drivers/victor9k.c +++ b/src/mess/drivers/victor9k.c @@ -321,10 +321,6 @@ static MC6845_INTERFACE( hd46505s_intf ) }; -//------------------------------------------------- -// pit8253_interface pit_intf -//------------------------------------------------- - WRITE_LINE_MEMBER(victor9k_state::mux_serial_b_w) { } @@ -333,27 +329,6 @@ WRITE_LINE_MEMBER(victor9k_state::mux_serial_a_w) { } -static const struct pit8253_interface pit_intf = -{ - { - { - 2500000, - DEVCB_LINE_VCC, - DEVCB_DRIVER_LINE_MEMBER(victor9k_state, mux_serial_b_w) - }, { - 2500000, - DEVCB_LINE_VCC, - DEVCB_DRIVER_LINE_MEMBER(victor9k_state, mux_serial_a_w) - }, { - 100000, - DEVCB_LINE_VCC, - DEVCB_DEVICE_LINE_MEMBER(I8259A_TAG, pic8259_device, ir2_w) - } - } -}; - - - //------------------------------------------------- // PIC8259 //------------------------------------------------- @@ -997,7 +972,15 @@ static MACHINE_CONFIG_START( victor9k, victor9k_state ) MCFG_IEEE488_NDAC_CALLBACK(WRITELINE(victor9k_state, write_ndac)) MCFG_PIC8259_ADD(I8259A_TAG, INPUTLINE(I8088_TAG, INPUT_LINE_IRQ0), VCC, NULL) - MCFG_PIT8253_ADD(I8253_TAG, pit_intf) + + MCFG_DEVICE_ADD(I8253_TAG, PIT8253, 0) + MCFG_PIT8253_CLK0(2500000) + MCFG_PIT8253_OUT0_HANDLER(WRITELINE(victor9k_state, mux_serial_b_w)) + MCFG_PIT8253_CLK1(2500000) + MCFG_PIT8253_OUT1_HANDLER(WRITELINE(victor9k_state, mux_serial_a_w)) + MCFG_PIT8253_CLK2(100000) + MCFG_PIT8253_OUT2_HANDLER(DEVWRITELINE(I8259A_TAG, pic8259_device, ir2_w)) + MCFG_UPD7201_ADD(UPD7201_TAG, XTAL_30MHz/30, mpsc_intf) MCFG_MC6852_ADD(MC6852_TAG, XTAL_30MHz/30, ssda_intf) diff --git a/src/mess/drivers/votrpss.c b/src/mess/drivers/votrpss.c index 4bf4a973ed4..73b61ff5218 100644 --- a/src/mess/drivers/votrpss.c +++ b/src/mess/drivers/votrpss.c @@ -193,25 +193,6 @@ IRQ_CALLBACK_MEMBER( votrpss_state::irq_ack ) return 0x38; } -static const struct pit8253_interface pit_intf = -{ - { - { - XTAL_8MHz, /* Timer 0: baud rate gen for 8251 */ - DEVCB_NULL, - DEVCB_NULL - }, { - XTAL_8MHz / 256, /* Timer 1: Pitch */ - DEVCB_NULL, - DEVCB_NULL - }, { - XTAL_8MHz / 4096, /* Timer 2: Volume */ - DEVCB_NULL, - DEVCB_NULL - } - } -}; - READ8_MEMBER( votrpss_state::ppi_pa_r ) { UINT8 ret = m_term_data; @@ -328,10 +309,12 @@ static MACHINE_CONFIG_START( votrpss, votrpss_state ) MCFG_RS232_RXD_HANDLER(DEVWRITELINE("uart", i8251_device, write_rxd)) MCFG_RS232_DSR_HANDLER(DEVWRITELINE("uart", i8251_device, write_dsr)) - MCFG_DEVICE_ADD("uart_clock", CLOCK, 153600) - MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(votrpss_state, write_uart_clock)) + MCFG_DEVICE_ADD("pit", PIT8253, 0) + MCFG_PIT8253_CLK0(XTAL_8MHz) /* Timer 0: baud rate gen for 8251 */ + MCFG_PIT8253_OUT0_HANDLER(WRITELINE(votrpss_state, write_uart_clock)) + MCFG_PIT8253_CLK1(XTAL_8MHz / 256) /* Timer 1: Pitch */ + MCFG_PIT8253_CLK2(XTAL_8MHz / 4096) /* Timer 2: Volume */ - MCFG_PIT8253_ADD( "pit", pit_intf) MCFG_I8255_ADD("ppi", ppi_intf) 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 c39ac873044..25c6b672410 100644 --- a/src/mess/drivers/wangpc.c +++ b/src/mess/drivers/wangpc.c @@ -881,10 +881,6 @@ static I8255A_INTERFACE( ppi_intf ) }; -//------------------------------------------------- -// pit8253_config pit_intf -//------------------------------------------------- - WRITE_LINE_MEMBER( wangpc_state::pit2_w ) { if (state) @@ -894,26 +890,6 @@ WRITE_LINE_MEMBER( wangpc_state::pit2_w ) } } -static const struct pit8253_interface pit_intf = -{ - { - { - 500000, - DEVCB_LINE_VCC, - DEVCB_DEVICE_LINE_MEMBER(I8259A_TAG, pic8259_device, ir0_w) - }, { - 2000000, - DEVCB_LINE_VCC, - DEVCB_NULL - }, { - 500000, - DEVCB_LINE_VCC, - DEVCB_DRIVER_LINE_MEMBER(wangpc_state, pit2_w) - } - } -}; - - //------------------------------------------------- // IM6402_INTERFACE( uart_intf ) //------------------------------------------------- @@ -1189,7 +1165,14 @@ static MACHINE_CONFIG_START( wangpc, wangpc_state ) 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_PIT8253_ADD(I8253_TAG, pit_intf) + + MCFG_DEVICE_ADD(I8253_TAG, PIT8253, 0) + MCFG_PIT8253_CLK0(500000) + MCFG_PIT8253_OUT0_HANDLER(DEVWRITELINE(I8259A_TAG, pic8259_device, ir0_w)) + MCFG_PIT8253_CLK1(2000000) + MCFG_PIT8253_CLK2(500000) + MCFG_PIT8253_OUT2_HANDLER(WRITELINE(wangpc_state, pit2_w)) + MCFG_IM6402_ADD(IM6402_TAG, uart_intf) MCFG_MC2661_ADD(SCN2661_TAG, 0, epci_intf) MCFG_UPD765A_ADD(UPD765_TAG, false, false) diff --git a/src/mess/drivers/zorba.c b/src/mess/drivers/zorba.c index 930d9e7afee..7112f32cb7e 100644 --- a/src/mess/drivers/zorba.c +++ b/src/mess/drivers/zorba.c @@ -248,25 +248,6 @@ WRITE8_MEMBER( zorba_state::pia0_porta_w ) m_floppy1->get_device()->mon_w(BIT(data, 4)); } -static const struct pit8253_interface pit_intf = -{ - { - { - XTAL_24MHz / 3, /* Timer 0: ? */ - DEVCB_NULL, - DEVCB_NULL - }, { - XTAL_24MHz / 3, /* Timer 1: ? */ - DEVCB_NULL, - DEVCB_NULL - }, { - XTAL_24MHz / 3, /* Timer 2: ? */ - DEVCB_NULL, - DEVCB_NULL - } - } -}; - PALETTE_INIT_MEMBER( zorba_state, zorba ) { palette_set_color_rgb( machine(), 0, 0, 0, 0 ); /* Black */ @@ -403,7 +384,11 @@ static MACHINE_CONFIG_START( zorba, zorba_state ) // IEEE488 interface MCFG_DEVICE_ADD("pia1", PIA6821, 0) - MCFG_PIT8254_ADD( "pit", pit_intf) + MCFG_DEVICE_ADD("pit", PIT8254, 0) + MCFG_PIT8253_CLK0(XTAL_24MHz / 3) /* Timer 0: ? */ + MCFG_PIT8253_CLK1(XTAL_24MHz / 3) /* Timer 1: ? */ + MCFG_PIT8253_CLK2(XTAL_24MHz / 3) /* Timer 2: ? */ + MCFG_I8275_ADD("crtc", XTAL_14_31818MHz/7, 8, zorba_update_chr, DEVWRITELINE("dma", z80dma_device, rdy_w)) MCFG_I8275_IRQ_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) MCFG_FD1793x_ADD("fdc", XTAL_24MHz / 24) |