Previous 199869 Revisions Next

r30661 Sunday 25th May, 2014 at 13:55:03 UTC by Wilbert Pol
(MESS) msx.c: Fixed support for FS-CA1 MSX Audio firmware and added some notes (nw)
[hash]msx1_cart.xml
[src/emu/bus/msx_cart]msx_audio.c msx_audio.h

trunk/hash/msx1_cart.xml
r30660r30661
1450814508      </part>
1450914509   </software>
1451014510
14511   <software name="fsca1" supported="no">
14511   <software name="fsca1">
1451214512      <description>Panasonic FS-CA1 MSX-Audio + BASIC (Jpn)</description>
1451314513      <year>1988</year>
1451414514      <publisher>Panasonic</publisher>
r30660r30661
1451814518         <dataarea name="rom" size="131072">
1451914519            <rom name="msx audio (japan) (fs-ca1) (program).rom" size="131072" crc="90e893ba" sha1="930eae7057af1652abae794072b296a59decd61b" offset="0" />
1452014520         </dataarea>
14521         <dataarea name="ram" size="4096">
14521         <dataarea name="sram" size="4096">
1452214522         </dataarea>
1452314523      </part>
1452414524   </software>
trunk/src/emu/bus/msx_cart/msx_audio.h
r30660r30661
6565   // device-level overrides
6666   virtual void device_start();
6767   virtual machine_config_constructor device_mconfig_additions() const;
68   virtual ioport_constructor device_input_ports() const;
69   virtual const rom_entry *device_rom_region() const;
6870
6971   virtual void initialize_cartridge();
7072
r30660r30661
7476   DECLARE_WRITE8_MEMBER(write_y8950);
7577   DECLARE_READ8_MEMBER(read_y8950);
7678
79   DECLARE_WRITE8_MEMBER(y8950_io_w);
80   DECLARE_READ8_MEMBER(y8950_io_r);
81
7782private:
7883   required_device<y8950_device> m_y8950;
84   required_ioport m_io_config;
85   required_memory_region m_region_y8950;
7986   UINT8 m_7ffe;
8087   UINT8 m_7fff;
8188};
trunk/src/emu/bus/msx_cart/msx_audio.c
r30660r30661
2828  - multi sensor (?)
2929
3030- Philips NMS-1160
31  - 61 keys: 5 full octaves + high C
32  - Different wiring, so incompatible with the other keyboards
3133
34- Panasonic YK-20
35  - 49 keys: 4 full octaves + high C
3236
3337
3438TODO:
3539- Test MIDI in/out/through
36- Sample RAM
37- Implement NMS-1160 keyboard
40- Sample RAM, doesn't seem to get written to
41- Test NMS-1160 keyboard
3842- HX-MU901: ENTER/SELECT keys and multi sensors
3943- NMS1160: Test the keyboard
44- NMS1205: Add DAC
45- NMS1205/FSCA1: Add muting of dac and y8950 based on io config writes.
4046
47
48For testing the sample ram:
49- Disable firmware on the fs-ca1
50- call audio
51- call copy pcm(#a, b)
52- call play pcm (x)
53
54See also http://www.mccm.hetlab.tk/millennium/milc/gc/topic_26.htm (dutch)
55
56
4157**********************************************************************************/
4258
4359#include "emu.h"
r30660r30661
207223   : device_t(mconfig, MSX_CART_MSX_AUDIO_FSCA1, "MSX Cartridge - MSX-AUDIO FS-CA1", tag, owner, clock, "msx_audio_fsca1", __FILE__)
208224   , msx_cart_interface(mconfig, *this)
209225   , m_y8950(*this, "y8950")
226   , m_io_config(*this, "CONFIG")
227   , m_region_y8950(*this, "y8950")
210228   , m_7ffe(0)
211229   , m_7fff(0)
212230{
r30660r30661
220238   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
221239   MCFG_Y8950_KEYBOARD_WRITE_HANDLER(DEVWRITE8("kbdc", msx_audio_kbdc_port_device, write))
222240   MCFG_Y8950_KEYBOARD_READ_HANDLER(DEVREAD8("kbdc", msx_audio_kbdc_port_device, read))
241   MCFG_Y8950_IO_READ_HANDLER(READ8(msx_cart_msx_audio_fsca1, y8950_io_r))
242   MCFG_Y8950_IO_WRITE_HANDLER(WRITE8(msx_cart_msx_audio_fsca1, y8950_io_w))
223243
224244   MCFG_MSX_AUDIO_KBDC_PORT_ADD("kbdc", msx_audio_keyboards, NULL)
225245MACHINE_CONFIG_END
r30660r30661
231251}
232252
233253
254static INPUT_PORTS_START( msx_audio_fsca1 )
255   PORT_START("CONFIG")
256   PORT_CONFNAME( 0x04, 0x04, "FS-CA1 Firmware switch")
257   PORT_CONFSETTING( 0x04, "On" )
258   PORT_CONFSETTING( 0x00, "Off" )
259   PORT_BIT(0xFB, IP_ACTIVE_HIGH, IPT_UNKNOWN)
260INPUT_PORTS_END
261
262
263ioport_constructor msx_cart_msx_audio_fsca1::device_input_ports() const
264{
265   return INPUT_PORTS_NAME( msx_audio_fsca1 );
266}
267
268
269ROM_START( msx_fsca1 )
270   ROM_REGION(0x8000, "y8950", ROMREGION_ERASE00)
271ROM_END
272
273
274const rom_entry *msx_cart_msx_audio_fsca1::device_rom_region() const
275{
276   return ROM_NAME( msx_fsca1 );
277}
278
279
234280void msx_cart_msx_audio_fsca1::device_start()
235281{
236282   // Install IO read/write handlers
r30660r30661
242288
243289void msx_cart_msx_audio_fsca1::initialize_cartridge()
244290{
245   if (get_rom_size() != 0x20000)
291   if (get_rom_size() < 0x20000)
246292   {
247293      fatalerror("msx_audio_fsca1: Invalid ROM size\n");
248294   }
r30660r30661
251297
252298READ8_MEMBER(msx_cart_msx_audio_fsca1::read_cart)
253299{
254   if (offset < 0x8000)
300   if (m_7ffe == 0 && (offset & 0xB000) == 0x3000)
255301   {
256      if ((offset & 0x3000) == 0x3000)
257      {
258         return m_ram[offset & 0xfff];
259      }
260      return m_rom[offset];
302      return m_sram[offset & 0xfff];
261303   }
262   return 0xff;
304   return m_rom[((m_7ffe & 0x03) << 15) | (offset & 0x7fff)];
263305}
264306
265307
r30660r30661
277319      return;
278320   }
279321
280   if ((offset & 0xb000) == 0x3000)
322   if (m_7ffe == 0 && (offset & 0xb000) == 0x3000)
281323   {
282      m_ram[offset & 0xfff] = data;
324      m_sram[offset & 0xfff] = data;
283325      return;
284326   }
285327
286   printf("msx_cart_msx_audio_fsca1: Unhandled write %02x to %04x\n", data, offset);
328   logerror("msx_cart_msx_audio_fsca1: Unhandled write %02x to %04x\n", data, offset);
287329}
288330
289331
r30660r30661
318360   }
319361}
320362
363
364WRITE8_MEMBER(msx_cart_msx_audio_fsca1::y8950_io_w)
365{
366   logerror("msx_fsca1::y8950_io_w: %02x\n", data);
367}
368
369
370READ8_MEMBER(msx_cart_msx_audio_fsca1::y8950_io_r)
371{
372   return m_io_config->read();
373}
374

Previous 199869 Revisions Next


© 1997-2024 The MAME Team