mt420, mt5510: Split to separate drivers

This commit is contained in:
AJR 2021-07-02 19:33:15 -04:00
parent 601bac518d
commit 3d4c25b2e0
6 changed files with 238 additions and 192 deletions

View File

@ -2969,8 +2969,9 @@ files {
createMESSProjects(_target, _subtarget, "microterm")
files {
MAME_DIR .. "src/mame/drivers/ergo201.cpp",
MAME_DIR .. "src/mame/drivers/microterm.cpp",
MAME_DIR .. "src/mame/drivers/microterm_f8.cpp",
MAME_DIR .. "src/mame/drivers/mt420.cpp",
MAME_DIR .. "src/mame/drivers/mt5510.cpp",
}
createMESSProjects(_target, _subtarget, "mips")

View File

@ -1,186 +0,0 @@
// license:BSD-3-Clause
// copyright-holders:
/***********************************************************************************************************************************
Skeleton driver for Micro-Term terminals.
************************************************************************************************************************************/
#include "emu.h"
#include "cpu/z80/z80.h"
#include "machine/eepromser.h"
#include "machine/mc68681.h"
#include "machine/scn_pci.h"
#include "video/scn2674.h"
#include "screen.h"
class microterm_state : public driver_device
{
public:
microterm_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_p_chargen(*this, "chargen")
{ }
void mt420(machine_config &config);
void mt5510(machine_config &config);
private:
u32 mt5510_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
u8 c000_r();
SCN2674_DRAW_CHARACTER_MEMBER(draw_character);
void mt420_io_map(address_map &map);
void mt420_mem_map(address_map &map);
void mt420_vram_map(address_map &map);
void mt5510_io_map(address_map &map);
void mt5510_mem_map(address_map &map);
required_device<cpu_device> m_maincpu;
optional_region_ptr<u8> m_p_chargen;
};
u32 microterm_state::mt5510_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
return 0;
}
u8 microterm_state::c000_r()
{
return machine().rand() & 0x80;
}
void microterm_state::mt420_mem_map(address_map &map)
{
map(0x0000, 0x7fff).rom().region("maincpu", 0);
map(0x9000, 0x9000).nopw();
map(0xc000, 0xc000).r(FUNC(microterm_state::c000_r)).nopw();
map(0xe000, 0xefff).ram();
map(0xeff8, 0xefff).rw("avdc", FUNC(scn2674_device::read), FUNC(scn2674_device::write));
map(0xf000, 0xf7ff).ram();
}
void microterm_state::mt420_io_map(address_map &map)
{
map.global_mask(0xff);
map(0xe0, 0xef).rw("duart", FUNC(scn2681_device::read), FUNC(scn2681_device::write));
map(0xf0, 0xf3).rw("aci", FUNC(scn2641_device::read), FUNC(scn2641_device::write));
}
SCN2674_DRAW_CHARACTER_MEMBER(microterm_state::draw_character)
{
}
void microterm_state::mt420_vram_map(address_map &map)
{
map(0x0000, 0x3fff).noprw();
}
void microterm_state::mt5510_mem_map(address_map &map)
{
map(0x0000, 0x7fff).rom().region("maincpu", 0).nopw();
map(0x8000, 0xbfff).ram();
map(0xc000, 0xffff).ram();
}
void microterm_state::mt5510_io_map(address_map &map)
{
map.global_mask(0xff);
map(0x60, 0x6f).rw("duart", FUNC(scn2681_device::read), FUNC(scn2681_device::write));
}
static INPUT_PORTS_START( microterm )
INPUT_PORTS_END
void microterm_state::mt420(machine_config &config)
{
Z80(config, m_maincpu, 4'000'000);
m_maincpu->set_addrmap(AS_PROGRAM, &microterm_state::mt420_mem_map);
m_maincpu->set_addrmap(AS_IO, &microterm_state::mt420_io_map);
scn2681_device &duart(SCN2681(config, "duart", 3.6864_MHz_XTAL)); // MC2681
duart.irq_cb().set_inputline(m_maincpu, 0);
duart.outport_cb().set("eeprom", FUNC(eeprom_serial_93cxx_device::di_write)).bit(5);
duart.outport_cb().append("eeprom", FUNC(eeprom_serial_93cxx_device::cs_write)).bit(4);
duart.outport_cb().append("eeprom", FUNC(eeprom_serial_93cxx_device::clk_write)).bit(3);
SCN2641(config, "aci", 3.6864_MHz_XTAL);
EEPROM_93C46_16BIT(config, "eeprom").do_callback().set("duart", FUNC(scn2681_device::ip6_w));
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_raw(9.87768_MHz_XTAL, 612, 0, 480, 269, 0, 250);
//screen.set_raw(15.30072_MHz_XTAL, 948, 0, 792, 269, 0, 250);
screen.set_screen_update("avdc", FUNC(scn2674_device::screen_update));
scn2674_device &avdc(SCN2674(config, "avdc", 9.87768_MHz_XTAL / 6));
//avdc.set_clock(15.30072_MHz_XTAL / 6);
avdc.set_character_width(6);
avdc.set_display_callback(FUNC(microterm_state::draw_character));
avdc.set_addrmap(0, &microterm_state::mt420_vram_map);
avdc.set_screen("screen");
}
void microterm_state::mt5510(machine_config &config)
{
Z80(config, m_maincpu, 6_MHz_XTAL);
m_maincpu->set_addrmap(AS_PROGRAM, &microterm_state::mt5510_mem_map);
m_maincpu->set_addrmap(AS_IO, &microterm_state::mt5510_io_map);
scn2681_device &duart(SCN2681(config, "duart", 3.6864_MHz_XTAL));
duart.irq_cb().set_inputline(m_maincpu, 0);
duart.outport_cb().set("eeprom1", FUNC(eeprom_serial_93cxx_device::di_write)).bit(6);
duart.outport_cb().append("eeprom2", FUNC(eeprom_serial_93cxx_device::di_write)).bit(5);
duart.outport_cb().append("eeprom1", FUNC(eeprom_serial_93cxx_device::cs_write)).bit(4);
duart.outport_cb().append("eeprom2", FUNC(eeprom_serial_93cxx_device::cs_write)).bit(4);
duart.outport_cb().append("eeprom1", FUNC(eeprom_serial_93cxx_device::clk_write)).bit(3);
duart.outport_cb().append("eeprom2", FUNC(eeprom_serial_93cxx_device::clk_write)).bit(3);
EEPROM_93C46_16BIT(config, "eeprom1").do_callback().set("duart", FUNC(scn2681_device::ip6_w));
EEPROM_93C46_16BIT(config, "eeprom2").do_callback().set("duart", FUNC(scn2681_device::ip5_w));
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_raw(45.8304_MHz_XTAL / 2, 1120, 0, 960, 341, 0, 300); // wild guess at resolution
screen.set_screen_update(FUNC(microterm_state::mt5510_update));
}
/**************************************************************************************************************
Micro-Term Model 420.
Chips: Z80, MC2681P, SCN2674, 2x CDM6264E3, TMM2016BP-12, SCN2641, NMC9345N. Undumped PAL10L8NC at U18 and PROM (N82S129N) at U41.
Crystals: 3.6864, 15.30072 (hard to read), 9.87768
***************************************************************************************************************/
ROM_START( mt420 )
ROM_REGION(0x10000, "maincpu", 0)
ROM_LOAD( "1910_m.p._r1.9.u8", 0x0000, 0x8000, CRC(e79154e9) SHA1(7c3f22097b931986c921bf731de98a1d0536aec9) )
ROM_REGION(0x1000, "chargen", 0)
ROM_LOAD( "mt420cg_rev2.1.u44", 0x0000, 0x0fe0, CRC(7950e485) SHA1(1f03525958464bbe861d2e78f07cc5264e17c0e8) ) // incomplete?
ROM_END
/**************************************************************************************************************
Micro-Term 5510.
Chips: Z80, SCN2681, S8842C4/SCX6244UNT, 4x CXK5864BP-70L, 2x NMC9346N
Crystals: 6.000, 3.68640, 45.8304
***************************************************************************************************************/
ROM_START( mt5510 )
ROM_REGION(0x10000, "maincpu", 0)
ROM_LOAD( "2500_m.p._r1.9.u11", 0x00000, 0x10000, CRC(71f19a53) SHA1(91df26d46a93359cd033d7137f1676bcfa58223b) )
ROM_END
COMP( 1986, mt420, 0, 0, mt420, microterm, microterm_state, empty_init, "Micro-Term", "Micro-Term 420", MACHINE_IS_SKELETON )
COMP( 1988, mt5510, 0, 0, mt5510, microterm, microterm_state, empty_init, "Micro-Term", "Micro-Term 5510", MACHINE_IS_SKELETON )

130
src/mame/drivers/mt420.cpp Normal file
View File

@ -0,0 +1,130 @@
// license:BSD-3-Clause
// copyright-holders:AJR
/***********************************************************************************************************************************
Skeleton driver for Micro-Term Model 420 terminal.
************************************************************************************************************************************/
#include "emu.h"
#include "cpu/z80/z80.h"
#include "machine/eepromser.h"
#include "machine/input_merger.h"
#include "machine/mc68681.h"
#include "machine/scn_pci.h"
#include "video/scn2674.h"
#include "screen.h"
namespace {
class mt420_state : public driver_device
{
public:
mt420_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 mt420(machine_config &config);
private:
u8 c000_r();
SCN2674_DRAW_CHARACTER_MEMBER(draw_character);
void mem_map(address_map &map);
void io_map(address_map &map);
void vram_map(address_map &map);
required_device<cpu_device> m_maincpu;
required_region_ptr<u8> m_chargen;
};
SCN2674_DRAW_CHARACTER_MEMBER(mt420_state::draw_character)
{
}
u8 mt420_state::c000_r()
{
return machine().rand() & 0x80;
}
void mt420_state::mem_map(address_map &map)
{
map(0x0000, 0x7fff).rom().region("maincpu", 0);
map(0x9000, 0x9000).nopw();
map(0xc000, 0xc000).r(FUNC(mt420_state::c000_r)).nopw();
map(0xe000, 0xefff).ram();
map(0xeff8, 0xefff).rw("avdc", FUNC(scn2674_device::read), FUNC(scn2674_device::write));
map(0xf000, 0xf7ff).ram();
}
void mt420_state::io_map(address_map &map)
{
map.global_mask(0xff);
map(0xe0, 0xef).rw("duart", FUNC(scn2681_device::read), FUNC(scn2681_device::write));
map(0xf0, 0xf3).rw("aci", FUNC(scn2641_device::read), FUNC(scn2641_device::write));
}
void mt420_state::vram_map(address_map &map)
{
map(0x0000, 0x3fff).noprw();
}
static INPUT_PORTS_START(mt420)
INPUT_PORTS_END
void mt420_state::mt420(machine_config &config)
{
Z80(config, m_maincpu, 4'000'000);
m_maincpu->set_addrmap(AS_PROGRAM, &mt420_state::mem_map);
m_maincpu->set_addrmap(AS_IO, &mt420_state::io_map);
INPUT_MERGER_ANY_HIGH(config, "mainint").output_handler().set_inputline(m_maincpu, 0);
scn2681_device &duart(SCN2681(config, "duart", 3.6864_MHz_XTAL)); // MC2681
duart.irq_cb().set("mainint", FUNC(input_merger_device::in_w<0>));
duart.outport_cb().set("eeprom", FUNC(eeprom_serial_93cxx_device::di_write)).bit(5);
duart.outport_cb().append("eeprom", FUNC(eeprom_serial_93cxx_device::cs_write)).bit(4);
duart.outport_cb().append("eeprom", FUNC(eeprom_serial_93cxx_device::clk_write)).bit(3);
scn2641_device &aci(SCN2641(config, "aci", 3.6864_MHz_XTAL));
aci.intr_handler().set("mainint", FUNC(input_merger_device::in_w<1>));
EEPROM_93C46_16BIT(config, "eeprom").do_callback().set("duart", FUNC(scn2681_device::ip6_w));
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_raw(9.87768_MHz_XTAL, 612, 0, 480, 269, 0, 250);
//screen.set_raw(15.30072_MHz_XTAL, 948, 0, 792, 269, 0, 250);
screen.set_screen_update("avdc", FUNC(scn2674_device::screen_update));
scn2674_device &avdc(SCN2674(config, "avdc", 9.87768_MHz_XTAL / 6));
//avdc.set_clock(15.30072_MHz_XTAL / 6);
avdc.set_character_width(6);
avdc.set_display_callback(FUNC(mt420_state::draw_character));
avdc.set_addrmap(0, &mt420_state::vram_map);
avdc.set_screen("screen");
}
/**************************************************************************************************************
Micro-Term Model 420.
Chips: Z80, MC2681P, SCN2674, 2x CDM6264E3, TMM2016BP-12, SCN2641, NMC9345N. Undumped PAL10L8NC at U18 and PROM (N82S129N) at U41.
Crystals: 3.6864, 15.30072 (hard to read), 9.87768
***************************************************************************************************************/
ROM_START(mt420)
ROM_REGION(0x10000, "maincpu", 0)
ROM_LOAD( "1910_m.p._r1.9.u8", 0x0000, 0x8000, CRC(e79154e9) SHA1(7c3f22097b931986c921bf731de98a1d0536aec9) )
ROM_REGION(0x1000, "chargen", 0)
ROM_LOAD( "mt420cg_rev2.1.u44", 0x0000, 0x0fe0, CRC(7950e485) SHA1(1f03525958464bbe861d2e78f07cc5264e17c0e8) ) // incomplete?
ROM_END
} // anonymous namespace
COMP(1986, mt420, 0, 0, mt420, mt420, mt420_state, empty_init, "Micro-Term", "Micro-Term 420", MACHINE_IS_SKELETON)

View File

@ -0,0 +1,98 @@
// license:BSD-3-Clause
// copyright-holders:AJR
/***********************************************************************************************************************************
Skeleton driver for Micro-Term Model 5510 terminal.
************************************************************************************************************************************/
#include "emu.h"
#include "cpu/z80/z80.h"
#include "machine/eepromser.h"
#include "machine/mc68681.h"
#include "screen.h"
namespace {
class mt5510_state : public driver_device
{
public:
mt5510_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
{
}
void mt5510(machine_config &config);
private:
u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
void mem_map(address_map &map);
void io_map(address_map &map);
required_device<cpu_device> m_maincpu;
};
u32 mt5510_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
return 0;
}
void mt5510_state::mem_map(address_map &map)
{
map(0x0000, 0x7fff).rom().region("maincpu", 0).nopw();
map(0x8000, 0xbfff).ram();
map(0xc000, 0xffff).ram();
}
void mt5510_state::io_map(address_map &map)
{
map.global_mask(0xff);
map(0x60, 0x6f).rw("duart", FUNC(scn2681_device::read), FUNC(scn2681_device::write));
}
static INPUT_PORTS_START(mt5510)
INPUT_PORTS_END
void mt5510_state::mt5510(machine_config &config)
{
Z80(config, m_maincpu, 6_MHz_XTAL);
m_maincpu->set_addrmap(AS_PROGRAM, &mt5510_state::mem_map);
m_maincpu->set_addrmap(AS_IO, &mt5510_state::io_map);
scn2681_device &duart(SCN2681(config, "duart", 3.6864_MHz_XTAL));
duart.irq_cb().set_inputline(m_maincpu, 0);
duart.outport_cb().set("eeprom1", FUNC(eeprom_serial_93cxx_device::di_write)).bit(6);
duart.outport_cb().append("eeprom2", FUNC(eeprom_serial_93cxx_device::di_write)).bit(5);
duart.outport_cb().append("eeprom1", FUNC(eeprom_serial_93cxx_device::cs_write)).bit(4);
duart.outport_cb().append("eeprom2", FUNC(eeprom_serial_93cxx_device::cs_write)).bit(4);
duart.outport_cb().append("eeprom1", FUNC(eeprom_serial_93cxx_device::clk_write)).bit(3);
duart.outport_cb().append("eeprom2", FUNC(eeprom_serial_93cxx_device::clk_write)).bit(3);
EEPROM_93C46_16BIT(config, "eeprom1").do_callback().set("duart", FUNC(scn2681_device::ip6_w));
EEPROM_93C46_16BIT(config, "eeprom2").do_callback().set("duart", FUNC(scn2681_device::ip5_w));
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_raw(45.8304_MHz_XTAL / 2, 1120, 0, 960, 341, 0, 300); // wild guess at resolution
screen.set_screen_update(FUNC(mt5510_state::screen_update));
}
/**************************************************************************************************************
Micro-Term 5510.
Chips: Z80, SCN2681, S8842C4/SCX6244UNT, 4x CXK5864BP-70L, 2x NMC9346N
Crystals: 6.000, 3.68640, 45.8304
***************************************************************************************************************/
ROM_START( mt5510 )
ROM_REGION(0x10000, "maincpu", 0)
ROM_LOAD( "2500_m.p._r1.9.u11", 0x00000, 0x10000, CRC(71f19a53) SHA1(91df26d46a93359cd033d7137f1676bcfa58223b) )
ROM_END
} // anonymous namespace
COMP(1988, mt5510, 0, 0, mt5510, mt5510, mt5510_state, empty_init, "Micro-Term", "Micro-Term 5510", MACHINE_IS_SKELETON)

View File

@ -23203,10 +23203,6 @@ micron // 1980 Micron
spinveti // 1980 Space Invasion (ETI)
mt6809 // 1984 Microtan 65 (6809 CPU)
@source:microterm.cpp
mt420 //
mt5510 //
@source:microterm_f8.cpp
act5a //
@ -30889,6 +30885,12 @@ yis503m //
yis604 //
yis60464 //
@source:mt420.cpp
mt420 //
@source:mt5510.cpp
mt5510 //
@source:mt735.cpp
mt735 //

View File

@ -618,7 +618,6 @@ microkorg.cpp
micromon.cpp
micronic.cpp
microtan.cpp
microterm.cpp
microterm_f8.cpp
microvsn.cpp
mightyframe.cpp
@ -661,6 +660,8 @@ ms9540.cpp
msbc1.cpp
mstation.cpp
msx.cpp
mt420.cpp
mt5510.cpp
mt735.cpp
mtd1256.cpp
mtx.cpp