diff options
author | 2015-07-30 10:22:08 +0200 | |
---|---|---|
committer | 2015-07-30 12:17:47 +0200 | |
commit | a2c42916909303b2885fa352652312466eca0f64 (patch) | |
tree | 4e9fa18245b22fb8594b908c16b4ec9c82fc5bf9 /src/emu/bus/msx_cart | |
parent | 6bcb2f4406d9b03477e2b92cc392e02e345e46fa (diff) |
msx1_cart.xml: Added fs_sr002 mapper based on internal bunsetsu mapper (nw)
Diffstat (limited to 'src/emu/bus/msx_cart')
-rw-r--r-- | src/emu/bus/msx_cart/cartridge.c | 2 | ||||
-rw-r--r-- | src/emu/bus/msx_cart/fs_sr022.c | 72 | ||||
-rw-r--r-- | src/emu/bus/msx_cart/fs_sr022.h | 33 |
3 files changed, 107 insertions, 0 deletions
diff --git a/src/emu/bus/msx_cart/cartridge.c b/src/emu/bus/msx_cart/cartridge.c index 93e419235cd..7f990101a08 100644 --- a/src/emu/bus/msx_cart/cartridge.c +++ b/src/emu/bus/msx_cart/cartridge.c @@ -10,6 +10,7 @@ #include "disk.h" #include "dooly.h" #include "fmpac.h" +#include "fs_sr022.h" #include "halnote.h" #include "hfox.h" #include "holy_quran.h" @@ -39,6 +40,7 @@ SLOT_INTERFACE_START(msx_cart) SLOT_INTERFACE_INTERNAL("rtype", MSX_CART_RTYPE) SLOT_INTERFACE_INTERNAL("majutsushi", MSX_CART_MAJUTSUSHI) SLOT_INTERFACE_INTERNAL("fmpac", MSX_CART_FMPAC) + SLOT_INTERFACE_INTERNAL("fs_sr022", MSX_CART_FS_SR022) SLOT_INTERFACE_INTERNAL("superloderunner", MSX_CART_SUPERLODERUNNER) SLOT_INTERFACE_INTERNAL("synthesizer", MSX_CART_SYNTHESIZER) SLOT_INTERFACE_INTERNAL("cross_blaim", MSX_CART_CROSSBLAIM) diff --git a/src/emu/bus/msx_cart/fs_sr022.c b/src/emu/bus/msx_cart/fs_sr022.c new file mode 100644 index 00000000000..17325f479fd --- /dev/null +++ b/src/emu/bus/msx_cart/fs_sr022.c @@ -0,0 +1,72 @@ +// license:BSD-3-Clause +// copyright-holders:Wilbert Pol +#include "emu.h" +#include "fs_sr022.h" + + +const device_type MSX_CART_FS_SR022 = &device_creator<msx_cart_fs_sr022>; + + +msx_cart_fs_sr022::msx_cart_fs_sr022(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : device_t(mconfig, MSX_CART_FS_SR022, "MSX Cartridge - FS-SR022", tag, owner, clock, "msx_cart_fs_sr022", __FILE__) + , msx_cart_interface(mconfig, *this) + , m_bunsetsu_rom(NULL) + , m_bunsetsu_address(0) +{ +} + + +void msx_cart_fs_sr022::device_start() +{ + save_item(NAME(m_bunsetsu_address)); +} + + +void msx_cart_fs_sr022::device_reset() +{ + m_bunsetsu_address = 0; +} + + +void msx_cart_fs_sr022::initialize_cartridge() +{ + if (get_rom_size() != 0x40000) + { + fatalerror("fs_sr022: Invalid ROM size\n"); + } + m_bunsetsu_rom = get_rom_base() + 0x20000; +} + + +READ8_MEMBER(msx_cart_fs_sr022::read_cart) +{ + if (offset >= 0x4000 && offset < 0xc000) + { + if (offset == 0xbfff) { + return m_bunsetsu_rom[m_bunsetsu_address++ & 0x1ffff]; + } + + return get_rom_base()[offset - 0x4000]; + } + return 0xff; +} + + +WRITE8_MEMBER(msx_cart_fs_sr022::write_cart) +{ + switch (offset) + { + case 0xbffc: + m_bunsetsu_address = (m_bunsetsu_address & 0xffff00) | data; + break; + + case 0xbffd: + m_bunsetsu_address = (m_bunsetsu_address & 0xff00ff) | (data << 8); + break; + + case 0xbffe: + m_bunsetsu_address = (m_bunsetsu_address & 0x00ffff) | (data << 16); + break; + } +} + diff --git a/src/emu/bus/msx_cart/fs_sr022.h b/src/emu/bus/msx_cart/fs_sr022.h new file mode 100644 index 00000000000..edae6296beb --- /dev/null +++ b/src/emu/bus/msx_cart/fs_sr022.h @@ -0,0 +1,33 @@ +// license:BSD-3-Clause +// copyright-holders:Wilbert Pol +#ifndef __MSX_CART_FS_SR022_H +#define __MSX_CART_FS_SR022_H + +#include "bus/msx_cart/cartridge.h" + + +extern const device_type MSX_CART_FS_SR022; + + +class msx_cart_fs_sr022 : public device_t + , public msx_cart_interface +{ +public: + msx_cart_fs_sr022(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); + virtual DECLARE_WRITE8_MEMBER(write_cart); + +private: + const UINT8 *m_bunsetsu_rom; + UINT32 m_bunsetsu_address; +}; + + +#endif |