blob: 0e5873f5cf501d427c4c31df3b282729e67c855f (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
// license:MAME
// copyright-holders:smf
/*
scsibus.c
*/
#include "emu.h"
#include "machine/scsibus.h"
void scsibus_device::scsi_update()
{
UINT32 newdata = 0;
for( int i = 0; i < deviceCount; i++ )
{
newdata |= devices[ i ]->data_out;
}
newdata &= SCSI_MASK_ALL;
UINT32 mask = data ^ newdata;
if( mask != 0 )
{
data = newdata;
for( int i = 0; i < deviceCount; i++ )
{
devices[ i ]->scsi_in( data, mask );
}
}
}
scsibus_device::scsibus_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: device_t(mconfig, SCSIBUS, "SCSI bus", tag, owner, clock, "scsibus", __FILE__)
{
}
void scsibus_device::device_start()
{
deviceCount = 0;
for( device_t *device = first_subdevice(); device != NULL; device = device->next() )
{
scsidev_device *scsidev = dynamic_cast<scsidev_device *>(device);
if( scsidev != NULL )
{
devices[ deviceCount++ ] = scsidev;
scsidev->m_scsibus = this;
}
}
data = 0;
}
const device_type SCSIBUS = &device_creator<scsibus_device>;
|