Previous 199869 Revisions Next

r19192 Wednesday 28th November, 2012 at 15:56:47 UTC by Curt Coder
(MESS) mpz80: Floppy modernization. (nw)
[src/mess/drivers]mpz80.c
[src/mess/includes]mpz80.h
[src/mess/machine]s100_dj2db.c s100_dj2db.h

trunk/src/mess/machine/s100_dj2db.c
r19191r19192
7878//  wd17xx_interface fdc_intf
7979//-------------------------------------------------
8080
81WRITE_LINE_MEMBER( s100_dj2db_device::fdc_intrq_w )
81static SLOT_INTERFACE_START( s100_dj2db_floppies )
82   SLOT_INTERFACE( "8dsdd", FLOPPY_8_DSDD )
83SLOT_INTERFACE_END
84
85void s100_dj2db_device::fdc_intrq_w(bool state)
8286{
8387   if (state) m_s100->rdy_w(CLEAR_LINE);
8488
r19191r19192
96100   }
97101}
98102
99WRITE_LINE_MEMBER( s100_dj2db_device::fdc_drq_w )
103void s100_dj2db_device::fdc_drq_w(bool state)
100104{
101105   if (state) m_s100->rdy_w(CLEAR_LINE);
102106}
103107
104static const wd17xx_interface fdc_intf =
105{
106   DEVCB_NULL,
107   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, s100_dj2db_device, fdc_intrq_w),
108   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, s100_dj2db_device, fdc_drq_w),
109   { FLOPPY_0, FLOPPY_1, NULL, NULL }
110};
111108
112
113109//-------------------------------------------------
114110//  MACHINE_CONFIG_FRAGMENT( s100_dj2db )
115111//-------------------------------------------------
116112
117113static MACHINE_CONFIG_FRAGMENT( s100_dj2db )
118114   MCFG_COM8116_ADD(BR1941_TAG, XTAL_5_0688MHz, brg_intf)
119   MCFG_MB8866_ADD(MB8866_TAG, fdc_intf)
115   MCFG_MB8866x_ADD(MB8866_TAG, 1000000 *8) // ?
116
117   MCFG_FLOPPY_DRIVE_ADD(MB8866_TAG":0", s100_dj2db_floppies, "8dsdd", NULL, floppy_image_device::default_floppy_formats)
118   MCFG_FLOPPY_DRIVE_ADD(MB8866_TAG":1", s100_dj2db_floppies, NULL,    NULL, floppy_image_device::default_floppy_formats)
119   MCFG_FLOPPY_DRIVE_ADD(MB8866_TAG":2", s100_dj2db_floppies, NULL,    NULL, floppy_image_device::default_floppy_formats)
120   MCFG_FLOPPY_DRIVE_ADD(MB8866_TAG":3", s100_dj2db_floppies, NULL,    NULL, floppy_image_device::default_floppy_formats)
120121MACHINE_CONFIG_END
121122
122123
r19191r19192
260261   device_s100_card_interface(mconfig, *this),
261262   m_fdc(*this, MB8866_TAG),
262263   m_dbrg(*this, BR1941_TAG),
264   m_floppy0(*this, MB8866_TAG":0"),
265   m_floppy1(*this, MB8866_TAG":1"),
266   m_floppy2(*this, MB8866_TAG":2"),
267   m_floppy3(*this, MB8866_TAG":3"),
263268   m_drive(0),
264269   m_head(1),
265270   m_int_enbl(0),
r19191r19192
281286   m_rom = memregion("dj2db")->base();
282287   m_ram = auto_alloc_array(machine(), UINT8, 0x400);
283288
284   // find floppy devices
285   m_floppy0 = machine().device(FLOPPY_0);
286   m_floppy1 = machine().device(FLOPPY_1);
289   // floppy callbacks
290   m_fdc->setup_intrq_cb(fd1791_t::line_cb(FUNC(s100_dj2db_device::fdc_intrq_w), this));
291   m_fdc->setup_drq_cb(fd1791_t::line_cb(FUNC(s100_dj2db_device::fdc_drq_w), this));
287292
288293   // state saving
289294   //save_item(NAME());
r19191r19192
353358        */
354359
355360      data |= !m_head;
356      data |= !wd17xx_drq_r(m_fdc) << 1;
357      data |= !wd17xx_intrq_r(m_fdc) << 2;
358
359      device_t *floppy = m_drive ? m_floppy1 : m_floppy0;
360      data |= floppy_twosid_r(floppy) << 3;
361      data |= floppy_index_r(floppy) << 4;
362      data |= floppy_ready_r(floppy) << 7;
361      data |= !m_fdc->drq_r() << 1;
362      data |= !m_fdc->intrq_r() << 2;
363      data |= (m_floppy ? m_floppy->twosid_r() : 1) << 3;
364      data |= (m_floppy ? m_floppy->idx_r() : 1) << 4;
365      data |= (m_floppy ? m_floppy->ready_r() : 1) << 7;
363366   }
364367   else if ((offset >= 0xfbfc) && (offset < 0xfc00))
365368   {
366369      m_s100->rdy_w(ASSERT_LINE);
367370
368      data = wd17xx_r(m_fdc, space, offset & 0x03);
371      data = m_fdc->gen_r(offset & 0x03);
369372   }
370373   else if ((offset >= 0xfc00) && (offset < 0x10000))
371374   {
r19191r19192
414417        */
415418
416419      // drive select
417      if (BIT(data, 0)) m_drive = 0;
418      if (BIT(data, 1)) m_drive = 1;
419      //if (BIT(data, 2)) m_drive = 2;
420      //if (BIT(data, 3)) m_drive = 3;
421      wd17xx_set_drive(m_fdc, m_drive);
422      floppy_mon_w(m_floppy0, CLEAR_LINE);
423      floppy_mon_w(m_floppy1, CLEAR_LINE);
420      m_floppy = NULL;
424421
422      if (BIT(data, 0)) m_floppy = m_floppy0->get_device();
423      if (BIT(data, 1)) m_floppy = m_floppy1->get_device();
424      if (BIT(data, 2)) m_floppy = m_floppy2->get_device();
425      if (BIT(data, 3)) m_floppy = m_floppy3->get_device();
426
427      m_fdc->set_floppy(m_floppy);
428
425429      // side select
426      wd17xx_set_side(m_fdc, BIT(data, 4));
430      if (m_floppy)
431      {
432         m_floppy->ss_w(BIT(data, 4));
433         m_floppy->mon_w(0);
434      }
427435
428436      // interrupt enable
429437      m_int_enbl = BIT(data, 5);
r19191r19192
432440      m_access_enbl = BIT(data, 6);
433441
434442      // master reset
435      wd17xx_mr_w(m_fdc, BIT(data, 7));
443      if (!BIT(data, 7)) m_fdc->reset();
436444   }
437445   else if (offset == 0xfbfa) // FUNCTION SEL
438446   {
r19191r19192
452460        */
453461
454462      // density select
455      wd17xx_dden_w(m_fdc, BIT(data, 0));
463      m_fdc->dden_w(BIT(data, 0));
456464   }
457465   else if (offset == 0xfbfb) // WAIT ENBL
458466   {
459467   }
460468   else if ((offset >= 0xfbfc) && (offset < 0xfc00))
461469   {
462      wd17xx_w(m_fdc, space, offset & 0x03, data);
470      m_fdc->gen_w(offset & 0x03, data);
463471   }
464472   else if ((offset >= 0xfc00) && (offset < 0x10000))
465473   {
trunk/src/mess/machine/s100_dj2db.h
r19191r19192
1414
1515
1616#include "emu.h"
17#include "formats/basicdsk.h"
18#include "imagedev/flopdrv.h"
1917#include "machine/s100.h"
2018#include "machine/com8116.h"
21#include "machine/wd17xx.h"
19#include "machine/wd_fdc.h"
2220
2321
2422
r19191r19192
4139   virtual ioport_constructor device_input_ports() const;
4240
4341   // not really public
44   DECLARE_WRITE_LINE_MEMBER( fdc_intrq_w );
45   DECLARE_WRITE_LINE_MEMBER( fdc_drq_w );
42   void fdc_intrq_w(bool state);
43   void fdc_drq_w(bool state);
4644
4745protected:
4846   // device-level overrides
r19191r19192
6159
6260private:
6361   // internal state
64   required_device<mb8866_device> m_fdc;
62   required_device<mb8866_t> m_fdc;
6563   required_device<com8116_device> m_dbrg;
66   device_t* m_floppy0;
67   device_t* m_floppy1;
64   required_device<floppy_connector> m_floppy0;
65   required_device<floppy_connector> m_floppy1;
66   required_device<floppy_connector> m_floppy2;
67   required_device<floppy_connector> m_floppy3;
68   floppy_image_device *m_floppy;
6869
6970   // floppy state
7071   int m_drive;            // selected drive
trunk/src/mess/includes/mpz80.h
r19191r19192
66
77#include "emu.h"
88#include "cpu/z80/z80.h"
9#include "formats/basicdsk.h"
10#include "imagedev/flopdrv.h"
119#include "machine/ram.h"
1210#include "machine/s100.h"
1311#include "machine/s100_dj2db.h"
trunk/src/mess/drivers/mpz80.c
r19191r19192
632632//**************************************************************************
633633
634634//-------------------------------------------------
635//  floppy_interface floppy_intf
636//-------------------------------------------------
637
638static const floppy_interface floppy_intf =
639{
640    DEVCB_NULL,
641    DEVCB_NULL,
642    DEVCB_NULL,
643    DEVCB_NULL,
644    DEVCB_NULL,
645    FLOPPY_STANDARD_8_DSDD,
646    LEGACY_FLOPPY_OPTIONS_NAME(default),
647    "floppy_8",
648   NULL
649};
650
651//-------------------------------------------------
652635//  GENERIC_TERMINAL_INTERFACE( terminal_intf )
653636//-------------------------------------------------
654637
r19191r19192
776759   MCFG_S100_SLOT_ADD("s100_14", mpz80_s100_cards, NULL, NULL)
777760
778761   // devices
779   MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(floppy_intf)
780762   MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG, terminal_intf)
781763
782764   // internal ram

Previous 199869 Revisions Next


© 1997-2024 The MAME Team