trunk/src/mame/machine/megacdcd.c
| r19319 | r19320 | |
| 441 | 441 | LC8951RegistersW[REG_W_WAL] = wa & 0xff; LC8951RegistersW[REG_W_WAH] = (wa >> 8) &0xff; |
| 442 | 442 | LC8951RegistersR[REG_R_HEAD0] = 0x01; |
| 443 | 443 | LC8951RegistersR[REG_R_STAT3] = 0x80; |
| 444 | |
| 445 | |
| 444 | 446 | } |
| 445 | 447 | |
| 446 | 448 | |
| r19319 | r19320 | |
| 642 | 644 | case REG_W_DACH: LC8951RegistersW[REG_W_DACH] = data; break; |
| 643 | 645 | |
| 644 | 646 | case REG_W_DTTRG: |
| 645 | | if (LC8951RegistersW[REG_W_IFCTRL] & 0x02) |
| 647 | if (!is_neoCD) |
| 646 | 648 | { |
| 649 | if (LC8951RegistersW[REG_W_IFCTRL] & 0x02) |
| 650 | { |
| 651 | LC8951RegistersR[REG_R_IFSTAT] &= ~0x08; |
| 652 | SET_CDC_DMA; |
| 653 | CDC_REG0 &= ~0x8000; |
| 654 | } |
| 655 | } |
| 656 | else |
| 657 | { |
| 658 | LC8951RegistersW[REG_W_DTTRG] = ~0x00; |
| 647 | 659 | LC8951RegistersR[REG_R_IFSTAT] &= ~0x08; |
| 648 | | SET_CDC_DMA; |
| 649 | | CDC_REG0 &= ~0x8000; |
| 650 | 660 | } |
| 651 | 661 | break; |
| 652 | 662 | |
| 653 | | case REG_W_DTACK: LC8951RegistersR[REG_R_IFSTAT] |= 0x40; break; |
| 663 | case REG_W_DTACK: |
| 664 | //if (!is_neoCD) |
| 665 | { |
| 666 | LC8951RegistersR[REG_R_IFSTAT] |= 0x40; |
| 667 | } |
| 668 | //else |
| 669 | //{ |
| 670 | // LC8951RegistersW[REG_W_DTACK] = ~0x00; |
| 671 | // LC8951RegistersR[REG_R_IFSTAT] &= ~0x40; |
| 672 | //} |
| 673 | break; |
| 654 | 674 | case REG_W_WAL: LC8951RegistersW[REG_W_WAL] = data; break; |
| 655 | 675 | case REG_W_WAH: LC8951RegistersW[REG_W_WAH] = data; break; |
| 656 | 676 | case REG_W_CTRL0: LC8951RegistersW[REG_W_CTRL0] = data; break; |
| 657 | | case REG_W_CTRL1: LC8951RegistersW[REG_W_CTRL1] = data; break; |
| 677 | case REG_W_CTRL1: LC8951RegistersW[REG_W_CTRL1] = data; |
| 678 | //LC8951UpdateHeader(); // NeoCD |
| 679 | break; |
| 658 | 680 | case REG_W_PTL: LC8951RegistersW[REG_W_PTL] = data; break; |
| 659 | 681 | case REG_W_PTH: LC8951RegistersW[REG_W_PTH] = data; break; |
| 660 | 682 | case REG_W_CTRL2: LC8951RegistersW[REG_W_CTRL2] = data; break; |
| r19319 | r19320 | |
| 662 | 684 | } |
| 663 | 685 | } |
| 664 | 686 | |
| 687 | |
| 688 | |
| 665 | 689 | void lc89510_temp_device::CDD_Process(running_machine& machine, int reason) |
| 666 | 690 | { |
| 667 | 691 | CDD_Export(); |
| r19319 | r19320 | |
| 947 | 971 | |
| 948 | 972 | |
| 949 | 973 | |
| 950 | | if (segacd.cd) |
| 951 | | printf("cd found\n"); |
| 974 | // if (segacd.cd) |
| 975 | // printf("cd found\n"); |
| 952 | 976 | } |
| 953 | 977 | |
| 954 | 978 | |
| 955 | 979 | |
| 956 | | |
| 957 | 980 | TIMER_DEVICE_CALLBACK_MEMBER( lc89510_temp_device::segacd_access_timer_callback ) |
| 958 | 981 | { |
| 959 | 982 | if (!is_neoCD) |
| r19319 | r19320 | |
| 1292 | 1315 | } |
| 1293 | 1316 | } |
| 1294 | 1317 | |
| 1295 | | void lc89510_temp_device::LC8951Reset() |
| 1296 | | { |
| 1297 | | memset(LC8951RegistersR, 0, sizeof(LC8951RegistersR)); |
| 1298 | | memset(LC8951RegistersW, 0, sizeof(LC8951RegistersW)); |
| 1299 | | LC8951RegistersR[REG_R_IFSTAT] = 0xFF; |
| 1300 | | LC8951RegistersR[REG_R_STAT3] = 0x80; |
| 1301 | 1318 | |
| 1302 | | LC8951UpdateHeader(); |
| 1303 | | } |
| 1304 | 1319 | |
| 1305 | | void lc89510_temp_device::reset_NeoCd(void) |
| 1306 | | { |
| 1307 | | { |
| 1308 | | cdrom_image_device *cddevice = machine().device<cdrom_image_device>("cdrom"); |
| 1309 | | if ( cddevice ) |
| 1310 | | { |
| 1311 | | segacd.cd = cddevice->get_cdrom_file(); |
| 1312 | | if ( segacd.cd ) |
| 1313 | | { |
| 1314 | | printf("found cd\n"); |
| 1315 | | segacd.toc = cdrom_get_toc( segacd.cd ); |
| 1316 | | cdda_set_cdrom( m_cdda, segacd.cd ); |
| 1317 | | cdda_stop_audio( m_cdda ); //stop any pending CD-DA |
| 1318 | | } |
| 1319 | | } |
| 1320 | | } |
| 1321 | | } |
| 1322 | 1320 | |
| 1323 | 1321 | |
| 1322 | |
| 1324 | 1323 | /* |
| 1325 | 1324 | * CD-ROM / DMA control |
| 1326 | 1325 | * |
| r19319 | r19320 | |
| 1535 | 1534 | UINT16 lc89510_temp_device::nff0016_r(void) { return nff0016; } |
| 1536 | 1535 | |
| 1537 | 1536 | |
| 1538 | | void lc89510_temp_device::nLC8951_w(UINT16 byteValue) |
| 1539 | | { |
| 1540 | | int regno = CDC_REG0 & 0xf; |
| 1541 | | |
| 1542 | | switch (regno) { |
| 1543 | | case 3: // DBCH |
| 1544 | | LC8951RegistersW[REG_W_DBCH] = byteValue & 0x0F; |
| 1545 | | break; |
| 1546 | | case 6: // DTTRG |
| 1547 | | LC8951RegistersW[REG_W_DTTRG] = ~0x00; |
| 1548 | | LC8951RegistersR[REG_R_IFSTAT] &= ~0x08; |
| 1549 | | break; |
| 1550 | | case 7: // DTACK |
| 1551 | | LC8951RegistersW[REG_W_DTACK] = ~0x00; |
| 1552 | | LC8951RegistersR[REG_R_IFSTAT] &= ~0x40; |
| 1553 | | break; |
| 1554 | | // case 10: |
| 1555 | | // LC8951RegistersW[regno] = byteValue; |
| 1556 | | // bprintf(PRINT_NORMAL, _T(" - CTRL0 -> %02X (PC: 0x%06X)\n"), LC8951RegistersW[regno], byteValue, SekGetPC(-1)); |
| 1557 | | // break; |
| 1558 | | case 11: |
| 1559 | | LC8951RegistersW[REG_W_CTRL1] = byteValue; // CTRL1 |
| 1560 | | LC8951UpdateHeader(); |
| 1561 | | break; |
| 1562 | | case 15: |
| 1563 | | LC8951Reset(); |
| 1564 | | break; |
| 1565 | | default: |
| 1566 | | LC8951RegistersW[regno] = byteValue; |
| 1567 | | } |
| 1568 | | CDC_REG0 = (regno + 1) & 0x0F; |
| 1569 | | } |
| 1570 | | |
| 1571 | | |