Ejemplo n.º 1
0
void prepare_to_exit()
{
	printf ("******  Exiting THPS Demo *****\n");

	//Nx::CEngine::sSuspendEngine();		// turn off Nx engine interrupts
	NxPs2::SuspendEngine();				// 
	
	Sfx::CSfxManager* sfx_manager =  Sfx::CSfxManager::Instance();
	sfx_manager->PauseSounds( );
	if (!Config::CD())
	{
		printf ("Re-initializing the CD/DVD drive\n");
		// if we did not come from a CD, then we need to initilaize the CD here
		// so we can test exiting back to the bootstrap program
	    sceCdInit(SCECdINIT);
	    sceCdMmode(SCECdDVD);
	    sceCdDiskReady(0);
	}
	else
	{
		printf ("Stopping streaming etc, on CD/DVD drive\n");
		Pcm::StopStreams(  );
		Pcm::StopMusic(  );
		sceCdStStop();				// also stop streaming....	   Yes!!
		sceCdStop();				// stop Cd
		sceCdSync(0);				// wait for commands to execute
		sceCdDiskReady(0);		   	// wait for Cd to be ready again
	}	

	scePadEnd();				// Another Sony reccomendation (from James Wang, newgroup post, 6/11/2002)

}
Ejemplo n.º 2
0
//-------------------------------------------------------------------------
void *cbrpc_cddiskready(u32 fno, void *buf, int size)
{	// CD Disk Ready RPC callback

	if (*(int *)buf == 0)
		*(int *)buf = sceCdDiskReady(0);
	else
		*(int *)buf = sceCdDiskReady(1);

	return buf;	
}
Ejemplo n.º 3
0
//-------------------------------------------------------------------------
void *cbrpc_cddiskready2(u32 fno, void *buf, int size)
{	// CD Disk Ready2 RPC callback

	*(int *)buf = sceCdDiskReady(0);

	return buf;
}
Ejemplo n.º 4
0
//-------------------------------------------------------------------------
void *rpcNCmd_cddiskready(u32 fno, void *buf, int size)
{	// CD Disk Ready RPC NCMD

	*(int *)buf = sceCdDiskReady(0);
	return buf;
}
Ejemplo n.º 5
0
//-------------------------------------------------------------- 
void cdvd_readee(void *buf)
{	// Read Disc datas to EE mem buffer
	u32 nbytes, nsectors, sectors_to_read, size_64b, size_64bb, bytesent, temp;
	int sector_size, flag_64b;
	void *fsvRbuf = (void *)cdvdfsv_buf;
	void *eeaddr_64b, *eeaddr2_64b;
	cdvdfsv_readee_t readee;
	RpcCdvd_t *r = (RpcCdvd_t *)buf;

	if (r->sectors == 0) {
		*(int *)buf = 0;
		return;
	}

	sector_size = 2328;

	if ((r->mode.datapattern & 0xff) != 1) {
		sector_size = 2340;
		if ((r->mode.datapattern & 0xff) != 2)
			sector_size = 2048;
	}

	r->eeaddr1 = (void *)((u32)r->eeaddr1 & 0x1fffffff);
	r->eeaddr2 = (void *)((u32)r->eeaddr2 & 0x1fffffff);
	r->buf = (void *)((u32)r->buf & 0x1fffffff);

	sceCdDiskReady(0);

	sectors_to_read = r->sectors;  
	bytesent = 0;

	if (r->eeaddr2)
		mips_memset((void *)curlsn_buf, 0, 16);

	readee.pdst1 = (void *)r->buf;
	eeaddr_64b = (void *)(((u32)r->buf + 0x3f) & 0xffffffc0); // get the next 64-bytes aligned address

	if ((u32)r->buf & 0x3f)
		readee.b1len = (((u32)r->buf & 0xffffffc0) - (u32)r->buf) + 64; // get how many bytes needed to get a 64 bytes alignment
	else
		readee.b1len = 0;

	nbytes = r->sectors * sector_size;

	temp = (u32)r->buf + nbytes;
	eeaddr2_64b = (void *)(temp & 0xffffffc0);
	temp -= (u32)eeaddr2_64b;
	readee.pdst2 = eeaddr2_64b;  // get the end address on a 64 bytes align 
	readee.b2len = temp; // get bytes remainder at end of 64 bytes align 
	fsvRbuf += temp;

	if (readee.b1len)
		flag_64b = 0; // 64 bytes alignment flag
	else {
		if (temp)
			flag_64b = 0;
		else
			flag_64b = 1;
	}

	while (1) {
		do {
			if ((sectors_to_read == 0) || (sceCdGetError() == CDVD_ERR_ABRT)) {

				if (r->eeaddr1)
					sysmemSendEE((void *)&readee, (void *)r->eeaddr1, sizeof(cdvdfsv_readee_t));

				if (r->eeaddr2) {
					*((u32 *)&curlsn_buf[0]) = nbytes;
					sysmemSendEE((void *)curlsn_buf, (void *)r->eeaddr2, 16);
				}

				*(int *)buf = 1;
				return;
			}

			if (flag_64b == 0) { // not 64 bytes aligned buf
				if (sectors_to_read < CDVDFSV_BUF_SECTORS)
					nsectors = sectors_to_read;
				else
					nsectors = CDVDFSV_BUF_SECTORS-1;
				temp = nsectors + 1;
			}
			else { // 64 bytes aligned buf
				if (sectors_to_read < (CDVDFSV_BUF_SECTORS+1))
					nsectors = sectors_to_read;
				else
					nsectors = CDVDFSV_BUF_SECTORS;
				temp = nsectors;
			}

			sceCdRead0(r->lsn, temp, (void *)fsvRbuf, NULL);

			size_64b = nsectors * sector_size;
			size_64bb = size_64b;

			if (!flag_64b) {
				if (sectors_to_read == r->sectors) // check that was the first read
					mips_memcpy((void *)readee.buf1, (void *)fsvRbuf, readee.b1len);

				if ((!flag_64b) && (sectors_to_read == nsectors) && (readee.b1len))
					size_64bb = size_64b - 64;
			}

			if (size_64bb > 0) {
				sysmemSendEE((void *)(fsvRbuf + readee.b1len), (void *)eeaddr_64b, size_64bb);
				bytesent += size_64bb;
			}

			if (r->eeaddr2) {
				temp = bytesent;
				if (temp < 0)
					temp += 2047;
				temp = temp >> 11;
				*((u32 *)&curlsn_buf[0]) = temp;
				sysmemSendEE((void *)curlsn_buf, (void *)r->eeaddr2, 16);
			}

			sectors_to_read -= nsectors;
			r->lsn += nsectors;
			eeaddr_64b += size_64b;

		} while ((flag_64b) || (sectors_to_read));

		mips_memcpy((void *)readee.buf2, (void *)(fsvRbuf + size_64b - readee.b2len), readee.b2len);
	}