trunk/src/mame/drivers/coolridr.c
| r21197 | r21198 | |
| 486 | 486 | address_space &main_space = m_maincpu->space(AS_PROGRAM); |
| 487 | 487 | address_space &sound_space = m_soundcpu->space(AS_PROGRAM); |
| 488 | 488 | |
| 489 | //printf("%08x %08x\n",offset*4,m_h1_unk[offset]); |
| 490 | |
| 489 | 491 | if(offset == 8) |
| 490 | 492 | { |
| 491 | | //bit 16 probably halts m68k |
| 493 | //probably writing to upper word disables m68k, to lower word enables it |
| 494 | machine().device("soundcpu")->execute().set_input_line(INPUT_LINE_RESET, (data) ? ASSERT_LINE : CLEAR_LINE); |
| 492 | 495 | return; |
| 493 | 496 | } |
| 494 | 497 | |
| 495 | 498 | if(offset == 2) |
| 496 | 499 | { |
| 497 | | if(!(data & 1) && (m_h1_unk[2] & 1)) // 1 -> 0 transition enables DMA |
| 500 | if(data & 1 && (!(m_h1_unk[2] & 1))) // 0 -> 1 transition enables DMA |
| 498 | 501 | { |
| 499 | 502 | UINT32 src = m_h1_unk[0]; |
| 500 | 503 | UINT32 dst = m_h1_unk[1]; |
| 501 | | UINT32 size = 0x200; // TODO |
| 504 | UINT32 size = (m_h1_unk[2]>>16)*0x40; |
| 502 | 505 | |
| 503 | | if(src == 0x100000) // DMA for m68k program, TODO |
| 504 | | return; |
| 505 | | |
| 506 | | //printf("%08x %08x %08x\n",src,dst,size); |
| 507 | | |
| 508 | 506 | for(int i = 0;i < size; i+=2) |
| 509 | 507 | { |
| 510 | 508 | sound_space.write_word(dst,main_space.read_word(src)); |
| r21197 | r21198 | |
| 516 | 514 | |
| 517 | 515 | if(offset == 6) |
| 518 | 516 | { |
| 519 | | if(!(data & 1) && (m_h1_unk[6] & 1)) // 1 -> 0 transition enables DMA |
| 517 | if(data & 1 && (!(m_h1_unk[6] & 1))) // 0 -> 1 transition enables DMA |
| 520 | 518 | { |
| 521 | 519 | UINT32 src = m_h1_unk[4]; |
| 522 | 520 | UINT32 dst = m_h1_unk[5]; |
| 523 | | UINT32 size = 0x200; // TODO |
| 521 | UINT32 size = (m_h1_unk[6]>>16)*0x40; |
| 524 | 522 | |
| 525 | | if(src == 0x100000) // DMA for m68k program, TODO |
| 526 | | return; |
| 523 | //printf("%08x %08x %08x %02x\n",src,dst,size,sound_data); |
| 527 | 524 | |
| 528 | | //printf("%08x %08x %08x\n",src,dst,size); |
| 529 | | |
| 530 | 525 | for(int i = 0;i < size; i+=2) |
| 531 | 526 | { |
| 532 | 527 | sound_space.write_word(dst,main_space.read_word(src)); |
| r21197 | r21198 | |
| 538 | 533 | |
| 539 | 534 | COMBINE_DATA(&m_h1_unk[offset]); |
| 540 | 535 | |
| 541 | | //printf("%08x %08x\n",offset*4,m_h1_unk[offset]); |
| 542 | 536 | } |
| 543 | 537 | |
| 544 | 538 | |
| r21197 | r21198 | |
| 1485 | 1479 | void coolridr_state::machine_reset() |
| 1486 | 1480 | { |
| 1487 | 1481 | // machine().device("maincpu")->execute().set_input_line(INPUT_LINE_HALT, ASSERT_LINE); |
| 1488 | | // machine().device("soundcpu")->execute().set_input_line(INPUT_LINE_HALT, ASSERT_LINE); |
| 1482 | machine().device("soundcpu")->execute().set_input_line(INPUT_LINE_RESET, ASSERT_LINE); |
| 1489 | 1483 | |
| 1490 | | memcpy(m_soundram, memregion("soundcpu")->base()+0x80000, 0x80000); |
| 1491 | | m_soundcpu->reset(); |
| 1484 | // memcpy(m_soundram, memregion("soundcpu")->base()+0x80000, 0x80000); |
| 1485 | // m_soundcpu->reset(); |
| 1492 | 1486 | |
| 1493 | 1487 | |
| 1494 | | |
| 1495 | 1488 | } |
| 1496 | 1489 | |
| 1497 | 1490 | |