diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index 4736084c56b..d54a72f0565 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -3828,6 +3828,7 @@ createMESSProjects(_target, _subtarget, "siemens") files { MAME_DIR .. "src/mame/drivers/bitel.cpp", MAME_DIR .. "src/mame/drivers/pcd.cpp", + MAME_DIR .. "src/mame/drivers/pcmx2.cpp", MAME_DIR .. "src/mame/machine/pcd_kbd.cpp", MAME_DIR .. "src/mame/machine/pcd_kbd.h", MAME_DIR .. "src/mame/video/pcd.cpp", diff --git a/src/mame/drivers/pcmx2.cpp b/src/mame/drivers/pcmx2.cpp new file mode 100644 index 00000000000..b3e7f8cc044 --- /dev/null +++ b/src/mame/drivers/pcmx2.cpp @@ -0,0 +1,151 @@ +// license:BSD-3-Clause +// copyright-holders:Patrick Mackinlay + +/* + * Siemens PC-MX2 + * + * Sources: + * - http://www.cpu-ns32k.net/Siemens.html + * - https://mx300i.narten.de/view_board.cfm?5EF287A1ABC3F4DCAFEA2BC2FAB8C4000E50392BD4C3E389826E8E68AC9F53F3BE16A107EFC767 + * + * TODO: + * - skeleton only + */ + +#include "emu.h" + +// cpu board hardware +#include "cpu/ns32000/ns32000.h" +#include "machine/ns32081.h" +#include "machine/ns32082.h" +#include "machine/ns32202.h" +#include "machine/mc146818.h" + +// dueai board hardware +#include "cpu/i86/i186.h" +#include "machine/z80scc.h" + +#define VERBOSE 0 +#include "logmacro.h" + +namespace { + +class pcmx2_state : public driver_device +{ +public: + pcmx2_state(machine_config const &mconfig, device_type type, char const *tag) + : driver_device(mconfig, type, tag) + , m_cpu(*this, "cpu") + , m_fpu(*this, "fpu") + , m_mmu(*this, "mmu") + , m_icu(*this, "icu") + , m_rtc(*this, "rtc") + , m_dueai_cpu(*this, "dueai_cpu") + , m_dueai_scc(*this, "dueai_scc") + , m_boot_view(*this, "boot_view") + { + } + +protected: + // driver_device overrides + virtual void machine_start() override; + virtual void machine_reset() override; + + // address maps + template void cpu_map(address_map &map); + void dueai_mem_map(address_map &map); + void dueai_pio_map(address_map &map); + +public: + // machine config + void pcmx2(machine_config &config); + +protected: + required_device m_cpu; + required_device m_fpu; + required_device m_mmu; + required_device m_icu; + required_device m_rtc; + + required_device m_dueai_cpu; + required_device m_dueai_scc; + +private: + memory_view m_boot_view; +}; + +void pcmx2_state::machine_start() +{ +} + +void pcmx2_state::machine_reset() +{ + m_boot_view.select(0); +} + +template void pcmx2_state::cpu_map(address_map &map) +{ + if (ST == 0) + { + map(0x000000, 0x0fffff).view(m_boot_view); + + m_boot_view[0](0x000000, 0x007fff).rom().region("eprom", 0); + m_boot_view[1](0x000000, 0x0fffff).ram(); + } + + map(0xfe0000, 0xfe7fff).rom().region("eprom", 0); + + map(0xff8500, 0xff8500).lw8([this](u8 data) { m_boot_view.select(data); }, "boot_view_w"); + + map(0xfffe00, 0xfffeff).m(m_icu, FUNC(ns32202_device::map)).umask16(0x00ff); +} + +void pcmx2_state::dueai_mem_map(address_map &map) +{ + map(0x000000, 0x01ffff).ram(); + + map(0x0fe000, 0x0fffff).rom().region("dueai", 0); +} + +void pcmx2_state::dueai_pio_map(address_map &map) +{ + map(0x0000, 0x0003).rw(m_dueai_scc, FUNC(z80scc_device::ab_dc_r), FUNC(z80scc_device::ab_dc_w)); +} + +void pcmx2_state::pcmx2(machine_config &config) +{ + NS32016(config, m_cpu, 20_MHz_XTAL / 2); + m_cpu->set_addrmap(0, &pcmx2_state::cpu_map<0>); + m_cpu->set_addrmap(4, &pcmx2_state::cpu_map<4>); + + NS32081(config, m_fpu, 20_MHz_XTAL / 2); + m_cpu->set_fpu(m_fpu); + + NS32082(config, m_mmu, 20_MHz_XTAL / 2); + m_cpu->set_mmu(m_mmu); + + NS32202(config, m_icu, 20_MHz_XTAL / 2); + m_icu->out_int().set_inputline(m_cpu, INPUT_LINE_IRQ0).invert(); + + MC146818(config, m_rtc, 32.768_kHz_XTAL); + + I80186(config, m_dueai_cpu, 16_MHz_XTAL / 2); + m_dueai_cpu->set_addrmap(AS_PROGRAM, &pcmx2_state::dueai_mem_map); + m_dueai_cpu->set_addrmap(AS_IO, &pcmx2_state::dueai_pio_map); + + SCC8530N(config, m_dueai_scc, 7.3728_MHz_XTAL); +} + +ROM_START(pcmx2) + ROM_REGION16_LE(0x8000, "eprom", 0) + ROMX_LOAD("361d0333d053__e01735_ine.d53", 0x0000, 0x4000, CRC(b5eefb64) SHA1(a71a7daf9a8f0481d564bfc4d7ed5eb955f8665f), ROM_SKIP(1)) + ROMX_LOAD("361d0333d054__e01725_ine.d54", 0x0001, 0x4000, CRC(3a3c6b6e) SHA1(5302fd79c89e0b4d164c639e2d73f4b9a279ddcb), ROM_SKIP(1)) + + ROM_REGION16_LE(0x2000, "dueai", 0) + ROM_LOAD("d277__e00_410__d3_17e4.d61", 0x0000, 0x2000, CRC(31415348) SHA1(1407dac077b1f9aec5f9063711c3ab2c517cc9e8)) +ROM_END + +} + +/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ +COMP(1986?, pcmx2, 0, 0, pcmx2, 0, pcmx2_state, empty_init, "Siemens", "PC-MX2", MACHINE_IS_SKELETON) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 6e41e7a9006..19e52ff24d9 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -34304,6 +34304,9 @@ spool3i // (c) 1990 Data East Corporation + I-Vics licen @source:pcm.cpp pcm // PC/M Mugler +@source:pcmx2.cpp +pcmx2 // Siemens PC-MX2 + @source:pcw.cpp pcw10 // 198? PCW10 pcw8256 // 1985 PCW8256