summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author smf- <smf-@users.noreply.github.com>2012-10-25 11:21:16 +0000
committer smf- <smf-@users.noreply.github.com>2012-10-25 11:21:16 +0000
commitfae0bac008aee8064708c345db4dd9b4a0fbe0bd (patch)
tree7788516f6846486362a3284af19c33e40179602a
parent4212614f8371e01d8fd9049745188f437d78f5f6 (diff)
started thinking about how multi-endpoint devices will work, using a hierarchy has too many limitations (nw)
-rw-r--r--src/emu/machine/scsibus.c1
-rw-r--r--src/emu/machine/scsidev.c1
-rw-r--r--src/emu/machine/scsidev.h17
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<scsibus_device *>( 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