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"); |