Previous 199869 Revisions Next

r32651 Saturday 11th October, 2014 at 12:58:54 UTC by Wilbert Pol
(MESS) msx.c: Fixed floppy support for the hx34 and hx34i drivers. (nw)
[src/emu/bus/msx_slot]disk.c disk.h
[src/mess/drivers]msx.c
[src/mess/includes]msx.h

trunk/src/emu/bus/msx_slot/disk.h
r32650r32651
1919extern const device_type MSX_SLOT_DISK4;
2020/* WD FDC accessed through i/o ports 0xd0-0xd4 */
2121extern const device_type MSX_SLOT_DISK5;
22/* WD FDC accessed through 7ff0-7ff? (used in Toshiba HX34) */
23extern const device_type MSX_SLOT_DISK6;
2224
2325
2426#define MCFG_MSX_SLOT_DISK1_ADD(_tag, _startpage, _numpages, _region, _offset, _fdc_tag, _floppy0_tag, _floppy1_tag) \
r32650r32651
5860   msx_slot_disk_device::set_floppy2_tag(*device, _floppy2_tag); \
5961   msx_slot_disk_device::set_floppy3_tag(*device, _floppy3_tag);
6062
63#define MCFG_MSX_SLOT_DISK6_ADD(_tag, _startpage, _numpages, _region, _offset, _fdc_tag, _floppy0_tag, _floppy1_tag) \
64   MCFG_MSX_INTERNAL_SLOT_ADD(_tag, MSX_SLOT_DISK6, _startpage, _numpages) \
65   msx_slot_rom_device::set_rom_start(*device, _region, _offset); \
66   msx_slot_disk_device::set_fdc_tag(*device, _fdc_tag); \
67   msx_slot_disk_device::set_floppy0_tag(*device, _floppy0_tag); \
68   msx_slot_disk_device::set_floppy1_tag(*device, _floppy1_tag);
6169
70
6271class msx_slot_disk_device : public msx_slot_rom_device
6372{
6473public:
r32650r32651
194203};
195204
196205
206class msx_slot_disk6_device : public msx_slot_wd_disk_device
207{
208public:
209   msx_slot_disk6_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
210
211   virtual void device_start();
212   virtual void device_reset();
213
214   virtual DECLARE_READ8_MEMBER(read);
215   virtual DECLARE_WRITE8_MEMBER(write);
216
217   void post_load();
218
219private:
220   UINT8 m_side_motor;
221   UINT8 m_drive_select0;
222   UINT8 m_drive_select1;
223
224   void set_side_motor();
225   void select_drive();
226};
227
228
197229#endif
trunk/src/emu/bus/msx_slot/disk.c
r32650r32651
3838const device_type MSX_SLOT_DISK3 = &device_creator<msx_slot_disk3_device>;
3939const device_type MSX_SLOT_DISK4 = &device_creator<msx_slot_disk4_device>;
4040const device_type MSX_SLOT_DISK5 = &device_creator<msx_slot_disk5_device>;
41const device_type MSX_SLOT_DISK6 = &device_creator<msx_slot_disk6_device>;
4142
4243
4344msx_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)
r32650r32651
638639         break;
639640   }
640641}
642
643
644
645msx_slot_disk6_device::msx_slot_disk6_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
646   : msx_slot_wd_disk_device(mconfig, MSX_SLOT_DISK6, "MSX Internal floppy type 6", tag, owner, clock, "msx_slot_disk6", __FILE__)
647   , m_side_motor(0)
648   , m_drive_select0(0)
649   , m_drive_select1(0)
650{
651}
652
653
654void msx_slot_disk6_device::device_start()
655{
656   msx_slot_wd_disk_device::device_start();
657
658   save_item(NAME(m_side_motor));
659   save_item(NAME(m_drive_select0));
660   save_item(NAME(m_drive_select1));
661
662   machine().save().register_postload(save_prepost_delegate(FUNC(msx_slot_disk6_device::post_load), this));
663}
664
665
666void msx_slot_disk6_device::device_reset()
667{
668   m_fdc->dden_w(false);
669}
670
671
672void msx_slot_disk6_device::post_load()
673{
674   select_drive();
675}
676
677
678void msx_slot_disk6_device::select_drive()
679{
680   if (m_drive_select1)   
681   {
682      m_floppy = m_floppy1 ? m_floppy1->get_device() : NULL;
683      if (!m_floppy)
684      {
685         m_drive_select1 = 0;
686      }
687   }
688
689   if (m_drive_select0)
690   {
691      m_floppy = m_floppy0 ? m_floppy0->get_device() : NULL;
692      if (!m_floppy)
693      {
694         m_drive_select0 = 0;
695      }
696   }
697
698   m_fdc->set_floppy(m_floppy);
699
700   set_side_motor();
701}
702
703
704void msx_slot_disk6_device::set_side_motor()
705{
706   if (m_floppy)
707   {
708      m_floppy->mon_w((m_side_motor & 0x02) ? 0 : 1);
709      m_floppy->ss_w(m_side_motor & 0x01);
710   }
711}
712
713
714READ8_MEMBER(msx_slot_disk6_device::read)
715{
716   switch (offset)
717   {
718      case 0x7ff0:   // status?
719      case 0x7ff8:
720         return m_fdc->status_r();
721
722      case 0x7ff1:   // track?
723      case 0x7ff9:
724         return m_fdc->track_r();
725
726      case 0x7ff2:   // sector?
727      case 0x7ffa:
728         return m_fdc->sector_r();
729
730      case 0x7ff3:   // data?
731      case 0x7ffb:
732         return m_fdc->data_r();
733
734      case 0x7ff4:
735      case 0x7ffc:
736         // bit 0 = side control
737         // bit 1 = motor control
738         return 0xfc | m_side_motor;
739         break;
740
741      // This reads back a 1 in bit 0 if drive0 is present and selected
742      case 0x7ff5:
743      case 0x7ffd:
744         return 0xfe | m_drive_select0;
745
746      // This reads back a 1 in bit 0 if drive1 is present and selected
747      case 0x7ff6:
748      case 0x7ffe:
749         return 0xfe | m_drive_select1;
750
751      case 0x7ff7:
752      case 0x7fff:
753         return 0x3f | (m_fdc->intrq_r() ? 0 : 0x40) | (m_fdc->drq_r() ? 0 : 0x80);
754   }
755
756   return msx_slot_rom_device::read(space, offset);
757}
758
759
760WRITE8_MEMBER(msx_slot_disk6_device::write)
761{
762   switch (offset)
763   {
764      case 0x7ff0:   // cmd?
765      case 0x7ff8:
766         m_fdc->cmd_w(data);
767         break;
768
769      case 0x7ff1:   // track?
770      case 0x7ff9:
771         m_fdc->track_w(data);
772         break;
773
774      case 0x7ff2:   // sector?
775      case 0x7ffa:
776         m_fdc->sector_w(data);
777         break;
778
779      case 0x7ff3:   // data?
780      case 0x7ffb:
781         m_fdc->data_w(data);
782         break;
783
784      // Side and motort control
785      // bit 0 = side select
786      // bit 1 = motor on/off
787      case 0x7ff4:
788      case 0x7ffc:
789         m_side_motor = data;
790         set_side_motor();
791         break;
792
793      // bit 0 - select drive 0
794      case 0x7ff5:
795      case 0x7ffd:
796         m_drive_select0 = data;
797         select_drive();
798         break;
799
800      // bit 1 - select drive 1
801      case 0x7ff6:
802      case 0x7ffe:
803         m_drive_select1 = data;
804         select_drive();
805         break;
806
807      default:
808         logerror("msx_slot_disk6_device::write: Unmapped write writing %02x to %04x\n", data, offset);
809         break;
810   }
811}
812
trunk/src/mess/drivers/msx.c
r32650r32651
6969** - phc77: printer not emulated
7070** - hx21, hx22: Hook up kanji rom
7171** - hx21, hx22: Does not start firmware
72** - hx34, hx34i: Floppy support broken
7372** - victhc90/95/95a: Turbo/2nd cpu not supported.
7473** - victhc90/95/95a: Firmware not working.
7574** - y503iiir/e: Fix keyboard support
r32650r32651
70347033ROM_REGION (0x18000, "maincpu", 0)
70357034   ROM_LOAD ("hx34bios.rom",  0x0000, 0x8000, CRC(3891e0f7) SHA1(7dfb18262d48e559fffb4199acbe29d9b4bee9db))
70367035   ROM_LOAD ("hx34ext.rom",   0x8000, 0x4000, CRC(4a48779c) SHA1(b8e30d604d319d511cbfbc61e5d8c38fbb9c5a33))
7037   ROM_LOAD ("hx34disk.rom",  0xc000, 0x4000, CRC(b6203bc8) SHA1(d31236e8b2491bca678d905546b365e9d365b072))
7036   // hx34disk.rom has contents of floppy registers at offset 3ff0-3ff7 and mirrored at 3ff8-3fff
7037   ROM_LOAD ("hx34disk.rom",  0xc000, 0x4000, BAD_DUMP CRC(b6203bc8) SHA1(d31236e8b2491bca678d905546b365e9d365b072))
70387038   ROM_LOAD ("hx34firm.rom", 0x10000, 0x8000, CRC(d05b5ca6) SHA1(7eea205044af48cfde9b7fff277d961704c4d45c))
70397039
70407040   ROM_REGION (0x20000, "kanji", 0)
r32650r32651
70537053   MCFG_MSX_LAYOUT_CARTRIDGE("cartslot2", 2, 0)
70547054   MCFG_MSX_LAYOUT_RAM_MM("ram_mm", 3, 0, 0x10000) // 64KB Mapper RAM
70557055   MCFG_MSX_LAYOUT_ROM("ext", 3, 1, 0, 1, "maincpu", 0x8000)
7056   MCFG_MSX_LAYOUT_DISK1("disk", 3, 2, 1, 1, "maincpu", 0xc000)
7056   MCFG_MSX_LAYOUT_DISK6("disk", 3, 2, 1, 1, "maincpu", 0xc000)
70577057   MCFG_MSX_LAYOUT_ROM("firm", 3, 3, 1, 2, "maincpu", 0x10000)
70587058
70597059   MCFG_MSX_S1985_ADD("s1985")
70607060
7061   MCFG_FRAGMENT_ADD( msx_wd2793_force_ready )
7061   MCFG_FRAGMENT_ADD( msx_wd2793 )
70627062   MCFG_FRAGMENT_ADD( msx_1_35_dd_drive )
70637063   MCFG_FRAGMENT_ADD( msx2_floplist )
70647064
r32650r32651
70717071   ROM_REGION (0x18000, "maincpu", 0)
70727072   ROM_LOAD ("hx34ibios.rom",  0x0000, 0x8000, CRC(6cdaf3a5) SHA1(6103b39f1e38d1aa2d84b1c3219c44f1abb5436e))
70737073   ROM_LOAD ("hx34iext.rom",   0x8000, 0x4000, CRC(06e4f5e6) SHA1(f5eb0a396097572589f2a6efeed045044e9425e4))
7074   ROM_LOAD ("hx34idisk.rom",  0xc000, 0x4000, CRC(b6203bc8) SHA1(d31236e8b2491bca678d905546b365e9d365b072))
7074   // hx34idisk.rom has contents of floppy registers at offset 3ff0-3ff7 and mirrored at 3ff8-3fff
7075   ROM_LOAD ("hx34idisk.rom",  0xc000, 0x4000, BAD_DUMP CRC(b6203bc8) SHA1(d31236e8b2491bca678d905546b365e9d365b072))
70757076   ROM_LOAD ("hx34ifirm.rom", 0x10000, 0x8000, CRC(f9e29c66) SHA1(3289336b2c12161fd926a7e5ce865770ae7038af))
70767077ROM_END
70777078
r32650r32651
70877088   MCFG_MSX_LAYOUT_CARTRIDGE("cartslot2", 2, 0)
70887089   MCFG_MSX_LAYOUT_RAM_MM("ram_mm", 3, 0, 0x10000) // 64KB Mapper RAM
70897090   MCFG_MSX_LAYOUT_ROM("ext", 3, 1, 0, 1, "maincpu", 0x8000)
7090   MCFG_MSX_LAYOUT_DISK1("disk", 3, 2, 1, 1, "maincpu", 0xc000)
7091   MCFG_MSX_LAYOUT_ROM("firm", 3, 2, 1, 2, "maincpu", 0x10000)
7091   MCFG_MSX_LAYOUT_DISK6("disk", 3, 2, 1, 1, "maincpu", 0xc000)
7092   MCFG_MSX_LAYOUT_ROM("firm", 3, 3, 1, 2, "maincpu", 0x10000)
70927093
70937094   MCFG_MSX_S1985_ADD("s1985")
70947095
7095   MCFG_FRAGMENT_ADD( msx_wd2793_force_ready )
7096   MCFG_FRAGMENT_ADD( msx_wd2793 )
70967097   MCFG_FRAGMENT_ADD( msx_1_35_dd_drive )
70977098   MCFG_FRAGMENT_ADD( msx2_floplist )
70987099
r32650r32651
84048405COMP(1986, hx23f,     hx23i,    0,      hx23f,    msx2, msx_state,     msx,     "Toshiba", "HX-23F (MSX2)", 0)
84058406COMP(190?, hx23i,     0,        0,      hx23i,    msx2, msx_state,     msx,     "Toshiba", "HX-23I (MSX2)", 0)
84068407COMP(198?, hx33,      0,        0,      hx33,     msx2jp, msx_state,   msx,     "Toshiba", "HX-33 (MSX2)", 0)
8407COMP(198?, hx34,      hx34i,    0,      hx34,     msx2jp, msx_state,   msx,     "Toshiba", "HX-34 (MSX2)", GAME_NOT_WORKING) // Floppy support broken
8408COMP(198?, hx34i,     0,        0,      hx34i,    msx, msx_state,      msx,     "Toshiba", "HX-34I (MSX2)", GAME_NOT_WORKING) // Floppy support broken
8408COMP(198?, hx34,      hx34i,    0,      hx34,     msx2jp, msx_state,   msx,     "Toshiba", "HX-34 (MSX2)", 0)
8409COMP(198?, hx34i,     0,        0,      hx34i,    msx, msx_state,      msx,     "Toshiba", "HX-34I (MSX2)", 0)
84098410COMP(1985, fstm1,     0,        0,      fstm1,    msx, msx_state,      msx,     "Toshiba", "FS-TM1 (MSX2)", 0)
84108411COMP(198?, victhc90,  victhc95, 0,      victhc90, msxjp, msx_state,    msx,     "Victor", "HC-90 (MSX2)", GAME_NOT_WORKING) // 2nd cpu/turbo not emulated, firmware won't start
84118412COMP(198?, victhc95,  0,        0,      victhc95, msxjp, msx_state,    msx,     "Victor", "HC-95 (MSX2)", GAME_NOT_WORKING) // 2nd cpu/turbo not emulated, firmware won't start
trunk/src/mess/includes/msx.h
r32650r32651
8686   MCFG_MSX_SLOT_DISK5_ADD(_tag, _page, _numpages, _region, _offset, "fdc", "fdc:0", "fdc:1", "fdc:2", "fdc:3") \
8787   msx_state::install_slot_pages(*owner, _prim, _sec, _page, _numpages, device);
8888
89#define MCFG_MSX_LAYOUT_DISK6(_tag, _prim, _sec, _page, _numpages, _region, _offset) \
90   MCFG_MSX_SLOT_DISK6_ADD(_tag, _page, _numpages, _region, _offset, "fdc", "fdc:0", "fdc:1") \
91   msx_state::install_slot_pages(*owner, _prim, _sec, _page, _numpages, device);
92
8993#define MCFG_MSX_LAYOUT_MUSIC(_tag, _prim, _sec, _page, _numpages, _region, _offset) \
9094   MCFG_MSX_SLOT_MUSIC_ADD(_tag, _page, _numpages, _region, _offset, "ym2413" ) \
9195   msx_state::install_slot_pages(*owner, _prim, _sec, _page, _numpages, device);

Previous 199869 Revisions Next


© 1997-2024 The MAME Team