DVD is FIXED! YAY!

This commit is contained in:
dborth 2008-10-04 02:27:05 +00:00
parent 5c7fbaec11
commit b827c54d19
3 changed files with 34 additions and 32 deletions

View File

@ -52,44 +52,38 @@ unsigned char dvdbuffer[2048];
int int
dvd_read (void *dst, unsigned int len, u64 offset) dvd_read (void *dst, unsigned int len, u64 offset)
{ {
unsigned char *buffer = (unsigned char *) (unsigned int) DVDreadbuffer;
if (len > 2048) if (len > 2048)
return 0; /*** We only allow 2k reads **/ return 0; /*** We only allow 2k reads **/
DCInvalidateRange ((void *) buffer, len);
// don't read past the end of the DVD (1.5 GB for GC DVD, 4.7 GB for DVD) // don't read past the end of the DVD (1.5 GB for GC DVD, 4.7 GB for DVD)
if(offset < 0x57057C00 || (isWii && offset < 0x118244F00LL)) if((offset < 0x57057C00) || (isWii && (offset < 0x118244F00LL)))
{ {
unsigned char *buffer = (unsigned char *) (unsigned int) DVDreadbuffer;
DCInvalidateRange ((void *) buffer, len);
#ifdef HW_DOL #ifdef HW_DOL
dvd[0] = 0x2E;
dvd[1] = 0;
dvd[2] = 0xA8000000;
dvd[3] = (u32)(offset >> 2);
dvd[4] = len;
dvd[5] = (u32) buffer;
dvd[6] = len;
dvd[7] = 3;
// Enable reading with DMA
while (dvd[7] & 1);
// Ensure it has completed
if (dvd[0] & 0x4)
return 0;
#else
if (DI_ReadDVD(buffer, len >> 11, (u32)(offset >> 11)))
return 0;
#endif
dvd[0] = 0x2E;
dvd[1] = 0;
dvd[2] = 0xA8000000;
dvd[3] = (u32)(offset >> 2);
dvd[4] = len;
dvd[5] = (u32) buffer;
dvd[6] = len;
dvd[7] = 3; /*** Enable reading with DMA ***/
while (dvd[7] & 1);
memcpy (dst, buffer, len); memcpy (dst, buffer, len);
if (dvd[0] & 0x4) /* Ensure it has completed */
return 0;
return 1; return 1;
#elif WII_DVD
int ret = 1;
ret = DI_ReadDVD(dst, len >> 11, (u32)(offset >> 11));
if (ret==0)
return 1;
else
return 0;
#endif
} }
return 0; return 0;
@ -476,6 +470,7 @@ LoadDVDFile ()
{ {
return UnZipFile (rbuffer, discoffset); // unzip from dvd return UnZipFile (rbuffer, discoffset); // unzip from dvd
} }
return dvddirlength; return dvddirlength;
} }

View File

@ -235,8 +235,15 @@ LoadSMBFile ()
/**************************************************************************** /****************************************************************************
* Write savebuffer to SMB file * Write savebuffer to SMB file
****************************************************************************/ ****************************************************************************/
// no buffer specified, use savebuffer
int int
SaveBufferToSMB (char *filepath, int datasize, bool silent) SaveBufferToSMB (char *filepath, int datasize, bool silent)
{
return SaveBufferToSMB((char *)savebuffer, filepath, datasize, silent);
}
int
SaveBufferToSMB (char * sbuffer, char *filepath, int datasize, bool silent)
{ {
if(!ConnectShare (NOTSILENT)) if(!ConnectShare (NOTSILENT))
return 0; return 0;
@ -256,10 +263,10 @@ SaveBufferToSMB (char *filepath, int datasize, bool silent)
{ {
if (dsize > 1024) if (dsize > 1024)
wrote = wrote =
SMB_WriteFile ((char *) savebuffer + boffset, 1024, boffset, smbfile); SMB_WriteFile ((char *) sbuffer + boffset, 1024, boffset, smbfile);
else else
wrote = wrote =
SMB_WriteFile ((char *) savebuffer + boffset, dsize, boffset, smbfile); SMB_WriteFile ((char *) sbuffer + boffset, dsize, boffset, smbfile);
boffset += wrote; boffset += wrote;
dsize -= wrote; dsize -= wrote;

View File

@ -23,5 +23,5 @@ int LoadSMBFile ();
int LoadBufferFromSMB (char *filepath, bool silent); int LoadBufferFromSMB (char *filepath, bool silent);
int LoadBufferFromSMB (char * sbuffer, char *filepath, bool silent); int LoadBufferFromSMB (char * sbuffer, char *filepath, bool silent);
int SaveBufferToSMB (char *filepath, int datasize, bool silent); int SaveBufferToSMB (char *filepath, int datasize, bool silent);
int SaveBufferToSMB (char * sbuffer, char *filepath, int datasize, bool silent);
#endif #endif