summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Davide Cavalca <davide@cavalca.name>2020-12-15 06:50:45 -0800
committer GitHub <noreply@github.com>2020-12-15 15:50:45 +0100
commitb5f78fe38358b68fc54416328f764cf4e2bf3333 (patch)
treecf91a4ab157dbecc58dd53a543e186bd375665e3
parentba79a6b79b707beb9d03229a81ec46099aceac4c (diff)
next: only NeXTcube systems used the MO drive (#7560)
-rw-r--r--src/mame/drivers/next.cpp87
-rw-r--r--src/mame/includes/next.h10
2 files changed, 77 insertions, 20 deletions
diff --git a/src/mame/drivers/next.cpp b/src/mame/drivers/next.cpp
index 282c2148576..52a9d63d403 100644
--- a/src/mame/drivers/next.cpp
+++ b/src/mame/drivers/next.cpp
@@ -347,7 +347,8 @@ void next_state::dma_read(int slot, uint8_t &val, bool &eof, bool &err)
break;
case 5:
- val = mo->dma_r();
+ if(mo)
+ val = mo->dma_r();
break;
case 21:
@@ -381,7 +382,8 @@ void next_state::dma_write(int slot, uint8_t data, bool eof, bool &err)
break;
case 5:
- mo->dma_w(data);
+ if(mo)
+ mo->dma_w(data);
break;
case 17:
@@ -910,7 +912,6 @@ void next_state::next_mem(address_map &map)
map(0x0200e000, 0x0200e00b).mirror(0x300000).m(keyboard, FUNC(nextkbd_device::amap));
// map(0x0200f000, 0x0200f003).mirror(0x300000); printer
// map(0x02010000, 0x02010003).mirror(0x300000); brightness
- map(0x02012000, 0x0201201f).mirror(0x300000).m(mo, FUNC(nextmo_device::map));
map(0x02014000, 0x0201400f).mirror(0x300000).m(scsi, FUNC(ncr5390_device::map));
map(0x02014020, 0x02014023).mirror(0x300000).rw(FUNC(next_state::scsictrl_r), FUNC(next_state::scsictrl_w));
map(0x02016000, 0x02016003).mirror(0x300000).rw(FUNC(next_state::timer_data_r), FUNC(next_state::timer_data_w));
@@ -933,9 +934,15 @@ void next_state::next_mem(address_map &map)
// map(0x1c000000, 0x1c03ffff) main RAM w AB function
}
+void next_state::next_mo_mem(address_map &map)
+{
+ map(0x02012000, 0x0201201f).mirror(0x300000).m(mo, FUNC(nextmo_device::map));
+}
+
void next_state::next_0b_m_nofdc_mem(address_map &map)
{
next_mem(map);
+ next_mo_mem(map);
map(0x0b000000, 0x0b03ffff).ram().share("vram");
}
@@ -952,6 +959,13 @@ void next_state::next_0b_m_mem(address_map &map)
map(0x0b000000, 0x0b03ffff).ram().share("vram");
}
+void next_state::next_0b_m_mo_mem(address_map &map)
+{
+ next_fdc_mem(map);
+ next_mo_mem(map);
+ map(0x0b000000, 0x0b03ffff).ram().share("vram");
+}
+
void next_state::next_0c_m_mem(address_map &map)
{
next_fdc_mem(map);
@@ -965,6 +979,21 @@ void next_state::next_0c_c_mem(address_map &map)
map(0x02018180, 0x02018183).mirror(0x300000).w(FUNC(next_state::ramdac_w));
}
+void next_state::next_0c_m_mo_mem(address_map &map)
+{
+ next_fdc_mem(map);
+ next_mo_mem(map);
+ map(0x0c000000, 0x0c1fffff).ram().share("vram");
+}
+
+void next_state::next_0c_c_mo_mem(address_map &map)
+{
+ next_fdc_mem(map);
+ next_mo_mem(map);
+ map(0x0c000000, 0x0c1fffff).ram().share("vram");
+ map(0x02018180, 0x02018183).mirror(0x300000).w(FUNC(next_state::ramdac_w));
+}
+
void next_state::next_2c_c_mem(address_map &map)
{
next_fdc_mem(map);
@@ -1041,38 +1070,58 @@ void next_state::next_base(machine_config &config)
net->tx_drq().set(FUNC(next_state::net_tx_drq));
net->rx_drq().set(FUNC(next_state::net_rx_drq));
+ SOFTWARE_LIST(config, "hdd_list").set_original("next_hdd");
+}
+
+void next_state::next_mo_config(machine_config &config)
+{
NEXTMO(config, mo, 0);
mo->irq_wr_callback().set(FUNC(next_state::mo_irq));
mo->drq_wr_callback().set(FUNC(next_state::mo_drq));
+}
- SOFTWARE_LIST(config, "hdd_list").set_original("next_hdd");
+void next_state::next_fdc_config(machine_config &config)
+{
+ N82077AA(config, fdc, 24'000'000, n82077aa_device::mode_t::PS2);
+ fdc->intrq_wr_callback().set(FUNC(next_state::fdc_irq));
+ fdc->drq_wr_callback().set(FUNC(next_state::fdc_drq));
+ FLOPPY_CONNECTOR(config, "fdc:0", next_floppies, "35ed", next_state::floppy_formats);
+
+ // software list
+ SOFTWARE_LIST(config, "flop_list").set_original("next");
}
-void next_state::next(machine_config &config)
+void next_state::next_mo_base(machine_config &config)
{
next_base(config);
- M68030(config, maincpu, XTAL(25'000'000));
- maincpu->set_addrmap(AS_PROGRAM, &next_state::next_0b_m_nofdc_mem);
+ next_mo_config(config);
}
void next_state::next_fdc_base(machine_config &config)
{
next_base(config);
+ next_fdc_config(config);
+}
- N82077AA(config, fdc, 24'000'000, n82077aa_device::mode_t::PS2);
- fdc->intrq_wr_callback().set(FUNC(next_state::fdc_irq));
- fdc->drq_wr_callback().set(FUNC(next_state::fdc_drq));
- FLOPPY_CONNECTOR(config, "fdc:0", next_floppies, "35ed", next_state::floppy_formats);
+void next_state::next_mo_fdc_base(machine_config &config)
+{
+ next_base(config);
+ next_mo_config(config);
+ next_fdc_config(config);
+}
- // software list
- SOFTWARE_LIST(config, "flop_list").set_original("next");
+void next_state::next(machine_config &config)
+{
+ next_mo_base(config);
+ M68030(config, maincpu, XTAL(25'000'000));
+ maincpu->set_addrmap(AS_PROGRAM, &next_state::next_0b_m_nofdc_mem);
}
void next_state::nextc(machine_config &config)
{
- next_fdc_base(config);
+ next_mo_fdc_base(config);
M68040(config, maincpu, XTAL(25'000'000));
- maincpu->set_addrmap(AS_PROGRAM, &next_state::next_0b_m_mem);
+ maincpu->set_addrmap(AS_PROGRAM, &next_state::next_0b_m_mo_mem);
}
void next_state::nexts(machine_config &config)
@@ -1113,16 +1162,16 @@ void next_state::nextstc(machine_config &config)
void next_state::nextct(machine_config &config)
{
- next_fdc_base(config);
+ next_mo_fdc_base(config);
M68040(config, maincpu, XTAL(33'000'000));
- maincpu->set_addrmap(AS_PROGRAM, &next_state::next_0c_m_mem);
+ maincpu->set_addrmap(AS_PROGRAM, &next_state::next_0c_m_mo_mem);
}
void next_state::nextctc(machine_config &config)
{
- next_fdc_base(config);
+ next_mo_fdc_base(config);
M68040(config, maincpu, XTAL(33'000'000));
- maincpu->set_addrmap(AS_PROGRAM, &next_state::next_0c_c_mem);
+ maincpu->set_addrmap(AS_PROGRAM, &next_state::next_0c_c_mo_mem);
subdevice<screen_device>("screen")->set_visarea(0, 832-1, 0, 624-1);
}
diff --git a/src/mame/includes/next.h b/src/mame/includes/next.h
index d0e0f90758c..7934515c000 100644
--- a/src/mame/includes/next.h
+++ b/src/mame/includes/next.h
@@ -35,8 +35,12 @@ public:
floppy0(*this, "fdc:0"),
vram(*this, "vram") { }
+ void next_mo_config(machine_config &config);
+ void next_fdc_config(machine_config &config);
void next_base(machine_config &config);
+ void next_mo_base(machine_config &config);
void next_fdc_base(machine_config &config);
+ void next_mo_fdc_base(machine_config &config);
void nextst(machine_config &config);
void nextsc(machine_config &config);
void nextct(machine_config &config);
@@ -65,7 +69,7 @@ private:
required_device<nscsi_bus_device> scsibus;
required_device<ncr5390_device> scsi;
required_device<mb8795_device> net;
- required_device<nextmo_device> mo;
+ optional_device<nextmo_device> mo; // cube only
optional_device<n82077aa_device> fdc; // 040 only
optional_device<floppy_connector> floppy0; // 040 only
@@ -140,11 +144,15 @@ private:
void ncr5390(device_t *device);
void next_0b_m_mem(address_map &map);
+ void next_0b_m_mo_mem(address_map &map);
void next_0b_m_nofdc_mem(address_map &map);
void next_0c_c_mem(address_map &map);
void next_0c_m_mem(address_map &map);
+ void next_0c_c_mo_mem(address_map &map);
+ void next_0c_m_mo_mem(address_map &map);
void next_2c_c_mem(address_map &map);
void next_fdc_mem(address_map &map);
+ void next_mo_mem(address_map &map);
void next_mem(address_map &map);
struct dma_slot {