summaryrefslogtreecommitdiffstatshomepage
path: root/src/mess/machine/victor9k_fdc.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mess/machine/victor9k_fdc.h')
-rw-r--r--src/mess/machine/victor9k_fdc.h89
1 files changed, 35 insertions, 54 deletions
diff --git a/src/mess/machine/victor9k_fdc.h b/src/mess/machine/victor9k_fdc.h
index 29ad7004ce1..7dbda814334 100644
--- a/src/mess/machine/victor9k_fdc.h
+++ b/src/mess/machine/victor9k_fdc.h
@@ -18,6 +18,7 @@
#include "cpu/mcs48/mcs48.h"
#include "formats/victor9k_dsk.h"
#include "imagedev/floppy.h"
+#include "machine/6522via.h"
@@ -25,23 +26,8 @@
// INTERFACE CONFIGURATION MACROS
//**************************************************************************
-#define MCFG_VICTOR_9000_FDC_DS0_CB(_write) \
- devcb = &victor_9000_fdc_t::set_ds0_wr_callback(*device, DEVCB_##_write);
-
-#define MCFG_VICTOR_9000_FDC_DS1_CB(_write) \
- devcb = &victor_9000_fdc_t::set_ds1_wr_callback(*device, DEVCB_##_write);
-
-#define MCFG_VICTOR_9000_FDC_RDY0_CB(_write) \
- devcb = &victor_9000_fdc_t::set_rdy0_wr_callback(*device, DEVCB_##_write);
-
-#define MCFG_VICTOR_9000_FDC_RDY1_CB(_write) \
- devcb = &victor_9000_fdc_t::set_rdy1_wr_callback(*device, DEVCB_##_write);
-
-#define MCFG_VICTOR_9000_FDC_BRDY_CB(_write) \
- devcb = &victor_9000_fdc_t::set_brdy_wr_callback(*device, DEVCB_##_write);
-
-#define MCFG_VICTOR_9000_FDC_GCRERR_CB(_write) \
- devcb = &victor_9000_fdc_t::set_gcrerr_wr_callback(*device, DEVCB_##_write);
+#define MCFG_VICTOR_9000_FDC_IRQ_CB(_write) \
+ devcb = &victor_9000_fdc_t::set_irq_wr_callback(*device, DEVCB_##_write);
@@ -57,37 +43,14 @@ public:
// construction/destruction
victor_9000_fdc_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
- template<class _Object> static devcb_base &set_ds0_wr_callback(device_t &device, _Object object) { return downcast<victor_9000_fdc_t &>(device).m_ds0_cb.set_callback(object); }
- template<class _Object> static devcb_base &set_ds1_wr_callback(device_t &device, _Object object) { return downcast<victor_9000_fdc_t &>(device).m_ds1_cb.set_callback(object); }
- template<class _Object> static devcb_base &set_rdy0_wr_callback(device_t &device, _Object object) { return downcast<victor_9000_fdc_t &>(device).m_rdy0_cb.set_callback(object); }
- template<class _Object> static devcb_base &set_rdy1_wr_callback(device_t &device, _Object object) { return downcast<victor_9000_fdc_t &>(device).m_rdy1_cb.set_callback(object); }
- template<class _Object> static devcb_base &set_brdy_wr_callback(device_t &device, _Object object) { return downcast<victor_9000_fdc_t &>(device).m_brdy_cb.set_callback(object); }
- template<class _Object> static devcb_base &set_gcrerr_wr_callback(device_t &device, _Object object) { return downcast<victor_9000_fdc_t &>(device).m_gcrerr_cb.set_callback(object); }
-
- void set_floppy(floppy_image_device *floppy0, floppy_image_device *floppy1);
-
- void l0ms_w(UINT8 data) { m_lms = (m_lms & 0xf0) | (data & 0x0f); }
- void l1ms_w(UINT8 data) { m_lms = (data << 4) | (m_lms & 0x0f); }
- void st0_w(UINT8 data) { m_st0 = data; }
- void st1_w(UINT8 data) { m_st1 = data; }
- DECLARE_WRITE_LINE_MEMBER( side_select_w ) { m_side = state; }
- DECLARE_WRITE_LINE_MEMBER( drive_select_w ) { m_drive = state; }
- DECLARE_WRITE_LINE_MEMBER( stp0_w ) { m_stp0 = state; }
- DECLARE_WRITE_LINE_MEMBER( stp1_w ) { m_stp1 = state; }
- DECLARE_WRITE_LINE_MEMBER( drw_w ) { }
- DECLARE_WRITE_LINE_MEMBER( erase_w ) { }
- DECLARE_READ_LINE_MEMBER( trk0d0_r ) { return m_floppy0->trk00_r(); }
- DECLARE_READ_LINE_MEMBER( trk0d1_r ) { return m_floppy1->trk00_r(); }
- DECLARE_READ_LINE_MEMBER( wps_r ) { return m_drive ? m_floppy1->wpt_r() : m_floppy0->wpt_r(); }
- DECLARE_READ_LINE_MEMBER( sync_r ) { return 1; }
- DECLARE_WRITE_LINE_MEMBER( led0a_w ) { output_set_led_value(LED_A, state); }
- DECLARE_WRITE_LINE_MEMBER( led1a_w ) { output_set_led_value(LED_B, state); }
- DECLARE_READ_LINE_MEMBER( rdy0_r ) { return m_rdy0; }
- DECLARE_READ_LINE_MEMBER( rdy1_r ) { return m_rdy1; }
- DECLARE_READ_LINE_MEMBER( ds0_r ) { return m_ds0; }
- DECLARE_READ_LINE_MEMBER( ds1_r ) { return m_ds1; }
- DECLARE_READ_LINE_MEMBER( single_double_sided_r ) { return m_drive ? m_floppy1->twosid_r() : m_floppy0->twosid_r(); }
- DECLARE_WRITE_LINE_MEMBER( screset_w ) { if (!state) m_maincpu->reset(); }
+ template<class _Object> static devcb_base &set_irq_wr_callback(device_t &device, _Object object) { return downcast<victor_9000_fdc_t &>(device).m_irq_cb.set_callback(object); }
+
+ DECLARE_READ8_MEMBER( cs5_r ) { return m_via4->read(space, offset); }
+ DECLARE_WRITE8_MEMBER( cs5_w ) { return m_via4->write(space, offset, data); }
+ DECLARE_READ8_MEMBER( cs6_r ) { return m_via6->read(space, offset); }
+ DECLARE_WRITE8_MEMBER( cs6_w ) { return m_via6->write(space, offset, data); }
+ DECLARE_READ8_MEMBER( cs7_r ) { return m_via5->read(space, offset); }
+ DECLARE_WRITE8_MEMBER( cs7_w ) { return m_via5->write(space, offset, data); }
DECLARE_FLOPPY_FORMATS( floppy_formats );
@@ -98,6 +61,22 @@ public:
DECLARE_READ8_MEMBER( tach1_r );
DECLARE_WRITE8_MEMBER( da_w );
+ DECLARE_WRITE8_MEMBER( via4_pa_w );
+ DECLARE_WRITE8_MEMBER( via4_pb_w );
+ DECLARE_WRITE_LINE_MEMBER( mode_w );
+ DECLARE_WRITE_LINE_MEMBER( via4_irq_w );
+
+ DECLARE_WRITE8_MEMBER( via5_pb_w );
+ DECLARE_WRITE_LINE_MEMBER( via5_irq_w );
+
+ DECLARE_READ8_MEMBER( via6_pa_r );
+ DECLARE_READ8_MEMBER( via6_pb_r );
+ DECLARE_WRITE8_MEMBER( via6_pa_w );
+ DECLARE_WRITE8_MEMBER( via6_pb_w );
+ DECLARE_WRITE_LINE_MEMBER( drw_w );
+ DECLARE_WRITE_LINE_MEMBER( erase_w );
+ DECLARE_WRITE_LINE_MEMBER( via6_irq_w );
+
protected:
// device-level overrides
virtual void device_start();
@@ -115,14 +94,12 @@ private:
LED_B
};
- devcb_write_line m_ds0_cb;
- devcb_write_line m_ds1_cb;
- devcb_write_line m_rdy0_cb;
- devcb_write_line m_rdy1_cb;
- devcb_write_line m_brdy_cb;
- devcb_write_line m_gcrerr_cb;
+ devcb_write_line m_irq_cb;
required_device<cpu_device> m_maincpu;
+ required_device<via6522_device> m_via4;
+ required_device<via6522_device> m_via5;
+ required_device<via6522_device> m_via6;
required_device<floppy_image_device> m_floppy0;
required_device<floppy_image_device> m_floppy1;
required_memory_region m_gcr_rom;
@@ -156,6 +133,10 @@ private:
int m_brdy;
int m_sync;
int m_gcrerr;
+
+ int m_via4_irq;
+ int m_via5_irq;
+ int m_via6_irq;
};