diff options
-rw-r--r-- | src/mame/drivers/next.cpp | 87 | ||||
-rw-r--r-- | src/mame/includes/next.h | 10 |
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 { |