diff options
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 |
commit | e604b16cf3f76362909107d4dbc0404769c3ce43 (patch) | |
tree | 5e2b5ceee271de4f9b353757f39c50269b231e9e | |
parent | d81fef928a0ab6920541459f09bb35f21656d41b (diff) | |
parent | e6f86fa6738ae3d108da1e0d28e3b09ceb9cc989 (diff) |
Merge remote-tracking branch 'upstream/master' into interpro
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(); |