Skip to content

Commit

Permalink
Systems promoted to working
Browse files Browse the repository at this point in the history
---------------------------
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
Pernod70 committed Jul 1, 2024
1 parent 5080559 commit bf18229
Show file tree
Hide file tree
Showing 23 changed files with 1,947 additions and 319 deletions.
26 changes: 26 additions & 0 deletions scripts/src/bus.lua
Original file line number Diff line number Diff line change
Expand Up @@ -1900,6 +1900,32 @@ if (BUSES["JAKKS_GAMEKEY"]~=null) then
}
end

---------------------------------------------------
--
--@src/devices/bus/mpf1/slot.h,BUSES["MPF1"] = true
---------------------------------------------------

if (BUSES["MPF1"]~=null) then
files {
MAME_DIR .. "src/devices/bus/mpf1/slot.cpp",
MAME_DIR .. "src/devices/bus/mpf1/slot.h",
MAME_DIR .. "src/devices/bus/mpf1/epb.cpp",
MAME_DIR .. "src/devices/bus/mpf1/epb.h",
MAME_DIR .. "src/devices/bus/mpf1/iom.cpp",
MAME_DIR .. "src/devices/bus/mpf1/iom.h",
MAME_DIR .. "src/devices/bus/mpf1/prt.cpp",
MAME_DIR .. "src/devices/bus/mpf1/prt.h",
MAME_DIR .. "src/devices/bus/mpf1/sgb.cpp",
MAME_DIR .. "src/devices/bus/mpf1/sgb.h",
MAME_DIR .. "src/devices/bus/mpf1/ssb.cpp",
MAME_DIR .. "src/devices/bus/mpf1/ssb.h",
MAME_DIR .. "src/devices/bus/mpf1/tva.cpp",
MAME_DIR .. "src/devices/bus/mpf1/tva.h",
MAME_DIR .. "src/devices/bus/mpf1/vid.cpp",
MAME_DIR .. "src/devices/bus/mpf1/vid.h",
}
end

---------------------------------------------------
--
--@src/devices/bus/msx/ctrl/ctrl.h,BUSES["MSX_CTRL"] = true
Expand Down
131 changes: 131 additions & 0 deletions src/devices/bus/mpf1/epb.cpp
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)")
14 changes: 14 additions & 0 deletions src/devices/bus/mpf1/epb.h
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
145 changes: 145 additions & 0 deletions src/devices/bus/mpf1/iom.cpp
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)")
13 changes: 13 additions & 0 deletions src/devices/bus/mpf1/iom.h
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
Loading

0 comments on commit bf18229

Please sign in to comment.