Previous 199869 Revisions Next

r31042 Thursday 19th June, 2014 at 19:28:41 UTC by Wilbert Pol
(MESS) msx.c: Added microsol fdc; marked a few more drivers as working. (nw)
[src/emu/bus/msx_slot]disk.c disk.h
[src/mess/drivers]msx.c
[src/mess/includes]msx.h

trunk/src/mess/drivers/msx.c
r31041r31042
2626** - y503iir, y503iir2: Net not emulated
2727** - y503iir, y503iir2: Floppy support broken
2828** - cpc300: Config for MSX Tutor ON/OFF is not saved
29** - expert20: Does not boot
3029** - fs4600: Kanji12 not emulated; how to trigger usage of kanji12??
3130** - fsa1fm: Firmware not emulated
3231** - fsa1fm: kanji12 not emulated
3332** - fsa1fm: Modem not emulated
3433** - nms8280, nms8280g: Digitizer functionality not emulated
3534** - vg8230j: Floppy support broken?
36** - hotbit20: Does not boot
3735** - hbf1: Does not boot. This seems to be caused by a raise condition between setting the VBlank bit in the
3836**         VDP status register and the z80 taking the interrupt. Currently the interrupt gets taken before the
3937**         bit can be read, so the code goes into an infinite loop.
r31041r31042
11621160MACHINE_CONFIG_END
11631161
11641162static MACHINE_CONFIG_FRAGMENT( msx_microsol )
1165   // TODO: Implement MICROSOL, the fragment below is to keep the core happy
11661163   MCFG_WD2793x_ADD("fdc", XTAL_4MHz / 4)
11671164   MCFG_WD_FDC_FORCE_READY
11681165MACHINE_CONFIG_END
r31041r31042
33083305   MCFG_MSX_LAYOUT_CARTRIDGE("cartslot1", 1, 0)
33093306   MCFG_MSX_LAYOUT_ROM("ext", 1, 1, 0, 1, "maincpu", 0x8000) /* EXT */
33103307   MCFG_MSX_LAYOUT_ROM("xbasic", 1, 1, 1, 1, "maincpu", 0x20000) /* BASIC */
3311   MCFG_MSX_LAYOUT_DISK1("disk", 1, 3, 1, 1, "maincpu", 0x24000) /* Microsol controller */
3308   MCFG_MSX_LAYOUT_DISK5("disk", 1, 3, 1, 1, "maincpu", 0x24000) /* Microsol controller */
33123309   MCFG_MSX_LAYOUT_RAM_MM("ram_mm", 2, 0, 0x20000)   /* 128KB Mapper RAM */
33133310   MCFG_MSX_RAMIO_SET_BITS(0x80)
33143311   MCFG_MSX_LAYOUT_CARTRIDGE("cartslot2", 3, 0)
r31041r31042
43554352   MCFG_MSX_LAYOUT_CARTRIDGE("cartslot1", 1, 0)
43564353   MCFG_MSX_LAYOUT_ROM("ext", 1, 1, 0, 1, "maincpu", 0x8000) /* EXT */
43574354   MCFG_MSX_LAYOUT_ROM("xbasic", 1, 1, 1, 1, "maincpu", 0x20000) /* BASIC */
4358   MCFG_MSX_LAYOUT_DISK1("disk", 1, 3, 1, 1, "maincpu", 0x24000) /* Microsol controller */
4355   MCFG_MSX_LAYOUT_DISK5("disk", 1, 3, 1, 1, "maincpu", 0x24000) /* Microsol controller */
43594356   MCFG_MSX_LAYOUT_RAM_MM("ram_mm", 2, 0, 0x20000)   /* 128KB Mapper RAM */
43604357   MCFG_MSX_RAMIO_SET_BITS(0x80)
43614358   MCFG_MSX_LAYOUT_CARTRIDGE("cartslot2", 3, 0)
r31041r31042
59055902COMP(1985, msx2,      0,        msx,    msx2_gen, msx2, msx_state,     msx,     "ASCII & Microsoft", "MSX2", 0)
59065903COMP(1986, ax350,     msx2,     0,      ax350,    msx2, msx_state,     msx,     "Al Alamiah", "AX-350", 0)
59075904COMP(1986, ax370,     msx2,     0,      ax370,    msx2, msx_state,     msx,     "Al Alamiah", "AX-370", 0)
5908COMP(1986, expert20,  msx2,     0,      expert20, msx2, msx_state,     msx,     "Gradiente", "Expert 2.0 (Brazil)" , GAME_NOT_WORKING) // Black screen
5905COMP(1986, expert20,  msx2,     0,      expert20, msx2, msx_state,     msx,     "Gradiente", "Expert 2.0 (Brazil)" , 0)
59095906COMP(1986, nms8220,   msx2,     0,      nms8220,  msx2, msx_state,     msx,     "Philips", "NMS-8220 (12-jun-1986)", 0)
59105907COMP(1986, nms8220a,  msx2,     0,      nms8220a, msx2, msx_state,     msx,     "Philips", "NMS-8220 (13-aug-1986)", 0)
59115908COMP(1986, vg8230,    msx2,     0,      vg8230,   msx2, msx_state,     msx,     "Philips", "VG-8230", 0)
r31041r31042
59295926COMP(1985, hbf700s,   msx2,     0,      hbf700s,  msx2, msx_state,     msx,     "Sony", "HB-F700S (Spain)", 0)
59305927COMP(1986, hbg900ap,  msx2,     0,      hbg900ap, msx2, msx_state,     msx,     "Sony", "HB-G900AP", 0 )
59315928COMP(1986, hbg900p,   msx2,     0,      hbg900p,  msx2, msx_state,     msx,     "Sony", "HB-G900P", 0 )
5932COMP(1986, hotbit20,  msx2,     0,      hotbit20, msx2, msx_state,     msx,     "Sharp / Epcom", "HB-8000 Hotbit 2.0" , GAME_NOT_WORKING) // Black screen
5929COMP(1986, hotbit20,  msx2,     0,      hotbit20, msx2, msx_state,     msx,     "Sharp / Epcom", "HB-8000 Hotbit 2.0" , 0) // Black screen
59335930COMP(1986, tpc310,    msx2,     0,      tpc310,   msx2, msx_state,     msx,     "Talent", "TPC-310", 0)
59345931COMP(19??, tpp311,    msx2,     0,      tpp311,   msx2, msx_state,     msx,     "Talent", "TPP-311", 0)
59355932COMP(19??, tps312,    msx2,     0,      tps312,   msx2, msx_state,     msx,     "Talent", "TPS-312", 0)
r31041r31042
59375934COMP(1986, hx23f,     msx2,     0,      hx23f,    msx2, msx_state,     msx,     "Toshiba", "HX-23F", 0)
59385935COMP(1986, cx7m,      msx2,     0,      cx7m,     msx2, msx_state,     msx,     "Yamaha", "CX7M" , 0)
59395936COMP(1986, cx7m128,   msx2,     0,      cx7m128,  msx2, msx_state,     msx,     "Yamaha", "CX7M-128", 0)
5940COMP(1983, mlg30,     msx2,     0,      mlg30,    msx2, msx_state,     msx,     "Mistubishi", "ML-G30", GAME_NOT_WORKING) // Screen flashes a few times before going into basic
5937COMP(1983, mlg30,     msx2,     0,      mlg30,    msx2, msx_state,     msx,     "Mistubishi", "ML-G30", 0)
59415938COMP(1985, fs5500f1,  msx2,     0,      fs5500f1, msx2jp, msx_state,   msx,     "National / Matsushita", "FS-5500F1 (Japan)", 0 )
59425939COMP(1985, fs5500f2,  msx2,     0,      fs5500f2, msx2jp, msx_state,   msx,     "National / Matsushita", "FS-5500F2 (Japan)", 0 )
59435940COMP(1986, fs4500,    msx2,     0,      fs4500,   msx2jp, msx_state,   msx,     "National / Matsushita", "FS-4500 (Japan)", 0 )
r31041r31042
59495946COMP(1987, fsa1mk2,   msx2,     0,      fsa1mk2,  msx2jp, msx_state,   msx,     "Panasonic / Matsushita", "FS-A1MK2 (Japan)", 0)
59505947COMP(1987, fsa1f,     msx2,     0,      fsa1f,    msx2jp, msx_state,   msx,     "Panasonic / Matsushita", "FS-A1F (Japan)", 0 )
59515948COMP(1987, fsa1fm,    msx2,     0,      fsa1fm,   msx2jp, msx_state,   msx,     "Panasonic / Matsushita", "FS-A1FM (Japan)", 0 )
5952COMP(19??, nms8250j,  msx2,     0,      nms8250j, msx2jp, msx_state,   msx,     "Philips", "NMS-8250J", GAME_NOT_WORKING) // Screen flashes a few times before going into basic
5949COMP(19??, nms8250j,  msx2,     0,      nms8250j, msx2jp, msx_state,   msx,     "Philips", "NMS-8250J", 0)
59535950COMP(19??, vg8230j,   msx2,     0,      vg8230j,  msx2jp, msx_state,   msx,     "Philips", "VG-8230J", GAME_NOT_WORKING) // Screen flashes a few times before going into basic
59545951COMP(1986, hbf500,    msx2,     0,      hbf500,   msx2jp, msx_state,   msx,     "Sony", "HB-F500 (Japan)", 0)
59555952COMP(1986, hbf900,    msx2,     0,      hbf900,   msx2jp, msx_state,   msx,     "Sony", "HB-F900 / 1st released version (Japan)", 0)
r31041r31042
59595956COMP(1987, hbf1xd,    msx2,     0,      hbf1xd,   msx2jp, msx_state,   msx,     "Sony", "HB-F1XD (Japan)", 0)
59605957COMP(1988, hbf1xdm2,  msx2,     0,      hbf1xdm2, msx2jp, msx_state,   msx,     "Sony", "HB-F1XDMK2 (Japan)", 0)
59615958COMP(19??, mpc2300,   msx2,     0,      mpc2300,  msx2, msx_state,     msx,     "Sanyo", "MPC-2300", GAME_NOT_WORKING) // Keyboard responds differently
5962COMP(19??, mpc25fd,   msx2,     0,      mpc25fd,  msx2, msx_state,     msx,     "Sanyo", "Wavy MPC-25FD", GAME_NOT_WORKING) // Screen stays black
5959COMP(19??, mpc25fd,   msx2,     0,      mpc25fd,  msx2, msx_state,     msx,     "Sanyo", "Wavy MPC-25FD", 0)
59635960COMP(1988, phc23,     msx2,     0,      phc23,    msx2jp, msx_state,   msx,     "Sanyo", "Wavy PHC-23 (Japan)", 0)
59645961COMP(1986, cpc300,    msx2,     0,      cpc300,   msx2kr, msx_state,   msx,     "Daewoo", "IQ-2000 CPC-300 (Korea)", 0)
59655962COMP(1986, cpc300e,   msx2,     0,      cpc300e,  msx2kr, msx_state,   msx,     "Daewoo", "IQ-2000 CPC-300E (Korea)", 0)
trunk/src/mess/includes/msx.h
r31041r31042
8383   MCFG_MSX_SLOT_DISK4_ADD(_tag, _page, _numpages, _region, _offset, "fdc", "fdc:0", "fdc:1") \
8484   msx_state::install_slot_pages(*owner, _prim, _sec, _page, _numpages, device);
8585
86#define MCFG_MSX_LAYOUT_DISK5(_tag, _prim, _sec, _page, _numpages, _region, _offset) \
87   MCFG_MSX_SLOT_DISK5_ADD(_tag, _page, _numpages, _region, _offset, "fdc", "fdc:0", "fdc:1", "fdc:2", "fdc:3") \
88   msx_state::install_slot_pages(*owner, _prim, _sec, _page, _numpages, device);
89
8690#define MCFG_MSX_LAYOUT_MUSIC(_tag, _prim, _sec, _page, _numpages, _region, _offset) \
8791   MCFG_MSX_SLOT_MUSIC_ADD(_tag, _page, _numpages, _region, _offset, "ym2413" ) \
8892   msx_state::install_slot_pages(*owner, _prim, _sec, _page, _numpages, device);
trunk/src/emu/bus/msx_slot/disk.c
r31041r31042
3737const device_type MSX_SLOT_DISK2 = &device_creator<msx_slot_disk2_device>;
3838const device_type MSX_SLOT_DISK3 = &device_creator<msx_slot_disk3_device>;
3939const device_type MSX_SLOT_DISK4 = &device_creator<msx_slot_disk4_device>;
40const device_type MSX_SLOT_DISK5 = &device_creator<msx_slot_disk5_device>;
4041
4142
4243msx_slot_disk_device::msx_slot_disk_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source)
4344   : msx_slot_rom_device(mconfig, type, name, tag, owner, clock, shortname, source)
4445   , m_floppy0(NULL)
4546   , m_floppy1(NULL)
47   , m_floppy2(NULL)
48   , m_floppy3(NULL)
4649   , m_floppy(NULL)
4750   , m_fdc_tag(NULL)
4851   , m_floppy0_tag(NULL)
4952   , m_floppy1_tag(NULL)
53   , m_floppy2_tag(NULL)
54   , m_floppy3_tag(NULL)
5055{
5156}
5257
r31041r31042
6065      fatalerror("msx_slot_disk_device: no FDC tag specified\n");
6166   }
6267
63   m_floppy0 = owner()->subdevice<floppy_connector>(m_floppy0_tag);
64   m_floppy1 = owner()->subdevice<floppy_connector>(m_floppy1_tag);
68   m_floppy0 = m_floppy0_tag ? owner()->subdevice<floppy_connector>(m_floppy0_tag) : NULL;
69   m_floppy1 = m_floppy1_tag ? owner()->subdevice<floppy_connector>(m_floppy1_tag) : NULL;
70   m_floppy2 = m_floppy2_tag ? owner()->subdevice<floppy_connector>(m_floppy2_tag) : NULL;
71   m_floppy3 = m_floppy3_tag ? owner()->subdevice<floppy_connector>(m_floppy3_tag) : NULL;
6572
6673   if (m_floppy0 == NULL && m_floppy1 == NULL)
6774   {
r31041r31042
508515   return msx_slot_rom_device::read(space, offset);
509516}
510517
518
519
520
521msx_slot_disk5_device::msx_slot_disk5_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
522   : msx_slot_wd_disk_device(mconfig, MSX_SLOT_DISK5, "MSX Internal floppy type 5", tag, owner, clock, "msx_slot_disk5", __FILE__)
523   , m_control(0)
524{
525}
526
527
528void msx_slot_disk5_device::device_start()
529{
530   msx_slot_wd_disk_device::device_start();
531
532   save_item(NAME(m_control));
533
534   machine().save().register_postload(save_prepost_delegate(FUNC(msx_slot_disk5_device::post_load), this));
535
536   // Install IO read/write handlers
537   address_space &space = machine().device<cpu_device>("maincpu")->space(AS_IO);
538   space.install_write_handler(0xd0, 0xd4, write8_delegate(FUNC(msx_slot_disk5_device::io_write), this));
539   space.install_read_handler(0xd0, 0xd4, read8_delegate(FUNC(msx_slot_disk5_device::io_read), this));
540}
541
542
543void msx_slot_disk5_device::device_reset()
544{
545   m_fdc->dden_w(false);
546}
547
548
549void msx_slot_disk5_device::post_load()
550{
551   set_control(m_control);
552}
553
554
555void msx_slot_disk5_device::set_control(UINT8 control)
556{
557   m_control = control;
558
559   switch (m_control & 0x0f)
560   {
561      case 0x01:
562         m_floppy = m_floppy0 ? m_floppy0->get_device() : NULL;
563         break;
564
565      case 0x02:
566         m_floppy = m_floppy1 ? m_floppy1->get_device() : NULL;
567         break;
568
569      case 0x04:
570         m_floppy = m_floppy2 ? m_floppy2->get_device() : NULL;
571         break;
572
573      case 0x08:
574         m_floppy = m_floppy3 ? m_floppy3->get_device() : NULL;
575         break;
576
577      default:
578         m_floppy = NULL;
579         break;
580   }
581
582   if (m_floppy)
583   {
584      m_floppy->mon_w((m_control & 0x20) ? 0 : 1);
585      m_floppy->ss_w((m_control & 0x10) ? 1 : 0);
586   }
587
588   m_fdc->set_floppy(m_floppy);
589}
590
591
592READ8_MEMBER(msx_slot_disk5_device::io_read)
593{
594   switch (offset)
595   {
596      case 0x00:
597         return m_fdc->status_r();
598
599      case 0x01:
600         return m_fdc->track_r();
601
602      case 0x02:
603         return m_fdc->sector_r();
604
605      case 0x03:
606         return m_fdc->data_r();
607
608      case 0x04:
609         return 0x3f | (m_fdc->drq_r() ? 0 : 0x40) | (m_fdc->intrq_r() ? 0x80 : 0);
610   }
611
612   return 0xff;
613}
614
615
616WRITE8_MEMBER(msx_slot_disk5_device::io_write)
617{
618   switch (offset)
619   {
620      case 0x00:
621         m_fdc->cmd_w(data);
622         break;
623
624      case 0x01:
625         m_fdc->track_w(data);
626         break;
627
628      case 0x02:
629         m_fdc->sector_w(data);
630         break;
631
632      case 0x03:
633         m_fdc->data_w(data);
634         break;
635
636      case 0x04:
637         set_control(data);
638         break;
639   }
640}
641
642
trunk/src/emu/bus/msx_slot/disk.h
r31041r31042
1717extern const device_type MSX_SLOT_DISK3;
1818/* TC8566 accessed through 7ff0-7ff7 (used in Turob-R, untested) */
1919extern const device_type MSX_SLOT_DISK4;
20/* WD FDC accessed through i/o ports 0xd0-0xd4 */
21extern const device_type MSX_SLOT_DISK5;
2022
23
2124#define MCFG_MSX_SLOT_DISK1_ADD(_tag, _startpage, _numpages, _region, _offset, _fdc_tag, _floppy0_tag, _floppy1_tag) \
2225   MCFG_MSX_INTERNAL_SLOT_ADD(_tag, MSX_SLOT_DISK1, _startpage, _numpages) \
2326   msx_slot_rom_device::set_rom_start(*device, _region, _offset); \
r31041r31042
4649   msx_slot_disk_device::set_floppy0_tag(*device, _floppy0_tag); \
4750   msx_slot_disk_device::set_floppy1_tag(*device, _floppy1_tag);
4851
52#define MCFG_MSX_SLOT_DISK5_ADD(_tag, _startpage, _numpages, _region, _offset, _fdc_tag, _floppy0_tag, _floppy1_tag, _floppy2_tag, _floppy3_tag) \
53   MCFG_MSX_INTERNAL_SLOT_ADD(_tag, MSX_SLOT_DISK5, _startpage, _numpages) \
54   msx_slot_rom_device::set_rom_start(*device, _region, _offset); \
55   msx_slot_disk_device::set_fdc_tag(*device, _fdc_tag); \
56   msx_slot_disk_device::set_floppy0_tag(*device, _floppy0_tag); \
57   msx_slot_disk_device::set_floppy1_tag(*device, _floppy1_tag); \
58   msx_slot_disk_device::set_floppy2_tag(*device, _floppy2_tag); \
59   msx_slot_disk_device::set_floppy3_tag(*device, _floppy3_tag);
4960
61
5062class msx_slot_disk_device : public msx_slot_rom_device
5163{
5264public:
r31041r31042
5870   static void set_fdc_tag(device_t &device, const char *tag) { dynamic_cast<msx_slot_disk_device &>(device).m_fdc_tag = tag; }
5971   static void set_floppy0_tag(device_t &device, const char *tag) { dynamic_cast<msx_slot_disk_device &>(device).m_floppy0_tag = tag; }
6072   static void set_floppy1_tag(device_t &device, const char *tag) { dynamic_cast<msx_slot_disk_device &>(device).m_floppy1_tag = tag; }
73   static void set_floppy2_tag(device_t &device, const char *tag) { dynamic_cast<msx_slot_disk_device &>(device).m_floppy2_tag = tag; }
74   static void set_floppy3_tag(device_t &device, const char *tag) { dynamic_cast<msx_slot_disk_device &>(device).m_floppy3_tag = tag; }
6175
6276protected:
6377   floppy_connector *m_floppy0;
6478   floppy_connector *m_floppy1;
79   floppy_connector *m_floppy2;
80   floppy_connector *m_floppy3;
6581   floppy_image_device *m_floppy;
6682
6783   const char *m_fdc_tag;
6884   const char *m_floppy0_tag;
6985   const char *m_floppy1_tag;
86   const char *m_floppy2_tag;
87   const char *m_floppy3_tag;
7088};
7189
7290
r31041r31042
156174};
157175
158176
177class msx_slot_disk5_device : public msx_slot_wd_disk_device
178{
179public:
180   msx_slot_disk5_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
181
182   virtual void device_start();
183   virtual void device_reset();
184
185   DECLARE_READ8_MEMBER(io_read);
186   DECLARE_WRITE8_MEMBER(io_write);
187
188    void post_load();
189
190private:
191   UINT8 m_control;
192
193   void set_control(UINT8 control);
194};
195
196
159197#endif
160198

Previous 199869 Revisions Next


© 1997-2024 The MAME Team