From aeac79535e95aca53aeebcb420d9a2b2aa428e1c Mon Sep 17 00:00:00 2001 From: AJR Date: Sat, 6 Oct 2018 10:40:04 -0400 Subject: [PATCH] New machines marked as NOT_WORKING ---------------------------------- MCS-51 System Design Kit [Glen Slick] --- scripts/target/mame/mess.lua | 1 + src/mame/drivers/sdk51.cpp | 185 +++++++++++++++++++++++++++++++++++ src/mame/mame.lst | 3 + src/mame/mess.flt | 1 + 4 files changed, 190 insertions(+) create mode 100644 src/mame/drivers/sdk51.cpp diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index 7082f49fa81..dea849b592a 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -2292,6 +2292,7 @@ files { MAME_DIR .. "src/mame/machine/isbc_208.cpp", MAME_DIR .. "src/mame/machine/isbc_208.h", MAME_DIR .. "src/mame/drivers/rex6000.cpp", + MAME_DIR .. "src/mame/drivers/sdk51.cpp", MAME_DIR .. "src/mame/drivers/sdk80.cpp", MAME_DIR .. "src/mame/drivers/sdk85.cpp", MAME_DIR .. "src/mame/drivers/sdk86.cpp", diff --git a/src/mame/drivers/sdk51.cpp b/src/mame/drivers/sdk51.cpp new file mode 100644 index 00000000000..0ec274c23e2 --- /dev/null +++ b/src/mame/drivers/sdk51.cpp @@ -0,0 +1,185 @@ +// license:BSD-3-Clause +// copyright-holders:AJR +/******************************************************************************* + + Skeleton driver for Intel MCS-51 System Design Kit (SDK-51). + +*******************************************************************************/ + +#include "emu.h" +#include "bus/rs232/rs232.h" +#include "cpu/mcs51/mcs51.h" +#include "cpu/mcs48/mcs48.h" +//#include "imagedev/cassette.h" +#include "machine/bankdev.h" +#include "machine/i8155.h" +#include "machine/i8243.h" +#include "machine/i8251.h" + +class sdk51_state : public driver_device +{ +public: + sdk51_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_progmem(*this, "progmem") + , m_datamem(*this, "datamem") + , m_mem0(*this, "mem0") + , m_usart(*this, "usart") + , m_cycles(*this, "cycles") + { + } + + void sdk51(machine_config &config); + +protected: + virtual void machine_start() override; + virtual void machine_reset() override; + +private: + void psen_map(address_map &map); + void movx_map(address_map &map); + void progmem_map(address_map &map); + void datamem_map(address_map &map); + void mem0_map(address_map &map); + + DECLARE_READ8_MEMBER(psen_r); + DECLARE_READ8_MEMBER(datamem_r); + DECLARE_WRITE8_MEMBER(datamem_w); + + u8 brkmem_r(offs_t offset); + void brkmem_w(offs_t offset, u8 data); + + required_device m_maincpu; + required_device m_progmem; + required_device m_datamem; + required_device m_mem0; + required_device m_usart; + required_region_ptr m_cycles; +}; + +READ8_MEMBER(sdk51_state::psen_r) +{ + return m_progmem->read8(space, offset); +} + +READ8_MEMBER(sdk51_state::datamem_r) +{ + return m_datamem->read8(space, offset); +} + +WRITE8_MEMBER(sdk51_state::datamem_w) +{ + m_datamem->write8(space, offset, data); +} + +u8 sdk51_state::brkmem_r(offs_t offset) +{ + return 0; +} + +void sdk51_state::brkmem_w(offs_t offset, u8 data) +{ + m_mem0->set_bank(0); +} + +void sdk51_state::psen_map(address_map &map) +{ + map(0x0000, 0xffff).r(FUNC(sdk51_state::psen_r)); +} + +void sdk51_state::movx_map(address_map &map) +{ + map(0x0000, 0xffff).rw(FUNC(sdk51_state::datamem_r), FUNC(sdk51_state::datamem_w)); +} + +void sdk51_state::progmem_map(address_map &map) +{ + map(0x0000, 0x1fff).m(m_mem0, FUNC(address_map_bank_device::amap8)); + map(0x2000, 0x3fff).ram(); + map(0xe000, 0xffff).rom().region("monitor", 0); +} + +void sdk51_state::datamem_map(address_map &map) +{ + progmem_map(map); + map(0xa000, 0xa001).mirror(0xffe).rw("upi", FUNC(upi41_cpu_device::upi41_master_r), FUNC(upi41_cpu_device::upi41_master_w)); + map(0xb000, 0xb0ff).mirror(0x700).rw("io", FUNC(i8155_device::memory_r), FUNC(i8155_device::memory_w)); + map(0xb800, 0xb807).mirror(0x7f8).rw("io", FUNC(i8155_device::io_r), FUNC(i8155_device::io_w)); + map(0xc000, 0xdfff).rw(FUNC(sdk51_state::brkmem_r), FUNC(sdk51_state::brkmem_w)); +} + +void sdk51_state::mem0_map(address_map &map) +{ + map(0x0000, 0x1fff).ram(); + map(0x2000, 0x2fff).mirror(0x1000).rom().region("monitor", 0); +} + +static INPUT_PORTS_START(sdk51) +INPUT_PORTS_END + +void sdk51_state::machine_start() +{ +} + +void sdk51_state::machine_reset() +{ + m_mem0->set_bank(1); +} + +void sdk51_state::sdk51(machine_config &config) +{ + I8031(config, m_maincpu, 12_MHz_XTAL); + m_maincpu->set_addrmap(AS_PROGRAM, &sdk51_state::psen_map); + m_maincpu->set_addrmap(AS_IO, &sdk51_state::movx_map); + + ADDRESS_MAP_BANK(config, m_progmem); + m_progmem->set_addrmap(0, &sdk51_state::progmem_map); + m_progmem->set_data_width(8); + m_progmem->set_addr_width(16); + + ADDRESS_MAP_BANK(config, m_datamem); + m_datamem->set_addrmap(0, &sdk51_state::datamem_map); + m_datamem->set_data_width(8); + m_datamem->set_addr_width(16); + + ADDRESS_MAP_BANK(config, m_mem0); + m_mem0->set_addrmap(0, &sdk51_state::mem0_map); + m_mem0->set_data_width(8); + m_mem0->set_addr_width(14); + m_mem0->set_stride(0x2000); + + upi41_cpu_device &upi(I8041(config, "upi", 6_MHz_XTAL)); + upi.p2_in_cb().set("upiexp", FUNC(i8243_device::p2_r)); + upi.p2_out_cb().set("upiexp", FUNC(i8243_device::p2_w)); + upi.prog_out_cb().set("upiexp", FUNC(i8243_device::prog_w)); + upi.t1_in_cb().set(m_usart, FUNC(i8251_device::txrdy_r)); + + I8243(config, "upiexp"); + + i8155_device &io(I8155(config, "io", 6_MHz_XTAL / 3)); + io.out_to_callback().set(m_usart, FUNC(i8251_device::write_txc)); + io.out_to_callback().append(m_usart, FUNC(i8251_device::write_txc)); + + I8251(config, m_usart, 6_MHz_XTAL / 3); + m_usart->txd_handler().set("rs232", FUNC(rs232_port_device::write_txd)); + m_usart->rts_handler().set("rs232", FUNC(rs232_port_device::write_rts)); + + rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, nullptr)); + rs232.rxd_handler().set(m_usart, FUNC(i8251_device::write_rxd)); + rs232.cts_handler().set(m_usart, FUNC(i8251_device::write_cts)); +} + +ROM_START(sdk51) + ROM_REGION(0x2000, "monitor", 0) // "SDK-51 MONITOR VER. 1.03" + ROM_LOAD("u59-e000.bin", 0x0000, 0x1000, CRC(cc6c7b05) SHA1(ead75920347ff19487e730e90e1e1f7207d44601)) + ROM_LOAD("u60-f000.bin", 0x1000, 0x1000, CRC(da6e664d) SHA1(18416106307f37dba6dbb789f3d39fe6d5294755)) + + ROM_REGION(0x0400, "upi", 0) + ROM_LOAD("u41-8041a.bin", 0x000, 0x400, CRC(02f38b69) SHA1(ab2ac73b69b3297572583242ed5bd717eb116c37)) + + ROM_REGION(0x0200, "cycles", 0) + ROM_LOAD("u63-3622a.bin", 0x000, 0x200, CRC(85cbd498) SHA1(f0214b6d02d6d153b5fafd9adf5a23013373c9c4)) +ROM_END + +COMP(1981, sdk51, 0, 0, sdk51, sdk51, sdk51_state, empty_init, "Intel", "MCS-51 System Design Kit", MACHINE_IS_SKELETON) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 047a9a5a9e3..d53066cacc4 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -33865,6 +33865,9 @@ spacewin // @source:sderby2.cpp sderby2 // (c) 1985 +@source:sdk51.cpp +sdk51 // + @source:sdk80.cpp sdk80 // diff --git a/src/mame/mess.flt b/src/mame/mess.flt index 889dc0a379b..e3673b7b49a 100644 --- a/src/mame/mess.flt +++ b/src/mame/mess.flt @@ -636,6 +636,7 @@ sc2.cpp scopus.cpp scorpion.cpp scv.cpp +sdk51.cpp sdk80.cpp sdk85.cpp sdk86.cpp