trunk/src/mame/drivers/csplayh5.c
| r30740 | r30741 | |
| 49 | 49 | { } |
| 50 | 50 | |
| 51 | 51 | UINT16 m_mux_data; |
| 52 | | UINT8 m_pio_dir[5]; |
| 53 | | UINT8 m_pio_latch[5]; |
| 54 | 52 | |
| 53 | |
| 55 | 54 | required_device<cpu_device> m_maincpu; |
| 56 | 55 | required_device<tmp68301_device> m_tmp68301; |
| 57 | 56 | required_device<v9958_device> m_v9958; |
| r30740 | r30741 | |
| 61 | 60 | DECLARE_READ16_MEMBER(test_r); |
| 62 | 61 | DECLARE_READ8_MEMBER(csplayh5_sound_r); |
| 63 | 62 | DECLARE_WRITE8_MEMBER(csplayh5_soundclr_w); |
| 64 | | DECLARE_READ8_MEMBER(tmpz84c011_pio_r); |
| 65 | | DECLARE_WRITE8_MEMBER(tmpz84c011_pio_w); |
| 66 | | DECLARE_READ8_MEMBER(tmpz84c011_0_pa_r); |
| 67 | | DECLARE_READ8_MEMBER(tmpz84c011_0_pb_r); |
| 68 | | DECLARE_READ8_MEMBER(tmpz84c011_0_pc_r); |
| 69 | | DECLARE_READ8_MEMBER(tmpz84c011_0_pd_r); |
| 70 | | DECLARE_READ8_MEMBER(tmpz84c011_0_pe_r); |
| 71 | | DECLARE_WRITE8_MEMBER(tmpz84c011_0_pa_w); |
| 72 | | DECLARE_WRITE8_MEMBER(tmpz84c011_0_pb_w); |
| 73 | | DECLARE_WRITE8_MEMBER(tmpz84c011_0_pc_w); |
| 74 | | DECLARE_WRITE8_MEMBER(tmpz84c011_0_pd_w); |
| 75 | | DECLARE_WRITE8_MEMBER(tmpz84c011_0_pe_w); |
| 76 | | DECLARE_READ8_MEMBER(tmpz84c011_0_dir_pa_r); |
| 77 | | DECLARE_READ8_MEMBER(tmpz84c011_0_dir_pb_r); |
| 78 | | DECLARE_READ8_MEMBER(tmpz84c011_0_dir_pc_r); |
| 79 | | DECLARE_READ8_MEMBER(tmpz84c011_0_dir_pd_r); |
| 80 | | DECLARE_READ8_MEMBER(tmpz84c011_0_dir_pe_r); |
| 81 | | DECLARE_WRITE8_MEMBER(tmpz84c011_0_dir_pa_w); |
| 82 | | DECLARE_WRITE8_MEMBER(tmpz84c011_0_dir_pb_w); |
| 83 | | DECLARE_WRITE8_MEMBER(tmpz84c011_0_dir_pc_w); |
| 84 | | DECLARE_WRITE8_MEMBER(tmpz84c011_0_dir_pd_w); |
| 85 | | DECLARE_WRITE8_MEMBER(tmpz84c011_0_dir_pe_w); |
| 63 | |
| 64 | DECLARE_READ8_MEMBER(soundcpu_portd_r); |
| 65 | DECLARE_WRITE8_MEMBER(soundcpu_porta_w); |
| 66 | DECLARE_WRITE8_MEMBER(soundcpu_dac2_w); |
| 67 | DECLARE_WRITE8_MEMBER(soundcpu_dac1_w); |
| 68 | DECLARE_WRITE8_MEMBER(soundcpu_porte_w); |
| 69 | |
| 86 | 70 | DECLARE_DRIVER_INIT(mjmania); |
| 87 | 71 | DECLARE_DRIVER_INIT(csplayh5); |
| 88 | 72 | DECLARE_DRIVER_INIT(fuudol); |
| r30740 | r30741 | |
| 212 | 196 | soundlatch_clear_byte_w(space, 0, 0); |
| 213 | 197 | } |
| 214 | 198 | |
| 215 | | READ8_MEMBER(csplayh5_state::tmpz84c011_pio_r) |
| 216 | | { |
| 217 | | int portdata; |
| 218 | 199 | |
| 219 | | switch (offset) |
| 220 | | { |
| 221 | | case 0: /* PA_0 */ |
| 222 | | portdata = 0xff; |
| 223 | | break; |
| 224 | | case 1: /* PB_0 */ |
| 225 | | portdata = 0xff; |
| 226 | | break; |
| 227 | | case 2: /* PC_0 */ |
| 228 | | portdata = 0xff; |
| 229 | | break; |
| 230 | | case 3: /* PD_0 */ |
| 231 | | portdata = csplayh5_sound_r(space, 0); |
| 232 | | break; |
| 233 | | case 4: /* PE_0 */ |
| 234 | | portdata = 0xff; |
| 235 | | break; |
| 236 | | |
| 237 | | default: |
| 238 | | logerror("%s: TMPZ84C011_PIO Unknown Port Read %02X\n", machine().describe_context(), offset); |
| 239 | | portdata = 0xff; |
| 240 | | break; |
| 241 | | } |
| 242 | | |
| 243 | | return portdata; |
| 244 | | } |
| 245 | | |
| 246 | | WRITE8_MEMBER(csplayh5_state::tmpz84c011_pio_w) |
| 200 | READ8_MEMBER(csplayh5_state::soundcpu_portd_r) |
| 247 | 201 | { |
| 248 | | switch (offset) |
| 249 | | { |
| 250 | | case 0: /* PA_0 */ |
| 251 | | csplayh5_soundbank_w(machine(), data & 0x03); |
| 252 | | break; |
| 253 | | case 1: /* PB_0 */ |
| 254 | | m_dac2->DAC_WRITE(data); |
| 255 | | break; |
| 256 | | case 2: /* PC_0 */ |
| 257 | | m_dac1->DAC_WRITE(data); |
| 258 | | break; |
| 259 | | case 3: /* PD_0 */ |
| 260 | | break; |
| 261 | | case 4: /* PE_0 */ |
| 262 | | if (!(data & 0x01)) csplayh5_soundclr_w(space, 0, 0); |
| 263 | | break; |
| 264 | | |
| 265 | | default: |
| 266 | | logerror("%s: TMPZ84C011_PIO Unknown Port Write %02X, %02X\n", machine().describe_context(), offset, data); |
| 267 | | break; |
| 268 | | } |
| 202 | return csplayh5_sound_r(space, 0); |
| 269 | 203 | } |
| 270 | 204 | |
| 271 | | |
| 272 | | /* CPU interface */ |
| 273 | | READ8_MEMBER(csplayh5_state::tmpz84c011_0_pa_r) |
| 205 | WRITE8_MEMBER(csplayh5_state::soundcpu_porta_w) |
| 274 | 206 | { |
| 275 | | return (tmpz84c011_pio_r(space,0) & ~m_pio_dir[0]) | (m_pio_latch[0] & m_pio_dir[0]); |
| 207 | csplayh5_soundbank_w(machine(), data & 0x03); |
| 276 | 208 | } |
| 277 | 209 | |
| 278 | | READ8_MEMBER(csplayh5_state::tmpz84c011_0_pb_r) |
| 210 | WRITE8_MEMBER(csplayh5_state::soundcpu_dac2_w) |
| 279 | 211 | { |
| 280 | | return (tmpz84c011_pio_r(space,1) & ~m_pio_dir[1]) | (m_pio_latch[1] & m_pio_dir[1]); |
| 212 | m_dac2->DAC_WRITE(data); |
| 281 | 213 | } |
| 282 | 214 | |
| 283 | | READ8_MEMBER(csplayh5_state::tmpz84c011_0_pc_r) |
| 215 | WRITE8_MEMBER(csplayh5_state::soundcpu_dac1_w) |
| 284 | 216 | { |
| 285 | | return (tmpz84c011_pio_r(space,2) & ~m_pio_dir[2]) | (m_pio_latch[2] & m_pio_dir[2]); |
| 217 | m_dac1->DAC_WRITE(data); |
| 286 | 218 | } |
| 287 | 219 | |
| 288 | | READ8_MEMBER(csplayh5_state::tmpz84c011_0_pd_r) |
| 220 | WRITE8_MEMBER(csplayh5_state::soundcpu_porte_w) |
| 289 | 221 | { |
| 290 | | return (tmpz84c011_pio_r(space,3) & ~m_pio_dir[3]) | (m_pio_latch[3] & m_pio_dir[3]); |
| 222 | if (!(data & 0x01)) csplayh5_soundclr_w(space, 0, 0); |
| 291 | 223 | } |
| 292 | 224 | |
| 293 | | READ8_MEMBER(csplayh5_state::tmpz84c011_0_pe_r) |
| 294 | | { |
| 295 | | return (tmpz84c011_pio_r(space,4) & ~m_pio_dir[4]) | (m_pio_latch[4] & m_pio_dir[4]); |
| 296 | | } |
| 297 | 225 | |
| 298 | | WRITE8_MEMBER(csplayh5_state::tmpz84c011_0_pa_w) |
| 299 | | { |
| 300 | | m_pio_latch[0] = data; |
| 301 | | tmpz84c011_pio_w(space, 0, data); |
| 302 | | } |
| 303 | 226 | |
| 304 | | WRITE8_MEMBER(csplayh5_state::tmpz84c011_0_pb_w) |
| 305 | | { |
| 306 | | m_pio_latch[1] = data; |
| 307 | | tmpz84c011_pio_w(space, 1, data); |
| 308 | | } |
| 309 | 227 | |
| 310 | | WRITE8_MEMBER(csplayh5_state::tmpz84c011_0_pc_w) |
| 311 | | { |
| 312 | | m_pio_latch[2] = data; |
| 313 | | tmpz84c011_pio_w(space, 2, data); |
| 314 | | } |
| 315 | 228 | |
| 316 | | WRITE8_MEMBER(csplayh5_state::tmpz84c011_0_pd_w) |
| 317 | | { |
| 318 | | m_pio_latch[3] = data; |
| 319 | | tmpz84c011_pio_w(space, 3, data); |
| 320 | | } |
| 321 | 229 | |
| 322 | | WRITE8_MEMBER(csplayh5_state::tmpz84c011_0_pe_w) |
| 323 | | { |
| 324 | | m_pio_latch[4] = data; |
| 325 | | tmpz84c011_pio_w(space, 4, data); |
| 326 | | } |
| 327 | | |
| 328 | | |
| 329 | | READ8_MEMBER(csplayh5_state::tmpz84c011_0_dir_pa_r) |
| 330 | | { |
| 331 | | return m_pio_dir[0]; |
| 332 | | } |
| 333 | | |
| 334 | | READ8_MEMBER(csplayh5_state::tmpz84c011_0_dir_pb_r) |
| 335 | | { |
| 336 | | return m_pio_dir[1]; |
| 337 | | } |
| 338 | | |
| 339 | | READ8_MEMBER(csplayh5_state::tmpz84c011_0_dir_pc_r) |
| 340 | | { |
| 341 | | return m_pio_dir[2]; |
| 342 | | } |
| 343 | | |
| 344 | | READ8_MEMBER(csplayh5_state::tmpz84c011_0_dir_pd_r) |
| 345 | | { |
| 346 | | return m_pio_dir[3]; |
| 347 | | } |
| 348 | | |
| 349 | | READ8_MEMBER(csplayh5_state::tmpz84c011_0_dir_pe_r) |
| 350 | | { |
| 351 | | return m_pio_dir[4]; |
| 352 | | } |
| 353 | | |
| 354 | | |
| 355 | | WRITE8_MEMBER(csplayh5_state::tmpz84c011_0_dir_pa_w) |
| 356 | | { |
| 357 | | m_pio_dir[0] = data; |
| 358 | | } |
| 359 | | |
| 360 | | WRITE8_MEMBER(csplayh5_state::tmpz84c011_0_dir_pb_w) |
| 361 | | { |
| 362 | | m_pio_dir[1] = data; |
| 363 | | } |
| 364 | | |
| 365 | | WRITE8_MEMBER(csplayh5_state::tmpz84c011_0_dir_pc_w) |
| 366 | | { |
| 367 | | m_pio_dir[2] = data; |
| 368 | | } |
| 369 | | |
| 370 | | WRITE8_MEMBER(csplayh5_state::tmpz84c011_0_dir_pd_w) |
| 371 | | { |
| 372 | | m_pio_dir[3] = data; |
| 373 | | } |
| 374 | | |
| 375 | | WRITE8_MEMBER(csplayh5_state::tmpz84c011_0_dir_pe_w) |
| 376 | | { |
| 377 | | m_pio_dir[4] = data; |
| 378 | | } |
| 379 | | |
| 380 | | |
| 381 | 230 | static ADDRESS_MAP_START( csplayh5_sound_map, AS_PROGRAM, 8, csplayh5_state ) |
| 382 | 231 | AM_RANGE(0x0000, 0x77ff) AM_ROM |
| 383 | 232 | AM_RANGE(0x7800, 0x7fff) AM_RAM |
| r30740 | r30741 | |
| 387 | 236 | static ADDRESS_MAP_START( csplayh5_sound_io_map, AS_IO, 8, csplayh5_state ) |
| 388 | 237 | ADDRESS_MAP_GLOBAL_MASK(0xff) |
| 389 | 238 | AM_RANGE(0x10, 0x13) AM_DEVREADWRITE("ctc", z80ctc_device, read, write) |
| 390 | | AM_RANGE(0x50, 0x50) AM_READWRITE(tmpz84c011_0_pa_r, tmpz84c011_0_pa_w) |
| 391 | | AM_RANGE(0x51, 0x51) AM_READWRITE(tmpz84c011_0_pb_r, tmpz84c011_0_pb_w) |
| 392 | | AM_RANGE(0x52, 0x52) AM_READWRITE(tmpz84c011_0_pc_r, tmpz84c011_0_pc_w) |
| 393 | | AM_RANGE(0x30, 0x30) AM_READWRITE(tmpz84c011_0_pd_r, tmpz84c011_0_pd_w) |
| 394 | | AM_RANGE(0x40, 0x40) AM_READWRITE(tmpz84c011_0_pe_r, tmpz84c011_0_pe_w) |
| 395 | | AM_RANGE(0x54, 0x54) AM_READWRITE(tmpz84c011_0_dir_pa_r, tmpz84c011_0_dir_pa_w) |
| 396 | | AM_RANGE(0x55, 0x55) AM_READWRITE(tmpz84c011_0_dir_pb_r, tmpz84c011_0_dir_pb_w) |
| 397 | | AM_RANGE(0x56, 0x56) AM_READWRITE(tmpz84c011_0_dir_pc_r, tmpz84c011_0_dir_pc_w) |
| 398 | | AM_RANGE(0x34, 0x34) AM_READWRITE(tmpz84c011_0_dir_pd_r, tmpz84c011_0_dir_pd_w) |
| 399 | | AM_RANGE(0x44, 0x44) AM_READWRITE(tmpz84c011_0_dir_pe_r, tmpz84c011_0_dir_pe_w) |
| 400 | 239 | AM_RANGE(0x80, 0x81) AM_DEVWRITE("ymsnd", ym3812_device, write) |
| 401 | 240 | ADDRESS_MAP_END |
| 402 | 241 | |
| r30740 | r30741 | |
| 596 | 435 | |
| 597 | 436 | void csplayh5_state::machine_reset() |
| 598 | 437 | { |
| 599 | | address_space &space = m_maincpu->space(AS_PROGRAM); |
| 600 | | int i; |
| 601 | | |
| 602 | | // initialize TMPZ84C011 PIO |
| 603 | | for (i = 0; i < 5; i++) |
| 604 | | { |
| 605 | | m_pio_dir[i] = m_pio_latch[i] = 0; |
| 606 | | tmpz84c011_pio_w(space, i, 0); |
| 607 | | } |
| 608 | 438 | } |
| 609 | 439 | |
| 610 | 440 | TIMER_DEVICE_CALLBACK_MEMBER(csplayh5_state::csplayh5_irq) |
| r30740 | r30741 | |
| 644 | 474 | MCFG_CPU_IO_MAP(csplayh5_sub_io_map) |
| 645 | 475 | #endif |
| 646 | 476 | |
| 647 | | MCFG_CPU_ADD("audiocpu", Z80, 8000000) /* TMPZ84C011, unknown clock */ |
| 477 | MCFG_CPU_ADD("audiocpu", TMPZ84C011, 8000000) /* TMPZ84C011, unknown clock */ |
| 648 | 478 | MCFG_CPU_CONFIG(daisy_chain_sound) |
| 649 | 479 | MCFG_CPU_PROGRAM_MAP(csplayh5_sound_map) |
| 650 | 480 | MCFG_CPU_IO_MAP(csplayh5_sound_io_map) |
| 481 | MCFG_TMPZ84C011_PORTA_WRITE_CALLBACK(WRITE8(csplayh5_state, soundcpu_porta_w)) |
| 482 | MCFG_TMPZ84C011_PORTB_WRITE_CALLBACK(WRITE8(csplayh5_state,soundcpu_dac2_w)) |
| 483 | MCFG_TMPZ84C011_PORTC_WRITE_CALLBACK(WRITE8(csplayh5_state,soundcpu_dac1_w)) |
| 484 | MCFG_TMPZ84C011_PORTD_READ_CALLBACK(READ8(csplayh5_state, soundcpu_portd_r)) |
| 485 | MCFG_TMPZ84C011_PORTE_WRITE_CALLBACK(WRITE8(csplayh5_state,soundcpu_porte_w)) |
| 651 | 486 | |
| 652 | 487 | MCFG_DEVICE_ADD("ctc", Z80CTC, 8000000) |
| 653 | 488 | MCFG_Z80CTC_INTR_CB(INPUTLINE("audiocpu", INPUT_LINE_IRQ0)) |