trunk/src/mess/machine/psxcd.c
| r22554 | r22555 | |
| 441 | 441 | if (!curpos.w) |
| 442 | 442 | curpos.b[S] = 2; |
| 443 | 443 | |
| 444 | | verboselog(machine(), 1, "psxcd: play %02x %02x %02x => %d\n", loc.b[M], loc.b[S], loc.b[F], msf_to_lba_ps(loc.w)); |
| 444 | verboselog(machine(), 1, "psxcd: play %02x %02x %02x => %d\n", decimal_to_bcd(loc.b[M]), decimal_to_bcd(loc.b[S]), decimal_to_bcd(loc.b[F]), msf_to_lba_ps(loc.w)); |
| 445 | 445 | |
| 446 | 446 | stop_read(); |
| 447 | 447 | start_play(); |
| r22554 | r22555 | |
| 593 | 593 | void psxcd_device::cdcmd_getlocp() |
| 594 | 594 | { |
| 595 | 595 | CDPOS tloc, start; |
| 596 | | UINT8 track = cdrom_get_track(m_cdrom_handle, msf_to_lba_ps(loc.w) + 150) + 1; |
| 596 | UINT8 track = cdrom_get_track(m_cdrom_handle, msf_to_lba_ps(loc.w)) + 1; |
| 597 | 597 | start.w = (track == 1) ? 0x000200 : lba_to_msf_ps(cdrom_get_track_start(m_cdrom_handle, track - 1)); |
| 598 | 598 | tloc.w = sub_loc(loc, start); |
| 599 | 599 | |
| r22554 | r22555 | |
| 872 | 872 | |
| 873 | 873 | void psxcd_device::start_dma(UINT8 *mainram, UINT32 size) |
| 874 | 874 | { |
| 875 | UINT32 sector_size; |
| 875 | 876 | verboselog(machine(), 1, "psxcd: start dma %d bytes at %d\n", size, m_transcurr); |
| 876 | 877 | |
| 877 | 878 | if(!m_dmaload) |
| 878 | 879 | return; |
| 879 | 880 | |
| 880 | | if(size > (raw_sector_size - m_transcurr)) |
| 881 | | size = (raw_sector_size - m_transcurr); |
| 881 | switch(mode & mode_size_mask) |
| 882 | { |
| 883 | case 0x00: |
| 884 | default: |
| 885 | sector_size = 2048 + 24; |
| 886 | break; |
| 887 | case 0x10: |
| 888 | sector_size = 2328 + 12; |
| 889 | break; |
| 890 | case 0x20: |
| 891 | sector_size = 2340 + 12; |
| 892 | break; |
| 893 | } |
| 882 | 894 | |
| 895 | if(size > (sector_size - m_transcurr)) |
| 896 | size = (sector_size - m_transcurr); |
| 897 | |
| 883 | 898 | memcpy(mainram, &m_transbuf[m_transcurr], size); |
| 884 | 899 | m_transcurr += size; |
| 885 | | if(raw_sector_size <= m_transcurr) |
| 900 | |
| 901 | if(sector_size <= m_transcurr) |
| 886 | 902 | { |
| 887 | 903 | m_dmaload = false; |
| 888 | 904 | m_regs.sr &= ~0x40; |
| r22554 | r22555 | |
| 1082 | 1098 | |
| 1083 | 1099 | void psxcd_device::start_play() |
| 1084 | 1100 | { |
| 1085 | | UINT8 track = cdrom_get_track(m_cdrom_handle, msf_to_lba_ps(curpos.w) + 150); |
| 1101 | UINT8 track = cdrom_get_track(m_cdrom_handle, msf_to_lba_ps(curpos.w)); |
| 1086 | 1102 | |
| 1087 | 1103 | if(cdrom_get_track_type(m_cdrom_handle, track) != CD_TRACK_AUDIO) |
| 1088 | 1104 | verboselog(machine(), 0, "psxcd: playing data track\n"); |