diff options
author | 2015-07-30 10:22:08 +0200 | |
---|---|---|
committer | 2015-07-30 12:17:47 +0200 | |
commit | a2c42916909303b2885fa352652312466eca0f64 (patch) | |
tree | 4e9fa18245b22fb8594b908c16b4ec9c82fc5bf9 | |
parent | 6bcb2f4406d9b03477e2b92cc392e02e345e46fa (diff) |
msx1_cart.xml: Added fs_sr002 mapper based on internal bunsetsu mapper (nw)
-rw-r--r-- | hash/msx1_cart.xml | 32 | ||||
-rw-r--r-- | scripts/src/bus.lua | 2 | ||||
-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 |
5 files changed, 124 insertions, 17 deletions
diff --git a/hash/msx1_cart.xml b/hash/msx1_cart.xml index 932070b5aad..fd1041b74c4 100644 --- a/hash/msx1_cart.xml +++ b/hash/msx1_cart.xml @@ -13823,32 +13823,30 @@ legacy FM implementations cannot find it. </software> --> -<!-- Dictionary ROMs? --> - <software name="natjis" supported="no"> - <description>National FS-SR022 MSX-Jisho (Jpn)</description> +<!-- Dictionary ROMs --> + <software name="natjis" supported="partial"> + <description>National FS-SR022 Bunsetsu Henkan Jisho (Jpn)</description> <year>1985</year> <publisher>Matsushita</publisher> + <info name="alt_title" value="文節変換熟語ユニット" /> <part name="cart" interface="msx_cart"> - <dataarea name="rom" size="131072"> - <rom name="jisyo data (japan) (program).rom" size="131072" crc="46e90b77" sha1="765413bb6b03bc3bb888ee8fe00b99ef69c1317a" offset="0" /> - </dataarea> - </part> - </software> - - <software name="natbhjis" supported="no"> - <description>National FS-SR022 MSX Bunsetsu Henkan Jisho (Jpn)</description> - <year>1985</year> - <publisher>Matsushita</publisher> - <part name="cart" interface="msx_cart"> - <dataarea name="rom" size="32768"> - <rom name="msx bunsetsu henkan jisyo (japan) (program).rom" size="32768" crc="381b3431" sha1="8c7ae1a1720b1dae9af9904e638b868f56d905c2" offset="0" /> + <feature name="slot" value="fs_sr022" /> + <feature name="pcb" value="DFUP0058ZAJ" /> + <dataarea name="rom" size="262144"> + <rom name="PRO ROM V1.0 DASR022A1.ic16" size="32768" crc="381b3431" sha1="8c7ae1a1720b1dae9af9904e638b868f56d905c2" offset="0" /> + <!-- The dictionary is in 4 32KB EEPROMs instead of one 128KB rom: + - DIC1 ROM V1.0 DASR022B1.ic15 + - DIC2 ROM V1.0 DASR022C1.ic14 + - DIC3 ROM V1.0 DASR022D1.ic13 + - DIC4 ROM V1.0 DASR022E1.ic12 + --> + <rom name="jisyo data (japan) (program).rom" size="131072" crc="46e90b77" sha1="765413bb6b03bc3bb888ee8fe00b99ef69c1317a" flags="baddump" offset="0x20000" /> </dataarea> </part> </software> - <!-- ARABIC SOFTWARE --> diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua index 07d1c468e93..e8aac7bacc6 100644 --- a/scripts/src/bus.lua +++ b/scripts/src/bus.lua @@ -886,6 +886,8 @@ if (BUSES["MSX_SLOT"]~=null) then MAME_DIR .. "src/emu/bus/msx_cart/dooly.h", MAME_DIR .. "src/emu/bus/msx_cart/fmpac.c", MAME_DIR .. "src/emu/bus/msx_cart/fmpac.h", + MAME_DIR .. "src/emu/bus/msx_cart/fs_sr022.c", + MAME_DIR .. "src/emu/bus/msx_cart/fs_sr022.h", MAME_DIR .. "src/emu/bus/msx_cart/halnote.c", MAME_DIR .. "src/emu/bus/msx_cart/halnote.h", MAME_DIR .. "src/emu/bus/msx_cart/hfox.c", 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 |