diff --git a/hash/x37_flop.xml b/hash/x37_flop.xml
index 2bc2c592fe8..6a764eb308f 100644
--- a/hash/x37_flop.xml
+++ b/hash/x37_flop.xml
@@ -156,7 +156,6 @@ license:CC0
-
diff --git a/src/mame/drivers/ds90.cpp b/src/mame/drivers/ds90.cpp
index df22f89892f..5fdcfa4be97 100644
--- a/src/mame/drivers/ds90.cpp
+++ b/src/mame/drivers/ds90.cpp
@@ -11,21 +11,72 @@
#include "emu.h"
#include "softlist_dev.h"
+#include "bus/nscsi/devices.h"
#include "cpu/m68000/m68000.h"
+#include "formats/abc1600_dsk.h"
+#include "imagedev/floppy.h"
+#include "machine/e0516.h"
+#include "machine/hd63450.h"
+#include "machine/nmc9306.h"
+#include "machine/ns32081.h"
+#include "machine/nscsi_bus.h"
+#include "machine/nscsi_cb.h"
+#include "machine/wd_fdc.h"
+#include "machine/z80scc.h"
+#include "machine/z8536.h"
#include "video/abc1600.h"
+#define MC68010_TAG "14m"
+#define NS32081_TAG "06o"
+#define MC68450_TAG "11m"
+#define Z8536A_TAG "06l"
+#define NMC9306_TAG "05k"
+#define E050_16_TAG "03j"
+#define Z8530A_0_TAG "16m"
+#define Z8530A_1_TAG "16h"
+#define Z8530A_2_TAG "16o"
+#define FD1797_TAG "15g"
+
class x37_state : public driver_device
{
public:
x37_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
- m_maincpu(*this, "maincpu")
+ m_cpu(*this, MC68010_TAG),
+ m_fpu(*this, NS32081_TAG),
+ m_dmac(*this, MC68450_TAG),
+ m_cio(*this, Z8536A_TAG),
+ m_nvram(*this, NMC9306_TAG),
+ m_scc0(*this, Z8530A_0_TAG),
+ m_scc1(*this, Z8530A_1_TAG),
+ m_scc2(*this, Z8530A_2_TAG),
+ m_fdc(*this, FD1797_TAG),
+ m_floppy0(*this, FD1797_TAG":0"),
+ m_floppy1(*this, FD1797_TAG":1"),
+ m_floppy2(*this, FD1797_TAG":2"),
+ m_sasi(*this, "sasi:7:scsicb")
{ }
void x37(machine_config &config);
private:
- required_device m_maincpu;
+ required_device m_cpu;
+ required_device m_fpu;
+ required_device m_dmac;
+ required_device m_cio;
+ required_device m_nvram;
+ required_device m_scc0;
+ required_device m_scc1;
+ required_device m_scc2;
+ required_device m_fdc;
+ required_device m_floppy0;
+ required_device m_floppy1;
+ required_device m_floppy2;
+ required_device m_sasi;
+
+ virtual void machine_reset() override;
+
+ static void floppy_formats(format_registration &fr);
void program_map(address_map &map);
void cpu_space_map(address_map &map);
@@ -33,23 +84,62 @@ private:
void x37_state::program_map(address_map &map)
{
- map(0x000000, 0x007fff).rom().region("maincpu", 0);
+ map(0x000000, 0x007fff).rom().region(MC68010_TAG, 0);
}
void x37_state::cpu_space_map(address_map &map)
{
- map(0xffff0, 0xfffff).m(m_maincpu, FUNC(m68010_device::autovectors_map));
+ map(0xffff0, 0xfffff).m(m_cpu, FUNC(m68010_device::autovectors_map));
}
static INPUT_PORTS_START( x37 )
INPUT_PORTS_END
+void x37_state::machine_reset()
+{
+ m_fpu->reset();
+}
+
+static void x37_floppies(device_slot_interface &device)
+{
+ device.option_add("525qd", FLOPPY_525_QD);
+}
+
+void x37_state::floppy_formats(format_registration &fr)
+{
+ fr.add_mfm_containers();
+ fr.add(FLOPPY_ABC1600_FORMAT);
+}
+
void x37_state::x37(machine_config &config)
{
// basic machine hardware
- M68010(config, m_maincpu, 10000000);
- m_maincpu->set_addrmap(AS_PROGRAM, &x37_state::program_map);
- m_maincpu->set_addrmap(m68000_base_device::AS_CPU_SPACE, &x37_state::cpu_space_map);
+ M68010(config, m_cpu, 20'000'000/2);
+ m_cpu->set_addrmap(AS_PROGRAM, &x37_state::program_map);
+ m_cpu->set_addrmap(m68000_base_device::AS_CPU_SPACE, &x37_state::cpu_space_map);
+
+ NS32081(config, m_fpu, 20'000'000/2);
+
+ HD63450(config, m_dmac, 20'000'000/2, m_cpu);
+
+ Z8536(config, m_cio, 6000000);
+ NMC9306(config, m_nvram, 0);
+ E0516(config, E050_16_TAG, 32'768);
+
+ SCC8530N(config, m_scc0, 6000000);
+ SCC8530N(config, m_scc1, 6000000);
+ SCC8530N(config, m_scc2, 6000000);
+
+ FD1797(config, m_fdc, 16'000'000/16);
+
+ FLOPPY_CONNECTOR(config, FD1797_TAG":0", x37_floppies, nullptr, x37_state::floppy_formats).enable_sound(true);
+ FLOPPY_CONNECTOR(config, FD1797_TAG":1", x37_floppies, nullptr, x37_state::floppy_formats).enable_sound(true);
+ FLOPPY_CONNECTOR(config, FD1797_TAG":2", x37_floppies, "525qd", x37_state::floppy_formats).enable_sound(true);
+
+ NSCSI_BUS(config, "sasi");
+ NSCSI_CONNECTOR(config, "sasi:0", default_scsi_devices, "s1410");
+ NSCSI_CONNECTOR(config, "sasi:7", default_scsi_devices, "scsicb", true)
+ .option_add_internal("scsicb", NSCSI_CB);
// video hardware
ABC1600_MOVER(config, ABC1600_MOVER_TAG, 0);
@@ -59,8 +149,20 @@ void x37_state::x37(machine_config &config)
}
ROM_START( x37 )
- ROM_REGION( 0x8000, "maincpu", 0 )
- ROM_LOAD( "x37.rom", 0x0000, 0x8000, CRC(d505e7e7) SHA1(a3ad839e47b1f71c394e5ce28bce199e5e4810d2) )
+ ROM_REGION( 0x8000, MC68010_TAG, 0 )
+ ROM_LOAD( "x37.07o", 0x0000, 0x8000, CRC(d505e7e7) SHA1(a3ad839e47b1f71c394e5ce28bce199e5e4810d2) )
+
+ ROM_REGION( 0x104, "plds", 0 )
+ ROM_LOAD( "pat8003.12l", 0x000, 0x104, NO_DUMP )
+ ROM_LOAD( "pat8031.05h", 0x000, 0x104, NO_DUMP )
+ ROM_LOAD( "pat8032.07h", 0x000, 0x104, NO_DUMP )
+ ROM_LOAD( "pat8033.06h", 0x000, 0x104, NO_DUMP )
+ ROM_LOAD( "pat8034.12g", 0x000, 0x104, NO_DUMP )
+ ROM_LOAD( "pat8035.05g", 0x000, 0x104, NO_DUMP )
+ ROM_LOAD( "pat8036.07g", 0x000, 0x104, NO_DUMP )
+ ROM_LOAD( "pat8037.10k", 0x000, 0x104, NO_DUMP )
+ ROM_LOAD( "pat8038.04n", 0x000, 0x104, NO_DUMP )
+ ROM_LOAD( "pat8039.12h", 0x000, 0x104, NO_DUMP )
ROM_END
COMP( 1985, x37, 0, 0, x37, x37, x37_state, empty_init, "Luxor", "X37 (prototype)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )