Previous 199869 Revisions Next

r31556 Friday 8th August, 2014 at 14:35:40 UTC by Wilbert Pol
(MESS) msx.c: Added support for Philips VY-0010 external floppy interface and drive (nw)
[hash]msx1_cart.xml
[src/emu/bus]bus.mak
[src/emu/bus/msx_cart]cartridge.c disk.c* disk.h*

trunk/hash/msx1_cart.xml
r31555r31556
1710917109      </part>
1711017110   </software>
1711117111
17112   <software name="vy0010">
17113      <description>Philips VY-0010 (Floppy controller + 3.5" SS floppy drive)</description>
17114      <year>198?</year>
17115      <publisher>Philips</publisher>
17116      <part name="cart" interface="msx_cart">
17117         <feature name="slot" value="disk_vy0010" />
17118         <dataarea name="rom" size="0x4000">
17119            <!-- Dump contains contents of the memory mapped FDC registers -->
17120            <!-- ROM label taken from schematic, possibly incorrect -->
17121            <rom name="27128q25-8.ic2" size="0x4000" crc="164f5a6d" sha1="8924e3e11eb1c8c1edcb7efa63c26d2bdc142473" status="baddump" offset="0" />
17122         </dataarea>
17123      </part>
17124      <!-- The package came with a copy of msx-dos -->
17125<!--
17126      <part name="flop1" interface="35_disk">
17127      </part>
17128-->
17129   </software>
17130
1711217131   <!-- SORT -->
1711317132
1711417133   <software name="dooly">
trunk/src/emu/bus/msx_cart/cartridge.c
r31555r31556
55#include "ascii.h"
66#include "bm_012.h"
77#include "crossblaim.h"
8#include "disk.h"
89#include "dooly.h"
910#include "fmpac.h"
1011#include "halnote.h"
r31555r31556
5455   SLOT_INTERFACE_INTERNAL("dooly", MSX_CART_DOOLY)
5556   SLOT_INTERFACE_INTERNAL("halnote", MSX_CART_HALNOTE)
5657   SLOT_INTERFACE_INTERNAL("arc", MSX_CART_ARC)
58   SLOT_INTERFACE_INTERNAL("disk_vy0010", MSX_CART_VY0010)
5759   SLOT_INTERFACE("bm_012", MSX_CART_BM_012)
5860SLOT_INTERFACE_END
5961
trunk/src/emu/bus/msx_cart/disk.c
r0r31556
1/*****************************************************************************
2 *
3 * MSX Floopy drive interface add-on cartridges
4 *
5 * Currently supported:
6 * - Philips VY-0010 (Interface cartridge + 1 3.5" SS floppy drive)
7 *
8 ****************************************************************************/
9
10#include "emu.h"
11#include "disk.h"
12#include "formats/msx_dsk.h"
13
14
15const device_type MSX_CART_VY0010 = &device_creator<msx_cart_vy0010>;
16
17
18FLOPPY_FORMATS_MEMBER( msx_cart_vy0010::floppy_formats )
19   FLOPPY_MSX_FORMAT
20FLOPPY_FORMATS_END
21
22
23static SLOT_INTERFACE_START( msx_floppies )
24   SLOT_INTERFACE( "35dd", FLOPPY_35_DD )
25   SLOT_INTERFACE( "35ssdd", FLOPPY_35_SSDD )
26SLOT_INTERFACE_END
27
28
29msx_cart_vy0010::msx_cart_vy0010(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
30   : device_t(mconfig, MSX_CART_VY0010, "MSX Cartridge - VY0010", tag, owner, clock, "msx_cart_vy0010", __FILE__)
31   , msx_cart_interface(mconfig, *this)
32   , m_fdc(*this, "fdc")
33   , m_floppy0(*this, "fdc:0")
34   , m_floppy1(*this, "fdc:1")
35   , m_floppy(NULL)
36   , m_control(0)
37{
38}
39
40
41static MACHINE_CONFIG_FRAGMENT( vy0010 )
42   // From VY-0010 schematic:
43   // HLT pulled high
44   // SSO/-ENMF + -DDEN + ENP + -5/8 - pulled low
45   // READY inverted in VY-0010 cartridge and pulled low on VY-0010/VY-0011 floppy drive
46   MCFG_WD2793x_ADD("fdc", XTAL_4MHz / 4)
47   MCFG_WD_FDC_FORCE_READY
48
49   // Single sided 3.5" floppy drive
50   MCFG_FLOPPY_DRIVE_ADD("fdc:0", msx_floppies, "35ssdd", msx_cart_vy0010::floppy_formats)
51
52   // Attach software lists
53   // We do not know in what kind of machine the user has inserted the floppy interface
54   // so we list all msx floppy software lists.
55   //
56   MCFG_SOFTWARE_LIST_ADD("flop_list","msx2_flop")
57   MCFG_SOFTWARE_LIST_COMPATIBLE_ADD("msx1_flop_list","msx1_flop")
58MACHINE_CONFIG_END
59
60
61machine_config_constructor msx_cart_vy0010::device_mconfig_additions() const
62{
63   return MACHINE_CONFIG_NAME( vy0010 );
64}
65
66
67void msx_cart_vy0010::device_start()
68{
69   save_item(NAME(m_side_control));
70   save_item(NAME(m_control));
71
72   machine().save().register_postload(save_prepost_delegate(FUNC(msx_cart_vy0010::post_load), this));
73}
74
75
76void msx_cart_vy0010::post_load()
77{
78   UINT8 data = m_control;
79
80   // To make sure the FDD busy led status gets set correctly
81   m_control ^= 0x40;
82
83   set_control(data);
84}
85
86
87void msx_cart_vy0010::set_control(UINT8 data)
88{
89   UINT8 old_m_control = m_control;
90
91   m_control = data;
92
93   switch (m_control & 0x03)
94   {
95      case 0:
96      case 2:
97         m_floppy = m_floppy0 ? m_floppy0->get_device() : NULL;
98         break;
99
100      case 1:
101         m_floppy = m_floppy1 ? m_floppy1->get_device() : NULL;
102         break;
103
104      default:
105         m_floppy = NULL;
106         break;
107   }
108
109   if (m_floppy)
110   {
111      m_floppy->mon_w((m_control & 0x80) ? 0 : 1);
112      m_floppy->ss_w(m_side_control & 0x01);
113   }
114
115   m_fdc->set_floppy(m_floppy);
116
117   if ((old_m_control ^ m_control) & 0x40)
118   {
119      set_led_status(machine(), 0, !(m_control & 0x40));
120   }
121}
122
123
124void msx_cart_vy0010::set_side_control(UINT8 data)
125{
126   m_side_control = data;
127
128   if (m_floppy)
129   {
130      m_floppy->ss_w(m_side_control & 0x01);
131   }
132}
133
134
135void msx_cart_vy0010::device_reset()
136{
137   m_fdc->dden_w(false);
138}
139
140
141void msx_cart_vy0010::initialize_cartridge()
142{
143   if ( get_rom_size() != 0x4000 )
144   {
145      fatalerror("vy0010: Invalid ROM size\n");
146   }
147}
148
149
150READ8_MEMBER(msx_cart_vy0010::read_cart)
151{
152   switch (offset)
153   {
154      case 0x7ff8:
155      case 0xbff8:
156         return m_fdc->status_r();
157
158      case 0x7ff9:
159      case 0xbff9:
160         return m_fdc->track_r();
161
162      case 0x7ffa:
163      case 0xbffa:
164         return m_fdc->sector_r();
165
166      case 0x7ffb:
167      case 0xbffb:
168         return m_fdc->data_r();
169
170      case 0x7ffc:
171      case 0xbffc:
172         return 0xfe | (m_side_control & 0x01);
173
174      case 0x7ffd:
175      case 0xbffd:
176         return ( m_control & 0x83 ) | 0x78;
177
178      case 0x7fff:
179      case 0xbfff:
180         return 0x3f | (m_fdc->intrq_r() ? 0 : 0x40) | (m_fdc->drq_r() ? 0 : 0x80);
181   }
182
183   if (offset >= 0x4000 && offset < 0x8000)
184   {
185      return get_rom_base()[offset & 0x3fff];
186   }
187   return 0xff;
188}
189
190
191WRITE8_MEMBER(msx_cart_vy0010::write_cart)
192{
193   switch (offset)
194   {
195      case 0x7ff8:
196      case 0xbff8:
197         m_fdc->cmd_w(data);
198         break;
199
200      case 0x7ff9:
201      case 0xbff9:
202         m_fdc->track_w(data);
203         break;
204
205      case 0x7ffa:
206      case 0xbffa:
207         m_fdc->sector_w(data);
208         break;
209
210      case 0x7ffb:
211      case 0xbffb:
212         m_fdc->data_w(data);
213         break;
214
215      case 0x7ffc:
216      case 0xbffc:
217         set_side_control(data);
218         break;
219
220      case 0x7ffd:
221      case 0xbffd:
222         set_control(data);
223         break;
224
225      default:
226         logerror("msx_cart_vy0010::write_cart: Unmapped write writing %02x to %04x\n", data, offset);
227         break;
228   }
229}
230
231
Property changes on: trunk/src/emu/bus/msx_cart/disk.c
Added: svn:eol-style
   + native
Added: svn:mime-type
   + text/plain
trunk/src/emu/bus/msx_cart/disk.h
r0r31556
1#ifndef __MSX_CART_DISK_H
2#define __MSX_CART_DISK_H
3
4#include "bus/msx_cart/cartridge.h"
5#include "machine/wd_fdc.h"
6#include "imagedev/flopdrv.h"
7#include "imagedev/floppy.h"
8
9
10extern const device_type MSX_CART_VY0010;
11
12
13class msx_cart_vy0010 : public device_t
14                  , public msx_cart_interface
15{
16public:
17   msx_cart_vy0010(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
18
19   // device-level overrides
20   virtual void device_start();
21   virtual void device_reset();
22   virtual machine_config_constructor device_mconfig_additions() const;
23
24   virtual void initialize_cartridge();
25
26   virtual DECLARE_READ8_MEMBER(read_cart);
27   virtual DECLARE_WRITE8_MEMBER(write_cart);
28
29   void post_load();
30
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
39   UINT8 m_side_control;
40   UINT8 m_control;
41
42   void set_side_control(UINT8 data);
43   void set_control(UINT8 data);
44};
45
46
47#endif
Property changes on: trunk/src/emu/bus/msx_cart/disk.h
Added: svn:mime-type
   + text/plain
Added: svn:eol-style
   + native
trunk/src/emu/bus/bus.mak
r31555r31556
412412BUSOBJS += $(BUSOBJ)/msx_cart/bm_012.o
413413BUSOBJS += $(BUSOBJ)/msx_cart/cartridge.o
414414BUSOBJS += $(BUSOBJ)/msx_cart/crossblaim.o
415BUSOBJS += $(BUSOBJ)/msx_cart/disk.o
415416BUSOBJS += $(BUSOBJ)/msx_cart/dooly.o
416417BUSOBJS += $(BUSOBJ)/msx_cart/fmpac.o
417418BUSOBJS += $(BUSOBJ)/msx_cart/halnote.o

Previous 199869 Revisions Next


© 1997-2024 The MAME Team