Previous 199869 Revisions Next

r31591 Sunday 10th August, 2014 at 14:08:22 UTC by Wilbert Pol
(MESS) msx.c: Added support for the Panasonic FS-FD1 and FS-FD1A external floppy controllers and drives. (nw)
[hash]msx1_cart.xml
[src/emu/bus/msx_cart]cartridge.c disk.c disk.h

trunk/src/emu/bus/msx_cart/disk.c
r31590r31591
44 *
55 * Currently supported:
66 * - Philips VY-0010 (Interface cartridge + 1 3.5" SS floppy drive)
7 * - Panasonic FS-FD1 - WD2793? - DSDD 3.5" Floppy drive + interface
8 * - Panasonic FS-FD1A - TC8566F - DSDD 3.5" Floppy drive with builtin interface
9 *                     - Rom label reads: "FDC BIOS V1.0 / COPYRIGHT MEI / 1987 DASFD1AA1"
710 *
811 * Not supported yet:
912 * - Canon VF-100 - DSDD 3.5" Floppy drive + interface + 1 floppy disk containing MSX-DOS
10 * - Panasonic FS-FD1 - TC8566AF? - DSDD 3.5" Floppy drive + interface
11 * - Panasonic FS-FD1A - TC8566F - DSDD 3.5" Floppy drive with builtin interface
12 *                     - Rom label reads: "FDC BIOS V1.0 / COPYRIGHT MEI / 1987 DASFD1AA1"
13 * - National FS-FD351 - MB8877A - DSDD 3.5" Floppy drive + interface
1314 * - Talent DPF-550/5 - WD1772 - DSDD 5.25" Floppy drive (360KB) plus interface (manufactured by Daewoo)
1415 *                    - Rom label markings: MSX DISK / DPF 555D
1516 *
r31590r31591
3132 * - JVC HC-F303 - Floppy drive
3233 * - Mitsubishi ML-30FD - DSDD 3.5" Floppy drive
3334 * - Mitsubishi ML-30DC - Floppy interface
34 * - National FS-FD351 - MB8877A - 3.5" Floppy drive + interface?
3535 * - Philips NMS-1200 - Floppy interface
3636 * - Philips NMS-9111 - 3.5" Floppy drive
3737 * - Philips NMS-9113 - 3.5" Floppy drive
r31590r31591
104104
105105
106106const device_type MSX_CART_VY0010 = &device_creator<msx_cart_vy0010>;
107const device_type MSX_CART_FSFD1 = &device_creator<msx_cart_fsfd1>;
108const device_type MSX_CART_FSFD1A = &device_creator<msx_cart_fsfd1a>;
107109
108110
109FLOPPY_FORMATS_MEMBER( msx_cart_vy0010::floppy_formats )
111FLOPPY_FORMATS_MEMBER( msx_cart_disk::floppy_formats )
110112   FLOPPY_MSX_FORMAT
111113FLOPPY_FORMATS_END
112114
r31590r31591
117119SLOT_INTERFACE_END
118120
119121
120msx_cart_vy0010::msx_cart_vy0010(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
121   : device_t(mconfig, MSX_CART_VY0010, "MSX Cartridge - VY0010", tag, owner, clock, "msx_cart_vy0010", __FILE__)
122msx_cart_disk::msx_cart_disk(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname)
123   : device_t(mconfig, type, name, tag, owner, clock, shortname, __FILE__)
122124   , msx_cart_interface(mconfig, *this)
123   , m_fdc(*this, "fdc")
124125   , m_floppy0(*this, "fdc:0")
125126   , m_floppy1(*this, "fdc:1")
126127   , m_floppy(NULL)
128{
129}
130
131
132msx_cart_disk_wd::msx_cart_disk_wd(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname)
133   : msx_cart_disk(mconfig, type, name, tag, owner, clock, shortname)
134   , m_fdc(*this, "fdc")
135{
136}
137
138
139msx_cart_disk_type1::msx_cart_disk_type1(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname)
140   : msx_cart_disk_wd(mconfig, type, name, tag, owner, clock, shortname)
127141   , m_control(0)
128142{
129143}
130144
145msx_cart_vy0010::msx_cart_vy0010(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
146   : msx_cart_disk_type1(mconfig, MSX_CART_VY0010, "MSX Cartridge - VY0010", tag, owner, clock, "msx_cart_vy0010")
147{
148}
131149
150
151msx_cart_fsfd1::msx_cart_fsfd1(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
152   : msx_cart_disk_type1(mconfig, MSX_CART_FSFD1, "MSX Cartridge - FS-FD1", tag, owner, clock, "msx_cart_fsfd1")
153{
154}
155
156
157msx_cart_disk_tc8566::msx_cart_disk_tc8566(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname)
158   : msx_cart_disk(mconfig, type, name, tag, owner, clock, shortname)
159   , m_fdc(*this, "fdc")
160{
161}
162
163
164msx_cart_fsfd1a::msx_cart_fsfd1a(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
165   : msx_cart_disk_tc8566(mconfig, MSX_CART_FSFD1A, "MSX Cartridge - FS-FD1A", tag, owner, clock, "msx_cart_fsfd1a")
166{
167}
168
169
170void msx_cart_disk::initialize_cartridge()
171{
172   if ( get_rom_size() != 0x4000 )
173   {
174      fatalerror("msx_cart_disk: Invalid ROM size\n");
175   }
176}
177
178
132179static MACHINE_CONFIG_FRAGMENT( vy0010 )
133180   // From VY-0010 schematic:
134181   // HLT pulled high
r31590r31591
138185   MCFG_WD_FDC_FORCE_READY
139186
140187   // Single sided 3.5" floppy drive
141   MCFG_FLOPPY_DRIVE_ADD("fdc:0", msx_floppies, "35ssdd", msx_cart_vy0010::floppy_formats)
188   MCFG_FLOPPY_DRIVE_ADD("fdc:0", msx_floppies, "35ssdd", msx_cart_disk::floppy_formats)
142189
143190   // Attach software lists
144191   // We do not know in what kind of machine the user has inserted the floppy interface
r31590r31591
155202}
156203
157204
158void msx_cart_vy0010::device_start()
205static MACHINE_CONFIG_FRAGMENT( fsfd1 )
206   MCFG_WD2793x_ADD("fdc", XTAL_4MHz / 4)
207
208   // Double sided 3.5" floppy drive
209   MCFG_FLOPPY_DRIVE_ADD("fdc:0", msx_floppies, "35dd", msx_cart_disk::floppy_formats)
210
211   // Attach software lists
212   // We do not know in what kind of machine the user has inserted the floppy interface
213   // so we list all msx floppy software lists.
214   //
215   MCFG_SOFTWARE_LIST_ADD("flop_list","msx2_flop")
216   MCFG_SOFTWARE_LIST_COMPATIBLE_ADD("msx1_flop_list","msx1_flop")
217MACHINE_CONFIG_END
218
219
220machine_config_constructor msx_cart_fsfd1::device_mconfig_additions() const
159221{
222   return MACHINE_CONFIG_NAME( fsfd1 );
223}
224
225
226static MACHINE_CONFIG_FRAGMENT( fsfd1a )
227   MCFG_TC8566AF_ADD("fdc")
228
229   // Double sided 3.5" floppy drive
230   MCFG_FLOPPY_DRIVE_ADD("fdc:0", msx_floppies, "35dd", msx_cart_disk::floppy_formats)
231
232   // Attach software lists
233   // We do not know in what kind of machine the user has inserted the floppy interface
234   // so we list all msx floppy software lists.
235   //
236   MCFG_SOFTWARE_LIST_ADD("flop_list","msx2_flop")
237   MCFG_SOFTWARE_LIST_COMPATIBLE_ADD("msx1_flop_list","msx1_flop")
238MACHINE_CONFIG_END
239
240
241machine_config_constructor msx_cart_fsfd1a::device_mconfig_additions() const
242{
243   return MACHINE_CONFIG_NAME( fsfd1a );
244}
245
246
247void msx_cart_disk_type1::device_start()
248{
160249   save_item(NAME(m_side_control));
161250   save_item(NAME(m_control));
162251
163   machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_vy0010::post_load), this));
252   machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_disk_type1::post_load), this));
164253}
165254
166255
167void msx_cart_vy0010::post_load()
256void msx_cart_disk_type1::post_load()
168257{
169258   UINT8 data = m_control;
170259
r31590r31591
175264}
176265
177266
178void msx_cart_vy0010::set_control(UINT8 data)
267void msx_cart_disk_type1::set_control(UINT8 data)
179268{
180269   UINT8 old_m_control = m_control;
181270
r31590r31591
212301}
213302
214303
215void msx_cart_vy0010::set_side_control(UINT8 data)
304void msx_cart_disk_type1::set_side_control(UINT8 data)
216305{
217306   m_side_control = data;
218307
r31590r31591
223312}
224313
225314
226void msx_cart_vy0010::device_reset()
315void msx_cart_disk_type1::device_reset()
227316{
228317   m_fdc->dden_w(false);
229318}
230319
231320
232void msx_cart_vy0010::initialize_cartridge()
321READ8_MEMBER(msx_cart_disk_type1::read_cart)
233322{
234   if ( get_rom_size() != 0x4000 )
235   {
236      fatalerror("vy0010: Invalid ROM size\n");
237   }
238}
239
240
241READ8_MEMBER(msx_cart_vy0010::read_cart)
242{
243323   switch (offset)
244324   {
245325      case 0x7ff8:
r31590r31591
279359}
280360
281361
282WRITE8_MEMBER(msx_cart_vy0010::write_cart)
362WRITE8_MEMBER(msx_cart_disk_type1::write_cart)
283363{
284364   switch (offset)
285365   {
r31590r31591
314394         break;
315395
316396      default:
317         logerror("msx_cart_vy0010::write_cart: Unmapped write writing %02x to %04x\n", data, offset);
397         logerror("msx_cart_disk_type1::write_cart: Unmapped write writing %02x to %04x\n", data, offset);
318398         break;
319399   }
320400}
321401
322402
403void msx_cart_fsfd1a::device_start()
404{
405}
406
407
408void msx_cart_fsfd1a::device_reset()
409{
410}
411
412
413READ8_MEMBER(msx_cart_fsfd1a::read_cart)
414{
415   switch (offset)
416   {
417      case 0x7ffa:
418      case 0xbffa:
419         return m_fdc->msr_r(space, 4);
420
421      case 0x7ffb:
422      case 0xbffb:
423         return m_fdc->fifo_r(space, 5);
424   }
425
426   if (offset >= 0x4000 && offset < 0x8000)
427   {
428      return get_rom_base()[offset & 0x3fff];
429   }
430   return 0xff;
431}
432
433
434WRITE8_MEMBER(msx_cart_fsfd1a::write_cart)
435{
436   switch (offset)
437   {
438      case 0x7ff8:
439      case 0xbff8:
440         m_fdc->dor_w(space, 2, data);
441         break;
442
443      case 0x7ff9:
444      case 0xbff9:
445         m_fdc->cr1_w(space, 3, data);
446         break;
447
448      case 0x7ffb:
449      case 0xbffb:
450         m_fdc->fifo_w(space, 5, data);
451         break;
452
453      default:
454         logerror("msx_cart_fsfd1a::write_cart: Unmapped write writing %02x to %04x\n", data, offset);
455         break;
456   }
457}
458
trunk/src/emu/bus/msx_cart/disk.h
r31590r31591
33
44#include "bus/msx_cart/cartridge.h"
55#include "machine/wd_fdc.h"
6#include "machine/upd765.h"
67#include "imagedev/flopdrv.h"
78#include "imagedev/floppy.h"
89
910
1011extern const device_type MSX_CART_VY0010;
12extern const device_type MSX_CART_FSFD1;
13extern const device_type MSX_CART_FSFD1A;
1114
1215
13class msx_cart_vy0010 : public device_t
16class msx_cart_disk : public device_t
1417                  , public msx_cart_interface
1518{
1619public:
17   msx_cart_vy0010(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
20   msx_cart_disk(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname);
1821
22   virtual void initialize_cartridge();
23
24   DECLARE_FLOPPY_FORMATS(floppy_formats);
25
26protected:
27   required_device<floppy_connector> m_floppy0;
28   optional_device<floppy_connector> m_floppy1;
29   floppy_image_device *m_floppy;
30};
31
32
33class msx_cart_disk_wd : public msx_cart_disk
34{
35public:
36   msx_cart_disk_wd(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname);
37
38protected:
39   required_device<wd_fdc_analog_t> m_fdc;
40};
41
42
43class msx_cart_disk_type1 : public msx_cart_disk_wd
44{
45public:
46   msx_cart_disk_type1(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname);
47
1948   // device-level overrides
2049   virtual void device_start();
2150   virtual void device_reset();
22   virtual machine_config_constructor device_mconfig_additions() const;
2351
24   virtual void initialize_cartridge();
25
2652   virtual DECLARE_READ8_MEMBER(read_cart);
2753   virtual DECLARE_WRITE8_MEMBER(write_cart);
2854
2955   void post_load();
3056
31   DECLARE_FLOPPY_FORMATS(floppy_formats);
32
33private:
34   required_device<wd_fdc_analog_t> m_fdc;
35   required_device<floppy_connector> m_floppy0;
36   optional_device<floppy_connector> m_floppy1;
37   floppy_image_device *m_floppy;
38
57protected:
3958   UINT8 m_side_control;
4059   UINT8 m_control;
4160
r31590r31591
4463};
4564
4665
66class msx_cart_vy0010 : public msx_cart_disk_type1
67{
68public:
69   msx_cart_vy0010(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
70
71   virtual machine_config_constructor device_mconfig_additions() const;
72};
73
74
75class msx_cart_fsfd1 : public msx_cart_disk_type1
76{
77public:
78   msx_cart_fsfd1(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
79
80   virtual machine_config_constructor device_mconfig_additions() const;
81};
82
83
84class msx_cart_disk_tc8566 : public msx_cart_disk
85{
86public:
87   msx_cart_disk_tc8566(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname);
88
89protected:
90   required_device<tc8566af_device> m_fdc;
91};
92
93
94class msx_cart_fsfd1a : public msx_cart_disk_tc8566
95{
96public:
97   msx_cart_fsfd1a(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
98
99   // device-level overrides
100   virtual void device_start();
101   virtual void device_reset();
102   virtual machine_config_constructor device_mconfig_additions() const;
103
104   virtual DECLARE_READ8_MEMBER(read_cart);
105   virtual DECLARE_WRITE8_MEMBER(write_cart);
106
107private:
108
109};
110
111
47112#endif
trunk/src/emu/bus/msx_cart/cartridge.c
r31590r31591
5656   SLOT_INTERFACE_INTERNAL("halnote", MSX_CART_HALNOTE)
5757   SLOT_INTERFACE_INTERNAL("arc", MSX_CART_ARC)
5858   SLOT_INTERFACE_INTERNAL("disk_vy0010", MSX_CART_VY0010)
59   SLOT_INTERFACE_INTERNAL("disk_fsfd1", MSX_CART_FSFD1)
60   SLOT_INTERFACE_INTERNAL("disk_fsfd1a", MSX_CART_FSFD1A)
5961   SLOT_INTERFACE("bm_012", MSX_CART_BM_012)
6062SLOT_INTERFACE_END
6163
trunk/hash/msx1_cart.xml
r31590r31591
1711017110   </software>
1711117111
1711217112   <software name="vy0010">
17113      <description>Philips VY-0010 (Floppy controller + 3.5" SS floppy drive)</description>
17113      <description>VY-0010 (Floppy controller + 3.5" SSDD floppy drive)</description>
1711417114      <year>198?</year>
1711517115      <publisher>Philips</publisher>
1711617116      <part name="cart" interface="msx_cart">
r31590r31591
1712117121            <rom name="27128q25-8.ic2" size="0x4000" crc="164f5a6d" sha1="8924e3e11eb1c8c1edcb7efa63c26d2bdc142473" status="baddump" offset="0" />
1712217122         </dataarea>
1712317123      </part>
17124      <!-- The package came with a copy of msx-dos -->
17124      <!-- The package came with a copy of MSX-DOS -->
1712517125<!--
17126      <part name="flop1" interface="35_disk">
17126      <part name="flop1" interface="floppy_3_5">
1712717127      </part>
1712817128-->
1712917129   </software>
1713017130
17131   <software name="fsfd1">
17132      <description>FS-FD1 (Floppy controller + 3.5" DSDD floppy drive)</description>
17133      <year>198?</year>
17134      <publisher>Panasonic</publisher>
17135      <part name="cart" interface="msx_cart">
17136         <feature name="slot" value="disk_fsfd1" />
17137         <dataarea name="rom" size="0x4000">
17138            <!-- hashes not verified -->
17139            <rom name="fs_fd1.rom" size="0x4000" crc="4c9b8214" sha1="8e3f6f08309f082a82be8298a66c9b90f2d34ad4" offset="0" />
17140         </dataarea>
17141      </part>
17142<!--
17143      The floppy drive was most likely bundled with a copy of MSX-DOS, but we are not 100% sure yet
17144      <part name="flop1" interface="floppy_3_5">
17145      </part>
17146-->
17147   </software>
17148
17149   <software name="fsfd1a">
17150      <description>FS-FD1A (3.5" DSDD floppy drive with integrated controller)</description>
17151      <year>198?</year>
17152      <publisher>Panasonic</publisher>
17153      <part name="cart" interface="msx_cart">
17154         <feature name="slot" value="disk_fsfd1a" />
17155         <dataarea name="rom" size="0x4000">
17156            <!-- hashes not verified -->
17157            <rom name="fs_fd1a.rom" size="0x4000" crc="4b673b29" sha1="74ead27eec8d876144c2a015c0260d6db2117d72" offset="0" />
17158         </dataarea>
17159      </part>
17160<!--
17161        The floppy drive was most likely bundled with a copy of MSX-DOS, but we are not 10% sure yet
17162        <part name="flop1" interface="floppy_3_5">
17163        </part>
17164-->
17165   </software>
17166
1713117167   <!-- SORT -->
1713217168
1713317169   <software name="dooly">

Previous 199869 Revisions Next


© 1997-2024 The MAME Team