From fae0bac008aee8064708c345db4dd9b4a0fbe0bd Mon Sep 17 00:00:00 2001 From: smf- Date: Thu, 25 Oct 2012 11:21:16 +0000 Subject: [PATCH] started thinking about how multi-endpoint devices will work, using a hierarchy has too many limitations (nw) --- src/emu/machine/scsibus.c | 1 + src/emu/machine/scsidev.c | 1 - src/emu/machine/scsidev.h | 17 ++++++++++++----- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/emu/machine/scsibus.c b/src/emu/machine/scsibus.c index bf11f57a0b5..c58c6798cc5 100644 --- a/src/emu/machine/scsibus.c +++ b/src/emu/machine/scsibus.c @@ -46,6 +46,7 @@ void scsibus_device::device_start() if( scsidev != NULL ) { devices[ deviceCount++ ] = scsidev; + scsidev->m_scsibus = this; } } diff --git a/src/emu/machine/scsidev.c b/src/emu/machine/scsidev.c index f6a4f3fcc21..24af6eac527 100644 --- a/src/emu/machine/scsidev.c +++ b/src/emu/machine/scsidev.c @@ -151,6 +151,5 @@ void scsidev_device::scsi_out( UINT32 data, UINT32 mask ) data_out = ( data_out & ~mask ) | ( data & mask ); - scsibus_device *m_scsibus = downcast( owner() ); m_scsibus->scsi_update(); } diff --git a/src/emu/machine/scsidev.h b/src/emu/machine/scsidev.h index 689666a5e10..913eef70ba5 100644 --- a/src/emu/machine/scsidev.h +++ b/src/emu/machine/scsidev.h @@ -25,21 +25,28 @@ Base class for SCSI devices. #define SCSI_MASK_RST ( 0x2000000 ) #define SCSI_MASK_ALL ( 0x3ffffff ) +class scsibus_device; + // base handler class scsidev_device : public device_t { + friend class scsibus_device; + public: // construction/destruction scsidev_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock); - virtual void scsi_in( UINT32 data, UINT32 mask ) = 0; - void scsi_out( UINT32 data, UINT32 mask ); - - UINT32 data_out; - protected: // device-level overrides virtual void device_start(); + + void scsi_out( UINT32 data, UINT32 mask ); + +private: + virtual void scsi_in( UINT32 data, UINT32 mask ) = 0; + + UINT32 data_out; + scsibus_device *m_scsibus; }; #endif