summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Patrick Mackinlay <pmackinlay@hotmail.com>2017-06-21 10:25:18 +0700
committer Patrick Mackinlay <pmackinlay@hotmail.com>2017-06-21 10:25:18 +0700
commite604b16cf3f76362909107d4dbc0404769c3ce43 (patch)
tree5e2b5ceee271de4f9b353757f39c50269b231e9e
parentd81fef928a0ab6920541459f09bb35f21656d41b (diff)
parente6f86fa6738ae3d108da1e0d28e3b09ceb9cc989 (diff)
Merge remote-tracking branch 'upstream/master' into interpro
-rw-r--r--plugins/cheat/cheat_simple.lua4
-rw-r--r--scripts/src/bus.lua13
-rw-r--r--scripts/target/mame/arcade.lua1
-rw-r--r--scripts/target/mame/mess.lua1
-rw-r--r--src/devices/bus/hp_dio/hp98544.cpp120
-rw-r--r--src/devices/bus/hp_dio/hp98544.h46
-rw-r--r--src/devices/bus/hp_dio/hp_dio.cpp328
-rw-r--r--src/devices/bus/hp_dio/hp_dio.h248
-rw-r--r--src/mame/drivers/40love.cpp330
-rw-r--r--src/mame/drivers/arkanoid.cpp12
-rw-r--r--src/mame/drivers/chaknpop.cpp63
-rw-r--r--src/mame/drivers/coco12.cpp68
-rw-r--r--src/mame/drivers/coco3.cpp72
-rw-r--r--src/mame/drivers/cubo.cpp4
-rw-r--r--src/mame/drivers/dccons.cpp11
-rw-r--r--src/mame/drivers/f1gp.cpp2
-rw-r--r--src/mame/drivers/flstory.cpp30
-rw-r--r--src/mame/drivers/fromanc2.cpp3
-rw-r--r--src/mame/drivers/renegade.cpp304
-rw-r--r--src/mame/drivers/royalmah.cpp91
-rw-r--r--src/mame/drivers/slapfght.cpp41
-rw-r--r--src/mame/drivers/terracre.cpp17
-rw-r--r--src/mame/includes/40love.h11
-rw-r--r--src/mame/includes/chaknpop.h22
-rw-r--r--src/mame/includes/renegade.h16
-rw-r--r--src/mame/includes/slapfght.h7
-rw-r--r--src/mame/machine/chaknpop.cpp144
-rw-r--r--src/mame/machine/interpro_ioga.h2
-rw-r--r--src/mame/machine/slapfght.cpp433
-rw-r--r--src/mame/mame.lst2
-rw-r--r--src/osd/uwp/window.cpp4
31 files changed, 1082 insertions, 1368 deletions
diff --git a/plugins/cheat/cheat_simple.lua b/plugins/cheat/cheat_simple.lua
index c10c0a6ac41..d7e9277457e 100644
--- a/plugins/cheat/cheat_simple.lua
+++ b/plugins/cheat/cheat_simple.lua
@@ -25,7 +25,7 @@ local codefuncs = {}
local function prepare_rom_cheat(desc, region, addr, val, size, banksize, comp)
local cheat = { desc = desc, region = { rom = region } }
- cheat.script = { off = "if on then rom:write_u8(addr, save) end" }
+ cheat.script = { off = "if on then rom:write_u" .. size .. "(addr, save) end" }
if banksize and comp then
local rom = manager:machine():memory().regions[region]
local bankaddr = addr & (banksize - 1)
@@ -47,7 +47,7 @@ local function prepare_rom_cheat(desc, region, addr, val, size, banksize, comp)
on = true
addr = %d
save = rom:read_u%d(addr)
- rom:write_u8(addr, %d)]], addr, size, val)
+ rom:write_u%d(addr, %d)]], addr, size, size, val)
return cheat
end
diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua
index 1c7a5cb5046..7e420e913b8 100644
--- a/scripts/src/bus.lua
+++ b/scripts/src/bus.lua
@@ -735,6 +735,19 @@ if (BUSES["HPHIL"]~=null) then
}
end
+---------------------------------------------------
+--
+--@src/devices/bus/hp_dio/hp_dio.h,BUSES["HPDIO"] = true
+---------------------------------------------------
+
+if (BUSES["HPDIO"]~=null) then
+ files {
+ MAME_DIR .. "src/devices/bus/hp_dio/hp_dio.cpp",
+ MAME_DIR .. "src/devices/bus/hp_dio/hp_dio.h",
+ MAME_DIR .. "src/devices/bus/hp_dio/hp98544.cpp",
+ MAME_DIR .. "src/devices/bus/hp_dio/hp98544.h",
+ }
+end
---------------------------------------------------
--
diff --git a/scripts/target/mame/arcade.lua b/scripts/target/mame/arcade.lua
index e01edc73045..ca8afa5f5a0 100644
--- a/scripts/target/mame/arcade.lua
+++ b/scripts/target/mame/arcade.lua
@@ -3638,7 +3638,6 @@ files {
MAME_DIR .. "src/mame/drivers/cchance.cpp",
MAME_DIR .. "src/mame/drivers/chaknpop.cpp",
MAME_DIR .. "src/mame/includes/chaknpop.h",
- MAME_DIR .. "src/mame/machine/chaknpop.cpp",
MAME_DIR .. "src/mame/video/chaknpop.cpp",
MAME_DIR .. "src/mame/drivers/champbwl.cpp",
MAME_DIR .. "src/mame/drivers/changela.cpp",
diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua
index fd926f647f6..ffb6992ed83 100644
--- a/scripts/target/mame/mess.lua
+++ b/scripts/target/mame/mess.lua
@@ -657,6 +657,7 @@ BUSES["GAMEGEAR"] = true
BUSES["GBA"] = true
BUSES["GENERIC"] = true
BUSES["HPHIL"] = true
+BUSES["HPDIO"] = true
BUSES["IEEE488"] = true
BUSES["IMI7000"] = true
BUSES["INTV"] = true
diff --git a/src/devices/bus/hp_dio/hp98544.cpp b/src/devices/bus/hp_dio/hp98544.cpp
new file mode 100644
index 00000000000..3f47caafeee
--- /dev/null
+++ b/src/devices/bus/hp_dio/hp98544.cpp
@@ -0,0 +1,120 @@
+// license:BSD-3-Clause
+// copyright-holders:R. Belmont
+/***************************************************************************
+
+ HP98544 high-resolution monochrome board
+
+ VRAM at 0x200000, ROM and registers at 0x560000
+
+***************************************************************************/
+
+#include "hp98544.h"
+#include "screen.h"
+
+#define HP98544_SCREEN_NAME "98544_screen"
+#define HP98544_ROM_REGION "98544_rom"
+
+#define VRAM_SIZE (0x100000)
+
+ROM_START( hp98544 )
+ ROM_REGION( 0x4000, HP98544_ROM_REGION, ROMREGION_ERASEFF | ROMREGION_BE | ROMREGION_32BIT )
+ ROM_LOAD16_BYTE( "98544_1818-1999.bin", 0x000001, 0x002000, CRC(8c7d6480) SHA1(d2bcfd39452c38bc652df39f84c7041cfdf6bd51) )
+ROM_END
+
+//**************************************************************************
+// GLOBAL VARIABLES
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(HPDIO_98544, dio16_98544_device, "dio98544", "HP98544 high-res monochrome DIO video card")
+
+
+//-------------------------------------------------
+// device_add_mconfig - add device configuration
+//-------------------------------------------------
+
+MACHINE_CONFIG_MEMBER( dio16_98544_device::device_add_mconfig )
+ MCFG_SCREEN_ADD(HP98544_SCREEN_NAME, RASTER)
+ MCFG_SCREEN_UPDATE_DEVICE(DEVICE_SELF, dio16_98544_device, screen_update)
+ MCFG_SCREEN_SIZE(1024,768)
+ MCFG_SCREEN_VISIBLE_AREA(0, 1024-1, 0, 768-1)
+ MCFG_SCREEN_REFRESH_RATE(70)
+MACHINE_CONFIG_END
+
+//-------------------------------------------------
+// rom_region - device-specific ROM region
+//-------------------------------------------------
+
+const tiny_rom_entry *dio16_98544_device::device_rom_region() const
+{
+ return ROM_NAME( hp98544 );
+}
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// dio16_98544_device - constructor
+//-------------------------------------------------
+
+dio16_98544_device::dio16_98544_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ dio16_98544_device(mconfig, HPDIO_98544, tag, owner, clock)
+{
+}
+
+dio16_98544_device::dio16_98544_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_dio16_card_interface(mconfig, *this)
+{
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void dio16_98544_device::device_start()
+{
+ // set_nubus_device makes m_slot valid
+ set_dio_device();
+
+ uint8_t *rom = device().machine().root_device().memregion(this->subtag(HP98544_ROM_REGION).c_str())->base();
+
+ m_vram.resize(VRAM_SIZE);
+ m_dio->install_bank(0x200000, 0x2fffff, "bank_98544", reinterpret_cast<uint8_t *>(&m_vram[0]));
+ m_dio->install_bank(0x580000, 0x583fff, "rom_98544", rom);
+}
+
+//-------------------------------------------------
+// device_reset - device-specific reset
+//-------------------------------------------------
+
+void dio16_98544_device::device_reset()
+{
+ memset(&m_vram[0], 0, VRAM_SIZE);
+
+ m_palette[1] = rgb_t(255, 255, 255);
+ m_palette[0] = rgb_t(0, 0, 0);
+}
+
+uint32_t dio16_98544_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
+{
+ uint32_t *scanline;
+ int x, y;
+ uint32_t pixels;
+
+ for (y = 0; y < 768; y++)
+ {
+ scanline = &bitmap.pix32(y);
+ for (x = 0; x < 1024/4; x++)
+ {
+ pixels = m_vram[((y * 256) + x)];
+
+ *scanline++ = m_palette[(pixels>>24) & 1];
+ *scanline++ = m_palette[(pixels>>16) & 1];
+ *scanline++ = m_palette[(pixels>>8) & 1];
+ *scanline++ = m_palette[(pixels & 1)];
+ }
+ }
+
+ return 0;
+}
diff --git a/src/devices/bus/hp_dio/hp98544.h b/src/devices/bus/hp_dio/hp98544.h
new file mode 100644
index 00000000000..e8557ba8578
--- /dev/null
+++ b/src/devices/bus/hp_dio/hp98544.h
@@ -0,0 +1,46 @@
+// license:BSD-3-Clause
+// copyright-holders:R. Belmont
+
+#ifndef MAME_BUS_HPDIO_98544_H
+#define MAME_BUS_HPDIO_98544_H
+
+#pragma once
+
+#include "hp_dio.h"
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+// ======================> dio16_98544_device
+
+class dio16_98544_device :
+ public device_t,
+ public device_dio16_card_interface
+{
+public:
+ // construction/destruction
+ dio16_98544_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ dio16_98544_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;
+
+ // optional information overrides
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+
+private:
+ uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
+
+ std::vector<uint32_t> m_vram;
+ uint32_t m_palette[2];
+};
+
+// device type definition
+DECLARE_DEVICE_TYPE(HPDIO_98544, dio16_98544_device)
+
+#endif // MAME_BUS_HPDIO_98544_H
diff --git a/src/devices/bus/hp_dio/hp_dio.cpp b/src/devices/bus/hp_dio/hp_dio.cpp
new file mode 100644
index 00000000000..3c6bbd6891b
--- /dev/null
+++ b/src/devices/bus/hp_dio/hp_dio.cpp
@@ -0,0 +1,328 @@
+// license:BSD-3-Clause
+// copyright-holders:Miodrag Milanovic, R. Belmont
+/***************************************************************************
+
+ HP DIO and DIO-II bus devices
+
+***************************************************************************/
+
+#include "emu.h"
+#include "hp_dio.h"
+
+//**************************************************************************
+// GLOBAL VARIABLES
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(DIO16_SLOT, dio16_slot_device, "dio16_slot", "16-bit DIO slot")
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// dio16_slot_device - constructor
+//-------------------------------------------------
+dio16_slot_device::dio16_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ dio16_slot_device(mconfig, DIO16_SLOT, tag, owner, clock)
+{
+}
+
+dio16_slot_device::dio16_slot_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_slot_interface(mconfig, *this),
+ m_owner(nullptr), m_dio_tag(nullptr)
+{
+}
+
+void dio16_slot_device::static_set_dio16_slot(device_t &device, device_t *owner, const char *dio_tag)
+{
+ dio16_slot_device &dio_card = dynamic_cast<dio16_slot_device &>(device);
+ dio_card.m_owner = owner;
+ dio_card.m_dio_tag = dio_tag;
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void dio16_slot_device::device_start()
+{
+ device_dio16_card_interface *dev = dynamic_cast<device_dio16_card_interface *>(get_card_device());
+ const device_dio32_card_interface *intf;
+ if (get_card_device() && get_card_device()->interface(intf))
+ fatalerror("DIO32 device in DIO16 slot\n");
+
+ if (dev) device_dio16_card_interface::static_set_diobus(*dev,m_owner->subdevice(m_dio_tag));
+}
+
+
+
+//**************************************************************************
+// GLOBAL VARIABLES
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(DIO32_SLOT, dio32_slot_device, "dio32_slot", "32-bit DIO-II slot")
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// dio32_slot_device - constructor
+//-------------------------------------------------
+dio32_slot_device::dio32_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ dio16_slot_device(mconfig, DIO32_SLOT, tag, owner, clock)
+{
+}
+
+void dio32_slot_device::static_set_dio32_slot(device_t &device, device_t *owner, const char *dio_tag)
+{
+ dio32_slot_device &dio_card = dynamic_cast<dio32_slot_device &>(device);
+ dio_card.m_owner = owner;
+ dio_card.m_dio_tag = dio_tag;
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void dio32_slot_device::device_start()
+{
+ device_dio16_card_interface *dev = dynamic_cast<device_dio16_card_interface *>(get_card_device());
+ if (dev) device_dio16_card_interface::static_set_diobus(*dev,m_owner->subdevice(m_dio_tag));
+}
+
+
+//**************************************************************************
+// GLOBAL VARIABLES
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(DIO16, dio16_device, "dio16", "16-bit DIO bus")
+
+void dio16_device::static_set_cputag(device_t &device, const char *tag)
+{
+ dio16_device &dio = downcast<dio16_device &>(device);
+ dio.m_cputag = tag;
+}
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// dio16_device - constructor
+//-------------------------------------------------
+
+dio16_device::dio16_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ dio16_device(mconfig, DIO16, tag, owner, clock)
+{
+}
+
+dio16_device::dio16_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_memory_interface(mconfig, *this),
+ m_program_config("DIO 16-bit program", ENDIANNESS_LITTLE, 8, 24, 0, nullptr),
+ m_program32_config("DIO-II 32-bit program", ENDIANNESS_LITTLE, 16, 32, 0, nullptr),
+ m_maincpu(nullptr),
+ m_prgspace(nullptr),
+ m_out_irq3_cb(*this),
+ m_out_irq4_cb(*this),
+ m_out_irq5_cb(*this),
+ m_out_irq6_cb(*this),
+ m_cputag(nullptr)
+{
+ m_prgwidth = 0;
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void dio16_device::device_start()
+{
+ m_out_irq3_cb.resolve_safe();
+ m_out_irq4_cb.resolve_safe();
+ m_out_irq5_cb.resolve_safe();
+ m_out_irq6_cb.resolve_safe();
+
+ m_maincpu = subdevice<cpu_device>(m_cputag);
+ m_prgspace = &m_maincpu->space(AS_PROGRAM);
+ m_prgwidth = m_maincpu->space_config(AS_PROGRAM)->m_databus_width;
+}
+
+//-------------------------------------------------
+// device_reset - device-specific reset
+//-------------------------------------------------
+
+void dio16_device::device_reset()
+{
+}
+
+
+void dio16_device::install_space(address_spacenum spacenum, offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler)
+{
+ int buswidth;
+ address_space *space;
+
+ if (spacenum == AS_PROGRAM)
+ {
+ space = m_prgspace;
+ buswidth = m_prgwidth;
+ }
+ else
+ {
+ fatalerror("Unknown space passed to dio16_device::install_space!\n");
+ }
+
+ switch(buswidth)
+ {
+ case 16:
+ space->install_readwrite_handler(start, end, rhandler, whandler, 0xffff);
+ break;
+ case 32:
+ if ((start % 4) == 0) {
+ if ((end-start)==1) {
+ space->install_readwrite_handler(start, end+2, rhandler, whandler, 0x0000ffff);
+ } else {
+ space->install_readwrite_handler(start, end, rhandler, whandler, 0xffffffff);
+ }
+ } else {
+ // we handle just misaligned by 2
+ space->install_readwrite_handler(start-2, end, rhandler, whandler, 0xffff0000);
+ }
+ break;
+ default:
+ fatalerror("DIO16: Bus width %d not supported\n", buswidth);
+ }
+}
+
+
+void dio16_device::install_memory(offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler)
+{
+ install_space(AS_PROGRAM, start, end, rhandler, whandler);
+}
+
+void dio16_device::install_device(offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler)
+{
+ install_space(AS_IO, start, end, rhandler, whandler);
+}
+
+
+void dio16_device::install_bank(offs_t start, offs_t end, const char *tag, uint8_t *data)
+{
+ m_prgspace->install_readwrite_bank(start, end, 0, tag );
+ machine().root_device().membank(m_prgspace->device().siblingtag(tag).c_str())->set_base(data);
+}
+
+void dio16_device::unmap_bank(offs_t start, offs_t end)
+{
+ m_prgspace->unmap_readwrite(start, end);
+}
+
+void dio16_device::install_rom(device_t *dev, offs_t start, offs_t end, const char *tag, const char *region)
+{
+ if (machine().root_device().memregion("dio")) {
+ uint8_t *src = dev->memregion(region)->base();
+ uint8_t *dest = machine().root_device().memregion("dio")->base() + start - 0xc0000;
+ memcpy(dest,src, end - start + 1);
+ } else {
+ m_prgspace->install_read_bank(start, end, 0, tag);
+ m_prgspace->unmap_write(start, end);
+ machine().root_device().membank(m_prgspace->device().siblingtag(tag).c_str())->set_base(machine().root_device().memregion(dev->subtag(region).c_str())->base());
+ }
+}
+
+void dio16_device::unmap_rom(offs_t start, offs_t end)
+{
+ m_prgspace->unmap_read(start, end);
+}
+
+// interrupt request from dio card
+WRITE_LINE_MEMBER( dio16_device::irq3_w ) { m_out_irq3_cb(state); }
+WRITE_LINE_MEMBER( dio16_device::irq4_w ) { m_out_irq4_cb(state); }
+WRITE_LINE_MEMBER( dio16_device::irq5_w ) { m_out_irq5_cb(state); }
+WRITE_LINE_MEMBER( dio16_device::irq6_w ) { m_out_irq6_cb(state); }
+
+//**************************************************************************
+// DEVICE CONFIG DIO16 CARD INTERFACE
+//**************************************************************************
+
+
+//**************************************************************************
+// DEVICE DIO16 CARD INTERFACE
+//**************************************************************************
+
+//-------------------------------------------------
+// device_dio16_card_interface - constructor
+//-------------------------------------------------
+
+device_dio16_card_interface::device_dio16_card_interface(const machine_config &mconfig, device_t &device)
+ : device_slot_card_interface(mconfig, device),
+ m_dio(nullptr), m_dio_dev(nullptr), m_next(nullptr)
+{
+}
+
+
+//-------------------------------------------------
+// ~device_dio16_card_interface - destructor
+//-------------------------------------------------
+
+device_dio16_card_interface::~device_dio16_card_interface()
+{
+}
+
+void device_dio16_card_interface::static_set_diobus(device_t &device, device_t *dio_device)
+{
+ device_dio16_card_interface &dio_card = dynamic_cast<device_dio16_card_interface &>(device);
+ dio_card.m_dio_dev = dio_device;
+}
+
+void device_dio16_card_interface::set_dio_device()
+{
+ m_dio = dynamic_cast<dio16_device *>(m_dio_dev);
+}
+
+
+DEFINE_DEVICE_TYPE(DIO32, dio32_device, "dio32", "32-bit DIO-II bus")
+
+//-------------------------------------------------
+// dio32_device - constructor
+//-------------------------------------------------
+
+dio32_device::dio32_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ dio16_device(mconfig, DIO32, tag, owner, clock)
+{
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void dio32_device::device_start()
+{
+ dio16_device::device_start();
+}
+
+//-------------------------------------------------
+// device_dio32_card_interface - constructor
+//-------------------------------------------------
+
+device_dio32_card_interface::device_dio32_card_interface(const machine_config &mconfig, device_t &device)
+ : device_dio16_card_interface(mconfig,device), m_dio(nullptr)
+{
+}
+
+
+//-------------------------------------------------
+// ~device_dio32_card_interface - destructor
+//-------------------------------------------------
+
+device_dio32_card_interface::~device_dio32_card_interface()
+{
+}
+
+void device_dio32_card_interface::set_dio_device()
+{
+ m_dio = dynamic_cast<dio32_device *>(m_dio_dev);
+}
+
diff --git a/src/devices/bus/hp_dio/hp_dio.h b/src/devices/bus/hp_dio/hp_dio.h
new file mode 100644
index 00000000000..20789a53803
--- /dev/null
+++ b/src/devices/bus/hp_dio/hp_dio.h
@@ -0,0 +1,248 @@
+// license:BSD-3-Clause
+// copyright-holders:Miodrag Milanovic, R.Belmont
+/***************************************************************************
+
+ HP DIO and DIO-II bus devices
+
+ DIO is 16-bit, essentially the MC68000 bus
+ DIO-II extends to 32-bit for 68020/030/040 machines
+
+ 16-bit DIO cards fit and work in either 16 or 32 bit systems, much like 8-bit ISA.
+ 32-bit DIO-II cards only work in 32 bit DIO-II systems.
+
+***************************************************************************/
+
+#ifndef MAME_BUS_HPDIO_HPDIO_H
+#define MAME_BUS_HPDIO_HPDIO_H
+
+#pragma once
+
+//**************************************************************************
+// INTERFACE CONFIGURATION MACROS
+//**************************************************************************
+
+#define MCFG_DIO16_CPU(_cputag) \
+ dio16_device::static_set_cputag(*device, _cputag);
+#define MCFG_DIO16_SLOT_ADD(_diotag, _tag, _slot_intf, _def_slot, _fixed) \
+ MCFG_DEVICE_ADD(_tag, DIO16_SLOT, 0) \
+ MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, _fixed) \
+ dio16_slot_device::static_set_dio16_slot(*device, owner, _diotag);
+#define MCFG_DIO32_CPU(_cputag) \
+ dio32_device::static_set_cputag(*device, _cputag);
+#define MCFG_DIO32_SLOT_ADD(_diotag, _tag, _slot_intf, _def_slot, _fixed) \
+ MCFG_DEVICE_ADD(_tag, DIO32_SLOT, 0) \
+ MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, _fixed) \
+ dio32_slot_device::static_set_dio32_slot(*device, owner, _diotag);
+
+#define MCFG_ISA_OUT_IRQ3_CB(_devcb) \
+ devcb = &dio16_device::set_out_irq3_callback(*device, DEVCB_##_devcb);
+
+#define MCFG_ISA_OUT_IRQ4_CB(_devcb) \
+ devcb = &dio16_device::set_out_irq4_callback(*device, DEVCB_##_devcb);
+
+#define MCFG_ISA_OUT_IRQ5_CB(_devcb) \
+ devcb = &dio16_device::set_out_irq5_callback(*device, DEVCB_##_devcb);
+
+#define MCFG_ISA_OUT_IRQ6_CB(_devcb) \
+ devcb = &dio16_device::set_out_irq6_callback(*device, DEVCB_##_devcb);
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+class dio16_device;
+
+class dio16_slot_device : public device_t,
+ public device_slot_interface
+{
+public:
+ // construction/destruction
+ dio16_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+ // device-level overrides
+ virtual void device_start() override;
+
+ // inline configuration
+ static void static_set_dio16_slot(device_t &device, device_t *owner, const char *dio_tag);
+
+protected:
+ dio16_slot_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
+
+ // configuration
+ device_t *m_owner;
+ const char *m_dio_tag;
+};
+
+// device type definition
+DECLARE_DEVICE_TYPE(DIO16_SLOT, dio16_slot_device)
+
+class device_dio16_card_interface;
+// ======================> dio16_device
+class dio16_device : public device_t,
+ public device_memory_interface
+{
+public:
+ // construction/destruction
+ dio16_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ // inline configuration
+ static void static_set_cputag(device_t &device, const char *tag);
+ template <class Object> static devcb_base &set_out_irq3_callback(device_t &device, Object &&cb) { return downcast<dio16_device &>(device).m_out_irq3_cb.set_callback(std::forward<Object>(cb)); }
+ template <class Object> static devcb_base &set_out_irq4_callback(device_t &device, Object &&cb) { return downcast<dio16_device &>(device).m_out_irq4_cb.set_callback(std::forward<Object>(cb)); }
+ template <class Object> static devcb_base &set_out_irq5_callback(device_t &device, Object &&cb) { return downcast<dio16_device &>(device).m_out_irq5_cb.set_callback(std::forward<Object>(cb)); }
+ template <class Object> static devcb_base &set_out_irq6_callback(device_t &device, Object &&cb) { return downcast<dio16_device &>(device).m_out_irq6_cb.set_callback(std::forward<Object>(cb)); }
+
+ // for DIO16, put the 16-bit configs in the primary slots and the 32-bit configs in the secondary
+ virtual const address_space_config *memory_space_config(address_spacenum spacenum) const override
+ {
+ switch (spacenum)
+ {
+ case AS_PROGRAM: return &m_program_config;
+ case AS_DATA: return &m_program32_config;
+ default: return nullptr;
+ }
+ }
+
+ void install_device(offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler);
+
+ void install_bank(offs_t start, offs_t end, const char *tag, uint8_t *data);
+ void install_rom(device_t *dev, offs_t start, offs_t end, const char *tag, const char *region);
+ void install_memory(offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler);
+
+ void unmap_bank(offs_t start, offs_t end);
+ void unmap_rom(offs_t start, offs_t end);
+
+ // IRQs 1, 2, and 7 are reserved for non-bus usage.
+ DECLARE_WRITE_LINE_MEMBER( irq3_w );
+ DECLARE_WRITE_LINE_MEMBER( irq4_w );
+ DECLARE_WRITE_LINE_MEMBER( irq5_w );
+ DECLARE_WRITE_LINE_MEMBER( irq6_w );
+
+ const address_space_config m_program_config, m_program32_config;
+
+protected:
+ dio16_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
+
+ void install_space(address_spacenum spacenum, offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler);
+
+ // device-level overrides
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+ // internal state
+ cpu_device *m_maincpu;
+
+ // address spaces
+ address_space *m_prgspace;
+ int m_prgwidth;
+
+ devcb_write_line m_out_irq3_cb;
+ devcb_write_line m_out_irq4_cb;
+ devcb_write_line m_out_irq5_cb;
+ devcb_write_line m_out_irq6_cb;
+
+ const char *m_cputag;
+
+private:
+};
+
+
+// device type definition
+DECLARE_DEVICE_TYPE(DIO16, dio16_device)
+
+// ======================> device_dio16_card_interface
+
+// class representing interface-specific live dio16 card
+class device_dio16_card_interface : public device_slot_card_interface
+{
+ friend class dio16_device;
+ template <class ElementType> friend class simple_list;
+public:
+ // construction/destruction
+ virtual ~device_dio16_card_interface();
+
+ device_dio16_card_interface *next() const { return m_next; }
+
+ void set_dio_device();
+
+ // inline configuration
+ static void static_set_diobus(device_t &device, device_t *dio_device);
+
+public:
+ device_dio16_card_interface(const machine_config &mconfig, device_t &device);
+
+ dio16_device *m_dio;
+ device_t *m_dio_dev;
+
+private:
+ device_dio16_card_interface *m_next;
+};
+
+class dio32_device;
+
+class dio32_slot_device : public dio16_slot_device
+{
+public:
+ // construction/destruction
+ dio32_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ // device-level overrides
+ virtual void device_start() override;
+
+ // inline configuration
+ static void static_set_dio32_slot(device_t &device, device_t *owner, const char *dio_tag);
+};
+
+
+// device type definition
+DECLARE_DEVICE_TYPE(DIO32_SLOT, dio32_slot_device)
+
+// ======================> dio32_device
+class dio32_device : public dio16_device
+{
+public:
+ // construction/destruction
+ dio32_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+ void install16_device(offs_t start, offs_t end, read16_delegate rhandler, write16_delegate whandler);
+
+ // for DIO32, put the 32-bit configs in the primary slots and the 16-bit configs in the secondary
+ virtual const address_space_config *memory_space_config(address_spacenum spacenum) const override
+ {
+ switch (spacenum)
+ {
+ case AS_PROGRAM: return &m_program32_config;
+ case AS_DATA: return &m_program_config;
+ default: return nullptr;
+ }
+ }
+
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+
+private:
+};
+
+
+// device type definition
+DECLARE_DEVICE_TYPE(DIO32, dio32_device)
+
+// ======================> device_dio32_card_interface
+
+// class representing interface-specific live dio32 card
+class device_dio32_card_interface : public device_dio16_card_interface
+{
+ friend class dio32_device;
+public:
+ // construction/destruction
+ virtual ~device_dio32_card_interface();
+
+ void set_dio_device();
+
+protected:
+ device_dio32_card_interface(const machine_config &mconfig, device_t &device);
+
+ dio32_device *m_dio;
+};
+
+#endif // MAME_BUS_HPDIO_HPDIO_H
diff --git a/src/mame/drivers/40love.cpp b/src/mame/drivers/40love.cpp
index 50302081763..5567675bfa2 100644
--- a/src/mame/drivers/40love.cpp
+++ b/src/mame/drivers/40love.cpp
@@ -342,245 +342,6 @@ READ8_MEMBER(fortyl_state::pix2_r)
}
-/****************************************************************************
- fake MCU (undoukai and field day)
-****************************************************************************/
-
-static const uint8_t mcu_data0[0x80] =
-{
- 0x0a,0x08,0x0f,0x07,0x06,0x05,0x04,0x00,
- 0x0a,0x0b,0x15,0x02,0x03,0x15,0x0a,0x08,
- 0x0f,0x07,0x06,0x05,0x04,0x0c,0x01,0x0c,
- 0x01,0x15,0x0b,0x0a,0x00,0x0d,0x0e,0x15,
- 0x0a,0x08,0x0f,0x07,0x06,0x05,0x04,0x0b,
- 0x09,0x0c,0x01,0x0c,0x01,0x15,0x0a,0x08,
- 0x0f,0x07,0x06,0x05,0x04,0x0c,0x0c,0x01,
- 0x0c,0x0c,0xff,0xe1,0x23,0xc5,0xc9,0x15,
-
- 0x3e,0x4a,0xcd,0x2b,0x00,0x4e,0x79,0xf6,
- 0xa0,0xe6,0xa2,0xcb,0xcf,0xf5,0x0e,0x62,
- 0xcd,0x35,0x00,0xcb,0xc9,0x79,0xe6,0x02,
- 0x5f,0xe1,0x4b,0x69,0x3e,0x00,0x2e,0x38,
- 0xb5,0x6f,0x06,0x23,0x11,0xfe,0xdf,0x1a,
- 0x27,0x77,0xe6,0x01,0x5f,0x16,0x00,0xcb,
- 0xfe,0x19,0x05,0x78,0x20,0xee,0xc1,0xe1,
- 0x23,0xc5,0xc9,0xee,0x37,0x28,0xc0,0xc5
-};
-
-static const uint8_t mcu_data1[0x80] =
-{
- 0x00,0x78,0xef,0x66,0xdc,0x50,0xc2,0x33,
- 0xa1,0x0c,0x74,0xd9,0x3a,0x96,0xef,0x42,
- 0x90,0xd9,0x1c,0x58,0x8f,0xbe,0xe6,0x07,
- 0x20,0x31,0x39,0x39,0x2f,0x1c,0x00,0xda,
- 0xa9,0x6d,0x27,0xd6,0x79,0x11,0x9c,0x1b,
- 0x8e,0xf3,0x4c,0x97,0xd5,0x05,0x27,0x3a,
- 0x3f,0x35,0x1b,0xf3,0xbb,0x73,0x1c,0xb4,
- 0x3c,0xb3,0x1a,0x6f,0xb4,0xe7,0x09,0x19,
- 0x17,0x04,0xde,0xa6,0x5c,0xff,0x90,0x0e,
- 0x78,0xd0,0x15,0x47,0x65,0x70,0x68,0x4c,
- 0x1c,0xd9,0x82,0x18,0x99,0x07,0x60,0xa6,
- 0xd8,0xf6,0x00,0x30,0x08,0x31,0x02,0xb7,
- 0x81,0xfa,0x30,0x02,0x01,0x01,0x14,0x30,
- 0x07,0xd6,0x7e,0x30,0x1d,0x15,0x25,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
-};
-
-static const uint8_t mcu_data2[0x80] =
-{
- 0x00,0x04,0x08,0x00,0x11,0x16,0x1a,0x1f,
- 0x23,0x28,0x2c,0x30,0x35,0x39,0x3d,0x42,
- 0x46,0x4a,0x4f,0x53,0x57,0x5b,0x5f,0x64,
- 0x68,0x6c,0x70,0x74,0x78,0x7c,0x80,0x83,
- 0x87,0x8b,0x8f,0x92,0x96,0x9a,0x90,0xa1,
- 0xa4,0xa7,0xa8,0xae,0xb1,0xb5,0xb8,0xbb,
- 0xbe,0xc1,0xc4,0xc6,0xc9,0xcc,0xcf,0xd1,
- 0xd4,0xd6,0xd9,0xdb,0xdd,0xdf,0xe2,0xe4,
- 0xe6,0xe8,0xe9,0xeb,0xed,0xee,0xf0,0xf2,
- 0xf3,0xf4,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,
- 0xfc,0xfc,0xfd,0xfe,0xfe,0xff,0xff,0xff,
- 0xff,0xff,0x00,0x3d,0x26,0xbe,0xd6,0x6c,
- 0x30,0xa6,0xb7,0x81,0x01,0x04,0x14,0xb6,
- 0xa4,0x97,0x02,0xb7,0x81,0x1b,0x13,0x23,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
-};
-
-
-WRITE8_MEMBER(fortyl_state::undoukai_mcu_w)
-{
- int ram_adr = m_mcu_ram[0x1b5] * 0x100 + m_mcu_ram[0x1b4];
-
- int d, i;
-
- // logerror("mcu_w %02x\n", data);
-
-
- if (m_mcu_cmd != -1)
- {
- m_mcu_in[(m_mcu_cmd & 0x10) >> 4][m_mcu_cmd & 0x0f] = data;
- m_mcu_cmd = -1;
- }
- else
- {
- switch (data)
- {
- case 0xc0:
- case 0xc1:
- case 0xc2:
- case 0xc3:
- case 0xc4:
- case 0xc5:
- case 0xc6:
- case 0xc7:
- m_mcu_cmd = (data & 0x0f) | 0x10;
- break;
-
- case 0xb0:
- case 0xb1:
- case 0xb2:
- case 0xb3:
- m_mcu_cmd = data & 0x0f;
- break;
-
- case 0x30:
- case 0x31:
- case 0x32:
- case 0x33:
- case 0x34:
- case 0x35:
- case 0x36:
- case 0x37:
- case 0x38:
- case 0x39:
- m_from_mcu = m_mcu_out[0][data & 0x0f];
- break;
-
- case 0x40:
- case 0x41:
- case 0x42:
- m_from_mcu = m_mcu_out[1][data & 0x0f];
- break;
-
-
- case 0x01:
- m_mcu_out[0][0] = (m_mcu_in[0][0] ^ (m_mcu_in[0][0] >> 4)) & 0x0f;
- break;
-
- case 0x02:
- if (m_mcu_in[0][3] != 0x00)
- {
- m_mcu_out[0][1] = 0x0c;
- m_mcu_out[0][2] = 0x00;
- }
- else
- {
- m_mcu_out[0][2] = 0xa2;
- switch (m_mcu_in[0][0] & 0x03)
- {
- case 0: m_mcu_out[0][1] = 0x55; break;
- case 1: m_mcu_out[0][1] = 0x3d; break;
- case 2: m_mcu_out[0][1] = 0x45; break;
- case 3: m_mcu_out[0][1] = 0x4d; break;
- }
- }
- break;
-
- case 0x03:
- m_mcu_out[0][1] = (((m_mcu_in[0][0] * 8) & 0x38) -1) & 0xff ;
-
- if (m_mcu_in[0][1] | m_mcu_in[0][2])
- d = 0x40;
- else
- d = 0x00;
-
- for (i = 0; i < 8; i++)
- m_mcu_out[0][i + 2] = mcu_data0[((m_mcu_out[0][1] + i) & 0x3f) + d];
- break;
-
- case 0x04:
- m_mcu_out[0][0] = ((m_mcu_in[0][0] & 0x0f) << 4) + (m_mcu_in[0][1] & 0x0f);
- m_mcu_out[0][1] = ((m_mcu_in[0][2] & 0x0f) << 4) + (m_mcu_in[0][3] & 0x0f);
- break;
-
- case 0x05:
-// m_mcu_out[0][0] = 255 * cos(PI * m_mcu_in[0][0] / 180);
-// m_mcu_out[0][1] = 255 * sin(PI * m_mcu_in[0][0] / 180);
-
- d = m_mcu_in[0][0] & 0x7f;
- m_mcu_out[0][0] = mcu_data1[d];
- m_mcu_out[0][1] = mcu_data2[d];
- break;
-
- case 0x06:
- if (m_mcu_in[0][0] != 0x00)
- m_mcu_out[0][0] = 0xfa;
- else
- switch (m_mcu_in[0][1])
- {
- case 0x00: m_mcu_out[0][0] = 0x02; break;
- case 0x01: m_mcu_out[0][0] = 0x01; break;
- case 0x02: m_mcu_out[0][0] = 0x01; break;
- case 0x03: m_mcu_out[0][0] = 0x04; break;
- case 0x04: m_mcu_out[0][0] = 0x01; break;
- case 0x05: m_mcu_out[0][0] = 0x14; break;
- case 0x06: m_mcu_out[0][0] = 0x14; break;
- case 0x07: m_mcu_out[0][0] = 0xb6; break;
- default:
- // popmessage("cmd06: %02x %02x", m_mcu_in[0][0], m_mcu_in[0][1]);
- logerror("cmd06: %02x %02x\n", m_mcu_in[0][0], m_mcu_in[0][1]);
- }
- break;
-
- case 0x07:
- switch (m_mcu_in[0][0] & 7)
- {
- case 0: m_mcu_out[0][0] = 0x1d; break;
- case 1: m_mcu_out[0][0] = 0x1b; break;
- case 2: m_mcu_out[0][0] = 0x15; break;
- case 3: m_mcu_out[0][0] = 0x13; break;
- case 4: m_mcu_out[0][0] = 0x25; break;
- case 5: m_mcu_out[0][0] = 0x23; break;
- case 6: m_mcu_out[0][0] = 0xff; break;
- case 7: m_mcu_out[0][0] = 0xff; break;
- }
- break;
-
- case 0x0e:
-
- if(ram_adr >= 0xa000 && ram_adr < 0xa800)
- {
- ram_adr = ram_adr - 0xa000;
- m_mcu_out[1][0] = m_mcu_ram[ram_adr];
- m_mcu_out[1][1] = m_mcu_ram[ram_adr + 1];
- m_mcu_out[1][2] = m_mcu_ram[ram_adr + 2] & 0x0f;
- }
- break;
-
- default:
- m_from_mcu = 0x5d;
-
-// popmessage("unknown cmd%02x: %02x %02x %02x %02x", data, m_mcu_in[0][0], m_mcu_in[0][1], m_mcu_in[0][2], m_mcu_in[0][3]);
-// logerror("unknown cmd%02x: %02x %02x %02x %02x\n", data, m_mcu_in[0][0], m_mcu_in[0][1], m_mcu_in[0][2], m_mcu_in[0][3]);
- }
- }
-}
-
-READ8_MEMBER(fortyl_state::undoukai_mcu_r)
-{
- // logerror("mcu_r %02x\n", m_from_mcu);
-
- return m_from_mcu;
-}
-
-READ8_MEMBER(fortyl_state::undoukai_mcu_status_r)
-{
- int res = 3;
-
- return res;
-}
-
/***************************************************************************/
DRIVER_INIT_MEMBER(fortyl_state,undoukai)
@@ -668,8 +429,8 @@ static ADDRESS_MAP_START( undoukai_map, AS_PROGRAM, 8, fortyl_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x9fff) AM_ROMBANK("bank1")
AM_RANGE(0xa000, 0xa7ff) AM_RAM AM_SHARE("mcu_ram") /* M5517P on main board */
- AM_RANGE(0xa800, 0xa800) AM_READWRITE(undoukai_mcu_r, undoukai_mcu_w)
- AM_RANGE(0xa801, 0xa801) AM_READWRITE(undoukai_mcu_status_r, pix1_w) //pixel layer related
+ AM_RANGE(0xa800, 0xa800) AM_DEVREADWRITE("bmcu", taito68705_mcu_device, data_r, data_w)
+ AM_RANGE(0xa801, 0xa801) AM_READWRITE(fortyl_mcu_status_r, pix1_w) //pixel layer related
AM_RANGE(0xa802, 0xa802) AM_WRITE(bank_select_w)
AM_RANGE(0xa803, 0xa803) AM_READWRITE(pix2_r, pix2_w) //pixel layer related
AM_RANGE(0xa804, 0xa804) AM_READWRITE(from_snd_r, sound_command_w)
@@ -988,18 +749,6 @@ MACHINE_START_MEMBER(fortyl_state,40love)
save_item(NAME(m_snd_ctrl3));
}
-MACHINE_START_MEMBER(fortyl_state,undoukai)
-{
- MACHINE_START_CALL_MEMBER(40love);
-
- /* fake mcu */
- save_item(NAME(m_from_mcu));
- save_item(NAME(m_mcu_cmd));
- save_item(NAME(m_mcu_in[0]));
- save_item(NAME(m_mcu_in[1]));
- save_item(NAME(m_mcu_out[0]));
- save_item(NAME(m_mcu_out[1]));
-}
MACHINE_RESET_MEMBER(fortyl_state,common)
{
@@ -1027,25 +776,6 @@ MACHINE_RESET_MEMBER(fortyl_state,40love)
MACHINE_RESET_CALL_MEMBER(common);
}
-MACHINE_RESET_MEMBER(fortyl_state,undoukai)
-{
- int i;
-
- MACHINE_RESET_CALL_MEMBER(common);
-
- /* fake mcu */
- m_from_mcu = 0xff;
- m_mcu_cmd = -1;
-
- for (i = 0; i < 16; i++)
- {
- m_mcu_in[0][i] = 0;
- m_mcu_in[1][i] = 0;
- m_mcu_out[0][i] = 0;
- m_mcu_out[1][i] = 0;
- }
-}
-
static MACHINE_CONFIG_START( 40love )
/* basic machine hardware */
@@ -1115,10 +845,11 @@ static MACHINE_CONFIG_START( undoukai )
MCFG_CPU_PROGRAM_MAP(sound_map)
MCFG_CPU_PERIODIC_INT_DRIVER(fortyl_state, irq0_line_hold, 2*60) /* source/number of IRQs is unknown */
-// MCFG_DEVICE_ADD("bmcu", TAITO68705_MCU, 18432000/6)
-
- MCFG_MACHINE_START_OVERRIDE(fortyl_state,undoukai)
- MCFG_MACHINE_RESET_OVERRIDE(fortyl_state,undoukai) /* init machine */
+ MCFG_DEVICE_ADD("bmcu", TAITO68705_MCU, 18432000/6)
+
+ MCFG_QUANTUM_TIME(attotime::from_hz(6000))
+ MCFG_MACHINE_START_OVERRIDE(fortyl_state,40love)
+ MCFG_MACHINE_RESET_OVERRIDE(fortyl_state,40love) /* init machine */
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@@ -1203,6 +934,42 @@ ROM_START( 40love )
ROM_END
+ROM_START( 40lovej )
+ ROM_REGION( 0x14000, "maincpu", 0 ) /* Z80 main CPU */
+ ROM_LOAD( "a30_01.70", 0x000000, 0x004000, CRC(1b89829e) SHA1(d875a4e3586fd9fb2e354e4353c9144ad68ce620) )
+ ROM_LOAD( "a30_02.71", 0x004000, 0x004000, CRC(1468e71e) SHA1(e251ddf42ab51e9c391c213f54b709b71a3f1519) )
+ ROM_LOAD( "a30_03.72", 0x010000, 0x004000, CRC(dbc0049d) SHA1(1fca22ca0794564bbd1f946afb644fef0342acca) )
+
+ ROM_REGION( 0x10000, "audiocpu", ROMREGION_ERASEFF ) /* Z80 sound CPU */
+ // not in the provided set, identical?
+ ROM_LOAD( "a30-08.u08", 0x0000, 0x2000, BAD_DUMP CRC(2fc42ee1) SHA1(b56e5f9acbcdc476252e188f41ad7249dba6f8e1) )
+ ROM_LOAD( "a30-09.u09", 0x2000, 0x2000, BAD_DUMP CRC(3a75abce) SHA1(ad2df26789d38196c0677c22ab8f176e99604b18) )
+ ROM_LOAD( "a30-10.u10", 0x4000, 0x2000, BAD_DUMP CRC(393c4b5b) SHA1(a8e1dd5c33e929bc832cccc13b85ecd13fff1eb2) )
+ ROM_LOAD( "a30-11.u37", 0x6000, 0x2000, BAD_DUMP CRC(11b2c6d2) SHA1(d55690512a37c4df2386a845e0cfb14f8052295b) )
+ ROM_LOAD( "a30-12.u38", 0x8000, 0x2000, BAD_DUMP CRC(f7afd475) SHA1(dd09d5ca7fec5e0454f9efb8ebc722561010f124) )
+ ROM_LOAD( "a30-13.u39", 0xa000, 0x2000, BAD_DUMP CRC(e806630f) SHA1(09022aae88ea0171a0aacf3260fa3a95e8faeb21) )
+
+ ROM_REGION( 0x0800, "bmcu:mcu", 0 ) /* 2k for the microcontroller */
+ // taken from World set, the provided one causes bad hw
+ ROM_LOAD( "a30-14" , 0x0000, 0x0800, BAD_DUMP CRC(c4690279) SHA1(60bc77e03b9be434bb97a374a2fedeb8d049a660) )
+// ROM_LOAD( "a30_14", 0x000000, 0x000800, BAD_DUMP CRC(a4f770ce) SHA1(868e98528e8824e7329e9a298603e456bbc1f1f0) )
+
+ ROM_REGION( 0x8000, "gfx1", 0 )
+ ROM_LOAD( "a30_04.18", 0x000000, 0x004000, CRC(529a7489) SHA1(cf3fa83f16e2e62c1a4aa74b00080f1e167865a6) )
+ ROM_LOAD( "a30_05.19", 0x004000, 0x004000, CRC(7017e5f1) SHA1(fc614fd41109a9a6236ed4a331eda74e5d49b946) )
+
+ ROM_REGION( 0x8000, "gfx2", 0 )
+ ROM_LOAD( "a30_06.59", 0x000000, 0x004000, CRC(f744ea8e) SHA1(0bf6deabfac47237347af810332bc3716e3a26f0) )
+ ROM_LOAD( "a30_07.60", 0x004000, 0x004000, CRC(b2af1359) SHA1(6a21e38cfb65d52b7e1209101f0dd497f9a71f46) )
+
+ ROM_REGION( 0x1000, "proms", 0 )
+ // not provided
+ ROM_LOAD( "a30-15.u03", 0x0000, 0x0400, BAD_DUMP CRC(55e38cc7) SHA1(823a6d7f29eadf5d12702d782d4297b0d4c65a0e) ) /* red */
+ ROM_LOAD( "a30-16.u01", 0x0400, 0x0400, BAD_DUMP CRC(13997e20) SHA1(9fae1cf633409a88263dc66a17b1c2eeccd05f4f) ) /* green */
+ ROM_LOAD( "a30-17.u02", 0x0800, 0x0400, BAD_DUMP CRC(5031f2f3) SHA1(1836d82fdc9f39cb318a791af2a935c27baabfd7) ) /* blue */
+ ROM_LOAD( "a30-18.u13", 0x0c00, 0x0400, BAD_DUMP CRC(78697c0f) SHA1(31382ed4c0d44024f7f57a9de6407527f4d5b0d1) ) /* ??? */
+ROM_END
+
ROM_START( fieldday )
ROM_REGION( 0x14000, "maincpu", 0 ) /* Z80 main CPU */
ROM_LOAD( "a17_44.bin", 0x00000, 0x2000, CRC(d59812e1) SHA1(f3e7e2f09fba5964c92813cd652aa093fe3e4415) )
@@ -1221,8 +988,8 @@ ROM_START( fieldday )
ROM_LOAD( "a17_28.bin", 0x8000, 0x2000, CRC(1a4d1dae) SHA1(fbc3c55ad9f15ead432c136eec648fe22e523ea7) )
ROM_LOAD( "a17_29.bin", 0xa000, 0x2000, CRC(3c540007) SHA1(549e7ff260214c538913ff548dcb088987845911) )
- ROM_REGION( 0x0800, "cpu2", 0 ) /* 2k for the microcontroller */
- ROM_LOAD( "a17_14.bin", 0x0000, 0x0800, NO_DUMP )
+ ROM_REGION( 0x0800, "bmcu:mcu", 0 ) /* 2k for the microcontroller */
+ ROM_LOAD( "a17_14.bin", 0x0000, 0x0800, CRC(a686894d) SHA1(0578747a1869db98ee1962822491103f3f082cba) )
ROM_REGION( 0x8000, "gfx1", 0 )
ROM_LOAD( "a17_36.bin", 0x0000, 0x2000, CRC(e3dd51f7) SHA1(95a97ea925c5bc7bdc00887e6d17d817b36befc4) )
@@ -1259,8 +1026,8 @@ ROM_START( undoukai )
ROM_LOAD( "a17-12.38s", 0x8000, 0x2000, CRC(cb7e6dcd) SHA1(5286c6d340c1d465caebae5dd7e3d4ff8b7f8f5e) )
ROM_LOAD( "a17-13.39s", 0xa000, 0x2000, CRC(0a40930e) SHA1(8c4b9fa0aed67a3e269c2136ef81791fc8acd1da) )
- ROM_REGION( 0x0800, "cpu2", 0 ) /* 2k for the microcontroller */
- ROM_LOAD( "a17-14.41c", 0x0000, 0x0800, NO_DUMP )
+ ROM_REGION( 0x0800, "bmcu:mcu", 0 ) /* 2k for the microcontroller */
+ ROM_LOAD( "a17_14.bin", 0x0000, 0x0800, CRC(a686894d) SHA1(0578747a1869db98ee1962822491103f3f082cba) )
ROM_REGION( 0x8000, "gfx1", 0 )
ROM_LOAD( "a17-04.18v", 0x0000, 0x4000, CRC(84dabee2) SHA1(698f12ee4201665988248853dafbf4b16dfc6517) )
@@ -1277,6 +1044,7 @@ ROM_START( undoukai )
ROM_LOAD( "a17-18.23v", 0x0c00, 0x0400, CRC(3023a1da) SHA1(08ce4c6e99d04b358d66f0588852311d07183619) ) /* ??? */
ROM_END
-GAME( 1984, 40love, 0, 40love, 40love, fortyl_state, 40love, ROT0, "Taito Corporation", "Forty-Love", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS )
+GAME( 1984, 40love, 0, 40love, 40love, fortyl_state, 40love, ROT0, "Taito Corporation", "Forty-Love (World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS )
+GAME( 1984, 40lovej, 40love, 40love, 40love, fortyl_state, 40love, ROT0, "Taito Corporation", "Forty-Love (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING )
GAME( 1984, fieldday, 0, undoukai, undoukai, fortyl_state, undoukai, ROT0, "Taito Corporation", "Field Day", MACHINE_SUPPORTS_SAVE )
GAME( 1984, undoukai, fieldday, undoukai, undoukai, fortyl_state, undoukai, ROT0, "Taito Corporation", "The Undoukai (Japan)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/arkanoid.cpp b/src/mame/drivers/arkanoid.cpp
index 55ec33a571c..ed05fb67ac9 100644
--- a/src/mame/drivers/arkanoid.cpp
+++ b/src/mame/drivers/arkanoid.cpp
@@ -18,9 +18,7 @@
The 68705 code for this one was not available; Brad Oliver[?]
made it up from the bootleg A75-06.IC16 by changing the level
data pointer table.
- arkanoidj Japanese version. Final revision, MCU code not dumped.
- Someone[who?] made a placeholder MCU for this set based on the
- bootleg A75-06.IC16 by changing the level data pointer table.
+ arkanoidj Japanese version. Final revision, MCU code properly dumped.
arkanoidja Japanese version. A later revision with level selector.
The 68705 code for this one was not available; Brad Oliver[?]
made it up from the bootleg A75-06.IC16 by changing the level
@@ -1508,13 +1506,13 @@ MACHINE_CONFIG_END
A75 23 = MC68705P5 MCU code, v2.0 Japan w/level select (NOT DUMPED, PLACEHOLDER HACKED FROM BOOTLEG MCU)
A75 24 = Z80 code v2.1 1/2 Japan
A75 25 = Z80 code v2.1 2/2 Japan
- A75 26 = MC68705P5 MCU code, v2.1 Japan (NOT DUMPED, PLACEHOLDER HACKED FROM BOOTLEG MCU)
+ A75 26 = MC68705P5 MCU code, v2.1 Japan (verified. dumped from MCU)
A75 27 = Z80 code 1/2 Tournament
A75 28 = Z80 code 2/2 Tournament
A75 29 = GFX 1/3 Tournament
A75 30 = GFX 2/3 Tournament
A75 31 = GFX 3/3 Tournament
- A75 32 = MC68705P5 MCU code, Tournament (NOT DUMPED, PLACEHOLDER HACKED FROM BOOTLEG MCU)
+ A75 32 = MC68705P5 MCU code, Tournament (verified. dumped from MCU)
A75 33 = PROM red Tournament
A75 34 = PROM green Tournament
A75 35 = PROM blue Tournament
@@ -1612,7 +1610,7 @@ ROM_START( arkanoidj ) // V2.1 Japan
ROM_LOAD( "a75_25.ic16", 0x8000, 0x8000, CRC(c13b2038) SHA1(0b8197b48e57ffe9ccad0ebbc24891d1da7c9880) )
ROM_REGION( 0x0800, "mcu:mcu", 0 ) /* 2k for the microcontroller */
- ROM_LOAD( "a75-26.ic14", 0x0000, 0x0800, BAD_DUMP CRC(962960d4) SHA1(64b065a54b1658364db569ac06b717eb7bdd186e) ) /* Hand crafted based on the bootleg a75-06 chip, need the real data here */
+ ROM_LOAD( "a75-26.ic14", 0x0000, 0x0800, CRC(9c382c67) SHA1(c8518b726c40bf6ede494b38763dde4918309ef3) ) // verified authentic, dumped from actual MCU
ROM_REGION( 0x18000, "gfx1", 0 )
ROM_LOAD( "a75-03.ic64", 0x00000, 0x8000, CRC(038b74ba) SHA1(ac053cc4908b4075f918748b89570e07a0ba5116) )
@@ -1671,7 +1669,7 @@ ROM_START( arkatour ) // Tournament version
ROM_LOAD( "a75-28.ic16", 0x8000, 0x8000, CRC(326aca4d) SHA1(5a194b7a0361236d471b24905dc6434372f81252) )
ROM_REGION( 0x0800, "mcu:mcu", 0 ) /* 2k for the microcontroller */
- ROM_LOAD( "a75-32.ic14", 0x0000, 0x0800, BAD_DUMP CRC(d3249559) SHA1(b1542764450016614e9e03cedd6a2f1e59961789) ) /* Hand crafted based on the bootleg a75-06 chip, need the real data here */
+ ROM_LOAD( "a75-32.ic14", 0x0000, 0x0800, CRC(8c20d15c) SHA1(912996bf08de318e19dc420261f554a09dacd443) ) // verified authentic, dumped from actual MCU
ROM_REGION( 0x18000, "gfx1", 0 )
ROM_LOAD( "a75-29.ic64", 0x00000, 0x8000, CRC(5ddea3cf) SHA1(58f16515898b7cc2697bf7663a60d9ca0db6da95) )
diff --git a/src/mame/drivers/chaknpop.cpp b/src/mame/drivers/chaknpop.cpp
index 23267791a3c..a4bb1657bda 100644
--- a/src/mame/drivers/chaknpop.cpp
+++ b/src/mame/drivers/chaknpop.cpp
@@ -4,8 +4,8 @@
Chack'n Pop driver by BUT
-Note: The 68705 MCU isn't dumped, because it's protected, however we simulate
- it using data extracted with a trojan. See machine/chaknpop.c
+
+Modified by Hau, Chack'n
Chack'n Pop
Taito 1983
@@ -113,6 +113,7 @@ Notes:
#include "includes/chaknpop.h"
#include "cpu/z80/z80.h"
+#include "cpu/m6805/m6805.h"
#include "sound/ay8910.h"
#include "screen.h"
#include "speaker.h"
@@ -124,14 +125,28 @@ Notes:
***************************************************************************/
+READ8_MEMBER(chaknpop_state::mcu_status_r)
+{
+ // bit 0 = when 1, MCU is ready to receive data from main CPU
+ // bit 1 = when 1, MCU has sent data to the main CPU
+ return
+ ((CLEAR_LINE == m_bmcu->host_semaphore_r()) ? 0x01 : 0x00) |
+ ((CLEAR_LINE != m_bmcu->mcu_semaphore_r()) ? 0x02 : 0x00);
+}
+
WRITE8_MEMBER(chaknpop_state::unknown_port_1_w)
{
- //logerror("%s: write to unknow port 1: 0x%02x\n", machine().describe_context(), data);
+ //logerror("%s: write to unknown port 1: 0x%02x\n", machine().describe_context(), data);
}
WRITE8_MEMBER(chaknpop_state::unknown_port_2_w)
{
- //logerror("%s: write to unknow port 2: 0x%02x\n", machine().describe_context(), data);
+ //logerror("%s: write to unknown port 2: 0x%02x\n", machine().describe_context(), data);
+}
+
+WRITE8_MEMBER(chaknpop_state::unknown_port_3_w)
+{
+ //logerror("%s: write to unknown port 3: 0x%02x\n", machine().describe_context(), data);
}
WRITE8_MEMBER(chaknpop_state::coinlock_w)
@@ -148,10 +163,10 @@ WRITE8_MEMBER(chaknpop_state::coinlock_w)
static ADDRESS_MAP_START( chaknpop_map, AS_PROGRAM, 8, chaknpop_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
- AM_RANGE(0x8000, 0x87ff) AM_RAM AM_SHARE("mcu_ram")
- AM_RANGE(0x8800, 0x8800) AM_READWRITE(mcu_port_a_r, mcu_port_a_w)
- AM_RANGE(0x8801, 0x8801) AM_READWRITE(mcu_port_b_r, mcu_port_b_w)
- AM_RANGE(0x8802, 0x8802) AM_READWRITE(mcu_port_c_r, mcu_port_c_w)
+ AM_RANGE(0x8000, 0x87ff) AM_RAM
+ AM_RANGE(0x8800, 0x8800) AM_DEVREADWRITE("bmcu", taito68705_mcu_device, data_r, data_w)
+ AM_RANGE(0x8801, 0x8801) AM_READ(mcu_status_r)
+ AM_RANGE(0x8802, 0x8802) AM_WRITE(unknown_port_3_w)
AM_RANGE(0x8804, 0x8805) AM_DEVREADWRITE("ay1", ay8910_device, data_r, address_data_w)
AM_RANGE(0x8806, 0x8807) AM_DEVREADWRITE("ay2", ay8910_device, data_r, address_data_w)
AM_RANGE(0x8808, 0x8808) AM_READ_PORT("DSWC")
@@ -159,12 +174,12 @@ static ADDRESS_MAP_START( chaknpop_map, AS_PROGRAM, 8, chaknpop_state )
AM_RANGE(0x880a, 0x880a) AM_READ_PORT("SYSTEM")
AM_RANGE(0x880b, 0x880b) AM_READ_PORT("P2")
AM_RANGE(0x880c, 0x880c) AM_READWRITE(gfxmode_r, gfxmode_w)
- AM_RANGE(0x880d, 0x880d) AM_WRITE(coinlock_w) // coin lock out
+ AM_RANGE(0x880d, 0x880d) AM_WRITE(coinlock_w) // coin lock out
AM_RANGE(0x9000, 0x93ff) AM_RAM_WRITE(txram_w) AM_SHARE("tx_ram") // TX tilemap
AM_RANGE(0x9800, 0x983f) AM_RAM_WRITE(attrram_w) AM_SHARE("attr_ram") // Color attribute
AM_RANGE(0x9840, 0x98ff) AM_RAM AM_SHARE("spr_ram") // sprite
AM_RANGE(0xa000, 0xbfff) AM_ROM
- AM_RANGE(0xc000, 0xffff) AM_RAMBANK("bank1") // bitmap plane 1-4
+ AM_RANGE(0xc000, 0xffff) AM_RAMBANK("bank1") // bitmap plane 1-4
ADDRESS_MAP_END
/***************************************************************************
@@ -337,10 +352,6 @@ void chaknpop_state::machine_start()
save_item(NAME(m_gfxmode));
save_item(NAME(m_flip_x));
save_item(NAME(m_flip_y));
-
- save_item(NAME(m_mcu_seed));
- save_item(NAME(m_mcu_result));
- save_item(NAME(m_mcu_select));
}
void chaknpop_state::machine_reset()
@@ -348,19 +359,17 @@ void chaknpop_state::machine_reset()
m_gfxmode = 0;
m_flip_x = 0;
m_flip_y = 0;
-
- m_mcu_seed = MCU_INITIAL_SEED;
- m_mcu_result = 0;
- m_mcu_select = 0;
}
static MACHINE_CONFIG_START( chaknpop )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", Z80, XTAL_18MHz / 6) /* Verified on PCB */
+ MCFG_CPU_ADD("maincpu", Z80, XTAL_18MHz / 6) // Verified on PCB
MCFG_CPU_PROGRAM_MAP(chaknpop_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", chaknpop_state, irq0_line_hold)
+ MCFG_DEVICE_ADD("bmcu", TAITO68705_MCU, XTAL_18MHz / 6) // Verified on PCB
+ MCFG_QUANTUM_TIME(attotime::from_hz(6000)) // 100 CPU slices per frame - a high value to ensure proper synchronization of the CPUs
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@@ -378,7 +387,7 @@ static MACHINE_CONFIG_START( chaknpop )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
- MCFG_SOUND_ADD("ay1", AY8910, XTAL_18MHz / 12) /* Verified on PCB */
+ MCFG_SOUND_ADD("ay1", AY8910, XTAL_18MHz / 12) // Verified on PCB
MCFG_AY8910_PORT_A_READ_CB(IOPORT("DSWA"))
MCFG_AY8910_PORT_B_READ_CB(IOPORT("DSWB"))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15)
@@ -397,29 +406,29 @@ MACHINE_CONFIG_END
***************************************************************************/
ROM_START( chaknpop )
- ROM_REGION( 0x18000, "maincpu", 0 ) /* Main CPU */
+ ROM_REGION( 0x18000, "maincpu", 0 ) // Main CPU
ROM_LOAD( "ao4_01.ic28", 0x00000, 0x2000, CRC(386fe1c8) SHA1(cca24abfb8a7f439251e7936036475c694002561) )
ROM_LOAD( "ao4_02.ic27", 0x02000, 0x2000, CRC(5562a6a7) SHA1(0c5d81f9aaf858f88007a6bca7f83dc3ef59c5b5) )
ROM_LOAD( "ao4_03.ic26", 0x04000, 0x2000, CRC(3e2f0a9c) SHA1(f1cf87a4cb07f77104d4a4d369807dac522e052c) )
ROM_LOAD( "ao4_04.ic25", 0x06000, 0x2000, CRC(5209c7d4) SHA1(dcba785a697df55d84d65735de38365869a1da9d) )
ROM_LOAD( "ao4_05.ic3", 0x0a000, 0x2000, CRC(8720e024) SHA1(99e445c117d1501a245f9eb8d014abc4712b4963) )
- ROM_REGION( 0x0800, "mcu", 0 ) /* 2k for the Motorola MC68705P5 Micro-controller */
- ROM_LOAD( "ao4_06.ic23", 0x0000, 0x0800, NO_DUMP )
+ ROM_REGION( 0x0800, "bmcu:mcu", 0 ) // 2k for the Motorola MC68705P5 Micro-controller
+ ROM_LOAD( "ao4_06.ic23", 0x0000, 0x0800, CRC(9c78c24c) SHA1(f74c7f3ee106e5c45c907e590ec09614a2bc6751) )
- ROM_REGION( 0x4000, "gfx1", 0 ) /* Sprite */
+ ROM_REGION( 0x4000, "gfx1", 0 ) // Sprite
ROM_LOAD( "ao4_08.ic14", 0x0000, 0x2000, CRC(5575a021) SHA1(c2fad53fe6a12c19cec69d27c13fce6aea2502f2) )
ROM_LOAD( "ao4_07.ic15", 0x2000, 0x2000, CRC(ae687c18) SHA1(65b25263da88d30cbc0dad94511869596e5c975a) )
- ROM_REGION( 0x4000, "gfx2", 0 ) /* Text */
+ ROM_REGION( 0x4000, "gfx2", 0 ) // Text
ROM_LOAD( "ao4_09.ic98", 0x0000, 0x2000, CRC(757a723a) SHA1(62ab84d2aaa9bc1ea5aa9df8155aa3b5a1e93889) )
ROM_LOAD( "ao4_10.ic97", 0x2000, 0x2000, CRC(3e3fd608) SHA1(053a8fbdb35bf1c142349f78a63e8cd1adb41ef6) )
- ROM_REGION( 0x0800, "proms", 0 ) /* Palette */
+ ROM_REGION( 0x0800, "proms", 0 ) // Palette
ROM_LOAD( "ao4-11.ic96", 0x0000, 0x0400, CRC(9bf0e85f) SHA1(44f0a4712c99a715dec54060afb0b27dc48998b4) )
ROM_LOAD( "ao4-12.ic95", 0x0400, 0x0400, CRC(954ce8fc) SHA1(e187f9e2cb754264d149c2896ca949dea3bcf2eb) )
ROM_END
-/* ( YEAR NAME PARENT MACHINE INPUT STATE INIT MONITOR COMPANY FULLNAME FLAGS ) */
+// ( YEAR NAME PARENT MACHINE INPUT STATE INIT MONITOR COMPANY FULLNAME FLAGS )
GAME( 1983, chaknpop, 0, chaknpop, chaknpop, chaknpop_state, 0, ROT0, "Taito Corporation", "Chack'n Pop", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/coco12.cpp b/src/mame/drivers/coco12.cpp
index fb6b48812a3..87f80f807fd 100644
--- a/src/mame/drivers/coco12.cpp
+++ b/src/mame/drivers/coco12.cpp
@@ -148,43 +148,43 @@ INPUT_PORTS_END
static INPUT_PORTS_START( coco_keyboard )
PORT_START("row0")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_ASTERISK) PORT_CHAR('@')
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_A) PORT_CHAR('A')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_B) PORT_CHAR('B')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_C) PORT_CHAR('C')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_D) PORT_CHAR('D')
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_E) PORT_CHAR('E')
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_F) PORT_CHAR('F')
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_G) PORT_CHAR('G')
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('@')
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E')
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F')
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G')
PORT_START("row1")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_H) PORT_CHAR('H')
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_I) PORT_CHAR('I')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_J) PORT_CHAR('J')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_K) PORT_CHAR('K')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_L) PORT_CHAR('L')
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_M) PORT_CHAR('M')
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_N) PORT_CHAR('N')
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_O) PORT_CHAR('O')
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H')
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M')
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N')
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O')
PORT_START("row2")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_P) PORT_CHAR('P')
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_Q) PORT_CHAR('Q')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_R) PORT_CHAR('R')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_S) PORT_CHAR('S')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_T) PORT_CHAR('T')
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_U) PORT_CHAR('U')
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_V) PORT_CHAR('V')
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_W) PORT_CHAR('W')
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P')
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U')
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V')
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W')
PORT_START("row3")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_X) PORT_CHAR('X')
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_Y) PORT_CHAR('Y')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_Z) PORT_CHAR('Z')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_NAME("UP") PORT_CODE(KEYCODE_UP) PORT_CHAR('^')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_NAME("DOWN") PORT_CODE(KEYCODE_DOWN) PORT_CHAR(10)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_NAME("LEFT") PORT_CODE(KEYCODE_LEFT) PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8)
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_NAME("RIGHT") PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(9)
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X')
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_NAME("UP") PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP))
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_NAME("DOWN") PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN))
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_NAME("LEFT") PORT_CODE(KEYCODE_LEFT) PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(UCHAR_MAMEKEY(LEFT))
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_NAME("RIGHT") PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_NAME("SPACE") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
PORT_START("row4")
@@ -200,10 +200,10 @@ static INPUT_PORTS_START( coco_keyboard )
PORT_START("row5")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(')
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_COLON) PORT_CHAR(':') PORT_CHAR('*')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR(';') PORT_CHAR('+')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_MINUS) PORT_CHAR(':') PORT_CHAR('*')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR('+')
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<')
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('=')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('-') PORT_CHAR('=')
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>')
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco12_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?')
diff --git a/src/mame/drivers/coco3.cpp b/src/mame/drivers/coco3.cpp
index 20e3e4fca25..9af64d7a6bf 100644
--- a/src/mame/drivers/coco3.cpp
+++ b/src/mame/drivers/coco3.cpp
@@ -78,43 +78,43 @@ ADDRESS_MAP_END
static INPUT_PORTS_START( coco3_keyboard )
PORT_START("row0")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_ASTERISK) PORT_CHAR('@')
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_A) PORT_CHAR('A')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_B) PORT_CHAR('B')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_C) PORT_CHAR('C')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_D) PORT_CHAR('D')
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_E) PORT_CHAR('E')
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_F) PORT_CHAR('F')
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_G) PORT_CHAR('G')
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('@')
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E')
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F')
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G')
PORT_START("row1")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_H) PORT_CHAR('H')
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_I) PORT_CHAR('I')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_J) PORT_CHAR('J')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_K) PORT_CHAR('K')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_L) PORT_CHAR('L')
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_M) PORT_CHAR('M')
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_N) PORT_CHAR('N')
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_O) PORT_CHAR('O')
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H')
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M')
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N')
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O')
PORT_START("row2")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_P) PORT_CHAR('P')
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_Q) PORT_CHAR('Q')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_R) PORT_CHAR('R')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_S) PORT_CHAR('S')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_T) PORT_CHAR('T')
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_U) PORT_CHAR('U')
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_V) PORT_CHAR('V')
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_W) PORT_CHAR('W')
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P')
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U')
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V')
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W')
PORT_START("row3")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_X) PORT_CHAR('X')
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_Y) PORT_CHAR('Y')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_Z) PORT_CHAR('Z')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_NAME("UP") PORT_CODE(KEYCODE_UP) PORT_CHAR('^')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_NAME("DOWN") PORT_CODE(KEYCODE_DOWN) PORT_CHAR(10)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_NAME("LEFT") PORT_CODE(KEYCODE_LEFT) PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8)
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_NAME("RIGHT") PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(9)
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X')
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_NAME("UP") PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP))
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_NAME("DOWN") PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN))
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_NAME("LEFT") PORT_CODE(KEYCODE_LEFT) PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(UCHAR_MAMEKEY(LEFT))
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_NAME("RIGHT") PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_NAME("SPACE") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
PORT_START("row4")
@@ -130,10 +130,10 @@ static INPUT_PORTS_START( coco3_keyboard )
PORT_START("row5")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(')
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_COLON) PORT_CHAR(':') PORT_CHAR('*')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR(';') PORT_CHAR('+')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_MINUS) PORT_CHAR(':') PORT_CHAR('*')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR('+')
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<')
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('=') PORT_CHAR('_')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('-') PORT_CHAR('=')
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>')
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?')
@@ -141,8 +141,8 @@ static INPUT_PORTS_START( coco3_keyboard )
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_NAME("ENTER") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_NAME("CLEAR") PORT_CODE(KEYCODE_HOME) PORT_CHAR(12)
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_NAME("BREAK") PORT_CODE(KEYCODE_END) PORT_CODE(KEYCODE_ESC) PORT_CHAR(27)
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_NAME("ALT") PORT_CODE(KEYCODE_LALT)
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_NAME("CTRL") PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_SHIFT_2)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_NAME("ALT") PORT_CODE(KEYCODE_LALT) PORT_CHAR(UCHAR_MAMEKEY(LALT))
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_NAME("CTRL") PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL))
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1))
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2))
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, coco3_state, coco_state::keyboard_changed, nullptr) PORT_NAME("SHIFT") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
diff --git a/src/mame/drivers/cubo.cpp b/src/mame/drivers/cubo.cpp
index f13fa789170..a5f10ffcbfe 100644
--- a/src/mame/drivers/cubo.cpp
+++ b/src/mame/drivers/cubo.cpp
@@ -1369,8 +1369,8 @@ INPUT_PORTS_END
GAME( 1993, cubo, 0, cubo, cubo, cubo_state, cubo, ROT0, "Commodore", "Cubo BIOS", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_IS_BIOS_ROOT )
GAME( 1995, cndypuzl, cubo, cubo, cndypuzl, cubo_state, cndypuzl, ROT0, "CD Express", "Candy Puzzle (v1.0)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
GAME( 1995, haremchl, cubo, cubo, haremchl, cubo_state, haremchl, ROT0, "CD Express", "Harem Challenge", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
-GAME( 1995, lsrquiz, cubo, cubo, lsrquiz, cubo_state, lsrquiz, ROT0, "CD Express", "Laser Quiz Italy", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) /* no player 2 inputs (ingame) */
-GAME( 1995, lsrquiz2, cubo, cubo, lsrquiz2, cubo_state, lsrquiz2, ROT0, "CD Express", "Laser Quiz 2 Italy (v1.0)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
+GAME( 1995, lsrquiz, cubo, cubo, lsrquiz, cubo_state, lsrquiz, ROT0, "CD Express", "Laser Quiz Italy", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING ) /* no player 2 inputs (ingame), wrong pitch for most gfxs */
+GAME( 1995, lsrquiz2, cubo, cubo, lsrquiz2, cubo_state, lsrquiz2, ROT0, "CD Express", "Laser Quiz 2 Italy (v1.0)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING ) /* wrong pitch for some gfxs, crashes during gameplay */
GAME( 1995, lasstixx, cubo, cubo, lasstixx, cubo_state, lasstixx, ROT0, "CD Express", "Laser Strixx 2", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
GAME( 1995, mgnumber, cubo, cubo, mgnumber, cubo_state, mgnumber, ROT0, "CD Express", "Magic Number", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
GAME( 1996, mgprem11, cubo, cubo, mgprem11, cubo_state, mgprem11, ROT0, "CD Express", "Magic Premium (v1.1)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
diff --git a/src/mame/drivers/dccons.cpp b/src/mame/drivers/dccons.cpp
index eb681df73ad..f895fbba371 100644
--- a/src/mame/drivers/dccons.cpp
+++ b/src/mame/drivers/dccons.cpp
@@ -680,6 +680,16 @@ ROM_START( dcjp )
ROM_LOAD( "dcjp_ntsc.bin", 0x000000, 0x020000, CRC(f77c15a1) SHA1(66fd8ee40b207ce03a5fd6abbc00d27bbd5f92bd) ) // from VA0 with 1.004 BIOS
ROM_END
+// unauthorised portable modification
+ROM_START( dctream )
+ ROM_REGION(0x200000, "maincpu", 0)
+ // multi-region hack of mpr-21931/1.01d BIOS, hardware checksum protection passes OK due to algorithm weakness
+ ROM_LOAD( "dc_bios.bin", 0x000000, 0x200000, CRC(cff88d0d) SHA1(e3f84705b183ffded0a349ac7f2ab00be2ab74ee) ) // dumped in software way, ROM label unknown
+
+ ROM_REGION(0x020000, "dcflash", 0)
+ ROM_LOAD( "dc_flash.bin", 0x000000, 0x020000, CRC(727ea7ec) SHA1(b027913a8c00d4edaef83c440dd6c59090b387f2) )
+ROM_END
+
// normally, with DIP switch 4 off, HKT-100/110/120 AKA "Katana Set 5.xx", will be booted from flash ROM IC507 (first 2 dumps below)
// otherwise it boots from EPROM which contain system checker software (last dump)
ROM_START( dcdev )
@@ -704,4 +714,5 @@ ROM_END
CONS( 1999, dc, dcjp, 0, dc, dc, dc_cons_state, dcus, "Sega", "Dreamcast (USA, NTSC)", MACHINE_NOT_WORKING )
CONS( 1998, dcjp, 0, 0, dc, dc, dc_cons_state, dcjp, "Sega", "Dreamcast (Japan, NTSC)", MACHINE_NOT_WORKING )
CONS( 1999, dceu, dcjp, 0, dc, dc, dc_cons_state, dcus, "Sega", "Dreamcast (Europe, PAL)", MACHINE_NOT_WORKING )
+CONS( 200?, dctream,dcjp, 0, dc, dc, dc_cons_state, dcus,"unknown", "Treamcast", MACHINE_NOT_WORKING )
CONS( 1998, dcdev, 0, 0, dc, dc, dc_cons_state, dc, "Sega", "HKT-0120 Sega Dreamcast Development Box", MACHINE_NOT_WORKING )
diff --git a/src/mame/drivers/f1gp.cpp b/src/mame/drivers/f1gp.cpp
index a99ea5b8d1f..d52c8c6f779 100644
--- a/src/mame/drivers/f1gp.cpp
+++ b/src/mame/drivers/f1gp.cpp
@@ -405,6 +405,7 @@ static MACHINE_CONFIG_START( f1gp )
MCFG_MACHINE_RESET_OVERRIDE(f1gp_state,f1gp)
MCFG_DEVICE_ADD("acia", ACIA6850, 0)
+ MCFG_ACIA6850_IRQ_HANDLER(INPUTLINE("maincpu", M68K_IRQ_3))
//MCFG_ACIA6850_TXD_HANDLER(DEVWRITELINE("link", rs232_port_device, write_txd))
//MCFG_ACIA6850_RTS_HANDLER(DEVWRITELINE("link", rs232_port_device, write_rts))
@@ -474,6 +475,7 @@ static MACHINE_CONFIG_START( f1gpb )
MCFG_MACHINE_RESET_OVERRIDE(f1gp_state,f1gp)
MCFG_DEVICE_ADD("acia", ACIA6850, 0)
+ MCFG_ACIA6850_IRQ_HANDLER(INPUTLINE("maincpu", M68K_IRQ_3))
//MCFG_ACIA6850_TXD_HANDLER(DEVWRITELINE("link", rs232_port_device, write_txd))
//MCFG_ACIA6850_RTS_HANDLER(DEVWRITELINE("link", rs232_port_device, write_rts))
diff --git a/src/mame/drivers/flstory.cpp b/src/mame/drivers/flstory.cpp
index 6ae78cd3d74..08ce305e488 100644
--- a/src/mame/drivers/flstory.cpp
+++ b/src/mame/drivers/flstory.cpp
@@ -1100,7 +1100,7 @@ ROM_START( flstory )
ROM_LOAD( "snd.23", 0x2000, 0x2000, CRC(25e7fd9d) SHA1(b9237459e3d8acf8502a693914e50714a37d515e) )
ROM_REGION( 0x0800, "bmcu:mcu", 0 ) /* 2k for the microcontroller */
- ROM_LOAD( "a45.mcu", 0x0000, 0x0800, CRC(5378253c) SHA1(e1ae1ab01e470b896c1d74ad4088928602a21a1b) )
+ ROM_LOAD( "a45.mcu", 0x0000, 0x0800, CRC(5378253c) SHA1(e1ae1ab01e470b896c1d74ad4088928602a21a1b) ) // bootleg MCU data
ROM_REGION( 0x20000, "gfx1", ROMREGION_INVERT )
ROM_LOAD( "vid-a45.18", 0x00000, 0x4000, CRC(6f08f69e) SHA1(8f1b7e63a38f855cf26d57aed678da7cf1378fdf) )
@@ -1124,7 +1124,7 @@ ROM_START( flstoryj )
ROM_LOAD( "a45_13.9", 0x2000, 0x2000, CRC(451f92f9) SHA1(f4196e6d3420983b74001303936d086a48b10827) )
ROM_REGION( 0x0800, "bmcu:mcu", 0 ) /* 2k for the microcontroller */
- ROM_LOAD( "a45.mcu", 0x0000, 0x0800, CRC(5378253c) SHA1(e1ae1ab01e470b896c1d74ad4088928602a21a1b) )
+ ROM_LOAD( "a45.mcu", 0x0000, 0x0800, CRC(5378253c) SHA1(e1ae1ab01e470b896c1d74ad4088928602a21a1b) ) // bootleg MCU data
ROM_REGION( 0x20000, "gfx1", ROMREGION_INVERT )
ROM_LOAD( "vid-a45.18", 0x00000, 0x4000, CRC(6f08f69e) SHA1(8f1b7e63a38f855cf26d57aed678da7cf1378fdf) )
@@ -1156,7 +1156,7 @@ ROM_START( onna34ro )
ROM_LOAD( "a52-16.38s", 0x8000, 0x2000, CRC(ccf42aee) SHA1(a6eb01c5384724999631b55700dade430b71ca95) )
ROM_REGION( 0x0800, "bmcu:mcu", 0 ) /* 2k for the microcontroller */
- ROM_LOAD( "a52_17.54c", 0x0000, 0x0800, CRC(0ab2612e) SHA1(2bc74e9ef5b9dd51d733dc62902d92c269f7d6a7) )
+ ROM_LOAD( "a52_17.54c", 0x0000, 0x0800, CRC(0ab2612e) SHA1(2bc74e9ef5b9dd51d733dc62902d92c269f7d6a7) )
ROM_REGION( 0x20000, "gfx1", ROMREGION_INVERT )
ROM_LOAD( "a52-04.11v", 0x00000, 0x4000, CRC(5b126294) SHA1(fc31e062e665f7313f923e84d6497716f0658ac0) )
@@ -1355,17 +1355,17 @@ Dumped by Corrado Tomaselli on 9/12/2010
ROM_START( rumba )
ROM_REGION( 0x10000, "maincpu", 0 ) /* 64k for the first CPU */
- ROM_LOAD( "a23_01-1.bin", 0x0000, 0x4000, CRC(4bea6e18) SHA1(b9a85e65105773b5f93dcc5fc1e7c588b2d25056) )
- ROM_LOAD( "a23_02-1.bin", 0x4000, 0x4000, CRC(08f98c6f) SHA1(f2a850b1138cfefab6ff1d1adcda9e084f52e9c2) )
- ROM_LOAD( "a23_03-1.bin", 0x8000, 0x4000, CRC(ab595427) SHA1(1ff51740e1c7915e1f79a55801d11c8fdce764c8) )
+ ROM_LOAD( "a23_01-1.bin", 0x0000, 0x4000, CRC(4bea6e18) SHA1(b9a85e65105773b5f93dcc5fc1e7c588b2d25056) )
+ ROM_LOAD( "a23_02-1.bin", 0x4000, 0x4000, CRC(08f98c6f) SHA1(f2a850b1138cfefab6ff1d1adcda9e084f52e9c2) )
+ ROM_LOAD( "a23_03-1.bin", 0x8000, 0x4000, CRC(ab595427) SHA1(1ff51740e1c7915e1f79a55801d11c8fdce764c8) )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for the second CPU */
- ROM_LOAD( "a23_08-1.bin", 0x0000, 0x2000, CRC(a18eae00) SHA1(6ac1ad07bb5a97c6edaaf0e1fb842e1741f4cf1e) )
- ROM_LOAD( "a23_09.bin", 0x2000, 0x2000, CRC(d0a101d3) SHA1(c92bb1ce67bec394fd8ce303d9e61eac12493b5d) )
- ROM_LOAD( "a23_10.bin", 0x4000, 0x2000, CRC(f9447bd4) SHA1(68c02249ca0e5b923cddb4bff8d090963b9c78e4) )
+ ROM_LOAD( "a23_08-1.bin", 0x0000, 0x2000, CRC(a18eae00) SHA1(6ac1ad07bb5a97c6edaaf0e1fb842e1741f4cf1e) )
+ ROM_LOAD( "a23_09.bin", 0x2000, 0x2000, CRC(d0a101d3) SHA1(c92bb1ce67bec394fd8ce303d9e61eac12493b5d) )
+ ROM_LOAD( "a23_10.bin", 0x4000, 0x2000, CRC(f9447bd4) SHA1(68c02249ca0e5b923cddb4bff8d090963b9c78e4) )
ROM_REGION( 0x0800, "bmcu:mcu", 0 ) /* 2k for the microcontroller */
- ROM_LOAD( "a23_11.bin", 0x0000, 0x0800, CRC(fddc99ce) SHA1(a9c7f76752ce74a780ca74004106c969d78ba931) )
+ ROM_LOAD( "a23_11.bin", 0x0000, 0x0800, CRC(fddc99ce) SHA1(a9c7f76752ce74a780ca74004106c969d78ba931) )
ROM_REGION( 0x8000, "gfx1", ROMREGION_INVERT )
ROM_LOAD( "a23_07.bin", 0x02000, 0x2000, CRC(c98fbea6) SHA1(edd1e0b2551f726018ca6e0b2cf629046a482711) )
@@ -1375,9 +1375,9 @@ ROM_START( rumba )
ROM_END
-GAME( 1985, flstory, 0, flstory, flstory, flstory_state, 0, ROT180, "Taito", "The FairyLand Story", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
-GAME( 1985, flstoryj, flstory, flstory, flstory, flstory_state, 0, ROT180, "Taito", "The FairyLand Story (Japan)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
-GAME( 1985, onna34ro, 0, onna34ro_mcu, onna34ro, flstory_state, 0, ROT0, "Taito", "Onna Sanshirou - Typhoon Gal", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
+GAME( 1985, flstory, 0, flstory, flstory, flstory_state, 0, ROT180, "Taito", "The FairyLand Story", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
+GAME( 1985, flstoryj, flstory, flstory, flstory, flstory_state, 0, ROT180, "Taito", "The FairyLand Story (Japan)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
+GAME( 1985, onna34ro, 0, onna34ro_mcu, onna34ro, flstory_state, 0, ROT0, "Taito", "Onna Sanshirou - Typhoon Gal", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1985, onna34roa, onna34ro, onna34ro, onna34ro, flstory_state, 0, ROT0, "Taito", "Onna Sanshirou - Typhoon Gal (bootleg)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
-GAME( 1984, victnine, 0, victnine, victnine, flstory_state, 0, ROT0, "Taito", "Victorious Nine", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // MCU still simulated
-GAME( 1984, rumba, 0, rumba, rumba, flstory_state, 0, ROT270, "Taito", "Rumba Lumber", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
+GAME( 1984, victnine, 0, victnine, victnine, flstory_state, 0, ROT0, "Taito", "Victorious Nine", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // MCU still simulated
+GAME( 1984, rumba, 0, rumba, rumba, flstory_state, 0, ROT270, "Taito", "Rumba Lumber", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/fromanc2.cpp b/src/mame/drivers/fromanc2.cpp
index 8f83360fa03..1783fed411d 100644
--- a/src/mame/drivers/fromanc2.cpp
+++ b/src/mame/drivers/fromanc2.cpp
@@ -642,6 +642,9 @@ static MACHINE_CONFIG_START( fromanc4 )
MCFG_EEPROM_SERIAL_93C46_ADD("eeprom")
MCFG_DEVICE_ADD("uart", NS16550, 2000000) // actual type is TL16C550CFN; clock unknown
+ MCFG_INS8250_OUT_INT_CB(INPUTLINE("maincpu", M68K_IRQ_2))
+ //MCFG_INS8250_OUT_TX_CB(DEVWRITELINE("link", rs232_port_device, write_txd))
+ //MCFG_INS8250_OUT_RTS_CB(DEVWRITELINE("link", rs232_port_device, write_rts))
/* video hardware */
MCFG_GFXDECODE_ADD("gfxdecode", "lpalette", fromancr)
diff --git a/src/mame/drivers/renegade.cpp b/src/mame/drivers/renegade.cpp
index e573c386a94..f41f2be449e 100644
--- a/src/mame/drivers/renegade.cpp
+++ b/src/mame/drivers/renegade.cpp
@@ -19,7 +19,6 @@ IRQ is used to handle coin inputs
Known issues:
- coin counter isn't working properly (interrupt related?)
-- kuniokun MCU internal ROM needs to be dumped
Memory Map (Preliminary):
@@ -176,25 +175,6 @@ WRITE8_MEMBER(renegade_state::sound_w)
m_audiocpu->set_input_line(M6809_IRQ_LINE, HOLD_LINE);
}
-/**************************************************************************/
-/* MCU Simulation
-**
-** Renegade and Nekketsu Kouha Kunio Kun MCU behaviors are identical,
-** except for the initial MCU status byte, and command encryption table
-** (and enemy health??)
-*/
-
-
-static const uint8_t kuniokun_xor_table[0x2a] =
-{
- 0x48, 0x8a, 0x48, 0xa5, 0x01, 0x48, 0xa9, 0x00,
- 0x85, 0x01, 0xa2, 0x10, 0x26, 0x10, 0x26, 0x11,
- 0x26, 0x01, 0xa5, 0x01, 0xc5, 0x00, 0x90, 0x04,
- 0xe5, 0x00, 0x85, 0x01, 0x26, 0x10, 0x26, 0x11,
- 0xca, 0xd0, 0xed, 0x68, 0x85, 0x01, 0x68, 0xaa,
- 0x68, 0x60
-};
-
void renegade_state::machine_start()
{
m_rombank->configure_entries(0, 2, memregion("maincpu")->base(), 0x4000);
@@ -204,276 +184,22 @@ void renegade_state::machine_start()
save_item(NAME(m_adpcm_playing));
}
-DRIVER_INIT_MEMBER(renegade_state, renegade)
-{
- m_mcu_sim = false;
-}
-
-DRIVER_INIT_MEMBER(renegade_state, kuniokun)
-{
- m_mcu_sim = true;
- m_mcu_checksum = 0x85;
- m_mcu_encrypt_table = kuniokun_xor_table;
- m_mcu_encrypt_table_len = 0x2a;
-
- subdevice("mcu:mcu")->execute().suspend(SUSPEND_REASON_DISABLE, 1);
-
- save_item(NAME(m_mcu_buffer));
- save_item(NAME(m_mcu_input_size));
- save_item(NAME(m_mcu_output_byte));
- save_item(NAME(m_mcu_key));
-}
-
-DRIVER_INIT_MEMBER(renegade_state, kuniokunb)
-{
- address_space &space = m_maincpu->space(AS_PROGRAM);
-
- /* Remove the MCU handlers */
- space.unmap_readwrite(0x3804, 0x3804);
- space.unmap_read(0x3805, 0x3805);
-}
-
/***************************************************************************
- MCU simulation
+ MCU interface
***************************************************************************/
READ8_MEMBER(renegade_state::mcu_reset_r)
{
- if (m_mcu_sim == true)
- {
- m_mcu_key = -1;
- m_mcu_input_size = 0;
- m_mcu_output_byte = 0;
- }
- else
- {
- m_mcu->reset_w(PULSE_LINE);
- }
+ m_mcu->reset_w(PULSE_LINE);
return 0;
}
-WRITE8_MEMBER(renegade_state::mcu_w)
-{
- if (m_mcu_sim == true)
- {
- m_mcu_output_byte = 0;
-
- if (m_mcu_key < 0)
- {
- m_mcu_key = 0;
- m_mcu_input_size = 1;
- m_mcu_buffer[0] = data;
- }
- else
- {
- data ^= m_mcu_encrypt_table[m_mcu_key++];
- if (m_mcu_key == m_mcu_encrypt_table_len)
- m_mcu_key = 0;
- if (m_mcu_input_size < MCU_BUFFER_MAX)
- m_mcu_buffer[m_mcu_input_size++] = data;
- }
- }
- else
- {
- m_mcu->data_w(space, offset, data, mem_mask);
- }
-}
-
-void renegade_state::mcu_process_command()
-{
- m_mcu_input_size = 0;
- m_mcu_output_byte = 0;
-
- switch (m_mcu_buffer[0])
- {
- /* 0x0d: stop MCU when ROM check fails */
-
- case 0x10:
- m_mcu_buffer[0] = m_mcu_checksum;
- break;
-
- case 0x26: /* sound code -> sound command */
- {
- int sound_code = m_mcu_buffer[1];
- static const uint8_t sound_command_table[256] =
- {
- 0xa0, 0xa1, 0xa2, 0x80, 0x81, 0x82, 0x83, 0x84,
- 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c,
- 0x8d, 0x8e, 0x8f, 0x97, 0x96, 0x9b, 0x9a, 0x95,
- 0x9e, 0x98, 0x90, 0x93, 0x9d, 0x9c, 0xa3, 0x91,
- 0x9f, 0x99, 0xa6, 0xae, 0x94, 0xa5, 0xa4, 0xa7,
- 0x92, 0xab, 0xac, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4,
- 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x20,
- 0x50, 0x50, 0x90, 0x30, 0x30, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x80, 0xa0, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x20, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x90,
- 0x30, 0x30, 0x30, 0xb0, 0xb0, 0xb0, 0xb0, 0xf0,
- 0xf0, 0xf0, 0xf0, 0xd0, 0xf0, 0x00, 0x00, 0x00,
- 0x00, 0x10, 0x10, 0x50, 0x30, 0xb0, 0xb0, 0xf0,
- 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
- 0x10, 0x10, 0x30, 0x30, 0x20, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f,
- 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
- 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x8f, 0x8f, 0x0f,
- 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
- 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff,
- 0xef, 0xef, 0xcf, 0x8f, 0x8f, 0x0f, 0x0f, 0x0f
- };
- m_mcu_buffer[0] = 1;
- m_mcu_buffer[1] = sound_command_table[sound_code];
- }
- break;
-
- case 0x33: /* joy bits -> joy dir */
- {
- int joy_bits = m_mcu_buffer[2];
- static const uint8_t joy_table[0x10] =
- {
- 0, 3, 7, 0, 1, 2, 8, 0, 5, 4, 6, 0, 0, 0, 0, 0
- };
- m_mcu_buffer[0] = 1;
- m_mcu_buffer[1] = joy_table[joy_bits & 0xf];
- }
- break;
-
- case 0x44: /* 0x44, 0xff, DSW2, stage# -> difficulty */
- {
- int difficulty = m_mcu_buffer[2] & 0x3;
- int stage = m_mcu_buffer[3];
- static const uint8_t difficulty_table[4] = { 5, 3, 1, 2 };
- int result = difficulty_table[difficulty];
-
- if (stage == 0)
- result--;
- result += stage / 4;
- if (result > 0x21)
- result += 0xc0;
-
- m_mcu_buffer[0] = 1;
- m_mcu_buffer[1] = result;
- }
- break;
-
- case 0x55: /* 0x55, 0x00, 0x00, 0x00, DSW2 -> timer */
- {
- int difficulty = m_mcu_buffer[4] & 0x3;
- static const uint16_t table[4] =
- {
- 0x4001, 0x5001, 0x1502, 0x0002
- };
-
- m_mcu_buffer[0] = 3;
- m_mcu_buffer[2] = table[difficulty] >> 8;
- m_mcu_buffer[3] = table[difficulty] & 0xff;
- }
- break;
-
- case 0x41: /* 0x41, 0x00, 0x00, stage# -> ? */
- {
-// int stage = m_mcu_buffer[3];
- m_mcu_buffer[0] = 2;
- m_mcu_buffer[1] = 0x20;
- m_mcu_buffer[2] = 0x78;
- }
- break;
-
- case 0x40: /* 0x40, 0x00, difficulty, enemy_type -> enemy health */
- {
- int difficulty = m_mcu_buffer[2];
- int enemy_type = m_mcu_buffer[3];
- int health;
-
- if (enemy_type <= 4)
- {
- health = 0x18 + difficulty * 2;
- if (health > 0x40)
- health = 0x40; /* max 0x40 */
- }
- else
- {
- health = 0x06 + difficulty * 2;
- if (health > 0x20)
- health = 0x20; /* max 0x20 */
- }
- logerror("e_type:0x%02x diff:0x%02x -> 0x%02x\n", enemy_type, difficulty, health);
- m_mcu_buffer[0] = 1;
- m_mcu_buffer[1] = health;
- }
- break;
-
- case 0x42: /* 0x42, 0x00, stage#, character# -> enemy_type */
- {
- int stage = m_mcu_buffer[2] & 0x3;
- int indx = m_mcu_buffer[3];
- int enemy_type=0;
-
- static const int table[] =
- {
- 0x01, 0x06, 0x06, 0x05, 0x05, 0x05, 0x05, 0x05, /* for stage#: 0 */
- 0x02, 0x0a, 0x0a, 0x09, 0x09, 0x09, 0x09, /* for stage#: 1 */
- 0x03, 0x0e, 0x0e, 0x0e, 0x0d, 0x0d, 0x0d, 0x0d, /* for stage#: 2 */
- 0x04, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, /* for stage#: 3 */
- 0x3d, 0x23, 0x26, 0x0a, 0xb6, 0x11, 0xa4, 0x0f, /* strange data (maybe out of table) */
- };
- int offset = stage * 8 + indx;
-
- if (stage >= 2)
- offset--;
-
- enemy_type = table[offset];
-
- m_mcu_buffer[0] = 1;
- m_mcu_buffer[1] = enemy_type;
- }
- break;
-
- default:
- logerror("unknown MCU command: %02x\n", m_mcu_buffer[0]);
- break;
- }
-}
-
-READ8_MEMBER(renegade_state::mcu_r)
-{
- if (m_mcu_sim == true)
- {
- int result = 1;
-
- if (m_mcu_input_size)
- mcu_process_command();
-
- if (m_mcu_output_byte < MCU_BUFFER_MAX)
- result = m_mcu_buffer[m_mcu_output_byte++];
-
- return result;
- }
- else
- {
- return m_mcu->data_r(space, offset, mem_mask);
- }
-}
-
CUSTOM_INPUT_MEMBER(renegade_state::mcu_status_r)
{
- if (m_mcu_sim == true)
- {
- return 0x01;
- }
- else if (m_mcu)
+ if (m_mcu.found())
{
return
((CLEAR_LINE == m_mcu->host_semaphore_r()) ? 0x01 : 0x00) |
@@ -510,7 +236,7 @@ WRITE8_MEMBER(renegade_state::coincounter_w)
/********************************************************************************************/
-static ADDRESS_MAP_START( renegade_map, AS_PROGRAM, 8, renegade_state )
+static ADDRESS_MAP_START( renegade_nomcu_map, AS_PROGRAM, 8, renegade_state )
AM_RANGE(0x0000, 0x17ff) AM_RAM
AM_RANGE(0x1800, 0x1fff) AM_RAM_WRITE(fg_videoram_w) AM_SHARE("fg_videoram")
AM_RANGE(0x2000, 0x27ff) AM_RAM AM_SHARE("spriteram")
@@ -521,14 +247,19 @@ static ADDRESS_MAP_START( renegade_map, AS_PROGRAM, 8, renegade_state )
AM_RANGE(0x3801, 0x3801) AM_READ_PORT("IN1") AM_WRITE(scroll_msb_w) /* Player#2 controls, coin triggers */
AM_RANGE(0x3802, 0x3802) AM_READ_PORT("DSW2") AM_WRITE(sound_w) /* DIP2 various IO ports */
AM_RANGE(0x3803, 0x3803) AM_READ_PORT("DSW1") AM_WRITE(flipscreen_w) /* DIP1 */
- AM_RANGE(0x3804, 0x3804) AM_READWRITE(mcu_r, mcu_w)
- AM_RANGE(0x3805, 0x3805) AM_READWRITE(mcu_reset_r, bankswitch_w)
+ AM_RANGE(0x3805, 0x3805) AM_READNOP AM_WRITE(bankswitch_w)
AM_RANGE(0x3806, 0x3806) AM_WRITENOP // ?? watchdog
AM_RANGE(0x3807, 0x3807) AM_WRITE(coincounter_w)
AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("rombank")
AM_RANGE(0x8000, 0xffff) AM_ROM
ADDRESS_MAP_END
+static ADDRESS_MAP_START( renegade_map, AS_PROGRAM, 8, renegade_state )
+ AM_RANGE(0x3804, 0x3804) AM_DEVREADWRITE("mcu", taito68705_mcu_device, data_r, data_w)
+ AM_RANGE(0x3805, 0x3805) AM_READ(mcu_reset_r)
+ AM_IMPORT_FROM(renegade_nomcu_map)
+ADDRESS_MAP_END
+
static ADDRESS_MAP_START( renegade_sound_map, AS_PROGRAM, 8, renegade_state )
AM_RANGE(0x0000, 0x0fff) AM_RAM
AM_RANGE(0x1000, 0x1000) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
@@ -780,6 +511,9 @@ MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( kuniokunb, renegade )
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_CPU_PROGRAM_MAP(renegade_nomcu_map)
+
MCFG_DEVICE_REMOVE("mcu")
MACHINE_CONFIG_END
@@ -834,8 +568,8 @@ ROM_START( kuniokun )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "n0-5.bin", 0x8000, 0x8000, CRC(3587de3b) SHA1(f82e758254b21eb0c5a02469c72adb86d9577065) )
- ROM_REGION( 0x0800, "mcu:mcu", 0 )
- ROM_LOAD( "mcu", 0x0000, 0x0800, NO_DUMP )
+ ROM_REGION( 0x0800, "mcu:mcu", 0 ) // MC68705P3
+ ROM_LOAD( "nz-0.bin", 0x0000, 0x0800, CRC(650bb5f0) SHA1(56a9679e3265de244ce2191a81b709992f012111) )
ROM_REGION( 0x08000, "chars", 0 )
ROM_LOAD( "ta18-25.bin", 0x0000, 0x8000, CRC(9bd2bea3) SHA1(fa79c9d4c71c1dbbf0e14cb8d6870f1f94b9af88) )
@@ -909,6 +643,6 @@ ROM_END
-GAME( 1986, renegade, 0, renegade, renegade, renegade_state, renegade, ROT0, "Technos Japan (Taito America license)", "Renegade (US)", MACHINE_SUPPORTS_SAVE )
-GAME( 1986, kuniokun, renegade, renegade, renegade, renegade_state, kuniokun, ROT0, "Technos Japan", "Nekketsu Kouha Kunio-kun (Japan)", MACHINE_SUPPORTS_SAVE )
-GAME( 1986, kuniokunb, renegade, kuniokunb, renegade, renegade_state, kuniokunb, ROT0, "bootleg", "Nekketsu Kouha Kunio-kun (Japan bootleg)", MACHINE_SUPPORTS_SAVE )
+GAME( 1986, renegade, 0, renegade, renegade, renegade_state, 0, ROT0, "Technos Japan (Taito America license)", "Renegade (US)", MACHINE_SUPPORTS_SAVE )
+GAME( 1986, kuniokun, renegade, renegade, renegade, renegade_state, 0, ROT0, "Technos Japan", "Nekketsu Kouha Kunio-kun (Japan)", MACHINE_SUPPORTS_SAVE )
+GAME( 1986, kuniokunb, renegade, kuniokunb, renegade, renegade_state, 0, ROT0, "bootleg", "Nekketsu Kouha Kunio-kun (Japan bootleg)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/royalmah.cpp b/src/mame/drivers/royalmah.cpp
index a9f44039b88..462754c8c7a 100644
--- a/src/mame/drivers/royalmah.cpp
+++ b/src/mame/drivers/royalmah.cpp
@@ -604,6 +604,23 @@ static ADDRESS_MAP_START( janyoup2_iomap, AS_IO, 8, royalmah_state )
AM_RANGE(0x21, 0x21) AM_DEVWRITE("crtc", mc6845_device, register_w)
ADDRESS_MAP_END
+static ADDRESS_MAP_START( seljan_map, AS_PROGRAM, 8, royalmah_state )
+ AM_RANGE( 0x0000, 0x8fff ) AM_ROM AM_WRITENOP
+ AM_RANGE( 0xe000, 0xefff ) AM_RAM AM_SHARE("nvram")
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( seljan_iomap, AS_IO, 8, royalmah_state )
+ AM_RANGE( 0x0001, 0x0001 ) AM_MIRROR(0x7f00) AM_DEVREAD("aysnd", ay8910_device, data_r)
+ AM_RANGE( 0x0002, 0x0003 ) AM_MIRROR(0x7f00) AM_DEVWRITE("aysnd", ay8910_device, data_address_w)
+ AM_RANGE( 0x0010, 0x0010 ) AM_MIRROR(0x7f00) AM_READ_PORT("DSW1") AM_WRITE(royalmah_palbank_w )
+ AM_RANGE( 0x0011, 0x0011 ) AM_MIRROR(0x7f00) AM_READ_PORT("SYSTEM") AM_WRITE(input_port_select_w )
+ AM_RANGE( 0x0012, 0x0012 ) AM_MIRROR(0x7f00) AM_READ_PORT("DSW2") AM_DEVWRITE("crtc", mc6845_device, address_w)
+ AM_RANGE( 0x0013, 0x0013 ) AM_MIRROR(0x7f00) AM_READ_PORT("DSW3") AM_DEVWRITE("crtc", mc6845_device, register_w)
+
+ // TODO: following actually starts at 0x8000, needs custom 6845 routine because it uses start address register.
+ AM_RANGE( 0x7e00, 0xffff ) AM_RAM AM_SHARE("videoram")
+ADDRESS_MAP_END
+
static ADDRESS_MAP_START( tahjong_iomap, AS_IO, 8, royalmah_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE( 0x01, 0x01 ) AM_DEVREAD("aysnd", ay8910_device, data_r)
@@ -1543,6 +1560,62 @@ static INPUT_PORTS_START( janyoup2 )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
INPUT_PORTS_END
+static INPUT_PORTS_START( seljan )
+ PORT_INCLUDE( royalmah )
+
+ PORT_START("DSW2") /* DSW (inport $12) */
+ PORT_DIPNAME( 0x01, 0x01, "Unknown 1-0" )
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x02, "Unknown 1-1" )
+ PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x04, 0x04, "Unknown 1-2" )
+ PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x08, 0x08, "Unknown 1-3" )
+ PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x10, 0x10, "Unknown 1-4" )
+ PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x00, "Unknown 1-5" ) // these two activates credit analyzer if they are off
+ PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x40, 0x00, "Unknown 1-6" ) // ^
+ PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x80, "Unknown 1-7" )
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+
+ PORT_START("DSW3") /* DSW (inport $13) */
+ PORT_DIPNAME( 0x01, 0x01, "Unknown 2-0" )
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x02, "Unknown 2-1" )
+ PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x04, 0x04, "Unknown 2-2" )
+ PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x08, 0x08, "Unknown 2-3" )
+ PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x10, 0x10, "Unknown 2-4" )
+ PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x20, "Unknown 2-5" )
+ PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x40, 0x40, "Unknown 2-6" )
+ PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x80, "Unknown 2-7" )
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+INPUT_PORTS_END
+
static INPUT_PORTS_START( suzume )
PORT_INCLUDE( mjctrl2 )
@@ -3427,6 +3500,12 @@ static MACHINE_CONFIG_DERIVED( janyoup2, ippatsu )
MCFG_MC6845_CHAR_WIDTH(4)
MACHINE_CONFIG_END
+static MACHINE_CONFIG_DERIVED( seljan, janyoup2 )
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_CPU_PROGRAM_MAP(seljan_map)
+ MCFG_CPU_IO_MAP(seljan_iomap)
+MACHINE_CONFIG_END
+
INTERRUPT_GEN_MEMBER(royalmah_state::suzume_irq)
{
if ( m_suzume_bank & 0x40 )
@@ -3715,12 +3794,12 @@ ROM_END
ROM_START( seljan ) // Z80A + HD46505SP + AY891X (a sticker covers the chip type)
ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "1", 0x0000, 0x2000, CRC(d670d7c3) SHA1(2106ecf6ad675b8fd167f1f21d615afdfb5bca6d) )
- ROM_LOAD( "2", 0x2000, 0x2000, CRC(8d26d334) SHA1(4ac0f0961f666954caf59336f8389312db9dc263) )
+ ROM_LOAD( "2", 0x0000, 0x2000, CRC(8d26d334) SHA1(4ac0f0961f666954caf59336f8389312db9dc263) ) // ok
+ ROM_LOAD( "1", 0x2000, 0x2000, CRC(d670d7c3) SHA1(2106ecf6ad675b8fd167f1f21d615afdfb5bca6d) )
ROM_LOAD( "3", 0x4000, 0x2000, CRC(6c0dfd50) SHA1(1f91ff0ef2f24414888ae8e5ebac72a5bb48780b) )
- ROM_LOAD( "4", 0x6000, 0x1000, CRC(d41e2a10) SHA1(9c24f89ba877ab599ea89961b5e705fa770867be) )
- ROM_LOAD( "5", 0x7000, 0x2000, CRC(22eb98ee) SHA1(aae0ba5098852e6fef3dd7cc97dfad97ca444bb7) )
-
+ ROM_LOAD( "5", 0x6000, 0x2000, CRC(22eb98ee) SHA1(aae0ba5098852e6fef3dd7cc97dfad97ca444bb7) )
+ ROM_LOAD( "4", 0x8000, 0x1000, CRC(d41e2a10) SHA1(9c24f89ba877ab599ea89961b5e705fa770867be) )
+
ROM_REGION( 0x0020, "proms", 0 )
ROM_LOAD( "82s123_1", 0x0000, 0x0020, CRC(f1df0310) SHA1(cc7dd39a0aa10b57039143e587eee02cf5dd2e5c) )
ROM_END
@@ -5075,7 +5154,7 @@ DRIVER_INIT_MEMBER(royalmah_state, janptr96)
GAME( 1981, royalmj, 0, royalmah, royalmah, royalmah_state, 0, ROT0, "Nichibutsu", "Royal Mahjong (Japan, v1.13)", 0 )
GAME( 1981?, openmj, royalmj, royalmah, royalmah, royalmah_state, 0, ROT0, "Sapporo Mechanic", "Open Mahjong [BET] (Japan)", 0 )
GAME( 1982, royalmah, royalmj, royalmah, royalmah, royalmah_state, 0, ROT0, "bootleg", "Royal Mahjong (Falcon bootleg, v1.01)", 0 )
-GAME( 1982, seljan, 0, janyoup2, janyoup2, royalmah_state, 0, ROT0, "Dyna Computer", "Sel-Jan", MACHINE_NOT_WORKING )
+GAME( 1983, seljan, 0, seljan, seljan, royalmah_state, 0, ROT0, "Jem / Dyna Corp", "Sel-Jan [BET] (Japan)", 0 )
GAME( 1983, janyoup2, royalmj, janyoup2, janyoup2, royalmah_state, 0, ROT0, "Cosmo Denshi", "Janyou Part II (ver 7.03, July 1 1983)",0 )
GAME( 1985, tahjong, royalmj, tahjong, tahjong, royalmah_state, tahjong, ROT0, "Bally Pond / Nasco", "Tahjong Yakitori (ver. 2-1)", 0 ) // 1985 Jun. 17
GAME( 1981, janputer, 0, royalmah, royalmah, royalmah_state, 0, ROT0, "bootleg (Paradise Denshi Ltd. / Mes)", "New Double Bet Mahjong (bootleg of Royal Mahjong) [BET]", 0 ) // MT #05392
diff --git a/src/mame/drivers/slapfght.cpp b/src/mame/drivers/slapfght.cpp
index 8f6f10397e6..0b91d03081b 100644
--- a/src/mame/drivers/slapfght.cpp
+++ b/src/mame/drivers/slapfght.cpp
@@ -784,14 +784,6 @@ void slapfght_state::machine_reset()
m_audiocpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
}
-MACHINE_RESET_MEMBER(slapfght_state,getstar)
-{
- // don't boot the mcu since we don't have a dump yet
-// m_mcu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
-
- machine_reset();
-}
-
/**************************************************************************/
void slapfght_state::init_banks()
@@ -807,18 +799,6 @@ DRIVER_INIT_MEMBER(slapfght_state,slapfigh)
init_banks();
}
-DRIVER_INIT_MEMBER(slapfght_state,getstar)
-{
- m_getstar_id = GETSTAR;
- init_banks();
-}
-
-DRIVER_INIT_MEMBER(slapfght_state,getstarj)
-{
- m_getstar_id = GETSTARJ;
- init_banks();
-}
-
DRIVER_INIT_MEMBER(slapfght_state,getstarb1)
{
m_getstar_id = GETSTARB1;
@@ -1098,19 +1078,6 @@ static MACHINE_CONFIG_DERIVED( slapfighb2, slapfighb1 )
MCFG_CPU_PROGRAM_MAP(slapfighb2_map)
MACHINE_CONFIG_END
-static MACHINE_CONFIG_DERIVED( getstar, slapfigh )
-
- /* basic machine hardware */
- MCFG_CPU_MODIFY("maincpu")
- MCFG_CPU_PROGRAM_MAP(getstar_map)
- MCFG_CPU_IO_MAP(getstar_io_map)
-
- MCFG_DEVICE_MODIFY("bmcu:mcu")
- MCFG_DEVICE_DISABLE()
-
- MCFG_MACHINE_RESET_OVERRIDE(slapfght_state, getstar)
-MACHINE_CONFIG_END
-
static MACHINE_CONFIG_DERIVED( getstarb1, slapfighb1 )
/* basic machine hardware */
@@ -1890,7 +1857,7 @@ ROM_START( grdian )
ROM_LOAD( "a68-03.12d", 0x0000, 0x2000, CRC(18daa44c) SHA1(1a3d22a186c591321d1b836ee30d89fba4771122) )
ROM_REGION( 0x0800, "bmcu:mcu", 0 ) /* 2k for the microcontroller */
- ROM_LOAD( "a68_14.6a", 0x0000, 0x0800, NO_DUMP )
+ ROM_LOAD( "a68_14.6a", 0x0000, 0x0800, CRC(87c4ca48) SHA1(ae15dab7adde7ad2381ca3d70331891c8f3bcc42) )
ROM_REGION( 0x04000, "gfx1", 0 ) /* Region 1 - temporary for gfx */
ROM_LOAD( "a68_05-1.6f", 0x00000, 0x2000, CRC(06f60107) SHA1(c5dcf0c7a5863ea960ee747d2d7ec7ac8bb7d3af) ) /* Chars */
@@ -1924,7 +1891,7 @@ ROM_START( getstarj )
ROM_LOAD( "a68-03.12d", 0x00000, 0x2000, CRC(18daa44c) SHA1(1a3d22a186c591321d1b836ee30d89fba4771122) )
ROM_REGION( 0x0800, "bmcu:mcu", 0 ) /* 2k for the microcontroller */
- ROM_LOAD( "68705.6a", 0x0000, 0x0800, NO_DUMP )
+ ROM_LOAD( "a68_14.6a", 0x0000, 0x0800, CRC(87c4ca48) SHA1(ae15dab7adde7ad2381ca3d70331891c8f3bcc42) )
ROM_REGION( 0x04000, "gfx1", 0 ) /* Region 1 - temporary for gfx */
ROM_LOAD( "a68_05.6f", 0x00000, 0x2000, CRC(e3d409e7) SHA1(0b6be4767f110729f4dd1a472ef8d9a0c718b684) ) /* Chars */
@@ -2033,7 +2000,7 @@ GAME( 1986, slapfighb1, alcon, slapfighb1, slapfigh, slapfght_state, slapfig
GAME( 1986, slapfighb2, alcon, slapfighb2, slapfigh, slapfght_state, slapfigh, ROT270, "bootleg", "Slap Fight (bootleg set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) // England?
GAME( 1986, slapfighb3, alcon, slapfighb2, slapfigh, slapfght_state, slapfigh, ROT270, "bootleg", "Slap Fight (bootleg set 3)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) // PCB labeled 'slap fighter'
-GAME( 1986, grdian, 0, getstar, getstar, slapfght_state, getstar, ROT0, "Toaplan / Taito America Corporation (Kitkorp license)", "Guardian (US)", MACHINE_SUPPORTS_SAVE )
-GAME( 1986, getstarj, grdian, getstar, getstarj, slapfght_state, getstarj, ROT0, "Toaplan / Taito", "Get Star (Japan)", MACHINE_SUPPORTS_SAVE )
+GAME( 1986, grdian, 0, slapfigh, getstar, slapfght_state, slapfigh, ROT0, "Toaplan / Taito America Corporation (Kitkorp license)", "Guardian (US)", MACHINE_SUPPORTS_SAVE )
+GAME( 1986, getstarj, grdian, slapfigh, getstarj, slapfght_state, slapfigh, ROT0, "Toaplan / Taito", "Get Star (Japan)", MACHINE_SUPPORTS_SAVE )
GAME( 1986, getstarb1, grdian, getstarb1, getstarj, slapfght_state, getstarb1, ROT0, "bootleg", "Get Star (bootleg set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL )
GAME( 1986, getstarb2, grdian, getstarb2, getstarb2, slapfght_state, getstarb2, ROT0, "bootleg", "Get Star (bootleg set 2)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/terracre.cpp b/src/mame/drivers/terracre.cpp
index 4a96de229a7..2adc6e8c2ad 100644
--- a/src/mame/drivers/terracre.cpp
+++ b/src/mame/drivers/terracre.cpp
@@ -243,9 +243,11 @@ static ADDRESS_MAP_START( terracre_map, AS_PROGRAM, 16, terracre_state )
AM_RANGE(0x024006, 0x024007) AM_READ_PORT("DSW")
AM_RANGE(0x026000, 0x026001) AM_WRITE(amazon_flipscreen_w) /* flip screen & coin counters */
AM_RANGE(0x026002, 0x026003) AM_WRITE(amazon_scrollx_w)
- AM_RANGE(0x026004, 0x026005) AM_WRITE(amazon_scrolly_w)
+ AM_RANGE(0x026004, 0x026005) AM_READNOP AM_WRITE(amazon_scrolly_w)
+ AM_RANGE(0x02600a, 0x02600b) AM_NOP // video related
AM_RANGE(0x02600c, 0x02600d) AM_WRITE(amazon_sound_w)
- AM_RANGE(0x028000, 0x0287ff) AM_WRITE(amazon_foreground_w) AM_SHARE("fg_videoram")
+ AM_RANGE(0x02600e, 0x02600f) AM_NOP // video related
+ AM_RANGE(0x028000, 0x0287ff) AM_RAM_WRITE(amazon_foreground_w) AM_SHARE("fg_videoram")
ADDRESS_MAP_END
static ADDRESS_MAP_START( amazon_base_map, AS_PROGRAM, 16, terracre_state )
@@ -259,14 +261,17 @@ static ADDRESS_MAP_START( amazon_base_map, AS_PROGRAM, 16, terracre_state )
AM_RANGE(0x044006, 0x044007) AM_READ_PORT("IN3")
AM_RANGE(0x046000, 0x046001) AM_WRITE(amazon_flipscreen_w) /* flip screen & coin counters */
AM_RANGE(0x046002, 0x046003) AM_WRITE(amazon_scrollx_w)
- AM_RANGE(0x046004, 0x046005) AM_WRITE(amazon_scrolly_w)
+ AM_RANGE(0x046004, 0x046005) AM_READNOP AM_WRITE(amazon_scrolly_w)
+ AM_RANGE(0x04600a, 0x04600b) AM_NOP // video related
AM_RANGE(0x04600c, 0x04600d) AM_WRITE(amazon_sound_w)
- AM_RANGE(0x050000, 0x050fff) AM_WRITE(amazon_foreground_w) AM_SHARE("fg_videoram")
+ AM_RANGE(0x04600e, 0x04600f) AM_NOP // video related
+ AM_RANGE(0x050000, 0x050fff) AM_RAM_WRITE(amazon_foreground_w) AM_SHARE("fg_videoram")
+ AM_RANGE(0x070000, 0x070003) AM_NOP // protection (nop for bootlegs)
ADDRESS_MAP_END
static ADDRESS_MAP_START( amazon_1412m2_map, AS_PROGRAM, 16, terracre_state)
- AM_IMPORT_FROM( amazon_base_map )
AM_RANGE(0x070000, 0x070003) AM_READWRITE(amazon_protection_r, amazon_protection_w)
+ AM_IMPORT_FROM( amazon_base_map )
ADDRESS_MAP_END
static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, terracre_state )
@@ -1013,7 +1018,7 @@ GAME( 1985, terracren,terracre, ym2203, terracre, terracre_state, 0, ROT
GAME( 1986, amazon, 0, amazon_1412m2, amazon, terracre_state, 0, ROT270, "Nichibutsu", "Soldier Girl Amazon", MACHINE_SUPPORTS_SAVE )
GAME( 1986, amatelas, amazon, amazon_1412m2, amazon, terracre_state, 0, ROT270, "Nichibutsu", "Sei Senshi Amatelass", MACHINE_SUPPORTS_SAVE )
GAME( 1987, horekid, 0, amazon_1412m2, horekid, terracre_state, 0, ROT270, "Nichibutsu", "Kid no Hore Hore Daisakusen", MACHINE_SUPPORTS_SAVE )
-GAME( 1987, horekidb, horekid, amazon_1412m2, horekid, terracre_state, 0, ROT270, "bootleg", "Kid no Hore Hore Daisakusen (bootleg)", MACHINE_SUPPORTS_SAVE )
// bootlegs
+GAME( 1987, horekidb, horekid, amazon_base, horekid, terracre_state, 0, ROT270, "bootleg", "Kid no Hore Hore Daisakusen (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1987, boobhack, horekid, amazon_base, horekid, terracre_state, 0, ROT270, "bootleg", "Booby Kids (Italian manufactured graphic hack / bootleg of Kid no Hore Hore Daisakusen (bootleg))", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/includes/40love.h b/src/mame/includes/40love.h
index 94eeaf5b276..f3c9f6ccde1 100644
--- a/src/mame/includes/40love.h
+++ b/src/mame/includes/40love.h
@@ -51,12 +51,6 @@ public:
int m_sound_nmi_enable;
int m_pending_nmi;
- /* fake mcu */
- uint8_t m_from_mcu;
- uint8_t m_mcu_in[2][16];
- uint8_t m_mcu_out[2][16];
- int m_mcu_cmd;
-
/* misc */
int m_pix_color[4];
uint8_t m_pix1;
@@ -85,9 +79,6 @@ public:
DECLARE_WRITE8_MEMBER(pix1_w);
DECLARE_WRITE8_MEMBER(pix2_w);
DECLARE_READ8_MEMBER(pix2_r);
- DECLARE_WRITE8_MEMBER(undoukai_mcu_w);
- DECLARE_READ8_MEMBER(undoukai_mcu_r);
- DECLARE_READ8_MEMBER(undoukai_mcu_status_r);
DECLARE_READ8_MEMBER(from_snd_r);
DECLARE_READ8_MEMBER(snd_flag_r);
DECLARE_WRITE8_MEMBER(to_main_w);
@@ -110,8 +101,6 @@ public:
virtual void video_start() override;
DECLARE_MACHINE_START(40love);
DECLARE_MACHINE_RESET(40love);
- DECLARE_MACHINE_START(undoukai);
- DECLARE_MACHINE_RESET(undoukai);
DECLARE_MACHINE_RESET(common);
DECLARE_MACHINE_RESET(ta7630);
uint32_t screen_update_fortyl(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
diff --git a/src/mame/includes/chaknpop.h b/src/mame/includes/chaknpop.h
index 3ae9cc5b31c..35a859c6555 100644
--- a/src/mame/includes/chaknpop.h
+++ b/src/mame/includes/chaknpop.h
@@ -1,9 +1,7 @@
// license:BSD-3-Clause
// copyright-holders:BUT
-
-#define MCU_INITIAL_SEED 0x81
-
+#include "machine/taito68705interface.h"
class chaknpop_state : public driver_device
{
@@ -11,30 +9,24 @@ public:
chaknpop_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
+ m_bmcu(*this, "bmcu"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
- m_mcu_ram(*this, "mcu_ram"),
m_tx_ram(*this, "tx_ram"),
m_attr_ram(*this, "attr_ram"),
m_spr_ram(*this, "spr_ram") { }
/* devices */
required_device<cpu_device> m_maincpu;
+ optional_device<taito68705_mcu_device> m_bmcu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
/* memory pointers */
- required_shared_ptr<uint8_t> m_mcu_ram;
required_shared_ptr<uint8_t> m_tx_ram;
required_shared_ptr<uint8_t> m_attr_ram;
required_shared_ptr<uint8_t> m_spr_ram;
- /* mcu-related */
- uint8_t m_mcu_seed;
- uint8_t m_mcu_select;
- uint8_t m_mcu_result;
-
-
/* video-related */
tilemap_t *m_tx_tilemap;
uint8_t *m_vram1;
@@ -46,18 +38,14 @@ public:
uint8_t m_flip_y;
DECLARE_WRITE8_MEMBER(coinlock_w);
- DECLARE_READ8_MEMBER(mcu_port_a_r);
- DECLARE_READ8_MEMBER(mcu_port_b_r);
- DECLARE_READ8_MEMBER(mcu_port_c_r);
- DECLARE_WRITE8_MEMBER(mcu_port_a_w);
- DECLARE_WRITE8_MEMBER(mcu_port_b_w);
- DECLARE_WRITE8_MEMBER(mcu_port_c_w);
DECLARE_READ8_MEMBER(gfxmode_r);
DECLARE_WRITE8_MEMBER(gfxmode_w);
DECLARE_WRITE8_MEMBER(txram_w);
DECLARE_WRITE8_MEMBER(attrram_w);
DECLARE_WRITE8_MEMBER(unknown_port_1_w);
DECLARE_WRITE8_MEMBER(unknown_port_2_w);
+ DECLARE_WRITE8_MEMBER(unknown_port_3_w);
+ DECLARE_READ8_MEMBER(mcu_status_r);
TILE_GET_INFO_MEMBER(get_tx_tile_info);
virtual void machine_start() override;
diff --git a/src/mame/includes/renegade.h b/src/mame/includes/renegade.h
index 938d274e30a..44f156b3cbf 100644
--- a/src/mame/includes/renegade.h
+++ b/src/mame/includes/renegade.h
@@ -6,8 +6,6 @@
#include "machine/gen_latch.h"
#include "sound/msm5205.h"
-#define MCU_BUFFER_MAX 6
-
class renegade_state : public driver_device
{
public:
@@ -46,25 +44,14 @@ public:
uint32_t m_adpcm_end;
bool m_adpcm_playing;
- bool m_mcu_sim;
- uint8_t m_mcu_buffer[MCU_BUFFER_MAX];
- uint8_t m_mcu_input_size;
- uint8_t m_mcu_output_byte;
- int8_t m_mcu_key;
- int m_mcu_checksum;
- const uint8_t *m_mcu_encrypt_table;
- int m_mcu_encrypt_table_len;
int32_t m_scrollx;
tilemap_t *m_bg_tilemap;
tilemap_t *m_fg_tilemap;
DECLARE_WRITE8_MEMBER(sound_w);
DECLARE_READ8_MEMBER(mcu_reset_r);
- DECLARE_WRITE8_MEMBER(mcu_w);
- DECLARE_READ8_MEMBER(mcu_r);
DECLARE_WRITE8_MEMBER(bankswitch_w);
DECLARE_WRITE8_MEMBER(coincounter_w);
- void mcu_process_command();
DECLARE_WRITE8_MEMBER(fg_videoram_w);
DECLARE_WRITE8_MEMBER(bg_videoram_w);
DECLARE_WRITE8_MEMBER(flipscreen_w);
@@ -81,9 +68,6 @@ public:
TIMER_DEVICE_CALLBACK_MEMBER(interrupt);
- DECLARE_DRIVER_INIT(kuniokun);
- DECLARE_DRIVER_INIT(kuniokunb);
- DECLARE_DRIVER_INIT(renegade);
virtual void machine_start() override;
virtual void machine_reset() override;
virtual void video_start() override;
diff --git a/src/mame/includes/slapfght.h b/src/mame/includes/slapfght.h
index 3f21f29491e..9e033a23b76 100644
--- a/src/mame/includes/slapfght.h
+++ b/src/mame/includes/slapfght.h
@@ -47,8 +47,8 @@ public:
enum getstar_id
{
GETSTUNK = 0, /* unknown for inclusion of possible new sets */
- GETSTAR,
- GETSTARJ,
+ //GETSTAR,
+ //GETSTARJ,
GETSTARB1, /* "good" bootleg with same behaviour as 'getstarj' */
GETSTARB2 /* "lame" bootleg with lots of ingame bugs */
} m_getstar_id;
@@ -98,11 +98,8 @@ public:
virtual void machine_start() override;
virtual void machine_reset() override;
- DECLARE_MACHINE_RESET(getstar);
void init_banks();
- DECLARE_DRIVER_INIT(getstarj);
- DECLARE_DRIVER_INIT(getstar);
DECLARE_DRIVER_INIT(getstarb1);
DECLARE_DRIVER_INIT(slapfigh);
DECLARE_DRIVER_INIT(getstarb2);
diff --git a/src/mame/machine/chaknpop.cpp b/src/mame/machine/chaknpop.cpp
deleted file mode 100644
index 50c39d2aafc..00000000000
--- a/src/mame/machine/chaknpop.cpp
+++ /dev/null
@@ -1,144 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:BUT
-/*
- * Chack'n Pop (C) 1983 TAITO Corp.
- * simulate 68705 MCU
- */
-
-#include "emu.h"
-#include "cpu/z80/z80.h"
-#include "includes/chaknpop.h"
-
-
-/* mcu data that is extracted from the real board! */
-/* updated on 2st Jun 2003 */
-static const uint8_t mcu_data[256] = {
- 0x3a, 0xe6, 0x80, 0xc6, 0x0e, 0xdd, 0x77, 0xfd,
- 0x7e, 0xfe, 0x10, 0x38, 0x10, 0xdd, 0x7e, 0x03,
- 0xc6, 0x08, 0xdd, 0x77, 0x03, 0xdd, 0x7e, 0xff,
- 0xc6, 0x08, 0xdd, 0x77, 0xff, 0x34, 0x23, 0xc9,
- 0x06, 0x10, 0xdd, 0xe5, 0xe1, 0x23, 0x23, 0x23,
- 0x4e, 0x23, 0x5e, 0x23, 0x56, 0x23, 0x23, 0x7b,
- 0xb2, 0x28, 0x02, 0x79, 0x12, 0x10, 0xf1, 0xc9,
- 0xe6, 0x03, 0x87, 0x87, 0x6f, 0x26, 0x00, 0x29,
- 0x29, 0x29, 0xe5, 0x29, 0x29, 0x29, 0xc1, 0x09,
- 0x01, 0xc3, 0x81, 0x09, 0xe5, 0xdd, 0xe1, 0xc9,
- 0x10, 0x00, 0x08, 0x10, 0x20, 0x64, 0x50, 0x00,
- 0x08, 0x50, 0xb0, 0x01, 0x34, 0xa0, 0x13, 0x34,
- 0xb0, 0x05, 0x34, 0xc0, 0x04, 0x34, 0xd0, 0x02,
- 0x34, 0xf0, 0x02, 0x34, 0x00, 0x60, 0x00, 0x00,
- 0x3f, 0x00, 0x0c, 0x1f, 0xa0, 0x3f, 0x1e, 0xa2,
- 0x01, 0x1e, 0xa1, 0x0a, 0x1e, 0xa2, 0x07, 0x1e,
- 0x92, 0x05, 0x1e, 0x02, 0x04, 0x1e, 0x12, 0x09,
- 0x3f, 0x22, 0x06, 0x3f, 0x21, 0x03, 0x3f, 0x20,
- 0x02, 0x00, 0x00, 0x3f, 0x00, 0x04, 0x02, 0xa0,
- 0x40, 0x12, 0xa1, 0x06, 0x12, 0xa2, 0x02, 0x12,
- 0xa1, 0x0a, 0x12, 0xa2, 0x07, 0x10, 0x92, 0x05,
- 0x10, 0x02, 0x04, 0x12, 0x12, 0x09, 0x12, 0x22,
- 0x06, 0x12, 0x21, 0x03, 0x12, 0x20, 0x02, 0x26,
- 0x00, 0x14, 0x12, 0x00, 0x00, 0x00, 0x3f, 0x00,
- 0x04, 0x1a, 0xa0, 0x40, 0x3f, 0x00, 0x00, 0x00,
- 0x3e, 0x3a, 0x87, 0x83, 0x3c, 0x32, 0x87, 0x83,
- 0x0f, 0x0f, 0xe6, 0x07, 0xfe, 0x02, 0x20, 0x01,
- 0xaf, 0x11, 0x40, 0x98, 0x1d, 0x12, 0x1d, 0x20,
- 0xfb, 0x2a, 0x89, 0x83, 0x2b, 0x22, 0x89, 0x83,
- 0xc9, 0x3a, 0x5b, 0x81, 0xa7, 0xc0, 0x21, 0x80,
- 0x81, 0x11, 0x04, 0x00, 0x06, 0x09, 0x34, 0x19,
- 0x10, 0xfc, 0x3e, 0x01, 0x32, 0x5b, 0x81, 0xc9
-};
-
-void chaknpop_state::mcu_update_seed( uint8_t data )
-{
- if (!(data & 0x80))
- {
- m_mcu_seed += 0x83;
- m_mcu_seed = (m_mcu_seed & 0x80) | (m_mcu_seed >> 1);
- }
-
- m_mcu_seed += 0x19;
-
- //logerror("New seed: 0x%02x\n", m_mcu_seed);
-}
-
-
-/***************************************************************************
- Memory handlers
-***************************************************************************/
-
-READ8_MEMBER(chaknpop_state::mcu_port_a_r)
-{
- //logerror("%04x: MCU port_a read\n", space.device().safe_pc());
- return m_mcu_result;
-}
-
-
-READ8_MEMBER(chaknpop_state::mcu_port_b_r)
-{
- //logerror("%04x: MCU port_b read\n", space.device().safe_pc());
-
- return 0xff;
-}
-
-READ8_MEMBER(chaknpop_state::mcu_port_c_r)
-{
- //logerror("%04x: MCU port_c read\n", space.device().safe_pc());
- return 0x00;
-}
-
-WRITE8_MEMBER(chaknpop_state::mcu_port_a_w)
-{
- uint8_t mcu_command;
-
- mcu_command = data + m_mcu_seed;
- m_mcu_result = 0;
-
- if (mcu_command < 0x08)
- {
- mcu_update_seed(data);
-
- m_mcu_result = mcu_data[m_mcu_select * 8 + mcu_command];
- m_mcu_result -= m_mcu_seed;
-
- mcu_update_seed(m_mcu_result);
-
- logerror("%04x: MCU command 0x%02x, result 0x%02x\n", space.device().safe_pc(), mcu_command, m_mcu_result);
- }
- else if (mcu_command >= 0x28 && mcu_command <= 0x2a)
- {
- mcu_update_seed(data);
-
- m_mcu_result = m_mcu_ram[0x380 + mcu_command];
- m_mcu_result -= m_mcu_seed;
-
- mcu_update_seed(m_mcu_result);
-
- logerror("%04x: MCU command 0x%02x, result 0x%02x\n", space.device().safe_pc(), mcu_command, m_mcu_result);
- }
- else if (mcu_command < 0x80)
- {
- mcu_update_seed(data);
-
- if (mcu_command >= 0x40 && mcu_command < 0x60)
- {
- m_mcu_select = mcu_command - 0x40;
-
- logerror("%04x: MCU select 0x%02x\n", space.device().safe_pc(), m_mcu_select);
- }
- }
- else if (mcu_command == 0x9c|| mcu_command == 0xde)
- {
- mcu_update_seed(data);
-
- logerror("%04x: MCU command 0x%02x\n", space.device().safe_pc(), mcu_command);
- }
-}
-
-WRITE8_MEMBER(chaknpop_state::mcu_port_b_w)
-{
- //logerror("%04x: MCU port_b write 0x%02x\n", space.device().safe_pc(), data);
-}
-
-WRITE8_MEMBER(chaknpop_state::mcu_port_c_w)
-{
- //logerror("%04x: MCU port_c write 0x%02x\n", space.device().safe_pc(), data);
-}
diff --git a/src/mame/machine/interpro_ioga.h b/src/mame/machine/interpro_ioga.h
index fd0f91acee0..3af18cf395e 100644
--- a/src/mame/machine/interpro_ioga.h
+++ b/src/mame/machine/interpro_ioga.h
@@ -278,7 +278,7 @@ private:
u32 m_active_interrupt_number;
u32 m_hwint_forced;
- bool m_nmi_forced;
+ //bool m_nmi_forced;
u16 m_hwicr[IOGA_INTERRUPT_COUNT];
u8 m_softint;
diff --git a/src/mame/machine/slapfght.cpp b/src/mame/machine/slapfght.cpp
index 527fef64284..ec3e0087865 100644
--- a/src/mame/machine/slapfght.cpp
+++ b/src/mame/machine/slapfght.cpp
@@ -51,77 +51,12 @@ READ8_MEMBER(slapfght_state::getstar_mcusim_status_r)
READ8_MEMBER(slapfght_state::getstar_mcusim_r)
{
- uint16_t tmp = 0; /* needed for values computed on 16 bits */
uint8_t getstar_val = 0;
- uint8_t phase_lookup_table[] = {0x00, 0x01, 0x03, 0xff, 0xff, 0x02, 0x05, 0xff, 0xff, 0x05}; /* table at 0x0e05 in 'getstarb1' */
uint8_t lives_lookup_table[] = {0x03, 0x05, 0x01, 0x02}; /* table at 0x0e62 in 'getstarb1' */
uint8_t lgsb2_lookup_table[] = {0x00, 0x03, 0x04, 0x05}; /* fake tanle for "test mode" in 'getstarb2' */
switch (m_getstar_id)
{
- case GETSTAR:
- case GETSTARJ:
- switch (m_getstar_cmd)
- {
- case 0x20: /* continue play */
- getstar_val = ((m_gs_a & 0x30) == 0x30) ? 0x20 : 0x80;
- break;
- case 0x21: /* lose life */
- getstar_val = (m_gs_a << 1) | (m_gs_a >> 7);
- break;
- case 0x22: /* starting difficulty */
- getstar_val = ((m_gs_a & 0x0c) >> 2) + 1;
- break;
- case 0x23: /* starting lives */
- getstar_val = lives_lookup_table[m_gs_a];
- break;
- case 0x24: /* game phase */
- getstar_val = phase_lookup_table[((m_gs_a & 0x18) >> 1) | (m_gs_a & 0x03)];
- break;
- case 0x25: /* players inputs */
- getstar_val = BITSWAP8(m_gs_a, 3, 2, 1, 0, 7, 5, 6, 4);
- break;
- case 0x26: /* background (1st read) */
- tmp = 0x8800 + (0x001f * m_gs_a);
- getstar_val = (tmp & 0x00ff) >> 0;
- m_getstar_cmd |= 0x80; /* to allow a second consecutive read */
- break;
- case 0xa6: /* background (2nd read) */
- tmp = 0x8800 + (0x001f * m_gs_a);
- getstar_val = (tmp & 0xff00) >> 8;
- break;
- case 0x29: /* unknown effect */
- getstar_val = 0x00;
- break;
- case 0x2a: /* change player (if 2 players game) */
- getstar_val = (m_gs_a ^ 0x40);
- break;
- case 0x37: /* foreground (1st read) */
- tmp = ((0xd0 + ((m_gs_e >> 2) & 0x0f)) << 8) | (0x40 * (m_gs_e & 03) + m_gs_d);
- getstar_val = (tmp & 0x00ff) >> 0;
- m_getstar_cmd |= 0x80; /* to allow a second consecutive read */
- break;
- case 0xb7: /* foreground (2nd read) */
- tmp = ((0xd0 + ((m_gs_e >> 2) & 0x0f)) << 8) | (0x40 * (m_gs_e & 03) + m_gs_d);
- getstar_val = (tmp & 0xff00) >> 8;
- break;
- case 0x38: /* laser position (1st read) */
- tmp = 0xf740 - (((m_gs_e >> 4) << 8) | ((m_gs_e & 0x08) ? 0x80 : 0x00)) + (0x02 + (m_gs_d >> 2));
- getstar_val = (tmp & 0x00ff) >> 0;
- m_getstar_cmd |= 0x80; /* to allow a second consecutive read */
- break;
- case 0xb8: /* laser position (2nd read) */
- tmp = 0xf740 - (((m_gs_e >> 4) << 8) | ((m_gs_e & 0x08) ? 0x80 : 0x00)) + (0x02 + (m_gs_d >> 2));
- getstar_val = (tmp & 0xff00) >> 8;
- break;
- case 0x73: /* avoid "BAD HW" message */
- getstar_val = 0x76;
- break;
- default:
- logerror("%04x: getstar_mcusim_r - cmd = %02x\n",space.device().safe_pc(),m_getstar_cmd);
- break;
- }
- break;
case GETSTARB1:
/* value isn't computed by the bootleg but we want to please the "test mode" */
if (space.device().safe_pc() == 0x6b04) return (lives_lookup_table[m_gs_a]);
@@ -163,374 +98,6 @@ WRITE8_MEMBER(slapfght_state::getstar_mcusim_w)
switch (m_getstar_id)
{
- case GETSTAR:
- /* unknown effect - not read back */
- if (space.device().safe_pc() == 0x00bf)
- {
- m_getstar_cmd = 0x00;
- GS_RESET_REGS
- }
- /* players inputs */
- if (space.device().safe_pc() == 0x0560)
- {
- m_getstar_cmd = 0x25;
- GS_RESET_REGS
- }
- if (space.device().safe_pc() == 0x056d)
- {
- m_getstar_cmd = 0x25;
- GS_SAVE_REGS
- }
- /* lose life */
- if (space.device().safe_pc() == 0x0a0a)
- {
- m_getstar_cmd = 0x21;
- GS_RESET_REGS
- }
- if (space.device().safe_pc() == 0x0a17)
- {
- m_getstar_cmd = 0x21;
- GS_SAVE_REGS
- }
- /* unknown effect */
- if (space.device().safe_pc() == 0x0a51)
- {
- m_getstar_cmd = 0x29;
- GS_RESET_REGS
- }
- if (space.device().safe_pc() == 0x0a6e)
- {
- m_getstar_cmd = 0x29;
- GS_SAVE_REGS
- }
- /* continue play */
- if (space.device().safe_pc() == 0x0ae3)
- {
- m_getstar_cmd = 0x20;
- GS_RESET_REGS
- }
- if (space.device().safe_pc() == 0x0af0)
- {
- m_getstar_cmd = 0x20;
- GS_SAVE_REGS
- }
- /* unknown effect - not read back */
- if (space.device().safe_pc() == 0x0b62)
- {
- m_getstar_cmd = 0x00; /* 0x1f */
- GS_RESET_REGS
- }
- /* change player (if 2 players game) */
- if (space.device().safe_pc() == 0x0bab)
- {
- m_getstar_cmd = 0x2a;
- GS_RESET_REGS
- }
- if (space.device().safe_pc() == 0x0bb8)
- {
- m_getstar_cmd = 0x2a;
- GS_SAVE_REGS
- }
- /* game phase */
- if (space.device().safe_pc() == 0x0d37)
- {
- m_getstar_cmd = 0x24;
- GS_RESET_REGS
- }
- if (space.device().safe_pc() == 0x0d44)
- {
- m_getstar_cmd = 0x24;
- GS_SAVE_REGS
- }
- /* starting lives */
- if (space.device().safe_pc() == 0x0d79)
- {
- m_getstar_cmd = 0x23;
- GS_RESET_REGS
- }
- if (space.device().safe_pc() == 0x0d8a)
- {
- m_getstar_cmd = 0x23;
- GS_SAVE_REGS
- }
- /* starting difficulty */
- if (space.device().safe_pc() == 0x0dc1)
- {
- m_getstar_cmd = 0x22;
- GS_RESET_REGS
- }
- if (space.device().safe_pc() == 0x0dd0)
- {
- m_getstar_cmd = 0x22;
- GS_SAVE_REGS
- }
- /* starting lives (again) */
- if (space.device().safe_pc() == 0x1011)
- {
- m_getstar_cmd = 0x23;
- GS_RESET_REGS
- }
- if (space.device().safe_pc() == 0x101e)
- {
- m_getstar_cmd = 0x23;
- GS_SAVE_REGS
- }
- /* hardware test */
- if (space.device().safe_pc() == 0x107a)
- {
- m_getstar_cmd = 0x73;
- GS_RESET_REGS
- }
- /* game phase (again) */
- if (space.device().safe_pc() == 0x10c6)
- {
- m_getstar_cmd = 0x24;
- GS_RESET_REGS
- }
- if (space.device().safe_pc() == 0x10d3)
- {
- m_getstar_cmd = 0x24;
- GS_SAVE_REGS
- }
- /* background */
- if (space.device().safe_pc() == 0x1910)
- {
- m_getstar_cmd = 0x26;
- GS_RESET_REGS
- }
- if (space.device().safe_pc() == 0x191d)
- {
- m_getstar_cmd = 0x26;
- GS_SAVE_REGS
- }
- /* foreground */
- if (space.device().safe_pc() == 0x19d5)
- {
- m_getstar_cmd = 0x37;
- GS_RESET_REGS
- }
- if (space.device().safe_pc() == 0x19e4)
- {
- m_getstar_cmd = 0x37;
- GS_SAVE_REGS
- }
- if (space.device().safe_pc() == 0x19f1)
- {
- m_getstar_cmd = 0x37;
- /* do NOT update the registers because there are 2 writes before 2 reads ! */
- }
- /* laser position */
- if (space.device().safe_pc() == 0x26af)
- {
- m_getstar_cmd = 0x38;
- GS_RESET_REGS
- }
- if (space.device().safe_pc() == 0x26be)
- {
- m_getstar_cmd = 0x38;
- GS_SAVE_REGS
- }
- if (space.device().safe_pc() == 0x26cb)
- {
- m_getstar_cmd = 0x38;
- /* do NOT update the registers because there are 2 writes before 2 reads ! */
- }
- /* starting lives (for "test mode") */
- if (space.device().safe_pc() == 0x6a27)
- {
- m_getstar_cmd = 0x23;
- GS_RESET_REGS
- }
- if (space.device().safe_pc() == 0x6a38)
- {
- m_getstar_cmd = 0x23;
- GS_SAVE_REGS
- }
- break;
- case GETSTARJ:
- /* unknown effect - not read back */
- if (space.device().safe_pc() == 0x00bf)
- {
- m_getstar_cmd = 0x00;
- GS_RESET_REGS
- }
- /* players inputs */
- if (space.device().safe_pc() == 0x0560)
- {
- m_getstar_cmd = 0x25;
- GS_RESET_REGS
- }
- if (space.device().safe_pc() == 0x056d)
- {
- m_getstar_cmd = 0x25;
- GS_SAVE_REGS
- }
- /* lose life */
- if (space.device().safe_pc() == 0x0ad5)
- {
- m_getstar_cmd = 0x21;
- GS_RESET_REGS
- }
- if (space.device().safe_pc() == 0x0ae2)
- {
- m_getstar_cmd = 0x21;
- GS_SAVE_REGS
- }
- /* unknown effect */
- if (space.device().safe_pc() == 0x0b1c)
- {
- m_getstar_cmd = 0x29;
- GS_RESET_REGS
- }
- if (space.device().safe_pc() == 0x0b29)
- {
- m_getstar_cmd = 0x29;
- GS_SAVE_REGS
- }
- /* continue play */
- if (space.device().safe_pc() == 0x0bae)
- {
- m_getstar_cmd = 0x20;
- GS_RESET_REGS
- }
- if (space.device().safe_pc() == 0x0bbb)
- {
- m_getstar_cmd = 0x20;
- GS_SAVE_REGS
- }
- /* unknown effect - not read back */
- if (space.device().safe_pc() == 0x0c2d)
- {
- m_getstar_cmd = 0x00; /* 0x1f */
- GS_RESET_REGS
- }
- /* change player (if 2 players game) */
- if (space.device().safe_pc() == 0x0c76)
- {
- m_getstar_cmd = 0x2a;
- GS_RESET_REGS
- }
- if (space.device().safe_pc() == 0x0c83)
- {
- m_getstar_cmd = 0x2a;
- GS_SAVE_REGS
- }
- /* game phase */
- if (space.device().safe_pc() == 0x0e02)
- {
- m_getstar_cmd = 0x24;
- GS_RESET_REGS
- }
- if (space.device().safe_pc() == 0x0e0f)
- {
- m_getstar_cmd = 0x24;
- GS_SAVE_REGS
- }
- /* starting lives */
- if (space.device().safe_pc() == 0x0e44)
- {
- m_getstar_cmd = 0x23;
- GS_RESET_REGS
- }
- if (space.device().safe_pc() == 0x0e55)
- {
- m_getstar_cmd = 0x23;
- GS_SAVE_REGS
- }
- /* starting difficulty */
- if (space.device().safe_pc() == 0x0e8c)
- {
- m_getstar_cmd = 0x22;
- GS_RESET_REGS
- }
- if (space.device().safe_pc() == 0x0e9b)
- {
- m_getstar_cmd = 0x22;
- GS_SAVE_REGS
- }
- /* starting lives (again) */
- if (space.device().safe_pc() == 0x10d6)
- {
- m_getstar_cmd = 0x23;
- GS_RESET_REGS
- }
- if (space.device().safe_pc() == 0x10e3)
- {
- m_getstar_cmd = 0x23;
- GS_SAVE_REGS
- }
- /* hardware test */
- if (space.device().safe_pc() == 0x113f)
- {
- m_getstar_cmd = 0x73;
- GS_RESET_REGS
- }
- /* game phase (again) */
- if (space.device().safe_pc() == 0x118b)
- {
- m_getstar_cmd = 0x24;
- GS_RESET_REGS
- }
- if (space.device().safe_pc() == 0x1198)
- {
- m_getstar_cmd = 0x24;
- GS_SAVE_REGS
- }
- /* background */
- if (space.device().safe_pc() == 0x19f8)
- {
- m_getstar_cmd = 0x26;
- GS_RESET_REGS
- }
- if (space.device().safe_pc() == 0x1a05)
- {
- m_getstar_cmd = 0x26;
- GS_SAVE_REGS
- }
- /* foreground */
- if (space.device().safe_pc() == 0x1abd)
- {
- m_getstar_cmd = 0x37;
- GS_RESET_REGS
- }
- if (space.device().safe_pc() == 0x1acc)
- {
- m_getstar_cmd = 0x37;
- GS_SAVE_REGS
- }
- if (space.device().safe_pc() == 0x1ad9)
- {
- m_getstar_cmd = 0x37;
- /* do NOT update the registers because there are 2 writes before 2 reads ! */
- }
- /* laser position */
- if (space.device().safe_pc() == 0x2792)
- {
- m_getstar_cmd = 0x38;
- GS_RESET_REGS
- }
- if (space.device().safe_pc() == 0x27a1)
- {
- m_getstar_cmd = 0x38;
- GS_SAVE_REGS
- }
- if (space.device().safe_pc() == 0x27ae)
- {
- m_getstar_cmd = 0x38;
- /* do NOT update the registers because there are 2 writes before 2 reads ! */
- }
- /* starting lives (for "test mode") */
- if (space.device().safe_pc() == 0x6ae2)
- {
- m_getstar_cmd = 0x23;
- GS_RESET_REGS
- }
- if (space.device().safe_pc() == 0x6af3)
- {
- m_getstar_cmd = 0x23;
- GS_SAVE_REGS
- }
- break;
case GETSTARB1:
/* "Test mode" doesn't compute the lives value :
6ADA: 3E 23 ld a,$23
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index ca5b165b37b..e942b643d9a 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -81,6 +81,7 @@ casanova //
@source:40love.cpp
40love // A30 (c) 1984 Taito
+40lovej // A30 (c) 1984 Taito
fieldday // A23 (c) 1984 Taito
undoukai // A17 (c) 1984 Taito
@@ -10705,6 +10706,7 @@ dc // 1999 Sega Dreamcast (USA)
dcdev // 1998 Sega HKT-0120 Sega Dreamcast Development Box
dceu // 1999 Sega Dreamcast (Europe)
dcjp // 1998 Sega Dreamcast (Japan)
+dctream // 200? Treamcast
@source:dcheese.cpp
cecmatch // (c) 1993 Coastal Amusements
diff --git a/src/osd/uwp/window.cpp b/src/osd/uwp/window.cpp
index 0cb74263f34..a2c9ca7f92d 100644
--- a/src/osd/uwp/window.cpp
+++ b/src/osd/uwp/window.cpp
@@ -406,9 +406,9 @@ void uwp_window_info::create(running_machine &machine, int index, std::shared_pt
// make the window title
if (video_config.numscreens == 1)
- sprintf(window->m_title, "%s: %s [%s]", emulator_info::get_appname(), machine.system().description, machine.system().name);
+ sprintf(window->m_title, "%s: %s [%s]", emulator_info::get_appname(), machine.system().type.fullname(), machine.system().name);
else
- sprintf(window->m_title, "%s: %s [%s] - Screen %d", emulator_info::get_appname(), machine.system().description, machine.system().name, index);
+ sprintf(window->m_title, "%s: %s [%s] - Screen %d", emulator_info::get_appname(), machine.system().type.fullname(), machine.system().name, index);
// set the initial maximized state
window->m_startmaximized = options.maximize();