From 344298890cf4f50f68f22bf6a5b23a8466eff25d Mon Sep 17 00:00:00 2001 From: Miodrag Milanovic Date: Sun, 16 Feb 2025 18:51:04 +0100 Subject: [PATCH] =?UTF-8?q?New=20systems=20marked=20not=20working=20------?= =?UTF-8?q?------------------------=20PMP-11=20[Ra=C4=8Dunalni=C5=A1ki=20m?= =?UTF-8?q?uzej]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/mame/mame.lst | 3 ++ src/mame/sfrj/pmp11.cpp | 105 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 108 insertions(+) create mode 100644 src/mame/sfrj/pmp11.cpp diff --git a/src/mame/mame.lst b/src/mame/mame.lst index a3a413a4955..a17336a46a9 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -42043,6 +42043,9 @@ orao103 pecom32 pecom64 +@source:sfrj/pmp11.cpp +pmp11 + @source:sfrj/tim011.cpp tim011 diff --git a/src/mame/sfrj/pmp11.cpp b/src/mame/sfrj/pmp11.cpp new file mode 100644 index 00000000000..b0835c6aa4f --- /dev/null +++ b/src/mame/sfrj/pmp11.cpp @@ -0,0 +1,105 @@ +// license:BSD-3-Clause +// copyright-holders:Miodrag Milanovic + +#include "emu.h" +#include "bus/rs232/rs232.h" +#include "cpu/t11/t11.h" +#include "imagedev/floppy.h" +#include "machine/clock.h" +#include "machine/i8251.h" +#include "machine/wd_fdc.h" + +namespace { + +class pmp11_state : public driver_device +{ +public: + pmp11_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_uart1(*this, "uart1") + , m_uart2(*this, "uart2") + , m_fdc(*this, "fdc") + { } + + void pmp11(machine_config &config); +private: + void pdp11_mem(address_map &map) ATTR_COLD; + + required_device m_maincpu; + required_device m_uart1; + required_device m_uart2; + required_device m_fdc; +}; + +void pmp11_state::pdp11_mem(address_map &map) +{ + map.unmap_value_high(); + map(0x0000, 0xefff).ram(); + map(0xf000, 0xf7ff).rom(); + map(0xf800, 0xfbff).ram(); + // TODO: Not sure if these are mirrored, but no control_w on alternate address + map(0xff70, 0xff71).mirror(0x4).rw(m_uart1, FUNC(i8251_device::status_r), FUNC(i8251_device::control_w)).umask16(0x00ff); + map(0xff72, 0xff73).mirror(0x4).rw(m_uart1, FUNC(i8251_device::data_r), FUNC(i8251_device::data_w)).umask16(0x00ff); +} + +/* Input ports */ +static INPUT_PORTS_START( pmp11 ) +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_DATABITS", 0xff, RS232_DATABITS_8 ) + DEVICE_INPUT_DEFAULTS( "RS232_PARITY", 0xff, RS232_PARITY_NONE ) + DEVICE_INPUT_DEFAULTS( "RS232_STOPBITS", 0xff, RS232_STOPBITS_1 ) +DEVICE_INPUT_DEFAULTS_END + +void pmp11_state::pmp11(machine_config &config) +{ + T11(config, m_maincpu, 8_MHz_XTAL); + m_maincpu->set_initial_mode(7 << 13); + m_maincpu->set_addrmap(AS_PROGRAM, &pmp11_state::pdp11_mem); + + clock_device &uart_clock(CLOCK(config, "uart_clock", 8_MHz_XTAL / 4 / 13)); + uart_clock.signal_handler().set(m_uart1, FUNC(i8251_device::write_txc)); + uart_clock.signal_handler().append(m_uart1, FUNC(i8251_device::write_rxc)); + uart_clock.signal_handler().append(m_uart2, FUNC(i8251_device::write_txc)); + uart_clock.signal_handler().append(m_uart2, FUNC(i8251_device::write_rxc)); + + I8251(config, m_uart1, 0); + m_uart1->txd_handler().set("rs232a", FUNC(rs232_port_device::write_txd)); + m_uart1->dtr_handler().set("rs232a", FUNC(rs232_port_device::write_dtr)); + m_uart1->rts_handler().set("rs232a", FUNC(rs232_port_device::write_rts)); + + rs232_port_device &rs232a(RS232_PORT(config, "rs232a", default_rs232_devices, "terminal")); + rs232a.rxd_handler().set("uart1", FUNC(i8251_device::write_rxd)); + rs232a.dsr_handler().set("uart1", FUNC(i8251_device::write_dsr)); + rs232a.cts_handler().set("uart1", FUNC(i8251_device::write_cts)); + rs232a.set_option_device_input_defaults("terminal", DEVICE_INPUT_DEFAULTS_NAME(terminal)); + + I8251(config, m_uart2, 0); + m_uart2->txd_handler().set("rs232b", FUNC(rs232_port_device::write_txd)); + m_uart2->dtr_handler().set("rs232b", FUNC(rs232_port_device::write_dtr)); + m_uart2->rts_handler().set("rs232b", FUNC(rs232_port_device::write_rts)); + + rs232_port_device &rs232b(RS232_PORT(config, "rs232b", default_rs232_devices, nullptr)); + rs232b.rxd_handler().set("uart2", FUNC(i8251_device::write_rxd)); + rs232b.dsr_handler().set("uart2", FUNC(i8251_device::write_dsr)); + rs232b.cts_handler().set("uart2", FUNC(i8251_device::write_cts)); + + WD2797(config, m_fdc, 8_MHz_XTAL / 4); +} + +ROM_START( pmp11 ) + ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) + ROM_LOAD( "rom.bin", 0xf000, 0x0800, CRC(2cfdc3a3) SHA1(50ffa2a3bd0b75c1ecb4ab6c691796ab0d85dd4e)) +ROM_END + +} // Anonymous namespace + + +/* Driver */ + +/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ +COMP( 1985, pmp11, 0, 0, pmp11, pmp11, pmp11_state, empty_init, "Institut Jožef Stefan", "PMP-11", MACHINE_NOT_WORKING | MACHINE_NO_SOUND)