mirror of
https://github.com/PCSX2/pcsx2.git
synced 2024-10-07 07:23:28 +00:00
CDVD: catch MEC/NVM file exception
It will stop the emulation and open a nice box with an error message instead of terminate PCSX2
This commit is contained in:
parent
deb7121fde
commit
0f1c10230a
@ -1420,9 +1420,10 @@ static __fi void fail_pol_cal()
|
||||
|
||||
static void cdvdWrite16(u8 rt) // SCOMMAND
|
||||
{
|
||||
// cdvdTN diskInfo;
|
||||
// cdvdTD trackInfo;
|
||||
// int i, lbn, type, min, sec, frm, address;
|
||||
try {
|
||||
// cdvdTN diskInfo;
|
||||
// cdvdTD trackInfo;
|
||||
// int i, lbn, type, min, sec, frm, address;
|
||||
int address;
|
||||
u8 tmp;
|
||||
|
||||
@ -1432,10 +1433,10 @@ static void cdvdWrite16(u8 rt) // SCOMMAND
|
||||
cdvd.Result[0] = 0; // assume success -- failures will overwrite this with an error code.
|
||||
|
||||
switch (rt) {
|
||||
// case 0x01: // GetDiscType - from cdvdman (0:1)
|
||||
// SetResultSize(1);
|
||||
// cdvd.Result[0] = 0;
|
||||
// break;
|
||||
// case 0x01: // GetDiscType - from cdvdman (0:1)
|
||||
// SetResultSize(1);
|
||||
// cdvd.Result[0] = 0;
|
||||
// break;
|
||||
|
||||
case 0x02: // CdReadSubQ (0:11)
|
||||
SetResultSize(11);
|
||||
@ -1581,8 +1582,8 @@ static void cdvdWrite16(u8 rt) // SCOMMAND
|
||||
}
|
||||
break;
|
||||
|
||||
// case 0x0C: // sceCdSetHDMode (1:1)
|
||||
// break;
|
||||
// case 0x0C: // sceCdSetHDMode (1:1)
|
||||
// break;
|
||||
|
||||
|
||||
case 0x0F: // sceCdPowerOff (0:1)- Call74 from Xcdvdman
|
||||
@ -1627,8 +1628,8 @@ static void cdvdWrite16(u8 rt) // SCOMMAND
|
||||
cdvdWriteModelNumber(&cdvd.Param[1], cdvd.Param[0]);
|
||||
break;
|
||||
|
||||
// case 0x19: // sceCdForbidRead (0:1) - from xcdvdman
|
||||
// break;
|
||||
// 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
|
||||
@ -1645,8 +1646,8 @@ static void cdvdWrite16(u8 rt) // SCOMMAND
|
||||
cdvd.Result[0] = 0;
|
||||
break;
|
||||
|
||||
// case 0x1D: // cdvdman_call116 (0:5) - In V10 Bios
|
||||
// break;
|
||||
// case 0x1D: // cdvdman_call116 (0:5) - In V10 Bios
|
||||
// break;
|
||||
|
||||
case 0x1E: // sceRemote2Read (0:5) - // 00 14 AA BB CC -> remote key code
|
||||
SetResultSize(5);
|
||||
@ -1657,8 +1658,8 @@ static void cdvdWrite16(u8 rt) // SCOMMAND
|
||||
cdvd.Result[4] = 0x00;
|
||||
break;
|
||||
|
||||
// case 0x1F: // sceRemote2_7 (2:1) - cdvdman_call117
|
||||
// break;
|
||||
// case 0x1F: // sceRemote2_7 (2:1) - cdvdman_call117
|
||||
// break;
|
||||
|
||||
case 0x20: // sceRemote2_6 (0:3) // 00 01 00
|
||||
SetResultSize(3);
|
||||
@ -1667,8 +1668,8 @@ static void cdvdWrite16(u8 rt) // SCOMMAND
|
||||
cdvd.Result[2] = 0x00;
|
||||
break;
|
||||
|
||||
// case 0x21: // sceCdWriteWakeUpTime (8:1)
|
||||
// break;
|
||||
// case 0x21: // sceCdWriteWakeUpTime (8:1)
|
||||
// break;
|
||||
|
||||
case 0x22: // sceCdReadWakeUpTime (0:10)
|
||||
SetResultSize(10);
|
||||
@ -1690,37 +1691,37 @@ static void cdvdWrite16(u8 rt) // SCOMMAND
|
||||
cdvd.Result[0] = 0;
|
||||
break;
|
||||
|
||||
// case 0x25: // cdvdman_call120 (1:1) - In V10 Bios
|
||||
// break;
|
||||
// case 0x25: // cdvdman_call120 (1:1) - In V10 Bios
|
||||
// break;
|
||||
|
||||
// case 0x26: // cdvdman_call128 (0,3) - In V10 Bios
|
||||
// break;
|
||||
// case 0x26: // cdvdman_call128 (0,3) - In V10 Bios
|
||||
// break;
|
||||
|
||||
// case 0x27: // cdvdman_call148 (0:13) - In V10 Bios
|
||||
// break;
|
||||
// case 0x27: // cdvdman_call148 (0:13) - In V10 Bios
|
||||
// break;
|
||||
|
||||
// case 0x28: // cdvdman_call150 (1:1) - In V10 Bios
|
||||
// break;
|
||||
// case 0x28: // cdvdman_call150 (1:1) - In V10 Bios
|
||||
// break;
|
||||
|
||||
case 0x29: //sceCdNoticeGameStart (1:1)
|
||||
SetResultSize(1);
|
||||
cdvd.Result[0] = 0;
|
||||
break;
|
||||
|
||||
// case 0x2C: //sceCdXBSPowerCtl (2:2)
|
||||
// break;
|
||||
// case 0x2C: //sceCdXBSPowerCtl (2:2)
|
||||
// break;
|
||||
|
||||
// case 0x2D: //sceCdXLEDCtl (2:2)
|
||||
// break;
|
||||
// case 0x2D: //sceCdXLEDCtl (2:2)
|
||||
// break;
|
||||
|
||||
// case 0x2E: //sceCdBuzzerCtl (0:1)
|
||||
// break;
|
||||
// case 0x2E: //sceCdBuzzerCtl (0:1)
|
||||
// break;
|
||||
|
||||
// case 0x2F: //cdvdman_call167 (16:1)
|
||||
// break;
|
||||
// case 0x2F: //cdvdman_call167 (16:1)
|
||||
// break;
|
||||
|
||||
// case 0x30: //cdvdman_call169 (1:9)
|
||||
// break;
|
||||
// case 0x30: //cdvdman_call169 (1:9)
|
||||
// break;
|
||||
|
||||
case 0x31: //sceCdSetMediumRemoval (1:1)
|
||||
SetResultSize(1);
|
||||
@ -1733,8 +1734,8 @@ static void cdvdWrite16(u8 rt) // SCOMMAND
|
||||
//cdvd.Result[0] = 0; // fixme: I'm pretty sure that the same variable shouldn't be set twice here. Perhaps cdvd.Result[1]?
|
||||
break;
|
||||
|
||||
// case 0x33: //sceCdXDVRPReset (1:1)
|
||||
// break;
|
||||
// case 0x33: //sceCdXDVRPReset (1:1)
|
||||
// break;
|
||||
|
||||
case 0x36: //cdvdman_call189 [__sceCdReadRegionParams - made up name] (0:15) i think it is 16, not 15
|
||||
SetResultSize(15);
|
||||
@ -1745,14 +1746,14 @@ static void cdvdWrite16(u8 rt) // SCOMMAND
|
||||
cdvd.Result[1] = 1 << cdvd.Result[1]; //encryption zone; see offset 0x1C in encrypted headers
|
||||
//////////////////////////////////////////
|
||||
cdvd.Result[2] = 0; //??
|
||||
// cdvd.Result[3] == ROMVER[4] == *0xBFC7FF04
|
||||
// cdvd.Result[4] == OSDVER[4] == CAP Jjpn, Aeng, Eeng, Heng, Reng, Csch, Kkor?
|
||||
// cdvd.Result[5] == OSDVER[5] == small
|
||||
// cdvd.Result[6] == OSDVER[6] == small
|
||||
// cdvd.Result[7] == OSDVER[7] == small
|
||||
// cdvd.Result[8] == VERSTR[0x22] == *0xBFC7FF52
|
||||
// cdvd.Result[9] == DVDID J U O E A R C M
|
||||
// cdvd.Result[10]== 0; //??
|
||||
// cdvd.Result[3] == ROMVER[4] == *0xBFC7FF04
|
||||
// cdvd.Result[4] == OSDVER[4] == CAP Jjpn, Aeng, Eeng, Heng, Reng, Csch, Kkor?
|
||||
// cdvd.Result[5] == OSDVER[5] == small
|
||||
// cdvd.Result[6] == OSDVER[6] == small
|
||||
// cdvd.Result[7] == OSDVER[7] == small
|
||||
// cdvd.Result[8] == VERSTR[0x22] == *0xBFC7FF52
|
||||
// cdvd.Result[9] == DVDID J U O E A R C M
|
||||
// cdvd.Result[10]== 0; //??
|
||||
cdvd.Result[11] = 0; //??
|
||||
cdvd.Result[12] = 0; //??
|
||||
//////////////////////////////////////////
|
||||
@ -2034,6 +2035,12 @@ static void cdvdWrite16(u8 rt) // SCOMMAND
|
||||
//Console.WriteLn("SCMD - 0x%x\n", rt);
|
||||
cdvd.ParamP = 0;
|
||||
cdvd.ParamC = 0;
|
||||
} catch (Exception::CannotCreateStream& ex) {
|
||||
Cpu->ThrowException(Exception::RuntimeError()
|
||||
.SetDiagMsg(L"Failed to read/write NMV/MEC file.")
|
||||
.SetUserMsg(pxE( L"Failed to read/write NMV/MEC file. Check your bios setup/permission settings"))
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
static __fi void cdvdWrite17(u8 rt) { // SDATAIN
|
||||
|
Loading…
Reference in New Issue
Block a user