Пример #1
0
s32 DeviceBufferOffset()
{
#ifdef VERBOSE_FUNCTION_DEVICE
	PrintLog("CDVD device: DeviceBufferOffset()");
#endif /* VERBOSE_FUNCTION_DEVICE */
	if (DiscInserted() == -1)  return (-1);
	if ((disctype == CDVD_TYPE_PS2DVD) || (disctype == CDVD_TYPE_DVDV))
		return (0);
	else
		return (CDgetBufferOffset()); // ENDIF- Is this a DVD?
} // END DeviceBufferOffset()
Пример #2
0
s32 DeviceBufferOffset()
{
	if (DiscInserted() == -1)  return(-1);

	if ((disctype == CDVD_TYPE_PS2DVD) || (disctype == CDVD_TYPE_DVDV))
	{
		return(0);
	}
	else
	{
		return(CDgetBufferOffset());
	} // ENDIF- Is this a DVD?

	return(-1);
} // END DeviceBufferOffset()
Пример #3
0
Файл: CD.c Проект: Codyle/pcsx2
s32 CALLBACK CDgetDiskType(s32 ioctldisktype)
{
	s32 offset;
	s32 s32result;
	int i;
	u8 j;
	int tempdisctype;
	offset = 0;
	errno = 0;
	i = 0;
	j = 0;
	tempdisctype = CDVD_TYPE_UNKNOWN;
#ifdef VERBOSE_FUNCTION
	PrintLog("CDVD driver: CDgetDiskType()");
#endif /* VERBOSE_FUNCTION */
	s32result = CDreadTrack(16, CDVD_MODE_2352, cdtempbuffer);
	if ((s32result != 0) || (errno != 0))
		return (-1); // ENDIF- Cannot read the CD's ISO9660 volume sector? Abort
	disctype = CDVD_TYPE_DETCTCD;
	switch (ioctldisktype) {
		case CDS_AUDIO:
#ifdef VERBOSE_DISC_TYPE
			PrintLog("CDVD driver: Detected CDDA Audio disc.");
#endif /* VERBOSE_DISC_TYPE */
			tempdisctype = CDVD_TYPE_CDDA;
			tocbuffer[0] = 0x01;
			break;
		case CDS_DATA_1:
		case CDS_MIXED:
#ifdef VERBOSE_DISC_TYPE
			PrintLog("CDVD driver: Detected CD disc.");
#endif /* VERBOSE_DISC_TYPE */
			tocbuffer[0] = 0x41;
			CDreadTrack(16, CDVD_MODE_2048, cdtempbuffer);
			offset = CDgetBufferOffset();
			i = 0;
			while ((*(playstationcdname + i) != 0) &&
			       (*(playstationcdname + i) == cdtempbuffer[offset + 8 + i]))  i++;
			if (*(playstationcdname + i) == 0) {
				i = 0;
				while ((*(ps1name + i) != 0) &&
				       (*(ps1name + i) == cdtempbuffer[offset + 1024 + i]))  i++;
				if (*(ps1name + i) == 0) {
#ifdef VERBOSE_DISC_TYPE
					PrintLog("CDVD driver: Detected Playstation CD disc.");
#endif /* VERBOSE_DISC_TYPE */
					tempdisctype = CDVD_TYPE_PSCD;
				} else {
#ifdef VERBOSE_DISC_TYPE
					PrintLog("CDVD driver: Detected Playstation 2 CD disc.");
#endif /* VERBOSE_DISC_TYPE */
					tempdisctype = CDVD_TYPE_PS2CD;
				} // ENDIF- Did we find the CD ident? (For Playstation 1 CDs)
			} else
				tempdisctype = CDVD_TYPE_UNKNOWN; // ENDIF- Did we find the Playstation name?
			break;
		default:
			return (-1);
	} // ENDSWITCH- What has ioctl disc type come up with?
	// Collect TN data
	cdheader.cdth_trk0 = 0;
	cdheader.cdth_trk1 = 0;
	s32result = ioctl(devicehandle, CDROMREADTOCHDR, &cdheader);
	if ((s32result == -1) || (errno != 0)) {
#ifdef VERBOSE_WARNINGS
		PrintLog("CDVD driver:   Error reading TN: (%i) %i:%s",
		         s32result, errno, strerror(errno));
#endif /* VERBOSE_WARNINGS */
		cdheader.cdth_trk0 = 1;
		cdheader.cdth_trk1 = 1;
	} // ENDIF- Failed to read in track count? Assume 1 track.
#ifdef VERBOSE_DISC_INFO
	PrintLog("CDVD driver: Track Number Range: %i-%i",
	         cdheader.cdth_trk0, cdheader.cdth_trk1);
#endif /* VERBOSE_DISC_INFO */
	tocbuffer[2] = 0xA0;
	tocbuffer[7] = HEXTOBCD(cdheader.cdth_trk0);
	tocbuffer[12] = 0xA1;
	tocbuffer[17] = HEXTOBCD(cdheader.cdth_trk1);
	// Collect disc TD data
	cdtrack.cdte_track = CDROM_LEADOUT;
	cdtrack.cdte_format = CDROM_LBA;
	s32result = ioctl(devicehandle, CDROMREADTOCENTRY, &cdtrack);
	if ((s32result == -1) || (errno != 0)) {
#ifdef VERBOSE_WARNINGS
		PrintLog("CDVD driver:   Error reading TD for disc: (%i) %i:%s",
		         s32result, errno, strerror(errno));
#endif /* VERBOSE_WARNINGS */
		return (-1);
	} // ENDIF- Trouble getting a track count?
	LBAtoMSF(cdtrack.cdte_addr.lba, &tocbuffer[27]);
#ifdef VERBOSE_DISC_INFO
	PrintLog("CDVD driver: Total Time: %i:%i",
	         tocbuffer[27], tocbuffer[28]);
#endif /* VERBOSE_DISC_INFO */
	tocbuffer[27] = HEXTOBCD(tocbuffer[27]);
	tocbuffer[28] = HEXTOBCD(tocbuffer[28]);
	tocbuffer[29] = HEXTOBCD(tocbuffer[29]);
	// Collect track TD data
	for (j = cdheader.cdth_trk0; j <= cdheader.cdth_trk1; j++) {
		cdtrack.cdte_track = j; // j-1?
		cdtrack.cdte_format = CDROM_LBA;
		s32result = ioctl(devicehandle, CDROMREADTOCENTRY, &cdtrack);
		if ((s32result == -1) || (errno != 0)) {
#ifdef VERBOSE_WARNINGS
			PrintLog("CDVD driver:   Error reading TD for track %i: (%i) %i:%s",
			         j, s32result, errno, strerror(errno));
#endif /* VERBOSE_WARNINGS */
			// No more here...
		} else {
			LBAtoMSF(cdtrack.cdte_addr.lba, &tocbuffer[j * 10 + 37]);
#ifdef VERBOSE_DISC_INFO
			PrintLog("CDVD driver: Track %i:  Data Mode %i   Disc Start Time:%i:%i.%i\n",
			         j,
			         cdtrack.cdte_datamode,
			         tocbuffer[j * 10 + 37],
			         tocbuffer[j * 10 + 38],
			         tocbuffer[j * 10 + 39]);
#endif /* VERBOSE_DISC_INFO */
			tocbuffer[j * 10 + 30] = cdtrack.cdte_datamode;
			tocbuffer[j * 10 + 32] = HEXTOBCD(j);
			tocbuffer[j * 10 + 37] = HEXTOBCD(tocbuffer[j * 10 + 37]);
			tocbuffer[j * 10 + 38] = HEXTOBCD(tocbuffer[j * 10 + 38]);
			tocbuffer[j * 10 + 39] = HEXTOBCD(tocbuffer[j * 10 + 39]);
		} // ENDIF- Trouble getting a track count?
	} // NEXT j- Reading each track's info in turn
	errno = 0;
	disctype = tempdisctype; // Trigger the fact we have the info (finally)
	return (disctype);
} // END CDVDgetDiskType()