clang-format: pcsx2/CDVD/CDVD.cpp

This commit is contained in:
Ty Lamontagne 2021-10-17 23:20:08 -04:00 committed by refractionpcsx2
parent f5a9b98578
commit 0fed1cbedd
1 changed files with 77 additions and 78 deletions

View File

@ -1,5 +1,5 @@
/* PCSX2 - PS2 Emulator for PCs /* PCSX2 - PS2 Emulator for PCs
* Copyright (C) 2002-2010 PCSX2 Dev Team * Copyright (C) 2002-2021 PCSX2 Dev Team
* *
* PCSX2 is free software: you can redistribute it and/or modify it under the terms * PCSX2 is free software: you can redistribute it and/or modify it under the terms
* of the GNU Lesser General Public License as published by the Free Software Found- * of the GNU Lesser General Public License as published by the Free Software Found-
@ -155,14 +155,14 @@ static void cdvdCreateNewNVM(const wxString& filename)
if (!fp.IsOpened()) if (!fp.IsOpened())
throw Exception::CannotCreateStream(filename); throw Exception::CannotCreateStream(filename);
u8 zero[1024] = { 0 }; u8 zero[1024] = {0};
fp.Write(zero, sizeof(zero)); fp.Write(zero, sizeof(zero));
// Write NVM ILink area with dummy data (Age of Empires 2) // Write NVM ILink area with dummy data (Age of Empires 2)
// Also write language data defaulting to English (Guitar Hero 2) // Also write language data defaulting to English (Guitar Hero 2)
NVMLayout* nvmLayout = getNvmLayout(); NVMLayout* nvmLayout = getNvmLayout();
u8 ILinkID_Data[8] = { 0x00, 0xAC, 0xFF, 0xFF, 0xFF, 0xFF, 0xB9, 0x86 }; u8 ILinkID_Data[8] = {0x00, 0xAC, 0xFF, 0xFF, 0xFF, 0xFF, 0xB9, 0x86};
fp.Seek(*(s32*)(((u8*)nvmLayout) + offsetof(NVMLayout, ilinkId))); fp.Seek(*(s32*)(((u8*)nvmLayout) + offsetof(NVMLayout, ilinkId)));
fp.Write(ILinkID_Data, sizeof(ILinkID_Data)); fp.Write(ILinkID_Data, sizeof(ILinkID_Data));
@ -198,7 +198,7 @@ static void cdvdNVM(u8* buffer, int offset, size_t bytes, bool read)
else else
{ {
u8 LanguageParams[16]; u8 LanguageParams[16];
u8 zero[16] = { 0 }; u8 zero[16] = {0};
NVMLayout* nvmLayout = getNvmLayout(); NVMLayout* nvmLayout = getNvmLayout();
wxFFile fp(fname, L"r+b"); wxFFile fp(fname, L"r+b");
@ -232,7 +232,7 @@ static void cdvdNVM(u8* buffer, int offset, size_t bytes, bool read)
if (ret != bytes) if (ret != bytes)
Console.Error(L"Failed to %s %s. Did only %zu/%zu bytes", Console.Error(L"Failed to %s %s. Did only %zu/%zu bytes",
read ? L"read from" : L"write to", WX_STR(fname), ret, bytes); read ? L"read from" : L"write to", WX_STR(fname), ret, bytes);
} }
static void cdvdReadNVM(u8* dst, int offset, int bytes) static void cdvdReadNVM(u8* dst, int offset, int bytes)
@ -557,7 +557,7 @@ void cdvdReadKey(u8, u16, u32 arg2, u8* key)
} }
DevCon.WriteLn("CDVD.KEY = %02X,%02X,%02X,%02X,%02X,%02X,%02X", DevCon.WriteLn("CDVD.KEY = %02X,%02X,%02X,%02X,%02X,%02X,%02X",
cdvd.Key[0], cdvd.Key[1], cdvd.Key[2], cdvd.Key[3], cdvd.Key[4], cdvd.Key[14], cdvd.Key[15]); cdvd.Key[0], cdvd.Key[1], cdvd.Key[2], cdvd.Key[3], cdvd.Key[4], cdvd.Key[14], cdvd.Key[15]);
} }
s32 cdvdGetToc(void* toc) s32 cdvdGetToc(void* toc)
@ -653,8 +653,7 @@ static s32 cdvdReadDvdDualInfo(s32* dualType, u32* layer1Start)
static bool cdvdIsDVD() static bool cdvdIsDVD()
{ {
if (cdvd.Type == CDVD_TYPE_DETCTDVDS || cdvd.Type == CDVD_TYPE_DETCTDVDD if (cdvd.Type == CDVD_TYPE_DETCTDVDS || cdvd.Type == CDVD_TYPE_DETCTDVDD || cdvd.Type == CDVD_TYPE_PS2DVD || cdvd.Type == CDVD_TYPE_DVDV)
|| cdvd.Type == CDVD_TYPE_PS2DVD || cdvd.Type == CDVD_TYPE_DVDV)
return true; return true;
else else
return false; return false;
@ -678,7 +677,7 @@ static int cdvdTrayStateDetecting()
return CDVD_TYPE_DETCTDVDS; return CDVD_TYPE_DETCTDVDS;
} }
if(cdvd.Type != CDVD_TYPE_NODISC) if (cdvd.Type != CDVD_TYPE_NODISC)
return CDVD_TYPE_DETCTCD; return CDVD_TYPE_DETCTCD;
else else
return CDVD_TYPE_DETCT; //Detecting any kind of disc existing return CDVD_TYPE_DETCT; //Detecting any kind of disc existing
@ -759,13 +758,13 @@ static uint cdvdBlockReadTime(CDVD_MODE_TYPE mode)
numSectors = 360000; numSectors = 360000;
break; break;
} }
const float sectorSpeed = (((float)(cdvd.SeekToSector - offset) / numSectors) * 0.60f) + 0.40f; const float sectorSpeed = (((float)(cdvd.SeekToSector - offset) / numSectors) * 0.60f) + 0.40f;
return (PSXCLK / ((((mode == MODE_CDROM) ? CD_SECTORS_PERSECOND : DVD_SECTORS_PERSECOND) * cdvd.Speed) * sectorSpeed)); return (PSXCLK / ((((mode == MODE_CDROM) ? CD_SECTORS_PERSECOND : DVD_SECTORS_PERSECOND) * cdvd.Speed) * sectorSpeed));
//return ((PSXCLK * cdvd.BlockSize) / ((float)(((mode == MODE_CDROM) ? PSX_CD_READSPEED : PSX_DVD_READSPEED) * cdvd.Speed) * sectorSpeed)); //return ((PSXCLK * cdvd.BlockSize) / ((float)(((mode == MODE_CDROM) ? PSX_CD_READSPEED : PSX_DVD_READSPEED) * cdvd.Speed) * sectorSpeed));
} }
// CLV Read Speed is constant // CLV Read Speed is constant
//return ((PSXCLK * cdvd.BlockSize) / (float)(((mode == MODE_CDROM) ? PSX_CD_READSPEED : PSX_DVD_READSPEED) * cdvd.Speed)); //return ((PSXCLK * cdvd.BlockSize) / (float)(((mode == MODE_CDROM) ? PSX_CD_READSPEED : PSX_DVD_READSPEED) * cdvd.Speed));
return (PSXCLK / (((mode == MODE_CDROM) ? CD_SECTORS_PERSECOND : DVD_SECTORS_PERSECOND) * cdvd.Speed)); return (PSXCLK / (((mode == MODE_CDROM) ? CD_SECTORS_PERSECOND : DVD_SECTORS_PERSECOND) * cdvd.Speed));
@ -838,7 +837,7 @@ void cdvdNewDiskCB()
DoCDVDresetDiskTypeCache(); DoCDVDresetDiskTypeCache();
cdvdDetectDisk(); cdvdDetectDisk();
// If not ejected but we've swapped source pretend it got ejected // If not ejected but we've swapped source pretend it got ejected
if ((g_GameStarted || !g_SkipBiosHack) && cdvd.Tray.trayState != CDVD_DISC_EJECT) if ((g_GameStarted || !g_SkipBiosHack) && cdvd.Tray.trayState != CDVD_DISC_EJECT)
{ {
@ -852,7 +851,7 @@ void cdvdNewDiskCB()
if (cdvd.Type > 0) if (cdvd.Type > 0)
cdvd.Tray.cdvdActionSeconds = 3; cdvd.Tray.cdvdActionSeconds = 3;
} }
else if(cdvd.Type > 0) else if (cdvd.Type > 0)
{ {
DevCon.WriteLn(Color_Green, L"Seeking new media"); DevCon.WriteLn(Color_Green, L"Seeking new media");
cdvd.Ready &= ~CDVD_DRIVE_READY; cdvd.Ready &= ~CDVD_DRIVE_READY;
@ -1008,7 +1007,7 @@ __fi void cdvdActionInterrupt()
case cdvdAction_Standby: case cdvdAction_Standby:
DevCon.Warning("CDVD Standby Call"); DevCon.Warning("CDVD Standby Call");
cdvd.Spinning = true; //check (rama) cdvd.Spinning = true; //check (rama)
cdvd.Ready |= CDVD_DRIVE_READY; //check (rama) cdvd.Ready |= CDVD_DRIVE_READY; //check (rama)
cdvd.Sector = cdvd.SeekToSector; cdvd.Sector = cdvd.SeekToSector;
cdvd.Status = CDVD_STATUS_READ; cdvd.Status = CDVD_STATUS_READ;
@ -1027,12 +1026,12 @@ __fi void cdvdActionInterrupt()
case cdvdAction_Break: case cdvdAction_Break:
// Make sure the cdvd action state is pretty well cleared: // Make sure the cdvd action state is pretty well cleared:
DevCon.WriteLn("CDVD Break Call"); DevCon.WriteLn("CDVD Break Call");
if(!(cdvd.Ready & 0x40)) if (!(cdvd.Ready & 0x40))
cdvd.Error = 1; // Abort cdvd.Error = 1; // Abort
cdvd.Reading = 0; cdvd.Reading = 0;
cdvd.Readed = 0; cdvd.Readed = 0;
cdvd.Ready |= CDVD_DRIVE_READY; // should be CDVD_READY1 or something else? cdvd.Ready |= CDVD_DRIVE_READY; // should be CDVD_READY1 or something else?
cdvd.Status = CDVD_STATUS_PAUSE; //Break stops the command in progress it doesn't stop the drive. Formula 2001 cdvd.Status = CDVD_STATUS_PAUSE; //Break stops the command in progress it doesn't stop the drive. Formula 2001
cdvd.RErr = 0; cdvd.RErr = 0;
break; break;
@ -1102,13 +1101,13 @@ __fi void cdvdReadInterrupt()
cdvd.Readed = 1; cdvd.Readed = 1;
cdvd.Sector = cdvd.SeekToSector; cdvd.Sector = cdvd.SeekToSector;
CDVD_LOG("Cdvd Seek Complete > Scheduling block read interrupt at iopcycle=%8.8x.", CDVD_LOG("Cdvd Seek Complete > Scheduling block read interrupt at iopcycle=%8.8x.",
psxRegs.cycle + cdvd.ReadTime); psxRegs.cycle + cdvd.ReadTime);
CDVDREAD_INT(cdvd.ReadTime); CDVDREAD_INT(cdvd.ReadTime);
cdvd.Status = CDVD_STATUS_READ; cdvd.Status = CDVD_STATUS_READ;
return; return;
} }
else if(cdvd.Reading) else if (cdvd.Reading)
{ {
if (cdvd.RErr == 0) if (cdvd.RErr == 0)
{ {
@ -1265,8 +1264,8 @@ static uint cdvdStartSeek(uint newsector, CDVD_MODE_TYPE mode)
{ {
//cdvd.Status = CDVD_STATUS_PAUSE; //cdvd.Status = CDVD_STATUS_PAUSE;
cdvd.Status = CDVD_STATUS_READ; // Time Crisis 2 cdvd.Status = CDVD_STATUS_READ; // Time Crisis 2
cdvd.Readed = 1; // Note: 1, not 0, as implied by the next comment. Need to look into this. --arcum42 cdvd.Readed = 1; // Note: 1, not 0, as implied by the next comment. Need to look into this. --arcum42
cdvd.Reading = 1; // We don't need to wait for it to read a sector as it's already queued up, or we adjust for it here. cdvd.Reading = 1; // We don't need to wait for it to read a sector as it's already queued up, or we adjust for it here.
cdvd.RetryCntP = 0; cdvd.RetryCntP = 0;
// setting Readed to 0 skips the seek logic, which means the next call to // setting Readed to 0 skips the seek logic, which means the next call to
@ -1319,27 +1318,27 @@ void cdvdUpdateTrayState()
{ {
switch (cdvd.Tray.trayState) switch (cdvd.Tray.trayState)
{ {
case CDVD_DISC_EJECT: case CDVD_DISC_EJECT:
cdvdCtrlTrayClose(); cdvdCtrlTrayClose();
break; break;
case CDVD_DISC_DETECTING: case CDVD_DISC_DETECTING:
DevCon.WriteLn(Color_Green, L"Seeking new disc"); DevCon.WriteLn(Color_Green, L"Seeking new disc");
cdvd.Tray.trayState = CDVD_DISC_SEEKING; cdvd.Tray.trayState = CDVD_DISC_SEEKING;
cdvd.Tray.cdvdActionSeconds = 2; cdvd.Tray.cdvdActionSeconds = 2;
break; break;
case CDVD_DISC_SEEKING: case CDVD_DISC_SEEKING:
case CDVD_DISC_ENGAGED: case CDVD_DISC_ENGAGED:
cdvd.Tray.trayState = CDVD_DISC_ENGAGED; cdvd.Tray.trayState = CDVD_DISC_ENGAGED;
cdvd.Ready |= CDVD_DRIVE_READY; cdvd.Ready |= CDVD_DRIVE_READY;
if (CDVDsys_GetSourceType() != CDVD_SourceType::NoDisc) if (CDVDsys_GetSourceType() != CDVD_SourceType::NoDisc)
{ {
DevCon.WriteLn(Color_Green, L"Media ready to read"); DevCon.WriteLn(Color_Green, L"Media ready to read");
cdvd.mediaChanged = true; cdvd.mediaChanged = true;
cdvd.Status = CDVD_STATUS_PAUSE; cdvd.Status = CDVD_STATUS_PAUSE;
} }
else else
cdvd.Status = CDVD_STATUS_STOP; cdvd.Status = CDVD_STATUS_STOP;
break; break;
} }
} }
} }
@ -1551,7 +1550,7 @@ static void cdvdWrite04(u8 rt)
switch (rt) switch (rt)
{ {
case N_CD_SYNC: // CdSync case N_CD_SYNC: // CdSync
case N_CD_NOP: // CdNop_ case N_CD_NOP: // CdNop_
cdvdSetIrq(); cdvdSetIrq();
break; break;
@ -1732,7 +1731,7 @@ static void cdvdWrite04(u8 rt)
if (EmuConfig.CdvdVerboseReads) if (EmuConfig.CdvdVerboseReads)
Console.WriteLn(Color_Gray, L"CdAudioRead: Reading Sector %07d (%03d Blocks of Size %d) at Speed=%dx(%s) Spindle=%x", Console.WriteLn(Color_Gray, L"CdAudioRead: Reading Sector %07d (%03d Blocks of Size %d) at Speed=%dx(%s) Spindle=%x",
cdvd.Sector, cdvd.nSectors, cdvd.BlockSize, cdvd.Speed, (cdvd.SpindlCtrl & CDVD_SPINDLE_CAV) ? L"CAV" : L"CLV", cdvd.SpindlCtrl); cdvd.Sector, cdvd.nSectors, cdvd.BlockSize, cdvd.Speed, (cdvd.SpindlCtrl & CDVD_SPINDLE_CAV) ? L"CAV" : L"CLV", cdvd.SpindlCtrl);
cdvd.ReadTime = cdvdBlockReadTime(MODE_CDROM); cdvd.ReadTime = cdvdBlockReadTime(MODE_CDROM);
CDVDREAD_INT(cdvdStartSeek(cdvd.SeekToSector, MODE_CDROM)); CDVDREAD_INT(cdvdStartSeek(cdvd.SeekToSector, MODE_CDROM));
@ -1746,7 +1745,7 @@ static void cdvdWrite04(u8 rt)
// this'll skip the seek delay. // this'll skip the seek delay.
cdvd.Reading = 1; cdvd.Reading = 1;
break; break;
case N_DVD_READ: // DvdRead case N_DVD_READ: // DvdRead
// Assign the seek to sector based on cdvd.Param[0]-[3], and the number of sectors based on cdvd.Param[4]-[7]. // Assign the seek to sector based on cdvd.Param[0]-[3], and the number of sectors based on cdvd.Param[4]-[7].
cdvd.SeekToSector = *(u32*)(cdvd.Param + 0); cdvd.SeekToSector = *(u32*)(cdvd.Param + 0);
@ -1758,7 +1757,7 @@ static void cdvdWrite04(u8 rt)
cdvd.RetryCnt = cdvd.Param[8]; cdvd.RetryCnt = cdvd.Param[8];
cdvd.SpindlCtrl = cdvd.Param[9]; cdvd.SpindlCtrl = cdvd.Param[9];
switch (cdvd.SpindlCtrl & CDVD_SPINDLE_SPEED) switch (cdvd.SpindlCtrl & CDVD_SPINDLE_SPEED)
{ {
case 0: // Will use current speed case 0: // Will use current speed
@ -1782,11 +1781,11 @@ static void cdvdWrite04(u8 rt)
cdvd.BlockSize = 2064; cdvd.BlockSize = 2064;
CDVD_LOG("DvdRead > startSector=%d, seekTo=%d nSectors=%d, RetryCnt=%x, Speed=%dx(%s), ReadMode=%x(%x) SpindleCtrl=%x", CDVD_LOG("DvdRead > startSector=%d, seekTo=%d nSectors=%d, RetryCnt=%x, Speed=%dx(%s), ReadMode=%x(%x) SpindleCtrl=%x",
cdvd.Sector, cdvd.SeekToSector, cdvd.nSectors, cdvd.RetryCnt, cdvd.Speed, (cdvd.SpindlCtrl & CDVD_SPINDLE_CAV) ? L"CAV" : L"CLV", cdvd.ReadMode, cdvd.Param[10], cdvd.SpindlCtrl); cdvd.Sector, cdvd.SeekToSector, cdvd.nSectors, cdvd.RetryCnt, cdvd.Speed, (cdvd.SpindlCtrl & CDVD_SPINDLE_CAV) ? L"CAV" : L"CLV", cdvd.ReadMode, cdvd.Param[10], cdvd.SpindlCtrl);
if (EmuConfig.CdvdVerboseReads) if (EmuConfig.CdvdVerboseReads)
Console.WriteLn(Color_Gray, L"DvdRead: Reading Sector %07d (%03d Blocks of Size %d) at Speed=%dx(%s) SpindleCtrl=%x", Console.WriteLn(Color_Gray, L"DvdRead: Reading Sector %07d (%03d Blocks of Size %d) at Speed=%dx(%s) SpindleCtrl=%x",
cdvd.SeekToSector, cdvd.nSectors, cdvd.BlockSize, cdvd.Speed, (cdvd.SpindlCtrl & CDVD_SPINDLE_CAV) ? L"CAV" : L"CLV", cdvd.SpindlCtrl); cdvd.SeekToSector, cdvd.nSectors, cdvd.BlockSize, cdvd.Speed, (cdvd.SpindlCtrl & CDVD_SPINDLE_CAV) ? L"CAV" : L"CLV", cdvd.SpindlCtrl);
cdvd.ReadTime = cdvdBlockReadTime(MODE_DVDROM); cdvd.ReadTime = cdvdBlockReadTime(MODE_DVDROM);
CDVDREAD_INT(cdvdStartSeek(cdvd.SeekToSector, MODE_DVDROM)); CDVDREAD_INT(cdvdStartSeek(cdvd.SeekToSector, MODE_DVDROM));
@ -2175,8 +2174,8 @@ static void cdvdWrite16(u8 rt) // SCOMMAND
// case 0x19: // sceCdForbidRead (0:1) - from xcdvdman // case 0x19: // sceCdForbidRead (0:1) - from xcdvdman
// break; // break;
case 0x1A: // sceCdBootCertify (4:1)//(4:16 in psx?) case 0x1A: // sceCdBootCertify (4:1)//(4:16 in psx?)
SetResultSize(1); //on input there are 4 bytes: 1;?10;J;C for 18000; 1;60;E;C for 39002 from ROMVER SetResultSize(1); //on input there are 4 bytes: 1;?10;J;C for 18000; 1;60;E;C for 39002 from ROMVER
cdvd.Result[0] = 1; //i guess that means okay cdvd.Result[0] = 1; //i guess that means okay
break; break;
@ -2243,7 +2242,7 @@ static void cdvdWrite16(u8 rt) // SCOMMAND
case 0x27: // GetPS1BootParam (0:13) - called only by China region PS2 models case 0x27: // GetPS1BootParam (0:13) - called only by China region PS2 models
// Return Disc Serial which is passed to PS1DRV and later used to find matching config. // Return Disc Serial which is passed to PS1DRV and later used to find matching config.
SetResultSize(13); SetResultSize(13);
cdvd.Result[0] = 0; cdvd.Result[0] = 0;
cdvd.Result[1] = DiscSerial[0]; cdvd.Result[1] = DiscSerial[0];
@ -2364,29 +2363,29 @@ static void cdvdWrite16(u8 rt) // SCOMMAND
cdvd.Result[0] = 0; cdvd.Result[0] = 0;
break; break;
case 0x80: // secrman: __mechacon_auth_0x80 case 0x80: // secrman: __mechacon_auth_0x80
SetResultSize(1); //in:1 SetResultSize(1); //in:1
cdvd.mg_datatype = 0; //data cdvd.mg_datatype = 0; //data
cdvd.Result[0] = 0; cdvd.Result[0] = 0;
break; break;
case 0x81: // secrman: __mechacon_auth_0x81 case 0x81: // secrman: __mechacon_auth_0x81
SetResultSize(1); //in:1 SetResultSize(1); //in:1
cdvd.mg_datatype = 0; //data cdvd.mg_datatype = 0; //data
cdvd.Result[0] = 0; cdvd.Result[0] = 0;
break; break;
case 0x82: // secrman: __mechacon_auth_0x82 case 0x82: // secrman: __mechacon_auth_0x82
SetResultSize(1); //in:16 SetResultSize(1); //in:16
cdvd.Result[0] = 0; cdvd.Result[0] = 0;
break; break;
case 0x83: // secrman: __mechacon_auth_0x83 case 0x83: // secrman: __mechacon_auth_0x83
SetResultSize(1); //in:8 SetResultSize(1); //in:8
cdvd.Result[0] = 0; cdvd.Result[0] = 0;
break; break;
case 0x84: // secrman: __mechacon_auth_0x84 case 0x84: // secrman: __mechacon_auth_0x84
SetResultSize(1 + 8 + 4); //in:0 SetResultSize(1 + 8 + 4); //in:0
cdvd.Result[0] = 0; cdvd.Result[0] = 0;
@ -2405,7 +2404,7 @@ static void cdvdWrite16(u8 rt) // SCOMMAND
cdvd.Result[12] = 0x9b; cdvd.Result[12] = 0x9b;
break; break;
case 0x85: // secrman: __mechacon_auth_0x85 case 0x85: // secrman: __mechacon_auth_0x85
SetResultSize(1 + 4 + 8); //in:0 SetResultSize(1 + 4 + 8); //in:0
cdvd.Result[0] = 0; cdvd.Result[0] = 0;
@ -2424,17 +2423,17 @@ static void cdvdWrite16(u8 rt) // SCOMMAND
cdvd.Result[12] = 0xa3; cdvd.Result[12] = 0xa3;
break; break;
case 0x86: // secrman: __mechacon_auth_0x86 case 0x86: // secrman: __mechacon_auth_0x86
SetResultSize(1); //in:16 SetResultSize(1); //in:16
cdvd.Result[0] = 0; cdvd.Result[0] = 0;
break; break;
case 0x87: // secrman: __mechacon_auth_0x87 case 0x87: // secrman: __mechacon_auth_0x87
SetResultSize(1); //in:8 SetResultSize(1); //in:8
cdvd.Result[0] = 0; cdvd.Result[0] = 0;
break; break;
case 0x8D: // sceMgWriteData case 0x8D: // sceMgWriteData
SetResultSize(1); //in:length<=16 SetResultSize(1); //in:length<=16
if (cdvd.mg_size + cdvd.ParamC > cdvd.mg_maxsize) if (cdvd.mg_size + cdvd.ParamC > cdvd.mg_maxsize)
{ {
@ -2455,9 +2454,9 @@ static void cdvdWrite16(u8 rt) // SCOMMAND
memcpy(cdvd.mg_buffer, cdvd.mg_buffer + cdvd.ResultC, cdvd.mg_size); memcpy(cdvd.mg_buffer, cdvd.mg_buffer + cdvd.ResultC, cdvd.mg_size);
break; break;
case 0x88: // secrman: __mechacon_auth_0x88 //for now it is the same; so, fall;) case 0x88: // secrman: __mechacon_auth_0x88 //for now it is the same; so, fall;)
case 0x8F: // secrman: __mechacon_auth_0x8F case 0x8F: // secrman: __mechacon_auth_0x8F
SetResultSize(1); //in:0 SetResultSize(1); //in:0
if (cdvd.mg_datatype == 1) // header data if (cdvd.mg_datatype == 1) // header data
{ {
u64 *psrc, *pdst; u64 *psrc, *pdst;
@ -2477,9 +2476,9 @@ static void cdvdWrite16(u8 rt) // SCOMMAND
} }
Console.WriteLn("[MG] ELF_size=0x%X Hdr_size=0x%X unk=0x%X flags=0x%X count=%d zones=%s", Console.WriteLn("[MG] ELF_size=0x%X Hdr_size=0x%X unk=0x%X flags=0x%X count=%d zones=%s",
*(u32*)&cdvd.mg_buffer[0x10], *(u16*)&cdvd.mg_buffer[0x14], *(u16*)&cdvd.mg_buffer[0x16], *(u32*)&cdvd.mg_buffer[0x10], *(u16*)&cdvd.mg_buffer[0x14], *(u16*)&cdvd.mg_buffer[0x16],
*(u16*)&cdvd.mg_buffer[0x18], *(u16*)&cdvd.mg_buffer[0x1A], *(u16*)&cdvd.mg_buffer[0x18], *(u16*)&cdvd.mg_buffer[0x1A],
zoneStr.c_str()); zoneStr.c_str());
bit_ofs = mg_BIToffset(cdvd.mg_buffer); bit_ofs = mg_BIToffset(cdvd.mg_buffer);
@ -2505,12 +2504,12 @@ static void cdvdWrite16(u8 rt) // SCOMMAND
cdvd.Result[0] = 0; // 0 complete ; 1 busy ; 0x80 error cdvd.Result[0] = 0; // 0 complete ; 1 busy ; 0x80 error
break; break;
case 0x90: // sceMgWriteHeaderStart case 0x90: // sceMgWriteHeaderStart
SetResultSize(1); //in:5 SetResultSize(1); //in:5
cdvd.mg_size = 0; cdvd.mg_size = 0;
cdvd.mg_datatype = 1; //header data cdvd.mg_datatype = 1; //header data
Console.WriteLn("[MG] hcode=%d cnum=%d a2=%d length=0x%X", Console.WriteLn("[MG] hcode=%d cnum=%d a2=%d length=0x%X",
cdvd.Param[0], cdvd.Param[3], cdvd.Param[4], cdvd.mg_maxsize = cdvd.Param[1] | (((int)cdvd.Param[2]) << 8)); cdvd.Param[0], cdvd.Param[3], cdvd.Param[4], cdvd.mg_maxsize = cdvd.Param[1] | (((int)cdvd.Param[2]) << 8));
cdvd.Result[0] = 0; // 0 complete ; 1 busy ; 0x80 error cdvd.Result[0] = 0; // 0 complete ; 1 busy ; 0x80 error
break; break;
@ -2521,7 +2520,7 @@ static void cdvdWrite16(u8 rt) // SCOMMAND
int bit_ofs = mg_BIToffset(cdvd.mg_buffer); int bit_ofs = mg_BIToffset(cdvd.mg_buffer);
memcpy(cdvd.mg_buffer, &cdvd.mg_buffer[bit_ofs], 8 + 16 * cdvd.mg_buffer[bit_ofs + 4]); memcpy(cdvd.mg_buffer, &cdvd.mg_buffer[bit_ofs], 8 + 16 * cdvd.mg_buffer[bit_ofs + 4]);
cdvd.mg_maxsize = 0; // don't allow any write cdvd.mg_maxsize = 0; // don't allow any write
cdvd.mg_size = 8 + 16 * cdvd.mg_buffer[4]; //new offset, i just moved the data cdvd.mg_size = 8 + 16 * cdvd.mg_buffer[4]; //new offset, i just moved the data
Console.WriteLn("[MG] BIT count=%d", cdvd.mg_buffer[4]); Console.WriteLn("[MG] BIT count=%d", cdvd.mg_buffer[4]);
@ -2530,7 +2529,7 @@ static void cdvdWrite16(u8 rt) // SCOMMAND
cdvd.Result[2] = (cdvd.mg_size >> 8) & 0xFF; cdvd.Result[2] = (cdvd.mg_size >> 8) & 0xFF;
break; break;
} }
case 0x92: // sceMgWriteDatainLength case 0x92: // sceMgWriteDatainLength
SetResultSize(1); //in:2 SetResultSize(1); //in:2
cdvd.mg_size = 0; cdvd.mg_size = 0;
cdvd.mg_datatype = 0; //data (encrypted) cdvd.mg_datatype = 0; //data (encrypted)
@ -2538,12 +2537,12 @@ static void cdvdWrite16(u8 rt) // SCOMMAND
cdvd.Result[0] = 0; // 0 complete ; 1 busy ; 0x80 error cdvd.Result[0] = 0; // 0 complete ; 1 busy ; 0x80 error
break; break;
case 0x93: // sceMgWriteDataoutLength case 0x93: // sceMgWriteDataoutLength
SetResultSize(1); //in:2 SetResultSize(1); //in:2
if (((cdvd.Param[0] | (((int)cdvd.Param[1]) << 8)) == cdvd.mg_size) && (cdvd.mg_datatype == 0)) if (((cdvd.Param[0] | (((int)cdvd.Param[1]) << 8)) == cdvd.mg_size) && (cdvd.mg_datatype == 0))
{ {
cdvd.mg_maxsize = 0; // don't allow any write cdvd.mg_maxsize = 0; // don't allow any write
cdvd.Result[0] = 0; // 0 complete ; 1 busy ; 0x80 error cdvd.Result[0] = 0; // 0 complete ; 1 busy ; 0x80 error
} }
else else
{ {
@ -2551,7 +2550,7 @@ static void cdvdWrite16(u8 rt) // SCOMMAND
} }
break; break;
case 0x94: // sceMgReadKbit - read first half of BIT key case 0x94: // sceMgReadKbit - read first half of BIT key
SetResultSize(1 + 8); //in:0 SetResultSize(1 + 8); //in:0
cdvd.Result[0] = 0; cdvd.Result[0] = 0;
@ -2560,7 +2559,7 @@ static void cdvdWrite16(u8 rt) // SCOMMAND
//memcpy(cdvd.Result+1, cdvd.mg_kbit, 8); //memcpy(cdvd.Result+1, cdvd.mg_kbit, 8);
break; break;
case 0x95: // sceMgReadKbit2 - read second half of BIT key case 0x95: // sceMgReadKbit2 - read second half of BIT key
SetResultSize(1 + 8); //in:0 SetResultSize(1 + 8); //in:0
cdvd.Result[0] = 0; cdvd.Result[0] = 0;
((int*)(cdvd.Result + 1))[0] = ((int*)(cdvd.mg_kbit + 8))[0]; ((int*)(cdvd.Result + 1))[0] = ((int*)(cdvd.mg_kbit + 8))[0];
@ -2568,7 +2567,7 @@ static void cdvdWrite16(u8 rt) // SCOMMAND
//memcpy(cdvd.Result+1, cdvd.mg_kbit+8, 8); //memcpy(cdvd.Result+1, cdvd.mg_kbit+8, 8);
break; break;
case 0x96: // sceMgReadKcon - read first half of content key case 0x96: // sceMgReadKcon - read first half of content key
SetResultSize(1 + 8); //in:0 SetResultSize(1 + 8); //in:0
cdvd.Result[0] = 0; cdvd.Result[0] = 0;
((int*)(cdvd.Result + 1))[0] = ((int*)cdvd.mg_kcon)[0]; ((int*)(cdvd.Result + 1))[0] = ((int*)cdvd.mg_kcon)[0];
@ -2576,7 +2575,7 @@ static void cdvdWrite16(u8 rt) // SCOMMAND
//memcpy(cdvd.Result+1, cdvd.mg_kcon, 8); //memcpy(cdvd.Result+1, cdvd.mg_kcon, 8);
break; break;
case 0x97: // sceMgReadKcon2 - read second half of content key case 0x97: // sceMgReadKcon2 - read second half of content key
SetResultSize(1 + 8); //in:0 SetResultSize(1 + 8); //in:0
cdvd.Result[0] = 0; cdvd.Result[0] = 0;
((int*)(cdvd.Result + 1))[0] = ((int*)(cdvd.mg_kcon + 8))[0]; ((int*)(cdvd.Result + 1))[0] = ((int*)(cdvd.mg_kcon + 8))[0];
@ -2586,7 +2585,7 @@ static void cdvdWrite16(u8 rt) // SCOMMAND
default: default:
// fake a 'correct' command // fake a 'correct' command
SetResultSize(1); //in:0 SetResultSize(1); //in:0
cdvd.Result[0] = 0; // 0 complete ; 1 busy ; 0x80 error cdvd.Result[0] = 0; // 0 complete ; 1 busy ; 0x80 error
Console.WriteLn("SCMD Unknown %x", rt); Console.WriteLn("SCMD Unknown %x", rt);
break; break;