summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author couriersud <couriersud@gmx.org>2020-09-11 23:36:50 +0200
committer couriersud <couriersud@gmx.org>2020-09-11 23:36:50 +0200
commit8f40d2c6b95c706273a137d3bddda69a93a96398 (patch)
treea067f23a14671b703601160a0855c6cd8e99a885 /src
parent0a87476e1a950dd6e51534b25f15f0b00d0cbb2b (diff)
parent8f48f2d062306db604c334228dbca7897c6f249e (diff)
Merge remote-tracking branch 'origin/master' into netlist-generated
Diffstat (limited to 'src')
-rw-r--r--src/devices/bus/bbc/tube/tube.cpp3
-rw-r--r--src/devices/bus/bbc/tube/tube_32016.cpp65
-rw-r--r--src/devices/bus/bbc/tube/tube_32016.h16
-rw-r--r--src/devices/cpu/m6502/st2205u.cpp523
-rw-r--r--src/devices/cpu/m6502/st2205u.h208
-rw-r--r--src/devices/cpu/m6502/st2xxx.cpp50
-rw-r--r--src/devices/cpu/ns32000/ns32000.cpp195
-rw-r--r--src/devices/cpu/ns32000/ns32000.h4
-rw-r--r--src/devices/machine/generalplus_gpl16250soc.cpp1
-rw-r--r--src/emu/render.cpp191
-rw-r--r--src/emu/render.h89
-rw-r--r--src/emu/rendlay.cpp111
-rw-r--r--src/lib/netlist/devices/nld_4006.cpp2
-rwxr-xr-xsrc/lib/netlist/plib/pmatrix2d.h2
-rw-r--r--src/lib/netlist/plib/pstream.h6
-rw-r--r--src/lib/netlist/plib/pstring.h4
-rw-r--r--src/mame/drivers/8080bw.cpp1
-rw-r--r--src/mame/drivers/att3b2.cpp40
-rw-r--r--src/mame/drivers/bbc.cpp8
-rw-r--r--src/mame/drivers/ddealer.cpp235
-rw-r--r--src/mame/drivers/electron.cpp3
-rw-r--r--src/mame/drivers/generalplus_gpl16250.cpp2
-rw-r--r--src/mame/drivers/generalplus_gpl16250_romram.cpp118
-rw-r--r--src/mame/drivers/generalplus_gpl_unknown.cpp12
-rw-r--r--src/mame/drivers/geniusiq.cpp4
-rw-r--r--src/mame/drivers/hp80.cpp210
-rw-r--r--src/mame/drivers/hunter2.cpp57
-rw-r--r--src/mame/drivers/husky.cpp15
-rw-r--r--src/mame/drivers/informer_207_376.cpp53
-rw-r--r--src/mame/drivers/informer_213ae.cpp45
-rw-r--r--src/mame/drivers/jupace.cpp28
-rw-r--r--src/mame/drivers/mstation.cpp4
-rw-r--r--src/mame/drivers/nascom1.cpp6
-rw-r--r--src/mame/drivers/nes_vt.cpp13
-rw-r--r--src/mame/drivers/novag_cexpert.cpp257
-rw-r--r--src/mame/drivers/novag_cforte.cpp7
-rw-r--r--src/mame/drivers/osbexec.cpp48
-rw-r--r--src/mame/drivers/pgm2.cpp1
-rw-r--r--src/mame/drivers/rfslots8085.cpp10
-rw-r--r--src/mame/drivers/spc1500.cpp10
-rw-r--r--src/mame/drivers/unk6502_st2xxx.cpp17
-rw-r--r--src/mame/drivers/y2.cpp4
-rw-r--r--src/mame/includes/generalplus_gpl16250_romram.h3
-rw-r--r--src/mame/layout/dct11em.lay8
-rw-r--r--src/mame/layout/de2.lay124
-rw-r--r--src/mame/layout/de2a3.lay137
-rw-r--r--src/mame/layout/gts80a_caveman.lay19
-rw-r--r--src/mame/layout/mchess.lay46
-rw-r--r--src/mame/layout/mephisto_academy.lay64
-rw-r--r--src/mame/layout/mephisto_alm16.lay23
-rw-r--r--src/mame/layout/mephisto_alm32.lay23
-rw-r--r--src/mame/layout/mephisto_berlin.lay13
-rw-r--r--src/mame/layout/mephisto_gen32.lay23
-rw-r--r--src/mame/layout/mephisto_milano.lay17
-rw-r--r--src/mame/layout/mephisto_modular_tm.lay7
-rw-r--r--src/mame/layout/novag_cexpert.lay513
-rw-r--r--src/mame/layout/novag_cforte.lay2
-rw-r--r--src/mame/layout/novag_constq.lay2
-rw-r--r--src/mame/layout/novag_diablo68k.lay36
-rw-r--r--src/mame/layout/novag_scorpio68k.lay36
-rw-r--r--src/mame/layout/novag_sexpert.lay36
-rw-r--r--src/mame/layout/novag_sforte.lay16
-rw-r--r--src/mame/layout/novag_supercon.lay14
-rw-r--r--src/mame/layout/saitek_intchess.lay10
-rw-r--r--src/mame/layout/saitek_mark6.lay6
-rw-r--r--src/mame/layout/saitek_renaissance.lay12
-rw-r--r--src/mame/layout/saitek_simultano.lay28
-rw-r--r--src/mame/layout/saitek_ssystem3.lay12
-rw-r--r--src/mame/layout/sda5708.lay2
-rw-r--r--src/mame/layout/splus.lay36
-rw-r--r--src/mame/layout/z80net.lay2
-rw-r--r--src/mame/layout/z80netb.lay2
-rw-r--r--src/mame/layout/z80netf.lay2
-rw-r--r--src/mame/machine/informer_207_376_kbd.cpp18
-rw-r--r--src/mame/mame.cpp2
-rw-r--r--src/mame/mame.lst9
-rw-r--r--src/mame/mess.cpp2
-rw-r--r--src/mame/mess.flt1
78 files changed, 2652 insertions, 1332 deletions
diff --git a/src/devices/bus/bbc/tube/tube.cpp b/src/devices/bus/bbc/tube/tube.cpp
index b632f7b5821..582bbdb72ef 100644
--- a/src/devices/bus/bbc/tube/tube.cpp
+++ b/src/devices/bus/bbc/tube/tube.cpp
@@ -113,6 +113,7 @@ void bbc_tube_devices(device_slot_interface &device)
device.option_add("z80", BBC_TUBE_Z80); /* Acorn ANC04 Z80 2nd processor */
device.option_add("z80w", BBC_TUBE_Z80W); /* Acorn ANC04 Z80 2nd processor (Winchester) */
device.option_add("32016", BBC_TUBE_32016); /* Acorn ANC05 32016 2nd processor */
+ device.option_add("32016l", BBC_TUBE_32016L); /* Acorn Large 32016 2nd processor */
device.option_add("arm", BBC_TUBE_ARM); /* Acorn ANC13 ARM Evaluation System */
device.option_add("80286", BBC_TUBE_80286); /* Acorn 80286 2nd Processor */
//device.option_add("a500", BBC_TUBE_A500); /* Acorn A500 2nd Processor */
@@ -142,6 +143,7 @@ void bbc_extube_devices(device_slot_interface &device)
device.option_add("z80", BBC_TUBE_Z80); /* Acorn ANC04 Z80 2nd processor */
device.option_add("z80w", BBC_TUBE_Z80W); /* Acorn ANC04 Z80 2nd processor (Winchester) */
device.option_add("32016", BBC_TUBE_32016); /* Acorn ANC05 32016 2nd processor */
+ device.option_add("32016l", BBC_TUBE_32016L); /* Acorn Large 32016 2nd processor */
device.option_add("arm", BBC_TUBE_ARM); /* Acorn ANC13 ARM Evaluation System */
device.option_add("80286", BBC_TUBE_80286); /* Acorn 80286 2nd Processor */
device.option_add("pcplus", BBC_TUBE_PCPLUS); /* Solidisk PC-Plus co-processor */
@@ -180,6 +182,7 @@ void electron_tube_devices(device_slot_interface &device)
device.option_add("6502", BBC_TUBE_6502); /* Acorn ANC01 6502 2nd processor */
device.option_add("z80", BBC_TUBE_Z80); /* Acorn ANC04 Z80 2nd processor */
device.option_add("32016", BBC_TUBE_32016); /* Acorn ANC05 32016 2nd processor */
+ device.option_add("32016l", BBC_TUBE_32016L); /* Acorn Large 32016 2nd processor */
device.option_add("arm", BBC_TUBE_ARM); /* Acorn ANC13 ARM Evaluation System */
device.option_add("65c102", BBC_TUBE_65C102); /* Acorn ADC06 65C102 co-processor */
device.option_add("80186", BBC_TUBE_80186); /* Acorn ADC08 80186 co-processor */
diff --git a/src/devices/bus/bbc/tube/tube_32016.cpp b/src/devices/bus/bbc/tube/tube_32016.cpp
index 164ab0ff089..6a54665937d 100644
--- a/src/devices/bus/bbc/tube/tube_32016.cpp
+++ b/src/devices/bus/bbc/tube/tube_32016.cpp
@@ -29,6 +29,7 @@
//**************************************************************************
DEFINE_DEVICE_TYPE(BBC_TUBE_32016, bbc_tube_32016_device, "bbc_tube_32016", "Acorn 32016 2nd processor")
+DEFINE_DEVICE_TYPE(BBC_TUBE_32016L, bbc_tube_32016l_device, "bbc_tube_32016l", "Acorn Large 32016 2nd processor")
//-------------------------------------------------
@@ -38,8 +39,9 @@ DEFINE_DEVICE_TYPE(BBC_TUBE_32016, bbc_tube_32016_device, "bbc_tube_32016", "Aco
void bbc_tube_32016_device::tube_32016_mem(address_map &map)
{
map(0x000000, 0xffffff).rw(FUNC(bbc_tube_32016_device::read), FUNC(bbc_tube_32016_device::write));
+ map(0xf00000, 0xf07fff).rom().region("rom", 0).mirror(0x0f8000);
map(0xf90000, 0xf90001).portr("CONFIG");
- map(0xfffff0, 0xffffff).rw("ula", FUNC(tube_device::parasite_r), FUNC(tube_device::parasite_w)).umask32(0x00ff);
+ map(0xfffff0, 0xffffff).rw("ula", FUNC(tube_device::parasite_r), FUNC(tube_device::parasite_w)).umask16(0x00ff);
}
//-------------------------------------------------
@@ -47,18 +49,27 @@ void bbc_tube_32016_device::tube_32016_mem(address_map &map)
//-------------------------------------------------
ROM_START(tube_32016)
- ROM_REGION(0x8000, "rom", 0)
- ROM_DEFAULT_BIOS("200")
+ ROM_REGION16_LE(0x8000, "rom", 0)
ROM_SYSTEM_BIOS(0, "200", "Pandora v2.00")
ROMX_LOAD("pan200lo.rom", 0x0000, 0x4000, CRC(b1980fd0) SHA1(8084f8896cd22953abefbd43c51e1a422b30e28d), ROM_SKIP(1) | ROM_BIOS(0)) // 0201-764-02 Pandora Lo
ROMX_LOAD("pan200hi.rom", 0x0001, 0x4000, CRC(cab98d6b) SHA1(dfad1f4180c50757a74fcfe3a0ee7d7b48eb1bee), ROM_SKIP(1) | ROM_BIOS(0)) // 0201-763-02 Pandora Hi
ROM_SYSTEM_BIOS(1, "100", "Pandora v1.00")
- ROMX_LOAD("pan100.rom", 0x0000, 0x8000, BAD_DUMP CRC(75333006) SHA1(996cd120103039390c9b979b16c327bb95da72e4), ROM_BIOS(1)) // 0201-763-01, 0201-764-01 Pandora
+ ROMX_LOAD("pan100lo.rom", 0x0000, 0x2000, CRC(101e8aca) SHA1(4998e64afe98b2f227df6daa7ae0af512ce8907a), ROM_SKIP(1) | ROM_BIOS(1)) // 0201-764-01 Pandora Lo
+ ROM_RELOAD( 0x4000, 0x2000)
+ ROMX_LOAD("pan100hi.rom", 0x0001, 0x2000, CRC(139de9ed) SHA1(1871e65c9ebd3eac835b0317b0ad8272ff207c4b), ROM_SKIP(1) | ROM_BIOS(1)) // 0201-763-01 Pandora Hi
+ ROM_RELOAD( 0x4001, 0x2000)
ROM_SYSTEM_BIOS(2, "061", "Pandora v0.61")
ROMX_LOAD("pan061lo.rom", 0x0000, 0x4000, CRC(6f801b35) SHA1(ce31f7c10603f3d15a06a8e32bde40df0639e446), ROM_SKIP(1) | ROM_BIOS(2))
ROMX_LOAD("pan061hi.rom", 0x0001, 0x4000, CRC(c00b1ab0) SHA1(e6a705232278c518340ddc69ea51af91965fa332), ROM_SKIP(1) | ROM_BIOS(2))
ROM_END
+ROM_START(tube_32016l)
+ ROM_REGION16_LE(0x8000, "rom", 0)
+ ROM_SYSTEM_BIOS(0, "200", "Pandora v2.00")
+ ROMX_LOAD("pan200lo.rom", 0x0000, 0x4000, CRC(b1980fd0) SHA1(8084f8896cd22953abefbd43c51e1a422b30e28d), ROM_SKIP(1) | ROM_BIOS(0)) // 0201-764-02 Pandora Lo
+ ROMX_LOAD("pan200hi.rom", 0x0001, 0x4000, CRC(cab98d6b) SHA1(dfad1f4180c50757a74fcfe3a0ee7d7b48eb1bee), ROM_SKIP(1) | ROM_BIOS(0)) // 0201-763-02 Pandora Hi
+ROM_END
+
//-------------------------------------------------
// INPUT_PORTS( tube_32016 )
//-------------------------------------------------
@@ -112,12 +123,23 @@ void bbc_tube_32016_device::device_add_mconfig(machine_config &config)
m_ula->pirq_handler().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
/* internal ram */
- RAM(config, m_ram).set_default_size("1M").set_default_value(0);
+ RAM(config, m_ram).set_default_size("1M").set_extra_options("256K");
/* software lists */
SOFTWARE_LIST(config, "flop_ls_32016").set_original("bbc_flop_32016");
}
+
+void bbc_tube_32016l_device::device_add_mconfig(machine_config &config)
+{
+ bbc_tube_32016_device::device_add_mconfig(config);
+
+ m_maincpu->set_clock(16_MHz_XTAL / 2);
+
+ /* internal ram */
+ m_ram->set_default_size("4M");
+}
+
//-------------------------------------------------
// rom_region - device-specific ROM region
//-------------------------------------------------
@@ -127,6 +149,11 @@ const tiny_rom_entry *bbc_tube_32016_device::device_rom_region() const
return ROM_NAME( tube_32016 );
}
+const tiny_rom_entry *bbc_tube_32016l_device::device_rom_region() const
+{
+ return ROM_NAME( tube_32016l );
+}
+
//-------------------------------------------------
// input_ports - device-specific input ports
//-------------------------------------------------
@@ -144,8 +171,8 @@ ioport_constructor bbc_tube_32016_device::device_input_ports() const
// bbc_tube_32016_device - constructor
//-------------------------------------------------
-bbc_tube_32016_device::bbc_tube_32016_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : device_t(mconfig, BBC_TUBE_32016, tag, owner, clock)
+bbc_tube_32016_device::bbc_tube_32016_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_bbc_tube_interface(mconfig, *this)
, m_maincpu(*this, "maincpu")
, m_ula(*this, "ula")
@@ -155,12 +182,23 @@ bbc_tube_32016_device::bbc_tube_32016_device(const machine_config &mconfig, cons
{
}
+bbc_tube_32016_device::bbc_tube_32016_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : bbc_tube_32016_device(mconfig, BBC_TUBE_32016, tag, owner, clock)
+{
+}
+
+bbc_tube_32016l_device::bbc_tube_32016l_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : bbc_tube_32016_device(mconfig, BBC_TUBE_32016L, tag, owner, clock)
+{
+}
+
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void bbc_tube_32016_device::device_start()
{
+ save_item(NAME(m_rom_enabled));
}
//-------------------------------------------------
@@ -190,12 +228,12 @@ void bbc_tube_32016_device::host_w(offs_t offset, uint8_t data)
uint8_t bbc_tube_32016_device::read(offs_t offset)
{
- uint16_t data = 0xffff;
+ uint16_t data;
if (m_rom_enabled)
- data = m_rom->base()[offset & 0x3fff];
- else if (offset < m_ram->size())
- data = m_ram->pointer()[offset];
+ data = m_rom->base()[offset & 0x7fff];
+ else
+ data = m_ram->pointer()[offset & m_ram->mask()];
return data;
}
@@ -203,8 +241,7 @@ uint8_t bbc_tube_32016_device::read(offs_t offset)
void bbc_tube_32016_device::write(offs_t offset, uint8_t data)
{
/* clear ROM select on first write */
- if (!machine().side_effects_disabled()) m_rom_enabled = false;
+ m_rom_enabled = false;
- if (offset < m_ram->size())
- m_ram->pointer()[offset] = data;
+ m_ram->pointer()[offset & m_ram->mask()] = data;
}
diff --git a/src/devices/bus/bbc/tube/tube_32016.h b/src/devices/bus/bbc/tube/tube_32016.h
index d77a132c64f..7e7753ae5f6 100644
--- a/src/devices/bus/bbc/tube/tube_32016.h
+++ b/src/devices/bus/bbc/tube/tube_32016.h
@@ -36,6 +36,8 @@ public:
bbc_tube_32016_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
+ bbc_tube_32016_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
+
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
@@ -48,7 +50,6 @@ protected:
virtual uint8_t host_r(offs_t offset) override;
virtual void host_w(offs_t offset, uint8_t data) override;
-private:
required_device<ns32016_device> m_maincpu;
required_device<tube_device> m_ula;
required_device<ram_device> m_ram;
@@ -63,9 +64,22 @@ private:
};
+class bbc_tube_32016l_device : public bbc_tube_32016_device
+{
+public:
+ bbc_tube_32016l_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ // optional information overrides
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+};
+
+
// device type definition
DECLARE_DEVICE_TYPE(BBC_TUBE_32016, bbc_tube_32016_device)
+DECLARE_DEVICE_TYPE(BBC_TUBE_32016L, bbc_tube_32016l_device)
#endif /* MAME_BUS_BBC_TUBE_32016_H */
diff --git a/src/devices/cpu/m6502/st2205u.cpp b/src/devices/cpu/m6502/st2205u.cpp
index 45c5f1f9a02..a9417ec2cce 100644
--- a/src/devices/cpu/m6502/st2205u.cpp
+++ b/src/devices/cpu/m6502/st2205u.cpp
@@ -14,7 +14,7 @@
* LCD controller (640x400 B/W, 400x320 4-gray, 160xRGBx120 16-gray)
* Serial peripheral interface
* UART (built-in BRG; RS-232 and IrDA modes)
- * USB 1.1 (separate control and bulk transfer endpoint buffers)
+ * USB 2.0 (separate control and bulk transfer endpoint buffers)
* Direct memory access (2 channels, optional XOR/OR/AND logic)
* NAND/AND Flash memory interface (includes ECC generator)
* Power down modes (WAI-0, WAI-1, STP)
@@ -28,18 +28,22 @@
other ST2XXX MCU is that PRR[0] and IRR[0] are *not* inverted
relative to A14.
+ ST2302U lacks the LCDC, UART and NAND interface and includes only
+ 8K mask ROM, 2K SRAM and 20 GPIO pins, but appears to be broadly
+ similar in other aspects. (The differences, if any, between
+ ST2302U and ST2312U are unclear, but ST2301U and ST2331U omit the
+ PSG.) It also supports a SYSCLK of up to 24 MHz.
+
**********************************************************************/
#include "emu.h"
#include "st2205u.h"
DEFINE_DEVICE_TYPE(ST2205U, st2205u_device, "st2205u", "Sitronix ST2205U Integrated Microcontroller")
+DEFINE_DEVICE_TYPE(ST2302U, st2302u_device, "st2302u", "Sitronix ST2302U Integrated Microcontroller")
-st2205u_device::st2205u_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
- : st2xxx_device(mconfig, ST2205U, tag, owner, clock,
- address_map_constructor(FUNC(st2205u_device::int_map), this),
- 26, // logical; only 23 address lines are brought out
- true)
+st2205u_base_device::st2205u_base_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, address_map_constructor internal_map, int data_bits, bool has_banked_ram)
+ : st2xxx_device(mconfig, type, tag, owner, clock, internal_map, data_bits, has_banked_ram)
, m_btc(0)
, m_tc_12bit{0}
, m_count_12bit{0}
@@ -54,9 +58,6 @@ st2205u_device::st2205u_device(const machine_config &mconfig, const char *tag, d
, m_psg_on(0)
, m_psg_vol{0}
, m_psg_volm{0}
- , m_lbuf(0)
- , m_lpal_index(0)
- , m_gray_levels{0}
, m_usbcon(0)
, m_usbien(0)
, m_dptr{0}
@@ -66,23 +67,30 @@ st2205u_device::st2205u_device(const machine_config &mconfig, const char *tag, d
, m_dmod{0}
, m_rctr(0)
, m_lvctr(0)
- , m_alt_map(false)
{
}
-void st2205u_device::device_start()
+st2205u_device::st2205u_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : st2205u_base_device(mconfig, ST2205U, tag, owner, clock,
+ address_map_constructor(FUNC(st2205u_device::int_map), this),
+ 26, // logical; only 23 address lines are brought out
+ true)
+ , m_lbuf(0)
+ , m_lpal_index(0)
+ , m_gray_levels{0}
{
- std::unique_ptr<mi_st2205u> intf = std::make_unique<mi_st2205u>();
- space(AS_DATA).specific(intf->data);
- space(AS_DATA).cache(intf->dcache);
- intf->irr_enable = false;
- intf->irr = 0;
- intf->prr = 0;
- intf->drr = 0;
- intf->brr = 0;
- intf->irq_service = false;
- intf->ram = make_unique_clear<u8[]>(0x8000);
+}
+st2302u_device::st2302u_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : st2205u_base_device(mconfig, ST2302U, tag, owner, clock,
+ address_map_constructor(FUNC(st2302u_device::int_map), this),
+ 26, // ???
+ false)
+{
+}
+
+void st2205u_base_device::base_init(std::unique_ptr<mi_st2xxx> &&intf)
+{
m_timer_12bit[0] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(st2205u_device::t0_interrupt), this));
m_timer_12bit[1] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(st2205u_device::t1_interrupt), this));
m_timer_12bit[2] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(st2205u_device::t2_interrupt), this));
@@ -104,9 +112,6 @@ void st2205u_device::device_start()
save_item(NAME(m_psg_on));
save_item(NAME(m_psg_vol));
save_item(NAME(m_psg_volm));
- save_item(NAME(m_lbuf));
- save_item(NAME(m_lpal_index));
- save_item(NAME(m_gray_levels));
save_item(NAME(m_usbcon));
save_item(NAME(m_usbien));
save_item(NAME(m_dptr));
@@ -116,12 +121,32 @@ void st2205u_device::device_start()
save_item(NAME(m_dmod));
save_item(NAME(m_rctr));
save_item(NAME(m_lvctr));
- save_item(NAME(intf->brr));
- save_pointer(NAME(intf->ram), 0x8000);
mintf = std::move(intf);
save_common_registers();
init();
+}
+
+void st2205u_device::device_start()
+{
+ std::unique_ptr<mi_st2205u> intf = std::make_unique<mi_st2205u>();
+ space(AS_DATA).specific(intf->data);
+ space(AS_DATA).cache(intf->dcache);
+ intf->irr_enable = false;
+ intf->irr = 0;
+ intf->prr = 0;
+ intf->drr = 0;
+ intf->brr = 0;
+ intf->irq_service = false;
+ intf->ram = make_unique_clear<u8[]>(0x8000);
+
+ save_item(NAME(m_lbuf));
+ save_item(NAME(m_lpal_index));
+ save_item(NAME(m_gray_levels));
+ save_item(NAME(intf->brr));
+ save_pointer(NAME(intf->ram), 0x8000);
+
+ base_init(std::move(intf));
state_add(ST_IRR, "IRR", downcast<mi_st2205u &>(*mintf).irr).mask(0x8fff);
state_add(ST_PRR, "PRR", downcast<mi_st2205u &>(*mintf).prr).mask(0x8fff);
@@ -196,11 +221,73 @@ void st2205u_device::device_start()
state_add(ST_LVCTR, "LVCTR", m_lvctr).mask(0x0f);
}
-void st2205u_device::device_reset()
+void st2302u_device::device_start()
{
- st2xxx_device::device_reset();
+ std::unique_ptr<mi_st2302u> intf = std::make_unique<mi_st2302u>();
+ space(AS_DATA).specific(intf->data);
+ space(AS_DATA).cache(intf->dcache);
+ intf->irr_enable = false;
+ intf->irr = 0;
+ intf->prr = 0;
+ intf->drr = 0;
+ intf->irq_service = false;
- downcast<mi_st2205u &>(*mintf).brr = 0;
+ base_init(std::move(intf));
+
+ state_add(ST_IRR, "IRR", downcast<mi_st2302u &>(*mintf).irr).mask(0x0fff);
+ state_add(ST_PRR, "PRR", downcast<mi_st2302u &>(*mintf).prr).mask(0x0fff);
+ state_add(ST_DRR, "DRR", downcast<mi_st2302u &>(*mintf).drr).mask(0x07ff);
+ state_add(ST_IREQ, "IREQ", m_ireq, [this](u16 data) { m_ireq = data; update_irq_state(); }).mask(st2xxx_ireq_mask());
+ state_add(ST_IENA, "IENA", m_iena, [this](u16 data) { m_iena = data; update_irq_state(); }).mask(st2xxx_ireq_mask());
+ for (int i = 0; i < 6; i++)
+ {
+ state_add(ST_PAOUT + i, string_format("P%cOUT", 'A' + i).c_str(), m_pdata[i]);
+ state_add(ST_PCA + i, string_format("PC%c", 'A' + i).c_str(), m_pctrl[i]);
+ if (i == 2 || i == 4)
+ state_add(ST_PSA + i, string_format("PS%c", 'A' + i).c_str(), m_psel[i]);
+ if (i == 2 || i == 3)
+ state_add(ST_PFC + i - 2, string_format("PF%c", 'A' + i).c_str(), m_pfun[i - 2]).mask(i == 2 ? 0xfe : 0xff);
+ }
+ state_add(ST_PMCR, "PMCR", m_pmcr);
+ state_add(ST_MISC, "MISC", m_misc).mask(st2xxx_misc_mask());
+ state_add(ST_SYS, "SYS", m_sys, [this](u8 data) { sys_w(data); }).mask(0xfe);
+ state_add(ST_PRS, "PRS", m_prs, [this](u8 data) { prs_w(data); }).mask(0x40);
+ state_add(ST_BTEN, "BTEN", m_bten, [this](u8 data) { bten_w(data); });
+ state_add(ST_BTSR, "BTREQ", m_btsr);
+ state_add(ST_BTC, "BTC", m_btc);
+ for (int i = 0; i < 4; i++)
+ state_add(ST_T0C + i, string_format("T%dC", i).c_str(), m_tc_12bit[i]);
+ state_add(ST_T4C, "T4C", m_t4c);
+ state_add(ST_TIEN, "TIEN", m_tien);
+ for (int i = 0; i < 4; i++)
+ state_add(ST_FIFOS0 + i, string_format("FIFOS%d", i).c_str(), m_fifo_filled[i]).mask(0x1f);
+ state_add(ST_PSGC, "PSGC", m_psgc);
+ state_add(ST_PSGM, "PSGM", m_psgm);
+ for (int i = 0; i < 4; i++)
+ state_add(ST_VOL0 + i, string_format("VOL%d", i).c_str(), m_psg_vol[i]).mask(0xbf);
+ state_add(ST_VOLM0, "VOLM0", m_psg_volm[0]).mask(0x3f);
+ state_add(ST_VOLM1, "VOLM1", m_psg_volm[1]).mask(0x7f);
+ state_add(ST_SCTR, "SCTR", m_sctr);
+ state_add(ST_SCKR, "SCKR", m_sckr).mask(0x7f);
+ state_add(ST_SSR, "SSR", m_ssr).mask(0x77);
+ state_add(ST_SMOD, "SMOD", m_smod).mask(0x0f);
+ for (int i = 0; i < 2; i++)
+ {
+ state_add(ST_DMS0 + i, string_format("DMS%d", i).c_str(), m_dptr[i * 2]).mask(0x7fff);
+ state_add(ST_DMD0 + i, string_format("DMD%d", i).c_str(), m_dptr[i * 2 + 1]).mask(0x7fff);
+ state_add(ST_DBKS0 + i, string_format("DBKS%d", i).c_str(), m_dbkr[i * 2]).mask(0x87ff);
+ state_add(ST_DBKD0 + i, string_format("DBKD%d", i).c_str(), m_dbkr[i * 2 + 1]).mask(0x87ff);
+ state_add(ST_DCNT0 + i, string_format("DCNT%d", i).c_str(), m_dcnt[i]).mask(0x7fff);
+ state_add(ST_DMOD0 + i, string_format("DMOD%d", i).c_str(), m_dmod[i]).mask(0x3f);
+ }
+ state_add(ST_DCTR, "DCTR", m_dctr).mask(0x03);
+ state_add(ST_RCTR, "RCTR", m_rctr).mask(0xef);
+ state_add(ST_LVCTR, "LVCTR", m_lvctr).mask(0x0f);
+}
+
+void st2205u_base_device::device_reset()
+{
+ st2xxx_device::device_reset();
m_btc = 0;
@@ -219,10 +306,6 @@ void st2205u_device::device_reset()
std::fill(std::begin(m_psg_vol), std::end(m_psg_vol), 0);
std::fill(std::begin(m_psg_volm), std::end(m_psg_volm), 0);
- m_lbuf = 0;
- m_lpal_index = 0;
- std::fill(std::begin(m_gray_levels), std::end(m_gray_levels), 0);
-
m_usbcon = 0;
m_usbien = 0x20;
@@ -237,6 +320,17 @@ void st2205u_device::device_reset()
m_lvctr = 0;
}
+void st2205u_device::device_reset()
+{
+ st2205u_base_device::device_reset();
+
+ downcast<mi_st2205u &>(*mintf).brr = 0;
+
+ m_lbuf = 0;
+ m_lpal_index = 0;
+ std::fill(std::begin(m_gray_levels), std::end(m_gray_levels), 0);
+}
+
const char *st2205u_device::st2xxx_irq_name(int i) const
{
switch (i)
@@ -260,6 +354,26 @@ const char *st2205u_device::st2xxx_irq_name(int i) const
}
}
+const char *st2302u_device::st2xxx_irq_name(int i) const
+{
+ switch (i)
+ {
+ case 0: return "P?0/1/2/3 edge";
+ case 1: return "Timer 0";
+ case 2: return "Timer 1";
+ case 3: return "Timer 2";
+ case 4: return "Timer 3";
+ case 5: return "PA transition";
+ case 6: return "Base timer";
+ case 8: return "SPI TX empty";
+ case 9: return "SPI RX ready";
+ case 12: return "USB";
+ case 14: return "PCM";
+ case 15: return "RTC";
+ default: return "Reserved";
+ }
+}
+
u8 st2205u_device::mi_st2205u::pread(u16 adr)
{
u16 bank = irq_service && irr_enable ? irr : prr;
@@ -335,6 +449,39 @@ void st2205u_device::mi_st2205u::bwrite(u16 adr, u8 val)
data.write_byte(u32(brr) << 13 | (adr & 0x1fff), val);
}
+u8 st2302u_device::mi_st2302u::pread(u16 adr)
+{
+ u16 bank = irq_service && irr_enable ? irr : prr;
+ return data.read_byte(u32(bank) << 14 | (adr & 0x3fff));
+}
+
+u8 st2302u_device::mi_st2302u::preadc(u16 adr)
+{
+ u16 bank = irq_service && irr_enable ? irr : prr;
+ return dcache.read_byte(u32(bank) << 14 | (adr & 0x3fff));
+}
+
+void st2302u_device::mi_st2302u::pwrite(u16 adr, u8 val)
+{
+ u16 bank = irq_service && irr_enable ? irr : prr;
+ data.write_byte(u32(bank) << 14 | (adr & 0x3fff), val);
+}
+
+u8 st2302u_device::mi_st2302u::dread(u16 adr)
+{
+ return data.read_byte(u32(drr) << 15 | (adr & 0x7fff));
+}
+
+u8 st2302u_device::mi_st2302u::dreadc(u16 adr)
+{
+ return dcache.read_byte(u32(drr) << 15 | (adr & 0x7fff));
+}
+
+void st2302u_device::mi_st2302u::dwrite(u16 adr, u8 val)
+{
+ data.write_byte(u32(drr) << 15 | (adr & 0x7fff), val);
+}
+
u8 st2205u_device::mi_st2205u::read(u16 adr)
{
return program.read_byte(adr);
@@ -360,6 +507,31 @@ void st2205u_device::mi_st2205u::write(u16 adr, u8 val)
program.write_byte(adr, val);
}
+u8 st2302u_device::mi_st2302u::read(u16 adr)
+{
+ return program.read_byte(adr);
+}
+
+u8 st2302u_device::mi_st2302u::read_sync(u16 adr)
+{
+ return BIT(adr, 15) ? dreadc(adr) : BIT(adr, 14) ? preadc(adr) : cprogram.read_byte(adr);
+}
+
+u8 st2302u_device::mi_st2302u::read_arg(u16 adr)
+{
+ return BIT(adr, 15) ? dreadc(adr) : BIT(adr, 14) ? preadc(adr) : cprogram.read_byte(adr);
+}
+
+u8 st2302u_device::mi_st2302u::read_vector(u16 adr)
+{
+ return pread(adr);
+}
+
+void st2302u_device::mi_st2302u::write(u16 adr, u8 val)
+{
+ program.write_byte(adr, val);
+}
+
u8 st2205u_device::brrl_r()
{
return downcast<mi_st2205u &>(*mintf).brr & 0xff;
@@ -382,7 +554,7 @@ void st2205u_device::brrh_w(u8 data)
brr = (data & 0x9f) << 8 | (brr & 0x00ff);
}
-unsigned st2205u_device::st2xxx_bt_divider(int n) const
+unsigned st2205u_base_device::st2xxx_bt_divider(int n) const
{
// 2 Hz
if (n == 0)
@@ -401,17 +573,17 @@ unsigned st2205u_device::st2xxx_bt_divider(int n) const
return 4 * (m_btc != 0 ? m_btc : 256);
}
-u8 st2205u_device::btc_r()
+u8 st2205u_base_device::btc_r()
{
return m_btc;
}
-void st2205u_device::btc_w(u8 data)
+void st2205u_base_device::btc_w(u8 data)
{
m_btc = data;
}
-u8 st2205u_device::psg_r(offs_t offset)
+u8 st2205u_base_device::psg_r(offs_t offset)
{
u8 index = m_fifo_pos[offset >> 1];
if (BIT(offset, 0))
@@ -423,7 +595,7 @@ u8 st2205u_device::psg_r(offs_t offset)
return m_dac_fifo[offset >> 1][index] & 0xff;
}
-void st2205u_device::psg_w(offs_t offset, u8 data)
+void st2205u_base_device::psg_w(offs_t offset, u8 data)
{
if (m_fifo_filled[offset >> 1] < 16)
{
@@ -432,55 +604,55 @@ void st2205u_device::psg_w(offs_t offset, u8 data)
}
}
-u8 st2205u_device::psgc_r()
+u8 st2205u_base_device::psgc_r()
{
return m_psgc;
}
-void st2205u_device::psgc_w(u8 data)
+void st2205u_base_device::psgc_w(u8 data)
{
m_psgc = data;
m_psg_on &= (data & 0xf0) >> 4;
}
-u8 st2205u_device::psgm_r()
+u8 st2205u_base_device::psgm_r()
{
return m_psgm;
}
-void st2205u_device::psgm_w(u8 data)
+void st2205u_base_device::psgm_w(u8 data)
{
m_psgm = data;
}
-u8 st2205u_device::vol_r(offs_t offset)
+u8 st2205u_base_device::vol_r(offs_t offset)
{
return m_psg_vol[offset] | 0x40;
}
-void st2205u_device::vol_w(offs_t offset, u8 data)
+void st2205u_base_device::vol_w(offs_t offset, u8 data)
{
m_psg_vol[offset] = data & 0xbf;
}
-u8 st2205u_device::volm_r(offs_t offset)
+u8 st2205u_base_device::volm_r(offs_t offset)
{
return m_psg_volm[offset] | (offset == 1 ? 0x80 : 0xc0);
}
-void st2205u_device::volm_w(offs_t offset, u8 data)
+void st2205u_base_device::volm_w(offs_t offset, u8 data)
{
m_psg_volm[offset] = data & (offset == 1 ? 0x7f : 0x3f);
}
-void st2205u_device::st2xxx_tclk_start()
+void st2205u_base_device::st2xxx_tclk_start()
{
for (int t = 0; t < 4; t++)
if (BIT(m_tien, t) && (m_tc_12bit[t] & 0x7000) < 0x6000)
timer_start_from_tclk(t);
}
-void st2205u_device::st2xxx_tclk_stop()
+void st2205u_base_device::st2xxx_tclk_stop()
{
for (int t = 0; t < 4; t++)
{
@@ -492,7 +664,7 @@ void st2205u_device::st2xxx_tclk_stop()
}
}
-u32 st2205u_device::tclk_pres_div(u8 mode) const
+u32 st2205u_base_device::tclk_pres_div(u8 mode) const
{
assert(mode < 6);
if (mode < 3)
@@ -505,27 +677,27 @@ u32 st2205u_device::tclk_pres_div(u8 mode) const
return 4096;
}
-TIMER_CALLBACK_MEMBER(st2205u_device::t0_interrupt)
+TIMER_CALLBACK_MEMBER(st2205u_base_device::t0_interrupt)
{
timer_12bit_process(0);
}
-TIMER_CALLBACK_MEMBER(st2205u_device::t1_interrupt)
+TIMER_CALLBACK_MEMBER(st2205u_base_device::t1_interrupt)
{
timer_12bit_process(1);
}
-TIMER_CALLBACK_MEMBER(st2205u_device::t2_interrupt)
+TIMER_CALLBACK_MEMBER(st2205u_base_device::t2_interrupt)
{
timer_12bit_process(2);
}
-TIMER_CALLBACK_MEMBER(st2205u_device::t3_interrupt)
+TIMER_CALLBACK_MEMBER(st2205u_base_device::t3_interrupt)
{
timer_12bit_process(3);
}
-void st2205u_device::timer_12bit_process(int t)
+void st2205u_base_device::timer_12bit_process(int t)
{
if (BIT(m_psgc, t + 4))
{
@@ -566,7 +738,7 @@ void st2205u_device::timer_12bit_process(int t)
// TODO: BGRCK & INTX sources
}
-u16 st2205u_device::timer_12bit_count(int t) const
+u16 st2205u_base_device::timer_12bit_count(int t) const
{
u16 count = m_count_12bit[t];
if (BIT(m_tien, t))
@@ -581,18 +753,18 @@ u16 st2205u_device::timer_12bit_count(int t) const
return count & 0x0fff;
}
-void st2205u_device::timer_start_from_tclk(int t)
+void st2205u_base_device::timer_start_from_tclk(int t)
{
u32 div = tclk_pres_div((m_tc_12bit[t] & 0x7000) >> 12);
m_timer_12bit[t]->adjust(cycles_to_attotime((0x0fff - m_count_12bit[t]) * div + div - (pres_count() & (div - 1))));
}
-void st2205u_device::timer_start_from_oscx(int t)
+void st2205u_base_device::timer_start_from_oscx(int t)
{
m_timer_12bit[t]->adjust(attotime::from_ticks(0x1000 - m_count_12bit[t], 32768));
}
-u8 st2205u_device::tc_12bit_r(offs_t offset)
+u8 st2205u_base_device::tc_12bit_r(offs_t offset)
{
if (BIT(offset, 0))
return (timer_12bit_count(offset >> 1) | (m_tc_12bit[offset >> 1] & 0xf000)) >> 8;
@@ -600,7 +772,7 @@ u8 st2205u_device::tc_12bit_r(offs_t offset)
return timer_12bit_count(offset >> 1) & 0x00ff;
}
-void st2205u_device::tc_12bit_w(offs_t offset, u8 data)
+void st2205u_base_device::tc_12bit_w(offs_t offset, u8 data)
{
if (BIT(offset, 0))
m_tc_12bit[offset >> 1] = (m_tc_12bit[offset >> 1] & 0x00ff) | u16(data) << 8;
@@ -608,22 +780,22 @@ void st2205u_device::tc_12bit_w(offs_t offset, u8 data)
m_tc_12bit[offset >> 1] = (m_tc_12bit[offset >> 1] & 0xff00) | data;
}
-u8 st2205u_device::t4c_r()
+u8 st2205u_base_device::t4c_r()
{
return m_t4c;
}
-void st2205u_device::t4c_w(u8 data)
+void st2205u_base_device::t4c_w(u8 data)
{
m_t4c = data;
}
-u8 st2205u_device::tien_r()
+u8 st2205u_base_device::tien_r()
{
return m_tien;
}
-void st2205u_device::tien_w(u8 data)
+void st2205u_base_device::tien_w(u8 data)
{
for (int t = 0; t < 4; t++)
{
@@ -677,123 +849,123 @@ void st2205u_device::lpal_w(u8 data)
m_gray_levels[index] = data & 0x1f;
}
-u8 st2205u_device::usbcon_r()
+u8 st2205u_base_device::usbcon_r()
{
return m_usbcon | 0x03;
}
-void st2205u_device::usbcon_w(u8 data)
+void st2205u_base_device::usbcon_w(u8 data)
{
m_usbcon = data & 0xfc;
}
-u8 st2205u_device::usbien_r()
+u8 st2205u_base_device::usbien_r()
{
return m_usbien | 0x40;
}
-void st2205u_device::usbien_w(u8 data)
+void st2205u_base_device::usbien_w(u8 data)
{
m_usbien = data & 0xbf;
}
-u8 st2205u_device::dptrl_r()
+u8 st2205u_base_device::dptrl_r()
{
return m_dptr[m_dctr] & 0x00ff;
}
-void st2205u_device::dptrl_w(u8 data)
+void st2205u_base_device::dptrl_w(u8 data)
{
m_dptr[m_dctr] = (m_dptr[m_dctr] & 0x7f00) | data;
}
-u8 st2205u_device::dptrh_r()
+u8 st2205u_base_device::dptrh_r()
{
return (m_dptr[m_dctr] >> 8) | 0x80;
}
-void st2205u_device::dptrh_w(u8 data)
+void st2205u_base_device::dptrh_w(u8 data)
{
m_dptr[m_dctr] = u16(data & 0x7f) << 8 | (m_dptr[m_dctr] & 0x00ff);
}
-u8 st2205u_device::dbkrl_r()
+u8 st2205u_base_device::dbkrl_r()
{
return m_dbkr[m_dctr] & 0x00ff;
}
-void st2205u_device::dbkrl_w(u8 data)
+void st2205u_base_device::dbkrl_w(u8 data)
{
m_dbkr[m_dctr] = (m_dbkr[m_dctr] & 0x8700) | data;
}
-u8 st2205u_device::dbkrh_r()
+u8 st2205u_base_device::dbkrh_r()
{
return (m_dbkr[m_dctr] >> 8) | 0x78;
}
-void st2205u_device::dbkrh_w(u8 data)
+void st2205u_base_device::dbkrh_w(u8 data)
{
m_dbkr[m_dctr] = u16(data & 0x87) << 8 | (m_dbkr[m_dctr] & 0x00ff);
}
-u8 st2205u_device::dcntl_r()
+u8 st2205u_base_device::dcntl_r()
{
return m_dcnt[m_dctr >> 1] & 0x00ff;
}
-void st2205u_device::dcntl_w(u8 data)
+void st2205u_base_device::dcntl_w(u8 data)
{
m_dcnt[m_dctr >> 1] = (m_dcnt[m_dctr >> 1] & 0x7f00) | data;
}
-u8 st2205u_device::dcnth_r()
+u8 st2205u_base_device::dcnth_r()
{
return (m_dcnt[m_dctr >> 1] >> 8) | 0x80;
}
-void st2205u_device::dcnth_w(u8 data)
+void st2205u_base_device::dcnth_w(u8 data)
{
m_dcnt[m_dctr >> 1] = (m_dcnt[m_dctr >> 1] & 0x7f00) | data;
// TODO: start DMA here
}
-u8 st2205u_device::dctr_r()
+u8 st2205u_base_device::dctr_r()
{
return m_dctr | 0xfc;
}
-void st2205u_device::dctr_w(u8 data)
+void st2205u_base_device::dctr_w(u8 data)
{
m_dctr = data & 0x03;
}
-u8 st2205u_device::dmod_r()
+u8 st2205u_base_device::dmod_r()
{
return m_dmod[m_dctr >> 1] | 0xc0;
}
-void st2205u_device::dmod_w(u8 data)
+void st2205u_base_device::dmod_w(u8 data)
{
m_dmod[m_dctr >> 1] = data & 0x3f;
}
-u8 st2205u_device::rctr_r()
+u8 st2205u_base_device::rctr_r()
{
return (m_rctr & 0xe0) | 0x10;
}
-void st2205u_device::rctr_w(u8 data)
+void st2205u_base_device::rctr_w(u8 data)
{
m_rctr = data & 0xef;
}
-u8 st2205u_device::lvctr_r()
+u8 st2205u_base_device::lvctr_r()
{
return m_lvctr | 0x01;
}
-void st2205u_device::lvctr_w(u8 data)
+void st2205u_base_device::lvctr_w(u8 data)
{
m_lvctr = data & 0x0f;
}
@@ -838,91 +1010,97 @@ void st2205u_device::bmem_w(offs_t offset, u8 data)
downcast<mi_st2205u &>(*mintf).bwrite(offset, data);
}
+u8 st2302u_device::pmem_r(offs_t offset)
+{
+ return downcast<mi_st2302u &>(*mintf).pread(offset);
+}
+
+void st2302u_device::pmem_w(offs_t offset, u8 data)
+{
+ downcast<mi_st2302u &>(*mintf).pwrite(offset, data);
+}
+
+u8 st2302u_device::dmem_r(offs_t offset)
+{
+ return downcast<mi_st2302u &>(*mintf).dread(offset);
+}
+
+void st2302u_device::dmem_w(offs_t offset, u8 data)
+{
+ downcast<mi_st2302u &>(*mintf).dwrite(offset, data);
+}
+
+void st2205u_base_device::base_map(address_map &map)
+{
+ map(0x0020, 0x0027).rw(FUNC(st2205u_base_device::tc_12bit_r), FUNC(st2205u_base_device::tc_12bit_w));
+ map(0x0028, 0x0028).rw(FUNC(st2205u_base_device::tien_r), FUNC(st2205u_base_device::tien_w));
+ map(0x0029, 0x0029).rw(FUNC(st2205u_base_device::prs_r), FUNC(st2205u_base_device::prs_w));
+ map(0x002a, 0x002a).rw(FUNC(st2205u_base_device::bten_r), FUNC(st2205u_base_device::bten_w));
+ map(0x002b, 0x002b).rw(FUNC(st2205u_base_device::btsr_r), FUNC(st2205u_base_device::btclr_w));
+ map(0x002c, 0x002c).rw(FUNC(st2205u_base_device::btc_r), FUNC(st2205u_base_device::btc_w));
+ map(0x002d, 0x002d).rw(FUNC(st2205u_base_device::t4c_r), FUNC(st2205u_base_device::t4c_w));
+ map(0x002e, 0x002e).rw(FUNC(st2205u_base_device::rctr_r), FUNC(st2205u_base_device::rctr_w));
+ map(0x0030, 0x0030).rw(FUNC(st2205u_base_device::irrl_r), FUNC(st2205u_base_device::irrl_w));
+ map(0x0031, 0x0031).rw(FUNC(st2205u_base_device::irrh_r), FUNC(st2205u_base_device::irrh_w));
+ map(0x0032, 0x0032).rw(FUNC(st2205u_base_device::prrl_r), FUNC(st2205u_base_device::prrl_w));
+ map(0x0033, 0x0033).rw(FUNC(st2205u_base_device::prrh_r), FUNC(st2205u_base_device::prrh_w));
+ map(0x0034, 0x0034).rw(FUNC(st2205u_base_device::drrl_r), FUNC(st2205u_base_device::drrl_w));
+ map(0x0035, 0x0035).rw(FUNC(st2205u_base_device::drrh_r), FUNC(st2205u_base_device::drrh_w));
+ map(0x0038, 0x0038).rw(FUNC(st2205u_base_device::misc_r), FUNC(st2205u_base_device::misc_w));
+ map(0x0039, 0x0039).rw(FUNC(st2205u_base_device::sys_r), FUNC(st2205u_base_device::sys_w));
+ map(0x003c, 0x003c).rw(FUNC(st2205u_base_device::ireql_r), FUNC(st2205u_base_device::ireql_w));
+ map(0x003d, 0x003d).rw(FUNC(st2205u_base_device::ireqh_r), FUNC(st2205u_base_device::ireqh_w));
+ map(0x003e, 0x003e).rw(FUNC(st2205u_base_device::ienal_r), FUNC(st2205u_base_device::ienal_w));
+ map(0x003f, 0x003f).rw(FUNC(st2205u_base_device::ienah_r), FUNC(st2205u_base_device::ienah_w));
+ map(0x0058, 0x0058).rw(FUNC(st2205u_base_device::dptrl_r), FUNC(st2205u_base_device::dptrl_w));
+ map(0x0059, 0x0059).rw(FUNC(st2205u_base_device::dptrh_r), FUNC(st2205u_base_device::dptrh_w));
+ map(0x005a, 0x005a).rw(FUNC(st2205u_base_device::dbkrl_r), FUNC(st2205u_base_device::dbkrl_w));
+ map(0x005b, 0x005b).rw(FUNC(st2205u_base_device::dbkrh_r), FUNC(st2205u_base_device::dbkrh_w));
+ map(0x005c, 0x005c).rw(FUNC(st2205u_base_device::dcntl_r), FUNC(st2205u_base_device::dcntl_w));
+ map(0x005d, 0x005d).rw(FUNC(st2205u_base_device::dcnth_r), FUNC(st2205u_base_device::dcnth_w));
+ map(0x005e, 0x005e).rw(FUNC(st2205u_base_device::dctr_r), FUNC(st2205u_base_device::dctr_w));
+ map(0x005f, 0x005f).rw(FUNC(st2205u_base_device::dmod_r), FUNC(st2205u_base_device::dmod_w));
+ map(0x0070, 0x0070).rw(FUNC(st2205u_base_device::usbcon_r), FUNC(st2205u_base_device::usbcon_w));
+ map(0x0071, 0x0071).rw(FUNC(st2205u_base_device::usbien_r), FUNC(st2205u_base_device::usbien_w));
+}
+
void st2205u_device::int_map(address_map &map)
{
+ base_map(map);
map(0x0000, 0x0005).rw(FUNC(st2205u_device::pdata_r), FUNC(st2205u_device::pdata_w));
map(0x0006, 0x0006).rw(FUNC(st2205u_device::psc_r), FUNC(st2205u_device::psc_w));
map(0x0007, 0x0007).rw(FUNC(st2205u_device::pse_r), FUNC(st2205u_device::pse_w));
map(0x0008, 0x000d).rw(FUNC(st2205u_device::pctrl_r), FUNC(st2205u_device::pctrl_w));
map(0x000e, 0x000e).rw(FUNC(st2205u_device::pfc_r), FUNC(st2205u_device::pfc_w));
map(0x000f, 0x000f).rw(FUNC(st2205u_device::pfd_r), FUNC(st2205u_device::pfd_w));
- if (m_alt_map)
- {
- map(0x0012, 0x0012).rw(FUNC(st2205u_device::sctr_r), FUNC(st2205u_device::sctr_w));
- map(0x0013, 0x0013).rw(FUNC(st2205u_device::sckr_r), FUNC(st2205u_device::sckr_w));
- map(0x0014, 0x0014).rw(FUNC(st2205u_device::ssr_r), FUNC(st2205u_device::ssr_w));
- map(0x0015, 0x0015).rw(FUNC(st2205u_device::smod_r), FUNC(st2205u_device::smod_w));
- }
- else
- {
- map(0x0010, 0x0017).rw(FUNC(st2205u_device::psg_r), FUNC(st2205u_device::psg_w));
- map(0x0018, 0x001b).rw(FUNC(st2205u_device::vol_r), FUNC(st2205u_device::vol_w));
- map(0x001c, 0x001d).rw(FUNC(st2205u_device::volm_r), FUNC(st2205u_device::volm_w));
- map(0x001e, 0x001e).rw(FUNC(st2205u_device::psgc_r), FUNC(st2205u_device::psgc_w));
- map(0x001f, 0x001f).rw(FUNC(st2205u_device::psgm_r), FUNC(st2205u_device::psgm_w));
- }
- map(0x0020, 0x0027).rw(FUNC(st2205u_device::tc_12bit_r), FUNC(st2205u_device::tc_12bit_w));
- map(0x0028, 0x0028).rw(FUNC(st2205u_device::tien_r), FUNC(st2205u_device::tien_w));
- map(0x0029, 0x0029).rw(FUNC(st2205u_device::prs_r), FUNC(st2205u_device::prs_w));
- map(0x002a, 0x002a).rw(FUNC(st2205u_device::bten_r), FUNC(st2205u_device::bten_w));
- map(0x002b, 0x002b).rw(FUNC(st2205u_device::btsr_r), FUNC(st2205u_device::btclr_w));
- map(0x002c, 0x002c).rw(FUNC(st2205u_device::btc_r), FUNC(st2205u_device::btc_w));
- map(0x002d, 0x002d).rw(FUNC(st2205u_device::t4c_r), FUNC(st2205u_device::t4c_w));
- map(0x002e, 0x002e).rw(FUNC(st2205u_device::rctr_r), FUNC(st2205u_device::rctr_w));
- map(0x0030, 0x0030).rw(FUNC(st2205u_device::irrl_r), FUNC(st2205u_device::irrl_w));
- map(0x0031, 0x0031).rw(FUNC(st2205u_device::irrh_r), FUNC(st2205u_device::irrh_w));
- map(0x0032, 0x0032).rw(FUNC(st2205u_device::prrl_r), FUNC(st2205u_device::prrl_w));
- map(0x0033, 0x0033).rw(FUNC(st2205u_device::prrh_r), FUNC(st2205u_device::prrh_w));
- map(0x0034, 0x0034).rw(FUNC(st2205u_device::drrl_r), FUNC(st2205u_device::drrl_w));
- map(0x0035, 0x0035).rw(FUNC(st2205u_device::drrh_r), FUNC(st2205u_device::drrh_w));
+ map(0x0010, 0x0017).rw(FUNC(st2205u_device::psg_r), FUNC(st2205u_device::psg_w));
+ map(0x0018, 0x001b).rw(FUNC(st2205u_device::vol_r), FUNC(st2205u_device::vol_w));
+ map(0x001c, 0x001d).rw(FUNC(st2205u_device::volm_r), FUNC(st2205u_device::volm_w));
+ map(0x001e, 0x001e).rw(FUNC(st2205u_device::psgc_r), FUNC(st2205u_device::psgc_w));
+ map(0x001f, 0x001f).rw(FUNC(st2205u_device::psgm_r), FUNC(st2205u_device::psgm_w));
map(0x0036, 0x0036).rw(FUNC(st2205u_device::brrl_r), FUNC(st2205u_device::brrl_w));
map(0x0037, 0x0037).rw(FUNC(st2205u_device::brrh_r), FUNC(st2205u_device::brrh_w));
- map(0x0038, 0x0038).rw(FUNC(st2205u_device::misc_r), FUNC(st2205u_device::misc_w));
- map(0x0039, 0x0039).rw(FUNC(st2205u_device::sys_r), FUNC(st2205u_device::sys_w));
map(0x003a, 0x003a).rw(FUNC(st2205u_device::pmcr_r), FUNC(st2205u_device::pmcr_w));
- map(0x003c, 0x003c).rw(FUNC(st2205u_device::ireql_r), FUNC(st2205u_device::ireql_w));
- map(0x003d, 0x003d).rw(FUNC(st2205u_device::ireqh_r), FUNC(st2205u_device::ireqh_w));
- map(0x003e, 0x003e).rw(FUNC(st2205u_device::ienal_r), FUNC(st2205u_device::ienal_w));
- map(0x003f, 0x003f).rw(FUNC(st2205u_device::ienah_r), FUNC(st2205u_device::ienah_w));
- if (m_alt_map)
- {
- map(0x0040, 0x0047).rw(FUNC(st2205u_device::psg_r), FUNC(st2205u_device::psg_w));
- map(0x0048, 0x004b).rw(FUNC(st2205u_device::vol_r), FUNC(st2205u_device::vol_w));
- map(0x004c, 0x004d).rw(FUNC(st2205u_device::volm_r), FUNC(st2205u_device::volm_w));
- map(0x004e, 0x004e).rw(FUNC(st2205u_device::psgc_r), FUNC(st2205u_device::psgc_w));
- map(0x004f, 0x004f).rw(FUNC(st2205u_device::psgm_r), FUNC(st2205u_device::psgm_w));
- }
- else
- {
- map(0x0040, 0x0040).w(FUNC(st2205u_device::lssal_w));
- map(0x0041, 0x0041).w(FUNC(st2205u_device::lssah_w));
- map(0x0042, 0x0042).w(FUNC(st2205u_device::lvpw_w));
- map(0x0043, 0x0043).rw(FUNC(st2205u_device::lxmax_r), FUNC(st2205u_device::lxmax_w));
- map(0x0044, 0x0044).rw(FUNC(st2205u_device::lymax_r), FUNC(st2205u_device::lymax_w));
- map(0x0045, 0x0045).rw(FUNC(st2205u_device::lpan_r), FUNC(st2205u_device::lpan_w));
- map(0x0046, 0x0046).rw(FUNC(st2205u_device::lbuf_r), FUNC(st2205u_device::lbuf_w));
- map(0x0047, 0x0047).rw(FUNC(st2205u_device::lctr_r), FUNC(st2205u_device::lctr_w));
- map(0x0048, 0x0048).w(FUNC(st2205u_device::lckr_w));
- map(0x0049, 0x0049).w(FUNC(st2205u_device::lfra_w));
- map(0x004a, 0x004a).rw(FUNC(st2205u_device::lac_r), FUNC(st2205u_device::lac_w));
- map(0x004b, 0x004b).rw(FUNC(st2205u_device::lpwm_r), FUNC(st2205u_device::lpwm_w));
- map(0x004c, 0x004c).w(FUNC(st2205u_device::lpal_w));
- map(0x004e, 0x004e).rw(FUNC(st2205u_device::pl_r), FUNC(st2205u_device::pl_w));
- map(0x004f, 0x004f).rw(FUNC(st2205u_device::pcl_r), FUNC(st2205u_device::pcl_w));
- map(0x0052, 0x0052).rw(FUNC(st2205u_device::sctr_r), FUNC(st2205u_device::sctr_w));
- map(0x0053, 0x0053).rw(FUNC(st2205u_device::sckr_r), FUNC(st2205u_device::sckr_w));
- map(0x0054, 0x0054).rw(FUNC(st2205u_device::ssr_r), FUNC(st2205u_device::ssr_w));
- map(0x0055, 0x0055).rw(FUNC(st2205u_device::smod_r), FUNC(st2205u_device::smod_w));
- }
+ map(0x0040, 0x0040).w(FUNC(st2205u_device::lssal_w));
+ map(0x0041, 0x0041).w(FUNC(st2205u_device::lssah_w));
+ map(0x0042, 0x0042).w(FUNC(st2205u_device::lvpw_w));
+ map(0x0043, 0x0043).rw(FUNC(st2205u_device::lxmax_r), FUNC(st2205u_device::lxmax_w));
+ map(0x0044, 0x0044).rw(FUNC(st2205u_device::lymax_r), FUNC(st2205u_device::lymax_w));
+ map(0x0045, 0x0045).rw(FUNC(st2205u_device::lpan_r), FUNC(st2205u_device::lpan_w));
+ map(0x0046, 0x0046).rw(FUNC(st2205u_device::lbuf_r), FUNC(st2205u_device::lbuf_w));
+ map(0x0047, 0x0047).rw(FUNC(st2205u_device::lctr_r), FUNC(st2205u_device::lctr_w));
+ map(0x0048, 0x0048).w(FUNC(st2205u_device::lckr_w));
+ map(0x0049, 0x0049).w(FUNC(st2205u_device::lfra_w));
+ map(0x004a, 0x004a).rw(FUNC(st2205u_device::lac_r), FUNC(st2205u_device::lac_w));
+ map(0x004b, 0x004b).rw(FUNC(st2205u_device::lpwm_r), FUNC(st2205u_device::lpwm_w));
+ map(0x004c, 0x004c).w(FUNC(st2205u_device::lpal_w));
+ map(0x004e, 0x004e).rw(FUNC(st2205u_device::pl_r), FUNC(st2205u_device::pl_w));
+ map(0x004f, 0x004f).rw(FUNC(st2205u_device::pcl_r), FUNC(st2205u_device::pcl_w));
+ map(0x0052, 0x0052).rw(FUNC(st2205u_device::sctr_r), FUNC(st2205u_device::sctr_w));
+ map(0x0053, 0x0053).rw(FUNC(st2205u_device::sckr_r), FUNC(st2205u_device::sckr_w));
+ map(0x0054, 0x0054).rw(FUNC(st2205u_device::ssr_r), FUNC(st2205u_device::ssr_w));
+ map(0x0055, 0x0055).rw(FUNC(st2205u_device::smod_r), FUNC(st2205u_device::smod_w));
map(0x0057, 0x0057).rw(FUNC(st2205u_device::lvctr_r), FUNC(st2205u_device::lvctr_w));
- map(0x0058, 0x0058).rw(FUNC(st2205u_device::dptrl_r), FUNC(st2205u_device::dptrl_w));
- map(0x0059, 0x0059).rw(FUNC(st2205u_device::dptrh_r), FUNC(st2205u_device::dptrh_w));
- map(0x005a, 0x005a).rw(FUNC(st2205u_device::dbkrl_r), FUNC(st2205u_device::dbkrl_w));
- map(0x005b, 0x005b).rw(FUNC(st2205u_device::dbkrh_r), FUNC(st2205u_device::dbkrh_w));
- map(0x005c, 0x005c).rw(FUNC(st2205u_device::dcntl_r), FUNC(st2205u_device::dcntl_w));
- map(0x005d, 0x005d).rw(FUNC(st2205u_device::dcnth_r), FUNC(st2205u_device::dcnth_w));
- map(0x005e, 0x005e).rw(FUNC(st2205u_device::dctr_r), FUNC(st2205u_device::dctr_w));
- map(0x005f, 0x005f).rw(FUNC(st2205u_device::dmod_r), FUNC(st2205u_device::dmod_w));
map(0x0060, 0x0060).rw(FUNC(st2205u_device::uctr_r), FUNC(st2205u_device::uctr_w));
map(0x0061, 0x0061).rw(FUNC(st2205u_device::usr_r), FUNC(st2205u_device::usr_clr_w));
map(0x0062, 0x0062).rw(FUNC(st2205u_device::irctr_r), FUNC(st2205u_device::irctr_w));
@@ -930,10 +1108,31 @@ void st2205u_device::int_map(address_map &map)
map(0x0064, 0x0064).rw(FUNC(st2205u_device::udata_r), FUNC(st2205u_device::udata_w));
map(0x0066, 0x0066).rw(FUNC(st2205u_device::brs_r), FUNC(st2205u_device::brs_w));
map(0x0067, 0x0067).rw(FUNC(st2205u_device::bdiv_r), FUNC(st2205u_device::bdiv_w));
- map(0x0070, 0x0070).rw(FUNC(st2205u_device::usbcon_r), FUNC(st2205u_device::usbcon_w));
- map(0x0071, 0x0071).rw(FUNC(st2205u_device::usbien_r), FUNC(st2205u_device::usbien_w));
map(0x0080, 0x1fff).rw(FUNC(st2205u_device::ram_r), FUNC(st2205u_device::ram_w)); // assumed to be shared with banked RAM
map(0x2000, 0x3fff).rw(FUNC(st2205u_device::bmem_r), FUNC(st2205u_device::bmem_w));
map(0x4000, 0x7fff).rw(FUNC(st2205u_device::pmem_r), FUNC(st2205u_device::pmem_w));
map(0x8000, 0xffff).rw(FUNC(st2205u_device::dmem_r), FUNC(st2205u_device::dmem_w));
}
+
+void st2302u_device::int_map(address_map &map)
+{
+ base_map(map);
+ map(0x0000, 0x0005).rw(FUNC(st2302u_device::pdata_r), FUNC(st2302u_device::pdata_w));
+ map(0x0006, 0x0006).rw(FUNC(st2302u_device::psc_r), FUNC(st2302u_device::psc_w));
+ map(0x0008, 0x000d).rw(FUNC(st2302u_device::pctrl_r), FUNC(st2302u_device::pctrl_w));
+ map(0x000e, 0x000e).rw(FUNC(st2302u_device::pfc_r), FUNC(st2302u_device::pfc_w));
+ map(0x000f, 0x000f).rw(FUNC(st2302u_device::pfd_r), FUNC(st2302u_device::pfd_w));
+ map(0x0012, 0x0012).rw(FUNC(st2302u_device::sctr_r), FUNC(st2302u_device::sctr_w));
+ map(0x0013, 0x0013).rw(FUNC(st2302u_device::sckr_r), FUNC(st2302u_device::sckr_w));
+ map(0x0014, 0x0014).rw(FUNC(st2302u_device::ssr_r), FUNC(st2302u_device::ssr_w));
+ map(0x0015, 0x0015).rw(FUNC(st2302u_device::smod_r), FUNC(st2302u_device::smod_w));
+ //map(0x0018, 0x0018).(?);
+ map(0x0040, 0x0047).rw(FUNC(st2302u_device::psg_r), FUNC(st2302u_device::psg_w));
+ map(0x0048, 0x004b).rw(FUNC(st2302u_device::vol_r), FUNC(st2302u_device::vol_w));
+ map(0x004c, 0x004d).rw(FUNC(st2302u_device::volm_r), FUNC(st2302u_device::volm_w));
+ map(0x004e, 0x004e).rw(FUNC(st2302u_device::psgc_r), FUNC(st2302u_device::psgc_w));
+ map(0x004f, 0x004f).rw(FUNC(st2302u_device::psgm_r), FUNC(st2302u_device::psgm_w));
+ map(0x0080, 0x07ff).ram();
+ map(0x4000, 0x7fff).rw(FUNC(st2302u_device::pmem_r), FUNC(st2302u_device::pmem_w));
+ map(0x8000, 0xffff).rw(FUNC(st2302u_device::dmem_r), FUNC(st2302u_device::dmem_w));
+}
diff --git a/src/devices/cpu/m6502/st2205u.h b/src/devices/cpu/m6502/st2205u.h
index 452337da42e..d5bd7f04f03 100644
--- a/src/devices/cpu/m6502/st2205u.h
+++ b/src/devices/cpu/m6502/st2205u.h
@@ -13,7 +13,7 @@
#include "st2xxx.h"
-class st2205u_device : public st2xxx_device
+class st2205u_base_device : public st2xxx_device
{
public:
enum {
@@ -36,8 +36,6 @@ public:
ST_VOL3,
ST_VOLM0,
ST_VOLM1,
- ST_LBUF,
- ST_BRR,
ST_DMS0,
ST_DMS1,
ST_DMD0,
@@ -57,65 +55,19 @@ public:
ST_LVCTR
};
- st2205u_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
-
- void set_alt_map() { m_alt_map = true; }
-
protected:
- virtual void device_start() override;
+ st2205u_base_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, address_map_constructor internal_map, int data_bits, bool has_banked_ram);
+
virtual void device_reset() override;
- virtual u16 st2xxx_ireq_mask() const override { return 0xdfff; }
- virtual const char *st2xxx_irq_name(int i) const override;
- virtual u8 st2xxx_pmcr_mask() const override { return 0xff; }
virtual unsigned st2xxx_bt_divider(int n) const override;
virtual u8 st2xxx_prs_mask() const override { return 0xc0; }
virtual void st2xxx_tclk_start() override;
virtual void st2xxx_tclk_stop() override;
- virtual u8 st2xxx_sys_mask() const override { return 0xfe; }
- virtual u8 st2xxx_misc_mask() const override { return 0x0f; }
- virtual bool st2xxx_wdten_on_reset() const override { return true; }
virtual bool st2xxx_has_dma() const override { return true; }
- virtual u8 st2xxx_lpan_mask() const override { return 0x0f; }
- virtual u8 st2xxx_lctr_mask() const override { return 0xef; }
- virtual u8 st2xxx_lckr_mask() const override { return 0x3f; }
- virtual u8 st2xxx_lpwm_mask() const override { return 0xff; }
- virtual unsigned st2xxx_lfr_clocks() const override;
- virtual bool st2xxx_has_spi() const override { return true; }
- virtual bool st2xxx_spi_iis() const override { return true; }
- virtual u8 st2xxx_uctr_mask() const override { return 0x3f; }
- virtual u8 st2xxx_bctr_mask() const override { return 0xb7; }
-private:
- class mi_st2205u : public mi_st2xxx {
- public:
- virtual u8 read(u16 adr) override;
- virtual u8 read_sync(u16 adr) override;
- virtual u8 read_arg(u16 adr) override;
- virtual u8 read_vector(u16 adr) override;
- virtual void write(u16 adr, u8 val) override;
-
- u8 pread(u16 adr);
- u8 preadc(u16 adr);
- void pwrite(u16 adr, u8 val);
- u8 dread(u16 adr);
- u8 dreadc(u16 adr);
- void dwrite(u16 adr, u8 val);
- u8 bread(u16 adr);
- u8 breadc(u16 adr);
- void bwrite(u16 adr, u8 val);
-
- u16 brr;
+ void base_init(std::unique_ptr<mi_st2xxx> &&intf);
- std::unique_ptr<u8[]> ram;
- };
-
- template<int N> TIMER_CALLBACK_MEMBER(bt_interrupt);
-
- u8 brrl_r();
- void brrl_w(u8 data);
- u8 brrh_r();
- void brrh_w(u8 data);
u8 btc_r();
void btc_w(u8 data);
u32 tclk_pres_div(u8 mode) const;
@@ -133,6 +85,7 @@ private:
void t4c_w(u8 data);
u8 tien_r();
void tien_w(u8 data);
+
u8 psg_r(offs_t offset);
void psg_w(offs_t offset, u8 data);
u8 psgc_r();
@@ -143,9 +96,7 @@ private:
void vol_w(offs_t offset, u8 data);
u8 volm_r(offs_t offset);
void volm_w(offs_t offset, u8 data);
- u8 lbuf_r();
- void lbuf_w(u8 data);
- void lpal_w(u8 data);
+
u8 usbcon_r();
void usbcon_w(u8 data);
u8 usbien_r();
@@ -166,21 +117,14 @@ private:
void dctr_w(u8 data);
u8 dmod_r();
void dmod_w(u8 data);
+
u8 rctr_r();
void rctr_w(u8 data);
+
u8 lvctr_r();
void lvctr_w(u8 data);
- u8 ram_r(offs_t offset);
- void ram_w(offs_t offset, u8 data);
- u8 pmem_r(offs_t offset);
- void pmem_w(offs_t offset, u8 data);
- u8 dmem_r(offs_t offset);
- void dmem_w(offs_t offset, u8 data);
- u8 bmem_r(offs_t offset);
- void bmem_w(offs_t offset, u8 data);
-
- void int_map(address_map &map);
+ void base_map(address_map &map);
u8 m_btc;
u16 m_tc_12bit[4];
@@ -196,9 +140,6 @@ private:
u8 m_psg_on;
u8 m_psg_vol[4];
u8 m_psg_volm[2];
- u8 m_lbuf;
- u8 m_lpal_index;
- u8 m_gray_levels[16];
u8 m_usbcon;
u8 m_usbien;
u16 m_dptr[4];
@@ -208,10 +149,139 @@ private:
u8 m_dmod[2];
u8 m_rctr;
u8 m_lvctr;
+};
+
+class st2205u_device : public st2205u_base_device
+{
+public:
+ enum {
+ ST_LBUF = ST_LVCTR + 1,
+ ST_BRR
+ };
+
+ st2205u_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+protected:
+ virtual void device_start() override;
+ virtual void device_reset() override;
- bool m_alt_map; // hack
+ virtual u16 st2xxx_ireq_mask() const override { return 0xdfff; }
+ virtual const char *st2xxx_irq_name(int i) const override;
+ virtual u8 st2xxx_pmcr_mask() const override { return 0xff; }
+ virtual u8 st2xxx_sys_mask() const override { return 0xfe; }
+ virtual u8 st2xxx_misc_mask() const override { return 0x0f; }
+ virtual bool st2xxx_wdten_on_reset() const override { return true; }
+ virtual u8 st2xxx_lpan_mask() const override { return 0x0f; }
+ virtual u8 st2xxx_lctr_mask() const override { return 0xef; }
+ virtual u8 st2xxx_lckr_mask() const override { return 0x3f; }
+ virtual u8 st2xxx_lpwm_mask() const override { return 0xff; }
+ virtual unsigned st2xxx_lfr_clocks() const override;
+ virtual bool st2xxx_has_spi() const override { return true; }
+ virtual bool st2xxx_spi_iis() const override { return true; }
+ virtual u8 st2xxx_uctr_mask() const override { return 0x3f; }
+ virtual u8 st2xxx_bctr_mask() const override { return 0xb7; }
+
+private:
+ class mi_st2205u : public mi_st2xxx {
+ public:
+ virtual u8 read(u16 adr) override;
+ virtual u8 read_sync(u16 adr) override;
+ virtual u8 read_arg(u16 adr) override;
+ virtual u8 read_vector(u16 adr) override;
+ virtual void write(u16 adr, u8 val) override;
+
+ u8 pread(u16 adr);
+ u8 preadc(u16 adr);
+ void pwrite(u16 adr, u8 val);
+ u8 dread(u16 adr);
+ u8 dreadc(u16 adr);
+ void dwrite(u16 adr, u8 val);
+ u8 bread(u16 adr);
+ u8 breadc(u16 adr);
+ void bwrite(u16 adr, u8 val);
+
+ u16 brr;
+
+ std::unique_ptr<u8[]> ram;
+ };
+
+ u8 brrl_r();
+ void brrl_w(u8 data);
+ u8 brrh_r();
+ void brrh_w(u8 data);
+
+ u8 lbuf_r();
+ void lbuf_w(u8 data);
+ void lpal_w(u8 data);
+
+ u8 ram_r(offs_t offset);
+ void ram_w(offs_t offset, u8 data);
+ u8 pmem_r(offs_t offset);
+ void pmem_w(offs_t offset, u8 data);
+ u8 dmem_r(offs_t offset);
+ void dmem_w(offs_t offset, u8 data);
+ u8 bmem_r(offs_t offset);
+ void bmem_w(offs_t offset, u8 data);
+
+ void int_map(address_map &map);
+
+ u8 m_lbuf;
+ u8 m_lpal_index;
+ u8 m_gray_levels[16];
+};
+
+class st2302u_device : public st2205u_base_device
+{
+public:
+ st2302u_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+protected:
+ virtual void device_start() override;
+
+ virtual u16 st2xxx_ireq_mask() const override { return 0xd37f; } // ???
+ virtual const char *st2xxx_irq_name(int i) const override;
+ virtual u8 st2xxx_pmcr_mask() const override { return 0xff; } // ???
+ virtual u8 st2xxx_sys_mask() const override { return 0xfe; } // ???
+ virtual u8 st2xxx_misc_mask() const override { return 0x0f; } // ???
+ virtual bool st2xxx_wdten_on_reset() const override { return true; } // ???
+ virtual u8 st2xxx_lpan_mask() const override { return 0; } // no LCDC
+ virtual u8 st2xxx_lctr_mask() const override { return 0; } // no LCDC
+ virtual u8 st2xxx_lckr_mask() const override { return 0; } // no LCDC
+ virtual u8 st2xxx_lpwm_mask() const override { return 0; } // no LCDC
+ virtual unsigned st2xxx_lfr_clocks() const override { return 0; } // no LCDC
+ virtual bool st2xxx_has_spi() const override { return true; }
+ virtual bool st2xxx_spi_iis() const override { return true; }
+ virtual u8 st2xxx_uctr_mask() const override { return 0; } // no UART
+ virtual u8 st2xxx_bctr_mask() const override { return 0; } // no UART
+
+private:
+ class mi_st2302u : public mi_st2xxx {
+ public:
+ virtual u8 read(u16 adr) override;
+ virtual u8 read_sync(u16 adr) override;
+ virtual u8 read_arg(u16 adr) override;
+ virtual u8 read_vector(u16 adr) override;
+ virtual void write(u16 adr, u8 val) override;
+
+ u8 pread(u16 adr);
+ u8 preadc(u16 adr);
+ void pwrite(u16 adr, u8 val);
+ u8 dread(u16 adr);
+ u8 dreadc(u16 adr);
+ void dwrite(u16 adr, u8 val);
+ };
+
+ u8 ram_r(offs_t offset);
+ void ram_w(offs_t offset, u8 data);
+ u8 pmem_r(offs_t offset);
+ void pmem_w(offs_t offset, u8 data);
+ u8 dmem_r(offs_t offset);
+ void dmem_w(offs_t offset, u8 data);
+
+ void int_map(address_map &map);
};
DECLARE_DEVICE_TYPE(ST2205U, st2205u_device)
+DECLARE_DEVICE_TYPE(ST2302U, st2302u_device)
#endif // MAME_MACHINE_M6502_ST2205U_H
diff --git a/src/devices/cpu/m6502/st2xxx.cpp b/src/devices/cpu/m6502/st2xxx.cpp
index c890ab5ef15..2c24f65f653 100644
--- a/src/devices/cpu/m6502/st2xxx.cpp
+++ b/src/devices/cpu/m6502/st2xxx.cpp
@@ -4,15 +4,19 @@
Sitronix ST2XXX LCD MCUs
- This extended SoC family combines a 65C02 CPU core (including the
- Rockwell bit opcodes) with a wide variety of on-chip peripherals.
- Features common to all besides internal RAM and ROM are parallel
- ports, internal timers, a multi-level interrupt controller, LCD
- controllers (of varying degrees of sophistication), R/C/slow XTAL
- clock generators, power management and PSG channels for speaker
- output. Each MCU also has numerous pins dedicated to LCD segment
- drivers, an external bus addressing several MB of off-chip
- memory using multiple chip select signals, or both.
+ This extended SoC family combines a W65C02S 8-bit CPU core
+ (including the Rockwell bit opcodes) with a wide variety of on-
+ chip peripherals. Common features besides internal RAM and ROM are
+ parallel ports, internal timers, a vectored interrupt controller,
+ LCD controllers (of varying degrees of sophistication), R/C/slow
+ XTAL clock generators, power management and PSG channels for
+ speaker output. Each MCU also has numerous pins dedicated to LCD
+ segment drivers (ST20XX, ST2104, ST2108), an external bus capable
+ of addressing several MB of off-chip memory using multiple chip
+ select signals (ST2100, ST22XX), or both (ST25XX, ST26XX). The
+ later ST23XX series, targeted mostly at digital greeting card
+ applications, eliminated on-chip LCD control but retained other
+ typical ST2XXX features.
On all ST2XXX MCUs but the smallest single-chip ST20XX models,
4000–7FFF (nominally program memory) and 8000–FFFF (nominally
@@ -23,6 +27,9 @@
switch 4000–7FFF to a different bank during interrupt service if
the IRREN bit in the SYS register is set.
+ At some time between 2010 and 2012, Sitronix spun off all of its
+ SoC product line to mCore Technology Corporation.
+
**********************************************************************/
#include "emu.h"
@@ -179,17 +186,20 @@ void st2xxx_device::save_common_registers()
save_item(NAME(m_misc));
save_item(NAME(m_ireq));
save_item(NAME(m_iena));
- save_item(NAME(m_lssa));
- save_item(NAME(m_lvpw));
- save_item(NAME(m_lxmax));
- save_item(NAME(m_lymax));
- if (st2xxx_lpan_mask() != 0)
- save_item(NAME(m_lpan));
- save_item(NAME(m_lctr));
- save_item(NAME(m_lckr));
- save_item(NAME(m_lfra));
- save_item(NAME(m_lac));
- save_item(NAME(m_lpwm));
+ if (st2xxx_lctr_mask() != 0)
+ {
+ save_item(NAME(m_lssa));
+ save_item(NAME(m_lvpw));
+ save_item(NAME(m_lxmax));
+ save_item(NAME(m_lymax));
+ if (st2xxx_lpan_mask() != 0)
+ save_item(NAME(m_lpan));
+ save_item(NAME(m_lctr));
+ save_item(NAME(m_lckr));
+ save_item(NAME(m_lfra));
+ save_item(NAME(m_lac));
+ save_item(NAME(m_lpwm));
+ }
if (st2xxx_has_spi())
{
save_item(NAME(m_sctr));
diff --git a/src/devices/cpu/ns32000/ns32000.cpp b/src/devices/cpu/ns32000/ns32000.cpp
index 41743521755..4b796f8f345 100644
--- a/src/devices/cpu/ns32000/ns32000.cpp
+++ b/src/devices/cpu/ns32000/ns32000.cpp
@@ -18,7 +18,7 @@ DEFINE_DEVICE_TYPE(NS32032, ns32032_device, "ns32032", "National Semiconductor N
* - address translation/abort
* - floating point and other unimplemented instructions
* - format 6: subp,addp
- * - format 7: cmpm, dei
+ * - format 7: cmpm
* - format 8: movus/movsu
* - cascaded interrupts
* - instruction cycles
@@ -240,8 +240,13 @@ void ns32000_device::decode(addr_mode *mode, unsigned imm_size, unsigned &bytes)
case 0x00: case 0x01: case 0x02: case 0x03:
case 0x04: case 0x05: case 0x06: case 0x07:
// register
- mode[i].base = m_r[mode[i].gen];
- mode[i].type = scaled[i] ? MEM : REG;
+ if (scaled[i])
+ {
+ mode[i].base = m_r[mode[i].gen];
+ mode[i].type = MEM;
+ }
+ else
+ mode[i].type = REG;
break;
case 0x08: case 0x09: case 0x0a: case 0x0b:
case 0x0c: case 0x0d: case 0x0e: case 0x0f:
@@ -326,6 +331,10 @@ u32 ns32000_device::ea(addr_mode const mode)
switch (mode.type)
{
+ case REG:
+ base = m_r[mode.gen];
+ break;
+
case IND:
base = m_bus[12].read_dword_unaligned(mode.base);
break;
@@ -343,9 +352,9 @@ u32 ns32000_device::ea(addr_mode const mode)
return base + mode.disp;
}
-u32 ns32000_device::gen_read(addr_mode mode, unsigned size)
+u64 ns32000_device::gen_read(addr_mode mode, unsigned size)
{
- u32 data = 0;
+ u64 data = 0;
switch (mode.type)
{
@@ -354,7 +363,10 @@ u32 ns32000_device::gen_read(addr_mode mode, unsigned size)
break;
case REG:
- data = mode.base + mode.disp;
+ if (size == SIZE_Q)
+ data = (u64(m_r[mode.gen ^ 1]) << 32) | m_r[mode.gen ^ 0];
+ else
+ data = m_r[mode.gen] & size_mask[size];
break;
case TOS:
@@ -371,30 +383,32 @@ u32 ns32000_device::gen_read(addr_mode mode, unsigned size)
break;
default:
- if (size)
- if (size == 3)
- data = space(0).read_dword_unaligned(ea(mode));
- else
- data = space(0).read_word_unaligned(ea(mode));
- else
- data = space(0).read_byte(ea(mode));
+ switch (size)
+ {
+ case SIZE_B: data = space(0).read_byte(ea(mode)); break;
+ case SIZE_W: data = space(0).read_word_unaligned(ea(mode)); break;
+ case SIZE_D: data = space(0).read_dword_unaligned(ea(mode)); break;
+ case SIZE_Q: data = space(0).read_qword_unaligned(ea(mode)); break;
+ }
break;
}
return data;
}
-s32 ns32000_device::gen_read_sx(addr_mode mode, unsigned size)
+s64 ns32000_device::gen_read_sx(addr_mode mode, unsigned size)
{
- u32 const data = gen_read(mode, size);
+ u64 data = gen_read(mode, size);
- if (size)
- if (size == SIZE_D)
- return s32(data);
- else
- return s16(data);
- else
- return s8(data);
+ switch (size)
+ {
+ case SIZE_B: data = s8(data); break;
+ case SIZE_W: data = s16(data); break;
+ case SIZE_D: data = s32(data); break;
+ case SIZE_Q: data = s64(data); break;
+ }
+
+ return data;
}
void ns32000_device::gen_write(addr_mode mode, unsigned size, u64 data)
@@ -402,7 +416,13 @@ void ns32000_device::gen_write(addr_mode mode, unsigned size, u64 data)
switch (mode.type)
{
case REG:
- m_r[mode.gen] = (m_r[mode.gen] & ~size_mask[size]) | (data & size_mask[size]);
+ if (size == SIZE_Q)
+ {
+ m_r[mode.gen ^ 0] = u32(data);
+ m_r[mode.gen ^ 1] = data >> 32;
+ }
+ else
+ m_r[mode.gen] = (m_r[mode.gen] & ~size_mask[size]) | (data & size_mask[size]);
break;
case TOS:
@@ -426,7 +446,6 @@ void ns32000_device::gen_write(addr_mode mode, unsigned size, u64 data)
case SIZE_D: space(0).write_dword_unaligned(ea(mode), data); break;
case SIZE_Q: space(0).write_qword_unaligned(ea(mode), data); break;
}
-
break;
}
}
@@ -846,17 +865,17 @@ void ns32000_device::execute_run()
m_psr &= ~(PSR_N | PSR_Z | PSR_L);
- if ((size == 3 && s32(src1) > s32(src2))
- || ((size == 1 && s16(src1) > s16(src2))
- || ((size == 0 && s8(src1) > s8(src2)))))
+ if ((size == SIZE_D && s32(src1) > s32(src2))
+ || ((size == SIZE_W && s16(src1) > s16(src2))
+ || ((size == SIZE_B && s8(src1) > s8(src2)))))
m_psr |= PSR_N;
- if ((src1 & size_mask[size]) == (src2 & size_mask[size]))
+ if (src1 == src2)
m_psr |= PSR_Z;
- if ((size == 3 && u32(src1) > u32(src2))
- || ((size == 1 && u16(src1) > u16(src2))
- || ((size == 0 && u8(src1) > u8(src2)))))
+ if ((size == SIZE_D && u32(src1) > u32(src2))
+ || ((size == SIZE_W && u16(src1) > u16(src2))
+ || ((size == SIZE_B && u8(src1) > u8(src2)))))
m_psr |= PSR_L;
}
m_pc += bytes;
@@ -950,25 +969,25 @@ void ns32000_device::execute_run()
{
case 0x0: // US
// TODO: user stack pointer?
- m_sp1 = gen_read(mode[0], size) & size_mask[size];
+ m_sp1 = gen_read(mode[0], size);
m_pc += bytes;
break;
case 0x8: // FP
- m_fp = gen_read(mode[0], size) & size_mask[size];
+ m_fp = gen_read(mode[0], size);
m_pc += bytes;
break;
case 0x9: // SP
- SP = gen_read(mode[0], size) & size_mask[size];
+ SP = gen_read(mode[0], size);
m_pc += bytes;
break;
case 0xa: // SB
- m_sb = gen_read(mode[0], size) & size_mask[size];
+ m_sb = gen_read(mode[0], size);
m_pc += bytes;
break;
case 0xd: // PSR
if (!(m_psr & PSR_U))
{
- u32 const src = gen_read(mode[0], size) & size_mask[size];
+ u32 const src = gen_read(mode[0], size);
if (size == 0)
m_psr = (m_psr & 0xff00) | u8(src);
@@ -983,14 +1002,14 @@ void ns32000_device::execute_run()
case 0xe: // INTBASE
if (!(m_psr & PSR_U))
{
- m_intbase = gen_read(mode[0], size) & size_mask[size];
+ m_intbase = gen_read(mode[0], size);
m_pc += bytes;
}
else
interrupt(ILL, m_pc);
break;
case 0xf: // MOD
- m_mod = gen_read(mode[0], size) & size_mask[size];
+ m_mod = gen_read(mode[0], size);
m_pc += bytes;
break;
}
@@ -1140,17 +1159,17 @@ void ns32000_device::execute_run()
m_psr &= ~(PSR_N | PSR_Z | PSR_L);
- if ((size == 3 && s32(src1) > s32(src2))
- || ((size == 1 && s16(src1) > s16(src2))
- || ((size == 0 && s8(src1) > s8(src2)))))
+ if ((size == SIZE_D && s32(src1) > s32(src2))
+ || ((size == SIZE_W && s16(src1) > s16(src2))
+ || ((size == SIZE_B && s8(src1) > s8(src2)))))
m_psr |= PSR_N;
- if ((src1 & size_mask[size]) == (src2 & size_mask[size]))
+ if (src1 == src2)
m_psr |= PSR_Z;
- if ((size == 3 && u32(src1) > u32(src2))
- || ((size == 1 && u16(src1) > u16(src2))
- || ((size == 0 && u8(src1) > u8(src2)))))
+ if ((size == SIZE_D && u32(src1) > u32(src2))
+ || ((size == SIZE_W && u16(src1) > u16(src2))
+ || ((size == SIZE_B && u8(src1) > u8(src2)))))
m_psr |= PSR_L;
}
m_pc += bytes;
@@ -1218,8 +1237,8 @@ void ns32000_device::execute_run()
{
mode[1].rmw();
- u32 const src1 = gen_read(mode[0], size) & size_mask[size];
- u32 const src2 = gen_read(mode[1], size) & size_mask[size];
+ u32 const src1 = gen_read(mode[0], size);
+ u32 const src2 = gen_read(mode[1], size);
u32 const dest = src2 - src1;
flags(src1, src2, dest, size, true);
@@ -1258,8 +1277,8 @@ void ns32000_device::execute_run()
{
mode[1].rmw();
- u32 const src1 = gen_read(mode[0], size) & size_mask[size];
- u32 const src2 = gen_read(mode[1], size) & size_mask[size];
+ u32 const src1 = gen_read(mode[0], size);
+ u32 const src2 = gen_read(mode[1], size);
u32 const dest = src2 - src1 - (m_psr & PSR_C);
flags(src1, src2, dest, size, true);
@@ -1569,7 +1588,7 @@ void ns32000_device::execute_run()
mode[1].rmw();
s32 const count = gen_read_sx(mode[0], SIZE_B);
- u32 const src = gen_read(mode[1], size) & size_mask[size];
+ u32 const src = gen_read(mode[1], size);
u32 const dest = (count < 0) ? (src >> -count) : (src << count);
@@ -1621,20 +1640,20 @@ void ns32000_device::execute_run()
{
u32 const src = gen_read(mode[0], size);
- if (src & size_mask[size])
+ if (src)
m_psr |= PSR_C;
else
m_psr &= ~PSR_C;
if ((src ^ ~(size_mask[size] >> 1)) & size_mask[size])
{
- m_psr |= PSR_F;
- gen_write(mode[1], size, src);
+ m_psr &= ~PSR_F;
+ gen_write(mode[1], size, -src);
}
else
{
- m_psr &= ~PSR_F;
- gen_write(mode[1], size, -src);
+ m_psr |= PSR_F;
+ gen_write(mode[1], size, src);
}
}
m_pc += bytes;
@@ -1845,9 +1864,8 @@ void ns32000_device::execute_run()
// read.[BW],write.D
{
u32 const src = gen_read(mode[0], size);
- u32 const dest = src & size_mask[size];
- gen_write(mode[1], SIZE_D, dest);
+ gen_write(mode[1], SIZE_D, src);
}
m_pc += bytes;
break;
@@ -1885,22 +1903,14 @@ void ns32000_device::execute_run()
// read.i,rmw.2i
{
mode[1].rmw();
+ unsigned const size2 = size * 2 + 1;
u32 const src1 = gen_read(mode[0], size);
u32 const src2 = gen_read(mode[1], size);
- u64 const dest = mulu_32x32(src1 & size_mask[size], src2 & size_mask[size]);
+ u64 const dest = mulu_32x32(src1, src2);
- if (mode[1].type == REG)
- {
- unsigned const lo = mode[1].gen;
- unsigned const hi = lo ^ 1;
-
- m_r[lo] = (m_r[lo] & ~size_mask[size]) | (dest & size_mask[size]);
- m_r[hi] = (m_r[hi] & ~size_mask[size]) | ((dest >> ((size + 1) * 8)) & size_mask[size]);
- }
- else
- gen_write(mode[1], size * 2 + 1, dest);
+ gen_write(mode[1], size2, dest);
}
m_pc += bytes;
break;
@@ -1911,7 +1921,37 @@ void ns32000_device::execute_run()
// DEIi src,dest
// gen,gen
// read.i,rmw.2i
- fatalerror("unimplemented: dei (%s)\n", machine().describe_context());
+ {
+ mode[1].rmw();
+ unsigned const size2 = size * 2 + 1;
+
+ u32 const src1 = gen_read(mode[0], size);
+ if (src1)
+ {
+ u64 const src2 = gen_read(mode[1], size2);
+
+ u32 const quotient = src2 / src1;
+ u32 const remainder = src2 % src1;
+
+ if (mode[1].type == REG)
+ {
+ m_r[mode[1].gen ^ 0] = (m_r[mode[1].gen ^ 0] & ~size_mask[size]) | (remainder & size_mask[size]);
+ m_r[mode[1].gen ^ 1] = (m_r[mode[1].gen ^ 1] & ~size_mask[size]) | (quotient & size_mask[size]);
+ }
+ else
+ gen_write(mode[1], size2, (u64(quotient) << ((size + 1) * 8)) | remainder);
+
+ m_pc += bytes;
+ }
+ else
+ {
+ // restore stack pointer
+ if (mode[0].type == TOS)
+ SP -= size + 1;
+
+ interrupt(DVZ, m_pc);
+ }
+ }
break;
case 0xc:
// QUOi src,dest
@@ -2006,12 +2046,13 @@ void ns32000_device::execute_run()
{
s32 const src2 = gen_read_sx(mode[1], size);
- div_t const dest = std::div(src2, src1);
+ s32 const quotient = src2 / src1;
+ s32 const remainder = src2 % src1;
- if ((dest.quot < 0) && dest.rem)
- gen_write(mode[1], size, dest.quot - 1);
+ if ((quotient < 0) && remainder)
+ gen_write(mode[1], size, quotient - 1);
else
- gen_write(mode[1], size, dest.quot);
+ gen_write(mode[1], size, quotient);
m_pc += bytes;
}
@@ -2093,7 +2134,7 @@ void ns32000_device::execute_run()
s32 const offset = m_r[reg];
s32 const length = displacement(bytes);
- u32 const src = gen_read(mode[0], size) & size_mask[size];
+ u32 const src = gen_read(mode[0], size);
u32 dest;
if (mode[1].type == REG)
@@ -2148,8 +2189,8 @@ void ns32000_device::execute_run()
// reg,gen,gen
// read.i,read.i
{
- u32 const length = gen_read(mode[0], size) & size_mask[size];
- u32 const index = gen_read(mode[1], size) & size_mask[size];
+ u32 const length = gen_read(mode[0], size);
+ u32 const index = gen_read(mode[1], size);
m_r[reg] = m_r[reg] * (length + 1) + index;
}
@@ -2162,7 +2203,7 @@ void ns32000_device::execute_run()
mode[1].rmw();
u32 const base = gen_read(mode[0], size);
- u32 offset = gen_read(mode[1], SIZE_B) & size_mask[size];
+ u32 offset = gen_read(mode[1], SIZE_B);
unsigned const limit = (size + 1) * 8;
m_psr |= PSR_F;
diff --git a/src/devices/cpu/ns32000/ns32000.h b/src/devices/cpu/ns32000/ns32000.h
index dea909cdc68..af5977fe52e 100644
--- a/src/devices/cpu/ns32000/ns32000.h
+++ b/src/devices/cpu/ns32000/ns32000.h
@@ -71,8 +71,8 @@ private:
// operand read/write helpers
u32 ea(addr_mode const mode);
- u32 gen_read(addr_mode mode, unsigned size);
- s32 gen_read_sx(addr_mode mode, unsigned size);
+ u64 gen_read(addr_mode mode, unsigned size);
+ s64 gen_read_sx(addr_mode mode, unsigned size);
void gen_write(addr_mode mode, unsigned size, u64 data);
// other execution helpers
diff --git a/src/devices/machine/generalplus_gpl16250soc.cpp b/src/devices/machine/generalplus_gpl16250soc.cpp
index 60bd40ae33d..ac0c99f480e 100644
--- a/src/devices/machine/generalplus_gpl16250soc.cpp
+++ b/src/devices/machine/generalplus_gpl16250soc.cpp
@@ -188,6 +188,7 @@ void sunplus_gcm394_base_device::trigger_systemm_dma(int channel)
if (mode & 0x2000)
{
write_space(dest, val & 0xFF);
+ dest += destdelta;
write_space(dest, val >> 8);
}
else
diff --git a/src/emu/render.cpp b/src/emu/render.cpp
index 5a22b919e1c..221ce9fc929 100644
--- a/src/emu/render.cpp
+++ b/src/emu/render.cpp
@@ -1447,21 +1447,115 @@ render_primitive_list &render_target::get_primitives()
bool render_target::map_point_container(s32 target_x, s32 target_y, render_container &container, float &container_x, float &container_y)
{
- ioport_port *input_port;
- ioport_value input_mask;
- return map_point_internal(target_x, target_y, &container, container_x, container_y, input_port, input_mask);
+ std::pair<float, float> target_f(map_point_internal(target_x, target_y));
+
+ // explicitly check for the UI container
+ if (&container == &m_manager.ui_container())
+ {
+ // this hit test went against the UI container
+ if ((target_f.first >= 0.0f) && (target_f.first < 1.0f) && (target_f.second >= 0.0f) && (target_f.second < 1.0f))
+ {
+ // this point was successfully mapped
+ container_x = float(target_x) / m_width;
+ container_y = float(target_y) / m_height;
+ return true;
+ }
+ }
+ else
+ {
+ if (m_orientation & ORIENTATION_FLIP_X)
+ target_f.first = 1.0f - target_f.first;
+ if (m_orientation & ORIENTATION_FLIP_Y)
+ target_f.second = 1.0f - target_f.second;
+ if (m_orientation & ORIENTATION_SWAP_XY)
+ std::swap(target_f.first, target_f.second);
+
+ // try to find the right container
+ auto const &items(current_view().screen_items());
+ auto const found(std::find_if(
+ items.begin(),
+ items.end(),
+ [&container] (layout_view::item &item) { return &item.screen()->container() == &container; }));
+ if (items.end() != found)
+ {
+ layout_view::item &item(*found);
+ if (item.bounds().includes(target_f.first, target_f.second))
+ {
+ // point successfully mapped
+ container_x = (target_f.first - item.bounds().x0) / item.bounds().width();
+ container_y = (target_f.second - item.bounds().y0) / item.bounds().height();
+ return true;
+ }
+ }
+ }
+
+ // default to point not mapped
+ container_x = container_y = -1.0f;
+ return false;
}
//-------------------------------------------------
// map_point_input - attempts to map a point on
-// the specified render_target to the specified
-// container, if possible
+// the specified render_target to an input port
+// field, if possible
//-------------------------------------------------
bool render_target::map_point_input(s32 target_x, s32 target_y, ioport_port *&input_port, ioport_value &input_mask, float &input_x, float &input_y)
{
- return map_point_internal(target_x, target_y, nullptr, input_x, input_y, input_port, input_mask);
+ std::pair<float, float> target_f(map_point_internal(target_x, target_y));
+ if (m_orientation & ORIENTATION_FLIP_X)
+ target_f.first = 1.0f - target_f.first;
+ if (m_orientation & ORIENTATION_FLIP_Y)
+ target_f.second = 1.0f - target_f.second;
+ if (m_orientation & ORIENTATION_SWAP_XY)
+ std::swap(target_f.first, target_f.second);
+
+ auto const &items(current_view().interactive_items());
+ m_hit_test.resize(items.size() * 2);
+ std::fill(m_hit_test.begin(), m_hit_test.end(), false);
+
+ for (auto const &edge : current_view().interactive_edges_x())
+ {
+ if ((edge.position() > target_f.first) || ((edge.position() == target_f.first) && edge.trailing()))
+ break;
+ else
+ m_hit_test[edge.index()] = !edge.trailing();
+ }
+
+ for (auto const &edge : current_view().interactive_edges_y())
+ {
+ if ((edge.position() > target_f.second) || ((edge.position() == target_f.second) && edge.trailing()))
+ break;
+ else
+ m_hit_test[items.size() + edge.index()] = !edge.trailing();
+ }
+
+ for (unsigned i = 0; items.size() > i; ++i)
+ {
+ if (m_hit_test[i] && m_hit_test[items.size() + i])
+ {
+ layout_view::item &item(items[i]);
+ if (item.has_input())
+ {
+ // point successfully mapped
+ input_port = item.input_tag_and_mask(input_mask);
+ input_x = (target_f.first - item.bounds().x0) / item.bounds().width();
+ input_y = (target_f.second - item.bounds().y0) / item.bounds().height();
+ return true;
+ }
+ else
+ {
+ break;
+ }
+ }
+ }
+
+ // default to point not mapped
+ input_port = nullptr;
+ input_mask = 0;
+ input_x = input_y = -1.0f;
+ return false;
}
@@ -1528,6 +1622,8 @@ void render_target::resolve_tags()
for (layout_view &view : file.views())
{
view.resolve_tags();
+ if (&current_view() == &view)
+ view.recompute(visibility_mask(), m_layerconfig.zoom_to_screen());
}
}
}
@@ -2468,7 +2564,7 @@ void render_target::add_element_primitives(render_primitive_list &list, const ob
// mapping points
//-------------------------------------------------
-bool render_target::map_point_internal(s32 target_x, s32 target_y, render_container *container, float &mapped_x, float &mapped_y, ioport_port *&mapped_input_port, ioport_value &mapped_input_mask)
+std::pair<float, float> render_target::map_point_internal(s32 target_x, s32 target_y)
{
// compute the visible width/height
s32 viswidth, visheight;
@@ -2476,65 +2572,14 @@ bool render_target::map_point_internal(s32 target_x, s32 target_y, render_contai
// create a root transform for the target
object_transform root_xform;
- root_xform.xoffs = (float)(m_width - viswidth) / 2;
- root_xform.yoffs = (float)(m_height - visheight) / 2;
-
- // default to point not mapped
- mapped_x = -1.0;
- mapped_y = -1.0;
- mapped_input_port = nullptr;
- mapped_input_mask = 0;
+ root_xform.xoffs = float(m_width - viswidth) / 2;
+ root_xform.yoffs = float(m_height - visheight) / 2;
// convert target coordinates to float
- float target_fx = (float)(target_x - root_xform.xoffs) / viswidth;
- float target_fy = (float)(target_y - root_xform.yoffs) / visheight;
- if (m_manager.machine().ui().is_menu_active())
- {
- target_fx = (float)target_x / m_width;
- target_fy = (float)target_y / m_height;
- }
- // explicitly check for the UI container
- if (container != nullptr && container == &m_manager.ui_container())
- {
- // this hit test went against the UI container
- if (target_fx >= 0.0f && target_fx < 1.0f && target_fy >= 0.0f && target_fy < 1.0f)
- {
- // this point was successfully mapped
- mapped_x = (float)target_x / m_width;
- mapped_y = (float)target_y / m_height;
- return true;
- }
- return false;
- }
-
- // iterate over items in the view
- for (layout_view::item &item : current_view().items())
- {
- if ((visibility_mask() & item.visibility_mask()) != item.visibility_mask())
- continue;
-
- bool checkit;
-
- // if we're looking for a particular container, verify that we have the right one
- if (container != nullptr)
- checkit = (item.screen() != nullptr && &item.screen()->container() == container);
-
- // otherwise, assume we're looking for an input
- else
- checkit = item.has_input();
-
- // this target is worth looking at; now check the point
- if (checkit && target_fx >= item.bounds().x0 && target_fx < item.bounds().x1 && target_fy >= item.bounds().y0 && target_fy < item.bounds().y1)
- {
- // point successfully mapped
- mapped_x = (target_fx - item.bounds().x0) / (item.bounds().x1 - item.bounds().x0);
- mapped_y = (target_fy - item.bounds().y0) / (item.bounds().y1 - item.bounds().y0);
- mapped_input_port = item.input_tag_and_mask(mapped_input_mask);
- return true;
- }
- }
-
- return false;
+ if (!m_manager.machine().ui().is_menu_active())
+ return std::make_pair(float(target_x - root_xform.xoffs) / viswidth, float(target_y - root_xform.yoffs) / visheight);
+ else
+ return std::make_pair(float(target_x) / m_width, float(target_y) / m_height);
}
@@ -2556,18 +2601,12 @@ layout_view *render_target::view_by_index(unsigned index)
int render_target::view_index(layout_view &targetview) const
{
- // find the first named match
- int index = 0;
-
- // scan the list of views within each layout, skipping those that don't apply
- for (layout_file const &file : m_filelist)
- for (layout_view const &view : file.views())
- if (!(m_flags & RENDER_CREATE_NO_ART) || !view.has_art())
- {
- if (&targetview == &view)
- return index;
- index++;
- }
+ // return index of view, or zero if not found
+ for (int index = 0; m_views.size() > index; ++index)
+ {
+ if (&m_views[index].first.get() == &targetview)
+ return index;
+ }
return 0;
}
diff --git a/src/emu/render.h b/src/emu/render.h
index 8aff6b73af9..b0d0df82d3c 100644
--- a/src/emu/render.h
+++ b/src/emu/render.h
@@ -55,6 +55,7 @@
#include <memory>
#include <mutex>
#include <string>
+#include <tuple>
#include <unordered_map>
#include <utility>
#include <vector>
@@ -184,6 +185,7 @@ struct render_bounds
constexpr float width() const { return x1 - x0; }
constexpr float height() const { return y1 - y0; }
constexpr float aspect() const { return width() / height(); }
+ constexpr bool includes(float x, float y) const { return (x >= x0) && (x <= x1) && (y >= y0) && (y <= y1); }
};
@@ -738,7 +740,7 @@ public:
using view_environment = emu::render::detail::view_environment;
using element_map = std::unordered_map<std::string, layout_element>;
using group_map = std::unordered_map<std::string, layout_group>;
- using render_screen_list = std::list<std::reference_wrapper<screen_device>>;
+ using screen_ref_vector = std::vector<std::reference_wrapper<screen_device> >;
/// \brief A single item in a view
///
@@ -769,8 +771,11 @@ public:
u32 visibility_mask() const { return m_visibility_mask; }
int orientation() const { return m_orientation; }
render_container *screen_container(running_machine &machine) const;
+
+ // interactivity
bool has_input() const { return bool(m_input_port); }
ioport_port *input_tag_and_mask(ioport_value &mask) const { mask = m_input_mask; return m_input_port; };
+ bool clickthrough() const { return m_clickthrough; }
// fetch state based on configured source
int state() const;
@@ -778,34 +783,37 @@ public:
// resolve tags, if any
void resolve_tags();
- // setters
- void set_blend_mode(int mode) { m_blend_mode = mode; }
-
private:
static layout_element *find_element(view_environment &env, util::xml::data_node const &itemnode, element_map &elemmap);
static render_bounds make_bounds(view_environment &env, util::xml::data_node const &itemnode, layout_group::transform const &trans);
static std::string make_input_tag(view_environment &env, util::xml::data_node const &itemnode);
static int get_blend_mode(view_environment &env, util::xml::data_node const &itemnode);
+ static unsigned get_input_shift(ioport_value mask);
// internal state
layout_element *const m_element; // pointer to the associated element (non-screens only)
output_finder<> m_output; // associated output
bool const m_have_output; // whether we actually have an output
- std::string const m_input_tag; // input tag of this item
ioport_port * m_input_port; // input port of this item
ioport_field const * m_input_field; // input port field of this item
ioport_value const m_input_mask; // input mask of this item
- u8 m_input_shift; // input mask rightshift for raw (trailing 0s)
+ u8 const m_input_shift; // input mask rightshift for raw (trailing 0s)
bool const m_input_raw; // get raw data from input port
+ bool m_clickthrough; // should click pass through to lower elements
screen_device * m_screen; // pointer to screen
int m_orientation; // orientation of this item
render_bounds m_bounds; // bounds of the item
- render_bounds const m_rawbounds; // raw (original) bounds of the item
render_color m_color; // color of the item
int m_blend_mode; // blending mode to use when drawing
u32 m_visibility_mask; // combined mask of parent visibility groups
+
+ // cold items
+ std::string const m_input_tag; // input tag of this item
+ render_bounds const m_rawbounds; // raw (original) bounds of the item
+ bool const m_has_clickthrough; // whether clickthrough was explicitly configured
};
using item_list = std::list<item>;
+ using item_ref_vector = std::vector<std::reference_wrapper<item> >;
/// \brief A subset of items in a view that can be hidden or shown
///
@@ -831,6 +839,36 @@ public:
};
using visibility_toggle_vector = std::vector<visibility_toggle>;
+ /// \brief An edge of an item in a view
+ class edge
+ {
+ public:
+ // construction/destruction
+ constexpr edge(unsigned index, float position, bool trailing)
+ : m_index(index)
+ , m_position(position)
+ , m_trailing(trailing)
+ {
+ }
+
+ // getters
+ constexpr unsigned index() const { return m_index; }
+ constexpr float position() const { return m_position; }
+ constexpr bool trailing() const { return m_trailing; }
+
+ // comparison
+ constexpr bool operator<(edge const &that) const
+ {
+ return std::make_tuple(m_position, m_trailing, m_index) < std::make_tuple(that.m_position, that.m_trailing, that.m_index);
+ }
+
+ private:
+ unsigned m_index; // index of item in some collection
+ float m_position; // position of edge on given axis
+ bool m_trailing; // false for edge at lower position on axis
+ };
+ using edge_vector = std::vector<edge>;
+
// construction/destruction
layout_view(
layout_environment &env,
@@ -842,14 +880,18 @@ public:
// getters
item_list &items() { return m_items; }
const std::string &name() const { return m_name; }
- const render_screen_list &screens() const { return m_screens; }
size_t screen_count() const { return m_screens.size(); }
float effective_aspect() const { return m_effaspect; }
const render_bounds &bounds() const { return m_bounds; }
bool has_screen(screen_device &screen) const;
- bool has_art() const { return m_has_art; }
- u32 default_visibility_mask() const { return m_defvismask; }
+ const item_ref_vector &screen_items() const { return m_screen_items; }
+ const item_ref_vector &interactive_items() const { return m_interactive_items; }
+ const edge_vector &interactive_edges_x() const { return m_interactive_edges_x; }
+ const edge_vector &interactive_edges_y() const { return m_interactive_edges_y; }
+ const screen_ref_vector &screens() const { return m_screens; }
const visibility_toggle_vector &visibility_toggles() const { return m_vistoggles; }
+ u32 default_visibility_mask() const { return m_defvismask; }
+ bool has_art() const { return m_has_art; }
// operations
void recompute(u32 visibility_mask, bool zoom_to_screens);
@@ -877,15 +919,21 @@ private:
static std::string make_name(layout_environment &env, util::xml::data_node const &viewnode);
// internal state
- std::string m_name; // name of the layout
- render_screen_list m_screens; // list screens visible in current configuration
- float m_effaspect; // X/Y of the layout in current configuration
- render_bounds m_bounds; // computed bounds of the view in current configuration
- render_bounds m_expbounds; // explicit bounds of the view
- item_list m_items; // list of layout items
- bool m_has_art; // true if the layout contains non-screen elements
- u32 m_defvismask; // default visibility mask
- visibility_toggle_vector m_vistoggles;
+ std::string m_name; // name of the layout
+ float m_effaspect; // X/Y of the layout in current configuration
+ render_bounds m_bounds; // computed bounds of the view in current configuration
+ item_list m_items; // list of layout items
+ item_ref_vector m_screen_items; // visible items that represent screens to draw
+ item_ref_vector m_interactive_items;// visible items that can accept pointer input
+ edge_vector m_interactive_edges_x;
+ edge_vector m_interactive_edges_y;
+ screen_ref_vector m_screens; // list screens visible in current configuration
+
+ // cold items
+ visibility_toggle_vector m_vistoggles; // collections of items that can be shown/hidden
+ render_bounds m_expbounds; // explicit bounds of the view
+ u32 m_defvismask; // default visibility mask
+ bool m_has_art; // true if the layout contains non-screen elements
};
@@ -1026,7 +1074,7 @@ private:
bool load_layout_file(device_t &device, const char *dirname, util::xml::data_node const &rootnode);
void add_container_primitives(render_primitive_list &list, const object_transform &root_xform, const object_transform &xform, render_container &container, int blendmode);
void add_element_primitives(render_primitive_list &list, const object_transform &xform, layout_element &element, int state, int blendmode);
- bool map_point_internal(s32 target_x, s32 target_y, render_container *container, float &mapped_x, float &mapped_y, ioport_port *&mapped_input_port, ioport_value &mapped_input_mask);
+ std::pair<float, float> map_point_internal(s32 target_x, s32 target_y);
// config callbacks
void config_load(util::xml::data_node const &targetnode);
@@ -1067,6 +1115,7 @@ private:
float m_max_refresh; // maximum refresh rate, 0 or if none
int m_orientation; // orientation
render_layer_config m_layerconfig; // layer configuration
+ std::vector<bool> m_hit_test; // used when mapping points to inputs
layout_view * m_base_view; // the view at the time of first frame
int m_base_orientation; // the orientation at the time of first frame
render_layer_config m_base_layerconfig; // the layer configuration at the time of first frame
diff --git a/src/emu/rendlay.cpp b/src/emu/rendlay.cpp
index 7d9eed28bf3..72c50a3db3b 100644
--- a/src/emu/rendlay.cpp
+++ b/src/emu/rendlay.cpp
@@ -33,8 +33,9 @@
#include <utility>
#define LOG_GROUP_BOUNDS_RESOLUTION (1U << 1)
+#define LOG_INTERACTIVE_ITEMS (1U << 2)
-//#define VERBOSE (LOG_GROUP_BOUNDS_RESOLUTION)
+//#define VERBOSE (LOG_GROUP_BOUNDS_RESOLUTION | LOG_INTERACTIVE_ITEMS)
#define LOG_OUTPUT_FUNC osd_printf_verbose
#include "logmacro.h"
@@ -3060,8 +3061,8 @@ layout_view::layout_view(
: m_name(make_name(env, viewnode))
, m_effaspect(1.0f)
, m_items()
- , m_has_art(false)
, m_defvismask(0U)
+ , m_has_art(false)
{
// parse the layout
m_expbounds.x0 = m_expbounds.y0 = m_expbounds.x1 = m_expbounds.y1 = 0;
@@ -3122,7 +3123,7 @@ layout_view::layout_view(
{
// screens (-1) + overlays (RGB multiply) + backdrop (add) + bezels (alpha) + cpanels (alpha) + marquees (alpha)
for (item &backdrop : layers.backdrops)
- backdrop.set_blend_mode(BLENDMODE_ADD);
+ backdrop.m_blend_mode = BLENDMODE_ADD;
m_items.splice(m_items.end(), layers.screens);
m_items.splice(m_items.end(), layers.overlays);
m_items.splice(m_items.end(), layers.backdrops);
@@ -3137,7 +3138,7 @@ layout_view::layout_view(
for (item &screen : layers.screens)
{
if (screen.blend_mode() == -1)
- screen.set_blend_mode(BLENDMODE_ADD);
+ screen.m_blend_mode = BLENDMODE_ADD;
}
m_items.splice(m_items.end(), layers.backdrops);
m_items.splice(m_items.end(), layers.screens);
@@ -3180,9 +3181,13 @@ bool layout_view::has_screen(screen_device &screen) const
void layout_view::recompute(u32 visibility_mask, bool zoom_to_screen)
{
- // reset the bounds
+ // reset the bounds and collected active items
render_bounds scrbounds{ 0.0f, 0.0f, 0.0f, 0.0f };
m_bounds = scrbounds;
+ m_screen_items.clear();
+ m_interactive_items.clear();
+ m_interactive_edges_x.clear();
+ m_interactive_edges_y.clear();
m_screens.clear();
// loop over items and filter by visibility mask
@@ -3200,7 +3205,7 @@ void layout_view::recompute(u32 visibility_mask, bool zoom_to_screen)
first = false;
// accumulate visible screens and their bounds bounds
- if (curitem.m_screen)
+ if (curitem.screen())
{
if (scrfirst)
scrbounds = curitem.m_rawbounds;
@@ -3208,9 +3213,14 @@ void layout_view::recompute(u32 visibility_mask, bool zoom_to_screen)
union_render_bounds(scrbounds, curitem.m_rawbounds);
scrfirst = false;
- // accumulate the screens in use while we're scanning
- m_screens.emplace_back(*curitem.m_screen);
+ // accumulate active screens
+ m_screen_items.emplace_back(curitem);
+ m_screens.emplace_back(*curitem.screen());
}
+
+ // accumulate interactive elements
+ if (!curitem.clickthrough() || curitem.has_input())
+ m_interactive_items.emplace_back(curitem);
}
}
@@ -3239,8 +3249,8 @@ void layout_view::recompute(u32 visibility_mask, bool zoom_to_screen)
// determine the scale/offset for normalization
float const xoffs = m_bounds.x0;
float const yoffs = m_bounds.y0;
- float const xscale = (target_bounds.x1 - target_bounds.x0) / (m_bounds.x1 - m_bounds.x0);
- float const yscale = (target_bounds.y1 - target_bounds.y0) / (m_bounds.y1 - m_bounds.y0);
+ float const xscale = target_bounds.width() / m_bounds.width();
+ float const yscale = target_bounds.height() / m_bounds.height();
// normalize all the item bounds
for (item &curitem : items())
@@ -3250,6 +3260,32 @@ void layout_view::recompute(u32 visibility_mask, bool zoom_to_screen)
curitem.m_bounds.y0 = target_bounds.y0 + (curitem.m_rawbounds.y0 - yoffs) * yscale;
curitem.m_bounds.y1 = target_bounds.y0 + (curitem.m_rawbounds.y1 - yoffs) * yscale;
}
+
+ // sort edges of interactive items
+ LOGMASKED(LOG_INTERACTIVE_ITEMS, "Recalculated view '%s' with %u interactive items\n",
+ name(), m_interactive_items.size());
+ m_interactive_edges_x.reserve(m_interactive_items.size() * 2);
+ m_interactive_edges_y.reserve(m_interactive_items.size() * 2);
+ for (unsigned i = 0; m_interactive_items.size() > i; ++i)
+ {
+ item &curitem(m_interactive_items[i]);
+ LOGMASKED(LOG_INTERACTIVE_ITEMS, "%u: (%s %s %s %s) hasinput=%s clickthrough=%s\n",
+ i, curitem.bounds().x0, curitem.bounds().y0, curitem.bounds().x1, curitem.bounds().y1, curitem.has_input(), curitem.clickthrough());
+ m_interactive_edges_x.emplace_back(i, curitem.bounds().x0, false);
+ m_interactive_edges_x.emplace_back(i, curitem.bounds().x1, true);
+ m_interactive_edges_y.emplace_back(i, curitem.bounds().y0, false);
+ m_interactive_edges_y.emplace_back(i, curitem.bounds().y1, true);
+ }
+ std::sort(m_interactive_edges_x.begin(), m_interactive_edges_x.end());
+ std::sort(m_interactive_edges_y.begin(), m_interactive_edges_y.end());
+
+ if (VERBOSE & LOG_INTERACTIVE_ITEMS)
+ {
+ for (edge const &e : m_interactive_edges_x)
+ LOGMASKED(LOG_INTERACTIVE_ITEMS, "x=%s %c%u\n", e.position(), e.trailing() ? ']' : '[', e.index());
+ for (edge const &e : m_interactive_edges_y)
+ LOGMASKED(LOG_INTERACTIVE_ITEMS, "y=%s %c%u\n", e.position(), e.trailing() ? ']' : '[', e.index());
+ }
}
@@ -3469,25 +3505,25 @@ layout_view::item::item(
: m_element(find_element(env, itemnode, elemmap))
, m_output(env.device(), env.get_attribute_string(itemnode, "name", ""))
, m_have_output(env.get_attribute_string(itemnode, "name", "")[0])
- , m_input_tag(make_input_tag(env, itemnode))
, m_input_port(nullptr)
, m_input_field(nullptr)
, m_input_mask(env.get_attribute_int(itemnode, "inputmask", 0))
- , m_input_shift(0)
- , m_input_raw(0 != env.get_attribute_int(itemnode, "inputraw", 0))
+ , m_input_shift(get_input_shift(m_input_mask))
+ , m_input_raw(env.get_attribute_bool(itemnode, "inputraw", 0))
+ , m_clickthrough(env.get_attribute_bool(itemnode, "clickthrough", "yes"))
, m_screen(nullptr)
, m_orientation(orientation_add(env.parse_orientation(itemnode.get_child("orientation")), orientation))
- , m_rawbounds(make_bounds(env, itemnode, trans))
, m_color(render_color_multiply(env.parse_color(itemnode.get_child("color")), color))
, m_blend_mode(get_blend_mode(env, itemnode))
, m_visibility_mask(env.visibility_mask())
+ , m_input_tag(make_input_tag(env, itemnode))
+ , m_rawbounds(make_bounds(env, itemnode, trans))
+ , m_has_clickthrough(env.get_attribute_string(itemnode, "clickthrough", "")[0])
{
// fetch common data
int index = env.get_attribute_int(itemnode, "index", -1);
if (index != -1)
m_screen = screen_device_iterator(env.machine().root_device()).byindex(index);
- for (u32 mask = m_input_mask; (mask != 0) && (~mask & 1); mask >>= 1)
- m_input_shift++;
// sanity checks
if (strcmp(itemnode.get_name(), "screen") == 0)
@@ -3544,24 +3580,22 @@ int layout_view::item::state() const
// if configured to track an output, fetch its value
return m_output;
}
- else if (!m_input_tag.empty())
+ else if (m_input_port)
{
// if configured to an input, fetch the input value
- if (m_input_port)
+ if (m_input_raw)
{
- if (m_input_raw)
- {
- return (m_input_port->read() & m_input_mask) >> m_input_shift;
- }
- else
- {
- ioport_field const *const field(m_input_field ? m_input_field : m_input_port->field(m_input_mask));
- if (field)
- return ((m_input_port->read() ^ field->defvalue()) & m_input_mask) ? 1 : 0;
- }
+ return (m_input_port->read() & m_input_mask) >> m_input_shift;
+ }
+ else
+ {
+ ioport_field const *const field(m_input_field ? m_input_field : m_input_port->field(m_input_mask));
+ if (field)
+ return ((m_input_port->read() ^ field->defvalue()) & m_input_mask) ? 1 : 0;
}
}
+ // default to zero
return 0;
}
@@ -3584,6 +3618,7 @@ void layout_view::item::resolve_tags()
m_input_port = m_element->machine().root_device().ioport(m_input_tag);
if (m_input_port)
{
+ // if there's a matching unconditional field, cache it
for (ioport_field &field : m_input_port->fields())
{
if (field.mask() & m_input_mask)
@@ -3593,6 +3628,10 @@ void layout_view::item::resolve_tags()
break;
}
}
+
+ // if clickthrough isn't explicitly configured, having an I/O port implies false
+ if (!m_has_clickthrough)
+ m_clickthrough = false;
}
}
}
@@ -3680,6 +3719,22 @@ int layout_view::item::get_blend_mode(view_environment &env, util::xml::data_nod
}
+//---------------------------------------------
+// get_input_shift - shift to right-align LSB
+//---------------------------------------------
+
+unsigned layout_view::item::get_input_shift(ioport_value mask)
+{
+ unsigned result(0U);
+ while (mask && !BIT(mask, 0))
+ {
+ ++result;
+ mask >>= 1;
+ }
+ return result;
+}
+
+
//**************************************************************************
// LAYOUT VIEW VISIBILITY TOGGLE
diff --git a/src/lib/netlist/devices/nld_4006.cpp b/src/lib/netlist/devices/nld_4006.cpp
index bd036c80bb0..cd0e441c6b5 100644
--- a/src/lib/netlist/devices/nld_4006.cpp
+++ b/src/lib/netlist/devices/nld_4006.cpp
@@ -99,7 +99,7 @@ namespace netlist
auto d = m_supply.VCC()() - m_supply.GND()();
if (d > 0.1) // avoid unrealistic values
{
- m_tp = netlist_time::from_nsec(923.0 / d + 13.0); // calculated from datasheet
+ m_tp = netlist_time::from_nsec(gsl::narrow_cast<unsigned>(923.0 / d + 13.0)); // calculated from datasheet
}
}
diff --git a/src/lib/netlist/plib/pmatrix2d.h b/src/lib/netlist/plib/pmatrix2d.h
index 8cbba5aa410..d0fbac26194 100755
--- a/src/lib/netlist/plib/pmatrix2d.h
+++ b/src/lib/netlist/plib/pmatrix2d.h
@@ -51,6 +51,8 @@ namespace plib
::new(&m_v[i]) T();
}
+ PCOPYASSIGNMOVE(pmatrix2d, delete)
+
~pmatrix2d()
{
if (m_v != nullptr)
diff --git a/src/lib/netlist/plib/pstream.h b/src/lib/netlist/plib/pstream.h
index 4488494e381..65d95293298 100644
--- a/src/lib/netlist/plib/pstream.h
+++ b/src/lib/netlist/plib/pstream.h
@@ -64,13 +64,15 @@ namespace plib {
}
istream_uptr(const istream_uptr &) = delete;
istream_uptr &operator=(const istream_uptr &) = delete;
- istream_uptr(istream_uptr &&rhs) /*noexcept*/
+ istream_uptr(istream_uptr &&rhs)
{
m_strm = std::move(rhs.m_strm);
- m_filename = rhs.m_filename;
+ m_filename = std::move(rhs.m_filename);
}
istream_uptr &operator=(istream_uptr &&) /*noexcept*/ = delete;
+ ~istream_uptr() = default;
+
std::istream * operator ->() noexcept { return m_strm.get(); }
std::istream & operator *() noexcept { return *m_strm; }
pstring filename() { return m_filename; }
diff --git a/src/lib/netlist/plib/pstring.h b/src/lib/netlist/plib/pstring.h
index c9c07ab738d..9a58e75fbd3 100644
--- a/src/lib/netlist/plib/pstring.h
+++ b/src/lib/netlist/plib/pstring.h
@@ -284,7 +284,7 @@ struct putf_traits<1, CT>
static constexpr code_t code(const mem_t *p) noexcept
{
- const auto *p1 = reinterpret_cast<const unsigned char *>(p); // NOLINT(cppcoreguidelines-pro-type-reinterpret)
+ const auto *p1 = reinterpret_cast<const unsigned char *>(p); // NOLINT(cppcoreguidelines-pro-type-reinterpret-cast)
return ((*p1 & 0x80) == 0x00) ? *p1 : // NOLINT
((*p1 & 0xE0) == 0xC0) ? static_cast<code_t>(((p1[0] & 0x3f) << 6) | (p1[1] & 0x3f)) : // NOLINT
((*p1 & 0xF0) == 0xE0) ? static_cast<code_t>(((p1[0] & 0x1f) << 12) | ((p1[1] & 0x3f) << 6) | ((p1[2] & 0x3f) << 0)) : // NOLINT
@@ -463,7 +463,7 @@ pstring_t<F>::pstring_t(C *string)
{
m_str.clear();
putf8string utf8(string);
- for (auto &c : utf8)
+ for (const auto &c : utf8)
*this += c;
}
diff --git a/src/mame/drivers/8080bw.cpp b/src/mame/drivers/8080bw.cpp
index 63f69dabdf5..fce3ba4df08 100644
--- a/src/mame/drivers/8080bw.cpp
+++ b/src/mame/drivers/8080bw.cpp
@@ -5310,6 +5310,7 @@ ROM_END
ROM_START( polariso )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "ps01.ic71", 0x0000, 0x0800, CRC(c04ce5a9) SHA1(62cc9b3b682ebecfb7600393862c65e26ff5263f) )
+ ROM_LOAD( "ps02.ic70", 0x0800, 0x0800, CRC(18648e4f) SHA1(9f672e108177d5d9bc004b41eec00dc4d19269ff) )
ROM_LOAD( "ps03.ic69", 0x1000, 0x0800, CRC(8680d7ea) SHA1(7fd4b8a415666c36842fed80d2798b48f8b29d0d) )
ROM_LOAD( "ps04.ic62", 0x1800, 0x0800, CRC(65694948) SHA1(de92a7f3e3ef732b573254baa60df60f8e068a5d) )
ROM_LOAD( "ps05.ic61", 0x4000, 0x0800, CRC(772e31f3) SHA1(fa0b866b6df1a9217e286ca880b3bb3fb0644bf3) )
diff --git a/src/mame/drivers/att3b2.cpp b/src/mame/drivers/att3b2.cpp
index 845f33aeb40..ba081e2e23a 100644
--- a/src/mame/drivers/att3b2.cpp
+++ b/src/mame/drivers/att3b2.cpp
@@ -23,8 +23,8 @@ public:
{
}
- void att3b2(machine_config &config);
- void att3b26(machine_config &config);
+ void att3b2v2(machine_config &config);
+ void att3b2v3(machine_config &config);
private:
void mem_map_300(address_map &map);
@@ -36,30 +36,40 @@ private:
void att3b2_state::mem_map_300(address_map &map)
{
+ map.global_mask(0x07ffffff); // 27-bit physical addresses
map(0x00000000, 0x00007fff).rom().region("bootstrap", 0);
map(0x00042000, 0x0004200f).rw("pit", FUNC(pit8253_device::read), FUNC(pit8253_device::write)).umask32(0x000000ff);
+ //map(0x00042013, 0x00042013).r(FUNC(att3b2_state::clear_csr6_r));
+ //map(0x00043000, 0x00043fff).rw(FUNC(att3b2_state::nvram_nibble_r), FUNC(att3b2_state::nvram_nibble_w)).umask32(0x00ff00ff);
+ //map(0x00044000, 0x0004403f).w(FUNC(att3b2_state::csr_w)).umask32(0x000000ff);
+ //map(0x00044002, 0x00044003).r(FUNC(att3b2_state::csr_r));
+ //map(0x00045003, 0x00045003).w(FUNC(att3b2_state::hard_disk_page_w));
map(0x00048000, 0x0004800f).rw("dmac", FUNC(am9517a_device::read), FUNC(am9517a_device::write));
map(0x00049000, 0x0004900f).rw("duart", FUNC(scn2681_device::read), FUNC(scn2681_device::write));
//map(0x0004a000, 0x0004a001).rw("hdc", FUNC(upd7261_device::read), FUNC(upd7261_device::write));
+ //map(0x0004c003, 0x0004c003).r(FUNC(att3b2_state::dpdram_size_r));
map(0x0004d000, 0x0004d003).rw("fdc", FUNC(wd2797_device::read), FUNC(wd2797_device::write));
- map(0x02000000, 0x02003fff).ram();
+ map(0x02000000, 0x0203ffff).ram();
}
void att3b2_state::mem_map_600(address_map &map)
{
map(0x00000000, 0x0001ffff).rom().region("bootstrap", 0);
- map(0x00041000, 0x0004100f).rw("pit", FUNC(pit8253_device::read), FUNC(pit8253_device::write)).umask32(0x000000ff);
+ //map(0x00040003, 0x00040003).w(FUNC(att3b2_state::floppy_control_w));
+ map(0x00041000, 0x0004100f).rw("pit", FUNC(pit8254_device::read), FUNC(pit8254_device::write)).umask32(0x000000ff);
+ //map(0x00042000, 0x00043fff).rw(FUNC(att3b2_state::nvram_byte_r), FUNC(att3b2_state::nvram_byte_w)).umask32(0x00ff00ff);
+ //map(0x00045002, 0x00045003).w(FUNC(att3b2_state::floppy_page_12bit_w));
map(0x00048000, 0x0004800f).rw("dmac", FUNC(am9517a_device::read), FUNC(am9517a_device::write));
map(0x00049000, 0x0004900f).rw("duart", FUNC(scn2681_device::read), FUNC(scn2681_device::write));
- map(0x0004a000, 0x0004a003).rw("fdc", FUNC(wd2797_device::read), FUNC(wd2797_device::write));
- map(0x02000000, 0x02003fff).mirror(0x1000000).ram();
+ map(0x0004a000, 0x0004a003).rw("fdc", FUNC(fd1793_device::read), FUNC(fd1793_device::write));
+ map(0x02000000, 0x0203ffff).mirror(0x1000000).ram();
}
static INPUT_PORTS_START(att3b2)
INPUT_PORTS_END
-void att3b2_state::att3b2(machine_config &config)
+void att3b2_state::att3b2v2(machine_config &config)
{
WE32100(config, m_maincpu, 10_MHz_XTAL); // special WE32102 XTAL runs at 1x or 2x speed
m_maincpu->set_addrmap(AS_PROGRAM, &att3b2_state::mem_map_300);
@@ -77,11 +87,15 @@ void att3b2_state::att3b2(machine_config &config)
// TODO: RTC (MM58174AN)
}
-void att3b2_state::att3b26(machine_config &config)
+void att3b2_state::att3b2v3(machine_config &config)
{
- att3b2(config);
+ att3b2v2(config);
m_maincpu->set_clock(18'000'000);
m_maincpu->set_addrmap(AS_PROGRAM, &att3b2_state::mem_map_600);
+
+ PIT8254(config.replace(), "pit"); // Intel 82C54
+
+ FD1793(config.replace(), "fdc", 1'000'000); // FD 1793-02
}
ROM_START(3b2_300)
@@ -116,7 +130,7 @@ ROM_START(3b2_600)
ROM_LOAD32_BYTE("abtrt.bin", 0x0003, 0x8000, CRC(0f075161) SHA1(b67c9c4549dc789df33b5a38e4b35fe26fdfbea6))
ROM_END
-COMP(1985, 3b2_300, 0, 0, att3b2, att3b2, att3b2_state, empty_init, "AT&T", "3B2/300", MACHINE_IS_SKELETON)
-COMP(198?, 3b2_310, 3b2_300, 0, att3b2, att3b2, att3b2_state, empty_init, "AT&T", "3B2/310", MACHINE_IS_SKELETON)
-COMP(198?, 3b2_400, 3b2_300, 0, att3b2, att3b2, att3b2_state, empty_init, "AT&T", "3B2/400", MACHINE_IS_SKELETON)
-COMP(198?, 3b2_600, 0, 0, att3b26, att3b2, att3b2_state, empty_init, "AT&T", "3B2/600", MACHINE_IS_SKELETON)
+COMP(1984, 3b2_300, 0, 0, att3b2v2, att3b2, att3b2_state, empty_init, "AT&T", "3B2/300", MACHINE_IS_SKELETON)
+COMP(1985, 3b2_310, 3b2_300, 0, att3b2v2, att3b2, att3b2_state, empty_init, "AT&T", "3B2/310", MACHINE_IS_SKELETON)
+COMP(1985, 3b2_400, 3b2_300, 0, att3b2v2, att3b2, att3b2_state, empty_init, "AT&T", "3B2/400", MACHINE_IS_SKELETON)
+COMP(1987, 3b2_600, 0, 0, att3b2v3, att3b2, att3b2_state, empty_init, "AT&T", "3B2/600", MACHINE_IS_SKELETON)
diff --git a/src/mame/drivers/bbc.cpp b/src/mame/drivers/bbc.cpp
index 9e3e0bb3da6..ce3ab361072 100644
--- a/src/mame/drivers/bbc.cpp
+++ b/src/mame/drivers/bbc.cpp
@@ -1190,7 +1190,7 @@ void bbc_state::bbcb(machine_config &config)
/* printer */
centronics_device &centronics(CENTRONICS(config, "printer", centronics_devices, "printer"));
- centronics.ack_handler().set(m_via6522_1, FUNC(via6522_device::write_ca1)).invert(); // ack seems to be inverted?
+ centronics.ack_handler().set(m_via6522_1, FUNC(via6522_device::write_ca1));
output_latch_device &latch(OUTPUT_LATCH(config, "cent_data_out"));
centronics.set_output_latch(latch);
@@ -1433,8 +1433,8 @@ void bbcbp_state::acw443(machine_config &config)
m_wd_fdc->subdevice<floppy_connector>("1")->set_default_option(nullptr);
/* 32016 co-processor */
- //m_tube->set_default_option("32016");
- //m_tube->set_fixed(true);
+ m_tube->set_default_option("32016l");
+ m_tube->set_fixed(true);
/* Acorn Winchester Disc 20MB */
m_1mhzbus->set_default_option("awhd");
@@ -1608,7 +1608,7 @@ void bbcm_state::bbcm(machine_config &config)
/* printer */
centronics_device &centronics(CENTRONICS(config, "printer", centronics_devices, "printer"));
- centronics.ack_handler().set(m_via6522_1, FUNC(via6522_device::write_ca1)).invert(); // ack seems to be inverted?
+ centronics.ack_handler().set(m_via6522_1, FUNC(via6522_device::write_ca1));
output_latch_device &latch(OUTPUT_LATCH(config, "cent_data_out"));
centronics.set_output_latch(latch);
diff --git a/src/mame/drivers/ddealer.cpp b/src/mame/drivers/ddealer.cpp
index 680d8f555e2..97e1b1fffdb 100644
--- a/src/mame/drivers/ddealer.cpp
+++ b/src/mame/drivers/ddealer.cpp
@@ -128,13 +128,11 @@ public:
ddealer_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_vregs(*this, "vregs"),
- m_left_fg_vram_top(*this, "left_fg_vratop"),
- m_right_fg_vram_top(*this, "right_fg_vratop"),
- m_left_fg_vram_bottom(*this, "left_fg_vrabot"),
- m_right_fg_vram_bottom(*this, "right_fg_vrabot"),
m_back_vram(*this, "back_vram"),
+ m_fg_vram(*this, "fg_vram"),
m_work_ram(*this, "work_ram"),
m_mcu_shared_ram(*this, "mcu_shared_ram"),
+ m_in0_io(*this, "IN0"),
m_maincpu(*this, "maincpu"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette")
@@ -145,14 +143,18 @@ public:
void init_ddealer();
private:
- void flipscreen_w(uint16_t data);
- void back_vram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
- void mcu_shared_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
- uint16_t mcu_r();
+ void flipscreen_w(u16 data);
+ void back_vram_w(offs_t offset, u16 data, u16 mem_mask = ~0);
+ void fg_vram_w(offs_t offset, u16 data, u16 mem_mask = ~0);
+ void mcu_shared_w(offs_t offset, u16 data, u16 mem_mask = ~0);
+ u16 mcu_r();
TILE_GET_INFO_MEMBER(get_back_tile_info);
- void draw_video_layer(uint16_t* vreg_base, uint16_t* top, uint16_t* bottom, bitmap_ind16 &bitmap, const rectangle &cliprect, int flipy);
- uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ TILE_GET_INFO_MEMBER(get_fg_tile_info);
+ template<unsigned Offset> TILE_GET_INFO_MEMBER(get_fg_splitted_tile_info);
+ TILEMAP_MAPPER_MEMBER(scan_fg);
+ void draw_video_layer(u16* vreg_base, tilemap_t *tmap, screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
TIMER_DEVICE_CALLBACK_MEMBER(mcu_sim);
@@ -163,14 +165,12 @@ private:
virtual void video_start() override;
// memory pointers
- required_shared_ptr<uint16_t> m_vregs;
- required_shared_ptr<uint16_t> m_left_fg_vram_top;
- required_shared_ptr<uint16_t> m_right_fg_vram_top;
- required_shared_ptr<uint16_t> m_left_fg_vram_bottom;
- required_shared_ptr<uint16_t> m_right_fg_vram_bottom;
- required_shared_ptr<uint16_t> m_back_vram;
- required_shared_ptr<uint16_t> m_work_ram;
- required_shared_ptr<uint16_t> m_mcu_shared_ram;
+ required_shared_ptr<u16> m_vregs;
+ required_shared_ptr<u16> m_back_vram;
+ required_shared_ptr<u16> m_fg_vram;
+ required_shared_ptr<u16> m_work_ram;
+ required_shared_ptr<u16> m_mcu_shared_ram;
+ required_ioport m_in0_io;
// devices
required_device<cpu_device> m_maincpu;
@@ -179,119 +179,109 @@ private:
// video-related
tilemap_t *m_back_tilemap;
+ tilemap_t *m_fg_tilemap; // overall foreground
+ // splitted foreground area
+ tilemap_t *m_fg_tilemap_left;
+ tilemap_t *m_fg_tilemap_right;
// MCU sim related
- int m_respcount;
- uint8_t m_input_pressed;
- uint16_t m_coin_input;
+ int m_respcount;
+ u8 m_input_pressed;
+ u16 m_coin_input;
};
-void ddealer_state::flipscreen_w(uint16_t data)
+void ddealer_state::flipscreen_w(u16 data)
{
flip_screen_set(data & 0x01);
}
+static inline void get_tile_info(u16 src, u32 &code, u32 &color)
+{
+ code = src & 0xfff;
+ color = (src >> 12) & 0xf;
+}
+
TILE_GET_INFO_MEMBER(ddealer_state::get_back_tile_info)
{
- int code = m_back_vram[tile_index];
+ u32 code, color;
+ get_tile_info(m_back_vram[tile_index], code, color);
tileinfo.set(0,
- code & 0xfff,
- code >> 12,
+ code,
+ color,
+ 0);
+}
+
+TILE_GET_INFO_MEMBER(ddealer_state::get_fg_tile_info)
+{
+ u32 code, color;
+ get_tile_info(m_fg_vram[tile_index], code, color);
+ tileinfo.set(1,
+ code,
+ color,
+ 0);
+}
+
+template<unsigned Offset>
+TILE_GET_INFO_MEMBER(ddealer_state::get_fg_splitted_tile_info)
+{
+ u32 code, color;
+ get_tile_info(m_fg_vram[Offset + (tile_index & 0x17ff)], code, color);
+ tileinfo.set(1,
+ code,
+ color,
0);
}
+TILEMAP_MAPPER_MEMBER(ddealer_state::scan_fg)
+{
+ return (row & 0x0f) | ((col & 0xff) << 4) | ((row & 0x10) << 8);
+}
+
void ddealer_state::video_start()
{
m_back_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(ddealer_state::get_back_tile_info)), TILEMAP_SCAN_COLS, 8, 8, 64, 32);
+ m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode,
+ tilemap_get_info_delegate(*this, FUNC(ddealer_state::get_fg_tile_info)),
+ tilemap_mapper_delegate(*this, FUNC(ddealer_state::scan_fg)),
+ 16, 16, 256, 32);
+ m_fg_tilemap_left = &machine().tilemap().create(*m_gfxdecode,
+ tilemap_get_info_delegate(*this, FUNC(ddealer_state::get_fg_splitted_tile_info<0>)),
+ tilemap_mapper_delegate(*this, FUNC(ddealer_state::scan_fg)),
+ 16, 16, 128, 32);
+ m_fg_tilemap_right = &machine().tilemap().create(*m_gfxdecode,
+ tilemap_get_info_delegate(*this, FUNC(ddealer_state::get_fg_splitted_tile_info<0x800>)),
+ tilemap_mapper_delegate(*this, FUNC(ddealer_state::scan_fg)),
+ 16, 16, 128, 32);
+
+ m_fg_tilemap->set_transparent_pen(15);
+ m_fg_tilemap_left->set_transparent_pen(15);
+ m_fg_tilemap_right->set_transparent_pen(15);
+
m_back_tilemap->set_scrolldx(64,64);
+ m_fg_tilemap->set_scrolldx(64,64);
+ m_fg_tilemap_left->set_scrolldx(64,64);
+ m_fg_tilemap_right->set_scrolldx(64,64);
}
-void ddealer_state::draw_video_layer(uint16_t* vreg_base, uint16_t* top, uint16_t* bottom, bitmap_ind16 &bitmap, const rectangle &cliprect, int flipy)
+void ddealer_state::draw_video_layer(u16* vreg_base, tilemap_t *tmap, screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- gfx_element *gfx = m_gfxdecode->gfx(1);
-
- int16_t sx, sy;
- int x,y, count;
- uint16_t* src;
+ int sx, sy;
sx = ((vreg_base[0x4 / 2] & 0xff));
sx |= ((vreg_base[0x2 / 2] & 0xff) << 8);
- sx &= 0x7ff;
- if (sx & 0x400) sx -= 0x800;
-
sy = ((vreg_base[0x8 / 2] & 0xff));
sy |= ((vreg_base[0x6 / 2] & 0xff) << 8);
- if (!flipy)
- {
- sx -= 64; // video shift
-
- /* the tilemaps seems to be split into top / bottom pieces */
- count = 0;
- src = top;
- for (x = 0; x < 128; x++)
- {
- for (y = 0; y < 16; y++)
- {
- uint16_t tile = (src[count] & 0x0fff);
- uint16_t colr = (src[count] & 0xf000) >> 12;
- count++;
- gfx->transpen(bitmap,cliprect, tile, colr, 0, flipy, (x * 16) - sx, (y * 16) - sy, 15);
- }
- }
- count = 0;
- src = bottom;
- sy -= 256;
- for (x = 0; x < 128; x++)
- {
- for (y = 0; y < 16; y++)
- {
- uint16_t tile = (src[count] & 0x0fff);
- uint16_t colr = (src[count] & 0xf000) >> 12;
- count++;
- gfx->transpen(bitmap,cliprect, tile, colr, 0, flipy, (x * 16) - sx, (y * 16) - sy, 15);
- }
- }
- }
- else
- {
- sx -= 0x6d0;
- sy -= 16;
-
- /* the tilemaps seems to be split into top / bottom pieces */
- count = 0;
- src = top;
- for (x = 128; x > 0; x--)
- {
- for (y = 16; y > 0; y--)
- {
- uint16_t tile = (src[count] & 0x0fff);
- uint16_t colr = (src[count] & 0xf000) >> 12;
- count++;
- gfx->transpen(bitmap,cliprect, tile, colr, flipy, flipy, (x * 16) + sx, (y * 16) + sy, 15);
- }
- }
- count = 0;
- src = bottom;
- sy -= 256;
- for (x = 128; x > 0; x--)
- {
- for (y = 16; y > 0; y--)
- {
- uint16_t tile = (src[count] & 0x0fff);
- uint16_t colr = (src[count] & 0xf000) >> 12;
- count++;
- gfx->transpen(bitmap,cliprect, tile, colr, flipy, flipy, (x * 16) + sx, (y * 16) + sy, 15);
- }
- }
- }
+ tmap->set_scrollx(sx);
+ tmap->set_scrolly(sy);
+ tmap->draw(screen, bitmap, cliprect, 0, 0);
}
-uint32_t ddealer_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+u32 ddealer_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
m_back_tilemap->draw(screen, bitmap, cliprect, 0, 0);
@@ -306,26 +296,25 @@ uint32_t ddealer_state::screen_update(screen_device &screen, bitmap_ind16 &bitma
{
if (m_vregs[0xcc / 2] & 0x80)
{
- draw_video_layer(&m_vregs[0x1e0 / 2], m_left_fg_vram_top, m_left_fg_vram_bottom, bitmap, cliprect, flip);
- draw_video_layer(&m_vregs[0xcc / 2], m_right_fg_vram_top, m_right_fg_vram_bottom, bitmap, cliprect, flip);
+ draw_video_layer(&m_vregs[0x1e0 / 2], m_fg_tilemap_left, screen, bitmap, cliprect);
+ draw_video_layer(&m_vregs[0xcc / 2], m_fg_tilemap_right, screen, bitmap, cliprect);
}
else
{
- draw_video_layer(&m_vregs[0x1e0 / 2], m_left_fg_vram_top, m_left_fg_vram_bottom, bitmap, cliprect, flip);
+ draw_video_layer(&m_vregs[0x1e0 / 2], m_fg_tilemap, screen, bitmap, cliprect);
}
}
else
{
if (m_vregs[0xcc / 2] & 0x80)
{
- draw_video_layer(&m_vregs[0xcc / 2], m_left_fg_vram_top, m_left_fg_vram_bottom, bitmap, cliprect, flip);
- draw_video_layer(&m_vregs[0x1e0 / 2], m_right_fg_vram_top, m_right_fg_vram_bottom, bitmap, cliprect, flip);
+ draw_video_layer(&m_vregs[0xcc / 2], m_fg_tilemap_left, screen, bitmap, cliprect);
+ draw_video_layer(&m_vregs[0x1e0 / 2], m_fg_tilemap_right, screen, bitmap, cliprect);
}
else
{
- draw_video_layer(&m_vregs[0x1e0 / 2], m_left_fg_vram_top, m_left_fg_vram_bottom, bitmap, cliprect, flip);
+ draw_video_layer(&m_vregs[0x1e0 / 2], m_fg_tilemap, screen, bitmap, cliprect);
}
-
}
return 0;
@@ -340,7 +329,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(ddealer_state::mcu_sim)
/*$fe002 is used,might be for multiple coins for one credit settings.*/
// TODO: I'm not bothering with coin/credit settings until this actually work properly
// (game is currently hardwired to free play)
- m_coin_input = (~(ioport("IN0")->read()));
+ m_coin_input = (~(m_in0_io->read()));
if (m_coin_input & 0x01)//coin 1
{
@@ -401,12 +390,22 @@ TIMER_DEVICE_CALLBACK_MEMBER(ddealer_state::mcu_sim)
-void ddealer_state::back_vram_w(offs_t offset, uint16_t data, uint16_t mem_mask)
+void ddealer_state::back_vram_w(offs_t offset, u16 data, u16 mem_mask)
{
COMBINE_DATA(&m_back_vram[offset]);
m_back_tilemap->mark_tile_dirty(offset);
}
+void ddealer_state::fg_vram_w(offs_t offset, u16 data, u16 mem_mask)
+{
+ COMBINE_DATA(&m_fg_vram[offset]);
+ m_fg_tilemap->mark_tile_dirty(offset);
+ if (offset & 0x800)
+ m_fg_tilemap_right->mark_tile_dirty(offset & 0x17ff);
+ else
+ m_fg_tilemap_left->mark_tile_dirty(offset & 0x17ff);
+}
+
/******************************************************************************************************
@@ -429,7 +428,7 @@ Protection handling, identical to Hacha Mecha Fighter / Thunder Dragon with diff
m_mcu_shared_ram[_protinput_+1] = (_input_ & 0x0000ffff);\
}
-void ddealer_state::mcu_shared_w(offs_t offset, uint16_t data, uint16_t mem_mask)
+void ddealer_state::mcu_shared_w(offs_t offset, u16 data, u16 mem_mask)
{
COMBINE_DATA(&m_mcu_shared_ram[offset]);
@@ -499,10 +498,7 @@ void ddealer_state::ddealer_map(address_map &map)
/* this might actually be 1 tilemap with some funky rowscroll / columnscroll enabled, I'm not sure */
// certainly seems derivative of the design used in Urashima Mahjong (jalmah.cpp), not identical tho
- map(0x090000, 0x090fff).ram().share("left_fg_vratop");
- map(0x091000, 0x091fff).ram().share("right_fg_vratop");
- map(0x092000, 0x092fff).ram().share("left_fg_vrabot");
- map(0x093000, 0x093fff).ram().share("right_fg_vrabot");
+ map(0x090000, 0x093fff).ram().w(FUNC(ddealer_state::fg_vram_w)).share("fg_vram"); // fg tilemap
// map(0x094000, 0x094001).noprw(); // Set at POST via clr.w, unused afterwards
map(0x098000, 0x098001).w(FUNC(ddealer_state::flipscreen_w));
map(0x09c000, 0x09cfff).ram().w(FUNC(ddealer_state::back_vram_w)).share("back_vram"); // bg tilemap
@@ -587,8 +583,8 @@ static INPUT_PORTS_START( ddealer )
INPUT_PORTS_END
static GFXDECODE_START( gfx_ddealer )
- GFXDECODE_ENTRY( "gfx1", 0, gfx_8x8x4_packed_msb, 0x000, 16 )
- GFXDECODE_ENTRY( "gfx2", 0, gfx_8x8x4_col_2x2_group_packed_msb, 0x100, 16 )
+ GFXDECODE_ENTRY( "bgrom", 0, gfx_8x8x4_packed_msb, 0x000, 16 )
+ GFXDECODE_ENTRY( "fgrom", 0, gfx_8x8x4_col_2x2_group_packed_msb, 0x100, 16 )
GFXDECODE_END
void ddealer_state::machine_start()
@@ -634,7 +630,7 @@ void ddealer_state::ddealer(machine_config &config)
-uint16_t ddealer_state::mcu_r()
+u16 ddealer_state::mcu_r()
{
static const int resp[] =
{
@@ -648,7 +644,10 @@ uint16_t ddealer_state::mcu_r()
int res;
- res = resp[m_respcount++];
+ res = resp[m_respcount];
+ if (!machine().side_effects_disabled())
+ m_respcount++;
+
if (resp[m_respcount] < 0)
m_respcount = 0;
@@ -668,10 +667,10 @@ ROM_START( ddealer )
ROM_REGION( 0x40000, "mcu", 0 ) /* M50747? MCU Code */
ROM_LOAD( "mcu", 0x0000, 0x1000, NO_DUMP ) // might be NMK-110 8131 chip
- ROM_REGION( 0x20000, "gfx1", 0 ) /* BG0 */
+ ROM_REGION( 0x20000, "bgrom", 0 ) /* BG */
ROM_LOAD( "4.ic65", 0x00000, 0x20000, CRC(4939ff1b) SHA1(af2f2feeef5520d775731a58cbfc8fcc913b7348) )
- ROM_REGION( 0x80000, "gfx2", 0 ) /* BG1 */
+ ROM_REGION( 0x80000, "fgrom", 0 ) /* FG */
ROM_LOAD( "3.ic64", 0x00000, 0x80000, CRC(660e367c) SHA1(54827a8998c58c578c594126d5efc18a92363eaa))
ROM_REGION( 0x200, "user1", 0 ) /* Proms */
diff --git a/src/mame/drivers/electron.cpp b/src/mame/drivers/electron.cpp
index 4e0f88eef8d..83764b30a6d 100644
--- a/src/mame/drivers/electron.cpp
+++ b/src/mame/drivers/electron.cpp
@@ -121,7 +121,7 @@ void electron_state::electron64_opcodes(address_map &map)
INPUT_CHANGED_MEMBER(electron_state::trigger_reset)
{
m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? ASSERT_LINE : CLEAR_LINE);
- if (!newval)
+ if (newval)
{
m_exp->reset();
}
@@ -251,6 +251,7 @@ void electron_state::electron(machine_config &config)
{
M6502(config, m_maincpu, 16_MHz_XTAL / 8);
m_maincpu->set_addrmap(AS_PROGRAM, &electron_state::electron_mem);
+ config.set_perfect_quantum(m_maincpu);
INPUT_MERGER_ANY_HIGH(config, m_irqs).output_handler().set_inputline(m_maincpu, M6502_IRQ_LINE);
diff --git a/src/mame/drivers/generalplus_gpl16250.cpp b/src/mame/drivers/generalplus_gpl16250.cpp
index edbe9be0262..03b81821bfe 100644
--- a/src/mame/drivers/generalplus_gpl16250.cpp
+++ b/src/mame/drivers/generalplus_gpl16250.cpp
@@ -136,7 +136,7 @@ void gcm394_game_state::porta_w(uint16_t data)
void gcm394_game_state::base(machine_config &config)
{
- GCM394(config, m_maincpu, 96000000/2, m_screen);
+ GCM394(config, m_maincpu, 96000000, m_screen);
m_maincpu->porta_in().set(FUNC(gcm394_game_state::porta_r));
m_maincpu->portb_in().set(FUNC(gcm394_game_state::portb_r));
m_maincpu->portc_in().set(FUNC(gcm394_game_state::portc_r));
diff --git a/src/mame/drivers/generalplus_gpl16250_romram.cpp b/src/mame/drivers/generalplus_gpl16250_romram.cpp
index fa26a3ca73f..b3d4215d5e7 100644
--- a/src/mame/drivers/generalplus_gpl16250_romram.cpp
+++ b/src/mame/drivers/generalplus_gpl16250_romram.cpp
@@ -191,7 +191,96 @@ static INPUT_PORTS_START( paccon ) // for Test Mode hold buttons 1+2 until the s
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
INPUT_PORTS_END
+static INPUT_PORTS_START( jak_ths )
+ PORT_START("IN0")
+ PORT_DIPNAME( 0x0001, 0x0001, "IN0" )
+ PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP )
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN )
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT )
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT )
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("A")
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("B")
+ PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON3 )
+ PORT_START("IN1")
+ PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNUSED )
+
+ PORT_START("IN2")
+ PORT_DIPNAME( 0x0001, 0x0001, "IN2" )
+ PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+INPUT_PORTS_END
uint16_t wrlshunt_game_state::cs0_r(offs_t offset)
{
@@ -241,18 +330,11 @@ void wrlshunt_game_state::init_ths()
m_sdram.resize(0x400000); // 0x400000 words, 0x800000 bytes (verify)
}
-void wrlshunt_game_state::wrlshunt(machine_config &config)
+void wrlshunt_game_state::gpl16250_romram(machine_config &config)
{
gcm394_game_state::base(config);
}
-void wrlshunt_game_state::paccon(machine_config &config)
-{
- gcm394_game_state::base(config);
-
- m_maincpu->set_clock(96000000); // needs to be somewhere in this region or the emulator running on the SunPlus is too slow
-}
-
uint16_t wrlshunt_game_state::porta_r()
{
uint16_t data = m_io[0]->read();
@@ -534,17 +616,17 @@ which is also found in the Wireless Air 60 ROM.
// also sold as "Pac-Man Connect & Play 35th Anniversary" (same ROM?)
-CONS(2012, paccon, 0, 0, paccon, paccon, paccon_game_state, init_wrlshunt, "Bandai", "Pac-Man Connect & Play (Feb 14 2012 10:46:23)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
+CONS(2012, paccon, 0, 0, gpl16250_romram, paccon, paccon_game_state, init_wrlshunt, "Bandai", "Pac-Man Connect & Play (Feb 14 2012 10:46:23)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
-CONS(2008, lazertag, 0, 0, wrlshunt, jak_s500, lazertag_game_state, init_wrlshunt, "Tiger Electronics", "Lazer Tag Video Game Module", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
+CONS(2008, lazertag, 0, 0, gpl16250_romram, jak_s500, lazertag_game_state, init_wrlshunt, "Tiger Electronics", "Lazer Tag Video Game Module", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
-CONS(2009, jak_s500, 0, 0, wrlshunt, jak_s500, jak_s500_game_state, init_wrlshunt, "JAKKS Pacific Inc / HotGen Ltd", "SpongeBob SquarePants Bikini Bottom 500 (JAKKS Pacific TV Motion Game)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
-CONS(2009, jak_smwm, 0, 0, wrlshunt, jak_s500, jak_s500_game_state, init_wrlshunt, "JAKKS Pacific Inc / HotGen Ltd", "Spider-Man Web Master (JAKKS Pacific TV Motion Game)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
-CONS(2010, jak_pf, 0, 0, wrlshunt, jak_s500, jak_pf_game_state, init_wrlshunt, "JAKKS Pacific Inc / HotGen Ltd", "Phineas and Ferb: Best Game Ever! (JAKKS Pacific TV Motion Game)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND) // build date is 2009, but onscreen display is 2010
-CONS(200?, jak_totm, 0, 0, wrlshunt, jak_s500, jak_s500_game_state, init_wrlshunt, "JAKKS Pacific Inc / HotGen Ltd", "Toy Story - Toys on the Move (JAKKS Pacific TV Motion Game)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND) // Toys on the Move has ISSI 404A
-CONS(2009, jak_prft, 0, 0, wrlshunt, jak_s500, jak_prft_game_state, init_wrlshunt, "JAKKS Pacific Inc / Santa Cruz Games", "Power Rangers Force In Time (JAKKS Pacific TV Motion Game)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
-CONS(2009, jak_tink, 0, 0, wrlshunt, jak_s500, jak_prft_game_state, init_wrlshunt, "JAKKS Pacific Inc / Santa Cruz Games", "Tinker Bell and the Lost Treasure (JAKKS Pacific TV Motion Game)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
-CONS(2009, jak_ths, 0, 0, wrlshunt, jak_s500, jak_s500_game_state, init_ths, "JAKKS Pacific Inc / Super Happy Fun Fun", "Triple Header Sports (JAKKS Pacific TV Motion Game)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
+CONS(2009, jak_s500, 0, 0, gpl16250_romram, jak_s500, jak_s500_game_state, init_wrlshunt, "JAKKS Pacific Inc / HotGen Ltd", "SpongeBob SquarePants Bikini Bottom 500 (JAKKS Pacific TV Motion Game)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
+CONS(2009, jak_smwm, 0, 0, gpl16250_romram, jak_s500, jak_s500_game_state, init_wrlshunt, "JAKKS Pacific Inc / HotGen Ltd", "Spider-Man Web Master (JAKKS Pacific TV Motion Game)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
+CONS(2010, jak_pf, 0, 0, gpl16250_romram, jak_s500, jak_pf_game_state, init_wrlshunt, "JAKKS Pacific Inc / HotGen Ltd", "Phineas and Ferb: Best Game Ever! (JAKKS Pacific TV Motion Game)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND) // build date is 2009, but onscreen display is 2010
+CONS(200?, jak_totm, 0, 0, gpl16250_romram, jak_s500, jak_s500_game_state, init_wrlshunt, "JAKKS Pacific Inc / HotGen Ltd", "Toy Story - Toys on the Move (JAKKS Pacific TV Motion Game)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND) // Toys on the Move has ISSI 404A
+CONS(2009, jak_prft, 0, 0, gpl16250_romram, jak_s500, jak_prft_game_state, init_wrlshunt, "JAKKS Pacific Inc / Santa Cruz Games", "Power Rangers Force In Time (JAKKS Pacific TV Motion Game)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
+CONS(2009, jak_tink, 0, 0, gpl16250_romram, jak_s500, jak_prft_game_state, init_wrlshunt, "JAKKS Pacific Inc / Santa Cruz Games", "Tinker Bell and the Lost Treasure (JAKKS Pacific TV Motion Game)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
+CONS(2009, jak_ths, 0, 0, gpl16250_romram, jak_ths, jak_s500_game_state, init_ths, "JAKKS Pacific Inc / Super Happy Fun Fun", "Triple Header Sports (JAKKS Pacific TV Motion Game)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
-CONS(2011, wrlshunt, 0, 0, wrlshunt, wrlshunt, wrlshunt_game_state, init_wrlshunt, "Hamy / Kids Station Toys Inc", "Wireless Hunting Video Game System", MACHINE_NO_SOUND | MACHINE_NOT_WORKING)
+CONS(2011, wrlshunt, 0, 0, gpl16250_romram, wrlshunt, wrlshunt_game_state, init_wrlshunt, "Hamy / Kids Station Toys Inc", "Wireless Hunting Video Game System", MACHINE_NO_SOUND | MACHINE_NOT_WORKING)
diff --git a/src/mame/drivers/generalplus_gpl_unknown.cpp b/src/mame/drivers/generalplus_gpl_unknown.cpp
index 5d2dfa7d39f..7560eddf55b 100644
--- a/src/mame/drivers/generalplus_gpl_unknown.cpp
+++ b/src/mame/drivers/generalplus_gpl_unknown.cpp
@@ -3,8 +3,10 @@
// these contain the similar game selections to the games in unk6502_st2xxx.cpp but on updated hardware
-// These use SPI ROMs and unSP2.0 instructions, so will be GeneralPlus branded parts, not SunPlus
-// possibly the framebuffer based video ones rather than the ones with tile layers
+/* These use SPI ROMs and unSP2.0 instructions, so will be GeneralPlus branded parts, not SunPlus
+ this might just be a GPL16250 with the video features bypassed as the sprite/palette banking is still
+ used, but the RAM treated as work buffers
+*/
/*
@@ -317,9 +319,7 @@ static INPUT_PORTS_START( pcp8718 )
PORT_DIPSETTING( 0x8000, "8000" )
PORT_START("IN1")
- PORT_DIPNAME( 0x0001, 0x0001, "P2:0001" )
- PORT_DIPSETTING( 0x0000, "0000" )
- PORT_DIPSETTING( 0x0001, "0001" )
+ PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_UNUSED ) // causes lag if state is inverted, investigate
PORT_DIPNAME( 0x0002, 0x0002, "P2:0002" )
PORT_DIPSETTING( 0x0000, "0000" )
PORT_DIPSETTING( 0x0002, "0002" )
@@ -1101,7 +1101,7 @@ WRITE_LINE_MEMBER(pcp8718_state::screen_vblank)
void pcp8718_state::pcp8718(machine_config &config)
{
- UNSP_20(config, m_maincpu, 100000000); // unknown CPU, unsp20 based, must be clocked ~100Mhz, maybe higher (or cycles per instruction needs to be lower for unSP 2.0)
+ UNSP_20(config, m_maincpu, 96000000); // unknown CPU, unsp20 based, 96Mhz is listed as the maximum for most unSP2.0 chips, and appears correct here
m_maincpu->set_addrmap(AS_PROGRAM, &pcp8718_state::map);
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
diff --git a/src/mame/drivers/geniusiq.cpp b/src/mame/drivers/geniusiq.cpp
index 0790fb0428c..9350d3c4989 100644
--- a/src/mame/drivers/geniusiq.cpp
+++ b/src/mame/drivers/geniusiq.cpp
@@ -487,7 +487,7 @@ static INPUT_PORTS_START( geniusiq )
PORT_START( "IN2" )
PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE( KEYCODE_0 ) PORT_CHAR(0x00e0) PORT_CHAR('0') PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x20 )
PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Return") PORT_CODE( KEYCODE_ENTER ) PORT_CHAR(13) PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x21 )
- PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Backspace") PORT_CODE( KEYCODE_BACKSPACE ) PORT_CHAR(UCHAR_MAMEKEY(BACKSPACE)) PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x22 )
+ PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Backspace") PORT_CODE( KEYCODE_BACKSPACE ) PORT_CHAR(8) PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x22 )
PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE( KEYCODE_L ) PORT_CHAR('l') PORT_CHAR('L') PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x23 )
PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE( KEYCODE_O ) PORT_CHAR('o') PORT_CHAR('O') PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x24 )
PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE( KEYCODE_9 ) PORT_CHAR(0x00e7) PORT_CHAR('9') PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x25 )
@@ -610,7 +610,7 @@ static INPUT_PORTS_START( geniusiq_de )
PORT_MODIFY( "IN1" )
PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE( KEYCODE_QUOTE ) PORT_CHAR('^') PORT_CHAR(0x00b0) PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x17 )
PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE( KEYCODE_BACKSLASH ) PORT_CHAR('+') PORT_CHAR('*') PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x18 )
- PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE( KEYCODE_EQUALS ) PORT_CHAR('{') PORT_CHAR('}') PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x19 )
+ PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE( KEYCODE_EQUALS ) PORT_CHAR('}') PORT_CHAR('{') PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x19 )
PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE( KEYCODE_CLOSEBRACE ) PORT_CHAR(0x00b0) PORT_CHAR('?') PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x1a )
PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE( KEYCODE_OPENBRACE ) PORT_CHAR(0x00e4) PORT_CHAR(0x00c4) PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x1b )
PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE( KEYCODE_SLASH ) PORT_CHAR(0x00fc) PORT_CHAR(0x00dc) PORT_CHANGED_MEMBER( DEVICE_SELF, geniusiq_state, send_input, 0x1c )
diff --git a/src/mame/drivers/hp80.cpp b/src/mame/drivers/hp80.cpp
index 57196acec6c..e4b67eaab56 100644
--- a/src/mame/drivers/hp80.cpp
+++ b/src/mame/drivers/hp80.cpp
@@ -1468,50 +1468,50 @@ static INPUT_PORTS_START(hp85)
PORT_BIT(IOP_MASK(13) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#') // 1,5: 3
PORT_BIT(IOP_MASK(14) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('@') // 1,6: 2
PORT_BIT(IOP_MASK(15) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!') // 1,7: 1
- PORT_BIT(IOP_MASK(16) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I') // 2,0: I
- PORT_BIT(IOP_MASK(17) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U') // 2,1: U
- PORT_BIT(IOP_MASK(18) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y') // 2,2: Y
- PORT_BIT(IOP_MASK(19) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T') // 2,3: T
- PORT_BIT(IOP_MASK(20) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R') // 2,4: R
- PORT_BIT(IOP_MASK(21) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E') // 2,5: E
- PORT_BIT(IOP_MASK(22) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W') // 2,6: W
- PORT_BIT(IOP_MASK(23) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q') // 2,7: Q
- PORT_BIT(IOP_MASK(24) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K') // 3,0: K
- PORT_BIT(IOP_MASK(25) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J') // 3,1: J
- PORT_BIT(IOP_MASK(26) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H') // 3,2: H
- PORT_BIT(IOP_MASK(27) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G') // 3,3: G
- PORT_BIT(IOP_MASK(28) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F') // 3,4: F
- PORT_BIT(IOP_MASK(29) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D') // 3,5: D
- PORT_BIT(IOP_MASK(30) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S') // 3,6: S
- PORT_BIT(IOP_MASK(31) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A') // 3,7: A
+ PORT_BIT(IOP_MASK(16) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('I') PORT_CHAR('i') // 2,0: I
+ PORT_BIT(IOP_MASK(17) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('U') PORT_CHAR('u') // 2,1: U
+ PORT_BIT(IOP_MASK(18) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('Y') PORT_CHAR('y') // 2,2: Y
+ PORT_BIT(IOP_MASK(19) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('T') PORT_CHAR('t') // 2,3: T
+ PORT_BIT(IOP_MASK(20) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('R') PORT_CHAR('r') // 2,4: R
+ PORT_BIT(IOP_MASK(21) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('E') PORT_CHAR('e') // 2,5: E
+ PORT_BIT(IOP_MASK(22) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('W') PORT_CHAR('w') // 2,6: W
+ PORT_BIT(IOP_MASK(23) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('Q') PORT_CHAR('q') // 2,7: Q
+ PORT_BIT(IOP_MASK(24) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('K') PORT_CHAR('k') // 3,0: K
+ PORT_BIT(IOP_MASK(25) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('J') PORT_CHAR('j') // 3,1: J
+ PORT_BIT(IOP_MASK(26) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('H') PORT_CHAR('h') // 3,2: H
+ PORT_BIT(IOP_MASK(27) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('G') PORT_CHAR('g') // 3,3: G
+ PORT_BIT(IOP_MASK(28) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('F') PORT_CHAR('f') // 3,4: F
+ PORT_BIT(IOP_MASK(29) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('D') PORT_CHAR('d') // 3,5: D
+ PORT_BIT(IOP_MASK(30) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('S') PORT_CHAR('s') // 3,6: S
+ PORT_BIT(IOP_MASK(31) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('A') PORT_CHAR('a') // 3,7: A
PORT_START("KEY1")
- PORT_BIT(IOP_MASK(0) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M') // 4,0: M
- PORT_BIT(IOP_MASK(1) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N') // 4,1: N
- PORT_BIT(IOP_MASK(2) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B') // 4,2: B
- PORT_BIT(IOP_MASK(3) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V') // 4,3: V
- PORT_BIT(IOP_MASK(4) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C') // 4,4: C
- PORT_BIT(IOP_MASK(5) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X') // 4,5: X
- PORT_BIT(IOP_MASK(6) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z') // 4,6: Z
+ PORT_BIT(IOP_MASK(0) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('M') PORT_CHAR('m') // 4,0: M
+ PORT_BIT(IOP_MASK(1) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('N') PORT_CHAR('n') // 4,1: N
+ PORT_BIT(IOP_MASK(2) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('B') PORT_CHAR('b') // 4,2: B
+ PORT_BIT(IOP_MASK(3) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('V') PORT_CHAR('v') // 4,3: V
+ PORT_BIT(IOP_MASK(4) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('C') PORT_CHAR('c') // 4,4: C
+ PORT_BIT(IOP_MASK(5) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('X') PORT_CHAR('x') // 4,5: X
+ PORT_BIT(IOP_MASK(6) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('Z') PORT_CHAR('z') // 4,6: Z
PORT_BIT(IOP_MASK(7) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ') // 4,7: Space
PORT_BIT(IOP_MASK(8) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<') // 5,0: ,
PORT_BIT(IOP_MASK(9) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>') // 5,1: .
PORT_BIT(IOP_MASK(10) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?') // 5,2: / ?
PORT_BIT(IOP_MASK(11) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("PAUSE STEP") // 5,3: PAUSE / STEP
PORT_BIT(IOP_MASK(12) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("RUN") // 5,4: RUN
- PORT_BIT(IOP_MASK(13) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_PLUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(PLUS_PAD)) PORT_NAME("KP +") // 5,5: KP +
- PORT_BIT(IOP_MASK(14) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(MINUS_PAD)) PORT_NAME("KP -") // 5,6: KP -
- PORT_BIT(IOP_MASK(15) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_ASTERISK) PORT_CHAR(UCHAR_MAMEKEY(ASTERISK)) PORT_NAME("KP *") // 5,7: KP * (not sure)
- PORT_BIT(IOP_MASK(16) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L') // 6,0: L
+ PORT_BIT(IOP_MASK(13) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_PLUS_PAD) PORT_NAME("KP +") // 5,5: KP +
+ PORT_BIT(IOP_MASK(14) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS_PAD) PORT_NAME("KP -") // 5,6: KP -
+ PORT_BIT(IOP_MASK(15) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_ASTERISK) PORT_NAME("KP *") // 5,7: KP * (not sure)
+ PORT_BIT(IOP_MASK(16) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('L') PORT_CHAR('l') // 6,0: L
PORT_BIT(IOP_MASK(17) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR(':') // 6,1: ;
PORT_BIT(IOP_MASK(18) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('\'') PORT_CHAR('"') // 6,2: ' "
PORT_BIT(IOP_MASK(19) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13) PORT_NAME("END LINE") // 6,3: END LINE
PORT_BIT(IOP_MASK(20) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("LIST P LST") // 6,4: LIST / P LST
PORT_BIT(IOP_MASK(21) , IP_ACTIVE_HIGH , IPT_UNUSED) // 6,5: N/U
PORT_BIT(IOP_MASK(22) , IP_ACTIVE_HIGH , IPT_UNUSED) // 6,6: N/U
- PORT_BIT(IOP_MASK(23) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH_PAD) PORT_CHAR(UCHAR_MAMEKEY(SLASH_PAD)) PORT_NAME("KP /") // 6,7: KP /
- PORT_BIT(IOP_MASK(24) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O') // 7,0: O
- PORT_BIT(IOP_MASK(25) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P') // 7,1: P
+ PORT_BIT(IOP_MASK(23) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH_PAD) PORT_NAME("KP /") // 6,7: KP /
+ PORT_BIT(IOP_MASK(24) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('O') PORT_CHAR('o') // 7,0: O
+ PORT_BIT(IOP_MASK(25) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('P') PORT_CHAR('p') // 7,1: P
PORT_BIT(IOP_MASK(26) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('(') PORT_CHAR('[') // 7,2: ( [
PORT_BIT(IOP_MASK(27) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(')') PORT_CHAR(']') // 7,3: ) ]
PORT_BIT(IOP_MASK(28) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("CONT SCRATCH") // 7,4: CONT / SCRATCH
@@ -1520,8 +1520,8 @@ static INPUT_PORTS_START(hp85)
PORT_BIT(IOP_MASK(31) , IP_ACTIVE_HIGH , IPT_UNUSED) // 7,7: N/U
PORT_START("KEY2")
- PORT_BIT(IOP_MASK(0) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR('(') // 8,0: 9
- PORT_BIT(IOP_MASK(1) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR(')') // 8,1: 0
+ PORT_BIT(IOP_MASK(0) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') // 8,0: 9
+ PORT_BIT(IOP_MASK(1) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') // 8,1: 0
PORT_BIT(IOP_MASK(2) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('_') // 8,2: - _
PORT_BIT(IOP_MASK(3) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') PORT_CHAR('+') // 8,3: = +
PORT_BIT(IOP_MASK(4) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_TILDE) PORT_CHAR('\\') PORT_CHAR('|') // 8,4: \ |
@@ -2141,50 +2141,50 @@ static INPUT_PORTS_START(hp86)
PORT_BIT(IOP_MASK(13) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#') // 1,5: 3
PORT_BIT(IOP_MASK(14) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('@') // 1,6: 2
PORT_BIT(IOP_MASK(15) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!') // 1,7: 1
- PORT_BIT(IOP_MASK(16) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I') // 2,0: I
- PORT_BIT(IOP_MASK(17) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U') // 2,1: U
- PORT_BIT(IOP_MASK(18) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y') // 2,2: Y
- PORT_BIT(IOP_MASK(19) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T') // 2,3: T
- PORT_BIT(IOP_MASK(20) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R') // 2,4: R
- PORT_BIT(IOP_MASK(21) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E') // 2,5: E
- PORT_BIT(IOP_MASK(22) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W') // 2,6: W
- PORT_BIT(IOP_MASK(23) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q') // 2,7: Q
- PORT_BIT(IOP_MASK(24) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K') // 3,0: K
- PORT_BIT(IOP_MASK(25) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J') // 3,1: J
- PORT_BIT(IOP_MASK(26) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H') // 3,2: H
- PORT_BIT(IOP_MASK(27) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G') // 3,3: G
- PORT_BIT(IOP_MASK(28) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F') // 3,4: F
- PORT_BIT(IOP_MASK(29) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D') // 3,5: D
- PORT_BIT(IOP_MASK(30) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S') // 3,6: S
- PORT_BIT(IOP_MASK(31) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A') // 3,7: A
+ PORT_BIT(IOP_MASK(16) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('I') PORT_CHAR('i') // 2,0: I
+ PORT_BIT(IOP_MASK(17) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('U') PORT_CHAR('u') // 2,1: U
+ PORT_BIT(IOP_MASK(18) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('Y') PORT_CHAR('y') // 2,2: Y
+ PORT_BIT(IOP_MASK(19) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('T') PORT_CHAR('t') // 2,3: T
+ PORT_BIT(IOP_MASK(20) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('R') PORT_CHAR('r') // 2,4: R
+ PORT_BIT(IOP_MASK(21) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('E') PORT_CHAR('e') // 2,5: E
+ PORT_BIT(IOP_MASK(22) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('W') PORT_CHAR('w') // 2,6: W
+ PORT_BIT(IOP_MASK(23) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('Q') PORT_CHAR('q') // 2,7: Q
+ PORT_BIT(IOP_MASK(24) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('K') PORT_CHAR('k') // 3,0: K
+ PORT_BIT(IOP_MASK(25) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('J') PORT_CHAR('j') // 3,1: J
+ PORT_BIT(IOP_MASK(26) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('H') PORT_CHAR('h') // 3,2: H
+ PORT_BIT(IOP_MASK(27) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('G') PORT_CHAR('g') // 3,3: G
+ PORT_BIT(IOP_MASK(28) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('F') PORT_CHAR('f') // 3,4: F
+ PORT_BIT(IOP_MASK(29) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('D') PORT_CHAR('d') // 3,5: D
+ PORT_BIT(IOP_MASK(30) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('S') PORT_CHAR('s') // 3,6: S
+ PORT_BIT(IOP_MASK(31) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('A') PORT_CHAR('a') // 3,7: A
PORT_START("KEY1")
- PORT_BIT(IOP_MASK(0) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M') // 4,0: M
- PORT_BIT(IOP_MASK(1) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N') // 4,1: N
- PORT_BIT(IOP_MASK(2) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B') // 4,2: B
- PORT_BIT(IOP_MASK(3) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V') // 4,3: V
- PORT_BIT(IOP_MASK(4) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C') // 4,4: C
- PORT_BIT(IOP_MASK(5) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X') // 4,5: X
- PORT_BIT(IOP_MASK(6) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z') // 4,6: Z
+ PORT_BIT(IOP_MASK(0) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('M') PORT_CHAR('m') // 4,0: M
+ PORT_BIT(IOP_MASK(1) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('N') PORT_CHAR('n') // 4,1: N
+ PORT_BIT(IOP_MASK(2) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('B') PORT_CHAR('b') // 4,2: B
+ PORT_BIT(IOP_MASK(3) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('V') PORT_CHAR('v') // 4,3: V
+ PORT_BIT(IOP_MASK(4) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('C') PORT_CHAR('c') // 4,4: C
+ PORT_BIT(IOP_MASK(5) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('X') PORT_CHAR('x') // 4,5: X
+ PORT_BIT(IOP_MASK(6) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('Z') PORT_CHAR('z') // 4,6: Z
PORT_BIT(IOP_MASK(7) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ') // 4,7: Space
PORT_BIT(IOP_MASK(8) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<') // 5,0: ,
PORT_BIT(IOP_MASK(9) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>') // 5,1: .
PORT_BIT(IOP_MASK(10) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?') // 5,2: / ?
PORT_BIT(IOP_MASK(11) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("PAUSE STEP") // 5,3: PAUSE / STEP
PORT_BIT(IOP_MASK(12) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("RUN") // 5,4: RUN
- PORT_BIT(IOP_MASK(13) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_PLUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(PLUS_PAD)) PORT_NAME("KP +") // 5,5: KP +
- PORT_BIT(IOP_MASK(14) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(MINUS_PAD)) PORT_NAME("KP -") // 5,6: KP -
+ PORT_BIT(IOP_MASK(13) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_PLUS_PAD) PORT_NAME("KP +") // 5,5: KP +
+ PORT_BIT(IOP_MASK(14) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS_PAD) PORT_NAME("KP -") // 5,6: KP -
PORT_BIT(IOP_MASK(15) , IP_ACTIVE_HIGH , IPT_UNUSED) // 5,7: N/U
- PORT_BIT(IOP_MASK(16) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L') // 6,0: L
+ PORT_BIT(IOP_MASK(16) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('L') PORT_CHAR('l') // 6,0: L
PORT_BIT(IOP_MASK(17) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR(':') // 6,1: ;
PORT_BIT(IOP_MASK(18) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('\'') PORT_CHAR('"') // 6,2: ' "
PORT_BIT(IOP_MASK(19) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13) PORT_NAME("END LINE") // 6,3: END LINE
PORT_BIT(IOP_MASK(20) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("LIST P LST") // 6,4: LIST / P LST
PORT_BIT(IOP_MASK(21) , IP_ACTIVE_HIGH , IPT_UNUSED) // 6,5: N/U
- PORT_BIT(IOP_MASK(22) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_ASTERISK) PORT_CHAR(UCHAR_MAMEKEY(ASTERISK)) PORT_NAME("KP *") // 6,6: KP *
- PORT_BIT(IOP_MASK(23) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH_PAD) PORT_CHAR(UCHAR_MAMEKEY(SLASH_PAD)) PORT_NAME("KP /") // 6,7: KP /
- PORT_BIT(IOP_MASK(24) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O') // 7,0: O
- PORT_BIT(IOP_MASK(25) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P') // 7,1: P
+ PORT_BIT(IOP_MASK(22) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_ASTERISK) PORT_NAME("KP *") // 6,6: KP *
+ PORT_BIT(IOP_MASK(23) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH_PAD) PORT_NAME("KP /") // 6,7: KP /
+ PORT_BIT(IOP_MASK(24) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('O') PORT_CHAR('o') // 7,0: O
+ PORT_BIT(IOP_MASK(25) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('P') PORT_CHAR('p') // 7,1: P
PORT_BIT(IOP_MASK(26) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('(') PORT_CHAR('[') // 7,2: ( [
PORT_BIT(IOP_MASK(27) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(')') PORT_CHAR(']') // 7,3: ) ]
PORT_BIT(IOP_MASK(28) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("CONT TR/NORM") // 7,4: CONT / TR/NORM
@@ -2193,8 +2193,8 @@ static INPUT_PORTS_START(hp86)
PORT_BIT(IOP_MASK(31) , IP_ACTIVE_HIGH , IPT_UNUSED) // 7,7: N/U
PORT_START("KEY2")
- PORT_BIT(IOP_MASK(0) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR('(') // 8,0: 9
- PORT_BIT(IOP_MASK(1) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR(')') // 8,1: 0
+ PORT_BIT(IOP_MASK(0) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') // 8,0: 9
+ PORT_BIT(IOP_MASK(1) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') // 8,1: 0
PORT_BIT(IOP_MASK(2) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('_') // 8,2: - _
PORT_BIT(IOP_MASK(3) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') PORT_CHAR('+') // 8,3: = +
PORT_BIT(IOP_MASK(4) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_TILDE) PORT_CHAR('\\') PORT_CHAR('|') // 8,4: \ |
@@ -2273,14 +2273,14 @@ static INPUT_PORTS_START(hp86_int)
// n = r / 4
// b = (r % 4) * 8 + c
PORT_START("KEY0")
- PORT_BIT(IOP_MASK(0) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K') // 0,0: K
- PORT_BIT(IOP_MASK(1) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M') // 0,1: M
- PORT_BIT(IOP_MASK(2) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N') // 0,2: N
- PORT_BIT(IOP_MASK(3) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B') // 0,3: B
- PORT_BIT(IOP_MASK(4) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V') // 0,4: V
- PORT_BIT(IOP_MASK(5) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z') // 0,5: Z
- PORT_BIT(IOP_MASK(6) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X') // 0,6: X
- PORT_BIT(IOP_MASK(7) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C') // 0,7: C
+ PORT_BIT(IOP_MASK(0) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('K') PORT_CHAR('k') // 0,0: K
+ PORT_BIT(IOP_MASK(1) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('M') PORT_CHAR('m') // 0,1: M
+ PORT_BIT(IOP_MASK(2) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('N') PORT_CHAR('n') // 0,2: N
+ PORT_BIT(IOP_MASK(3) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('B') PORT_CHAR('b') // 0,3: B
+ PORT_BIT(IOP_MASK(4) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('V') PORT_CHAR('v') // 0,4: V
+ PORT_BIT(IOP_MASK(5) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('Z') PORT_CHAR('z') // 0,5: Z
+ PORT_BIT(IOP_MASK(6) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('X') PORT_CHAR('x') // 0,6: X
+ PORT_BIT(IOP_MASK(7) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('C') PORT_CHAR('c') // 0,7: C
PORT_BIT(IOP_MASK(8) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR('(') // 1,0: 9
PORT_BIT(IOP_MASK(9) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_F5) PORT_CHAR(UCHAR_MAMEKEY(F5)) PORT_NAME("k5 k12") // 1,1: k5 / k12
PORT_BIT(IOP_MASK(10) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_F4) PORT_CHAR(UCHAR_MAMEKEY(F4)) PORT_NAME("k4 k11") // 1,2: k4 / k11
@@ -2289,22 +2289,22 @@ static INPUT_PORTS_START(hp86_int)
PORT_BIT(IOP_MASK(13) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_CAPSLOCK) PORT_NAME("Caps") // 1,5: Caps
PORT_BIT(IOP_MASK(14) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("LABEL KEY") // 1,6: LABEL KEY
PORT_BIT(IOP_MASK(15) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1)) PORT_NAME("k1 k8") // 1,7: k1 / k8
- PORT_BIT(IOP_MASK(16) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I') // 2,0: I
- PORT_BIT(IOP_MASK(17) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J') // 2,1: J
- PORT_BIT(IOP_MASK(18) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H') // 2,2: H
- PORT_BIT(IOP_MASK(19) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G') // 2,3: G
- PORT_BIT(IOP_MASK(20) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F') // 2,4: F
- PORT_BIT(IOP_MASK(21) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A') // 2,5: A
- PORT_BIT(IOP_MASK(22) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S') // 2,6: S
- PORT_BIT(IOP_MASK(23) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D') // 2,7: D
+ PORT_BIT(IOP_MASK(16) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('I') PORT_CHAR('i') // 2,0: I
+ PORT_BIT(IOP_MASK(17) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('J') PORT_CHAR('j') // 2,1: J
+ PORT_BIT(IOP_MASK(18) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('H') PORT_CHAR('h') // 2,2: H
+ PORT_BIT(IOP_MASK(19) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('G') PORT_CHAR('g') // 2,3: G
+ PORT_BIT(IOP_MASK(20) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('F') PORT_CHAR('f') // 2,4: F
+ PORT_BIT(IOP_MASK(21) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('A') PORT_CHAR('a') // 2,5: A
+ PORT_BIT(IOP_MASK(22) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('S') PORT_CHAR('s') // 2,6: S
+ PORT_BIT(IOP_MASK(23) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('D') PORT_CHAR('d') // 2,7: D
PORT_BIT(IOP_MASK(24) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('*') // 3,0: 8
- PORT_BIT(IOP_MASK(25) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U') // 3,1: U
- PORT_BIT(IOP_MASK(26) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y') // 3,2: Y
- PORT_BIT(IOP_MASK(27) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T') // 3,3: T
- PORT_BIT(IOP_MASK(28) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R') // 3,4: R
- PORT_BIT(IOP_MASK(29) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q') // 3,5: Q
- PORT_BIT(IOP_MASK(30) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W') // 3,6: W
- PORT_BIT(IOP_MASK(31) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E') // 3,7: E
+ PORT_BIT(IOP_MASK(25) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('U') PORT_CHAR('u') // 3,1: U
+ PORT_BIT(IOP_MASK(26) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('Y') PORT_CHAR('y') // 3,2: Y
+ PORT_BIT(IOP_MASK(27) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('T') PORT_CHAR('t') // 3,3: T
+ PORT_BIT(IOP_MASK(28) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('R') PORT_CHAR('r') // 3,4: R
+ PORT_BIT(IOP_MASK(29) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('Q') PORT_CHAR('q') // 3,5: Q
+ PORT_BIT(IOP_MASK(30) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('W') PORT_CHAR('w') // 3,6: W
+ PORT_BIT(IOP_MASK(31) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('E') PORT_CHAR('e') // 3,7: E
PORT_START("KEY1")
PORT_BIT(IOP_MASK(0) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR(')') // 4,0: 0
@@ -2315,23 +2315,23 @@ static INPUT_PORTS_START(hp86_int)
PORT_BIT(IOP_MASK(5) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("^ RESLT") // 4,5: KP ^ / RESLT
PORT_BIT(IOP_MASK(6) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME(") INIT") // 4,6: KP ) / INIT
PORT_BIT(IOP_MASK(7) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("( RESET") // 4,7: KP ( / RESET
- PORT_BIT(IOP_MASK(8) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P') // 5,0: P
+ PORT_BIT(IOP_MASK(8) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('P') PORT_CHAR('p') // 5,0: P
PORT_BIT(IOP_MASK(9) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR(':') // 5,1: ; :
PORT_BIT(IOP_MASK(10) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('\'') PORT_CHAR('"') // 5,2: ' "
PORT_BIT(IOP_MASK(11) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13) PORT_NAME("END LINE") // 5,3: END LINE
- PORT_BIT(IOP_MASK(12) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_4_PAD) PORT_CHAR(UCHAR_MAMEKEY(4_PAD)) PORT_CHAR('$') // 5,4: KP 4
- PORT_BIT(IOP_MASK(13) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_ASTERISK) PORT_CHAR(UCHAR_MAMEKEY(ASTERISK)) PORT_NAME("KP *") // 5,5: KP *
- PORT_BIT(IOP_MASK(14) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_6_PAD) PORT_CHAR(UCHAR_MAMEKEY(6_PAD)) PORT_CHAR('^') // 5,6: KP 6
- PORT_BIT(IOP_MASK(15) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_5_PAD) PORT_CHAR(UCHAR_MAMEKEY(5_PAD)) PORT_CHAR('%') // 5,7: KP 5
- PORT_BIT(IOP_MASK(16) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L') // 6,0: L
+ PORT_BIT(IOP_MASK(12) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_4_PAD) // 5,4: KP 4
+ PORT_BIT(IOP_MASK(13) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_ASTERISK) PORT_NAME("KP *") // 5,5: KP *
+ PORT_BIT(IOP_MASK(14) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_6_PAD) PORT_CHAR('^') // 5,6: KP 6
+ PORT_BIT(IOP_MASK(15) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_5_PAD) PORT_CHAR('%') // 5,7: KP 5
+ PORT_BIT(IOP_MASK(16) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('L') PORT_CHAR('l') // 6,0: L
PORT_BIT(IOP_MASK(17) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>') // 6,1: .
PORT_BIT(IOP_MASK(18) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?') // 6,2: / ?
PORT_BIT(IOP_MASK(19) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("LIST P LST") // 6,3: LIST / P LST
- PORT_BIT(IOP_MASK(20) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_1_PAD) PORT_CHAR(UCHAR_MAMEKEY(1_PAD)) PORT_CHAR('!') // 6,4: KP 1
- PORT_BIT(IOP_MASK(21) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(MINUS_PAD)) PORT_NAME("KP -") // 6,5: KP -
- PORT_BIT(IOP_MASK(22) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_3_PAD) PORT_CHAR(UCHAR_MAMEKEY(3_PAD)) PORT_CHAR('#') // 6,6: KP 3
- PORT_BIT(IOP_MASK(23) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_2_PAD) PORT_CHAR(UCHAR_MAMEKEY(2_PAD)) PORT_CHAR('@') // 6,7: KP 2
- PORT_BIT(IOP_MASK(24) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O') // 7,0: O
+ PORT_BIT(IOP_MASK(20) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_1_PAD) // 6,4: KP 1
+ PORT_BIT(IOP_MASK(21) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS_PAD) PORT_NAME("KP -") // 6,5: KP -
+ PORT_BIT(IOP_MASK(22) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_3_PAD) // 6,6: KP 3
+ PORT_BIT(IOP_MASK(23) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_2_PAD) // 6,7: KP 2
+ PORT_BIT(IOP_MASK(24) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('O') PORT_CHAR('o') // 7,0: O
PORT_BIT(IOP_MASK(25) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('&') // 7,1: 7
PORT_BIT(IOP_MASK(26) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('^') // 7,2: 6
PORT_BIT(IOP_MASK(27) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%') // 7,3: 5
@@ -2345,17 +2345,17 @@ static INPUT_PORTS_START(hp86_int)
PORT_BIT(IOP_MASK(1) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('(') PORT_CHAR('[') // 8,1: ( [
PORT_BIT(IOP_MASK(2) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(')') PORT_CHAR(']') // 8,2: ) ]
PORT_BIT(IOP_MASK(3) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("CONT TR/NORM") // 8,3: CONT / TR/NORM
- PORT_BIT(IOP_MASK(4) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_7_PAD) PORT_CHAR(UCHAR_MAMEKEY(7_PAD)) PORT_CHAR('&') // 8,4: KP 7
- PORT_BIT(IOP_MASK(5) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH_PAD) PORT_CHAR(UCHAR_MAMEKEY(SLASH_PAD)) PORT_NAME("KP /") // 8,5: KP /
- PORT_BIT(IOP_MASK(6) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_9_PAD) PORT_CHAR(UCHAR_MAMEKEY(9_PAD)) PORT_CHAR('(') // 8,6: KP 9
- PORT_BIT(IOP_MASK(7) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_8_PAD) PORT_CHAR(UCHAR_MAMEKEY(8_PAD)) PORT_CHAR('*') // 8,7: KP 8
+ PORT_BIT(IOP_MASK(4) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_7_PAD) // 8,4: KP 7
+ PORT_BIT(IOP_MASK(5) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH_PAD) PORT_NAME("KP /") // 8,5: KP /
+ PORT_BIT(IOP_MASK(6) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_9_PAD) // 8,6: KP 9
+ PORT_BIT(IOP_MASK(7) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_8_PAD) // 8,7: KP 8
PORT_BIT(IOP_MASK(8) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<') // 9,0: ,
PORT_BIT(IOP_MASK(9) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ') // 9,1: Space
PORT_BIT(IOP_MASK(10) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("PAUSE STEP") // 9,2: PAUSE / STEP
PORT_BIT(IOP_MASK(11) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("RUN") // 9,3: RUN
- PORT_BIT(IOP_MASK(12) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_0_PAD) PORT_CHAR(UCHAR_MAMEKEY(0_PAD)) PORT_CHAR(')') // 9,4: KP 0
- PORT_BIT(IOP_MASK(13) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_PLUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(PLUS_PAD)) PORT_NAME("KP +") // 9,5: KP +
- PORT_BIT(IOP_MASK(14) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA_PAD) PORT_CHAR(UCHAR_MAMEKEY(COMMA_PAD)) PORT_CHAR('<') // 9,6: KP ,
+ PORT_BIT(IOP_MASK(12) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_0_PAD) // 9,4: KP 0
+ PORT_BIT(IOP_MASK(13) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_PLUS_PAD) PORT_NAME("KP +") // 9,5: KP +
+ PORT_BIT(IOP_MASK(14) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA_PAD) // 9,6: KP ,
PORT_BIT(IOP_MASK(15) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CHAR('.') PORT_CHAR('>') PORT_NAME("KP .") // 9,7: KP .
PORT_BIT(IOP_MASK(16) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_F6) PORT_CHAR(UCHAR_MAMEKEY(F6)) PORT_NAME("k6 k13") // 10,0: k6 / k13
PORT_BIT(IOP_MASK(17) , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_F7) PORT_CHAR(UCHAR_MAMEKEY(F7)) PORT_NAME("k7 k14") // 10,1: k7 / k14
diff --git a/src/mame/drivers/hunter2.cpp b/src/mame/drivers/hunter2.cpp
index 2b4a220feea..f5b6b017ecc 100644
--- a/src/mame/drivers/hunter2.cpp
+++ b/src/mame/drivers/hunter2.cpp
@@ -17,13 +17,16 @@
though only 48K of this is ever paged in.
Usage:
- The RAMdisk must first be formatted using 'format'.
+ The RAMdisk must first be formatted using 'format' (but you'll lose the inbuilt apps).
+ The function keys labels at the bottom of the screen are accessed by Ctrl 1 through 8.
TODO:
- Add ports 83 and 85
- Need software
- Add whatever image devices existed
- Probably lots of other stuff
+ - DIR command can go crazy
+ - Clock doesn't advance
****************************************************************************/
@@ -139,30 +142,30 @@ static INPUT_PORTS_START( hunter2 )
PORT_START("X0")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('^')
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('Y') PORT_CHAR('y')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('T') PORT_CHAR('t')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('G') PORT_CHAR('g')
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('F') PORT_CHAR('f')
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('B') PORT_CHAR('b')
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('V') PORT_CHAR('v')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F')
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B')
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V')
PORT_START("X1")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('*')
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('&')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('I') PORT_CHAR('i')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('U') PORT_CHAR('u')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('J') PORT_CHAR('j')
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('H') PORT_CHAR('h')
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('M') PORT_CHAR('m')
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('N') PORT_CHAR('n')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H')
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M')
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N')
PORT_START("X2")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR(')')
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR('(')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('P') PORT_CHAR('p')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('O') PORT_CHAR('o')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('L') PORT_CHAR('l')
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('K') PORT_CHAR('k')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K')
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<')
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
@@ -189,22 +192,22 @@ static INPUT_PORTS_START( hunter2 )
PORT_START("X5")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('@')
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('W') PORT_CHAR('w')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('Q') PORT_CHAR('q')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('A') PORT_CHAR('a')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A')
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Ctl/Fn") PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL)
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('Z') PORT_CHAR('z')
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z')
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Shift") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
PORT_START("X6")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$')
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('R') PORT_CHAR('r')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('E') PORT_CHAR('e')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('D') PORT_CHAR('d')
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('S') PORT_CHAR('s')
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('C') PORT_CHAR('c')
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('X') PORT_CHAR('x')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S')
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C')
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X')
PORT_START("BATTERY")
PORT_CONFNAME(0x04, 0x00, "Battery")
diff --git a/src/mame/drivers/husky.cpp b/src/mame/drivers/husky.cpp
index c5837ae1c9a..ba63742e0a2 100644
--- a/src/mame/drivers/husky.cpp
+++ b/src/mame/drivers/husky.cpp
@@ -14,6 +14,7 @@
TODO:
- implement power button
- test rs232 port
+ - Break key doesn't work?
****************************************************************************/
@@ -163,7 +164,7 @@ static INPUT_PORTS_START(husky)
PORT_BIT(0x0200, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('H') PORT_CHAR('#')
PORT_BIT(0x0400, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('J') PORT_CHAR('*')
PORT_BIT(0x0800, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('K') PORT_CHAR('=')
- PORT_BIT(0x1000, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('L') PORT_NAME("L Esc")
+ PORT_BIT(0x1000, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('L') PORT_CHAR(27) PORT_NAME("L Esc")
PORT_BIT(0x2000, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Power on/off")
PORT_START("X2")
@@ -173,10 +174,10 @@ static INPUT_PORTS_START(husky)
PORT_BIT(0x0040, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('Z') PORT_CHAR('<')
PORT_BIT(0x0080, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('X') PORT_CHAR('$')
PORT_BIT(0x0100, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('C') PORT_CHAR('%')
- PORT_BIT(0x0200, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('V') PORT_NAME("V Insert")
+ PORT_BIT(0x0200, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('V') PORT_CHAR(UCHAR_MAMEKEY(INSERT)) PORT_NAME("V Insert")
PORT_BIT(0x0400, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('B') PORT_CHAR('-')
- PORT_BIT(0x0800, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('N') PORT_NAME("N Left")
- PORT_BIT(0x1000, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('M') PORT_NAME("M Right")
+ PORT_BIT(0x0800, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('N') PORT_CHAR(UCHAR_MAMEKEY(LEFT)) PORT_NAME("N Left")
+ PORT_BIT(0x1000, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('M') PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) PORT_NAME("M Right")
PORT_BIT(0x2000, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
PORT_START("X3")
@@ -188,9 +189,9 @@ static INPUT_PORTS_START(husky)
PORT_BIT(0x0100, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_NAME("5 Control")
PORT_BIT(0x0200, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('.')
PORT_BIT(0x0400, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('+')
- PORT_BIT(0x0800, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_NAME("8 Down")
- PORT_BIT(0x1000, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_NAME("9 Up")
- PORT_BIT(0x2000, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_NAME("0 Del")
+ PORT_BIT(0x0800, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR(UCHAR_MAMEKEY(DOWN)) PORT_NAME("8 Down")
+ PORT_BIT(0x1000, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(UCHAR_MAMEKEY(UP)) PORT_NAME("9 Up")
+ PORT_BIT(0x2000, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR(UCHAR_MAMEKEY(DEL)) PORT_NAME("0 Del")
PORT_START("BATTERY")
PORT_CONFNAME(0x04, 0x04, "Battery")
diff --git a/src/mame/drivers/informer_207_376.cpp b/src/mame/drivers/informer_207_376.cpp
index a8eb6500334..964363dc0e8 100644
--- a/src/mame/drivers/informer_207_376.cpp
+++ b/src/mame/drivers/informer_207_376.cpp
@@ -30,16 +30,19 @@
#include "emu.h"
#include "cpu/m6809/m6809.h"
#include "machine/6850acia.h"
+#include "machine/pit8253.h"
#include "machine/clock.h"
#include "machine/input_merger.h"
#include "machine/nvram.h"
#include "machine/z80scc.h"
#include "video/mc6845.h"
+#include "sound/beep.h"
#include "bus/rs232/rs232.h"
#include "bus/rs232/printer.h"
#include "machine/informer_207_376_kbd.h"
#include "emupal.h"
#include "screen.h"
+#include "speaker.h"
//**************************************************************************
@@ -55,8 +58,10 @@ public:
m_crtc(*this, "crtc"),
m_screen(*this, "screen"),
m_palette(*this, "palette"),
+ m_pit(*this, "pit"),
m_scc(*this, "scc"),
m_acia(*this, "acia%u", 0U),
+ m_beep(*this, "beep"),
m_ram(*this, "ram"),
m_chargen(*this, "chargen"),
m_nmi_enabled(false)
@@ -73,8 +78,10 @@ private:
required_device<mc6845_device> m_crtc;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
+ required_device<pit8253_device> m_pit;
required_device<scc85c30_device> m_scc;
required_device_array<acia6850_device, 2> m_acia;
+ required_device<beep_device> m_beep;
required_shared_ptr<uint8_t> m_ram;
required_region_ptr<uint8_t> m_chargen;
@@ -84,6 +91,7 @@ private:
void vsync_w(int state);
void nmi_control_w(uint8_t data);
+ void unk_8400_w(uint8_t data);
bool m_nmi_enabled;
};
@@ -98,10 +106,11 @@ void informer_207_376_state::mem_map(address_map &map)
map(0x0000, 0x7fff).ram().share("ram");
map(0x8000, 0x8000).rw(m_crtc, FUNC(mc6845_device::status_r), FUNC(mc6845_device::address_w));
map(0x8001, 0x8001).rw(m_crtc, FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w));
- map(0x8400, 0x8400).lr8(NAME([] () { return 0xff; })).nopw(); // ?
+ map(0x8400, 0x8400).lr8(NAME([] () { return 0xff; })).w(FUNC(informer_207_376_state::unk_8400_w)); // ?
map(0x8802, 0x8803).rw(m_acia[0], FUNC(acia6850_device::read), FUNC(acia6850_device::write));
map(0x8804, 0x8805).rw(m_acia[1], FUNC(acia6850_device::read), FUNC(acia6850_device::write));
map(0x8c00, 0x8c00).w(FUNC(informer_207_376_state::nmi_control_w));
+ map(0x9000, 0x9003).rw(m_pit, FUNC(pit8253_device::read), FUNC(pit8253_device::write));
map(0x9400, 0x9403).rw(m_scc, FUNC(scc85c30_device::ab_dc_r), FUNC(scc85c30_device::ab_dc_w));
map(0x9c00, 0x9cff).ram().share("nvram");
map(0xa000, 0xffff).rom().region("maincpu", 0);
@@ -182,6 +191,16 @@ void informer_207_376_state::nmi_control_w(uint8_t data)
m_nmi_enabled = bool(data & 0x06);
}
+void informer_207_376_state::unk_8400_w(uint8_t data)
+{
+ // 7------- beeper
+ // -6------ unknown
+ // --5----- 1=internal modem, 0=host rs232
+ // ---43210 unknown
+
+ m_beep->set_state(BIT(data, 7));
+}
+
void informer_207_376_state::machine_start()
{
// register for save states
@@ -213,7 +232,15 @@ void informer_207_376_state::informer_207_376(machine_config &config)
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // 2x X2212P
- SCC85C30(config, m_scc, 0); // unknown clock
+ PIT8253(config, m_pit);
+ m_pit->set_clk<0>(4915200 / 2);
+ m_pit->out_handler<0>().set(m_acia[1], FUNC(acia6850_device::write_txc));
+ m_pit->out_handler<0>().append(m_acia[1], FUNC(acia6850_device::write_rxc));
+ m_pit->set_clk<1>(4915200 / 2);
+ m_pit->out_handler<1>().set(m_acia[0], FUNC(acia6850_device::write_txc));
+ m_pit->out_handler<1>().append(m_acia[0], FUNC(acia6850_device::write_rxc));
+
+ SCC85C30(config, m_scc, 4915200);
m_scc->out_txda_callback().set("com1", FUNC(rs232_port_device::write_txd));
m_scc->out_dtra_callback().set("com1", FUNC(rs232_port_device::write_dtr));
m_scc->out_rtsa_callback().set("com1", FUNC(rs232_port_device::write_rts));
@@ -229,12 +256,6 @@ void informer_207_376_state::informer_207_376(machine_config &config)
ACIA6850(config, m_acia[1], 0); // unknown clock
m_acia[1]->txd_handler().set("printer", FUNC(rs232_port_device::write_txd));
- clock_device &acia_clock(CLOCK(config, "acia_clock", 153600)); // source?
- acia_clock.signal_handler().set(m_acia[0], FUNC(acia6850_device::write_txc));
- acia_clock.signal_handler().append(m_acia[0], FUNC(acia6850_device::write_rxc));
- acia_clock.signal_handler().append(m_acia[1], FUNC(acia6850_device::write_txc));
- acia_clock.signal_handler().append(m_acia[1], FUNC(acia6850_device::write_rxc));
-
rs232_port_device &com1(RS232_PORT(config, "com1", default_rs232_devices, nullptr));
com1.rxd_handler().set(m_scc, FUNC(scc85c30_device::rxa_w));
com1.dcd_handler().set(m_scc, FUNC(scc85c30_device::dcda_w));
@@ -266,6 +287,10 @@ void informer_207_376_state::informer_207_376(machine_config &config)
m_crtc->set_char_width(8);
m_crtc->set_update_row_callback(FUNC(informer_207_376_state::crtc_update_row));
m_crtc->out_vsync_callback().set(FUNC(informer_207_376_state::vsync_w));
+
+ // sound
+ SPEAKER(config, "mono").front_center();
+ BEEP(config, "beep", 500).add_route(ALL_OUTPUTS, "mono", 0.50); // frequency unknown
}
@@ -275,13 +300,17 @@ void informer_207_376_state::informer_207_376(machine_config &config)
ROM_START( in207376 )
ROM_REGION(0x6000, "maincpu", 0)
+ // M2764A F1
// 79590-023 376SNA V1.00 201C 7224 (our checksum: 7264)
- ROM_LOAD("79590-023.bin", 0x0000, 0x2000, BAD_DUMP CRC(ed4ff488) SHA1(fdd95c520d0288ea483b5d2e8e6c8eecb04063c1))
+ ROM_LOAD("79590-023.z37", 0x0000, 0x2000, BAD_DUMP CRC(ed4ff488) SHA1(fdd95c520d0288ea483b5d2e8e6c8eecb04063c1))
+ // M27128AF1
// 79589-023 376 SNAV1.00 201C E86F (checksum matches)
- ROM_LOAD("79589-023.bin", 0x2000, 0x4000, CRC(cdfaf629) SHA1(1f21ef6848020726ef3d7ab05166ac8590d58476))
+ ROM_LOAD("79589-023.z36", 0x2000, 0x4000, CRC(cdfaf629) SHA1(1f21ef6848020726ef3d7ab05166ac8590d58476))
ROM_REGION(0x1000, "chargen", 0)
- ROM_LOAD("chargen.bin", 0x0000, 0x1000, BAD_DUMP CRC(819e4b4e) SHA1(4937e49b2d91af993e8f65f5df1d6f729e775fc4))
+ // TMS2732AGL-25
+ // 79573-001 V1.00 376/8 CHAR. GEN.
+ ROM_LOAD("79573-001.z6", 0x0000, 0x1000, CRC(f704b827) SHA1(bcc56eeb8681c2bebe3a9f4b6b78c0373c06d875))
ROM_END
@@ -290,4 +319,4 @@ ROM_END
//**************************************************************************
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1986, in207376, 0, 0, informer_207_376, informer_207_376, informer_207_376_state, empty_init, "Informer", "Informer 207/376", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE )
+COMP( 1986, in207376, 0, 0, informer_207_376, informer_207_376, informer_207_376_state, empty_init, "Informer", "Informer 207/376", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/informer_213ae.cpp b/src/mame/drivers/informer_213ae.cpp
index b1cd95d17ef..80faaaa2a63 100644
--- a/src/mame/drivers/informer_213ae.cpp
+++ b/src/mame/drivers/informer_213ae.cpp
@@ -16,6 +16,10 @@
TODO:
- Figure out the ASIC and how it's connected
+ Notes:
+ - Debug tricks: "b@42=ff" after startup to show setup screen 1
+ "bp 81a1" then "b@42=ff" and "a=02" after the break to show screen 2
+
***************************************************************************/
#include "emu.h"
@@ -71,6 +75,7 @@ private:
void informer_213ae_state::mem_map(address_map &map)
{
map(0x0000, 0x1fff).ram();
+ map(0x2000, 0x3fff).ram();
map(0x6000, 0x6fff).ram().share("vram");
map(0x7000, 0x7fff).ram().share("aram");
map(0x8000, 0xffff).rom().region("maincpu", 0);
@@ -91,27 +96,33 @@ INPUT_PORTS_END
uint32_t informer_213ae_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
- for (int y = 0; y < 51; y++)
+ for (int y = 0; y < 26; y++)
{
for (int x = 0; x < 80; x++)
{
- uint8_t code = m_vram[y * 80 + x];
-// uint8_t attr = m_aram[y * 80 + x];
+ // screen memory starts at 0x6820
+ uint8_t code = m_vram[26 * 80 + y * 80 + x];
+// uint8_t attr = m_aram[26 * 80 + y * 80 + x];
+
+ // but status line is at top of vram
+ if (y > 23)
+ {
+ code = m_vram[(y - 24) * 80 + x];
+// attr = m_aram[(y - 24) * 80 + x];
+ }
// draw 9 lines
for (int i = 0; i < 9; i++)
{
uint8_t data = m_chargen[0x2000 | ((code << 4) + i)];
- // 8 pixels of the character
- bitmap.pix32(y * 9 + i, x * 8 + 0) = BIT(data, 7) ? rgb_t::white() : rgb_t::black();
- bitmap.pix32(y * 9 + i, x * 8 + 1) = BIT(data, 6) ? rgb_t::white() : rgb_t::black();
- bitmap.pix32(y * 9 + i, x * 8 + 2) = BIT(data, 5) ? rgb_t::white() : rgb_t::black();
- bitmap.pix32(y * 9 + i, x * 8 + 3) = BIT(data, 4) ? rgb_t::white() : rgb_t::black();
- bitmap.pix32(y * 9 + i, x * 8 + 4) = BIT(data, 3) ? rgb_t::white() : rgb_t::black();
- bitmap.pix32(y * 9 + i, x * 8 + 5) = BIT(data, 2) ? rgb_t::white() : rgb_t::black();
- bitmap.pix32(y * 9 + i, x * 8 + 6) = BIT(data, 1) ? rgb_t::white() : rgb_t::black();
- bitmap.pix32(y * 9 + i, x * 8 + 7) = BIT(data, 0) ? rgb_t::white() : rgb_t::black();
+ // 6 pixels of the character
+ bitmap.pix32(y * 9 + i, x * 6 + 0) = BIT(data, 7) ? rgb_t::white() : rgb_t::black();
+ bitmap.pix32(y * 9 + i, x * 6 + 1) = BIT(data, 6) ? rgb_t::white() : rgb_t::black();
+ bitmap.pix32(y * 9 + i, x * 6 + 2) = BIT(data, 5) ? rgb_t::white() : rgb_t::black();
+ bitmap.pix32(y * 9 + i, x * 6 + 3) = BIT(data, 4) ? rgb_t::white() : rgb_t::black();
+ bitmap.pix32(y * 9 + i, x * 6 + 4) = BIT(data, 3) ? rgb_t::white() : rgb_t::black();
+ bitmap.pix32(y * 9 + i, x * 6 + 5) = BIT(data, 2) ? rgb_t::white() : rgb_t::black();
}
}
}
@@ -121,11 +132,11 @@ uint32_t informer_213ae_state::screen_update(screen_device &screen, bitmap_rgb32
static const gfx_layout char_layout =
{
- 8,9,
+ 6,9,
RGN_FRAC(1,1),
1,
{ 0 },
- { 0, 1, 2, 3, 4, 5, 6, 7 },
+ { 0, 1, 2, 3, 4, 5 },
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, 8*8 },
8*16
};
@@ -160,9 +171,9 @@ void informer_213ae_state::informer_213ae(machine_config &config)
SCC8530N(config, m_scc, 0); // unknown clock
// video
- SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
- m_screen->set_color(rgb_t::green());
- m_screen->set_size(640, 480);
+ SCREEN(config, m_screen, SCREEN_TYPE_LCD);
+ m_screen->set_color(rgb_t::amber());
+ m_screen->set_size(480, 234);
m_screen->set_visarea_full();
m_screen->set_refresh_hz(60);
// m_screen->set_raw(18.432_MHz_XTAL, 0, 0, 0, 0, 0, 0);
diff --git a/src/mame/drivers/jupace.cpp b/src/mame/drivers/jupace.cpp
index 97a71dbdcb3..9c1d55bf969 100644
--- a/src/mame/drivers/jupace.cpp
+++ b/src/mame/drivers/jupace.cpp
@@ -457,8 +457,8 @@ void ace_state::ace_io(address_map &map)
static INPUT_PORTS_START( ace )
PORT_START("A8")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Symbol Shift") PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_2)
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Symbol Shift") PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_2)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z') PORT_CHAR(':')
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X') PORT_CHAR(0xA3)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C') PORT_CHAR('?')
@@ -481,19 +481,19 @@ static INPUT_PORTS_START( ace )
PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("A11")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!')
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('@')
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!') // DELETE LINE
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('@') // CAPS LOCK
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#')
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$')
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_LEFT) PORT_CHAR('5') PORT_CHAR('%')
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$') // INVERSE VIDEO
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_LEFT) PORT_CHAR('5') PORT_CHAR('%') PORT_CHAR(UCHAR_MAMEKEY(LEFT))
PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("A12")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR('_')
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')')
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_RIGHT) PORT_CHAR('8') PORT_CHAR('(')
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_DOWN) PORT_CHAR('7') PORT_CHAR('\'')
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_UP) PORT_CHAR('6') PORT_CHAR('&')
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR('_') // DELETE
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')') // GRAPHICS
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_RIGHT) PORT_CHAR('8') PORT_CHAR('(') PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_DOWN) PORT_CHAR('7') PORT_CHAR('\'') PORT_CHAR(UCHAR_MAMEKEY(DOWN))
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_UP) PORT_CHAR('6') PORT_CHAR('&') PORT_CHAR(UCHAR_MAMEKEY(UP))
PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("A13")
@@ -509,11 +509,11 @@ static INPUT_PORTS_START( ace )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L') PORT_CHAR('=')
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K') PORT_CHAR('+')
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J') PORT_CHAR('-')
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("h H \xE2\x86\x91") PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H')
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("h H \xE2\x86\x91") PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H') PORT_CHAR('^')
PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("A15")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ') // BREAK
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M') PORT_CHAR('.')
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N') PORT_CHAR(',')
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B') PORT_CHAR('*')
@@ -847,4 +847,4 @@ ROM_END
//**************************************************************************
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1981, jupace, 0, 0, ace, ace, ace_state, empty_init, "Jupiter Cantab", "Jupiter Ace", 0 )
+COMP( 1981, jupace, 0, 0, ace, ace, ace_state, empty_init, "Jupiter Cantab", "Jupiter Ace", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/mstation.cpp b/src/mame/drivers/mstation.cpp
index b23bffee035..517300b2ee5 100644
--- a/src/mame/drivers/mstation.cpp
+++ b/src/mame/drivers/mstation.cpp
@@ -330,7 +330,7 @@ static INPUT_PORTS_START( mstation )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE( KEYCODE_0 ) PORT_CHAR('0') PORT_CHAR(')')
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE( KEYCODE_MINUS ) PORT_CHAR('-') PORT_CHAR('_')
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE( KEYCODE_EQUALS ) PORT_CHAR('=') PORT_CHAR('+')
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Backspace") PORT_CODE( KEYCODE_BACKSPACE ) PORT_CHAR(UCHAR_MAMEKEY(BACKSPACE))
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Backspace") PORT_CODE( KEYCODE_BACKSPACE ) PORT_CHAR(8)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE( KEYCODE_BACKSLASH ) PORT_CHAR('\\') PORT_CHAR('|')
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("PG Down") PORT_CODE( KEYCODE_PGDN ) PORT_CHAR(UCHAR_MAMEKEY(PGDN))
@@ -352,7 +352,7 @@ static INPUT_PORTS_START( mstation )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE( KEYCODE_CLOSEBRACE ) PORT_CHAR(']') PORT_CHAR('}')
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE( KEYCODE_COLON ) PORT_CHAR(';') PORT_CHAR(':')
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE( KEYCODE_QUOTE ) PORT_CHAR('\'') PORT_CHAR('\"')
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Enter") PORT_CODE( KEYCODE_ENTER ) PORT_CHAR(UCHAR_MAMEKEY(ENTER))
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Enter") PORT_CODE( KEYCODE_ENTER ) PORT_CHAR(13)
PORT_START( "LINE.6" )
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("CapsLock") PORT_CODE( KEYCODE_CAPSLOCK ) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK))
diff --git a/src/mame/drivers/nascom1.cpp b/src/mame/drivers/nascom1.cpp
index 30eb112a519..c1c6282f77b 100644
--- a/src/mame/drivers/nascom1.cpp
+++ b/src/mame/drivers/nascom1.cpp
@@ -630,7 +630,7 @@ static INPUT_PORTS_START( nascom1 )
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("New Line") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('=')
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('@')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR(0xff) PORT_CHAR('@') // have to press shift to get @
PORT_BIT(0x48, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_START("KEY.1")
@@ -671,7 +671,7 @@ static INPUT_PORTS_START( nascom1 )
PORT_START("KEY.5")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR('+')
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>')
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>') // > nascom2 only
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')')
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR(0xA3)
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('Q') PORT_CHAR('q')
@@ -681,7 +681,7 @@ static INPUT_PORTS_START( nascom1 )
PORT_START("KEY.6")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR(':') PORT_CHAR('*')
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR('^')
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('\"')
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!')
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('P') PORT_CHAR('p')
diff --git a/src/mame/drivers/nes_vt.cpp b/src/mame/drivers/nes_vt.cpp
index 422c395de40..5b529698010 100644
--- a/src/mame/drivers/nes_vt.cpp
+++ b/src/mame/drivers/nes_vt.cpp
@@ -1578,10 +1578,15 @@ ROM_START( vtboxing )
ROM_END
ROM_START( msiwwe )
- ROM_REGION( 0x200000, "mainrom", 0 )
+ ROM_REGION( 0x200000, "mainrom", 0 ) // the first half of this ROM is unused code from the Ms. Pac-Man game!
ROM_LOAD( "wrestlemania_es29lv160fb_004a2249.bin", 0x00000, 0x200000, CRC(f524382d) SHA1(0c8d1c29c76e3e3c58018354f1eca9445c9ab945) )
ROM_END
+ROM_START( msiwwea )
+ ROM_REGION( 0x100000, "mainrom", 0 )
+ ROM_LOAD( "wrestlemania_en29lv800bb_007f225b.bin", 0x00000, 0x100000, CRC(52102de3) SHA1(f858ad18e05d3de24dfab4c98798efb4d30e2987) )
+ROM_END
+
ROM_START( msidd )
ROM_REGION( 0x200000, "mainrom", 0 )
ROM_LOAD( "doubledragon_m29w160eb_00202249.bin", 0x00000, 0x200000, CRC(44df5bb6) SHA1(a984aa1644d2d313d4263afdfed1cd64009f1137) )
@@ -2116,8 +2121,10 @@ CONS( 200?, vtboxing, 0, 0, nes_vt_512kb, nes_vt, nes_vt_state, empty_init
// MSI Entertainment games (MSI previously operated as Majesco Entertainment)
// There are meant to be multiple revisions of this software, some with theme tunes for the new wrestlers, some without. This one appears to lack them.
-// 2 box variations exist, one with Randy Savage in purple attire, the other with him in green, it is unknown if that is any indication of software revision. This was dumped from a unit with purple on the box.
-CONS( 2017, msiwwe, 0, 0, nes_vt_2mb_baddma, nes_vt_msi, nes_vt_state, empty_init, "MSI", "WWE Wrestlemania Steel Cage Challenge (Plug & Play)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
+// 2 box variations exist, one with Randy Savage in purple attire and another with green, this was dumped from a unit with purple on the box.
+CONS( 2017, msiwwe, 0, 0, nes_vt_2mb_baddma, nes_vt_msi, nes_vt_state, empty_init, "MSI", "WWE Wrestlemania Steel Cage Challenge (Plug & Play) (set 1)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
+// this one was dumped from the version with Randy Savage in green, the box was much larger than the other one. This one also has new theme music for the adjusted roster.
+CONS( 2017, msiwwea, msiwwe, 0, nes_vt_1mb_baddma, nes_vt_msi, nes_vt_state, empty_init, "MSI", "WWE Wrestlemania Steel Cage Challenge (Plug & Play) (set 2)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
CONS( 2017, msidd, 0, 0, nes_vt_2mb_baddma, nes_vt_msi, nes_vt_state, empty_init, "MSI / Arc System Works", "Double Dragon - 30 Years Anniversary (Plug & Play)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
diff --git a/src/mame/drivers/novag_cexpert.cpp b/src/mame/drivers/novag_cexpert.cpp
new file mode 100644
index 00000000000..610014ef150
--- /dev/null
+++ b/src/mame/drivers/novag_cexpert.cpp
@@ -0,0 +1,257 @@
+// license:BSD-3-Clause
+// copyright-holders:hap
+// thanks-to:Berger
+/******************************************************************************
+
+Novag Constellation Expert (model 853)
+
+The u3 ROM contains the following message (it's David Kittinger's company):
+Copyright (c) 1985, Intelligent Heuristic Programming, Inc
+
+Hardware notes:
+- R65C02P4 @ 5MHz (10MHz XTAL)
+- 2*2KB RAM(NEC D449C-3), 2*32KB ROM
+- 64+8 leds, magnet sensors chessboard
+- ports for optional printer and chess clock
+
+I/O is again similar to supercon
+
+******************************************************************************/
+
+#include "emu.h"
+
+#include "cpu/m6502/r65c02.h"
+#include "machine/sensorboard.h"
+#include "machine/nvram.h"
+#include "machine/timer.h"
+#include "sound/beep.h"
+#include "video/pwm.h"
+#include "speaker.h"
+
+// internal artwork
+#include "novag_cexpert.lh" // clickable
+
+
+namespace {
+
+class cexpert_state : public driver_device
+{
+public:
+ cexpert_state(const machine_config &mconfig, device_type type, const char *tag) :
+ driver_device(mconfig, type, tag),
+ m_maincpu(*this, "maincpu"),
+ m_irq_on(*this, "irq_on"),
+ m_display(*this, "display"),
+ m_board(*this, "board"),
+ m_beeper(*this, "beeper"),
+ m_inputs(*this, "IN.%u", 0)
+ { }
+
+ // machine configs
+ void cexpert(machine_config &config);
+
+protected:
+ virtual void machine_start() override;
+
+private:
+ // devices/pointers
+ required_device<cpu_device> m_maincpu;
+ required_device<timer_device> m_irq_on;
+ required_device<pwm_display_device> m_display;
+ required_device<sensorboard_device> m_board;
+ required_device<beep_device> m_beeper;
+ required_ioport_array<8> m_inputs;
+
+ // address maps
+ void main_map(address_map &map);
+
+ // periodic interrupts
+ template<int Line> TIMER_DEVICE_CALLBACK_MEMBER(irq_on) { m_maincpu->set_input_line(Line, ASSERT_LINE); }
+ template<int Line> TIMER_DEVICE_CALLBACK_MEMBER(irq_off) { m_maincpu->set_input_line(Line, CLEAR_LINE); }
+
+ // I/O handlers
+ void update_display();
+ void mux_w(u8 data);
+ void control_w(u8 data);
+ u8 input1_r();
+ u8 input2_r();
+
+ u8 m_inp_mux = 0;
+ u8 m_led_select = 0;
+};
+
+void cexpert_state::machine_start()
+{
+ // register for savestates
+ save_item(NAME(m_inp_mux));
+ save_item(NAME(m_led_select));
+}
+
+
+
+/******************************************************************************
+ I/O
+******************************************************************************/
+
+void cexpert_state::update_display()
+{
+ m_display->matrix(1 << m_led_select, m_inp_mux);
+}
+
+void cexpert_state::mux_w(u8 data)
+{
+ // d0-d7: input mux, led data
+ m_inp_mux = data;
+ update_display();
+}
+
+void cexpert_state::control_w(u8 data)
+{
+ // d0-d2: clock/printer?
+
+ // d3: enable beeper
+ m_beeper->set_state(data >> 3 & 1);
+
+ // d4-d7: 74145 to led select
+ m_led_select = data >> 4 & 0xf;
+ update_display();
+}
+
+u8 cexpert_state::input1_r()
+{
+ u8 data = 0;
+
+ // d0-d7: multiplexed inputs (chessboard squares)
+ for (int i = 0; i < 8; i++)
+ if (BIT(m_inp_mux, i))
+ data |= m_board->read_rank(i ^ 7, true);
+
+ return ~data;
+}
+
+u8 cexpert_state::input2_r()
+{
+ u8 data = 0;
+
+ // d6,d7: multiplexed inputs (side panel)
+ for (int i = 0; i < 8; i++)
+ if (BIT(m_inp_mux, i))
+ data |= m_inputs[i]->read() << 6;
+
+ // other: ?
+
+ return ~data;
+}
+
+
+
+/******************************************************************************
+ Address Maps
+******************************************************************************/
+
+void cexpert_state::main_map(address_map &map)
+{
+ map(0x0000, 0x0fff).ram().share("nvram");
+ map(0x1000, 0x1000).nopw(); // accessory?
+ map(0x1100, 0x1100).nopw(); // "
+ map(0x1200, 0x1200).rw(FUNC(cexpert_state::input2_r), FUNC(cexpert_state::mux_w));
+ map(0x1300, 0x1300).rw(FUNC(cexpert_state::input1_r), FUNC(cexpert_state::control_w));
+ map(0x1800, 0xffff).rom();
+}
+
+
+
+/******************************************************************************
+ Input Ports
+******************************************************************************/
+
+static INPUT_PORTS_START( cexpert )
+ PORT_START("IN.0")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_I) PORT_NAME("New Game")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_8) PORT_NAME("Player/Player / Gambit Book / King")
+
+ PORT_START("IN.1")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_U) PORT_NAME("Verify / Set Up")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_7) PORT_NAME("Best Move/Random / Training Level / Queen")
+
+ PORT_START("IN.2")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Y) PORT_NAME("Change Color")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_NAME("Sound / Depth Search / Bishop")
+
+ PORT_START("IN.3")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_T) PORT_NAME("Clear Board / Tournament Book")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_NAME("Solve Mate / Infinite / Knight")
+
+ PORT_START("IN.4")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_NAME("Print Moves / Print Evaluations")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_NAME("Print Board / Interface / Rook")
+
+ PORT_START("IN.5")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_E) PORT_NAME("Trace Forward / Auto Play")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_NAME("Print List / Acc. Time / Pawn")
+
+ PORT_START("IN.6")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_W) PORT_NAME("Hint / Next Best")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_NAME("Set Level")
+
+ PORT_START("IN.7")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Q) PORT_NAME("Go")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_NAME("Take Back / Restore")
+INPUT_PORTS_END
+
+
+
+/******************************************************************************
+ Machine Configs
+******************************************************************************/
+
+void cexpert_state::cexpert(machine_config &config)
+{
+ /* basic machine hardware */
+ R65C02(config, m_maincpu, 10_MHz_XTAL/2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &cexpert_state::main_map);
+
+ const attotime irq_period = attotime::from_hz(15440 / 32.0); // 555 timer (measured), to 4020
+ TIMER(config, m_irq_on).configure_periodic(FUNC(cexpert_state::irq_on<M6502_IRQ_LINE>), irq_period);
+ m_irq_on->set_start_delay(irq_period - attotime::from_nsec(15200)); // active for 15.2us
+ TIMER(config, "irq_off").configure_periodic(FUNC(cexpert_state::irq_off<M6502_IRQ_LINE>), irq_period);
+
+ NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_1);
+
+ SENSORBOARD(config, m_board).set_type(sensorboard_device::MAGNETS);
+ m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess));
+ m_board->set_delay(attotime::from_msec(200));
+ m_board->set_nvram_enable(true);
+
+ /* video hardware */
+ PWM_DISPLAY(config, m_display).set_size(9, 8);
+ config.set_default_layout(layout_novag_cexpert);
+
+ /* sound hardware */
+ SPEAKER(config, "mono").front_center();
+ BEEP(config, m_beeper, 15440 / 16); // 965Hz
+ m_beeper->add_route(ALL_OUTPUTS, "mono", 0.25);
+}
+
+
+
+/******************************************************************************
+ ROM Definitions
+******************************************************************************/
+
+ROM_START( cexpert )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD("novag_8533-503.u3", 0x0000, 0x8000, CRC(e384de2f) SHA1(13b56e2870e3755073e7a7cc63bae995cd468562) )
+ ROM_LOAD("novag_8532-502.u2", 0x8000, 0x8000, CRC(c2c367b5) SHA1(e000871c93a5e0fc2f8b29f3d2fec0607a91559b) )
+ROM_END
+
+} // anonymous namespace
+
+
+
+/******************************************************************************
+ Drivers
+******************************************************************************/
+
+// YEAR NAME PARENT CMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS
+CONS( 1985, cexpert, 0, 0, cexpert, cexpert, cexpert_state, empty_init, "Novag", "Constellation Expert", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
diff --git a/src/mame/drivers/novag_cforte.cpp b/src/mame/drivers/novag_cforte.cpp
index 67e499cc57a..b291bc6480b 100644
--- a/src/mame/drivers/novag_cforte.cpp
+++ b/src/mame/drivers/novag_cforte.cpp
@@ -172,12 +172,13 @@ u8 cforte_state::input2_r()
{
u8 data = 0;
- // d0-d5: ?
// d6,d7: multiplexed inputs (side panel)
for (int i = 0; i < 8; i++)
if (BIT(m_inp_mux, i))
data |= m_inputs[i]->read() << 6;
+ // other: ?
+
return ~data;
}
@@ -190,8 +191,8 @@ u8 cforte_state::input2_r()
void cforte_state::main_map(address_map &map)
{
map(0x0000, 0x0fff).ram().share("nvram");
- map(0x1c00, 0x1c00).nopw(); // printer?
- map(0x1d00, 0x1d00).nopw(); // printer?
+ map(0x1c00, 0x1c00).nopw(); // accessory?
+ map(0x1d00, 0x1d00).nopw(); // "
map(0x1e00, 0x1e00).rw(FUNC(cforte_state::input2_r), FUNC(cforte_state::mux_w));
map(0x1f00, 0x1f00).rw(FUNC(cforte_state::input1_r), FUNC(cforte_state::control_w));
map(0x2000, 0xffff).rom();
diff --git a/src/mame/drivers/osbexec.cpp b/src/mame/drivers/osbexec.cpp
index 754e838651e..467ab3c0b7d 100644
--- a/src/mame/drivers/osbexec.cpp
+++ b/src/mame/drivers/osbexec.cpp
@@ -241,38 +241,38 @@ static INPUT_PORTS_START( osbexec )
PORT_START("ROW2")
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I')
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U')
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E')
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W')
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q')
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U') PORT_CHAR(21)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y') PORT_CHAR(25)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T') PORT_CHAR(20)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R') PORT_CHAR(18)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E') PORT_CHAR(5)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W') PORT_CHAR(23)
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q') PORT_CHAR(17)
PORT_START("ROW3")
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K')
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J')
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D')
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S')
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A')
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K') PORT_CHAR(11)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J') PORT_CHAR(10)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H') PORT_CHAR(8)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G') PORT_CHAR(7)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F') PORT_CHAR(6)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D') PORT_CHAR(4)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S') PORT_CHAR(19)
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A') PORT_CHAR(1)
PORT_START("ROW4")
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<')
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M')
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C')
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X')
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N') PORT_CHAR(14)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B') PORT_CHAR(2)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V') PORT_CHAR(22)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C') PORT_CHAR(3)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X') PORT_CHAR(24)
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z') PORT_CHAR(26)
PORT_START("ROW5")
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR('(')
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O')
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P')
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O') PORT_CHAR(15)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P') PORT_CHAR(16)
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>')
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR(')')
@@ -281,7 +281,7 @@ static INPUT_PORTS_START( osbexec )
PORT_START("ROW6")
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') PORT_CHAR('+')
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L')
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L') PORT_CHAR(12)
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('\\') PORT_CHAR('|')
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR(':')
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?')
diff --git a/src/mame/drivers/pgm2.cpp b/src/mame/drivers/pgm2.cpp
index 72cf0583f85..4cecf239972 100644
--- a/src/mame/drivers/pgm2.cpp
+++ b/src/mame/drivers/pgm2.cpp
@@ -793,6 +793,7 @@ void pgm2_state::pgm2(machine_config &config)
void pgm2_state::pgm2_lores(machine_config &config)
{
pgm2(config);
+ m_screen->set_refresh(HZ_TO_ATTOSECONDS(15625.0/264.0)); // not verified
m_screen->set_visarea(0, 320-1, 0, 240-1);
}
diff --git a/src/mame/drivers/rfslots8085.cpp b/src/mame/drivers/rfslots8085.cpp
index 47c0ef44cc4..94eae5ecc82 100644
--- a/src/mame/drivers/rfslots8085.cpp
+++ b/src/mame/drivers/rfslots8085.cpp
@@ -16,6 +16,16 @@
IC39 = AY-3-8910A
IC38 = AY-3-8910A
+Recreativos Franco used this hardware from 1987 to 1992 on several machines, including:
+ -Baby & Bombo
+ -Baby Formula
+ -Limon y Baby
+ -Limon y Baby 100
+ -Baby Afrojin Dakar 3
+ -El Tren
+ -Baby Derby
+ Etc.
+
***************************************************************************/
#include "emu.h"
diff --git a/src/mame/drivers/spc1500.cpp b/src/mame/drivers/spc1500.cpp
index ad67dfe7242..c6732deed1f 100644
--- a/src/mame/drivers/spc1500.cpp
+++ b/src/mame/drivers/spc1500.cpp
@@ -713,7 +713,7 @@ static INPUT_PORTS_START( spc1500 )
PORT_START("LINE.1")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("= +") PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') PORT_CHAR('+')
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Right") PORT_CODE(KEYCODE_RIGHT)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Right") PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Space") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Return") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("C") PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C') PORT_CHAR(0x03)
@@ -723,7 +723,7 @@ static INPUT_PORTS_START( spc1500 )
PORT_START("LINE.2")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Caps") PORT_CODE(KEYCODE_CAPSLOCK)
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Left") PORT_CODE(KEYCODE_LEFT)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Left") PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT))
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Z") PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z') PORT_CHAR(0x1a)
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("] }") PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(']') PORT_CHAR('}') PORT_CHAR(0x1d)
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("V") PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V') PORT_CHAR(0x16)
@@ -732,8 +732,8 @@ static INPUT_PORTS_START( spc1500 )
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("2 @") PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('@')
PORT_START("LINE.3")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Backspace") PORT_CODE(KEYCODE_BACKSPACE) PORT_CODE(KEYCODE_INSERT) PORT_CHAR(UCHAR_MAMEKEY(INSERT))
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(UTF8_UP) PORT_CODE(KEYCODE_UP)
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Backspace") PORT_CODE(KEYCODE_BACKSPACE) PORT_CODE(KEYCODE_INSERT) PORT_CHAR(8) PORT_CHAR(UCHAR_MAMEKEY(INSERT))
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(UTF8_UP) PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP))
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ESC") PORT_CODE(KEYCODE_ESC) PORT_CHAR(0x1b)
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("` ~") PORT_CODE(KEYCODE_TILDE) PORT_CHAR('`') PORT_CHAR('~')
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("B") PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B') PORT_CHAR(0x02)
@@ -743,7 +743,7 @@ static INPUT_PORTS_START( spc1500 )
PORT_START("LINE.4")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Del Ins") PORT_CODE(KEYCODE_DEL_PAD) PORT_CHAR(UCHAR_MAMEKEY(DEL_PAD)) PORT_CHAR(8)
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Down") PORT_CODE(KEYCODE_DOWN)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Down") PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN))
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Tab") PORT_CODE(KEYCODE_TAB) PORT_CHAR('\t')
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Home") PORT_CODE(KEYCODE_HOME)
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("N") PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N') PORT_CHAR(0x0e)
diff --git a/src/mame/drivers/unk6502_st2xxx.cpp b/src/mame/drivers/unk6502_st2xxx.cpp
index bf1bbf25dca..ffccdd32033 100644
--- a/src/mame/drivers/unk6502_st2xxx.cpp
+++ b/src/mame/drivers/unk6502_st2xxx.cpp
@@ -1,7 +1,7 @@
// license:BSD-3-Clause
// copyright-holders:David Haywood
-// unknown 6502 based handhelds, possibly ST2205U architecture
+// unknown 6502 based handhelds, ST2205U or ST23XX architecture
// the BBL 380 - 180 in 1 features similar menus / presentation / games to the 'ORB Gaming Retro Arcade Pocket Handheld Games Console with 153 Games' (eg has Matchstick Man, Gang Tie III etc.)
// https://www.youtube.com/watch?v=NacY2WHd-CY
@@ -50,7 +50,7 @@ private:
void bbl380_map(address_map &map);
- required_device<st2205u_device> m_maincpu;
+ required_device<st2xxx_device> m_maincpu;
required_device<palette_device> m_palette;
required_device<screen_device> m_screen;
};
@@ -97,9 +97,8 @@ INPUT_PORTS_END
void bbl380_state::bbl380(machine_config &config)
{
- ST2205U(config, m_maincpu, 8000000); // unknown clock; type close but not quite correct?
+ ST2302U(config, m_maincpu, 8000000); // unknown clock; type not confirmed
m_maincpu->set_addrmap(AS_DATA, &bbl380_state::bbl380_map);
- m_maincpu->set_alt_map();
SCREEN(config, m_screen, SCREEN_TYPE_LCD); // TFT color LCD
m_screen->set_refresh_hz(60);
@@ -125,6 +124,13 @@ ROM_START( bbl380 )
// 0x0022XX, 0x0026XX, 0x002AXX, 0x002CXX, 0x002DXX, 0x0031XX, 0x0036XX, etc. should not be FF fill
ROM_END
+ROM_START( rhhc152 )
+ ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASEFF )
+ ROM_LOAD( "st2x_internal.bin", 0x002000, 0x002000, BAD_DUMP CRC(f4dc1fc2) SHA1(bbc11539c48eb612ebae50da45e03b6fde440941) ) // internal OTPROM BIOS, dumped from dgun2953 PCB, 6000-7fff range
+
+ ROM_REGION( 0x800000, "spi", ROMREGION_ERASEFF )
+ ROM_LOAD( "152_mk25q32amg_ef4016.bin", 0x000000, 0x400000, CRC(5f553895) SHA1(cd21c6ff225e0455531f6b1d9f1c66a284948516) )
+ROM_END
ROM_START( ragc153 )
ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASEFF )
@@ -166,7 +172,8 @@ void bbl380_state::init_ragc153()
}
CONS( 200?, bbl380, 0, 0, bbl380, bbl380, bbl380_state, empty_init, "BaoBaoLong", "BBL380 - 180 in 1", MACHINE_IS_SKELETON )
-CONS( 200?, ragc153, 0, 0, bbl380, bbl380, bbl380_state, init_ragc153, "Orb", "Retro Arcade Game Controller 153-in-1", MACHINE_IS_SKELETON )
+CONS( 200?, rhhc152, 0, 0, bbl380, bbl380, bbl380_state, init_ragc153, "Orb", "Retro Handheld Console 152-in-1", MACHINE_IS_SKELETON ) // looks like a mini GameBoy - 'Over 150 games' on box
+CONS( 200?, ragc153, 0, 0, bbl380, bbl380, bbl380_state, init_ragc153, "Orb", "Retro Arcade Game Controller 153-in-1", MACHINE_IS_SKELETON ) // looks like a Game & Watch
CONS( 200?, dphh8630, 0, 0, bbl380, bbl380, bbl380_state, init_ragc153, "PCP", "PCP 8630 - 230-in-1 - Digital Pocket Hand Held System", MACHINE_IS_SKELETON ) // PCP isn't mentioned on packaging
CONS( 200?, dgun2953, 0, 0, bbl380, bbl380, bbl380_state, init_ragc153, "dreamGEAR", "My Arcade Gamer Mini 160-in-1 (DGUN-2953)", MACHINE_IS_SKELETON )
diff --git a/src/mame/drivers/y2.cpp b/src/mame/drivers/y2.cpp
index 2f36fa1227b..2cde3ca22bd 100644
--- a/src/mame/drivers/y2.cpp
+++ b/src/mame/drivers/y2.cpp
@@ -107,3 +107,7 @@ ROM_END
There is a PS2 version with the Unlimited Match title screen, but unless it's used for a different region the arcade doesn't show that title, only announces it. */
GAME( 2009, kof2002um, 0, system_board_y2, system_board_y2, system_board_y2_state, empty_init, ROT0, "SNK Playmore / New Channel", "The King of Fighters - Fuchou Zhi Lu/Road to Revenge / The King of Fighters 2002 Unlimited Match (China)", MACHINE_IS_SKELETON ) // also Export?
GAME( 2009, kof2002umj, kof2002um, system_board_y2, system_board_y2, system_board_y2_state, empty_init, ROT0, "SNK Playmore", "The King of Fighters 2002 Unlimited Match (Japan)", MACHINE_IS_SKELETON )
+
+//ひぐらしの哭く頃に 雀/Higurashi no naku koro ni Jan
+//エヌアイン完全世界/En-Eins Perfektewelt
+//上海 臥龍天昇/Shanghai Ga ryū tenshō
diff --git a/src/mame/includes/generalplus_gpl16250_romram.h b/src/mame/includes/generalplus_gpl16250_romram.h
index e89e006b61b..c1b6fd7f972 100644
--- a/src/mame/includes/generalplus_gpl16250_romram.h
+++ b/src/mame/includes/generalplus_gpl16250_romram.h
@@ -23,8 +23,7 @@ public:
{
}
- void wrlshunt(machine_config &config);
- void paccon(machine_config &config);
+ void gpl16250_romram(machine_config &config);
void init_wrlshunt();
void init_ths();
diff --git a/src/mame/layout/dct11em.lay b/src/mame/layout/dct11em.lay
index b00982d72da..dc2dd3d67c3 100644
--- a/src/mame/layout/dct11em.lay
+++ b/src/mame/layout/dct11em.lay
@@ -19,10 +19,10 @@ license:CC0
</element>
<view name="Default Layout">
- <bounds left="0" top="0" right="274" bottom="350" />
+ <bounds left="0" top="0" right="320" bottom="328" />
<screen index="0">
- <bounds x="0" y="0" width="362" height="262" />
+ <bounds x="0" y="0" width="320" height="240" />
</screen>
<element name="led0" ref="a_led">
@@ -31,10 +31,10 @@ license:CC0
<repeat count="2">
<param name="s" start="11" increment="-6" />
- <param name="y" start="267" increment="40" />
+ <param name="y" start="245" increment="40" />
<repeat count="6">
<param name="n" start="~s~" increment="-1" />
- <param name="x" start="10" increment="44" />
+ <param name="x" start="33" increment="44" />
<element name="digit~n~" ref="digit">
<bounds x="~x~" y="~y~" width="34" height="38" />
</element>
diff --git a/src/mame/layout/de2.lay b/src/mame/layout/de2.lay
index c8b20749332..a4162aa9005 100644
--- a/src/mame/layout/de2.lay
+++ b/src/mame/layout/de2.lay
@@ -16,115 +16,53 @@ copyright-holders:Barry Rodewald
<color red="1.0" green="0.0" blue="0.0" />
</led7seg>
</element>
- <element name="diagled" defstate="0">
- <disk>
- <color red="1.0" green="0.0" blue="0.0" />
- </disk>
- </element>
<element name="P3"><text string="Player 1"><color red="1.0" green="1.0" blue="1.0" /></text></element>
<element name="P4"><text string="Player 2"><color red="1.0" green="1.0" blue="1.0" /></text></element>
<element name="P5"><text string="Player 3"><color red="1.0" green="1.0" blue="1.0" /></text></element>
<element name="P6"><text string="Player 4"><color red="1.0" green="1.0" blue="1.0" /></text></element>
- <view name="Default Layout">
+ <group name="score">
+ <repeat count="7">
+ <param name="n" start="~s~" increment="1" />
+ <param name="x" start="0" increment="24" />
+ <element name="digit~n~" ref="~e~">
+ <bounds x="~x~" y="0" width="24" height="39" />
+ </element>
+ </repeat>
+ </group>
- <!-- Background -->
- <bounds left="0" top="20" right="318" bottom="394" />
+ <view name="Default Layout">
+ <bounds left="0" top="20" right="364" bottom="149" />
<!-- LEDs -->
<!-- Player 1 Score -->
-
- <element name="digit1" ref="digit">
- <bounds left="10" top="45" right="30" bottom="84" />
- </element>
- <element name="digit2" ref="digit">
- <bounds left="34" top="45" right="54" bottom="84" />
- </element>
- <element name="digit3" ref="digit">
- <bounds left="58" top="45" right="78" bottom="84" />
- </element>
- <element name="digit4" ref="digit">
- <bounds left="82" top="45" right="102" bottom="84" />
- </element>
- <element name="digit5" ref="digit">
- <bounds left="106" top="45" right="126" bottom="84" />
- </element>
- <element name="digit6" ref="digit">
- <bounds left="130" top="45" right="150" bottom="84" />
- </element>
- <element name="digit7" ref="digit">
- <bounds left="154" top="45" right="174" bottom="84" />
- </element>
+ <param name="e" value="digit" />
+ <param name="s" value="1" />
+ <group ref="score">
+ <bounds left="10" top="45" right="174" bottom="84" />
+ </group>
<!-- Player 2 Score -->
- <element name="digit9" ref="digit">
- <bounds left="190" top="45" right="210" bottom="84" />
- </element>
- <element name="digit10" ref="digit">
- <bounds left="214" top="45" right="234" bottom="84" />
- </element>
- <element name="digit11" ref="digit">
- <bounds left="238" top="45" right="258" bottom="84" />
- </element>
- <element name="digit12" ref="digit">
- <bounds left="262" top="45" right="282" bottom="84" />
- </element>
- <element name="digit13" ref="digit">
- <bounds left="286" top="45" right="306" bottom="84" />
- </element>
- <element name="digit14" ref="digit">
- <bounds left="310" top="45" right="330" bottom="84" />
- </element>
- <element name="digit15" ref="digit">
- <bounds left="334" top="45" right="354" bottom="84" />
- </element>
+ <param name="e" value="digit" />
+ <param name="s" value="9" />
+ <group ref="score">
+ <bounds left="190" top="45" right="354" bottom="84" />
+ </group>
<!-- Player 3 Score -->
- <element name="digit17" ref="ldigit">
- <bounds left="10" top="100" right="30" bottom="139" />
- </element>
- <element name="digit18" ref="ldigit">
- <bounds left="34" top="100" right="54" bottom="139" />
- </element>
- <element name="digit19" ref="ldigit">
- <bounds left="58" top="100" right="78" bottom="139" />
- </element>
- <element name="digit20" ref="ldigit">
- <bounds left="82" top="100" right="102" bottom="139" />
- </element>
- <element name="digit21" ref="ldigit">
- <bounds left="106" top="100" right="126" bottom="139" />
- </element>
- <element name="digit22" ref="ldigit">
- <bounds left="130" top="100" right="150" bottom="139" />
- </element>
- <element name="digit23" ref="ldigit">
- <bounds left="154" top="100" right="174" bottom="139" />
- </element>
+ <param name="e" value="ldigit" />
+ <param name="s" value="17" />
+ <group ref="score">
+ <bounds left="10" top="100" right="174" bottom="139" />
+ </group>
<!-- Player 4 Score -->
- <element name="digit25" ref="ldigit">
- <bounds left="190" top="100" right="210" bottom="139" />
- </element>
- <element name="digit26" ref="ldigit">
- <bounds left="214" top="100" right="234" bottom="139" />
- </element>
- <element name="digit27" ref="ldigit">
- <bounds left="238" top="100" right="258" bottom="139" />
- </element>
- <element name="digit28" ref="ldigit">
- <bounds left="262" top="100" right="282" bottom="139" />
- </element>
- <element name="digit29" ref="ldigit">
- <bounds left="286" top="100" right="306" bottom="139" />
- </element>
- <element name="digit30" ref="ldigit">
- <bounds left="310" top="100" right="330" bottom="139" />
- </element>
- <element name="digit31" ref="ldigit">
- <bounds left="334" top="100" right="354" bottom="139" />
- </element>
+ <param name="e" value="ldigit" />
+ <param name="s" value="25" />
+ <group ref="score">
+ <bounds left="190" top="100" right="354" bottom="139" />
+ </group>
<element ref="P3"><bounds left="10" right="174" top="30" bottom="42" /></element>
<element ref="P4"><bounds left="190" right="354" top="30" bottom="42" /></element>
diff --git a/src/mame/layout/de2a3.lay b/src/mame/layout/de2a3.lay
index f94ea1ef186..c220a85aa70 100644
--- a/src/mame/layout/de2a3.lay
+++ b/src/mame/layout/de2a3.lay
@@ -13,132 +13,49 @@ Data East Alphanumeric Display Type 3
<color red="1.0" green="0.0" blue="0.0" />
</led14segsc>
</element>
- <element name="ldigit" defstate="0">
- <led7seg>
- <color red="1.0" green="0.0" blue="0.0" />
- </led7seg>
- </element>
- <element name="diagled" defstate="0">
- <disk>
- <color red="1.0" green="0.0" blue="0.0" />
- </disk>
- </element>
<element name="P3"><text string="Player 1"><color red="1.0" green="1.0" blue="1.0" /></text></element>
<element name="P4"><text string="Player 2"><color red="1.0" green="1.0" blue="1.0" /></text></element>
<element name="P5"><text string="Player 3"><color red="1.0" green="1.0" blue="1.0" /></text></element>
<element name="P6"><text string="Player 4"><color red="1.0" green="1.0" blue="1.0" /></text></element>
- <view name="Default Layout">
+ <group name="score">
+ <repeat count="8">
+ <param name="n" start="~s~" increment="1" />
+ <param name="x" start="0" increment="24" />
+ <element name="digit~n~" ref="digit">
+ <bounds x="~x~" y="0" width="24" height="39" />
+ </element>
+ </repeat>
+ </group>
- <!-- Background -->
- <bounds left="0" top="20" right="318" bottom="394" />
+ <view name="Default Layout">
+ <bounds left="0" top="20" right="400" bottom="149" />
<!-- LEDs -->
<!-- Player 1 Score -->
-
- <element name="digit0" ref="digit">
- <bounds left="10" top="45" right="30" bottom="84" />
- </element>
- <element name="digit1" ref="digit">
- <bounds left="34" top="45" right="54" bottom="84" />
- </element>
- <element name="digit2" ref="digit">
- <bounds left="58" top="45" right="78" bottom="84" />
- </element>
- <element name="digit3" ref="digit">
- <bounds left="82" top="45" right="102" bottom="84" />
- </element>
- <element name="digit4" ref="digit">
- <bounds left="106" top="45" right="126" bottom="84" />
- </element>
- <element name="digit5" ref="digit">
- <bounds left="130" top="45" right="150" bottom="84" />
- </element>
- <element name="digit6" ref="digit">
- <bounds left="154" top="45" right="174" bottom="84" />
- </element>
- <element name="digit7" ref="digit">
- <bounds left="178" top="45" right="198" bottom="84" />
- </element>
+ <param name="s" value="0" />
+ <group ref="score">
+ <bounds left="10" top="45" right="198" bottom="84" />
+ </group>
<!-- Player 2 Score -->
- <element name="digit8" ref="digit">
- <bounds left="202" top="45" right="222" bottom="84" />
- </element>
- <element name="digit9" ref="digit">
- <bounds left="226" top="45" right="246" bottom="84" />
- </element>
- <element name="digit10" ref="digit">
- <bounds left="250" top="45" right="270" bottom="84" />
- </element>
- <element name="digit11" ref="digit">
- <bounds left="274" top="45" right="294" bottom="84" />
- </element>
- <element name="digit12" ref="digit">
- <bounds left="298" top="45" right="318" bottom="84" />
- </element>
- <element name="digit13" ref="digit">
- <bounds left="322" top="45" right="342" bottom="84" />
- </element>
- <element name="digit14" ref="digit">
- <bounds left="346" top="45" right="366" bottom="84" />
- </element>
- <element name="digit15" ref="digit">
- <bounds left="370" top="45" right="390" bottom="84" />
- </element>
+ <param name="s" value="8" />
+ <group ref="score">
+ <bounds left="202" top="45" right="390" bottom="84" />
+ </group>
<!-- Player 3 Score -->
- <element name="digit16" ref="digit">
- <bounds left="10" top="100" right="30" bottom="139" />
- </element>
- <element name="digit17" ref="digit">
- <bounds left="34" top="100" right="54" bottom="139" />
- </element>
- <element name="digit18" ref="digit">
- <bounds left="58" top="100" right="78" bottom="139" />
- </element>
- <element name="digit19" ref="digit">
- <bounds left="82" top="100" right="102" bottom="139" />
- </element>
- <element name="digit20" ref="digit">
- <bounds left="106" top="100" right="126" bottom="139" />
- </element>
- <element name="digit21" ref="digit">
- <bounds left="130" top="100" right="150" bottom="139" />
- </element>
- <element name="digit22" ref="digit">
- <bounds left="154" top="100" right="174" bottom="139" />
- </element>
- <element name="digit23" ref="digit">
- <bounds left="178" top="100" right="198" bottom="139" />
- </element>
+ <param name="s" value="16" />
+ <group ref="score">
+ <bounds left="10" top="100" right="198" bottom="139" />
+ </group>
<!-- Player 4 Score -->
- <element name="digit24" ref="digit">
- <bounds left="202" top="100" right="222" bottom="139" />
- </element>
- <element name="digit25" ref="digit">
- <bounds left="226" top="100" right="246" bottom="139" />
- </element>
- <element name="digit26" ref="digit">
- <bounds left="250" top="100" right="270" bottom="139" />
- </element>
- <element name="digit27" ref="digit">
- <bounds left="274" top="100" right="294" bottom="139" />
- </element>
- <element name="digit28" ref="digit">
- <bounds left="298" top="100" right="318" bottom="139" />
- </element>
- <element name="digit29" ref="digit">
- <bounds left="322" top="100" right="342" bottom="139" />
- </element>
- <element name="digit30" ref="digit">
- <bounds left="346" top="100" right="366" bottom="139" />
- </element>
- <element name="digit31" ref="digit">
- <bounds left="370" top="100" right="390" bottom="139" />
- </element>
+ <param name="s" value="24" />
+ <group ref="score">
+ <bounds left="202" top="100" right="390" bottom="139" />
+ </group>
<element ref="P3"><bounds left="10" right="174" top="30" bottom="42" /></element>
<element ref="P4"><bounds left="190" right="354" top="30" bottom="42" /></element>
diff --git a/src/mame/layout/gts80a_caveman.lay b/src/mame/layout/gts80a_caveman.lay
index d8180a76584..ea39780fc8f 100644
--- a/src/mame/layout/gts80a_caveman.lay
+++ b/src/mame/layout/gts80a_caveman.lay
@@ -26,9 +26,7 @@ copyright-holders:Robbbert
<element name="P5"><text string="Player 3"><color red="1.0" green="1.0" blue="1.0" /></text></element>
<element name="P6"><text string="Player 4"><color red="1.0" green="1.0" blue="1.0" /></text></element>
- <view name="Default Layout">
- <bounds left="0" top="20" right="318" bottom="394" />
-
+ <group name="backglass">
<!-- LEDs -->
<!-- Player 1 Score -->
@@ -143,9 +141,22 @@ copyright-holders:Robbbert
<element name="text2" ref="P4"><bounds left="100" right="180" top="90" bottom="102" /></element>
<element name="text1" ref="P5"><bounds left="100" right="180" top="150" bottom="162" /></element>
<element name="text0" ref="P6"><bounds left="100" right="180" top="210" bottom="222" /></element>
+ </group>
+
+ <view name="Backglass and Screen">
+ <bounds left="0" top="20" right="817" bottom="394" />
+
+ <group ref="backglass" />
<screen index="0">
- <bounds x="320" y="0" width="320" height="240" />
+ <bounds x="318" y="20" width="499" height="374" />
</screen>
</view>
+
+ <view name="Backglass Only">
+ <bounds left="0" top="20" right="318" bottom="394" />
+
+ <group ref="backglass" />
+ </view>
+
</mamelayout>
diff --git a/src/mame/layout/mchess.lay b/src/mame/layout/mchess.lay
index aac18738a07..67d63fcd660 100644
--- a/src/mame/layout/mchess.lay
+++ b/src/mame/layout/mchess.lay
@@ -59,37 +59,31 @@ license:CC0
<!-- groups -->
<group name="display">
- <collection name="Bezel">
- <element ref="cb_border"><bounds left="-3" right="83" top="-3" bottom="91.434" /></element>
- </collection>
-
+ <element ref="cb_border"><bounds left="-3" right="83" top="-3" bottom="91.434" /></element>
<screen index="0"><bounds left="0" right="80" top="0" bottom="88.434" /></screen>
-
- <collection name="Overlay">
- <element ref="cb_overlay" blend="multiply"><bounds left="0" right="80" top="0" bottom="88.434" /></element>
+ <element ref="cb_overlay" blend="multiply"><bounds left="0" right="80" top="0" bottom="88.434" /></element>
+ <element ref="blackb"><bounds left="79.9" right="80.1" top="-0.1" bottom="88.6" /></element>
+ <element ref="blackb"><bounds left="-0.1" right="80.1" top="88.1" bottom="88.534" /></element>
+ <element ref="blackb"><bounds x="-0.1" y="79.4" width="80.2" height="0.8" /></element>
+
+ <repeat count="4">
+ <param name="left" start="0" increment="20" />
+ <param name="right" start="10" increment="20" />
<repeat count="4">
- <param name="left" start="0" increment="20" />
- <param name="right" start="10" increment="20" />
- <repeat count="4">
- <param name="top" start="9.96" increment="19.92" />
- <param name="bottom" start="19.92" increment="19.92" />
- <element ref="cb_mask" blend="multiply"><bounds left="~left~" right="~right~" top="~top~" bottom="~bottom~" /></element>
- </repeat>
+ <param name="top" start="9.96" increment="19.92" />
+ <param name="bottom" start="19.92" increment="19.92" />
+ <element ref="cb_mask" blend="multiply"><bounds left="~left~" right="~right~" top="~top~" bottom="~bottom~" /></element>
</repeat>
+ </repeat>
+ <repeat count="4">
+ <param name="left" start="70" increment="-20" />
+ <param name="right" start="80" increment="-20" />
<repeat count="4">
- <param name="left" start="70" increment="-20" />
- <param name="right" start="80" increment="-20" />
- <repeat count="4">
- <param name="top" start="0" increment="19.92" />
- <param name="bottom" start="9.96" increment="19.92" />
- <element ref="cb_mask" blend="multiply"><bounds left="~left~" right="~right~" top="~top~" bottom="~bottom~" /></element>
- </repeat>
+ <param name="top" start="0" increment="19.92" />
+ <param name="bottom" start="9.96" increment="19.92" />
+ <element ref="cb_mask" blend="multiply"><bounds left="~left~" right="~right~" top="~top~" bottom="~bottom~" /></element>
</repeat>
-
- <element ref="blackb"><bounds left="79.9" right="80.1" top="-0.1" bottom="88.6" /></element>
- <element ref="blackb"><bounds left="-0.1" right="80.1" top="88.1" bottom="88.534" /></element>
- <element ref="blackb"><bounds x="-0.1" y="79.4" width="80.2" height="0.8" /></element>
- </collection>
+ </repeat>
</group>
<group name="buttons">
diff --git a/src/mame/layout/mephisto_academy.lay b/src/mame/layout/mephisto_academy.lay
index daa8c2cc991..ccc26cc986b 100644
--- a/src/mame/layout/mephisto_academy.lay
+++ b/src/mame/layout/mephisto_academy.lay
@@ -404,36 +404,9 @@ license:CC0
<group name="panel">
<bounds left="0" right="100" top="0" bottom="10" />
- <group ref="lcd"><bounds x="1" y="0" width="23.55" height="6.25" /></group>
-
- <element ref="ledo"><bounds x="31.1" y="0.1" width="1.3" height="1.3" /></element>
- <element ref="ledo"><bounds x="37.1" y="0.1" width="1.3" height="1.3" /></element>
- <element ref="ledo"><bounds x="43.1" y="0.1" width="1.3" height="1.3" /></element>
- <element ref="ledo"><bounds x="49.1" y="0.1" width="1.3" height="1.3" /></element>
- <element ref="ledo"><bounds x="55.1" y="0.1" width="1.3" height="1.3" /></element>
- <element ref="ledo"><bounds x="61.1" y="0.1" width="1.3" height="1.3" /></element>
- <element ref="ledo"><bounds x="69.1" y="0.1" width="1.3" height="1.3" /></element>
- <element ref="ledo"><bounds x="75.1" y="0.1" width="1.3" height="1.3" /></element>
-
- <element name="0.0" ref="ledr" blend="add"><bounds x="31.1" y="0.1" width="1.3" height="1.3" /></element>
- <element name="1.0" ref="ledr" blend="add"><bounds x="37.1" y="0.1" width="1.3" height="1.3" /></element>
- <element name="2.0" ref="ledr" blend="add"><bounds x="43.1" y="0.1" width="1.3" height="1.3" /></element>
- <element name="3.0" ref="ledr" blend="add"><bounds x="49.1" y="0.1" width="1.3" height="1.3" /></element>
- <element name="0.2" ref="ledr" blend="add"><bounds x="55.1" y="0.1" width="1.3" height="1.3" /></element>
- <element name="1.2" ref="ledr" blend="add"><bounds x="61.1" y="0.1" width="1.3" height="1.3" /></element>
- <element name="2.2" ref="ledr" blend="add"><bounds x="69.1" y="0.1" width="1.3" height="1.3" /></element>
- <element name="3.2" ref="ledr" blend="add"><bounds x="75.1" y="0.1" width="1.3" height="1.3" /></element>
-
- <element name="0.1" ref="ledg" blend="add"><bounds x="31.1" y="0.1" width="1.3" height="1.3" /></element>
- <element name="1.1" ref="ledg" blend="add"><bounds x="37.1" y="0.1" width="1.3" height="1.3" /></element>
- <element name="2.1" ref="ledg" blend="add"><bounds x="43.1" y="0.1" width="1.3" height="1.3" /></element>
- <element name="3.1" ref="ledg" blend="add"><bounds x="49.1" y="0.1" width="1.3" height="1.3" /></element>
- <element name="0.3" ref="ledg" blend="add"><bounds x="55.1" y="0.1" width="1.3" height="1.3" /></element>
- <element name="1.3" ref="ledg" blend="add"><bounds x="61.1" y="0.1" width="1.3" height="1.3" /></element>
- <element name="2.3" ref="ledg" blend="add"><bounds x="69.1" y="0.1" width="1.3" height="1.3" /></element>
- <element name="3.3" ref="ledg" blend="add"><bounds x="75.1" y="0.1" width="1.3" height="1.3" /></element>
<element ref="text_lcd"><bounds x="1" y="6.5" width="24" height="1.7" /></element>
+ <group ref="lcd"><bounds x="1" y="0" width="23.55" height="6.25" /></group>
<element ref="text_train"> <bounds x="29.25" y="2" width="5" height="1.5" /> </element>
<element ref="text_info"> <bounds x="35.25" y="2" width="5" height="1.5" /> </element>
@@ -462,6 +435,33 @@ license:CC0
<element ref="hlb" inputtag="KEY" inputmask="0x20"> <bounds x="61" y="3.75" width="1.5" height="2.5" /> </element>
<element ref="hlbr" inputtag="KEY" inputmask="0x40"> <bounds x="69" y="3.75" width="1.5" height="2.5" /> </element>
<element ref="hlbr" inputtag="KEY" inputmask="0x80"> <bounds x="75" y="3.75" width="1.5" height="2.5" /> </element>
+
+ <element ref="ledo"><bounds x="31.1" y="0.1" width="1.3" height="1.3" /></element>
+ <element ref="ledo"><bounds x="37.1" y="0.1" width="1.3" height="1.3" /></element>
+ <element ref="ledo"><bounds x="43.1" y="0.1" width="1.3" height="1.3" /></element>
+ <element ref="ledo"><bounds x="49.1" y="0.1" width="1.3" height="1.3" /></element>
+ <element ref="ledo"><bounds x="55.1" y="0.1" width="1.3" height="1.3" /></element>
+ <element ref="ledo"><bounds x="61.1" y="0.1" width="1.3" height="1.3" /></element>
+ <element ref="ledo"><bounds x="69.1" y="0.1" width="1.3" height="1.3" /></element>
+ <element ref="ledo"><bounds x="75.1" y="0.1" width="1.3" height="1.3" /></element>
+
+ <element name="0.0" ref="ledr" blend="add"><bounds x="31.1" y="0.1" width="1.3" height="1.3" /></element>
+ <element name="1.0" ref="ledr" blend="add"><bounds x="37.1" y="0.1" width="1.3" height="1.3" /></element>
+ <element name="2.0" ref="ledr" blend="add"><bounds x="43.1" y="0.1" width="1.3" height="1.3" /></element>
+ <element name="3.0" ref="ledr" blend="add"><bounds x="49.1" y="0.1" width="1.3" height="1.3" /></element>
+ <element name="0.2" ref="ledr" blend="add"><bounds x="55.1" y="0.1" width="1.3" height="1.3" /></element>
+ <element name="1.2" ref="ledr" blend="add"><bounds x="61.1" y="0.1" width="1.3" height="1.3" /></element>
+ <element name="2.2" ref="ledr" blend="add"><bounds x="69.1" y="0.1" width="1.3" height="1.3" /></element>
+ <element name="3.2" ref="ledr" blend="add"><bounds x="75.1" y="0.1" width="1.3" height="1.3" /></element>
+
+ <element name="0.1" ref="ledg" blend="add"><bounds x="31.1" y="0.1" width="1.3" height="1.3" /></element>
+ <element name="1.1" ref="ledg" blend="add"><bounds x="37.1" y="0.1" width="1.3" height="1.3" /></element>
+ <element name="2.1" ref="ledg" blend="add"><bounds x="43.1" y="0.1" width="1.3" height="1.3" /></element>
+ <element name="3.1" ref="ledg" blend="add"><bounds x="49.1" y="0.1" width="1.3" height="1.3" /></element>
+ <element name="0.3" ref="ledg" blend="add"><bounds x="55.1" y="0.1" width="1.3" height="1.3" /></element>
+ <element name="1.3" ref="ledg" blend="add"><bounds x="61.1" y="0.1" width="1.3" height="1.3" /></element>
+ <element name="2.3" ref="ledg" blend="add"><bounds x="69.1" y="0.1" width="1.3" height="1.3" /></element>
+ <element name="3.3" ref="ledg" blend="add"><bounds x="75.1" y="0.1" width="1.3" height="1.3" /></element>
</group>
@@ -469,10 +469,8 @@ license:CC0
<view name="Internal Layout">
<bounds left="0" right="100" top="0" bottom="98" />
- <element ref="background"><bounds x="13" y="0" width="87" height="98" /></element>
- <!-- LCD panel -->
- <group ref="panel"><bounds x="18" y="88" width="100" height="10" /></group>
+ <element ref="background"><bounds x="13" y="0" width="87" height="98" /></element>
<!-- chessboard coords -->
<element ref="white"><bounds x="16.5" y="2.5" width="81" height="81" /></element>
@@ -496,5 +494,9 @@ license:CC0
<group ref="sb_board"><bounds x="17" y="3" width="80" height="80" /></group>
<group ref="sb_ui"><bounds x="1.5" y="3" width="10" height="80" /></group>
+
+ <!-- LCD panel -->
+ <group ref="panel"><bounds x="18" y="88" width="100" height="10" /></group>
+
</view>
</mamelayout>
diff --git a/src/mame/layout/mephisto_alm16.lay b/src/mame/layout/mephisto_alm16.lay
index 7484a9eb13a..ec968e41698 100644
--- a/src/mame/layout/mephisto_alm16.lay
+++ b/src/mame/layout/mephisto_alm16.lay
@@ -292,15 +292,6 @@ license:CC0
<group name="sb_ui">
<bounds x="0" y="0" width="10" height="81" />
- <element ref="cwhite"><bounds x="1" y="48" width="8" height="4" /></element>
- <element name="piece_ui13" ref="piece"><bounds x="1" y="48" width="4" height="4" /></element>
- <element name="piece_ui14" ref="piece"><bounds x="5" y="48" width="4" height="4" /></element>
- <element ref="hlub" inputtag="board:board:SPAWN" inputmask="0x1000"><bounds x="1" y="48" width="4" height="4" /><color alpha="0.25" /></element>
- <element ref="hlub" inputtag="board:board:SPAWN" inputmask="0x2000"><bounds x="5" y="48" width="4" height="4" /><color alpha="0.25" /></element>
- <element ref="wmask1" inputtag="FAKE" inputmask="1" inputraw="1"><bounds x="1" y="48" width="4" height="4" /></element>
- <element ref="wmask1" inputtag="FAKE" inputmask="1" inputraw="1"><bounds x="5" y="48" width="4" height="4" /></element>
- <element ref="wmask2" blend="multiply"><bounds x="1" y="48" width="8" height="4" /></element>
-
<!-- can click here to change board type -->
<element ref="hlub" inputtag="FAKE" inputmask="0x01" inputraw="1"><bounds x="0" y="1.5" width="10" height="5" /></element>
@@ -352,6 +343,15 @@ license:CC0
<element ref="hlub" inputtag="board:board:SPAWN" inputmask="0x0400"><bounds x="5" y="39" width="4" height="4" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:board:SPAWN" inputmask="0x0800"><bounds x="5" y="43" width="4" height="4" /><color alpha="0.25" /></element>
+ <element ref="cwhite"><bounds x="1" y="48" width="8" height="4" /></element>
+ <element name="piece_ui13" ref="piece"><bounds x="1" y="48" width="4" height="4" /></element>
+ <element name="piece_ui14" ref="piece"><bounds x="5" y="48" width="4" height="4" /></element>
+ <element ref="hlub" inputtag="board:board:SPAWN" inputmask="0x1000"><bounds x="1" y="48" width="4" height="4" /><color alpha="0.25" /></element>
+ <element ref="hlub" inputtag="board:board:SPAWN" inputmask="0x2000"><bounds x="5" y="48" width="4" height="4" /><color alpha="0.25" /></element>
+ <element ref="wmask1" inputtag="FAKE" inputmask="1" inputraw="1"><bounds x="1" y="48" width="4" height="4" /></element>
+ <element ref="wmask1" inputtag="FAKE" inputmask="1" inputraw="1"><bounds x="5" y="48" width="4" height="4" /></element>
+ <element ref="wmask2" blend="multiply"><bounds x="1" y="48" width="8" height="4" /></element>
+
<!-- hand -->
<element ref="text_uih1"><bounds x="0" y="54" width="10" height="2" /></element>
<element ref="cblack"><bounds x="1" y="56.5" width="8" height="6" /></element>
@@ -457,18 +457,17 @@ license:CC0
<view name="Internal Layout">
<bounds left="0" right="102" top="-2" bottom="103" />
- <group ref="panel"><bounds x="47.5" y="91.8" width="24.5" height="6.5" /></group>
<element ref="cblack"><bounds x="13" y="-2" width="89" height="89" /></element>
<element ref="cwhite"><bounds x="17" y="2" width="81" height="81" /></element>
<element ref="text_lcd"><bounds x="47.5" y="89" width="24.5" height="2" /></element>
+ <group ref="panel"><bounds x="47.5" y="91.8" width="24.5" height="6.5" /></group>
<group ref="buttons"><bounds x="77.5" y="88.5" width="13" height="13" /></group>
<group ref="sb_board"><bounds x="17.5" y="2.5" width="80" height="80" /></group>
<group ref="sb_ui"><bounds x="1.5" y="2" width="10" height="81" /></group>
- <!-- chessboard coords -->
-
+ <!-- chessboard coords -->
<element ref="text_8"><bounds x="14.2" y="6.5" width="2" height="2" /></element>
<element ref="text_7"><bounds x="14.2" y="16.5" width="2" height="2" /></element>
<element ref="text_6"><bounds x="14.2" y="26.5" width="2" height="2" /></element>
diff --git a/src/mame/layout/mephisto_alm32.lay b/src/mame/layout/mephisto_alm32.lay
index 3f6faed7a5f..6fecadda389 100644
--- a/src/mame/layout/mephisto_alm32.lay
+++ b/src/mame/layout/mephisto_alm32.lay
@@ -292,15 +292,6 @@ license:CC0
<group name="sb_ui">
<bounds x="0" y="0" width="10" height="81" />
- <element ref="cwhite"><bounds x="1" y="48" width="8" height="4" /></element>
- <element name="piece_ui13" ref="piece"><bounds x="1" y="48" width="4" height="4" /></element>
- <element name="piece_ui14" ref="piece"><bounds x="5" y="48" width="4" height="4" /></element>
- <element ref="hlub" inputtag="board:board:SPAWN" inputmask="0x1000"><bounds x="1" y="48" width="4" height="4" /><color alpha="0.25" /></element>
- <element ref="hlub" inputtag="board:board:SPAWN" inputmask="0x2000"><bounds x="5" y="48" width="4" height="4" /><color alpha="0.25" /></element>
- <element ref="wmask1" inputtag="FAKE" inputmask="1" inputraw="1"><bounds x="1" y="48" width="4" height="4" /></element>
- <element ref="wmask1" inputtag="FAKE" inputmask="1" inputraw="1"><bounds x="5" y="48" width="4" height="4" /></element>
- <element ref="wmask2" blend="multiply"><bounds x="1" y="48" width="8" height="4" /></element>
-
<!-- can click here to change board type -->
<element ref="hlub" inputtag="FAKE" inputmask="0x01" inputraw="1"><bounds x="0" y="1.5" width="10" height="5" /></element>
@@ -361,6 +352,15 @@ license:CC0
<element ref="text_uih2"><bounds x="1.5" y="63.75" width="7" height="2" /></element>
<element ref="hlub" inputtag="board:board:UI" inputmask="0x08"><bounds x="1" y="63.5" width="8" height="2.5" /><color alpha="0.25" /></element>
+ <element ref="cwhite"><bounds x="1" y="48" width="8" height="4" /></element>
+ <element name="piece_ui13" ref="piece"><bounds x="1" y="48" width="4" height="4" /></element>
+ <element name="piece_ui14" ref="piece"><bounds x="5" y="48" width="4" height="4" /></element>
+ <element ref="hlub" inputtag="board:board:SPAWN" inputmask="0x1000"><bounds x="1" y="48" width="4" height="4" /><color alpha="0.25" /></element>
+ <element ref="hlub" inputtag="board:board:SPAWN" inputmask="0x2000"><bounds x="5" y="48" width="4" height="4" /><color alpha="0.25" /></element>
+ <element ref="wmask1" inputtag="FAKE" inputmask="1" inputraw="1"><bounds x="1" y="48" width="4" height="4" /></element>
+ <element ref="wmask1" inputtag="FAKE" inputmask="1" inputraw="1"><bounds x="5" y="48" width="4" height="4" /></element>
+ <element ref="wmask2" blend="multiply"><bounds x="1" y="48" width="8" height="4" /></element>
+
<!-- undo -->
<element ref="text_uiu1"><bounds x="0" y="68" width="10" height="2" /></element>
<element ref="cwhite"><bounds x="1" y="70.5" width="1.7" height="6" /></element>
@@ -457,18 +457,17 @@ license:CC0
<view name="Internal Layout">
<bounds left="0" right="102" top="-2" bottom="103" />
- <group ref="panel"><bounds x="47.5" y="91.8" width="24.5" height="6.5" /></group>
<element ref="cblack"><bounds x="13" y="-2" width="89" height="89" /></element>
<element ref="cwhite"><bounds x="17" y="2" width="81" height="81" /></element>
<element ref="text_lcd"><bounds x="47.5" y="89" width="24.5" height="2" /></element>
+ <group ref="panel"><bounds x="47.5" y="91.8" width="24.5" height="6.5" /></group>
<group ref="buttons"><bounds x="77.5" y="88.5" width="13" height="13" /></group>
<group ref="sb_board"><bounds x="17.5" y="2.5" width="80" height="80" /></group>
<group ref="sb_ui"><bounds x="1.5" y="2" width="10" height="81" /></group>
- <!-- chessboard coords -->
-
+ <!-- chessboard coords -->
<element ref="text_8"><bounds x="14.2" y="6.5" width="2" height="2" /></element>
<element ref="text_7"><bounds x="14.2" y="16.5" width="2" height="2" /></element>
<element ref="text_6"><bounds x="14.2" y="26.5" width="2" height="2" /></element>
diff --git a/src/mame/layout/mephisto_berlin.lay b/src/mame/layout/mephisto_berlin.lay
index 13fc8d8c276..6c869ed0ff3 100644
--- a/src/mame/layout/mephisto_berlin.lay
+++ b/src/mame/layout/mephisto_berlin.lay
@@ -392,10 +392,9 @@ license:CC0
<view name="Internal Layout">
<bounds left="2" right="129" top="0.5" bottom="89" />
- <group ref="panel1"><bounds x="103.5" y="56.9" width="23" height="6.1" /></group>
-
- <!-- chessboard coords -->
+ <element ref="cwhite"><bounds x="19.5" y="2.5" width="81" height="81" /></element>
+ <!-- chessboard coords -->
<element ref="text_8"><bounds x="15.7" y="7" width="2" height="2" /></element>
<element ref="text_7"><bounds x="15.7" y="17" width="2" height="2" /></element>
<element ref="text_6"><bounds x="15.7" y="27" width="2" height="2" /></element>
@@ -413,12 +412,12 @@ license:CC0
<element ref="text_g"><bounds x="84" y="85.5" width="2" height="2" /></element>
<element ref="text_h"><bounds x="94" y="85.5" width="2" height="2" /></element>
- <element ref="cwhite"><bounds x="19.5" y="2.5" width="81" height="81" /></element>
+ <group ref="sb_board"><bounds x="20" y="3" width="80" height="80" /></group>
+ <group ref="sb_ui"><bounds x="3.5" y="3" width="10" height="80" /></group>
- <!-- LCD panel -->
+ <!-- LCD panel -->
+ <group ref="panel1"><bounds x="103.5" y="56.9" width="23" height="6.1" /></group>
<group ref="panel2"><bounds x="103" y="72" width="24" height="13" /></group>
- <group ref="sb_board"><bounds x="20" y="3" width="80" height="80" /></group>
- <group ref="sb_ui"><bounds x="3.5" y="3" width="10" height="80" /></group>
</view>
</mamelayout>
diff --git a/src/mame/layout/mephisto_gen32.lay b/src/mame/layout/mephisto_gen32.lay
index 62b3a801700..59f748e9858 100644
--- a/src/mame/layout/mephisto_gen32.lay
+++ b/src/mame/layout/mephisto_gen32.lay
@@ -292,15 +292,6 @@ license:CC0
<group name="sb_ui">
<bounds x="0" y="0" width="10" height="81" />
- <element ref="cwhite"><bounds x="1" y="48" width="8" height="4" /></element>
- <element name="piece_ui13" ref="piece"><bounds x="1" y="48" width="4" height="4" /></element>
- <element name="piece_ui14" ref="piece"><bounds x="5" y="48" width="4" height="4" /></element>
- <element ref="hlub" inputtag="board:board:SPAWN" inputmask="0x1000"><bounds x="1" y="48" width="4" height="4" /><color alpha="0.25" /></element>
- <element ref="hlub" inputtag="board:board:SPAWN" inputmask="0x2000"><bounds x="5" y="48" width="4" height="4" /><color alpha="0.25" /></element>
- <element ref="wmask1" inputtag="FAKE" inputmask="1" inputraw="1"><bounds x="1" y="48" width="4" height="4" /></element>
- <element ref="wmask1" inputtag="FAKE" inputmask="1" inputraw="1"><bounds x="5" y="48" width="4" height="4" /></element>
- <element ref="wmask2" blend="multiply"><bounds x="1" y="48" width="8" height="4" /></element>
-
<!-- can click here to change board type -->
<element ref="hlub" inputtag="FAKE" inputmask="0x01" inputraw="1"><bounds x="0" y="1.5" width="10" height="5" /></element>
@@ -352,6 +343,15 @@ license:CC0
<element ref="hlub" inputtag="board:board:SPAWN" inputmask="0x0400"><bounds x="5" y="39" width="4" height="4" /><color alpha="0.25" /></element>
<element ref="hlub" inputtag="board:board:SPAWN" inputmask="0x0800"><bounds x="5" y="43" width="4" height="4" /><color alpha="0.25" /></element>
+ <element ref="cwhite"><bounds x="1" y="48" width="8" height="4" /></element>
+ <element name="piece_ui13" ref="piece"><bounds x="1" y="48" width="4" height="4" /></element>
+ <element name="piece_ui14" ref="piece"><bounds x="5" y="48" width="4" height="4" /></element>
+ <element ref="hlub" inputtag="board:board:SPAWN" inputmask="0x1000"><bounds x="1" y="48" width="4" height="4" /><color alpha="0.25" /></element>
+ <element ref="hlub" inputtag="board:board:SPAWN" inputmask="0x2000"><bounds x="5" y="48" width="4" height="4" /><color alpha="0.25" /></element>
+ <element ref="wmask1" inputtag="FAKE" inputmask="1" inputraw="1"><bounds x="1" y="48" width="4" height="4" /></element>
+ <element ref="wmask1" inputtag="FAKE" inputmask="1" inputraw="1"><bounds x="5" y="48" width="4" height="4" /></element>
+ <element ref="wmask2" blend="multiply"><bounds x="1" y="48" width="8" height="4" /></element>
+
<!-- hand -->
<element ref="text_uih1"><bounds x="0" y="54" width="10" height="2" /></element>
<element ref="cblack"><bounds x="1" y="56.5" width="8" height="6" /></element>
@@ -457,18 +457,17 @@ license:CC0
<view name="Internal Layout">
<bounds left="0" right="102" top="-2" bottom="103" />
- <group ref="panel"><bounds x="47.5" y="91.8" width="24.5" height="6.5" /></group>
<element ref="cblack"><bounds x="13" y="-2" width="89" height="89" /></element>
<element ref="cwhite"><bounds x="17" y="2" width="81" height="81" /></element>
<element ref="text_lcd"><bounds x="47.5" y="89" width="24.5" height="2" /></element>
+ <group ref="panel"><bounds x="47.5" y="91.8" width="24.5" height="6.5" /></group>
<group ref="buttons"><bounds x="77.5" y="88.5" width="13" height="13" /></group>
<group ref="sb_board"><bounds x="17.5" y="2.5" width="80" height="80" /></group>
<group ref="sb_ui"><bounds x="1.5" y="2" width="10" height="81" /></group>
- <!-- chessboard coords -->
-
+ <!-- chessboard coords -->
<element ref="text_8"><bounds x="14.2" y="6.5" width="2" height="2" /></element>
<element ref="text_7"><bounds x="14.2" y="16.5" width="2" height="2" /></element>
<element ref="text_6"><bounds x="14.2" y="26.5" width="2" height="2" /></element>
diff --git a/src/mame/layout/mephisto_milano.lay b/src/mame/layout/mephisto_milano.lay
index a19a538e3da..ef62ac65966 100644
--- a/src/mame/layout/mephisto_milano.lay
+++ b/src/mame/layout/mephisto_milano.lay
@@ -408,10 +408,9 @@ license:CC0
<view name="Internal Layout">
<bounds left="1" right="129" top="0.5" bottom="90" />
- <group ref="panel1"><bounds x="103.5" y="56.9" width="23" height="6.1" /></group>
-
- <!-- chessboard coords -->
+ <element ref="cwhite"><bounds x="19.5" y="2.5" width="81" height="81" /></element>
+ <!-- chessboard coords -->
<element ref="text_8"><bounds x="14.2" y="7" width="2" height="2" /></element>
<element ref="text_7"><bounds x="14.2" y="17" width="2" height="2" /></element>
<element ref="text_6"><bounds x="14.2" y="27" width="2" height="2" /></element>
@@ -430,9 +429,7 @@ license:CC0
<element ref="text_g"><bounds x="84" y="86.5" width="2" height="2" /></element>
<element ref="text_h"><bounds x="94" y="86.5" width="2" height="2" /></element>
- <element ref="cwhite"><bounds x="19.5" y="2.5" width="81" height="81" /></element>
-
- <!-- chessboard leds -->
+ <!-- chessboard leds -->
<element name="led0" ref="ledr"><bounds x="24" y="85" width="2" height="1" /></element>
<element name="led1" ref="ledr"><bounds x="34" y="85" width="2" height="1" /></element>
<element name="led2" ref="ledr"><bounds x="44" y="85" width="2" height="1" /></element>
@@ -450,10 +447,12 @@ license:CC0
<element name="led14" ref="ledr"><bounds x="16.5" y="17.5" width="2" height="1" /></element>
<element name="led15" ref="ledr"><bounds x="16.5" y="7.5" width="2" height="1" /></element>
- <!-- LCD panel -->
- <group ref="panel2"><bounds x="103" y="69" width="24" height="17" /></group>
-
<group ref="sb_board"><bounds x="20" y="3" width="80" height="80" /></group>
<group ref="sb_ui"><bounds x="2.5" y="3" width="10" height="80" /></group>
+
+ <!-- LCD panel -->
+ <group ref="panel1"><bounds x="103.5" y="56.9" width="23" height="6.1" /></group>
+ <group ref="panel2"><bounds x="103" y="69" width="24" height="17" /></group>
+
</view>
</mamelayout>
diff --git a/src/mame/layout/mephisto_modular_tm.lay b/src/mame/layout/mephisto_modular_tm.lay
index 83a08a0f749..53f2b236ad6 100644
--- a/src/mame/layout/mephisto_modular_tm.lay
+++ b/src/mame/layout/mephisto_modular_tm.lay
@@ -408,20 +408,17 @@ license:CC0
<view name="Internal Layout">
<bounds left="0" right="102" top="-2" bottom="103" />
-
- <group ref="panel"><bounds x="47.5" y="91.8" width="24.5" height="6.5" /></group>
-
<element ref="cblack"><bounds x="13" y="-2" width="89" height="89" /></element>
<element ref="cwhite"><bounds x="17" y="2" width="81" height="81" /></element>
<element ref="text_lcd"><bounds x="47.5" y="89" width="24.5" height="2" /></element>
+ <group ref="panel"><bounds x="47.5" y="91.8" width="24.5" height="6.5" /></group>
<group ref="buttons"><bounds x="77.5" y="88.5" width="13" height="13" /></group>
<group ref="sb_board"><bounds x="17.5" y="2.5" width="80" height="80" /></group>
<group ref="sb_ui"><bounds x="1.5" y="3" width="10" height="80" /></group>
- <!-- chessboard coords -->
-
+ <!-- chessboard coords -->
<element ref="text_8"><bounds x="14.2" y="6.5" width="2" height="2" /></element>
<element ref="text_7"><bounds x="14.2" y="16.5" width="2" height="2" /></element>
<element ref="text_6"><bounds x="14.2" y="26.5" width="2" height="2" /></element>
diff --git a/src/mame/layout/novag_cexpert.lay b/src/mame/layout/novag_cexpert.lay
new file mode 100644
index 00000000000..8c9f84755e3
--- /dev/null
+++ b/src/mame/layout/novag_cexpert.lay
@@ -0,0 +1,513 @@
+<?xml version="1.0"?>
+<!--
+license:CC0
+-->
+<mamelayout version="2">
+
+<!-- define elements -->
+
+ <element name="gray"><rect><color red="0.51" green="0.5" blue="0.49" /></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.1" green="0.01" blue="0.015" /></disk>
+ </element>
+ <element name="led2" defstate="0">
+ <disk state="1"><color red="1.0" green="0.1" blue="0.15" /></disk>
+ <disk state="0"><color red="0.14" green="0.014" blue="0.02" /></disk>
+ </element>
+
+ <element name="but" defstate="0">
+ <disk state="0"><color red="0.17" green="0.15" blue="0.15" /></disk>
+ <disk state="1"><color red="0.34" green="0.3" blue="0.3" /></disk>
+ </element>
+
+ <element name="text_1"><text string="1"><color red="0.9" green="0.9" blue="0.9" /></text></element>
+ <element name="text_2"><text string="2"><color red="0.9" green="0.9" blue="0.9" /></text></element>
+ <element name="text_3"><text string="3"><color red="0.9" green="0.9" blue="0.9" /></text></element>
+ <element name="text_4"><text string="4"><color red="0.9" green="0.9" blue="0.9" /></text></element>
+ <element name="text_5"><text string="5"><color red="0.9" green="0.9" blue="0.9" /></text></element>
+ <element name="text_6"><text string="6"><color red="0.9" green="0.9" blue="0.9" /></text></element>
+ <element name="text_7"><text string="7"><color red="0.9" green="0.9" blue="0.9" /></text></element>
+ <element name="text_8"><text string="8"><color red="0.9" green="0.9" blue="0.9" /></text></element>
+
+ <element name="text_a"><text string="A"><color red="0.9" green="0.9" blue="0.9" /></text></element>
+ <element name="text_b"><text string="B"><color red="0.9" green="0.9" blue="0.9" /></text></element>
+ <element name="text_c"><text string="C"><color red="0.9" green="0.9" blue="0.9" /></text></element>
+ <element name="text_d"><text string="D"><color red="0.9" green="0.9" blue="0.9" /></text></element>
+ <element name="text_e"><text string="E"><color red="0.9" green="0.9" blue="0.9" /></text></element>
+ <element name="text_f"><text string="F"><color red="0.9" green="0.9" blue="0.9" /></text></element>
+ <element name="text_g"><text string="G"><color red="0.9" green="0.9" blue="0.9" /></text></element>
+ <element name="text_h"><text string="H"><color red="0.9" green="0.9" blue="0.9" /></text></element>
+
+ <element name="text_l1ax"><text string="Player/"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_l1a"><text string="Player"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_l1b"><text string="Gambit Book"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_l2ax"><text string="Best Move/"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_l2a"><text string="Random"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_l2b"><text string="Training Level"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_l3a"><text string="Sound"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_l3b"><text string="Depth Search"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_l4a"><text string="Solve Mate"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_l4b"><text string="Infinite"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_l5a"><text string="Print Board"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_l5b"><text string="Interface"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_l6a"><text string="Print List"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_l6b"><text string="Acc. Time"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_l7a"><text string="Set Level"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_l7b"><text string=" "><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_l8a"><text string="Take Back"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_l8b"><text string="Restore"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+
+ <element name="text_m1a"><text string="New Game"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_m1b"><text string=" "><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_m2a"><text string="Verify"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_m2b"><text string="Set Up"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_m3a"><text string="Change Color"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_m3b"><text string=" "><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_m4a"><text string="Clear Board"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_m4b"><text string="Tournament"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_m4bx"><text string="Book"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_m5a"><text string="Print Moves"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_m5b"><text string="Print"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_m5bx"><text string="Evaluations"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_m6a"><text string="Trace Forward"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_m6b"><text string="AutoPlay"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_m7a"><text string="Hint"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_m7b"><text string="Next Best"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_m8a"><text string="Go"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_m8b"><text string=" "><color red="0.51" green="0.5" blue="0.49" /></text></element>
+
+ <element name="text_rx"><text string="C o m p u t i n g"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_r1"><text string="Error"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_r2"><text string="Verify"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_r3"><text string="Set Up"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_r4"><text string="Check"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_r5"><text string="Mate"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_r6"><text string="Draw"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_r7"><text string="Black"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+ <element name="text_r8"><text string="White"><color red="0.51" green="0.5" blue="0.49" /></text></element>
+
+ <element name="text_p1"><image file="chess/wk.png"></image></element>
+ <element name="text_p2"><image file="chess/wq.png"></image></element>
+ <element name="text_p3"><image file="chess/wr.png"></image></element>
+ <element name="text_p4"><image file="chess/wb.png"></image></element>
+ <element name="text_p5"><image file="chess/wn.png"></image></element>
+ <element name="text_p6"><image file="chess/wp.png"></image></element>
+
+
+<!-- sb board -->
+
+ <element name="cblack"><rect><color red="0.56" green="0.33" blue="0.12" /></rect></element>
+ <element name="cwhite"><rect><color red="0.84" green="0.75" blue="0.50" /></rect></element>
+
+ <element name="hlbb" defstate="0">
+ <text string=" "><bounds x="0" y="0" width="1" height="1" /></text>
+ <disk state="1">
+ <bounds x="0.12" y="0.12" width="0.76" height="0.76" />
+ <color red="0" green="0" blue="0" />
+ </disk>
+ </element>
+
+ <element name="piece" defstate="0">
+ <image file="chess/wp.png" state="1"/>
+ <image file="chess/wn.png" state="2"/>
+ <image file="chess/wb.png" state="3"/>
+ <image file="chess/wr.png" state="4"/>
+ <image file="chess/wq.png" state="5"/>
+ <image file="chess/wk.png" state="6"/>
+
+ <image file="chess/bp.png" state="7"/>
+ <image file="chess/bn.png" state="8"/>
+ <image file="chess/bb.png" state="9"/>
+ <image file="chess/br.png" state="10"/>
+ <image file="chess/bq.png" state="11"/>
+ <image file="chess/bk.png" state="12"/>
+
+ <!-- selected pieces -->
+ <image file="chess/wp.png" state="13"><color alpha="0.5" /></image>
+ <image file="chess/wn.png" state="14"><color alpha="0.5" /></image>
+ <image file="chess/wb.png" state="15"><color alpha="0.5" /></image>
+ <image file="chess/wr.png" state="16"><color alpha="0.5" /></image>
+ <image file="chess/wq.png" state="17"><color alpha="0.5" /></image>
+ <image file="chess/wk.png" state="18"><color alpha="0.5" /></image>
+
+ <image file="chess/bp.png" state="19"><color alpha="0.5" /></image>
+ <image file="chess/bn.png" state="20"><color alpha="0.5" /></image>
+ <image file="chess/bb.png" state="21"><color alpha="0.5" /></image>
+ <image file="chess/br.png" state="22"><color alpha="0.5" /></image>
+ <image file="chess/bq.png" state="23"><color alpha="0.5" /></image>
+ <image file="chess/bk.png" state="24"><color alpha="0.5" /></image>
+ </element>
+
+ <group name="sb_board">
+ <bounds x="0" y="0" width="80" height="80" />
+
+ <!-- squares (avoid seams) -->
+ <element ref="cwhite"><bounds x="0" y="0" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="10" y="0" width="11" height="11" /></element>
+ <element ref="cwhite"><bounds x="20" y="0" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="30" y="0" width="11" height="11" /></element>
+ <element ref="cwhite"><bounds x="40" y="0" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="50" y="0" width="11" height="11" /></element>
+ <element ref="cwhite"><bounds x="60" y="0" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="70" y="0" width="10" height="11" /></element>
+
+ <element ref="cblack"><bounds x="0" y="10" width="11" height="11" /></element>
+ <element ref="cwhite"><bounds x="10" y="10" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="20" y="10" width="11" height="11" /></element>
+ <element ref="cwhite"><bounds x="30" y="10" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="40" y="10" width="11" height="11" /></element>
+ <element ref="cwhite"><bounds x="50" y="10" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="60" y="10" width="11" height="11" /></element>
+ <element ref="cwhite"><bounds x="70" y="10" width="10" height="11" /></element>
+
+ <element ref="cwhite"><bounds x="0" y="20" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="10" y="20" width="11" height="11" /></element>
+ <element ref="cwhite"><bounds x="20" y="20" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="30" y="20" width="11" height="11" /></element>
+ <element ref="cwhite"><bounds x="40" y="20" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="50" y="20" width="11" height="11" /></element>
+ <element ref="cwhite"><bounds x="60" y="20" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="70" y="20" width="10" height="11" /></element>
+
+ <element ref="cblack"><bounds x="0" y="30" width="11" height="11" /></element>
+ <element ref="cwhite"><bounds x="10" y="30" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="20" y="30" width="11" height="11" /></element>
+ <element ref="cwhite"><bounds x="30" y="30" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="40" y="30" width="11" height="11" /></element>
+ <element ref="cwhite"><bounds x="50" y="30" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="60" y="30" width="11" height="11" /></element>
+ <element ref="cwhite"><bounds x="70" y="30" width="10" height="11" /></element>
+
+ <element ref="cwhite"><bounds x="0" y="40" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="10" y="40" width="11" height="11" /></element>
+ <element ref="cwhite"><bounds x="20" y="40" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="30" y="40" width="11" height="11" /></element>
+ <element ref="cwhite"><bounds x="40" y="40" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="50" y="40" width="11" height="11" /></element>
+ <element ref="cwhite"><bounds x="60" y="40" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="70" y="40" width="10" height="11" /></element>
+
+ <element ref="cblack"><bounds x="0" y="50" width="11" height="11" /></element>
+ <element ref="cwhite"><bounds x="10" y="50" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="20" y="50" width="11" height="11" /></element>
+ <element ref="cwhite"><bounds x="30" y="50" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="40" y="50" width="11" height="11" /></element>
+ <element ref="cwhite"><bounds x="50" y="50" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="60" y="50" width="11" height="11" /></element>
+ <element ref="cwhite"><bounds x="70" y="50" width="10" height="11" /></element>
+
+ <element ref="cwhite"><bounds x="0" y="60" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="10" y="60" width="11" height="11" /></element>
+ <element ref="cwhite"><bounds x="20" y="60" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="30" y="60" width="11" height="11" /></element>
+ <element ref="cwhite"><bounds x="40" y="60" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="50" y="60" width="11" height="11" /></element>
+ <element ref="cwhite"><bounds x="60" y="60" width="11" height="11" /></element>
+ <element ref="cblack"><bounds x="70" y="60" width="10" height="11" /></element>
+
+ <element ref="cblack"><bounds x="0" y="70" width="11" height="10" /></element>
+ <element ref="cwhite"><bounds x="10" y="70" width="11" height="10" /></element>
+ <element ref="cblack"><bounds x="20" y="70" width="11" height="10" /></element>
+ <element ref="cwhite"><bounds x="30" y="70" width="11" height="10" /></element>
+ <element ref="cblack"><bounds x="40" y="70" width="11" height="10" /></element>
+ <element ref="cwhite"><bounds x="50" y="70" width="11" height="10" /></element>
+ <element ref="cblack"><bounds x="60" y="70" width="11" height="10" /></element>
+ <element ref="cwhite"><bounds x="70" y="70" width="10" height="10" /></element>
+
+ <!-- leds -->
+ <repeat count="8">
+ <param name="y" start="8.3" increment="10" />
+ <param name="i1" start="0" increment="1" />
+
+ <repeat count="8">
+ <param name="x" start="0.2" increment="10" />
+ <param name="i2" start="0" increment="1" />
+ <element name="~i2~.~i1~" ref="led"><bounds x="~x~" y="~y~" width="1.5" height="1.5" /></element>
+ </repeat>
+ </repeat>
+
+ <!-- sensors, pieces -->
+ <repeat count="8">
+ <param name="y" start="0" increment="10" />
+ <param name="i" start="8" increment="-1" />
+
+ <element ref="hlbb" inputtag="board:RANK.~i~" inputmask="0x01"><bounds x="0" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
+ <element ref="hlbb" inputtag="board:RANK.~i~" inputmask="0x02"><bounds x="10" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
+ <element ref="hlbb" inputtag="board:RANK.~i~" inputmask="0x04"><bounds x="20" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
+ <element ref="hlbb" inputtag="board:RANK.~i~" inputmask="0x08"><bounds x="30" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
+ <element ref="hlbb" inputtag="board:RANK.~i~" inputmask="0x10"><bounds x="40" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
+ <element ref="hlbb" inputtag="board:RANK.~i~" inputmask="0x20"><bounds x="50" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
+ <element ref="hlbb" inputtag="board:RANK.~i~" inputmask="0x40"><bounds x="60" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
+ <element ref="hlbb" inputtag="board:RANK.~i~" inputmask="0x80"><bounds x="70" y="~y~" width="10" height="10" /><color alpha="0.04" /></element>
+
+ <element name="piece_a~i~" ref="piece"><bounds x="0" y="~y~" width="10" height="10" /></element>
+ <element name="piece_b~i~" ref="piece"><bounds x="10" y="~y~" width="10" height="10" /></element>
+ <element name="piece_c~i~" ref="piece"><bounds x="20" y="~y~" width="10" height="10" /></element>
+ <element name="piece_d~i~" ref="piece"><bounds x="30" y="~y~" width="10" height="10" /></element>
+ <element name="piece_e~i~" ref="piece"><bounds x="40" y="~y~" width="10" height="10" /></element>
+ <element name="piece_f~i~" ref="piece"><bounds x="50" y="~y~" width="10" height="10" /></element>
+ <element name="piece_g~i~" ref="piece"><bounds x="60" y="~y~" width="10" height="10" /></element>
+ <element name="piece_h~i~" ref="piece"><bounds x="70" y="~y~" width="10" height="10" /></element>
+ </repeat>
+ </group>
+
+
+<!-- sb ui -->
+
+ <element name="hlub" defstate="0">
+ <rect state="1"><color red="0" green="0" blue="0" /></rect>
+ </element>
+
+ <element name="text_uit1"><text string="S.BOARD"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_uit2"><text string="INTERFACE"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_uib1"><text string="BOARD:"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_uib2">
+ <rect><color red="0.84" green="0.75" blue="0.50" /></rect>
+ <text string="RESET"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_uib3">
+ <rect><color red="0.84" green="0.75" blue="0.50" /></rect>
+ <text string="CLEAR"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_uis1"><text string="SPAWN:"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_uih1"><text string="HAND:"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_uih2">
+ <rect><color red="0.84" green="0.75" blue="0.50" /></rect>
+ <text string="REMOVE"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_uiu1"><text string="UNDO:"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_uiu2a">
+ <rect><color red="0.84" green="0.75" blue="0.50" /></rect>
+ <text string=" &lt;&lt;"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_uiu2b">
+ <rect><color red="0.84" green="0.75" blue="0.50" /></rect>
+ <text string=" &lt; "><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_uiu2c">
+ <rect><color red="0.84" green="0.75" blue="0.50" /></rect>
+ <text string=" &gt;"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_uiu2d">
+ <rect><color red="0.84" green="0.75" blue="0.50" /></rect>
+ <text string=" &gt;&gt;"><color red="0.01" green="0.01" blue="0.01" /></text>
+ </element>
+ <element name="text_uiu3a" defstate="0">
+ <simplecounter maxstate="999" digits="1" align="2">
+ <color red="0.81" green="0.8" blue="0.79" />
+ </simplecounter>
+ </element>
+ <element name="text_uiu3b"><text string="/"><color red="0.81" green="0.8" blue="0.79" /></text></element>
+ <element name="text_uiu3c" defstate="0">
+ <simplecounter maxstate="999" digits="1" align="1">
+ <color red="0.81" green="0.8" blue="0.79" />
+ </simplecounter>
+ </element>
+
+ <group name="sb_ui">
+ <bounds x="0" y="0" width="10" height="80" />
+ <element ref="cblack"><bounds x="0" y="0" width="10" height="1" /></element>
+ <element ref="cblack"><bounds x="0" y="7" width="10" height="1" /></element>
+ <element ref="cblack"><bounds x="0" y="79" width="10" height="1" /></element>
+ <element ref="text_uit1"><bounds x="0" y="2" width="10" height="2" /></element>
+ <element ref="text_uit2"><bounds x="0" y="4" width="10" height="2" /></element>
+
+ <!-- board -->
+ <element ref="text_uib1"><bounds x="0" y="9" width="10" height="2" /></element>
+ <element ref="cwhite"><bounds x="1" y="11.5" width="8" height="2.5" /></element>
+ <element ref="cwhite"><bounds x="1" y="15" width="8" height="2.5" /></element>
+
+ <element ref="text_uib2"><bounds x="1.5" y="11.75" width="7" height="2" /></element>
+ <element ref="text_uib3"><bounds x="1.5" y="15.25" width="7" height="2" /></element>
+
+ <element ref="hlub" inputtag="board:UI" inputmask="0x200"><bounds x="1" y="11.5" width="8" height="2.5" /><color alpha="0.25" /></element>
+ <element ref="hlub" inputtag="board:UI" inputmask="0x100"><bounds x="1" y="15" width="8" height="2.5" /><color alpha="0.25" /></element>
+
+ <!-- spawn -->
+ <element ref="text_uis1"><bounds x="0" y="20.5" width="10" height="2" /></element>
+ <element ref="cwhite"><bounds x="1" y="23" width="8" height="12" /></element>
+ <element ref="cwhite"><bounds x="1" y="36" width="8" height="12" /></element>
+
+ <element name="piece_ui1" ref="piece"><bounds x="1" y="23" width="4" height="4" /></element>
+ <element name="piece_ui2" ref="piece"><bounds x="1" y="27" width="4" height="4" /></element>
+ <element name="piece_ui3" ref="piece"><bounds x="1" y="31" width="4" height="4" /></element>
+ <element name="piece_ui4" ref="piece"><bounds x="5" y="23" width="4" height="4" /></element>
+ <element name="piece_ui5" ref="piece"><bounds x="5" y="27" width="4" height="4" /></element>
+ <element name="piece_ui6" ref="piece"><bounds x="5" y="31" width="4" height="4" /></element>
+ <element name="piece_ui7" ref="piece"><bounds x="1" y="36" width="4" height="4" /></element>
+ <element name="piece_ui8" ref="piece"><bounds x="1" y="40" width="4" height="4" /></element>
+ <element name="piece_ui9" ref="piece"><bounds x="1" y="44" width="4" height="4" /></element>
+ <element name="piece_ui10" ref="piece"><bounds x="5" y="36" width="4" height="4" /></element>
+ <element name="piece_ui11" ref="piece"><bounds x="5" y="40" width="4" height="4" /></element>
+ <element name="piece_ui12" ref="piece"><bounds x="5" y="44" width="4" height="4" /></element>
+
+ <element ref="hlub" inputtag="board:SPAWN" inputmask="0x0001"><bounds x="1" y="23" width="4" height="4" /><color alpha="0.25" /></element>
+ <element ref="hlub" inputtag="board:SPAWN" inputmask="0x0002"><bounds x="1" y="27" width="4" height="4" /><color alpha="0.25" /></element>
+ <element ref="hlub" inputtag="board:SPAWN" inputmask="0x0004"><bounds x="1" y="31" width="4" height="4" /><color alpha="0.25" /></element>
+ <element ref="hlub" inputtag="board:SPAWN" inputmask="0x0008"><bounds x="5" y="23" width="4" height="4" /><color alpha="0.25" /></element>
+ <element ref="hlub" inputtag="board:SPAWN" inputmask="0x0010"><bounds x="5" y="27" width="4" height="4" /><color alpha="0.25" /></element>
+ <element ref="hlub" inputtag="board:SPAWN" inputmask="0x0020"><bounds x="5" y="31" width="4" height="4" /><color alpha="0.25" /></element>
+ <element ref="hlub" inputtag="board:SPAWN" inputmask="0x0040"><bounds x="1" y="36" width="4" height="4" /><color alpha="0.25" /></element>
+ <element ref="hlub" inputtag="board:SPAWN" inputmask="0x0080"><bounds x="1" y="40" width="4" height="4" /><color alpha="0.25" /></element>
+ <element ref="hlub" inputtag="board:SPAWN" inputmask="0x0100"><bounds x="1" y="44" width="4" height="4" /><color alpha="0.25" /></element>
+ <element ref="hlub" inputtag="board:SPAWN" inputmask="0x0200"><bounds x="5" y="36" width="4" height="4" /><color alpha="0.25" /></element>
+ <element ref="hlub" inputtag="board:SPAWN" inputmask="0x0400"><bounds x="5" y="40" width="4" height="4" /><color alpha="0.25" /></element>
+ <element ref="hlub" inputtag="board:SPAWN" inputmask="0x0800"><bounds x="5" y="44" width="4" height="4" /><color alpha="0.25" /></element>
+
+ <!-- hand -->
+ <element ref="text_uih1"><bounds x="0" y="51" width="10" height="2" /></element>
+ <element ref="cblack"><bounds x="1" y="53.5" width="8" height="6" /></element>
+ <element name="piece_ui0" ref="piece"><bounds x="2" y="53.5" width="6" height="6" /></element>
+
+ <element ref="cwhite"><bounds x="1" y="60.5" width="8" height="2.5" /></element>
+ <element ref="text_uih2"><bounds x="1.5" y="60.75" width="7" height="2" /></element>
+ <element ref="hlub" inputtag="board:UI" inputmask="0x08"><bounds x="1" y="60.5" width="8" height="2.5" /><color alpha="0.25" /></element>
+
+ <!-- undo -->
+ <element ref="text_uiu1"><bounds x="0" y="66" width="10" height="2" /></element>
+ <element ref="cwhite"><bounds x="1" y="68.5" width="1.7" height="6" /></element>
+ <element ref="cwhite"><bounds x="3.1" y="68.5" width="1.7" height="6" /></element>
+ <element ref="cwhite"><bounds x="5.2" y="68.5" width="1.7" height="6" /></element>
+ <element ref="cwhite"><bounds x="7.3" y="68.5" width="1.7" height="6" /></element>
+ <element ref="text_uiu2a"><bounds x="1" y="69.5" width="1.7" height="4" /></element>
+ <element ref="text_uiu2b"><bounds x="3.1" y="69.5" width="1.7" height="4" /></element>
+ <element ref="text_uiu2c"><bounds x="5.2" y="69.5" width="1.7" height="4" /></element>
+ <element ref="text_uiu2d"><bounds x="7.3" y="69.5" width="1.7" height="4" /></element>
+
+ <element ref="hlub" inputtag="board:UI" inputmask="0x10"><bounds x="1" y="68.5" width="1.7" height="6" /><color alpha="0.25" /></element>
+ <element ref="hlub" inputtag="board:UI" inputmask="0x20"><bounds x="3.1" y="68.5" width="1.7" height="6" /><color alpha="0.25" /></element>
+ <element ref="hlub" inputtag="board:UI" inputmask="0x40"><bounds x="5.2" y="68.5" width="1.7" height="6" /><color alpha="0.25" /></element>
+ <element ref="hlub" inputtag="board:UI" inputmask="0x80"><bounds x="7.3" y="68.5" width="1.7" height="6" /><color alpha="0.25" /></element>
+
+ <element name="count_ui0" ref="text_uiu3a"><bounds x="0" y="75" width="4" height="2" /></element>
+ <element name="count_ui1" ref="text_uiu3c"><bounds x="6" y="75" width="4" height="2" /></element>
+ <element ref="text_uiu3b"><bounds x="4" y="75" width="2" height="2" /></element>
+ </group>
+
+
+<!-- build screen -->
+
+ <view name="Internal Layout">
+ <bounds left="-2.5" right="119" top="-1" bottom="88" />
+
+ <group ref="sb_board"><bounds x="13" y="3" width="80" height="80" /></group>
+ <group ref="sb_ui"><bounds x="-1" y="3" width="10" height="80" /></group>
+
+ <!-- chessboard coords -->
+
+ <element ref="text_8"><bounds x="10.2" y="7" width="2" height="2" /></element>
+ <element ref="text_7"><bounds x="10.2" y="17" width="2" height="2" /></element>
+ <element ref="text_6"><bounds x="10.2" y="27" width="2" height="2" /></element>
+ <element ref="text_5"><bounds x="10.2" y="37" width="2" height="2" /></element>
+ <element ref="text_4"><bounds x="10.2" y="47" width="2" height="2" /></element>
+ <element ref="text_3"><bounds x="10.2" y="57" width="2" height="2" /></element>
+ <element ref="text_2"><bounds x="10.2" y="67" width="2" height="2" /></element>
+ <element ref="text_1"><bounds x="10.2" y="77" width="2" height="2" /></element>
+
+ <element ref="text_a"><bounds x="17" y="84" width="2" height="2" /></element>
+ <element ref="text_b"><bounds x="27" y="84" width="2" height="2" /></element>
+ <element ref="text_c"><bounds x="37" y="84" width="2" height="2" /></element>
+ <element ref="text_d"><bounds x="47" y="84" width="2" height="2" /></element>
+ <element ref="text_e"><bounds x="57" y="84" width="2" height="2" /></element>
+ <element ref="text_f"><bounds x="67" y="84" width="2" height="2" /></element>
+ <element ref="text_g"><bounds x="77" y="84" width="2" height="2" /></element>
+ <element ref="text_h"><bounds x="87" y="84" width="2" height="2" /></element>
+
+ <!-- right side buttons -->
+
+ <element ref="text_p1"><bounds x="94.6" y="24.10" width="2.2" height="2.2" /></element>
+ <element ref="text_p2"><bounds x="94.6" y="31.81" width="2.2" height="2.2" /></element>
+ <element ref="text_p4"><bounds x="94.6" y="39.53" width="2.2" height="2.2" /></element>
+ <element ref="text_p5"><bounds x="94.6" y="47.24" width="2.2" height="2.2" /></element>
+ <element ref="text_p3"><bounds x="94.6" y="54.96" width="2.2" height="2.2" /></element>
+ <element ref="text_p6"><bounds x="94.6" y="62.67" width="2.2" height="2.2" /></element>
+
+ <element ref="text_p1"><bounds x="113.15" y="26.10" width="2.2" height="2.2" /></element>
+ <element ref="text_p2"><bounds x="113.15" y="33.81" width="2.2" height="2.2" /></element>
+ <element ref="text_p3"><bounds x="113.15" y="41.53" width="2.2" height="2.2" /></element>
+ <element ref="text_p4"><bounds x="113.15" y="49.24" width="2.2" height="2.2" /></element>
+ <element ref="text_p5"><bounds x="113.15" y="56.96" width="2.2" height="2.2" /></element>
+ <element ref="text_p6"><bounds x="113.15" y="64.67" width="2.2" height="2.2" /></element>
+
+ <element ref="gray" blend="multiply"><bounds x="94.5" y="20" width="22" height="60" /></element>
+
+ <element ref="but" inputtag="IN.0" inputmask="0x02"><bounds x="97.38" y="24.00" width="2.5" height="2.5" /></element>
+ <element ref="but" inputtag="IN.1" inputmask="0x02"><bounds x="97.38" y="31.71" width="2.5" height="2.5" /></element>
+ <element ref="but" inputtag="IN.2" inputmask="0x02"><bounds x="97.38" y="39.43" width="2.5" height="2.5" /></element>
+ <element ref="but" inputtag="IN.3" inputmask="0x02"><bounds x="97.38" y="47.14" width="2.5" height="2.5" /></element>
+ <element ref="but" inputtag="IN.4" inputmask="0x02"><bounds x="97.38" y="54.86" width="2.5" height="2.5" /></element>
+ <element ref="but" inputtag="IN.5" inputmask="0x02"><bounds x="97.38" y="62.57" width="2.5" height="2.5" /></element>
+ <element ref="but" inputtag="IN.6" inputmask="0x02"><bounds x="97.38" y="70.29" width="2.5" height="2.5" /></element>
+ <element ref="but" inputtag="IN.7" inputmask="0x02"><bounds x="97.38" y="78.00" width="2.5" height="2.5" /></element>
+
+ <element ref="but" inputtag="IN.0" inputmask="0x01"><bounds x="107.00" y="24.00" width="2.5" height="2.5" /></element>
+ <element ref="but" inputtag="IN.1" inputmask="0x01"><bounds x="107.00" y="31.71" width="2.5" height="2.5" /></element>
+ <element ref="but" inputtag="IN.2" inputmask="0x01"><bounds x="107.00" y="39.43" width="2.5" height="2.5" /></element>
+ <element ref="but" inputtag="IN.3" inputmask="0x01"><bounds x="107.00" y="47.14" width="2.5" height="2.5" /></element>
+ <element ref="but" inputtag="IN.4" inputmask="0x01"><bounds x="107.00" y="54.86" width="2.5" height="2.5" /></element>
+ <element ref="but" inputtag="IN.5" inputmask="0x01"><bounds x="107.00" y="62.57" width="2.5" height="2.5" /></element>
+ <element ref="but" inputtag="IN.6" inputmask="0x01"><bounds x="107.00" y="70.29" width="2.5" height="2.5" /></element>
+ <element ref="but" inputtag="IN.7" inputmask="0x01"><bounds x="107.00" y="78.00" width="2.5" height="2.5" /></element>
+
+ <element ref="text_l1ax"><bounds x="91.63" y="20.95" width="14" height="1.4" /></element>
+ <element ref="text_l1a"><bounds x="91.63" y="22.35" width="14" height="1.4" /></element>
+ <element ref="text_l1b"><bounds x="91.63" y="26.70" width="14" height="1.4" /></element>
+ <element ref="text_l2ax"><bounds x="91.63" y="28.66" width="14" height="1.4" /></element>
+ <element ref="text_l2a"><bounds x="91.63" y="30.06" width="14" height="1.4" /></element>
+ <element ref="text_l2b"><bounds x="91.63" y="34.41" width="14" height="1.4" /></element>
+ <element ref="text_l3a"><bounds x="91.63" y="37.78" width="14" height="1.4" /></element>
+ <element ref="text_l3b"><bounds x="91.63" y="42.13" width="14" height="1.4" /></element>
+ <element ref="text_l4a"><bounds x="91.63" y="45.49" width="14" height="1.4" /></element>
+ <element ref="text_l4b"><bounds x="91.63" y="49.84" width="14" height="1.4" /></element>
+ <element ref="text_l5a"><bounds x="91.63" y="53.21" width="14" height="1.4" /></element>
+ <element ref="text_l5b"><bounds x="91.63" y="57.56" width="14" height="1.4" /></element>
+ <element ref="text_l6a"><bounds x="91.63" y="60.92" width="14" height="1.4" /></element>
+ <element ref="text_l6b"><bounds x="91.63" y="65.27" width="14" height="1.4" /></element>
+ <element ref="text_l7a"><bounds x="91.63" y="68.64" width="14" height="1.4" /></element>
+ <element ref="text_l7b"><bounds x="91.63" y="72.99" width="14" height="1.4" /></element>
+ <element ref="text_l8a"><bounds x="91.63" y="76.35" width="14" height="1.4" /></element>
+ <element ref="text_l8b"><bounds x="91.63" y="80.70" width="14" height="1.4" /></element>
+
+ <element ref="text_m1a"><bounds x="101.25" y="22.35" width="14" height="1.4" /></element>
+ <element ref="text_m1b"><bounds x="101.25" y="26.70" width="14" height="1.4" /></element>
+ <element ref="text_m2a"><bounds x="101.25" y="30.06" width="14" height="1.4" /></element>
+ <element ref="text_m2b"><bounds x="101.25" y="34.41" width="14" height="1.4" /></element>
+ <element ref="text_m3a"><bounds x="101.25" y="37.78" width="14" height="1.4" /></element>
+ <element ref="text_m3b"><bounds x="101.25" y="42.13" width="14" height="1.4" /></element>
+ <element ref="text_m4a"><bounds x="101.25" y="45.49" width="14" height="1.4" /></element>
+ <element ref="text_m4b"><bounds x="101.25" y="49.84" width="14" height="1.4" /></element>
+ <element ref="text_m4bx"><bounds x="101.25" y="51.24" width="14" height="1.4" /></element>
+ <element ref="text_m5a"><bounds x="101.25" y="53.21" width="14" height="1.4" /></element>
+ <element ref="text_m5b"><bounds x="101.25" y="57.56" width="14" height="1.4" /></element>
+ <element ref="text_m5bx"><bounds x="101.25" y="58.96" width="14" height="1.4" /></element>
+ <element ref="text_m6a"><bounds x="101.25" y="60.92" width="14" height="1.4" /></element>
+ <element ref="text_m6b"><bounds x="101.25" y="65.27" width="14" height="1.4" /></element>
+ <element ref="text_m7a"><bounds x="101.25" y="68.64" width="14" height="1.4" /></element>
+ <element ref="text_m7b"><bounds x="101.25" y="72.99" width="14" height="1.4" /></element>
+ <element ref="text_m8a"><bounds x="101.25" y="76.35" width="14" height="1.4" /></element>
+ <element ref="text_m8b"><bounds x="101.25" y="80.70" width="14" height="1.4" /></element>
+
+ <element ref="text_r1"><bounds x="110.5" y="22.85" width="7.5" height="1.4" /></element>
+ <element ref="text_r2"><bounds x="110.5" y="30.56" width="7.5" height="1.4" /></element>
+ <element ref="text_r3"><bounds x="110.5" y="38.28" width="7.5" height="1.4" /></element>
+ <element ref="text_r4"><bounds x="110.5" y="45.99" width="7.5" height="1.4" /></element>
+ <element ref="text_r5"><bounds x="110.5" y="53.71" width="7.5" height="1.4" /></element>
+ <element ref="text_r6"><bounds x="110.5" y="61.42" width="7.5" height="1.4" /></element>
+ <element ref="text_r7"><bounds x="110.5" y="69.04" width="7.5" height="1.4" /></element>
+ <element ref="text_r8"><bounds x="110.5" y="76.85" width="7.5" height="1.4" /></element>
+
+ <element ref="text_rx"><bounds x="116.3" y="24.2" width="1.4" height="10" /><orientation rotate="90" /></element>
+
+ <element name="8.0" ref="led2"><bounds x="113.5" y="24.50" width="1.5" height="1.5" /></element>
+ <element name="8.1" ref="led2"><bounds x="113.5" y="32.21" width="1.5" height="1.5" /></element>
+ <element name="8.2" ref="led2"><bounds x="113.5" y="39.93" width="1.5" height="1.5" /></element>
+ <element name="8.3" ref="led2"><bounds x="113.5" y="47.64" width="1.5" height="1.5" /></element>
+ <element name="8.4" ref="led2"><bounds x="113.5" y="55.36" width="1.5" height="1.5" /></element>
+ <element name="8.5" ref="led2"><bounds x="113.5" y="63.07" width="1.5" height="1.5" /></element>
+ <element name="8.6" ref="led2"><bounds x="113.5" y="70.79" width="1.5" height="1.5" /></element>
+ <element name="8.7" ref="led2"><bounds x="113.5" y="78.50" width="1.5" height="1.5" /></element>
+
+ </view>
+</mamelayout>
diff --git a/src/mame/layout/novag_cforte.lay b/src/mame/layout/novag_cforte.lay
index 030aa238223..8c3b0252054 100644
--- a/src/mame/layout/novag_cforte.lay
+++ b/src/mame/layout/novag_cforte.lay
@@ -432,7 +432,7 @@ license:CC0
<!-- build screen -->
<view name="Internal Layout">
- <bounds left="-12" right="111" top="-1" bottom="88" />
+ <bounds left="-12.5" right="111" top="-1" bottom="88" />
<group ref="sb_board"><bounds x="4" y="3" width="80" height="80" /></group>
<group ref="sb_ui"><bounds x="-11" y="3" width="10" height="80" /></group>
diff --git a/src/mame/layout/novag_constq.lay b/src/mame/layout/novag_constq.lay
index 33cc6604fde..d61872e14e2 100644
--- a/src/mame/layout/novag_constq.lay
+++ b/src/mame/layout/novag_constq.lay
@@ -381,7 +381,7 @@ license:CC0
<!-- build screen -->
<view name="Internal Layout">
- <bounds left="-12" right="109.5" top="-1" bottom="88" />
+ <bounds left="-12.5" right="109.5" top="-1" bottom="88" />
<group ref="sb_board"><bounds x="4" y="3" width="80" height="80" /></group>
<group ref="sb_ui"><bounds x="-11" y="3" width="10" height="80" /></group>
diff --git a/src/mame/layout/novag_diablo68k.lay b/src/mame/layout/novag_diablo68k.lay
index 1a3c531d462..43691c8eb82 100644
--- a/src/mame/layout/novag_diablo68k.lay
+++ b/src/mame/layout/novag_diablo68k.lay
@@ -397,24 +397,7 @@ license:CC0
<!-- build screen -->
<view name="Internal Layout">
- <bounds left="-11" right="114" top="-1" bottom="88" />
-
- <!-- lcd panel -->
-
- <element ref="lcdw"><bounds x="86" y="8" width="25.25" height="5" /></element>
- <screen tag="screen"><bounds x="86.5" y="9" width="24.25" height="3" /></screen>
- <element ref="lcdm" blend="multiply"><bounds x="86" y="8" width="25.25" height="5" /></element>
- <element ref="lcda" blend="add"><bounds x="86" y="8" width="25.25" height="5" /></element>
-
- <!-- right side buttons -->
-
- <element ref="text_p1"><bounds x="100.4" y="24.10" width="2.2" height="2.2" /></element>
- <element ref="text_p2"><bounds x="100.4" y="31.81" width="2.2" height="2.2" /></element>
- <element ref="text_p4"><bounds x="100.4" y="39.53" width="2.2" height="2.2" /></element>
- <element ref="text_p5"><bounds x="100.4" y="47.24" width="2.2" height="2.2" /></element>
- <element ref="text_p3"><bounds x="100.4" y="54.96" width="2.2" height="2.2" /></element>
- <element ref="text_p6"><bounds x="100.4" y="62.67" width="2.2" height="2.2" /></element>
- <element ref="gray" blend="multiply"><bounds x="100" y="20" width="4" height="60" /></element>
+ <bounds left="-11.5" right="114" top="-1" bottom="88" />
<group ref="sb_board"><bounds x="4" y="3" width="80" height="80" /></group>
<group ref="sb_ui"><bounds x="-10" y="3" width="10" height="80" /></group>
@@ -439,6 +422,23 @@ license:CC0
<element ref="text_g"><bounds x="68" y="84" width="2" height="2" /></element>
<element ref="text_h"><bounds x="78" y="84" width="2" height="2" /></element>
+ <!-- lcd panel -->
+
+ <element ref="lcdw"><bounds x="86" y="8" width="25.25" height="5" /></element>
+ <screen tag="screen"><bounds x="86.5" y="9" width="24.25" height="3" /></screen>
+ <element ref="lcdm" blend="multiply"><bounds x="86" y="8" width="25.25" height="5" /></element>
+ <element ref="lcda" blend="add"><bounds x="86" y="8" width="25.25" height="5" /></element>
+
+ <!-- right side buttons -->
+
+ <element ref="text_p1"><bounds x="100.4" y="24.10" width="2.2" height="2.2" /></element>
+ <element ref="text_p2"><bounds x="100.4" y="31.81" width="2.2" height="2.2" /></element>
+ <element ref="text_p4"><bounds x="100.4" y="39.53" width="2.2" height="2.2" /></element>
+ <element ref="text_p5"><bounds x="100.4" y="47.24" width="2.2" height="2.2" /></element>
+ <element ref="text_p3"><bounds x="100.4" y="54.96" width="2.2" height="2.2" /></element>
+ <element ref="text_p6"><bounds x="100.4" y="62.67" width="2.2" height="2.2" /></element>
+ <element ref="gray" blend="multiply"><bounds x="100" y="20" width="4" height="60" /></element>
+
<element ref="but" inputtag="IN.7" inputmask="0x04"><bounds x="87.75" y="24.00" width="2.5" height="2.5" /></element>
<element ref="but" inputtag="IN.6" inputmask="0x04"><bounds x="87.75" y="31.71" width="2.5" height="2.5" /></element>
<element ref="but" inputtag="IN.5" inputmask="0x04"><bounds x="87.75" y="39.43" width="2.5" height="2.5" /></element>
diff --git a/src/mame/layout/novag_scorpio68k.lay b/src/mame/layout/novag_scorpio68k.lay
index 2944ae57852..8217a397d4f 100644
--- a/src/mame/layout/novag_scorpio68k.lay
+++ b/src/mame/layout/novag_scorpio68k.lay
@@ -387,24 +387,7 @@ license:CC0
<!-- build screen -->
<view name="Internal Layout">
- <bounds left="-12" right="114" top="-1" bottom="98" />
-
- <!-- lcd panel -->
-
- <element ref="lcdw"><bounds x="47.75" y="89.5" width="25.25" height="5" /></element>
- <screen tag="screen"><bounds x="48.25" y="90.5" width="24.25" height="3" /></screen>
- <element ref="lcdm" blend="multiply"><bounds x="47.75" y="89.5" width="25.25" height="5" /></element>
- <element ref="lcda" blend="add"><bounds x="47.75" y="89.5" width="25.25" height="5" /></element>
-
- <!-- right side buttons -->
-
- <element ref="text_p1"><bounds x="95.4" y="18.00" width="1.6" height="1.6" /></element>
- <element ref="text_p2"><bounds x="95.4" y="25.71" width="1.6" height="1.6" /></element>
- <element ref="text_p4"><bounds x="95.4" y="33.43" width="1.6" height="1.6" /></element>
- <element ref="text_p5"><bounds x="95.4" y="41.14" width="1.6" height="1.6" /></element>
- <element ref="text_p3"><bounds x="95.4" y="48.86" width="1.6" height="1.6" /></element>
- <element ref="text_p6"><bounds x="95.4" y="56.57" width="1.6" height="1.6" /></element>
- <element ref="cyan" blend="multiply"><bounds x="95" y="17" width="4" height="60" /></element>
+ <bounds left="-12.5" right="114" top="-1" bottom="98" />
<group ref="sb_board"><bounds x="4" y="3" width="80" height="80" /></group>
<group ref="sb_ui"><bounds x="-11" y="3" width="10" height="80" /></group>
@@ -449,6 +432,23 @@ license:CC0
<element name="1.8" ref="ledr"><bounds x="68" y="84" width="2" height="1" /></element>
<element name="0.8" ref="ledr"><bounds x="78" y="84" width="2" height="1" /></element>
+ <!-- lcd panel -->
+
+ <element ref="lcdw"><bounds x="47.75" y="89.5" width="25.25" height="5" /></element>
+ <screen tag="screen"><bounds x="48.25" y="90.5" width="24.25" height="3" /></screen>
+ <element ref="lcdm" blend="multiply"><bounds x="47.75" y="89.5" width="25.25" height="5" /></element>
+ <element ref="lcda" blend="add"><bounds x="47.75" y="89.5" width="25.25" height="5" /></element>
+
+ <!-- right side buttons -->
+
+ <element ref="text_p1"><bounds x="95.4" y="18.00" width="1.6" height="1.6" /></element>
+ <element ref="text_p2"><bounds x="95.4" y="25.71" width="1.6" height="1.6" /></element>
+ <element ref="text_p4"><bounds x="95.4" y="33.43" width="1.6" height="1.6" /></element>
+ <element ref="text_p5"><bounds x="95.4" y="41.14" width="1.6" height="1.6" /></element>
+ <element ref="text_p3"><bounds x="95.4" y="48.86" width="1.6" height="1.6" /></element>
+ <element ref="text_p6"><bounds x="95.4" y="56.57" width="1.6" height="1.6" /></element>
+ <element ref="cyan" blend="multiply"><bounds x="95" y="17" width="4" height="60" /></element>
+
<element ref="black"><bounds x="86" y="14.00" width="6" height="4" /></element>
<element ref="black"><bounds x="86" y="21.71" width="6" height="4" /></element>
<element ref="black"><bounds x="86" y="29.43" width="6" height="4" /></element>
diff --git a/src/mame/layout/novag_sexpert.lay b/src/mame/layout/novag_sexpert.lay
index 1a3c531d462..43691c8eb82 100644
--- a/src/mame/layout/novag_sexpert.lay
+++ b/src/mame/layout/novag_sexpert.lay
@@ -397,24 +397,7 @@ license:CC0
<!-- build screen -->
<view name="Internal Layout">
- <bounds left="-11" right="114" top="-1" bottom="88" />
-
- <!-- lcd panel -->
-
- <element ref="lcdw"><bounds x="86" y="8" width="25.25" height="5" /></element>
- <screen tag="screen"><bounds x="86.5" y="9" width="24.25" height="3" /></screen>
- <element ref="lcdm" blend="multiply"><bounds x="86" y="8" width="25.25" height="5" /></element>
- <element ref="lcda" blend="add"><bounds x="86" y="8" width="25.25" height="5" /></element>
-
- <!-- right side buttons -->
-
- <element ref="text_p1"><bounds x="100.4" y="24.10" width="2.2" height="2.2" /></element>
- <element ref="text_p2"><bounds x="100.4" y="31.81" width="2.2" height="2.2" /></element>
- <element ref="text_p4"><bounds x="100.4" y="39.53" width="2.2" height="2.2" /></element>
- <element ref="text_p5"><bounds x="100.4" y="47.24" width="2.2" height="2.2" /></element>
- <element ref="text_p3"><bounds x="100.4" y="54.96" width="2.2" height="2.2" /></element>
- <element ref="text_p6"><bounds x="100.4" y="62.67" width="2.2" height="2.2" /></element>
- <element ref="gray" blend="multiply"><bounds x="100" y="20" width="4" height="60" /></element>
+ <bounds left="-11.5" right="114" top="-1" bottom="88" />
<group ref="sb_board"><bounds x="4" y="3" width="80" height="80" /></group>
<group ref="sb_ui"><bounds x="-10" y="3" width="10" height="80" /></group>
@@ -439,6 +422,23 @@ license:CC0
<element ref="text_g"><bounds x="68" y="84" width="2" height="2" /></element>
<element ref="text_h"><bounds x="78" y="84" width="2" height="2" /></element>
+ <!-- lcd panel -->
+
+ <element ref="lcdw"><bounds x="86" y="8" width="25.25" height="5" /></element>
+ <screen tag="screen"><bounds x="86.5" y="9" width="24.25" height="3" /></screen>
+ <element ref="lcdm" blend="multiply"><bounds x="86" y="8" width="25.25" height="5" /></element>
+ <element ref="lcda" blend="add"><bounds x="86" y="8" width="25.25" height="5" /></element>
+
+ <!-- right side buttons -->
+
+ <element ref="text_p1"><bounds x="100.4" y="24.10" width="2.2" height="2.2" /></element>
+ <element ref="text_p2"><bounds x="100.4" y="31.81" width="2.2" height="2.2" /></element>
+ <element ref="text_p4"><bounds x="100.4" y="39.53" width="2.2" height="2.2" /></element>
+ <element ref="text_p5"><bounds x="100.4" y="47.24" width="2.2" height="2.2" /></element>
+ <element ref="text_p3"><bounds x="100.4" y="54.96" width="2.2" height="2.2" /></element>
+ <element ref="text_p6"><bounds x="100.4" y="62.67" width="2.2" height="2.2" /></element>
+ <element ref="gray" blend="multiply"><bounds x="100" y="20" width="4" height="60" /></element>
+
<element ref="but" inputtag="IN.7" inputmask="0x04"><bounds x="87.75" y="24.00" width="2.5" height="2.5" /></element>
<element ref="but" inputtag="IN.6" inputmask="0x04"><bounds x="87.75" y="31.71" width="2.5" height="2.5" /></element>
<element ref="but" inputtag="IN.5" inputmask="0x04"><bounds x="87.75" y="39.43" width="2.5" height="2.5" /></element>
diff --git a/src/mame/layout/novag_sforte.lay b/src/mame/layout/novag_sforte.lay
index f091e86427a..348c9849114 100644
--- a/src/mame/layout/novag_sforte.lay
+++ b/src/mame/layout/novag_sforte.lay
@@ -391,14 +391,7 @@ license:CC0
<!-- build screen -->
<view name="Internal Layout">
- <bounds left="-12" right="114" top="-1" bottom="88" />
-
- <!-- lcd panel -->
-
- <element ref="lcdw"><bounds x="86" y="8" width="25.25" height="5" /></element>
- <screen tag="screen"><bounds x="86.5" y="9" width="24.25" height="3" /></screen>
- <element ref="lcdm" blend="multiply"><bounds x="86" y="8" width="25.25" height="5" /></element>
- <element ref="lcda" blend="add"><bounds x="86" y="8" width="25.25" height="5" /></element>
+ <bounds left="-12.5" right="114" top="-1" bottom="88" />
<group ref="sb_board"><bounds x="4" y="3" width="80" height="80" /></group>
<group ref="sb_ui"><bounds x="-11" y="3" width="10" height="80" /></group>
@@ -443,6 +436,13 @@ license:CC0
<element name="1.1" ref="ledr"><bounds x="68.5" y="84" width="1" height="2" /></element>
<element name="0.1" ref="ledr"><bounds x="78.5" y="84" width="1" height="2" /></element>
+ <!-- lcd panel -->
+
+ <element ref="lcdw"><bounds x="86" y="8" width="25.25" height="5" /></element>
+ <screen tag="screen"><bounds x="86.5" y="9" width="24.25" height="3" /></screen>
+ <element ref="lcdm" blend="multiply"><bounds x="86" y="8" width="25.25" height="5" /></element>
+ <element ref="lcda" blend="add"><bounds x="86" y="8" width="25.25" height="5" /></element>
+
<!-- right side buttons -->
<element ref="red"><bounds x="86" y="24.00" width="6" height="4" /></element>
diff --git a/src/mame/layout/novag_supercon.lay b/src/mame/layout/novag_supercon.lay
index f314e53e628..3d45f8e75c4 100644
--- a/src/mame/layout/novag_supercon.lay
+++ b/src/mame/layout/novag_supercon.lay
@@ -423,7 +423,7 @@ license:CC0
<!-- default view -->
<group name="default">
- <bounds left="-19.5" right="116" top="-0.5" bottom="88.5" />
+ <bounds left="-19" right="116" top="-0.5" bottom="88.5" />
<element ref="cblack"><bounds x="2.5" y="2.5" width="80.5" height="81" /></element>
<group ref="sb_board"><bounds x="3" y="3" width="80" height="80" /></group>
@@ -596,7 +596,7 @@ license:CC0
<!-- programmable openings keypad overlay sheet -->
<group name="overlay">
- <bounds left="-19.5" right="116" top="-0.5" bottom="88.5" />
+ <bounds left="-19" right="116" top="-0.5" bottom="88.5" />
<!-- block buttons -->
<element ref="hlb" inputtag="IN.1" inputmask="0x00" inputraw="1"><bounds x="88" y="16" width="6" height="4" /></element>
@@ -609,7 +609,7 @@ license:CC0
<element ref="hlb" inputtag="IN.5" inputmask="0x00" inputraw="1"><bounds x="97" y="56" width="6" height="4" /></element>
<element ref="hlb" inputtag="IN.6" inputmask="0x00" inputraw="1"><bounds x="97" y="66" width="6" height="4" /></element>
- <group ref="default"><bounds left="-19.5" right="116" top="-0.5" bottom="88.5" /></group>
+ <group ref="default"><bounds left="-19" right="116" top="-0.5" bottom="88.5" /></group>
<!-- erase -->
<element ref="blackb"><bounds x="86" y="0" width="1" height="88" /></element>
@@ -641,13 +641,13 @@ license:CC0
<!-- build screen -->
<view name="Internal Layout (Default)">
- <bounds left="-19.5" right="116" top="-0.5" bottom="88.5" />
- <group ref="default"><bounds left="-19.5" right="116" top="-0.5" bottom="88.5" /></group>
+ <bounds left="-19" right="116" top="-0.5" bottom="88.5" />
+ <group ref="default"><bounds left="-19" right="116" top="-0.5" bottom="88.5" /></group>
</view>
<view name="Internal Layout (P.O. Overlay)">
- <bounds left="-19.5" right="116" top="-0.5" bottom="88.5" />
- <group ref="overlay"><bounds left="-19.5" right="116" top="-0.5" bottom="88.5" /></group>
+ <bounds left="-19" right="116" top="-0.5" bottom="88.5" />
+ <group ref="overlay"><bounds left="-19" right="116" top="-0.5" bottom="88.5" /></group>
</view>
</mamelayout>
diff --git a/src/mame/layout/saitek_intchess.lay b/src/mame/layout/saitek_intchess.lay
index b257059a1eb..ebe801d7f52 100644
--- a/src/mame/layout/saitek_intchess.lay
+++ b/src/mame/layout/saitek_intchess.lay
@@ -69,6 +69,11 @@ license:CC0
<group name="main">
<bounds left="-2" right="48" top="46.5" bottom="124" />
+ <element name="digit0" ref="digit"><bounds x="15" y="88" width="4" height="6" /></element>
+ <element name="digit1" ref="digit"><bounds x="19" y="88" width="4" height="6" /></element>
+ <element name="digit2" ref="digit"><bounds x="23" y="88" width="4" height="6" /></element>
+ <element name="digit3" ref="digit"><bounds x="27" y="88" width="4" height="6" /></element>
+
<!-- buttons -->
<element ref="orange"><bounds x="0" y="100" width="4" height="4" /></element>
<element ref="orange"><bounds x="6" y="100" width="4" height="4" /></element>
@@ -140,11 +145,6 @@ license:CC0
<element ref="whitem"><bounds x="42" y="90" width="4" height="4" /></element>
<element ref="hl" blend="multiply" inputtag="RESET" inputmask="0x01"><bounds x="42" y="90" width="4" height="4" /></element>
- <element name="digit0" ref="digit"><bounds x="15" y="88" width="4" height="6" /></element>
- <element name="digit1" ref="digit"><bounds x="19" y="88" width="4" height="6" /></element>
- <element name="digit2" ref="digit"><bounds x="23" y="88" width="4" height="6" /></element>
- <element name="digit3" ref="digit"><bounds x="27" y="88" width="4" height="6" /></element>
-
<!-- labels -->
<element ref="text_a"><bounds x="0" y="114.5" width="4" height="1.9" /></element>
<element ref="text_b"><bounds x="6" y="114.5" width="4" height="1.9" /></element>
diff --git a/src/mame/layout/saitek_mark6.lay b/src/mame/layout/saitek_mark6.lay
index a2127a73a1c..47741a91cf0 100644
--- a/src/mame/layout/saitek_mark6.lay
+++ b/src/mame/layout/saitek_mark6.lay
@@ -799,6 +799,9 @@ license:CC0
<view name="Internal Layout (Board)">
<bounds left="21.5" right="100.5" top="18.5" bottom="88" />
+ <group ref="sb_board"><bounds x="33.5" y="21" width="64.5" height="64.5" /></group>
+ <group ref="sb_ui"><bounds x="22.5" y="21" width="8.06" height="64.5" /></group>
+
<repeat count="8">
<param name="x" start="33.5" increment="8.0625" />
<param name="i" start="1" increment="1" />
@@ -809,9 +812,6 @@ license:CC0
<param name="i" start="8" increment="-1" />
<element ref="text_hn~i~"><bounds x="31.3" y="~y~" width="2" height="1.6125" /></element>
</repeat>
-
- <group ref="sb_board"><bounds x="33.5" y="21" width="64.5" height="64.5" /></group>
- <group ref="sb_ui"><bounds x="22.5" y="21" width="8.06" height="64.5" /></group>
</view>
</mamelayout>
diff --git a/src/mame/layout/saitek_renaissance.lay b/src/mame/layout/saitek_renaissance.lay
index 7949c5ad670..04fd3174c45 100644
--- a/src/mame/layout/saitek_renaissance.lay
+++ b/src/mame/layout/saitek_renaissance.lay
@@ -448,18 +448,14 @@ license:CC0
<view name="Internal Layout">
<bounds left="-13" right="88" top="-1.5" bottom="123" />
- <group ref="display"><bounds x="33" y="90" width="23.6" height="30" /></group>
-
- <element ref="ledro"><bounds x="8" y="90" width="2" height="1" /></element>
- <element name="9.4" ref="ledrr" blend="add"><bounds x="8" y="90" width="2" height="1" /></element>
- <element name="9.5" ref="ledrg" blend="add"><bounds x="8" y="90" width="2" height="1" /></element>
-
<element ref="cblack"><bounds x="-1" y="-1.5" width="89" height="89" /></element>
<element ref="black"><bounds x="3" y="2.5" width="81" height="81" /></element>
<group ref="sb_board"><bounds x="3" y="2.5" width="81" height="81" /></group>
<group ref="sb_ui"><bounds x="-12" y="3" width="10" height="80" /></group>
+ <group ref="display"><bounds x="33" y="90" width="23.6" height="30" /></group>
+
<!-- chessboard coords -->
<element ref="text_8"><bounds x="0.2" y="7" width="2" height="2" /></element>
<element ref="text_7"><bounds x="0.2" y="17" width="2" height="2" /></element>
@@ -483,6 +479,10 @@ license:CC0
<element name="9.0" ref="ledr"><bounds x="0" y="90" width="2" height="1" /></element>
<element name="9.1" ref="ledr"><bounds x="4" y="90" width="2" height="1" /></element>
+ <element ref="ledro"><bounds x="8" y="90" width="2" height="1" /></element>
+ <element name="9.4" ref="ledrr" blend="add"><bounds x="8" y="90" width="2" height="1" /></element>
+ <element name="9.5" ref="ledrg" blend="add"><bounds x="8" y="90" width="2" height="1" /></element>
+
<element name="9.2" ref="ledr"><bounds x="12" y="90" width="2" height="1" /></element>
<element name="9.3" ref="ledr"><bounds x="16" y="90" width="2" height="1" /></element>
diff --git a/src/mame/layout/saitek_simultano.lay b/src/mame/layout/saitek_simultano.lay
index 281527afe62..4e99fd5eef6 100644
--- a/src/mame/layout/saitek_simultano.lay
+++ b/src/mame/layout/saitek_simultano.lay
@@ -413,20 +413,6 @@ license:CC0
<view name="Internal Layout (Full)">
<bounds left="-13.5" right="132.5" top="-1" bottom="90" />
- <group ref="display"><bounds x="96.5" y="13" width="23.6" height="30" /></group>
-
- <element ref="ledro"><bounds x="88.5" y="34.5" width="2" height="1" /></element>
- <element name="2.1" ref="ledrr" blend="add"><bounds x="88.5" y="34.5" width="2" height="1" /></element>
- <element name="3.1" ref="ledrg" blend="add"><bounds x="88.5" y="34.5" width="2" height="1" /></element>
-
- <element ref="text_p1"><bounds x="90.083" y="69.9" width="3" height="3" /></element>
- <element ref="text_p2"><bounds x="96.749" y="69.9" width="3" height="3" /></element>
- <element ref="text_p3"><bounds x="103.415" y="69.9" width="3" height="3" /></element>
- <element ref="text_p4"><bounds x="110.081" y="69.9" width="3" height="3" /></element>
- <element ref="text_p5"><bounds x="116.747" y="69.9" width="3" height="3" /></element>
- <element ref="text_p6"><bounds x="123.413" y="69.9" width="3" height="3" /></element>
- <element ref="cwhite" blend="multiply"><bounds x="90.083" y="69.9" width="40" height="3" /></element>
-
<group ref="sb_board"><bounds x="4" y="3" width="80" height="80" /></group>
<group ref="sb_ui"><bounds x="-12" y="3" width="10" height="80" /></group>
@@ -472,9 +458,15 @@ license:CC0
<!-- right side -->
+ <group ref="display"><bounds x="96.5" y="13" width="23.6" height="30" /></group>
+
<element name="2.0" ref="ledr"><bounds x="88.5" y="20.5" width="2" height="1" /></element>
<element name="3.0" ref="ledr"><bounds x="88.5" y="27.5" width="2" height="1" /></element>
+ <element ref="ledro"><bounds x="88.5" y="34.5" width="2" height="1" /></element>
+ <element name="2.1" ref="ledrr" blend="add"><bounds x="88.5" y="34.5" width="2" height="1" /></element>
+ <element name="3.1" ref="ledrg" blend="add"><bounds x="88.5" y="34.5" width="2" height="1" /></element>
+
<element ref="text_r1"><bounds x="91" y="20.2" width="7" height="1.5" /></element>
<element ref="text_r2"><bounds x="91" y="27.2" width="7" height="1.5" /></element>
<element ref="text_r3"><bounds x="91" y="34.2" width="7" height="1.5" /></element>
@@ -497,6 +489,14 @@ license:CC0
<element ref="text_b14"><bounds x="112.5" y="62.6" width="7.5" height="2.1" /></element>
<element ref="text_b15"><bounds x="120.5" y="63" width="7.5" height="1.5" /></element>
+ <element ref="text_p1"><bounds x="90.083" y="69.9" width="3" height="3" /></element>
+ <element ref="text_p2"><bounds x="96.749" y="69.9" width="3" height="3" /></element>
+ <element ref="text_p3"><bounds x="103.415" y="69.9" width="3" height="3" /></element>
+ <element ref="text_p4"><bounds x="110.081" y="69.9" width="3" height="3" /></element>
+ <element ref="text_p5"><bounds x="116.747" y="69.9" width="3" height="3" /></element>
+ <element ref="text_p6"><bounds x="123.413" y="69.9" width="3" height="3" /></element>
+ <element ref="cwhite" blend="multiply"><bounds x="90.083" y="69.9" width="40" height="3" /></element>
+
<element ref="button" inputtag="RESET" inputmask="0x01"><bounds x="88.5" y="48.25" width="7.5" height="3" /></element>
<element ref="button" inputtag="IN.1" inputmask="0x02"><bounds x="96.5" y="48.25" width="7.5" height="3" /></element>
<element ref="button" inputtag="IN.0" inputmask="0x02"><bounds x="104.5" y="48.25" width="7.5" height="3" /></element>
diff --git a/src/mame/layout/saitek_ssystem3.lay b/src/mame/layout/saitek_ssystem3.lay
index d4841ed072d..07dce2f931d 100644
--- a/src/mame/layout/saitek_ssystem3.lay
+++ b/src/mame/layout/saitek_ssystem3.lay
@@ -357,8 +357,14 @@ license:CC0
<view name="Internal Layout (Full)">
<bounds left="26" right="100" top="0" bottom="30" />
+ <group ref="main"><bounds x="50" y="0" width="50" height="30" /></group>
+
<group ref="lcd2"><bounds x="29.3" y="0.35" width="17.37" height="17.3" /></group>
+ <element ref="brown"><bounds x="26" y="0" width="2" height="30" /></element>
+ <element ref="brown"><bounds x="48" y="0" width="2" height="30" /></element>
+ <element ref="brown"><bounds x="49" y="10" width="2" height="6" /></element>
+
<repeat count="8">
<param name="y" start="1.75" increment="1.93" />
<param name="i" start="0" increment="1" />
@@ -370,12 +376,6 @@ license:CC0
<element ref="text_a~i~"><bounds x="~x~" y="17.2" width="1.5" height="0.9" /></element>
</repeat>
- <group ref="main"><bounds x="50" y="0" width="50" height="30" /></group>
-
- <element ref="brown"><bounds x="26" y="0" width="2" height="30" /></element>
- <element ref="brown"><bounds x="48" y="0" width="2" height="30" /></element>
- <element ref="brown"><bounds x="49" y="10" width="2" height="6" /></element>
-
<element ref="switch2" inputtag="IN.6" inputmask="0x01" inputraw="1"><bounds x="36" y="24" width="4" height="5" /></element>
<element ref="switch2" inputtag="IN.4" inputmask="0x04" inputraw="1"><bounds x="42" y="24" width="4" height="5" /></element>
diff --git a/src/mame/layout/sda5708.lay b/src/mame/layout/sda5708.lay
index 223434d99c7..57388936ee7 100644
--- a/src/mame/layout/sda5708.lay
+++ b/src/mame/layout/sda5708.lay
@@ -44,8 +44,6 @@ license:CC0
</element>
<view name="Default Layout">
- <bounds left="0" top="0" right="150" bottom="20" />
-
<!-- generated with mechanical data from the data sheet -->
<repeat count="8"> <!-- 8 digits -->
<param name="digitno" start="1" increment="1" />
diff --git a/src/mame/layout/splus.lay b/src/mame/layout/splus.lay
index 5a9324caf39..7bb8e27b087 100644
--- a/src/mame/layout/splus.lay
+++ b/src/mame/layout/splus.lay
@@ -90,57 +90,57 @@ license:CC0
</element>
<view name="Buttons">
- <bounds left="0" top="0" right="340" bottom="310" />
+ <bounds left="0" top="0" right="360" bottom="420" />
<screen index="0">
- <bounds left="10" top="40" right="330" bottom="240" />
+ <bounds left="0" top="0" right="360" bottom="270" />
</screen>
<element name="s_bnk41" ref="insertcoin">
- <bounds x="160" y="170" width="74" height="20" />
+ <bounds x="160" y="280" width="74" height="20" />
</element>
<element name="s_bnk46" ref="cashout">
- <bounds x="10" y="280" width="74" height="20" />
+ <bounds x="10" y="390" width="74" height="20" />
</element>
<element name="s_bnk45" ref="bet1">
- <bounds x="92" y="280" width="74" height="20" />
+ <bounds x="92" y="390" width="74" height="20" />
</element>
<element name="s_bnk44" ref="betmax">
- <bounds x="174" y="280" width="74" height="20" />
+ <bounds x="174" y="390" width="74" height="20" />
</element>
<element name="wp" ref="winnerpaid">
- <bounds x="10" y="190" width="120" height="40" />
+ <bounds x="10" y="300" width="120" height="40" />
</element>
<element name="digit0" ref="digit">
- <bounds x="10" y="230" width="25" height="40" />
+ <bounds x="10" y="340" width="25" height="40" />
</element>
<element name="digit1" ref="digit">
- <bounds x="35" y="230" width="25" height="40" />
+ <bounds x="35" y="340" width="25" height="40" />
</element>
<element name="digit2" ref="digit">
- <bounds x="60" y="230" width="25" height="40" />
+ <bounds x="60" y="340" width="25" height="40" />
</element>
<element name="digit3" ref="digit">
- <bounds x="85" y="230" width="25" height="40" />
+ <bounds x="85" y="340" width="25" height="40" />
</element>
<element name="cr" ref="credits">
- <bounds x="160" y="190" width="80" height="40" />
+ <bounds x="160" y="300" width="80" height="40" />
</element>
<element name="digit4" ref="digit">
- <bounds x="130" y="230" width="25" height="40" />
+ <bounds x="130" y="340" width="25" height="40" />
</element>
<element name="digit5" ref="digit">
- <bounds x="155" y="230" width="25" height="40" />
+ <bounds x="155" y="340" width="25" height="40" />
</element>
<element name="digit6" ref="digit">
- <bounds x="180" y="230" width="25" height="40" />
+ <bounds x="180" y="340" width="25" height="40" />
</element>
<element name="digit7" ref="digit">
- <bounds x="205" y="230" width="25" height="40" />
+ <bounds x="205" y="340" width="25" height="40" />
</element>
<element name="cr" ref="played">
- <bounds x="270" y="190" width="80" height="40" />
+ <bounds x="270" y="300" width="80" height="40" />
</element>
<element name="digit8" ref="digit">
- <bounds x="290" y="230" width="25" height="40" />
+ <bounds x="290" y="340" width="25" height="40" />
</element>
</view>
</mamelayout>
diff --git a/src/mame/layout/z80net.lay b/src/mame/layout/z80net.lay
index d2fe5034d00..40df2bc5f41 100644
--- a/src/mame/layout/z80net.lay
+++ b/src/mame/layout/z80net.lay
@@ -504,7 +504,7 @@ copyright-holders:Roberto Lavarone
<bounds x="724" y="74" width="375" height="480" />
</element>
- <screen index="0">
+ <screen index="0" blend="add">
<bounds x="65" y="74" width="640" height="480" />
</screen>
diff --git a/src/mame/layout/z80netb.lay b/src/mame/layout/z80netb.lay
index e2084802570..4a91011d01a 100644
--- a/src/mame/layout/z80netb.lay
+++ b/src/mame/layout/z80netb.lay
@@ -47,7 +47,7 @@ copyright-holders:Roberto Lavarone
<bounds x="65" y="74" width="640" height="480" />
</element>
- <screen index="0">
+ <screen index="0" blend="add">
<bounds x="65" y="74" width="640" height="480" />
</screen>
diff --git a/src/mame/layout/z80netf.lay b/src/mame/layout/z80netf.lay
index 463e6d80fbd..ac150d51a4b 100644
--- a/src/mame/layout/z80netf.lay
+++ b/src/mame/layout/z80netf.lay
@@ -530,7 +530,7 @@ copyright-holders:Roberto Lavarone
<bounds x="724" y="74" width="375" height="330" />
</element>
- <screen index="0">
+ <screen index="0" blend="add">
<bounds x="65" y="74" width="640" height="480" />
</screen>
diff --git a/src/mame/machine/informer_207_376_kbd.cpp b/src/mame/machine/informer_207_376_kbd.cpp
index 8bbe4e62ac3..5c36eb4c2b4 100644
--- a/src/mame/machine/informer_207_376_kbd.cpp
+++ b/src/mame/machine/informer_207_376_kbd.cpp
@@ -25,7 +25,7 @@ DEFINE_DEVICE_TYPE(INFORMER_207_376_KBD_HLE, informer_207_376_kbd_hle_device, "i
// keys not mapped yet:
//
// PF13 PF14 PF15 PF16 PF17 PF18 PF19 PF20 PF21 PF22 PF23 (PF24 = cursor up?)
-// ATTN CLICK_KEY
+// ATTN
static INPUT_PORTS_START( keyboard )
PORT_START("row_0")
@@ -55,7 +55,7 @@ static INPUT_PORTS_START( keyboard )
PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD) /* 15 */ PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('\\') PORT_NAME(u8"\\ ¦")
PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD) /* 16 */ PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT)) PORT_NAME("\xe2\x86\x90")
PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_UNKNOWN) /* 17 */
- PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD) /* 18 */ PORT_CODE(KEYCODE_F1) PORT_NAME("Enter") // but should be the same as the setup key?
+ PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD) /* 18 */ PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("Enter Set Up")
PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_UNKNOWN) /* 19 */
PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_KEYBOARD) /* 1a */ PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) PORT_NAME("\xe2\x86\x92")
PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_KEYBOARD) /* 1b */ PORT_CODE(KEYCODE_BACKSLASH2) PORT_CHAR(0) PORT_CHAR('!') PORT_NAME(u8"¢ !")
@@ -87,7 +87,7 @@ static INPUT_PORTS_START( keyboard )
PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) /* 31 */ PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(0x08)
PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) /* 32 */ PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') // same as 0x4b?
PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) /* 33 */ PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') // same as 0x49?
- PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD) /* 34 */ PORT_CODE(KEYCODE_ESC) PORT_NAME("Reset")
+ PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD) /* 34 */ PORT_CODE(KEYCODE_ESC) PORT_NAME("Reset Dev Cncl")
PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD) /* 35 */ PORT_CODE(KEYCODE_TAB) PORT_NAME("Tab or Back-Tab")
PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD) /* 36 */ PORT_CODE(KEYCODE_HOME) PORT_NAME("Tab or Back-Tab")
PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_UNKNOWN) /* 37 */
@@ -110,23 +110,23 @@ static INPUT_PORTS_START( keyboard )
PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_UNKNOWN) /* 46 */ // 1
PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_UNKNOWN) /* 47 */ // 2
PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_UNKNOWN) /* 48 */ // 3
- PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD) /* 49 */ PORT_CODE(KEYCODE_F2) // ,
+ PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD) /* 49 */ PORT_CODE(KEYCODE_F5) // ,
PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_UNKNOWN) /* 4a */ // 0
- PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_KEYBOARD) /* 4b */ PORT_CODE(KEYCODE_F3) // . with alt key unknown function
+ PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_KEYBOARD) /* 4b */ PORT_CODE(KEYCODE_F6) // . with alt key unknown function
PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_KEYBOARD) /* 4c */ PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK)) PORT_NAME("Lock")
PORT_BIT(0x2000, IP_ACTIVE_HIGH, IPT_KEYBOARD) /* 4d */ PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_1) PORT_NAME("Left Shift") // or right?
PORT_BIT(0x4000, IP_ACTIVE_HIGH, IPT_KEYBOARD) /* 4e */ PORT_CODE(KEYCODE_RSHIFT) PORT_NAME("Right Shift") // or left?
PORT_BIT(0x8000, IP_ACTIVE_HIGH, IPT_KEYBOARD) /* 4f */ PORT_CODE(KEYCODE_LALT) PORT_CHAR(UCHAR_SHIFT_2) PORT_NAME("Alt")
PORT_START("row_5")
- PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) /* 50 */ PORT_CODE(KEYCODE_F4) PORT_NAME("Cursor Sel Clear")
- PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) /* 51 */ PORT_CODE(KEYCODE_F5) // X + human?
+ PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) /* 50 */ PORT_CODE(KEYCODE_F2) PORT_NAME("Cursor Sel Clear")
+ PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) /* 51 */ PORT_CODE(KEYCODE_F1) // X + human? ATTN?
PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_UNKNOWN) /* 52 */
PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_UNKNOWN) /* 53 */
- PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD) /* 54 */ PORT_CODE(KEYCODE_F6) PORT_NAME("Cursor Blink Alt Cursor")
+ PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD) /* 54 */ PORT_CODE(KEYCODE_F3) PORT_NAME("Cursor Blink Alt Cursor")
PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD) /* 55 */ PORT_CODE(KEYCODE_END) PORT_NAME("Erase EOF")
PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD) /* 56 */ PORT_CODE(KEYCODE_PRTSCR) PORT_NAME("Print")
- PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) /* 57 */ PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("Setup (with Alt)") // but should be the same as the enter key?
+ PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) /* 57 */ PORT_CODE(KEYCODE_F4) PORT_NAME("Keyclick Test")
PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_UNKNOWN) /* 58 */
PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_UNKNOWN) /* 59 */
PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_UNKNOWN) /* 5a */
diff --git a/src/mame/mame.cpp b/src/mame/mame.cpp
index 9dc8d96c382..d40869d53fe 100644
--- a/src/mame/mame.cpp
+++ b/src/mame/mame.cpp
@@ -2,7 +2,7 @@
// copyright-holders:Aaron Giles
/***************************************************************************
- mame.c
+ mame.cpp
Specific (per target) constants
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index 36a482b90a9..4924eccd9f1 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -32141,6 +32141,7 @@ vtpinball // From V.R. Technology VT SDK
vtsndtest // From V.R. Technology VT SDK
vtboxing // From V.R. Technology VT SDK
msiwwe
+msiwwea
msidd
msimpac
msisinv
@@ -32518,9 +32519,12 @@ pkunwarj // UPL-????? (c) 1985 (Arcade Game TV List - P.9
raiders5 // UPL-85004 (c) 1985
raiders5t // UPL-85004 (c) 1985 Taito license
+@source:novag_cexpert.cpp
+cexpert
+
@source:novag_cforte.cpp
-cfortea //
-cforteb //
+cfortea
+cforteb
@source:novag_const.cpp
const
@@ -40848,6 +40852,7 @@ uts20 //
@source:unk6502_st2xxx.cpp
bbl380
+rhhc152
ragc153
dphh8630
dgun2953
diff --git a/src/mame/mess.cpp b/src/mame/mess.cpp
index 160f777c044..06e49420e3b 100644
--- a/src/mame/mess.cpp
+++ b/src/mame/mess.cpp
@@ -2,7 +2,7 @@
// copyright-holders:Aaron Giles
/***************************************************************************
- mess.c
+ mess.cpp
Specific (per target) constants
diff --git a/src/mame/mess.flt b/src/mame/mess.flt
index 6e0eafa6e56..5bc0b7d10c1 100644
--- a/src/mame/mess.flt
+++ b/src/mame/mess.flt
@@ -653,6 +653,7 @@ ngen.cpp
ngp.cpp
nokia_3310.cpp
notetaker.cpp
+novag_cexpert.cpp
novag_cforte.cpp
novag_const.cpp
novag_diablo.cpp