trunk/src/emu/machine/pci-smbus.c
| r241955 | r241956 | |
| 3 | 3 | const device_type SMBUS = &device_creator<smbus_device>; |
| 4 | 4 | |
| 5 | 5 | DEVICE_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) |
| 6 | 25 | ADDRESS_MAP_END |
| 7 | 26 | |
| 8 | 27 | smbus_device::smbus_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| r241955 | r241956 | |
| 20 | 39 | void smbus_device::device_reset() |
| 21 | 40 | { |
| 22 | 41 | 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; |
| 23 | 61 | } |
| 62 | |
| 63 | READ8_MEMBER (smbus_device::hst_sts_r) |
| 64 | { |
| 65 | return hst_sts; |
| 66 | } |
| 67 | |
| 68 | WRITE8_MEMBER (smbus_device::hst_sts_w) |
| 69 | { |
| 70 | hst_sts &= ~data; |
| 71 | logerror("%s: hst_sts = %02x\n", tag(), hst_sts); |
| 72 | } |
| 73 | |
| 74 | READ8_MEMBER (smbus_device::hst_cnt_r) |
| 75 | { |
| 76 | return hst_cnt; |
| 77 | } |
| 78 | |
| 79 | WRITE8_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 | |
| 111 | READ8_MEMBER (smbus_device::hst_cmd_r) |
| 112 | { |
| 113 | return hst_cmd; |
| 114 | } |
| 115 | |
| 116 | WRITE8_MEMBER (smbus_device::hst_cmd_w) |
| 117 | { |
| 118 | hst_cmd = data; |
| 119 | logerror("%s: hst_cmd = %02x\n", tag(), hst_cmd); |
| 120 | } |
| 121 | |
| 122 | READ8_MEMBER (smbus_device::xmit_slva_r) |
| 123 | { |
| 124 | return xmit_slva; |
| 125 | } |
| 126 | |
| 127 | WRITE8_MEMBER (smbus_device::xmit_slva_w) |
| 128 | { |
| 129 | xmit_slva = data; |
| 130 | logerror("%s: xmit_slva = %02x\n", tag(), xmit_slva); |
| 131 | } |
| 132 | |
| 133 | READ8_MEMBER (smbus_device::hst_d0_r) |
| 134 | { |
| 135 | return hst_d0; |
| 136 | } |
| 137 | |
| 138 | WRITE8_MEMBER (smbus_device::hst_d0_w) |
| 139 | { |
| 140 | hst_d0 = data; |
| 141 | logerror("%s: hst_d0 = %02x\n", tag(), hst_d0); |
| 142 | } |
| 143 | |
| 144 | READ8_MEMBER (smbus_device::hst_d1_r) |
| 145 | { |
| 146 | return hst_d1; |
| 147 | } |
| 148 | |
| 149 | WRITE8_MEMBER (smbus_device::hst_d1_w) |
| 150 | { |
| 151 | hst_d1 = data; |
| 152 | logerror("%s: hst_d1 = %02x\n", tag(), hst_d1); |
| 153 | } |
| 154 | |
| 155 | READ8_MEMBER (smbus_device::host_block_db_r) |
| 156 | { |
| 157 | return host_block_db; |
| 158 | } |
| 159 | |
| 160 | WRITE8_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 | |
| 166 | READ8_MEMBER (smbus_device::pec_r) |
| 167 | { |
| 168 | return pec; |
| 169 | } |
| 170 | |
| 171 | WRITE8_MEMBER (smbus_device::pec_w) |
| 172 | { |
| 173 | pec = data; |
| 174 | logerror("%s: pec = %02x\n", tag(), pec); |
| 175 | } |
| 176 | |
| 177 | READ8_MEMBER (smbus_device::rcv_slva_r) |
| 178 | { |
| 179 | return rcv_slva; |
| 180 | } |
| 181 | |
| 182 | WRITE8_MEMBER (smbus_device::rcv_slva_w) |
| 183 | { |
| 184 | rcv_slva = data; |
| 185 | logerror("%s: rcv_slva = %02x\n", tag(), rcv_slva); |
| 186 | } |
| 187 | |
| 188 | READ16_MEMBER (smbus_device::slv_data_r) |
| 189 | { |
| 190 | return slv_data; |
| 191 | } |
| 192 | |
| 193 | WRITE16_MEMBER(smbus_device::slv_data_w) |
| 194 | { |
| 195 | slv_data = data; |
| 196 | logerror("%s: slv_data = %02x\n", tag(), slv_data); |
| 197 | } |
| 198 | |
| 199 | READ8_MEMBER (smbus_device::aux_sts_r) |
| 200 | { |
| 201 | return aux_sts; |
| 202 | } |
| 203 | |
| 204 | WRITE8_MEMBER (smbus_device::aux_sts_w) |
| 205 | { |
| 206 | aux_sts = data; |
| 207 | logerror("%s: aux_sts = %02x\n", tag(), aux_sts); |
| 208 | } |
| 209 | |
| 210 | READ8_MEMBER (smbus_device::aux_ctl_r) |
| 211 | { |
| 212 | return aux_ctl; |
| 213 | } |
| 214 | |
| 215 | WRITE8_MEMBER (smbus_device::aux_ctl_w) |
| 216 | { |
| 217 | aux_ctl = data; |
| 218 | logerror("%s: aux_ctl = %02x\n", tag(), aux_ctl); |
| 219 | } |
| 220 | |
| 221 | READ8_MEMBER (smbus_device::smlink_pin_ctl_r) |
| 222 | { |
| 223 | return smlink_pin_ctl; |
| 224 | } |
| 225 | |
| 226 | WRITE8_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 | |
| 232 | READ8_MEMBER (smbus_device::smbus_pin_ctl_r) |
| 233 | { |
| 234 | return smbus_pin_ctl; |
| 235 | } |
| 236 | |
| 237 | WRITE8_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 | |
| 243 | READ8_MEMBER (smbus_device::slv_sts_r) |
| 244 | { |
| 245 | return slv_sts; |
| 246 | } |
| 247 | |
| 248 | WRITE8_MEMBER (smbus_device::slv_sts_w) |
| 249 | { |
| 250 | slv_sts = data; |
| 251 | logerror("%s: slv_sts = %02x\n", tag(), slv_sts); |
| 252 | } |
| 253 | |
| 254 | READ8_MEMBER (smbus_device::slv_cmd_r) |
| 255 | { |
| 256 | return slv_cmd; |
| 257 | } |
| 258 | |
| 259 | WRITE8_MEMBER (smbus_device::slv_cmd_w) |
| 260 | { |
| 261 | slv_cmd = data; |
| 262 | logerror("%s: slv_cmd = %02x\n", tag(), slv_cmd); |
| 263 | } |
| 264 | |
| 265 | READ8_MEMBER (smbus_device::notify_daddr_r) |
| 266 | { |
| 267 | return notify_daddr; |
| 268 | } |
| 269 | |
| 270 | READ8_MEMBER (smbus_device::notify_dlow_r) |
| 271 | { |
| 272 | return notify_dlow; |
| 273 | } |
| 274 | |
| 275 | READ8_MEMBER (smbus_device::notify_dhigh_r) |
| 276 | { |
| 277 | return notify_dhigh; |
| 278 | } |
trunk/src/emu/machine/pci-smbus.h
| r241955 | r241956 | |
| 10 | 10 | public: |
| 11 | 11 | smbus_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); |
| 12 | 12 | |
| 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 | |
| 13 | 49 | protected: |
| 14 | 50 | virtual void device_start(); |
| 15 | 51 | virtual void device_reset(); |
| 16 | 52 | |
| 17 | 53 | private: |
| 18 | 54 | 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; |
| 19 | 61 | }; |
| 20 | 62 | |
| 21 | 63 | extern const device_type SMBUS; |