From 51b976d70bb74d8bbbc55346c5a83c429c016adb Mon Sep 17 00:00:00 2001 From: Wilbert Pol Date: Wed, 4 Jun 2014 21:30:17 +0000 Subject: [PATCH] (MESS) msx.c: Added support for Arc (nw) --- .gitattributes | 2 + hash/msx2_flop.xml | 15 ++++---- src/emu/bus/bus.mak | 1 + src/emu/bus/msx_cart/arc.c | 63 ++++++++++++++++++++++++++++++++ src/emu/bus/msx_cart/arc.h | 32 ++++++++++++++++ src/emu/bus/msx_cart/cartridge.c | 2 + 6 files changed, 108 insertions(+), 7 deletions(-) create mode 100644 src/emu/bus/msx_cart/arc.c create mode 100644 src/emu/bus/msx_cart/arc.h diff --git a/.gitattributes b/.gitattributes index 4e4cfc78188..0b7e49ccfbf 100644 --- a/.gitattributes +++ b/.gitattributes @@ -991,6 +991,8 @@ src/emu/bus/midi/midiinport.c svneol=native#text/plain src/emu/bus/midi/midiinport.h svneol=native#text/plain src/emu/bus/midi/midioutport.c svneol=native#text/plain src/emu/bus/midi/midioutport.h svneol=native#text/plain +src/emu/bus/msx_cart/arc.c svneol=native#text/plain +src/emu/bus/msx_cart/arc.h svneol=native#text/plain src/emu/bus/msx_cart/ascii.c svneol=native#text/plain src/emu/bus/msx_cart/ascii.h svneol=native#text/plain src/emu/bus/msx_cart/cartridge.c svneol=native#text/plain diff --git a/hash/msx2_flop.xml b/hash/msx2_flop.xml index 6bea2552515..852c786e8ca 100644 --- a/hash/msx2_flop.xml +++ b/hash/msx2_flop.xml @@ -309,21 +309,22 @@ The following floppies came with the machines. --> - - + Arc 1990 Parallax - - - - - + + + + + + + diff --git a/src/emu/bus/bus.mak b/src/emu/bus/bus.mak index 736aa202cd2..82eeb2df5cd 100644 --- a/src/emu/bus/bus.mak +++ b/src/emu/bus/bus.mak @@ -407,6 +407,7 @@ BUSOBJS += $(BUSOBJ)/msx_slot/ram_mm.o BUSOBJS += $(BUSOBJ)/msx_slot/slot.o BUSOBJS += $(BUSOBJ)/msx_slot/sony08.o OBJDIRS += $(BUSOBJ)/msx_cart +BUSOBJS += $(BUSOBJ)/msx_cart/arc.o BUSOBJS += $(BUSOBJ)/msx_cart/ascii.o BUSOBJS += $(BUSOBJ)/msx_cart/cartridge.o BUSOBJS += $(BUSOBJ)/msx_cart/crossblaim.o diff --git a/src/emu/bus/msx_cart/arc.c b/src/emu/bus/msx_cart/arc.c new file mode 100644 index 00000000000..60d01ee6088 --- /dev/null +++ b/src/emu/bus/msx_cart/arc.c @@ -0,0 +1,63 @@ +#include "emu.h" +#include "arc.h" + + +const device_type MSX_CART_ARC = &device_creator; + + +msx_cart_arc::msx_cart_arc(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : device_t(mconfig, MSX_CART_ARC, "MSX Cartridge - Arc", tag, owner, clock, "msx_cart_arc", __FILE__) + , msx_cart_interface(mconfig, *this) + , m_7f(0) +{ +} + + +void msx_cart_arc::device_start() +{ + // Install IO read/write handlers + address_space &space = machine().device("maincpu")->space(AS_IO); + space.install_write_handler(0x7f, 0x7f, write8_delegate(FUNC(msx_cart_arc::io_7f_w), this)); + space.install_read_handler(0x7f, 0x7f, read8_delegate(FUNC(msx_cart_arc::io_7f_r), this)); +} + + +void msx_cart_arc::device_reset() +{ + m_7f = 0; +} + + +void msx_cart_arc::initialize_cartridge() +{ + if (get_rom_size() != 0x8000) + { + fatalerror("arc: Invalid ROM size\n"); + } +} + + +READ8_MEMBER(msx_cart_arc::read_cart) +{ + if (offset >= 0x4000 && offset < 0xc000) + { + return get_rom_base()[offset - 0x4000]; + } + return 0xff; +} + + +WRITE8_MEMBER(msx_cart_arc::io_7f_w) +{ + if (data == 0x35) + { + m_7f++; + } +} + + +READ8_MEMBER(msx_cart_arc::io_7f_r) +{ + return ((m_7f & 0x03) == 0x03) ? 0xda : 0xff; +} + diff --git a/src/emu/bus/msx_cart/arc.h b/src/emu/bus/msx_cart/arc.h new file mode 100644 index 00000000000..664dc4fe38c --- /dev/null +++ b/src/emu/bus/msx_cart/arc.h @@ -0,0 +1,32 @@ +#ifndef __MSX_CART_ARC_H +#define __MSX_CART_ARC_H + +#include "bus/msx_cart/cartridge.h" + + +extern const device_type MSX_CART_ARC; + + +class msx_cart_arc : public device_t + , public msx_cart_interface +{ +public: + msx_cart_arc(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + // device-level overrides + virtual void device_start(); + virtual void device_reset(); + + virtual void initialize_cartridge(); + + virtual DECLARE_READ8_MEMBER(read_cart); + + DECLARE_WRITE8_MEMBER(io_7f_w); + DECLARE_READ8_MEMBER(io_7f_r); + +private: + UINT8 m_7f; +}; + + +#endif diff --git a/src/emu/bus/msx_cart/cartridge.c b/src/emu/bus/msx_cart/cartridge.c index e5b9fb832d4..74a3614d327 100644 --- a/src/emu/bus/msx_cart/cartridge.c +++ b/src/emu/bus/msx_cart/cartridge.c @@ -1,6 +1,7 @@ #include "emu.h" #include "cartridge.h" +#include "arc.h" #include "ascii.h" #include "crossblaim.h" #include "dooly.h" @@ -51,6 +52,7 @@ SLOT_INTERFACE_START(msx_cart) SLOT_INTERFACE_INTERNAL("holy_quran", MSX_CART_HOLY_QURAN) SLOT_INTERFACE_INTERNAL("dooly", MSX_CART_DOOLY) SLOT_INTERFACE_INTERNAL("halnote", MSX_CART_HALNOTE) + SLOT_INTERFACE_INTERNAL("arc", MSX_CART_ARC) SLOT_INTERFACE_END