summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/pc1512.cpp
diff options
context:
space:
mode:
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
commit229c0aea58ce5b68b340f5c1abc2d937f954f0a5 (patch)
treeb40feffc096d16e2ddd4098a6bc5df7891e8f3b4 /src/mame/drivers/pc1512.cpp
parent320b2f66b07c890fd3b4cf02785987ec0ed39d0a (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.cpp52
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");
}