mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-04-20 19:45:20 +00:00
cellGameBootCheck Improvements
* size->sysSizeKB returns 4kb. (hw tested, unknown if in different situations this value changes) * Return CELL_GAME_ERROR_BROKEN on failure to init. (hw tested) * Write to dirName only when type is HDD game. (REd) * Don't write to *size on errors, make it happen after *attributes and *type writes. (REd)
This commit is contained in:
parent
37c220af72
commit
1a6e8e20dc
1 changed files with 24 additions and 21 deletions
|
@ -304,21 +304,20 @@ error_code cellGameBootCheck(vm::ptr<u32> type, vm::ptr<u32> attributes, vm::ptr
|
|||
{
|
||||
cellGame.warning("cellGameBootCheck(type=*0x%x, attributes=*0x%x, size=*0x%x, dirName=*0x%x)", type, attributes, size, dirName);
|
||||
|
||||
if (size)
|
||||
{
|
||||
// TODO: Use the free space of the computer's HDD where RPCS3 is being run.
|
||||
size->hddFreeSizeKB = 40 * 1024 * 1024 - 1; // Read explanation in cellHddGameCheck
|
||||
|
||||
// TODO: Calculate data size for HG and DG games, if necessary.
|
||||
size->sizeKB = CELL_GAME_SIZEKB_NOTCALC;
|
||||
size->sysSizeKB = 0;
|
||||
}
|
||||
|
||||
if (!type)
|
||||
if (!type || !attributes)
|
||||
{
|
||||
return CELL_GAME_ERROR_PARAM;
|
||||
}
|
||||
|
||||
const auto perm = g_fxo->get<content_permission>();
|
||||
|
||||
const auto init = perm->init.init();
|
||||
|
||||
if (!init)
|
||||
{
|
||||
return CELL_GAME_ERROR_BROKEN;
|
||||
}
|
||||
|
||||
std::string dir;
|
||||
psf::registry sfo;
|
||||
|
||||
|
@ -334,7 +333,6 @@ error_code cellGameBootCheck(vm::ptr<u32> type, vm::ptr<u32> attributes, vm::ptr
|
|||
{
|
||||
*type = CELL_GAME_GAMETYPE_DISC;
|
||||
*attributes = CELL_GAME_ATTRIBUTE_PATCH; // TODO
|
||||
if (dirName) strcpy_trunc(*dirName, Emu.GetTitleID()); // ???
|
||||
|
||||
sfo = psf::load_object(fs::file(vfs::get(Emu.GetDir() + "PARAM.SFO")));
|
||||
}
|
||||
|
@ -342,19 +340,24 @@ error_code cellGameBootCheck(vm::ptr<u32> type, vm::ptr<u32> attributes, vm::ptr
|
|||
{
|
||||
*type = CELL_GAME_GAMETYPE_HDD;
|
||||
*attributes = 0; // TODO
|
||||
if (dirName) strcpy_trunc(*dirName, Emu.GetTitleID());
|
||||
|
||||
sfo = psf::load_object(fs::file(vfs::get(Emu.GetDir() + "PARAM.SFO")));
|
||||
dir = Emu.GetTitleID();
|
||||
}
|
||||
|
||||
const auto perm = g_fxo->get<content_permission>();
|
||||
|
||||
const auto init = perm->init.init();
|
||||
|
||||
if (!init)
|
||||
if (size)
|
||||
{
|
||||
return CELL_GAME_ERROR_BUSY;
|
||||
// TODO: Use the free space of the computer's HDD where RPCS3 is being run.
|
||||
size->hddFreeSizeKB = 40 * 1024 * 1024 - 1; // Read explanation in cellHddGameCheck
|
||||
|
||||
// TODO: Calculate data size for HG and DG games, if necessary.
|
||||
size->sizeKB = CELL_GAME_SIZEKB_NOTCALC;
|
||||
size->sysSizeKB = 4;
|
||||
}
|
||||
|
||||
if (*type == CELL_GAME_GAMETYPE_HDD && dirName)
|
||||
{
|
||||
strcpy_trunc(*dirName, Emu.GetTitleID());
|
||||
}
|
||||
|
||||
perm->dir = std::move(dir);
|
||||
|
@ -393,7 +396,7 @@ error_code cellGamePatchCheck(vm::ptr<CellGameContentSize> size, vm::ptr<void> r
|
|||
|
||||
if (!init)
|
||||
{
|
||||
return CELL_GAME_ERROR_BUSY;
|
||||
return CELL_GAME_ERROR_BROKEN;
|
||||
}
|
||||
|
||||
perm->dir = Emu.GetTitleID();
|
||||
|
@ -441,7 +444,7 @@ error_code cellGameDataCheck(u32 type, vm::cptr<char> dirName, vm::ptr<CellGameC
|
|||
|
||||
if (!init)
|
||||
{
|
||||
return CELL_GAME_ERROR_BUSY;
|
||||
return CELL_GAME_ERROR_BROKEN;
|
||||
}
|
||||
|
||||
perm->dir = std::move(name);
|
||||
|
|
Loading…
Add table
Reference in a new issue