diff options
author | AJR <ajrhacker@users.noreply.github.com> | 2020-05-13 18:28:36 -0400 |
---|---|---|
committer | AJR <ajrhacker@users.noreply.github.com> | 2020-05-13 18:28:42 -0400 |
commit | 229c0aea58ce5b68b340f5c1abc2d937f954f0a5 (patch) | |
tree | b40feffc096d16e2ddd4098a6bc5df7891e8f3b4 /src/mame/drivers/pc1512.cpp | |
parent | 320b2f66b07c890fd3b4cf02785987ec0ed39d0a (diff) |
pc1512: Remove PC_FDC_XT (nw)
i8155: Turn logging back off (nw)
Diffstat (limited to 'src/mame/drivers/pc1512.cpp')
-rw-r--r-- | src/mame/drivers/pc1512.cpp | 52 |
1 files changed, 39 insertions, 13 deletions
diff --git a/src/mame/drivers/pc1512.cpp b/src/mame/drivers/pc1512.cpp index 146baf1182b..172db10ea9f 100644 --- a/src/mame/drivers/pc1512.cpp +++ b/src/mame/drivers/pc1512.cpp @@ -567,8 +567,8 @@ uint8_t pc1640_state::io_r(offs_t offset) else if (addr >= 0x078 && addr <= 0x07f) { data = mouse_r(offset & 0x07); decoded = true; } else if (addr >= 0x378 && addr <= 0x37b) { data = printer_r(offset & 0x03); decoded = true; } else if (addr >= 0x3b0 && addr <= 0x3df) { decoded = true; } - else if (addr >= 0x3f4 && addr <= 0x3f4) { data = m_fdc->fdc->msr_r(); decoded = true; } - else if (addr >= 0x3f5 && addr <= 0x3f5) { data = m_fdc->fdc->fifo_r(); decoded = true; } + else if (addr >= 0x3f4 && addr <= 0x3f4) { data = m_fdc->msr_r(); decoded = true; } + else if (addr >= 0x3f5 && addr <= 0x3f5) { data = m_fdc->fifo_r(); decoded = true; } else if (addr >= 0x3f8 && addr <= 0x3ff) { data = m_uart->ins8250_r(offset & 0x07); decoded = true; } if (decoded) @@ -637,7 +637,8 @@ void pc1512_state::pc1512_io(address_map &map) map(0x0a1, 0x0a1).w(FUNC(pc1512_state::nmi_mask_w)); map(0x378, 0x37b).rw(FUNC(pc1512_state::printer_r), FUNC(pc1512_state::printer_w)); map(0x3d0, 0x3df).rw(m_vdu, FUNC(ams40041_device::vdu_r), FUNC(ams40041_device::vdu_w)); - map(0x3f0, 0x3f7).m(m_fdc, FUNC(pc_fdc_xt_device::map)); + map(0x3f2, 0x3f2).w(FUNC(pc1512_state::drive_select_w)); + map(0x3f4, 0x3f5).m(m_fdc, FUNC(upd765a_device::map)); map(0x3f8, 0x3ff).rw(m_uart, FUNC(ins8250_device::ins8250_r), FUNC(ins8250_device::ins8250_w)); } @@ -670,8 +671,8 @@ void pc1640_state::pc1640_io(address_map &map) map(0x080, 0x083).w(FUNC(pc1640_state::dma_page_w)); map(0x0a1, 0x0a1).w(FUNC(pc1640_state::nmi_mask_w)); map(0x378, 0x37b).w(FUNC(pc1640_state::printer_w)); - map(0x3f2, 0x3f2).w(m_fdc, FUNC(pc_fdc_xt_device::dor_w)); - map(0x3f5, 0x3f5).w(PC_FDC_XT_TAG ":upd765", FUNC(upd765_family_device::fifo_w)); + map(0x3f2, 0x3f2).w(FUNC(pc1640_state::drive_select_w)); + map(0x3f5, 0x3f5).w(m_fdc, FUNC(upd765a_device::fifo_w)); map(0x3f8, 0x3ff).w(m_uart, FUNC(ins8250_device::ins8250_w)); } @@ -984,6 +985,27 @@ WRITE_LINE_MEMBER( pc1512_base_state::fdc_drq_w ) update_fdc_drq(); } +void pc1512_base_state::drive_select_w(uint8_t data) +{ + m_fdc->set_floppy((data & 0x03) < 2 ? m_floppy[data & 0x03]->get_device() : nullptr); + for (int n = 0; n < 2; n++) + { + floppy_image_device *img = m_floppy[n]->get_device(); + if (img != nullptr) + img->mon_w((data & 0x03) == n && BIT(data, n + 4) ? 0 : 1); + } + + if (m_dreset != BIT(data, 2)) + { + m_dreset = BIT(data, 2); + m_fdc->soft_reset(); + } + + m_nden = BIT(data, 3); + update_fdc_int(); + update_fdc_drq(); +} + //------------------------------------------------- // centronics_interface centronics_intf //------------------------------------------------- @@ -1069,6 +1091,7 @@ void pc1512_base_state::machine_start() save_item(NAME(m_nden)); save_item(NAME(m_dint)); save_item(NAME(m_ddrq)); + save_item(NAME(m_dreset)); save_item(NAME(m_neop)); save_item(NAME(m_ack_int_enable)); save_item(NAME(m_centronics_ack)); @@ -1098,6 +1121,7 @@ void pc1512_state::machine_start() void pc1512_base_state::machine_reset() { m_nmi_enable = 0; + drive_select_w(0); m_kb_bits = 0; m_kb->data_w(1); @@ -1195,11 +1219,12 @@ void pc1512_state::pc1512(machine_config &config) MC146818(config, m_rtc, 32.768_kHz_XTAL); m_rtc->irq().set(m_pic, FUNC(pic8259_device::ir2_w)); - PC_FDC_XT(config, m_fdc, 0); + UPD765A(config, m_fdc, 24_MHz_XTAL / 6, false, false); + // SED9420CAC (dedicated 16 MHz XTAL) is used as read data separator only m_fdc->intrq_wr_callback().set(FUNC(pc1512_state::fdc_int_w)); m_fdc->drq_wr_callback().set(FUNC(pc1512_state::fdc_drq_w)); - FLOPPY_CONNECTOR(config, PC_FDC_XT_TAG ":0", pc1512_floppies, "525dd", pc1512_base_state::floppy_formats); - FLOPPY_CONNECTOR(config, PC_FDC_XT_TAG ":1", pc1512_floppies, nullptr, pc1512_base_state::floppy_formats); + FLOPPY_CONNECTOR(config, m_floppy[0], pc1512_floppies, "525dd", pc1512_base_state::floppy_formats); + FLOPPY_CONNECTOR(config, m_floppy[1], pc1512_floppies, nullptr, pc1512_base_state::floppy_formats); INS8250(config, m_uart, 1.8432_MHz_XTAL); m_uart->out_tx_callback().set(RS232_TAG, FUNC(rs232_port_device::write_txd)); @@ -1257,7 +1282,7 @@ void pc1512_state::pc1512(machine_config &config) void pc1512_state::pc1512dd(machine_config &config) { pc1512(config); - subdevice<floppy_connector>(PC_FDC_XT_TAG ":1")->set_default_option("525dd"); + m_floppy[1]->set_default_option("525dd"); } @@ -1330,11 +1355,12 @@ void pc1640_state::pc1640(machine_config &config) MC146818(config, m_rtc, 32.768_kHz_XTAL); m_rtc->irq().set(m_pic, FUNC(pic8259_device::ir2_w)); - PC_FDC_XT(config, m_fdc, 0); + UPD765A(config, m_fdc, 24_MHz_XTAL / 6, false, false); + // FDC91C36 (clocked by CK8K) is used as read data separator only m_fdc->intrq_wr_callback().set(FUNC(pc1512_base_state::fdc_int_w)); m_fdc->drq_wr_callback().set(FUNC(pc1512_base_state::fdc_drq_w)); - FLOPPY_CONNECTOR(config, PC_FDC_XT_TAG ":0", pc1512_floppies, "525dd", pc1512_base_state::floppy_formats); - FLOPPY_CONNECTOR(config, PC_FDC_XT_TAG ":1", pc1512_floppies, nullptr, pc1512_base_state::floppy_formats); + FLOPPY_CONNECTOR(config, m_floppy[0], pc1512_floppies, "525dd", pc1512_base_state::floppy_formats); + FLOPPY_CONNECTOR(config, m_floppy[1], pc1512_floppies, nullptr, pc1512_base_state::floppy_formats); INS8250(config, m_uart, 1.8432_MHz_XTAL); m_uart->out_tx_callback().set(RS232_TAG, FUNC(rs232_port_device::write_txd)); @@ -1394,7 +1420,7 @@ void pc1640_state::pc1640(machine_config &config) void pc1640_state::pc1640dd(machine_config &config) { pc1640(config); - subdevice<floppy_connector>(PC_FDC_XT_TAG ":1")->set_default_option("525dd"); + m_floppy[1]->set_default_option("525dd"); } |