trunk/src/mess/drivers/snes.c
| r21583 | r21584 | |
| 108 | 108 | static READ8_HANDLER( snes_lo_r ) |
| 109 | 109 | { |
| 110 | 110 | snes_state *state = space.machine().driver_data<snes_state>(); |
| 111 | UINT16 address = offset & 0xffff; |
| 112 | |
| 111 | 113 | // take care of add-on chip access |
| 112 | 114 | if (state->m_has_addon_chip == HAS_OBC1 |
| 113 | | && (offset < 0x400000 && (offset & 0xffff) >= 0x6000 && (offset & 0xffff) < 0x8000)) |
| 115 | && (offset < 0x400000 && address >= 0x6000 && address < 0x8000)) |
| 114 | 116 | return obc1_read(space, offset, mem_mask); |
| 115 | 117 | if (state->m_has_addon_chip == HAS_CX4 |
| 116 | | && (offset < 0x400000 && (offset & 0xffff) >= 0x6000 && (offset & 0xffff) < 0x8000)) |
| 117 | | return CX4_read((offset & 0xffff) - 0x6000); |
| 118 | && (offset < 0x400000 && address >= 0x6000 && address < 0x8000)) |
| 119 | return CX4_read(address - 0x6000); |
| 118 | 120 | if (state->m_has_addon_chip == HAS_RTC |
| 119 | | && (offset < 0x400000 && ((offset & 0xffff) == 0x2800 || (offset & 0xffff) == 0x2801))) |
| 121 | && (offset < 0x400000 && (address == 0x2800 || address == 0x2801))) |
| 120 | 122 | return srtc_read(space, offset); |
| 121 | 123 | if (state->m_has_addon_chip == HAS_ST010 || state->m_has_addon_chip == HAS_ST011) |
| 122 | 124 | { |
| 123 | | if (offset >= 0x680000 && offset < 0x700000 && (offset & 0xffff) < 0x1000) |
| 124 | | return st010_read_ram(state, (offset & 0xffff)); |
| 125 | if (offset >= 0x680000 && offset < 0x700000 && address < 0x1000) |
| 126 | return st010_read_ram(state, address); |
| 125 | 127 | if (offset == 0x600000 || offset == 0x600001) |
| 126 | 128 | return (offset & 1) ? st010_get_sr() : st010_get_dr(); |
| 127 | 129 | } |
| 128 | 130 | if (state->m_cart[0].mode == SNES_MODE_21 && state->m_has_addon_chip == HAS_DSP1 |
| 129 | | && (offset < 0x200000 && (offset & 0xffff) >= 0x6000 && (offset & 0xffff) < 0x8000)) |
| 130 | | return ((offset & 0xffff) < 0x7000) ? dsp_get_dr() : dsp_get_sr(); |
| 131 | && (offset < 0x200000 && address >= 0x6000 && address < 0x8000)) |
| 132 | return (address < 0x7000) ? dsp_get_dr() : dsp_get_sr(); |
| 131 | 133 | if (state->m_cart[0].mode == SNES_MODE_20 && state->m_has_addon_chip == HAS_DSP1) |
| 132 | 134 | { |
| 133 | 135 | if (offset >= 0x200000 && offset < 0x400000 && (offset & 0x8000) == 0x8000) |
| 134 | | return ((offset & 0xffff) < 0xc000) ? dsp_get_dr() : dsp_get_sr(); |
| 136 | return (address < 0xc000) ? dsp_get_dr() : dsp_get_sr(); |
| 135 | 137 | if (offset >= 0x600000 && offset < 0x700000 && (offset & 0x8000) == 0x0000) |
| 136 | | return ((offset & 0xffff) < 0x4000) ? dsp_get_dr() : dsp_get_sr(); |
| 138 | return (address < 0x4000) ? dsp_get_dr() : dsp_get_sr(); |
| 137 | 139 | } |
| 138 | 140 | if ((state->m_has_addon_chip == HAS_DSP2 || state->m_has_addon_chip == HAS_DSP3) |
| 139 | 141 | && (offset >= 0x200000 && offset < 0x400000 && (offset & 0x8000) == 0x8000)) |
| 140 | | return ((offset & 0xffff) < 0xc000) ? dsp_get_dr() : dsp_get_sr(); |
| 142 | return (address < 0xc000) ? dsp_get_dr() : dsp_get_sr(); |
| 141 | 143 | if (state->m_has_addon_chip == HAS_DSP4 |
| 142 | 144 | && (offset >= 0x300000 && offset < 0x400000 && (offset & 0x8000) == 0x8000)) |
| 143 | | return ((offset & 0xffff) < 0xc000) ? dsp_get_dr() : dsp_get_sr(); |
| 145 | return (address < 0xc000) ? dsp_get_dr() : dsp_get_sr(); |
| 144 | 146 | if (state->m_has_addon_chip == HAS_SDD1 |
| 145 | | && (offset < 0x400000 && (offset & 0xffff) >= 0x4800 && (offset & 0xffff) < 0x4808)) |
| 146 | | return sdd1_mmio_read(space, (UINT32)(offset & 0xffff)); |
| 147 | && (offset < 0x400000 && address >= 0x4800 && address < 0x4808)) |
| 148 | return sdd1_mmio_read(space, (UINT32)address); |
| 147 | 149 | if ((state->m_has_addon_chip == HAS_SPC7110 || state->m_has_addon_chip == HAS_SPC7110_RTC) |
| 148 | 150 | && offset < 0x400000) |
| 149 | 151 | { |
| 150 | 152 | UINT16 limit = (state->m_has_addon_chip == HAS_SPC7110_RTC) ? 0x4842 : 0x483f; |
| 151 | | if ((offset & 0xffff) >= 0x4800 && (offset & 0xffff) <= limit) |
| 152 | | return spc7110_mmio_read(space, (UINT32)(offset & 0xffff)); |
| 153 | | if (offset < 0x10000 && (offset & 0xffff) >= 0x6000 && (offset & 0xffff) < 0x8000) |
| 154 | | return snes_ram[0x306000 + (offset & 0x1fff)]; |
| 155 | | if (offset >= 0x300000 && offset < 0x310000 && (offset & 0xffff) >= 0x6000 && (offset & 0xffff) < 0x8000) |
| 156 | | return snes_ram[0x306000 + (offset & 0x1fff)]; |
| 153 | if (address >= 0x4800 && address <= limit) |
| 154 | return spc7110_mmio_read(space, (UINT32)address); |
| 155 | if (offset < 0x10000 && address >= 0x6000 && address < 0x8000) |
| 156 | return snes_ram[0x306000 + (address & 0x1fff)]; |
| 157 | if (offset >= 0x300000 && offset < 0x310000 && address >= 0x6000 && address < 0x8000) |
| 158 | return snes_ram[0x306000 + (address & 0x1fff)]; |
| 157 | 159 | } |
| 158 | 160 | if ((state->m_has_addon_chip == HAS_SPC7110 || state->m_has_addon_chip == HAS_SPC7110_RTC) |
| 159 | 161 | && offset >= 0x500000 && offset < 0x510000) |
| r21583 | r21584 | |
| 175 | 177 | static READ8_HANDLER( snes_hi_r ) |
| 176 | 178 | { |
| 177 | 179 | snes_state *state = space.machine().driver_data<snes_state>(); |
| 180 | UINT16 address = offset & 0xffff; |
| 181 | |
| 178 | 182 | // take care of add-on chip access |
| 179 | 183 | if (state->m_has_addon_chip == HAS_OBC1 |
| 180 | | && (offset < 0x400000 && (offset & 0xffff) >= 0x6000 && (offset & 0xffff) < 0x8000)) |
| 184 | && (offset < 0x400000 && address >= 0x6000 && address < 0x8000)) |
| 181 | 185 | return obc1_read(space, offset, mem_mask); |
| 182 | 186 | if (state->m_has_addon_chip == HAS_CX4 |
| 183 | | && (offset < 0x400000 && (offset & 0xffff) >= 0x6000 && (offset & 0xffff) < 0x8000)) |
| 184 | | return CX4_read((offset & 0xffff) - 0x6000); |
| 187 | && (offset < 0x400000 && address >= 0x6000 && address < 0x8000)) |
| 188 | return CX4_read(address - 0x6000); |
| 185 | 189 | if (state->m_has_addon_chip == HAS_RTC |
| 186 | | && (offset < 0x400000 && ((offset & 0xffff) == 0x2800 || (offset & 0xffff) == 0x2801))) |
| 190 | && (offset < 0x400000 && (address == 0x2800 || address == 0x2801))) |
| 187 | 191 | return srtc_read(space, offset); |
| 188 | 192 | if (state->m_has_addon_chip == HAS_ST010 || state->m_has_addon_chip == HAS_ST011) |
| 189 | 193 | { |
| 190 | | if (offset >= 0x680000 && offset < 0x700000 && (offset & 0xffff) < 0x1000) |
| 191 | | return st010_read_ram(state, (offset & 0xffff)); |
| 194 | if (offset >= 0x680000 && offset < 0x700000 && address < 0x1000) |
| 195 | return st010_read_ram(state, address); |
| 192 | 196 | if (offset == 0x600000 || offset == 0x600001) |
| 193 | 197 | return (offset & 1) ? st010_get_sr() : st010_get_dr(); |
| 194 | 198 | } |
| 195 | 199 | if (state->m_cart[0].mode == SNES_MODE_21 && state->m_has_addon_chip == HAS_DSP1 |
| 196 | | && (offset < 0x200000 && (offset & 0xffff) >= 0x6000 && (offset & 0xffff) < 0x8000)) |
| 197 | | return ((offset & 0xffff) < 0x7000) ? dsp_get_dr() : dsp_get_sr(); |
| 200 | && (offset < 0x200000 && address >= 0x6000 && address < 0x8000)) |
| 201 | return (address < 0x7000) ? dsp_get_dr() : dsp_get_sr(); |
| 198 | 202 | if (state->m_cart[0].mode == SNES_MODE_20 && state->m_has_addon_chip == HAS_DSP1) |
| 199 | 203 | { |
| 200 | 204 | if (offset >= 0x200000 && offset < 0x400000 && (offset & 0x8000) == 0x8000) |
| 201 | | return ((offset & 0xffff) < 0xc000) ? dsp_get_dr() : dsp_get_sr(); |
| 205 | return (address < 0xc000) ? dsp_get_dr() : dsp_get_sr(); |
| 202 | 206 | if (offset >= 0x600000 && offset < 0x700000 && (offset & 0x8000) == 0x0000) |
| 203 | | return ((offset & 0xffff) < 0x4000) ? dsp_get_dr() : dsp_get_sr(); |
| 207 | return (address < 0x4000) ? dsp_get_dr() : dsp_get_sr(); |
| 204 | 208 | } |
| 205 | 209 | if ((state->m_has_addon_chip == HAS_DSP2 || state->m_has_addon_chip == HAS_DSP3) |
| 206 | 210 | && (offset >= 0x200000 && offset < 0x400000 && (offset & 0x8000) == 0x8000)) |
| 207 | | return ((offset & 0xffff) < 0xc000) ? dsp_get_dr() : dsp_get_sr(); |
| 211 | return (address < 0xc000) ? dsp_get_dr() : dsp_get_sr(); |
| 208 | 212 | if (state->m_has_addon_chip == HAS_DSP4 |
| 209 | 213 | && (offset >= 0x300000 && offset < 0x400000 && (offset & 0x8000) == 0x8000)) |
| 210 | | return ((offset & 0xffff) < 0xc000) ? dsp_get_dr() : dsp_get_sr(); |
| 214 | return (address < 0xc000) ? dsp_get_dr() : dsp_get_sr(); |
| 211 | 215 | if (state->m_has_addon_chip == HAS_SDD1 |
| 212 | | && (offset < 0x400000 && (offset & 0xffff) >= 0x4800 && (offset & 0xffff) < 0x4808)) |
| 213 | | return sdd1_mmio_read(space, (UINT32)(offset & 0xffff)); |
| 216 | && (offset < 0x400000 && address >= 0x4800 && address < 0x4808)) |
| 217 | return sdd1_mmio_read(space, (UINT32)address); |
| 214 | 218 | if (state->m_has_addon_chip == HAS_SDD1 && offset >= 0x400000) |
| 215 | 219 | return sdd1_read(space.machine(), offset - 0x400000); |
| 216 | 220 | if ((state->m_has_addon_chip == HAS_SPC7110 || state->m_has_addon_chip == HAS_SPC7110_RTC) |
| 217 | 221 | && offset < 0x400000) |
| 218 | 222 | { |
| 219 | 223 | UINT16 limit = (state->m_has_addon_chip == HAS_SPC7110_RTC) ? 0x4842 : 0x483f; |
| 220 | | if ((offset & 0xffff) >= 0x4800 && (offset & 0xffff) <= limit) |
| 221 | | return spc7110_mmio_read(space, (UINT32)(offset & 0xffff)); |
| 222 | | if (offset < 0x10000 && (offset & 0xffff) >= 0x6000 && (offset & 0xffff) < 0x8000) |
| 223 | | return snes_ram[0x306000 + (offset & 0x1fff)]; |
| 224 | | if (offset >= 0x300000 && offset < 0x310000 && (offset & 0xffff) >= 0x6000 && (offset & 0xffff) < 0x8000) |
| 225 | | return snes_ram[0x306000 + (offset & 0x1fff)]; |
| 224 | if (address >= 0x4800 && address <= limit) |
| 225 | return spc7110_mmio_read(space, (UINT32)address); |
| 226 | if (offset < 0x10000 && address >= 0x6000 && address < 0x8000) |
| 227 | return snes_ram[0x306000 + (address & 0x1fff)]; |
| 228 | if (offset >= 0x300000 && offset < 0x310000 && address >= 0x6000 && address < 0x8000) |
| 229 | return snes_ram[0x306000 + (address & 0x1fff)]; |
| 226 | 230 | } |
| 227 | 231 | if ((state->m_has_addon_chip == HAS_SPC7110 || state->m_has_addon_chip == HAS_SPC7110_RTC) |
| 228 | 232 | && offset >= 0x500000) |
| r21583 | r21584 | |
| 238 | 242 | static WRITE8_HANDLER( snes_lo_w ) |
| 239 | 243 | { |
| 240 | 244 | snes_state *state = space.machine().driver_data<snes_state>(); |
| 245 | UINT16 address = offset & 0xffff; |
| 246 | |
| 241 | 247 | // take care of add-on chip access |
| 242 | 248 | if (state->m_has_addon_chip == HAS_OBC1 |
| 243 | | && (offset < 0x400000 && (offset & 0xffff) >= 0x6000 && (offset & 0xffff) < 0x8000)) |
| 244 | | { |
| 245 | | obc1_write(space, offset, data, mem_mask); |
| 246 | | return; |
| 247 | | } |
| 249 | && (offset < 0x400000 && address >= 0x6000 && address < 0x8000)) |
| 250 | { obc1_write(space, offset, data, mem_mask); return; } |
| 248 | 251 | if (state->m_has_addon_chip == HAS_CX4 |
| 249 | | && (offset < 0x400000 && (offset & 0xffff) >= 0x6000 && (offset & 0xffff) < 0x8000)) |
| 250 | | { |
| 251 | | CX4_write(space.machine(), (offset & 0xffff) - 0x6000, data); |
| 252 | | return; |
| 253 | | } |
| 252 | && (offset < 0x400000 && address >= 0x6000 && address < 0x8000)) |
| 253 | { CX4_write(space.machine(), address - 0x6000, data); return; } |
| 254 | 254 | if (state->m_has_addon_chip == HAS_RTC |
| 255 | | && (offset < 0x400000 && ((offset & 0xffff) == 0x2800 || (offset & 0xffff) == 0x2801))) |
| 256 | | { |
| 257 | | srtc_write(space.machine(), offset, data); |
| 258 | | return; |
| 259 | | } |
| 255 | && (offset < 0x400000 && (address == 0x2800 || address == 0x2801))) |
| 256 | { srtc_write(space.machine(), offset, data); return; } |
| 260 | 257 | if (state->m_has_addon_chip == HAS_ST010 || state->m_has_addon_chip == HAS_ST011) |
| 261 | 258 | { |
| 262 | | if (offset >= 0x680000 && offset < 0x700000 && (offset & 0xffff) < 0x1000) |
| 263 | | { st010_write_ram(state, (offset & 0xffff), data); return; } |
| 259 | if (offset >= 0x680000 && offset < 0x700000 && address < 0x1000) |
| 260 | { st010_write_ram(state, address, data); return; } |
| 264 | 261 | if (offset == 0x600000) |
| 265 | 262 | { st010_set_dr(data); return; } |
| 266 | 263 | if (offset == 0x600001) |
| 267 | 264 | { st010_set_sr(data); return; } |
| 268 | 265 | } |
| 269 | 266 | if (state->m_cart[0].mode == SNES_MODE_21 && state->m_has_addon_chip == HAS_DSP1 |
| 270 | | && (offset < 0x200000 && (offset & 0xffff) >= 0x6000 && (offset & 0xffff) < 0x8000)) |
| 271 | | { |
| 272 | | dsp_set_dr(data); |
| 273 | | return; |
| 274 | | } |
| 267 | && (offset < 0x200000 && address >= 0x6000 && address < 0x8000)) |
| 268 | { dsp_set_dr(data); return; } |
| 275 | 269 | if (state->m_cart[0].mode == SNES_MODE_20 && state->m_has_addon_chip == HAS_DSP1) |
| 276 | 270 | { |
| 277 | 271 | if (offset >= 0x200000 && offset < 0x400000 && (offset & 0x8000) == 0x8000) |
| r21583 | r21584 | |
| 282 | 276 | if ((state->m_has_addon_chip == HAS_DSP2 || state->m_has_addon_chip == HAS_DSP3) |
| 283 | 277 | && (offset >= 0x200000 && offset < 0x400000 && (offset & 0x8000) == 0x8000)) |
| 284 | 278 | { |
| 285 | | if ((offset & 0xffff) < 0xc000) |
| 279 | if (address < 0xc000) |
| 286 | 280 | { dsp_set_dr(data); return; } |
| 287 | 281 | else |
| 288 | 282 | { dsp_set_sr(data); return; } |
| r21583 | r21584 | |
| 290 | 284 | if (state->m_has_addon_chip == HAS_DSP4 |
| 291 | 285 | && (offset >= 0x300000 && offset < 0x400000 && (offset & 0x8000) == 0x8000)) |
| 292 | 286 | { |
| 293 | | if ((offset & 0xffff) < 0xc000) |
| 287 | if (address < 0xc000) |
| 294 | 288 | { dsp_set_dr(data); return; } |
| 295 | 289 | else |
| 296 | 290 | { dsp_set_sr(data); return; } |
| 297 | 291 | } |
| 298 | 292 | if (state->m_has_addon_chip == HAS_SDD1 && offset < 0x400000) |
| 299 | 293 | { |
| 300 | | if (((offset & 0xffff) >= 0x4300 && (offset & 0xffff) < 0x4380) || |
| 301 | | ((offset & 0xffff) >= 0x4800 && (offset & 0xffff) < 0x4808)) |
| 294 | if ((address >= 0x4300 && address < 0x4380) || (address >= 0x4800 && address < 0x4808)) |
| 302 | 295 | { |
| 303 | | sdd1_mmio_write(space, (UINT32)(offset & 0xffff), data); |
| 296 | sdd1_mmio_write(space, (UINT32)address, data); |
| 304 | 297 | // here we don't return, but we let the w_io happen... |
| 305 | 298 | } |
| 306 | 299 | } |
| 307 | 300 | if ((state->m_has_addon_chip == HAS_SPC7110 || state->m_has_addon_chip == HAS_SPC7110_RTC) && offset < 0x400000) |
| 308 | 301 | { |
| 309 | 302 | UINT16 limit = (state->m_has_addon_chip == HAS_SPC7110_RTC) ? 0x4842 : 0x483f; |
| 310 | | if ((offset & 0xffff) >= 0x4800 && (offset & 0xffff) <= limit) |
| 311 | | { spc7110_mmio_write(space.machine(), (UINT32)(offset & 0xffff), data); return; } |
| 312 | | if (offset < 0x10000 && (offset & 0xffff) >= 0x6000 && (offset & 0xffff) < 0x8000) |
| 313 | | { snes_ram[0x306000 + (offset & 0x1fff)] = data; return; } |
| 314 | | if (offset >= 0x300000 && offset < 0x310000 && (offset & 0xffff) >= 0x6000 && (offset & 0xffff) < 0x8000) |
| 315 | | { snes_ram[0x306000 + (offset & 0x1fff)] = data; return; } |
| 303 | if (address >= 0x4800 && address <= limit) |
| 304 | { spc7110_mmio_write(space.machine(), (UINT32)address, data); return; } |
| 305 | if (offset < 0x10000 && address >= 0x6000 && address < 0x8000) |
| 306 | { snes_ram[0x306000 + (address & 0x1fff)] = data; return; } |
| 307 | if (offset >= 0x300000 && offset < 0x310000 && address >= 0x6000 && address < 0x8000) |
| 308 | { snes_ram[0x306000 + (address & 0x1fff)] = data; return; } |
| 316 | 309 | } |
| 317 | 310 | |
| 318 | 311 | // base cart access |
| r21583 | r21584 | |
| 331 | 324 | static WRITE8_HANDLER( snes_hi_w ) |
| 332 | 325 | { |
| 333 | 326 | snes_state *state = space.machine().driver_data<snes_state>(); |
| 327 | UINT16 address = offset & 0xffff; |
| 328 | |
| 334 | 329 | // take care of add-on chip access |
| 335 | 330 | if (state->m_has_addon_chip == HAS_OBC1 |
| 336 | | && (offset < 0x400000 && (offset & 0xffff) >= 0x6000 && (offset & 0xffff) < 0x8000)) |
| 337 | | { |
| 338 | | obc1_write(space, offset, data, mem_mask); |
| 339 | | return; |
| 340 | | } |
| 331 | && (offset < 0x400000 && address >= 0x6000 && address < 0x8000)) |
| 332 | { obc1_write(space, offset, data, mem_mask); return; } |
| 341 | 333 | if (state->m_has_addon_chip == HAS_CX4 |
| 342 | | && (offset < 0x400000 && (offset & 0xffff) >= 0x6000 && (offset & 0xffff) < 0x8000)) |
| 343 | | { |
| 344 | | CX4_write(space.machine(), (offset & 0xffff) - 0x6000, data); |
| 345 | | return; |
| 346 | | } |
| 334 | && (offset < 0x400000 && address >= 0x6000 && address < 0x8000)) |
| 335 | { CX4_write(space.machine(), address - 0x6000, data); return; } |
| 347 | 336 | if (state->m_has_addon_chip == HAS_RTC |
| 348 | | && (offset < 0x400000 && ((offset & 0xffff) == 0x2800 || (offset & 0xffff) == 0x2801))) |
| 349 | | { |
| 350 | | srtc_write(space.machine(), offset, data); |
| 351 | | return; |
| 352 | | } |
| 337 | && (offset < 0x400000 && (address == 0x2800 || address == 0x2801))) |
| 338 | { srtc_write(space.machine(), offset, data); return; } |
| 353 | 339 | if (state->m_has_addon_chip == HAS_ST010 || state->m_has_addon_chip == HAS_ST011) |
| 354 | 340 | { |
| 355 | | if (offset >= 0x680000 && offset < 0x700000 && (offset & 0xffff) < 0x1000) |
| 356 | | { st010_write_ram(state, (offset & 0xffff), data); return; } |
| 341 | if (offset >= 0x680000 && offset < 0x700000 && address < 0x1000) |
| 342 | { st010_write_ram(state, address, data); return; } |
| 357 | 343 | if (offset == 0x600000) |
| 358 | 344 | { st010_set_dr(data); return; } |
| 359 | 345 | if (offset == 0x600001) |
| 360 | 346 | { st010_set_sr(data); return; } |
| 361 | 347 | } |
| 362 | 348 | if (state->m_cart[0].mode == SNES_MODE_21 && state->m_has_addon_chip == HAS_DSP1 |
| 363 | | && (offset < 0x200000 && (offset & 0xffff) >= 0x6000 && (offset & 0xffff) < 0x8000)) |
| 364 | | { |
| 365 | | dsp_set_dr(data); |
| 366 | | return; |
| 367 | | } |
| 349 | && (offset < 0x200000 && address >= 0x6000 && address < 0x8000)) |
| 350 | { dsp_set_dr(data); return; } |
| 368 | 351 | if (state->m_cart[0].mode == SNES_MODE_20 && state->m_has_addon_chip == HAS_DSP1) |
| 369 | 352 | { |
| 370 | 353 | if (offset >= 0x200000 && offset < 0x400000 && (offset & 0x8000) == 0x8000) |
| r21583 | r21584 | |
| 375 | 358 | if ((state->m_has_addon_chip == HAS_DSP2 || state->m_has_addon_chip == HAS_DSP3) |
| 376 | 359 | && (offset >= 0x200000 && offset < 0x400000 && (offset & 0x8000) == 0x8000)) |
| 377 | 360 | { |
| 378 | | if ((offset & 0xffff) < 0xc000) |
| 361 | if (address < 0xc000) |
| 379 | 362 | { dsp_set_dr(data); return; } |
| 380 | 363 | else |
| 381 | 364 | { dsp_set_sr(data); return; } |
| r21583 | r21584 | |
| 383 | 366 | if (state->m_has_addon_chip == HAS_DSP4 |
| 384 | 367 | && (offset >= 0x300000 && offset < 0x400000 && (offset & 0x8000) == 0x8000)) |
| 385 | 368 | { |
| 386 | | if ((offset & 0xffff) < 0xc000) |
| 369 | if (address < 0xc000) |
| 387 | 370 | { dsp_set_dr(data); return; } |
| 388 | 371 | else |
| 389 | 372 | { dsp_set_sr(data); return; } |
| 390 | 373 | } |
| 391 | 374 | if (state->m_has_addon_chip == HAS_SDD1 && offset < 0x400000) |
| 392 | 375 | { |
| 393 | | if (((offset & 0xffff) >= 0x4300 && (offset & 0xffff) < 0x4380) || |
| 394 | | ((offset & 0xffff) >= 0x4800 && (offset & 0xffff) < 0x4808)) |
| 376 | if ((address >= 0x4300 && address < 0x4380) || (address >= 0x4800 && address < 0x4808)) |
| 395 | 377 | { |
| 396 | | sdd1_mmio_write(space, (UINT32)(offset & 0xffff), data); |
| 378 | sdd1_mmio_write(space, (UINT32)address, data); |
| 397 | 379 | // here we don't return, but we let the w_io happen... |
| 398 | 380 | } |
| 399 | 381 | } |
| 400 | 382 | if ((state->m_has_addon_chip == HAS_SPC7110 || state->m_has_addon_chip == HAS_SPC7110_RTC) && offset < 0x400000) |
| 401 | 383 | { |
| 402 | 384 | UINT16 limit = (state->m_has_addon_chip == HAS_SPC7110_RTC) ? 0x4842 : 0x483f; |
| 403 | | if ((offset & 0xffff) >= 0x4800 && (offset & 0xffff) <= limit) |
| 404 | | { spc7110_mmio_write(space.machine(), (UINT32)(offset & 0xffff), data); return; } |
| 405 | | if (offset < 0x10000 && (offset & 0xffff) >= 0x6000 && (offset & 0xffff) < 0x8000) |
| 406 | | { snes_ram[0x306000 + (offset & 0x1fff)] = data; return; } |
| 407 | | if (offset >= 0x300000 && offset < 0x310000 && (offset & 0xffff) >= 0x6000 && (offset & 0xffff) < 0x8000) |
| 408 | | { snes_ram[0x306000 + (offset & 0x1fff)] = data; return; } |
| 385 | if (address >= 0x4800 && address <= limit) |
| 386 | { spc7110_mmio_write(space.machine(), (UINT32)address, data); return; } |
| 387 | if (offset < 0x10000 && address >= 0x6000 && address < 0x8000) |
| 388 | { snes_ram[0x306000 + (address & 0x1fff)] = data; return; } |
| 389 | if (offset >= 0x300000 && offset < 0x310000 && address >= 0x6000 && address < 0x8000) |
| 390 | { snes_ram[0x306000 + (address & 0x1fff)] = data; return; } |
| 409 | 391 | } |
| 410 | 392 | |
| 411 | 393 | // base cart access |