summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author hap <happppp@users.noreply.github.com>2026-05-20 02:37:54 +0200
committer hap <happppp@users.noreply.github.com>2026-05-20 02:38:09 +0200
commit14ebd84b4e1d821fceb9965c94945dccffc318f9 (patch)
treee1a98089b0997fccaadf3a183c78dd7c0af47bbb /src
parent54a21a47ba886b8f9c6aa7d10977cacee112a2ae (diff)
New working systems
------------------- Microtronic 2090 [hap, Jason T. Jacques, Decle, Michael A. Wessel]
Diffstat (limited to 'src')
-rw-r--r--src/mame/handheld/hh_tms1k.cpp342
-rw-r--r--src/mame/layout/mt2090.lay256
-rw-r--r--src/mame/mame.lst1
-rw-r--r--src/mame/novag/emerclp.cpp2
-rw-r--r--src/mame/taito/gunbustr_link.cpp2
-rw-r--r--src/mame/videogames/looping.cpp2
6 files changed, 601 insertions, 4 deletions
diff --git a/src/mame/handheld/hh_tms1k.cpp b/src/mame/handheld/hh_tms1k.cpp
index ba0c9b46b71..433650c44b1 100644
--- a/src/mame/handheld/hh_tms1k.cpp
+++ b/src/mame/handheld/hh_tms1k.cpp
@@ -210,7 +210,7 @@ on Joerg Woerner's datamath.org: http://www.datamath.org/IC_List.htm
@MP7334 TMS1400 1981, Coleco Total Control 4
@MP7351 TMS1400 1982, Parker Brothers Master Merlin
@MP7551 TMS1670 1980, Entex Color Football 4 (6009)
- *MP7574 TMS1600 1981, Busch Microtronic 2090 (actually, label is TMS1600NLL7574, no MP label)
+ @MP7574 TMS1600 1981, Busch Microtronic 2090 (actually, label is TMS1600NLL7574, no MP label)
@MPF553 TMS1670 1980, Gakken/Entex Jackpot: Gin Rummy & Black Jack (6008) (note: assume F to be a misprint)
MP7573 TMS1670 1981, Entex Select-A-Game cartridge: Football 4 -> entex/sag.cpp
*M30026 TMS2370 1983, Yaesu FT-757 Display Unit part
@@ -323,6 +323,7 @@ on Joerg Woerner's datamath.org: http://www.datamath.org/IC_List.htm
#include "mmarvin.lh"
#include "mmerlin.lh"
#include "monkeysee.lh"
+#include "mt2090.lh"
#include "palmf31.lh"
#include "palmmd8.lh"
#include "pbmastm.lh"
@@ -1502,6 +1503,343 @@ ROM_END
/*******************************************************************************
+ Busch Microtronic 2090
+ * PCB label: BUSCH 2090, F0601/4
+ * TMS1600 MP7574 (no decap)
+ * 1Kx4 SRAM (uPD2114LC), 6-digit 7seg display, 2+5 other LEDs
+ * 4-bit I/O port, for connecting wires to additional components, such as a
+ piezo, button, or a 1Hz timer
+
+ It's a German programmable educational computer, up to 256 program steps.
+
+ The I/O port connections to on-board components are crudely emulated via config
+ switches. If more custom I/O is needed, eg. via LUA script, set the input port
+ to Custom, it'll then read from IN.9. Outputs are sent to output tag "7.x" where
+ x = 0-3, no matter how the output port is configured.
+
+*******************************************************************************/
+
+class mt2090_state : public hh_tms1k_state
+{
+public:
+ mt2090_state(const machine_config &mconfig, device_type type, const char *tag) :
+ hh_tms1k_state(mconfig, type, tag),
+ m_1hz(*this, "1hz"),
+ m_beeper(*this, "beeper")
+ { }
+
+ void mt2090(machine_config &config);
+
+protected:
+ virtual void machine_start() override ATTR_COLD;
+
+private:
+ required_device<clock_device> m_1hz;
+ required_device<beep_device> m_beeper;
+
+ u8 m_output = 0;
+ u8 m_ram[0x400] = { };
+ u16 m_ram_address = 0;
+
+ void update_display();
+ void write_r(u32 data);
+ void write_o(u16 data);
+ u8 input_port();
+ u8 read_k();
+};
+
+void mt2090_state::machine_start()
+{
+ hh_tms1k_state::machine_start();
+
+ // register for savestates
+ save_item(NAME(m_output));
+ save_item(NAME(m_ram));
+ save_item(NAME(m_ram_address));
+}
+
+// handlers
+
+void mt2090_state::update_display()
+{
+ // standard 7segs
+ const u8 select = BIT(m_r, 12) ? (m_r & 0x3f) : 0;
+ m_display->matrix_partial(0, 6, select, m_o);
+
+ // direct leds
+ m_display->write_row(6, m_r >> 14 & 3);
+ m_display->write_row(7, m_output | (m_1hz->signal_r() ? 0x10 : 0));
+}
+
+void mt2090_state::write_r(u32 data)
+{
+ // R0-R5: input mux
+ // R6: enable input port
+ // R11: enable RAM inputs (TMS1600 K/L pin)
+ m_inp_mux = data;
+
+ // R7-R10: output port (only piezo is supported)
+ m_output = ~m_r >> 7 & 0xf;
+ m_beeper->set_state((m_output & m_inputs[7]->read()) ? 1 : 0);
+
+ // R0-R5: RAM address high
+ m_ram_address = (m_ram_address & 0xf) | (data << 4 & 0x3f0);
+
+ // R7-R10: RAM data (inverted)
+ // R13: RAM /W
+ if (BIT(data & ~m_r, 13))
+ m_ram[m_ram_address] = m_output;
+
+ // R0-R5: digit select
+ // R12: enable 7seg panel
+ // R14,R15: direct leds
+ m_r = data;
+ update_display();
+}
+
+void mt2090_state::write_o(u16 data)
+{
+ // O0-O3: RAM address low
+ m_ram_address = (m_ram_address & 0x3f0) | (data & 0xf);
+
+ // O0-O7: digit segments
+ m_o = data;
+ update_display();
+}
+
+u8 mt2090_state::input_port()
+{
+ u8 data = 0;
+
+ for (int i = 3; i >= 0; i--)
+ {
+ data <<= 1;
+ const u8 conf = m_inputs[8]->read() >> (i * 4) & 0xf;
+
+ switch (conf)
+ {
+ // GND
+ case 0:
+ default:
+ break;
+
+ // VCC
+ case 1:
+ data |= 1;
+ break;
+
+ // buttons
+ case 2: case 3:
+ data |= BIT(m_inputs[6]->read(), conf & 1);
+ break;
+
+ // output port
+ case 4: case 5: case 6: case 7:
+ data |= BIT(m_output, conf & 3);
+ break;
+
+ // 1Hz clock
+ case 8:
+ data |= m_1hz->signal_r();
+ break;
+
+ // custom
+ case 9:
+ data |= BIT(m_inputs[9]->read(), i);
+ break;
+ }
+ }
+
+ return data;
+}
+
+u8 mt2090_state::read_k()
+{
+ // read from RAM
+ if (BIT(m_inp_mux, 11))
+ return m_ram[m_ram_address];
+
+ // read input port
+ else if (BIT(m_inp_mux, 6))
+ return input_port();
+
+ // read buttons
+ else
+ return read_inputs(6);
+}
+
+// inputs
+
+static INPUT_PORTS_START( mt2090 )
+ PORT_START("IN.0") // R0
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("0")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_C) PORT_NAME("C")
+
+ PORT_START("IN.1") // R1
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_D) PORT_NAME("D")
+
+ PORT_START("IN.2") // R2
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_A) PORT_NAME("A")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_E) PORT_NAME("E")
+
+ PORT_START("IN.3") // R3
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_B) PORT_NAME("B")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_F) PORT_NAME("F")
+
+ PORT_START("IN.4") // R4
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_BACKSPACE) PORT_NAME("C/CE")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_R) PORT_NAME("RUN")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_K) PORT_NAME("BKP")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_N) PORT_NAME("NEXT")
+
+ PORT_START("IN.5") // R5
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_P) PORT_NAME("PGM")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_H) PORT_NAME("HALT")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_S) PORT_NAME("STEP")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_G) PORT_NAME("REG")
+
+ PORT_START("IN.6") // misc buttons
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Button G")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Button H")
+
+ PORT_START("IN.7") // output port...
+ PORT_CONFNAME( 0x01, 0x00, "Output 1" )
+ PORT_CONFSETTING( 0x00, DEF_STR( None ) )
+ PORT_CONFSETTING( 0x01, "Piezo" )
+
+ PORT_CONFNAME( 0x02, 0x00, "Output 2" )
+ PORT_CONFSETTING( 0x00, DEF_STR( None ) )
+ PORT_CONFSETTING( 0x02, "Piezo" )
+
+ PORT_CONFNAME( 0x04, 0x00, "Output 3" )
+ PORT_CONFSETTING( 0x00, DEF_STR( None ) )
+ PORT_CONFSETTING( 0x04, "Piezo" )
+
+ PORT_CONFNAME( 0x08, 0x00, "Output 4" )
+ PORT_CONFSETTING( 0x00, DEF_STR( None ) )
+ PORT_CONFSETTING( 0x08, "Piezo" )
+
+ PORT_START("IN.8") // input port...
+ PORT_CONFNAME( 0x000f, 0x0000, "Input 1" )
+ PORT_CONFSETTING( 0x0000, "GND" )
+ PORT_CONFSETTING( 0x0001, "VCC" )
+ PORT_CONFSETTING( 0x0002, "Button G" )
+ PORT_CONFSETTING( 0x0003, "Button H" )
+ PORT_CONFSETTING( 0x0004, "Output 1" )
+ PORT_CONFSETTING( 0x0005, "Output 2" )
+ PORT_CONFSETTING( 0x0006, "Output 3" )
+ PORT_CONFSETTING( 0x0007, "Output 4" )
+ PORT_CONFSETTING( 0x0008, "1Hz Clock" )
+ PORT_CONFSETTING( 0x0009, "Custom" )
+
+ PORT_CONFNAME( 0x00f0, 0x0000, "Input 2" )
+ PORT_CONFSETTING( 0x0000, "GND" )
+ PORT_CONFSETTING( 0x0010, "VCC" )
+ PORT_CONFSETTING( 0x0020, "Button G" )
+ PORT_CONFSETTING( 0x0030, "Button H" )
+ PORT_CONFSETTING( 0x0040, "Output 1" )
+ PORT_CONFSETTING( 0x0050, "Output 2" )
+ PORT_CONFSETTING( 0x0060, "Output 3" )
+ PORT_CONFSETTING( 0x0070, "Output 4" )
+ PORT_CONFSETTING( 0x0080, "1Hz Clock" )
+ PORT_CONFSETTING( 0x0090, "Custom" )
+
+ PORT_CONFNAME( 0x0f00, 0x0000, "Input 3" )
+ PORT_CONFSETTING( 0x0000, "GND" )
+ PORT_CONFSETTING( 0x0100, "VCC" )
+ PORT_CONFSETTING( 0x0200, "Button G" )
+ PORT_CONFSETTING( 0x0300, "Button H" )
+ PORT_CONFSETTING( 0x0400, "Output 1" )
+ PORT_CONFSETTING( 0x0500, "Output 2" )
+ PORT_CONFSETTING( 0x0600, "Output 3" )
+ PORT_CONFSETTING( 0x0700, "Output 4" )
+ PORT_CONFSETTING( 0x0800, "1Hz Clock" )
+ PORT_CONFSETTING( 0x0900, "Custom" )
+
+ PORT_CONFNAME( 0xf000, 0x0000, "Input 4" )
+ PORT_CONFSETTING( 0x0000, "GND" )
+ PORT_CONFSETTING( 0x1000, "VCC" )
+ PORT_CONFSETTING( 0x2000, "Button G" )
+ PORT_CONFSETTING( 0x3000, "Button H" )
+ PORT_CONFSETTING( 0x4000, "Output 1" )
+ PORT_CONFSETTING( 0x5000, "Output 2" )
+ PORT_CONFSETTING( 0x6000, "Output 3" )
+ PORT_CONFSETTING( 0x7000, "Output 4" )
+ PORT_CONFSETTING( 0x8000, "1Hz Clock" )
+ PORT_CONFSETTING( 0x9000, "Custom" )
+
+ PORT_START("IN.9") // custom input pins
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Custom Input 1")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Custom Input 2")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Custom Input 3")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Custom Input 4")
+
+ PORT_START("RESET")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_F1) PORT_NAME("Reset") PORT_CHANGED_MEMBER(DEVICE_SELF, FUNC(hh_tms1k_state::reset_button), 0)
+INPUT_PORTS_END
+
+// config
+
+// output PLA is not decapped, this was made by hand
+static const u16 mt2090_output_pla[0x20] =
+{
+ // literal 0-f for RAM address
+ 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf,
+
+ // 7segs (digit b has DP segment)
+ 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x67, 0x77, 0xfc, 0x39, 0x5e, 0x79, 0x71
+};
+
+void mt2090_state::mt2090(machine_config &config)
+{
+ // basic machine hardware
+ TMS1600(config, m_maincpu, 600000); // approximation - RC osc. R=22K, C=56pF
+ m_maincpu->set_output_pla(mt2090_output_pla);
+ m_maincpu->read_k().set(FUNC(mt2090_state::read_k));
+ m_maincpu->write_r().set(FUNC(mt2090_state::write_r));
+ m_maincpu->write_o().set(FUNC(mt2090_state::write_o));
+
+ CLOCK(config, m_1hz, 32.768_kHz_XTAL / 0x8000);
+ m_1hz->signal_handler().set([this] (int state) { update_display(); });
+
+ // video hardware
+ PWM_DISPLAY(config, m_display).set_size(8, 8);
+ m_display->set_segmask(0x3f, 0xff);
+ config.set_default_layout(layout_mt2090);
+
+ // sound hardware
+ SPEAKER(config, "mono").front_center();
+ BEEP(config, m_beeper, 2000); // guessed frequency
+ m_beeper->add_route(ALL_OUTPUTS, "mono", 0.25);
+}
+
+// roms
+
+ROM_START( mt2090 )
+ ROM_REGION( 0x1000, "maincpu", 0 )
+ ROM_LOAD( "tms1600nll7574", 0x0000, 0x1000, CRC(dcd56aa0) SHA1(57602b3ef1251b636036762c858a5724c8ab785c) )
+
+ ROM_REGION( 867, "maincpu:mpla", 0 )
+ ROM_LOAD( "tms1100_common2_micro.pla", 0, 867, BAD_DUMP CRC(7cc90264) SHA1(c6e1cf1ffb178061da9e31858514f7cd94e86990) ) // not verified
+ ROM_REGION( 557, "maincpu:opla", ROMREGION_ERASE00 )
+ ROM_LOAD( "tms1400_mt2090_output.pla", 0, 557, NO_DUMP )
+ROM_END
+
+
+
+
+
+/*******************************************************************************
+
Canon Palmtronic F-31, Canon Canola L813, Toshiba BC-8111B, Toshiba BC-8018B,
Triumph-Adler 81 SN, Silver-Reed 8J, more
* TMS1040 MCU label TMS1045NL (die label: 1040A, 1045)
@@ -17465,6 +17803,8 @@ SYST( 1980, racetime, 0, 0, racetime, racetime, racetime_state,
SYST( 1981, tc7atc, 0, 0, tc7atc, tc7atc, tc7atc_state, empty_init, "Bandai", "TC7: Air Traffic Control", MACHINE_SUPPORTS_SAVE )
SYST( 1982, uboat, 0, 0, uboat, uboat, uboat_state, empty_init, "Bandai", "U-Boat", MACHINE_SUPPORTS_SAVE )
+SYST( 1981, mt2090, 0, 0, mt2090, mt2090, mt2090_state, empty_init, "Busch", "Microtronic 2090", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_CONTROLS )
+
SYST( 1977, palmf31, 0, 0, palmf31, palmf31, palmf31_state, empty_init, "Canon", "Palmtronic F-31", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW )
SYST( 1977, palmmd8, 0, 0, palmmd8, palmmd8, palmmd8_state, empty_init, "Canon", "Palmtronic MD-8 (Multi 8)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW )
diff --git a/src/mame/layout/mt2090.lay b/src/mame/layout/mt2090.lay
new file mode 100644
index 00000000000..46e75500825
--- /dev/null
+++ b/src/mame/layout/mt2090.lay
@@ -0,0 +1,256 @@
+<?xml version="1.0"?>
+<!--
+license:CC0-1.0
+authors:hap
+-->
+<mamelayout version="2">
+
+<!-- define elements -->
+
+ <element name="blackb"><rect><color red="0" green="0" blue="0" /></rect></element>
+ <element name="blackd"><disk><color red="0" green="0" blue="0" /></disk></element>
+ <element name="gray"><rect><color red="0.66" green="0.66" blue="0.68" /></rect></element>
+
+ <element name="text_g"><text string="G"><color red="0.66" green="0.66" blue="0.68" /></text></element>
+ <element name="text_h"><text string="H"><color red="0.66" green="0.66" blue="0.68" /></text></element>
+ <element name="text_reset"><text string="Reset"><color red="0.66" green="0.66" blue="0.68" /></text></element>
+
+ <element name="butr" defstate="0">
+ <rect state="0"><color red="0.8" green="0.1" blue="0.1" /></rect>
+ <rect state="1"><color red="0.8" green="0.1" blue="0.1" alpha="0.75" /></rect>
+ </element>
+
+ <element name="butg" defstate="0">
+ <rect state="0"><color red="0.1" green="0.6" blue="0.2" /></rect>
+ <rect state="1"><color red="0.1" green="0.6" blue="0.2" alpha="0.7" /></rect>
+ </element>
+
+ <element name="led" defstate="0">
+ <disk state="1"><color red="1.0" green="0.1" blue="0.15" /></disk>
+ <disk state="0"><color red="0.125" green="0.012" blue="0.019" /></disk>
+ </element>
+
+
+<!-- i/o panel -->
+
+ <element name="text_1"><text string="1"><color red="0.01" green="0.01" blue="0.01" /></text></element>
+ <element name="text_2"><text string="2"><color red="0.01" green="0.01" blue="0.01" /></text></element>
+ <element name="text_3"><text string="3"><color red="0.01" green="0.01" blue="0.01" /></text></element>
+ <element name="text_4"><text string="4"><color red="0.01" green="0.01" blue="0.01" /></text></element>
+
+ <element name="text_l1"><text string="Ausgänge/Outputs"><color red="0.01" green="0.01" blue="0.01" /></text></element>
+ <element name="text_l2"><text string="Eingänge/Inputs"><color red="0.01" green="0.01" blue="0.01" /></text></element>
+ <element name="text_l3"><text string="Takt/Clock"><color red="0.01" green="0.01" blue="0.01" /></text></element>
+ <element name="text_l4"><text string="1 Hz"><color red="0.01" green="0.01" blue="0.01" /></text></element>
+
+ <element name="switch_output" defstate="0">
+ <disk><color red="0" green="0" blue="0" /></disk>
+ <text state="0x00" string="-"><color red="0.9" green="0.9" blue="0.2" /></text>
+ <text state="0x01" string="P"><color red="0.9" green="0.9" blue="0.2" /></text>
+ </element>
+
+ <element name="switch_input" defstate="0">
+ <disk><color red="0" green="0" blue="0" /></disk>
+ <text state="0x00" string="-"><color red="0.9" green="0.9" blue="0.2" /></text>
+ <text state="0x01" string="+"><color red="0.9" green="0.9" blue="0.2" /></text>
+ <text state="0x02" string="G"><color red="0.9" green="0.9" blue="0.2" /></text>
+ <text state="0x03" string="H"><color red="0.9" green="0.9" blue="0.2" /></text>
+ <text state="0x04" string="1"><color red="0.9" green="0.9" blue="0.2" /></text>
+ <text state="0x05" string="2"><color red="0.9" green="0.9" blue="0.2" /></text>
+ <text state="0x06" string="3"><color red="0.9" green="0.9" blue="0.2" /></text>
+ <text state="0x07" string="4"><color red="0.9" green="0.9" blue="0.2" /></text>
+ <text state="0x08" string="C"><color red="0.9" green="0.9" blue="0.2" /></text>
+ <text state="0x09" string="?"><color red="0.9" green="0.9" blue="0.2" /></text>
+ </element>
+
+ <group name="io">
+ <bounds x="0" y="1.4" width="35.3" height="4" />
+
+ <element ref="gray"><bounds x="0" y="1.4" width="35.3" height="4" /></element>
+
+ <!-- text labels -->
+ <repeat count="4">
+ <param name="x1" start="2" increment="3" />
+ <param name="x2" start="17" increment="3" />
+ <param name="i" start="1" increment="1" />
+
+ <element ref="text_~i~"><bounds xc="~x1~" y="2.8" width="2" height="1" /></element>
+ <element ref="text_~i~"><bounds xc="~x2~" y="2.8" width="2" height="1" /></element>
+ </repeat>
+
+ <element ref="text_l1"><bounds x="1.5" y="1.6" width="10" height="1" /></element>
+ <element ref="text_l2"><bounds x="16.5" y="1.6" width="10" height="1" /></element>
+ <element ref="text_l3"><bounds xc="32" y="1.6" width="6" height="1" /></element>
+ <element ref="text_l4"><bounds xc="32" y="2.8" width="5" height="1" /></element>
+
+ <!-- i/o plugs -->
+ <element ref="switch_output" inputtag="IN.7" inputmask="0x01" inputraw="yes"><bounds xc="2" y="4" width="1" height="1" /></element>
+ <element ref="switch_output" inputtag="IN.7" inputmask="0x02" inputraw="yes"><bounds xc="5" y="4" width="1" height="1" /></element>
+ <element ref="switch_output" inputtag="IN.7" inputmask="0x04" inputraw="yes"><bounds xc="8" y="4" width="1" height="1" /></element>
+ <element ref="switch_output" inputtag="IN.7" inputmask="0x08" inputraw="yes"><bounds xc="11" y="4" width="1" height="1" /></element>
+
+ <element ref="switch_input" inputtag="IN.8" inputmask="0x000f" inputraw="yes"><bounds xc="17" y="4" width="1" height="1" /></element>
+ <element ref="switch_input" inputtag="IN.8" inputmask="0x00f0" inputraw="yes"><bounds xc="20" y="4" width="1" height="1" /></element>
+ <element ref="switch_input" inputtag="IN.8" inputmask="0x0f00" inputraw="yes"><bounds xc="23" y="4" width="1" height="1" /></element>
+ <element ref="switch_input" inputtag="IN.8" inputmask="0xf000" inputraw="yes"><bounds xc="26" y="4" width="1" height="1" /></element>
+
+ <element ref="blackd"><bounds xc="32" y="4" width="1" height="1" /></element>
+
+ <!-- pcb leds -->
+ <element name="7.0" ref="led"><bounds xc="2" y="5.8" width="1" height="1" /></element>
+ <element name="7.1" ref="led"><bounds xc="5" y="5.8" width="1" height="1" /></element>
+ <element name="7.2" ref="led"><bounds xc="8" y="5.8" width="1" height="1" /></element>
+ <element name="7.3" ref="led"><bounds xc="11" y="5.8" width="1" height="1" /></element>
+
+ <element name="7.4" ref="led"><bounds xc="32" y="5.8" width="1" height="1" /></element>
+ </group>
+
+
+<!-- display panel -->
+
+ <element name="text_c"><text string="C"><color red="0.66" green="0.66" blue="0.68" /></text></element>
+ <element name="text_z"><text string="Z"><color red="0.66" green="0.66" blue="0.68" /></text></element>
+
+ <element name="digit" defstate="0">
+ <led7seg><color red="1.0" green="0.1" blue="0.15" /></led7seg>
+ </element>
+
+ <group name="display">
+ <bounds x="0" y="0" width="16" height="3" />
+
+ <element ref="text_c"><bounds x="1.25" y="0" width="1" height="1" /></element>
+ <element ref="text_z"><bounds x="1.25" y="2" width="1" height="1" /></element>
+
+ <element name="6.0" ref="led"><bounds x="2.5" y="0" width="1" height="1" /></element>
+ <element name="6.1" ref="led"><bounds x="2.5" y="2" width="1" height="1" /></element>
+
+ <element name="digit5" ref="digit"><bounds x="4" y="0" width="2" height="3" /></element>
+ <element name="digit4" ref="digit"><bounds x="6" y="0" width="2" height="3" /></element>
+ <element name="digit3" ref="digit"><bounds x="8" y="0" width="2" height="3" /></element>
+ <element name="digit2" ref="digit"><bounds x="10" y="0" width="2" height="3" /></element>
+ <element name="digit1" ref="digit"><bounds x="12" y="0" width="2" height="3" /></element>
+ <element name="digit0" ref="digit"><bounds x="14" y="0" width="2" height="3" /></element>
+ </group>
+
+
+<!-- button panel -->
+
+ <element name="text_b11"><text string="C"><color red="0.01" green="0.01" blue="0.01" /></text></element>
+ <element name="text_b12"><text string="D"><color red="0.01" green="0.01" blue="0.01" /></text></element>
+ <element name="text_b13"><text string="E"><color red="0.01" green="0.01" blue="0.01" /></text></element>
+ <element name="text_b14"><text string="F"><color red="0.01" green="0.01" blue="0.01" /></text></element>
+ <element name="text_b15"><text string="NEXT"><color red="0.01" green="0.01" blue="0.01" /></text></element>
+ <element name="text_b16"><text string="REG"><color red="0.01" green="0.01" blue="0.01" /></text></element>
+
+ <element name="text_b21"><text string="8"><color red="0.01" green="0.01" blue="0.01" /></text></element>
+ <element name="text_b22"><text string="9"><color red="0.01" green="0.01" blue="0.01" /></text></element>
+ <element name="text_b23"><text string="A"><color red="0.01" green="0.01" blue="0.01" /></text></element>
+ <element name="text_b24"><text string="B"><color red="0.01" green="0.01" blue="0.01" /></text></element>
+ <element name="text_b25"><text string="BKP"><color red="0.01" green="0.01" blue="0.01" /></text></element>
+ <element name="text_b26"><text string="STEP"><color red="0.01" green="0.01" blue="0.01" /></text></element>
+
+ <element name="text_b31"><text string="4"><color red="0.01" green="0.01" blue="0.01" /></text></element>
+ <element name="text_b32"><text string="5"><color red="0.01" green="0.01" blue="0.01" /></text></element>
+ <element name="text_b33"><text string="6"><color red="0.01" green="0.01" blue="0.01" /></text></element>
+ <element name="text_b34"><text string="7"><color red="0.01" green="0.01" blue="0.01" /></text></element>
+ <element name="text_b35"><text string="RUN"><color red="0.01" green="0.01" blue="0.01" /></text></element>
+ <element name="text_b36"><text string="HALT"><color red="0.01" green="0.01" blue="0.01" /></text></element>
+
+ <element name="text_b41"><text string="0"><color red="0.01" green="0.01" blue="0.01" /></text></element>
+ <element name="text_b42"><text string="1"><color red="0.01" green="0.01" blue="0.01" /></text></element>
+ <element name="text_b43"><text string="2"><color red="0.01" green="0.01" blue="0.01" /></text></element>
+ <element name="text_b44"><text string="3"><color red="0.01" green="0.01" blue="0.01" /></text></element>
+ <element name="text_b45"><text string="C/CE"><color red="0.01" green="0.01" blue="0.01" /></text></element>
+ <element name="text_b46"><text string="PGM"><color red="0.01" green="0.01" blue="0.01" /></text></element>
+
+ <element name="but" defstate="0">
+ <rect state="0"><color red="0.15" green="0.15" blue="0.15" /></rect>
+ <rect state="1"><color red="0.25" green="0.25" blue="0.25" /></rect>
+ </element>
+
+ <group name="buttons">
+ <bounds x="0" y="-1" width="19.3" height="12" />
+
+ <element ref="gray"><bounds x="0" y="-1" width="19.3" height="12" /></element>
+
+ <repeat count="4">
+ <param name="y" start="0.25" increment="2.5" />
+ <element ref="blackb"><bounds x="1" y="~y~" width="17.3" height="0.05" /><color alpha="0.3" /></element>
+ </repeat>
+
+ <element ref="gray"><bounds xc="12.5" y="-1" width="1" height="12" /></element>
+ <element ref="blackb"><bounds xc="12.5" y="-1" width="0.1" height="12" /></element>
+
+ <!-- button labels -->
+ <repeat count="4">
+ <param name="y" start="0.85" increment="2.5" />
+ <param name="i1" start="1" increment="1" />
+
+ <repeat count="4">
+ <param name="x" start="2" increment="3" />
+ <param name="i2" start="1" increment="1" />
+
+ <element ref="text_b~i1~~i2~"><bounds xc="~x~" yc="~y~" width="2.5" height="1" /></element>
+ </repeat>
+ </repeat>
+
+ <repeat count="4">
+ <param name="y" start="0.85" increment="2.5" />
+ <param name="i1" start="1" increment="1" />
+
+ <repeat count="2">
+ <param name="x" start="14.15" increment="3" />
+ <param name="i2" start="5" increment="1" />
+
+ <element ref="text_b~i1~~i2~"><bounds xc="~x~" yc="~y~" width="2.5" height="1" /></element>
+ </repeat>
+ </repeat>
+
+ <!-- actual buttons -->
+ <repeat count="4">
+ <param name="y" start="2" increment="2.5" />
+ <param name="mask" start="0x08" rshift="1" />
+
+ <repeat count="4">
+ <param name="x" start="2" increment="3" />
+ <param name="i" start="0" increment="1" />
+
+ <element ref="blackb"><bounds xc="~x~" yc="~y~" width="2" height="1" /></element>
+ <element ref="but" inputtag="IN.~i~" inputmask="~mask~"><bounds xc="~x~" yc="~y~" width="1.85" height="0.85" /></element>
+ </repeat>
+ </repeat>
+
+ <repeat count="4">
+ <param name="y" start="2" increment="2.5" />
+ <param name="mask" start="0x08" rshift="1" />
+
+ <repeat count="2">
+ <param name="x" start="14.15" increment="3" />
+ <param name="i" start="4" increment="1" />
+
+ <element ref="blackb"><bounds xc="~x~" yc="~y~" width="2.3" height="1" /></element>
+ <element ref="but" inputtag="IN.~i~" inputmask="~mask~"><bounds xc="~x~" yc="~y~" width="2.15" height="0.85" /></element>
+ </repeat>
+ </repeat>
+ </group>
+
+
+<!-- build screen -->
+
+ <view name="Internal Layout">
+ <bounds left="0" right="35.3" top="0" bottom="17.8" />
+
+ <group ref="io"><bounds x="0" y="0" width="35.3" height="4" /></group>
+ <group ref="display"><bounds x="-1" y="8.2" width="16" height="3" /></group>
+ <group ref="buttons"><bounds x="16" y="5.8" width="19.3" height="12" /></group>
+
+ <element ref="text_g"><bounds xc="4" y="13.6" width="2" height="1" /></element>
+ <element ref="text_h"><bounds xc="8" y="13.6" width="2" height="1" /></element>
+ <element ref="text_reset"><bounds xc="12" y="13.6" width="5" height="1" /></element>
+
+ <element ref="butr" inputtag="IN.6" inputmask="0x01"><bounds xc="4" y="14.8" width="2" height="2" /></element>
+ <element ref="butr" inputtag="IN.6" inputmask="0x02"><bounds xc="8" y="14.8" width="2" height="2" /></element>
+ <element ref="butg" inputtag="RESET" inputmask="0x01"><bounds xc="12" y="14.8" width="2" height="2" /></element>
+ </view>
+
+</mamelayout>
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index 0c21ffc4e15..0eba398f577 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -20340,6 +20340,7 @@ mmarvin
mmerlin
monkeysee
mrmusical
+mt2090
palmf31
palmmd8
pbmastm
diff --git a/src/mame/novag/emerclp.cpp b/src/mame/novag/emerclp.cpp
index 6e8247f00fc..1c1d3e69272 100644
--- a/src/mame/novag/emerclp.cpp
+++ b/src/mame/novag/emerclp.cpp
@@ -24,7 +24,7 @@ Hardware notes:
H8/325 C88 MCU is used in:
- Novag Emerald Classic Plus
-- Novag Amber (suspected)
+- Novag Amber
- Novag Turquoise (suspected)
- Excalibur Karpov 2294 (Excalibur brand Emerald Classic Plus)
diff --git a/src/mame/taito/gunbustr_link.cpp b/src/mame/taito/gunbustr_link.cpp
index f65d93acf26..19a36808163 100644
--- a/src/mame/taito/gunbustr_link.cpp
+++ b/src/mame/taito/gunbustr_link.cpp
@@ -9,7 +9,7 @@
To use this:
* Enable Link Simulation in MAME's Machine Configuration menu.
- * Access the game's Tet Mode Menu, and select Configuration.
+ * Access the game's Test Mode Menu, and select Configuration.
* Set Link Play to On, and set the ID Number to 0 for one instance
and 1 for the other instance (it helps to have separate NVRAM
directories for the two instances).
diff --git a/src/mame/videogames/looping.cpp b/src/mame/videogames/looping.cpp
index 0a3a7c59ad8..90c0cd2cb3c 100644
--- a/src/mame/videogames/looping.cpp
+++ b/src/mame/videogames/looping.cpp
@@ -23,7 +23,7 @@ down a bit due to instabilities (not as bad as MAME)? The European set
(looping) does not check protection at all, even though it's confirmed to
still have the COP420 chip.
-For loopinguc, the reset jump is at $32ba, for the other US sets at 3360.
+For loopinguc, the reset jump is at $32ba, for the other US sets at $3360.
Inserting a NOP would probably prevent the resets, but without guarantee
of not running into other issues.