Previous 199869 Revisions Next

r19195 Wednesday 28th November, 2012 at 15:57:39 UTC by Curt Coder
(MESS) c8280: Floppy modernization. (nw)
[src/mess/machine]c8280.c c8280.h

trunk/src/mess/machine/c8280.c
r19194r19195
9393static ADDRESS_MAP_START( c8280_fdc_mem, AS_PROGRAM, 8, c8280_device )
9494   ADDRESS_MAP_GLOBAL_MASK(0x1fff)
9595   AM_RANGE(0x0000, 0x007f) AM_MIRROR(0x300) AM_RAM
96   AM_RANGE(0x0080, 0x0081) AM_MIRROR(0x37e) AM_DEVREADWRITE_LEGACY(WD1797_TAG, wd17xx_r, wd17xx_w)
96   AM_RANGE(0x0080, 0x0083) AM_MIRROR(0x37c) AM_DEVREADWRITE(WD1797_TAG, fd1797_t, read, write)
9797   AM_RANGE(0x0400, 0x07ff) AM_RAM AM_SHARE("share1")
9898   AM_RANGE(0x0800, 0x0bff) AM_RAM AM_SHARE("share2")
9999   AM_RANGE(0x0c00, 0x0fff) AM_RAM AM_SHARE("share3")
r19194r19195
300300//  wd17xx_interface fdc_intf
301301//-------------------------------------------------
302302
303static const floppy_interface c8280_floppy_interface =
303static SLOT_INTERFACE_START( c8280_floppies )
304   SLOT_INTERFACE( "8ssdd", FLOPPY_8_SSDD )
305SLOT_INTERFACE_END
306
307void c8280_device::fdc_intrq_w(bool state)
304308{
305   DEVCB_NULL,
306   DEVCB_NULL,
307   DEVCB_NULL,
308   DEVCB_NULL,
309   DEVCB_NULL,
310   FLOPPY_STANDARD_8_DSDD,
311   LEGACY_FLOPPY_OPTIONS_NAME(default),
312   "floppy_8",
313   NULL
314};
309   m_fdccpu->set_input_line(M6502_IRQ_LINE, state ? ASSERT_LINE : CLEAR_LINE);
310}
315311
316static struct wd17xx_interface fdc_intf =
312void c8280_device::fdc_drq_w(bool state)
317313{
318   DEVCB_NULL,
319   DEVCB_CPU_INPUT_LINE(M6502_FDC_TAG, M6502_IRQ_LINE),
320   DEVCB_CPU_INPUT_LINE(M6502_FDC_TAG, M6502_SET_OVERFLOW),
321   { FLOPPY_0, FLOPPY_1, NULL, NULL }
322};
314   m_fdccpu->set_input_line(M6502_SET_OVERFLOW, state ? ASSERT_LINE : CLEAR_LINE);
315}
323316
324317
325318//-------------------------------------------------
r19194r19195
336329   MCFG_CPU_ADD(M6502_FDC_TAG, M6502, XTAL_12MHz/8)
337330   MCFG_CPU_PROGRAM_MAP(c8280_fdc_mem)
338331
339   MCFG_FD1797_ADD(WD1797_TAG, fdc_intf)
332   MCFG_FD1797x_ADD(WD1797_TAG, XTAL_12MHz/8 *8) // clock?
340333
341   MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(c8280_floppy_interface)
334   MCFG_FLOPPY_DRIVE_ADD(WD1797_TAG":0", c8280_floppies, "8ssdd", NULL, floppy_image_device::default_floppy_formats)
335   MCFG_FLOPPY_DRIVE_ADD(WD1797_TAG":1", c8280_floppies, "8ssdd", NULL, floppy_image_device::default_floppy_formats)
342336MACHINE_CONFIG_END
343337
344338
r19194r19195
389383     m_riot0(*this, M6532_0_TAG),
390384     m_riot1(*this, M6532_1_TAG),
391385     m_fdc(*this, WD1797_TAG),
392     m_image0(*this, FLOPPY_0),
393     m_image1(*this, FLOPPY_1),
386     m_floppy0(*this, WD1797_TAG":0"),
387     m_floppy1(*this, WD1797_TAG":1"),
394388     m_rfdo(1),
395389     m_daco(1),
396390     m_atna(1)
r19194r19195
404398
405399void c8280_device::device_start()
406400{
401   // floppy callbacks
402   m_fdc->setup_intrq_cb(fd1797_t::line_cb(FUNC(c8280_device::fdc_intrq_w), this));
403   m_fdc->setup_drq_cb(fd1797_t::line_cb(FUNC(c8280_device::fdc_drq_w), this));
404
407405   // state saving
408406   save_item(NAME(m_rfdo));
409407   save_item(NAME(m_daco));
r19194r19195
429427   m_riot0->reset();
430428   m_riot1->reset();
431429
432   wd17xx_mr_w(m_fdc, 1);
433   wd17xx_mr_w(m_fdc, 0);
430   m_fdc->reset();
434431
435432   m_fk5 = 0;
436   wd17xx_dden_w(m_fdc, 0);
437   floppy_mon_w(m_image0, 1);
438   floppy_mon_w(m_image1, 1);
433   m_floppy = NULL;
434   m_fdc->set_floppy(m_floppy);
435   m_fdc->dden_w(0);
439436}
440437
441438
r19194r19195
483480
484481   UINT8 data = m_fk5;
485482
486   if (BIT(m_fk5, 0))
483   if (m_floppy)
487484   {
488      data |= floppy_dskchg_r(m_image0) << 3;
489      data |= floppy_twosid_r(m_image0) << 4;
485      data |= m_floppy->dskchg_r() << 3;
486      data |= m_floppy->twosid_r() << 4;
490487   }
491   else if (BIT(m_fk5, 1))
492   {
493      data |= floppy_dskchg_r(m_image1) << 3;
494      data |= floppy_twosid_r(m_image1) << 4;
495   }
496488
497489   return data;
498490}
r19194r19195
517509   m_fk5 = data & 0x3f;
518510
519511   // drive select
520   if (BIT(data, 0)) wd17xx_set_drive(m_fdc, 0);
521   if (BIT(data, 1)) wd17xx_set_drive(m_fdc, 1);
512   m_floppy = NULL;
522513
523   // density select
524   wd17xx_dden_w(m_fdc, BIT(data, 2));
514   if (BIT(data, 0)) m_floppy = m_floppy0->get_device();
515   if (BIT(data, 1)) m_floppy = m_floppy1->get_device();
525516
526   // motor enable
527   floppy_mon_w(m_image0, !BIT(data, 5));
528   floppy_mon_w(m_image1, !BIT(data, 5));
517   m_fdc->set_floppy(m_floppy);
518
519   // density select
520   m_fdc->dden_w(BIT(data, 2));
529521}
trunk/src/mess/machine/c8280.h
r19194r19195
1818#include "imagedev/flopdrv.h"
1919#include "machine/6532riot.h"
2020#include "machine/ieee488.h"
21#include "machine/wd17xx.h"
21#include "machine/wd_fdc.h"
2222
2323
2424
r19194r19195
4848   DECLARE_WRITE8_MEMBER( riot1_pb_w );
4949   DECLARE_READ8_MEMBER( fk5_r );
5050   DECLARE_WRITE8_MEMBER( fk5_w );
51   void fdc_intrq_w(bool state);
52   void fdc_drq_w(bool state);
5153
5254protected:
5355    // device-level overrides
r19194r19195
6668   required_device<cpu_device> m_fdccpu;
6769   required_device<riot6532_device> m_riot0;
6870   required_device<riot6532_device> m_riot1;
69   required_device<fd1797_device> m_fdc;
70   required_device<legacy_floppy_image_device> m_image0;
71   required_device<legacy_floppy_image_device> m_image1;
71   required_device<fd1797_t> m_fdc;
72   required_device<floppy_connector> m_floppy0;
73   required_device<floppy_connector> m_floppy1;
74   floppy_image_device *m_floppy;
7275
7376   // IEEE-488 bus
7477   int m_rfdo;                     // not ready for data output

Previous 199869 Revisions Next


© 1997-2024 The MAME Team