summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame
diff options
context:
space:
mode:
author Nigel Barnes <Pernod70@users.noreply.github.com>2022-05-18 19:17:21 +0100
committer Nigel Barnes <Pernod70@users.noreply.github.com>2022-05-18 21:07:44 +0100
commitb81f68eb66eb2d4b48875947f9d9d64502f79cb5 (patch)
tree09cc9289999bcaf9b17b62499c028bbaef37061a /src/mame
parente5790f179c2dce766792f620612ead57ed942806 (diff)
mtx.cpp: New expansion devices CFX System and MAGROM.
- Added Reset keys and joystick ports. - Re-implemented cartridge slot as external ROMPAK device.
Diffstat (limited to 'src/mame')
-rw-r--r--src/mame/drivers/mtx.cpp126
-rw-r--r--src/mame/includes/mtx.h21
-rw-r--r--src/mame/machine/mtx.cpp82
3 files changed, 142 insertions, 87 deletions
diff --git a/src/mame/drivers/mtx.cpp b/src/mame/drivers/mtx.cpp
index 2ed4ac0542a..00abf7b659d 100644
--- a/src/mame/drivers/mtx.cpp
+++ b/src/mame/drivers/mtx.cpp
@@ -48,6 +48,7 @@ void mtx_state::mtx_mem(address_map &map)
void mtx_state::mtx_io(address_map &map)
{
+ map.unmap_value_high(); // TODO: floating bus
map.global_mask(0xff);
map(0x00, 0x00).rw(FUNC(mtx_state::mtx_strobe_r), FUNC(mtx_state::mtx_bankswitch_w));
map(0x01, 0x01).rw("tms9929a", FUNC(tms9929a_device::vram_read), FUNC(tms9929a_device::vram_write));
@@ -98,8 +99,8 @@ static INPUT_PORTS_START( mtx512 )
PORT_BIT( 0x010, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')')
PORT_BIT( 0x020, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('=')
PORT_BIT( 0x040, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_TILDE) PORT_CHAR('\\') PORT_CHAR('|')
- PORT_BIT( 0x080, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad 7 Page") PORT_CODE(KEYCODE_7_PAD) PORT_CHAR(UCHAR_MAMEKEY(PGDN)) PORT_CHAR(UCHAR_MAMEKEY(7_PAD))
- PORT_BIT( 0x100, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9_PAD) PORT_CHAR(UCHAR_MAMEKEY(CANCEL)) PORT_CHAR(UCHAR_MAMEKEY(9_PAD))
+ PORT_BIT( 0x080, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad 7 PAGE") PORT_CODE(KEYCODE_7_PAD) PORT_CHAR(UCHAR_MAMEKEY(PGDN)) PORT_CHAR(UCHAR_MAMEKEY(7_PAD))
+ PORT_BIT( 0x100, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad 9 BRK") PORT_CODE(KEYCODE_9_PAD) PORT_CHAR(UCHAR_MAMEKEY(CANCEL)) PORT_CHAR(UCHAR_MAMEKEY(9_PAD))
PORT_BIT( 0x200, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1))
PORT_START("ROW1")
@@ -122,8 +123,8 @@ static INPUT_PORTS_START( mtx512 )
PORT_BIT( 0x010, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I')
PORT_BIT( 0x020, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P')
PORT_BIT( 0x040, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR('[') PORT_CHAR('{')
- PORT_BIT( 0x080, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5_PAD) PORT_CHAR(UCHAR_MAMEKEY(UP)) PORT_CHAR(UCHAR_MAMEKEY(5_PAD))
- PORT_BIT( 0x100, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4_PAD) PORT_CHAR('\t') PORT_CHAR(UCHAR_MAMEKEY(4_PAD))
+ PORT_BIT( 0x080, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad 5 " UTF8_UP) PORT_CODE(KEYCODE_5_PAD) PORT_CHAR(UCHAR_MAMEKEY(UP)) PORT_CHAR(UCHAR_MAMEKEY(5_PAD))
+ PORT_BIT( 0x100, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad 4 TAB") PORT_CODE(KEYCODE_4_PAD) PORT_CHAR('\t') PORT_CHAR(UCHAR_MAMEKEY(4_PAD))
PORT_BIT( 0x200, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2))
PORT_START("ROW3")
@@ -133,20 +134,20 @@ static INPUT_PORTS_START( mtx512 )
PORT_BIT( 0x008, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U')
PORT_BIT( 0x010, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O')
PORT_BIT( 0x020, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('@') PORT_CHAR('`')
- PORT_BIT( 0x040, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Linefeed") PORT_CODE(KEYCODE_PRTSCR)
- PORT_BIT( 0x080, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1_PAD) PORT_CHAR(UCHAR_MAMEKEY(LEFT)) PORT_CHAR(UCHAR_MAMEKEY(1_PAD))
- PORT_BIT( 0x100, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6_PAD) PORT_CHAR(UCHAR_MAMEKEY(DEL)) PORT_CHAR(UCHAR_MAMEKEY(6_PAD))
+ PORT_BIT( 0x040, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Line Feed") PORT_CODE(KEYCODE_PRTSCR)
+ PORT_BIT( 0x080, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad 1 " UTF8_LEFT) PORT_CODE(KEYCODE_1_PAD) PORT_CHAR(UCHAR_MAMEKEY(LEFT)) PORT_CHAR(UCHAR_MAMEKEY(1_PAD))
+ PORT_BIT( 0x100, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad 6 DEL") PORT_CODE(KEYCODE_6_PAD) PORT_CHAR(UCHAR_MAMEKEY(DEL)) PORT_CHAR(UCHAR_MAMEKEY(6_PAD))
PORT_BIT( 0x200, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F6) PORT_CHAR(UCHAR_MAMEKEY(F6))
PORT_START("ROW4")
- PORT_BIT( 0x001, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("AlphaLock") PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK))
+ PORT_BIT( 0x001, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Alpha Lock") PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK))
PORT_BIT( 0x002, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S')
PORT_BIT( 0x004, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F')
PORT_BIT( 0x008, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H')
PORT_BIT( 0x010, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K')
PORT_BIT( 0x020, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR('+')
PORT_BIT( 0x040, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH2) PORT_CHAR(']') PORT_CHAR('}')
- PORT_BIT( 0x080, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3_PAD) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) PORT_CHAR(UCHAR_MAMEKEY(3_PAD))
+ PORT_BIT( 0x080, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad 3 " UTF8_RIGHT) PORT_CODE(KEYCODE_3_PAD) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) PORT_CHAR(UCHAR_MAMEKEY(3_PAD))
PORT_BIT( 0x100, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT( 0x200, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F7) PORT_CHAR(UCHAR_MAMEKEY(F7))
@@ -158,7 +159,7 @@ static INPUT_PORTS_START( mtx512 )
PORT_BIT( 0x010, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L')
PORT_BIT( 0x020, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR(':') PORT_CHAR('*')
PORT_BIT( 0x040, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
- PORT_BIT( 0x080, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2_PAD) PORT_CHAR(UCHAR_MAMEKEY(HOME)) PORT_CHAR(UCHAR_MAMEKEY(2_PAD))
+ PORT_BIT( 0x080, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad 2 HOME") PORT_CODE(KEYCODE_2_PAD) PORT_CHAR(UCHAR_MAMEKEY(HOME)) PORT_CHAR(UCHAR_MAMEKEY(2_PAD))
PORT_BIT( 0x100, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT( 0x200, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3))
@@ -170,7 +171,7 @@ static INPUT_PORTS_START( mtx512 )
PORT_BIT( 0x010, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<')
PORT_BIT( 0x020, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?')
PORT_BIT( 0x040, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
- PORT_BIT( 0x080, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DEL_PAD) PORT_CHAR(UCHAR_MAMEKEY(DOWN)) PORT_CHAR(UCHAR_MAMEKEY(DEL_PAD))
+ PORT_BIT( 0x080, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad . " UTF8_DOWN) PORT_CODE(KEYCODE_DEL_PAD) PORT_CHAR(UCHAR_MAMEKEY(DOWN)) PORT_CHAR(UCHAR_MAMEKEY(DEL_PAD))
PORT_BIT( 0x100, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_BIT( 0x200, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F8) PORT_CHAR(UCHAR_MAMEKEY(F8))
@@ -181,19 +182,62 @@ static INPUT_PORTS_START( mtx512 )
PORT_BIT( 0x008, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M')
PORT_BIT( 0x010, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>')
PORT_BIT( 0x020, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('_')
- PORT_BIT( 0x040, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0_PAD) PORT_CHAR(UCHAR_MAMEKEY(INSERT)) PORT_CHAR(UCHAR_MAMEKEY(0_PAD))
- PORT_BIT( 0x080, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad Enter CLS") PORT_CODE(KEYCODE_ENTER_PAD) PORT_CHAR(UCHAR_MAMEKEY(ENTER_PAD))
+ PORT_BIT( 0x040, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad 0 INS") PORT_CODE(KEYCODE_0_PAD) PORT_CHAR(UCHAR_MAMEKEY(INSERT)) PORT_CHAR(UCHAR_MAMEKEY(0_PAD))
+ PORT_BIT( 0x080, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad ENT CLS") PORT_CODE(KEYCODE_ENTER_PAD) PORT_CHAR(UCHAR_MAMEKEY(ENTER_PAD))
PORT_BIT( 0x100, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
PORT_BIT( 0x200, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F4) PORT_CHAR(UCHAR_MAMEKEY(F4))
- PORT_START("country_code")
- PORT_DIPNAME(0x04, 0x00, "Country Code Switch 1")
- PORT_DIPSETTING(0x04, DEF_STR(Off) )
- PORT_DIPSETTING(0x00, DEF_STR(On) )
- PORT_DIPNAME(0x08, 0x00, "Country Code Switch 0")
- PORT_DIPSETTING(0x08, DEF_STR(Off) )
- PORT_DIPSETTING(0x00, DEF_STR(On) )
- PORT_BIT( 0xf3, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_START("RESET")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Reset") PORT_CODE(KEYCODE_LALT) PORT_CHAR(UCHAR_MAMEKEY(LALT)) PORT_CHANGED_MEMBER(DEVICE_SELF, mtx_state, trigger_reset, 0)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Reset") PORT_CODE(KEYCODE_RALT) PORT_CHAR(UCHAR_MAMEKEY(RALT)) PORT_CHANGED_MEMBER(DEVICE_SELF, mtx_state, trigger_reset, 0)
+
+ PORT_START("JOY0")
+ PORT_BIT( 0x3ff, IP_ACTIVE_LOW, IPT_UNUSED)
+
+ PORT_START("JOY1")
+ PORT_BIT( 0x3ff, IP_ACTIVE_LOW, IPT_UNUSED)
+
+ PORT_START("JOY2")
+ PORT_BIT( 0x080, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
+ PORT_BIT( 0x37f, IP_ACTIVE_LOW, IPT_UNUSED)
+
+ PORT_START("JOY3")
+ PORT_BIT( 0x080, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)
+ PORT_BIT( 0x37f, IP_ACTIVE_LOW, IPT_UNUSED)
+
+ PORT_START("JOY4")
+ PORT_BIT( 0x080, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)
+ PORT_BIT( 0x37f, IP_ACTIVE_LOW, IPT_UNUSED)
+
+ PORT_START("JOY5")
+ PORT_BIT( 0x080, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
+ PORT_BIT( 0x37f, IP_ACTIVE_LOW, IPT_UNUSED)
+
+ PORT_START("JOY6")
+ PORT_BIT( 0x080, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1)
+ PORT_BIT( 0x37f, IP_ACTIVE_LOW, IPT_UNUSED)
+
+ PORT_START("JOY7")
+ PORT_BIT( 0x001, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
+ PORT_BIT( 0x002, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
+ PORT_BIT( 0x004, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2)
+ PORT_BIT( 0x008, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)
+ PORT_BIT( 0x100, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
+ PORT_BIT( 0x2f0, IP_ACTIVE_LOW, IPT_UNUSED)
+
+ PORT_START("JOYSTICKS")
+ PORT_CONFNAME(0x03, 0x02, "Joysticks")
+ PORT_CONFSETTING(0x00, "None" )
+ PORT_CONFSETTING(0x01, "Left" )
+ PORT_CONFSETTING(0x02, "Right" )
+ PORT_CONFSETTING(0x03, "Left + Right" )
+
+ PORT_START("SWA")
+ PORT_DIPNAME(0xc00, 0x000, "Country Code")
+ PORT_DIPSETTING(0x000, "English" )
+ PORT_DIPSETTING(0x400, "French" )
+ PORT_DIPSETTING(0x800, "German" )
+ PORT_DIPSETTING(0xc00, "Swedish" )
PORT_START("keyboard_rom")
PORT_CONFNAME(0x03, 0x00, "Keyboard ROM")
@@ -202,6 +246,19 @@ static INPUT_PORTS_START( mtx512 )
PORT_CONFSETTING(0x02, "Finland")
INPUT_PORTS_END
+INPUT_CHANGED_MEMBER(mtx_state::trigger_reset)
+{
+ if (m_reset->read() & 0x03)
+ {
+ m_maincpu->set_input_line(INPUT_LINE_RESET, CLEAR_LINE);
+ }
+ else
+ {
+ bankswitch(0);
+ m_maincpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
+ }
+}
+
/***************************************************************************
DEVICE CONFIGURATION
***************************************************************************/
@@ -329,22 +386,27 @@ void mtx_state::mtx512(machine_config &config)
GENERIC_SOCKET(config, m_extrom, generic_plain_slot, "mtx_rom", "bin,rom");
m_extrom->set_device_load(FUNC(mtx_state::extrom_load));
- /* rs232 board with disk drive bus */
- MTX_EXP_SLOT(config, m_exp, mtx_expansion_devices, nullptr);
- m_exp->set_program_space(m_maincpu, AS_PROGRAM);
- m_exp->set_io_space(m_maincpu, AS_IO);
- m_exp->int_handler().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
- m_exp->nmi_handler().set_inputline(m_maincpu, INPUT_LINE_NMI);
- m_exp->busreq_handler().set_inputline(m_maincpu, Z80_INPUT_LINE_BUSRQ);
-
- /* cartridge slot */
- GENERIC_CARTSLOT(config, m_rompak, generic_plain_slot, "mtx_cart", "bin,rom");
- m_rompak->set_device_load(FUNC(mtx_state::rompak_load));
+ /* J10 external cartridge */
+ MTX_EXP_SLOT(config, m_exp_ext, mtx_ext_expansion_devices, nullptr);
+ m_exp_ext->set_program_space(m_maincpu, AS_PROGRAM);
+ m_exp_ext->set_io_space(m_maincpu, AS_IO);
+ m_exp_ext->int_handler().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
+ m_exp_ext->nmi_handler().set_inputline(m_maincpu, INPUT_LINE_NMI);
+ m_exp_ext->busreq_handler().set_inputline(m_maincpu, Z80_INPUT_LINE_BUSRQ);
+
+ /* J0 internal expansion - rs232 board with disk drive bus */
+ MTX_EXP_SLOT(config, m_exp_int, mtx_int_expansion_devices, nullptr);
+ m_exp_int->set_program_space(m_maincpu, AS_PROGRAM);
+ m_exp_int->set_io_space(m_maincpu, AS_IO);
+ m_exp_int->int_handler().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
+ m_exp_int->nmi_handler().set_inputline(m_maincpu, INPUT_LINE_NMI);
+ m_exp_int->busreq_handler().set_inputline(m_maincpu, Z80_INPUT_LINE_BUSRQ);
/* software lists */
SOFTWARE_LIST(config, "cass_list").set_original("mtx_cass");
SOFTWARE_LIST(config, "flop_list").set_original("mtx_flop");
SOFTWARE_LIST(config, "cart_list").set_original("mtx_cart");
+ SOFTWARE_LIST(config, "hdd_list").set_original("mtx_hdd");
SOFTWARE_LIST(config, "rom_list").set_original("mtx_rom");
}
diff --git a/src/mame/includes/mtx.h b/src/mame/includes/mtx.h
index 02d25a4c185..0f8789d96fa 100644
--- a/src/mame/includes/mtx.h
+++ b/src/mame/includes/mtx.h
@@ -36,10 +36,15 @@ public:
, m_z80dart(*this, "z80dart")
, m_cassette(*this, "cassette")
, m_centronics(*this, "centronics")
+ , m_keyboard(*this, "ROW%u", 0U)
+ , m_joystick(*this, "JOY%u", 0U)
+ , m_joysticks(*this, "JOYSTICKS")
+ , m_reset(*this, "RESET")
+ , m_country(*this, "SWA")
, m_ram(*this, RAM_TAG)
- , m_exp(*this, "exp")
+ , m_exp_int(*this, "exp_int")
+ , m_exp_ext(*this, "exp_ext")
, m_extrom(*this, "extrom")
- , m_rompak(*this, "rompak")
, m_rammap_bank1(*this, "rammap_bank1")
, m_rammap_bank2(*this, "rammap_bank2")
, m_rammap_bank3(*this, "rammap_bank3")
@@ -52,6 +57,8 @@ public:
void mtx500(machine_config &config);
void mtx512(machine_config &config);
+ DECLARE_INPUT_CHANGED_MEMBER(trigger_reset);
+
protected:
virtual void machine_start() override;
virtual void machine_reset() override;
@@ -64,10 +71,15 @@ private:
optional_device<z80dart_device> m_z80dart;
required_device<cassette_image_device> m_cassette;
required_device<centronics_device> m_centronics;
+ required_ioport_array<8> m_keyboard;
+ required_ioport_array<8> m_joystick;
+ required_ioport m_joysticks;
+ required_ioport m_reset;
+ required_ioport m_country;
required_device<ram_device> m_ram;
- required_device<mtx_exp_slot_device> m_exp;
+ required_device<mtx_exp_slot_device> m_exp_int;
+ required_device<mtx_exp_slot_device> m_exp_ext;
required_device<generic_slot_device> m_extrom;
- required_device<generic_slot_device> m_rompak;
memory_bank_creator m_rammap_bank1;
memory_bank_creator m_rammap_bank2;
memory_bank_creator m_rammap_bank3;
@@ -119,7 +131,6 @@ private:
DECLARE_WRITE_LINE_MEMBER(write_centronics_select);
void bankswitch(uint8_t data);
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(extrom_load);
- DECLARE_DEVICE_IMAGE_LOAD_MEMBER(rompak_load);
DECLARE_QUICKLOAD_LOAD_MEMBER(quickload_cb);
DECLARE_SNAPSHOT_LOAD_MEMBER(snapshot_cb);
diff --git a/src/mame/machine/mtx.cpp b/src/mame/machine/mtx.cpp
index 41cffc13e11..f4241b966f8 100644
--- a/src/mame/machine/mtx.cpp
+++ b/src/mame/machine/mtx.cpp
@@ -103,17 +103,17 @@ void mtx_state::bankswitch(uint8_t data)
program.install_readwrite_bank(0x8000, 0xbfff, m_rammap_bank3);
/* set ram bank, for invalid pages a nop-handler will be installed */
- if ((ram_page == 0 && m_ram->size() > 0xc000) || (ram_page > 0 && m_ram->size() > 0x10000 + ram_page * 0xc000))
+ if ((ram_page == 0 && m_ram->size() > 0xc000) || (ram_page > 0 && m_ram->size() > 0x4000 + ram_page * 0xc000))
m_rammap_bank1->set_entry(ram_page);
else
program.nop_readwrite(0x0000, 0x3fff);
- if ((ram_page == 0 && m_ram->size() > 0x8000) || (ram_page > 0 && m_ram->size() > 0x14000 + ram_page * 0xc000))
+ if ((ram_page == 0 && m_ram->size() > 0x8000) || (ram_page > 0 && m_ram->size() > 0x8000 + ram_page * 0xc000))
m_rammap_bank2->set_entry(ram_page);
else
program.nop_readwrite(0x4000, 0x7fff);
- if ((ram_page == 0 && m_ram->size() > 0x4000) || (ram_page > 0 && m_ram->size() > 0x18000 + ram_page * 0xc000))
+ if ((ram_page == 0 && m_ram->size() > 0x4000) || (ram_page > 0 && m_ram->size() > 0xc000 + ram_page * 0xc000))
m_rammap_bank3->set_entry(ram_page);
else
program.nop_readwrite(0x8000, 0xbfff);
@@ -132,11 +132,12 @@ void mtx_state::bankswitch(uint8_t data)
m_rommap_bank1->set_entry(rom_page);
/* set ram bank, for invalid pages a nop-handler will be installed */
- if ((ram_page == 0 && m_ram->size() > 0x8000) || (ram_page > 0 && m_ram->size() > 0x10000 + ram_page * 0x8000))
+ if (m_ram->size() > 0x8000 + ram_page * 0x8000)
m_rommap_bank2->set_entry(ram_page);
else
program.nop_readwrite(0x4000, 0x7fff);
- if ((ram_page == 0 && m_ram->size() > 0x4000) || (ram_page == 1 && m_ram->size() > 0xc000) || (ram_page > 1 && m_ram->size() > 0x14000 + ram_page * 0x8000))
+
+ if (m_ram->size() > 0x4000 + ram_page * 0x8000)
m_rommap_bank3->set_entry(ram_page);
else
program.nop_readwrite(0x8000, 0xbfff);
@@ -146,6 +147,9 @@ void mtx_state::bankswitch(uint8_t data)
void mtx_state::mtx_bankswitch_w(uint8_t data)
{
bankswitch(data);
+
+ m_exp_int->bankswitch(data);
+ m_exp_ext->bankswitch(data);
}
/*-------------------------------------------------
@@ -263,18 +267,19 @@ void mtx_state::mtx_sense_w(uint8_t data)
uint8_t mtx_state::mtx_key_lo_r()
{
- uint8_t data = 0xff;
+ uint16_t data = 0xffff;
- if (!(m_key_sense & 0x01)) data &= ioport("ROW0")->read();
- if (!(m_key_sense & 0x02)) data &= ioport("ROW1")->read();
- if (!(m_key_sense & 0x04)) data &= ioport("ROW2")->read();
- if (!(m_key_sense & 0x08)) data &= ioport("ROW3")->read();
- if (!(m_key_sense & 0x10)) data &= ioport("ROW4")->read();
- if (!(m_key_sense & 0x20)) data &= ioport("ROW5")->read();
- if (!(m_key_sense & 0x40)) data &= ioport("ROW6")->read();
- if (!(m_key_sense & 0x80)) data &= ioport("ROW7")->read();
+ for (int row = 0; row < 8; row++)
+ {
+ if (!(m_key_sense & (1 << row)))
+ {
+ data &= m_keyboard[row]->read();
+ if ((row == 7 && BIT(m_joysticks->read(), 0)) || (row != 7 && BIT(m_joysticks->read(), 1)))
+ data &= m_joystick[row]->read();
+ }
+ }
- return data;
+ return data & 0xff;
}
/*-------------------------------------------------
@@ -283,18 +288,19 @@ uint8_t mtx_state::mtx_key_lo_r()
uint8_t mtx_state::mtx_key_hi_r()
{
- uint8_t data = ioport("country_code")->read();
+ uint16_t data = 0xffff;
- if (!(m_key_sense & 0x01)) data &= ioport("ROW0")->read() >> 8;
- if (!(m_key_sense & 0x02)) data &= ioport("ROW1")->read() >> 8;
- if (!(m_key_sense & 0x04)) data &= ioport("ROW2")->read() >> 8;
- if (!(m_key_sense & 0x08)) data &= ioport("ROW3")->read() >> 8;
- if (!(m_key_sense & 0x10)) data &= ioport("ROW4")->read() >> 8;
- if (!(m_key_sense & 0x20)) data &= ioport("ROW5")->read() >> 8;
- if (!(m_key_sense & 0x40)) data &= ioport("ROW6")->read() >> 8;
- if (!(m_key_sense & 0x80)) data &= ioport("ROW7")->read() >> 8;
+ for (int row = 0; row < 8; row++)
+ {
+ if (!(m_key_sense & (1 << row)))
+ {
+ data &= m_keyboard[row]->read();
+ if ((row == 7 && BIT(m_joysticks->read(), 0)) || (row != 7 && BIT(m_joysticks->read(), 1)))
+ data &= m_joystick[row]->read();
+ }
+ }
- return data;
+ return (m_country->read() | data) >> 8;
}
/*-------------------------------------------------
@@ -408,26 +414,6 @@ DEVICE_IMAGE_LOAD_MEMBER( mtx_state::extrom_load )
}
/***************************************************************************
- ROMPAK ROMS
-***************************************************************************/
-
-DEVICE_IMAGE_LOAD_MEMBER( mtx_state::rompak_load )
-{
- uint32_t size = m_rompak->common_get_size("rom");
-
- if (size > 0x2000)
- {
- image.seterror(image_error::INVALIDIMAGE, "Unsupported cartridge size");
- return image_init_result::FAIL;
- }
-
- m_rompak->rom_alloc(size, GENERIC_ROM8_WIDTH, ENDIANNESS_LITTLE);
- m_rompak->common_load_rom(m_rompak->get_rom_base(), size, "rom");
-
- return image_init_result::PASS;
-}
-
-/***************************************************************************
SNAPSHOT
***************************************************************************/
@@ -573,8 +559,7 @@ void mtx_state::machine_start()
m_rommap_bank2->configure_entry(0, m_ram->pointer() + 0x8000);
m_rommap_bank2->configure_entries(1, 15, m_ram->pointer() + 0x10000, 0x8000);
m_rommap_bank3->configure_entry(0, m_ram->pointer() + 0x4000);
- m_rommap_bank3->configure_entry(1, m_ram->pointer() + 0xc000);
- m_rommap_bank3->configure_entries(2, 14, m_ram->pointer() + 0x14000, 0x8000);
+ m_rommap_bank3->configure_entries(1, 15, m_ram->pointer() + 0xc000, 0x8000);
/* setup banks for ram based memory map */
program.install_readwrite_bank(0x0000, 0x3fff, m_rammap_bank1);
@@ -600,9 +585,6 @@ void mtx_state::machine_reset()
/* keyboard ROMs */
if (ioport("keyboard_rom")->read())
m_rommap_bank1->configure_entry(7, memregion("keyboard_rom")->base() + (ioport("keyboard_rom")->read() - 1) * 0x2000);
- /* rompak ROMs */
- if (m_rompak->exists())
- m_rommap_bank1->configure_entry(7, m_rompak->get_rom_base());
/* bank switching */
bankswitch(0);