Previous 199869 Revisions Next

r30816 Tuesday 3rd June, 2014 at 19:30:04 UTC by Wilbert Pol
(MESS) msx.c: Added support for keyboard master prototype. (nw)
[hash]msx1_cart.xml
[src/emu/bus/msx_cart]cartridge.c cartridge.h konami.c konami.h
[src/emu/bus/msx_slot]cartridge.c

trunk/src/emu/bus/msx_slot/cartridge.c
r30815r30816
106106   {
107107      if ( software_entry() )
108108      {
109         UINT32 length;
110
109111         // Allocate and copy rom contents
110         UINT32 length = get_software_region_length("rom");
111
112         length = get_software_region_length("rom");
112113         m_cartridge->rom_alloc( length );
113         UINT8 *rom_base = m_cartridge->get_rom_base();
114         memcpy(rom_base, get_software_region("rom"), length);
114         if (length > 0)
115         {
116            UINT8 *rom_base = m_cartridge->get_rom_base();
117            memcpy(rom_base, get_software_region("rom"), length);
118         }
115119
120         // Allocate and copy vlm5030 rom contents
121         length = get_software_region_length("vlm5030");
122         m_cartridge->rom_vlm5030_alloc(length);
123         if (length > 0)
124         {
125            UINT8 *rom_base = m_cartridge->get_rom_vlm5030_base();
126            memcpy(rom_base, get_software_region("vlm5030"), length);
127         }
128
116129         // Allocate ram
117130         length = get_software_region_length("ram");
118131         m_cartridge->ram_alloc( length );
trunk/src/emu/bus/msx_cart/konami.c
r30815r30816
77const device_type MSX_CART_SYNTHESIZER = &device_creator<msx_cart_synthesizer>;
88const device_type MSX_CART_SOUND_SNATCHER = &device_creator<msx_cart_konami_sound_snatcher>;
99const device_type MSX_CART_SOUND_SDSNATCHER = &device_creator<msx_cart_konami_sound_sdsnatcher>;
10const device_type MSX_CART_KEYBOARD_MASTER = &device_creator<msx_cart_keyboard_master>;
1011
1112
1213msx_cart_konami::msx_cart_konami(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
r30815r30816
866867
867868}
868869
870
871
872msx_cart_keyboard_master::msx_cart_keyboard_master(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
873   : device_t(mconfig, MSX_CART_KEYBOARD_MASTER, "MSX Cartridge - Keyboard Master", tag, owner, clock, "msx_cart_keyboard_master", __FILE__)
874   , msx_cart_interface(mconfig, *this)
875   , m_vlm5030(*this, "vlm5030")
876{
877}
878
879
880static MACHINE_CONFIG_FRAGMENT( msx_cart_keyboard_master )
881   // This is actually incorrect. The sound output is passed back into the MSX machine where it is mixed internally and output through the system 'speaker'.
882   MCFG_SPEAKER_STANDARD_MONO("mono")
883   MCFG_SOUND_ADD("vlm5030", VLM5030, XTAL_3_579545MHz)
884   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
885MACHINE_CONFIG_END
886
887
888machine_config_constructor msx_cart_keyboard_master::device_mconfig_additions() const
889{
890   return MACHINE_CONFIG_NAME( msx_cart_keyboard_master );
891}
892
893
894void msx_cart_keyboard_master::device_start()
895{
896   // Install IO read/write handlers
897   address_space &space = machine().device<cpu_device>("maincpu")->space(AS_IO);
898   space.install_write_handler(0x00, 0x00, write8_delegate(FUNC(vlm5030_device::data_w), m_vlm5030.target()));
899   space.install_write_handler(0x20, 0x20, write8_delegate(FUNC(msx_cart_keyboard_master::io_20_w), this));
900   space.install_read_handler(0x00, 0x00, read8_delegate(FUNC(msx_cart_keyboard_master::io_00_r), this));
901}
902
903
904void msx_cart_keyboard_master::initialize_cartridge()
905{
906   if (get_rom_size() != 0x4000)
907   {
908      fatalerror("keyboard_master: Invalid ROM size\n");
909   }
910   m_vlm5030->set_rom(m_rom_vlm5030);
911}
912
913
914READ8_MEMBER(msx_cart_keyboard_master::read_cart)
915{
916   if (offset >= 0x4000 && offset < 0x8000)
917   {
918      return m_rom[offset & 0x3fff];
919   }
920   return 0xff;
921}
922
923
924WRITE8_MEMBER(msx_cart_keyboard_master::io_20_w)
925{
926   m_vlm5030->rst((data & 0x01) ? 1 : 0);
927   m_vlm5030->vcu((data & 0x04) ? 1 : 0);
928   m_vlm5030->st((data & 0x02) ? 1 : 0);
929}
930
931
932READ8_MEMBER(msx_cart_keyboard_master::io_00_r)
933{
934   return m_vlm5030->bsy() ? 0x10 : 0x00;
935}
936
trunk/src/emu/bus/msx_cart/konami.h
r30815r30816
33
44#include "bus/msx_cart/cartridge.h"
55#include "sound/k051649.h"
6#include "sound/vlm5030.h"
67#include "sound/dac.h"
78
89
r30815r30816
1213extern const device_type MSX_CART_SYNTHESIZER;
1314extern const device_type MSX_CART_SOUND_SNATCHER;
1415extern const device_type MSX_CART_SOUND_SDSNATCHER;
16extern const device_type MSX_CART_KEYBOARD_MASTER;
1517
1618
1719class msx_cart_konami : public device_t
r30815r30816
166168};
167169
168170
171
172class msx_cart_keyboard_master : public device_t
173                  , public msx_cart_interface
174{
175public:
176   msx_cart_keyboard_master(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
177
178   // device-level overrides
179   virtual machine_config_constructor device_mconfig_additions() const;
180   virtual void device_start();
181
182   virtual void initialize_cartridge();
183
184   virtual DECLARE_READ8_MEMBER(read_cart);
185
186   DECLARE_WRITE8_MEMBER(io_20_w);
187   DECLARE_READ8_MEMBER(io_00_r);
188
189private:
190   required_device<vlm5030_device> m_vlm5030;
191};
192
193
194
169195#endif
trunk/src/emu/bus/msx_cart/cartridge.c
r30815r30816
4444   SLOT_INTERFACE_INTERNAL("msxaud_nms1205", MSX_CART_MSX_AUDIO_NMS1205)
4545   SLOT_INTERFACE_INTERNAL("super_swangi", MSX_CART_SUPER_SWANGI)
4646   SLOT_INTERFACE_INTERNAL("hfox", MSX_CART_HFOX)
47   SLOT_INTERFACE_INTERNAL("keyboard_master", MSX_CART_KEYBOARD_MASTER)
4748SLOT_INTERFACE_END
4849
4950
r30815r30816
5859   m_rom.resize(size);
5960}
6061
62void msx_cart_interface::rom_vlm5030_alloc(UINT32 size)
63{
64   m_rom_vlm5030.resize(size);
65}
66
6167void msx_cart_interface::ram_alloc(UINT32 size)
6268{
6369   m_ram.resize(size);
trunk/src/emu/bus/msx_cart/cartridge.h
r30815r30816
2626   // Mainly used by the cartridge slot when loading images
2727   void rom_alloc(UINT32 size);
2828   void ram_alloc(UINT32 size);
29   void rom_vlm5030_alloc(UINT32 size);
2930   void sram_alloc(UINT32 size);
3031
3132   UINT8* get_rom_base() { return m_rom; }
33   UINT8* get_rom_vlm5030_base() { return m_rom_vlm5030; }
3234   UINT8* get_ram_base() { return m_ram; }
3335   UINT8* get_sram_base() { return m_sram; }
3436   UINT32 get_rom_size() { return m_rom.count(); }
37   UINT32 get_rom_vlm5030_size() { return m_rom_vlm5030.count(); }
3538   UINT32 get_ram_size() { return m_ram.count(); }
3639   UINT32 get_sram_size() { return m_sram.count(); }
3740
3841protected:
3942   dynamic_buffer m_rom;
4043   dynamic_buffer m_ram;
44   dynamic_buffer m_rom_vlm5030;
4145   dynamic_buffer m_sram;
4246   devcb_write_line m_out_irq_cb;
4347};
trunk/hash/msx1_cart.xml
r30815r30816
71477147      </part>
71487148   </software>
71497149
7150   <software name="keybmstr">
7151      <description>Keyboard Master (Prototype)</description>
7152      <year>1984</year>
7153      <publisher>Konami</publisher>
7154      <info name="serial" value="RC-719" />
7155      <part name="cart" interface="msx_cart">
7156         <feature name="slot" value="keyboard_master" />
7157         <dataarea name="rom" size="16384">
7158            <rom name="keyboard_master_prototype.rom" size="16384" crc="a076a5ab" sha1="2308dd0f15fb5395a1d8a08489daff65ead8e0f2" offset="0" />
7159         </dataarea>
7160         <dataarea name="vlm5030" size="16384">
7161            <rom name="keyboard_master_vlm5030.rom" size="16384" crc="3ae325dc" sha1="4f36d139ee4baa7d5980f765de9895570ee05f40" offset="0" />
7162         </dataarea>
7163      </part>
7164   </software>
7165
71507166   <software name="legkage">
71517167      <description>Kage no Densetsu - The Legend of Kage (Jpn)</description>
71527168      <year>1986</year>

Previous 199869 Revisions Next


© 1997-2024 The MAME Team