-
Notifications
You must be signed in to change notification settings - Fork 2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
--------------------------- Micro-Professor 1 Plus [Nigel Barnes] New working clones ------------------ MT-80Z [anonymous] New systems marked not working ------------------------------ Robot Training Arm CS-113 [anonymous] multitech/mpf1: Added expansion and ROM U7 slots. - Added ROM software list. multitech/mpf1p: Replaced bad dump of monitor ROM. - Corrected layout to use 14 seg LED's. - Added keyboard. - Added expansion and ROM U3 slots. - Added ROM software list. bus/mpf1: Added Micro-Professor 1 expansion boards: - Multitech EPB-MPF (Eprom Programmer Board) - Multitech EPB-MPF-IBP (Eprom Programmer Board) - Multitech IOM-MPF-IP (I/O and Memory Board) - Multitech PRT-MPF (Printer) - Multitech PRT-MPF-IP (Printer) - Multitech SGB-MPF (Sound Generation Board) - Multitech SSB-MPF (Speech Synthesizer Board) - Multitech TVA-MPF-IP (Video Board) - Bardehle VIDEO-MPF-I (Video Board)
- Loading branch information
Showing
23 changed files
with
1,947 additions
and
319 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,131 @@ | ||
// license:BSD-3-Clause | ||
// copyright-holders:Nigel Barnes | ||
/*************************************************************************** | ||
Multitech Eprom Programmer Board | ||
EPB-MPF : | ||
MPF-1B : ADDR 9000 GO | ||
EPB-MPF-IBP : | ||
MPF-1P : G 9000 | ||
MPF-1B : ADDR 9800 GO | ||
***************************************************************************/ | ||
|
||
#include "emu.h" | ||
#include "epb.h" | ||
#include "machine/i8255.h" | ||
|
||
|
||
namespace { | ||
|
||
//------------------------------------------------- | ||
// rom_region - device-specific ROM region | ||
//------------------------------------------------- | ||
|
||
ROM_START( mpf_epb ) | ||
ROM_REGION(0x0800, "rom", 0) | ||
ROM_LOAD("epb-ib.u8", 0x0000, 0x0800, CRC(bbd854f5) SHA1(489e597c12a14a1cf9568d18b299e4f4ae656f71)) | ||
ROM_END | ||
|
||
ROM_START( mpf_epb_ibp ) | ||
ROM_REGION(0x1000, "rom", 0) | ||
ROM_LOAD("ebp-ibp.u8", 0x0000, 0x1000, CRC(0156387a) SHA1(296842ee5bac23f41f46534663d4f0bfc04075cf)) | ||
ROM_END | ||
|
||
|
||
//------------------------------------------------- | ||
// mpf_epb_device - constructor | ||
//------------------------------------------------- | ||
|
||
class mpf_epb_device : public device_t, public device_mpf1_exp_interface | ||
{ | ||
public: | ||
static constexpr feature_type unemulated_features() { return feature::ROM; } | ||
|
||
mpf_epb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) | ||
: mpf_epb_device(mconfig, MPF_EPB, tag, owner, clock) | ||
{ | ||
} | ||
|
||
protected: | ||
mpf_epb_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) | ||
: device_t(mconfig, type, tag, owner, clock) | ||
, device_mpf1_exp_interface(mconfig, *this) | ||
, m_rom(*this, "rom") | ||
, m_ppi(*this, "ppi") | ||
{ | ||
} | ||
|
||
virtual void device_add_mconfig(machine_config &config) override | ||
{ | ||
I8255(config, m_ppi); | ||
} | ||
|
||
virtual const tiny_rom_entry *device_rom_region() const override | ||
{ | ||
return ROM_NAME( mpf_epb ); | ||
} | ||
|
||
virtual void device_start() override | ||
{ | ||
m_ram = make_unique_clear<uint8_t[]>(0x1000); | ||
|
||
// register for save states | ||
save_pointer(NAME(m_ram), 0x1000); | ||
} | ||
|
||
virtual void device_reset() override | ||
{ | ||
program_space().install_ram(0x8000, 0x8fff, m_ram.get()); | ||
program_space().install_rom(0x9000, 0x97ff, m_rom->base()); | ||
|
||
io_space().install_readwrite_handler(0xcc, 0xcf, emu::rw_delegate(*m_ppi, FUNC(i8255_device::read)), emu::rw_delegate(*m_ppi, FUNC(i8255_device::write))); | ||
} | ||
|
||
required_memory_region m_rom; | ||
required_device<i8255_device> m_ppi; | ||
|
||
std::unique_ptr<uint8_t[]> m_ram; | ||
}; | ||
|
||
|
||
// ======================> mpf_epb_ibp_device | ||
|
||
class mpf_epb_ibp_device : public mpf_epb_device | ||
{ | ||
public: | ||
mpf_epb_ibp_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) | ||
: mpf_epb_device(mconfig, MPF_EPB_IBP, tag, owner, clock) | ||
{ | ||
} | ||
|
||
protected: | ||
virtual const tiny_rom_entry *device_rom_region() const override | ||
{ | ||
return ROM_NAME( mpf_epb_ibp ); | ||
} | ||
|
||
virtual void device_start() override | ||
{ | ||
m_ram = make_unique_clear<uint8_t[]>(0x1800); | ||
|
||
// register for save states | ||
save_pointer(NAME(m_ram), 0x1800); | ||
} | ||
|
||
virtual void device_reset() override | ||
{ | ||
program_space().install_rom(0x9000, 0x9fff, m_rom->base()); | ||
program_space().install_ram(0xd800, 0xefff, m_ram.get()); | ||
|
||
io_space().install_readwrite_handler(0x70, 0x7f, emu::rw_delegate(*m_ppi, FUNC(i8255_device::read)), emu::rw_delegate(*m_ppi, FUNC(i8255_device::write))); | ||
} | ||
}; | ||
|
||
} // anonymous namespace | ||
|
||
|
||
DEFINE_DEVICE_TYPE_PRIVATE(MPF_EPB, device_mpf1_exp_interface, mpf_epb_device, "mpf1_epb", "Multitech EPB-MPF (Eprom Programmer Board)") | ||
DEFINE_DEVICE_TYPE_PRIVATE(MPF_EPB_IBP, device_mpf1_exp_interface, mpf_epb_ibp_device, "mpf1_epb_ibp", "Multitech EPB-MPF-IBP (Eprom Programmer Board)") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
// license:BSD-3-Clause | ||
// copyright-holders:Nigel Barnes | ||
#ifndef MAME_BUS_MPF1_EPB_H | ||
#define MAME_BUS_MPF1_EPB_H | ||
|
||
#pragma once | ||
|
||
#include "slot.h" | ||
|
||
|
||
DECLARE_DEVICE_TYPE(MPF_EPB, device_mpf1_exp_interface) | ||
DECLARE_DEVICE_TYPE(MPF_EPB_IBP, device_mpf1_exp_interface) | ||
|
||
#endif // MAME_BUS_MPF1_EPB_H |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,145 @@ | ||
// license:BSD-3-Clause | ||
// copyright-holders:Nigel Barnes | ||
/*************************************************************************** | ||
Multitech I/O and Memory Board | ||
PIO Application Example : G B000 | ||
CTC Application Example : G B100 | ||
8251 Application Example : G B300 | ||
***************************************************************************/ | ||
|
||
#include "emu.h" | ||
#include "iom.h" | ||
#include "machine/i8251.h" | ||
#include "machine/z80ctc.h" | ||
#include "machine/z80pio.h" | ||
#include "bus/rs232/rs232.h" | ||
|
||
|
||
namespace { | ||
|
||
//------------------------------------------------- | ||
// rom_region - device-specific ROM region | ||
//------------------------------------------------- | ||
|
||
ROM_START(mpf_iom_ip) | ||
ROM_REGION(0x1000, "rom", 0) | ||
ROM_LOAD("ip-iom.bin", 0x0000, 0x1000, CRC(bf789c58) SHA1(2c3c26290e041e913d00d7e0d65d53480e27187c)) | ||
ROM_END | ||
|
||
|
||
//------------------------------------------------- | ||
// input_ports - device-specific input ports | ||
//------------------------------------------------- | ||
|
||
static INPUT_PORTS_START(mpf_iom_ip) | ||
PORT_START("DIPSW") | ||
PORT_DIPNAME(0xf, 0xa, "Baud Rate") | ||
PORT_DIPSETTING(0x0, "50") | ||
PORT_DIPSETTING(0x1, "75") | ||
PORT_DIPSETTING(0x2, "110") | ||
PORT_DIPSETTING(0x3, "150") | ||
PORT_DIPSETTING(0x4, "200") | ||
PORT_DIPSETTING(0x5, "300") | ||
PORT_DIPSETTING(0x6, "600") | ||
PORT_DIPSETTING(0x7, "1200") | ||
PORT_DIPSETTING(0x8, "2400") | ||
PORT_DIPSETTING(0x9, "4800") | ||
PORT_DIPSETTING(0xa, "9600") | ||
INPUT_PORTS_END | ||
|
||
|
||
static DEVICE_INPUT_DEFAULTS_START( terminal ) | ||
DEVICE_INPUT_DEFAULTS( "RS232_TXBAUD", 0xff, RS232_BAUD_9600 ) | ||
DEVICE_INPUT_DEFAULTS( "RS232_RXBAUD", 0xff, RS232_BAUD_9600 ) | ||
DEVICE_INPUT_DEFAULTS( "RS232_DATABITS", 0xff, RS232_DATABITS_7 ) | ||
DEVICE_INPUT_DEFAULTS( "RS232_PARITY", 0xff, RS232_PARITY_EVEN ) | ||
DEVICE_INPUT_DEFAULTS( "RS232_STOPBITS", 0xff, RS232_STOPBITS_1 ) | ||
DEVICE_INPUT_DEFAULTS_END | ||
|
||
|
||
//------------------------------------------------- | ||
// mpf_iom_device - constructor | ||
//------------------------------------------------- | ||
|
||
class mpf_iom_device : public device_t, public device_mpf1_exp_interface | ||
{ | ||
public: | ||
mpf_iom_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) | ||
: device_t(mconfig, MPF_IOM_IP, tag, owner, clock) | ||
, device_mpf1_exp_interface(mconfig, *this) | ||
, m_rom(*this, "rom") | ||
, m_ctc(*this, "ctc") | ||
, m_pio(*this, "pio") | ||
, m_usart(*this, "uart") | ||
{ | ||
} | ||
|
||
protected: | ||
virtual void device_add_mconfig(machine_config &config) override | ||
{ | ||
Z80PIO(config, m_pio, DERIVED_CLOCK(1, 1)); | ||
m_pio->out_int_callback().set(DEVICE_SELF_OWNER, FUNC(mpf1_exp_device::int_w)); | ||
|
||
Z80CTC(config, m_ctc, DERIVED_CLOCK(1, 1)); | ||
m_ctc->set_clk<2>(DERIVED_CLOCK(1, 1)); | ||
m_ctc->zc_callback<2>().set(m_usart, FUNC(i8251_device::write_txc)); | ||
m_ctc->zc_callback<2>().append(m_usart, FUNC(i8251_device::write_rxc)); | ||
m_ctc->intr_callback().set(DEVICE_SELF_OWNER, FUNC(mpf1_exp_device::int_w)); | ||
|
||
I8251(config, m_usart, DERIVED_CLOCK(1, 1)); | ||
m_usart->rxrdy_handler().set(m_ctc, FUNC(z80ctc_device::trg3)); | ||
m_usart->txd_handler().set("rs232", FUNC(rs232_port_device::write_txd)); | ||
m_usart->dtr_handler().set("rs232", FUNC(rs232_port_device::write_dtr)); | ||
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)); | ||
rs232.dsr_handler().set(m_usart, FUNC(i8251_device::write_dsr)); | ||
rs232.set_option_device_input_defaults("terminal", DEVICE_INPUT_DEFAULTS_NAME(terminal)); | ||
} | ||
|
||
virtual const tiny_rom_entry *device_rom_region() const override | ||
{ | ||
return ROM_NAME(mpf_iom_ip); | ||
} | ||
|
||
virtual ioport_constructor device_input_ports() const override | ||
{ | ||
return INPUT_PORTS_NAME(mpf_iom_ip); | ||
} | ||
|
||
virtual void device_start() override | ||
{ | ||
m_ram = make_unique_clear<uint8_t[]>(0x1800); | ||
|
||
save_pointer(NAME(m_ram), 0x1800); | ||
} | ||
|
||
virtual void device_reset() override | ||
{ | ||
program_space().install_rom(0xb000, 0xbfff, m_rom->base()); | ||
program_space().install_ram(0xd800, 0xefff, m_ram.get()); | ||
|
||
io_space().install_readwrite_handler(0x60, 0x61, emu::rw_delegate(*m_usart, FUNC(i8251_device::read)), emu::rw_delegate(*m_usart, FUNC(i8251_device::write))); | ||
io_space().install_readwrite_handler(0x64, 0x67, emu::rw_delegate(*m_ctc, FUNC(z80ctc_device::read)), emu::rw_delegate(*m_ctc, FUNC(z80ctc_device::write))); | ||
io_space().install_readwrite_handler(0x68, 0x6b, emu::rw_delegate(*m_pio, FUNC(z80pio_device::read)), emu::rw_delegate(*m_pio, FUNC(z80pio_device::write))); | ||
io_space().install_read_port(0x6c, 0x6c, "DIPSW"); | ||
} | ||
|
||
private: | ||
required_memory_region m_rom; | ||
required_device<z80ctc_device> m_ctc; | ||
required_device<z80pio_device> m_pio; | ||
required_device<i8251_device> m_usart; | ||
|
||
std::unique_ptr<uint8_t[]> m_ram; | ||
}; | ||
|
||
} // anonymous namespace | ||
|
||
|
||
DEFINE_DEVICE_TYPE_PRIVATE(MPF_IOM_IP, device_mpf1_exp_interface, mpf_iom_device, "mpf1_iom_ip", "Multitech IOM-MPF-IP (I/O and Memory Board)") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
// license:BSD-3-Clause | ||
// copyright-holders:Nigel Barnes | ||
#ifndef MAME_BUS_MPF1_IOM_H | ||
#define MAME_BUS_MPF1_IOM_H | ||
|
||
#pragma once | ||
|
||
#include "slot.h" | ||
|
||
|
||
DECLARE_DEVICE_TYPE(MPF_IOM_IP, device_mpf1_exp_interface) | ||
|
||
#endif // MAME_BUS_MPF1_IOM_H |
Oops, something went wrong.