From 2b775adcc22e6335a8be626f33fb73ff0542cf29 Mon Sep 17 00:00:00 2001 From: mooglyguy Date: Fri, 28 Sep 2018 23:56:17 +0200 Subject: sun4: Changed sun4c to use an 82077 FDC and fixed hookup. Fixes FDC timeout warning in SunOS 4.1.4. [Ryan Holtz] --- src/mame/drivers/sun4.cpp | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/src/mame/drivers/sun4.cpp b/src/mame/drivers/sun4.cpp index 9b02534a7aa..d1091525de2 100644 --- a/src/mame/drivers/sun4.cpp +++ b/src/mame/drivers/sun4.cpp @@ -673,7 +673,7 @@ private: required_device m_scc1; required_device m_scc2; - required_device m_fdc; + required_device m_fdc; required_device m_floppy; required_device m_lance; required_device m_scsibus; @@ -1145,7 +1145,7 @@ void sun4_state::type1space_map(address_map &map) map(0x03000000, 0x0300000f).rw(FUNC(sun4_state::timer_r), FUNC(sun4_state::timer_w)).mirror(0xfffff0); map(0x05000000, 0x05000003).rw(FUNC(sun4_state::irq_r), FUNC(sun4_state::irq_w)); map(0x06000000, 0x0607ffff).rom().region("user1", 0); - map(0x07200000, 0x07200003).rw(FUNC(sun4_state::fdc_r), FUNC(sun4_state::fdc_w)); + map(0x07200000, 0x07200007).rw(FUNC(sun4_state::fdc_r), FUNC(sun4_state::fdc_w)); map(0x07400003, 0x07400003).rw(FUNC(sun4_state::auxio_r), FUNC(sun4_state::auxio_w)); map(0x08000000, 0x08000003).r(FUNC(sun4_state::ss1_sl0_id)); // slot 0 contains SCSI/DMA/Ethernet map(0x08400000, 0x0840000f).rw(FUNC(sun4_state::dma_r), FUNC(sun4_state::dma_w)); @@ -1300,12 +1300,22 @@ READ8_MEMBER( sun4_state::fdc_r ) switch(offset) { - case 0: // Main Status (R) + case 0: // Main Status (R, 82072) return m_fdc->msr_r(space, 0, 0xff); - case 1: // FIFO Data Port (R) + case 1: // FIFO Data Port (R, 82072) + case 5: // FIFO Data Port (R, 82077) return m_fdc->fifo_r(space, 0, 0xff); + case 2: // Digital Output Register (R, 82077) + return m_fdc->dor_r(space, 0, 0xff); + + case 4: // Main Status Register (R, 82077) + return m_fdc->msr_r(space, 0, 0xff); + + case 7:// Digital Input Register (R, 82077) + return m_fdc->dir_r(space, 0, 0xff); + default: break; } @@ -1317,14 +1327,20 @@ WRITE8_MEMBER( sun4_state::fdc_w ) { switch(offset) { - case 0: // Data Rate Select Register (W) + case 0: // Data Rate Select Register (W, 82072) + case 4: // Data Rate Select Register (W, 82077) m_fdc->dsr_w(space, 0, data, 0xff); break; - case 1: // FIFO Data Port (W) + case 1: // FIFO Data Port (W, 82072) + case 5: // FIFO Data Port (W, 82077) m_fdc->fifo_w(space, 0, data, 0xff); break; + case 7: // Configuration Control REgister (W, 82077) + m_fdc->ccr_w(space, 0, data, 0xff); + break; + default: break; } @@ -1541,7 +1557,6 @@ void sun4_state::dma_check_interrupts() if (old_irq != m_dma_irq) { //logerror("m_dma_irq %d because irq_or_err_pending:%d and irq_enabled:%d\n", m_dma_irq ? 1 : 0, irq_or_err_pending, irq_enabled); - logerror("dma\n"); m_maincpu->set_input_line(SPARC_IRQ3, m_dma_irq ? ASSERT_LINE : CLEAR_LINE); } } @@ -1890,7 +1905,7 @@ MACHINE_CONFIG_START(sun4_state::sun4c) M48T02(config, TIMEKEEPER_TAG, 0); - I82072(config, m_fdc, 24_MHz_XTAL); + N82077AA(config, m_fdc, 24_MHz_XTAL); m_fdc->set_ready_line_connected(false); m_fdc->intrq_wr_callback().set(FUNC(sun4_state::fdc_irq)); FLOPPY_CONNECTOR(config, m_floppy, sun_floppies, "35hd", sun4_state::floppy_formats); -- cgit v1.2.3