Previous 199869 Revisions Next

r34894 Friday 6th February, 2015 at 18:39:58 UTC by MetalliC
(MESS) Beta Disk interface convert to wd_fdc
[src/lib/formats]trd_dsk.c trd_dsk.h
[src/mess/drivers]atm.c pentagon.c scorpion.c
[src/mess/machine]beta.c beta.h

trunk/src/lib/formats/trd_dsk.c
r243405r243406
66
77*********************************************************************/
88
9#include <string.h>
9#include "emu.h"
10#include "formats/trd_dsk.h"
1011
11#include "trd_dsk.h"
12#include "basicdsk.h"
12trd_format::trd_format() : wd177x_format(formats)
13{
14}
1315
14
15static FLOPPY_IDENTIFY(trd_dsk_identify)
16const char *trd_format::name() const
1617{
17   *vote = 100;
18   return FLOPPY_ERROR_SUCCESS;
18   return "trd";
1919}
2020
21static FLOPPY_CONSTRUCT(trd_dsk_construct)
21const char *trd_format::description() const
2222{
23   struct basicdsk_geometry geometry;
24   UINT8 data[1];
25   int heads;
26   int cylinders;
23   return "TRD floppy disk image";
24}
2725
28   floppy_image_read( floppy, data, 0x8e3 , 1 );
29
30   /* guess geometry of disk */
31   heads =  data[0] & 0x08 ? 1 : 2;
32   cylinders = data[0] & 0x01 ? 40 : 80;
33
34   memset(&geometry, 0, sizeof(geometry));
35   geometry.heads = heads;
36   geometry.first_sector_id = 1;
37   geometry.sector_length = 256;
38   geometry.tracks = cylinders;
39   geometry.sectors = 16;
40   return basicdsk_construct(floppy, &geometry);
26const char *trd_format::extensions() const
27{
28   return "trd";
4129}
4230
31const trd_format::format trd_format::formats[] = {
32   {   //  5"25 640K double density
33      floppy_image::FF_525,  floppy_image::DSQD, floppy_image::MFM,
34      // GAP4A - 0(!) bytes, GAP1 - 10 bytes, GAP2 - 22 bytes, GAP3 - 60 bytes, GAP4B - upto track end
35      2000,  16, 80, 2, 256, {}, 1, {}, 10, 22, 60
36   },
37   {}
38};
4339
44
45/* ----------------------------------------------------------------------- */
46
47LEGACY_FLOPPY_OPTIONS_START( trd )
48   LEGACY_FLOPPY_OPTION( trd_dsk, "trd",       "TRD floppy disk image",    trd_dsk_identify, trd_dsk_construct, NULL, NULL)
49LEGACY_FLOPPY_OPTIONS_END
40const floppy_format_type FLOPPY_TRD_FORMAT = &floppy_image_format_creator<trd_format>;
trunk/src/lib/formats/trd_dsk.h
r243405r243406
99#ifndef TRD_DSK_H
1010#define TRD_DSK_H
1111
12#include "flopimg.h"
12#include "wd177x_dsk.h"
1313
14/**************************************************************************/
14class trd_format : public wd177x_format {
15public:
16   trd_format();
1517
16LEGACY_FLOPPY_OPTIONS_EXTERN(trd);
18   virtual const char *name() const;
19   virtual const char *description() const;
20   virtual const char *extensions() const;
1721
22private:
23   static const format formats[];
24};
25
26extern const floppy_format_type FLOPPY_TRD_FORMAT;
27
1828#endif /* TRD_DSK_H */
trunk/src/mess/drivers/atm.c
r243405r243406
141141   if (m_beta->started())
142142   {
143143      m_beta->enable();
144      m_beta->clear_status();
145144   }
146145   space.set_direct_update_handler(direct_update_delegate(FUNC(atm_state::atm_direct), this));
147146
trunk/src/mess/drivers/pentagon.c
r243405r243406
186186   {
187187      if (strcmp(machine().system().name, "pent1024")==0)
188188         m_beta->enable();
189      m_beta->clear_status();
190189   }
191190   space.set_direct_update_handler(direct_update_delegate(FUNC(pentagon_state::pentagon_direct), this));
192191
trunk/src/mess/drivers/scorpion.c
r243405r243406
336336   space.install_write_handler(0x0000, 0x3fff, write8_delegate(FUNC(scorpion_state::scorpion_0000_w),this));
337337
338338   m_beta->disable();
339   m_beta->clear_status();
340339   space.set_direct_update_handler(direct_update_delegate(FUNC(scorpion_state::scorpion_direct), this));
341340
342341   memset(messram,0,256*1024);
trunk/src/mess/machine/beta.c
r243405r243406
1414
1515*/
1616#include "emu.h"
17#include "imagedev/flopdrv.h"
1817#include "formats/trd_dsk.h"
1918#include "machine/beta.h"
2019
r243405r243406
2726const device_type BETA_DISK = &device_creator<beta_disk_device>;
2827
2928beta_disk_device::beta_disk_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
30   : device_t(mconfig, BETA_DISK, "Beta Disk Interface", tag, owner, clock, "betadisk", __FILE__),
31   m_betadisk_status(0),
32   m_betadisk_active(0)
29   : device_t(mconfig, BETA_DISK, "Beta Disk Interface", tag, owner, clock, "betadisk", __FILE__)
30   , m_betadisk_active(0)
31   , m_wd179x(*this, "wd179x")
32   , m_floppy0(*this, "wd179x:0")
33   , m_floppy1(*this, "wd179x:1")
34   , m_floppy2(*this, "wd179x:2")
35   , m_floppy3(*this, "wd179x:3")
3336{
3437}
3538
r243405r243406
3942
4043void beta_disk_device::device_start()
4144{
42   astring tempstring;
43
44   /* validate arguments */
45   assert(tag() != NULL);
46
47   /* find our WD179x */
48   tempstring.printf("%s:%s", tag(), "wd179x");
49   m_wd179x = machine().device<wd2793_device>(tempstring);
5045}
5146
5247//-------------------------------------------------
r243405r243406
7267   m_betadisk_active = 0;
7368}
7469
75void beta_disk_device::clear_status()
76{
77   m_betadisk_status = 0;
78}
79
80WRITE_LINE_MEMBER(beta_disk_device::wd179x_intrq_w)
81{
82   if (state)
83      m_betadisk_status |= (1<<7);
84   else
85      m_betadisk_status &=~(1<<7);
86}
87
88WRITE_LINE_MEMBER(beta_disk_device::wd179x_drq_w)
89{
90   if (state)
91      m_betadisk_status |= (1<<6);
92   else
93      m_betadisk_status &=~(1<<6);
94}
95
9670READ8_MEMBER(beta_disk_device::status_r)
9771{
9872   if (m_betadisk_active==1) {
99      return m_wd179x->status_r(space, offset);
73      return m_wd179x->status_r(space, 0);
10074   } else {
10175      return 0xff;
10276   }
r243405r243406
10579READ8_MEMBER(beta_disk_device::track_r)
10680{
10781   if (m_betadisk_active==1) {
108      return m_wd179x->track_r(space, offset);
82      return m_wd179x->track_r(space, 0);
10983   } else {
11084      return 0xff;
11185   }
r243405r243406
11488READ8_MEMBER(beta_disk_device::sector_r)
11589{
11690   if (m_betadisk_active==1) {
117      return m_wd179x->sector_r(space, offset);
91      return m_wd179x->sector_r(space, 0);
11892   } else {
11993      return 0xff;
12094   }
r243405r243406
12397READ8_MEMBER(beta_disk_device::data_r)
12498{
12599   if (m_betadisk_active==1) {
126      return m_wd179x->data_r(space, offset);
100      return m_wd179x->data_r(space, 0);
127101   } else {
128102      return 0xff;
129103   }
r243405r243406
132106READ8_MEMBER(beta_disk_device::state_r)
133107{
134108   if (m_betadisk_active==1) {
135      return m_betadisk_status;
109      UINT8 result = 0x3F;      // actually open bus
110      result |= m_wd179x->drq_r() ? 0x40 : 0;
111      result |= m_wd179x->intrq_r() ? 0x80 : 0;
112      return result;
136113   } else {
137114      return 0xff;
138115   }
r243405r243406
140117
141118WRITE8_MEMBER(beta_disk_device::param_w)
142119{
143   const char *floppy_tags[4] = { FLOPPY_0, FLOPPY_1, FLOPPY_2, FLOPPY_3 };
144
145120   if (m_betadisk_active == 1)
146121   {
147      m_wd179x->set_drive(data & 3);
148      m_wd179x->set_side ((data & 0x10) ? 0 : 1 );
149      m_wd179x->dden_w(!BIT(data, 6));
150      if ((data & 0x04) == 0) // reset
151         m_wd179x->reset();
122      floppy_connector* connectors[] = { m_floppy0, m_floppy1, m_floppy2, m_floppy3 };
152123
153      // bit 3 connected to pin 23 "HRDY" of FDC
154      // TEMP HACK, FDD motor and RDY FDC pin controlled by HLD pin of FDC
155      legacy_floppy_image_device *flop = subdevice<legacy_floppy_image_device>(floppy_tags[data & 3]);
156      flop->floppy_mon_w(CLEAR_LINE);
157      flop->floppy_drive_set_ready_state(1, 0);
124      floppy_image_device* floppy = connectors[data & 3]->get_device();
125
126      m_wd179x->set_floppy(floppy);
127      floppy->ss_w(BIT(data, 4) ? 0 : 1);
128      m_wd179x->dden_w(BIT(data, 6));
129
130      // bit 3 connected to pin 23 "HLT" of FDC and via diode to INDEX
131      //m_wd179x->hlt_w(BIT(data, 3)); // not handled in current wd_fdc
132
133      if (BIT(data, 2) == 0) // reset
134      {
135         m_wd179x->reset();
136         floppy->mon_w(ASSERT_LINE);
137      } else {
138         // HACK, FDD motor and RDY FDC pin controlled by HLD pin of FDC
139         floppy->mon_w(CLEAR_LINE);
140      }
158141   }
159142}
160143
161144WRITE8_MEMBER(beta_disk_device::command_w)
162145{
163146   if (m_betadisk_active==1) {
164      m_wd179x->command_w(space, offset, data);
147      m_wd179x->cmd_w(space, 0, data);
165148   }
166149}
167150
168151WRITE8_MEMBER(beta_disk_device::track_w)
169152{
170153   if (m_betadisk_active==1) {
171      m_wd179x->track_w(space, offset, data);
154      m_wd179x->track_w(space, 0, data);
172155   }
173156}
174157
175158WRITE8_MEMBER(beta_disk_device::sector_w)
176159{
177160   if (m_betadisk_active==1) {
178      m_wd179x->sector_w(space, offset, data);
161      m_wd179x->sector_w(space, 0, data);
179162   }
180163}
181164
182165WRITE8_MEMBER(beta_disk_device::data_w)
183166{
184167   if (m_betadisk_active==1) {
185      m_wd179x->data_w(space, offset, data);
168      m_wd179x->data_w(space, 0, data);
186169   }
187170}
188171
189static const floppy_interface beta_floppy_interface =
190{
191   FLOPPY_STANDARD_5_25_DSDD,
192   LEGACY_FLOPPY_OPTIONS_NAME(trd),
193   NULL
194};
172FLOPPY_FORMATS_MEMBER(beta_disk_device::floppy_formats)
173   FLOPPY_TRD_FORMAT
174FLOPPY_FORMATS_END
195175
196static MACHINE_CONFIG_FRAGMENT( beta_disk )
197   MCFG_DEVICE_ADD("wd179x", WD2793, 0) // KR1818VG93 clone of WD1793
198   MCFG_WD17XX_DEFAULT_DRIVE4_TAGS
199   MCFG_WD17XX_INTRQ_CALLBACK(WRITELINE(beta_disk_device, wd179x_intrq_w))
200   MCFG_WD17XX_DRQ_CALLBACK(WRITELINE(beta_disk_device, wd179x_drq_w))
176static SLOT_INTERFACE_START( beta_disk_floppies )
177   SLOT_INTERFACE( "drive0", FLOPPY_525_QD )
178   SLOT_INTERFACE( "drive1", FLOPPY_525_QD )
179   SLOT_INTERFACE( "drive2", FLOPPY_525_QD )
180   SLOT_INTERFACE( "drive3", FLOPPY_525_QD )
181SLOT_INTERFACE_END
201182
202   MCFG_LEGACY_FLOPPY_4_DRIVES_ADD(beta_floppy_interface)
183static MACHINE_CONFIG_FRAGMENT( beta_disk )
184   MCFG_WD2793x_ADD("wd179x", XTAL_8MHz / 8)   // KR1818VG93 clone of WD1793
185   MCFG_FLOPPY_DRIVE_ADD("wd179x:0", beta_disk_floppies, "drive0", beta_disk_device::floppy_formats)
186   MCFG_FLOPPY_DRIVE_ADD("wd179x:1", beta_disk_floppies, "drive1", beta_disk_device::floppy_formats)
187   MCFG_FLOPPY_DRIVE_ADD("wd179x:2", beta_disk_floppies, "drive2", beta_disk_device::floppy_formats)
188   MCFG_FLOPPY_DRIVE_ADD("wd179x:3", beta_disk_floppies, "drive3", beta_disk_device::floppy_formats)
203189MACHINE_CONFIG_END
204190
205191ROM_START( beta_disk )
trunk/src/mess/machine/beta.h
r243405r243406
1010#ifndef __BETA_H__
1111#define __BETA_H__
1212
13#include "machine/wd17xx.h"
13#include "machine/wd_fdc.h"
1414
1515
1616#define BETA_DISK_TAG   "beta"
r243405r243406
3232   DECLARE_WRITE8_MEMBER(track_w);
3333   DECLARE_WRITE8_MEMBER(sector_w);
3434   DECLARE_WRITE8_MEMBER(data_w);
35   DECLARE_FLOPPY_FORMATS(floppy_formats);
3536
36   DECLARE_WRITE_LINE_MEMBER(wd179x_intrq_w);
37   DECLARE_WRITE_LINE_MEMBER(wd179x_drq_w);
38
3937   int is_active();
4038   void enable();
4139   void disable();
42   void clear_status();
4340
44   UINT8 m_betadisk_status;
4541   UINT8 m_betadisk_active;
4642
4743protected:
r243405r243406
5248   virtual machine_config_constructor device_mconfig_additions() const;
5349
5450private:
55   // internal state
56   wd2793_device *m_wd179x;
51   required_device<wd2793_t> m_wd179x;
52   required_device<floppy_connector> m_floppy0;
53   required_device<floppy_connector> m_floppy1;
54   required_device<floppy_connector> m_floppy2;
55   required_device<floppy_connector> m_floppy3;
5756};
5857
5958extern const device_type BETA_DISK;


Previous 199869 Revisions Next


© 1997-2024 The MAME Team