summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Wilbert Pol <wilbert@jdg.info>2014-06-01 20:57:05 +0000
committer Wilbert Pol <wilbert@jdg.info>2014-06-01 20:57:05 +0000
commitb62fbf9b2e1ee3bc8a27c0901c24fc9af34a211a (patch)
tree408da196df7f6b3f6d967cc6ac41173c4f2030ea
parentae9df7ad5bfec851d727d27057537b0a99c3b2b8 (diff)
(MESS) msx.c: Added support for mapper used by Super Swangi (nw)
-rw-r--r--.gitattributes2
-rw-r--r--hash/msx1_cart.xml16
-rw-r--r--src/emu/bus/bus.mak1
-rw-r--r--src/emu/bus/msx_cart/cartridge.c2
-rw-r--r--src/emu/bus/msx_cart/super_swangi.c71
-rw-r--r--src/emu/bus/msx_cart/super_swangi.h33
6 files changed, 124 insertions, 1 deletions
diff --git a/.gitattributes b/.gitattributes
index 7ac57617c6c..3894d3ae50a 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1015,6 +1015,8 @@ src/emu/bus/msx_cart/nomapper.c svneol=native#text/plain
src/emu/bus/msx_cart/nomapper.h svneol=native#text/plain
src/emu/bus/msx_cart/rtype.c svneol=native#text/plain
src/emu/bus/msx_cart/rtype.h svneol=native#text/plain
+src/emu/bus/msx_cart/super_swangi.c svneol=native#text/plain
+src/emu/bus/msx_cart/super_swangi.h svneol=native#text/plain
src/emu/bus/msx_cart/superloderunner.c svneol=native#text/plain
src/emu/bus/msx_cart/superloderunner.h svneol=native#text/plain
src/emu/bus/msx_cart/yamaha.c svneol=native#text/plain
diff --git a/hash/msx1_cart.xml b/hash/msx1_cart.xml
index 79917ce8644..af69bb947ca 100644
--- a/hash/msx1_cart.xml
+++ b/hash/msx1_cart.xml
@@ -192,7 +192,6 @@ Super Bioman II - Hello Soft
Super Bioman III - Hello Soft
Super Bros. World 1 ~ 슈퍼 브로스 월드 1 - Clover
Super Penguin ~ 슈퍼 펭귄 - Sieco
-Super Suwanggi - Clover
Tetris - Saeron
Tom &amp; Jerry ~ 톰과 제리 - Static Soft/Aproman
@@ -16722,6 +16721,21 @@ legacy FM implementations cannot find it.
</software>
+<!-- CLOVER -->
+
+ <software name="superswa">
+ <description>Super Swangi - Super Altered Beast</description>
+ <year>1990</year>
+ <publisher>Clover</publisher>
+ <part name="cart" interface="msx_cart">
+ <feature name="slot" value="super_swangi" />
+ <dataarea name="rom" size="65536">
+ <rom name="super_swangi.rom" size="65536" crc="c59b86a1" sha1="3d330e3c97ee3e2e362c8a0fc2cfac69af5ace81" offset="0x0" />
+ </dataarea>
+ </part>
+ </software>
+
+
<!-- METHALI -->
<software name="back">
diff --git a/src/emu/bus/bus.mak b/src/emu/bus/bus.mak
index e736f1c7a0e..9aba456baba 100644
--- a/src/emu/bus/bus.mak
+++ b/src/emu/bus/bus.mak
@@ -420,6 +420,7 @@ BUSOBJS += $(BUSOBJ)/msx_cart/msxdos2.o
BUSOBJS += $(BUSOBJ)/msx_cart/nomapper.o
BUSOBJS += $(BUSOBJ)/msx_cart/rtype.o
BUSOBJS += $(BUSOBJ)/msx_cart/superloderunner.o
+BUSOBJS += $(BUSOBJ)/msx_cart/super_swangi.o
BUSOBJS += $(BUSOBJ)/msx_cart/yamaha.o
endif
diff --git a/src/emu/bus/msx_cart/cartridge.c b/src/emu/bus/msx_cart/cartridge.c
index 3111e72275e..fc686b79443 100644
--- a/src/emu/bus/msx_cart/cartridge.c
+++ b/src/emu/bus/msx_cart/cartridge.c
@@ -12,6 +12,7 @@
#include "nomapper.h"
#include "rtype.h"
#include "superloderunner.h"
+#include "super_swangi.h"
#include "yamaha.h"
@@ -40,6 +41,7 @@ SLOT_INTERFACE_START(msx_cart)
SLOT_INTERFACE_INTERNAL("msxaud_hxmu900", MSX_CART_MSX_AUDIO_HXMU900)
SLOT_INTERFACE_INTERNAL("msxaud_fsca1", MSX_CART_MSX_AUDIO_FSCA1)
SLOT_INTERFACE_INTERNAL("msxaud_nms1205", MSX_CART_MSX_AUDIO_NMS1205)
+ SLOT_INTERFACE_INTERNAL("super_swangi", MSX_CART_SUPER_SWANGI)
SLOT_INTERFACE_END
diff --git a/src/emu/bus/msx_cart/super_swangi.c b/src/emu/bus/msx_cart/super_swangi.c
new file mode 100644
index 00000000000..f3505f787fc
--- /dev/null
+++ b/src/emu/bus/msx_cart/super_swangi.c
@@ -0,0 +1,71 @@
+#include "emu.h"
+#include "super_swangi.h"
+
+
+const device_type MSX_CART_SUPER_SWANGI = &device_creator<msx_cart_super_swangi>;
+
+
+msx_cart_super_swangi::msx_cart_super_swangi(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, MSX_CART_SUPER_SWANGI, "MSX Cartridge - Super Swangi", tag, owner, clock, "msx_cart_super_swangi", __FILE__)
+ , msx_cart_interface(mconfig, *this)
+ , m_selected_bank(0)
+{
+ m_bank_base[0] = m_bank_base[1] = NULL;
+}
+
+
+void msx_cart_super_swangi::device_start()
+{
+ save_item(NAME(m_selected_bank));
+
+ machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_super_swangi::restore_banks), this));
+}
+
+
+void msx_cart_super_swangi::restore_banks()
+{
+ m_bank_base[0] = get_rom_base();
+ m_bank_base[1] = get_rom_base() + (((m_selected_bank >> 1) * 0x4000) & 0xffff);
+}
+
+
+void msx_cart_super_swangi::device_reset()
+{
+ m_selected_bank = 0;
+}
+
+
+void msx_cart_super_swangi::initialize_cartridge()
+{
+ if (get_rom_size() < 0x10000)
+ {
+ fatalerror("rtype: Invalid ROM size\n");
+ }
+
+ restore_banks();
+}
+
+
+READ8_MEMBER(msx_cart_super_swangi::read_cart)
+{
+ if (offset >= 0x4000 && offset < 0xc000)
+ {
+ return m_bank_base[offset >> 15][offset & 0x3fff];
+ }
+ return 0xff;
+}
+
+
+WRITE8_MEMBER(msx_cart_super_swangi::write_cart)
+{
+ if (offset == 0x8000)
+ {
+ m_selected_bank = data;
+ restore_banks();
+ }
+ else
+ {
+ logerror("msx_cart_super_swangi: unhandled write %02x to %04x\n", data, offset);
+ }
+}
+
diff --git a/src/emu/bus/msx_cart/super_swangi.h b/src/emu/bus/msx_cart/super_swangi.h
new file mode 100644
index 00000000000..7b2ec4e069c
--- /dev/null
+++ b/src/emu/bus/msx_cart/super_swangi.h
@@ -0,0 +1,33 @@
+#ifndef __MSX_CART_SUPER_SWANGI_H
+#define __MSX_CART_SUPER_SWANGI_H
+
+#include "bus/msx_cart/cartridge.h"
+
+
+extern const device_type MSX_CART_SUPER_SWANGI;
+
+
+class msx_cart_super_swangi : public device_t
+ , public msx_cart_interface
+{
+public:
+ msx_cart_super_swangi(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);
+
+ void restore_banks();
+
+private:
+ UINT8 m_selected_bank;
+ UINT8 *m_bank_base[2];
+};
+
+
+#endif