mirror of https://github.com/PCSX2/pcsx2.git
clang-format: pcsx2/CDVD/CDVD.cpp
This commit is contained in:
parent
f5a9b98578
commit
0fed1cbedd
|
@ -1,5 +1,5 @@
|
|||
/* 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
|
||||
* 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())
|
||||
throw Exception::CannotCreateStream(filename);
|
||||
|
||||
u8 zero[1024] = { 0 };
|
||||
u8 zero[1024] = {0};
|
||||
fp.Write(zero, sizeof(zero));
|
||||
|
||||
// Write NVM ILink area with dummy data (Age of Empires 2)
|
||||
// Also write language data defaulting to English (Guitar Hero 2)
|
||||
|
||||
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.Write(ILinkID_Data, sizeof(ILinkID_Data));
|
||||
|
@ -198,7 +198,7 @@ static void cdvdNVM(u8* buffer, int offset, size_t bytes, bool read)
|
|||
else
|
||||
{
|
||||
u8 LanguageParams[16];
|
||||
u8 zero[16] = { 0 };
|
||||
u8 zero[16] = {0};
|
||||
NVMLayout* nvmLayout = getNvmLayout();
|
||||
|
||||
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)
|
||||
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)
|
||||
|
@ -557,7 +557,7 @@ void cdvdReadKey(u8, u16, u32 arg2, u8* key)
|
|||
}
|
||||
|
||||
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)
|
||||
|
@ -653,8 +653,7 @@ static s32 cdvdReadDvdDualInfo(s32* dualType, u32* layer1Start)
|
|||
|
||||
static bool cdvdIsDVD()
|
||||
{
|
||||
if (cdvd.Type == CDVD_TYPE_DETCTDVDS || cdvd.Type == CDVD_TYPE_DETCTDVDD
|
||||
|| cdvd.Type == CDVD_TYPE_PS2DVD || cdvd.Type == CDVD_TYPE_DVDV)
|
||||
if (cdvd.Type == CDVD_TYPE_DETCTDVDS || cdvd.Type == CDVD_TYPE_DETCTDVDD || cdvd.Type == CDVD_TYPE_PS2DVD || cdvd.Type == CDVD_TYPE_DVDV)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
|
@ -678,7 +677,7 @@ static int cdvdTrayStateDetecting()
|
|||
return CDVD_TYPE_DETCTDVDS;
|
||||
}
|
||||
|
||||
if(cdvd.Type != CDVD_TYPE_NODISC)
|
||||
if (cdvd.Type != CDVD_TYPE_NODISC)
|
||||
return CDVD_TYPE_DETCTCD;
|
||||
else
|
||||
return CDVD_TYPE_DETCT; //Detecting any kind of disc existing
|
||||
|
@ -759,13 +758,13 @@ static uint cdvdBlockReadTime(CDVD_MODE_TYPE mode)
|
|||
numSectors = 360000;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
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 * cdvd.BlockSize) / ((float)(((mode == MODE_CDROM) ? PSX_CD_READSPEED : PSX_DVD_READSPEED) * cdvd.Speed) * sectorSpeed));
|
||||
}
|
||||
|
||||
|
||||
// CLV Read Speed is constant
|
||||
//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));
|
||||
|
@ -838,7 +837,7 @@ void cdvdNewDiskCB()
|
|||
|
||||
DoCDVDresetDiskTypeCache();
|
||||
cdvdDetectDisk();
|
||||
|
||||
|
||||
// If not ejected but we've swapped source pretend it got ejected
|
||||
if ((g_GameStarted || !g_SkipBiosHack) && cdvd.Tray.trayState != CDVD_DISC_EJECT)
|
||||
{
|
||||
|
@ -852,7 +851,7 @@ void cdvdNewDiskCB()
|
|||
if (cdvd.Type > 0)
|
||||
cdvd.Tray.cdvdActionSeconds = 3;
|
||||
}
|
||||
else if(cdvd.Type > 0)
|
||||
else if (cdvd.Type > 0)
|
||||
{
|
||||
DevCon.WriteLn(Color_Green, L"Seeking new media");
|
||||
cdvd.Ready &= ~CDVD_DRIVE_READY;
|
||||
|
@ -1008,7 +1007,7 @@ __fi void cdvdActionInterrupt()
|
|||
|
||||
case cdvdAction_Standby:
|
||||
DevCon.Warning("CDVD Standby Call");
|
||||
cdvd.Spinning = true; //check (rama)
|
||||
cdvd.Spinning = true; //check (rama)
|
||||
cdvd.Ready |= CDVD_DRIVE_READY; //check (rama)
|
||||
cdvd.Sector = cdvd.SeekToSector;
|
||||
cdvd.Status = CDVD_STATUS_READ;
|
||||
|
@ -1027,12 +1026,12 @@ __fi void cdvdActionInterrupt()
|
|||
case cdvdAction_Break:
|
||||
// Make sure the cdvd action state is pretty well cleared:
|
||||
DevCon.WriteLn("CDVD Break Call");
|
||||
if(!(cdvd.Ready & 0x40))
|
||||
if (!(cdvd.Ready & 0x40))
|
||||
cdvd.Error = 1; // Abort
|
||||
|
||||
cdvd.Reading = 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.RErr = 0;
|
||||
break;
|
||||
|
@ -1102,13 +1101,13 @@ __fi void cdvdReadInterrupt()
|
|||
cdvd.Readed = 1;
|
||||
cdvd.Sector = cdvd.SeekToSector;
|
||||
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);
|
||||
cdvd.Status = CDVD_STATUS_READ;
|
||||
return;
|
||||
}
|
||||
else if(cdvd.Reading)
|
||||
else if (cdvd.Reading)
|
||||
{
|
||||
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_READ; // Time Crisis 2
|
||||
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.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.RetryCntP = 0;
|
||||
|
||||
// setting Readed to 0 skips the seek logic, which means the next call to
|
||||
|
@ -1319,27 +1318,27 @@ void cdvdUpdateTrayState()
|
|||
{
|
||||
switch (cdvd.Tray.trayState)
|
||||
{
|
||||
case CDVD_DISC_EJECT:
|
||||
cdvdCtrlTrayClose();
|
||||
break;
|
||||
case CDVD_DISC_DETECTING:
|
||||
DevCon.WriteLn(Color_Green, L"Seeking new disc");
|
||||
cdvd.Tray.trayState = CDVD_DISC_SEEKING;
|
||||
cdvd.Tray.cdvdActionSeconds = 2;
|
||||
break;
|
||||
case CDVD_DISC_SEEKING:
|
||||
case CDVD_DISC_ENGAGED:
|
||||
cdvd.Tray.trayState = CDVD_DISC_ENGAGED;
|
||||
cdvd.Ready |= CDVD_DRIVE_READY;
|
||||
if (CDVDsys_GetSourceType() != CDVD_SourceType::NoDisc)
|
||||
{
|
||||
DevCon.WriteLn(Color_Green, L"Media ready to read");
|
||||
cdvd.mediaChanged = true;
|
||||
cdvd.Status = CDVD_STATUS_PAUSE;
|
||||
}
|
||||
else
|
||||
cdvd.Status = CDVD_STATUS_STOP;
|
||||
break;
|
||||
case CDVD_DISC_EJECT:
|
||||
cdvdCtrlTrayClose();
|
||||
break;
|
||||
case CDVD_DISC_DETECTING:
|
||||
DevCon.WriteLn(Color_Green, L"Seeking new disc");
|
||||
cdvd.Tray.trayState = CDVD_DISC_SEEKING;
|
||||
cdvd.Tray.cdvdActionSeconds = 2;
|
||||
break;
|
||||
case CDVD_DISC_SEEKING:
|
||||
case CDVD_DISC_ENGAGED:
|
||||
cdvd.Tray.trayState = CDVD_DISC_ENGAGED;
|
||||
cdvd.Ready |= CDVD_DRIVE_READY;
|
||||
if (CDVDsys_GetSourceType() != CDVD_SourceType::NoDisc)
|
||||
{
|
||||
DevCon.WriteLn(Color_Green, L"Media ready to read");
|
||||
cdvd.mediaChanged = true;
|
||||
cdvd.Status = CDVD_STATUS_PAUSE;
|
||||
}
|
||||
else
|
||||
cdvd.Status = CDVD_STATUS_STOP;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1551,7 +1550,7 @@ static void cdvdWrite04(u8 rt)
|
|||
switch (rt)
|
||||
{
|
||||
case N_CD_SYNC: // CdSync
|
||||
case N_CD_NOP: // CdNop_
|
||||
case N_CD_NOP: // CdNop_
|
||||
cdvdSetIrq();
|
||||
break;
|
||||
|
||||
|
@ -1732,7 +1731,7 @@ static void cdvdWrite04(u8 rt)
|
|||
if (EmuConfig.CdvdVerboseReads)
|
||||
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.ReadTime = cdvdBlockReadTime(MODE_CDROM);
|
||||
CDVDREAD_INT(cdvdStartSeek(cdvd.SeekToSector, MODE_CDROM));
|
||||
|
||||
|
@ -1746,7 +1745,7 @@ static void cdvdWrite04(u8 rt)
|
|||
// this'll skip the seek delay.
|
||||
cdvd.Reading = 1;
|
||||
break;
|
||||
|
||||
|
||||
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].
|
||||
cdvd.SeekToSector = *(u32*)(cdvd.Param + 0);
|
||||
|
@ -1758,7 +1757,7 @@ static void cdvdWrite04(u8 rt)
|
|||
cdvd.RetryCnt = cdvd.Param[8];
|
||||
|
||||
cdvd.SpindlCtrl = cdvd.Param[9];
|
||||
|
||||
|
||||
switch (cdvd.SpindlCtrl & CDVD_SPINDLE_SPEED)
|
||||
{
|
||||
case 0: // Will use current speed
|
||||
|
@ -1782,11 +1781,11 @@ static void cdvdWrite04(u8 rt)
|
|||
cdvd.BlockSize = 2064;
|
||||
|
||||
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)
|
||||
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);
|
||||
CDVDREAD_INT(cdvdStartSeek(cdvd.SeekToSector, MODE_DVDROM));
|
||||
|
@ -2175,8 +2174,8 @@ static void cdvdWrite16(u8 rt) // SCOMMAND
|
|||
// case 0x19: // sceCdForbidRead (0:1) - from xcdvdman
|
||||
// break;
|
||||
|
||||
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
|
||||
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
|
||||
cdvd.Result[0] = 1; //i guess that means okay
|
||||
break;
|
||||
|
||||
|
@ -2243,7 +2242,7 @@ static void cdvdWrite16(u8 rt) // SCOMMAND
|
|||
|
||||
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);
|
||||
cdvd.Result[0] = 0;
|
||||
cdvd.Result[1] = DiscSerial[0];
|
||||
|
@ -2364,29 +2363,29 @@ static void cdvdWrite16(u8 rt) // SCOMMAND
|
|||
cdvd.Result[0] = 0;
|
||||
break;
|
||||
|
||||
case 0x80: // secrman: __mechacon_auth_0x80
|
||||
SetResultSize(1); //in:1
|
||||
case 0x80: // secrman: __mechacon_auth_0x80
|
||||
SetResultSize(1); //in:1
|
||||
cdvd.mg_datatype = 0; //data
|
||||
cdvd.Result[0] = 0;
|
||||
break;
|
||||
|
||||
case 0x81: // secrman: __mechacon_auth_0x81
|
||||
SetResultSize(1); //in:1
|
||||
case 0x81: // secrman: __mechacon_auth_0x81
|
||||
SetResultSize(1); //in:1
|
||||
cdvd.mg_datatype = 0; //data
|
||||
cdvd.Result[0] = 0;
|
||||
break;
|
||||
|
||||
case 0x82: // secrman: __mechacon_auth_0x82
|
||||
case 0x82: // secrman: __mechacon_auth_0x82
|
||||
SetResultSize(1); //in:16
|
||||
cdvd.Result[0] = 0;
|
||||
break;
|
||||
|
||||
case 0x83: // secrman: __mechacon_auth_0x83
|
||||
case 0x83: // secrman: __mechacon_auth_0x83
|
||||
SetResultSize(1); //in:8
|
||||
cdvd.Result[0] = 0;
|
||||
break;
|
||||
|
||||
case 0x84: // secrman: __mechacon_auth_0x84
|
||||
case 0x84: // secrman: __mechacon_auth_0x84
|
||||
SetResultSize(1 + 8 + 4); //in:0
|
||||
cdvd.Result[0] = 0;
|
||||
|
||||
|
@ -2405,7 +2404,7 @@ static void cdvdWrite16(u8 rt) // SCOMMAND
|
|||
cdvd.Result[12] = 0x9b;
|
||||
break;
|
||||
|
||||
case 0x85: // secrman: __mechacon_auth_0x85
|
||||
case 0x85: // secrman: __mechacon_auth_0x85
|
||||
SetResultSize(1 + 4 + 8); //in:0
|
||||
cdvd.Result[0] = 0;
|
||||
|
||||
|
@ -2424,17 +2423,17 @@ static void cdvdWrite16(u8 rt) // SCOMMAND
|
|||
cdvd.Result[12] = 0xa3;
|
||||
break;
|
||||
|
||||
case 0x86: // secrman: __mechacon_auth_0x86
|
||||
case 0x86: // secrman: __mechacon_auth_0x86
|
||||
SetResultSize(1); //in:16
|
||||
cdvd.Result[0] = 0;
|
||||
break;
|
||||
|
||||
case 0x87: // secrman: __mechacon_auth_0x87
|
||||
case 0x87: // secrman: __mechacon_auth_0x87
|
||||
SetResultSize(1); //in:8
|
||||
cdvd.Result[0] = 0;
|
||||
break;
|
||||
|
||||
case 0x8D: // sceMgWriteData
|
||||
case 0x8D: // sceMgWriteData
|
||||
SetResultSize(1); //in:length<=16
|
||||
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);
|
||||
break;
|
||||
|
||||
case 0x88: // secrman: __mechacon_auth_0x88 //for now it is the same; so, fall;)
|
||||
case 0x8F: // secrman: __mechacon_auth_0x8F
|
||||
SetResultSize(1); //in:0
|
||||
case 0x88: // secrman: __mechacon_auth_0x88 //for now it is the same; so, fall;)
|
||||
case 0x8F: // secrman: __mechacon_auth_0x8F
|
||||
SetResultSize(1); //in:0
|
||||
if (cdvd.mg_datatype == 1) // header data
|
||||
{
|
||||
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",
|
||||
*(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],
|
||||
zoneStr.c_str());
|
||||
*(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],
|
||||
zoneStr.c_str());
|
||||
|
||||
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
|
||||
break;
|
||||
|
||||
case 0x90: // sceMgWriteHeaderStart
|
||||
case 0x90: // sceMgWriteHeaderStart
|
||||
SetResultSize(1); //in:5
|
||||
cdvd.mg_size = 0;
|
||||
cdvd.mg_datatype = 1; //header data
|
||||
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
|
||||
break;
|
||||
|
@ -2521,7 +2520,7 @@ static void cdvdWrite16(u8 rt) // SCOMMAND
|
|||
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]);
|
||||
|
||||
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
|
||||
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;
|
||||
break;
|
||||
}
|
||||
case 0x92: // sceMgWriteDatainLength
|
||||
case 0x92: // sceMgWriteDatainLength
|
||||
SetResultSize(1); //in:2
|
||||
cdvd.mg_size = 0;
|
||||
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
|
||||
break;
|
||||
|
||||
case 0x93: // sceMgWriteDataoutLength
|
||||
case 0x93: // sceMgWriteDataoutLength
|
||||
SetResultSize(1); //in:2
|
||||
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.Result[0] = 0; // 0 complete ; 1 busy ; 0x80 error
|
||||
cdvd.Result[0] = 0; // 0 complete ; 1 busy ; 0x80 error
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -2551,7 +2550,7 @@ static void cdvdWrite16(u8 rt) // SCOMMAND
|
|||
}
|
||||
break;
|
||||
|
||||
case 0x94: // sceMgReadKbit - read first half of BIT key
|
||||
case 0x94: // sceMgReadKbit - read first half of BIT key
|
||||
SetResultSize(1 + 8); //in:0
|
||||
cdvd.Result[0] = 0;
|
||||
|
||||
|
@ -2560,7 +2559,7 @@ static void cdvdWrite16(u8 rt) // SCOMMAND
|
|||
//memcpy(cdvd.Result+1, cdvd.mg_kbit, 8);
|
||||
break;
|
||||
|
||||
case 0x95: // sceMgReadKbit2 - read second half of BIT key
|
||||
case 0x95: // sceMgReadKbit2 - read second half of BIT key
|
||||
SetResultSize(1 + 8); //in:0
|
||||
cdvd.Result[0] = 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);
|
||||
break;
|
||||
|
||||
case 0x96: // sceMgReadKcon - read first half of content key
|
||||
case 0x96: // sceMgReadKcon - read first half of content key
|
||||
SetResultSize(1 + 8); //in:0
|
||||
cdvd.Result[0] = 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);
|
||||
break;
|
||||
|
||||
case 0x97: // sceMgReadKcon2 - read second half of content key
|
||||
case 0x97: // sceMgReadKcon2 - read second half of content key
|
||||
SetResultSize(1 + 8); //in:0
|
||||
cdvd.Result[0] = 0;
|
||||
((int*)(cdvd.Result + 1))[0] = ((int*)(cdvd.mg_kcon + 8))[0];
|
||||
|
@ -2586,7 +2585,7 @@ static void cdvdWrite16(u8 rt) // SCOMMAND
|
|||
|
||||
default:
|
||||
// fake a 'correct' command
|
||||
SetResultSize(1); //in:0
|
||||
SetResultSize(1); //in:0
|
||||
cdvd.Result[0] = 0; // 0 complete ; 1 busy ; 0x80 error
|
||||
Console.WriteLn("SCMD Unknown %x", rt);
|
||||
break;
|
||||
|
|
Loading…
Reference in New Issue