Previous 199869 Revisions Next

r33444 Wednesday 19th November, 2014 at 19:00:49 UTC by Olivier Galibert
pci: Add grossly hacked smbus [O. Galibert]
[src/emu/machine]pci-smbus.c pci-smbus.h pci.c

trunk/src/emu/machine/pci-smbus.c
r241955r241956
33const device_type SMBUS = &device_creator<smbus_device>;
44
55DEVICE_ADDRESS_MAP_START(map, 32, smbus_device)
6   AM_RANGE(0x00, 0x03) AM_READWRITE8 (hst_sts_r,        hst_sts_w,        0x000000ff)
7   AM_RANGE(0x00, 0x03) AM_READWRITE8 (hst_cnt_r,        hst_cnt_w,        0x00ff0000)
8   AM_RANGE(0x00, 0x03) AM_READWRITE8 (hst_cmd_r,        hst_cmd_w,        0xff000000)
9   AM_RANGE(0x04, 0x07) AM_READWRITE8 (xmit_slva_r,      xmit_slva_w,      0x000000ff)
10   AM_RANGE(0x04, 0x07) AM_READWRITE8 (hst_d0_r,         hst_d0_w,         0x0000ff00)
11   AM_RANGE(0x04, 0x07) AM_READWRITE8 (hst_d1_r,         hst_d1_w,         0x00ff0000)
12   AM_RANGE(0x04, 0x07) AM_READWRITE8 (host_block_db_r,  host_block_db_w,  0xff000000)
13   AM_RANGE(0x08, 0x0b) AM_READWRITE8 (pec_r,            pec_w,            0x000000ff)
14   AM_RANGE(0x08, 0x0b) AM_READWRITE8 (rcv_slva_r,       rcv_slva_w,       0x0000ff00)
15   AM_RANGE(0x08, 0x0b) AM_READWRITE16(slv_data_r,       slv_data_w,       0xffff0000)
16   AM_RANGE(0x0c, 0x0f) AM_READWRITE8 (aux_sts_r,        aux_sts_w,        0x000000ff)
17   AM_RANGE(0x0c, 0x0f) AM_READWRITE8 (aux_ctl_r,        aux_ctl_w,        0x0000ff00)
18   AM_RANGE(0x0c, 0x0f) AM_READWRITE8 (smlink_pin_ctl_r, smlink_pin_ctl_w, 0x00ff0000)
19   AM_RANGE(0x0c, 0x0f) AM_READWRITE8 (smbus_pin_ctl_r,  smbus_pin_ctl_w,  0xff000000)
20   AM_RANGE(0x10, 0x13) AM_READWRITE8 (slv_sts_r,        slv_sts_w,        0x000000ff)
21   AM_RANGE(0x10, 0x13) AM_READWRITE8 (slv_cmd_r,        slv_cmd_w,        0x0000ff00)
22   AM_RANGE(0x14, 0x17) AM_READ8      (notify_daddr_r,                     0x000000ff)
23   AM_RANGE(0x14, 0x17) AM_READ8      (notify_dlow_r,                      0x00ff0000)
24   AM_RANGE(0x14, 0x17) AM_READ8      (notify_dhigh_r,                     0xff000000)
625ADDRESS_MAP_END
726
827smbus_device::smbus_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
r241955r241956
2039void smbus_device::device_reset()
2140{
2241   pci_device::device_reset();
42   hst_sts = 0x00;
43   hst_cnt = 0x00;
44   hst_cmd = 0x00;
45   xmit_slva = 0x00;
46   hst_d0 = 0x00;
47   hst_d1 = 0x00;
48   host_block_db = 0x00;
49   pec = 0x00;
50   rcv_slva = 0x44;
51   slv_data = 0x0000;
52   aux_sts = 0x00;
53   aux_ctl = 0x00;
54   smlink_pin_ctl = 0x00;
55   smbus_pin_ctl = 0x00;
56   slv_sts = 0x00;
57   slv_cmd = 0x00;
58   notify_daddr = 0x00;
59   notify_dlow = 0x00;
60   notify_dhigh = 0x00;
2361}
62
63READ8_MEMBER  (smbus_device::hst_sts_r)
64{
65   return hst_sts;
66}
67
68WRITE8_MEMBER (smbus_device::hst_sts_w)
69{
70   hst_sts &= ~data;
71   logerror("%s: hst_sts = %02x\n", tag(), hst_sts);
72}
73
74READ8_MEMBER  (smbus_device::hst_cnt_r)
75{
76   return hst_cnt;
77}
78
79WRITE8_MEMBER (smbus_device::hst_cnt_w)
80{
81   hst_cnt = data;
82   logerror("%s: hst_cnt = %02x\n", tag(), hst_cnt);
83
84   if(xmit_slva != 0xa1)
85      hst_sts = 4;
86   else {
87      const UINT8 eeprom[256] = {
88         0x80, 0x08, 0x07, 0x0D, 0x0A, 0x02, 0x40, 0x00, 0x04, 0x50, 0x60, 0x00, 0x82, 0x08, 0x00, 0x01,
89         0x0E, 0x04, 0x08, 0x01, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x28, 0x3C, 0x28, 0x40,
90         0x60, 0x60, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x46, 0x28, 0x28, 0x55, 0x00, 0x00,
91         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCE,
92         0x7F, 0x7F, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x56, 0x53, 0x35, 0x31, 0x32, 0x4D, 0x42,
93         0x34, 0x30, 0x30, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
94         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
95         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
97         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
98         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
99         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
100         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
101         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
102         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
103         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
104      };
105
106      hst_sts = 2;
107      hst_d0 = eeprom[hst_cmd];
108   }
109}
110
111READ8_MEMBER  (smbus_device::hst_cmd_r)
112{
113   return hst_cmd;
114}
115
116WRITE8_MEMBER (smbus_device::hst_cmd_w)
117{
118   hst_cmd = data;
119   logerror("%s: hst_cmd = %02x\n", tag(), hst_cmd);
120}
121
122READ8_MEMBER  (smbus_device::xmit_slva_r)
123{
124   return xmit_slva;
125}
126
127WRITE8_MEMBER (smbus_device::xmit_slva_w)
128{
129   xmit_slva = data;
130   logerror("%s: xmit_slva = %02x\n", tag(), xmit_slva);
131}
132
133READ8_MEMBER  (smbus_device::hst_d0_r)
134{
135   return hst_d0;
136}
137
138WRITE8_MEMBER (smbus_device::hst_d0_w)
139{
140   hst_d0 = data;
141   logerror("%s: hst_d0 = %02x\n", tag(), hst_d0);
142}
143
144READ8_MEMBER  (smbus_device::hst_d1_r)
145{
146   return hst_d1;
147}
148
149WRITE8_MEMBER (smbus_device::hst_d1_w)
150{
151   hst_d1 = data;
152   logerror("%s: hst_d1 = %02x\n", tag(), hst_d1);
153}
154
155READ8_MEMBER  (smbus_device::host_block_db_r)
156{
157   return host_block_db;
158}
159
160WRITE8_MEMBER (smbus_device::host_block_db_w)
161{
162   host_block_db = data;
163   logerror("%s: host_block_db = %02x\n", tag(), host_block_db);
164}
165
166READ8_MEMBER  (smbus_device::pec_r)
167{
168   return pec;
169}
170
171WRITE8_MEMBER (smbus_device::pec_w)
172{
173   pec = data;
174   logerror("%s: pec = %02x\n", tag(), pec);
175}
176
177READ8_MEMBER  (smbus_device::rcv_slva_r)
178{
179   return rcv_slva;
180}
181
182WRITE8_MEMBER (smbus_device::rcv_slva_w)
183{
184   rcv_slva = data;
185   logerror("%s: rcv_slva = %02x\n", tag(), rcv_slva);
186}
187
188READ16_MEMBER (smbus_device::slv_data_r)
189{
190   return slv_data;
191}
192
193WRITE16_MEMBER(smbus_device::slv_data_w)
194{
195   slv_data = data;
196   logerror("%s: slv_data = %02x\n", tag(), slv_data);
197}
198
199READ8_MEMBER  (smbus_device::aux_sts_r)
200{
201   return aux_sts;
202}
203
204WRITE8_MEMBER (smbus_device::aux_sts_w)
205{
206   aux_sts = data;
207   logerror("%s: aux_sts = %02x\n", tag(), aux_sts);
208}
209
210READ8_MEMBER  (smbus_device::aux_ctl_r)
211{
212   return aux_ctl;
213}
214
215WRITE8_MEMBER (smbus_device::aux_ctl_w)
216{
217   aux_ctl = data;
218   logerror("%s: aux_ctl = %02x\n", tag(), aux_ctl);
219}
220
221READ8_MEMBER  (smbus_device::smlink_pin_ctl_r)
222{
223   return smlink_pin_ctl;
224}
225
226WRITE8_MEMBER (smbus_device::smlink_pin_ctl_w)
227{
228   smlink_pin_ctl = data;
229   logerror("%s: smlink_pin_ctl = %02x\n", tag(), smlink_pin_ctl);
230}
231
232READ8_MEMBER  (smbus_device::smbus_pin_ctl_r)
233{
234   return smbus_pin_ctl;
235}
236
237WRITE8_MEMBER (smbus_device::smbus_pin_ctl_w)
238{
239   smbus_pin_ctl = data;
240   logerror("%s: smbus_pin_ctl = %02x\n", tag(), smbus_pin_ctl);
241}
242
243READ8_MEMBER  (smbus_device::slv_sts_r)
244{
245   return slv_sts;
246}
247
248WRITE8_MEMBER (smbus_device::slv_sts_w)
249{
250   slv_sts = data;
251   logerror("%s: slv_sts = %02x\n", tag(), slv_sts);
252}
253
254READ8_MEMBER  (smbus_device::slv_cmd_r)
255{
256   return slv_cmd;
257}
258
259WRITE8_MEMBER (smbus_device::slv_cmd_w)
260{
261   slv_cmd = data;
262   logerror("%s: slv_cmd = %02x\n", tag(), slv_cmd);
263}
264
265READ8_MEMBER  (smbus_device::notify_daddr_r)
266{
267   return notify_daddr;
268}
269
270READ8_MEMBER  (smbus_device::notify_dlow_r)
271{
272   return notify_dlow;
273}
274
275READ8_MEMBER  (smbus_device::notify_dhigh_r)
276{
277   return notify_dhigh;
278}
trunk/src/emu/machine/pci-smbus.h
r241955r241956
1010public:
1111   smbus_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
1212
13   DECLARE_READ8_MEMBER  (hst_sts_r);
14   DECLARE_WRITE8_MEMBER (hst_sts_w);
15   DECLARE_READ8_MEMBER  (hst_cnt_r);
16   DECLARE_WRITE8_MEMBER (hst_cnt_w);
17   DECLARE_READ8_MEMBER  (hst_cmd_r);
18   DECLARE_WRITE8_MEMBER (hst_cmd_w);
19   DECLARE_READ8_MEMBER  (xmit_slva_r);
20   DECLARE_WRITE8_MEMBER (xmit_slva_w);
21   DECLARE_READ8_MEMBER  (hst_d0_r);
22   DECLARE_WRITE8_MEMBER (hst_d0_w);
23   DECLARE_READ8_MEMBER  (hst_d1_r);
24   DECLARE_WRITE8_MEMBER (hst_d1_w);
25   DECLARE_READ8_MEMBER  (host_block_db_r);
26   DECLARE_WRITE8_MEMBER (host_block_db_w);
27   DECLARE_READ8_MEMBER  (pec_r);
28   DECLARE_WRITE8_MEMBER (pec_w);
29   DECLARE_READ8_MEMBER  (rcv_slva_r);
30   DECLARE_WRITE8_MEMBER (rcv_slva_w);
31   DECLARE_READ16_MEMBER (slv_data_r);
32   DECLARE_WRITE16_MEMBER(slv_data_w);
33   DECLARE_READ8_MEMBER  (aux_sts_r);
34   DECLARE_WRITE8_MEMBER (aux_sts_w);
35   DECLARE_READ8_MEMBER  (aux_ctl_r);
36   DECLARE_WRITE8_MEMBER (aux_ctl_w);
37   DECLARE_READ8_MEMBER  (smlink_pin_ctl_r);
38   DECLARE_WRITE8_MEMBER (smlink_pin_ctl_w);
39   DECLARE_READ8_MEMBER  (smbus_pin_ctl_r);
40   DECLARE_WRITE8_MEMBER (smbus_pin_ctl_w);
41   DECLARE_READ8_MEMBER  (slv_sts_r);
42   DECLARE_WRITE8_MEMBER (slv_sts_w);
43   DECLARE_READ8_MEMBER  (slv_cmd_r);
44   DECLARE_WRITE8_MEMBER (slv_cmd_w);
45   DECLARE_READ8_MEMBER  (notify_daddr_r);
46   DECLARE_READ8_MEMBER  (notify_dlow_r);
47   DECLARE_READ8_MEMBER  (notify_dhigh_r);
48
1349protected:
1450   virtual void device_start();
1551   virtual void device_reset();
1652
1753private:
1854   DECLARE_ADDRESS_MAP(map, 32);
55
56   UINT16 slv_data;
57
58   UINT8 hst_sts, hst_cnt, hst_cmd, xmit_slva, hst_d0, hst_d1;
59   UINT8 host_block_db, pec, rcv_slva, aux_sts, aux_ctl;
60   UINT8 smlink_pin_ctl, smbus_pin_ctl, slv_sts, slv_cmd, notify_daddr, notify_dlow, notify_dhigh;
1961};
2062
2163extern const device_type SMBUS;
trunk/src/emu/machine/pci.c
r241955r241956
1717
1818   AM_RANGE(0x2c, 0x2f) AM_READ16     (subvendor_r,                       0x0000ffff)
1919   AM_RANGE(0x2c, 0x2f) AM_READ16     (subsystem_r,                       0xffff0000)
20   AM_RANGE(0x2c, 0x2f) AM_WRITENOP
2021
2122   AM_RANGE(0x34, 0x37) AM_READ8      (capptr_r,                          0x000000ff)
2223ADDRESS_MAP_END


Previous 199869 Revisions Next


© 1997-2024 The MAME Team