diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index 24e85d8f3d3..651a65473cc 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -3758,6 +3758,7 @@ files { createMESSProjects(_target, _subtarget, "synertek") files { MAME_DIR .. "src/mame/drivers/ktm3.cpp", + MAME_DIR .. "src/mame/drivers/mbc020.cpp", MAME_DIR .. "src/mame/drivers/sym1.cpp", } diff --git a/src/mame/drivers/mbc020.cpp b/src/mame/drivers/mbc020.cpp new file mode 100644 index 00000000000..1fdeae39332 --- /dev/null +++ b/src/mame/drivers/mbc020.cpp @@ -0,0 +1,147 @@ +// license:BSD-3-Clause +// copyright-holders:AJR +/**************************************************************************** + + Preliminary driver for single-board computers by Synertek/Sym Systems. + + The bottom edge connector is compatible with Motorola's EXORciser/ + Micromodule bus. One of MBC020's other connectors is claimed to allow + "Direct Attachment to a CRT Monitor"; this was omitted in MBC010. + + MBC010 and MBC020 were available with either a SY6512 CPU (-65) or + MC6800 CPU (-68), running at either 1 or 2 MHz. + + Though the timing circuit includes dynamic RAM refresh control, the + onboard RAM is entirely static (6 SY2114s or equivalent, plus an optional + socketed 6116). + + "Sym Systems Corp." may have been a short-lived spinoff or subsidiary of + Synertek, named in reference to their SYM-1 SBC. Synertek clearly did not + insist on in-house sourcing of the 6500-series peripherals, since their + catalog photo of the MBC020 includes a Motorola-branded MC6845 CRTC, and + the dumped board has a Rockwell VIA and AMI ACIA. + +****************************************************************************/ + +#include "emu.h" +#include "bus/rs232/rs232.h" +#include "cpu/m6502/m6502.h" +#include "machine/6522via.h" +#include "machine/mos6551.h" +#include "video/mc6845.h" +#include "screen.h" + +class mbc020_state : public driver_device +{ +public: + mbc020_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_chargen(*this, "chargen") + { + } + + void mbc020(machine_config &config); + +private: + MC6845_UPDATE_ROW(update_row); + MC6845_ON_UPDATE_ADDR_CHANGED(update_cb); + + void mem_map(address_map &map); + + required_device m_maincpu; + required_region_ptr m_chargen; +}; + +MC6845_UPDATE_ROW(mbc020_state::update_row) +{ + // TODO +} + +MC6845_ON_UPDATE_ADDR_CHANGED(mbc020_state::update_cb) +{ +} + + +void mbc020_state::mem_map(address_map &map) +{ + map(0x0000, 0x03ff).ram(); + map(0x8000, 0x8fff).rom().region("monitor", 0x2000); + map(0x9000, 0x900f).m("via", FUNC(via6522_device::map)); + map(0x9a00, 0x9a03).rw("acia", FUNC(mos6551_device::read), FUNC(mos6551_device::write)); + map(0x9c00, 0x9c00).rw("crtc", FUNC(sy6545_1_device::status_r), FUNC(sy6545_1_device::address_w)); + map(0x9c01, 0x9c01).rw("crtc", FUNC(sy6545_1_device::register_r), FUNC(sy6545_1_device::register_w)); + map(0xa000, 0xafff).ram(); + map(0xb000, 0xcfff).rom().region("monitor", 0); + map(0xf800, 0xffff).rom().region("monitor", 0x2800); +} + +static INPUT_PORTS_START(mbc020) + PORT_START("PA") + PORT_CONFNAME(0x38, 0x30, "Baud Rate") + PORT_CONFSETTING(0x00, "110") + PORT_CONFSETTING(0x08, "300") + PORT_CONFSETTING(0x10, "600") + PORT_CONFSETTING(0x18, "1200") + PORT_CONFSETTING(0x20, "2400") + PORT_CONFSETTING(0x28, "4800") + PORT_CONFSETTING(0x30, "9600") + PORT_CONFSETTING(0x38, "19200") + PORT_BIT(0xc3, IP_ACTIVE_LOW, IPT_UNUSED) +INPUT_PORTS_END + +static DEVICE_INPUT_DEFAULTS_START( terminal ) + DEVICE_INPUT_DEFAULTS( "RS232_RXBAUD", 0xff, RS232_BAUD_9600 ) + DEVICE_INPUT_DEFAULTS( "RS232_TXBAUD", 0xff, RS232_BAUD_9600 ) + DEVICE_INPUT_DEFAULTS( "RS232_STARTBITS", 0xff, RS232_STARTBITS_1 ) + DEVICE_INPUT_DEFAULTS( "RS232_DATABITS", 0xff, RS232_DATABITS_7 ) + DEVICE_INPUT_DEFAULTS( "RS232_PARITY", 0xff, RS232_PARITY_NONE ) + DEVICE_INPUT_DEFAULTS( "RS232_STOPBITS", 0xff, RS232_STOPBITS_2 ) +DEVICE_INPUT_DEFAULTS_END + +void mbc020_state::mbc020(machine_config &config) +{ + M6512(config, m_maincpu, 16_MHz_XTAL / 8); // SYU6512A + m_maincpu->set_addrmap(AS_PROGRAM, &mbc020_state::mem_map); + + via6522_device &via(VIA6522(config, "via", 16_MHz_XTAL / 8)); // R6522AP + via.readpa_handler().set_ioport("PA"); + + mos6551_device &acia(MOS6551(config, "acia", 16_MHz_XTAL / 8)); // S6551AP + acia.set_xtal(1.8432_MHz_XTAL); + acia.txd_handler().set("rs232", FUNC(rs232_port_device::write_txd)); + acia.rts_handler().set("rs232", FUNC(rs232_port_device::write_rts)); + acia.dtr_handler().set("rs232", FUNC(rs232_port_device::write_dtr)); + + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_raw(16_MHz_XTAL, 1016, 0, 640, 263, 0, 225); + screen.set_screen_update("crtc", FUNC(sy6545_1_device::screen_update)); + + sy6545_1_device &crtc(SY6545_1(config, "crtc", 16_MHz_XTAL / 8)); // SY6545-1 + crtc.set_screen("screen"); + crtc.set_show_border_area(false); + crtc.set_char_width(8); + crtc.set_update_row_callback(FUNC(mbc020_state::update_row)); + crtc.set_on_update_addr_change_callback(FUNC(mbc020_state::update_cb)); + + rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, "terminal")); + rs232.set_option_device_input_defaults("terminal", DEVICE_INPUT_DEFAULTS_NAME(terminal)); + rs232.rxd_handler().set("acia", FUNC(mos6551_device::write_rxd)); + rs232.dsr_handler().set("acia", FUNC(mos6551_device::write_dsr)); + rs232.cts_handler().set("acia", FUNC(mos6551_device::write_cts)); +} + +ROM_START(mbc020) // Silkscreened on PCB: "© 1980 by SYM Systems Corp." + ROM_REGION(0x3000, "monitor", 0) // "SERVOMON VER 4.0 COPYRIGHT JUL-1983 TORQUE SYSTEMS INC." + ROM_LOAD("20013-4.u13", 0x0000, 0x1000, CRC(53cbfc68) SHA1(72834ac1d8e8feed1941c7b7d53b264d8333a496)) // TMS2532JL-35 + ROM_LOAD("20014-4.u14", 0x1000, 0x1000, CRC(f7ed5508) SHA1(a6d644f07c889c24291fe6d64f9ef90ef34324ba)) // TMS2532JL-35 + ROM_LOAD("20015-4.u15", 0x2000, 0x1000, CRC(17485482) SHA1(57a6f684dd5111f2499b655f27794116aef354d7)) // TMS2532JL-35 + + ROM_REGION(0x800, "chargen", 0) + ROM_LOAD("02-0054a.u5", 0x000, 0x800, CRC(3ed97af7) SHA1(26d5a1c96b9896336e7ccf9e66dbeb2733ab4593)) + + ROM_REGION(0x20, "mmap", 0) // memory mapping PROM (decodes A11–A15) + ROM_LOAD("n82s123n.u17", 0x00, 0x20, NO_DUMP) +ROM_END + +COMP(1983, mbc020, 0, 0, mbc020, mbc020, mbc020_state, empty_init, "Sym Systems / Torque Systems", "MBC020-65 CPU/Video Board (Torque Systems OEM)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index cabd3e47aba..d46e9034ff6 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -22150,6 +22150,9 @@ greatgun // (c) 1983 mazerbla // (c) 1983 mazerblaa // (c) 1983 +@source:mbc020.cpp +mbc020 // + @source:mbc200.cpp mbc200 // diff --git a/src/mame/mess.flt b/src/mame/mess.flt index 1deb0466685..dedab313bb9 100644 --- a/src/mame/mess.flt +++ b/src/mame/mess.flt @@ -541,6 +541,7 @@ macquadra700.cpp magiceyes_pollux_vr3520f.cpp magnum.cpp mattelchess.cpp +mbc020.cpp mbc200.cpp mbc55x.cpp mbee.cpp